@honeybee-ai/incubator 1.0.0 → 1.0.1

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.

Potentially problematic release.


This version of @honeybee-ai/incubator might be problematic. Click here for more details.

Files changed (172) hide show
  1. package/dist/agent/acp/claim-manager.d.ts +24 -0
  2. package/dist/agent/acp/claim-manager.js +64 -0
  3. package/dist/agent/acp/claim-manager.js.map +1 -0
  4. package/dist/agent/acp/direct-runtime.d.ts +90 -0
  5. package/dist/agent/acp/direct-runtime.js +362 -0
  6. package/dist/agent/acp/direct-runtime.js.map +1 -0
  7. package/dist/agent/acp/event-client.d.ts +20 -0
  8. package/dist/agent/acp/event-client.js +60 -0
  9. package/dist/agent/acp/event-client.js.map +1 -0
  10. package/dist/agent/acp/progress.d.ts +23 -0
  11. package/dist/agent/acp/progress.js +54 -0
  12. package/dist/agent/acp/progress.js.map +1 -0
  13. package/dist/agent/acp/runtime.d.ts +156 -0
  14. package/dist/agent/acp/runtime.js +337 -0
  15. package/dist/agent/acp/runtime.js.map +1 -0
  16. package/dist/agent/acp/ws-event-client.d.ts +64 -0
  17. package/dist/agent/acp/ws-event-client.js +262 -0
  18. package/dist/agent/acp/ws-event-client.js.map +1 -0
  19. package/dist/agent/agent.d.ts +60 -0
  20. package/dist/agent/agent.js +112 -0
  21. package/dist/agent/agent.js.map +1 -0
  22. package/dist/agent/cli.d.ts +2 -0
  23. package/dist/agent/cli.js +301 -0
  24. package/dist/agent/cli.js.map +1 -0
  25. package/dist/agent/mcp-client.d.ts +37 -0
  26. package/dist/agent/mcp-client.js +92 -0
  27. package/dist/agent/mcp-client.js.map +1 -0
  28. package/dist/agent/native-client.d.ts +17 -0
  29. package/dist/agent/native-client.js +44 -0
  30. package/dist/agent/native-client.js.map +1 -0
  31. package/dist/agent/prompt.d.ts +28 -53
  32. package/dist/agent/prompt.js +93 -143
  33. package/dist/agent/prompt.js.map +1 -1
  34. package/dist/agent/providers.d.ts +9 -2
  35. package/dist/agent/providers.js +158 -37
  36. package/dist/agent/providers.js.map +1 -1
  37. package/dist/agent/runner.d.ts +11 -18
  38. package/dist/agent/runner.js +527 -204
  39. package/dist/agent/runner.js.map +1 -1
  40. package/dist/agent/tool-client.d.ts +12 -0
  41. package/dist/agent/tool-client.js +2 -0
  42. package/dist/agent/tool-client.js.map +1 -0
  43. package/dist/agent/types.d.ts +68 -8
  44. package/dist/agent-pool.d.ts +37 -0
  45. package/dist/agent-pool.js +170 -0
  46. package/dist/agent-pool.js.map +1 -0
  47. package/dist/dances.d.ts +73 -0
  48. package/dist/dances.js +122 -0
  49. package/dist/dances.js.map +1 -0
  50. package/dist/guard.js +78 -66
  51. package/dist/guard.js.map +1 -1
  52. package/dist/honeycomb.d.ts +15 -1
  53. package/dist/honeycomb.js +54 -8
  54. package/dist/honeycomb.js.map +1 -1
  55. package/dist/index.js +235 -63
  56. package/dist/index.js.map +1 -1
  57. package/dist/integrations/loader.d.ts +1 -1
  58. package/dist/integrations/manager.d.ts +1 -1
  59. package/dist/namespaces.d.ts +2 -2
  60. package/dist/namespaces.js +16 -2
  61. package/dist/namespaces.js.map +1 -1
  62. package/dist/orchestrator.d.ts +100 -0
  63. package/dist/orchestrator.js +362 -0
  64. package/dist/orchestrator.js.map +1 -0
  65. package/dist/persistence.js +1 -1
  66. package/dist/persistence.js.map +1 -1
  67. package/dist/propolis/guard.d.ts +23 -0
  68. package/dist/propolis/guard.js +49 -0
  69. package/dist/propolis/guard.js.map +1 -0
  70. package/dist/propolis/index.d.ts +2 -0
  71. package/dist/propolis/index.js +90 -0
  72. package/dist/propolis/index.js.map +1 -0
  73. package/dist/propolis/sandbox.d.ts +6 -0
  74. package/dist/propolis/sandbox.js +16 -0
  75. package/dist/propolis/sandbox.js.map +1 -0
  76. package/dist/propolis/server.d.ts +7 -0
  77. package/dist/propolis/server.js +20 -0
  78. package/dist/propolis/server.js.map +1 -0
  79. package/dist/propolis/tools/defs.d.ts +31 -0
  80. package/dist/propolis/tools/defs.js +298 -0
  81. package/dist/propolis/tools/defs.js.map +1 -0
  82. package/dist/propolis/tools/filesystem.d.ts +28 -0
  83. package/dist/propolis/tools/filesystem.js +230 -0
  84. package/dist/propolis/tools/filesystem.js.map +1 -0
  85. package/dist/propolis/tools/git.d.ts +14 -0
  86. package/dist/propolis/tools/git.js +92 -0
  87. package/dist/propolis/tools/git.js.map +1 -0
  88. package/dist/propolis/tools/shell.d.ts +7 -0
  89. package/dist/propolis/tools/shell.js +43 -0
  90. package/dist/propolis/tools/shell.js.map +1 -0
  91. package/dist/propolis/tools/types.d.ts +10 -0
  92. package/dist/propolis/tools/types.js +7 -0
  93. package/dist/propolis/tools/types.js.map +1 -0
  94. package/dist/propolis/tools/web.d.ts +11 -0
  95. package/dist/propolis/tools/web.js +155 -0
  96. package/dist/propolis/tools/web.js.map +1 -0
  97. package/dist/rest.js +113 -8
  98. package/dist/rest.js.map +1 -1
  99. package/dist/run-watcher.d.ts +20 -0
  100. package/dist/run-watcher.js +64 -0
  101. package/dist/run-watcher.js.map +1 -0
  102. package/dist/server.js +3 -1
  103. package/dist/server.js.map +1 -1
  104. package/dist/stores/events.js +5 -0
  105. package/dist/stores/events.js.map +1 -1
  106. package/dist/stores/interfaces.d.ts +30 -0
  107. package/dist/stores/redis/claims.d.ts +1 -0
  108. package/dist/stores/redis/claims.js +46 -16
  109. package/dist/stores/redis/claims.js.map +1 -1
  110. package/dist/stores/redis/index.js +3 -1
  111. package/dist/stores/redis/index.js.map +1 -1
  112. package/dist/stores/runs.d.ts +15 -0
  113. package/dist/stores/runs.js +50 -0
  114. package/dist/stores/runs.js.map +1 -0
  115. package/dist/stores/sqlite/index.js +3 -1
  116. package/dist/stores/sqlite/index.js.map +1 -1
  117. package/dist/transports/broker.d.ts +20 -0
  118. package/dist/transports/broker.js +102 -0
  119. package/dist/transports/broker.js.map +1 -0
  120. package/dist/transports/index.d.ts +3 -0
  121. package/dist/transports/index.js +3 -0
  122. package/dist/transports/index.js.map +1 -0
  123. package/dist/transports/ipc.d.ts +26 -0
  124. package/dist/transports/ipc.js +93 -0
  125. package/dist/transports/ipc.js.map +1 -0
  126. package/dist/transports/types.d.ts +39 -0
  127. package/dist/transports/types.js +8 -0
  128. package/dist/transports/types.js.map +1 -0
  129. package/dist/utils.js +23 -7
  130. package/dist/utils.js.map +1 -1
  131. package/dist/waggle/client.d.ts +16 -0
  132. package/dist/waggle/client.js +28 -0
  133. package/dist/waggle/client.js.map +1 -0
  134. package/dist/waggle/compound.d.ts +20 -0
  135. package/dist/waggle/compound.js +187 -0
  136. package/dist/waggle/compound.js.map +1 -0
  137. package/dist/waggle/index.d.ts +25 -0
  138. package/dist/waggle/index.js +77 -0
  139. package/dist/waggle/index.js.map +1 -0
  140. package/dist/waggle/types.d.ts +54 -0
  141. package/dist/waggle/types.js +2 -0
  142. package/dist/{protocol → waggle}/types.js.map +1 -1
  143. package/dist/webhooks.d.ts +26 -0
  144. package/dist/webhooks.js +79 -0
  145. package/dist/webhooks.js.map +1 -0
  146. package/dist/ws.d.ts +9 -1
  147. package/dist/ws.js +74 -7
  148. package/dist/ws.js.map +1 -1
  149. package/package.json +10 -5
  150. package/dist/agent/test-helpers.d.ts +0 -11
  151. package/dist/agent/test-helpers.js +0 -63
  152. package/dist/agent/test-helpers.js.map +0 -1
  153. package/dist/agent/tools.d.ts +0 -4
  154. package/dist/agent/tools.js +0 -545
  155. package/dist/agent/tools.js.map +0 -1
  156. package/dist/protocol/index.d.ts +0 -5
  157. package/dist/protocol/index.js +0 -5
  158. package/dist/protocol/index.js.map +0 -1
  159. package/dist/protocol/parser.d.ts +0 -31
  160. package/dist/protocol/parser.js +0 -193
  161. package/dist/protocol/parser.js.map +0 -1
  162. package/dist/protocol/renderer.d.ts +0 -16
  163. package/dist/protocol/renderer.js +0 -193
  164. package/dist/protocol/renderer.js.map +0 -1
  165. package/dist/protocol/schema.d.ts +0 -341
  166. package/dist/protocol/schema.js +0 -285
  167. package/dist/protocol/schema.js.map +0 -1
  168. package/dist/protocol/types.d.ts +0 -144
  169. package/dist/protocol/types.js +0 -8
  170. package/dist/protocol/variables.d.ts +0 -22
  171. package/dist/protocol/variables.js +0 -58
  172. package/dist/protocol/variables.js.map +0 -1
