@adhdev/daemon-core 0.9.82-rc.21 → 0.9.82-rc.211

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 (269) hide show
  1. package/dist/boot/daemon-lifecycle.d.ts +1 -0
  2. package/dist/boot/process-hardening.d.ts +50 -0
  3. package/dist/chat/source-machine.d.ts +166 -0
  4. package/dist/chat/source-resolver.d.ts +104 -0
  5. package/dist/chat/subscription-updates.d.ts +1 -0
  6. package/dist/cli-adapter-types.d.ts +23 -2
  7. package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
  8. package/dist/cli-adapters/cli-state-engine.d.ts +178 -0
  9. package/dist/cli-adapters/provider-cli-adapter.d.ts +106 -63
  10. package/dist/cli-adapters/provider-cli-parse.d.ts +4 -0
  11. package/dist/cli-adapters/provider-cli-shared.d.ts +29 -0
  12. package/dist/cli-adapters/raw-terminal-io.d.ts +37 -0
  13. package/dist/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +3 -3
  14. package/dist/cli-adapters/terminal-backends/types.d.ts +1 -2
  15. package/dist/cli-adapters/terminal-screen.d.ts +2 -11
  16. package/dist/commands/cli-manager.d.ts +2 -1
  17. package/dist/commands/handler.d.ts +110 -0
  18. package/dist/commands/mesh-coordinator.d.ts +85 -1
  19. package/dist/commands/router.d.ts +32 -1
  20. package/dist/config/chat-history.d.ts +9 -0
  21. package/dist/config/config.d.ts +5 -0
  22. package/dist/config/mesh-config.d.ts +72 -1
  23. package/dist/git/git-commands.d.ts +9 -1
  24. package/dist/git/git-diff.d.ts +6 -0
  25. package/dist/git/git-types.d.ts +2 -0
  26. package/dist/index.d.ts +46 -11
  27. package/dist/index.js +35173 -15756
  28. package/dist/index.js.map +1 -1
  29. package/dist/index.mjs +34880 -15556
  30. package/dist/index.mjs.map +1 -1
  31. package/dist/installer.d.ts +1 -4
  32. package/dist/ipc/local-ipc-server.d.ts +91 -0
  33. package/dist/launch.d.ts +1 -1
  34. package/dist/logging/async-batch-writer.d.ts +10 -0
  35. package/dist/mesh/contracts.d.ts +164 -0
  36. package/dist/mesh/coordinator-prompt.d.ts +36 -0
  37. package/dist/mesh/coordinator-registry.d.ts +59 -0
  38. package/dist/mesh/mesh-active-work.d.ts +90 -0
  39. package/dist/mesh/mesh-delivery-policy.d.ts +131 -0
  40. package/dist/mesh/mesh-events-coordinator.d.ts +151 -0
  41. package/dist/mesh/mesh-events-pending.d.ts +33 -0
  42. package/dist/mesh/mesh-events-stale.d.ts +40 -0
  43. package/dist/mesh/mesh-events-utils.d.ts +14 -0
  44. package/dist/mesh/mesh-events.d.ts +5 -40
  45. package/dist/mesh/mesh-fast-forward.d.ts +41 -0
  46. package/dist/mesh/mesh-host-ownership.d.ts +9 -0
  47. package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -3
  48. package/dist/mesh/mesh-ledger.d.ts +77 -1
  49. package/dist/mesh/mesh-missions.d.ts +58 -0
  50. package/dist/mesh/mesh-refine-status.d.ts +26 -0
  51. package/dist/mesh/mesh-review-inbox.d.ts +90 -0
  52. package/dist/mesh/mesh-runtime-store.d.ts +324 -0
  53. package/dist/mesh/mesh-task-stats.d.ts +49 -0
  54. package/dist/mesh/mesh-work-queue.d.ts +137 -6
  55. package/dist/mesh/preview-freshness.d.ts +18 -0
  56. package/dist/mesh/refine-config.d.ts +215 -0
  57. package/dist/mesh/worktree-bootstrap-config.d.ts +135 -0
  58. package/dist/providers/acp-provider-instance.d.ts +2 -0
  59. package/dist/providers/approval-utils.d.ts +13 -0
  60. package/dist/providers/cli-provider-instance.d.ts +39 -3
  61. package/dist/providers/contracts.d.ts +130 -6
  62. package/dist/providers/external-sources.d.ts +71 -0
  63. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +100 -0
  64. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  65. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  66. package/dist/providers/native-history/dispatcher.d.ts +27 -0
  67. package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
  68. package/dist/providers/native-history/index.d.ts +13 -0
  69. package/dist/providers/provider-instance-manager.d.ts +12 -0
  70. package/dist/providers/provider-instance.d.ts +13 -1
  71. package/dist/providers/provider-loader.d.ts +26 -4
  72. package/dist/providers/provider-trust.d.ts +31 -0
  73. package/dist/providers/read-chat-contract.d.ts +29 -0
  74. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  75. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +85 -0
  76. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  77. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
  78. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  79. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  80. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  81. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  82. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  83. package/dist/providers/sdk/v1/index.d.ts +30 -0
  84. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  85. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  86. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  87. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  88. package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
  89. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  90. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  91. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  92. package/dist/providers/spec/adapter.d.ts +52 -0
  93. package/dist/providers/spec/cli-adapter.d.ts +101 -0
  94. package/dist/providers/spec/driver.d.ts +225 -0
  95. package/dist/providers/spec/evaluator.d.ts +54 -0
  96. package/dist/providers/spec/loader.d.ts +15 -0
  97. package/dist/providers/spec/native-history-executor.d.ts +41 -0
  98. package/dist/providers/spec/route.d.ts +4 -0
  99. package/dist/providers/spec/schema.gen.d.ts +2025 -0
  100. package/dist/providers/spec/types.d.ts +302 -0
  101. package/dist/providers/transcript-v2.d.ts +176 -0
  102. package/dist/providers/types/interactive-prompt.d.ts +48 -0
  103. package/dist/repo-mesh-types.d.ts +109 -1
  104. package/dist/sessions/registry.d.ts +3 -0
  105. package/dist/shared-types-extra.d.ts +2 -4
  106. package/dist/shared-types.d.ts +42 -1
  107. package/dist/status/normalize.d.ts +1 -1
  108. package/dist/status/normalize.js +1 -0
  109. package/dist/status/normalize.js.map +1 -1
  110. package/dist/status/normalize.mjs +1 -0
  111. package/dist/status/normalize.mjs.map +1 -1
  112. package/dist/status/reporter.d.ts +2 -0
  113. package/dist/status/snapshot.d.ts +1 -0
  114. package/dist/types.d.ts +5 -0
  115. package/package.json +6 -3
  116. package/src/agent-stream/poller.ts +2 -3
  117. package/src/boot/daemon-lifecycle.ts +22 -10
  118. package/src/boot/process-hardening.ts +89 -0
  119. package/src/chat/source-machine.ts +534 -0
  120. package/src/chat/source-resolver.ts +0 -0
  121. package/src/chat/subscription-updates.ts +20 -1
  122. package/src/cli-adapter-types.d.ts +1 -0
  123. package/src/cli-adapter-types.ts +22 -2
  124. package/src/cli-adapters/cli-script-runner.ts +421 -0
  125. package/src/cli-adapters/cli-state-engine.ts +1138 -0
  126. package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
  127. package/src/cli-adapters/provider-cli-adapter.ts +673 -1139
  128. package/src/cli-adapters/provider-cli-parse.d.ts +1 -0
  129. package/src/cli-adapters/provider-cli-parse.ts +13 -0
  130. package/src/cli-adapters/provider-cli-runtime.ts +3 -1
  131. package/src/cli-adapters/provider-cli-shared.d.ts +2 -0
  132. package/src/cli-adapters/provider-cli-shared.ts +59 -11
  133. package/src/cli-adapters/raw-terminal-io.ts +252 -0
  134. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +35 -29
  135. package/src/cli-adapters/terminal-backends/types.ts +1 -3
  136. package/src/cli-adapters/terminal-screen.ts +11 -81
  137. package/src/commands/chat-commands.ts +1787 -60
  138. package/src/commands/cli-manager.ts +283 -14
  139. package/src/commands/handler.ts +809 -2
  140. package/src/commands/mesh-coordinator.ts +332 -122
  141. package/src/commands/router.ts +4198 -557
  142. package/src/config/chat-history.ts +95 -24
  143. package/src/config/config.ts +12 -0
  144. package/src/config/mesh-config.ts +280 -2
  145. package/src/config/recent-activity.ts +8 -2
  146. package/src/daemon/dev-auto-implement.ts +3 -2
  147. package/src/daemon/dev-cli-debug.ts +10 -1
  148. package/src/detection/ide-detector.ts +26 -16
  149. package/src/git/git-commands.ts +42 -12
  150. package/src/git/git-diff.ts +53 -0
  151. package/src/git/git-status.ts +35 -6
  152. package/src/git/git-types.ts +2 -0
  153. package/src/git/git-worktree.ts +8 -1
  154. package/src/index.ts +126 -10
  155. package/src/installer.d.ts +1 -1
  156. package/src/installer.ts +8 -6
  157. package/src/ipc/local-ipc-server.ts +278 -0
  158. package/src/launch.d.ts +1 -1
  159. package/src/launch.ts +37 -28
  160. package/src/logging/async-batch-writer.ts +55 -0
  161. package/src/logging/logger.ts +2 -1
  162. package/src/mesh/contracts.ts +329 -0
  163. package/src/mesh/coordinator-prompt.ts +218 -31
  164. package/src/mesh/coordinator-registry.ts +121 -0
  165. package/src/mesh/mesh-active-work.ts +437 -0
  166. package/src/mesh/mesh-delivery-policy.ts +315 -0
  167. package/src/mesh/mesh-events-coordinator.ts +1404 -0
  168. package/src/mesh/mesh-events-pending.ts +371 -0
  169. package/src/mesh/mesh-events-stale.ts +283 -0
  170. package/src/mesh/mesh-events-utils.ts +161 -0
  171. package/src/mesh/mesh-events.ts +24 -908
  172. package/src/mesh/mesh-fast-forward.ts +438 -0
  173. package/src/mesh/mesh-host-ownership.ts +73 -0
  174. package/src/mesh/mesh-ledger-reconciliation.ts +12 -5
  175. package/src/mesh/mesh-ledger.ts +587 -102
  176. package/src/mesh/mesh-missions.ts +151 -0
  177. package/src/mesh/mesh-refine-status.ts +144 -0
  178. package/src/mesh/mesh-review-inbox.ts +307 -0
  179. package/src/mesh/mesh-runtime-store.ts +1305 -0
  180. package/src/mesh/mesh-task-stats.ts +154 -0
  181. package/src/mesh/mesh-work-queue.ts +490 -166
  182. package/src/mesh/preview-freshness.ts +118 -0
  183. package/src/mesh/refine-config.ts +403 -0
  184. package/src/mesh/worktree-bootstrap-config.ts +326 -0
  185. package/src/providers/acp-provider-instance.ts +15 -1
  186. package/src/providers/approval-utils.d.ts +4 -0
  187. package/src/providers/approval-utils.ts +47 -5
  188. package/src/providers/chat-message-normalization.ts +4 -11
  189. package/src/providers/cli-provider-instance.ts +833 -64
  190. package/src/providers/contracts.d.ts +55 -0
  191. package/src/providers/contracts.ts +141 -6
  192. package/src/providers/external-sources.ts +218 -0
  193. package/src/providers/ide-provider-instance.ts +19 -5
  194. package/src/providers/native-history/antigravity-cli-transcript.ts +643 -0
  195. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  196. package/src/providers/native-history/codex-cli-transcript.ts +419 -0
  197. package/src/providers/native-history/dispatcher.ts +340 -0
  198. package/src/providers/native-history/hermes-cli-transcript.ts +230 -0
  199. package/src/providers/native-history/index.ts +30 -0
  200. package/src/providers/provider-instance-manager.ts +30 -0
  201. package/src/providers/provider-instance.ts +10 -1
  202. package/src/providers/provider-loader.ts +582 -50
  203. package/src/providers/provider-schema.ts +87 -14
  204. package/src/providers/provider-trust.ts +114 -0
  205. package/src/providers/read-chat-contract.ts +76 -16
  206. package/src/providers/sdk/README.md +49 -0
  207. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  208. package/src/providers/sdk/v1/builders/cli/detect-status.ts +262 -0
  209. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  210. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +250 -0
  211. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  212. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  213. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  214. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  215. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  216. package/src/providers/sdk/v1/index.ts +152 -0
  217. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  218. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  219. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  220. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +504 -0
  221. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  222. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  223. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  224. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  225. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  226. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  227. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  228. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  229. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
  230. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  231. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  232. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  233. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  234. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  235. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  236. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  237. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  238. package/src/providers/sdk/v1/types/common/index.ts +229 -0
  239. package/src/providers/sdk/v1/validators/index.ts +19 -0
  240. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  241. package/src/providers/sdk/v1/validators/taint.ts +309 -0
  242. package/src/providers/spec/adapter.ts +138 -0
  243. package/src/providers/spec/cli-adapter.ts +626 -0
  244. package/src/providers/spec/driver.ts +922 -0
  245. package/src/providers/spec/evaluator.ts +597 -0
  246. package/src/providers/spec/loader.ts +324 -0
  247. package/src/providers/spec/native-history-executor.ts +939 -0
  248. package/src/providers/spec/route.ts +51 -0
  249. package/src/providers/spec/schema.gen.ts +691 -0
  250. package/src/providers/spec/schema.json +341 -0
  251. package/src/providers/spec/types.ts +356 -0
  252. package/src/providers/transcript-v2.ts +567 -0
  253. package/src/providers/types/interactive-prompt.ts +425 -0
  254. package/src/providers/version-archive.ts +38 -20
  255. package/src/repo-mesh-types.ts +119 -1
  256. package/src/sessions/registry.ts +3 -0
  257. package/src/shared-types-extra.ts +2 -4
  258. package/src/shared-types.ts +45 -1
  259. package/src/status/builders.ts +24 -6
  260. package/src/status/normalize.ts +2 -0
  261. package/src/status/reporter.ts +15 -0
  262. package/src/status/snapshot.ts +84 -25
  263. package/src/system/host-memory.ts +29 -12
  264. package/src/types.ts +5 -0
  265. package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
  266. package/dist/mesh/mesh-sync.d.ts +0 -53
  267. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
  268. package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
  269. package/src/mesh/mesh-sync.ts +0 -111
