@enderfga/claw-orchestrator 3.4.2 → 3.5.6

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 (49) hide show
  1. package/README.md +9 -9
  2. package/configs/autoloop-coder-prompt.md +59 -0
  3. package/configs/autoloop-planner-prompt.md +136 -0
  4. package/configs/autoloop-reviewer-prompt.md +76 -0
  5. package/dist/bin/cli.js +30 -4
  6. package/dist/bin/cli.js.map +1 -1
  7. package/dist/src/autoloop/agent-tools.d.ts +44 -0
  8. package/dist/src/autoloop/agent-tools.js +71 -0
  9. package/dist/src/autoloop/agent-tools.js.map +1 -0
  10. package/dist/src/autoloop/dispatcher.d.ts +137 -0
  11. package/dist/src/autoloop/dispatcher.js +580 -0
  12. package/dist/src/autoloop/dispatcher.js.map +1 -0
  13. package/dist/src/autoloop/messages.d.ts +114 -0
  14. package/dist/src/autoloop/messages.js +92 -0
  15. package/dist/src/autoloop/messages.js.map +1 -0
  16. package/dist/src/autoloop/notify.d.ts +36 -0
  17. package/dist/src/autoloop/notify.js +166 -0
  18. package/dist/src/autoloop/notify.js.map +1 -0
  19. package/dist/src/autoloop/planner-tools.d.ts +81 -0
  20. package/dist/src/autoloop/planner-tools.js +140 -0
  21. package/dist/src/autoloop/planner-tools.js.map +1 -0
  22. package/dist/src/autoloop/runner.d.ts +48 -0
  23. package/dist/src/autoloop/runner.js +214 -0
  24. package/dist/src/autoloop/runner.js.map +1 -0
  25. package/dist/src/autoloop/types.d.ts +69 -0
  26. package/dist/src/autoloop/types.js +16 -0
  27. package/dist/src/autoloop/types.js.map +1 -0
  28. package/dist/src/dashboard/index.html +910 -0
  29. package/dist/src/embedded-server.d.ts +1 -0
  30. package/dist/src/embedded-server.js +237 -51
  31. package/dist/src/embedded-server.js.map +1 -1
  32. package/dist/src/index.d.ts +5 -2
  33. package/dist/src/index.js +67 -105
  34. package/dist/src/index.js.map +1 -1
  35. package/dist/src/session-manager.d.ts +47 -14
  36. package/dist/src/session-manager.js +135 -47
  37. package/dist/src/session-manager.js.map +1 -1
  38. package/package.json +2 -2
  39. package/skills/references/autoloop.md +176 -193
  40. package/configs/autoloop-bootstrap-prompt.md +0 -30
  41. package/configs/autoloop-compress-prompt.md +0 -50
  42. package/configs/autoloop-propose-prompt.md +0 -57
  43. package/configs/autoloop-ratchet-prompt.md +0 -56
  44. package/dist/src/autoloop-types.d.ts +0 -218
  45. package/dist/src/autoloop-types.js +0 -130
  46. package/dist/src/autoloop-types.js.map +0 -1
  47. package/dist/src/autoloop.d.ts +0 -70
  48. package/dist/src/autoloop.js +0 -910
  49. package/dist/src/autoloop.js.map +0 -1
