@decibelsystems/tools 3.0.0 → 3.1.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.
Files changed (254) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/dist/agentCommands.d.ts +0 -1
  3. package/dist/agentCommands.d.ts.map +1 -1
  4. package/dist/agentCommands.js +19 -8
  5. package/dist/agentCommands.js.map +1 -1
  6. package/dist/agentPresence.d.ts +5 -3
  7. package/dist/agentPresence.d.ts.map +1 -1
  8. package/dist/agentPresence.js +20 -29
  9. package/dist/agentPresence.js.map +1 -1
  10. package/dist/architectAdrs.d.ts +13 -1
  11. package/dist/architectAdrs.d.ts.map +1 -1
  12. package/dist/architectAdrs.js +83 -1
  13. package/dist/architectAdrs.js.map +1 -1
  14. package/dist/artifacts.d.ts +60 -0
  15. package/dist/artifacts.d.ts.map +1 -0
  16. package/dist/artifacts.js +208 -0
  17. package/dist/artifacts.js.map +1 -0
  18. package/dist/asks.d.ts +93 -0
  19. package/dist/asks.d.ts.map +1 -0
  20. package/dist/asks.js +383 -0
  21. package/dist/asks.js.map +1 -0
  22. package/dist/chat.d.ts +47 -0
  23. package/dist/chat.d.ts.map +1 -0
  24. package/dist/chat.js +288 -0
  25. package/dist/chat.js.map +1 -0
  26. package/dist/daemon.d.ts +19 -3
  27. package/dist/daemon.d.ts.map +1 -1
  28. package/dist/daemon.js +76 -17
  29. package/dist/daemon.js.map +1 -1
  30. package/dist/daemonConfig.d.ts +22 -0
  31. package/dist/daemonConfig.d.ts.map +1 -1
  32. package/dist/daemonConfig.js +11 -0
  33. package/dist/daemonConfig.js.map +1 -1
  34. package/dist/domain/issue.d.ts +19 -15
  35. package/dist/domain/issue.d.ts.map +1 -1
  36. package/dist/domain/issue.js +4 -32
  37. package/dist/domain/issue.js.map +1 -1
  38. package/dist/domain/issueCodec.d.ts.map +1 -1
  39. package/dist/domain/issueCodec.js +10 -0
  40. package/dist/domain/issueCodec.js.map +1 -1
  41. package/dist/domain/issueRepository.d.ts +35 -2
  42. package/dist/domain/issueRepository.d.ts.map +1 -1
  43. package/dist/domain/issueRepository.js +40 -1
  44. package/dist/domain/issueRepository.js.map +1 -1
  45. package/dist/domain/uid.d.ts +16 -0
  46. package/dist/domain/uid.d.ts.map +1 -0
  47. package/dist/domain/uid.js +43 -0
  48. package/dist/domain/uid.js.map +1 -0
  49. package/dist/facades/definitions.d.ts.map +1 -1
  50. package/dist/facades/definitions.js +46 -3
  51. package/dist/facades/definitions.js.map +1 -1
  52. package/dist/hq/defineAgent.d.ts.map +1 -1
  53. package/dist/hq/defineAgent.js +7 -11
  54. package/dist/hq/defineAgent.js.map +1 -1
  55. package/dist/httpServer.d.ts +3 -0
  56. package/dist/httpServer.d.ts.map +1 -1
  57. package/dist/httpServer.js +224 -43
  58. package/dist/httpServer.js.map +1 -1
  59. package/dist/identity.d.ts +123 -0
  60. package/dist/identity.d.ts.map +1 -0
  61. package/dist/identity.js +312 -0
  62. package/dist/identity.js.map +1 -0
  63. package/dist/kernel.d.ts.map +1 -1
  64. package/dist/kernel.js +24 -1
  65. package/dist/kernel.js.map +1 -1
  66. package/dist/killSwitch.d.ts +117 -0
  67. package/dist/killSwitch.d.ts.map +1 -0
  68. package/dist/killSwitch.js +161 -0
  69. package/dist/killSwitch.js.map +1 -0
  70. package/dist/lib/atomicWrite.d.ts +23 -0
  71. package/dist/lib/atomicWrite.d.ts.map +1 -1
  72. package/dist/lib/atomicWrite.js +84 -0
  73. package/dist/lib/atomicWrite.js.map +1 -1
  74. package/dist/lib/recordIdAllocator.d.ts +21 -5
  75. package/dist/lib/recordIdAllocator.d.ts.map +1 -1
  76. package/dist/lib/recordIdAllocator.js +25 -7
  77. package/dist/lib/recordIdAllocator.js.map +1 -1
  78. package/dist/orgId.d.ts +23 -0
  79. package/dist/orgId.d.ts.map +1 -0
  80. package/dist/orgId.js +73 -0
  81. package/dist/orgId.js.map +1 -0
  82. package/dist/pairCli.d.ts +2 -0
  83. package/dist/pairCli.d.ts.map +1 -0
  84. package/dist/pairCli.js +97 -0
  85. package/dist/pairCli.js.map +1 -0
  86. package/dist/peerBroker.d.ts +40 -0
  87. package/dist/peerBroker.d.ts.map +1 -0
  88. package/dist/peerBroker.js +70 -0
  89. package/dist/peerBroker.js.map +1 -0
  90. package/dist/peerBrokerSupervisor.d.ts +21 -0
  91. package/dist/peerBrokerSupervisor.d.ts.map +1 -0
  92. package/dist/peerBrokerSupervisor.js +131 -0
  93. package/dist/peerBrokerSupervisor.js.map +1 -0
  94. package/dist/projectPaths.d.ts.map +1 -1
  95. package/dist/projectPaths.js +1 -19
  96. package/dist/projectPaths.js.map +1 -1
  97. package/dist/projectRegistry.d.ts +22 -0
  98. package/dist/projectRegistry.d.ts.map +1 -1
  99. package/dist/projectRegistry.js +58 -2
  100. package/dist/projectRegistry.js.map +1 -1
  101. package/dist/pty/boundary.d.ts +39 -0
  102. package/dist/pty/boundary.d.ts.map +1 -0
  103. package/dist/pty/boundary.js +100 -0
  104. package/dist/pty/boundary.js.map +1 -0
  105. package/dist/pty/errors.d.ts +6 -0
  106. package/dist/pty/errors.d.ts.map +1 -0
  107. package/dist/pty/errors.js +12 -0
  108. package/dist/pty/errors.js.map +1 -0
  109. package/dist/pty/fleet.d.ts +159 -0
  110. package/dist/pty/fleet.d.ts.map +1 -0
  111. package/dist/pty/fleet.js +543 -0
  112. package/dist/pty/fleet.js.map +1 -0
  113. package/dist/pty/launchProfile.d.ts +45 -0
  114. package/dist/pty/launchProfile.d.ts.map +1 -0
  115. package/dist/pty/launchProfile.js +149 -0
  116. package/dist/pty/launchProfile.js.map +1 -0
  117. package/dist/pty/openTerminal.d.ts +48 -0
  118. package/dist/pty/openTerminal.d.ts.map +1 -0
  119. package/dist/pty/openTerminal.js +185 -0
  120. package/dist/pty/openTerminal.js.map +1 -0
  121. package/dist/pty/pairDialog.d.ts +16 -0
  122. package/dist/pty/pairDialog.d.ts.map +1 -0
  123. package/dist/pty/pairDialog.js +121 -0
  124. package/dist/pty/pairDialog.js.map +1 -0
  125. package/dist/pty/pairing.d.ts +86 -0
  126. package/dist/pty/pairing.d.ts.map +1 -0
  127. package/dist/pty/pairing.js +351 -0
  128. package/dist/pty/pairing.js.map +1 -0
  129. package/dist/pty/routes.d.ts +49 -0
  130. package/dist/pty/routes.d.ts.map +1 -0
  131. package/dist/pty/routes.js +624 -0
  132. package/dist/pty/routes.js.map +1 -0
  133. package/dist/pty/sessions.d.ts +167 -0
  134. package/dist/pty/sessions.d.ts.map +1 -0
  135. package/dist/pty/sessions.js +513 -0
  136. package/dist/pty/sessions.js.map +1 -0
  137. package/dist/pty/tmux.d.ts +109 -0
  138. package/dist/pty/tmux.d.ts.map +1 -0
  139. package/dist/pty/tmux.js +271 -0
  140. package/dist/pty/tmux.js.map +1 -0
  141. package/dist/roster.d.ts +37 -0
  142. package/dist/roster.d.ts.map +1 -0
  143. package/dist/roster.js +126 -0
  144. package/dist/roster.js.map +1 -0
  145. package/dist/runtime/daemonMeta.d.ts +53 -0
  146. package/dist/runtime/daemonMeta.d.ts.map +1 -0
  147. package/dist/runtime/daemonMeta.js +121 -0
  148. package/dist/runtime/daemonMeta.js.map +1 -0
  149. package/dist/runtime/ensureRuntime.d.ts.map +1 -1
  150. package/dist/runtime/ensureRuntime.js +5 -10
  151. package/dist/runtime/ensureRuntime.js.map +1 -1
  152. package/dist/sentinelIssues.d.ts +16 -0
  153. package/dist/sentinelIssues.d.ts.map +1 -1
  154. package/dist/sentinelIssues.js +42 -1
  155. package/dist/sentinelIssues.js.map +1 -1
  156. package/dist/server.js +66 -5
  157. package/dist/server.js.map +1 -1
  158. package/dist/toolConfig.d.ts.map +1 -1
  159. package/dist/toolConfig.js +12 -0
  160. package/dist/toolConfig.js.map +1 -1
  161. package/dist/tools/agentic/agentQueue.d.ts.map +1 -1
  162. package/dist/tools/agentic/agentQueue.js +4 -0
  163. package/dist/tools/agentic/agentQueue.js.map +1 -1
  164. package/dist/tools/architect/index.d.ts +1 -0
  165. package/dist/tools/architect/index.d.ts.map +1 -1
  166. package/dist/tools/architect/index.js +45 -1
  167. package/dist/tools/architect/index.js.map +1 -1
  168. package/dist/tools/architect.d.ts.map +1 -1
  169. package/dist/tools/architect.js +59 -8
  170. package/dist/tools/architect.js.map +1 -1
  171. package/dist/tools/artifacts.d.ts +5 -0
  172. package/dist/tools/artifacts.d.ts.map +1 -0
  173. package/dist/tools/artifacts.js +89 -0
  174. package/dist/tools/artifacts.js.map +1 -0
  175. package/dist/tools/asks.d.ts +6 -0
  176. package/dist/tools/asks.d.ts.map +1 -0
  177. package/dist/tools/asks.js +104 -0
  178. package/dist/tools/asks.js.map +1 -0
  179. package/dist/tools/coordinator/index.d.ts +1 -0
  180. package/dist/tools/coordinator/index.d.ts.map +1 -1
  181. package/dist/tools/coordinator/index.js +42 -2
  182. package/dist/tools/coordinator/index.js.map +1 -1
  183. package/dist/tools/data-inspector.d.ts +1 -1
  184. package/dist/tools/data-inspector.d.ts.map +1 -1
  185. package/dist/tools/data-inspector.js +1 -1
  186. package/dist/tools/data-inspector.js.map +1 -1
  187. package/dist/tools/dojo/index.d.ts.map +1 -1
  188. package/dist/tools/dojo/index.js +52 -3
  189. package/dist/tools/dojo/index.js.map +1 -1
  190. package/dist/tools/dojo.d.ts +62 -1
  191. package/dist/tools/dojo.d.ts.map +1 -1
  192. package/dist/tools/dojo.js +84 -1
  193. package/dist/tools/dojo.js.map +1 -1
  194. package/dist/tools/guardian.d.ts +7 -0
  195. package/dist/tools/guardian.d.ts.map +1 -1
  196. package/dist/tools/guardian.js +146 -9
  197. package/dist/tools/guardian.js.map +1 -1
  198. package/dist/tools/index.d.ts.map +1 -1
  199. package/dist/tools/index.js +6 -0
  200. package/dist/tools/index.js.map +1 -1
  201. package/dist/tools/killswitch/index.d.ts +13 -0
  202. package/dist/tools/killswitch/index.d.ts.map +1 -0
  203. package/dist/tools/killswitch/index.js +138 -0
  204. package/dist/tools/killswitch/index.js.map +1 -0
  205. package/dist/tools/oracle/index.d.ts.map +1 -1
  206. package/dist/tools/oracle/index.js +8 -0
  207. package/dist/tools/oracle/index.js.map +1 -1
  208. package/dist/tools/oracle.d.ts +7 -0
  209. package/dist/tools/oracle.d.ts.map +1 -1
  210. package/dist/tools/oracle.js +22 -6
  211. package/dist/tools/oracle.js.map +1 -1
  212. package/dist/tools/provenance.d.ts +11 -2
  213. package/dist/tools/provenance.d.ts.map +1 -1
  214. package/dist/tools/provenance.js +26 -24
  215. package/dist/tools/provenance.js.map +1 -1
  216. package/dist/tools/registry/index.d.ts.map +1 -1
  217. package/dist/tools/registry/index.js +24 -0
  218. package/dist/tools/registry/index.js.map +1 -1
  219. package/dist/tools/sentinel/index.d.ts.map +1 -1
  220. package/dist/tools/sentinel/index.js +54 -2
  221. package/dist/tools/sentinel/index.js.map +1 -1
  222. package/dist/tools/sentinel.d.ts +50 -0
  223. package/dist/tools/sentinel.d.ts.map +1 -1
  224. package/dist/tools/sentinel.js +72 -7
  225. package/dist/tools/sentinel.js.map +1 -1
  226. package/dist/tools/shared/runTracker.d.ts +2 -0
  227. package/dist/tools/shared/runTracker.d.ts.map +1 -1
  228. package/dist/tools/shared/runTracker.js +38 -0
  229. package/dist/tools/shared/runTracker.js.map +1 -1
  230. package/dist/tools/swarm.d.ts +3 -1
  231. package/dist/tools/swarm.d.ts.map +1 -1
  232. package/dist/tools/swarm.js +6 -12
  233. package/dist/tools/swarm.js.map +1 -1
  234. package/dist/tools/voice/index.d.ts +1 -0
  235. package/dist/tools/voice/index.d.ts.map +1 -1
  236. package/dist/tools/voice/index.js +33 -2
  237. package/dist/tools/voice/index.js.map +1 -1
  238. package/dist/tools/voice.d.ts +48 -1
  239. package/dist/tools/voice.d.ts.map +1 -1
  240. package/dist/tools/voice.js +63 -3
  241. package/dist/tools/voice.js.map +1 -1
  242. package/dist/transports/bridge.d.ts.map +1 -1
  243. package/dist/transports/bridge.js +2 -1
  244. package/dist/transports/bridge.js.map +1 -1
  245. package/dist/transports/mcp.d.ts.map +1 -1
  246. package/dist/transports/mcp.js +2 -1
  247. package/dist/transports/mcp.js.map +1 -1
  248. package/dist/version.d.ts +5 -0
  249. package/dist/version.d.ts.map +1 -0
  250. package/dist/version.js +23 -0
  251. package/dist/version.js.map +1 -0
  252. package/package.json +13 -2
  253. package/templates/AGENT.md +3 -0
  254. package/templates/CLAUDE-decibel.md +11 -0
