harnery 0.0.1 → 0.2.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 (445) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -2
  3. package/bin/agent-coord +42 -0
  4. package/bin/agent-hook +44 -0
  5. package/bin/harn +40 -0
  6. package/dist/cli.d.ts +9 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +18 -0
  9. package/dist/commander.d.ts +128 -0
  10. package/dist/commander.d.ts.map +1 -0
  11. package/dist/commander.js +126 -0
  12. package/dist/commands/agents.d.ts +18 -0
  13. package/dist/commands/agents.d.ts.map +1 -0
  14. package/dist/commands/agents.js +3946 -0
  15. package/dist/commands/backup.d.ts +22 -0
  16. package/dist/commands/backup.d.ts.map +1 -0
  17. package/dist/commands/backup.js +262 -0
  18. package/dist/commands/browse-ai.d.ts +4 -0
  19. package/dist/commands/browse-ai.d.ts.map +1 -0
  20. package/dist/commands/browse-ai.js +156 -0
  21. package/dist/commands/browse.d.ts +4 -0
  22. package/dist/commands/browse.d.ts.map +1 -0
  23. package/dist/commands/browse.js +590 -0
  24. package/dist/commands/callers.d.ts +4 -0
  25. package/dist/commands/callers.d.ts.map +1 -0
  26. package/dist/commands/callers.js +276 -0
  27. package/dist/commands/completion.d.ts +17 -0
  28. package/dist/commands/completion.d.ts.map +1 -0
  29. package/dist/commands/completion.js +158 -0
  30. package/dist/commands/config-get.d.ts +4 -0
  31. package/dist/commands/config-get.d.ts.map +1 -0
  32. package/dist/commands/config-get.js +131 -0
  33. package/dist/commands/context.d.ts +11 -0
  34. package/dist/commands/context.d.ts.map +1 -0
  35. package/dist/commands/context.js +185 -0
  36. package/dist/commands/cookies.d.ts +4 -0
  37. package/dist/commands/cookies.d.ts.map +1 -0
  38. package/dist/commands/cookies.js +140 -0
  39. package/dist/commands/docs.d.ts +4 -0
  40. package/dist/commands/docs.d.ts.map +1 -0
  41. package/dist/commands/docs.js +137 -0
  42. package/dist/commands/doctor.d.ts +25 -0
  43. package/dist/commands/doctor.d.ts.map +1 -0
  44. package/dist/commands/doctor.js +200 -0
  45. package/dist/commands/edit-batch.d.ts +18 -0
  46. package/dist/commands/edit-batch.d.ts.map +1 -0
  47. package/dist/commands/edit-batch.js +172 -0
  48. package/dist/commands/eml.d.ts +4 -0
  49. package/dist/commands/eml.d.ts.map +1 -0
  50. package/dist/commands/eml.js +428 -0
  51. package/dist/commands/env.d.ts +4 -0
  52. package/dist/commands/env.d.ts.map +1 -0
  53. package/dist/commands/env.js +201 -0
  54. package/dist/commands/fetch.d.ts +4 -0
  55. package/dist/commands/fetch.d.ts.map +1 -0
  56. package/dist/commands/fetch.js +99 -0
  57. package/dist/commands/file-history.d.ts +4 -0
  58. package/dist/commands/file-history.d.ts.map +1 -0
  59. package/dist/commands/file-history.js +152 -0
  60. package/dist/commands/grep.d.ts +4 -0
  61. package/dist/commands/grep.d.ts.map +1 -0
  62. package/dist/commands/grep.js +317 -0
  63. package/dist/commands/init.d.ts +82 -0
  64. package/dist/commands/init.d.ts.map +1 -0
  65. package/dist/commands/init.js +288 -0
  66. package/dist/commands/outline.d.ts +4 -0
  67. package/dist/commands/outline.d.ts.map +1 -0
  68. package/dist/commands/outline.js +509 -0
  69. package/dist/commands/presence.d.ts +12 -0
  70. package/dist/commands/presence.d.ts.map +1 -0
  71. package/dist/commands/presence.js +123 -0
  72. package/dist/commands/read.d.ts +7 -0
  73. package/dist/commands/read.d.ts.map +1 -0
  74. package/dist/commands/read.js +46 -0
  75. package/dist/commands/scratch.d.ts +4 -0
  76. package/dist/commands/scratch.d.ts.map +1 -0
  77. package/dist/commands/scratch.js +426 -0
  78. package/dist/commands/session.d.ts +4 -0
  79. package/dist/commands/session.d.ts.map +1 -0
  80. package/dist/commands/session.js +162 -0
  81. package/dist/commands/sync.d.ts +24 -0
  82. package/dist/commands/sync.d.ts.map +1 -0
  83. package/dist/commands/sync.js +275 -0
  84. package/dist/commands/toc.d.ts +5 -0
  85. package/dist/commands/toc.d.ts.map +1 -0
  86. package/dist/commands/toc.js +153 -0
  87. package/dist/commands/tokens.d.ts +4 -0
  88. package/dist/commands/tokens.d.ts.map +1 -0
  89. package/dist/commands/tokens.js +48 -0
  90. package/dist/commands/tunnel.d.ts +4 -0
  91. package/dist/commands/tunnel.d.ts.map +1 -0
  92. package/dist/commands/tunnel.js +513 -0
  93. package/dist/commands/uninstall.d.ts +22 -0
  94. package/dist/commands/uninstall.d.ts.map +1 -0
  95. package/dist/commands/uninstall.js +126 -0
  96. package/dist/commands/web.d.ts +4 -0
  97. package/dist/commands/web.d.ts.map +1 -0
  98. package/dist/commands/web.js +165 -0
  99. package/dist/core/agents/canonical-emit.d.ts +27 -0
  100. package/dist/core/agents/canonical-emit.d.ts.map +1 -0
  101. package/dist/core/agents/canonical-emit.js +72 -0
  102. package/dist/core/agents/cli-emit.d.ts +27 -0
  103. package/dist/core/agents/cli-emit.d.ts.map +1 -0
  104. package/dist/core/agents/cli-emit.js +57 -0
  105. package/dist/core/agents/cli.d.ts +10 -0
  106. package/dist/core/agents/cli.d.ts.map +1 -0
  107. package/dist/core/agents/cli.js +757 -0
  108. package/dist/core/agents/codex-replay.d.ts +29 -0
  109. package/dist/core/agents/codex-replay.d.ts.map +1 -0
  110. package/dist/core/agents/codex-replay.js +138 -0
  111. package/dist/core/agents/coord-client.d.ts +98 -0
  112. package/dist/core/agents/coord-client.d.ts.map +1 -0
  113. package/dist/core/agents/coord-client.js +212 -0
  114. package/dist/core/agents/events/consume.d.ts +59 -0
  115. package/dist/core/agents/events/consume.d.ts.map +1 -0
  116. package/dist/core/agents/events/consume.js +147 -0
  117. package/dist/core/agents/events/emit.d.ts +42 -0
  118. package/dist/core/agents/events/emit.d.ts.map +1 -0
  119. package/dist/core/agents/events/emit.js +70 -0
  120. package/dist/core/agents/events/ulid.d.ts +11 -0
  121. package/dist/core/agents/events/ulid.d.ts.map +1 -0
  122. package/dist/core/agents/events/ulid.js +47 -0
  123. package/dist/core/agents/index.d.ts +14 -0
  124. package/dist/core/agents/index.d.ts.map +1 -0
  125. package/dist/core/agents/index.js +13 -0
  126. package/dist/core/agents/paths.d.ts +6 -0
  127. package/dist/core/agents/paths.d.ts.map +1 -0
  128. package/dist/core/agents/paths.js +17 -0
  129. package/dist/core/agents/render/prompt-context.d.ts +43 -0
  130. package/dist/core/agents/render/prompt-context.d.ts.map +1 -0
  131. package/dist/core/agents/render/prompt-context.js +335 -0
  132. package/dist/core/agents/render/session-context.d.ts +39 -0
  133. package/dist/core/agents/render/session-context.d.ts.map +1 -0
  134. package/dist/core/agents/render/session-context.js +283 -0
  135. package/dist/core/agents/rules/claim-conflict.d.ts +35 -0
  136. package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -0
  137. package/dist/core/agents/rules/claim-conflict.js +244 -0
  138. package/dist/core/agents/rules/commit-conflict.d.ts +59 -0
  139. package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -0
  140. package/dist/core/agents/rules/commit-conflict.js +244 -0
  141. package/dist/core/agents/rules/stop-hook.d.ts +44 -0
  142. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -0
  143. package/dist/core/agents/rules/stop-hook.js +161 -0
  144. package/dist/core/agents/session-events.d.ts +41 -0
  145. package/dist/core/agents/session-events.d.ts.map +1 -0
  146. package/dist/core/agents/session-events.js +205 -0
  147. package/dist/core/agents/state/activity-log.d.ts +18 -0
  148. package/dist/core/agents/state/activity-log.d.ts.map +1 -0
  149. package/dist/core/agents/state/activity-log.js +34 -0
  150. package/dist/core/agents/state/council.d.ts +39 -0
  151. package/dist/core/agents/state/council.d.ts.map +1 -0
  152. package/dist/core/agents/state/council.js +216 -0
  153. package/dist/core/agents/state/heartbeat-projector.d.ts +59 -0
  154. package/dist/core/agents/state/heartbeat-projector.d.ts.map +1 -0
  155. package/dist/core/agents/state/heartbeat-projector.js +436 -0
  156. package/dist/core/agents/state/heartbeat-writer.d.ts +64 -0
  157. package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -0
  158. package/dist/core/agents/state/heartbeat-writer.js +271 -0
  159. package/dist/core/agents/state/names.d.ts +35 -0
  160. package/dist/core/agents/state/names.d.ts.map +1 -0
  161. package/dist/core/agents/state/names.js +376 -0
  162. package/dist/core/agents/state/pidmap.d.ts +11 -0
  163. package/dist/core/agents/state/pidmap.d.ts.map +1 -0
  164. package/dist/core/agents/state/pidmap.js +32 -0
  165. package/dist/core/agents/state/scratch.d.ts +27 -0
  166. package/dist/core/agents/state/scratch.d.ts.map +1 -0
  167. package/dist/core/agents/state/scratch.js +90 -0
  168. package/dist/core/agents/state/shell-mutation.d.ts +17 -0
  169. package/dist/core/agents/state/shell-mutation.d.ts.map +1 -0
  170. package/dist/core/agents/state/shell-mutation.js +41 -0
  171. package/dist/core/agents/state/stale-sweep.d.ts +16 -0
  172. package/dist/core/agents/state/stale-sweep.d.ts.map +1 -0
  173. package/dist/core/agents/state/stale-sweep.js +166 -0
  174. package/dist/core/config.d.ts +29 -0
  175. package/dist/core/config.d.ts.map +1 -0
  176. package/dist/core/config.js +108 -0
  177. package/dist/core/hooks/cli.d.ts +21 -0
  178. package/dist/core/hooks/cli.d.ts.map +1 -0
  179. package/dist/core/hooks/cli.js +1123 -0
  180. package/dist/core/hooks/effects/image-capture.d.ts +43 -0
  181. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -0
  182. package/dist/core/hooks/effects/image-capture.js +288 -0
  183. package/dist/core/hooks/effects/index.d.ts +64 -0
  184. package/dist/core/hooks/effects/index.d.ts.map +1 -0
  185. package/dist/core/hooks/effects/index.js +197 -0
  186. package/dist/core/hooks/events/emit.d.ts +31 -0
  187. package/dist/core/hooks/events/emit.d.ts.map +1 -0
  188. package/dist/core/hooks/events/emit.js +89 -0
  189. package/dist/core/hooks/events/schema.d.ts +235 -0
  190. package/dist/core/hooks/events/schema.d.ts.map +1 -0
  191. package/dist/core/hooks/events/schema.js +12 -0
  192. package/dist/core/hooks/events/ulid.d.ts +10 -0
  193. package/dist/core/hooks/events/ulid.d.ts.map +1 -0
  194. package/dist/core/hooks/events/ulid.js +47 -0
  195. package/dist/core/hooks/harness/detect.d.ts +9 -0
  196. package/dist/core/hooks/harness/detect.d.ts.map +1 -0
  197. package/dist/core/hooks/harness/detect.js +29 -0
  198. package/dist/core/hooks/harness/events.d.ts +45 -0
  199. package/dist/core/hooks/harness/events.d.ts.map +1 -0
  200. package/dist/core/hooks/harness/events.js +71 -0
  201. package/dist/core/hooks/harness/output.d.ts +46 -0
  202. package/dist/core/hooks/harness/output.d.ts.map +1 -0
  203. package/dist/core/hooks/harness/output.js +87 -0
  204. package/dist/core/hooks/harness/parse.d.ts +67 -0
  205. package/dist/core/hooks/harness/parse.d.ts.map +1 -0
  206. package/dist/core/hooks/harness/parse.js +132 -0
  207. package/dist/core/hooks/index.d.ts +8 -0
  208. package/dist/core/hooks/index.d.ts.map +1 -0
  209. package/dist/core/hooks/index.js +7 -0
  210. package/dist/core/hooks/resolve/anchor.d.ts +37 -0
  211. package/dist/core/hooks/resolve/anchor.d.ts.map +1 -0
  212. package/dist/core/hooks/resolve/anchor.js +48 -0
  213. package/dist/core/hooks/resolve/coord-root.d.ts +6 -0
  214. package/dist/core/hooks/resolve/coord-root.d.ts.map +1 -0
  215. package/dist/core/hooks/resolve/coord-root.js +27 -0
  216. package/dist/core/hooks/resolve/intent.d.ts +33 -0
  217. package/dist/core/hooks/resolve/intent.d.ts.map +1 -0
  218. package/dist/core/hooks/resolve/intent.js +79 -0
  219. package/dist/core/hooks/resolve/owner.d.ts +42 -0
  220. package/dist/core/hooks/resolve/owner.d.ts.map +1 -0
  221. package/dist/core/hooks/resolve/owner.js +140 -0
  222. package/dist/core/hooks/resolve/transcript.d.ts +26 -0
  223. package/dist/core/hooks/resolve/transcript.d.ts.map +1 -0
  224. package/dist/core/hooks/resolve/transcript.js +73 -0
  225. package/dist/index.d.ts +15 -0
  226. package/dist/index.d.ts.map +1 -0
  227. package/dist/index.js +13 -0
  228. package/dist/lib/agent-browser/client.d.ts +99 -0
  229. package/dist/lib/agent-browser/client.d.ts.map +1 -0
  230. package/dist/lib/agent-browser/client.js +177 -0
  231. package/dist/lib/agent-browser/index.d.ts +2 -0
  232. package/dist/lib/agent-browser/index.d.ts.map +1 -0
  233. package/dist/lib/agent-browser/index.js +1 -0
  234. package/dist/lib/browser/client.d.ts +193 -0
  235. package/dist/lib/browser/client.d.ts.map +1 -0
  236. package/dist/lib/browser/client.js +325 -0
  237. package/dist/lib/browser/dev-overlay.d.ts +23 -0
  238. package/dist/lib/browser/dev-overlay.d.ts.map +1 -0
  239. package/dist/lib/browser/dev-overlay.js +153 -0
  240. package/dist/lib/browser/index.d.ts +5 -0
  241. package/dist/lib/browser/index.d.ts.map +1 -0
  242. package/dist/lib/browser/index.js +2 -0
  243. package/dist/lib/browser/layout.d.ts +79 -0
  244. package/dist/lib/browser/layout.d.ts.map +1 -0
  245. package/dist/lib/browser/layout.js +220 -0
  246. package/dist/lib/browser/visibility.d.ts +86 -0
  247. package/dist/lib/browser/visibility.d.ts.map +1 -0
  248. package/dist/lib/browser/visibility.js +333 -0
  249. package/dist/lib/browser/visual-diff.d.ts +38 -0
  250. package/dist/lib/browser/visual-diff.d.ts.map +1 -0
  251. package/dist/lib/browser/visual-diff.js +107 -0
  252. package/dist/lib/completion/bash.d.ts +25 -0
  253. package/dist/lib/completion/bash.d.ts.map +1 -0
  254. package/dist/lib/completion/bash.js +284 -0
  255. package/dist/lib/completion/fish.d.ts +16 -0
  256. package/dist/lib/completion/fish.d.ts.map +1 -0
  257. package/dist/lib/completion/fish.js +118 -0
  258. package/dist/lib/completion/index.d.ts +5 -0
  259. package/dist/lib/completion/index.d.ts.map +1 -0
  260. package/dist/lib/completion/index.js +4 -0
  261. package/dist/lib/completion/walk.d.ts +68 -0
  262. package/dist/lib/completion/walk.d.ts.map +1 -0
  263. package/dist/lib/completion/walk.js +102 -0
  264. package/dist/lib/completion/zsh.d.ts +13 -0
  265. package/dist/lib/completion/zsh.d.ts.map +1 -0
  266. package/dist/lib/completion/zsh.js +249 -0
  267. package/dist/lib/context/index.d.ts +107 -0
  268. package/dist/lib/context/index.d.ts.map +1 -0
  269. package/dist/lib/context/index.js +275 -0
  270. package/dist/lib/cookies/client.d.ts +131 -0
  271. package/dist/lib/cookies/client.d.ts.map +1 -0
  272. package/dist/lib/cookies/client.js +239 -0
  273. package/dist/lib/cookies/index.d.ts +2 -0
  274. package/dist/lib/cookies/index.d.ts.map +1 -0
  275. package/dist/lib/cookies/index.js +1 -0
  276. package/dist/lib/council/index.d.ts +266 -0
  277. package/dist/lib/council/index.d.ts.map +1 -0
  278. package/dist/lib/council/index.js +674 -0
  279. package/dist/lib/docs-index.d.ts +28 -0
  280. package/dist/lib/docs-index.d.ts.map +1 -0
  281. package/dist/lib/docs-index.js +169 -0
  282. package/dist/lib/docs-lint.d.ts +26 -0
  283. package/dist/lib/docs-lint.d.ts.map +1 -0
  284. package/dist/lib/docs-lint.js +378 -0
  285. package/dist/lib/docs-sweep.d.ts +34 -0
  286. package/dist/lib/docs-sweep.d.ts.map +1 -0
  287. package/dist/lib/docs-sweep.js +304 -0
  288. package/dist/lib/docs.d.ts +27 -0
  289. package/dist/lib/docs.d.ts.map +1 -0
  290. package/dist/lib/docs.js +142 -0
  291. package/dist/lib/env.d.ts +11 -0
  292. package/dist/lib/env.d.ts.map +1 -0
  293. package/dist/lib/env.js +12 -0
  294. package/dist/lib/exec.d.ts +32 -0
  295. package/dist/lib/exec.d.ts.map +1 -0
  296. package/dist/lib/exec.js +54 -0
  297. package/dist/lib/format.d.ts +29 -0
  298. package/dist/lib/format.d.ts.map +1 -0
  299. package/dist/lib/format.js +139 -0
  300. package/dist/lib/http/client.d.ts +56 -0
  301. package/dist/lib/http/client.d.ts.map +1 -0
  302. package/dist/lib/http/client.js +160 -0
  303. package/dist/lib/http/index.d.ts +2 -0
  304. package/dist/lib/http/index.d.ts.map +1 -0
  305. package/dist/lib/http/index.js +1 -0
  306. package/dist/lib/identities/index.d.ts +77 -0
  307. package/dist/lib/identities/index.d.ts.map +1 -0
  308. package/dist/lib/identities/index.js +190 -0
  309. package/dist/lib/machine.d.ts +19 -0
  310. package/dist/lib/machine.d.ts.map +1 -0
  311. package/dist/lib/machine.js +61 -0
  312. package/dist/lib/presence.d.ts +48 -0
  313. package/dist/lib/presence.d.ts.map +1 -0
  314. package/dist/lib/presence.js +123 -0
  315. package/dist/lib/readability/client.d.ts +39 -0
  316. package/dist/lib/readability/client.d.ts.map +1 -0
  317. package/dist/lib/readability/client.js +121 -0
  318. package/dist/lib/readability/index.d.ts +2 -0
  319. package/dist/lib/readability/index.d.ts.map +1 -0
  320. package/dist/lib/readability/index.js +1 -0
  321. package/dist/lib/scratch/index.d.ts +74 -0
  322. package/dist/lib/scratch/index.d.ts.map +1 -0
  323. package/dist/lib/scratch/index.js +393 -0
  324. package/dist/lib/tunnel/gate.d.ts +12 -0
  325. package/dist/lib/tunnel/gate.d.ts.map +1 -0
  326. package/dist/lib/tunnel/gate.js +101 -0
  327. package/dist/lib/tunnel/state.d.ts +34 -0
  328. package/dist/lib/tunnel/state.d.ts.map +1 -0
  329. package/dist/lib/tunnel/state.js +132 -0
  330. package/package.json +160 -8
  331. package/schemas/.gitkeep +0 -0
  332. package/schemas/config.schema.json +109 -0
  333. package/src/cli.ts +22 -0
  334. package/src/commander.ts +242 -0
  335. package/src/commands/.gitkeep +0 -0
  336. package/src/commands/agents.ts +4567 -0
  337. package/src/commands/backup.ts +305 -0
  338. package/src/commands/browse-ai.ts +198 -0
  339. package/src/commands/browse.ts +849 -0
  340. package/src/commands/callers.ts +363 -0
  341. package/src/commands/completion.ts +193 -0
  342. package/src/commands/config-get.ts +161 -0
  343. package/src/commands/context.ts +209 -0
  344. package/src/commands/cookies.ts +198 -0
  345. package/src/commands/docs.ts +174 -0
  346. package/src/commands/doctor.ts +231 -0
  347. package/src/commands/edit-batch.ts +233 -0
  348. package/src/commands/eml.ts +519 -0
  349. package/src/commands/env.ts +254 -0
  350. package/src/commands/fetch.ts +136 -0
  351. package/src/commands/file-history.ts +202 -0
  352. package/src/commands/grep.ts +371 -0
  353. package/src/commands/init.ts +335 -0
  354. package/src/commands/outline.ts +583 -0
  355. package/src/commands/presence.ts +152 -0
  356. package/src/commands/read.ts +64 -0
  357. package/src/commands/scratch.ts +445 -0
  358. package/src/commands/session.ts +187 -0
  359. package/src/commands/sync.ts +306 -0
  360. package/src/commands/toc.ts +218 -0
  361. package/src/commands/tokens.ts +79 -0
  362. package/src/commands/tunnel.ts +633 -0
  363. package/src/commands/uninstall.ts +144 -0
  364. package/src/commands/web.ts +193 -0
  365. package/src/core/agents/canonical-emit.ts +77 -0
  366. package/src/core/agents/cli-emit.ts +64 -0
  367. package/src/core/agents/cli.ts +838 -0
  368. package/src/core/agents/codex-replay.ts +163 -0
  369. package/src/core/agents/coord-client.ts +249 -0
  370. package/src/core/agents/events/consume.ts +196 -0
  371. package/src/core/agents/events/emit.ts +108 -0
  372. package/src/core/agents/events/ulid.ts +51 -0
  373. package/src/core/agents/index.ts +14 -0
  374. package/src/core/agents/paths.ts +16 -0
  375. package/src/core/agents/render/prompt-context.ts +401 -0
  376. package/src/core/agents/render/session-context.ts +341 -0
  377. package/src/core/agents/rules/claim-conflict.ts +282 -0
  378. package/src/core/agents/rules/commit-conflict.ts +303 -0
  379. package/src/core/agents/rules/stop-hook.ts +229 -0
  380. package/src/core/agents/session-events.ts +228 -0
  381. package/src/core/agents/state/activity-log.ts +33 -0
  382. package/src/core/agents/state/council.ts +265 -0
  383. package/src/core/agents/state/heartbeat-projector.ts +488 -0
  384. package/src/core/agents/state/heartbeat-writer.ts +333 -0
  385. package/src/core/agents/state/names.ts +399 -0
  386. package/src/core/agents/state/pidmap.ts +38 -0
  387. package/src/core/agents/state/scratch.ts +121 -0
  388. package/src/core/agents/state/shell-mutation.ts +44 -0
  389. package/src/core/agents/state/stale-sweep.ts +190 -0
  390. package/src/core/config.ts +111 -0
  391. package/src/core/hooks/cli.ts +1247 -0
  392. package/src/core/hooks/effects/image-capture.ts +330 -0
  393. package/src/core/hooks/effects/index.ts +210 -0
  394. package/src/core/hooks/events/emit.ts +120 -0
  395. package/src/core/hooks/events/schema.ts +430 -0
  396. package/src/core/hooks/events/ulid.ts +51 -0
  397. package/src/core/hooks/harness/detect.ts +30 -0
  398. package/src/core/hooks/harness/events.ts +102 -0
  399. package/src/core/hooks/harness/output.ts +100 -0
  400. package/src/core/hooks/harness/parse.ts +180 -0
  401. package/src/core/hooks/index.ts +16 -0
  402. package/src/core/hooks/resolve/anchor.ts +51 -0
  403. package/src/core/hooks/resolve/coord-root.ts +25 -0
  404. package/src/core/hooks/resolve/intent.ts +89 -0
  405. package/src/core/hooks/resolve/owner.ts +140 -0
  406. package/src/core/hooks/resolve/transcript.ts +72 -0
  407. package/src/hooks/.gitkeep +0 -0
  408. package/src/index.ts +15 -0
  409. package/src/lib/agent-browser/client.ts +239 -0
  410. package/src/lib/agent-browser/index.ts +1 -0
  411. package/src/lib/browser/client.ts +449 -0
  412. package/src/lib/browser/dev-overlay.ts +207 -0
  413. package/src/lib/browser/index.ts +24 -0
  414. package/src/lib/browser/layout.ts +288 -0
  415. package/src/lib/browser/visibility.ts +419 -0
  416. package/src/lib/browser/visual-diff.ts +150 -0
  417. package/src/lib/completion/bash.ts +291 -0
  418. package/src/lib/completion/fish.ts +134 -0
  419. package/src/lib/completion/index.ts +10 -0
  420. package/src/lib/completion/walk.ts +184 -0
  421. package/src/lib/completion/zsh.ts +262 -0
  422. package/src/lib/context/index.ts +386 -0
  423. package/src/lib/cookies/client.ts +301 -0
  424. package/src/lib/cookies/index.ts +13 -0
  425. package/src/lib/council/index.ts +803 -0
  426. package/src/lib/docs-index.ts +216 -0
  427. package/src/lib/docs-lint.ts +413 -0
  428. package/src/lib/docs-sweep.ts +348 -0
  429. package/src/lib/docs.ts +199 -0
  430. package/src/lib/env.ts +12 -0
  431. package/src/lib/exec.ts +74 -0
  432. package/src/lib/format.ts +147 -0
  433. package/src/lib/http/client.ts +211 -0
  434. package/src/lib/http/index.ts +1 -0
  435. package/src/lib/identities/index.ts +210 -0
  436. package/src/lib/machine.ts +61 -0
  437. package/src/lib/presence.ts +154 -0
  438. package/src/lib/readability/client.ts +169 -0
  439. package/src/lib/readability/index.ts +5 -0
  440. package/src/lib/readability/turndown-plugin-gfm.d.ts +10 -0
  441. package/src/lib/scratch/index.ts +470 -0
  442. package/src/lib/tunnel/gate.ts +113 -0
  443. package/src/lib/tunnel/state.ts +167 -0
  444. package/src/web/.gitkeep +0 -0
  445. package/index.js +0 -1
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Incremental consumer for the canonical event stream at
3
+ * `.harnery/events.ndjson`.
4
+ *
5
+ * A small `.harnery/.events-cursor` file persists the last-projected event_id;
6
+ * subsequent runs skip everything up to and including that id and return only
7
+ * the new tail.
8
+ *
9
+ * Read strategy: the global cursor is advanced on every agent's turn.stop, so
10
+ * it almost always sits within the last few KB of the stream. We exploit that
11
+ * with a bounded **tail read** (reading only the last `tailBytes` of the file
12
+ * and locating the cursor there) which turns an O(file-size) read into
13
+ * O(window). If the cursor is older than the window (a long-idle system, or a
14
+ * cursor that's been rotated out) we fall back to a full read. The fallback is
15
+ * always correct, just slower, so undersizing the window can never lose events.
16
+ *
17
+ * Idempotency: projectors are idempotent by `event_id`. The
18
+ * cursor file makes this cheap (we never replay an already-projected event by
19
+ * accident) and the projector tolerates the rare full-replay (cursor rotated
20
+ * out) without double-applying.
21
+ */
22
+ import { closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync, statSync, writeFileSync, } from "node:fs";
23
+ import { dirname, join } from "node:path";
24
+ import { coordEnv } from "../../../lib/env.js";
25
+ const STREAM_REL = ".harnery/events.ndjson";
26
+ const CURSOR_REL = ".harnery/.events-cursor";
27
+ const DEFAULT_TAIL_BYTES = 2 * 1024 * 1024; // 2 MiB, thousands of events of headroom
28
+ /**
29
+ * Read all events after the persisted cursor, in chronological (file) order.
30
+ */
31
+ export function consumeSince(coordRoot, opts = {}) {
32
+ const streamPath = join(coordRoot, STREAM_REL);
33
+ if (!existsSync(streamPath)) {
34
+ return { events: [], lastEventId: null, streamBytes: 0 };
35
+ }
36
+ const cursor = opts.replayAll ? null : readCursor(coordRoot);
37
+ const fileSize = statSync(streamPath).size;
38
+ const windowBytes = resolveTailBytes(opts.tailBytes);
39
+ // Tail fast-path: a cursor exists and the file is larger than the window.
40
+ // Read only the trailing window, drop the (likely partial) first line, and
41
+ // look for the cursor. A hit returns just the new events without ever
42
+ // touching the bulk of the file.
43
+ if (cursor !== null && fileSize > windowBytes) {
44
+ const tail = readTailUtf8(streamPath, fileSize, windowBytes);
45
+ const firstNl = tail.indexOf("\n");
46
+ const usable = firstNl >= 0 ? tail.slice(firstNl + 1) : "";
47
+ const parsed = eventsAfterCursor(parseLines(usable), cursor);
48
+ if (parsed.foundCursor) {
49
+ return {
50
+ events: parsed.events,
51
+ lastEventId: parsed.events.at(-1)?.event_id ?? cursor,
52
+ streamBytes: fileSize,
53
+ };
54
+ }
55
+ // Cursor older than the tail window → fall through to a full read.
56
+ }
57
+ // Full read: first run, replayAll, small file, or cursor not found in tail.
58
+ const all = parseLines(readFileSync(streamPath, "utf8"));
59
+ const parsed = eventsAfterCursor(all, cursor);
60
+ if (parsed.foundCursor) {
61
+ return {
62
+ events: parsed.events,
63
+ lastEventId: parsed.events.at(-1)?.event_id ?? cursor,
64
+ streamBytes: fileSize,
65
+ };
66
+ }
67
+ // The cursor names an event that's been rotated out of the file, so replay
68
+ // everything (safer than silent state drift; the projector is idempotent by
69
+ // event_id).
70
+ return { events: all, lastEventId: null, streamBytes: fileSize };
71
+ }
72
+ function resolveTailBytes(override) {
73
+ if (override !== undefined && override > 0)
74
+ return override;
75
+ const env = coordEnv("AGENT_COORD_TAIL_BYTES");
76
+ const n = env ? Number(env) : Number.NaN;
77
+ return Number.isFinite(n) && n > 0 ? n : DEFAULT_TAIL_BYTES;
78
+ }
79
+ /** Read the trailing `windowBytes` of a file as UTF-8 without loading the rest. */
80
+ function readTailUtf8(streamPath, fileSize, windowBytes) {
81
+ const start = Math.max(0, fileSize - windowBytes);
82
+ const len = fileSize - start;
83
+ const buf = Buffer.allocUnsafe(len);
84
+ const fd = openSync(streamPath, "r");
85
+ try {
86
+ let read = 0;
87
+ while (read < len) {
88
+ const n = readSync(fd, buf, read, len - read, start + read);
89
+ if (n === 0)
90
+ break;
91
+ read += n;
92
+ }
93
+ return buf.toString("utf8", 0, read);
94
+ }
95
+ finally {
96
+ closeSync(fd);
97
+ }
98
+ }
99
+ function parseLines(raw) {
100
+ const out = [];
101
+ for (const line of raw.split("\n")) {
102
+ if (!line.trim())
103
+ continue;
104
+ try {
105
+ out.push(JSON.parse(line));
106
+ }
107
+ catch {
108
+ /* skip malformed line */
109
+ }
110
+ }
111
+ return out;
112
+ }
113
+ /**
114
+ * Events strictly after `cursor` (or all events when `cursor` is null). When a
115
+ * non-null cursor isn't present in `all`, returns `foundCursor: false` so the
116
+ * caller can decide between a wider read and a full replay.
117
+ */
118
+ function eventsAfterCursor(all, cursor) {
119
+ if (cursor === null)
120
+ return { events: all, foundCursor: true };
121
+ const idx = all.findIndex((e) => e.event_id === cursor);
122
+ if (idx < 0)
123
+ return { events: [], foundCursor: false };
124
+ return { events: all.slice(idx + 1), foundCursor: true };
125
+ }
126
+ export function readCursor(coordRoot) {
127
+ const path = join(coordRoot, CURSOR_REL);
128
+ if (!existsSync(path))
129
+ return null;
130
+ try {
131
+ const v = readFileSync(path, "utf8").trim();
132
+ return v.length > 0 ? v : null;
133
+ }
134
+ catch {
135
+ return null;
136
+ }
137
+ }
138
+ export function writeCursor(coordRoot, eventId) {
139
+ const path = join(coordRoot, CURSOR_REL);
140
+ try {
141
+ mkdirSync(dirname(path), { recursive: true });
142
+ writeFileSync(path, eventId, "utf8");
143
+ }
144
+ catch {
145
+ /* swallow; next run replays */
146
+ }
147
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Canonical-event writer for agent-coord. Mirrors the agent-hooks emitter:
3
+ * both modules write the same envelope shape to the same
4
+ * `.harnery/events.ndjson` file but stay independent (shared code limited to
5
+ * event/schema types).
6
+ *
7
+ * Phase 4: agent-coord uses this from CLI handlers (state.task_set,
8
+ * state.status_checked, state.scratch_append, council.*, presence.*).
9
+ */
10
+ declare const SCHEMA_VERSION: 1;
11
+ export type Harness = "claude-code" | "cursor" | "codex";
12
+ export type Source = "agent-hooks" | "agent-coord" | "user" | "system";
13
+ export interface Envelope {
14
+ schema_version: typeof SCHEMA_VERSION;
15
+ event_id: string;
16
+ event_type: string;
17
+ ts: string;
18
+ instance_id: string;
19
+ session_id: string;
20
+ parent_session_id?: string;
21
+ turn_id?: string;
22
+ parent_turn_id?: string;
23
+ harness: Harness;
24
+ source: Source;
25
+ data: Record<string, unknown>;
26
+ }
27
+ export interface EmitInput {
28
+ event_type: string;
29
+ instance_id: string;
30
+ session_id: string;
31
+ harness: Harness;
32
+ source?: Source;
33
+ parent_session_id?: string;
34
+ turn_id?: string;
35
+ parent_turn_id?: string;
36
+ ts?: string;
37
+ data: Record<string, unknown>;
38
+ }
39
+ export declare function buildEnvelope(input: EmitInput): Envelope;
40
+ export declare function emit(coordRoot: string, input: EmitInput): Envelope;
41
+ export {};
42
+ //# sourceMappingURL=emit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/events/emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,QAAA,MAAM,cAAc,EAAG,CAAU,CAAC;AAKlC,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AACzD,MAAM,MAAM,MAAM,GAAG,aAAa,GAAG,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,QAAQ;IACvB,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAexD;AAED,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,CAwBlE"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Canonical-event writer for agent-coord. Mirrors the agent-hooks emitter:
3
+ * both modules write the same envelope shape to the same
4
+ * `.harnery/events.ndjson` file but stay independent (shared code limited to
5
+ * event/schema types).
6
+ *
7
+ * Phase 4: agent-coord uses this from CLI handlers (state.task_set,
8
+ * state.status_checked, state.scratch_append, council.*, presence.*).
9
+ */
10
+ import { appendFileSync, closeSync, mkdirSync, openSync } from "node:fs";
11
+ import { dirname, join } from "node:path";
12
+ import { ulid } from "./ulid.js";
13
+ const SCHEMA_VERSION = 1;
14
+ const STREAM_FILE = ".harnery/events.ndjson";
15
+ const LOCK_FILE = ".harnery/events.ndjson.lock";
16
+ const MAX_LINE_BYTES = 64 * 1024;
17
+ export function buildEnvelope(input) {
18
+ return {
19
+ schema_version: SCHEMA_VERSION,
20
+ event_id: ulid(),
21
+ event_type: input.event_type,
22
+ ts: input.ts ?? new Date().toISOString(),
23
+ instance_id: input.instance_id,
24
+ session_id: input.session_id,
25
+ parent_session_id: input.parent_session_id,
26
+ turn_id: input.turn_id,
27
+ parent_turn_id: input.parent_turn_id,
28
+ harness: input.harness,
29
+ source: input.source ?? "agent-coord",
30
+ data: input.data,
31
+ };
32
+ }
33
+ export function emit(coordRoot, input) {
34
+ const envelope = buildEnvelope(input);
35
+ const streamPath = join(coordRoot, STREAM_FILE);
36
+ const lockPath = join(coordRoot, LOCK_FILE);
37
+ ensureDir(dirname(streamPath));
38
+ ensureFile(lockPath);
39
+ let line = `${JSON.stringify(envelope)}\n`;
40
+ if (Buffer.byteLength(line, "utf8") > MAX_LINE_BYTES) {
41
+ line = `${JSON.stringify({
42
+ ...envelope,
43
+ data: { __over_size_limit: true, original_bytes: Buffer.byteLength(line, "utf8") },
44
+ })}\n`;
45
+ }
46
+ const lockFd = openSync(lockPath, "r+");
47
+ try {
48
+ appendFileSync(streamPath, line, { encoding: "utf8", flag: "a" });
49
+ }
50
+ finally {
51
+ closeSync(lockFd);
52
+ }
53
+ return envelope;
54
+ }
55
+ function ensureDir(path) {
56
+ try {
57
+ mkdirSync(path, { recursive: true });
58
+ }
59
+ catch {
60
+ /* swallow */
61
+ }
62
+ }
63
+ function ensureFile(path) {
64
+ try {
65
+ closeSync(openSync(path, "a"));
66
+ }
67
+ catch {
68
+ /* swallow */
69
+ }
70
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tiny ULID generator. Crockford-base32, 10-char timestamp (48-bit ms epoch)
3
+ * + 16-char random (80-bit). 26 chars total, monotonically-sortable.
4
+ *
5
+ * Intentionally duplicated from the agent-hooks ULID generator: agent-hooks
6
+ * and agent-coord stay strictly-separated packages, sharing only event/schema
7
+ * types. The writer side reimplements per-module so neither depends on the
8
+ * other's runtime code.
9
+ */
10
+ export declare function ulid(): string;
11
+ //# sourceMappingURL=ulid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ulid.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/events/ulid.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,wBAAgB,IAAI,IAAI,MAAM,CAI7B"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Tiny ULID generator. Crockford-base32, 10-char timestamp (48-bit ms epoch)
3
+ * + 16-char random (80-bit). 26 chars total, monotonically-sortable.
4
+ *
5
+ * Intentionally duplicated from the agent-hooks ULID generator: agent-hooks
6
+ * and agent-coord stay strictly-separated packages, sharing only event/schema
7
+ * types. The writer side reimplements per-module so neither depends on the
8
+ * other's runtime code.
9
+ */
10
+ const ALPHABET = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
11
+ export function ulid() {
12
+ const ts = encodeTime(Date.now());
13
+ const rnd = encodeRandom();
14
+ return ts + rnd;
15
+ }
16
+ function encodeTime(ms) {
17
+ let out = "";
18
+ let n = BigInt(ms);
19
+ const base = BigInt(32);
20
+ for (let i = 0; i < 10; i++) {
21
+ const mod = Number(n % base);
22
+ out = ALPHABET[mod] + out;
23
+ n = n / base;
24
+ }
25
+ return out;
26
+ }
27
+ function encodeRandom() {
28
+ const bytes = new Uint8Array(10);
29
+ crypto.getRandomValues(bytes);
30
+ let out = "";
31
+ let buf = 0n;
32
+ let bits = 0;
33
+ for (const b of bytes) {
34
+ buf = (buf << 8n) | BigInt(b);
35
+ bits += 8;
36
+ while (bits >= 5) {
37
+ bits -= 5;
38
+ const idx = Number((buf >> BigInt(bits)) & 0x1fn);
39
+ out += ALPHABET[idx];
40
+ }
41
+ }
42
+ if (bits > 0) {
43
+ const idx = Number((buf << BigInt(5 - bits)) & 0x1fn);
44
+ out += ALPHABET[idx];
45
+ }
46
+ return out.slice(0, 16);
47
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * agent-coord library public exports.
3
+ *
4
+ * `coord-client`: coordination helpers
5
+ * (Heartbeat reader, owner-resolver via ppid-walk, monorepo-root finder).
6
+ * Imported by every TS caller that needs to read coord state.
7
+ *
8
+ * `canonical-emit`: fire-and-forget client for the canonical event stream;
9
+ * spawns `bin/agent-coord emit-event` and never blocks the caller.
10
+ */
11
+ export * from "./canonical-emit.js";
12
+ export * from "./coord-client.js";
13
+ export * from "./session-events.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * agent-coord library public exports.
3
+ *
4
+ * `coord-client`: coordination helpers
5
+ * (Heartbeat reader, owner-resolver via ppid-walk, monorepo-root finder).
6
+ * Imported by every TS caller that needs to read coord state.
7
+ *
8
+ * `canonical-emit`: fire-and-forget client for the canonical event stream;
9
+ * spawns `bin/agent-coord emit-event` and never blocks the caller.
10
+ */
11
+ export * from "./canonical-emit.js";
12
+ export * from "./coord-client.js";
13
+ export * from "./session-events.js";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Walk up from `start` looking for a directory containing `.harnery/`, so
3
+ * adapter + legacy code agree on the same monorepo root.
4
+ */
5
+ export declare function findCoordRoot(start?: string): string | null;
6
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/core/agents/paths.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAQ1E"}
@@ -0,0 +1,17 @@
1
+ import { existsSync } from "node:fs";
2
+ import { dirname, join, resolve } from "node:path";
3
+ /**
4
+ * Walk up from `start` looking for a directory containing `.harnery/`, so
5
+ * adapter + legacy code agree on the same monorepo root.
6
+ */
7
+ export function findCoordRoot(start = process.cwd()) {
8
+ let dir = resolve(start);
9
+ while (true) {
10
+ if (existsSync(join(dir, ".harnery")))
11
+ return dir;
12
+ const parent = dirname(dir);
13
+ if (parent === dir)
14
+ return null;
15
+ dir = parent;
16
+ }
17
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * UserPromptSubmit UX renderer. Combines the peer-refresh dedup, the
3
+ * council-pending hash-dedup, and the Cursor set-task staleness nudge.
4
+ * agent-hook's user_prompt.submit post-emit handler calls this
5
+ * and forwards the result as the harness-shaped additionalContext payload.
6
+ *
7
+ * Three hash-dedup'd subsections combined into one additionalContext payload:
8
+ * 1. Peer table: semantically-relevant peer fields hashed; only re-emits
9
+ * when peers change (name + instance_id + session_id + kind + started_at
10
+ * + sorted(files_touched) + platform, sorted by instance_id).
11
+ * 2. Council pending: pending open-council IDs hashed; re-emits when the
12
+ * ID set changes.
13
+ * 3. Task staleness nudge (cursor only, since CC enforces via the Stop hook
14
+ * transcript scan). Fires when `task` is null or `task_updated_at` is
15
+ * older than HARNERY_TASK_STALE_SECONDS (default 1800 = 30 min). Hash-deduped
16
+ * against the previous nudge state.
17
+ *
18
+ * Hash files live at:
19
+ * .harnery/.last-peer-hash.<instance_id>
20
+ * .harnery/.last-council-hash.<instance_id>
21
+ * .harnery/.last-task-nudge-hash.<instance_id>
22
+ *
23
+ * First call always emits (hash files don't exist).
24
+ */
25
+ export interface PromptContextOpts {
26
+ coordRoot: string;
27
+ instanceId: string;
28
+ sessionId: string;
29
+ agentName?: string;
30
+ /** When true, run the task-staleness nudge check (cursor only; CC has the
31
+ * Stop-hook transcript-scan enforcement). */
32
+ taskNudge?: boolean;
33
+ }
34
+ /**
35
+ * Build the combined UserPromptSubmit additionalContext string. Returns "" when
36
+ * nothing has changed since the last call (so the caller can skip the JSON emit).
37
+ *
38
+ * Side effects: updates `.harnery/.last-peer-hash.<id>` and `.harnery/.last-council-hash.<id>`
39
+ * when their respective sections re-emit (or removes the council hash when no
40
+ * councils are pending, matching the bash behavior).
41
+ */
42
+ export declare function renderPromptContext(opts: PromptContextOpts): string;
43
+ //# sourceMappingURL=prompt-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-context.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/render/prompt-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAgCH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;iDAC6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAqBnE"}