@@ -0,0 +1,137 @@
1
+ /**
2
+ * ClaudeAgentDispatcher — wires the v2 runner to real persistent Claude
3
+ * sessions managed by SessionManager.
4
+ *
5
+ * S2 scope: Planner only (chat-mode, no subagents yet). Coder/Reviewer
6
+ * delivery throws — S4 wires them in.
7
+ *
8
+ * Naming convention:
9
+ * autoloop-<run_id>-planner
10
+ * autoloop-<run_id>-coder (S4)
11
+ * autoloop-<run_id>-reviewer (S4)
12
+ *
13
+ * Reply path:
14
+ * When the user chats, we sendMessage(planner, text) and capture the
15
+ * Planner's natural-language reply. The reply is *not* a v2 message —
16
+ * it is emitted as the dispatcher's own 'planner_reply' event so the
17
+ * `autoloop_chat` plugin tool can return it to the user. Structured
18
+ * signals (S3+) will be parsed out of the same reply text and pushed
19
+ * into the runner queue.
20
+ */
21
+ import { EventEmitter } from 'node:events';
22
+ import type { SessionManager } from '../session-manager.js';
23
+ import type { Logger } from '../logger.js';
24
+ import { type AnyAutoloopMessage } from './messages.js';
25
+ import type { AgentDispatcher, AutoloopState, PushPolicy } from './types.js';
26
+ import { type SpawnSubagentsArgs } from './planner-tools.js';
27
+ export interface ClaudeAgentDispatcherConfig {
28
+ manager: SessionManager;
29
+ runId: string;
30
+ workspace: string;
31
+ /** Override the default Planner system prompt (default loads from configs/autoloop-planner-prompt.md). */
32
+ plannerPromptPath?: string;
33
+ /** Override Coder/Reviewer prompt paths (defaults walk-up to configs/autoloop-{coder,reviewer}-prompt.md). */
34
+ coderPromptPath?: string;
35
+ reviewerPromptPath?: string;
36
+ /** Model alias for Planner (default: 'opus'). */
37
+ plannerModel?: string;
38
+ /** Default Coder model (default: 'sonnet'). Can be overridden per spawn_subagents call. */
39
+ coderModel?: string;
40
+ /** Default Reviewer model (default: 'sonnet'). */
41
+ reviewerModel?: string;
42
+ /** Per-message wall-clock cap. Default 10 min. */
43
+ sendTimeoutMs?: number;
44
+ logger?: Logger;
45
+ /**
46
+ * Auto-compact thresholds (percent of context window). When the agent's
47
+ * `contextPercent` (from getStats) climbs above its threshold after a
48
+ * turn, the dispatcher dispatches `/compact <agent-specific summary>` to
49
+ * that agent. Defaults: Planner 80%, Coder 70%, Reviewer 70%.
50
+ *
51
+ * Per the design doc §7: each agent's context is precious; don't let it
52
+ * silently fill until the API rejects.
53
+ */
54
+ compactThresholds?: {
55
+ planner?: number;
56
+ coder?: number;
57
+ reviewer?: number;
58
+ };
59
+ /**
60
+ * Push-policy ref that S3's update_push_policy mutates. Caller (SessionManager)
61
+ * passes its own policy object so changes are visible to the runner.
62
+ */
63
+ pushPolicyRef?: PushPolicy;
64
+ /** Called when Planner emits spawn_subagents. S4 implements; S3 records the intent. */
65
+ onSpawnSubagents?: (args: SpawnSubagentsArgs) => Promise<void>;
66
+ }
67
+ export declare class ClaudeAgentDispatcher extends EventEmitter implements AgentDispatcher {
68
+ readonly config: ClaudeAgentDispatcherConfig;
69
+ private logger;
70
+ private plannerName;
71
+ private coderName;
72
+ private reviewerName;
73
+ private plannerStarted;
74
+ private coderStarted;
75
+ private reviewerStarted;
76
+ private plannerSystemPrompt;
77
+ private coderSystemPrompt;
78
+ private reviewerSystemPrompt;
79
+ private coderModel;
80
+ private reviewerModel;
81
+ /** Where Reviewer reads from. Created lazily by stageReviewSandbox(). */
82
+ private reviewerSandboxDir;
83
+ private ledgerDir;
84
+ constructor(config: ClaudeAgentDispatcherConfig);
85
+ get sessionNames(): {
86
+ planner: string;
87
+ coder: string;
88
+ reviewer: string;
89
+ };
90
+ init(state: AutoloopState): Promise<void>;
91
+ shutdown(reason: string): Promise<void>;
92
+ deliver(env: AnyAutoloopMessage): Promise<AnyAutoloopMessage[]>;
93
+ /**
94
+ * Start Coder + Reviewer sessions. Idempotent. Called in response to a
95
+ * Planner spawn_subagents tool (the SessionManager wires this via
96
+ * onSpawnSubagents).
97
+ */
98
+ spawnSubagents(args?: SpawnSubagentsArgs): Promise<void>;
99
+ /**
100
+ * Reset a single subagent — stop its session, clear the started flag, and
101
+ * (optionally) eagerly start a fresh one. The session-level system prompt is
102
+ * the same; persistent state lives in `<ledger>/{coder,reviewer}_memory.md`
103
+ * which the agent reads on its first turn after reset.
104
+ *
105
+ * Refuses to reset Planner without `force: true` — Planner reset throws away
106
+ * the user-conversation context and must be a deliberate action.
107
+ */
108
+ resetAgent(agent: 'planner' | 'coder' | 'reviewer', opts?: {
109
+ force?: boolean;
110
+ eagerRestart?: boolean;
111
+ }): Promise<void>;
112
+ /**
113
+ * Wrap a subagent send. If the underlying session throws or returns an
114
+ * error string, auto-reset the subagent once and retry. Used by
115
+ * deliverToCoder / deliverToReviewer to recover from subprocess deaths.
116
+ */
117
+ private sendWithRecovery;
118
+ private lastCompactAt;
119
+ private compactSummaryFor;
120
+ private maybeCompact;
121
+ private ensurePlanner;
122
+ private deliverToPlanner;
123
+ private ensureCoder;
124
+ private deliverToCoder;
125
+ private ensureReviewer;
126
+ /**
127
+ * Stage the iter's artifacts into the Reviewer sandbox cwd. Reviewer is a
128
+ * persistent session whose cwd is fixed at <ledger>/reviewer_sandbox/, so
129
+ * every review must rewrite the sandbox to "this iter's view".
130
+ */
131
+ private stageReviewSandbox;
132
+ private deliverToReviewer;
133
+ private persistVerdict;
134
+ /** Run a git command in the workspace; returns combined output. Used by Coder commits. */
135
+ private runGit;
136
+ private gitCommit;
137
+ }