@enderfga/claw-orchestrator 7.12.1 → 7.14.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.
Files changed (88) hide show
  1. package/README.md +14 -11
  2. package/configs/engines/README.md +20 -0
  3. package/configs/engines/dsh.json +17 -0
  4. package/configs/engines/kimi-code.json +17 -0
  5. package/dist/bin/cli.js +123 -34
  6. package/dist/bin/cli.js.map +1 -1
  7. package/dist/src/acp-server.js +4 -2
  8. package/dist/src/acp-server.js.map +1 -1
  9. package/dist/src/autoloop/dispatcher.d.ts +19 -0
  10. package/dist/src/autoloop/dispatcher.js +57 -0
  11. package/dist/src/autoloop/dispatcher.js.map +1 -1
  12. package/dist/src/autoloop/runner.d.ts +102 -2
  13. package/dist/src/autoloop/runner.js +367 -44
  14. package/dist/src/autoloop/runner.js.map +1 -1
  15. package/dist/src/autoloop/types.d.ts +17 -0
  16. package/dist/src/autoloop/types.js.map +1 -1
  17. package/dist/src/dashboard/index.html +79 -73
  18. package/dist/src/embedded-server.js +35 -7
  19. package/dist/src/embedded-server.js.map +1 -1
  20. package/dist/src/engine-presets.d.ts +7 -3
  21. package/dist/src/engine-presets.js +39 -6
  22. package/dist/src/engine-presets.js.map +1 -1
  23. package/dist/src/engine-spawn.d.ts +8 -1
  24. package/dist/src/engine-spawn.js +13 -3
  25. package/dist/src/engine-spawn.js.map +1 -1
  26. package/dist/src/index.js +78 -71
  27. package/dist/src/index.js.map +1 -1
  28. package/dist/src/kernel/agent-step.d.ts +3 -0
  29. package/dist/src/kernel/agent-step.js.map +1 -1
  30. package/dist/src/kernel/engine.d.ts +5 -2
  31. package/dist/src/kernel/engine.js +11 -12
  32. package/dist/src/kernel/engine.js.map +1 -1
  33. package/dist/src/kernel/nodes/autoloop.d.ts +32 -2
  34. package/dist/src/kernel/nodes/autoloop.js +122 -15
  35. package/dist/src/kernel/nodes/autoloop.js.map +1 -1
  36. package/dist/src/kernel/nodes/goal.d.ts +94 -0
  37. package/dist/src/kernel/nodes/goal.js +386 -0
  38. package/dist/src/kernel/nodes/goal.js.map +1 -0
  39. package/dist/src/kernel/nodes/index.d.ts +2 -1
  40. package/dist/src/kernel/nodes/index.js +3 -1
  41. package/dist/src/kernel/nodes/index.js.map +1 -1
  42. package/dist/src/kernel/templates/index.d.ts +27 -3
  43. package/dist/src/kernel/templates/index.js +78 -1
  44. package/dist/src/kernel/templates/index.js.map +1 -1
  45. package/dist/src/kernel/types.d.ts +41 -2
  46. package/dist/src/kernel/types.js.map +1 -1
  47. package/dist/src/persistent-acp-session.d.ts +76 -0
  48. package/dist/src/persistent-acp-session.js +409 -0
  49. package/dist/src/persistent-acp-session.js.map +1 -0
  50. package/dist/src/persistent-agy-session.js +1 -0
  51. package/dist/src/persistent-agy-session.js.map +1 -1
  52. package/dist/src/persistent-codex-app-session.d.ts +55 -26
  53. package/dist/src/persistent-codex-app-session.js +109 -24
  54. package/dist/src/persistent-codex-app-session.js.map +1 -1
  55. package/dist/src/persistent-codex-session.js +1 -0
  56. package/dist/src/persistent-codex-session.js.map +1 -1
  57. package/dist/src/persistent-cursor-session.js +1 -0
  58. package/dist/src/persistent-cursor-session.js.map +1 -1
  59. package/dist/src/persistent-custom-session.js +2 -0
  60. package/dist/src/persistent-custom-session.js.map +1 -1
  61. package/dist/src/persistent-gemini-session.js +1 -0
  62. package/dist/src/persistent-gemini-session.js.map +1 -1
  63. package/dist/src/persistent-grok-session.js +1 -0
  64. package/dist/src/persistent-grok-session.js.map +1 -1
  65. package/dist/src/persistent-opencode-session.js +1 -0
  66. package/dist/src/persistent-opencode-session.js.map +1 -1
  67. package/dist/src/persistent-session.js +1 -0
  68. package/dist/src/persistent-session.js.map +1 -1
  69. package/dist/src/sanitize.d.ts +10 -0
  70. package/dist/src/sanitize.js +26 -0
  71. package/dist/src/sanitize.js.map +1 -1
  72. package/dist/src/session-manager.d.ts +25 -20
  73. package/dist/src/session-manager.js +92 -43
  74. package/dist/src/session-manager.js.map +1 -1
  75. package/dist/src/types.d.ts +35 -1
  76. package/dist/src/types.js +2 -0
  77. package/dist/src/types.js.map +1 -1
  78. package/openclaw.plugin.json +1 -1
  79. package/package.json +2 -2
  80. package/skills/SKILL.md +8 -5
  81. package/skills/references/acp.md +4 -0
  82. package/skills/references/autoloop.md +27 -2
  83. package/skills/references/claude-cli-tracking.md +3 -1
  84. package/skills/references/cli.md +79 -39
  85. package/skills/references/dashboard.md +5 -1
  86. package/skills/references/multi-engine.md +39 -10
  87. package/skills/references/tools.md +77 -65
  88. package/skills/references/workflow.md +87 -13
