@adhdev/daemon-core 0.9.82-rc.28 → 0.9.82-rc.280

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 (279) hide show
  1. package/dist/boot/daemon-lifecycle.d.ts +8 -0
  2. package/dist/boot/process-hardening.d.ts +50 -0
  3. package/dist/build-info.d.ts +37 -0
  4. package/dist/chat/source-machine.d.ts +166 -0
  5. package/dist/chat/source-resolver.d.ts +104 -0
  6. package/dist/chat/subscription-updates.d.ts +1 -0
  7. package/dist/cli-adapter-types.d.ts +23 -2
  8. package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
  9. package/dist/cli-adapters/cli-state-engine.d.ts +198 -0
  10. package/dist/cli-adapters/provider-cli-adapter.d.ts +106 -63
  11. package/dist/cli-adapters/provider-cli-parse.d.ts +4 -0
  12. package/dist/cli-adapters/provider-cli-shared.d.ts +38 -0
  13. package/dist/cli-adapters/raw-terminal-io.d.ts +37 -0
  14. package/dist/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +6 -3
  15. package/dist/cli-adapters/terminal-backends/types.d.ts +10 -2
  16. package/dist/cli-adapters/terminal-screen.d.ts +4 -11
  17. package/dist/commands/cli-manager.d.ts +2 -1
  18. package/dist/commands/handler.d.ts +110 -0
  19. package/dist/commands/mesh-coordinator.d.ts +85 -1
  20. package/dist/commands/router.d.ts +160 -1
  21. package/dist/config/chat-history.d.ts +9 -0
  22. package/dist/config/config.d.ts +5 -0
  23. package/dist/config/mesh-config.d.ts +72 -1
  24. package/dist/git/git-commands.d.ts +9 -1
  25. package/dist/git/git-diff.d.ts +6 -0
  26. package/dist/git/git-status.d.ts +7 -0
  27. package/dist/git/git-types.d.ts +2 -50
  28. package/dist/index.d.ts +51 -12
  29. package/dist/index.js +34388 -12966
  30. package/dist/index.js.map +1 -1
  31. package/dist/index.mjs +38052 -16731
  32. package/dist/index.mjs.map +1 -1
  33. package/dist/installer.d.ts +1 -4
  34. package/dist/ipc/local-ipc-server.d.ts +91 -0
  35. package/dist/launch.d.ts +1 -1
  36. package/dist/logging/async-batch-writer.d.ts +10 -0
  37. package/dist/mesh/contracts.d.ts +164 -0
  38. package/dist/mesh/coordinator-prompt.d.ts +36 -0
  39. package/dist/mesh/coordinator-registry.d.ts +59 -0
  40. package/dist/mesh/mesh-active-work.d.ts +108 -0
  41. package/dist/mesh/mesh-delivery-policy.d.ts +131 -0
  42. package/dist/mesh/mesh-events-coordinator.d.ts +133 -0
  43. package/dist/mesh/mesh-events-pending.d.ts +45 -0
  44. package/dist/mesh/mesh-events-stale.d.ts +40 -0
  45. package/dist/mesh/mesh-events-utils.d.ts +47 -0
  46. package/dist/mesh/mesh-events.d.ts +6 -49
  47. package/dist/mesh/mesh-fast-forward.d.ts +81 -0
  48. package/dist/mesh/mesh-host-ownership.d.ts +9 -0
  49. package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -3
  50. package/dist/mesh/mesh-ledger.d.ts +77 -1
  51. package/dist/mesh/mesh-missions.d.ts +68 -0
  52. package/dist/mesh/mesh-reconcile-loop.d.ts +7 -0
  53. package/dist/mesh/mesh-refine-batch.d.ts +68 -0
  54. package/dist/mesh/mesh-refine-status.d.ts +62 -0
  55. package/dist/mesh/mesh-review-inbox.d.ts +90 -0
  56. package/dist/mesh/mesh-routing.d.ts +70 -0
  57. package/dist/mesh/mesh-runtime-store.d.ts +345 -0
  58. package/dist/mesh/mesh-task-stats.d.ts +49 -0
  59. package/dist/mesh/mesh-work-queue.d.ts +166 -5
  60. package/dist/mesh/preview-freshness.d.ts +18 -0
  61. package/dist/mesh/refine-config.d.ts +215 -0
  62. package/dist/mesh/worktree-bootstrap-config.d.ts +135 -0
  63. package/dist/providers/acp-provider-instance.d.ts +2 -0
  64. package/dist/providers/approval-utils.d.ts +13 -0
  65. package/dist/providers/cli-provider-instance.d.ts +61 -3
  66. package/dist/providers/contracts.d.ts +130 -6
  67. package/dist/providers/external-sources.d.ts +71 -0
  68. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +100 -0
  69. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  70. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  71. package/dist/providers/native-history/dispatcher.d.ts +27 -0
  72. package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
  73. package/dist/providers/native-history/index.d.ts +13 -0
  74. package/dist/providers/provider-instance-manager.d.ts +13 -0
  75. package/dist/providers/provider-instance.d.ts +13 -1
  76. package/dist/providers/provider-loader.d.ts +26 -4
  77. package/dist/providers/provider-trust.d.ts +31 -0
  78. package/dist/providers/read-chat-contract.d.ts +29 -0
  79. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  80. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +85 -0
  81. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  82. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
  83. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  84. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  85. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  86. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  87. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  88. package/dist/providers/sdk/v1/index.d.ts +30 -0
  89. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  90. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  91. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  92. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  93. package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
  94. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  95. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  96. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  97. package/dist/providers/spec/adapter.d.ts +59 -0
  98. package/dist/providers/spec/cli-adapter.d.ts +140 -0
  99. package/dist/providers/spec/evaluator.d.ts +23 -0
  100. package/dist/providers/spec/fsm-driver.d.ts +278 -0
  101. package/dist/providers/spec/fsm-evaluator.d.ts +72 -0
  102. package/dist/providers/spec/fsm-loader.d.ts +14 -0
  103. package/dist/providers/spec/fsm-types.d.ts +106 -0
  104. package/dist/providers/spec/native-history-executor.d.ts +41 -0
  105. package/dist/providers/spec/route.d.ts +4 -0
  106. package/dist/providers/spec/types.d.ts +144 -0
  107. package/dist/providers/transcript-v2.d.ts +176 -0
  108. package/dist/providers/types/interactive-prompt.d.ts +48 -0
  109. package/dist/repo-mesh-types.d.ts +154 -13
  110. package/dist/sessions/registry.d.ts +6 -0
  111. package/dist/shared-types-extra.d.ts +2 -4
  112. package/dist/shared-types.d.ts +42 -1
  113. package/dist/status/normalize.d.ts +1 -1
  114. package/dist/status/normalize.js +1 -0
  115. package/dist/status/normalize.js.map +1 -1
  116. package/dist/status/normalize.mjs +1 -0
  117. package/dist/status/normalize.mjs.map +1 -1
  118. package/dist/status/reporter.d.ts +2 -0
  119. package/dist/status/snapshot.d.ts +1 -0
  120. package/dist/types.d.ts +5 -0
  121. package/package.json +7 -3
  122. package/src/agent-stream/poller.ts +2 -3
  123. package/src/boot/daemon-lifecycle.ts +55 -12
  124. package/src/boot/process-hardening.ts +89 -0
  125. package/src/build-info.ts +73 -0
  126. package/src/chat/source-machine.ts +534 -0
  127. package/src/chat/source-resolver.ts +0 -0
  128. package/src/chat/subscription-updates.ts +20 -1
  129. package/src/cli-adapter-types.d.ts +1 -0
  130. package/src/cli-adapter-types.ts +22 -2
  131. package/src/cli-adapters/cli-script-runner.ts +421 -0
  132. package/src/cli-adapters/cli-state-engine.ts +1215 -0
  133. package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
  134. package/src/cli-adapters/provider-cli-adapter.ts +674 -1139
  135. package/src/cli-adapters/provider-cli-parse.d.ts +1 -0
  136. package/src/cli-adapters/provider-cli-parse.ts +13 -0
  137. package/src/cli-adapters/provider-cli-runtime.ts +3 -1
  138. package/src/cli-adapters/provider-cli-shared.d.ts +2 -0
  139. package/src/cli-adapters/provider-cli-shared.ts +68 -11
  140. package/src/cli-adapters/raw-terminal-io.ts +252 -0
  141. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +53 -29
  142. package/src/cli-adapters/terminal-backends/types.ts +10 -3
  143. package/src/cli-adapters/terminal-screen.ts +16 -81
  144. package/src/commands/chat-commands.ts +1813 -60
  145. package/src/commands/cli-manager.ts +286 -14
  146. package/src/commands/handler.ts +809 -2
  147. package/src/commands/mesh-coordinator.ts +332 -122
  148. package/src/commands/router.ts +5739 -566
  149. package/src/config/chat-history.ts +229 -24
  150. package/src/config/config.ts +12 -0
  151. package/src/config/mesh-config.ts +303 -3
  152. package/src/config/recent-activity.ts +8 -2
  153. package/src/daemon/dev-auto-implement.ts +3 -2
  154. package/src/daemon/dev-cli-debug.ts +10 -1
  155. package/src/detection/ide-detector.ts +26 -16
  156. package/src/git/git-commands.ts +42 -12
  157. package/src/git/git-diff.ts +53 -0
  158. package/src/git/git-status.ts +198 -7
  159. package/src/git/git-types.ts +14 -62
  160. package/src/git/git-worktree.ts +8 -1
  161. package/src/index.ts +131 -11
  162. package/src/installer.d.ts +1 -1
  163. package/src/installer.ts +8 -6
  164. package/src/ipc/local-ipc-server.ts +278 -0
  165. package/src/launch.d.ts +1 -1
  166. package/src/launch.ts +37 -28
  167. package/src/logging/async-batch-writer.ts +55 -0
  168. package/src/logging/logger.ts +2 -1
  169. package/src/mesh/contracts.ts +329 -0
  170. package/src/mesh/coordinator-prompt.ts +219 -31
  171. package/src/mesh/coordinator-registry.ts +121 -0
  172. package/src/mesh/mesh-active-work.ts +468 -0
  173. package/src/mesh/mesh-delivery-policy.ts +315 -0
  174. package/src/mesh/mesh-events-coordinator.ts +1592 -0
  175. package/src/mesh/mesh-events-pending.ts +508 -0
  176. package/src/mesh/mesh-events-stale.ts +283 -0
  177. package/src/mesh/mesh-events-utils.ts +254 -0
  178. package/src/mesh/mesh-events.ts +30 -1035
  179. package/src/mesh/mesh-fast-forward.ts +839 -0
  180. package/src/mesh/mesh-host-ownership.ts +73 -0
  181. package/src/mesh/mesh-ledger-reconciliation.ts +12 -5
  182. package/src/mesh/mesh-ledger.ts +589 -102
  183. package/src/mesh/mesh-missions.ts +172 -0
  184. package/src/mesh/mesh-reconcile-loop.ts +298 -0
  185. package/src/mesh/mesh-refine-batch.ts +197 -0
  186. package/src/mesh/mesh-refine-status.ts +231 -0
  187. package/src/mesh/mesh-review-inbox.ts +307 -0
  188. package/src/mesh/mesh-routing.ts +272 -0
  189. package/src/mesh/mesh-runtime-store.ts +1399 -0
  190. package/src/mesh/mesh-task-stats.ts +154 -0
  191. package/src/mesh/mesh-work-queue.ts +586 -145
  192. package/src/mesh/preview-freshness.ts +118 -0
  193. package/src/mesh/refine-config.ts +403 -0
  194. package/src/mesh/worktree-bootstrap-config.ts +326 -0
  195. package/src/providers/acp-provider-instance.ts +15 -1
  196. package/src/providers/approval-utils.d.ts +4 -0
  197. package/src/providers/approval-utils.ts +47 -5
  198. package/src/providers/chat-message-normalization.ts +4 -11
  199. package/src/providers/cli-provider-instance.ts +920 -81
  200. package/src/providers/contracts.d.ts +55 -0
  201. package/src/providers/contracts.ts +141 -6
  202. package/src/providers/external-sources.ts +218 -0
  203. package/src/providers/ide-provider-instance.ts +19 -5
  204. package/src/providers/native-history/antigravity-cli-transcript.ts +643 -0
  205. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  206. package/src/providers/native-history/codex-cli-transcript.ts +479 -0
  207. package/src/providers/native-history/dispatcher.ts +340 -0
  208. package/src/providers/native-history/hermes-cli-transcript.ts +230 -0
  209. package/src/providers/native-history/index.ts +30 -0
  210. package/src/providers/provider-instance-manager.ts +30 -0
  211. package/src/providers/provider-instance.ts +10 -1
  212. package/src/providers/provider-loader.ts +584 -50
  213. package/src/providers/provider-schema.ts +87 -14
  214. package/src/providers/provider-trust.ts +114 -0
  215. package/src/providers/read-chat-contract.ts +76 -16
  216. package/src/providers/sdk/README.md +49 -0
  217. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  218. package/src/providers/sdk/v1/builders/cli/detect-status.ts +262 -0
  219. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  220. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +250 -0
  221. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  222. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  223. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  224. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  225. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  226. package/src/providers/sdk/v1/index.ts +152 -0
  227. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  228. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  229. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  230. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +504 -0
  231. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  232. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  233. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  234. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  235. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  236. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  237. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  238. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  239. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
  240. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  241. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  242. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  243. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  244. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  245. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  246. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  247. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  248. package/src/providers/sdk/v1/types/common/index.ts +229 -0
  249. package/src/providers/sdk/v1/validators/index.ts +19 -0
  250. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  251. package/src/providers/sdk/v1/validators/taint.ts +309 -0
  252. package/src/providers/spec/adapter.ts +155 -0
  253. package/src/providers/spec/cli-adapter.ts +730 -0
  254. package/src/providers/spec/evaluator.ts +345 -0
  255. package/src/providers/spec/fsm-driver.ts +868 -0
  256. package/src/providers/spec/fsm-evaluator.ts +255 -0
  257. package/src/providers/spec/fsm-loader.ts +102 -0
  258. package/src/providers/spec/fsm-types.ts +199 -0
  259. package/src/providers/spec/native-history-executor.ts +943 -0
  260. package/src/providers/spec/route.ts +51 -0
  261. package/src/providers/spec/types.ts +189 -0
  262. package/src/providers/transcript-v2.ts +567 -0
  263. package/src/providers/types/interactive-prompt.ts +446 -0
  264. package/src/providers/version-archive.ts +38 -20
  265. package/src/repo-mesh-types.ts +183 -13
  266. package/src/sessions/registry.ts +6 -0
  267. package/src/shared-types-extra.ts +2 -4
  268. package/src/shared-types.ts +45 -1
  269. package/src/status/builders.ts +26 -6
  270. package/src/status/normalize.ts +2 -0
  271. package/src/status/reporter.ts +15 -0
  272. package/src/status/snapshot.ts +84 -25
  273. package/src/system/host-memory.ts +29 -12
  274. package/src/types.ts +5 -0
  275. package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
  276. package/dist/mesh/mesh-sync.d.ts +0 -53
  277. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
  278. package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
  279. package/src/mesh/mesh-sync.ts +0 -111