package/dist/chat.js ADDED
@@ -0,0 +1,288 @@
1
+ // ============================================================================
2
+ // HQ chat — one inbox for the human, every live session reports in
3
+ // ============================================================================
4
+ // decibel-hq EPIC-0016. The daemon registers ONE claude-peers broker peer that
5
+ // stands for the human (Ben) and polls its inbox, so any session can
6
+ // send_message to it, and HQ can read and answer through /chat.
7
+ //
8
+ // The broker keys peers by pid and checks liveness with kill(pid, 0), so the
9
+ // human peer is registered under the daemon's own pid. The broker picks the id
10
+ // (hq-chat-xxxx) and a new one on every registration, so it is never cached
11
+ // by anyone: GET /chat reports the current one.
12
+ //
13
+ // Trust: inbound text is from other sessions and is untrusted data. Outbound
14
+ // text reaches those sessions as a peer message, which their harness also
15
+ // treats as untrusted data, NOT as an instruction from the user. That is the
16
+ // boundary working; nothing here tries to make chat text look authoritative.
17
+ //
18
+ // Local only (v1): ~/.decibel/chat.jsonl at 0600, and separate from
19
+ // hq.agent_commands. One exception, approved by Ben 2026-10-08: claude.ai
20
+ // artifact links in inbound messages are registered into hq.artifacts with a
21
+ // short sanitized title and {chat_id, peer_id} (src/artifacts.ts). The message
22
+ // text itself never leaves the machine.
23
+ // ============================================================================
24
+ import { appendFileSync, chmodSync, existsSync, mkdirSync, readFileSync } from 'fs';
25
+ import { homedir } from 'os';
26
+ import { join } from 'path';
27
+ import { log } from './config.js';
28
+ import { fetchPeers, brokerRegister, brokerHeartbeat, brokerUnregister, brokerPoll, brokerSend, getHumanPeerId, setHumanPeerId, } from './peerBroker.js';
29
+ import { listProjects } from './projectRegistry.js';
30
+ import { projectForPath } from './pty/sessions.js';
31
+ import { harvestChatMessage } from './artifacts.js';
32
+ export const CHAT_TEXT_MAX_BYTES = 4096;
33
+ const POLL_MS = 2_000;
34
+ const HEARTBEAT_MS = 15_000;
35
+ const PRESENCE_CHECK_MS = 30_000;
36
+ /** Messages kept in memory for GET /chat; older ones stay in the file. */
37
+ const MEMORY_CAP = 5_000;
38
+ export const HUMAN_SUMMARY = 'HQ chat inbox, read by Ben (the human) in HQ. Send status reports and replies here.';
39
+ // ----------------------------------------------------------------------------
40
+ // Paths (resolved per call so tests can move HOME)
41
+ // ----------------------------------------------------------------------------
42
+ function decibelHome() {
43
+ return join(homedir(), '.decibel');
44
+ }
45
+ export function chatLogPath() {
46
+ return join(decibelHome(), 'chat.jsonl');
47
+ }
48
+ function humanCwd() {
49
+ return join(decibelHome(), 'hq-chat');
50
+ }
51
+ // ----------------------------------------------------------------------------
52
+ // Log
53
+ // ----------------------------------------------------------------------------
54
+ let messages = [];
55
+ let lastId = 0;
56
+ let loaded = false;
57
+ function loadLog() {
58
+ if (loaded)
59
+ return;
60
+ loaded = true;
61
+ const p = chatLogPath();
62
+ if (!existsSync(p))
63
+ return;
64
+ const all = [];
65
+ let bad = 0;
66
+ for (const line of readFileSync(p, 'utf-8').split('\n')) {
67
+ if (!line.trim())
68
+ continue;
69
+ try {
70
+ const m = JSON.parse(line);
71
+ if (typeof m.id === 'number') {
72
+ all.push(m);
73
+ if (m.id > lastId)
74
+ lastId = m.id;
75
+ }
76
+ else
77
+ bad++;
78
+ }
79
+ catch {
80
+ bad++;
81
+ }
82
+ }
83
+ // Say so rather than silently shrinking the history.
84
+ if (bad)
85
+ log(`Chat: skipped ${bad} unreadable line(s) in ${p}`);
86
+ messages = all.slice(-MEMORY_CAP);
87
+ }
88
+ function append(m) {
89
+ loadLog();
90
+ const msg = { id: ++lastId, ...m };
91
+ const p = chatLogPath();
92
+ mkdirSync(decibelHome(), { recursive: true });
93
+ const fresh = !existsSync(p);
94
+ appendFileSync(p, JSON.stringify(msg) + '\n', { mode: 0o600 });
95
+ if (fresh)
96
+ chmodSync(p, 0o600);
97
+ messages.push(msg);
98
+ if (messages.length > MEMORY_CAP)
99
+ messages = messages.slice(-MEMORY_CAP);
100
+ return msg;
101
+ }
102
+ export function readChat(since = 0, limit = 200) {
103
+ loadLog();
104
+ const lim = Math.min(Math.max(1, Math.floor(limit) || 200), 1000);
105
+ const after = messages.filter((m) => m.id > since);
106
+ return {
107
+ messages: after.slice(-lim),
108
+ human_peer_id: getHumanPeerId(),
109
+ peer_live: getHumanPeerId() !== null,
110
+ };
111
+ }
112
+ // ----------------------------------------------------------------------------
113
+ // Enrichment
114
+ // ----------------------------------------------------------------------------
115
+ function where(peer) {
116
+ if (!peer)
117
+ return {};
118
+ const out = {};
119
+ if (peer.cwd)
120
+ out.cwd = peer.cwd;
121
+ const root = peer.git_root || peer.cwd;
122
+ if (root) {
123
+ const projects = listProjects()
124
+ .filter((p) => p.available !== false)
125
+ .map((p) => ({ id: p.id, path: p.path }));
126
+ const project = projectForPath(root, projects);
127
+ if (project)
128
+ out.project_id = project.id;
129
+ }
130
+ return out;
131
+ }
132
+ // ----------------------------------------------------------------------------
133
+ // Send
134
+ // ----------------------------------------------------------------------------
135
+ export class ChatError extends Error {
136
+ status;
137
+ code;
138
+ constructor(status, code, message) {
139
+ super(message);
140
+ this.status = status;
141
+ this.code = code;
142
+ }
143
+ }
144
+ export async function sendChat(to, text) {
145
+ if (typeof to !== 'string' || !to)
146
+ throw new ChatError(400, 'BAD_REQUEST', 'to is required: a peer id, or "all".');
147
+ if (typeof text !== 'string' || !text.trim())
148
+ throw new ChatError(400, 'BAD_REQUEST', 'text is required.');
149
+ if (Buffer.byteLength(text, 'utf-8') > CHAT_TEXT_MAX_BYTES) {
150
+ throw new ChatError(413, 'TEXT_TOO_LARGE', `text is limited to ${CHAT_TEXT_MAX_BYTES} bytes.`);
151
+ }
152
+ const from = getHumanPeerId();
153
+ if (!from) {
154
+ throw new ChatError(503, 'CHAT_UNAVAILABLE', 'The HQ chat peer is not registered with the claude-peers broker (is the broker running?).');
155
+ }
156
+ let targets;
157
+ if (to === 'all') {
158
+ targets = (await fetchPeers()).map((p) => p.id).filter((id) => id !== from);
159
+ }
160
+ else {
161
+ if (to === from)
162
+ throw new ChatError(400, 'BAD_REQUEST', 'Cannot send to the HQ chat peer itself.');
163
+ targets = [to];
164
+ }
165
+ const delivered = [];
166
+ const failed = [];
167
+ for (const id of targets) {
168
+ const r = await brokerSend(from, id, text);
169
+ if (r.ok)
170
+ delivered.push(id);
171
+ else
172
+ failed.push({ peer_id: id, error: r.error ?? 'send failed' });
173
+ }
174
+ append({ ts: new Date().toISOString(), dir: 'out', to, text });
175
+ return { ok: failed.length === 0 && delivered.length > 0, delivered, failed };
176
+ }
177
+ // ----------------------------------------------------------------------------
178
+ // Human peer lifecycle + inbox poll
179
+ // ----------------------------------------------------------------------------
180
+ async function register() {
181
+ mkdirSync(humanCwd(), { recursive: true });
182
+ const { id } = await brokerRegister({ pid: process.pid, cwd: humanCwd(), git_root: null, tty: null, summary: HUMAN_SUMMARY });
183
+ if (!id)
184
+ throw new Error('broker returned no id');
185
+ setHumanPeerId(id);
186
+ log(`Chat: registered HQ chat peer ${id}`);
187
+ }
188
+ /** Registered and still known to the broker; re-register when it has been lost. */
189
+ async function ensureRegistered() {
190
+ const id = getHumanPeerId();
191
+ if (id) {
192
+ const peers = await fetchPeers();
193
+ // fetchPeers returns [] when the broker is down; don't churn then.
194
+ if (peers.length === 0 || peers.some((p) => p.id === id))
195
+ return;
196
+ log(`Chat: broker lost HQ chat peer ${id}; re-registering`);
197
+ setHumanPeerId(null);
198
+ }
199
+ await register();
200
+ }
201
+ async function pollOnce() {
202
+ const id = getHumanPeerId();
203
+ if (!id)
204
+ return;
205
+ const inbox = await brokerPoll(id);
206
+ if (!inbox.length)
207
+ return;
208
+ const peers = await fetchPeers();
209
+ const byId = new Map(peers.map((p) => [p.id, p]));
210
+ for (const m of inbox) {
211
+ const msg = append({ ts: m.sent_at || new Date().toISOString(), dir: 'in', peer_id: m.from_id, ...where(byId.get(m.from_id)), text: m.text });
212
+ // Artifact links go to hq.artifacts (decibel-hq EPIC-0019). Fire and
213
+ // forget: the inbox must not wait on Core, and harvest never throws.
214
+ if (msg.text.includes('claude.ai/'))
215
+ void harvestChatMessage(msg);
216
+ }
217
+ }
218
+ /**
219
+ * Every inbound message in the on-disk log, not just the in-memory window.
220
+ * For artifacts.backfill_chat; unreadable lines are skipped as in loadLog.
221
+ */
222
+ export function readAllInbound() {
223
+ const p = chatLogPath();
224
+ if (!existsSync(p))
225
+ return [];
226
+ const out = [];
227
+ for (const line of readFileSync(p, 'utf-8').split('\n')) {
228
+ if (!line.trim())
229
+ continue;
230
+ try {
231
+ const m = JSON.parse(line);
232
+ if (typeof m.id === 'number' && m.dir === 'in' && typeof m.text === 'string')
233
+ out.push(m);
234
+ }
235
+ catch {
236
+ // skipped, as loadLog does
237
+ }
238
+ }
239
+ return out;
240
+ }
241
+ /** Start the chat peer and its loops (daemon mode). Returns a stop function. */
242
+ export function startChat(opts = {}) {
243
+ loadLog();
244
+ let stopped = false;
245
+ const safely = (what, fn) => () => {
246
+ if (stopped)
247
+ return;
248
+ fn().catch((err) => log(`Chat: ${what} failed: ${err instanceof Error ? err.message : String(err)}`));
249
+ };
250
+ safely('register', ensureRegistered)();
251
+ let polling = false;
252
+ const poll = setInterval(() => {
253
+ if (polling || stopped)
254
+ return;
255
+ polling = true;
256
+ pollOnce()
257
+ .catch((err) => log(`Chat: poll failed: ${err instanceof Error ? err.message : String(err)}`))
258
+ .finally(() => {
259
+ polling = false;
260
+ });
261
+ }, opts.pollMs ?? POLL_MS);
262
+ const beat = setInterval(safely('heartbeat', async () => {
263
+ const id = getHumanPeerId();
264
+ if (id)
265
+ await brokerHeartbeat(id);
266
+ }), opts.heartbeatMs ?? HEARTBEAT_MS);
267
+ const presence = setInterval(safely('presence check', ensureRegistered), opts.presenceMs ?? PRESENCE_CHECK_MS);
268
+ for (const t of [poll, beat, presence])
269
+ t.unref?.();
270
+ return () => {
271
+ stopped = true;
272
+ clearInterval(poll);
273
+ clearInterval(beat);
274
+ clearInterval(presence);
275
+ const id = getHumanPeerId();
276
+ setHumanPeerId(null);
277
+ if (id)
278
+ brokerUnregister(id).catch(() => undefined);
279
+ };
280
+ }
281
+ /** Test seam: forget in-memory state so a test can point HOME elsewhere. */
282
+ export function _resetChat() {
283
+ messages = [];
284
+ lastId = 0;
285
+ loaded = false;
286
+ setHumanPeerId(null);
287
+ }
288
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"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"}
package/dist/daemon.d.ts CHANGED
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Create each directory, or say plainly which one could not be created and
3
+ * why. Returns null when all exist. Exported for tests.
4
+ */
5
+ export declare function prepareInstallDirs(dirs: string[]): string | null;
1
6
  /**
2
7
  * Read PID from file. Returns null if file doesn't exist or is invalid.
3
8
  */
