@1claw/cli 0.35.1 → 0.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -3
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +262 -63
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/docker/base/Dockerfile +7 -1
- package/dist/src/docker/base/chat-ui/server.js +127 -7
- package/dist/src/lib/container-config.d.ts +10 -1
- package/dist/src/lib/container-config.d.ts.map +1 -1
- package/dist/src/lib/container-config.js +11 -2
- package/dist/src/lib/container-config.js.map +1 -1
- package/dist/src/lib/daemon-control.d.ts +6 -0
- package/dist/src/lib/daemon-control.d.ts.map +1 -1
- package/dist/src/lib/daemon-control.js +38 -1
- package/dist/src/lib/daemon-control.js.map +1 -1
- package/dist/src/lib/docker-client.d.ts +2 -0
- package/dist/src/lib/docker-client.d.ts.map +1 -1
- package/dist/src/lib/docker-client.js +17 -0
- package/dist/src/lib/docker-client.js.map +1 -1
- package/dist/src/lib/image-build.d.ts +8 -1
- package/dist/src/lib/image-build.d.ts.map +1 -1
- package/dist/src/lib/image-build.js +27 -5
- package/dist/src/lib/image-build.js.map +1 -1
- package/dist/src/secret-proxy.d.ts +7 -0
- package/dist/src/secret-proxy.d.ts.map +1 -1
- package/dist/src/secret-proxy.js +25 -18
- package/dist/src/secret-proxy.js.map +1 -1
- package/package.json +1 -1
|
@@ -18,7 +18,33 @@ const MODULES = (process.env.ONECLAW_CONTAINER_MODULES || "")
|
|
|
18
18
|
.split(",")
|
|
19
19
|
.map((m) => m.trim())
|
|
20
20
|
.filter(Boolean);
|
|
21
|
-
const MODE = process.env.
|
|
21
|
+
const MODE = process.env.ONECLAW_MODE
|
|
22
|
+
? process.env.ONECLAW_MODE
|
|
23
|
+
: process.env.ONECLAW_LOCAL_VAULT === "true"
|
|
24
|
+
? "local"
|
|
25
|
+
: "cloud";
|
|
26
|
+
|
|
27
|
+
// ── LLM via Shroud (trust-preserving) ───────────────────────────────────────
|
|
28
|
+
// The container NEVER holds the agent key. When configured, chat messages are
|
|
29
|
+
// POSTed to the host daemon's /proxy, which injects the X-Shroud-Agent-Key
|
|
30
|
+
// header toward Shroud and returns only the model's response. The raw key never
|
|
31
|
+
// enters this process.
|
|
32
|
+
const LLM_VIA_SHROUD = process.env.ONECLAW_LLM_VIA_SHROUD === "true";
|
|
33
|
+
const SHROUD_URL = (process.env.ONECLAW_SHROUD_URL || "https://shroud.1claw.xyz").replace(/\/+$/, "");
|
|
34
|
+
const SHROUD_SECRET = process.env.ONECLAW_SHROUD_SECRET || "";
|
|
35
|
+
// Optional BYOK provider key secret. When set, the daemon also injects it as
|
|
36
|
+
// the X-Shroud-Api-Key header (the container never sees the value).
|
|
37
|
+
const SHROUD_API_KEY_SECRET = process.env.ONECLAW_SHROUD_API_KEY_SECRET || "";
|
|
38
|
+
const SHROUD_PROVIDER = process.env.ONECLAW_SHROUD_PROVIDER || "openai";
|
|
39
|
+
const SHROUD_MODEL = process.env.ONECLAW_SHROUD_MODEL || "gpt-4o-mini";
|
|
40
|
+
const SYSTEM_PROMPT =
|
|
41
|
+
process.env.ONECLAW_SHROUD_SYSTEM_PROMPT ||
|
|
42
|
+
"You are a helpful AI agent running inside a 1Claw secure container. Your credentials are held by the host daemon and never exposed to you.";
|
|
43
|
+
|
|
44
|
+
// Short in-memory conversation history (newest last), capped to keep prompts small.
|
|
45
|
+
const HISTORY_MAX = 20;
|
|
46
|
+
/** @type {{role: string, content: string}[]} */
|
|
47
|
+
const conversation = [];
|
|
22
48
|
|
|
23
49
|
let INDEX_HTML = "<h1>1Claw Agent Running</h1>";
|
|
24
50
|
try {
|
|
@@ -94,7 +120,6 @@ function readBody(req) {
|
|
|
94
120
|
}
|
|
95
121
|
|
|
96
122
|
async function daemonReachable() {
|
|
97
|
-
if (MODE !== "local") return false;
|
|
98
123
|
try {
|
|
99
124
|
const r = await daemonRequest("GET", "/health");
|
|
100
125
|
return r.status === 200;
|
|
@@ -103,15 +128,83 @@ async function daemonReachable() {
|
|
|
103
128
|
}
|
|
104
129
|
}
|
|
105
130
|
|
|
106
|
-
|
|
107
|
-
|
|
131
|
+
/**
|
|
132
|
+
* Send the conversation to Shroud via the host daemon's /proxy. The daemon
|
|
133
|
+
* injects the X-Shroud-Agent-Key header; Shroud inspects, applies policy, and
|
|
134
|
+
* (when 1Claw LLM token billing is enabled for the org) routes through the
|
|
135
|
+
* Stripe AI Gateway. Returns the assistant's text or an error string.
|
|
136
|
+
*/
|
|
137
|
+
async function shroudChat(userText) {
|
|
138
|
+
const messages = [
|
|
139
|
+
{ role: "system", content: SYSTEM_PROMPT },
|
|
140
|
+
...conversation,
|
|
141
|
+
{ role: "user", content: userText },
|
|
142
|
+
];
|
|
143
|
+
const proxyBody = {
|
|
144
|
+
secretName: SHROUD_SECRET,
|
|
145
|
+
url: `${SHROUD_URL}/v1/chat/completions`,
|
|
146
|
+
method: "POST",
|
|
147
|
+
headers: {
|
|
148
|
+
"Content-Type": "application/json",
|
|
149
|
+
"X-Shroud-Provider": SHROUD_PROVIDER,
|
|
150
|
+
},
|
|
151
|
+
body: JSON.stringify({ model: SHROUD_MODEL, messages }),
|
|
152
|
+
};
|
|
153
|
+
// BYOK: have the daemon also inject the provider key as X-Shroud-Api-Key.
|
|
154
|
+
if (SHROUD_API_KEY_SECRET) {
|
|
155
|
+
proxyBody.injectSecrets = [SHROUD_API_KEY_SECRET];
|
|
156
|
+
}
|
|
157
|
+
const r = await daemonRequest("POST", "/proxy", proxyBody);
|
|
158
|
+
|
|
159
|
+
if (r.status !== 200) {
|
|
160
|
+
const detail = r.body && (r.body.error || JSON.stringify(r.body));
|
|
161
|
+
return { ok: false, reply: `Daemon refused the LLM call (${r.status}): ${detail}` };
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// The daemon returns the upstream response: { status, headers, body }.
|
|
165
|
+
const upstreamStatus = r.body.status;
|
|
166
|
+
let upstream;
|
|
167
|
+
try {
|
|
168
|
+
upstream = typeof r.body.body === "string" ? JSON.parse(r.body.body) : r.body.body;
|
|
169
|
+
} catch {
|
|
170
|
+
upstream = { raw: r.body.body };
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (upstreamStatus !== 200) {
|
|
174
|
+
const msg =
|
|
175
|
+
(upstream && upstream.error && (upstream.error.message || upstream.error)) ||
|
|
176
|
+
(upstream && upstream.raw) ||
|
|
177
|
+
JSON.stringify(upstream);
|
|
178
|
+
return { ok: false, reply: `Shroud/upstream returned ${upstreamStatus}: ${msg}` };
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const content =
|
|
182
|
+
upstream &&
|
|
183
|
+
upstream.choices &&
|
|
184
|
+
upstream.choices[0] &&
|
|
185
|
+
upstream.choices[0].message &&
|
|
186
|
+
upstream.choices[0].message.content;
|
|
187
|
+
|
|
188
|
+
if (!content) {
|
|
189
|
+
return { ok: false, reply: `No content in model response: ${JSON.stringify(upstream).slice(0, 400)}` };
|
|
190
|
+
}
|
|
191
|
+
return { ok: true, reply: String(content) };
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// A minimal assistant. Slash commands demonstrate the daemon trust boundary;
|
|
195
|
+
// free-text messages are answered by an LLM via Shroud when configured.
|
|
108
196
|
async function handleChat(message) {
|
|
109
197
|
const text = (message || "").trim();
|
|
110
198
|
|
|
111
199
|
if (text === "/help" || text === "") {
|
|
200
|
+
const llmLine = LLM_VIA_SHROUD
|
|
201
|
+
? `LLM is wired via Shroud (${SHROUD_PROVIDER}/${SHROUD_MODEL}) — just type a message to chat.\n`
|
|
202
|
+
: "No LLM is wired — only the commands below work in this container.\n";
|
|
112
203
|
return {
|
|
113
204
|
reply:
|
|
114
|
-
"1Claw agent ready
|
|
205
|
+
"1Claw agent ready.\n" +
|
|
206
|
+
llmLine +
|
|
207
|
+
"Commands:\n" +
|
|
115
208
|
" /secrets — list secret names available via the daemon\n" +
|
|
116
209
|
" /info — show this agent's runtime info\n" +
|
|
117
210
|
" /proxy <name> <url> — make a request with the secret injected by the daemon\n" +
|
|
@@ -121,8 +214,11 @@ async function handleChat(message) {
|
|
|
121
214
|
}
|
|
122
215
|
|
|
123
216
|
if (text === "/info") {
|
|
217
|
+
const llm = LLM_VIA_SHROUD
|
|
218
|
+
? ` · llm=shroud:${SHROUD_PROVIDER}/${SHROUD_MODEL}`
|
|
219
|
+
: " · llm=none";
|
|
124
220
|
return {
|
|
125
|
-
reply: `Agent ${AGENT_ID || "(local)"} · mode=${MODE} · modules=${MODULES.join(", ") || "none"}`,
|
|
221
|
+
reply: `Agent ${AGENT_ID || "(local)"} · mode=${MODE} · modules=${MODULES.join(", ") || "none"}${llm}`,
|
|
126
222
|
tool: "info",
|
|
127
223
|
};
|
|
128
224
|
}
|
|
@@ -170,11 +266,27 @@ async function handleChat(message) {
|
|
|
170
266
|
}
|
|
171
267
|
}
|
|
172
268
|
|
|
269
|
+
// Free-text → LLM via Shroud (if wired). The container never sees the key.
|
|
270
|
+
if (LLM_VIA_SHROUD && SHROUD_SECRET) {
|
|
271
|
+
try {
|
|
272
|
+
const out = await shroudChat(text);
|
|
273
|
+
if (out.ok) {
|
|
274
|
+
conversation.push({ role: "user", content: text });
|
|
275
|
+
conversation.push({ role: "assistant", content: out.reply });
|
|
276
|
+
while (conversation.length > HISTORY_MAX) conversation.shift();
|
|
277
|
+
return { reply: out.reply, tool: "shroud_llm" };
|
|
278
|
+
}
|
|
279
|
+
return { reply: out.reply, tool: "shroud_llm" };
|
|
280
|
+
} catch (err) {
|
|
281
|
+
return { reply: `Could not reach the daemon for LLM call: ${err.message}`, tool: "shroud_llm" };
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
173
285
|
return {
|
|
174
286
|
reply:
|
|
175
287
|
"No LLM provider is configured in this container yet. " +
|
|
176
288
|
"Try /help, /secrets, /info, or /proxy. " +
|
|
177
|
-
"
|
|
289
|
+
"Run with a cloud agent (Shroud) or wire a model via a module to enable conversational replies.",
|
|
178
290
|
tool: null,
|
|
179
291
|
};
|
|
180
292
|
}
|
|
@@ -192,6 +304,14 @@ const server = http.createServer(async (req, res) => {
|
|
|
192
304
|
agentId: AGENT_ID || null,
|
|
193
305
|
modules: MODULES,
|
|
194
306
|
mode: MODE,
|
|
307
|
+
llm: LLM_VIA_SHROUD
|
|
308
|
+
? {
|
|
309
|
+
via: "shroud",
|
|
310
|
+
provider: SHROUD_PROVIDER,
|
|
311
|
+
model: SHROUD_MODEL,
|
|
312
|
+
keySource: SHROUD_API_KEY_SECRET ? "byok-local" : "cloud-or-billing",
|
|
313
|
+
}
|
|
314
|
+
: null,
|
|
195
315
|
daemonReachable: await daemonReachable(),
|
|
196
316
|
});
|
|
197
317
|
}
|
|
@@ -34,7 +34,16 @@ export declare function saveContainerState(state: ContainerState): void;
|
|
|
34
34
|
export declare function loadContainerState(name: string): ContainerState | null;
|
|
35
35
|
export declare function deleteContainerState(name: string): boolean;
|
|
36
36
|
export declare function listContainerStates(): ContainerState[];
|
|
37
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Check whether a TCP port is free to publish a container on.
|
|
39
|
+
*
|
|
40
|
+
* Binds `0.0.0.0` (all interfaces) to match how Docker publishes ports
|
|
41
|
+
* (`-p host:container` binds `0.0.0.0` by default). Binding `127.0.0.1`
|
|
42
|
+
* here is NOT sufficient: on macOS a loopback-only listen can succeed even
|
|
43
|
+
* while Docker already holds `0.0.0.0:<port>`, which let `findAvailablePort`
|
|
44
|
+
* hand back a port that `docker run` then rejected with
|
|
45
|
+
* "Bind for 0.0.0.0:<port> failed: port is already allocated".
|
|
46
|
+
*/
|
|
38
47
|
export declare function isPortAvailable(port: number): Promise<boolean>;
|
|
39
48
|
/** Find the first available port at or after `start` (bounded search). */
|
|
40
49
|
export declare function findAvailablePort(start: number): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-config.d.ts","sourceRoot":"","sources":["../../../src/lib/container-config.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,cAAc,QAAiC,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oEAAoE;IACpE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,oDAAoD;IACpD,UAAU,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;CACL;AAYD,4DAA4D;AAC5D,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,gDAAgD;AAChD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAS9D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAQtE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK1D;AAED,wBAAgB,mBAAmB,IAAI,cAAc,EAAE,CAgBtD;AAED
|
|
1
|
+
{"version":3,"file":"container-config.d.ts","sourceRoot":"","sources":["../../../src/lib/container-config.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,cAAc,QAAiC,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oEAAoE;IACpE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,oDAAoD;IACpD,UAAU,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;CACL;AAYD,4DAA4D;AAC5D,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,gDAAgD;AAChD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAS9D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAQtE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK1D;AAED,wBAAgB,mBAAmB,IAAI,cAAc,EAAE,CAgBtD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS9D;AAED,0EAA0E;AAC1E,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOtE;AAED,8DAA8D;AAC9D,eAAO,MAAM,aAAa,kBAAkB,CAAC"}
|
|
@@ -74,7 +74,16 @@ export function listContainerStates() {
|
|
|
74
74
|
}
|
|
75
75
|
return states.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
|
|
76
76
|
}
|
|
77
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* Check whether a TCP port is free to publish a container on.
|
|
79
|
+
*
|
|
80
|
+
* Binds `0.0.0.0` (all interfaces) to match how Docker publishes ports
|
|
81
|
+
* (`-p host:container` binds `0.0.0.0` by default). Binding `127.0.0.1`
|
|
82
|
+
* here is NOT sufficient: on macOS a loopback-only listen can succeed even
|
|
83
|
+
* while Docker already holds `0.0.0.0:<port>`, which let `findAvailablePort`
|
|
84
|
+
* hand back a port that `docker run` then rejected with
|
|
85
|
+
* "Bind for 0.0.0.0:<port> failed: port is already allocated".
|
|
86
|
+
*/
|
|
78
87
|
export function isPortAvailable(port) {
|
|
79
88
|
return new Promise((resolve) => {
|
|
80
89
|
const server = createServer();
|
|
@@ -82,7 +91,7 @@ export function isPortAvailable(port) {
|
|
|
82
91
|
server.once("listening", () => {
|
|
83
92
|
server.close(() => resolve(true));
|
|
84
93
|
});
|
|
85
|
-
server.listen(port, "
|
|
94
|
+
server.listen(port, "0.0.0.0");
|
|
86
95
|
});
|
|
87
96
|
}
|
|
88
97
|
/** Find the first available port at or after `start` (bounded search). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-config.js","sourceRoot":"","sources":["../../../src/lib/container-config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"container-config.js","sourceRoot":"","sources":["../../../src/lib/container-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
export declare function daemonSocketPath(): string;
|
|
2
|
+
/**
|
|
3
|
+
* Stop a running daemon (via its PID file) and wait for the socket to clear.
|
|
4
|
+
* Best-effort — used to reload the daemon after writing new secrets/policies,
|
|
5
|
+
* since the daemon loads the vault into memory once at startup.
|
|
6
|
+
*/
|
|
7
|
+
export declare function stopDaemon(socketPath?: string, timeoutMs?: number): Promise<void>;
|
|
2
8
|
/** Ping the daemon's /health over its Unix socket. */
|
|
3
9
|
export declare function daemonHealthy(socketPath?: string): Promise<boolean>;
|
|
4
10
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-control.d.ts","sourceRoot":"","sources":["../../../src/lib/daemon-control.ts"],"names":[],"mappings":"AASA,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,UAAU,SAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAoB/E;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,SAAqB,EAC/B,SAAS,SAAQ,GAClB,OAAO,CAAC,OAAO,CAAC,CAwBlB"}
|
|
1
|
+
{"version":3,"file":"daemon-control.d.ts","sourceRoot":"","sources":["../../../src/lib/daemon-control.ts"],"names":[],"mappings":"AASA,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC5B,UAAU,SAAqB,EAC/B,SAAS,SAAO,GACjB,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,UAAU,SAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAoB/E;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,SAAqB,EAC/B,SAAS,SAAQ,GAClB,OAAO,CAAC,OAAO,CAAC,CAwBlB"}
|
|
@@ -1,12 +1,49 @@
|
|
|
1
1
|
import { request as httpRequest } from "node:http";
|
|
2
2
|
import { spawn } from "node:child_process";
|
|
3
|
-
import { existsSync } from "node:fs";
|
|
3
|
+
import { existsSync, readFileSync, unlinkSync } from "node:fs";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
const CONFIG_DIR = process.env.ONECLAW_CONFIG_DIR || join(homedir(), ".config", "1claw");
|
|
7
7
|
export function daemonSocketPath() {
|
|
8
8
|
return process.env.ONECLAW_DAEMON_SOCKET || join(CONFIG_DIR, "daemon.sock");
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Stop a running daemon (via its PID file) and wait for the socket to clear.
|
|
12
|
+
* Best-effort — used to reload the daemon after writing new secrets/policies,
|
|
13
|
+
* since the daemon loads the vault into memory once at startup.
|
|
14
|
+
*/
|
|
15
|
+
export async function stopDaemon(socketPath = daemonSocketPath(), timeoutMs = 5000) {
|
|
16
|
+
const pidFile = join(CONFIG_DIR, "daemon.pid");
|
|
17
|
+
if (existsSync(pidFile)) {
|
|
18
|
+
try {
|
|
19
|
+
const pid = parseInt(readFileSync(pidFile, "utf-8").trim(), 10);
|
|
20
|
+
if (pid) {
|
|
21
|
+
try {
|
|
22
|
+
process.kill(pid, "SIGTERM");
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
/* already gone */
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
/* unreadable */
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const deadline = Date.now() + timeoutMs;
|
|
34
|
+
while (Date.now() < deadline) {
|
|
35
|
+
if (!(await daemonHealthy(socketPath)))
|
|
36
|
+
break;
|
|
37
|
+
await sleep(150);
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
if (existsSync(socketPath))
|
|
41
|
+
unlinkSync(socketPath);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
/* ok */
|
|
45
|
+
}
|
|
46
|
+
}
|
|
10
47
|
/** Ping the daemon's /health over its Unix socket. */
|
|
11
48
|
export function daemonHealthy(socketPath = daemonSocketPath()) {
|
|
12
49
|
return new Promise((resolve) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-control.js","sourceRoot":"","sources":["../../../src/lib/daemon-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon-control.js","sourceRoot":"","sources":["../../../src/lib/daemon-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,GACZ,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAE1E,MAAM,UAAU,gBAAgB;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAChF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC5B,UAAU,GAAG,gBAAgB,EAAE,EAC/B,SAAS,GAAG,IAAI;IAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAChE,IAAI,GAAG,EAAE,CAAC;gBACN,IAAI,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACjC,CAAC;gBAAC,MAAM,CAAC;oBACL,kBAAkB;gBACtB,CAAC;YACL,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,gBAAgB;QACpB,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;YAAE,MAAM;QAC9C,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,CAAC;QACD,IAAI,UAAU,CAAC,UAAU,CAAC;YAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACL,QAAQ;IACZ,CAAC;AACL,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,aAAa,CAAC,UAAU,GAAG,gBAAgB,EAAE;IACzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,OAAO;QACX,CAAC;QACD,MAAM,GAAG,GAAG,WAAW,CACnB,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAC7D,CAAC,GAAG,EAAE,EAAE;YACJ,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;QACpC,CAAC,CACJ,CAAC;QACF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACnB,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,UAAkB,EAClB,UAAU,GAAG,gBAAgB,EAAE,EAC/B,SAAS,GAAG,KAAK;IAEjB,4EAA4E;IAC5E,yEAAyE;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,KAAK,CACf,OAAO,CAAC,QAAQ,EAChB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,EACrD;QACI,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE;YACD,GAAG,OAAO,CAAC,GAAG;YACd,wBAAwB,EAAE,UAAU;SACvC;KACJ,CACJ,CAAC;IACF,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC3B,IAAI,MAAM,aAAa,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QACjD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACrB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -34,6 +34,8 @@ export declare function dockerAvailable(): Promise<boolean>;
|
|
|
34
34
|
/** True if Docker is installed but the daemon is unreachable. */
|
|
35
35
|
export declare function dockerDaemonError(): Promise<string | null>;
|
|
36
36
|
export declare function dockerImageExists(image: string): Promise<boolean>;
|
|
37
|
+
/** Read a single image label, or null if the image/label is absent. */
|
|
38
|
+
export declare function dockerImageLabel(image: string, label: string): Promise<string | null>;
|
|
37
39
|
export declare function dockerPull(image: string, onProgress?: (line: string) => void): Promise<void>;
|
|
38
40
|
export declare function dockerBuild(opts: DockerBuildOptions): Promise<string>;
|
|
39
41
|
export declare function dockerRun(opts: DockerRunOptions): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-client.d.ts","sourceRoot":"","sources":["../../../src/lib/docker-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"docker-client.d.ts","sourceRoot":"","sources":["../../../src/lib/docker-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,6 +83,23 @@ export async function dockerImageExists(image) {
|
|
|
83
83
|
return false;
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
|
+
/** Read a single image label, or null if the image/label is absent. */
|
|
87
|
+
export async function dockerImageLabel(image, label) {
|
|
88
|
+
try {
|
|
89
|
+
const { stdout } = await run([
|
|
90
|
+
"image",
|
|
91
|
+
"inspect",
|
|
92
|
+
image,
|
|
93
|
+
"--format",
|
|
94
|
+
`{{ index .Config.Labels "${label}" }}`,
|
|
95
|
+
]);
|
|
96
|
+
const v = stdout.trim();
|
|
97
|
+
return v && v !== "<no value>" ? v : null;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
86
103
|
export async function dockerPull(image, onProgress) {
|
|
87
104
|
await runStreaming(["pull", image], onProgress);
|
|
88
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-client.js","sourceRoot":"","sources":["../../../src/lib/docker-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"docker-client.js","sourceRoot":"","sources":["../../../src/lib/docker-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { type ModuleManifest } from "../modules/registry.js";
|
|
2
2
|
export declare const DEFAULT_BASE_IMAGE = "1claw/agent:stable";
|
|
3
|
+
/**
|
|
4
|
+
* Revision of the bundled base assets (chat UI, entrypoint, Dockerfile). Bump
|
|
5
|
+
* this whenever those change so an existing `1claw/agent:stable` is rebuilt
|
|
6
|
+
* instead of silently reused. Stamped into the image as a label.
|
|
7
|
+
*/
|
|
8
|
+
export declare const BASE_IMAGE_VERSION = "3";
|
|
3
9
|
/** Build the base image from the bundled Docker context. */
|
|
4
10
|
export declare function buildBaseImage(tag?: string, onProgress?: (line: string) => void): Promise<string>;
|
|
5
11
|
/**
|
|
6
12
|
* Ensure the base image is available locally. If it's the default 1Claw image
|
|
7
|
-
* and missing
|
|
13
|
+
* and missing (or stale — built from an older bundled-asset revision), build it
|
|
14
|
+
* from bundled assets (works offline). Otherwise pull it.
|
|
8
15
|
*/
|
|
9
16
|
export declare function ensureBaseImage(baseImage: string, onProgress?: (line: string) => void): Promise<void>;
|
|
10
17
|
/** Produce the full Dockerfile content for a base image + module layers. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-build.d.ts","sourceRoot":"","sources":["../../../src/lib/image-build.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"image-build.d.ts","sourceRoot":"","sources":["../../../src/lib/image-build.ts"],"names":[],"mappings":"AAgBA,OAAO,EAGH,KAAK,cAAc,EACtB,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAGtC,4DAA4D;AAC5D,wBAAsB,cAAc,CAChC,GAAG,SAAqB,EACxB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACpC,OAAO,CAAC,MAAM,CAAC,CAajB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACjC,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACpC,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EAAE,GAC1B,MAAM,CAMR;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EAAE,GAC1B;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAkBxB;AAED,+CAA+C;AAC/C,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAEhE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EAAE,EACzB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACpC,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAM9C"}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { mkdtempSync, mkdirSync, copyFileSync, writeFileSync, existsSync, } from "node:fs";
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import { join, dirname } from "node:path";
|
|
4
|
-
import { dockerImageExists, dockerPull, dockerBuild, } from "./docker-client.js";
|
|
4
|
+
import { dockerImageExists, dockerImageLabel, dockerPull, dockerBuild, } from "./docker-client.js";
|
|
5
5
|
import { dockerBaseContext, moduleDir } from "./paths.js";
|
|
6
6
|
import { generateDockerLayers, moduleSetHash, } from "../modules/registry.js";
|
|
7
7
|
export const DEFAULT_BASE_IMAGE = "1claw/agent:stable";
|
|
8
|
+
/**
|
|
9
|
+
* Revision of the bundled base assets (chat UI, entrypoint, Dockerfile). Bump
|
|
10
|
+
* this whenever those change so an existing `1claw/agent:stable` is rebuilt
|
|
11
|
+
* instead of silently reused. Stamped into the image as a label.
|
|
12
|
+
*/
|
|
13
|
+
export const BASE_IMAGE_VERSION = "3";
|
|
14
|
+
const BASE_VERSION_LABEL = "org.1claw.base-version";
|
|
8
15
|
/** Build the base image from the bundled Docker context. */
|
|
9
16
|
export async function buildBaseImage(tag = DEFAULT_BASE_IMAGE, onProgress) {
|
|
10
17
|
const context = dockerBaseContext();
|
|
@@ -12,19 +19,34 @@ export async function buildBaseImage(tag = DEFAULT_BASE_IMAGE, onProgress) {
|
|
|
12
19
|
if (!existsSync(dockerfile)) {
|
|
13
20
|
throw new Error(`Base Dockerfile not found at ${dockerfile}`);
|
|
14
21
|
}
|
|
15
|
-
return dockerBuild({
|
|
22
|
+
return dockerBuild({
|
|
23
|
+
context,
|
|
24
|
+
dockerfile,
|
|
25
|
+
tag,
|
|
26
|
+
buildArgs: { ONECLAW_BASE_VERSION: BASE_IMAGE_VERSION },
|
|
27
|
+
onProgress,
|
|
28
|
+
});
|
|
16
29
|
}
|
|
17
30
|
/**
|
|
18
31
|
* Ensure the base image is available locally. If it's the default 1Claw image
|
|
19
|
-
* and missing
|
|
32
|
+
* and missing (or stale — built from an older bundled-asset revision), build it
|
|
33
|
+
* from bundled assets (works offline). Otherwise pull it.
|
|
20
34
|
*/
|
|
21
35
|
export async function ensureBaseImage(baseImage, onProgress) {
|
|
22
|
-
|
|
23
|
-
return;
|
|
36
|
+
const exists = await dockerImageExists(baseImage);
|
|
24
37
|
if (baseImage === DEFAULT_BASE_IMAGE) {
|
|
38
|
+
if (exists) {
|
|
39
|
+
const ver = await dockerImageLabel(baseImage, BASE_VERSION_LABEL);
|
|
40
|
+
if (ver === BASE_IMAGE_VERSION)
|
|
41
|
+
return;
|
|
42
|
+
// Missing/old label → rebuild from current bundled assets.
|
|
43
|
+
onProgress?.("base image is stale — rebuilding");
|
|
44
|
+
}
|
|
25
45
|
await buildBaseImage(baseImage, onProgress);
|
|
26
46
|
return;
|
|
27
47
|
}
|
|
48
|
+
if (exists)
|
|
49
|
+
return;
|
|
28
50
|
await dockerPull(baseImage, onProgress);
|
|
29
51
|
}
|
|
30
52
|
/** Produce the full Dockerfile content for a base image + module layers. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-build.js","sourceRoot":"","sources":["../../../src/lib/image-build.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,EACb,UAAU,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACH,iBAAiB,EACjB,UAAU,EACV,WAAW,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EACH,oBAAoB,EACpB,aAAa,GAEhB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEvD,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,GAAG,GAAG,kBAAkB,EACxB,UAAmC;IAEnC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"image-build.js","sourceRoot":"","sources":["../../../src/lib/image-build.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,13 @@ export interface ProxyRequest {
|
|
|
6
6
|
method?: string;
|
|
7
7
|
headers?: Record<string, string>;
|
|
8
8
|
body?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Additional secrets to inject into the same request (each resolved and
|
|
11
|
+
* host-checked against its own policy, then merged). Enables e.g. injecting
|
|
12
|
+
* both an auth header and a provider API-key header without exposing either
|
|
13
|
+
* value to the caller.
|
|
14
|
+
*/
|
|
15
|
+
injectSecrets?: string[];
|
|
9
16
|
}
|
|
10
17
|
export interface ProxyResponse {
|
|
11
18
|
status: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-proxy.d.ts","sourceRoot":"","sources":["../../src/secret-proxy.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,KAAK,UAAU,EAGlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"secret-proxy.d.ts","sourceRoot":"","sources":["../../src/secret-proxy.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,KAAK,UAAU,EAGlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAC9B,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,UAAU,GACnB,OAAO,CAAC,WAAW,CAAC,CA+EtB"}
|
package/dist/src/secret-proxy.js
CHANGED
|
@@ -9,26 +9,33 @@ import { isHostAllowed, resolveInjection, } from "./local-policy.js";
|
|
|
9
9
|
* request per the policy rules.
|
|
10
10
|
*/
|
|
11
11
|
export async function proxyRequest(req, vault, policy) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
error: `Secret "${req.secretName}" not found in local vault.`,
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
const hostCheck = isHostAllowed(policy, req.secretName, req.url);
|
|
20
|
-
if (!hostCheck.allowed) {
|
|
21
|
-
return { success: false, error: hostCheck.reason };
|
|
22
|
-
}
|
|
23
|
-
const injection = resolveInjection(policy, req.secretName, secret.value);
|
|
12
|
+
// Resolve every secret to inject: the primary plus any additional ones.
|
|
13
|
+
// Each is independently host-checked against its own policy and merged.
|
|
14
|
+
const names = [req.secretName, ...(req.injectSecrets ?? [])];
|
|
15
|
+
const seen = new Set();
|
|
24
16
|
const url = new URL(req.url);
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
const mergedHeaders = { ...(req.headers ?? {}) };
|
|
18
|
+
for (const name of names) {
|
|
19
|
+
if (seen.has(name))
|
|
20
|
+
continue;
|
|
21
|
+
seen.add(name);
|
|
22
|
+
const secret = vault.secrets[name];
|
|
23
|
+
if (!secret) {
|
|
24
|
+
return {
|
|
25
|
+
success: false,
|
|
26
|
+
error: `Secret "${name}" not found in local vault.`,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const hostCheck = isHostAllowed(policy, name, req.url);
|
|
30
|
+
if (!hostCheck.allowed) {
|
|
31
|
+
return { success: false, error: hostCheck.reason };
|
|
32
|
+
}
|
|
33
|
+
const injection = resolveInjection(policy, name, secret.value);
|
|
34
|
+
for (const [k, v] of Object.entries(injection.queryParams)) {
|
|
35
|
+
url.searchParams.set(k, v);
|
|
36
|
+
}
|
|
37
|
+
Object.assign(mergedHeaders, injection.headers);
|
|
27
38
|
}
|
|
28
|
-
const mergedHeaders = {
|
|
29
|
-
...(req.headers ?? {}),
|
|
30
|
-
...injection.headers,
|
|
31
|
-
};
|
|
32
39
|
const method = req.method ?? "GET";
|
|
33
40
|
return new Promise((resolve) => {
|
|
34
41
|
const isHttps = url.protocol === "https:";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-proxy.js","sourceRoot":"","sources":["../../src/secret-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAwB,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAEH,aAAa,EACb,gBAAgB,GACnB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"secret-proxy.js","sourceRoot":"","sources":["../../src/secret-proxy.ts"],"names":[],"mappings":"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"}
|