@@ -0,0 +1,144 @@
1
+ export type Size = number | string;
2
+ export interface SectionPattern {
3
+ section?: string;
4
+ pattern: string;
5
+ flags?: string;
6
+ }
7
+ /** Inline wait_for shape used by open_picker control actions. */
8
+ export interface WaitForCondition {
9
+ section?: string;
10
+ regex?: string;
11
+ flags?: string;
12
+ }
13
+ export type ControlAction = {
14
+ type: 'send_keys';
15
+ keys: string;
16
+ } | {
17
+ type: 'open_picker';
18
+ trigger_keys: string;
19
+ wait_for: WaitForCondition;
20
+ extract_choices: SectionPattern;
21
+ submit_key: string;
22
+ } | {
23
+ type: 'attach_image';
24
+ method: 'tempfile_then_keys';
25
+ keys_template: string;
26
+ };
27
+ export interface Control {
28
+ id: string;
29
+ label: string;
30
+ visible_when_state?: string[];
31
+ action: ControlAction;
32
+ }
33
+ export interface NotificationRule {
34
+ id: string;
35
+ when_state: string;
36
+ title: string;
37
+ body?: string;
38
+ }
39
+ export interface DelegateTrigger {
40
+ id: string;
41
+ when_state: string;
42
+ after_duration_ms?: number;
43
+ task_template: string;
44
+ }
45
+ export interface NativeHistoryConfig {
46
+ reader?: 'claude-cli' | 'codex-cli' | 'antigravity-cli' | 'hermes-cli';
47
+ source?: NativeHistorySource;
48
+ override_path?: string;
49
+ }
50
+ export type NativeHistorySource = NativeHistoryJsonlSource | NativeHistorySqliteSource;
51
+ export interface NativeHistoryJsonlSource {
52
+ kind: 'jsonl';
53
+ path: string;
54
+ file_pattern?: string;
55
+ recent_window_ms?: number;
56
+ session_id_from?: 'filename_uuid' | 'first_record';
57
+ session_id_path?: string;
58
+ message_filter?: {
59
+ where: string;
60
+ };
61
+ message_map: NativeHistoryMessageMap;
62
+ }
63
+ export interface NativeHistorySqliteSource {
64
+ kind: 'sqlite';
65
+ path: string;
66
+ session_query: string;
67
+ message_query: string;
68
+ message_map: NativeHistoryMessageMap;
69
+ }
70
+ export interface NativeHistoryMessageMap {
71
+ role: string;
72
+ content: string;
73
+ content_strip?: string[];
74
+ content_unwrap?: string[];
75
+ timestamp_ms?: string;
76
+ kind?: string;
77
+ }
78
+ export interface AnchorContext {
79
+ prev?: string;
80
+ next?: string;
81
+ prev_flags?: string;
82
+ next_flags?: string;
83
+ }
84
+ export interface SectionDef {
85
+ from_top?: Size;
86
+ from_bottom?: Size;
87
+ until?: string;
88
+ /**
89
+ * Anchor regex(es). A single string anchors on the first/last matching line
90
+ * (per `anchor_last`). An array is an OR-set: every candidate line is one
91
+ * that matches ANY entry; with `anchor_last` the LAST such line across all
92
+ * patterns wins, otherwise the FIRST. This lets one section capture two
93
+ * different shapes — e.g. a box-divider modal AND a divider-less modal whose
94
+ * only stable landmark is the question line above its numbered choices.
95
+ */
96
+ anchor?: string | string[];
97
+ anchor_flags?: string;
98
+ anchor_last?: boolean;
99
+ /**
100
+ * Context guard(s) for the anchor. A single object applies to every anchor
101
+ * pattern. An array is matched positionally against an `anchor` array (entry
102
+ * i guards anchor i); a positional `undefined`/null entry means "no guard"
103
+ * for that anchor. A scalar `anchor` ignores array form beyond index 0.
104
+ */
105
+ anchor_context?: AnchorContext | (AnchorContext | null)[];
106
+ lines?: number;
107
+ until_regex?: string;
108
+ until_regex_flags?: string;
109
+ }
110
+ export interface RegexCondition {
111
+ section?: string;
112
+ matches: string;
113
+ flags?: string;
114
+ cursor_row_min?: number;
115
+ cursor_row_max?: number;
116
+ cursor_col_min?: number;
117
+ cursor_col_max?: number;
118
+ }
119
+ export interface ChangedCondition {
120
+ cursor_above: number;
121
+ changed: boolean;
122
+ stable_ms?: number;
123
+ }
124
+ export interface AllCondition {
125
+ all: Condition[];
126
+ }
127
+ export interface AnyCondition {
128
+ any: Condition[];
129
+ }
130
+ export type Condition = RegexCondition | ChangedCondition | AllCondition | AnyCondition;
131
+ export interface ExtractTitle {
132
+ section?: string;
133
+ regex?: string;
134
+ flags?: string;
135
+ first_line?: true;
136
+ }
137
+ export interface ExtractButtons {
138
+ section?: string;
139
+ pattern: string;
140
+ flags?: string;
141
+ key_for_index: string;
142
+ min_count?: number;
143
+ continuation_lines?: boolean;
144
+ }
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Chat Transcript Contract v2
3
+ *
4
+ * First-class message identity, monotonic sequence, strict enums. Designed to
5
+ * replace the v1 contract (contracts.ts ReadChatResult + types.ts ChatMessage)
6
+ * during the A2 big-bang. This module defines the contract; it does not yet
7
+ * change runtime behaviour. v1 keeps working until A2 flips the switch.
8
+ *
9
+ * Invariants v2 enforces (and v1 does not):
10
+ * 1. Every ChatMessageV2 has providerUnitKey, bubbleId, sequence — none optional.
11
+ * 2. sequence is a monotonic integer per (sessionId, source) tuple. Producers
12
+ * never reuse it; consumers MAY assume strict ordering.
13
+ * 3. providerUnitKey is stable across re-reads: the same logical message
14
+ * always yields the same key even if its index shifts or content is
15
+ * edited mid-stream. Producers derive it from provider-owned identifiers
16
+ * (turn id, native message id), not from content hashes or array index.
17
+ * 4. timestamp is producer-asserted wall-clock; orderingTimestamp is monotonic
18
+ * and used for snapshot diffs. 1ms fallback increments are forbidden — if
19
+ * a producer cannot supply a stable monotonic value, the daemon assigns
20
+ * sequence at ingest and orderingTimestamp = ingestedAt.
21
+ * 5. visibility / source / role / kind are strict unions. No `(string & {})`
22
+ * escape hatches.
23
+ * 6. Coverage is exactly one of full/tail/current-turn. Mixing it with
24
+ * partialReason or unavailableReason is a contract violation.
25
+ * 7. workspace / sessionId are explicit on every ReadChatResultV2; the daemon
26
+ * no longer infers them from message bodies.
27
+ */
28
+ import type { MessagePart, ToolCallInfo } from './contracts.js';
29
+ export declare const CHAT_CONTRACT_VERSION_V1: "1.0";
30
+ export declare const CHAT_CONTRACT_VERSION_V2: "2.0";
31
+ export type ChatContractVersion = typeof CHAT_CONTRACT_VERSION_V1 | typeof CHAT_CONTRACT_VERSION_V2;
32
+ export declare const SUPPORTED_CHAT_CONTRACT_VERSIONS: readonly ChatContractVersion[];
33
+ export declare const CHAT_ROLES_V2: readonly ["user", "assistant", "system"];
34
+ export type ChatRoleV2 = typeof CHAT_ROLES_V2[number];
35
+ export declare const CHAT_MESSAGE_KINDS_V2: readonly ["standard", "thought", "tool", "terminal", "system"];
36
+ export type ChatMessageKindV2 = typeof CHAT_MESSAGE_KINDS_V2[number];
37
+ export declare const CHAT_VISIBILITIES_V2: readonly ["user", "debug", "internal", "hidden"];
38
+ export type ChatVisibilityV2 = typeof CHAT_VISIBILITIES_V2[number];
39
+ export declare const CHAT_AUDIENCES_V2: readonly ["chat", "debug", "trace", "internal"];
40
+ export type ChatAudienceV2 = typeof CHAT_AUDIENCES_V2[number];
41
+ export declare const CHAT_SOURCES_V2: readonly ["assistant_text", "tool_call", "terminal_command", "runtime_activity", "runtime_status", "provider_chrome", "control"];
42
+ export type ChatSourceV2 = typeof CHAT_SOURCES_V2[number];
43
+ export declare const CHAT_BUBBLE_STATES_V2: readonly ["draft", "streaming", "final", "removed"];
44
+ export type ChatBubbleStateV2 = typeof CHAT_BUBBLE_STATES_V2[number];
45
+ /**
46
+ * Stable identity of a single chat message. All fields are required in v2.
47
+ *
48
+ * - providerUnitKey: provider-owned canonical id. Must be derivable from
49
+ * provider primitives (native message id, turn id, bubble id), NOT from
50
+ * array index or content hash. Stable across re-reads of the same logical
51
+ * message even if neighbours change.
52
+ * - bubbleId: dashboard-owned bubble identity. May equal providerUnitKey when
53
+ * the provider already exposes a bubble-grained id; otherwise daemon
54
+ * derives it deterministically from providerUnitKey (e.g. `bubble:${key}`).
55
+ * - sequence: monotonic integer per (sessionId, source). Strictly increasing
56
+ * over the lifetime of the session. Used for snapshot diffs and dedup.
57
+ * - turnKey: stable identifier for the conversation turn this message belongs
58
+ * to. Required so consumers can group messages without re-deriving turns.
59
+ */
60
+ export interface MessageIdentityV2 {
61
+ providerUnitKey: string;
62
+ bubbleId: string;
63
+ sequence: number;
64
+ turnKey: string;
65
+ }
66
+ /**
67
+ * Producer-asserted wall-clock time (ms since epoch). Forward jumps are
68
+ * permitted; consumers MUST NOT rely on this for ordering.
69
+ */
70
+ export type ChatTimestampMs = number;
71
+ /**
72
+ * Monotonic ordering value (ms since epoch, but assigned by the daemon at
73
+ * ingest to guarantee monotonicity even if the producer's wall clock skews).
74
+ * Used by snapshot diffs in place of timestamp.
75
+ */
76
+ export type ChatOrderingTimestampMs = number;
77
+ export interface ChatMessageV2 extends MessageIdentityV2 {
78
+ role: ChatRoleV2;
79
+ kind: ChatMessageKindV2;
80
+ content: string | MessagePart[];
81
+ bubbleState: ChatBubbleStateV2;
82
+ timestamp: ChatTimestampMs;
83
+ orderingTimestamp: ChatOrderingTimestampMs;
84
+ visibility: ChatVisibilityV2;
85
+ audience: ChatAudienceV2;
86
+ source: ChatSourceV2;
87
+ /** Sender display name (for shared sessions). Empty string when unused. */
88
+ senderName: string;
89
+ /** Tool calls associated with this message. Empty array when none. */
90
+ toolCalls: ToolCallInfo[];
91
+ /** Producer-defined metadata. Daemon never inspects this except for passthrough. */
92
+ meta: Readonly<Record<string, unknown>>;
93
+ }
94
+ export interface WorkspaceContextV2 {
95
+ /** Absolute realpath of the workspace the session is reading from. */
96
+ workspacePath: string;
97
+ /** Workspace the session was intended to operate on (may differ during cross-workspace ops). */
98
+ intendedWorkspacePath: string;
99
+ }
100
+ export interface SessionContextV2 {
101
+ /** Provider-owned session id (e.g. claude.jsonl uuid, codex session_meta.id). */
102
+ providerSessionId: string;
103
+ /** Optional daemon-side history alias used to disambiguate within a workspace. */
104
+ historySessionId?: string;
105
+ }
106
+ /**
107
+ * v1 allowed `coverage='full'` to coexist with `partialReason`/`unavailableReason`,
108
+ * which is a contract lie. v2 makes the three states mutually exclusive.
109
+ */
110
+ export type CoverageHintV2 = {
111
+ kind: 'full';
112
+ } | {
113
+ kind: 'tail';
114
+ tailMessageCount: number;
115
+ } | {
116
+ kind: 'current-turn';
117
+ turnKey: string;
118
+ } | {
119
+ kind: 'partial';
120
+ partialReason: string;
121
+ } | {
122
+ kind: 'unavailable';
123
+ unavailableReason: string;
124
+ };
125
+ export type CanonicalHistoryModeV2 = 'native-source' | 'disabled' | 'materialized-mirror';
126
+ export interface CanonicalHistoryDeclarationV2 {
127
+ contractVersion: ChatContractVersion;
128
+ format: string;
129
+ mode: CanonicalHistoryModeV2;
130
+ watchPath?: string;
131
+ scripts: {
132
+ readSession: string;
133
+ listSessions: string;
134
+ };
135
+ }
136
+ export type ReadChatStatusV2 = 'idle' | 'generating' | 'waiting_approval' | 'error' | 'panel_hidden' | 'streaming';
137
+ export type ReadChatTurnStatusV2 = 'open' | 'waiting_approval' | 'complete' | 'error';
138
+ export interface ReadChatResultV2 {
139
+ contractVersion: typeof CHAT_CONTRACT_VERSION_V2;
140
+ workspace: WorkspaceContextV2;
141
+ session: SessionContextV2;
142
+ coverage: CoverageHintV2;
143
+ status: ReadChatStatusV2;
144
+ messages: ChatMessageV2[];
145
+ currentTurnId: string;
146
+ turnStatus: ReadChatTurnStatusV2;
147
+ transcriptAuthority: 'provider' | 'daemon';
148
+ }
149
+ export declare class ChatContractViolationError extends Error {
150
+ readonly violationPath: string;
151
+ readonly contractVersion: ChatContractVersion;
152
+ constructor(contractVersion: ChatContractVersion, violationPath: string, detail: string);
153
+ }
154
+ /**
155
+ * Validate a v2 read_chat payload. Throws ChatContractViolationError on the
156
+ * first violation. v2 invariants beyond per-field checks:
157
+ * - messages[*].sequence strictly increasing
158
+ * - messages[*].orderingTimestamp monotonic non-decreasing
159
+ * - coverage union is well-formed
160
+ */
161
+ export declare function assertReadChatResultV2Payload(raw: unknown): ReadChatResultV2;
162
+ export declare function isSupportedChatContractVersion(value: unknown): value is ChatContractVersion;
163
+ /**
164
+ * Read a provider's declared chat contract version from its parsed
165
+ * provider.json `canonicalHistory.contractVersion` field.
166
+ *
167
+ * - Absent or unrecognized → treated as v1 (legacy behaviour preserved during
168
+ * the A1 transition). A2 will tighten this to reject unsupported versions
169
+ * at provider load time.
170
+ * - Present and supported → returned as-is.
171
+ *
172
+ * The returned version drives which validator (assertReadChatResultV2Payload
173
+ * vs the legacy validateReadChatResultPayload) processes the provider's
174
+ * read_chat output.
175
+ */
176
+ export declare function readDeclaredChatContractVersion(canonicalHistory: unknown): ChatContractVersion;
@@ -0,0 +1,48 @@
1
+ export interface InteractivePrompt {
2
+ promptId: string;
3
+ origin: 'cli' | 'mcp' | 'agent';
4
+ providerType: string;
5
+ createdAt: number;
6
+ questions: InteractiveQuestion[];
7
+ }
8
+ export interface InteractiveQuestion {
9
+ questionId: string;
10
+ question: string;
11
+ header?: string;
12
+ multiSelect: boolean;
13
+ options: InteractiveOption[];
14
+ allowFreeform?: boolean;
15
+ }
16
+ export interface InteractiveOption {
17
+ label: string;
18
+ description?: string;
19
+ preview?: string;
20
+ }
21
+ export interface InteractivePromptResponse {
22
+ promptId: string;
23
+ answers: Record<string, InteractiveAnswer>;
24
+ }
25
+ export interface InteractiveAnswer {
26
+ selectedLabels: string[];
27
+ freeformText?: string;
28
+ }
29
+ export declare function normalizeInteractivePrompt(raw: unknown): InteractivePrompt | null;
30
+ export declare function normalizeInteractivePromptResponse(raw: unknown): InteractivePromptResponse;
31
+ export declare function buildClaudeInteractiveToolResult(response: InteractivePromptResponse): string;
32
+ export interface ClaudeInteractiveTuiPage {
33
+ screenText: string;
34
+ header?: string;
35
+ }
36
+ export declare function detectClaudeAskUserQuestionPromptFromTuiPages(pages: ClaudeInteractiveTuiPage[], options: {
37
+ promptId: string;
38
+ providerType?: string;
39
+ createdAt?: number;
40
+ }): InteractivePrompt | null;
41
+ export declare function buildClaudeInteractiveTuiAnswerSteps(prompt: InteractivePrompt, response: InteractivePromptResponse): string[];
42
+ export declare function interactivePromptFromClaudeAskUserQuestion(input: unknown, options: {
43
+ promptId: string;
44
+ providerType: string;
45
+ createdAt?: number;
46
+ origin?: InteractivePrompt['origin'];
47
+ }): InteractivePrompt | null;
48
+ export declare function detectClaudeAskUserQuestionPromptFromJson(value: unknown, providerType?: string): InteractivePrompt | null;
@@ -11,6 +11,7 @@
11
11
  * IMPORTANT: This file must remain runtime-free (types only).
