@1claw/cli 0.35.1 → 0.36.0
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 +219 -46
- 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/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
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @1claw/cli (v0.
|
|
1
|
+
# @1claw/cli (v0.36.0)
|
|
2
2
|
|
|
3
3
|
Command-line interface for [1Claw](https://1claw.xyz) — HSM-backed secret management for AI agents and humans.
|
|
4
4
|
|
|
@@ -586,15 +586,45 @@ AI Client (Claude, Cursor, etc.)
|
|
|
586
586
|
`1claw init --docker` provisions a secure agent runtime inside a Docker container in one command. The container ships with the 1Claw MCP server and a lightweight chat UI. Crucially, the container **never receives the agent API key** — the host daemon injects credentials over a read-only Unix-socket mount, preserving the same trust boundary as local daemon mode.
|
|
587
587
|
|
|
588
588
|
```bash
|
|
589
|
-
1claw init --docker # Basic secure agent
|
|
589
|
+
1claw init --docker # Basic secure agent (chat LLM via Shroud)
|
|
590
590
|
1claw init --docker --module=ampersend # With x402 payments
|
|
591
591
|
1claw init --docker --module=ampersend,onchain --port 8080
|
|
592
|
-
1claw init --docker --
|
|
592
|
+
1claw init --docker --llm-provider anthropic --llm-model claude-3-5-haiku-latest
|
|
593
|
+
1claw init --docker --local # Fully offline — no cloud account, no LLM
|
|
593
594
|
1claw init --docker --list-modules # List available modules
|
|
594
595
|
```
|
|
595
596
|
|
|
596
597
|
When the cloud is reachable, `init` provisions an agent + vault + read policy and stores the agent key in your local vault (the daemon injects it toward `*.1claw.xyz`). With `--local`, nothing touches the cloud. The base image is built from bundled assets if it isn't already present, so the flow works offline.
|
|
597
598
|
|
|
599
|
+
### Chat with an LLM through Shroud
|
|
600
|
+
|
|
601
|
+
In cloud mode (not `--local`), the embedded chat UI is wired to an LLM **through Shroud** — type a message and it routes via the host daemon, which injects the `X-Shroud-Agent-Key` header (the container never sees the key). Shroud inspects the prompt (redaction, PII, injection detection) and forwards to the provider.
|
|
602
|
+
|
|
603
|
+
- Pick the model with `--llm-provider` (default `openai`) and `--llm-model` (default per provider, e.g. `gpt-4o-mini`).
|
|
604
|
+
- `--local` mode has **no LLM** (no cloud agent → no Shroud credential); only the `/help`, `/secrets`, `/info`, and `/proxy` slash commands work.
|
|
605
|
+
|
|
606
|
+
**Where does the provider key come from?** Shroud resolves it in this order — pick whichever you prefer:
|
|
607
|
+
|
|
608
|
+
| Option | How | Where the key lives |
|
|
609
|
+
| --- | --- | --- |
|
|
610
|
+
| **1Claw Token Billing** | Enable LLM Token Billing for the org (Dashboard → Billing, or `POST /v1/billing/llm-token-billing/subscribe`). Shroud routes through the Stripe AI Gateway. | No provider key — billed to 1Claw |
|
|
611
|
+
| **1Claw vault** | `--llm-api-key <key>` (default `--llm-key-store cloud`) stores it at `providers/<provider>/api-key`; or store it yourself with `1claw secret put`. Shroud auto-fetches it with the agent JWT. | Your 1Claw cloud vault |
|
|
612
|
+
| **Local CLI vault (BYOK)** | `--llm-api-key <key> --llm-key-store local`, or `--llm-api-key-secret <name>` to reuse an existing local secret. The daemon injects it as the `X-Shroud-Api-Key` header. | Your local CLI vault (`~/.config/1claw`) |
|
|
613
|
+
|
|
614
|
+
```bash
|
|
615
|
+
# Bill model usage to 1Claw (no provider key):
|
|
616
|
+
1claw init --docker # then enable LLM Token Billing
|
|
617
|
+
|
|
618
|
+
# Provider key stored in your 1Claw vault (Shroud auto-fetches):
|
|
619
|
+
1claw init --docker --llm-api-key sk-... # --llm-key-store cloud (default)
|
|
620
|
+
|
|
621
|
+
# Provider key stored in the local CLI vault (daemon injects, container never sees it):
|
|
622
|
+
1claw init --docker --llm-api-key sk-... --llm-key-store local
|
|
623
|
+
1claw init --docker --llm-api-key-secret openai-key # reuse an existing local secret
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
In every case the container **never receives the provider key** — it's resolved server-side by Shroud (cloud vault / token billing) or injected by the host daemon (local BYOK).
|
|
627
|
+
|
|
598
628
|
### Modules
|
|
599
629
|
|
|
600
630
|
Composable container extensions defined by `module.yaml` manifests bundled with the CLI:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+EpC,eAAO,MAAM,WAAW,SA0ClB,CAAC"}
|
|
@@ -6,13 +6,13 @@ import { api } from "../client.js";
|
|
|
6
6
|
import { getToken } from "../config.js";
|
|
7
7
|
import { loginWithDevice } from "../auth.js";
|
|
8
8
|
import { printSuccess, printError, printWarning, printInfo, printKeyValue, printTable, } from "../output.js";
|
|
9
|
-
import { vaultExists, createVault, loadVault, saveVault, addSecret, } from "../local-vault.js";
|
|
9
|
+
import { vaultExists, createVault, loadVault, saveVault, addSecret, getSecret, } from "../local-vault.js";
|
|
10
10
|
import { loadPolicy, savePolicy, setSecretPolicy, } from "../local-policy.js";
|
|
11
11
|
import { dockerAvailable, dockerDaemonError, dockerRun, dockerContainerStatus, dockerLogs, } from "../lib/docker-client.js";
|
|
12
12
|
import { ensureBaseImage, buildModuleImage, DEFAULT_BASE_IMAGE, } from "../lib/image-build.js";
|
|
13
13
|
import { listModules, resolveModules, } from "../modules/registry.js";
|
|
14
14
|
import { generateContainerName, isValidContainerName, sanitizeName, loadContainerState, saveContainerState, findAvailablePort, MANAGED_LABEL, } from "../lib/container-config.js";
|
|
15
|
-
import { daemonSocketPath, daemonHealthy, startDaemonDetached, } from "../lib/daemon-control.js";
|
|
15
|
+
import { daemonSocketPath, daemonHealthy, startDaemonDetached, stopDaemon, } from "../lib/daemon-control.js";
|
|
16
16
|
export const initCommand = new Command("init")
|
|
17
17
|
.description("Initialize a secure agent runtime in a Docker container")
|
|
18
18
|
.option("--docker [image]", "Run in Docker container (default: 1claw/agent:stable)")
|
|
@@ -23,6 +23,11 @@ export const initCommand = new Command("init")
|
|
|
23
23
|
.option("--local", "Fully offline — no cloud provisioning")
|
|
24
24
|
.option("--agent-key <key>", "Use an existing agent key (skip provisioning)")
|
|
25
25
|
.option("--detach", "Run the container in the background")
|
|
26
|
+
.option("--llm-provider <provider>", "LLM provider for the chat UI via Shroud (openai, anthropic, google, ...)", "openai")
|
|
27
|
+
.option("--llm-model <model>", "LLM model for the chat UI via Shroud (e.g. gpt-4o-mini, claude-3-5-haiku-latest)")
|
|
28
|
+
.option("--llm-api-key <key>", "Provider API key for the chat LLM (stored, never passed to the container)")
|
|
29
|
+
.option("--llm-key-store <where>", "Where to store --llm-api-key: 'cloud' (1Claw vault, Shroud auto-fetches) or 'local' (CLI vault, daemon injects)", "cloud")
|
|
30
|
+
.option("--llm-api-key-secret <name>", "Use an existing LOCAL vault secret as the provider key (daemon injects it as X-Shroud-Api-Key)")
|
|
26
31
|
.action(async (opts) => {
|
|
27
32
|
try {
|
|
28
33
|
await initAction(opts);
|
|
@@ -32,6 +37,20 @@ export const initCommand = new Command("init")
|
|
|
32
37
|
process.exit(1);
|
|
33
38
|
}
|
|
34
39
|
});
|
|
40
|
+
function defaultModelForProvider(provider) {
|
|
41
|
+
switch (provider.toLowerCase()) {
|
|
42
|
+
case "anthropic":
|
|
43
|
+
return "claude-3-5-haiku-latest";
|
|
44
|
+
case "google":
|
|
45
|
+
case "gemini":
|
|
46
|
+
return "gemini-2.5-flash";
|
|
47
|
+
case "mistral":
|
|
48
|
+
return "mistral-small-latest";
|
|
49
|
+
case "openai":
|
|
50
|
+
default:
|
|
51
|
+
return "gpt-4o-mini";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
35
54
|
function parseModuleNames(input) {
|
|
36
55
|
if (!input)
|
|
37
56
|
return [];
|
|
@@ -130,7 +149,18 @@ async function provisionCloudResources(containerName) {
|
|
|
130
149
|
permissions: ["read"],
|
|
131
150
|
},
|
|
132
151
|
});
|
|
133
|
-
|
|
152
|
+
// Allow the agent to read LLM provider keys it stores in 1Claw, so
|
|
153
|
+
// Shroud can auto-fetch `providers/{provider}/api-key` for chat.
|
|
154
|
+
await api(`/vaults/${vaultId}/policies`, {
|
|
155
|
+
method: "POST",
|
|
156
|
+
body: {
|
|
157
|
+
principal_type: "agent",
|
|
158
|
+
principal_id: agentId,
|
|
159
|
+
secret_path_pattern: "providers/*",
|
|
160
|
+
permissions: ["read"],
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
policySpinner.succeed("Vault bound; read policies on secrets/* and providers/* granted.");
|
|
134
164
|
}
|
|
135
165
|
catch (err) {
|
|
136
166
|
policySpinner.fail("Failed to bind vault / create policy.");
|
|
@@ -167,41 +197,42 @@ async function resolvePassphrase(confirm) {
|
|
|
167
197
|
return passphrase;
|
|
168
198
|
}
|
|
169
199
|
/**
|
|
170
|
-
* Ensure a local vault exists, optionally store
|
|
171
|
-
* and make sure the daemon is running so the
|
|
200
|
+
* Ensure a local vault exists, optionally store one or more secrets (each with
|
|
201
|
+
* its daemon injection policy), and make sure the daemon is running so the
|
|
202
|
+
* container can reach it. If the daemon is already running and we wrote new
|
|
203
|
+
* secrets, it is reloaded (the daemon loads the vault into memory at startup).
|
|
172
204
|
*/
|
|
173
205
|
async function ensureDaemonRunning(opts) {
|
|
174
206
|
const socketPath = daemonSocketPath();
|
|
175
207
|
const alreadyRunning = await daemonHealthy(socketPath);
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
// to store, we can skip vault work entirely.
|
|
179
|
-
const needVaultWrite = !!opts.storeKey;
|
|
208
|
+
const storeKeys = opts.storeKeys ?? [];
|
|
209
|
+
const needVaultWrite = storeKeys.length > 0;
|
|
180
210
|
const needStart = !alreadyRunning;
|
|
211
|
+
// If we're writing secrets but the daemon is already up, it must be
|
|
212
|
+
// reloaded — otherwise the container can't reach the freshly stored keys.
|
|
213
|
+
const needReload = needVaultWrite && alreadyRunning;
|
|
181
214
|
if (!needVaultWrite && !needStart) {
|
|
182
215
|
return socketPath;
|
|
183
216
|
}
|
|
184
217
|
const creatingVault = !vaultExists();
|
|
185
218
|
let passphrase;
|
|
186
|
-
if (
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
219
|
+
if (creatingVault) {
|
|
220
|
+
printInfo("No local vault found — creating one for the daemon.");
|
|
221
|
+
passphrase = await resolvePassphrase(true);
|
|
222
|
+
createVault(passphrase);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
passphrase = await resolvePassphrase(false);
|
|
226
|
+
// Verify the passphrase up front so we fail with a clear message
|
|
227
|
+
// instead of an opaque "daemon did not become ready in time".
|
|
228
|
+
try {
|
|
229
|
+
loadVault(passphrase);
|
|
191
230
|
}
|
|
192
|
-
|
|
193
|
-
passphrase
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
loadVault(passphrase);
|
|
198
|
-
}
|
|
199
|
-
catch {
|
|
200
|
-
throw new Error("Wrong passphrase for the existing local vault.\n" +
|
|
201
|
-
" • If you mistyped it, re-run and enter the correct passphrase.\n" +
|
|
202
|
-
" • If you've forgotten it, reset the vault with: 1claw local destroy --force\n" +
|
|
203
|
-
" (this permanently deletes the old local vault and its secrets), then re-run.");
|
|
204
|
-
}
|
|
231
|
+
catch {
|
|
232
|
+
throw new Error("Wrong passphrase for the existing local vault.\n" +
|
|
233
|
+
" • If you mistyped it, re-run and enter the correct passphrase.\n" +
|
|
234
|
+
" • If you've forgotten it, reset the vault with: 1claw local destroy --force\n" +
|
|
235
|
+
" (this permanently deletes the old local vault and its secrets), then re-run.");
|
|
205
236
|
}
|
|
206
237
|
}
|
|
207
238
|
if (needVaultWrite && passphrase) {
|
|
@@ -212,17 +243,33 @@ async function ensureDaemonRunning(opts) {
|
|
|
212
243
|
catch {
|
|
213
244
|
throw new Error("Wrong passphrase or corrupted local vault.");
|
|
214
245
|
}
|
|
215
|
-
addSecret(vault, opts.storeKey.localVaultPath, opts.storeKey.apiKey, "api_key");
|
|
216
|
-
saveVault(vault, passphrase);
|
|
217
|
-
// Allow the daemon to inject this key toward the 1Claw API only.
|
|
218
246
|
const policy = loadPolicy();
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
247
|
+
for (const spec of storeKeys) {
|
|
248
|
+
if (spec.value !== undefined) {
|
|
249
|
+
addSecret(vault, spec.path, spec.value, spec.type ?? "api_key");
|
|
250
|
+
}
|
|
251
|
+
else if (!getSecret(vault, spec.path)) {
|
|
252
|
+
throw new Error(`Provider key secret "${spec.path}" not found in the local vault.\n` +
|
|
253
|
+
` Add it first: 1claw local add ${spec.path}`);
|
|
254
|
+
}
|
|
255
|
+
setSecretPolicy(policy, spec.path, spec.policy);
|
|
256
|
+
}
|
|
257
|
+
saveVault(vault, passphrase);
|
|
223
258
|
savePolicy(policy);
|
|
224
259
|
}
|
|
225
|
-
if (
|
|
260
|
+
if (needReload) {
|
|
261
|
+
const spinner = ora("Reloading daemon to pick up new secrets...").start();
|
|
262
|
+
await stopDaemon(socketPath);
|
|
263
|
+
const ok = await startDaemonDetached(passphrase, socketPath);
|
|
264
|
+
if (!ok) {
|
|
265
|
+
spinner.fail("Daemon did not come back up.");
|
|
266
|
+
throw new Error("Failed to reload the daemon.\n" +
|
|
267
|
+
" • Check status: 1claw daemon status\n" +
|
|
268
|
+
" • Start it manually (shows errors): 1claw daemon start");
|
|
269
|
+
}
|
|
270
|
+
spinner.succeed(`Daemon reloaded on ${socketPath}`);
|
|
271
|
+
}
|
|
272
|
+
else if (needStart) {
|
|
226
273
|
if (!passphrase)
|
|
227
274
|
passphrase = await resolvePassphrase(false);
|
|
228
275
|
const spinner = ora("Starting local daemon...").start();
|
|
@@ -330,19 +377,96 @@ async function initAction(opts) {
|
|
|
330
377
|
vaultId = result.vaultId;
|
|
331
378
|
agentApiKey = result.apiKey;
|
|
332
379
|
}
|
|
333
|
-
// ── Step 4/5: Store key + start daemon
|
|
334
|
-
|
|
335
|
-
|
|
380
|
+
// ── Step 4/5: Store key(s) + start daemon ────────────────────────────
|
|
381
|
+
// Shroud authenticates via the X-Shroud-Agent-Key header in `agent_id:key`
|
|
382
|
+
// form. We have a clean id+key only on the provisioned path; for --agent-key
|
|
383
|
+
// the user can pass `agent_id:key` directly.
|
|
384
|
+
const sid = sanitizeName(containerName);
|
|
385
|
+
const storeKeys = [];
|
|
386
|
+
let shroudAgentKey = null;
|
|
387
|
+
if (agentId && agentApiKey) {
|
|
388
|
+
shroudAgentKey = `${agentId}:${agentApiKey}`;
|
|
389
|
+
}
|
|
390
|
+
else if (agentApiKey && agentApiKey.includes(":")) {
|
|
391
|
+
shroudAgentKey = agentApiKey;
|
|
392
|
+
}
|
|
393
|
+
if (agentApiKey) {
|
|
394
|
+
// Generic bearer key toward the 1Claw API (used by /proxy demos).
|
|
395
|
+
localVaultPath = `__docker/${sid}/agent-key`;
|
|
396
|
+
storeKeys.push({
|
|
397
|
+
path: localVaultPath,
|
|
398
|
+
value: agentApiKey,
|
|
399
|
+
type: "api_key",
|
|
400
|
+
policy: {
|
|
401
|
+
allowed_hosts: ["api.1claw.xyz", "*.1claw.xyz"],
|
|
402
|
+
inject_as: "bearer",
|
|
403
|
+
},
|
|
404
|
+
});
|
|
336
405
|
}
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
406
|
+
// Shroud LLM key: injected as the X-Shroud-Agent-Key header toward Shroud.
|
|
407
|
+
let shroudSecretPath = null;
|
|
408
|
+
if (shroudAgentKey && !opts.local) {
|
|
409
|
+
shroudSecretPath = `__docker/${sid}/shroud-key`;
|
|
410
|
+
storeKeys.push({
|
|
411
|
+
path: shroudSecretPath,
|
|
412
|
+
value: shroudAgentKey,
|
|
413
|
+
type: "api_key",
|
|
414
|
+
policy: {
|
|
415
|
+
allowed_hosts: ["shroud.1claw.xyz", "*.1claw.xyz"],
|
|
416
|
+
inject_as: "header",
|
|
417
|
+
header_name: "X-Shroud-Agent-Key",
|
|
418
|
+
},
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
// ── LLM provider key (BYOK) — three storage options ──────────────────
|
|
422
|
+
// 1) Cloud (1Claw vault): Shroud auto-fetches providers/{provider}/api-key.
|
|
423
|
+
// 2) Local (CLI vault): the daemon injects it as X-Shroud-Api-Key.
|
|
424
|
+
// 3) Existing local secret by name: same as (2) but reuse a stored secret.
|
|
425
|
+
const llmProvider = opts.llmProvider || "openai";
|
|
426
|
+
const keyStore = (opts.llmKeyStore || "cloud").toLowerCase();
|
|
427
|
+
const byokPolicy = {
|
|
428
|
+
allowed_hosts: ["shroud.1claw.xyz", "*.1claw.xyz"],
|
|
429
|
+
inject_as: "header",
|
|
430
|
+
header_name: "X-Shroud-Api-Key",
|
|
431
|
+
};
|
|
432
|
+
let shroudApiKeySecretPath = null;
|
|
433
|
+
let cloudKeyToStore = null;
|
|
434
|
+
if (opts.llmApiKeySecret) {
|
|
435
|
+
// Reference an existing LOCAL vault secret as the provider key. No value
|
|
436
|
+
// → ensureDaemonRunning only sets the policy and verifies it exists.
|
|
437
|
+
shroudApiKeySecretPath = opts.llmApiKeySecret;
|
|
438
|
+
storeKeys.push({ path: shroudApiKeySecretPath, policy: byokPolicy });
|
|
439
|
+
}
|
|
440
|
+
else if (opts.llmApiKey) {
|
|
441
|
+
if (keyStore === "local" || opts.local) {
|
|
442
|
+
shroudApiKeySecretPath = `__docker/${sid}/llm-api-key`;
|
|
443
|
+
storeKeys.push({
|
|
444
|
+
path: shroudApiKeySecretPath,
|
|
445
|
+
value: opts.llmApiKey,
|
|
446
|
+
type: "api_key",
|
|
447
|
+
policy: byokPolicy,
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
// cloud (default): stored in the 1Claw vault after provisioning.
|
|
452
|
+
cloudKeyToStore = opts.llmApiKey;
|
|
453
|
+
}
|
|
340
454
|
}
|
|
341
455
|
const socketPath = await ensureDaemonRunning({
|
|
342
|
-
|
|
343
|
-
? { localVaultPath, apiKey: agentApiKey }
|
|
344
|
-
: undefined,
|
|
456
|
+
storeKeys: storeKeys.length ? storeKeys : undefined,
|
|
345
457
|
});
|
|
458
|
+
// Store the provider key in the 1Claw cloud vault (Shroud auto-fetches it).
|
|
459
|
+
if (cloudKeyToStore && vaultId && !opts.local) {
|
|
460
|
+
const keySpinner = ora(`Storing ${llmProvider} key in 1Claw vault...`).start();
|
|
461
|
+
try {
|
|
462
|
+
await api(`/vaults/${vaultId}/secrets/${encodeURIComponent(`providers/${llmProvider}/api-key`)}`, { method: "PUT", body: { type: "api_key", value: cloudKeyToStore } });
|
|
463
|
+
keySpinner.succeed(`Provider key stored at providers/${llmProvider}/api-key (1Claw vault).`);
|
|
464
|
+
}
|
|
465
|
+
catch (err) {
|
|
466
|
+
keySpinner.fail("Failed to store provider key in the vault.");
|
|
467
|
+
throw err;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
346
470
|
// ── Step 6/7: Build or pull image ────────────────────────────────────
|
|
347
471
|
const baseImage = typeof opts.docker === "string" && opts.docker.length
|
|
348
472
|
? opts.docker
|
|
@@ -392,13 +516,36 @@ async function initAction(opts) {
|
|
|
392
516
|
if (port !== requestedPort) {
|
|
393
517
|
printWarning(`Port ${requestedPort} busy — using ${port}.`);
|
|
394
518
|
}
|
|
519
|
+
const containerMode = opts.local ? "local" : "cloud";
|
|
395
520
|
const env = {
|
|
396
|
-
|
|
521
|
+
ONECLAW_MODE: containerMode,
|
|
397
522
|
ONECLAW_DAEMON_SOCKET: "/run/1claw/daemon.sock",
|
|
398
523
|
ONECLAW_CONTAINER_MODULES: modules.map((m) => m.name).join(","),
|
|
399
524
|
};
|
|
525
|
+
if (opts.local)
|
|
526
|
+
env.ONECLAW_LOCAL_VAULT = "true";
|
|
400
527
|
if (agentId)
|
|
401
528
|
env.ONECLAW_AGENT_ID = agentId;
|
|
529
|
+
// Wire the chat UI to an LLM through Shroud (key stays in the host daemon).
|
|
530
|
+
const llmWired = !!shroudSecretPath;
|
|
531
|
+
if (llmWired) {
|
|
532
|
+
const model = opts.llmModel || defaultModelForProvider(llmProvider);
|
|
533
|
+
env.ONECLAW_LLM_VIA_SHROUD = "true";
|
|
534
|
+
env.ONECLAW_SHROUD_URL =
|
|
535
|
+
process.env.ONECLAW_SHROUD_URL || "https://shroud.1claw.xyz";
|
|
536
|
+
env.ONECLAW_SHROUD_SECRET = shroudSecretPath;
|
|
537
|
+
env.ONECLAW_SHROUD_PROVIDER = llmProvider;
|
|
538
|
+
env.ONECLAW_SHROUD_MODEL = model;
|
|
539
|
+
// BYOK: the daemon also injects this secret as the X-Shroud-Api-Key
|
|
540
|
+
// header so the container never sees the provider key.
|
|
541
|
+
if (shroudApiKeySecretPath) {
|
|
542
|
+
env.ONECLAW_SHROUD_API_KEY_SECRET = shroudApiKeySecretPath;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
else if (shroudApiKeySecretPath || cloudKeyToStore) {
|
|
546
|
+
printWarning("An LLM provider key was supplied but there's no cloud agent to authenticate to Shroud " +
|
|
547
|
+
"(this is --local or no provisioning). The chat UI can't reach Shroud without an agent key.");
|
|
548
|
+
}
|
|
402
549
|
const runSpinner = ora(`Starting container ${containerName}...`).start();
|
|
403
550
|
let containerId;
|
|
404
551
|
try {
|
|
@@ -438,7 +585,7 @@ async function initAction(opts) {
|
|
|
438
585
|
createdAt: new Date().toISOString(),
|
|
439
586
|
localVaultPath,
|
|
440
587
|
customImage: null,
|
|
441
|
-
mode:
|
|
588
|
+
mode: containerMode,
|
|
442
589
|
};
|
|
443
590
|
saveContainerState(state);
|
|
444
591
|
console.log();
|
|
@@ -451,9 +598,35 @@ async function initAction(opts) {
|
|
|
451
598
|
["Modules", modules.map((m) => m.name).join(", ") || chalk.dim("none")],
|
|
452
599
|
["Image", imageToRun],
|
|
453
600
|
["Shroud", agentId ? "enabled" : chalk.dim("n/a")],
|
|
601
|
+
[
|
|
602
|
+
"Chat LLM",
|
|
603
|
+
llmWired
|
|
604
|
+
? chalk.green(`via Shroud (${env.ONECLAW_SHROUD_PROVIDER}/${env.ONECLAW_SHROUD_MODEL})`)
|
|
605
|
+
: chalk.dim("none — slash commands only"),
|
|
606
|
+
],
|
|
607
|
+
[
|
|
608
|
+
"LLM key source",
|
|
609
|
+
!llmWired
|
|
610
|
+
? chalk.dim("n/a")
|
|
611
|
+
: shroudApiKeySecretPath
|
|
612
|
+
? chalk.green("local vault (daemon → X-Shroud-Api-Key)")
|
|
613
|
+
: cloudKeyToStore
|
|
614
|
+
? chalk.green(`1Claw vault (providers/${llmProvider}/api-key)`)
|
|
615
|
+
: chalk.cyan("1Claw vault or token billing (Shroud resolves)"),
|
|
616
|
+
],
|
|
454
617
|
["Key injection", chalk.green("daemon (container never sees the key)")],
|
|
455
618
|
]);
|
|
456
619
|
console.log();
|
|
620
|
+
if (llmWired && !shroudApiKeySecretPath && !cloudKeyToStore) {
|
|
621
|
+
printInfo("No provider key was supplied. Shroud will use, in order: a key in your " +
|
|
622
|
+
"1Claw vault at providers/<provider>/api-key, or 1Claw LLM Token Billing.");
|
|
623
|
+
console.log(chalk.dim(" Store one in 1Claw: 1claw secret put providers/" +
|
|
624
|
+
llmProvider +
|
|
625
|
+
"/api-key -v <vault>\n" +
|
|
626
|
+
" Or store it locally: re-run with --llm-api-key <key> --llm-key-store local\n" +
|
|
627
|
+
" Or bill to 1Claw: enable LLM Token Billing (Dashboard → Billing)."));
|
|
628
|
+
console.log();
|
|
629
|
+
}
|
|
457
630
|
if (modules.some((m) => m.required_secrets.length)) {
|
|
458
631
|
printInfo("Some modules expect secrets in your vault:");
|
|
459
632
|
for (const m of modules) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACH,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACH,UAAU,EACV,UAAU,EACV,eAAe,GAElB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,qBAAqB,EACrB,UAAU,GACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,eAAe,EACf,gBAAgB,EAChB,kBAAkB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACH,WAAW,EACX,cAAc,GAEjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACH,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,GAEhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,UAAU,GACb,MAAM,0BAA0B,CAAC;AAkBlC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KACzC,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,kBAAkB,EAAE,uDAAuD,CAAC;KACnF,MAAM,CACH,qBAAqB,EACrB,mGAAmG,CACtG;KACA,MAAM,CAAC,gBAAgB,EAAE,qCAAqC,CAAC;KAC/D,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,MAAM,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,0CAA0C,CAAC;KACnE,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;KAC1D,MAAM,CAAC,mBAAmB,EAAE,+CAA+C,CAAC;KAC5E,MAAM,CAAC,UAAU,EAAE,qCAAqC,CAAC;KACzD,MAAM,CACH,2BAA2B,EAC3B,0EAA0E,EAC1E,QAAQ,CACX;KACA,MAAM,CACH,qBAAqB,EACrB,kFAAkF,CACrF;KACA,MAAM,CACH,qBAAqB,EACrB,2EAA2E,CAC9E;KACA,MAAM,CACH,yBAAyB,EACzB,iHAAiH,EACjH,OAAO,CACV;KACA,MAAM,CACH,6BAA6B,EAC7B,gGAAgG,CACnG;KACA,MAAM,CAAC,KAAK,EAAE,IAAiB,EAAE,EAAE;IAChC,IAAI,CAAC;QACD,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,UAAU,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,SAAS,uBAAuB,CAAC,QAAgB;IAC7C,QAAQ,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,KAAK,WAAW;YACZ,OAAO,yBAAyB,CAAC;QACrC,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACT,OAAO,kBAAkB,CAAC;QAC9B,KAAK,SAAS;YACV,OAAO,sBAAsB,CAAC;QAClC,KAAK,QAAQ,CAAC;QACd;YACI,OAAO,aAAa,CAAC;IAC7B,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA2B;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,eAAe;IACpB,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACjC,OAAO;IACX,CAAC;IACD,UAAU,CACN,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAC5D,MAAM,EAAE,CAAC,CAAC,MAAM;KACnB,CAAC,CAAC,EACH;QACI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5C,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE;QACxD,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;KACtC,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,GAAG,CACL,oEAAoE;QAChE,yDAAyD,CAChE,CACJ,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;AAClB,CAAC;AASD,KAAK,UAAU,uBAAuB,CAClC,aAAqB;IAErB,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAExC,MAAM,YAAY,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1D,IAAI,OAAe,CAAC;IACpB,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAGnB,SAAS,EAAE;YACT,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACF,IAAI,EAAE,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBACxC,WAAW,EAAE,kCAAkC;gBAC/C,cAAc,EAAE,IAAI;gBACpB,mBAAmB,EAAE,IAAI;gBACzB,WAAW,EAAE,SAAS;aACzB;SACJ,CAAC,CAAC;QACH,OAAO,GAAG,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;QACrB,YAAY,CAAC,OAAO,CAAC,sBAAsB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,YAAY,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;IACtD,IAAI,OAAe,CAAC;IACpB,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,GAAG,CAA+B,SAAS,EAAE;YAC7D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACF,IAAI,EAAE,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBACxC,WAAW,EAAE,kCAAkC;aAClD;SACJ,CAAC,CAAC;QACH,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QACnB,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,YAAY,CAAC,OAAO,CAAC,kBAAkB,SAAS,GAAG,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC7C,MAAM,GAAG,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,GAAG,CAAC,2CAA2C,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/E,IAAI,CAAC;QACD,MAAM,GAAG,CAAC,WAAW,OAAO,EAAE,EAAE;YAC5B,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE;SACjC,CAAC,CAAC;QACH,MAAM,GAAG,CAAC,WAAW,OAAO,WAAW,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACF,cAAc,EAAE,OAAO;gBACvB,YAAY,EAAE,OAAO;gBACrB,mBAAmB,EAAE,WAAW;gBAChC,WAAW,EAAE,CAAC,MAAM,CAAC;aACxB;SACJ,CAAC,CAAC;QACH,mEAAmE;QACnE,iEAAiE;QACjE,MAAM,GAAG,CAAC,WAAW,OAAO,WAAW,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACF,cAAc,EAAE,OAAO;gBACvB,YAAY,EAAE,OAAO;gBACrB,mBAAmB,EAAE,aAAa;gBAClC,WAAW,EAAE,CAAC,MAAM,CAAC;aACxB;SACJ,CAAC,CAAC;QACH,aAAa,CAAC,OAAO,CAAC,kEAAkE,CAAC,CAAC;IAC9F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,aAAa,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC5D,MAAM,GAAG,CAAC;IACd,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAgB;IAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAChD,CAAC;IACD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACzC;YACI,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,yBAAyB;YAClC,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CACpB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0CAA0C;SACxE;KACJ,CAAC,CAAC;IACH,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACxC;gBACI,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,qBAAqB;gBAC9B,IAAI,EAAE,GAAG;aACZ;SACJ,CAAC,CAAC;QACH,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC;AACtB,CAAC;AAcD;;;;;GAKG;AACH,KAAK,UAAU,mBAAmB,CAAC,IAElC;IACG,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;IAEvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACvC,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,CAAC,cAAc,CAAC;IAClC,oEAAoE;IACpE,0EAA0E;IAC1E,MAAM,UAAU,GAAG,cAAc,IAAI,cAAc,CAAC;IAEpD,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,UAA8B,CAAC;IAEnC,IAAI,aAAa,EAAE,CAAC;QAChB,SAAS,CAAC,qDAAqD,CAAC,CAAC;QACjE,UAAU,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC3C,WAAW,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACJ,UAAU,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC5C,iEAAiE;QACjE,8DAA8D;QAC9D,IAAI,CAAC;YACD,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACL,MAAM,IAAI,KAAK,CACX,kDAAkD;gBAC9C,oEAAoE;gBACpE,iFAAiF;gBACjF,kFAAkF,CACzF,CAAC;QACN,CAAC;IACL,CAAC;IAED,IAAI,cAAc,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACD,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACL,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC3B,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;YACpE,CAAC;iBAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CACX,wBAAwB,IAAI,CAAC,IAAI,mCAAmC;oBAChE,oCAAoC,IAAI,CAAC,IAAI,EAAE,CACtD,CAAC;YACN,CAAC;YACD,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;QACD,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC7B,UAAU,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,CAAC,4CAA4C,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1E,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,UAAW,EAAE,UAAU,CAAC,CAAC;QAC9D,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC7C,MAAM,IAAI,KAAK,CACX,gCAAgC;gBAC5B,0CAA0C;gBAC1C,2DAA2D,CAClE,CAAC;QACN,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,SAAS,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU;YAAE,UAAU,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC7D,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACrD,MAAM,IAAI,KAAK,CACX,+BAA+B;gBAC3B,0CAA0C;gBAC1C,6DAA6D;gBAC7D,+CAA+C;gBAC/C,yEAAyE,CAChF,CAAC;QACN,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACJ,SAAS,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,SAAS,GAAG,KAAK;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,MAAM,GAAG,GAAG,oBAAoB,IAAI,SAAS,CAAC;IAC9C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,GAAG,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACL,aAAa;QACjB,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAiB;IACvC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,eAAe,EAAE,CAAC;QAClB,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,wEAAwE;IACxE,IAAI,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACX,MAAM;YACF,iFAAiF,CACxF,CAAC;IACN,CAAC;IAED,wEAAwE;IACxE,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,OAAO,GAAqB,EAAE,CAAC;IACnC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QACtC,SAAS,CACL,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC/C,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM;gBAChC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC;gBACrC,CAAC,CAAC,EAAE,CAAC,CAChB,CAAC;IACN,CAAC;IAED,wEAAwE;IACxE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,IAAI,qBAAqB,EAAE,CAAC;IAC3D,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACX,2BAA2B,aAAa,kCAAkC,CAC7E,CAAC;IACN,CAAC;IACD,IAAI,kBAAkB,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACX,sBAAsB,aAAa,6BAA6B;YAC5D,yEAAyE,aAAa,KAAK,CAClG,CAAC;IACN,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACX,6BAA6B,aAAa,oBAAoB;YAC1D,6BAA6B,aAAa,uBAAuB,CACxE,CAAC;IACN,CAAC;IAED,wEAAwE;IACxE,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,WAAW,GAAkB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IACvD,IAAI,cAAc,GAAkB,IAAI,CAAC;IAEzC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,SAAS,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACrB,SAAS,CAAC,qDAAqD,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACd,SAAS,CAAC,kDAAkD,CAAC,CAAC;YAC9D,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC1C;oBACI,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,qDAAqD;oBAC9D,OAAO,EAAE,IAAI;iBAChB;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACX,4EAA4E,CAC/E,CAAC;YACN,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,eAAe,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,aAAa,CAAC,CAAC;QAC5D,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACzB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACzB,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,wEAAwE;IACxE,2EAA2E;IAC3E,6EAA6E;IAC7E,6CAA6C;IAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,SAAS,GAAmB,EAAE,CAAC;IAErC,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;QACzB,cAAc,GAAG,GAAG,OAAO,IAAI,WAAW,EAAE,CAAC;IACjD,CAAC;SAAM,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,cAAc,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QACd,kEAAkE;QAClE,cAAc,GAAG,YAAY,GAAG,YAAY,CAAC;QAC7C,SAAS,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE;gBACJ,aAAa,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC;gBAC/C,SAAS,EAAE,QAAQ;aACtB;SACJ,CAAC,CAAC;IACP,CAAC;IAED,2EAA2E;IAC3E,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAC3C,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,gBAAgB,GAAG,YAAY,GAAG,aAAa,CAAC;QAChD,SAAS,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE;gBACJ,aAAa,EAAE,CAAC,kBAAkB,EAAE,aAAa,CAAC;gBAClD,SAAS,EAAE,QAAQ;gBACnB,WAAW,EAAE,oBAAoB;aACpC;SACJ,CAAC,CAAC;IACP,CAAC;IAED,wEAAwE;IACxE,4EAA4E;IAC5E,mEAAmE;IACnE,2EAA2E;IAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC;IACjD,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7D,MAAM,UAAU,GAAiB;QAC7B,aAAa,EAAE,CAAC,kBAAkB,EAAE,aAAa,CAAC;QAClD,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,kBAAkB;KAClC,CAAC;IACF,IAAI,sBAAsB,GAAkB,IAAI,CAAC;IACjD,IAAI,eAAe,GAAkB,IAAI,CAAC;IAE1C,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,yEAAyE;QACzE,qEAAqE;QACrE,sBAAsB,GAAG,IAAI,CAAC,eAAe,CAAC;QAC9C,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACzE,CAAC;SAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACxB,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACrC,sBAAsB,GAAG,YAAY,GAAG,cAAc,CAAC;YACvD,SAAS,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,IAAI,CAAC,SAAS;gBACrB,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,UAAU;aACrB,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,iEAAiE;YACjE,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;QACrC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC;QACzC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KACtD,CAAC,CAAC;IAEH,4EAA4E;IAC5E,IAAI,eAAe,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,GAAG,CAClB,WAAW,WAAW,wBAAwB,CACjD,CAAC,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACD,MAAM,GAAG,CACL,WAAW,OAAO,YAAY,kBAAkB,CAAC,aAAa,WAAW,UAAU,CAAC,EAAE,EACtF,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,CACvE,CAAC;YACF,UAAU,CAAC,OAAO,CACd,oCAAoC,WAAW,yBAAyB,CAC3E,CAAC;QACN,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,UAAU,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YAC9D,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,MAAM,SAAS,GACX,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;QACjD,CAAC,CAAC,IAAI,CAAC,MAAM;QACb,CAAC,CAAC,kBAAkB,CAAC;IAE7B,IAAI,UAAU,GAAG,SAAS,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,SAAS,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/D,IAAI,CAAC;YACD,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;gBACtC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,OAAO,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACzC,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,MAAM,WAAW,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1D,IAAI,CAAC;YACD,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;gBACtC,WAAW,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YACH,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,WAAW,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAClD,MAAM,GAAG,CAAC;QACd,CAAC;QACD,MAAM,YAAY,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7D,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChE,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YACH,UAAU,GAAG,GAAG,CAAC;YACjB,YAAY,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,YAAY,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAChD,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;IACtD,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACpD,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACzB,YAAY,CAAC,QAAQ,aAAa,iBAAiB,IAAI,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACrD,MAAM,GAAG,GAA2B;QAChC,YAAY,EAAE,aAAa;QAC3B,qBAAqB,EAAE,wBAAwB;QAC/C,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KAClE,CAAC;IACF,IAAI,IAAI,CAAC,KAAK;QAAE,GAAG,CAAC,mBAAmB,GAAG,MAAM,CAAC;IACjD,IAAI,OAAO;QAAE,GAAG,CAAC,gBAAgB,GAAG,OAAO,CAAC;IAE5C,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,CAAC,CAAC,gBAAgB,CAAC;IACpC,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAC;QACpE,GAAG,CAAC,sBAAsB,GAAG,MAAM,CAAC;QACpC,GAAG,CAAC,kBAAkB;YAClB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,0BAA0B,CAAC;QACjE,GAAG,CAAC,qBAAqB,GAAG,gBAAiB,CAAC;QAC9C,GAAG,CAAC,uBAAuB,GAAG,WAAW,CAAC;QAC1C,GAAG,CAAC,oBAAoB,GAAG,KAAK,CAAC;QACjC,oEAAoE;QACpE,uDAAuD;QACvD,IAAI,sBAAsB,EAAE,CAAC;YACzB,GAAG,CAAC,6BAA6B,GAAG,sBAAsB,CAAC;QAC/D,CAAC;IACL,CAAC;SAAM,IAAI,sBAAsB,IAAI,eAAe,EAAE,CAAC;QACnD,YAAY,CACR,wFAAwF;YACpF,4FAA4F,CACnG,CAAC;IACN,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,sBAAsB,aAAa,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IACzE,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACD,WAAW,GAAG,MAAM,SAAS,CAAC;YAC1B,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;YACjC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,2BAA2B,EAAE;YACtD,GAAG;YACH,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,gBAAgB;YACzB,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE;SACnE,CAAC,CAAC;QACH,UAAU,CAAC,OAAO,CAAC,sBAAsB,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC9C,MAAM,GAAG,CAAC;IACd,CAAC;IAED,wEAAwE;IACxE,MAAM,aAAa,GAAG,GAAG,CAAC,4CAA4C,CAAC,CAAC,KAAK,EAAE,CAAC;IAChF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,OAAO,EAAE,CAAC;QACV,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACJ,aAAa,CAAC,IAAI,CACd,+DAA+D,CAClE,CAAC;IACN,CAAC;IAED,MAAM,KAAK,GAAmB;QAC1B,aAAa;QACb,WAAW;QACX,OAAO;QACP,OAAO;QACP,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,IAAI;QACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,cAAc;QACd,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,aAAa;KACtB,CAAC;IACF,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAE1B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,YAAY,CAAC,sBAAsB,CAAC,CAAC;IACrC,aAAa,CAAC;QACV,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC,WAAW,EAAE,aAAa,CAAC;QAC5B,CAAC,UAAU,EAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAClD,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC/C,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvE,CAAC,OAAO,EAAE,UAAU,CAAC;QACrB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClD;YACI,UAAU;YACV,QAAQ;gBACJ,CAAC,CAAC,KAAK,CAAC,KAAK,CACP,eAAe,GAAG,CAAC,uBAAuB,IAAI,GAAG,CAAC,oBAAoB,GAAG,CAC5E;gBACH,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;SAChD;QACD;YACI,gBAAgB;YAChB,CAAC,QAAQ;gBACL,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;gBAClB,CAAC,CAAC,sBAAsB;oBACtB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,yCAAyC,CAAC;oBACxD,CAAC,CAAC,eAAe;wBACf,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,WAAW,WAAW,CAAC;wBAC/D,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC;SACzE;QACD,CAAC,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;KAC1E,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,QAAQ,IAAI,CAAC,sBAAsB,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1D,SAAS,CACL,yEAAyE;YACrE,0EAA0E,CACjF,CAAC;QACF,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,GAAG,CACL,qDAAqD;YACjD,WAAW;YACX,uBAAuB;YACvB,iFAAiF;YACjF,yEAAyE,CAChF,CACJ,CAAC;QACF,OAAO,CAAC,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,SAAS,CAAC,4CAA4C,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CACP,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CACtC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAC3C,MAAM,CAAC,CAAC,WAAW,EAAE,CACzB,CAAC;YACN,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,SAAS,CAAC,oCAAoC,aAAa,8BAA8B,aAAa,EAAE,CAAC,CAAC;IAC1G,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,2DAA2D;IAC3D,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5C,MAAM,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACL,kCAAkC;IACtC,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACf,SAAS,CAAC,uEAAuE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC7C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,GAAG,EAAE;gBACd,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;YACd,CAAC,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
FROM node:20-alpine AS base
|
|
2
2
|
|
|
3
|
+
# Bumped by the CLI when bundled assets (chat UI, entrypoint) change, so an
|
|
4
|
+
# existing `1claw/agent:stable` is rebuilt instead of silently reused.
|
|
5
|
+
ARG ONECLAW_BASE_VERSION=dev
|
|
6
|
+
LABEL org.1claw.base-version=$ONECLAW_BASE_VERSION
|
|
7
|
+
|
|
3
8
|
RUN apk add --no-cache curl tini
|
|
4
9
|
|
|
5
10
|
WORKDIR /app
|
|
@@ -20,8 +25,9 @@ RUN chmod +x /app/entrypoint.sh /app/healthcheck.sh
|
|
|
20
25
|
# Module extension point: modules drop assets under /app/modules
|
|
21
26
|
RUN mkdir -p /app/modules /run/1claw
|
|
22
27
|
|
|
28
|
+
# NOTE: mode (local vs cloud) and LLM wiring are passed at `docker run` time via
|
|
29
|
+
# -e flags by `1claw init`; nothing about the vault is baked into the image.
|
|
23
30
|
ENV NODE_ENV=production
|
|
24
|
-
ENV ONECLAW_LOCAL_VAULT=true
|
|
25
31
|
ENV ONECLAW_DAEMON_SOCKET=/run/1claw/daemon.sock
|
|
26
32
|
ENV CHAT_UI_PORT=3000
|
|
27
33
|
|
|
@@ -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
|
}
|
|
@@ -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":"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"}
|
|
@@ -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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"}
|