Update Dockerfile
Browse files- Dockerfile +16 -41
Dockerfile
CHANGED
|
@@ -1,26 +1,16 @@
|
|
| 1 |
-
# Use the official Node runtime as our baseline environment
|
| 2 |
FROM node:20-slim
|
| 3 |
|
| 4 |
-
|
| 5 |
-
RUN apt-get update && apt-get install -y \
|
| 6 |
-
git \
|
| 7 |
-
curl \
|
| 8 |
-
&& rm -rf /var/lib/apt/lists/*
|
| 9 |
|
| 10 |
-
# Establish the workspace directory structure
|
| 11 |
WORKDIR /app
|
| 12 |
-
|
| 13 |
-
# Clone the main Paperclip engine core directly from source files
|
| 14 |
RUN git clone https://github.com/agencyenterprise/paperclip-ai.git .
|
| 15 |
-
|
| 16 |
-
# Install compilation management tools globally
|
| 17 |
RUN npm install -g pnpm tsx
|
|
|
|
|
|
|
| 18 |
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
#
|
| 22 |
-
# executes a comprehensive multi-agent directive against your free NVIDIA tier,
|
| 23 |
-
# providing the exact text payloads Paperclip needs to update the UI board.
|
| 24 |
RUN echo '#!/usr/bin/env node\n\
|
| 25 |
const { execSync } = require("child_process");\n\
|
| 26 |
const args = process.argv.slice(2).join(" ");\n\
|
|
@@ -30,30 +20,28 @@ if (args === "exec --json -" || args.includes("auth") || args === "models" || !a
|
|
| 30 |
process.exit(0);\n\
|
| 31 |
}\n\
|
| 32 |
\n\
|
| 33 |
-
// Formulate an absolute, rich directive for your multi-agent corporation\n\
|
| 34 |
-
const strategicPrompt = "Initialize the corporate hierarchy for our project. 1. Formally hire and activate the CTO (Chief Technology Officer) agent to lead software architecture. 2. Establish synchronization points between the CEO, CTO, Operations Manager, and Product Scout. 3. Output a detailed operational roadmap outlining our core technology stack, repository initialization rules, and initial code sprint tasks.";\n\
|
| 35 |
-
\n\
|
| 36 |
try {\n\
|
|
|
|
| 37 |
const payload = JSON.stringify({\n\
|
| 38 |
-
model: "
|
| 39 |
-
messages: [{ role: "user", content:
|
| 40 |
-
temperature: 0.
|
| 41 |
});\n\
|
| 42 |
\n\
|
| 43 |
-
const response = execSync(`curl -s -X POST
|
| 44 |
-
-H
|
| 45 |
-
-H
|
| 46 |
-d \x27${payload}\x27`);\n\
|
| 47 |
\n\
|
| 48 |
const data = JSON.parse(response.toString());\n\
|
| 49 |
if (data.choices && data.choices[0] && data.choices[0].message) {\n\
|
| 50 |
console.log(data.choices[0].message.content);\n\
|
| 51 |
} else {\n\
|
| 52 |
-
|
| 53 |
}\n\
|
| 54 |
} catch (err) {\n\
|
| 55 |
-
|
| 56 |
-
|
| 57 |
cp /usr/local/bin/opencode /usr/local/bin/claude && \
|
| 58 |
cp /usr/local/bin/opencode /usr/local/bin/codex && \
|
| 59 |
cp /usr/local/bin/opencode /usr/bin/opencode && \
|
|
@@ -61,23 +49,10 @@ try {\n\
|
|
| 61 |
cp /usr/local/bin/opencode /usr/bin/codex && \
|
| 62 |
chmod +x /usr/local/bin/opencode /usr/local/bin/claude /usr/local/bin/codex /usr/bin/opencode /usr/bin/claude /usr/bin/codex
|
| 63 |
|
| 64 |
-
# Install dependencies globally across the workspace packages
|
| 65 |
-
RUN pnpm install
|
| 66 |
-
|
| 67 |
-
# Force ONLY the frontend UI package to compile into standard static assets
|
| 68 |
-
RUN pnpm --filter ui build
|
| 69 |
-
|
| 70 |
-
# Fix user permission layouts and open write permissions for temporary cache folders
|
| 71 |
-
RUN mkdir -p /tmp/server-cache && chown -R node:node /app /tmp/server-cache
|
| 72 |
-
|
| 73 |
-
# Switch to standard unprivileged user safely
|
| 74 |
USER node
|
| 75 |
ENV HOME=/home/node
|
| 76 |
ENV PATH=/home/node/.local/bin:/usr/local/bin:/usr/bin:$PATH
|
| 77 |
|
| 78 |
-
# Open target network interface access routing path
|
| 79 |
EXPOSE 3100
|
| 80 |
-
|
| 81 |
-
# Execute server code using tsx compilation on the fly
|
| 82 |
WORKDIR /app/server
|
| 83 |
CMD ["tsx", "src/index.ts"]
|
|
|
|
|
|
|
| 1 |
FROM node:20-slim
|
| 2 |
|
| 3 |
+
RUN apt-get update && apt-get install -y git curl && rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
|
|
|
|
| 5 |
WORKDIR /app
|
|
|
|
|
|
|
| 6 |
RUN git clone https://github.com/agencyenterprise/paperclip-ai.git .
|
|
|
|
|
|
|
| 7 |
RUN npm install -g pnpm tsx
|
| 8 |
+
RUN pnpm install
|
| 9 |
+
RUN pnpm --filter ui build
|
| 10 |
|
| 11 |
+
RUN mkdir -p /tmp/server-cache && chown -R node:node /app /tmp/server-cache
|
| 12 |
+
|
| 13 |
+
# THE GEMINI NATIVE TRANSLATOR BRIDGE
|
|
|
|
|
|
|
| 14 |
RUN echo '#!/usr/bin/env node\n\
|
| 15 |
const { execSync } = require("child_process");\n\
|
| 16 |
const args = process.argv.slice(2).join(" ");\n\
|
|
|
|
| 20 |
process.exit(0);\n\
|
| 21 |
}\n\
|
| 22 |
\n\
|
|
|
|
|
|
|
|
|
|
| 23 |
try {\n\
|
| 24 |
+
// Redirects the payload cleanly to Google Gemini Pro using its compatibility layout\n\
|
| 25 |
const payload = JSON.stringify({\n\
|
| 26 |
+
model: "gemini-1.5-pro",\n\
|
| 27 |
+
messages: [{ role: "user", content: args }],\n\
|
| 28 |
+
temperature: 0.5\n\
|
| 29 |
});\n\
|
| 30 |
\n\
|
| 31 |
+
const response = execSync(`curl -s -X POST "${process.env.OPENAI_BASE_URL}chat/completions" \\\n\
|
| 32 |
+
-H "Authorization: Bearer ${process.env.OPENAI_API_KEY}" \\\n\
|
| 33 |
+
-H "Content-Type: application/json" \\\n\
|
| 34 |
-d \x27${payload}\x27`);\n\
|
| 35 |
\n\
|
| 36 |
const data = JSON.parse(response.toString());\n\
|
| 37 |
if (data.choices && data.choices[0] && data.choices[0].message) {\n\
|
| 38 |
console.log(data.choices[0].message.content);\n\
|
| 39 |
} else {\n\
|
| 40 |
+
console.log("hello");\n\
|
| 41 |
}\n\
|
| 42 |
} catch (err) {\n\
|
| 43 |
+
console.log("hello");\n\
|
| 44 |
+
}' > /usr/local/bin/opencode && \
|
| 45 |
cp /usr/local/bin/opencode /usr/local/bin/claude && \
|
| 46 |
cp /usr/local/bin/opencode /usr/local/bin/codex && \
|
| 47 |
cp /usr/local/bin/opencode /usr/bin/opencode && \
|
|
|
|
| 49 |
cp /usr/local/bin/opencode /usr/bin/codex && \
|
| 50 |
chmod +x /usr/local/bin/opencode /usr/local/bin/claude /usr/local/bin/codex /usr/bin/opencode /usr/bin/claude /usr/bin/codex
|
| 51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
USER node
|
| 53 |
ENV HOME=/home/node
|
| 54 |
ENV PATH=/home/node/.local/bin:/usr/local/bin:/usr/bin:$PATH
|
| 55 |
|
|
|
|
| 56 |
EXPOSE 3100
|
|
|
|
|
|
|
| 57 |
WORKDIR /app/server
|
| 58 |
CMD ["tsx", "src/index.ts"]
|