poe-code 3.0.202 → 3.0.204
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/cli/commands/braintrust.d.ts +3 -0
- package/dist/cli/commands/braintrust.js +77 -0
- package/dist/cli/commands/braintrust.js.map +1 -0
- package/dist/cli/commands/configure.d.ts +1 -0
- package/dist/cli/commands/configure.js +197 -0
- package/dist/cli/commands/configure.js.map +1 -1
- package/dist/cli/commands/experiment.js +51 -7
- package/dist/cli/commands/experiment.js.map +1 -1
- package/dist/cli/commands/harness.d.ts +3 -0
- package/dist/cli/commands/harness.js +260 -0
- package/dist/cli/commands/harness.js.map +1 -0
- package/dist/cli/commands/pipeline.js +58 -24
- package/dist/cli/commands/pipeline.js.map +1 -1
- package/dist/cli/commands/ralph.js +19 -7
- package/dist/cli/commands/ralph.js.map +1 -1
- package/dist/cli/commands/runtime/build.d.ts +7 -0
- package/dist/cli/commands/runtime/build.js +128 -0
- package/dist/cli/commands/runtime/build.js.map +1 -0
- package/dist/cli/commands/runtime/index.d.ts +3 -0
- package/dist/cli/commands/runtime/index.js +14 -0
- package/dist/cli/commands/runtime/index.js.map +1 -0
- package/dist/cli/commands/runtime/init.d.ts +7 -0
- package/dist/cli/commands/runtime/init.js +39 -0
- package/dist/cli/commands/runtime/init.js.map +1 -0
- package/dist/cli/commands/runtime/jobs/attach.d.ts +3 -0
- package/dist/cli/commands/runtime/jobs/attach.js +35 -0
- package/dist/cli/commands/runtime/jobs/attach.js.map +1 -0
- package/dist/cli/commands/runtime/jobs/index.d.ts +3 -0
- package/dist/cli/commands/runtime/jobs/index.js +16 -0
- package/dist/cli/commands/runtime/jobs/index.js.map +1 -0
- package/dist/cli/commands/runtime/jobs/logs.d.ts +3 -0
- package/dist/cli/commands/runtime/jobs/logs.js +27 -0
- package/dist/cli/commands/runtime/jobs/logs.js.map +1 -0
- package/dist/cli/commands/runtime/jobs/ls.d.ts +3 -0
- package/dist/cli/commands/runtime/jobs/ls.js +60 -0
- package/dist/cli/commands/runtime/jobs/ls.js.map +1 -0
- package/dist/cli/commands/runtime/jobs/sandbox.d.ts +3 -0
- package/dist/cli/commands/runtime/jobs/sandbox.js +15 -0
- package/dist/cli/commands/runtime/jobs/sandbox.js.map +1 -0
- package/dist/cli/commands/runtime/jobs/shared.d.ts +22 -0
- package/dist/cli/commands/runtime/jobs/shared.js +124 -0
- package/dist/cli/commands/runtime/jobs/shared.js.map +1 -0
- package/dist/cli/commands/runtime/jobs/stop.d.ts +3 -0
- package/dist/cli/commands/runtime/jobs/stop.js +31 -0
- package/dist/cli/commands/runtime/jobs/stop.js.map +1 -0
- package/dist/cli/commands/runtime/jobs/sync.d.ts +3 -0
- package/dist/cli/commands/runtime/jobs/sync.js +25 -0
- package/dist/cli/commands/runtime/jobs/sync.js.map +1 -0
- package/dist/cli/commands/runtime/shared.d.ts +20 -0
- package/dist/cli/commands/runtime/shared.js +69 -0
- package/dist/cli/commands/runtime/shared.js.map +1 -0
- package/dist/cli/commands/runtime/templates/clear.d.ts +3 -0
- package/dist/cli/commands/runtime/templates/clear.js +53 -0
- package/dist/cli/commands/runtime/templates/clear.js.map +1 -0
- package/dist/cli/commands/runtime/templates/index.d.ts +3 -0
- package/dist/cli/commands/runtime/templates/index.js +10 -0
- package/dist/cli/commands/runtime/templates/index.js.map +1 -0
- package/dist/cli/commands/runtime/templates/ls.d.ts +3 -0
- package/dist/cli/commands/runtime/templates/ls.js +52 -0
- package/dist/cli/commands/runtime/templates/ls.js.map +1 -0
- package/dist/cli/commands/runtime-options.d.ts +11 -0
- package/dist/cli/commands/runtime-options.js +26 -0
- package/dist/cli/commands/runtime-options.js.map +1 -0
- package/dist/cli/commands/spawn.js +36 -7
- package/dist/cli/commands/spawn.js.map +1 -1
- package/dist/cli/program.js +17 -1
- package/dist/cli/program.js.map +1 -1
- package/dist/index.js +70879 -47381
- package/dist/index.js.map +4 -4
- package/dist/providers/claude-code.js +3486 -852
- package/dist/providers/claude-code.js.map +4 -4
- package/dist/providers/codex.js +3486 -852
- package/dist/providers/codex.js.map +4 -4
- package/dist/providers/goose.js +3432 -798
- package/dist/providers/goose.js.map +4 -4
- package/dist/providers/kimi.js +3486 -852
- package/dist/providers/kimi.js.map +4 -4
- package/dist/providers/opencode.js +3486 -852
- package/dist/providers/opencode.js.map +4 -4
- package/dist/providers/poe-agent.js +20641 -17147
- package/dist/providers/poe-agent.js.map +4 -4
- package/dist/providers/spawn-options.d.ts +10 -1
- package/dist/sdk/experiment.js +6 -0
- package/dist/sdk/experiment.js.map +1 -1
- package/dist/sdk/ralph.js +108 -11
- package/dist/sdk/ralph.js.map +1 -1
- package/dist/sdk/spawn.js +27 -4
- package/dist/sdk/spawn.js.map +1 -1
- package/dist/sdk/types.d.ts +23 -1
- package/dist/utils/command-checks.js +2 -29
- package/dist/utils/command-checks.js.map +1 -1
- package/package.json +12 -7
- package/packages/design-system/dist/components/help-formatter-plain.d.ts +4 -0
- package/packages/design-system/dist/components/help-formatter-plain.js +132 -0
- package/packages/design-system/dist/components/help-formatter.d.ts +13 -0
- package/packages/design-system/dist/components/help-formatter.js +116 -7
- package/packages/design-system/dist/components/index.d.ts +2 -2
- package/packages/design-system/dist/components/index.js +1 -1
- package/packages/design-system/dist/components/text.d.ts +1 -0
- package/packages/design-system/dist/components/text.js +8 -0
- package/packages/design-system/dist/index.d.ts +3 -2
- package/packages/design-system/dist/index.js +2 -1
- package/packages/memory/dist/index.js +3406 -387
- package/packages/memory/dist/index.js.map +4 -4
- package/packages/superintendent/dist/commands/run.d.ts +45 -0
- package/packages/superintendent/dist/commands/run.js +133 -38
- package/packages/superintendent/dist/commands/superintendent-group.d.ts +36 -0
- package/packages/superintendent/dist/runtime/agent-runner.d.ts +31 -0
- package/packages/superintendent/dist/runtime/agent-runner.js +121 -0
- package/packages/superintendent/dist/runtime/loop.d.ts +7 -1
- package/packages/superintendent/dist/runtime/loop.js +3 -11
- package/packages/superintendent/dist/runtime/run-builder.d.ts +1 -0
- package/packages/superintendent/dist/runtime/run-builder.js +3 -25
- package/packages/superintendent/dist/runtime/run-inspector.d.ts +1 -0
- package/packages/superintendent/dist/runtime/run-inspector.js +3 -25
- package/packages/superintendent/dist/runtime/run-owner-review.d.ts +1 -0
- package/packages/superintendent/dist/runtime/run-owner-review.js +3 -25
- package/packages/superintendent/dist/runtime/run-superintendent.d.ts +1 -0
- package/packages/superintendent/dist/runtime/run-superintendent.js +3 -25
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createExecutionResources, resolveCommandFlags } from "../../shared.js";
|
|
2
|
+
import { attachJob, createRuntimeState, parseSince, resolveJob, streamJobLog, syncJob } from "./shared.js";
|
|
3
|
+
export function registerRuntimeJobsAttachCommand(jobs, root, container) {
|
|
4
|
+
jobs
|
|
5
|
+
.command("attach")
|
|
6
|
+
.description("Attach to a detached runtime job log stream.")
|
|
7
|
+
.argument("[jobId]", "Detached job id")
|
|
8
|
+
.option("--since <duration>", "Only include logs from recently modified log files")
|
|
9
|
+
.option("--sync-on-exit", "Download the workspace after the job exits")
|
|
10
|
+
.option("--force-sync", "Overwrite local files when syncing")
|
|
11
|
+
.action(async (jobId, options) => {
|
|
12
|
+
await executeRuntimeJobsAttach(root, container, jobId, options);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async function executeRuntimeJobsAttach(root, container, jobId, options) {
|
|
16
|
+
const flags = resolveCommandFlags(root);
|
|
17
|
+
const resources = createExecutionResources(container, flags, "runtime:jobs:attach");
|
|
18
|
+
const state = createRuntimeState(container);
|
|
19
|
+
const entry = await resolveJob(state, jobId, "running");
|
|
20
|
+
const { handle } = await attachJob(entry);
|
|
21
|
+
await streamJobLog(handle, {
|
|
22
|
+
since: parseSince(options.since),
|
|
23
|
+
follow: true,
|
|
24
|
+
write(chunk) {
|
|
25
|
+
resources.logger.info(chunk.trimEnd());
|
|
26
|
+
},
|
|
27
|
+
onDetach() {
|
|
28
|
+
resources.logger.info("detaching (job continues running)");
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
if (options.syncOnExit === true && (await handle.status()) !== "running") {
|
|
32
|
+
await syncJob(entry, { forceSync: options.forceSync === true, close: false });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=attach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../../../../../src/cli/commands/runtime/jobs/attach.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,YAAY,EACZ,OAAO,EACR,MAAM,aAAa,CAAC;AAErB,MAAM,UAAU,gCAAgC,CAC9C,IAAa,EACb,IAAa,EACb,SAAuB;IAEvB,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;SACtC,MAAM,CAAC,oBAAoB,EAAE,oDAAoD,CAAC;SAClF,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;SACtE,MAAM,CAAC,cAAc,EAAE,oCAAoC,CAAC;SAC5D,MAAM,CACL,KAAK,EACH,KAAyB,EACzB,OAAsE,EACtE,EAAE;QACF,MAAM,wBAAwB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC,CACF,CAAC;AACN,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,IAAa,EACb,SAAuB,EACvB,KAAyB,EACzB,OAAsE;IAEtE,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IAE1C,MAAM,YAAY,CAAC,MAAM,EAAE;QACzB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC,MAAM,EAAE,IAAI;QACZ,KAAK,CAAC,KAAK;YACT,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,QAAQ;YACN,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAC7D,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;QACzE,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { registerRuntimeJobsAttachCommand } from "./attach.js";
|
|
2
|
+
import { registerRuntimeJobsLogsCommand } from "./logs.js";
|
|
3
|
+
import { registerRuntimeJobsLsCommand } from "./ls.js";
|
|
4
|
+
import { registerRuntimeJobsSandboxCommand } from "./sandbox.js";
|
|
5
|
+
import { registerRuntimeJobsStopCommand } from "./stop.js";
|
|
6
|
+
import { registerRuntimeJobsSyncCommand } from "./sync.js";
|
|
7
|
+
export function registerRuntimeJobsCommand(runtime, root, container) {
|
|
8
|
+
const jobs = runtime.command("jobs").description("Manage detached runtime jobs.");
|
|
9
|
+
registerRuntimeJobsLsCommand(jobs, root, container);
|
|
10
|
+
registerRuntimeJobsAttachCommand(jobs, root, container);
|
|
11
|
+
registerRuntimeJobsLogsCommand(jobs, root, container);
|
|
12
|
+
registerRuntimeJobsStopCommand(jobs, root, container);
|
|
13
|
+
registerRuntimeJobsSyncCommand(jobs, root, container);
|
|
14
|
+
registerRuntimeJobsSandboxCommand(jobs, root, container);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/cli/commands/runtime/jobs/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,8BAA8B,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,iCAAiC,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,8BAA8B,EAAE,MAAM,WAAW,CAAC;AAE3D,MAAM,UAAU,0BAA0B,CACxC,OAAgB,EAChB,IAAa,EACb,SAAuB;IAEvB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;IAElF,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACpD,gCAAgC,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACxD,8BAA8B,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACtD,8BAA8B,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACtD,8BAA8B,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACtD,iCAAiC,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createExecutionResources, resolveCommandFlags } from "../../shared.js";
|
|
2
|
+
import { attachJob, createRuntimeState, parseSince, resolveJob, streamJobLog } from "./shared.js";
|
|
3
|
+
export function registerRuntimeJobsLogsCommand(jobs, root, container) {
|
|
4
|
+
jobs
|
|
5
|
+
.command("logs")
|
|
6
|
+
.description("Dump a detached runtime job log.")
|
|
7
|
+
.argument("[jobId]", "Detached job id")
|
|
8
|
+
.option("--since <duration>", "Only include logs from recently modified log files")
|
|
9
|
+
.action(async (jobId, options) => {
|
|
10
|
+
await executeRuntimeJobsLogs(root, container, jobId, options);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
async function executeRuntimeJobsLogs(root, container, jobId, options) {
|
|
14
|
+
const flags = resolveCommandFlags(root);
|
|
15
|
+
const resources = createExecutionResources(container, flags, "runtime:jobs:logs");
|
|
16
|
+
const state = createRuntimeState(container);
|
|
17
|
+
const entry = await resolveJob(state, jobId, "pullable");
|
|
18
|
+
const { handle } = await attachJob(entry);
|
|
19
|
+
await streamJobLog(handle, {
|
|
20
|
+
since: parseSince(options.since),
|
|
21
|
+
follow: false,
|
|
22
|
+
write(chunk) {
|
|
23
|
+
resources.logger.info(chunk.trimEnd());
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../../../src/cli/commands/runtime/jobs/logs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAElG,MAAM,UAAU,8BAA8B,CAC5C,IAAa,EACb,IAAa,EACb,SAAuB;IAEvB,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,kCAAkC,CAAC;SAC/C,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;SACtC,MAAM,CAAC,oBAAoB,EAAE,oDAAoD,CAAC;SAClF,MAAM,CAAC,KAAK,EAAE,KAAyB,EAAE,OAA2B,EAAE,EAAE;QACvE,MAAM,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,IAAa,EACb,SAAuB,EACvB,KAAyB,EACzB,OAA2B;IAE3B,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAClF,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IAE1C,MAAM,YAAY,CAAC,MAAM,EAAE;QACzB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC,MAAM,EAAE,KAAK;QACb,KAAK,CAAC,KAAK;YACT,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { getTheme, renderTable, text } from "@poe-code/design-system";
|
|
2
|
+
import { createExecutionResources, resolveCommandFlags } from "../../shared.js";
|
|
3
|
+
import { attachJob, createRuntimeState } from "./shared.js";
|
|
4
|
+
export function registerRuntimeJobsLsCommand(jobs, root, container) {
|
|
5
|
+
jobs
|
|
6
|
+
.command("ls")
|
|
7
|
+
.description("List detached runtime jobs.")
|
|
8
|
+
.action(async () => {
|
|
9
|
+
await executeRuntimeJobsLs(root, container);
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
async function executeRuntimeJobsLs(root, container) {
|
|
13
|
+
const flags = resolveCommandFlags(root);
|
|
14
|
+
const resources = createExecutionResources(container, flags, "runtime:jobs:ls");
|
|
15
|
+
const state = createRuntimeState(container);
|
|
16
|
+
const entries = await reconcileRunningJobs(await state.jobs.list(), state);
|
|
17
|
+
const theme = getTheme();
|
|
18
|
+
resources.logger.intro("runtime jobs ls");
|
|
19
|
+
resources.logger.info(renderTable({
|
|
20
|
+
theme,
|
|
21
|
+
columns,
|
|
22
|
+
rows: entries.map((entry) => ({
|
|
23
|
+
Job: entry.id,
|
|
24
|
+
Tool: entry.tool,
|
|
25
|
+
Runtime: entry.env_kind,
|
|
26
|
+
Status: entry.status,
|
|
27
|
+
Started: entry.started_at || text.muted("-"),
|
|
28
|
+
Sandbox: entry.env_id || text.muted("-")
|
|
29
|
+
}))
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
async function reconcileRunningJobs(entries, state) {
|
|
33
|
+
const reconciled = [];
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
if (entry.status !== "running") {
|
|
36
|
+
reconciled.push(entry);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const { handle } = await attachJob(entry);
|
|
41
|
+
const status = await handle.status();
|
|
42
|
+
const updated = status === entry.status ? entry : await state.jobs.update(entry.id, { status });
|
|
43
|
+
reconciled.push(updated ?? { ...entry, status });
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
const updated = await state.jobs.update(entry.id, { status: "lost" });
|
|
47
|
+
reconciled.push(updated ?? { ...entry, status: "lost" });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return reconciled;
|
|
51
|
+
}
|
|
52
|
+
const columns = [
|
|
53
|
+
{ name: "Job", title: "JOB", alignment: "left", maxLen: 28 },
|
|
54
|
+
{ name: "Tool", title: "TOOL", alignment: "left", maxLen: 16 },
|
|
55
|
+
{ name: "Runtime", title: "RUNTIME", alignment: "left", maxLen: 10 },
|
|
56
|
+
{ name: "Status", title: "STATUS", alignment: "left", maxLen: 10 },
|
|
57
|
+
{ name: "Started", title: "STARTED", alignment: "left", maxLen: 24 },
|
|
58
|
+
{ name: "Sandbox", title: "SANDBOX", alignment: "left", maxLen: 28 }
|
|
59
|
+
];
|
|
60
|
+
//# sourceMappingURL=ls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../../../src/cli/commands/runtime/jobs/ls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { selectExecutionEnvFactory } from "@poe-code/agent-harness-tools";
|
|
2
|
+
export function registerRuntimeJobsSandboxCommand(jobs, _root, _container) {
|
|
3
|
+
jobs
|
|
4
|
+
.command("sandbox")
|
|
5
|
+
.description("Open a shell in a runtime sandbox.")
|
|
6
|
+
.argument("<envId>", "Runtime sandbox id")
|
|
7
|
+
.option("--runtime <runtime>", "Runtime backend for the sandbox", "docker")
|
|
8
|
+
.action(async (envId, options) => {
|
|
9
|
+
const factory = selectExecutionEnvFactory(options.runtime);
|
|
10
|
+
const env = await factory.attach(envId);
|
|
11
|
+
const handle = env.shell();
|
|
12
|
+
process.exitCode = (await handle.result).exitCode;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../../../src/cli/commands/runtime/jobs/sandbox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAyB,MAAM,+BAA+B,CAAC;AAGjG,MAAM,UAAU,iCAAiC,CAC/C,IAAa,EACb,KAAc,EACd,UAAwB;IAExB,IAAI;SACD,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,oCAAoC,CAAC;SACjD,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;SACzC,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,EAAE,QAAQ,CAAC;SAC1E,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAA4B,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,yBAAyB,CAAC,OAAO,CAAC,OAA2B,CAAC,CAAC;QAC/E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;IACpD,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type JobEntry, type StateManager } from "@poe-code/poe-code-config";
|
|
2
|
+
import { type JobHandle, type OpenedEnv } from "@poe-code/agent-harness-tools";
|
|
3
|
+
import type { CliContainer } from "../../../container.js";
|
|
4
|
+
export type JobIntent = "running" | "pullable";
|
|
5
|
+
export declare function createRuntimeState(container: CliContainer): StateManager;
|
|
6
|
+
export declare function resolveJob(state: StateManager, jobId: string | undefined, intent: JobIntent): Promise<JobEntry>;
|
|
7
|
+
export declare function attachJob(entry: JobEntry): Promise<{
|
|
8
|
+
env: OpenedEnv;
|
|
9
|
+
handle: JobHandle;
|
|
10
|
+
}>;
|
|
11
|
+
export declare function parseSince(value: string | undefined): Date | undefined;
|
|
12
|
+
export declare function syncJob(entry: JobEntry, opts: {
|
|
13
|
+
forceSync: boolean;
|
|
14
|
+
close: boolean;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
export declare function streamJobLog(handle: JobHandle, opts: {
|
|
17
|
+
since?: Date;
|
|
18
|
+
follow: boolean;
|
|
19
|
+
write(chunk: string): void;
|
|
20
|
+
onDetach?: () => void;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
export declare function waitForGracefulStop(handle: JobHandle, graceMs?: number): Promise<void>;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import parseDuration from "parse-duration";
|
|
2
|
+
import { createStateManager } from "@poe-code/poe-code-config";
|
|
3
|
+
import { selectExecutionEnvFactory } from "@poe-code/agent-harness-tools";
|
|
4
|
+
export function createRuntimeState(container) {
|
|
5
|
+
return createStateManager(container.env.homeDir, container.fs);
|
|
6
|
+
}
|
|
7
|
+
export async function resolveJob(state, jobId, intent) {
|
|
8
|
+
if (jobId !== undefined) {
|
|
9
|
+
const entry = await state.jobs.get(jobId);
|
|
10
|
+
if (entry === null) {
|
|
11
|
+
throw new Error(`No runtime job found for "${jobId}".`);
|
|
12
|
+
}
|
|
13
|
+
return entry;
|
|
14
|
+
}
|
|
15
|
+
const allowedStatuses = intent === "running" ? new Set(["running"]) : new Set(["running", "exited"]);
|
|
16
|
+
const candidates = (await state.jobs.list())
|
|
17
|
+
.filter((entry) => allowedStatuses.has(entry.status))
|
|
18
|
+
.sort(compareLatestFirst);
|
|
19
|
+
if (candidates.length === 1) {
|
|
20
|
+
return candidates[0];
|
|
21
|
+
}
|
|
22
|
+
if (candidates.length === 0) {
|
|
23
|
+
throw new Error("No detached runtime jobs match this command.");
|
|
24
|
+
}
|
|
25
|
+
throw new Error([
|
|
26
|
+
"More than one detached runtime job matches this command. Pass a job id.",
|
|
27
|
+
...candidates.map((entry) => `- ${entry.id} ${entry.tool} ${entry.status} ${entry.started_at}`)
|
|
28
|
+
].join("\n"));
|
|
29
|
+
}
|
|
30
|
+
export async function attachJob(entry) {
|
|
31
|
+
const factory = selectExecutionEnvFactory(entry.env_kind);
|
|
32
|
+
const env = await factory.attach(entry.env_id, {
|
|
33
|
+
jobId: entry.id,
|
|
34
|
+
tool: entry.tool,
|
|
35
|
+
argv: entry.argv,
|
|
36
|
+
cwd: entry.cwd
|
|
37
|
+
});
|
|
38
|
+
const handle = env.job;
|
|
39
|
+
if (handle === null) {
|
|
40
|
+
throw new Error(`Runtime "${entry.env_kind}" did not provide a handle for job "${entry.id}".`);
|
|
41
|
+
}
|
|
42
|
+
return { env, handle };
|
|
43
|
+
}
|
|
44
|
+
export function parseSince(value) {
|
|
45
|
+
if (value === undefined) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const milliseconds = parseDuration(value);
|
|
49
|
+
if (milliseconds === null || !Number.isFinite(milliseconds) || milliseconds < 0) {
|
|
50
|
+
throw new Error(`Invalid duration "${value}".`);
|
|
51
|
+
}
|
|
52
|
+
return new Date(Date.now() - milliseconds);
|
|
53
|
+
}
|
|
54
|
+
export async function syncJob(entry, opts) {
|
|
55
|
+
const { env } = await attachJob(entry);
|
|
56
|
+
try {
|
|
57
|
+
await env.downloadWorkspace({
|
|
58
|
+
conflictPolicy: opts.forceSync ? "overwrite" : "refuse"
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
if (opts.close) {
|
|
63
|
+
await env.close();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export async function streamJobLog(handle, opts) {
|
|
68
|
+
let detaching = false;
|
|
69
|
+
const iterator = handle.stream({ sinceByte: 0, ...(opts.since ? { since: opts.since } : {}) })[Symbol.asyncIterator]();
|
|
70
|
+
const onSigint = opts.onDetach
|
|
71
|
+
? () => {
|
|
72
|
+
detaching = true;
|
|
73
|
+
opts.onDetach?.();
|
|
74
|
+
void iterator.return?.();
|
|
75
|
+
}
|
|
76
|
+
: undefined;
|
|
77
|
+
if (onSigint) {
|
|
78
|
+
process.once("SIGINT", onSigint);
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
while (!detaching) {
|
|
82
|
+
const result = await Promise.race([
|
|
83
|
+
iterator.next(),
|
|
84
|
+
sleep(250).then(() => ({ timedOut: true }))
|
|
85
|
+
]);
|
|
86
|
+
if ("timedOut" in result) {
|
|
87
|
+
if (!opts.follow) {
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
if ((await handle.status()) !== "running") {
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (result.done === true) {
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
opts.write(result.value.data);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
if (onSigint) {
|
|
103
|
+
process.off("SIGINT", onSigint);
|
|
104
|
+
}
|
|
105
|
+
await iterator.return?.();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export async function waitForGracefulStop(handle, graceMs = 30_000) {
|
|
109
|
+
await handle.kill("SIGTERM");
|
|
110
|
+
const result = await Promise.race([handle.wait().then(() => "exited"), sleep(graceMs)]);
|
|
111
|
+
if (result !== "exited") {
|
|
112
|
+
await handle.kill("SIGKILL");
|
|
113
|
+
await handle.wait().catch(() => undefined);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function compareLatestFirst(left, right) {
|
|
117
|
+
return Date.parse(right.started_at) - Date.parse(left.started_at);
|
|
118
|
+
}
|
|
119
|
+
function sleep(ms) {
|
|
120
|
+
return new Promise((resolve) => {
|
|
121
|
+
setTimeout(() => resolve("timeout"), ms);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../src/cli/commands/runtime/jobs/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createExecutionResources, resolveCommandFlags } from "../../shared.js";
|
|
2
|
+
import { attachJob, createRuntimeState, resolveJob, syncJob, waitForGracefulStop } from "./shared.js";
|
|
3
|
+
export function registerRuntimeJobsStopCommand(jobs, root, container) {
|
|
4
|
+
jobs
|
|
5
|
+
.command("stop")
|
|
6
|
+
.description("Stop a detached runtime job.")
|
|
7
|
+
.argument("[jobId]", "Detached job id")
|
|
8
|
+
.option("--sync", "Download the workspace after stopping")
|
|
9
|
+
.option("--force-sync", "Overwrite local files when syncing")
|
|
10
|
+
.action(async (jobId, options) => {
|
|
11
|
+
await executeRuntimeJobsStop(root, container, jobId, options);
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
async function executeRuntimeJobsStop(root, container, jobId, options) {
|
|
15
|
+
const flags = resolveCommandFlags(root);
|
|
16
|
+
const resources = createExecutionResources(container, flags, "runtime:jobs:stop");
|
|
17
|
+
const state = createRuntimeState(container);
|
|
18
|
+
const entry = await resolveJob(state, jobId, "pullable");
|
|
19
|
+
const { handle } = await attachJob(entry);
|
|
20
|
+
await waitForGracefulStop(handle);
|
|
21
|
+
await state.jobs.update(entry.id, {
|
|
22
|
+
status: "killed",
|
|
23
|
+
exit_code: 130,
|
|
24
|
+
exited_at: new Date().toISOString()
|
|
25
|
+
});
|
|
26
|
+
if (options.sync === true || options.forceSync === true) {
|
|
27
|
+
await syncJob(entry, { forceSync: options.forceSync === true, close: false });
|
|
28
|
+
}
|
|
29
|
+
resources.logger.success(`Stopped runtime job ${entry.id}.`);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../../../src/cli/commands/runtime/jobs/stop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,UAAU,EACV,OAAO,EACP,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAErB,MAAM,UAAU,8BAA8B,CAC5C,IAAa,EACb,IAAa,EACb,SAAuB;IAEvB,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8BAA8B,CAAC;SAC3C,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;SACtC,MAAM,CAAC,QAAQ,EAAE,uCAAuC,CAAC;SACzD,MAAM,CAAC,cAAc,EAAE,oCAAoC,CAAC;SAC5D,MAAM,CACL,KAAK,EACH,KAAyB,EACzB,OAAgD,EAChD,EAAE;QACF,MAAM,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,CACF,CAAC;AACN,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,IAAa,EACb,SAAuB,EACvB,KAAyB,EACzB,OAAgD;IAEhD,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAClF,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IAE1C,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;QAChC,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,uBAAuB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createExecutionResources, resolveCommandFlags } from "../../shared.js";
|
|
2
|
+
import { createRuntimeState, resolveJob, syncJob } from "./shared.js";
|
|
3
|
+
export function registerRuntimeJobsSyncCommand(jobs, root, container) {
|
|
4
|
+
jobs
|
|
5
|
+
.command("sync")
|
|
6
|
+
.description("Download a detached runtime job workspace.")
|
|
7
|
+
.argument("[jobId]", "Detached job id")
|
|
8
|
+
.option("--force-sync", "Overwrite local files when syncing")
|
|
9
|
+
.option("--close", "Close the sandbox after syncing")
|
|
10
|
+
.action(async (jobId, options) => {
|
|
11
|
+
await executeRuntimeJobsSync(root, container, jobId, options);
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
async function executeRuntimeJobsSync(root, container, jobId, options) {
|
|
15
|
+
const flags = resolveCommandFlags(root);
|
|
16
|
+
const resources = createExecutionResources(container, flags, "runtime:jobs:sync");
|
|
17
|
+
const state = createRuntimeState(container);
|
|
18
|
+
const entry = await resolveJob(state, jobId, "pullable");
|
|
19
|
+
await syncJob(entry, {
|
|
20
|
+
forceSync: options.forceSync === true,
|
|
21
|
+
close: options.close === true
|
|
22
|
+
});
|
|
23
|
+
resources.logger.success(`Synced runtime job ${entry.id}.`);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../../../src/cli/commands/runtime/jobs/sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtE,MAAM,UAAU,8BAA8B,CAC5C,IAAa,EACb,IAAa,EACb,SAAuB;IAEvB,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4CAA4C,CAAC;SACzD,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;SACtC,MAAM,CAAC,cAAc,EAAE,oCAAoC,CAAC;SAC5D,MAAM,CAAC,SAAS,EAAE,iCAAiC,CAAC;SACpD,MAAM,CACL,KAAK,EACH,KAAyB,EACzB,OAAiD,EACjD,EAAE;QACF,MAAM,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,CACF,CAAC;AACN,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,IAAa,EACb,SAAuB,EACvB,KAAyB,EACzB,OAAiD;IAEjD,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAClF,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAEzD,MAAM,OAAO,CAAC,KAAK,EAAE;QACnB,SAAS,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI;QACrC,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI;KAC9B,CAAC,CAAC;IACH,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CliContainer } from "../../container.js";
|
|
2
|
+
export declare const runtimeTypes: readonly ["host", "docker", "e2b"];
|
|
3
|
+
export type RuntimeType = (typeof runtimeTypes)[number];
|
|
4
|
+
export declare const defaultRuntimeType: RuntimeType;
|
|
5
|
+
export declare const defaultDockerfile: string;
|
|
6
|
+
export declare function resolveDockerfilePath(container: CliContainer): string;
|
|
7
|
+
export declare function resolveRuntimeType(input: {
|
|
8
|
+
value?: string;
|
|
9
|
+
assumeYes: boolean;
|
|
10
|
+
}): Promise<RuntimeType>;
|
|
11
|
+
export declare function updateRuntimeScope(input: {
|
|
12
|
+
container: CliContainer;
|
|
13
|
+
type: RuntimeType;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
export declare function writeDefaultDockerfileIfNeeded(input: {
|
|
16
|
+
container: CliContainer;
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
}): Promise<boolean>;
|
|
19
|
+
export declare function parseRuntimeType(value: string): RuntimeType;
|
|
20
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { deepMergeDocuments, readDocument, writeScope } from "@poe-code/poe-code-config";
|
|
3
|
+
import { pathExists } from "@poe-code/config-mutations";
|
|
4
|
+
import { cancel as dsCancel, isCancel, select as dsSelect } from "@poe-code/design-system";
|
|
5
|
+
import { OperationCancelledError } from "../../errors.js";
|
|
6
|
+
export const runtimeTypes = ["host", "docker", "e2b"];
|
|
7
|
+
export const defaultRuntimeType = "docker";
|
|
8
|
+
export const defaultDockerfile = [
|
|
9
|
+
"FROM node:22-bookworm-slim",
|
|
10
|
+
"",
|
|
11
|
+
"RUN apt-get update \\",
|
|
12
|
+
" && apt-get install -y --no-install-recommends git ca-certificates \\",
|
|
13
|
+
" && rm -rf /var/lib/apt/lists/*",
|
|
14
|
+
"",
|
|
15
|
+
"RUN npm i -g poe-code",
|
|
16
|
+
""
|
|
17
|
+
].join("\n");
|
|
18
|
+
export function resolveDockerfilePath(container) {
|
|
19
|
+
return path.join(container.env.cwd, ".poe-code", "Dockerfile");
|
|
20
|
+
}
|
|
21
|
+
export async function resolveRuntimeType(input) {
|
|
22
|
+
if (input.value !== undefined) {
|
|
23
|
+
return parseRuntimeType(input.value);
|
|
24
|
+
}
|
|
25
|
+
if (input.assumeYes) {
|
|
26
|
+
return defaultRuntimeType;
|
|
27
|
+
}
|
|
28
|
+
const result = await dsSelect({
|
|
29
|
+
message: "Runtime backend",
|
|
30
|
+
initialValue: defaultRuntimeType,
|
|
31
|
+
options: [
|
|
32
|
+
{ value: "docker", label: "Docker", hint: "Build from .poe-code/Dockerfile" },
|
|
33
|
+
{ value: "host", label: "Host", hint: "Run commands on this machine" },
|
|
34
|
+
{ value: "e2b", label: "E2B", hint: "Use a cloud sandbox template" }
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
if (isCancel(result)) {
|
|
38
|
+
dsCancel("Operation cancelled.");
|
|
39
|
+
throw new OperationCancelledError();
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
export async function updateRuntimeScope(input) {
|
|
44
|
+
const document = await readDocument(input.container.fs, input.container.env.projectConfigPath);
|
|
45
|
+
const merged = deepMergeDocuments(document, { runtime: { type: input.type } });
|
|
46
|
+
await writeScope(input.container.fs, input.container.env.projectConfigPath, "runtime", merged.runtime ?? {});
|
|
47
|
+
}
|
|
48
|
+
export async function writeDefaultDockerfileIfNeeded(input) {
|
|
49
|
+
if (!input.enabled) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const dockerfilePath = resolveDockerfilePath(input.container);
|
|
53
|
+
if (await pathExists(input.container.fs, dockerfilePath)) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
await input.container.fs.mkdir(path.dirname(dockerfilePath), { recursive: true });
|
|
57
|
+
await input.container.fs.writeFile(dockerfilePath, defaultDockerfile, { encoding: "utf8" });
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
export function parseRuntimeType(value) {
|
|
61
|
+
if (runtimeTypes.includes(value)) {
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
throw new Error(`Invalid runtime type "${value}". Expected host, docker, or e2b.`);
|
|
65
|
+
}
|
|
66
|
+
export function isRecord(value) {
|
|
67
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/cli/commands/runtime/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { cancel as dsCancel, confirm as dsConfirm, isCancel } from "@poe-code/design-system";
|
|
2
|
+
import { createStateManager } from "@poe-code/poe-code-config";
|
|
3
|
+
import { OperationCancelledError } from "../../../errors.js";
|
|
4
|
+
import { createExecutionResources, resolveCommandFlags } from "../../shared.js";
|
|
5
|
+
const backends = ["docker", "e2b"];
|
|
6
|
+
export function registerRuntimeTemplatesClearCommand(templates, root, container) {
|
|
7
|
+
templates
|
|
8
|
+
.command("clear")
|
|
9
|
+
.description("Clear locally built runtime template cache entries.")
|
|
10
|
+
.action(async () => {
|
|
11
|
+
await executeRuntimeTemplatesClear(root, container);
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
async function executeRuntimeTemplatesClear(program, container) {
|
|
15
|
+
const flags = resolveCommandFlags(program);
|
|
16
|
+
const resources = createExecutionResources(container, flags, "runtime:templates:clear");
|
|
17
|
+
const state = createStateManager(container.env.homeDir, container.fs);
|
|
18
|
+
const entriesByBackend = await Promise.all(backends.map(async (backend) => ({
|
|
19
|
+
backend,
|
|
20
|
+
entries: await state.templates.list(backend)
|
|
21
|
+
})));
|
|
22
|
+
const total = entriesByBackend.reduce((sum, group) => sum + group.entries.length, 0);
|
|
23
|
+
resources.logger.intro("runtime templates clear");
|
|
24
|
+
if (total === 0) {
|
|
25
|
+
resources.logger.info("No local runtime template cache entries to clear.");
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (!flags.assumeYes) {
|
|
29
|
+
const confirmed = await dsConfirm({
|
|
30
|
+
message: `Clear ${total} local runtime template cache ${total === 1 ? "entry" : "entries"}?`,
|
|
31
|
+
initialValue: false
|
|
32
|
+
});
|
|
33
|
+
if (isCancel(confirmed)) {
|
|
34
|
+
dsCancel("Operation cancelled.");
|
|
35
|
+
throw new OperationCancelledError();
|
|
36
|
+
}
|
|
37
|
+
if (confirmed !== true) {
|
|
38
|
+
resources.logger.info("Runtime template cache unchanged.");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (flags.dryRun) {
|
|
43
|
+
resources.logger.dryRun(`Dry run: would clear ${total} local runtime template cache ${total === 1 ? "entry" : "entries"}.`);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
for (const group of entriesByBackend) {
|
|
47
|
+
for (const entry of group.entries) {
|
|
48
|
+
await state.templates.remove(group.backend, entry.hash);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
resources.logger.success(`Cleared ${total} local runtime template cache ${total === 1 ? "entry" : "entries"}.`);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=clear.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../../../src/cli/commands/runtime/templates/clear.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { registerRuntimeTemplatesClearCommand } from "./clear.js";
|
|
2
|
+
import { registerRuntimeTemplatesLsCommand } from "./ls.js";
|
|
3
|
+
export function registerRuntimeTemplatesCommand(runtime, root, container) {
|
|
4
|
+
const templates = runtime
|
|
5
|
+
.command("templates")
|
|
6
|
+
.description("Inspect and clear locally built runtime templates.");
|
|
7
|
+
registerRuntimeTemplatesLsCommand(templates, root, container);
|
|
8
|
+
registerRuntimeTemplatesClearCommand(templates, root, container);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/cli/commands/runtime/templates/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,iCAAiC,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,UAAU,+BAA+B,CAC7C,OAAgB,EAChB,IAAa,EACb,SAAuB;IAEvB,MAAM,SAAS,GAAG,OAAO;SACtB,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,oDAAoD,CAAC,CAAC;IAErE,iCAAiC,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC9D,oCAAoC,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACnE,CAAC"}
|