@@ -16,8 +16,15 @@ export declare function killEngineTree(child: ChildProcess): void;
16
16
  /**
17
17
  * Streaming spawn for engine CLIs. Same signature and return type as
18
18
  * `node:child_process` spawn, so call sites change by one import line.
19
+ *
20
+ * `launcher` is an argv prefix the engine runs under — `['sandbox.sh', 'task',
21
+ * '0 1']` spawns `sandbox.sh task '0 1' codex app-server …`. It is the
22
+ * caller's own command, at the trust level of a contract's command check. An
23
+ * empty or absent launcher spawns the engine directly.
19
24
  */
20
- export declare function spawnEngine(bin: string, args: string[], options: SpawnOptions): ChildProcess;
25
+ export declare function spawnEngine(bin: string, args: string[], options: SpawnOptions & {
26
+ launcher?: readonly string[];
27
+ }): ChildProcess;
21
28
  export interface ExecEngineOptions {
22
29
  cwd?: string;
23
30
  env?: NodeJS.ProcessEnv;
@@ -139,14 +139,24 @@ export function killEngineTree(child) {
139
139
  /**
140
140
  * Streaming spawn for engine CLIs. Same signature and return type as
141
141
  * `node:child_process` spawn, so call sites change by one import line.
142
+ *
143
+ * `launcher` is an argv prefix the engine runs under — `['sandbox.sh', 'task',
144
+ * '0 1']` spawns `sandbox.sh task '0 1' codex app-server …`. It is the
145
+ * caller's own command, at the trust level of a contract's command check. An
146
+ * empty or absent launcher spawns the engine directly.
142
147
  */
143
148
  export function spawnEngine(bin, args, options) {
144
- const cwd = typeof options.cwd === 'string' ? options.cwd : undefined;
149
+ const { launcher, ...spawnOptions } = options;
150
+ const cwd = typeof spawnOptions.cwd === 'string' ? spawnOptions.cwd : undefined;
145
151
  // `cwd` moves the process but leaves the inherited PWD naming the parent's
146
152
  // directory, and some engines trust PWD: opencode resolves its project from
147
153
  // it, so a session started by a server ran in the server's directory.
148
- const env = cwd ? { ...(options.env ?? process.env), PWD: resolvePath(cwd) } : (options.env ?? process.env);
149
- return crossSpawn(bin, prepareArgs(bin, args, env, cwd), { ...options, env });
154
+ const env = cwd ? { ...(spawnOptions.env ?? process.env), PWD: resolvePath(cwd) } : (spawnOptions.env ?? process.env);
155
+ if (launcher && launcher.length > 0) {
156
+ const [head, ...rest] = launcher;
157
+ return crossSpawn(head, [...rest, bin, ...args], { ...spawnOptions, env });
158
+ }
159
+ return crossSpawn(bin, prepareArgs(bin, args, env, cwd), { ...spawnOptions, env });
150
160
  }
151
161
  /**
152
162
  * execFile-style capture exec for engine CLIs (one-shot `codex` helpers).
@@ -1 +1 @@
1
- {"version":3,"file":"engine-spawn.js","sourceRoot":"","sources":["../../src/engine-spawn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine-spawn.js","sourceRoot":"","sources":["../../src/engine-spawn.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -13,7 +13,7 @@ import { createProxyHandler } from './proxy/handler.js';
13
13
  import { EmbeddedServer } from './embedded-server.js';
14
14
  import { sanitizeCwd, validateRegex } from './validation.js';
15
15
  import { ENGINE_TYPES, EFFORT_LEVELS, } from './types.js';
16
- import { councilWorkflow, fanoutWorkflow, solveWorkflow } from './kernel/templates/index.js';
16
+ import { councilWorkflow, fanoutWorkflow, goalWorkflow, solveWorkflow, } from './kernel/templates/index.js';
17
17
  import { readEvents as readKernelEvents } from './kernel/store.js';
18
18
  import { resolveSecretRefs } from './kernel/secrets.js';
19
19
  import { AUTOLOOP_TIMEOUT_SCHEMA, validateAutoloopTimeoutConfig } from './autoloop/types.js';
@@ -54,6 +54,23 @@ function normalizeToolResult(result) {
54
54
  details: result,
55
55
  };
56
56
  }
57
+ const ACP_AGENT_SCHEMA = {
58
+ description: 'The ACP agent (required when engine is "acp"): the id of a bundled preset (`clawo engines`), or, from a local caller only, an inline config.',
59
+ oneOf: [
60
+ { type: 'string', description: 'Preset id, e.g. "kimi-code"' },
61
+ {
62
+ type: 'object',
63
+ properties: {
64
+ name: { type: 'string', description: 'Display name' },
65
+ command: { type: 'string', description: 'Command that serves ACP on stdio' },
66
+ commandEnv: { type: 'string', description: 'Env var that overrides command' },
67
+ args: { type: 'array', items: { type: 'string' }, description: 'Arguments, e.g. ["acp"]' },
68
+ env: { type: 'object', additionalProperties: { type: 'string' } },
69
+ },
70
+ required: ['name', 'command'],
71
+ },
72
+ ],
73
+ };
57
74
  const CUSTOM_ENGINE_SCHEMA = {
58
75
  type: 'object',
59
76
  description: 'Custom engine config (required when the corresponding engine is "custom").',
@@ -190,7 +207,7 @@ const plugin = {
190
207
  // ─── Tool: session_start ──────────────────────────────────────────────
191
208
  registerTool({
192
209
  name: 'session_start',
193
- description: 'Start a persistent coding session. Engines: claude (default) for the Claude Code CLI, codex for the OpenAI Codex CLI, agy for the Google Antigravity CLI, grok for the xAI Grok Build CLI, opencode for the sst/opencode CLI, or custom for any user-configured coding agent CLI.',
210
+ description: 'Start a persistent coding session. Engines: claude (default) for the Claude Code CLI, codex for the OpenAI Codex CLI, agy for the Google Antigravity CLI, grok for the xAI Grok Build CLI, opencode for the sst/opencode CLI, acp for any Agent Client Protocol agent (Kimi Code, dsh, OpenCode, Claude Code via an ACP adapter), or custom for any user-configured coding agent CLI.',
194
211
  parameters: {
195
212
  type: 'object',
196
213
  properties: {
@@ -199,7 +216,7 @@ const plugin = {
199
216
  engine: {
200
217
  type: 'string',
201
218
  enum: ENGINE_TYPES,
202
- description: 'Engine to use (default: claude). codex = `codex exec` per send (no /goal). codex-app = long-running `codex app-server` with /goal support. agy = Google Antigravity CLI (Gemini CLI successor; plain-text output, tokens estimated, conversation resume handled automatically). opencode = sst/opencode CLI (provider-agnostic; pass model as `provider/model`). Use "custom" with customEngine config for any CLI.',
219
+ description: 'Engine to use (default: claude). codex = `codex exec` per send (no /goal). codex-app = long-running `codex app-server` with /goal support. agy = Google Antigravity CLI (Gemini CLI successor; plain-text output, tokens estimated, conversation resume handled automatically). opencode = sst/opencode CLI (provider-agnostic; pass model as `provider/model`). acp = any Agent Client Protocol agent, chosen with acpAgent. Use "custom" with customEngine config for any CLI.',
203
220
  },
204
221
  model: { type: 'string', description: 'Model to use (opus, sonnet, haiku, gpt-5.5, agy-pro, etc.)' },
205
222
  permissionMode: {
@@ -340,6 +357,7 @@ const plugin = {
340
357
  description: 'AWS Bedrock service tier (sets ANTHROPIC_BEDROCK_SERVICE_TIER). Only effective when routing through Bedrock.',
341
358
  },
342
359
  customEngine: CUSTOM_ENGINE_SCHEMA,
360
+ acpAgent: ACP_AGENT_SCHEMA,
343
361
  resumeSessionId: {
344
362
  type: 'string',
345
363
  description: 'Resume an existing Claude Code session by its ID (e.g. from ~/.claude/sessions/). Replays conversation history via session/load instead of starting fresh.',
@@ -802,16 +820,15 @@ const plugin = {
802
820
  });
803
821
  },
804
822
  });
805
- // ─── Tools: codex_goal_* (Codex 0.128 /goal slash commands) ────────
823
+ // ─── Tools: codex_goal_* (codex-app thread/goal/* RPCs) ─────────────
806
824
  //
807
- // Goal mutation in Codex's v2 protocol is **server-side**: clients drive
808
- // it by sending the `/goal <args>` slash text via `turn/start`. These
809
- // tools are convenience wrappers around that pattern, scoped to sessions
810
- // started with engine: "codex-app". Calls against any other engine
811
- // surface a clear error rather than silently no-op'ing.
825
+ // Thin wrappers over the app-server's typed goal RPCs, scoped to sessions
826
+ // started with engine: "codex-app". Calls against any other engine surface
827
+ // a clear error rather than silently no-op'ing.
828
+ const GOAL_SHAPE = 'Returns { ok, goal } where goal is { objective, status: "active"|"paused"|"blocked"|"usageLimited"|"budgetLimited"|"complete", tokenBudget, tokensUsed, timeUsedSeconds, ... } or null.';
812
829
  registerTool({
813
830
  name: 'codex_goal_set',
814
- description: 'Set a long-horizon objective on a codex-app session. Sends `/goal <objective>` via the app-server slash command. Requires engine: "codex-app".',
831
+ description: `Set a long-horizon objective on a codex-app session (thread/goal/set). Codex then works turn after turn on its own until the goal leaves "active". Requires engine: "codex-app". ${GOAL_SHAPE}`,
815
832
  parameters: {
816
833
  type: 'object',
817
834
  properties: {
@@ -820,71 +837,40 @@ const plugin = {
820
837
  type: 'string',
821
838
  description: 'The objective text. Codex will pursue this across turns until achieved, paused, or cleared.',
822
839
  },
823
- timeout: { type: 'number', description: 'Timeout in ms for the resulting turn (default 120000).' },
840
+ tokenBudget: {
841
+ type: 'number',
842
+ description: 'Optional token budget; the goal stops as "budgetLimited" once it is spent.',
843
+ },
824
844
  },
825
845
  required: ['name', 'objective'],
826
846
  },
827
847
  execute: async (_id, args) => {
828
- return await getManager().codexGoalCommand(args.name, args.objective, args.timeout);
829
- },
830
- });
831
- registerTool({
832
- name: 'codex_goal_get',
833
- description: 'Read the cached goal state on a codex-app session (objective, status, tokensUsed, timeUsedSeconds, tokenBudget). Returns null if no goal is active. Pure read — does not send any turn.',
834
- parameters: {
835
- type: 'object',
836
- properties: { name: { type: 'string', description: 'Session name (must be a codex-app session).' } },
837
- required: ['name'],
838
- },
839
- execute: async (_id, args) => {
840
- return getManager().codexGoalGet(args.name);
848
+ return await getManager().codexGoal(args.name, {
849
+ action: 'set',
850
+ objective: args.objective,
851
+ tokenBudget: args.tokenBudget,
852
+ });
841
853
  },
842
854
  });
843
- registerTool({
844
- name: 'codex_goal_pause',
845
- description: 'Pause goal pursuit on a codex-app session. Sends `/goal pause`.',
846
- parameters: {
847
- type: 'object',
848
- properties: {
849
- name: { type: 'string', description: 'Session name.' },
850
- timeout: { type: 'number', description: 'Timeout in ms (default 120000).' },
855
+ for (const [action, description] of [
856
+ ['get', 'Read the goal of a codex-app session from the app-server (thread/goal/get). Sends no turn.'],
857
+ ['pause', 'Pause goal pursuit on a codex-app session (thread/goal/set status "paused").'],
858
+ ['resume', 'Resume a paused or stopped goal on a codex-app session (thread/goal/set status "active").'],
859
+ ['clear', 'Remove the goal from a codex-app session (thread/goal/clear).'],
860
+ ]) {
861
+ registerTool({
862
+ name: `codex_goal_${action}`,
863
+ description: `${description} ${GOAL_SHAPE}`,
864
+ parameters: {
865
+ type: 'object',
866
+ properties: { name: { type: 'string', description: 'Session name (must be a codex-app session).' } },
867
+ required: ['name'],
851
868
  },
852
- required: ['name'],
853
- },
854
- execute: async (_id, args) => {
855
- return await getManager().codexGoalCommand(args.name, 'pause', args.timeout);
856
- },
857
- });
858
- registerTool({
859
- name: 'codex_goal_resume',
860
- description: 'Resume a paused goal on a codex-app session. Sends `/goal resume`.',
861
- parameters: {
862
- type: 'object',
863
- properties: {
864
- name: { type: 'string', description: 'Session name.' },
865
- timeout: { type: 'number', description: 'Timeout in ms (default 120000).' },
869
+ execute: async (_id, args) => {
870
+ return await getManager().codexGoal(args.name, { action });
866
871
  },
867
- required: ['name'],
868
- },
869
- execute: async (_id, args) => {
870
- return await getManager().codexGoalCommand(args.name, 'resume', args.timeout);
871
- },
872
- });
873
- registerTool({
874
- name: 'codex_goal_clear',
875
- description: 'Clear the active goal on a codex-app session. Sends `/goal clear`.',
876
- parameters: {
877
- type: 'object',
878
- properties: {
879
- name: { type: 'string', description: 'Session name.' },
880
- timeout: { type: 'number', description: 'Timeout in ms (default 120000).' },
881
- },
882
- required: ['name'],
883
- },
884
- execute: async (_id, args) => {
885
- return await getManager().codexGoalCommand(args.name, 'clear', args.timeout);
886
- },
887
- });
872
+ });
873
+ }
888
874
  // ─── Codex app-server v2 RPC tools (codex-app engine, Codex 0.137) ────
889
875
  registerTool({
890
876
  name: 'codex_interrupt',
@@ -1074,7 +1060,7 @@ const plugin = {
1074
1060
  // ─── Tools: workflow_* (durable run kernel) ─────────────────────────
1075
1061
  registerTool({
1076
1062
  name: 'workflow_start',
1077
- description: "Start a durable workflow run. Nodes: agent | fanout | council | verifier | human_gate | router | subflow. Every state transition is checkpointed to disk, so a run survives a process restart and can be resumed. When a contract is supplied the run cannot reach `completed` unless the runtime's own checks pass — without one it completes as `unverified`, which means nothing checked it. Runs in background; poll with workflow_status.",
1063
+ description: "Start a durable workflow run. Nodes: agent | fanout | council | goal | verifier | human_gate | router | subflow. Every state transition is checkpointed to disk, so a run survives a process restart and can be resumed. When a contract is supplied the run cannot reach `completed` unless the runtime's own checks pass — without one it completes as `unverified`, which means nothing checked it. Runs in background; poll with workflow_status.",
1078
1064
  parameters: {
1079
1065
  type: 'object',
1080
1066
  properties: {
@@ -1084,8 +1070,8 @@ const plugin = {
1084
1070
  },
1085
1071
  template: {
1086
1072
  type: 'string',
1087
- enum: ['solve', 'council', 'fanout'],
1088
- description: 'Build a built-in workflow instead of supplying `spec`. `solve` = triage → implement → verify → repair-until-green → review.',
1073
+ enum: ['solve', 'council', 'fanout', 'goal'],
1074
+ description: 'Build a built-in workflow instead of supplying `spec`. `solve` = triage → implement → verify → repair-until-green → review. `goal` = a Codex /goal on one codex-app thread (`task` is the objective) → verify → repair on the same thread.',
1089
1075
  },
1090
1076
  task: { type: 'string', description: 'Task text, when using `template`.' },
1091
1077
  agents: {
@@ -1129,7 +1115,17 @@ const plugin = {
1129
1115
  },
1130
1116
  },
1131
1117
  humanGate: { type: 'boolean', description: '`solve` only: park for approval before writing anything.' },
1132
- maxRepairs: { type: 'number', description: '`solve` only: repair attempts allowed (default 3).' },
1118
+ maxRepairs: {
1119
+ type: 'number',
1120
+ description: '`solve` / `goal`: repair attempts allowed (default 3 for solve, 1 for goal).',
1121
+ },
1122
+ model: { type: 'string', description: "`goal` only: Codex model (default: codex's own)." },
1123
+ tokenBudget: { type: 'number', description: '`goal` only: tokens the goal may spend.' },
1124
+ launcher: {
1125
+ type: 'array',
1126
+ items: { type: 'string' },
1127
+ description: '`goal` only: argv prefix codex runs under, e.g. a sandbox wrapper. It runs with your authority, like a contract command check.',
1128
+ },
1133
1129
  cwd: { type: 'string', description: 'Working directory for the run.' },
1134
1130
  runId: { type: 'string', description: 'Explicit run id (defaults to a generated one).' },
1135
1131
  contract: {
@@ -1216,6 +1212,17 @@ const plugin = {
1216
1212
  else if (template === 'fanout') {
1217
1213
  spec = fanoutWorkflow({ task, cwd, agents, synthesize: agents.length >= 2 });
1218
1214
  }
1215
+ else if (template === 'goal') {
1216
+ spec = goalWorkflow({
1217
+ task,
1218
+ cwd,
1219
+ contract: args.contract,
1220
+ model: args.model,
1221
+ tokenBudget: args.tokenBudget,
1222
+ launcher: args.launcher,
1223
+ maxRepairs: args.maxRepairs,
1224
+ });
1225
+ }
1219
1226
  else {
1220
1227
  spec = solveWorkflow({
1221
1228
  task,