@desplega.ai/agent-swarm 1.156.0 → 1.158.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/dist/{acp-adapter-c1msptrw.js → acp-adapter-xaq4n6pc.js} +1 -1
- package/dist/{actions-wd41qtdc.js → actions-p9hz5yat.js} +15 -15
- package/dist/{app-tz2qrnah.js → app-g26wdcz6.js} +4 -4
- package/dist/{artifact-td4q4dch.js → artifact-3v5t9jtg.js} +1 -1
- package/dist/{assistant-c3q1zj2t.js → assistant-wydfqkb3.js} +16 -16
- package/dist/{boot-reembed-0be1krkm.js → boot-reembed-g5ckg9yb.js} +6 -6
- package/dist/{boot-reembed-r00j03f3.js → boot-reembed-se8zmdcp.js} +5 -5
- package/dist/{boot-scrub-logs-9j4hd0vw.js → boot-scrub-logs-wfxqan61.js} +3 -3
- package/dist/{seed-pricing-ncgxz1r2.js → boot-seeds-s3q01xj3.js} +10 -10
- package/dist/{claude-adapter-112w28qc.js → claude-adapter-tv2x4f36.js} +7 -7
- package/dist/{claude-managed-adapter-ea2aga6w.js → claude-managed-adapter-41b2s7fd.js} +2 -2
- package/dist/{claude-sdk-session-k7pb5kfz.js → claude-sdk-session-t442qz6f.js} +8 -8
- package/dist/{cli-e781c6f9.js → cli-0xjkj1j7.js} +1 -0
- package/dist/{cli-58rgvkt4.js → cli-1hkrch3k.js} +2 -2
- package/dist/{cli-mx3bzbv8.js → cli-20cj37vt.js} +1968 -44
- package/dist/{cli-h0wdadsx.js → cli-4198qc9v.js} +7 -3
- package/dist/{cli-24w39x6n.js → cli-47m6dkd3.js} +362 -126
- package/dist/{cli-90x9ewbz.js → cli-53sz8gkz.js} +1 -1
- package/dist/{cli-005pze6s.js → cli-5d10vd2m.js} +1 -1
- package/dist/{cli-08n8jxcw.js → cli-65hjmev5.js} +57 -17
- package/dist/{cli-scwq51gn.js → cli-68w09sjw.js} +7 -1
- package/dist/{cli-7j2098n5.js → cli-7gtvvpbh.js} +4 -4
- package/dist/{cli-b05d7szr.js → cli-7s3syk22.js} +18 -11
- package/dist/{cli-9w4ex8vh.js → cli-8qmme6vd.js} +2 -2
- package/dist/{cli-28wkjpdp.js → cli-987hg0aa.js} +2 -2
- package/dist/{cli-7pgcpcrg.js → cli-9httdpyq.js} +1 -1
- package/dist/{cli-jk26c1sz.js → cli-aky8tctm.js} +26 -93
- package/dist/{cli-865swy5p.js → cli-c07r9a2m.js} +3 -2
- package/dist/{cli-nyqza443.js → cli-fgqxwrpv.js} +291 -12
- package/dist/{cli-9pyah9c4.js → cli-ftfvggzx.js} +633 -166
- package/dist/{cli-ytxs7mn1.js → cli-g8djp6qe.js} +17 -0
- package/dist/{cli-avkd6mqv.js → cli-h967nb6r.js} +551 -0
- package/dist/{cli-y8bfxjtw.js → cli-j55n64b6.js} +23 -22
- package/dist/{cli-7vj52450.js → cli-j57qkrpq.js} +86 -28
- package/dist/{cli-tjmghmm5.js → cli-q67y4wzm.js} +6 -3
- package/dist/{cli-n6zq3kbd.js → cli-rj19hc34.js} +1 -1
- package/dist/{cli-tp0d7vzb.js → cli-rjehvrts.js} +4 -4
- package/dist/{cli-s8hpxeg4.js → cli-rqz8qbw7.js} +245 -75
- package/dist/{cli-p37sg0a9.js → cli-s8eet254.js} +1 -1
- package/dist/cli-t1ze64h3.js +811 -0
- package/dist/{cli-hc2fkhdv.js → cli-ws6rqycm.js} +3 -2
- package/dist/{cli-t1cd3mhp.js → cli-wscdvcqz.js} +13 -5
- package/dist/{cli-xa4j64zh.js → cli-x24pshtq.js} +5 -5
- package/dist/{cli-nbp6m6gp.js → cli-xberxa1r.js} +51 -26
- package/dist/{cli-szcyv1mm.js → cli-xhaeg2nc.js} +1 -1
- package/dist/cli.js +30 -16
- package/dist/{codex-adapter-g4tj1f2g.js → codex-adapter-cnm8wk11.js} +5 -5
- package/dist/{codex-session-runner-ad8ha7zt.js → codex-session-runner-gfg547zj.js} +5 -5
- package/dist/{commands-z3gd8ppc.js → commands-e3bn0p75.js} +3 -3
- package/dist/{db-bezm97r9.js → db-03v9kzr2.js} +17 -3
- package/dist/{dispatcher-a97hc33y.js → dispatcher-nrmg8yht.js} +14 -14
- package/dist/{dsh-adapter-1dwg97zv.js → dsh-adapter-k03nfqa6.js} +2 -2
- package/dist/{handlers-wtdy1x02.js → handlers-aqcedbyb.js} +17 -17
- package/dist/{hook-7edgmzng.js → hook-7vkskkre.js} +19 -11
- package/dist/{hook-fvs58a5b.js → hook-ybvmrmhq.js} +4 -4
- package/dist/{http-phnf93hp.js → http-2eqa8t24.js} +432 -195
- package/dist/{index-7x131mmf.js → index-1yks3qcr.js} +14 -14
- package/dist/{index-1fktvwxc.js → index-a3vn96n8.js} +31 -28
- package/dist/{index-yp8rasxk.js → index-c6zsv1bd.js} +5 -5
- package/dist/{index-50jxgw0d.js → index-chgdkq36.js} +14 -14
- package/dist/{index-7jwk7nsm.js → index-x71bvq0p.js} +15 -15
- package/dist/{keepalive-nnz07ebd.js → keepalive-vtkf5n99.js} +5 -5
- package/dist/{lead-mg7qcgww.js → lead-h3sp357x.js} +26 -26
- package/dist/{maintenance-ywmnqrpx.js → maintenance-jzeqtk3q.js} +6 -6
- package/dist/{oauth-refresh-sweep-c63sqfs1.js → oauth-refresh-sweep-qp3dzmdp.js} +4 -4
- package/dist/{onboard-2zj8sqkq.js → onboard-tmsp0qbz.js} +278 -81
- package/dist/{opencode-adapter-z64xjzec.js → opencode-adapter-x6x2da1z.js} +3 -3
- package/dist/{otel-impl-jgdfm26f.js → otel-impl-9mz73q65.js} +416 -301
- package/dist/{pi-mono-adapter-2b7mw16r.js → pi-mono-adapter-m6dvv0dz.js} +2 -2
- package/dist/{pricing-refresh-3whntb69.js → pricing-refresh-v1cbr9te.js} +5 -5
- package/dist/{rbac-roles-3zptcc3p.js → rbac-roles-c9wqz83x.js} +4 -4
- package/dist/{render-v2-dbvpyysc.js → render-v2-gryrh9h8.js} +4 -4
- package/dist/{setup-qwx0j8z9.js → setup-q9720bt6.js} +2 -2
- package/dist/{virtual-modules-8qheft18.js → virtual-modules-3htpgn8x.js} +1 -1
- package/dist/{work-objects-sjbcmvep.js → work-objects-b76x7deb.js} +17 -17
- package/dist/{worker-xezqdkb7.js → worker-6vrxbv41.js} +26 -26
- package/openapi.json +1626 -629
- package/package.json +3 -2
- package/src/apps/catalog.generated.json +229 -0
- package/src/apps/page-validator.ts +71 -16
- package/src/apps/row-store.ts +66 -11
- package/src/apps/sync.ts +59 -17
- package/src/artifact-sdk/browser-sdk.ts +436 -2
- package/src/be/approval-sweeps.ts +109 -0
- package/src/be/boot-seeds.ts +40 -0
- package/src/be/chunking.ts +1 -1
- package/src/be/db/agents.ts +20 -0
- package/src/be/db/approvals.ts +78 -0
- package/src/be/db/tasks/read.ts +197 -39
- package/src/be/db/tasks/write.ts +41 -9
- package/src/be/db-client.ts +107 -48
- package/src/be/db.ts +219 -76
- package/src/be/events.ts +33 -1
- package/src/be/memory/graph-expansion.ts +10 -3
- package/src/be/memory/providers/sqlite-store.ts +55 -13
- package/src/be/memory/raters/retrieval.ts +5 -2
- package/src/be/memory/reranker.ts +26 -2
- package/src/be/memory/types.ts +2 -0
- package/src/be/migrations/166_approval_request_auto_cancellation.sql +9 -0
- package/src/be/migrations/171_memory_retrieval_relevance.sql +8 -0
- package/src/be/migrations/175_workflow_runs_list_index.sql +11 -0
- package/src/be/migrations/177_events_event_agent_created_index.sql +11 -0
- package/src/be/models-catalog.ts +2 -0
- package/src/be/modelsdev-cache.json +1857 -0
- package/src/be/modelsdev-cache.ts +14 -1
- package/src/be/pricing-normalize.ts +2 -0
- package/src/be/scripts/typecheck.ts +1 -0
- package/src/be/seed-pricing.ts +3 -1
- package/src/be/seed-skills/bundled-files.generated.json +1 -1
- package/src/be/steering.ts +53 -3
- package/src/be/swarm-config-guard.ts +3 -0
- package/src/be/task-citations.ts +29 -0
- package/src/cli.tsx +14 -1
- package/src/commands/onboard/compose-generator.ts +8 -3
- package/src/commands/onboard/container-engine.ts +220 -0
- package/src/commands/onboard/manifest.ts +1 -0
- package/src/commands/onboard/steps/health-check.tsx +4 -1
- package/src/commands/onboard/steps/prereq-check.tsx +50 -54
- package/src/commands/onboard/steps/start.tsx +31 -16
- package/src/commands/onboard/types.ts +7 -2
- package/src/commands/onboard.tsx +39 -4
- package/src/commands/profile-sync.ts +79 -26
- package/src/commands/runner.ts +8 -1
- package/src/extensions/catalog.generated.json +17 -0
- package/src/extensions/contract-types.generated.ts +1 -1
- package/src/heartbeat/heartbeat.ts +263 -103
- package/src/hooks/hook.ts +21 -12
- package/src/http/agents.ts +35 -0
- package/src/http/approval-requests.ts +136 -64
- package/src/http/apps.ts +14 -3
- package/src/http/config.ts +15 -1
- package/src/http/events.ts +62 -2
- package/src/http/index.ts +6 -4
- package/src/http/memory.ts +21 -7
- package/src/http/schedules.ts +1 -1
- package/src/http/session-data.ts +9 -4
- package/src/http/sessions.ts +25 -18
- package/src/http/stats.ts +19 -7
- package/src/http/status.ts +11 -1
- package/src/http/tasks.ts +40 -8
- package/src/http/webhooks.ts +67 -46
- package/src/http/workflows.ts +15 -20
- package/src/linear/outbound.ts +37 -15
- package/src/otel-impl.ts +151 -1
- package/src/otel.ts +14 -3
- package/src/prompts/memories.ts +19 -2
- package/src/providers/claude-managed-models.ts +8 -0
- package/src/providers/codex-agents-md.ts +140 -17
- package/src/providers/modelsdev-reasoning.json +551 -0
- package/src/rbac/legacy-policy.ts +16 -0
- package/src/rbac/permissions.ts +4 -0
- package/src/scheduler/deferred-task-waits.ts +28 -0
- package/src/scheduler/schedule-task.ts +3 -0
- package/src/scheduler/scheduler.ts +14 -0
- package/src/scripts-runtime/sdk-allowlist.ts +1 -0
- package/src/scripts-runtime/swarm-sdk.ts +9 -0
- package/src/scripts-runtime/types/stdlib.d.ts +1 -0
- package/src/scripts-runtime/types/swarm-extension.d.ts +1 -0
- package/src/scripts-runtime/types/swarm-sdk.d.ts +1 -0
- package/src/server.ts +12 -7
- package/src/slack/app.ts +35 -4
- package/src/slack/connection-state.ts +17 -0
- package/src/tasks/context-key.ts +1 -0
- package/src/tasks/worker-follow-up.ts +6 -2
- package/src/tests/agent-task-activity.test.ts +74 -0
- package/src/tests/agents-list-model-display.test.ts +6 -1
- package/src/tests/approval-auto-cancellation-migration.test.ts +104 -0
- package/src/tests/approval-requests.test.ts +395 -0
- package/src/tests/approval-sweeps-config.test.ts +47 -0
- package/src/tests/approval-sweeps.test.ts +508 -0
- package/src/tests/apps-kibo-blocks.test.ts +77 -0
- package/src/tests/apps-spike.test.ts +56 -1
- package/src/tests/apps-sync-engine.test.ts +20 -9
- package/src/tests/boot-seeds.test.ts +170 -0
- package/src/tests/cancel-approval-request-tool.test.ts +115 -0
- package/src/tests/claude-managed-adapter.test.ts +6 -0
- package/src/tests/codex-adapter.test.ts +126 -1
- package/src/tests/config-key-filter.test.ts +80 -0
- package/src/tests/context-window.test.ts +1 -0
- package/src/tests/db-client-busy-retry.test.ts +96 -0
- package/src/tests/db-client.test.ts +60 -1
- package/src/tests/db-task-read-contract.test.ts +10 -0
- package/src/tests/db-task-write-contract.test.ts +9 -0
- package/src/tests/deferred-schedule-reaper.test.ts +193 -0
- package/src/tests/docs-index-footprint.test.js +3 -3
- package/src/tests/events-http.test.ts +103 -0
- package/src/tests/extensions-catalog.test.ts +22 -17
- package/src/tests/extensions-pre-task.test.ts +107 -0
- package/src/tests/fixtures/kibo-blocks-definition.json.txt +105 -0
- package/src/tests/follow-up-config-inheritance.test.ts +260 -0
- package/src/tests/heartbeat-orphan-resume.test.ts +84 -0
- package/src/tests/heartbeat-reboot-live.test.ts +95 -0
- package/src/tests/heartbeat-stall-cas.test.ts +80 -0
- package/src/tests/heartbeat.test.ts +99 -3
- package/src/tests/hook-mcp-config.test.ts +29 -0
- package/src/tests/http-api-integration.test.ts +16 -2
- package/src/tests/kv-storage.test.ts +62 -0
- package/src/tests/linear-outbound-sync.test.ts +120 -5
- package/src/tests/list-endpoint-slimming.test.ts +91 -0
- package/src/tests/memory-graph-organic-route.test.ts +155 -0
- package/src/tests/memory-http-recall-gating.test.ts +14 -4
- package/src/tests/memory-hybrid.test.ts +161 -1
- package/src/tests/memory-prompt-recall-crowdout.test.ts +297 -0
- package/src/tests/memory.test.ts +22 -0
- package/src/tests/onboard-container-engine.test.ts +240 -0
- package/src/tests/otel-event-loop-and-logs.test.ts +99 -0
- package/src/tests/pricing-routes.test.ts +14 -0
- package/src/tests/profile-sync-warning.test.ts +8 -4
- package/src/tests/promote-draft-task-route.test.ts +19 -0
- package/src/tests/provider-registration.test.ts +296 -42
- package/src/tests/rbac-engine.test.ts +30 -0
- package/src/tests/reasoning-effort.test.ts +8 -0
- package/src/tests/script-connections.test.ts +7 -0
- package/src/tests/sdk-allowlist.test.ts +39 -0
- package/src/tests/session-costs-model-key-normalize.test.ts +1 -0
- package/src/tests/sessions-detail-batch.test.ts +250 -0
- package/src/tests/sessions.test.ts +118 -0
- package/src/tests/slack-config.test.ts +22 -0
- package/src/tests/sonnet-5-5-registry.test.ts +44 -0
- package/src/tests/status.test.ts +36 -1
- package/src/tests/swarm-diff.test.ts +316 -10
- package/src/tests/task-completion-idempotency.test.ts +2 -1
- package/src/tests/tasks-requested-by-filter.test.ts +3 -1
- package/src/tests/tool-annotations.test.ts +1 -1
- package/src/tests/ui-list-slim-projections.test.ts +158 -0
- package/src/tests/webhooks-task-blocked.test.ts +127 -0
- package/src/tests/workflow-approval-recovery.test.ts +203 -0
- package/src/tests/workflow-hitl-routing.test.ts +22 -1
- package/src/tests/workflow-hitl-slack-card.test.ts +52 -0
- package/src/tests/workflow-http-v2.test.ts +99 -8
- package/src/tests/workflow-retry-validation.test.ts +56 -0
- package/src/tests/workflow-tla-races.test.ts +389 -0
- package/src/tests/workflow-validation-port-routing.test.ts +113 -1
- package/src/tools/cancel-approval-request.ts +57 -0
- package/src/tools/memory-search.ts +1 -0
- package/src/tools/request-human-input.ts +4 -2
- package/src/tools/schedules/list-schedules.ts +4 -2
- package/src/tools/send-task.ts +4 -0
- package/src/tools/templates.ts +19 -0
- package/src/tools/tool-config.ts +2 -1
- package/src/tools/workflows/list-workflow-runs.ts +1 -0
- package/src/types.ts +38 -0
- package/src/utils/context-window.ts +1 -0
- package/src/workflows/approval-cancel.ts +152 -0
- package/src/workflows/approval-notifications.ts +84 -0
- package/src/workflows/checkpoint.ts +10 -5
- package/src/workflows/definition.ts +21 -0
- package/src/workflows/engine.ts +152 -21
- package/src/workflows/executors/human-in-the-loop.ts +1 -1
- package/src/workflows/recovery.ts +100 -45
- package/src/workflows/resume.ts +49 -18
- package/src/workflows/retry-poller.ts +71 -21
- package/templates/extensions/README.md +1 -0
- package/templates/extensions/github-sender-allowlist/README.md +18 -0
- package/templates/extensions/github-sender-allowlist/hooks.ts +55 -0
- package/templates/extensions/github-sender-allowlist/manifest.json +8 -0
- package/templates/skills/apps/content.md +20 -1
- package/templates/skills/code-quality/content.md +26 -1
- package/templates/skills/pages/content.md +16 -4
- package/templates/skills/pages/files/examples/multiplayer-board.html +3 -12
- package/templates/skills/scheduling/content.md +1 -1
- package/dist/cli-2daksqps.js +0 -378
- package/dist/rbac-roles-3zw68x72.js +0 -37
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
createDefaultMcpJson,
|
|
4
4
|
createDefaultSettingsLocal,
|
|
5
5
|
createHooksConfig
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-9httdpyq.js";
|
|
7
7
|
import {
|
|
8
8
|
require_jsx_dev_runtime
|
|
9
9
|
} from "./cli-eetrvv91.js";
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
import {
|
|
19
19
|
init_package,
|
|
20
20
|
package_default
|
|
21
|
-
} from "./cli-
|
|
21
|
+
} from "./cli-c07r9a2m.js";
|
|
22
22
|
import {
|
|
23
23
|
Box_default,
|
|
24
24
|
Select,
|
|
@@ -40,6 +40,148 @@ init_package();
|
|
|
40
40
|
init_config();
|
|
41
41
|
var import_react15 = __toESM(require_react(), 1);
|
|
42
42
|
|
|
43
|
+
// src/commands/onboard/container-engine.ts
|
|
44
|
+
var CONTAINER_ENGINE_PREFERENCES = [
|
|
45
|
+
"auto",
|
|
46
|
+
"docker",
|
|
47
|
+
"podman"
|
|
48
|
+
];
|
|
49
|
+
var CONTAINER_ENGINE_LABELS = {
|
|
50
|
+
docker: "Docker",
|
|
51
|
+
podman: "Podman"
|
|
52
|
+
};
|
|
53
|
+
var ENGINE_INSTALL_HINTS = {
|
|
54
|
+
docker: "Install: brew install --cask docker (macOS) or https://docs.docker.com/get-docker/",
|
|
55
|
+
podman: "Install: https://podman.io/docs/installation"
|
|
56
|
+
};
|
|
57
|
+
var PODMAN_COMPOSE_PROVIDER_HINT = "`podman compose` needs an external Compose provider. Install podman-compose (dnf/apt install podman-compose, or pipx install podman-compose) or docker-compose v2, or point PODMAN_COMPOSE_PROVIDER at one. See https://docs.agent-swarm.dev/docs/guides/podman-rootless";
|
|
58
|
+
function isContainerEnginePreference(value) {
|
|
59
|
+
return CONTAINER_ENGINE_PREFERENCES.includes(value);
|
|
60
|
+
}
|
|
61
|
+
var CONTAINER_ENGINE_ENV = "AGENT_SWARM_CONTAINER_ENGINE";
|
|
62
|
+
function resolveContainerEnginePreference(flag, env) {
|
|
63
|
+
const options = CONTAINER_ENGINE_PREFERENCES.join(", ");
|
|
64
|
+
if (flag !== undefined) {
|
|
65
|
+
if (!isContainerEnginePreference(flag)) {
|
|
66
|
+
return { ok: false, error: `Invalid container engine "${flag}". Options: ${options}` };
|
|
67
|
+
}
|
|
68
|
+
return { ok: true, value: flag };
|
|
69
|
+
}
|
|
70
|
+
const fromEnv = env[CONTAINER_ENGINE_ENV];
|
|
71
|
+
if (fromEnv === undefined || fromEnv === "")
|
|
72
|
+
return { ok: true, value: "auto" };
|
|
73
|
+
if (!isContainerEnginePreference(fromEnv)) {
|
|
74
|
+
return {
|
|
75
|
+
ok: false,
|
|
76
|
+
error: `Invalid ${CONTAINER_ENGINE_ENV} "${fromEnv}". Options: ${options}`
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return { ok: true, value: fromEnv };
|
|
80
|
+
}
|
|
81
|
+
function engineForCommands(preference) {
|
|
82
|
+
return preference === "podman" ? "podman" : "docker";
|
|
83
|
+
}
|
|
84
|
+
function composeArgv(engine, args) {
|
|
85
|
+
return [engine, "compose", ...args];
|
|
86
|
+
}
|
|
87
|
+
function composeCommandText(engine, args) {
|
|
88
|
+
return `${engine} compose ${args}`;
|
|
89
|
+
}
|
|
90
|
+
var defaultCommandRunner = async (argv, options) => {
|
|
91
|
+
try {
|
|
92
|
+
const proc = Bun.spawn(argv, {
|
|
93
|
+
cwd: options?.cwd,
|
|
94
|
+
stdout: "pipe",
|
|
95
|
+
stderr: "pipe",
|
|
96
|
+
stdin: "ignore"
|
|
97
|
+
});
|
|
98
|
+
const [stdout, stderr, exitCode] = await Promise.all([
|
|
99
|
+
new Response(proc.stdout).text(),
|
|
100
|
+
new Response(proc.stderr).text(),
|
|
101
|
+
proc.exited
|
|
102
|
+
]);
|
|
103
|
+
return { exitCode, stdout, stderr };
|
|
104
|
+
} catch (err) {
|
|
105
|
+
return {
|
|
106
|
+
exitCode: 127,
|
|
107
|
+
stdout: "",
|
|
108
|
+
stderr: err instanceof Error ? err.message : String(err)
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
function firstLine(text) {
|
|
113
|
+
return text.trim().split(`
|
|
114
|
+
`)[0]?.trim() ?? "";
|
|
115
|
+
}
|
|
116
|
+
async function checkBinary(engine, run) {
|
|
117
|
+
const label = CONTAINER_ENGINE_LABELS[engine];
|
|
118
|
+
const result = await run([engine, "--version"]);
|
|
119
|
+
if (result.exitCode === 0)
|
|
120
|
+
return { ok: true, version: firstLine(result.stdout) };
|
|
121
|
+
return {
|
|
122
|
+
ok: false,
|
|
123
|
+
error: result.exitCode === 127 ? `${label} not found` : `${label} exited with non-zero status`,
|
|
124
|
+
hint: ENGINE_INSTALL_HINTS[engine]
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
async function checkCompose(engine, run) {
|
|
128
|
+
const result = await run(composeArgv(engine, ["version"]));
|
|
129
|
+
if (result.exitCode === 0) {
|
|
130
|
+
return { ok: true, version: firstLine(result.stdout) || firstLine(result.stderr) };
|
|
131
|
+
}
|
|
132
|
+
if (engine === "podman") {
|
|
133
|
+
const detail = firstLine(result.stderr) || firstLine(result.stdout);
|
|
134
|
+
return {
|
|
135
|
+
ok: false,
|
|
136
|
+
error: `podman compose has no working Compose provider${detail ? ` (${detail})` : ""}`,
|
|
137
|
+
hint: PODMAN_COMPOSE_PROVIDER_HINT
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
ok: false,
|
|
142
|
+
error: "Docker Compose v2 not found",
|
|
143
|
+
hint: "Install the Compose v2 plugin: https://docs.docker.com/compose/install/"
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
async function probeEngine(engine, run = defaultCommandRunner) {
|
|
147
|
+
const binary = await checkBinary(engine, run);
|
|
148
|
+
if (!binary.ok) {
|
|
149
|
+
return { engine, binary, compose: { ok: false, error: "skipped: engine unavailable" } };
|
|
150
|
+
}
|
|
151
|
+
return { engine, binary, compose: await checkCompose(engine, run) };
|
|
152
|
+
}
|
|
153
|
+
function probeError(probe) {
|
|
154
|
+
if (!probe.binary.ok)
|
|
155
|
+
return probe.binary.error ?? "engine unavailable";
|
|
156
|
+
return probe.compose.error ?? "Compose unavailable";
|
|
157
|
+
}
|
|
158
|
+
async function resolveContainerEngine(preference, run = defaultCommandRunner) {
|
|
159
|
+
if (preference !== "auto") {
|
|
160
|
+
const probe = await probeEngine(preference, run);
|
|
161
|
+
if (probe.binary.ok && probe.compose.ok)
|
|
162
|
+
return { ok: true, engine: preference, probe };
|
|
163
|
+
return { ok: false, engine: preference, error: probeError(probe), probe };
|
|
164
|
+
}
|
|
165
|
+
const docker = await probeEngine("docker", run);
|
|
166
|
+
if (docker.binary.ok) {
|
|
167
|
+
if (docker.compose.ok)
|
|
168
|
+
return { ok: true, engine: "docker", probe: docker };
|
|
169
|
+
return { ok: false, engine: "docker", error: probeError(docker), probe: docker };
|
|
170
|
+
}
|
|
171
|
+
const podman = await probeEngine("podman", run);
|
|
172
|
+
if (podman.binary.ok) {
|
|
173
|
+
if (podman.compose.ok)
|
|
174
|
+
return { ok: true, engine: "podman", probe: podman };
|
|
175
|
+
return { ok: false, engine: "podman", error: probeError(podman), probe: podman };
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
ok: false,
|
|
179
|
+
engine: null,
|
|
180
|
+
error: "Neither Docker nor Podman was found",
|
|
181
|
+
probe: docker
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
|
|
43
185
|
// src/commands/onboard/dashboard-url.ts
|
|
44
186
|
var DEFAULT_DASHBOARD_BASE = "https://app.agent-swarm.dev";
|
|
45
187
|
function buildOnboardDashboardUrl(parts) {
|
|
@@ -79,7 +221,7 @@ var STEP_LABELS = [
|
|
|
79
221
|
{ step: "integration_menu", label: "Integrations" },
|
|
80
222
|
{ step: "review", label: "Review" },
|
|
81
223
|
{ step: "generate", label: "Generate" },
|
|
82
|
-
{ step: "prereq_check", label: "
|
|
224
|
+
{ step: "prereq_check", label: "Engine" },
|
|
83
225
|
{ step: "start", label: "Start" },
|
|
84
226
|
{ step: "health_check", label: "Health" },
|
|
85
227
|
{ step: "post_connect", label: "Connect" },
|
|
@@ -138,6 +280,7 @@ var INITIAL_STATE = {
|
|
|
138
280
|
apiPort: 0,
|
|
139
281
|
maxConcurrentTasks: null,
|
|
140
282
|
pullPolicy: "always",
|
|
283
|
+
containerEngine: "auto",
|
|
141
284
|
outputDir: process.cwd(),
|
|
142
285
|
nonInteractive: false,
|
|
143
286
|
error: null,
|
|
@@ -878,6 +1021,7 @@ var ENV_AWS_SESSION_TOKEN = " - AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN:-}";
|
|
|
878
1021
|
var ENV_AWS_PROFILE = " - AWS_PROFILE=${AWS_PROFILE}";
|
|
879
1022
|
var ENV_BEDROCK_AUTH_MODE = " - BEDROCK_AUTH_MODE=${BEDROCK_AUTH_MODE}";
|
|
880
1023
|
var AWS_PROFILE_VOLUME = " - ${HOME}/.aws:/home/worker/.aws:ro";
|
|
1024
|
+
var AWS_PROFILE_VOLUME_SELINUX = " - ${HOME}/.aws:/home/worker/.aws:ro,z";
|
|
881
1025
|
var ENV_GITHUB_TOKEN = " - GITHUB_TOKEN=${GITHUB_TOKEN}";
|
|
882
1026
|
var ENV_GITHUB_EMAIL = " - GITHUB_EMAIL=${GITHUB_EMAIL}";
|
|
883
1027
|
var ENV_GITHUB_NAME = " - GITHUB_NAME=${GITHUB_NAME}";
|
|
@@ -921,11 +1065,12 @@ function appendProviderEnvironment(lines, state, includeHarness) {
|
|
|
921
1065
|
function generateCompose(state) {
|
|
922
1066
|
const expanded = expandServices(state.services, state.agentIds);
|
|
923
1067
|
const lines = [];
|
|
924
|
-
|
|
1068
|
+
const engine = engineForCommands(state.containerEngine);
|
|
1069
|
+
lines.push(`# ${engine === "podman" ? "Podman" : "Docker"} Compose for Agent Swarm`);
|
|
925
1070
|
lines.push("# Generated by `agent-swarm onboard`");
|
|
926
1071
|
lines.push("#");
|
|
927
1072
|
lines.push("# Usage:");
|
|
928
|
-
lines.push(
|
|
1073
|
+
lines.push(`# ${composeCommandText(engine, "--env-file .env up -d")}`);
|
|
929
1074
|
lines.push("#");
|
|
930
1075
|
lines.push("# Image version: set AGENT_SWARM_VERSION in .env to a published release.");
|
|
931
1076
|
lines.push("# Blank falls back to `latest`, which moves on every commit to main and is");
|
|
@@ -1027,7 +1172,7 @@ function generateCompose(state) {
|
|
|
1027
1172
|
lines.push(" - swarm_shared:/app/shared");
|
|
1028
1173
|
lines.push(` - swarm_${svc.sanitizedName}:/app/agent`);
|
|
1029
1174
|
if (state.provider === "bedrock" && state.awsProfile) {
|
|
1030
|
-
lines.push(AWS_PROFILE_VOLUME);
|
|
1175
|
+
lines.push(engine === "podman" ? AWS_PROFILE_VOLUME_SELINUX : AWS_PROFILE_VOLUME);
|
|
1031
1176
|
}
|
|
1032
1177
|
lines.push("");
|
|
1033
1178
|
lines.push(" restart: unless-stopped");
|
|
@@ -1161,6 +1306,7 @@ function generateManifest(state) {
|
|
|
1161
1306
|
providerLabel: PROVIDER_LABELS[state.provider],
|
|
1162
1307
|
providerNotice: state.provider === "bedrock" ? BEDROCK_ALPHA_NOTICE : undefined,
|
|
1163
1308
|
harness: state.harness,
|
|
1309
|
+
containerEngine: state.containerEngine,
|
|
1164
1310
|
services: expanded.map((svc) => ({
|
|
1165
1311
|
name: svc.name,
|
|
1166
1312
|
templateId: svc.entry.template,
|
|
@@ -1894,8 +2040,11 @@ function HealthCheckStep({ state, addLog, goToNext }) {
|
|
|
1894
2040
|
}, undefined, true, undefined, this),
|
|
1895
2041
|
/* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
|
|
1896
2042
|
dimColor: true,
|
|
1897
|
-
children:
|
|
1898
|
-
|
|
2043
|
+
children: [
|
|
2044
|
+
"Try: ",
|
|
2045
|
+
composeCommandText(engineForCommands(state.containerEngine), "logs --tail 50")
|
|
2046
|
+
]
|
|
2047
|
+
}, undefined, true, undefined, this),
|
|
1899
2048
|
/* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Box_default, {
|
|
1900
2049
|
marginTop: 1,
|
|
1901
2050
|
children: /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Select, {
|
|
@@ -2945,30 +3094,9 @@ function PrereqCheckStep({ state, addLog, goToNext, goToStep, goToError }) {
|
|
|
2945
3094
|
executed.current = true;
|
|
2946
3095
|
const run = async () => {
|
|
2947
3096
|
const res = {
|
|
2948
|
-
|
|
2949
|
-
compose: { ok: false },
|
|
3097
|
+
engine: await resolveContainerEngine(state.containerEngine),
|
|
2950
3098
|
ports: { ok: true }
|
|
2951
3099
|
};
|
|
2952
|
-
try {
|
|
2953
|
-
const out = await Bun.$`docker --version`.quiet();
|
|
2954
|
-
if (out.exitCode === 0) {
|
|
2955
|
-
res.docker = { ok: true, version: out.text().trim() };
|
|
2956
|
-
} else {
|
|
2957
|
-
res.docker = { ok: false, error: "Docker exited with non-zero status" };
|
|
2958
|
-
}
|
|
2959
|
-
} catch {
|
|
2960
|
-
res.docker = { ok: false, error: "Docker not found" };
|
|
2961
|
-
}
|
|
2962
|
-
try {
|
|
2963
|
-
const out = await Bun.$`docker compose version`.quiet();
|
|
2964
|
-
if (out.exitCode === 0) {
|
|
2965
|
-
res.compose = { ok: true, version: out.text().trim() };
|
|
2966
|
-
} else {
|
|
2967
|
-
res.compose = { ok: false, error: "Docker Compose not found" };
|
|
2968
|
-
}
|
|
2969
|
-
} catch {
|
|
2970
|
-
res.compose = { ok: false, error: "Docker Compose v2 not found" };
|
|
2971
|
-
}
|
|
2972
3100
|
const portsToCheck = [3013];
|
|
2973
3101
|
const agentCount = state.services.reduce((sum, s) => sum + s.count, 0);
|
|
2974
3102
|
for (let i = 0;i < agentCount; i++) {
|
|
@@ -2988,7 +3116,8 @@ function PrereqCheckStep({ state, addLog, goToNext, goToStep, goToError }) {
|
|
|
2988
3116
|
res.ports = { ok: false, conflicts };
|
|
2989
3117
|
}
|
|
2990
3118
|
setResult(res);
|
|
2991
|
-
if (res.
|
|
3119
|
+
if (res.engine.ok && res.ports.ok) {
|
|
3120
|
+
addLog(`Container engine: ${CONTAINER_ENGINE_LABELS[res.engine.engine]}`);
|
|
2992
3121
|
addLog("All prerequisites met");
|
|
2993
3122
|
setStatus("passed");
|
|
2994
3123
|
} else {
|
|
@@ -2996,13 +3125,14 @@ function PrereqCheckStep({ state, addLog, goToNext, goToStep, goToError }) {
|
|
|
2996
3125
|
}
|
|
2997
3126
|
};
|
|
2998
3127
|
run().catch((err) => goToError(err.message));
|
|
2999
|
-
}, [state.services, addLog, goToError]);
|
|
3128
|
+
}, [state.services, state.containerEngine, addLog, goToError]);
|
|
3000
3129
|
import_react13.useEffect(() => {
|
|
3001
|
-
if (status === "passed") {
|
|
3002
|
-
const
|
|
3130
|
+
if (status === "passed" && result?.engine.ok) {
|
|
3131
|
+
const engine = result.engine.engine;
|
|
3132
|
+
const timer = setTimeout(() => goToNext({ containerEngine: engine }), 500);
|
|
3003
3133
|
return () => clearTimeout(timer);
|
|
3004
3134
|
}
|
|
3005
|
-
}, [status, goToNext]);
|
|
3135
|
+
}, [status, result, goToNext]);
|
|
3006
3136
|
if (status === "checking") {
|
|
3007
3137
|
return /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Box_default, {
|
|
3008
3138
|
padding: 1,
|
|
@@ -3011,7 +3141,7 @@ function PrereqCheckStep({ state, addLog, goToNext, goToStep, goToError }) {
|
|
|
3011
3141
|
}, undefined, false, undefined, this)
|
|
3012
3142
|
}, undefined, false, undefined, this);
|
|
3013
3143
|
}
|
|
3014
|
-
if (status === "passed" && result) {
|
|
3144
|
+
if (status === "passed" && result?.engine.ok) {
|
|
3015
3145
|
return /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Box_default, {
|
|
3016
3146
|
flexDirection: "column",
|
|
3017
3147
|
padding: 1,
|
|
@@ -3021,7 +3151,7 @@ function PrereqCheckStep({ state, addLog, goToNext, goToStep, goToError }) {
|
|
|
3021
3151
|
children: [
|
|
3022
3152
|
"✓",
|
|
3023
3153
|
" ",
|
|
3024
|
-
result.
|
|
3154
|
+
result.engine.probe.binary.version
|
|
3025
3155
|
]
|
|
3026
3156
|
}, undefined, true, undefined, this),
|
|
3027
3157
|
/* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Text, {
|
|
@@ -3029,7 +3159,7 @@ function PrereqCheckStep({ state, addLog, goToNext, goToStep, goToError }) {
|
|
|
3029
3159
|
children: [
|
|
3030
3160
|
"✓",
|
|
3031
3161
|
" ",
|
|
3032
|
-
result.compose.version
|
|
3162
|
+
result.engine.probe.compose.version
|
|
3033
3163
|
]
|
|
3034
3164
|
}, undefined, true, undefined, this),
|
|
3035
3165
|
/* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Text, {
|
|
@@ -3042,50 +3172,48 @@ function PrereqCheckStep({ state, addLog, goToNext, goToStep, goToError }) {
|
|
|
3042
3172
|
]
|
|
3043
3173
|
}, undefined, true, undefined, this);
|
|
3044
3174
|
}
|
|
3175
|
+
const probe = result?.engine.probe ?? null;
|
|
3176
|
+
const engineLabel = probe ? CONTAINER_ENGINE_LABELS[probe.engine] : "Container engine";
|
|
3045
3177
|
return /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Box_default, {
|
|
3046
3178
|
flexDirection: "column",
|
|
3047
3179
|
padding: 1,
|
|
3048
3180
|
children: [
|
|
3049
|
-
result
|
|
3050
|
-
color: "green",
|
|
3051
|
-
children: [
|
|
3052
|
-
"✓",
|
|
3053
|
-
" ",
|
|
3054
|
-
result.docker.version
|
|
3055
|
-
]
|
|
3056
|
-
}, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Box_default, {
|
|
3181
|
+
result && !result.engine.ok && !result.engine.engine ? /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Box_default, {
|
|
3057
3182
|
flexDirection: "column",
|
|
3058
3183
|
children: [
|
|
3059
3184
|
/* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Text, {
|
|
3060
3185
|
color: "red",
|
|
3061
3186
|
children: [
|
|
3062
3187
|
"✗",
|
|
3063
|
-
"
|
|
3064
|
-
result
|
|
3188
|
+
" ",
|
|
3189
|
+
result.engine.error
|
|
3065
3190
|
]
|
|
3066
3191
|
}, undefined, true, undefined, this),
|
|
3067
3192
|
/* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Text, {
|
|
3068
3193
|
dimColor: true,
|
|
3069
3194
|
children: [
|
|
3070
3195
|
" ",
|
|
3071
|
-
|
|
3196
|
+
ENGINE_INSTALL_HINTS.docker
|
|
3197
|
+
]
|
|
3198
|
+
}, undefined, true, undefined, this),
|
|
3199
|
+
/* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Text, {
|
|
3200
|
+
dimColor: true,
|
|
3201
|
+
children: [
|
|
3202
|
+
" or ",
|
|
3203
|
+
ENGINE_INSTALL_HINTS.podman
|
|
3072
3204
|
]
|
|
3073
3205
|
}, undefined, true, undefined, this)
|
|
3074
3206
|
]
|
|
3075
|
-
}, undefined, true, undefined, this),
|
|
3076
|
-
result?.compose.ok ? /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Text, {
|
|
3077
|
-
color: "green",
|
|
3078
|
-
children: [
|
|
3079
|
-
"✓",
|
|
3080
|
-
" ",
|
|
3081
|
-
result.compose.version
|
|
3082
|
-
]
|
|
3083
|
-
}, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Text, {
|
|
3084
|
-
color: "red",
|
|
3207
|
+
}, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(jsx_dev_runtime15.Fragment, {
|
|
3085
3208
|
children: [
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3209
|
+
/* @__PURE__ */ jsx_dev_runtime15.jsxDEV(CheckLine, {
|
|
3210
|
+
label: engineLabel,
|
|
3211
|
+
check: probe?.binary
|
|
3212
|
+
}, undefined, false, undefined, this),
|
|
3213
|
+
probe?.binary.ok ? /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(CheckLine, {
|
|
3214
|
+
label: `${engineLabel} Compose`,
|
|
3215
|
+
check: probe.compose
|
|
3216
|
+
}, undefined, false, undefined, this) : null
|
|
3089
3217
|
]
|
|
3090
3218
|
}, undefined, true, undefined, this),
|
|
3091
3219
|
result?.ports.ok ? /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Text, {
|
|
@@ -3134,6 +3262,40 @@ function PrereqCheckStep({ state, addLog, goToNext, goToStep, goToError }) {
|
|
|
3134
3262
|
]
|
|
3135
3263
|
}, undefined, true, undefined, this);
|
|
3136
3264
|
}
|
|
3265
|
+
function CheckLine({ label, check }) {
|
|
3266
|
+
if (check?.ok) {
|
|
3267
|
+
return /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Text, {
|
|
3268
|
+
color: "green",
|
|
3269
|
+
children: [
|
|
3270
|
+
"✓",
|
|
3271
|
+
" ",
|
|
3272
|
+
check.version
|
|
3273
|
+
]
|
|
3274
|
+
}, undefined, true, undefined, this);
|
|
3275
|
+
}
|
|
3276
|
+
return /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Box_default, {
|
|
3277
|
+
flexDirection: "column",
|
|
3278
|
+
children: [
|
|
3279
|
+
/* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Text, {
|
|
3280
|
+
color: "red",
|
|
3281
|
+
children: [
|
|
3282
|
+
"✗",
|
|
3283
|
+
" ",
|
|
3284
|
+
label,
|
|
3285
|
+
": ",
|
|
3286
|
+
check?.error
|
|
3287
|
+
]
|
|
3288
|
+
}, undefined, true, undefined, this),
|
|
3289
|
+
check?.hint ? /* @__PURE__ */ jsx_dev_runtime15.jsxDEV(Text, {
|
|
3290
|
+
dimColor: true,
|
|
3291
|
+
children: [
|
|
3292
|
+
" ",
|
|
3293
|
+
check.hint
|
|
3294
|
+
]
|
|
3295
|
+
}, undefined, true, undefined, this) : null
|
|
3296
|
+
]
|
|
3297
|
+
}, undefined, true, undefined, this);
|
|
3298
|
+
}
|
|
3137
3299
|
|
|
3138
3300
|
// src/commands/onboard/steps/review.tsx
|
|
3139
3301
|
var jsx_dev_runtime16 = __toESM(require_jsx_dev_runtime(), 1);
|
|
@@ -3298,20 +3460,22 @@ function StartStep({ state, addLog, goToNext }) {
|
|
|
3298
3460
|
const [status, setStatus] = import_react14.useState("starting");
|
|
3299
3461
|
const [errorMsg, setErrorMsg] = import_react14.useState("");
|
|
3300
3462
|
const executed = import_react14.useRef(false);
|
|
3463
|
+
const engine = engineForCommands(state.containerEngine);
|
|
3464
|
+
const engineLabel = CONTAINER_ENGINE_LABELS[engine];
|
|
3301
3465
|
import_react14.useEffect(() => {
|
|
3302
3466
|
if (executed.current)
|
|
3303
3467
|
return;
|
|
3304
3468
|
executed.current = true;
|
|
3305
3469
|
const run = async () => {
|
|
3306
|
-
addLog(
|
|
3470
|
+
addLog(`Running ${composeCommandText(engine, "--env-file .env up -d")}...`);
|
|
3307
3471
|
try {
|
|
3308
|
-
const result = await
|
|
3472
|
+
const result = await defaultCommandRunner(composeArgv(engine, ["--env-file", ".env", "up", "-d"]), { cwd: state.outputDir });
|
|
3309
3473
|
if (result.exitCode === 0) {
|
|
3310
|
-
addLog(
|
|
3474
|
+
addLog(`${engineLabel} stack started successfully`);
|
|
3311
3475
|
setStatus("success");
|
|
3312
3476
|
} else {
|
|
3313
|
-
const stderr = result.stderr.
|
|
3314
|
-
setErrorMsg(stderr || "
|
|
3477
|
+
const stderr = result.stderr.trim();
|
|
3478
|
+
setErrorMsg(stderr || `${composeCommandText(engine, "up")} failed`);
|
|
3315
3479
|
setStatus("failed");
|
|
3316
3480
|
}
|
|
3317
3481
|
} catch (err) {
|
|
@@ -3320,7 +3484,7 @@ function StartStep({ state, addLog, goToNext }) {
|
|
|
3320
3484
|
}
|
|
3321
3485
|
};
|
|
3322
3486
|
run().catch((err) => addLog(`Start failed: ${err}`));
|
|
3323
|
-
}, [state.outputDir, addLog]);
|
|
3487
|
+
}, [state.outputDir, engine, engineLabel, addLog]);
|
|
3324
3488
|
import_react14.useEffect(() => {
|
|
3325
3489
|
if (status === "success") {
|
|
3326
3490
|
const timer = setTimeout(() => goToNext(), 500);
|
|
@@ -3331,7 +3495,7 @@ function StartStep({ state, addLog, goToNext }) {
|
|
|
3331
3495
|
return /* @__PURE__ */ jsx_dev_runtime17.jsxDEV(Box_default, {
|
|
3332
3496
|
padding: 1,
|
|
3333
3497
|
children: /* @__PURE__ */ jsx_dev_runtime17.jsxDEV(Spinner, {
|
|
3334
|
-
label:
|
|
3498
|
+
label: `Starting ${engineLabel} stack...`
|
|
3335
3499
|
}, undefined, false, undefined, this)
|
|
3336
3500
|
}, undefined, false, undefined, this);
|
|
3337
3501
|
}
|
|
@@ -3342,7 +3506,9 @@ function StartStep({ state, addLog, goToNext }) {
|
|
|
3342
3506
|
color: "green",
|
|
3343
3507
|
children: [
|
|
3344
3508
|
"✓",
|
|
3345
|
-
"
|
|
3509
|
+
" ",
|
|
3510
|
+
engineLabel,
|
|
3511
|
+
" stack started"
|
|
3346
3512
|
]
|
|
3347
3513
|
}, undefined, true, undefined, this)
|
|
3348
3514
|
}, undefined, false, undefined, this);
|
|
@@ -3355,7 +3521,9 @@ function StartStep({ state, addLog, goToNext }) {
|
|
|
3355
3521
|
color: "red",
|
|
3356
3522
|
children: [
|
|
3357
3523
|
"✗",
|
|
3358
|
-
" Failed to start
|
|
3524
|
+
" Failed to start ",
|
|
3525
|
+
engineLabel,
|
|
3526
|
+
" stack"
|
|
3359
3527
|
]
|
|
3360
3528
|
}, undefined, true, undefined, this),
|
|
3361
3529
|
/* @__PURE__ */ jsx_dev_runtime17.jsxDEV(Text, {
|
|
@@ -3367,7 +3535,7 @@ function StartStep({ state, addLog, goToNext }) {
|
|
|
3367
3535
|
children: /* @__PURE__ */ jsx_dev_runtime17.jsxDEV(Select, {
|
|
3368
3536
|
options: [
|
|
3369
3537
|
{ label: "Retry", value: "retry" },
|
|
3370
|
-
{ label:
|
|
3538
|
+
{ label: `View logs (${composeCommandText(engine, "logs")})`, value: "logs" },
|
|
3371
3539
|
{ label: "Skip", value: "skip" }
|
|
3372
3540
|
],
|
|
3373
3541
|
onChange: async (value2) => {
|
|
@@ -3377,8 +3545,8 @@ function StartStep({ state, addLog, goToNext }) {
|
|
|
3377
3545
|
setErrorMsg("");
|
|
3378
3546
|
} else if (value2 === "logs") {
|
|
3379
3547
|
try {
|
|
3380
|
-
const logs = await
|
|
3381
|
-
addLog(logs.
|
|
3548
|
+
const logs = await defaultCommandRunner(composeArgv(engine, ["logs", "--tail", "30"]), { cwd: state.outputDir });
|
|
3549
|
+
addLog(logs.stdout || logs.stderr);
|
|
3382
3550
|
} catch {
|
|
3383
3551
|
addLog("Failed to fetch logs");
|
|
3384
3552
|
}
|
|
@@ -3405,7 +3573,8 @@ function Onboard({
|
|
|
3405
3573
|
yes = false,
|
|
3406
3574
|
preset,
|
|
3407
3575
|
maxConcurrentTasks,
|
|
3408
|
-
pullPolicy
|
|
3576
|
+
pullPolicy,
|
|
3577
|
+
containerEngine
|
|
3409
3578
|
}) {
|
|
3410
3579
|
const { exit } = use_app_default();
|
|
3411
3580
|
const [state, setState] = import_react15.useState(() => {
|
|
@@ -3428,6 +3597,13 @@ function Onboard({
|
|
|
3428
3597
|
}
|
|
3429
3598
|
initial.pullPolicy = pullPolicy;
|
|
3430
3599
|
}
|
|
3600
|
+
const engine = resolveContainerEnginePreference(containerEngine, process.env);
|
|
3601
|
+
if (!engine.ok) {
|
|
3602
|
+
initial.step = "error";
|
|
3603
|
+
initial.error = engine.error;
|
|
3604
|
+
return initial;
|
|
3605
|
+
}
|
|
3606
|
+
initial.containerEngine = engine.value;
|
|
3431
3607
|
return initial;
|
|
3432
3608
|
});
|
|
3433
3609
|
const [ctrlCPressed, setCtrlCPressed] = import_react15.useState(false);
|
|
@@ -3673,12 +3849,18 @@ function Onboard({
|
|
|
3673
3849
|
}, undefined, false, undefined, this),
|
|
3674
3850
|
/* @__PURE__ */ jsx_dev_runtime18.jsxDEV(Text, {
|
|
3675
3851
|
dimColor: true,
|
|
3676
|
-
children:
|
|
3677
|
-
|
|
3852
|
+
children: [
|
|
3853
|
+
" ",
|
|
3854
|
+
composeCommandText(engineForCommands(state.containerEngine), "logs -f")
|
|
3855
|
+
]
|
|
3856
|
+
}, undefined, true, undefined, this),
|
|
3678
3857
|
/* @__PURE__ */ jsx_dev_runtime18.jsxDEV(Text, {
|
|
3679
3858
|
dimColor: true,
|
|
3680
|
-
children:
|
|
3681
|
-
|
|
3859
|
+
children: [
|
|
3860
|
+
" ",
|
|
3861
|
+
composeCommandText(engineForCommands(state.containerEngine), "down")
|
|
3862
|
+
]
|
|
3863
|
+
}, undefined, true, undefined, this),
|
|
3682
3864
|
/* @__PURE__ */ jsx_dev_runtime18.jsxDEV(Text, {
|
|
3683
3865
|
dimColor: true,
|
|
3684
3866
|
children: " agent-swarm setup"
|
|
@@ -3722,8 +3904,23 @@ function renderStep(step, props) {
|
|
|
3722
3904
|
/* @__PURE__ */ jsx_dev_runtime18.jsxDEV(Box_default, {
|
|
3723
3905
|
marginTop: 1,
|
|
3724
3906
|
children: /* @__PURE__ */ jsx_dev_runtime18.jsxDEV(Select, {
|
|
3725
|
-
|
|
3726
|
-
|
|
3907
|
+
defaultValue: props.state.containerEngine,
|
|
3908
|
+
options: [
|
|
3909
|
+
{
|
|
3910
|
+
label: "Local, auto-detect engine (Docker if installed, else Podman)",
|
|
3911
|
+
value: "auto"
|
|
3912
|
+
},
|
|
3913
|
+
{ label: `Local (${CONTAINER_ENGINE_LABELS.docker} Compose)`, value: "docker" },
|
|
3914
|
+
{
|
|
3915
|
+
label: `Local (${CONTAINER_ENGINE_LABELS.podman} Compose, rootless)`,
|
|
3916
|
+
value: "podman"
|
|
3917
|
+
}
|
|
3918
|
+
],
|
|
3919
|
+
onChange: (value2) => {
|
|
3920
|
+
if (!isContainerEnginePreference(value2))
|
|
3921
|
+
return;
|
|
3922
|
+
props.goToNext({ deployType: "local", containerEngine: value2 });
|
|
3923
|
+
}
|
|
3727
3924
|
}, undefined, false, undefined, this)
|
|
3728
3925
|
}, undefined, false, undefined, this),
|
|
3729
3926
|
/* @__PURE__ */ jsx_dev_runtime18.jsxDEV(Text, {
|
|
@@ -5,14 +5,14 @@ import {
|
|
|
5
5
|
applyOpenRouterBaseUrlOverride,
|
|
6
6
|
checkOpencodeCredentials,
|
|
7
7
|
resolveContextModePluginPath
|
|
8
|
-
} from "./cli-
|
|
8
|
+
} from "./cli-1hkrch3k.js";
|
|
9
9
|
import"./cli-5bfdm1ah.js";
|
|
10
10
|
import"./cli-r94z9p1z.js";
|
|
11
11
|
import"./cli-2djtr51b.js";
|
|
12
12
|
import"./cli-tng3131n.js";
|
|
13
13
|
import"./cli-zm7njwzd.js";
|
|
14
|
-
import"./cli-
|
|
15
|
-
import"./cli-
|
|
14
|
+
import"./cli-0xjkj1j7.js";
|
|
15
|
+
import"./cli-h967nb6r.js";
|
|
16
16
|
import"./cli-re8z5p8p.js";
|
|
17
17
|
import"./cli-3dpj7atn.js";
|
|
18
18
|
import"./cli-19jenss3.js";
|