opensquid 0.5.441 → 0.5.449

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 (391) hide show
  1. package/README.md +1 -0
  2. package/dist/functions/arm_scope.d.ts +27 -0
  3. package/dist/functions/arm_scope.d.ts.map +1 -0
  4. package/dist/functions/arm_scope.js +52 -0
  5. package/dist/functions/arm_scope.js.map +1 -0
  6. package/dist/functions/index.d.ts +1 -0
  7. package/dist/functions/index.d.ts.map +1 -1
  8. package/dist/functions/index.js +1 -0
  9. package/dist/functions/index.js.map +1 -1
  10. package/dist/functions/recall_pre_inject.d.ts.map +1 -1
  11. package/dist/functions/recall_pre_inject.js +12 -0
  12. package/dist/functions/recall_pre_inject.js.map +1 -1
  13. package/dist/rag/store_git.d.ts +23 -0
  14. package/dist/rag/store_git.d.ts.map +1 -0
  15. package/dist/rag/store_git.js +57 -0
  16. package/dist/rag/store_git.js.map +1 -0
  17. package/dist/runtime/bootstrap.d.ts.map +1 -1
  18. package/dist/runtime/bootstrap.js +2 -0
  19. package/dist/runtime/bootstrap.js.map +1 -1
  20. package/dist/runtime/handoff/render.d.ts +5 -4
  21. package/dist/runtime/handoff/render.d.ts.map +1 -1
  22. package/dist/runtime/handoff/render.js +7 -7
  23. package/dist/runtime/handoff/render.js.map +1 -1
  24. package/dist/runtime/hooks/active_task_mirror.js +0 -0
  25. package/dist/runtime/hooks/apply_patch.js +0 -0
  26. package/dist/runtime/hooks/dispatch.js +0 -0
  27. package/dist/runtime/hooks/hook_output.js +0 -0
  28. package/dist/runtime/hooks/memory_reconcile.js +0 -0
  29. package/dist/runtime/hooks/new_project_detect.js +0 -0
  30. package/dist/runtime/hooks/profession_resolver.js +0 -0
  31. package/dist/runtime/hooks/scope_intent.js +0 -0
  32. package/dist/runtime/hooks/session-end.js +11 -0
  33. package/dist/runtime/hooks/session-end.js.map +1 -1
  34. package/dist/runtime/hooks/session_id.js +0 -0
  35. package/dist/runtime/hooks/session_liveness.js +0 -0
  36. package/dist/runtime/hooks/stop_drive.js +0 -0
  37. package/dist/runtime/hooks/stop_stream.js +0 -0
  38. package/dist/runtime/hooks/subagent_guard.js +0 -0
  39. package/dist/runtime/hooks/transcript.js +0 -0
  40. package/dist/runtime/hooks/transcript_tasks.js +0 -0
  41. package/dist/runtime/ralph/orchestrator.d.ts.map +1 -1
  42. package/dist/runtime/ralph/orchestrator.js +2 -1
  43. package/dist/runtime/ralph/orchestrator.js.map +1 -1
  44. package/dist/setup/cli/limits_state.d.ts.map +1 -1
  45. package/dist/setup/cli/limits_state.js +6 -40
  46. package/dist/setup/cli/limits_state.js.map +1 -1
  47. package/dist/setup/cli/pack_walk.d.ts +32 -0
  48. package/dist/setup/cli/pack_walk.d.ts.map +1 -0
  49. package/dist/setup/cli/pack_walk.js +76 -0
  50. package/dist/setup/cli/pack_walk.js.map +1 -0
  51. package/dist/setup/cli/permissions_state.d.ts.map +1 -1
  52. package/dist/setup/cli/permissions_state.js +6 -37
  53. package/dist/setup/cli/permissions_state.js.map +1 -1
  54. package/dist/setup/cli/triggers_state.d.ts.map +1 -1
  55. package/dist/setup/cli/triggers_state.js +3 -29
  56. package/dist/setup/cli/triggers_state.js.map +1 -1
  57. package/dist/workgraph/events.d.ts.map +1 -1
  58. package/dist/workgraph/events.js +10 -0
  59. package/dist/workgraph/events.js.map +1 -1
  60. package/dist/workgraph/store.d.ts.map +1 -1
  61. package/dist/workgraph/store.js +5 -0
  62. package/dist/workgraph/store.js.map +1 -1
  63. package/dist/workgraph/types.d.ts +2 -1
  64. package/dist/workgraph/types.d.ts.map +1 -1
  65. package/docs/ARCHITECTURE.md +268 -0
  66. package/docs/pack-runtime.md +15 -12
  67. package/docs/skill-grammar-guide.md +4 -4
  68. package/package.json +5 -3
  69. package/packs/builtin/coding-flow/skills/entry-and-handoffs/skill.yaml +13 -17
  70. package/dist/anti-drift/evaluator.d.ts +0 -88
  71. package/dist/anti-drift/evaluator.d.ts.map +0 -1
  72. package/dist/anti-drift/evaluator.js +0 -417
  73. package/dist/anti-drift/evaluator.js.map +0 -1
  74. package/dist/anti-drift/evaluator.test.js +0 -78
  75. package/dist/anti-drift/rules.d.ts +0 -80
  76. package/dist/anti-drift/rules.d.ts.map +0 -1
  77. package/dist/anti-drift/rules.js +0 -368
  78. package/dist/anti-drift/rules.js.map +0 -1
  79. package/dist/anti-drift/rules.test.js +0 -213
  80. package/dist/anti-drift/state.d.ts +0 -107
  81. package/dist/anti-drift/state.d.ts.map +0 -1
  82. package/dist/anti-drift/state.js +0 -177
  83. package/dist/anti-drift/state.js.map +0 -1
  84. package/dist/anti-drift/state.test.js +0 -120
  85. package/dist/chat/adapters/discord.d.ts +0 -41
  86. package/dist/chat/adapters/discord.d.ts.map +0 -1
  87. package/dist/chat/adapters/discord.js +0 -176
  88. package/dist/chat/adapters/discord.js.map +0 -1
  89. package/dist/chat/adapters/discord.test.js +0 -25
  90. package/dist/chat/adapters/slack.d.ts +0 -43
  91. package/dist/chat/adapters/slack.d.ts.map +0 -1
  92. package/dist/chat/adapters/slack.js +0 -172
  93. package/dist/chat/adapters/slack.js.map +0 -1
  94. package/dist/chat/adapters/slack.test.js +0 -30
  95. package/dist/chat/adapters/telegram.d.ts +0 -148
  96. package/dist/chat/adapters/telegram.d.ts.map +0 -1
  97. package/dist/chat/adapters/telegram.js +0 -498
  98. package/dist/chat/adapters/telegram.js.map +0 -1
  99. package/dist/chat/adapters/telegram.test.js +0 -94
  100. package/dist/chat/config.d.ts +0 -98
  101. package/dist/chat/config.d.ts.map +0 -1
  102. package/dist/chat/config.js +0 -185
  103. package/dist/chat/config.js.map +0 -1
  104. package/dist/chat/daemon/active-project.d.ts +0 -17
  105. package/dist/chat/daemon/active-project.d.ts.map +0 -1
  106. package/dist/chat/daemon/active-project.js +0 -23
  107. package/dist/chat/daemon/active-project.js.map +0 -1
  108. package/dist/chat/daemon/autospawn.d.ts +0 -40
  109. package/dist/chat/daemon/autospawn.d.ts.map +0 -1
  110. package/dist/chat/daemon/autospawn.js +0 -129
  111. package/dist/chat/daemon/autospawn.js.map +0 -1
  112. package/dist/chat/daemon/autospawn.test.js +0 -112
  113. package/dist/chat/daemon/cli.d.ts +0 -18
  114. package/dist/chat/daemon/cli.d.ts.map +0 -1
  115. package/dist/chat/daemon/cli.js +0 -71
  116. package/dist/chat/daemon/cli.js.map +0 -1
  117. package/dist/chat/daemon/collisions.js +0 -384
  118. package/dist/chat/daemon/health-check.d.ts +0 -69
  119. package/dist/chat/daemon/health-check.d.ts.map +0 -1
  120. package/dist/chat/daemon/health-check.js +0 -112
  121. package/dist/chat/daemon/health-check.js.map +0 -1
  122. package/dist/chat/daemon/inbox-read.d.ts +0 -35
  123. package/dist/chat/daemon/inbox-read.d.ts.map +0 -1
  124. package/dist/chat/daemon/inbox-read.js +0 -75
  125. package/dist/chat/daemon/inbox-read.js.map +0 -1
  126. package/dist/chat/daemon/inbox-read.test.js +0 -97
  127. package/dist/chat/daemon/inbox.d.ts +0 -63
  128. package/dist/chat/daemon/inbox.d.ts.map +0 -1
  129. package/dist/chat/daemon/inbox.js +0 -56
  130. package/dist/chat/daemon/inbox.js.map +0 -1
  131. package/dist/chat/daemon/inbox.test.js +0 -110
  132. package/dist/chat/daemon/lifecycle.d.ts +0 -71
  133. package/dist/chat/daemon/lifecycle.d.ts.map +0 -1
  134. package/dist/chat/daemon/lifecycle.js +0 -221
  135. package/dist/chat/daemon/lifecycle.js.map +0 -1
  136. package/dist/chat/daemon/lifecycle.test.js +0 -163
  137. package/dist/chat/daemon/protocol.d.ts +0 -107
  138. package/dist/chat/daemon/protocol.d.ts.map +0 -1
  139. package/dist/chat/daemon/protocol.js +0 -54
  140. package/dist/chat/daemon/protocol.js.map +0 -1
  141. package/dist/chat/daemon/routing.d.ts +0 -140
  142. package/dist/chat/daemon/routing.d.ts.map +0 -1
  143. package/dist/chat/daemon/routing.js +0 -198
  144. package/dist/chat/daemon/routing.js.map +0 -1
  145. package/dist/chat/daemon/routing.test.js +0 -259
  146. package/dist/chat/daemon/rpc-client.d.ts +0 -45
  147. package/dist/chat/daemon/rpc-client.d.ts.map +0 -1
  148. package/dist/chat/daemon/rpc-client.js +0 -133
  149. package/dist/chat/daemon/rpc-client.js.map +0 -1
  150. package/dist/chat/daemon/rpc-server.d.ts +0 -39
  151. package/dist/chat/daemon/rpc-server.d.ts.map +0 -1
  152. package/dist/chat/daemon/rpc-server.js +0 -385
  153. package/dist/chat/daemon/rpc-server.js.map +0 -1
  154. package/dist/chat/daemon/rpc.test.js +0 -177
  155. package/dist/chat/daemon/subscribers.js +0 -257
  156. package/dist/chat/daemon/worker.d.ts +0 -27
  157. package/dist/chat/daemon/worker.d.ts.map +0 -1
  158. package/dist/chat/daemon/worker.js +0 -313
  159. package/dist/chat/daemon/worker.js.map +0 -1
  160. package/dist/chat/daemon/workspace-topic.js +0 -324
  161. package/dist/chat/env-token.d.ts +0 -60
  162. package/dist/chat/env-token.d.ts.map +0 -1
  163. package/dist/chat/env-token.js +0 -137
  164. package/dist/chat/env-token.js.map +0 -1
  165. package/dist/chat/env-token.test.js +0 -160
  166. package/dist/chat/factory.d.ts +0 -30
  167. package/dist/chat/factory.d.ts.map +0 -1
  168. package/dist/chat/factory.js +0 -50
  169. package/dist/chat/factory.js.map +0 -1
  170. package/dist/chat/factory.test.js +0 -55
  171. package/dist/chat/gateway.d.ts +0 -176
  172. package/dist/chat/gateway.d.ts.map +0 -1
  173. package/dist/chat/gateway.js +0 -146
  174. package/dist/chat/gateway.js.map +0 -1
  175. package/dist/chat/gateway.test.js +0 -192
  176. package/dist/claude-md.d.ts +0 -39
  177. package/dist/claude-md.d.ts.map +0 -1
  178. package/dist/claude-md.js +0 -113
  179. package/dist/claude-md.js.map +0 -1
  180. package/dist/claude-md.test.js +0 -91
  181. package/dist/codex/activate.d.ts +0 -66
  182. package/dist/codex/activate.d.ts.map +0 -1
  183. package/dist/codex/activate.js +0 -329
  184. package/dist/codex/activate.js.map +0 -1
  185. package/dist/codex/activate.test.js +0 -229
  186. package/dist/codex/bundled-default/bundled-default.test.js +0 -161
  187. package/dist/codex/cli-publish.test.js +0 -133
  188. package/dist/codex/cli.d.ts +0 -35
  189. package/dist/codex/cli.d.ts.map +0 -1
  190. package/dist/codex/cli.js +0 -554
  191. package/dist/codex/cli.js.map +0 -1
  192. package/dist/codex/cli.test.js +0 -277
  193. package/dist/codex/import-skill-md.d.ts +0 -53
  194. package/dist/codex/import-skill-md.d.ts.map +0 -1
  195. package/dist/codex/import-skill-md.js +0 -236
  196. package/dist/codex/import-skill-md.js.map +0 -1
  197. package/dist/codex/import-skill-md.test.js +0 -225
  198. package/dist/codex/loader.d.ts +0 -27
  199. package/dist/codex/loader.d.ts.map +0 -1
  200. package/dist/codex/loader.js +0 -86
  201. package/dist/codex/loader.js.map +0 -1
  202. package/dist/codex/loader.test.js +0 -75
  203. package/dist/codex/parse.d.ts +0 -28
  204. package/dist/codex/parse.d.ts.map +0 -1
  205. package/dist/codex/parse.js +0 -309
  206. package/dist/codex/parse.js.map +0 -1
  207. package/dist/codex/parse.test.js +0 -241
  208. package/dist/codex/store.d.ts +0 -87
  209. package/dist/codex/store.d.ts.map +0 -1
  210. package/dist/codex/store.js +0 -205
  211. package/dist/codex/store.js.map +0 -1
  212. package/dist/codex/store.test.js +0 -242
  213. package/dist/codex/types.d.ts +0 -398
  214. package/dist/codex/types.d.ts.map +0 -1
  215. package/dist/codex/types.js +0 -21
  216. package/dist/codex/types.js.map +0 -1
  217. package/dist/config.d.ts +0 -53
  218. package/dist/config.d.ts.map +0 -1
  219. package/dist/config.js +0 -202
  220. package/dist/config.js.map +0 -1
  221. package/dist/config.test.js +0 -117
  222. package/dist/engine/cli.d.ts +0 -14
  223. package/dist/engine/cli.d.ts.map +0 -1
  224. package/dist/engine/cli.js +0 -171
  225. package/dist/engine/cli.js.map +0 -1
  226. package/dist/engine/client.d.ts +0 -219
  227. package/dist/engine/client.d.ts.map +0 -1
  228. package/dist/engine/client.js +0 -312
  229. package/dist/engine/client.js.map +0 -1
  230. package/dist/engine/config.d.ts +0 -62
  231. package/dist/engine/config.d.ts.map +0 -1
  232. package/dist/engine/config.js +0 -223
  233. package/dist/engine/config.js.map +0 -1
  234. package/dist/engine/index.d.ts +0 -17
  235. package/dist/engine/index.d.ts.map +0 -1
  236. package/dist/engine/index.js +0 -16
  237. package/dist/engine/index.js.map +0 -1
  238. package/dist/engine/resolver.d.ts +0 -62
  239. package/dist/engine/resolver.d.ts.map +0 -1
  240. package/dist/engine/resolver.js +0 -103
  241. package/dist/engine/resolver.js.map +0 -1
  242. package/dist/engine/singleton.d.ts +0 -95
  243. package/dist/engine/singleton.d.ts.map +0 -1
  244. package/dist/engine/singleton.js +0 -325
  245. package/dist/engine/singleton.js.map +0 -1
  246. package/dist/engine/types.d.ts +0 -402
  247. package/dist/engine/types.d.ts.map +0 -1
  248. package/dist/engine/types.js +0 -22
  249. package/dist/engine/types.js.map +0 -1
  250. package/dist/engine-binary-resolver.js +0 -110
  251. package/dist/engine-binary-resolver.test.js +0 -61
  252. package/dist/engine-cli.js +0 -60
  253. package/dist/engine-client.js +0 -301
  254. package/dist/engine-client.test.js +0 -118
  255. package/dist/functions/chain_state.d.ts +0 -51
  256. package/dist/functions/chain_state.d.ts.map +0 -1
  257. package/dist/functions/chain_state.js +0 -59
  258. package/dist/functions/chain_state.js.map +0 -1
  259. package/dist/hooks/drift-catalog.d.ts +0 -68
  260. package/dist/hooks/drift-catalog.d.ts.map +0 -1
  261. package/dist/hooks/drift-catalog.js +0 -184
  262. package/dist/hooks/drift-catalog.js.map +0 -1
  263. package/dist/hooks/drift-catalog.test.js +0 -154
  264. package/dist/hooks/drift-patterns.d.ts +0 -110
  265. package/dist/hooks/drift-patterns.d.ts.map +0 -1
  266. package/dist/hooks/drift-patterns.js +0 -289
  267. package/dist/hooks/drift-patterns.js.map +0 -1
  268. package/dist/hooks/drift-patterns.test.js +0 -325
  269. package/dist/hooks/engine-vocab-gate.d.ts +0 -108
  270. package/dist/hooks/engine-vocab-gate.d.ts.map +0 -1
  271. package/dist/hooks/engine-vocab-gate.js +0 -225
  272. package/dist/hooks/engine-vocab-gate.js.map +0 -1
  273. package/dist/hooks/engine-vocab-gate.test.js +0 -170
  274. package/dist/hooks/heartbeat.d.ts +0 -107
  275. package/dist/hooks/heartbeat.d.ts.map +0 -1
  276. package/dist/hooks/heartbeat.js +0 -316
  277. package/dist/hooks/heartbeat.js.map +0 -1
  278. package/dist/hooks/heartbeat.test.js +0 -393
  279. package/dist/hooks/honesty-ledger-session-scope.test.js +0 -100
  280. package/dist/hooks/honesty-ledger.d.ts +0 -123
  281. package/dist/hooks/honesty-ledger.d.ts.map +0 -1
  282. package/dist/hooks/honesty-ledger.js +0 -226
  283. package/dist/hooks/honesty-ledger.js.map +0 -1
  284. package/dist/hooks/honesty-ledger.test.js +0 -466
  285. package/dist/hooks/inline-report-check.d.ts +0 -63
  286. package/dist/hooks/inline-report-check.d.ts.map +0 -1
  287. package/dist/hooks/inline-report-check.js +0 -88
  288. package/dist/hooks/inline-report-check.js.map +0 -1
  289. package/dist/hooks/inline-report-check.test.js +0 -96
  290. package/dist/hooks/pre-tool-use.d.ts +0 -62
  291. package/dist/hooks/pre-tool-use.d.ts.map +0 -1
  292. package/dist/hooks/pre-tool-use.js +0 -342
  293. package/dist/hooks/pre-tool-use.js.map +0 -1
  294. package/dist/hooks/pre-tool-use.test.js +0 -134
  295. package/dist/hooks/session-end.d.ts +0 -15
  296. package/dist/hooks/session-end.d.ts.map +0 -1
  297. package/dist/hooks/session-end.js +0 -60
  298. package/dist/hooks/session-end.js.map +0 -1
  299. package/dist/hooks/session-end.test.js +0 -52
  300. package/dist/hooks/stop.d.ts +0 -35
  301. package/dist/hooks/stop.d.ts.map +0 -1
  302. package/dist/hooks/stop.js +0 -136
  303. package/dist/hooks/stop.js.map +0 -1
  304. package/dist/hooks/transcript-active-task.test.js +0 -342
  305. package/dist/hooks/transcript.d.ts +0 -26
  306. package/dist/hooks/transcript.d.ts.map +0 -1
  307. package/dist/hooks/transcript.js +0 -266
  308. package/dist/hooks/transcript.js.map +0 -1
  309. package/dist/hooks/transcript.test.js +0 -103
  310. package/dist/hooks/user-prompt-submit.d.ts +0 -74
  311. package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
  312. package/dist/hooks/user-prompt-submit.js +0 -256
  313. package/dist/hooks/user-prompt-submit.js.map +0 -1
  314. package/dist/hooks/user-prompt-submit.test.js +0 -118
  315. package/dist/hooks/versioning-gate.d.ts +0 -101
  316. package/dist/hooks/versioning-gate.d.ts.map +0 -1
  317. package/dist/hooks/versioning-gate.js +0 -245
  318. package/dist/hooks/versioning-gate.js.map +0 -1
  319. package/dist/hooks/versioning-gate.test.js +0 -368
  320. package/dist/hooks/workflow-gate.d.ts +0 -64
  321. package/dist/hooks/workflow-gate.d.ts.map +0 -1
  322. package/dist/hooks/workflow-gate.js +0 -152
  323. package/dist/hooks/workflow-gate.js.map +0 -1
  324. package/dist/hooks/workflow-gate.test.js +0 -197
  325. package/dist/hooks-cli.d.ts +0 -25
  326. package/dist/hooks-cli.d.ts.map +0 -1
  327. package/dist/hooks-cli.js +0 -286
  328. package/dist/hooks-cli.js.map +0 -1
  329. package/dist/hooks-cli.test.js +0 -148
  330. package/dist/origin.d.ts +0 -16
  331. package/dist/origin.d.ts.map +0 -1
  332. package/dist/origin.js +0 -92
  333. package/dist/origin.js.map +0 -1
  334. package/dist/packs/seed_lessons_ingest.d.ts +0 -30
  335. package/dist/packs/seed_lessons_ingest.d.ts.map +0 -1
  336. package/dist/packs/seed_lessons_ingest.js +0 -107
  337. package/dist/packs/seed_lessons_ingest.js.map +0 -1
  338. package/dist/project-cli.d.ts +0 -7
  339. package/dist/project-cli.d.ts.map +0 -1
  340. package/dist/project-cli.js +0 -145
  341. package/dist/project-cli.js.map +0 -1
  342. package/dist/project.d.ts +0 -127
  343. package/dist/project.d.ts.map +0 -1
  344. package/dist/project.js +0 -281
  345. package/dist/project.js.map +0 -1
  346. package/dist/project.test.js +0 -287
  347. package/dist/rag/backends/loop_engine.d.ts +0 -61
  348. package/dist/rag/backends/loop_engine.d.ts.map +0 -1
  349. package/dist/rag/backends/loop_engine.js +0 -160
  350. package/dist/rag/backends/loop_engine.js.map +0 -1
  351. package/dist/recall.d.ts +0 -82
  352. package/dist/recall.d.ts.map +0 -1
  353. package/dist/recall.js +0 -81
  354. package/dist/recall.js.map +0 -1
  355. package/dist/runtime/agent_bridge/autospawn.d.ts +0 -131
  356. package/dist/runtime/agent_bridge/autospawn.d.ts.map +0 -1
  357. package/dist/runtime/agent_bridge/autospawn.js +0 -251
  358. package/dist/runtime/agent_bridge/autospawn.js.map +0 -1
  359. package/dist/runtime/chain_state.d.ts +0 -124
  360. package/dist/runtime/chain_state.d.ts.map +0 -1
  361. package/dist/runtime/chain_state.js +0 -189
  362. package/dist/runtime/chain_state.js.map +0 -1
  363. package/dist/runtime/hooks/permission_decision.d.ts +0 -34
  364. package/dist/runtime/hooks/permission_decision.d.ts.map +0 -1
  365. package/dist/runtime/hooks/permission_decision.js +0 -39
  366. package/dist/runtime/hooks/permission_decision.js.map +0 -1
  367. package/dist/runtime/workflow_fsm.d.ts +0 -21
  368. package/dist/runtime/workflow_fsm.d.ts.map +0 -1
  369. package/dist/runtime/workflow_fsm.js +0 -25
  370. package/dist/runtime/workflow_fsm.js.map +0 -1
  371. package/dist/runtime/workflow_map.d.ts +0 -26
  372. package/dist/runtime/workflow_map.d.ts.map +0 -1
  373. package/dist/runtime/workflow_map.js +0 -38
  374. package/dist/runtime/workflow_map.js.map +0 -1
  375. package/dist/scope.d.ts +0 -48
  376. package/dist/scope.d.ts.map +0 -1
  377. package/dist/scope.js +0 -111
  378. package/dist/scope.js.map +0 -1
  379. package/dist/setup/cli/topic_create_step.d.ts +0 -84
  380. package/dist/setup/cli/topic_create_step.d.ts.map +0 -1
  381. package/dist/setup/cli/topic_create_step.js +0 -213
  382. package/dist/setup/cli/topic_create_step.js.map +0 -1
  383. package/dist/system-export.d.ts +0 -65
  384. package/dist/system-export.d.ts.map +0 -1
  385. package/dist/system-export.js +0 -194
  386. package/dist/system-export.js.map +0 -1
  387. package/dist/utterance/classifier.d.ts +0 -53
  388. package/dist/utterance/classifier.d.ts.map +0 -1
  389. package/dist/utterance/classifier.js +0 -184
  390. package/dist/utterance/classifier.js.map +0 -1
  391. package/dist/utterance/classifier.test.js +0 -147
