@archmax-ai/harness 0.0.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/LICENSE +21 -0
- package/README.md +219 -0
- package/dist/agent.d.ts +174 -0
- package/dist/agent.js +140 -0
- package/dist/agent.js.map +1 -0
- package/dist/assembly/compose.d.ts +170 -0
- package/dist/assembly/compose.js +391 -0
- package/dist/assembly/compose.js.map +1 -0
- package/dist/assembly/delegation-registry.d.ts +5 -0
- package/dist/assembly/delegation-registry.js +118 -0
- package/dist/assembly/delegation-registry.js.map +1 -0
- package/dist/assembly/index.d.ts +192 -0
- package/dist/assembly/index.js +265 -0
- package/dist/assembly/index.js.map +1 -0
- package/dist/assembly/plain.d.ts +7 -0
- package/dist/assembly/plain.js +41 -0
- package/dist/assembly/plain.js.map +1 -0
- package/dist/authoring-skill/archmax-harness/README.md +76 -0
- package/dist/authoring-skill/archmax-harness/SKILL.md +241 -0
- package/dist/authoring-skill/archmax-harness/references/backend-integration.md +626 -0
- package/dist/authoring-skill/archmax-harness/references/cases.md +41 -0
- package/dist/authoring-skill/archmax-harness/references/diagnostics.md +51 -0
- package/dist/authoring-skill/archmax-harness/references/hook-and-test-scripts.md +1070 -0
- package/dist/authoring-skill/archmax-harness/references/hooks-and-scripts.md +82 -0
- package/dist/authoring-skill/archmax-harness/references/wiring.md +101 -0
- package/dist/authoring-skill/archmax-harness/references/workflow-schema.md +1631 -0
- package/dist/authoring-skill/archmax-harness/references/workflow-yaml.md +241 -0
- package/dist/behaviour/support.d.ts +232 -0
- package/dist/behaviour/support.js +339 -0
- package/dist/behaviour/support.js.map +1 -0
- package/dist/cli/banner.d.ts +11 -0
- package/dist/cli/banner.js +29 -0
- package/dist/cli/banner.js.map +1 -0
- package/dist/cli/bootstrap.d.ts +33 -0
- package/dist/cli/bootstrap.js +153 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/command.d.ts +39 -0
- package/dist/cli/command.js +97 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/state-flow.d.ts +46 -0
- package/dist/cli/state-flow.js +268 -0
- package/dist/cli/state-flow.js.map +1 -0
- package/dist/cli/style.d.ts +41 -0
- package/dist/cli/style.js +64 -0
- package/dist/cli/style.js.map +1 -0
- package/dist/cli/turn.d.ts +41 -0
- package/dist/cli/turn.js +161 -0
- package/dist/cli/turn.js.map +1 -0
- package/dist/cli.d.ts +10 -0
- package/dist/cli.js +426 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/code-description.d.ts +22 -0
- package/dist/core/code-description.js +38 -0
- package/dist/core/code-description.js.map +1 -0
- package/dist/core/deepagents.d.ts +183 -0
- package/dist/core/deepagents.js +128 -0
- package/dist/core/deepagents.js.map +1 -0
- package/dist/core/events.d.ts +350 -0
- package/dist/core/events.js +205 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/frontmatter.d.ts +15 -0
- package/dist/core/frontmatter.js +32 -0
- package/dist/core/frontmatter.js.map +1 -0
- package/dist/core/listing-redact.d.ts +37 -0
- package/dist/core/listing-redact.js +88 -0
- package/dist/core/listing-redact.js.map +1 -0
- package/dist/core/match.d.ts +26 -0
- package/dist/core/match.js +75 -0
- package/dist/core/match.js.map +1 -0
- package/dist/core/message-readers.d.ts +84 -0
- package/dist/core/message-readers.js +159 -0
- package/dist/core/message-readers.js.map +1 -0
- package/dist/core/messages.d.ts +49 -0
- package/dist/core/messages.js +85 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/mount-prompt.d.ts +28 -0
- package/dist/core/mount-prompt.js +55 -0
- package/dist/core/mount-prompt.js.map +1 -0
- package/dist/core/mount-redact.d.ts +28 -0
- package/dist/core/mount-redact.js +32 -0
- package/dist/core/mount-redact.js.map +1 -0
- package/dist/core/mounts.d.ts +88 -0
- package/dist/core/mounts.js +147 -0
- package/dist/core/mounts.js.map +1 -0
- package/dist/core/path-mapping.d.ts +52 -0
- package/dist/core/path-mapping.js +113 -0
- package/dist/core/path-mapping.js.map +1 -0
- package/dist/core/platform-prompt.generated.d.ts +2 -0
- package/dist/core/platform-prompt.generated.js +4 -0
- package/dist/core/platform-prompt.generated.js.map +1 -0
- package/dist/core/prompt.d.ts +42 -0
- package/dist/core/prompt.js +75 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/session-id.d.ts +38 -0
- package/dist/core/session-id.js +61 -0
- package/dist/core/session-id.js.map +1 -0
- package/dist/core/session-store.d.ts +85 -0
- package/dist/core/session-store.js +149 -0
- package/dist/core/session-store.js.map +1 -0
- package/dist/core/session-zone.d.ts +54 -0
- package/dist/core/session-zone.js +82 -0
- package/dist/core/session-zone.js.map +1 -0
- package/dist/core/skill-prompt.d.ts +31 -0
- package/dist/core/skill-prompt.js +54 -0
- package/dist/core/skill-prompt.js.map +1 -0
- package/dist/core/skill-redact.d.ts +15 -0
- package/dist/core/skill-redact.js +27 -0
- package/dist/core/skill-redact.js.map +1 -0
- package/dist/core/skills.d.ts +172 -0
- package/dist/core/skills.js +214 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/tool-mocks.d.ts +23 -0
- package/dist/core/tool-mocks.js +39 -0
- package/dist/core/tool-mocks.js.map +1 -0
- package/dist/core/tool-telemetry.d.ts +16 -0
- package/dist/core/tool-telemetry.js +40 -0
- package/dist/core/tool-telemetry.js.map +1 -0
- package/dist/core/usage.d.ts +114 -0
- package/dist/core/usage.js +226 -0
- package/dist/core/usage.js.map +1 -0
- package/dist/core/workspace-context.d.ts +136 -0
- package/dist/core/workspace-context.js +178 -0
- package/dist/core/workspace-context.js.map +1 -0
- package/dist/core/workspace-prompt.d.ts +7 -0
- package/dist/core/workspace-prompt.js +102 -0
- package/dist/core/workspace-prompt.js.map +1 -0
- package/dist/core/workspace-router.d.ts +61 -0
- package/dist/core/workspace-router.js +145 -0
- package/dist/core/workspace-router.js.map +1 -0
- package/dist/core/workspace.d.ts +85 -0
- package/dist/core/workspace.js +193 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/core/zones.d.ts +181 -0
- package/dist/core/zones.js +202 -0
- package/dist/core/zones.js.map +1 -0
- package/dist/env.d.ts +99 -0
- package/dist/env.js +271 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +265 -0
- package/dist/index.js +197 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel/kernel.d.ts +192 -0
- package/dist/kernel/kernel.js +751 -0
- package/dist/kernel/kernel.js.map +1 -0
- package/dist/lifecycle/hook-shape.d.ts +44 -0
- package/dist/lifecycle/hook-shape.js +66 -0
- package/dist/lifecycle/hook-shape.js.map +1 -0
- package/dist/lifecycle/runner.d.ts +177 -0
- package/dist/lifecycle/runner.js +372 -0
- package/dist/lifecycle/runner.js.map +1 -0
- package/dist/lifecycle/transcript.d.ts +27 -0
- package/dist/lifecycle/transcript.js +43 -0
- package/dist/lifecycle/transcript.js.map +1 -0
- package/dist/machine/allow.d.ts +65 -0
- package/dist/machine/allow.js +107 -0
- package/dist/machine/allow.js.map +1 -0
- package/dist/machine/delegation.d.ts +9 -0
- package/dist/machine/delegation.js +10 -0
- package/dist/machine/delegation.js.map +1 -0
- package/dist/machine/diagnostic.d.ts +14 -0
- package/dist/machine/diagnostic.js +2 -0
- package/dist/machine/diagnostic.js.map +1 -0
- package/dist/machine/lint-spec.d.ts +4 -0
- package/dist/machine/lint-spec.js +266 -0
- package/dist/machine/lint-spec.js.map +1 -0
- package/dist/machine/load-spec.d.ts +90 -0
- package/dist/machine/load-spec.js +120 -0
- package/dist/machine/load-spec.js.map +1 -0
- package/dist/machine/machine.d.ts +273 -0
- package/dist/machine/machine.js +551 -0
- package/dist/machine/machine.js.map +1 -0
- package/dist/machine/mount-grants.d.ts +25 -0
- package/dist/machine/mount-grants.js +24 -0
- package/dist/machine/mount-grants.js.map +1 -0
- package/dist/machine/slug.d.ts +14 -0
- package/dist/machine/slug.js +17 -0
- package/dist/machine/slug.js.map +1 -0
- package/dist/machine/spec-schema.d.ts +662 -0
- package/dist/machine/spec-schema.js +717 -0
- package/dist/machine/spec-schema.js.map +1 -0
- package/dist/machine/tool-names.d.ts +98 -0
- package/dist/machine/tool-names.js +144 -0
- package/dist/machine/tool-names.js.map +1 -0
- package/dist/machine/triggers.d.ts +114 -0
- package/dist/machine/triggers.js +165 -0
- package/dist/machine/triggers.js.map +1 -0
- package/dist/machine/types.d.ts +186 -0
- package/dist/machine/types.js +12 -0
- package/dist/machine/types.js.map +1 -0
- package/dist/machine/validate-spec.d.ts +42 -0
- package/dist/machine/validate-spec.js +29 -0
- package/dist/machine/validate-spec.js.map +1 -0
- package/dist/machine/variables.d.ts +196 -0
- package/dist/machine/variables.js +415 -0
- package/dist/machine/variables.js.map +1 -0
- package/dist/public/cli.d.ts +15 -0
- package/dist/public/cli.js +14 -0
- package/dist/public/cli.js.map +1 -0
- package/dist/public/messages.d.ts +33 -0
- package/dist/public/messages.js +33 -0
- package/dist/public/messages.js.map +1 -0
- package/dist/public/sandbox.d.ts +99 -0
- package/dist/public/sandbox.js +32 -0
- package/dist/public/sandbox.js.map +1 -0
- package/dist/public/spec.d.ts +147 -0
- package/dist/public/spec.js +149 -0
- package/dist/public/spec.js.map +1 -0
- package/dist/public/testing.d.ts +71 -0
- package/dist/public/testing.js +39 -0
- package/dist/public/testing.js.map +1 -0
- package/dist/rubrics/rubrics.d.ts +135 -0
- package/dist/rubrics/rubrics.js +145 -0
- package/dist/rubrics/rubrics.js.map +1 -0
- package/dist/runtime/contract.d.ts +73 -0
- package/dist/runtime/contract.js +96 -0
- package/dist/runtime/contract.js.map +1 -0
- package/dist/sandbox/assets/parts/core.js +22 -0
- package/dist/sandbox/assets/parts/lifecycle-hook.js +47 -0
- package/dist/sandbox/bridge.d.ts +16 -0
- package/dist/sandbox/bridge.js +95 -0
- package/dist/sandbox/bridge.js.map +1 -0
- package/dist/sandbox/executor.d.ts +46 -0
- package/dist/sandbox/executor.js +119 -0
- package/dist/sandbox/executor.js.map +1 -0
- package/dist/sandbox/imports.d.ts +33 -0
- package/dist/sandbox/imports.js +67 -0
- package/dist/sandbox/imports.js.map +1 -0
- package/dist/sandbox/prelude.d.ts +12 -0
- package/dist/sandbox/prelude.js +51 -0
- package/dist/sandbox/prelude.js.map +1 -0
- package/dist/sandbox/ptc-gateway.d.ts +104 -0
- package/dist/sandbox/ptc-gateway.js +167 -0
- package/dist/sandbox/ptc-gateway.js.map +1 -0
- package/dist/sandbox/runtime.d.ts +59 -0
- package/dist/sandbox/runtime.js +51 -0
- package/dist/sandbox/runtime.js.map +1 -0
- package/dist/sandbox/tools.d.ts +34 -0
- package/dist/sandbox/tools.js +147 -0
- package/dist/sandbox/tools.js.map +1 -0
- package/dist/sessions/operations.d.ts +79 -0
- package/dist/sessions/operations.js +121 -0
- package/dist/sessions/operations.js.map +1 -0
- package/dist/sessions/resolve.d.ts +97 -0
- package/dist/sessions/resolve.js +145 -0
- package/dist/sessions/resolve.js.map +1 -0
- package/dist/sessions/resume.d.ts +242 -0
- package/dist/sessions/resume.js +288 -0
- package/dist/sessions/resume.js.map +1 -0
- package/dist/sessions/scope.d.ts +99 -0
- package/dist/sessions/scope.js +145 -0
- package/dist/sessions/scope.js.map +1 -0
- package/dist/sessions/summary.d.ts +65 -0
- package/dist/sessions/summary.js +56 -0
- package/dist/sessions/summary.js.map +1 -0
- package/dist/testing/assertions.d.ts +30 -0
- package/dist/testing/assertions.js +231 -0
- package/dist/testing/assertions.js.map +1 -0
- package/dist/testing/case-document.d.ts +141 -0
- package/dist/testing/case-document.js +51 -0
- package/dist/testing/case-document.js.map +1 -0
- package/dist/testing/case-schema.d.ts +29 -0
- package/dist/testing/case-schema.js +519 -0
- package/dist/testing/case-schema.js.map +1 -0
- package/dist/testing/discovery.d.ts +10 -0
- package/dist/testing/discovery.js +24 -0
- package/dist/testing/discovery.js.map +1 -0
- package/dist/testing/driver.d.ts +78 -0
- package/dist/testing/driver.js +117 -0
- package/dist/testing/driver.js.map +1 -0
- package/dist/testing/grade.d.ts +116 -0
- package/dist/testing/grade.js +261 -0
- package/dist/testing/grade.js.map +1 -0
- package/dist/testing/interpreter.d.ts +55 -0
- package/dist/testing/interpreter.js +103 -0
- package/dist/testing/interpreter.js.map +1 -0
- package/dist/testing/mock-middleware.d.ts +5 -0
- package/dist/testing/mock-middleware.js +33 -0
- package/dist/testing/mock-middleware.js.map +1 -0
- package/dist/testing/runner.d.ts +205 -0
- package/dist/testing/runner.js +266 -0
- package/dist/testing/runner.js.map +1 -0
- package/dist/testing/target.d.ts +27 -0
- package/dist/testing/target.js +21 -0
- package/dist/testing/target.js.map +1 -0
- package/dist/validate/validate.d.ts +41 -0
- package/dist/validate/validate.js +669 -0
- package/dist/validate/validate.js.map +1 -0
- package/dist/workflow/agent-tools.d.ts +10 -0
- package/dist/workflow/agent-tools.js +10 -0
- package/dist/workflow/agent-tools.js.map +1 -0
- package/dist/workflow/checkpointer.d.ts +52 -0
- package/dist/workflow/checkpointer.js +200 -0
- package/dist/workflow/checkpointer.js.map +1 -0
- package/dist/workflow/control-tools.d.ts +174 -0
- package/dist/workflow/control-tools.js +468 -0
- package/dist/workflow/control-tools.js.map +1 -0
- package/dist/workflow/governance.d.ts +104 -0
- package/dist/workflow/governance.js +546 -0
- package/dist/workflow/governance.js.map +1 -0
- package/dist/workflow/middleware.d.ts +85 -0
- package/dist/workflow/middleware.js +283 -0
- package/dist/workflow/middleware.js.map +1 -0
- package/dist/workflow/on-error.d.ts +25 -0
- package/dist/workflow/on-error.js +58 -0
- package/dist/workflow/on-error.js.map +1 -0
- package/dist/workflow/parks.d.ts +46 -0
- package/dist/workflow/parks.js +513 -0
- package/dist/workflow/parks.js.map +1 -0
- package/dist/workflow/paths.d.ts +67 -0
- package/dist/workflow/paths.js +108 -0
- package/dist/workflow/paths.js.map +1 -0
- package/dist/workflow/prompt-cache.d.ts +70 -0
- package/dist/workflow/prompt-cache.js +103 -0
- package/dist/workflow/prompt-cache.js.map +1 -0
- package/dist/workflow/prompt-pruning.d.ts +20 -0
- package/dist/workflow/prompt-pruning.js +83 -0
- package/dist/workflow/prompt-pruning.js.map +1 -0
- package/dist/workflow/render-prompt.d.ts +45 -0
- package/dist/workflow/render-prompt.js +140 -0
- package/dist/workflow/render-prompt.js.map +1 -0
- package/dist/workflow/runtime-config.d.ts +7 -0
- package/dist/workflow/runtime-config.js +9 -0
- package/dist/workflow/runtime-config.js.map +1 -0
- package/dist/workflow/session-artifacts.d.ts +90 -0
- package/dist/workflow/session-artifacts.js +134 -0
- package/dist/workflow/session-artifacts.js.map +1 -0
- package/dist/workflow/session-view.d.ts +31 -0
- package/dist/workflow/session-view.js +94 -0
- package/dist/workflow/session-view.js.map +1 -0
- package/dist/workflow/snapshot.d.ts +14 -0
- package/dist/workflow/snapshot.js +97 -0
- package/dist/workflow/snapshot.js.map +1 -0
- package/dist/workflow/state.d.ts +347 -0
- package/dist/workflow/state.js +322 -0
- package/dist/workflow/state.js.map +1 -0
- package/dist/workflow/sub-workflow.d.ts +174 -0
- package/dist/workflow/sub-workflow.js +392 -0
- package/dist/workflow/sub-workflow.js.map +1 -0
- package/dist/workflow/tool-service.d.ts +48 -0
- package/dist/workflow/tool-service.js +291 -0
- package/dist/workflow/tool-service.js.map +1 -0
- package/dist/workflow/turn-boundary.d.ts +39 -0
- package/dist/workflow/turn-boundary.js +128 -0
- package/dist/workflow/turn-boundary.js.map +1 -0
- package/dist/workflow/turn-runner.d.ts +40 -0
- package/dist/workflow/turn-runner.js +122 -0
- package/dist/workflow/turn-runner.js.map +1 -0
- package/dist/workflow/workflow-tools.d.ts +46 -0
- package/dist/workflow/workflow-tools.js +90 -0
- package/dist/workflow/workflow-tools.js.map +1 -0
- package/package.json +119 -0
package/dist/cli/turn.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { lastAgentText } from "../core/messages.js";
|
|
2
|
+
import { formatUsage, hasUsage } from "../core/usage.js";
|
|
3
|
+
import { icons } from "./style.js";
|
|
4
|
+
import { CliError, err, out } from "./command.js";
|
|
5
|
+
import { isKnown } from "./bootstrap.js";
|
|
6
|
+
/** Token usage on stderr — never a row of zeros, never on stdout. */
|
|
7
|
+
export function printUsageFooter(style, usage, sessionId) {
|
|
8
|
+
const totals = usage.totals(sessionId);
|
|
9
|
+
if (!hasUsage(totals))
|
|
10
|
+
return;
|
|
11
|
+
err("");
|
|
12
|
+
err(`${style.dim("tokens")} ${formatUsage(totals)}`);
|
|
13
|
+
}
|
|
14
|
+
/** The context a person needs to decide a parked human state, from the spec — nothing is rendered to a file. */
|
|
15
|
+
export function printDecisionContext(machine, state, transitions, evidence, write = out) {
|
|
16
|
+
const declared = machine.spec.states[state];
|
|
17
|
+
const instructions = declared?.instructions?.trim();
|
|
18
|
+
if (instructions)
|
|
19
|
+
write(` Instructions: ${instructions}`);
|
|
20
|
+
if (declared?.approvers?.length)
|
|
21
|
+
write(` Approvers: ${declared.approvers.join(", ")}`);
|
|
22
|
+
const paths = evidence ?? declared?.evidence ?? [];
|
|
23
|
+
if (paths.length)
|
|
24
|
+
write(` Evidence: ${paths.join(", ")}`);
|
|
25
|
+
for (const t of transitions) {
|
|
26
|
+
write(` ${t.type && t.type !== "none" ? `[${t.type}] ` : ""}${t.to}${t.description ? ` — ${t.description}` : ""}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const decideHint = (sessionId) => `Decide it with:\n archmax decide ${sessionId} --to <state> [--comment "why"]\n` +
|
|
30
|
+
` archmax reply ${sessionId} "<message>" (answer without deciding)`;
|
|
31
|
+
const deliverHint = (sessionId) => `Resume it with:\n archmax deliver ${sessionId} --trigger <id> [--variables '{"…":"…"}']`;
|
|
32
|
+
/** A session that stopped again, on whichever channel — and what resumes *that* channel. */
|
|
33
|
+
function printReparked(style, sessionId, channel, state) {
|
|
34
|
+
const where = state ? `'${state}'` : "its current state";
|
|
35
|
+
if (channel === "input") {
|
|
36
|
+
err(style.yellow(style.bold(`${icons.warn} awaiting input`)));
|
|
37
|
+
out(`Session ${sessionId} parked again in the ${where} state.`);
|
|
38
|
+
err(deliverHint(sessionId));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
err(style.yellow(style.bold(`${icons.warn} awaiting human decision`)));
|
|
42
|
+
out(`Session ${sessionId} parked at the ${where} human state.`);
|
|
43
|
+
err(decideHint(sessionId));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function printResumed(style, sessionId, verb, outcome) {
|
|
47
|
+
err("");
|
|
48
|
+
if (outcome.reparked)
|
|
49
|
+
return printReparked(style, sessionId, outcome.parkedChannel, outcome.state);
|
|
50
|
+
err(style.green(style.bold(`${icons.check} ${verb}`)));
|
|
51
|
+
out(lastAgentText(outcome.messages) || `Session ${sessionId} resumed (state=${outcome.workflowState ?? "?"}).`);
|
|
52
|
+
}
|
|
53
|
+
export function printReply(style, sessionId, outcome) {
|
|
54
|
+
err("");
|
|
55
|
+
err(style.green(style.bold(`${icons.check} replied`)));
|
|
56
|
+
out(outcome.reply || "(the session had nothing to say)");
|
|
57
|
+
err("");
|
|
58
|
+
err(style.yellow(`Session ${sessionId} is still parked at the '${outcome.state}' human state — a decision is pending.`));
|
|
59
|
+
}
|
|
60
|
+
/** What a park said as it handed over is this turn's result, above the park report. */
|
|
61
|
+
function printParkMessage(style, reply) {
|
|
62
|
+
if (!reply)
|
|
63
|
+
return;
|
|
64
|
+
err("");
|
|
65
|
+
err(style.green(style.bold(`${icons.check} message`)));
|
|
66
|
+
out(reply);
|
|
67
|
+
}
|
|
68
|
+
/** Report a turn's {@link Outcome}: an answer, a park (with what resumes it), or a resume's result. */
|
|
69
|
+
export function printOutcome(style, machine, sessionId, outcome) {
|
|
70
|
+
if (outcome.disposition === "deliver")
|
|
71
|
+
return printResumed(style, sessionId, "delivered", asDecide(outcome));
|
|
72
|
+
if (outcome.disposition === "reply") {
|
|
73
|
+
return printReply(style, sessionId, { ...asDecide(outcome), state: outcome.state ?? "", node: outcome.state ?? "", parkedChannel: "decision" });
|
|
74
|
+
}
|
|
75
|
+
if (outcome.kind === "parked" && outcome.parkedChannel === "input") {
|
|
76
|
+
const waiting = outcome.pending;
|
|
77
|
+
printParkMessage(style, outcome.reply);
|
|
78
|
+
err("");
|
|
79
|
+
err(style.yellow(style.bold(`${icons.warn} awaiting input`)));
|
|
80
|
+
err(`Session ${sessionId} is parked in the '${outcome.state}' state${waiting?.title ? ` (${waiting.title})` : ""} awaiting an external event.`);
|
|
81
|
+
if (waiting?.reason)
|
|
82
|
+
err(` waiting for: ${waiting.reason}`);
|
|
83
|
+
if (waiting?.resumeAt)
|
|
84
|
+
err(` due: ${waiting.resumeAt} (whoever schedules the wake-up)`);
|
|
85
|
+
err(deliverHint(sessionId));
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (outcome.kind === "parked") {
|
|
89
|
+
const pending = outcome.pending;
|
|
90
|
+
printParkMessage(style, outcome.reply);
|
|
91
|
+
err("");
|
|
92
|
+
err(style.yellow(style.bold(`${icons.warn} awaiting human decision`)));
|
|
93
|
+
err(`Session ${sessionId} is parked at the '${outcome.state}' human state${pending?.title ? ` (${pending.title})` : ""} awaiting a decision.`);
|
|
94
|
+
printDecisionContext(machine, outcome.state ?? "", pending?.transitions ?? [], pending?.evidence, err);
|
|
95
|
+
err(decideHint(sessionId));
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
err("");
|
|
99
|
+
err(style.green(style.bold(`${icons.check} answer`)));
|
|
100
|
+
out(outcome.reply || "(no textual answer)");
|
|
101
|
+
}
|
|
102
|
+
/** The resume-shaped view of an {@link Outcome}, for the shared resume printers. */
|
|
103
|
+
function asDecide(outcome) {
|
|
104
|
+
return {
|
|
105
|
+
status: outcome.status,
|
|
106
|
+
workflowState: outcome.state,
|
|
107
|
+
reparked: outcome.kind === "parked",
|
|
108
|
+
...(outcome.parkedChannel ? { parkedChannel: outcome.parkedChannel } : {}),
|
|
109
|
+
...(outcome.kind === "parked" && outcome.state ? { state: outcome.state, node: outcome.state } : {}),
|
|
110
|
+
reply: outcome.reply,
|
|
111
|
+
messages: outcome.messages,
|
|
112
|
+
auditTrail: outcome.auditTrail,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Drive one turn: name the session the firing belongs to, send the turn through
|
|
117
|
+
* `workflow.send` — which delivers, replies or opens a turn as the session's
|
|
118
|
+
* state dictates — and report how it ended. Returns the exit code; a park is a
|
|
119
|
+
* successful outcome.
|
|
120
|
+
*/
|
|
121
|
+
export async function driveTurn(agent, style, usage, input) {
|
|
122
|
+
const workflow = agent.workflow;
|
|
123
|
+
const trigger = { id: workflow.resolveTrigger(input.trigger).id };
|
|
124
|
+
// One id: `--session` names the conversation when the caller has one, else
|
|
125
|
+
// session resolution derives or mints one that *is* this conversation's.
|
|
126
|
+
let sessionId = input.sessionId;
|
|
127
|
+
if (!sessionId) {
|
|
128
|
+
try {
|
|
129
|
+
sessionId = (await workflow.resolveSession({
|
|
130
|
+
trigger,
|
|
131
|
+
...(input.variables ? { variables: input.variables } : {}),
|
|
132
|
+
...(input.sessionPath ? { sessionPath: input.sessionPath } : {}),
|
|
133
|
+
})).sessionId;
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
// Reported before any model call: nothing is spent on a firing with nowhere to go.
|
|
137
|
+
throw new CliError(e.message);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
const outcome = await workflow.send(sessionId, {
|
|
142
|
+
message: input.prompt,
|
|
143
|
+
trigger,
|
|
144
|
+
...(input.variables ? { variables: input.variables } : {}),
|
|
145
|
+
...(input.sessionPath ? { sessionPath: input.sessionPath } : {}),
|
|
146
|
+
});
|
|
147
|
+
printOutcome(style, workflow.machine, sessionId, outcome);
|
|
148
|
+
printUsageFooter(style, usage, sessionId);
|
|
149
|
+
return 0;
|
|
150
|
+
}
|
|
151
|
+
catch (e) {
|
|
152
|
+
// A refusal the runtime made before anything was spent is a one-line error.
|
|
153
|
+
if (isKnown(e))
|
|
154
|
+
throw new CliError(e.message);
|
|
155
|
+
throw e;
|
|
156
|
+
}
|
|
157
|
+
finally {
|
|
158
|
+
agent.dispose(sessionId);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=turn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn.js","sourceRoot":"","sources":["../../src/cli/turn.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { parseVariablesJson } from "./cli/bootstrap.js";
|
|
3
|
+
/** `--variables` parsing, re-exported for tests. */
|
|
4
|
+
export { parseVariablesJson };
|
|
5
|
+
/**
|
|
6
|
+
* Dispatch the CLI on argv (without the node/script prefix) and return the exit
|
|
7
|
+
* code. Exported for tests. Usage errors print one line plus a `--help` hint
|
|
8
|
+
* and return 2; a missing command prints the top-level help to stderr.
|
|
9
|
+
*/
|
|
10
|
+
export declare function dispatchCli(args: string[]): Promise<number>;
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* The `archmax` binary. A declarative command table drives parsing (Node's own
|
|
4
|
+
* `util.parseArgs`, strict), help text (generated from the table, top-level and
|
|
5
|
+
* per command) and dispatch.
|
|
6
|
+
*
|
|
7
|
+
* Output discipline, every command alike: **results on stdout** (a reply, a
|
|
8
|
+
* verdict line, a listing, or `--json`), **narration on stderr** (the session
|
|
9
|
+
* header, the state flow, warnings, the usage footer). Exit codes: 0 for
|
|
10
|
+
* success or a park, 1 for a failure, 2 for a usage error.
|
|
11
|
+
*/
|
|
12
|
+
import { realpathSync } from "node:fs";
|
|
13
|
+
import { argv, exit } from "node:process";
|
|
14
|
+
import { fileURLToPath } from "node:url";
|
|
15
|
+
import { runTests } from "./testing/runner.js";
|
|
16
|
+
import { validateWorkflow } from "./validate/validate.js";
|
|
17
|
+
import { printBanner } from "./cli/banner.js";
|
|
18
|
+
import { createStyle, icons } from "./cli/style.js";
|
|
19
|
+
import { createTestView } from "./cli/state-flow.js";
|
|
20
|
+
import { formatUsage, hasUsage } from "./core/usage.js";
|
|
21
|
+
import { CliError, UsageError, commandHelp, err, out, parseInvocation, topLevelHelp, } from "./cli/command.js";
|
|
22
|
+
import { bootstrap, createEventSink, isKnown, parseVariablesJson, printSessionHeader, resolveWorkflow, withSession, } from "./cli/bootstrap.js";
|
|
23
|
+
import { driveTurn, printDecisionContext, printReply, printResumed, printUsageFooter, } from "./cli/turn.js";
|
|
24
|
+
/** `--variables` parsing, re-exported for tests. */
|
|
25
|
+
export { parseVariablesJson };
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// The command table
|
|
28
|
+
const OPT = {
|
|
29
|
+
verbose: { type: "boolean", description: "Print raw lifecycle event lines to stderr" },
|
|
30
|
+
json: {
|
|
31
|
+
type: "boolean",
|
|
32
|
+
description: "Write a machine-readable result to stdout, nothing else there",
|
|
33
|
+
},
|
|
34
|
+
workflow: {
|
|
35
|
+
type: "string",
|
|
36
|
+
placeholder: "<slug>",
|
|
37
|
+
description: "Workflow the session belongs to (inferred when the workspace has exactly one)",
|
|
38
|
+
},
|
|
39
|
+
variables: {
|
|
40
|
+
type: "string",
|
|
41
|
+
placeholder: "<json>",
|
|
42
|
+
description: 'Variables as a JSON object, seeded locked, e.g. \'{"from_email":"a@b.com"}\'',
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
const WORKFLOW_ARG = {
|
|
46
|
+
name: "workflow",
|
|
47
|
+
required: true,
|
|
48
|
+
description: "Workflow slug under workflows/ (may be omitted when the workspace has exactly one)",
|
|
49
|
+
};
|
|
50
|
+
const SESSION_ARG = {
|
|
51
|
+
name: "session",
|
|
52
|
+
required: true,
|
|
53
|
+
description: "Session id, as listed by 'archmax sessions'",
|
|
54
|
+
};
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Commands
|
|
57
|
+
function formatDiagnostic(style, d) {
|
|
58
|
+
const tag = d.severity === "error"
|
|
59
|
+
? style.red(`${icons.cross} error`)
|
|
60
|
+
: style.yellow(`${icons.warn} warn `);
|
|
61
|
+
const location = d.file ?? d.field;
|
|
62
|
+
return ` ${tag} ${d.message}${location ? ` ${style.dim(`[${location}]`)}` : ""}`;
|
|
63
|
+
}
|
|
64
|
+
const COMMANDS = {
|
|
65
|
+
run: {
|
|
66
|
+
name: "run",
|
|
67
|
+
summary: "Run a workflow on a prompt; the reply goes to stdout",
|
|
68
|
+
description: "Assembles the workflow, runs one turn on a fresh session (or the session the firing resolves to) and prints " +
|
|
69
|
+
"the reply to stdout. The session header and state flow go to stderr. A park exits 0 with a resume hint.",
|
|
70
|
+
positionals: [
|
|
71
|
+
WORKFLOW_ARG,
|
|
72
|
+
{
|
|
73
|
+
name: "prompt",
|
|
74
|
+
required: true,
|
|
75
|
+
rest: true,
|
|
76
|
+
description: "The person's message; the rest of the line is taken",
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
options: {
|
|
80
|
+
trigger: {
|
|
81
|
+
type: "string",
|
|
82
|
+
placeholder: "<id>",
|
|
83
|
+
description: "Trigger starting the turn (default: manual); enters the state declaring it",
|
|
84
|
+
},
|
|
85
|
+
variables: OPT.variables,
|
|
86
|
+
session: {
|
|
87
|
+
type: "string",
|
|
88
|
+
placeholder: "<id>",
|
|
89
|
+
description: "Conversation this firing belongs to: resumes it, or starts a session under that id",
|
|
90
|
+
},
|
|
91
|
+
"session-path": {
|
|
92
|
+
type: "string",
|
|
93
|
+
placeholder: "<path>",
|
|
94
|
+
description: "Dotted path in --variables holding the session id, overriding the trigger's declaration",
|
|
95
|
+
},
|
|
96
|
+
verbose: OPT.verbose,
|
|
97
|
+
},
|
|
98
|
+
async run(inv) {
|
|
99
|
+
const [workflowArg, prompt] = inv.positionals;
|
|
100
|
+
const workflow = resolveWorkflow(workflowArg, inv.root);
|
|
101
|
+
if (!prompt)
|
|
102
|
+
throw new UsageError("a prompt is required");
|
|
103
|
+
const variables = parseVariablesJson(inv.values.variables);
|
|
104
|
+
const trigger = inv.values.trigger ? { id: inv.values.trigger } : undefined;
|
|
105
|
+
const style = createStyle();
|
|
106
|
+
printSessionHeader(style, workflow, inv.root, true);
|
|
107
|
+
const usage = createEventSink(style, inv.values.verbose === true);
|
|
108
|
+
const agent = await bootstrap(workflow, inv.root, usage, {
|
|
109
|
+
...(trigger && { trigger }),
|
|
110
|
+
...(variables && { variables }),
|
|
111
|
+
});
|
|
112
|
+
return driveTurn(agent, style, usage, {
|
|
113
|
+
workflow,
|
|
114
|
+
prompt,
|
|
115
|
+
...(trigger && { trigger }),
|
|
116
|
+
...(variables && { variables }),
|
|
117
|
+
...(inv.values.session ? { sessionId: inv.values.session } : {}),
|
|
118
|
+
...(inv.values["session-path"]
|
|
119
|
+
? { sessionPath: inv.values["session-path"] }
|
|
120
|
+
: {}),
|
|
121
|
+
});
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
test: {
|
|
125
|
+
name: "test",
|
|
126
|
+
summary: "Run a workflow's cases; the summary goes to stdout",
|
|
127
|
+
positionals: [
|
|
128
|
+
WORKFLOW_ARG,
|
|
129
|
+
{
|
|
130
|
+
name: "filter",
|
|
131
|
+
required: false,
|
|
132
|
+
description: "Only cases whose file path contains this substring",
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
options: { verbose: OPT.verbose, json: OPT.json },
|
|
136
|
+
async run(inv) {
|
|
137
|
+
const [workflowArg, filter] = inv.positionals;
|
|
138
|
+
const workflow = resolveWorkflow(workflowArg, inv.root);
|
|
139
|
+
const json = inv.values.json === true;
|
|
140
|
+
const style = createStyle();
|
|
141
|
+
printSessionHeader(style, workflow, inv.root, true);
|
|
142
|
+
const view = createTestView(process.stderr, style);
|
|
143
|
+
const usage = createEventSink(style, inv.values.verbose === true, view);
|
|
144
|
+
const outcome = await runTests({
|
|
145
|
+
workflow,
|
|
146
|
+
rootDir: inv.root,
|
|
147
|
+
filter,
|
|
148
|
+
onEvent: usage.handler,
|
|
149
|
+
onCaseStart: (file) => view.onCaseStart(file),
|
|
150
|
+
onCaseResult: (result) => {
|
|
151
|
+
view.onCaseResult(result);
|
|
152
|
+
const perCase = result.sessionId ? usage.totals(result.sessionId) : undefined;
|
|
153
|
+
if (perCase && hasUsage(perCase))
|
|
154
|
+
err(` ${style.dim(`tokens ${formatUsage(perCase)}`)}`);
|
|
155
|
+
},
|
|
156
|
+
}).catch((e) => {
|
|
157
|
+
if (isKnown(e))
|
|
158
|
+
throw new CliError(e.message);
|
|
159
|
+
throw e;
|
|
160
|
+
});
|
|
161
|
+
if (!outcome.skipped && outcome.results.length === 0 && filter) {
|
|
162
|
+
throw new CliError(`no cases matched '${filter}' (${outcome.discovered} discovered)`);
|
|
163
|
+
}
|
|
164
|
+
if (json) {
|
|
165
|
+
out(JSON.stringify({ workflow, ...outcome }, null, 2));
|
|
166
|
+
}
|
|
167
|
+
else if (outcome.skipped) {
|
|
168
|
+
view.renderSuiteSkipped(workflow, outcome.skipped);
|
|
169
|
+
out(`suite skipped — ${outcome.skipped}`);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
view.renderSummary(outcome.results);
|
|
173
|
+
const counts = { passed: 0, failed: 0, skipped: 0 };
|
|
174
|
+
for (const r of outcome.results)
|
|
175
|
+
counts[r.verdict.status] += 1;
|
|
176
|
+
out(`${counts.passed} passed, ${counts.failed} failed, ${counts.skipped} skipped`);
|
|
177
|
+
}
|
|
178
|
+
printUsageFooter(style, usage);
|
|
179
|
+
return outcome.exitCode;
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
validate: {
|
|
183
|
+
name: "validate",
|
|
184
|
+
summary: "Statically validate a workflow — no model calls",
|
|
185
|
+
positionals: [WORKFLOW_ARG],
|
|
186
|
+
options: { json: OPT.json },
|
|
187
|
+
async run(inv) {
|
|
188
|
+
const workflow = resolveWorkflow(inv.positionals[0], inv.root);
|
|
189
|
+
const style = createStyle();
|
|
190
|
+
printSessionHeader(style, workflow, inv.root);
|
|
191
|
+
const result = await validateWorkflow({ workflow, rootDir: inv.root });
|
|
192
|
+
const errors = result.diagnostics.filter((d) => d.severity === "error").length;
|
|
193
|
+
const warnings = result.diagnostics.length - errors;
|
|
194
|
+
if (result.diagnostics.length === 0)
|
|
195
|
+
err(` ${style.green(`${icons.check} no issues found`)}`);
|
|
196
|
+
for (const d of result.diagnostics)
|
|
197
|
+
err(formatDiagnostic(style, d));
|
|
198
|
+
err("");
|
|
199
|
+
if (inv.values.json === true)
|
|
200
|
+
out(JSON.stringify({ workflow, valid: result.valid, diagnostics: result.diagnostics }, null, 2));
|
|
201
|
+
else
|
|
202
|
+
out(`${result.valid ? "valid" : "invalid"} — ${errors} error(s), ${warnings} warning(s)`);
|
|
203
|
+
return result.valid ? 0 : 1;
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
sessions: {
|
|
207
|
+
name: "sessions",
|
|
208
|
+
summary: "List durable sessions, or show one in full",
|
|
209
|
+
description: "Lists sessions with status, open/finished, current state, variable names and — for parked sessions — what they " +
|
|
210
|
+
"await. With a session id, prints that session in full, each variable with its value and whether it is locked " +
|
|
211
|
+
"(locked = established by the host: a seed, a delivery, or the built-in trigger).",
|
|
212
|
+
positionals: [{ ...SESSION_ARG, required: false }],
|
|
213
|
+
options: { workflow: OPT.workflow, json: OPT.json },
|
|
214
|
+
async run(inv) {
|
|
215
|
+
const sessionId = inv.positionals[0];
|
|
216
|
+
const json = inv.values.json === true;
|
|
217
|
+
return withSession(inv, sessionId, async ({ agent, style }) => {
|
|
218
|
+
if (sessionId) {
|
|
219
|
+
const summary = await agent.sessions.get(sessionId);
|
|
220
|
+
if (!summary)
|
|
221
|
+
throw new CliError(`no durable session '${sessionId}'. Use 'archmax sessions' to list them.`);
|
|
222
|
+
if (json)
|
|
223
|
+
return (out(JSON.stringify(summary, null, 2)), 0);
|
|
224
|
+
err("");
|
|
225
|
+
err(style.green(style.bold(`${icons.check} session ${summary.sessionId}`)));
|
|
226
|
+
out(` status ${summary.status ?? "?"}${summary.classification ? ` (${summary.classification})` : ""}`);
|
|
227
|
+
out(` state ${summary.workflowState ?? "?"}`);
|
|
228
|
+
if (summary.node)
|
|
229
|
+
out(` awaiting ${summary.node}`);
|
|
230
|
+
if (summary.waitReason)
|
|
231
|
+
out(` waiting ${summary.waitReason}${summary.resumeAt ? ` due=${summary.resumeAt}` : ""}`);
|
|
232
|
+
if (summary.specHash)
|
|
233
|
+
out(` spec ${summary.specHash}`);
|
|
234
|
+
const variables = Object.entries(summary.variables ?? {});
|
|
235
|
+
out(variables.length ? " variables" : " variables none set");
|
|
236
|
+
for (const [name, entry] of variables)
|
|
237
|
+
out(` ${name}${entry.locked ? " (locked)" : ""} = ${JSON.stringify(entry.value ?? null)}`);
|
|
238
|
+
return 0;
|
|
239
|
+
}
|
|
240
|
+
const listed = await agent.sessions.list();
|
|
241
|
+
if (json)
|
|
242
|
+
return (out(JSON.stringify(listed, null, 2)), 0);
|
|
243
|
+
err("");
|
|
244
|
+
if (listed.length === 0)
|
|
245
|
+
return (out("No durable sessions found."), 0);
|
|
246
|
+
err(style.green(style.bold(`${icons.check} sessions`)));
|
|
247
|
+
for (const t of listed) {
|
|
248
|
+
const names = Object.keys(t.variables ?? {});
|
|
249
|
+
out(` ${t.sessionId} ${t.status ?? "?"}${t.classification ? ` ${t.classification}` : ""} state=${t.workflowState ?? "?"}` +
|
|
250
|
+
`${t.node ? ` ${style.yellow(`awaiting=${t.node}`)}` : ""}${names.length ? ` vars=${names.join(",")}` : ""}`);
|
|
251
|
+
if (t.waitReason)
|
|
252
|
+
out(` waiting for: ${t.waitReason}${t.resumeAt ? ` due=${t.resumeAt}` : ""}`);
|
|
253
|
+
else if (t.node)
|
|
254
|
+
printDecisionContext(agent.workflow.machine, t.node, agent.workflow.machine.spec.states[t.node]?.transitions ?? []);
|
|
255
|
+
}
|
|
256
|
+
return 0;
|
|
257
|
+
});
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
decide: {
|
|
261
|
+
name: "decide",
|
|
262
|
+
summary: "Resume a session parked at a human state by picking a transition",
|
|
263
|
+
description: "The person picks the target state (one of the parked state's declared transitions); routing is deterministic. " +
|
|
264
|
+
"Fails if the session is not parked or the target is not a declared transition.",
|
|
265
|
+
positionals: [SESSION_ARG],
|
|
266
|
+
options: {
|
|
267
|
+
to: {
|
|
268
|
+
type: "string",
|
|
269
|
+
placeholder: "<state>",
|
|
270
|
+
description: "The state to route to (the person's choice)",
|
|
271
|
+
},
|
|
272
|
+
comment: {
|
|
273
|
+
type: "string",
|
|
274
|
+
placeholder: "<text>",
|
|
275
|
+
description: "Optional note explaining the decision",
|
|
276
|
+
},
|
|
277
|
+
workflow: OPT.workflow,
|
|
278
|
+
verbose: OPT.verbose,
|
|
279
|
+
},
|
|
280
|
+
async run(inv) {
|
|
281
|
+
const sessionId = inv.positionals[0];
|
|
282
|
+
const to = inv.values.to;
|
|
283
|
+
if (!sessionId)
|
|
284
|
+
throw new UsageError("a session id is required");
|
|
285
|
+
if (!to)
|
|
286
|
+
throw new UsageError("--to <state> is required (the target the person picks)");
|
|
287
|
+
const comment = inv.values.comment;
|
|
288
|
+
return withSession(inv, sessionId, async ({ agent, style }) => {
|
|
289
|
+
const outcome = await agent.workflow.decide(sessionId, {
|
|
290
|
+
target: to,
|
|
291
|
+
...(comment ? { comment } : {}),
|
|
292
|
+
});
|
|
293
|
+
printResumed(style, sessionId, "decided", outcome);
|
|
294
|
+
return 0;
|
|
295
|
+
});
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
reply: {
|
|
299
|
+
name: "reply",
|
|
300
|
+
summary: "Send a message to a session parked at a human state; it stays parked",
|
|
301
|
+
description: "The session answers on a turn with no tools and stays parked at the same state with the same decision pending — " +
|
|
302
|
+
"this is how you talk to a parked session, not how you move it. Use 'archmax decide' for that; no wording here selects a transition.",
|
|
303
|
+
positionals: [
|
|
304
|
+
SESSION_ARG,
|
|
305
|
+
{
|
|
306
|
+
name: "message",
|
|
307
|
+
required: true,
|
|
308
|
+
rest: true,
|
|
309
|
+
description: "The message; the rest of the line is taken",
|
|
310
|
+
},
|
|
311
|
+
],
|
|
312
|
+
options: { workflow: OPT.workflow, verbose: OPT.verbose },
|
|
313
|
+
async run(inv) {
|
|
314
|
+
const [sessionId, message] = inv.positionals;
|
|
315
|
+
if (!sessionId)
|
|
316
|
+
throw new UsageError("a session id is required");
|
|
317
|
+
if (!message?.trim())
|
|
318
|
+
throw new UsageError("a message is required — there is nothing to answer otherwise");
|
|
319
|
+
return withSession(inv, sessionId, async ({ agent, style }) => {
|
|
320
|
+
printReply(style, sessionId, await agent.workflow.reply(sessionId, message));
|
|
321
|
+
return 0;
|
|
322
|
+
});
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
deliver: {
|
|
326
|
+
name: "deliver",
|
|
327
|
+
summary: "Resume a session parked for input by delivering a trigger",
|
|
328
|
+
description: "The event-driven analogue of 'archmax decide': the session continues in the state it parked in, the trigger becomes " +
|
|
329
|
+
"its current one and the variables seed what the event carried, locked. Any trigger id resumes a park.",
|
|
330
|
+
positionals: [SESSION_ARG],
|
|
331
|
+
options: {
|
|
332
|
+
trigger: {
|
|
333
|
+
type: "string",
|
|
334
|
+
placeholder: "<id>",
|
|
335
|
+
description: "Trigger to deliver (the event that arrived)",
|
|
336
|
+
},
|
|
337
|
+
variables: OPT.variables,
|
|
338
|
+
workflow: OPT.workflow,
|
|
339
|
+
verbose: OPT.verbose,
|
|
340
|
+
},
|
|
341
|
+
async run(inv) {
|
|
342
|
+
const sessionId = inv.positionals[0];
|
|
343
|
+
const triggerId = inv.values.trigger;
|
|
344
|
+
if (!sessionId)
|
|
345
|
+
throw new UsageError("a session id is required");
|
|
346
|
+
if (!triggerId)
|
|
347
|
+
throw new UsageError("--trigger <id> is required (the event that arrived)");
|
|
348
|
+
const variables = parseVariablesJson(inv.values.variables);
|
|
349
|
+
return withSession(inv, sessionId, async ({ agent, style }) => {
|
|
350
|
+
const outcome = await agent.workflow.deliver(sessionId, {
|
|
351
|
+
trigger: { id: triggerId },
|
|
352
|
+
...(variables ? { variables } : {}),
|
|
353
|
+
});
|
|
354
|
+
printResumed(style, sessionId, "delivered", outcome);
|
|
355
|
+
return 0;
|
|
356
|
+
});
|
|
357
|
+
},
|
|
358
|
+
},
|
|
359
|
+
help: {
|
|
360
|
+
name: "help",
|
|
361
|
+
summary: "Show help for the CLI or one command",
|
|
362
|
+
positionals: [{ name: "command", required: false, description: "A command name" }],
|
|
363
|
+
options: {},
|
|
364
|
+
async run(inv) {
|
|
365
|
+
const name = inv.positionals[0];
|
|
366
|
+
if (name && !COMMANDS[name])
|
|
367
|
+
throw new UsageError(`unknown command '${name}'`);
|
|
368
|
+
out(name ? commandHelp(COMMANDS[name]) : topLevelHelp(Object.values(COMMANDS)));
|
|
369
|
+
return 0;
|
|
370
|
+
},
|
|
371
|
+
},
|
|
372
|
+
};
|
|
373
|
+
/**
|
|
374
|
+
* Dispatch the CLI on argv (without the node/script prefix) and return the exit
|
|
375
|
+
* code. Exported for tests. Usage errors print one line plus a `--help` hint
|
|
376
|
+
* and return 2; a missing command prints the top-level help to stderr.
|
|
377
|
+
*/
|
|
378
|
+
export async function dispatchCli(args) {
|
|
379
|
+
const [name, ...rest] = args;
|
|
380
|
+
if (name === "--help" || name === "-h")
|
|
381
|
+
return (out(topLevelHelp(Object.values(COMMANDS))), 0);
|
|
382
|
+
if (name === undefined) {
|
|
383
|
+
err(topLevelHelp(Object.values(COMMANDS)));
|
|
384
|
+
err("\nError: a command is required");
|
|
385
|
+
return 2;
|
|
386
|
+
}
|
|
387
|
+
const cmd = COMMANDS[name];
|
|
388
|
+
if (!cmd)
|
|
389
|
+
return (err(`Error: unknown command '${name}' (try: archmax help)`), 2);
|
|
390
|
+
try {
|
|
391
|
+
const inv = parseInvocation(cmd, rest);
|
|
392
|
+
if (inv.values.help)
|
|
393
|
+
return (out(commandHelp(cmd)), 0);
|
|
394
|
+
return await cmd.run(inv);
|
|
395
|
+
}
|
|
396
|
+
catch (e) {
|
|
397
|
+
if (e instanceof UsageError)
|
|
398
|
+
return (err(`Error: ${e.message} (try: archmax ${cmd.name} --help)`), 2);
|
|
399
|
+
if (e instanceof CliError)
|
|
400
|
+
return (err(`Error: ${e.message}`), 1);
|
|
401
|
+
throw e;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/** True when this module is the executed binary, also through npm's `.bin` symlink shim. */
|
|
405
|
+
function isEntrypoint() {
|
|
406
|
+
if (argv[1] === undefined)
|
|
407
|
+
return false;
|
|
408
|
+
try {
|
|
409
|
+
return realpathSync(argv[1]) === realpathSync(fileURLToPath(import.meta.url));
|
|
410
|
+
}
|
|
411
|
+
catch {
|
|
412
|
+
return false;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
if (isEntrypoint()) {
|
|
416
|
+
printBanner();
|
|
417
|
+
dispatchCli(process.argv.slice(2))
|
|
418
|
+
.then((code) => {
|
|
419
|
+
process.exitCode = code;
|
|
420
|
+
})
|
|
421
|
+
.catch((e) => {
|
|
422
|
+
console.error("archmax failed:", e);
|
|
423
|
+
exit(1);
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|