@@ -0,0 +1,90 @@
1
+ /**
2
+ * M4.0: Review inbox — derive review items from existing truth.
3
+ *
4
+ * No new store: review items are a query-time projection of
5
+ * - mesh_status node statuses (daemon-owned branchConvergence), and
6
+ * - the task ledger (completion evidence envelopes + refine job results).
7
+ *
8
+ * Scope (M4.0): host-daemon-local nodes only. Remote nodes are excluded and
9
+ * surfaced via remoteNodesExcluded/excludedRemoteNodeIds until the
10
+ * daemon↔daemon P2P relay path is live-verified (M4.2).
11
+ */
12
+ import type { MeshLedgerEntry } from './mesh-ledger.js';
13
+ export type MeshReviewInboxReason = 'merge_candidate' | 'refine_blocked_review';
14
+ export interface MeshReviewInboxConvergence {
15
+ status: string;
16
+ reason: string | null;
17
+ nextStep: string | null;
18
+ needsConvergence: boolean;
19
+ }
20
+ export interface MeshReviewInboxEvidence {
21
+ available: boolean;
22
+ /** Ledger kind of the entry the evidence came from. */
23
+ kind?: 'task_completed' | 'task_failed';
24
+ /** 'task_completion' = ordinary worker completion envelope; 'refine_job' = Refinery result. */
25
+ source?: 'task_completion' | 'refine_job';
26
+ timestamp?: string;
27
+ taskId?: string;
28
+ sessionId?: string;
29
+ /** M2-3 bootstrap stage from the refine validation gate: cached|ran|failed|skipped|legacy|not_configured. */
30
+ bootstrap?: Record<string, unknown> | null;
31
+ validation?: Record<string, unknown> | null;
32
+ checkpoint?: Record<string, unknown> | null;
33
+ worker?: {
34
+ status: string;
35
+ classification?: string;
36
+ changedFiles: string[];
37
+ changedFilesTruncated?: true;
38
+ validationResults: Array<Record<string, unknown>>;
39
+ errors: string[];
40
+ requiresUserAction: boolean;
41
+ } | null;
42
+ finalBranchConvergenceState?: Record<string, unknown>;
43
+ refineJob?: Record<string, unknown>;
44
+ }
45
+ export interface MeshReviewInboxDiffFile {
46
+ path: string;
47
+ status?: string;
48
+ insertions?: number;
49
+ deletions?: number;
50
+ binary?: boolean;
51
+ oldPath?: string;
52
+ }
53
+ export interface MeshReviewInboxDiffSummary {
54
+ baseRef: string;
55
+ files: MeshReviewInboxDiffFile[];
56
+ totalFiles: number;
57
+ totalInsertions: number;
58
+ totalDeletions: number;
59
+ truncated: boolean;
60
+ error?: string;
61
+ }
62
+ export interface MeshReviewInboxItem {
63
+ nodeId: string;
64
+ workspace: string | null;
65
+ branch: string | null;
66
+ defaultBranch: string | null;
67
+ isLocalWorktree: boolean;
68
+ reviewReason: MeshReviewInboxReason;
69
+ convergence: MeshReviewInboxConvergence;
70
+ evidence: MeshReviewInboxEvidence;
71
+ transcriptHandle: Record<string, unknown> | null;
72
+ /** Latest non-terminal Refinery job for this node (accepted/running), if any. */
73
+ activeRefineJob: Record<string, unknown> | null;
74
+ lastActivityAt: string | null;
75
+ /** Filled by the daemon command with a bounded base-branch diff probe; null when the workspace is not locally readable. */
76
+ diffSummary?: MeshReviewInboxDiffSummary | null;
77
+ }
78
+ export interface MeshReviewInboxDerivation {
79
+ items: MeshReviewInboxItem[];
80
+ remoteNodesExcluded: boolean;
81
+ excludedRemoteNodeIds: string[];
82
+ }
83
+ /**
84
+ * Derive review inbox items from mesh_status node statuses and a bounded
85
+ * ledger tail. Pure and read-only; the caller attaches diffSummary separately.
86
+ */
87
+ export declare function deriveMeshReviewInboxItems(args: {
88
+ nodes: Array<Record<string, unknown>>;
89
+ ledgerEntries: MeshLedgerEntry[];
90
+ }): MeshReviewInboxDerivation;
@@ -0,0 +1,324 @@
1
+ import type { MeshTaskStatus, MeshWorkQueueEntry } from './mesh-work-queue.js';
2
+ export declare class MeshRuntimeStore {
3
+ private static instance;
4
+ private readonly db;
5
+ private readonly dbPath;
6
+ private readonly migratedMeshIds;
7
+ private fingerprintSweepCounter;
8
+ private walWriteCounter;
9
+ private static readonly WAL_CHECK_INTERVAL;
10
+ private static readonly WAL_MAX_BYTES;
11
+ private constructor();
12
+ static getInstance(): MeshRuntimeStore;
13
+ static resetForTests(): void;
14
+ close(): void;
15
+ transaction<T>(fn: () => T): T;
16
+ private migrate;
17
+ hasCompletionFingerprint(fingerprint: string): boolean;
18
+ recordCompletionFingerprint(fingerprint: string, ttlMs: number): void;
19
+ sweepExpiredFingerprints(): void;
20
+ private maybeCheckpointWal;
21
+ private ensureLegacyQueueMigrated;
22
+ getQueueEntries(meshId: string, statuses?: MeshTaskStatus[]): MeshWorkQueueEntry[];
23
+ getQueueRevision(meshId: string): string;
24
+ replaceQueue(meshId: string, queue: MeshWorkQueueEntry[]): void;
25
+ deleteQueue(meshId: string): void;
26
+ insertQueueEntry(entry: MeshWorkQueueEntry): void;
27
+ updateQueueEntry(entry: MeshWorkQueueEntry): void;
28
+ findQueueEntryById(meshId: string, id: string): MeshWorkQueueEntry | null;
29
+ hasActiveAssignment(meshId: string, sessionId: string, nodeId: string): boolean;
30
+ claimNextQueueTask(meshId: string, nodeId: string, sessionId: string, capabilityTags?: string[]): MeshWorkQueueEntry | null;
31
+ getQueueStatsByStatus(meshId: string): {
32
+ status: string;
33
+ count: number;
34
+ }[];
35
+ getActiveAssignmentDetails(meshId: string): Array<{
36
+ id: string;
37
+ nodeId?: string;
38
+ sessionId?: string;
39
+ message: string;
40
+ }>;
41
+ findAssignedBySession(meshId: string, sessionId: string, occurredAtIso?: string): MeshWorkQueueEntry | null;
42
+ private toRow;
43
+ insertDirectDispatch(entry: {
44
+ taskId: string;
45
+ meshId: string;
46
+ nodeId?: string;
47
+ sessionId?: string;
48
+ providerType?: string;
49
+ message: string;
50
+ taskMode?: string;
51
+ via: string;
52
+ dispatchedToIdleSession?: boolean;
53
+ dispatchedAt: string;
54
+ }): void;
55
+ getActiveDirectDispatches(meshId: string): Array<{
56
+ taskId: string;
57
+ meshId: string;
58
+ nodeId: string | null;
59
+ sessionId: string | null;
60
+ providerType: string | null;
61
+ message: string;
62
+ taskMode: string | null;
63
+ via: string;
64
+ status: string;
65
+ dispatchedToIdleSession: boolean;
66
+ dispatchedAt: string;
67
+ updatedAt: string;
68
+ }>;
69
+ updateDirectDispatchStatus(meshId: string, sessionId: string, status: 'acked' | 'completed' | 'failed' | 'stale'): void;
70
+ cleanupTerminalDirectDispatches(olderThanMs: number): void;
71
+ deleteDirectDispatches(meshId: string): void;
72
+ markStaleDirectDispatches(meshId: string, olderThanMs: number): void;
73
+ setRemoteIdleSession(nodeId: string, sessionId: string, providerType: string, expiresAt: number, metadata?: any): void;
74
+ getRemoteIdleSessions(): Array<{
75
+ nodeId: string;
76
+ sessionId: string;
77
+ providerType: string;
78
+ expiresAt: number;
79
+ metadata?: any;
80
+ }>;
81
+ deleteRemoteIdleSession(nodeId: string, sessionId: string): void;
82
+ pruneExpiredRemoteIdleSessions(): void;
83
+ insertSessionDelivery(entry: {
84
+ id: string;
85
+ meshId: string;
86
+ nodeId?: string;
87
+ sessionId?: string;
88
+ providerType?: string;
89
+ taskId?: string;
90
+ kind: string;
91
+ priority?: number;
92
+ message: string;
93
+ status: string;
94
+ deliverAfter?: string;
95
+ expiresAt?: string;
96
+ sourceCoordinatorSessionId?: string;
97
+ sourceCoordinatorDaemonId?: string;
98
+ createdAt: string;
99
+ updatedAt: string;
100
+ }): void;
101
+ updateSessionDeliveryStatus(id: string, status: string, opts?: {
102
+ lastError?: string;
103
+ incrementAttempt?: boolean;
104
+ }): void;
105
+ getActiveSessionDeliveries(meshId: string, sessionId?: string): Array<{
106
+ id: string;
107
+ meshId: string;
108
+ nodeId: string | null;
109
+ sessionId: string | null;
110
+ providerType: string | null;
111
+ taskId: string | null;
112
+ kind: string;
113
+ priority: number;
114
+ message: string;
115
+ status: string;
116
+ deliverAfter: string | null;
117
+ expiresAt: string | null;
118
+ attemptCount: number;
119
+ sourceCoordinatorSessionId: string | null;
120
+ sourceCoordinatorDaemonId: string | null;
121
+ lastError: string | null;
122
+ createdAt: string;
123
+ updatedAt: string;
124
+ }>;
125
+ expireStaleSessionDeliveries(meshId: string): void;
126
+ deleteSessionDeliveries(meshId: string): void;
127
+ recordCompletionConflict(entry: {
128
+ id: string;
129
+ meshId: string;
130
+ fingerprint: string;
131
+ conflictingTaskId?: string;
132
+ conflictingSessionId?: string;
133
+ originalTaskId?: string;
134
+ originalSessionId?: string;
135
+ event: string;
136
+ createdAt: string;
137
+ }): void;
138
+ getRecentCompletionConflicts(meshId: string, limitMs?: number): Array<{
139
+ id: string;
140
+ meshId: string;
141
+ fingerprint: string;
142
+ conflictingTaskId: string | null;
143
+ conflictingSessionId: string | null;
144
+ originalTaskId: string | null;
145
+ originalSessionId: string | null;
146
+ event: string;
147
+ createdAt: string;
148
+ }>;
149
+ /**
150
+ * Record a mesh tool call and check whether this mesh+tool combination is
151
+ * being called too rapidly (sliding window rate guard).
152
+ *
153
+ * Returns a rate-limit advisory string when the call rate is too high, null otherwise.
154
+ * windowMs: sliding window size in ms (default 10s)
155
+ * maxCalls: max allowed calls within the window (default 5)
156
+ */
157
+ recordMeshToolCall(opts: {
158
+ meshId: string;
159
+ tool: string;
160
+ sessionId?: string | null;
161
+ windowMs?: number;
162
+ maxCalls?: number;
163
+ }): {
164
+ rateLimitExceeded: boolean;
165
+ callsInWindow: number;
166
+ advisory: string | null;
167
+ };
168
+ /**
169
+ * Prune tool call log entries older than the given age in ms.
170
+ * Exposed for testing.
171
+ */
172
+ pruneToolCallLog(olderThanMs: number): void;
173
+ appendLedgerEntry(entry: {
174
+ id: string;
175
+ meshId: string;
176
+ timestamp: string;
177
+ kind: string;
178
+ nodeId?: string | null;
179
+ sessionId?: string | null;
180
+ providerType?: string | null;
181
+ payload?: unknown;
182
+ }): void;
183
+ readLedgerEntries(meshId: string, opts?: {
184
+ tail?: number;
185
+ since?: string;
186
+ kind?: string;
187
+ limit?: number;
188
+ }): Array<{
189
+ id: string;
190
+ meshId: string;
191
+ timestamp: string;
192
+ kind: string;
193
+ nodeId: string | null;
194
+ sessionId: string | null;
195
+ providerType: string | null;
196
+ payload: unknown;
197
+ }>;
198
+ /**
199
+ * G2 read cutover: read ledger entries in append order (oldest first),
200
+ * matching legacy JSONL file-order semantics. Ties on the same timestamp
201
+ * are broken by rowid (insertion order), preserving the positional
202
+ * guarantee that mesh-events relies on for same-millisecond entries.
203
+ */
204
+ readLedgerEntriesOrdered(meshId: string, opts?: {
205
+ since?: string;
206
+ kinds?: string[];
207
+ tail?: number;
208
+ }): Array<{
209
+ id: string;
210
+ meshId: string;
211
+ timestamp: string;
212
+ kind: string;
213
+ nodeId: string | null;
214
+ sessionId: string | null;
215
+ providerType: string | null;
216
+ payload: unknown;
217
+ }>;
218
+ /** Remove all ledger entries for a mesh (mesh deletion / test cleanup). */
219
+ clearLedgerForMesh(meshId: string): number;
220
+ /** G2: remove entries moved to the JSONL archive so the SQLite runtime set mirrors the active ledger. */
221
+ deleteLedgerEntries(meshId: string, ids: string[]): number;
222
+ hasLedgerEntry(meshId: string, id: string): boolean;
223
+ ledgerEntryCount(meshId: string): number;
224
+ importLedgerEntries(entries: Array<{
225
+ id: string;
226
+ meshId: string;
227
+ timestamp: string;
228
+ kind: string;
229
+ nodeId?: string | null;
230
+ sessionId?: string | null;
231
+ providerType?: string | null;
232
+ payload?: unknown;
233
+ }>): number;
234
+ /**
235
+ * G4: Read a bounded, cursor-addressable ledger slice directly from the SQLite
236
+ * mesh_event_ledger table. This is the P2P reconcile read path; JSONL files are
237
+ * retained as export/import/debug/legacy artifacts only.
238
+ *
239
+ * The return shape is structurally compatible with MeshLedgerSlice so callers
240
+ * in mesh-tools.ts can pass it directly to buildMeshLedgerReplicaEvidence.
241
+ */
242
+ readLedgerSlice(meshId: string, opts?: {
243
+ afterId?: string;
244
+ since?: string;
245
+ kind?: string;
246
+ limit?: number;
247
+ }): {
248
+ protocol: 'adhdev.mesh.ledger.slice.v1';
249
+ meshId: string;
250
+ entries: Array<{
251
+ id: string;
252
+ meshId: string;
253
+ timestamp: string;
254
+ kind: string;
255
+ nodeId: string | null;
256
+ sessionId: string | null;
257
+ providerType: string | null;
258
+ payload: unknown;
259
+ }>;
260
+ cursor: {
261
+ afterId: string | null;
262
+ nextAfterId: string | null;
263
+ limit: number;
264
+ hasMore: boolean;
265
+ };
266
+ sourceOfTruth: {
267
+ kind: 'local_sqlite';
268
+ table: 'mesh_event_ledger';
269
+ bounded: true;
270
+ maxLimit: number;
271
+ };
272
+ };
273
+ insertPendingEvent(event: {
274
+ id: string;
275
+ meshId: string;
276
+ coordinatorDaemonId?: string | null;
277
+ event: string;
278
+ payload?: unknown;
279
+ fingerprint?: string | null;
280
+ queuedAt: number;
281
+ }): boolean;
282
+ drainPendingEvents(meshId: string, coordinatorDaemonId?: string | null): Array<{
283
+ id: string;
284
+ event: string;
285
+ payload: unknown;
286
+ }>;
287
+ /** Non-destructive peek — returns undrained events without marking them drained. */
288
+ peekPendingEvents(meshId: string, coordinatorDaemonId?: string | null): Array<{
289
+ id: string;
290
+ event: string;
291
+ payload: unknown;
292
+ }>;
293
+ hasPendingEventFingerprint(meshId: string, fingerprint: string): boolean;
294
+ upsertMission(mission: {
295
+ id: string;
296
+ meshId: string;
297
+ title: string;
298
+ goal?: string;
299
+ status?: string;
300
+ }): void;
301
+ getMission(meshId: string, missionId: string): {
302
+ id: string;
303
+ meshId: string;
304
+ title: string;
305
+ goal: string;
306
+ status: string;
307
+ createdAt: string;
308
+ updatedAt: string;
309
+ } | null;
310
+ getMissions(meshId: string, statuses?: string[]): Array<{
311
+ id: string;
312
+ meshId: string;
313
+ title: string;
314
+ goal: string;
315
+ status: string;
316
+ createdAt: string;
317
+ updatedAt: string;
318
+ }>;
319
+ /** Remove all missions for a mesh — mesh deletion / test cleanup. */
320
+ clearMissionsForMesh(meshId: string): number;
321
+ /** Remove all pending-event rows (drained included) for a mesh — mesh deletion / test cleanup. */
322
+ clearPendingEventsForMesh(meshId: string): number;
323
+ pendingEventCount(meshId: string): number;
324
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * M7: Operational stats (time/attempts) derived from existing truth.
3
+ *
4
+ * No cost/token accounting — ADHDev observes PTY/CDP and cannot see API
5
+ * tokens (explicit non-goal). Everything here is derived at query time from
6
+ * the SQLite ledger and queue rows; there is no separate aggregate table.
7
+ * Tasks with missing ledger evidence report incompleteEvidence instead of
8
+ * estimated numbers.
9
+ */
10
+ export interface MeshTaskStats {
11
+ taskId: string;
12
+ status: string;
13
+ dispatchedAt: string | null;
14
+ terminalAt: string | null;
15
+ terminalKind: 'task_completed' | 'task_failed' | null;
16
+ /** dispatched → terminal wall clock; null when evidence is incomplete. */
17
+ durationMs: number | null;
18
+ /** Number of task_dispatched ledger entries observed for this task. */
19
+ dispatchCount: number;
20
+ /** Queue requeueCount (0 when the row is gone or never requeued). */
21
+ requeueCount: number;
22
+ /** True when dispatch or terminal ledger evidence is missing — numbers are withheld, never estimated. */
23
+ incompleteEvidence?: true;
24
+ }
25
+ export interface MeshMissionStats {
26
+ missionId: string;
27
+ taskCount: number;
28
+ completed: number;
29
+ failed: number;
30
+ /** Sum of per-task durations with complete evidence. */
31
+ totalDurationMs: number;
32
+ /** First dispatch → last terminal across the mission's tasks; null without complete endpoints. */
33
+ wallClockMs: number | null;
34
+ /** Total requeue attempts across the mission's tasks. */
35
+ retries: number;
36
+ /** Task ids whose ledger evidence was incomplete (excluded from sums). */
37
+ incompleteTaskIds: string[];
38
+ }
39
+ /**
40
+ * Compute per-task stats from ledger entries. Scans a bounded tail window —
41
+ * stats are an operational view of recent work, not a full historical report.
42
+ */
43
+ export declare function computeMeshTaskStats(meshId: string, opts?: {
44
+ taskIds?: string[];
45
+ missionId?: string;
46
+ tail?: number;
47
+ }): MeshTaskStats[];
48
+ /** Mission rollup — derived from per-task stats, no stored aggregates. */
49
+ export declare function computeMeshMissionStats(meshId: string, missionId: string): MeshMissionStats;
@@ -1,17 +1,46 @@
1
+ import type { RepoMeshDaemonRole } from '../repo-mesh-types.js';
2
+ import { MeshRuntimeStore } from './mesh-runtime-store.js';
1
3
  export type MeshTaskStatus = 'pending' | 'assigned' | 'completed' | 'failed' | 'cancelled';
2
4
  export type MeshActiveTaskStatus = Extract<MeshTaskStatus, 'pending' | 'assigned'>;
3
5
  export type MeshHistoricalTaskStatus = Extract<MeshTaskStatus, 'completed' | 'failed' | 'cancelled'>;
6
+ export type MeshTaskMode = 'code_change' | 'validation' | 'live_debug_readonly' | 'launch_app' | 'convergence';
4
7
  export declare const ACTIVE_MESH_QUEUE_STATUSES: MeshActiveTaskStatus[];
5
8
  export declare const HISTORICAL_MESH_QUEUE_STATUSES: MeshHistoricalTaskStatus[];
9
+ export declare const MESH_TASK_MODES: MeshTaskMode[];
10
+ export interface MeshTaskModeValidationResult {
11
+ valid: boolean;
12
+ taskMode?: MeshTaskMode;
13
+ violations: string[];
14
+ allowedOperations?: string[];
15
+ }
16
+ export declare function normalizeMeshTaskMode(value: unknown): MeshTaskMode | undefined;
17
+ export declare function validateMeshTaskModeRequest(mode: unknown, message: string): MeshTaskModeValidationResult;
6
18
  export interface MeshWorkQueueEntry {
7
19
  id: string;
8
20
  meshId: string;
9
21
  message: string;
10
22
  status: MeshTaskStatus;
23
+ taskMode?: MeshTaskMode;
11
24
  /** If specified, only this node can claim the task (used by legacy mesh_send_task) */
12
25
  targetNodeId?: string;
13
26
  /** If specified, only this runtime session can claim the task */
14
27
  targetSessionId?: string;
28
+ /** If specified, a node must expose all tags before it can claim the task. */
29
+ requiredTags?: string[];
30
+ /**
31
+ * M1: ids of tasks that must reach 'completed' before this task is claimable.
32
+ * Forward references (ids not yet enqueued) are allowed for batch flows and
33
+ * simply keep the task waiting until the referenced task exists and completes.
34
+ */
35
+ dependsOn?: string[];
36
+ /** M1/M3: mission this task belongs to (joins mesh_missions). */
37
+ missionId?: string;
38
+ /**
39
+ * M1: why this task is held back (e.g. "dependency_failed:<taskId>").
40
+ * Only set by the system on dependency failure under the 'block' policy;
41
+ * waiting-on-dependency state is computed at view time, not stored.
42
+ */
43
+ blockedReason?: string;
15
44
  /** The node that actually claimed and is executing the task */
16
45
  assignedNodeId?: string;
17
46
  /** The session currently executing the task */
@@ -23,6 +52,8 @@ export interface MeshWorkQueueEntry {
23
52
  requeueReason?: string;
24
53
  requeuedAt?: string;
25
54
  requeueCount?: number;
55
+ /** Max automatic requeue attempts. When requeueCount reaches this, task is auto-failed. */
56
+ maxRetries?: number;
26
57
  /** Last automatic queue session spin-up attempt, for mesh_view_queue/debug visibility. */
27
58
  autoLaunch?: {
28
59
  status: 'skipped' | 'started' | 'failed' | 'completed';
@@ -37,50 +68,111 @@ export interface MeshWorkQueueEntry {
37
68
  createdAt: string;
38
69
  updatedAt: string;
39
70
  }
71
+ export interface MeshQueueMutationOptions {
72
+ ownerRole?: RepoMeshDaemonRole;
73
+ }
74
+ export declare function normalizeMeshCapabilityTags(value: unknown): string[];
75
+ export declare function buildMeshNodeCapabilityTags(node: {
76
+ capabilities?: unknown;
77
+ policy?: unknown;
78
+ isLocalWorktree?: unknown;
79
+ worktreeBranch?: unknown;
80
+ } | undefined, providerType?: string): string[];
81
+ export declare function nodeSatisfiesRequiredTags(requiredTags: unknown, capabilityTags: unknown): boolean;
82
+ /**
83
+ * M1: detect dependency cycles before enqueue. Walks the dependency graph of
84
+ * existing queue entries plus the new task's edges. Fail-closed: a cycle
85
+ * rejects the enqueue entirely. Synchronous and bounded by queue size.
86
+ */
87
+ export declare function assertNoDependencyCycle(meshId: string, newTaskId: string, dependsOn: string[]): void;
40
88
  /**
41
89
  * Add a new task to the mesh queue.
42
90
  */
43
91
  export declare function enqueueTask(meshId: string, message: string, opts?: {
44
92
  targetNodeId?: string;
45
93
  targetSessionId?: string;
46
- }): MeshWorkQueueEntry;
94
+ taskMode?: MeshTaskMode | string;
95
+ requiredTags?: string[];
96
+ /** M1: tasks that must complete before this one is claimable. */
97
+ dependsOn?: string[];
98
+ /** M1/M3: mission this task belongs to. */
99
+ missionId?: string;
100
+ /** Explicit task id for batch/template flows (M5). Random UUID when omitted. */
101
+ id?: string;
102
+ } & MeshQueueMutationOptions): MeshWorkQueueEntry;
47
103
  /**
48
104
  * Get all tasks in the queue, optionally filtered by status.
49
105
  */
50
106
  export declare function getQueue(meshId: string, opts?: {
51
107
  status?: MeshTaskStatus[];
52
108
  }): MeshWorkQueueEntry[];
109
+ export declare function getMeshQueueRevision(meshId: string): string;
53
110
  /**
54
111
  * Find the next pending task that this node is allowed to claim, and mark it as assigned.
55
112
  */
56
- export declare function claimNextTask(meshId: string, nodeId: string, sessionId: string): MeshWorkQueueEntry | null;
113
+ export declare function claimNextTask(meshId: string, nodeId: string, sessionId: string, capabilityTags?: string[]): MeshWorkQueueEntry | null;
114
+ export type DependencyFailurePolicy = 'block' | 'cancel';
57
115
  /**
58
116
  * Update the status of a specific task.
59
117
  * Used when a session completes, fails, or stalls.
60
118
  */
61
- export declare function updateTaskStatus(meshId: string, taskId: string, status: MeshTaskStatus): MeshWorkQueueEntry | null;
119
+ export declare function updateTaskStatus(meshId: string, taskId: string, status: MeshTaskStatus, opts?: MeshQueueMutationOptions): MeshWorkQueueEntry | null;
62
120
  export declare function recordTaskAutoLaunch(meshId: string, taskId: string, autoLaunch: Omit<NonNullable<MeshWorkQueueEntry['autoLaunch']>, 'updatedAt'>): MeshWorkQueueEntry | null;
63
121
  /**
64
122
  * Mark a queue task as manually cancelled without deleting audit history.
65
123
  */
66
124
  export declare function cancelTask(meshId: string, taskId: string, opts?: {
67
125
  reason?: string;
68
- }): MeshWorkQueueEntry | null;
126
+ } & MeshQueueMutationOptions): MeshWorkQueueEntry | null;
69
127
  /**
70
128
  * Return a queue task to pending for retry. By default, dead session targeting
71
129
  * and assigned ownership are cleared so stale assignments do not strand again.
72
130
  */