12
12
  */
13
13
  import type { GitRepoStatus, GitCompactSummary } from './git/git-types.js';
14
+ import type { MeshMissionSummary } from './mesh/mesh-missions.js';
14
15
  export interface RepoMesh {
15
16
  id: string;
16
17
  name: string;
@@ -19,10 +20,37 @@ export interface RepoMesh {
19
20
  defaultBranch?: string;
20
21
  policy: RepoMeshPolicy;
21
22
  coordinator: RepoMeshCoordinatorConfig;
23
+ meshHost?: RepoMeshHostMetadata;
22
24
  projectContext: ProjectContextSnapshot;
23
25
  nodes: RepoMeshNode[];
24
26
  status: 'active' | 'archived' | 'deleted';
25
27
  }
28
+ export type RepoMeshDaemonRole = 'host' | 'member';
29
+ export interface RepoMeshHostPairingMetadata {
30
+ status: 'not_configured' | 'pairing' | 'paired' | 'rejected' | 'revoked';
31
+ tokenId?: string;
32
+ joinedAt?: string;
33
+ lastPairedAt?: string;
34
+ lastRejectedAt?: string;
35
+ expiresAt?: string;
36
+ }
37
+ export interface RepoMeshHostMetadata {
38
+ /** Local daemon role for this mesh. Missing metadata defaults to host for standalone compatibility. */
39
+ role: RepoMeshDaemonRole;
40
+ /** Daemon that owns mesh truth/status/git/queue/session/ledger/coordinator ownership. */
41
+ hostDaemonId?: string;
42
+ /** Mesh node that represents the host daemon, when known. */
43
+ hostNodeId?: string;
44
+ /** Future standalone manual pairing endpoint entered by member daemons. */
45
+ hostAddress?: string;
46
+ /** Redacted pairing state only; raw join tokens must not be persisted here. */
47
+ pairing?: RepoMeshHostPairingMetadata;
48
+ }
49
+ export interface RepoMeshHostStatus extends RepoMeshHostMetadata {
50
+ canOwnCoordinator: boolean;
51
+ canOwnQueue: boolean;
52
+ defaulted: boolean;
53
+ }
26
54
  export interface RepoMeshNode {
27
55
  id: string;
28
56
  daemonId: string;
@@ -37,15 +65,31 @@ export interface RepoMeshNode {
37
65
  effectiveCapabilities: RepoMeshNodeCapabilities;
38
66
  policy: RepoMeshNodePolicy;
39
67
  health: RepoMeshNodeHealth;
68
+ role?: RepoMeshDaemonRole;
40
69
  status: 'enabled' | 'disabled' | 'removed';
41
70
  }
42
71
  export type RepoMeshNodeHealth = 'online' | 'offline' | 'degraded' | 'dirty' | 'wrong_branch' | 'unknown';
43
72
  export type RepoMeshSessionCleanupMode = 'preserve' | 'stop' | 'delete_stopped' | 'stop_and_delete';
44
73
  export type RepoMeshSpawnedSessionVisibility = 'visible' | 'hidden';
74
+ export interface RepoMeshAutoFastForwardPolicy {
75
+ /** Defaults to true. Set false to disable daemon-initiated idle fast-forwards. */
76
+ enabled: boolean;
77
+ /** Maximum behind count eligible for automatic fast-forward. Missing means no limit. */
78
+ maxBehind?: number;
79
+ /** Defaults to true. Require submodule status to be clean before automatic fast-forward. */
80
+ requireCleanSubmodules?: boolean;
81
+ }
45
82
  export interface RepoMeshPolicy {
46
83
  requirePreTaskCheckpoint: boolean;
47
84
  requirePostTaskCheckpoint: boolean;
48
85
  requireApprovalForPush: boolean;
86
+ /**
87
+ * Narrow Refinery opt-in: when validation and patch-equivalence have passed,
88
+ * allow Refinery to publish submodule gitlink commits to each submodule's
89
+ * configured remote main branch with a non-force push, then verify reachability.
90
+ * Defaults to false; root branch pushes/merges are not affected.
91
+ */
92
+ allowAutoPublishSubmoduleMainCommits?: boolean;
49
93
  requireApprovalForDestructiveGit: boolean;
50
94
  dirtyWorkspaceBehavior: 'block' | 'warn' | 'checkpoint_then_continue';
51
95
  maxParallelTasks: number;
@@ -56,12 +100,28 @@ export interface RepoMeshPolicy {
56
100
  * watch-the-agents behavior; hidden sessions remain discoverable and manually openable.
57
101
  */
58
102
  spawnedSessionVisibility?: RepoMeshSpawnedSessionVisibility;
103
+ /**
104
+ * Whether worker sessions the coordinator dispatches should auto-approve agent
105
+ * approval modals (tool/command prompts) without firing a user-facing approval
106
+ * notification. Delegated workers are coordinator-driven, so a human should not
107
+ * have to approve each one; defaults to true. Set to false to make delegated
108
+ * worker sessions stop at approval modals like an interactive session.
109
+ * Stamped into the worker launch settings envelope as `autoApprove`, which wins
110
+ * over the global per-provider-type autoApprove config via the settings merge.
111
+ * A node policy may override this per-node (RepoMeshNodePolicy.delegatedWorkerAutoApprove).
112
+ */
113
+ delegatedWorkerAutoApprove?: boolean;
59
114
  /**
60
115
  * What to do with delegated session-host records for a node when it is removed.
61
116
  * Defaults to 'preserve' so completed work can be reviewed later and live
62
117
  * runtimes are never stopped/deleted unless the mesh owner opts in.
63
118
  */
64
119
  sessionCleanupOnNodeRemove?: RepoMeshSessionCleanupMode;
120
+ /**
121
+ * Daemon-initiated fast-forward for idle clean nodes that are only behind
122
+ * their tracked upstream. Defaults to enabled.
123
+ */
124
+ autoFastForward?: RepoMeshAutoFastForwardPolicy;
65
125
  /**
66
126
  * Maximum number of automatic retry recommendations for a failed task on the
67
127
  * same node before the daemon advises the coordinator to escalate or reassign.
@@ -81,6 +141,11 @@ export interface RepoMeshNodePolicy {
81
141
  maxConcurrentSessions?: number;
82
142
  /** Ordered provider preference used when mesh_launch_session omits an explicit type. */
83
143
  providerPriority?: string[];
144
+ /**
145
+ * Per-node override for RepoMeshPolicy.delegatedWorkerAutoApprove. When set, takes
146
+ * precedence over the mesh-level policy for worker sessions launched onto this node.
147
+ */
148
+ delegatedWorkerAutoApprove?: boolean;
84
149
  /**
85
150
  * Optional associated/external repos that must be checked alongside this node.
86
151
  * These are explicit policy/config entries only; Repo Mesh does not auto-discover
@@ -104,6 +169,14 @@ export interface RepoMeshNodePolicy {
104
169
  initSubmodulesOnClone?: boolean;
105
170
  }
106
171
  export declare const DEFAULT_MESH_POLICY: RepoMeshPolicy;
172
+ /**
173
+ * Resolve whether a delegated worker session launched onto `nodePolicy` (within a mesh
174
+ * governed by `meshPolicy`) should auto-approve. Precedence: node override → mesh policy
175
+ * → default true. The result is stamped into the worker launch settings envelope as
176
+ * `autoApprove`; it wins over the global per-provider-type autoApprove config because the
177
+ * launch path merges the envelope as a settingsOverride on top of the provider defaults.
178
+ */
179
+ export declare function resolveDelegatedWorkerAutoApprove(meshPolicy?: Pick<RepoMeshPolicy, 'delegatedWorkerAutoApprove'> | null, nodePolicy?: Pick<RepoMeshNodePolicy, 'delegatedWorkerAutoApprove'> | null): boolean;
107
180
  export interface RepoMeshNodeCapabilities {
108
181
  platform?: string;
109
182
  packageManagers?: string[];
@@ -167,7 +240,28 @@ export interface RepoMeshCoordinatorConfig {
167
240
  providerType?: string;
168
241
  /** Preferred node to run coordinator on (null = auto) */
169
242
  preferredNodeId?: string;
170
- /** Additional system prompt context for coordinator */
243
+ /**
244
+ * Full mesh-level override for the coordinator system prompt. When set,
245
+ * replaces the daemon's rendered default and any user-file override
246
+ * (~/.adhdev/coordinator-prompts/<cli>.md). The per-launch
247
+ * extraSystemPrompt still composes on top — it always lands last as
248
+ * Additional Context. Supports the same {{placeholders}} the daemon's
249
+ * default template uses ({{meshName}}, {{repo}}, {{nodes}}, …).
250
+ */
251
+ systemPromptOverride?: string;
252
+ /**
253
+ * Mesh-level append. Composes after whichever base prompt won
254
+ * (override → user-file override → daemon default). Use this when you
255
+ * want extra rules for THIS mesh but otherwise the standard prompt is
256
+ * fine. Stacks with the user-file append (`<cli>.append.md`) — both
257
+ * apply if both are set.
258
+ */
259
+ systemPromptAppend?: string;
260
+ /**
261
+ * @deprecated Use systemPromptAppend. Kept as a fallback alias so
262
+ * existing meshes.json files keep working without a migration step;
263
+ * the daemon prefers systemPromptAppend when both are present.
264
+ */
171
265
  systemPromptSuffix?: string;
172
266
  }
173
267
  /**
@@ -185,6 +279,7 @@ export interface LocalMeshEntry {
185
279
  defaultBranch?: string;
186
280
  policy: RepoMeshPolicy;
187
281
  coordinator: RepoMeshCoordinatorConfig;
282
+ meshHost?: RepoMeshHostMetadata;
188
283
  nodes: LocalMeshNodeEntry[];
189
284
  createdAt: string;
190
285
  updatedAt: string;
@@ -196,16 +291,42 @@ export interface LocalMeshNodeEntry {
196
291
  daemonId?: string;
197
292
  /** Machine registry ID that owns this workspace, when known. */
198
293
  machineId?: string;
294
+ /** Operator-defined capability tags used by mesh queue matching. */
295
+ capabilities?: string[];
199
296
  userOverrides: Partial<RepoMeshNodeCapabilities>;
200
297
  policy: RepoMeshNodePolicy;
298
+ /**
299
+ * Per-node instruction surfaced in the coordinator prompt so the LLM
300
+ * knows what each node is for (e.g. "this is the staging mirror — run
301
+ * only smoke tests here", or "use opus on this node, sonnet elsewhere").
302
+ * Empty/missing: omitted silently from the rendered prompt, no rule
303
+ * line about it gets added. The coordinator forwards/honors it when
304
+ * delegating; we don't enforce it at the daemon level.
305
+ */
306
+ systemPrompt?: string;
201
307
  /** For single-machine mesh: same daemon, different worktree */
202
308
  isLocalWorktree?: boolean;
203
309
  /** Branch this worktree tracks (set when created via clone_mesh_node) */
204
310
  worktreeBranch?: string;
205
311
  /** Node ID this worktree was cloned from */
206
312
  clonedFromNodeId?: string;
313
+ /** Repo-local preparation result for ADHDev-created worktree nodes. */
314
+ worktreeBootstrap?: {
315
+ status: 'ready' | 'running' | 'failed' | 'not_configured' | 'disabled' | 'stale';
316
+ required?: boolean;
317
+ configSource?: string;
318
+ configSourceType?: string;
319
+ startedAt?: string;
320
+ completedAt?: string;
321
+ lastCommand?: string;
322
+ exitCode?: number | null;
323
+ error?: string;
324
+ commandsRun?: Array<Record<string, unknown>>;
325
+ staleInputs?: string[];
326
+ };
207
327
  /** Optional associated/external repos configured as node metadata. */
208
328
  relatedRepos?: RepoMeshRelatedRepo[];
329
+ role?: RepoMeshDaemonRole;
209
330
  }
210
331
  export interface RepoMeshStatus {
211
332
  meshId: string;
@@ -213,22 +334,20 @@ export interface RepoMeshStatus {
213
334
  repoIdentity: string;
214
335
  defaultBranch?: string;
215
336
  refreshedAt: string;
337
+ meshHost?: RepoMeshHostStatus;
216
338
  nodes: RepoMeshNodeStatus[];
217
339
  queue?: RepoMeshQueueStatus;
218
340
  ledger?: RepoMeshLedgerStatus;
341
+ /**
342
+ * Mission summaries for the dashboard overview. Active/paused missions plus a
343
+ * capped, newest-first slice of completed/abandoned history. Omitted by older
344
+ * daemons — the dashboard must treat this as optional and render an empty
345
+ * state when absent. Split on each entry's `status` for live vs. history.
346
+ */
347
+ missions?: MeshMissionSummary[];
219
348
  }
220
- export interface RepoMeshSessionStatus {
221
- sessionId: string;
222
- providerType?: string;
223
- state?: string;
224
- lifecycle?: 'starting' | 'running' | 'stopping' | 'stopped' | 'failed' | 'interrupted';
225
- surfaceKind?: 'live_runtime' | 'recovery_snapshot' | 'inactive_record';
226
- recoveryState?: string | null;
227
- workspace?: string | null;
228
- title?: string | null;
229
- lastActivityAt?: string | null;
230
- isCached?: boolean;
231
- }
349
+ export type { RepoMeshSessionStatus } from '@adhdev/mesh-shared';
350
+ import type { RepoMeshSessionStatus } from '@adhdev/mesh-shared';
232
351
  export type RepoMeshPeerConnectionState = 'self' | 'connected' | 'connecting' | 'disconnected' | 'failed' | 'closed' | 'unknown';
233
352
  export type RepoMeshPeerConnectionTransport = 'local' | 'direct' | 'relay' | 'unknown';
234
353
  export interface RepoMeshPeerConnectionStatus {
@@ -249,16 +368,33 @@ export interface RepoMeshNodeStatus {
249
368
  repoRoot?: string;
250
369
  daemonId?: string;
251
370
  machineId?: string;
371
+ role?: RepoMeshDaemonRole;
252
372
  machineStatus?: string;
253
373
  isLocalWorktree?: boolean;
254
374
  worktreeBranch?: string;
375
+ /** Mirrored from LocalMeshNodeEntry.systemPrompt for coordinator-prompt rendering. */
376
+ systemPrompt?: string;
255
377
  health: RepoMeshNodeHealth;
256
378
  git?: GitRepoStatus;
379
+ /**
380
+ * True when the selected coordinator has evidence that a peer git probe is still
381
+ * in flight or just timed out during initial mesh handshake, so callers should
382
+ * treat missing git data as pending instead of authoritative absence.
383
+ */
384
+ gitProbePending?: boolean;
257
385
  providers: string[];
258
386
  activeSessions: string[];
259
387
  activeSessionDetails?: RepoMeshSessionStatus[];
260
388
  providerPriority?: string[];
261
389
  launchReady?: boolean;
390
+ /** True when the node is clean, ahead=0, behind>0, and safe for fast-forward consideration. */
391
+ autoFastForwardEligible?: boolean;
392
+ /** Coordinator-facing suggestion for obvious clean catch-up work. */
393
+ suggestedAction?: 'auto_fast_forward';
394
+ worktreeBootstrap?: LocalMeshNodeEntry['worktreeBootstrap'];
395
+ launchBlockedReason?: string;
396
+ launchBlockedMessage?: string;
397
+ recoveryHint?: string;
262
398
  lastSeenAt?: string;
263
399
  updatedAt?: string;
264
400
  connection?: RepoMeshPeerConnectionStatus;
@@ -346,3 +482,8 @@ export interface RepoMeshLedgerStatus {
346
482
  entries: RepoMeshLedgerEntryStatus[];
347
483
  summary: RepoMeshLedgerSummaryStatus;
348
484
  }
485
+ export interface MeshAsyncJobLifecycle {
486
+ startedAt?: string;
487
+ completedAt?: string;
488
+ error?: string;
489
+ }
@@ -7,6 +7,12 @@ export interface SessionRuntimeTarget {
7
7
  cdpManagerKey?: string;
8
8
  adapterKey?: string;
9
9
  instanceKey?: string;
10
+ /** Working directory for CLI/ACP sessions. Used by read_chat to resolve
11
+ * native history when there is no live adapter (e.g. subscription path). */
12
+ workspace?: string;
13
+ /** Wall clock at register time. native-history readers use it as a
14
+ * cutoff so a fresh session can't show records from a prior one. */
15
+ spawnedAtMs?: number;
10
16
  }
11
17
  export declare class SessionRegistry {
12
18
  private readonly bySessionId;
@@ -18,12 +18,10 @@ export interface RuntimeAttachedClient {
18
18
  readOnly: boolean;
19
19
  }
20
20
  /** Session status union (used by SessionEntry.status, legacy recent-launch metadata, etc.) */
21
- export type SessionStatus = 'idle' | 'generating' | 'waiting_approval' | 'error' | 'stopped' | 'starting' | 'panel_hidden' | 'not_monitored' | 'disconnected';
21
+ export type SessionStatus = 'idle' | 'generating' | 'waiting_approval' | 'waiting_choice' | 'error' | 'stopped' | 'starting' | 'panel_hidden' | 'not_monitored' | 'disconnected';
22
22
  /** Inbox bucket categories for recent sessions */
23
23
  export type RecentSessionBucket = 'needs_attention' | 'working' | 'task_complete' | 'idle';
24
24
  /** Terminal backend status */
25
25
  export interface TerminalBackendStatus {
26
- backend: 'xterm' | 'ghostty-vt';
27
- preference: 'auto' | 'xterm' | 'ghostty-vt';
28
- ghosttyAvailable: boolean;
26
+ backend: 'ghostty-vt';
29
27
  }