@@ -1,316 +0,0 @@
1
- /**
2
- * Token-threshold heartbeat — opensquid's in-ecosystem replacement for
3
- * the auto-classifier subprocess.
4
- *
5
- * The agent (Claude Code itself) is the LLM in the loop and is already
6
- * authenticated. There is no reason to spawn a second LLM subprocess
7
- * to classify what the user said — the agent can do that work inline
8
- * per the CLAUDE.md classify-and-act block.
9
- *
10
- * What the agent IS bad at: noticing when its in-context understanding
11
- * has drifted enough that it should re-anchor via `recall`. That's a
12
- * timing problem opensquid can solve cleanly: count tokens in the
13
- * transcript, compare to a checkpoint, and if the delta crosses a
14
- * threshold, drop a one-line nudge into the next turn's UserPromptSubmit
15
- * stdout so the agent sees it at the top of its system context.
16
- *
17
- * Flow:
18
- * Stop hook (every turn) → `checkAndMaybeArm(sessionId, transcriptPath)`
19
- * - Estimates total transcript tokens (char count / 4)
20
- * - Loads last checkpoint from `<data-root>/sessions/<sid>/heartbeat-checkpoint.json`
21
- * - If (current - last) >= threshold, writes a marker at
22
- * `<data-root>/sessions/<sid>/heartbeat-pending.txt` AND updates
23
- * the checkpoint to the current count
24
- * UserPromptSubmit hook (next turn) → `consumePendingHeartbeat(sessionId)`
25
- * - Reads marker if present, returns its contents (for stdout injection)
26
- * - Deletes the marker so the nudge fires exactly once per crossing
27
- *
28
- * Threshold: `OPENSQUID_HEARTBEAT_TOKENS` env, default 20000.
29
- * Calibrated against the existing CLAUDE.md "drifts after ~10 unrelated
30
- * turns" observation (~2000 tokens per turn typical).
31
- *
32
- * Zero subprocess. Zero external LLM. Zero new dependency. The agent
33
- * (which already exists in the loop) does the actual recall + classify
34
- * work inline after seeing the nudge.
35
- */
36
- import { promises as fs } from "node:fs";
37
- import * as path from "node:path";
38
- import { resolveDataRoot } from "../codex/store.js";
39
- /** Default threshold — see file docstring for rationale. */
40
- export const DEFAULT_HEARTBEAT_TOKENS = 20_000;
41
- /**
42
- * Resolve the configured heartbeat threshold. Env var `OPENSQUID_HEARTBEAT_TOKENS`
43
- * overrides; values <= 0 or non-numeric fall back to the default. Returning a
44
- * sentinel `Infinity` would let callers disable cheaply, but we keep the
45
- * contract simple: any positive integer is honored.
46
- */
47
- export function heartbeatThresholdTokens() {
48
- const raw = process.env.OPENSQUID_HEARTBEAT_TOKENS;
49
- if (!raw)
50
- return DEFAULT_HEARTBEAT_TOKENS;
51
- const n = Number.parseInt(raw, 10);
52
- if (!Number.isFinite(n) || n <= 0)
53
- return DEFAULT_HEARTBEAT_TOKENS;
54
- return n;
55
- }
56
- /**
57
- * Rough token estimate from raw text — char-count / 4. Cheap, dependency-
58
- * free, and accurate enough for "did the conversation grow by 20K tokens
59
- * since last checkpoint" decisions. Real tokenizers (tiktoken,
60
- * @anthropic-ai/tokenizer) would be more accurate but add a runtime dep
61
- * for marginal gain on a threshold comparison.
62
- */
63
- export function estimateTokens(text) {
64
- if (!text)
65
- return 0;
66
- return Math.ceil(text.length / 4);
67
- }
68
- /**
69
- * Read the Claude Code transcript file and estimate the agent-facing
70
- * token count for "did the conversation drift since last checkpoint."
71
- *
72
- * 0.7.7 (#161) — replaces the previous whole-file char/4 estimate
73
- * which inflated massively on long sessions because the transcript
74
- * JSONL contains tool_result bodies (file reads, base64 images, git
75
- * logs), thinking blocks, attachments, system frames, and
76
- * permission-mode entries that don't represent conversation pressure.
77
- *
78
- * On a real session today this dropped a 125 MB transcript from
79
- * reporting "31 million tokens" to a number that actually reflects
80
- * the user+assistant exchange, so heartbeat fires when it should
81
- * instead of constantly off inflated numbers.
82
- *
83
- * Counts:
84
- * - user message text/string content
85
- * - assistant text content
86
- * - tool_result content — capped at 2000 chars per result, since
87
- * the agent does read these but they shouldn't dominate
88
- *
89
- * Skips:
90
- * - thinking blocks (agent internal CoT)
91
- * - tool_use args (compact, plus they're outbound work not context)
92
- * - system / file-history-snapshot / permission-mode / ai-title /
93
- * last-prompt / attachment frames
94
- *
95
- * Returns 0 on any read failure (graceful, gate stays open).
96
- */
97
- const TOOL_RESULT_CAP_CHARS = 2000;
98
- export async function estimateTranscriptTokens(transcriptPath) {
99
- try {
100
- const raw = await fs.readFile(transcriptPath, "utf8");
101
- let total = 0;
102
- for (const line of raw.split("\n")) {
103
- if (!line.trim())
104
- continue;
105
- let parsed;
106
- try {
107
- parsed = JSON.parse(line);
108
- }
109
- catch {
110
- continue;
111
- }
112
- if (parsed.type !== "user" && parsed.type !== "assistant")
113
- continue;
114
- total += countContentChars(parsed.message?.content);
115
- }
116
- return Math.ceil(total / 4);
117
- }
118
- catch {
119
- return 0;
120
- }
121
- }
122
- function countContentChars(content) {
123
- if (typeof content === "string")
124
- return content.length;
125
- if (!Array.isArray(content))
126
- return 0;
127
- let chars = 0;
128
- for (const block of content) {
129
- if (!block || typeof block !== "object")
130
- continue;
131
- const b = block;
132
- switch (b.type) {
133
- case "text":
134
- if (typeof b.text === "string")
135
- chars += b.text.length;
136
- break;
137
- case "tool_result": {
138
- // tool_result content can be a string OR an array of blocks
139
- const c = b.content;
140
- if (typeof c === "string") {
141
- chars += Math.min(c.length, TOOL_RESULT_CAP_CHARS);
142
- }
143
- else if (Array.isArray(c)) {
144
- let inner = 0;
145
- for (const part of c) {
146
- if (part && typeof part === "object") {
147
- const p = part;
148
- if (typeof p.text === "string")
149
- inner += p.text.length;
150
- }
151
- }
152
- chars += Math.min(inner, TOOL_RESULT_CAP_CHARS);
153
- }
154
- break;
155
- }
156
- // thinking / tool_use / image / etc. — intentionally not counted
157
- }
158
- }
159
- return chars;
160
- }
161
- function checkpointPath(sessionId, dataRoot) {
162
- return path.join(resolveDataRoot(dataRoot), "sessions", sessionId, "heartbeat-checkpoint.json");
163
- }
164
- function pendingPath(sessionId, dataRoot) {
165
- return path.join(resolveDataRoot(dataRoot), "sessions", sessionId, "heartbeat-pending.txt");
166
- }
167
- export async function readCheckpoint(sessionId, options = {}) {
168
- try {
169
- const raw = await fs.readFile(checkpointPath(sessionId, options.dataRoot), "utf8");
170
- const parsed = JSON.parse(raw);
171
- if (parsed &&
172
- typeof parsed.last_token_count === "number" &&
173
- typeof parsed.last_checkpoint_at === "string") {
174
- return parsed;
175
- }
176
- return null;
177
- }
178
- catch {
179
- return null;
180
- }
181
- }
182
- export async function writeCheckpoint(sessionId, checkpoint, options = {}) {
183
- const p = checkpointPath(sessionId, options.dataRoot);
184
- await fs.mkdir(path.dirname(p), { recursive: true });
185
- await fs.writeFile(p, JSON.stringify(checkpoint, null, 2) + "\n", "utf8");
186
- }
187
- /**
188
- * Build the one-line nudge that gets injected into the agent's next-
189
- * turn system context. Kept short — the agent's existing system prompt
190
- * (CLAUDE.md classify-and-act + the user-is-god promoted lesson)
191
- * already tells it what to do with classification work.
192
- */
193
- export function formatHeartbeatNudge(delta, threshold) {
194
- return (`🦑 [opensquid heartbeat] ${delta.toLocaleString()} tokens since last re-anchor ` +
195
- `(threshold: ${threshold.toLocaleString()}). Before answering: ` +
196
- `(1) call \`recall\` with your current task to refresh context; ` +
197
- `(2) scan recent user turns for substantive items needing memorize / remember / promote.`);
198
- }
199
- /**
200
- * Stop-hook entrypoint: check whether the transcript has grown past
201
- * the threshold since the last checkpoint. If so, arm a pending
202
- * heartbeat marker for UserPromptSubmit to surface on the next turn,
203
- * and bump the checkpoint to the current count.
204
- *
205
- * Returns the nudge text written (or null if no arming happened) for
206
- * test introspection and Stop-hook stderr surfacing.
207
- */
208
- export async function checkAndMaybeArm(sessionId, transcriptPath, options = {}) {
209
- const threshold = options.thresholdTokens ?? heartbeatThresholdTokens();
210
- const currentTokens = await estimateTranscriptTokens(transcriptPath);
211
- if (currentTokens === 0)
212
- return null;
213
- const previous = await readCheckpoint(sessionId, { dataRoot: options.dataRoot });
214
- let baseline = previous?.last_token_count ?? 0;
215
- // 0.7.7 (#161, audit MED #3): the estimator was rewritten in 0.7.7
216
- // to count only conversation bodies (not whole-file char/4) — typical
217
- // 20x deflation vs the old value. Existing checkpoints written by
218
- // the old estimator now show wildly higher numbers than the new
219
- // estimator returns, which would make `delta = current - baseline`
220
- // permanently negative → heartbeat never fires. Detect that case
221
- // (baseline > 10x current) and reset the baseline to 0 so the next
222
- // crossing is the first under the new regime.
223
- if (baseline > currentTokens * 10) {
224
- baseline = 0;
225
- }
226
- const delta = currentTokens - baseline;
227
- if (delta < threshold)
228
- return null;
229
- const nudge = formatHeartbeatNudge(delta, threshold);
230
- const p = pendingPath(sessionId, options.dataRoot);
231
- await fs.mkdir(path.dirname(p), { recursive: true });
232
- await fs.writeFile(p, nudge + "\n", "utf8");
233
- await writeCheckpoint(sessionId, { last_token_count: currentTokens, last_checkpoint_at: new Date().toISOString() }, { dataRoot: options.dataRoot });
234
- return nudge;
235
- }
236
- /**
237
- * UserPromptSubmit-hook entrypoint: consume any armed heartbeat marker
238
- * and return its text. Caller injects via stdout. Marker is removed so
239
- * the nudge fires exactly once per threshold crossing.
240
- */
241
- export async function consumePendingHeartbeat(sessionId, options = {}) {
242
- const p = pendingPath(sessionId, options.dataRoot);
243
- let nudge;
244
- try {
245
- nudge = (await fs.readFile(p, "utf8")).trim();
246
- }
247
- catch {
248
- return null;
249
- }
250
- try {
251
- await fs.rm(p);
252
- }
253
- catch {
254
- // already gone — concurrent UserPromptSubmit or test cleanup
255
- }
256
- return nudge.length === 0 ? null : nudge;
257
- }
258
- /** Test/SessionEnd helper — paths the cleanup phase removes. */
259
- export function heartbeatSessionFiles(sessionId, dataRoot) {
260
- return [
261
- checkpointPath(sessionId, dataRoot),
262
- pendingPath(sessionId, dataRoot),
263
- recallRequiredFlagPath(sessionId, dataRoot),
264
- ];
265
- }
266
- // =====================================================================
267
- // 0.7.26 / D7 — recall-required flag
268
- //
269
- // After the heartbeat nudge is consumed (surfaced to the agent via
270
- // UserPromptSubmit), set a per-session flag that BLOCKS any
271
- // mcp__opensquid__* tool call other than `recall` until the agent
272
- // actually calls recall.
273
- //
274
- // Catches D7: heartbeat fires, agent acknowledges, agent continues
275
- // without calling recall. The mechanism exists, the agent's compliance
276
- // was the failure point. Make it teeth.
277
- //
278
- // Lifecycle:
279
- // - markRecallRequired: called from UPS after consumePendingHeartbeat
280
- // returns a nudge
281
- // - isRecallRequired: checked from pre-tool-use before any
282
- // mcp__opensquid__* tool call
283
- // - clearRecallRequired: called from pre-tool-use when the agent
284
- // calls mcp__opensquid__recall
285
- // =====================================================================
286
- function recallRequiredFlagPath(sessionId, dataRoot) {
287
- return path.join(resolveDataRoot(dataRoot), "sessions", sessionId, "recall-required.flag");
288
- }
289
- /** Set the flag — called after the heartbeat nudge is surfaced. */
290
- export async function markRecallRequired(sessionId, options = {}) {
291
- const p = recallRequiredFlagPath(sessionId, options.dataRoot);
292
- await fs.mkdir(path.dirname(p), { recursive: true });
293
- await fs.writeFile(p, new Date().toISOString() + "\n", "utf8");
294
- }
295
- /** Check whether the flag is set for this session. */
296
- export async function isRecallRequired(sessionId, options = {}) {
297
- const p = recallRequiredFlagPath(sessionId, options.dataRoot);
298
- try {
299
- await fs.access(p);
300
- return true;
301
- }
302
- catch {
303
- return false;
304
- }
305
- }
306
- /** Clear the flag — called after the agent calls recall. */
307
- export async function clearRecallRequired(sessionId, options = {}) {
308
- const p = recallRequiredFlagPath(sessionId, options.dataRoot);
309
- try {
310
- await fs.rm(p);
311
- }
312
- catch {
313
- /* already gone */
314
- }
315
- }
316
- //# sourceMappingURL=heartbeat.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src.legacy/hooks/heartbeat.ts"],"names":[],"mappings":"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"}