131
+ export type RequeueResult = {
132
+ status: 'requeued';
133
+ entry: MeshWorkQueueEntry;
134
+ } | {
135
+ status: 'failed_max_retries';
136
+ entry: MeshWorkQueueEntry;
137
+ maxRetries: number;
138
+ requeueCount: number;
139
+ } | {
140
+ status: 'not_found';
141
+ };
73
142
  export declare function requeueTask(meshId: string, taskId: string, opts?: {
74
143
  reason?: string;
75
144
  targetNodeId?: string;
76
145
  targetSessionId?: string;
77
146
  clearTargetNode?: boolean;
78
147
  clearTargetSession?: boolean;
79
- }): MeshWorkQueueEntry | null;
148
+ /**
149
+ * Override the retry cap for this call. Use only for explicit operator actions.
150
+ * If true, the task is requeued even when requeueCount >= maxRetries.
151
+ */
152
+ force?: boolean;
153
+ /** Per-task retry cap override. Falls back to mesh policy maxTaskRetries (default 1). */
154
+ maxRetries?: number;
155
+ } & MeshQueueMutationOptions): MeshWorkQueueEntry | null;
80
156
  /**
81
157
  * Update the status of the task currently assigned to a specific session.
82
158
  */
83
- export declare function updateSessionTaskStatus(meshId: string, sessionId: string, status: MeshTaskStatus): MeshWorkQueueEntry | null;
159
+ export declare function updateSessionTaskStatus(meshId: string, sessionId: string, status: MeshTaskStatus, opts?: {
160
+ occurredAt?: string;
161
+ }): MeshWorkQueueEntry | null;
162
+ /**
163
+ * M1-3: true when at least one pending task is waiting on the given task.
164
+ * Used by the completion event path to decide whether to wake the queue.
165
+ */
166
+ export declare function hasPendingDependents(meshId: string, taskId: string): boolean;
167
+ /**
168
+ * M1-4: view-time dependency state for a task — unmet dependency ids and
169
+ * whether the task is currently claimable from a dependency standpoint.
170
+ * Not stored (truth stays in task statuses).
171
+ */
172
+ export declare function describeTaskDependencyState(entry: Pick<MeshWorkQueueEntry, 'dependsOn' | 'blockedReason'>, statusById: Map<string, MeshTaskStatus | string>): {
173
+ waitingOn: string[];
174
+ dependenciesSatisfied: boolean;
175
+ };
84
176
  export interface MeshWorkQueueStats {
85
177
  total: number;
86
178
  active: number;
@@ -105,3 +197,42 @@ export interface MeshWorkQueueStats {
105
197
  * Return aggregate queue statistics for the given mesh.
106
198
  */
107
199
  export declare function getMeshQueueStats(meshId: string): MeshWorkQueueStats;
200
+ export declare function __replaceMeshQueueForTests(meshId: string, queue: MeshWorkQueueEntry[]): void;
201
+ export declare function __clearMeshQueueForTests(meshId: string): void;
202
+ export declare function __clearDirectDispatchesForTests(meshId: string): void;
203
+ export declare function __resetMeshRuntimeStoreForTests(): void;
204
+ export type DirectDispatchRecord = ReturnType<MeshRuntimeStore['getActiveDirectDispatches']>[number];
205
+ export declare function insertDirectDispatch(meshId: string, data: {
206
+ taskId: string;
207
+ nodeId?: string;
208
+ sessionId?: string;
209
+ providerType?: string;
210
+ message: string;
211
+ taskMode?: string;
212
+ via: string;
213
+ dispatchedToIdleSession?: boolean;
214
+ dispatchedAt: string;
215
+ }): void;
216
+ export declare function getActiveDirectDispatches(meshId: string): DirectDispatchRecord[];
217
+ export declare function updateDirectDispatchStatus(meshId: string, sessionId: string, status: 'acked' | 'completed' | 'failed' | 'stale'): void;
218
+ export declare function cleanupTerminalDirectDispatches(olderThanMs?: number): void;
219
+ export declare function markStaleDirectDispatches(meshId: string, olderThanMs?: number): void;
220
+ export type MeshToolCallRateResult = {
221
+ rateLimitExceeded: boolean;
222
+ callsInWindow: number;
223
+ advisory: string | null;
224
+ };
225
+ /**
226
+ * Record a coordinator tool call and return a rate-limit advisory when the
227
+ * call rate for that tool exceeds the allowed threshold.
228
+ *
229
+ * Defaults: 10-second sliding window, max 5 calls before advisory is raised.
230
+ * Returns { rateLimitExceeded: false } on any store error so callers are not blocked.
231
+ */
232
+ export declare function recordMeshToolCall(opts: {
233
+ meshId: string;
234
+ tool: string;
235
+ sessionId?: string | null;
236
+ windowMs?: number;
237
+ maxCalls?: number;
238
+ }): MeshToolCallRateResult;