@@ -24,10 +29,21 @@ export declare function getLogPath(): string;
24
29
  export declare function rotateLog(filePath: string, maxSizeBytes?: number, maxFiles?: number): boolean;
25
30
  /**
26
31
  * Record the bound port and pid in daemon.meta so clients (HQ, CLI, scripts)
27
- * can discover the daemon without hardcoding 8787. Called after the HTTP
28
- * server has actually bound the port.
32
+ * can discover the daemon without hardcoding a port. Called after the HTTP
33
+ * server has actually bound, and ONLY by the daemon — see daemonMeta.ts for why
34
+ * a plain `--http` run advertising here broke every hook on the machine.
35
+ *
36
+ * Refuses to take discovery from a live process that is not us. Two daemons
37
+ * cannot both be "the" daemon, and the loser of that race used to be whichever
38
+ * one started first, silently. Returns false when it declined.
39
+ */
40
+ export declare function setDaemonPort(port: number): boolean;
41
+ /**
42
+ * Withdraw our advertisement on the way out, so a clean shutdown does not leave
43
+ * clients dialling a port we are no longer serving. Only clears an entry that
44
+ * is ours — a successor that already took over must not be erased.
29
45
  */
30
- export declare function setDaemonPort(port: number): void;
46
+ export declare function clearDaemonPort(): void;
31
47
  /**
32
48
  * Check for crash loop. Returns true if safe to start, false if should exit.
33
49
  * Exits process with code 0 if crash loop detected (tells launchd to stop).
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
package/dist/daemon.js CHANGED
@@ -10,12 +10,15 @@ import { homedir } from 'os';
10
10
  import { execSync } from 'child_process';
11
11
  import { fileURLToPath } from 'url';
12
12
  import { log } from './config.js';
13
+ import { metaPath, daemonStateDir, readDaemonMeta, heldByAnotherProcess, } from './runtime/daemonMeta.js';
13
14
  // ============================================================================
14
15
  // Paths
15
16
  // ============================================================================
16
17
  const DECIBEL_HOME = join(homedir(), '.decibel');
17
- const PID_PATH = join(DECIBEL_HOME, 'daemon.pid');
18
- const LOG_DIR = join(DECIBEL_HOME, 'logs');
18
+ // Pid and logs follow DECIBEL_DAEMON_SIDECAR; the env file stays shared.
19
+ const STATE_DIR = daemonStateDir();
20
+ const PID_PATH = join(STATE_DIR, 'daemon.pid');
21
+ const LOG_DIR = join(STATE_DIR, 'logs');
19
22
  const LOG_PATH = join(LOG_DIR, 'daemon.log');
20
23
  const LAUNCHD_LABEL = 'com.decibel.daemon';
21
24
  const PLIST_NAME = `${LAUNCHD_LABEL}.plist`;
@@ -23,6 +26,25 @@ const LAUNCH_AGENTS_DIR = join(homedir(), 'Library', 'LaunchAgents');
23
26
  const PLIST_DEST = join(LAUNCH_AGENTS_DIR, PLIST_NAME);
24
27
  const SYSTEM_LAUNCH_AGENTS_DIR = '/Library/LaunchAgents';
25
28
  const ENV_FILE_PATH = join(DECIBEL_HOME, 'env');
29
+ /**
30
+ * Create each directory, or say plainly which one could not be created and
31
+ * why. Returns null when all exist. Exported for tests.
32
+ */
33
+ export function prepareInstallDirs(dirs) {
34
+ for (const dir of dirs) {
35
+ try {
36
+ mkdirSync(dir, { recursive: true });
37
+ }
38
+ catch (e) {
39
+ const code = e.code ?? e.message;
40
+ return `Could not create ${dir}: ${code}. ` +
41
+ (code === 'EACCES' || code === 'EPERM'
42
+ ? `Check that you own it (ls -ld "${dir}") and that your home folder is writable.`
43
+ : 'Create it yourself and run the install again.');
44
+ }
45
+ }
46
+ return null;
47
+ }
26
48
  function ensureDir(dir) {
27
49
  if (!existsSync(dir)) {
28
50
  mkdirSync(dir, { recursive: true });
@@ -60,7 +82,7 @@ export function readPid() {
60
82
  * Write current process PID to file.
61
83
  */
62
84
  export function writePid() {
63
- ensureDir(DECIBEL_HOME);
85
+ ensureDir(STATE_DIR);
64
86
  writeFileSync(PID_PATH, String(process.pid), 'utf-8');
65
87
  log(`Daemon: PID ${process.pid} written to ${PID_PATH}`);
66
88
  }
@@ -139,28 +161,36 @@ export function rotateLog(filePath, maxSizeBytes = DEFAULT_MAX_LOG_BYTES, maxFil
139
161
  // ============================================================================
140
162
  // Crash Loop Protection
141
163
  // ============================================================================
142
- const META_PATH = join(DECIBEL_HOME, 'daemon.meta');
143
164
  const MAX_CRASH_COUNT = 5;
144
165
  const CRASH_WINDOW_MS = 60_000; // 60 seconds
145
166
  const HEALTH_RESET_MS = 5 * 60_000; // 5 minutes
146
167
  function readMeta() {
147
- try {
148
- return JSON.parse(readFileSync(META_PATH, 'utf-8'));
149
- }
150
- catch {
151
- return null;
152
- }
168
+ return readDaemonMeta();
153
169
  }
154
170
  function writeMeta(meta) {
155
- ensureDir(DECIBEL_HOME);
156
- writeFileSync(META_PATH, JSON.stringify(meta), 'utf-8');
171
+ ensureDir(STATE_DIR);
172
+ // Merge so crash-loop / reset writes (and a second instance that exits on
173
+ // "already running") don't drop the port/pid setDaemonPort recorded.
174
+ writeFileSync(metaPath(), JSON.stringify({ ...readMeta(), ...meta }), 'utf-8');
157
175
  }
158
176
  /**
159
177
  * Record the bound port and pid in daemon.meta so clients (HQ, CLI, scripts)
160
- * can discover the daemon without hardcoding 8787. Called after the HTTP
161
- * server has actually bound the port.
178
+ * can discover the daemon without hardcoding a port. Called after the HTTP
179
+ * server has actually bound, and ONLY by the daemon — see daemonMeta.ts for why
180
+ * a plain `--http` run advertising here broke every hook on the machine.
181
+ *
182
+ * Refuses to take discovery from a live process that is not us. Two daemons
183
+ * cannot both be "the" daemon, and the loser of that race used to be whichever
184
+ * one started first, silently. Returns false when it declined.
162
185
  */
163
186
  export function setDaemonPort(port) {
187
+ const incumbent = heldByAnotherProcess();
188
+ if (incumbent) {
189
+ log(`Daemon: NOT advertising port ${port} — pid ${incumbent.pid} is alive and already ` +
190
+ `advertising port ${incumbent.port}. Clients keep following it. ` +
191
+ `Stop that process first if this one should own discovery.`);
192
+ return false;
193
+ }
164
194
  const existing = readMeta();
165
195
  writeMeta({
166
196
  started_at: existing?.started_at ?? new Date().toISOString(),
@@ -168,6 +198,25 @@ export function setDaemonPort(port) {
168
198
  port,
169
199
  pid: process.pid,
170
200
  });
201
+ return true;
202
+ }
203
+ /**
204
+ * Withdraw our advertisement on the way out, so a clean shutdown does not leave
205
+ * clients dialling a port we are no longer serving. Only clears an entry that
206
+ * is ours — a successor that already took over must not be erased.
207
+ */
208
+ export function clearDaemonPort() {
209
+ const meta = readMeta();
210
+ if (!meta || meta.pid !== process.pid)
211
+ return;
212
+ try {
213
+ const { port: _port, pid: _pid, ...rest } = meta;
214
+ writeFileSync(metaPath(), JSON.stringify(rest), 'utf-8');
215
+ log('Daemon: withdrew port advertisement from daemon.meta');
216
+ }
217
+ catch (err) {
218
+ log(`Daemon: failed to withdraw advertisement: ${err instanceof Error ? err.message : String(err)}`);
219
+ }
171
220
  }
172
221
  /**
173
222
  * Check for crash loop. Returns true if safe to start, false if should exit.
@@ -387,9 +436,19 @@ export function installLaunchd(options) {
387
436
  };
388
437
  }
389
438
  const { plist, serverPath, port } = renderPlist(options);
390
- // Write to LaunchAgents
391
- ensureDir(LAUNCH_AGENTS_DIR);
392
- writeFileSync(PLIST_DEST, plist, 'utf-8');
439
+ // Every directory the job needs, BEFORE launchd sees it. launchd opens the
440
+ // plist's StandardOutPath/StandardErrorPath (in LOG_DIR) itself, before the
441
+ // daemon runs: on a fresh machine with no ~/.decibel the job fails to start
442
+ // and nothing says why (ISS-0231, first seen on a beta tester's new VM user).
443
+ const prep = prepareInstallDirs([LAUNCH_AGENTS_DIR, STATE_DIR, LOG_DIR]);
444
+ if (prep)
445
+ return { installed: false, path: PLIST_DEST, message: prep };
446
+ try {
447
+ writeFileSync(PLIST_DEST, plist, 'utf-8');
448
+ }
449
+ catch (e) {
450
+ return { installed: false, path: PLIST_DEST, message: `Could not write ${PLIST_DEST}: ${e.code ?? e.message}.` };
451
+ }
393
452
  // Reload rather than load: bootstrap refuses a label that is already present,
394
453
  // and a reinstall must pick up the plist we just wrote.
395
454
  const domain = launchdDomain();
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,28 @@ export interface DaemonConfig {
40
40
  extensions?: {
41
41
  allow?: string[];
42
42
  };
43
+ /**
44
+ * Hosted sessions (ADR-0012 / decibel-hq EPIC-0015). The session WRITE routes
45
+ * — attach-token, control, spawn, WS attach — can start `claude` and type into
46
+ * it, so they are gated on their own bearer rather than the daemon's, which is
47
+ * usually unset on a localhost daemon. No token = those routes fail closed.
48
+ * The token is a secret (POL-0002): it never reaches a browser; the HQ dev
49
+ * proxy injects it server-side.
50
+ */
51
+ sessions?: {
52
+ token?: string;
53
+ allowed_origins?: string[];
54
+ };
55
+ /**
56
+ * claude-peers broker supervision (ISS-0193). When `broker.command` is set,
57
+ * the daemon keeps the broker on 127.0.0.1:7899 alive, starting it detached
58
+ * when /health does not answer. Absolute paths only.
59
+ */
60
+ peers?: {
61
+ broker?: {
62
+ command?: string[];
63
+ };
64
+ };
43
65
  agents?: Record<string, AgentConfig>;
44
66
  }
45
67
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"daemonConfig.d.ts","sourceRoot":"","sources":["../src/daemonConfig.ts"],"names":[],"mappings":"AAiCA,MAAM,WAAW,WAAW;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,wFAAwF;IACxF,EAAE,CAAC,EAAE;QACH,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF;;;;OAIG;IACH,IAAI,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF;;;;;OAKG;IACH,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACtC;AA+BD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,YAAY,CA0CzC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CASjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,YAAY,CAad;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,GACpB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAiCvE"}
1
+ {"version":3,"file":"daemonConfig.d.ts","sourceRoot":"","sources":["../src/daemonConfig.ts"],"names":[],"mappings":"AAiCA,MAAM,WAAW,WAAW;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,wFAAwF;IACxF,EAAE,CAAC,EAAE;QACH,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF;;;;OAIG;IACH,IAAI,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF;;;;;OAKG;IACH,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF;;;;OAIG;IACH,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE;YACP,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;SACpB,CAAC;KACH,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACtC;AA+BD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAiDzC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CASjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,YAAY,CAad;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,GACpB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAqCvE"}
@@ -86,6 +86,13 @@ export function loadConfig() {
86
86
  extensions: parsed.extensions ? {
87
87
  allow: parsed.extensions.allow,
88
88
  } : undefined,
89
+ sessions: parsed.sessions ? {
90
+ token: parsed.sessions.token,
91
+ allowed_origins: parsed.sessions.allowed_origins,
92
+ } : undefined,
93
+ peers: parsed.peers?.broker ? {
94
+ broker: { command: parsed.peers.broker.command },
95
+ } : undefined,
89
96
  agents: parsed.agents,
90
97
  };
91
98
  }
@@ -161,6 +168,10 @@ export function reloadConfig(current) {
161
168
  if (reloaded.daemon.gc_interval_secs !== current.daemon.gc_interval_secs) {
162
169
  changes.push(`gc_interval_secs: ${current.daemon.gc_interval_secs} → ${reloaded.daemon.gc_interval_secs}`);
163
170
  }
171
+ if (JSON.stringify(reloaded.peers) !== JSON.stringify(current.peers)) {
172
+ changes.push('peers: config changed (takes effect on restart)');
173
+ requiresRestart = true;
174
+ }
164
175
  if (JSON.stringify(reloaded.agents) !== JSON.stringify(current.agents)) {
165
176
  changes.push('agents: config changed');
166
177
  }