@@ -0,0 +1,24 @@
1
+ import type { AcpClient } from '@agentcoordinationprotocol/sdk';
2
+ /**
3
+ * Lazy file-level claim manager. Acquires claims on first write,
4
+ * caches locally, and batch-releases on completion.
5
+ */
6
+ export declare class ClaimManager {
7
+ private client;
8
+ private heldClaims;
9
+ private ttlMs;
10
+ constructor(client: AcpClient, ttlMs?: number);
11
+ /**
12
+ * Ensure we hold a claim for a file path.
13
+ * Returns null if claim acquired (or already held), or an error message if conflict.
14
+ */
15
+ ensureClaim(filePath: string): Promise<string | null>;
16
+ /**
17
+ * Release all held claims.
18
+ */
19
+ releaseAll(): Promise<void>;
20
+ /**
21
+ * Get all currently held claims.
22
+ */
23
+ getHeldClaims(): string[];
24
+ }
@@ -0,0 +1,64 @@
1
+ const DEFAULT_TTL_MS = 5 * 60 * 1000; // 5 minutes
2
+ /**
3
+ * Lazy file-level claim manager. Acquires claims on first write,
4
+ * caches locally, and batch-releases on completion.
5
+ */
6
+ export class ClaimManager {
7
+ client;
8
+ heldClaims = new Map(); // resource → acquire timestamp
9
+ ttlMs;
10
+ constructor(client, ttlMs = DEFAULT_TTL_MS) {
11
+ this.client = client;
12
+ this.ttlMs = ttlMs;
13
+ }
14
+ /**
15
+ * Ensure we hold a claim for a file path.
16
+ * Returns null if claim acquired (or already held), or an error message if conflict.
17
+ */
18
+ async ensureClaim(filePath) {
19
+ const resource = `file:${filePath}`;
20
+ // Already held by us
21
+ if (this.heldClaims.has(resource)) {
22
+ return null;
23
+ }
24
+ try {
25
+ const res = await this.client.claim(resource, `writing to ${filePath}`, { ttlMs: this.ttlMs });
26
+ if (res.ok && res.data.status === 'approved') {
27
+ this.heldClaims.set(resource, Date.now());
28
+ return null;
29
+ }
30
+ // Rejected — another agent holds it
31
+ if (res.data.status === 'rejected') {
32
+ const owner = res.data.claim?.owner ?? 'another agent';
33
+ return `Cannot write to "${filePath}": claimed by ${owner}. Coordinate with them or choose a different file.`;
34
+ }
35
+ return `Claim for "${filePath}" returned unexpected status: ${res.data.status}`;
36
+ }
37
+ catch (err) {
38
+ // If the server is unreachable, allow the write (best-effort coordination)
39
+ return null;
40
+ }
41
+ }
42
+ /**
43
+ * Release all held claims.
44
+ */
45
+ async releaseAll() {
46
+ const resources = [...this.heldClaims.keys()];
47
+ for (const resource of resources) {
48
+ try {
49
+ await this.client.releaseClaim(resource);
50
+ }
51
+ catch {
52
+ // Best-effort release
53
+ }
54
+ this.heldClaims.delete(resource);
55
+ }
56
+ }
57
+ /**
58
+ * Get all currently held claims.
59
+ */
60
+ getHeldClaims() {
61
+ return [...this.heldClaims.keys()];
62
+ }
63
+ }
64
+ //# sourceMappingURL=claim-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-manager.js","sourceRoot":"","sources":["../../../src/agent/acp/claim-manager.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAElD;;;GAGG;AACH,MAAM,OAAO,YAAY;IACf,MAAM,CAAY;IAClB,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,+BAA+B;IACvE,KAAK,CAAS;IAEtB,YAAY,MAAiB,EAAE,QAAgB,cAAc;QAC3D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,QAAgB;QAChC,MAAM,QAAQ,GAAG,QAAQ,QAAQ,EAAE,CAAC;QAEpC,qBAAqB;QACrB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/F,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC1C,OAAO,IAAI,CAAC;YACd,CAAC;YAED,oCAAoC;YACpC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAI,GAAG,CAAC,IAAuC,CAAC,KAAK,EAAE,KAAK,IAAI,eAAe,CAAC;gBAC3F,OAAO,oBAAoB,QAAQ,iBAAiB,KAAK,oDAAoD,CAAC;YAChH,CAAC;YAED,OAAO,cAAc,QAAQ,iCAAiC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,2EAA2E;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,sBAAsB;YACxB,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * DirectRuntime — in-process ACP runtime that talks to stores directly.
3
+ * Same public interface as AcpRuntime but bypasses HTTP/WS entirely.
4
+ * Used by AgentPool for worker agents running inside the incubator process.
5
+ */
6
+ import type { Stores } from '../../stores/interfaces.js';
7
+ import type { NotificationBus } from '../../bus.js';
8
+ import type { ProtocolResponse } from './runtime.js';
9
+ import type { WakeCondition } from './ws-event-client.js';
10
+ import type { ToolDef } from '../types.js';
11
+ import type { DanceModule } from '../../dances.js';
12
+ interface ControlStatus {
13
+ halted: boolean;
14
+ paused: boolean;
15
+ reason?: string;
16
+ }
17
+ export interface DirectRuntimeConfig {
18
+ stores: Stores;
19
+ bus: NotificationBus;
20
+ namespace: string;
21
+ agentId: string;
22
+ role: string;
23
+ maxIterations: number;
24
+ verbose?: boolean;
25
+ danceModule?: DanceModule;
26
+ protocolData?: ProtocolResponse;
27
+ }
28
+ export declare class DirectRuntime {
29
+ private stores;
30
+ private bus;
31
+ private namespace;
32
+ private agentId;
33
+ private role;
34
+ private maxIterations;
35
+ private verbose;
36
+ private danceModule?;
37
+ private protocolData?;
38
+ private iterationCount;
39
+ private eventBuffer;
40
+ private unsubscribe?;
41
+ private claimedResources;
42
+ private cachedInject;
43
+ private lastEventCursor;
44
+ constructor(config: DirectRuntimeConfig);
45
+ /** Connect — register role and subscribe to bus events. */
46
+ connect(): Promise<void>;
47
+ /** Disconnect — release claims, unsubscribe, report. */
48
+ disconnect(): Promise<void>;
49
+ /** Wait for a wake event matching the condition. */
50
+ waitForWake(condition: WakeCondition): Promise<string[]>;
51
+ /** Get last inject string from dance module. Consumed on read. */
52
+ getLastInject(): string | null;
53
+ /** Call a dance tool directly. If handler returns `wait`, blocks until event before returning. */
54
+ callDanceTool(tool: string, args: Record<string, unknown>): Promise<unknown>;
55
+ /** Get dance tool definitions. */
56
+ getDanceTools(): ToolDef[] | null;
57
+ /** Called before each iteration — drain events, report progress. */
58
+ beforeIteration(): Promise<string[]>;
59
+ /** Called on file write — auto-claim the file. */
60
+ onFileWrite(path: string): Promise<string | null>;
61
+ /** Called on completion — release claims, update run. */
62
+ onComplete(summary: string, usage?: {
63
+ promptTokens: number;
64
+ completionTokens: number;
65
+ totalTokens: number;
66
+ }): Promise<void>;
67
+ /** Fetch protocol — returns pre-loaded data (no HTTP needed). */
68
+ fetchProtocol(): Promise<ProtocolResponse | null>;
69
+ /** Publish a coordination event. */
70
+ publishEvent(type: string, data?: Record<string, unknown>): Promise<string>;
71
+ /** Set shared state. */
72
+ setState(key: string, value: unknown): Promise<string>;
73
+ /** Get shared state. */
74
+ getState(): Promise<string>;
75
+ /** Claim a resource. */
76
+ claimResource(resource: string, reason?: string): Promise<string>;
77
+ /** Release a claimed resource. */
78
+ releaseResource(resource: string): Promise<string>;
79
+ /** Check halt/pause status. */
80
+ checkControl(): Promise<ControlStatus>;
81
+ /** Wait for resume after pause. */
82
+ waitForResume(pollIntervalMs?: number): Promise<string>;
83
+ /** Replay events from the store that we may have missed (published before bus subscription). */
84
+ private replayMissedEvents;
85
+ private drainMatchingEvents;
86
+ private getStateMap;
87
+ private buildDanceHelper;
88
+ private refreshInjectCache;
89
+ }
90
+ export {};
@@ -0,0 +1,362 @@
1
+ import { danceToolDefs, callDanceTool, runInject, buildAcpHelper } from '../../dances.js';
2
+ import { normalizeWait } from '../../waggle/compound.js';
3
+ export class DirectRuntime {
4
+ stores;
5
+ bus;
6
+ namespace;
7
+ agentId;
8
+ role;
9
+ maxIterations;
10
+ verbose;
11
+ danceModule;
12
+ protocolData;
13
+ iterationCount = 0;
14
+ eventBuffer = [];
15
+ unsubscribe;
16
+ claimedResources = new Set();
17
+ cachedInject = null;
18
+ lastEventCursor = 0;
19
+ constructor(config) {
20
+ this.stores = config.stores;
21
+ this.bus = config.bus;
22
+ this.namespace = config.namespace;
23
+ this.agentId = config.agentId;
24
+ this.role = config.role;
25
+ this.maxIterations = config.maxIterations;
26
+ this.verbose = config.verbose ?? false;
27
+ this.danceModule = config.danceModule;
28
+ this.protocolData = config.protocolData;
29
+ }
30
+ /** Connect — register role and subscribe to bus events. */
31
+ async connect() {
32
+ await this.stores.roles.assign(this.agentId, this.role);
33
+ await this.stores.runs.start(this.agentId, this.role);
34
+ // Subscribe to bus for event notifications
35
+ this.unsubscribe = this.bus.subscribe(this.namespace, (event) => {
36
+ // Skip own events
37
+ if (event.publishedBy === this.agentId)
38
+ return;
39
+ this.eventBuffer.push(formatEvent(event));
40
+ });
41
+ }
42
+ /** Disconnect — release claims, unsubscribe, report. */
43
+ async disconnect() {
44
+ // Release all claims
45
+ for (const resource of this.claimedResources) {
46
+ try {
47
+ await this.stores.claims.release(resource, this.agentId);
48
+ }
49
+ catch { /* ignore */ }
50
+ }
51
+ this.claimedResources.clear();
52
+ if (this.unsubscribe) {
53
+ this.unsubscribe();
54
+ this.unsubscribe = undefined;
55
+ }
56
+ }
57
+ /** Wait for a wake event matching the condition. */
58
+ async waitForWake(condition) {
59
+ // Pre-compute inject for when we wake (runner calls getLastInject right after)
60
+ await this.refreshInjectCache();
61
+ // Replay missed events from the store (covers events published before bus subscription)
62
+ await this.replayMissedEvents();
63
+ // Check buffer first (includes both bus-delivered and store-replayed events)
64
+ const buffered = this.drainMatchingEvents(condition.types ?? null);
65
+ if (buffered.length > 0)
66
+ return buffered;
67
+ // Wait for new events via bus
68
+ const timeout = condition.timeout && condition.timeout > 0 ? condition.timeout : 0;
69
+ return new Promise((resolve) => {
70
+ let timer;
71
+ let unsub;
72
+ const cleanup = () => {
73
+ if (timer)
74
+ clearTimeout(timer);
75
+ if (unsub)
76
+ unsub();
77
+ };
78
+ unsub = this.bus.subscribe(this.namespace, (event) => {
79
+ if (event.publishedBy === this.agentId)
80
+ return;
81
+ const formatted = formatEvent(event);
82
+ if (condition.types) {
83
+ if (!condition.types.includes(event.type)) {
84
+ // Buffer non-matching events
85
+ this.eventBuffer.push(formatted);
86
+ return;
87
+ }
88
+ }
89
+ cleanup();
90
+ // Refresh inject cache on wake
91
+ this.refreshInjectCache().then(() => resolve([formatted]));
92
+ });
93
+ if (timeout > 0) {
94
+ timer = setTimeout(() => {
95
+ cleanup();
96
+ resolve([]);
97
+ }, timeout);
98
+ }
99
+ });
100
+ }
101
+ /** Get last inject string from dance module. Consumed on read. */
102
+ getLastInject() {
103
+ const inject = this.cachedInject;
104
+ this.cachedInject = null;
105
+ return inject;
106
+ }
107
+ /** Call a dance tool directly. If handler returns `wait`, blocks until event before returning. */
108
+ async callDanceTool(tool, args) {
109
+ if (!this.danceModule) {
110
+ throw new Error('No dance module loaded');
111
+ }
112
+ const helper = this.buildDanceHelper();
113
+ const getState = async () => this.getStateMap();
114
+ const result = await callDanceTool(this.danceModule, tool, args, this.role, this.agentId, getState, helper);
115
+ // If handler failed or no wait returned, return as-is
116
+ if ('error' in result || !result.wait) {
117
+ return result;
118
+ }
119
+ // Normalize wait spec from handler result and block until wake
120
+ const normalized = normalizeWait(result.wait);
121
+ if (!normalized)
122
+ return result;
123
+ // Strip wait from the result sent to LLM
124
+ const { wait: _, ...cleanResult } = result;
125
+ // Sync cursor + clear buffer — only wait for events AFTER this dance completed
126
+ try {
127
+ const { cursor } = await this.stores.events.getEvents();
128
+ this.lastEventCursor = cursor;
129
+ }
130
+ catch { /* ignore */ }
131
+ this.eventBuffer = [];
132
+ let wakeEvents = [];
133
+ if (normalized.pureDelay) {
134
+ await new Promise(r => setTimeout(r, normalized.timeout));
135
+ }
136
+ else {
137
+ wakeEvents = await this.waitForWake({
138
+ types: normalized.types ?? undefined,
139
+ timeout: normalized.timeout,
140
+ });
141
+ }
142
+ // Fresh inject after wake
143
+ const inject = this.getLastInject();
144
+ return {
145
+ ...cleanResult,
146
+ wakeEvents,
147
+ ...(inject ? { inject } : {}),
148
+ };
149
+ }
150
+ /** Get dance tool definitions. */
151
+ getDanceTools() {
152
+ if (!this.danceModule)
153
+ return null;
154
+ const defs = danceToolDefs(this.danceModule);
155
+ return defs.length > 0 ? defs : null;
156
+ }
157
+ /** Called before each iteration — drain events, report progress. */
158
+ async beforeIteration() {
159
+ this.iterationCount++;
160
+ await this.stores.progress.report(this.agentId, this.agentId, this.iterationCount / this.maxIterations, `Iteration ${this.iterationCount}/${this.maxIterations}`);
161
+ // Drain event buffer
162
+ const messages = [...this.eventBuffer];
163
+ this.eventBuffer = [];
164
+ // Drain direct messages
165
+ const directMessages = await this.stores.messages.getFor(this.agentId);
166
+ for (const msg of directMessages) {
167
+ messages.push(`Message from ${msg.from}: ${msg.content}`);
168
+ }
169
+ // Refresh dance inject every iteration (not just on wake)
170
+ if (this.danceModule) {
171
+ await this.refreshInjectCache();
172
+ }
173
+ return messages;
174
+ }
175
+ /** Called on file write — auto-claim the file. */
176
+ async onFileWrite(path) {
177
+ const result = await this.stores.claims.claim(path, path, this.agentId, 5 * 60 * 1000);
178
+ if (result.status === 'approved') {
179
+ this.claimedResources.add(path);
180
+ return null;
181
+ }
182
+ const owner = result.claim?.owner ?? 'another agent';
183
+ return JSON.stringify({ error: `File "${path}" is claimed by ${owner}` });
184
+ }
185
+ /** Called on completion — release claims, update run. */
186
+ async onComplete(summary, usage) {
187
+ await this.stores.runs.complete(this.agentId, {
188
+ status: 'completed',
189
+ summary,
190
+ iterations: this.iterationCount,
191
+ usage,
192
+ });
193
+ for (const resource of this.claimedResources) {
194
+ try {
195
+ await this.stores.claims.release(resource, this.agentId);
196
+ }
197
+ catch { /* ignore */ }
198
+ }
199
+ this.claimedResources.clear();
200
+ }
201
+ /** Fetch protocol — returns pre-loaded data (no HTTP needed). */
202
+ async fetchProtocol() {
203
+ return this.protocolData ?? null;
204
+ }
205
+ /** Publish a coordination event. */
206
+ async publishEvent(type, data = {}) {
207
+ try {
208
+ await this.stores.events.publish(type, data, this.agentId);
209
+ return JSON.stringify({ published: true, type });
210
+ }
211
+ catch (err) {
212
+ return JSON.stringify({ error: `publishEvent failed: ${err.message}` });
213
+ }
214
+ }
215
+ /** Set shared state. */
216
+ async setState(key, value) {
217
+ try {
218
+ await this.stores.state.set(key, value, this.agentId);
219
+ return JSON.stringify({ ok: true, key });
220
+ }
221
+ catch (err) {
222
+ return JSON.stringify({ error: `setState failed: ${err.message}` });
223
+ }
224
+ }
225
+ /** Get shared state. */
226
+ async getState() {
227
+ try {
228
+ const entries = await this.stores.state.query();
229
+ const state = {};
230
+ for (const entry of entries) {
231
+ state[entry.key] = entry.value;
232
+ }
233
+ return JSON.stringify(state);
234
+ }
235
+ catch (err) {
236
+ return JSON.stringify({ error: `getState failed: ${err.message}` });
237
+ }
238
+ }
239
+ /** Claim a resource. */
240
+ async claimResource(resource, reason) {
241
+ try {
242
+ const result = await this.stores.claims.claim(resource, reason ?? resource, this.agentId, 5 * 60 * 1000);
243
+ if (result.status === 'approved') {
244
+ this.claimedResources.add(resource);
245
+ return JSON.stringify({ status: 'approved', resource });
246
+ }
247
+ const owner = result.claim?.owner ?? 'another agent';
248
+ return JSON.stringify({ status: 'rejected', resource, owner, message: `Already claimed by ${owner}` });
249
+ }
250
+ catch (err) {
251
+ return JSON.stringify({ error: `claimResource failed: ${err.message}` });
252
+ }
253
+ }
254
+ /** Release a claimed resource. */
255
+ async releaseResource(resource) {
256
+ try {
257
+ await this.stores.claims.release(resource, this.agentId);
258
+ this.claimedResources.delete(resource);
259
+ return JSON.stringify({ released: true, resource });
260
+ }
261
+ catch (err) {
262
+ return JSON.stringify({ error: `releaseResource failed: ${err.message}` });
263
+ }
264
+ }
265
+ /** Check halt/pause status. */
266
+ async checkControl() {
267
+ const status = this.stores.control.getStatus(this.agentId);
268
+ return {
269
+ halted: status.halted,
270
+ paused: status.paused,
271
+ reason: status.haltReason ?? status.pauseReason,
272
+ };
273
+ }
274
+ /** Wait for resume after pause. */
275
+ async waitForResume(pollIntervalMs = 2000) {
276
+ while (true) {
277
+ await new Promise(resolve => setTimeout(resolve, pollIntervalMs));
278
+ const status = this.stores.control.getStatus(this.agentId);
279
+ if (!status.paused) {
280
+ return 'resumed';
281
+ }
282
+ }
283
+ }
284
+ // ─── Private helpers ──────────────────────────────────────
285
+ /** Replay events from the store that we may have missed (published before bus subscription). */
286
+ async replayMissedEvents() {
287
+ try {
288
+ const { events, cursor } = await this.stores.events.getEvents(this.lastEventCursor);
289
+ this.lastEventCursor = cursor;
290
+ for (const event of events) {
291
+ if (event.publishedBy === this.agentId)
292
+ continue;
293
+ const formatted = formatEvent(event);
294
+ // Avoid duplicates — only add if not already in buffer
295
+ if (!this.eventBuffer.includes(formatted)) {
296
+ this.eventBuffer.push(formatted);
297
+ }
298
+ }
299
+ }
300
+ catch { /* store query failed — rely on bus events */ }
301
+ }
302
+ drainMatchingEvents(types) {
303
+ if (this.eventBuffer.length === 0)
304
+ return [];
305
+ if (!types) {
306
+ const all = [...this.eventBuffer];
307
+ this.eventBuffer = [];
308
+ return all;
309
+ }
310
+ const typeSet = new Set(types);
311
+ const matching = [];
312
+ const remaining = [];
313
+ for (const msg of this.eventBuffer) {
314
+ const m = msg.match(/\[([^\]]+)\]/);
315
+ if (m && typeSet.has(m[1])) {
316
+ matching.push(msg);
317
+ }
318
+ else {
319
+ remaining.push(msg);
320
+ }
321
+ }
322
+ this.eventBuffer = remaining;
323
+ return matching;
324
+ }
325
+ async getStateMap() {
326
+ const entries = await this.stores.state.query();
327
+ const state = {};
328
+ for (const entry of entries) {
329
+ state[entry.key] = typeof entry.value === 'string' ? entry.value : JSON.stringify(entry.value);
330
+ }
331
+ return state;
332
+ }
333
+ buildDanceHelper() {
334
+ return buildAcpHelper({
335
+ publishEvent: async (_ns, type, data, agentId) => {
336
+ // Note: stores.events.publish is patched by NamespaceRegistry to also bus.publish
337
+ await this.stores.events.publish(type, data, agentId ?? this.agentId);
338
+ },
339
+ claimResource: async (_ns, resource, agentId, ttl) => {
340
+ const result = await this.stores.claims.claim(resource, resource, agentId, ttl);
341
+ return result.status;
342
+ },
343
+ releaseResource: async (_ns, resource) => {
344
+ await this.stores.claims.release(resource, this.agentId);
345
+ },
346
+ setState: async (_ns, key, value) => {
347
+ await this.stores.state.set(key, value, this.agentId);
348
+ },
349
+ }, this.namespace, this.agentId);
350
+ }
351
+ async refreshInjectCache() {
352
+ if (!this.danceModule)
353
+ return;
354
+ const state = await this.getStateMap();
355
+ this.cachedInject = runInject(this.danceModule, state, this.role, this.agentId);
356
+ }
357
+ }
358
+ function formatEvent(event) {
359
+ const data = typeof event.data === 'string' ? event.data : JSON.stringify(event.data);
360
+ return `Event from ${event.publishedBy}: [${event.type}] ${data}`;
361
+ }
362
+ //# sourceMappingURL=direct-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-runtime.js","sourceRoot":"","sources":["../../../src/agent/acp/direct-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AcpClient } from '@agentcoordinationprotocol/sdk';
2
+ /**
3
+ * Polls incubator for events between agent iterations.
4
+ * Buffers events and formats them as context messages for the LLM.
5
+ */
6
+ export declare class EventClient {
7
+ private client;
8
+ private cursor;
9
+ private agentId;
10
+ constructor(client: AcpClient, agentId: string);
11
+ /**
12
+ * Poll for new events since last check.
13
+ * Returns formatted context messages for injection into the conversation.
14
+ */
15
+ drain(): Promise<string[]>;
16
+ /**
17
+ * Poll for messages addressed to this agent.
18
+ */
19
+ drainMessages(): Promise<string[]>;
20
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Polls incubator for events between agent iterations.
3
+ * Buffers events and formats them as context messages for the LLM.
4
+ */
5
+ export class EventClient {
6
+ client;
7
+ cursor = 0;
8
+ agentId;
9
+ constructor(client, agentId) {
10
+ this.client = client;
11
+ this.agentId = agentId;
12
+ }
13
+ /**
14
+ * Poll for new events since last check.
15
+ * Returns formatted context messages for injection into the conversation.
16
+ */
17
+ async drain() {
18
+ try {
19
+ const res = await this.client.getEvents(this.cursor);
20
+ if (!res.ok)
21
+ return [];
22
+ const data = res.data;
23
+ if (!data.events || data.events.length === 0)
24
+ return [];
25
+ this.cursor = data.cursor;
26
+ // Filter out our own events
27
+ const otherEvents = data.events.filter(e => e.agentId !== this.agentId);
28
+ if (otherEvents.length === 0)
29
+ return [];
30
+ // Format events as context messages
31
+ return otherEvents.map(e => {
32
+ const source = e.agentId;
33
+ const payload = typeof e.data === 'string' ? e.data : JSON.stringify(e.data);
34
+ return `Event from ${source}: [${e.type}] ${payload}`;
35
+ });
36
+ }
37
+ catch {
38
+ // Server unreachable — skip event polling
39
+ return [];
40
+ }
41
+ }
42
+ /**
43
+ * Poll for messages addressed to this agent.
44
+ */
45
+ async drainMessages() {
46
+ try {
47
+ const res = await this.client.getMessages();
48
+ if (!res.ok)
49
+ return [];
50
+ const messages = res.data;
51
+ if (!messages || messages.length === 0)
52
+ return [];
53
+ return messages.map(m => `Message from ${m.from}: ${m.content}`);
54
+ }
55
+ catch {
56
+ return [];
57
+ }
58
+ }
59
+ }
60
+ //# sourceMappingURL=event-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-client.js","sourceRoot":"","sources":["../../../src/agent/acp/event-client.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,CAAY;IAClB,MAAM,GAAG,CAAC,CAAC;IACX,OAAO,CAAS;IAExB,YAAY,MAAiB,EAAE,OAAe;QAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,EAAE,CAAC;YAEvB,MAAM,IAAI,GAAG,GAAG,CAAC,IAGhB,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAExD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAE1B,4BAA4B;YAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;YACxE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAExC,oCAAoC;YACpC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACzB,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;gBACzB,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC7E,OAAO,cAAc,MAAM,MAAM,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;YAC1C,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,EAAE,CAAC;YAEvB,MAAM,QAAQ,GAAG,GAAG,CAAC,IAInB,CAAC;YAEH,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAElD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}