opensquid 0.5.432 → 0.5.447

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 (440) 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/event.d.ts.map +1 -1
  7. package/dist/functions/event.js +18 -2
  8. package/dist/functions/event.js.map +1 -1
  9. package/dist/functions/index.d.ts +4 -0
  10. package/dist/functions/index.d.ts.map +1 -1
  11. package/dist/functions/index.js +4 -0
  12. package/dist/functions/index.js.map +1 -1
  13. package/dist/functions/inject_context.d.ts +18 -0
  14. package/dist/functions/inject_context.d.ts.map +1 -0
  15. package/dist/functions/inject_context.js +16 -0
  16. package/dist/functions/inject_context.js.map +1 -0
  17. package/dist/functions/procedure_pre_inject.d.ts +23 -0
  18. package/dist/functions/procedure_pre_inject.d.ts.map +1 -0
  19. package/dist/functions/procedure_pre_inject.js +49 -0
  20. package/dist/functions/procedure_pre_inject.js.map +1 -0
  21. package/dist/functions/registry.d.ts +6 -0
  22. package/dist/functions/registry.d.ts.map +1 -1
  23. package/dist/functions/registry.js.map +1 -1
  24. package/dist/functions/rubric_pre_inject.d.ts.map +1 -1
  25. package/dist/functions/rubric_pre_inject.js +2 -1
  26. package/dist/functions/rubric_pre_inject.js.map +1 -1
  27. package/dist/functions/set_request_type.d.ts +11 -0
  28. package/dist/functions/set_request_type.d.ts.map +1 -0
  29. package/dist/functions/set_request_type.js +34 -0
  30. package/dist/functions/set_request_type.js.map +1 -0
  31. package/dist/functions/shell_parse.d.ts +1 -0
  32. package/dist/functions/shell_parse.d.ts.map +1 -1
  33. package/dist/functions/shell_parse.js +22 -4
  34. package/dist/functions/shell_parse.js.map +1 -1
  35. package/dist/packs/loader.d.ts.map +1 -1
  36. package/dist/packs/loader.js +26 -0
  37. package/dist/packs/loader.js.map +1 -1
  38. package/dist/runtime/bootstrap.d.ts.map +1 -1
  39. package/dist/runtime/bootstrap.js +6 -0
  40. package/dist/runtime/bootstrap.js.map +1 -1
  41. package/dist/runtime/fsm_state.d.ts +6 -0
  42. package/dist/runtime/fsm_state.d.ts.map +1 -1
  43. package/dist/runtime/fsm_state.js +14 -0
  44. package/dist/runtime/fsm_state.js.map +1 -1
  45. package/dist/runtime/handoff/render.d.ts +5 -4
  46. package/dist/runtime/handoff/render.d.ts.map +1 -1
  47. package/dist/runtime/handoff/render.js +7 -7
  48. package/dist/runtime/handoff/render.js.map +1 -1
  49. package/dist/runtime/handoff/stranded_scoping.d.ts +21 -0
  50. package/dist/runtime/handoff/stranded_scoping.d.ts.map +1 -0
  51. package/dist/runtime/handoff/stranded_scoping.js +39 -0
  52. package/dist/runtime/handoff/stranded_scoping.js.map +1 -0
  53. package/dist/runtime/hooks/active_task_mirror.js +0 -0
  54. package/dist/runtime/hooks/apply_patch.js +0 -0
  55. package/dist/runtime/hooks/dispatch.d.ts.map +1 -1
  56. package/dist/runtime/hooks/dispatch.js +3 -0
  57. package/dist/runtime/hooks/dispatch.js.map +1 -1
  58. package/dist/runtime/hooks/hook_output.js +0 -0
  59. package/dist/runtime/hooks/memory_reconcile.js +0 -0
  60. package/dist/runtime/hooks/new_project_detect.js +0 -0
  61. package/dist/runtime/hooks/profession_resolver.js +0 -0
  62. package/dist/runtime/hooks/scope_intent.js +0 -0
  63. package/dist/runtime/hooks/session-start.js +17 -0
  64. package/dist/runtime/hooks/session-start.js.map +1 -1
  65. package/dist/runtime/hooks/session_id.js +0 -0
  66. package/dist/runtime/hooks/session_liveness.js +0 -0
  67. package/dist/runtime/hooks/stop_drive.js +0 -0
  68. package/dist/runtime/hooks/stop_stream.js +0 -0
  69. package/dist/runtime/hooks/subagent_guard.js +0 -0
  70. package/dist/runtime/hooks/transcript.js +0 -0
  71. package/dist/runtime/hooks/transcript_tasks.js +0 -0
  72. package/dist/runtime/hooks/user-prompt-submit.d.ts.map +1 -1
  73. package/dist/runtime/hooks/user-prompt-submit.js +22 -1
  74. package/dist/runtime/hooks/user-prompt-submit.js.map +1 -1
  75. package/dist/runtime/ralph/orchestrator.d.ts.map +1 -1
  76. package/dist/runtime/ralph/orchestrator.js +2 -1
  77. package/dist/runtime/ralph/orchestrator.js.map +1 -1
  78. package/dist/runtime/request_type.d.ts +33 -0
  79. package/dist/runtime/request_type.d.ts.map +1 -0
  80. package/dist/runtime/request_type.js +38 -0
  81. package/dist/runtime/request_type.js.map +1 -0
  82. package/dist/runtime/session_state.d.ts +11 -0
  83. package/dist/runtime/session_state.d.ts.map +1 -1
  84. package/dist/runtime/session_state.js +30 -0
  85. package/dist/runtime/session_state.js.map +1 -1
  86. package/dist/runtime/types.d.ts +5 -0
  87. package/dist/runtime/types.d.ts.map +1 -1
  88. package/dist/runtime/types.js +3 -0
  89. package/dist/runtime/types.js.map +1 -1
  90. package/dist/setup/cli/limits_state.d.ts.map +1 -1
  91. package/dist/setup/cli/limits_state.js +6 -40
  92. package/dist/setup/cli/limits_state.js.map +1 -1
  93. package/dist/setup/cli/pack_walk.d.ts +32 -0
  94. package/dist/setup/cli/pack_walk.d.ts.map +1 -0
  95. package/dist/setup/cli/pack_walk.js +76 -0
  96. package/dist/setup/cli/pack_walk.js.map +1 -0
  97. package/dist/setup/cli/permissions_state.d.ts.map +1 -1
  98. package/dist/setup/cli/permissions_state.js +6 -37
  99. package/dist/setup/cli/permissions_state.js.map +1 -1
  100. package/dist/setup/cli/triggers_state.d.ts.map +1 -1
  101. package/dist/setup/cli/triggers_state.js +3 -29
  102. package/dist/setup/cli/triggers_state.js.map +1 -1
  103. package/dist/workgraph/events.d.ts.map +1 -1
  104. package/dist/workgraph/events.js +10 -0
  105. package/dist/workgraph/events.js.map +1 -1
  106. package/dist/workgraph/store.d.ts.map +1 -1
  107. package/dist/workgraph/store.js +5 -0
  108. package/dist/workgraph/store.js.map +1 -1
  109. package/dist/workgraph/types.d.ts +2 -1
  110. package/dist/workgraph/types.d.ts.map +1 -1
  111. package/docs/ARCHITECTURE.md +268 -0
  112. package/docs/pack-runtime.md +26 -10
  113. package/package.json +5 -3
  114. package/packs/builtin/coding-flow/procedure.md +43 -0
  115. package/packs/builtin/coding-flow/skills/entry-and-handoffs/skill.yaml +49 -6
  116. package/packs/builtin/coding-flow/skills/pause-stop-guard/skill.yaml +11 -1
  117. package/packs/builtin/default-discipline/manifest.yaml +15 -6
  118. package/packs/builtin/pack-architect/skills/skill-yaml-author-walkthrough/skill.yaml +8 -0
  119. package/dist/anti-drift/evaluator.d.ts +0 -88
  120. package/dist/anti-drift/evaluator.d.ts.map +0 -1
  121. package/dist/anti-drift/evaluator.js +0 -417
  122. package/dist/anti-drift/evaluator.js.map +0 -1
  123. package/dist/anti-drift/evaluator.test.js +0 -78
  124. package/dist/anti-drift/rules.d.ts +0 -80
  125. package/dist/anti-drift/rules.d.ts.map +0 -1
  126. package/dist/anti-drift/rules.js +0 -368
  127. package/dist/anti-drift/rules.js.map +0 -1
  128. package/dist/anti-drift/rules.test.js +0 -213
  129. package/dist/anti-drift/state.d.ts +0 -107
  130. package/dist/anti-drift/state.d.ts.map +0 -1
  131. package/dist/anti-drift/state.js +0 -177
  132. package/dist/anti-drift/state.js.map +0 -1
  133. package/dist/anti-drift/state.test.js +0 -120
  134. package/dist/chat/adapters/discord.d.ts +0 -41
  135. package/dist/chat/adapters/discord.d.ts.map +0 -1
  136. package/dist/chat/adapters/discord.js +0 -176
  137. package/dist/chat/adapters/discord.js.map +0 -1
  138. package/dist/chat/adapters/discord.test.js +0 -25
  139. package/dist/chat/adapters/slack.d.ts +0 -43
  140. package/dist/chat/adapters/slack.d.ts.map +0 -1
  141. package/dist/chat/adapters/slack.js +0 -172
  142. package/dist/chat/adapters/slack.js.map +0 -1
  143. package/dist/chat/adapters/slack.test.js +0 -30
  144. package/dist/chat/adapters/telegram.d.ts +0 -148
  145. package/dist/chat/adapters/telegram.d.ts.map +0 -1
  146. package/dist/chat/adapters/telegram.js +0 -498
  147. package/dist/chat/adapters/telegram.js.map +0 -1
  148. package/dist/chat/adapters/telegram.test.js +0 -94
  149. package/dist/chat/config.d.ts +0 -98
  150. package/dist/chat/config.d.ts.map +0 -1
  151. package/dist/chat/config.js +0 -185
  152. package/dist/chat/config.js.map +0 -1
  153. package/dist/chat/daemon/active-project.d.ts +0 -17
  154. package/dist/chat/daemon/active-project.d.ts.map +0 -1
  155. package/dist/chat/daemon/active-project.js +0 -23
  156. package/dist/chat/daemon/active-project.js.map +0 -1
  157. package/dist/chat/daemon/autospawn.d.ts +0 -40
  158. package/dist/chat/daemon/autospawn.d.ts.map +0 -1
  159. package/dist/chat/daemon/autospawn.js +0 -129
  160. package/dist/chat/daemon/autospawn.js.map +0 -1
  161. package/dist/chat/daemon/autospawn.test.js +0 -112
  162. package/dist/chat/daemon/cli.d.ts +0 -18
  163. package/dist/chat/daemon/cli.d.ts.map +0 -1
  164. package/dist/chat/daemon/cli.js +0 -71
  165. package/dist/chat/daemon/cli.js.map +0 -1
  166. package/dist/chat/daemon/collisions.js +0 -384
  167. package/dist/chat/daemon/health-check.d.ts +0 -69
  168. package/dist/chat/daemon/health-check.d.ts.map +0 -1
  169. package/dist/chat/daemon/health-check.js +0 -112
  170. package/dist/chat/daemon/health-check.js.map +0 -1
  171. package/dist/chat/daemon/inbox-read.d.ts +0 -35
  172. package/dist/chat/daemon/inbox-read.d.ts.map +0 -1
  173. package/dist/chat/daemon/inbox-read.js +0 -75
  174. package/dist/chat/daemon/inbox-read.js.map +0 -1
  175. package/dist/chat/daemon/inbox-read.test.js +0 -97
  176. package/dist/chat/daemon/inbox.d.ts +0 -63
  177. package/dist/chat/daemon/inbox.d.ts.map +0 -1
  178. package/dist/chat/daemon/inbox.js +0 -56
  179. package/dist/chat/daemon/inbox.js.map +0 -1
  180. package/dist/chat/daemon/inbox.test.js +0 -110
  181. package/dist/chat/daemon/lifecycle.d.ts +0 -71
  182. package/dist/chat/daemon/lifecycle.d.ts.map +0 -1
  183. package/dist/chat/daemon/lifecycle.js +0 -221
  184. package/dist/chat/daemon/lifecycle.js.map +0 -1
  185. package/dist/chat/daemon/lifecycle.test.js +0 -163
  186. package/dist/chat/daemon/protocol.d.ts +0 -107
  187. package/dist/chat/daemon/protocol.d.ts.map +0 -1
  188. package/dist/chat/daemon/protocol.js +0 -54
  189. package/dist/chat/daemon/protocol.js.map +0 -1
  190. package/dist/chat/daemon/routing.d.ts +0 -140
  191. package/dist/chat/daemon/routing.d.ts.map +0 -1
  192. package/dist/chat/daemon/routing.js +0 -198
  193. package/dist/chat/daemon/routing.js.map +0 -1
  194. package/dist/chat/daemon/routing.test.js +0 -259
  195. package/dist/chat/daemon/rpc-client.d.ts +0 -45
  196. package/dist/chat/daemon/rpc-client.d.ts.map +0 -1
  197. package/dist/chat/daemon/rpc-client.js +0 -133
  198. package/dist/chat/daemon/rpc-client.js.map +0 -1
  199. package/dist/chat/daemon/rpc-server.d.ts +0 -39
  200. package/dist/chat/daemon/rpc-server.d.ts.map +0 -1
  201. package/dist/chat/daemon/rpc-server.js +0 -385
  202. package/dist/chat/daemon/rpc-server.js.map +0 -1
  203. package/dist/chat/daemon/rpc.test.js +0 -177
  204. package/dist/chat/daemon/subscribers.js +0 -257
  205. package/dist/chat/daemon/worker.d.ts +0 -27
  206. package/dist/chat/daemon/worker.d.ts.map +0 -1
  207. package/dist/chat/daemon/worker.js +0 -313
  208. package/dist/chat/daemon/worker.js.map +0 -1
  209. package/dist/chat/daemon/workspace-topic.js +0 -324
  210. package/dist/chat/env-token.d.ts +0 -60
  211. package/dist/chat/env-token.d.ts.map +0 -1
  212. package/dist/chat/env-token.js +0 -137
  213. package/dist/chat/env-token.js.map +0 -1
  214. package/dist/chat/env-token.test.js +0 -160
  215. package/dist/chat/factory.d.ts +0 -30
  216. package/dist/chat/factory.d.ts.map +0 -1
  217. package/dist/chat/factory.js +0 -50
  218. package/dist/chat/factory.js.map +0 -1
  219. package/dist/chat/factory.test.js +0 -55
  220. package/dist/chat/gateway.d.ts +0 -176
  221. package/dist/chat/gateway.d.ts.map +0 -1
  222. package/dist/chat/gateway.js +0 -146
  223. package/dist/chat/gateway.js.map +0 -1
  224. package/dist/chat/gateway.test.js +0 -192
  225. package/dist/claude-md.d.ts +0 -39
  226. package/dist/claude-md.d.ts.map +0 -1
  227. package/dist/claude-md.js +0 -113
  228. package/dist/claude-md.js.map +0 -1
  229. package/dist/claude-md.test.js +0 -91
  230. package/dist/codex/activate.d.ts +0 -66
  231. package/dist/codex/activate.d.ts.map +0 -1
  232. package/dist/codex/activate.js +0 -329
  233. package/dist/codex/activate.js.map +0 -1
  234. package/dist/codex/activate.test.js +0 -229
  235. package/dist/codex/bundled-default/bundled-default.test.js +0 -161
  236. package/dist/codex/cli-publish.test.js +0 -133
  237. package/dist/codex/cli.d.ts +0 -35
  238. package/dist/codex/cli.d.ts.map +0 -1
  239. package/dist/codex/cli.js +0 -554
  240. package/dist/codex/cli.js.map +0 -1
  241. package/dist/codex/cli.test.js +0 -277
  242. package/dist/codex/import-skill-md.d.ts +0 -53
  243. package/dist/codex/import-skill-md.d.ts.map +0 -1
  244. package/dist/codex/import-skill-md.js +0 -236
  245. package/dist/codex/import-skill-md.js.map +0 -1
  246. package/dist/codex/import-skill-md.test.js +0 -225
  247. package/dist/codex/loader.d.ts +0 -27
  248. package/dist/codex/loader.d.ts.map +0 -1
  249. package/dist/codex/loader.js +0 -86
  250. package/dist/codex/loader.js.map +0 -1
  251. package/dist/codex/loader.test.js +0 -75
  252. package/dist/codex/parse.d.ts +0 -28
  253. package/dist/codex/parse.d.ts.map +0 -1
  254. package/dist/codex/parse.js +0 -309
  255. package/dist/codex/parse.js.map +0 -1
  256. package/dist/codex/parse.test.js +0 -241
  257. package/dist/codex/store.d.ts +0 -87
  258. package/dist/codex/store.d.ts.map +0 -1
  259. package/dist/codex/store.js +0 -205
  260. package/dist/codex/store.js.map +0 -1
  261. package/dist/codex/store.test.js +0 -242
  262. package/dist/codex/types.d.ts +0 -398
  263. package/dist/codex/types.d.ts.map +0 -1
  264. package/dist/codex/types.js +0 -21
  265. package/dist/codex/types.js.map +0 -1
  266. package/dist/config.d.ts +0 -53
  267. package/dist/config.d.ts.map +0 -1
  268. package/dist/config.js +0 -202
  269. package/dist/config.js.map +0 -1
  270. package/dist/config.test.js +0 -117
  271. package/dist/engine/cli.d.ts +0 -14
  272. package/dist/engine/cli.d.ts.map +0 -1
  273. package/dist/engine/cli.js +0 -171
  274. package/dist/engine/cli.js.map +0 -1
  275. package/dist/engine/client.d.ts +0 -219
  276. package/dist/engine/client.d.ts.map +0 -1
  277. package/dist/engine/client.js +0 -312
  278. package/dist/engine/client.js.map +0 -1
  279. package/dist/engine/config.d.ts +0 -62
  280. package/dist/engine/config.d.ts.map +0 -1
  281. package/dist/engine/config.js +0 -223
  282. package/dist/engine/config.js.map +0 -1
  283. package/dist/engine/index.d.ts +0 -17
  284. package/dist/engine/index.d.ts.map +0 -1
  285. package/dist/engine/index.js +0 -16
  286. package/dist/engine/index.js.map +0 -1
  287. package/dist/engine/resolver.d.ts +0 -62
  288. package/dist/engine/resolver.d.ts.map +0 -1
  289. package/dist/engine/resolver.js +0 -103
  290. package/dist/engine/resolver.js.map +0 -1
  291. package/dist/engine/singleton.d.ts +0 -95
  292. package/dist/engine/singleton.d.ts.map +0 -1
  293. package/dist/engine/singleton.js +0 -325
  294. package/dist/engine/singleton.js.map +0 -1
  295. package/dist/engine/types.d.ts +0 -402
  296. package/dist/engine/types.d.ts.map +0 -1
  297. package/dist/engine/types.js +0 -22
  298. package/dist/engine/types.js.map +0 -1
  299. package/dist/engine-binary-resolver.js +0 -110
  300. package/dist/engine-binary-resolver.test.js +0 -61
  301. package/dist/engine-cli.js +0 -60
  302. package/dist/engine-client.js +0 -301
  303. package/dist/engine-client.test.js +0 -118
  304. package/dist/functions/chain_state.d.ts +0 -51
  305. package/dist/functions/chain_state.d.ts.map +0 -1
  306. package/dist/functions/chain_state.js +0 -59
  307. package/dist/functions/chain_state.js.map +0 -1
  308. package/dist/hooks/drift-catalog.d.ts +0 -68
  309. package/dist/hooks/drift-catalog.d.ts.map +0 -1
  310. package/dist/hooks/drift-catalog.js +0 -184
  311. package/dist/hooks/drift-catalog.js.map +0 -1
  312. package/dist/hooks/drift-catalog.test.js +0 -154
  313. package/dist/hooks/drift-patterns.d.ts +0 -110
  314. package/dist/hooks/drift-patterns.d.ts.map +0 -1
  315. package/dist/hooks/drift-patterns.js +0 -289
  316. package/dist/hooks/drift-patterns.js.map +0 -1
  317. package/dist/hooks/drift-patterns.test.js +0 -325
  318. package/dist/hooks/engine-vocab-gate.d.ts +0 -108
  319. package/dist/hooks/engine-vocab-gate.d.ts.map +0 -1
  320. package/dist/hooks/engine-vocab-gate.js +0 -225
  321. package/dist/hooks/engine-vocab-gate.js.map +0 -1
  322. package/dist/hooks/engine-vocab-gate.test.js +0 -170
  323. package/dist/hooks/heartbeat.d.ts +0 -107
  324. package/dist/hooks/heartbeat.d.ts.map +0 -1
  325. package/dist/hooks/heartbeat.js +0 -316
  326. package/dist/hooks/heartbeat.js.map +0 -1
  327. package/dist/hooks/heartbeat.test.js +0 -393
  328. package/dist/hooks/honesty-ledger-session-scope.test.js +0 -100
  329. package/dist/hooks/honesty-ledger.d.ts +0 -123
  330. package/dist/hooks/honesty-ledger.d.ts.map +0 -1
  331. package/dist/hooks/honesty-ledger.js +0 -226
  332. package/dist/hooks/honesty-ledger.js.map +0 -1
  333. package/dist/hooks/honesty-ledger.test.js +0 -466
  334. package/dist/hooks/inline-report-check.d.ts +0 -63
  335. package/dist/hooks/inline-report-check.d.ts.map +0 -1
  336. package/dist/hooks/inline-report-check.js +0 -88
  337. package/dist/hooks/inline-report-check.js.map +0 -1
  338. package/dist/hooks/inline-report-check.test.js +0 -96
  339. package/dist/hooks/pre-tool-use.d.ts +0 -62
  340. package/dist/hooks/pre-tool-use.d.ts.map +0 -1
  341. package/dist/hooks/pre-tool-use.js +0 -342
  342. package/dist/hooks/pre-tool-use.js.map +0 -1
  343. package/dist/hooks/pre-tool-use.test.js +0 -134
  344. package/dist/hooks/session-end.d.ts +0 -15
  345. package/dist/hooks/session-end.d.ts.map +0 -1
  346. package/dist/hooks/session-end.js +0 -60
  347. package/dist/hooks/session-end.js.map +0 -1
  348. package/dist/hooks/session-end.test.js +0 -52
  349. package/dist/hooks/stop.d.ts +0 -35
  350. package/dist/hooks/stop.d.ts.map +0 -1
  351. package/dist/hooks/stop.js +0 -136
  352. package/dist/hooks/stop.js.map +0 -1
  353. package/dist/hooks/transcript-active-task.test.js +0 -342
  354. package/dist/hooks/transcript.d.ts +0 -26
  355. package/dist/hooks/transcript.d.ts.map +0 -1
  356. package/dist/hooks/transcript.js +0 -266
  357. package/dist/hooks/transcript.js.map +0 -1
  358. package/dist/hooks/transcript.test.js +0 -103
  359. package/dist/hooks/user-prompt-submit.d.ts +0 -74
  360. package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
  361. package/dist/hooks/user-prompt-submit.js +0 -256
  362. package/dist/hooks/user-prompt-submit.js.map +0 -1
  363. package/dist/hooks/user-prompt-submit.test.js +0 -118
  364. package/dist/hooks/versioning-gate.d.ts +0 -101
  365. package/dist/hooks/versioning-gate.d.ts.map +0 -1
  366. package/dist/hooks/versioning-gate.js +0 -245
  367. package/dist/hooks/versioning-gate.js.map +0 -1
  368. package/dist/hooks/versioning-gate.test.js +0 -368
  369. package/dist/hooks/workflow-gate.d.ts +0 -64
  370. package/dist/hooks/workflow-gate.d.ts.map +0 -1
  371. package/dist/hooks/workflow-gate.js +0 -152
  372. package/dist/hooks/workflow-gate.js.map +0 -1
  373. package/dist/hooks/workflow-gate.test.js +0 -197
  374. package/dist/hooks-cli.d.ts +0 -25
  375. package/dist/hooks-cli.d.ts.map +0 -1
  376. package/dist/hooks-cli.js +0 -286
  377. package/dist/hooks-cli.js.map +0 -1
  378. package/dist/hooks-cli.test.js +0 -148
  379. package/dist/origin.d.ts +0 -16
  380. package/dist/origin.d.ts.map +0 -1
  381. package/dist/origin.js +0 -92
  382. package/dist/origin.js.map +0 -1
  383. package/dist/packs/seed_lessons_ingest.d.ts +0 -30
  384. package/dist/packs/seed_lessons_ingest.d.ts.map +0 -1
  385. package/dist/packs/seed_lessons_ingest.js +0 -107
  386. package/dist/packs/seed_lessons_ingest.js.map +0 -1
  387. package/dist/project-cli.d.ts +0 -7
  388. package/dist/project-cli.d.ts.map +0 -1
  389. package/dist/project-cli.js +0 -145
  390. package/dist/project-cli.js.map +0 -1
  391. package/dist/project.d.ts +0 -127
  392. package/dist/project.d.ts.map +0 -1
  393. package/dist/project.js +0 -281
  394. package/dist/project.js.map +0 -1
  395. package/dist/project.test.js +0 -287
  396. package/dist/rag/backends/loop_engine.d.ts +0 -61
  397. package/dist/rag/backends/loop_engine.d.ts.map +0 -1
  398. package/dist/rag/backends/loop_engine.js +0 -160
  399. package/dist/rag/backends/loop_engine.js.map +0 -1
  400. package/dist/recall.d.ts +0 -82
  401. package/dist/recall.d.ts.map +0 -1
  402. package/dist/recall.js +0 -81
  403. package/dist/recall.js.map +0 -1
  404. package/dist/runtime/agent_bridge/autospawn.d.ts +0 -131
  405. package/dist/runtime/agent_bridge/autospawn.d.ts.map +0 -1
  406. package/dist/runtime/agent_bridge/autospawn.js +0 -251
  407. package/dist/runtime/agent_bridge/autospawn.js.map +0 -1
  408. package/dist/runtime/chain_state.d.ts +0 -124
  409. package/dist/runtime/chain_state.d.ts.map +0 -1
  410. package/dist/runtime/chain_state.js +0 -189
  411. package/dist/runtime/chain_state.js.map +0 -1
  412. package/dist/runtime/hooks/permission_decision.d.ts +0 -34
  413. package/dist/runtime/hooks/permission_decision.d.ts.map +0 -1
  414. package/dist/runtime/hooks/permission_decision.js +0 -39
  415. package/dist/runtime/hooks/permission_decision.js.map +0 -1
  416. package/dist/runtime/workflow_fsm.d.ts +0 -21
  417. package/dist/runtime/workflow_fsm.d.ts.map +0 -1
  418. package/dist/runtime/workflow_fsm.js +0 -25
  419. package/dist/runtime/workflow_fsm.js.map +0 -1
  420. package/dist/runtime/workflow_map.d.ts +0 -26
  421. package/dist/runtime/workflow_map.d.ts.map +0 -1
  422. package/dist/runtime/workflow_map.js +0 -38
  423. package/dist/runtime/workflow_map.js.map +0 -1
  424. package/dist/scope.d.ts +0 -48
  425. package/dist/scope.d.ts.map +0 -1
  426. package/dist/scope.js +0 -111
  427. package/dist/scope.js.map +0 -1
  428. package/dist/setup/cli/topic_create_step.d.ts +0 -84
  429. package/dist/setup/cli/topic_create_step.d.ts.map +0 -1
  430. package/dist/setup/cli/topic_create_step.js +0 -213
  431. package/dist/setup/cli/topic_create_step.js.map +0 -1
  432. package/dist/system-export.d.ts +0 -65
  433. package/dist/system-export.d.ts.map +0 -1
  434. package/dist/system-export.js +0 -194
  435. package/dist/system-export.js.map +0 -1
  436. package/dist/utterance/classifier.d.ts +0 -53
  437. package/dist/utterance/classifier.d.ts.map +0 -1
  438. package/dist/utterance/classifier.js +0 -184
  439. package/dist/utterance/classifier.js.map +0 -1
  440. package/dist/utterance/classifier.test.js +0 -147
@@ -1,219 +0,0 @@
1
- /**
2
- * JSON-RPC 2.0 client for the loop-engine daemon.
3
- *
4
- * Connects to a long-running engine process at
5
- * `~/.opensquid/loop-engine.sock` via Unix domain socket. The daemon
6
- * is acquired-or-spawned by `acquireOrSpawnEngine()` (singleton.ts),
7
- * so multiple `EngineClient` instances across hooks + sessions share
8
- * the same underlying engine process — the keystone for cross-session
9
- * memory recall.
10
- *
11
- * Critical invariants (T.1 audit + T.4 spec):
12
- *
13
- * 1. **Singleton transport** — `EngineClient` no longer owns a
14
- * subprocess. It holds a `net.Socket` connection to a shared
15
- * daemon. Engine lifecycle lives in `singleton.ts`; closing a
16
- * client only closes the connection, not the engine.
17
- *
18
- * 2. **LOOP_HOME pin** (T.1.D) — handled by `singleton.ts` at spawn
19
- * time. Engine defaults `~/.loop`; opensquid pins to
20
- * `~/.opensquid`. Stripping the pin would make existing memories
21
- * + lessons silently invisible.
22
- *
23
- * 3. **Auto-reconnect on socket close** — if the daemon restarts
24
- * (kill -9, OOM, manual `engine kill`), the next `call()` will
25
- * re-acquire via the singleton. Pending calls reject so callers
26
- * can retry.
27
- *
28
- * 4. **Error wire shape** — five engine-custom codes in
29
- * `-32000..=-32004` range. `RpcError` carries `.code` + `.data`
30
- * so callers branch on the structured field, not the message.
31
- *
32
- * 5. **Authored_by wire encoding** — INPUT accepts `'user' | 'pack'`
33
- * (else maps to engine's `Llm` default); OUTPUT is
34
- * `'user' | 'pack' | 'agent'` (`Llm` renders as `"agent"`).
35
- *
36
- * 6. **Windows fallback** — UDS is Unix-only. On Windows,
37
- * `acquireOrSpawnEngine()` throws; callers wrap with a feature
38
- * flag (`OPENSQUID_ENGINE_SOCKET=disable`) to fall back to the
39
- * legacy per-process stdio spawn (NOT implemented here yet —
40
- * tracked as T.8 follow-up).
41
- *
42
- * Types live in `./types.js` — this file owns the transport + class.
43
- */
44
- import type { CompressParams, CompressResult, ConsolidateParams, ConsolidateResult, CreateMemoryResult, GetMemoryResult, LessonCaptureFeedbackResult, LessonCreateParams, LessonCreateResult, LessonDiscardResult, LessonListResult, LessonPromoteResult, LessonRecallResult, LessonSupersedeResult, ManifestAssembleParams, ManifestAssembleResult, MemoryDeleteResult, MemoryListResult, MemoryOrigin, MemoryScope, MemorySearchParams, MemorySearchResult, MemoryUpdateResult, RecomputeCitationsResult, ScopeFilterWire, TaskGetLedgerResult, TaskLogPhaseResult } from './types.js';
45
- /**
46
- * JSON-RPC error response surfaced as a JS Error subclass. `.code` +
47
- * `.data` carry the engine-side fields so callers can branch without
48
- * pattern-matching `.message`.
49
- */
50
- export declare class RpcError extends Error {
51
- readonly code: number;
52
- readonly data?: unknown;
53
- constructor(message: string, code: number, data?: unknown);
54
- }
55
- /**
56
- * Engine error codes (verified against engine/src/serve.rs:226-258).
57
- *
58
- * Standard JSON-RPC range (-32700 / -32600 / -32601 / -32602 / -32603)
59
- * is mirrored for completeness. Engine-custom codes occupy
60
- * `-32000..=-32004` and carry a structured `data` payload per T.1.E.
61
- */
62
- export declare const ENGINE_ERROR: {
63
- readonly PARSE: -32700;
64
- readonly INVALID_REQUEST: -32600;
65
- readonly METHOD_NOT_FOUND: -32601;
66
- readonly INVALID_PARAMS: -32602;
67
- readonly INTERNAL: -32603;
68
- /** data: { reasons: string[] } — kebab-case reasons per T.1.E + T.1.F */
69
- readonly PROMOTION_BLOCKED: -32000;
70
- /** data: { lesson_id: string } */
71
- readonly USER_LESSON_IMMUNE: -32001;
72
- /** data: { id: string } */
73
- readonly NOT_FOUND: -32002;
74
- /** data: { memory_id: string, cited_by: number } */
75
- readonly USER_MEMORY_IMMUNE: -32003;
76
- /** data: { reason: string } */
77
- readonly SUPERSEDE_BLOCKED: -32004;
78
- };
79
- /**
80
- * Socket + JSON-RPC plumbing. One instance ≡ one connection to the
81
- * shared engine daemon. Connection is established lazily on first
82
- * `call`. Survives daemon restarts: when the socket closes, the next
83
- * call re-acquires via `acquireOrSpawnEngine()`.
84
- */
85
- export declare class EngineClient {
86
- private socket;
87
- private reader;
88
- private pending;
89
- private nextId;
90
- private startupAck;
91
- private spawnedByUs;
92
- ping(): Promise<{
93
- ok: true;
94
- version: string;
95
- }>;
96
- lessonCreate(p: LessonCreateParams): Promise<LessonCreateResult>;
97
- lessonRecall(p: {
98
- query: string;
99
- limit?: number;
100
- }): Promise<LessonRecallResult>;
101
- lessonPromote(p: {
102
- id: string;
103
- }): Promise<LessonPromoteResult>;
104
- lessonDiscard(p: {
105
- id: string;
106
- reason?: string;
107
- force?: boolean;
108
- }): Promise<LessonDiscardResult>;
109
- lessonList(p: {
110
- statuses?: string[];
111
- limit?: number;
112
- offset?: number;
113
- }): Promise<LessonListResult>;
114
- lessonCaptureFeedback(p: {
115
- id: string;
116
- polarity: 'thumbs_up' | 'thumbs_down';
117
- source_signal_id?: string;
118
- }): Promise<LessonCaptureFeedbackResult>;
119
- lessonSupersede(p: {
120
- old_id: string;
121
- new_id: string;
122
- force?: boolean;
123
- }): Promise<LessonSupersedeResult>;
124
- memoryCreate(p: {
125
- description: string;
126
- content: string;
127
- authored_by?: string;
128
- scope?: MemoryScope;
129
- origin?: MemoryOrigin;
130
- }): Promise<CreateMemoryResult>;
131
- memorySearch(p: MemorySearchParams): Promise<MemorySearchResult>;
132
- memoryGet(p: {
133
- id: string;
134
- }): Promise<GetMemoryResult>;
135
- memoryList(p: {
136
- scope_filter?: ScopeFilterWire;
137
- limit?: number;
138
- offset?: number;
139
- }): Promise<MemoryListResult>;
140
- memoryUpdate(p: {
141
- id: string;
142
- description?: string;
143
- content?: string;
144
- scope?: MemoryScope;
145
- }): Promise<MemoryUpdateResult>;
146
- memoryDelete(p: {
147
- id: string;
148
- force?: boolean;
149
- }): Promise<MemoryDeleteResult>;
150
- /**
151
- * Compress a window of memories into one gist `Mc` (CMP.1). Pure
152
- * exposure of the engine's `compress()` lib fn — mints `Mc` with
153
- * `derived_from = ids` + summed citation counters; does NOT delete
154
- * predecessors (that is the host's verified, gated terminal step).
155
- */
156
- memoryCompress(p: CompressParams): Promise<CompressResult>;
157
- /**
158
- * Atomic safe-compression (CMP.4). The engine compresses the window
159
- * into one gist `Mc`, VERIFIES via recall-replay that `Mc` preserves
160
- * each predecessor's recall, and ONLY THEN force-deletes the
161
- * NON-immune predecessors — user-cited ones are kept. Any error or
162
- * verify-miss → deletes NOTHING and returns `verified: false` with
163
- * the minted `Mc` id (so the host keeps `Mc` alongside the originals
164
- * + surfaces drift).
165
- *
166
- * The D2 safety contract (verify + immunity + fail-closed) is
167
- * GUARANTEED inside the engine (race-free, universal substrate
168
- * integrity) — the host no longer runs recall-replay or issues any
169
- * `memory.delete` in the compression path.
170
- */
171
- memoryConsolidate(p: ConsolidateParams): Promise<ConsolidateResult>;
172
- /**
173
- * Recompute every memory's `consumed_by_user_lessons` counter to
174
- * ground truth (CMP.1). A host runs this after a batch of
175
- * compressions / deletions to confirm citation integrity survived
176
- * the `derived_from` chain.
177
- */
178
- memoryRecomputeCitations(): Promise<RecomputeCitationsResult>;
179
- manifestAssemble(p: ManifestAssembleParams): Promise<ManifestAssembleResult>;
180
- taskLogPhase(p: {
181
- task_id: string;
182
- phase: string;
183
- note?: string;
184
- }): Promise<TaskLogPhaseResult>;
185
- taskGetLedger(p: {
186
- task_id: string;
187
- }): Promise<TaskGetLedgerResult>;
188
- /**
189
- * Send a JSON-RPC request, await the response. Throws `RpcError` on
190
- * engine-side errors; throws `Error` on socket close mid-call.
191
- *
192
- * The startup `ping` call passes through without re-entering
193
- * `ensureConnected` to break the chicken-and-egg.
194
- */
195
- call<T = unknown>(method: string, params: unknown): Promise<T>;
196
- /**
197
- * Close the connection to the engine daemon. Does NOT kill the
198
- * daemon — engine lifecycle is owned by `singleton.ts` (and by
199
- * T.7's `engine kill` for explicit teardown). After close(), the
200
- * next `call()` will re-acquire.
201
- */
202
- close(): Promise<void>;
203
- /**
204
- * Returns true if this client's last connection was the one that
205
- * spawned the engine daemon. Useful for telemetry — production
206
- * callers should not rely on this for correctness.
207
- */
208
- get didSpawnEngine(): boolean;
209
- private ensureConnected;
210
- private onLine;
211
- /**
212
- * Clear connection state on close so the next call re-acquires.
213
- * Mirrors the pre-T.4 behavior for subprocess exits — the daemon
214
- * may restart out-of-band (kill -9, OOM, T.7 `engine kill`) and
215
- * the next call should transparently respawn / reconnect.
216
- */
217
- private onClose;
218
- }
219
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/engine/client.ts"],"names":[],"mappings":"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"}
@@ -1,312 +0,0 @@
1
- /**
2
- * JSON-RPC 2.0 client for the loop-engine daemon.
3
- *
4
- * Connects to a long-running engine process at
5
- * `~/.opensquid/loop-engine.sock` via Unix domain socket. The daemon
6
- * is acquired-or-spawned by `acquireOrSpawnEngine()` (singleton.ts),
7
- * so multiple `EngineClient` instances across hooks + sessions share
8
- * the same underlying engine process — the keystone for cross-session
9
- * memory recall.
10
- *
11
- * Critical invariants (T.1 audit + T.4 spec):
12
- *
13
- * 1. **Singleton transport** — `EngineClient` no longer owns a
14
- * subprocess. It holds a `net.Socket` connection to a shared
15
- * daemon. Engine lifecycle lives in `singleton.ts`; closing a
16
- * client only closes the connection, not the engine.
17
- *
18
- * 2. **LOOP_HOME pin** (T.1.D) — handled by `singleton.ts` at spawn
19
- * time. Engine defaults `~/.loop`; opensquid pins to
20
- * `~/.opensquid`. Stripping the pin would make existing memories
21
- * + lessons silently invisible.
22
- *
23
- * 3. **Auto-reconnect on socket close** — if the daemon restarts
24
- * (kill -9, OOM, manual `engine kill`), the next `call()` will
25
- * re-acquire via the singleton. Pending calls reject so callers
26
- * can retry.
27
- *
28
- * 4. **Error wire shape** — five engine-custom codes in
29
- * `-32000..=-32004` range. `RpcError` carries `.code` + `.data`
30
- * so callers branch on the structured field, not the message.
31
- *
32
- * 5. **Authored_by wire encoding** — INPUT accepts `'user' | 'pack'`
33
- * (else maps to engine's `Llm` default); OUTPUT is
34
- * `'user' | 'pack' | 'agent'` (`Llm` renders as `"agent"`).
35
- *
36
- * 6. **Windows fallback** — UDS is Unix-only. On Windows,
37
- * `acquireOrSpawnEngine()` throws; callers wrap with a feature
38
- * flag (`OPENSQUID_ENGINE_SOCKET=disable`) to fall back to the
39
- * legacy per-process stdio spawn (NOT implemented here yet —
40
- * tracked as T.8 follow-up).
41
- *
42
- * Types live in `./types.js` — this file owns the transport + class.
43
- */
44
- import { createInterface } from 'node:readline';
45
- import { acquireOrSpawnEngine } from './singleton.js';
46
- /**
47
- * JSON-RPC error response surfaced as a JS Error subclass. `.code` +
48
- * `.data` carry the engine-side fields so callers can branch without
49
- * pattern-matching `.message`.
50
- */
51
- export class RpcError extends Error {
52
- code;
53
- data;
54
- constructor(message, code, data) {
55
- super(message);
56
- this.name = 'RpcError';
57
- this.code = code;
58
- this.data = data;
59
- }
60
- }
61
- /**
62
- * Engine error codes (verified against engine/src/serve.rs:226-258).
63
- *
64
- * Standard JSON-RPC range (-32700 / -32600 / -32601 / -32602 / -32603)
65
- * is mirrored for completeness. Engine-custom codes occupy
66
- * `-32000..=-32004` and carry a structured `data` payload per T.1.E.
67
- */
68
- export const ENGINE_ERROR = {
69
- PARSE: -32700,
70
- INVALID_REQUEST: -32600,
71
- METHOD_NOT_FOUND: -32601,
72
- INVALID_PARAMS: -32602,
73
- INTERNAL: -32603,
74
- /** data: { reasons: string[] } — kebab-case reasons per T.1.E + T.1.F */
75
- PROMOTION_BLOCKED: -32000,
76
- /** data: { lesson_id: string } */
77
- USER_LESSON_IMMUNE: -32001,
78
- /** data: { id: string } */
79
- NOT_FOUND: -32002,
80
- /** data: { memory_id: string, cited_by: number } */
81
- USER_MEMORY_IMMUNE: -32003,
82
- /** data: { reason: string } */
83
- SUPERSEDE_BLOCKED: -32004,
84
- };
85
- /**
86
- * Socket + JSON-RPC plumbing. One instance ≡ one connection to the
87
- * shared engine daemon. Connection is established lazily on first
88
- * `call`. Survives daemon restarts: when the socket closes, the next
89
- * call re-acquires via `acquireOrSpawnEngine()`.
90
- */
91
- export class EngineClient {
92
- socket = null;
93
- reader = null;
94
- pending = new Map();
95
- nextId = 1;
96
- startupAck = null;
97
- spawnedByUs = false;
98
- // --- typed wrappers per JSON-RPC method (engine serve.rs:290-310) ---
99
- async ping() {
100
- return this.call('ping', {});
101
- }
102
- async lessonCreate(p) {
103
- return this.call('lesson.create', p);
104
- }
105
- async lessonRecall(p) {
106
- return this.call('lesson.recall', p);
107
- }
108
- async lessonPromote(p) {
109
- return this.call('lesson.promote', p);
110
- }
111
- async lessonDiscard(p) {
112
- return this.call('lesson.discard', p);
113
- }
114
- async lessonList(p) {
115
- return this.call('lesson.list', p);
116
- }
117
- async lessonCaptureFeedback(p) {
118
- return this.call('lesson.capture_feedback', p);
119
- }
120
- async lessonSupersede(p) {
121
- return this.call('lesson.supersede', p);
122
- }
123
- async memoryCreate(p) {
124
- return this.call('memory.create', p);
125
- }
126
- async memorySearch(p) {
127
- return this.call('memory.search', p);
128
- }
129
- async memoryGet(p) {
130
- return this.call('memory.get', p);
131
- }
132
- async memoryList(p) {
133
- return this.call('memory.list', p);
134
- }
135
- async memoryUpdate(p) {
136
- return this.call('memory.update', p);
137
- }
138
- async memoryDelete(p) {
139
- return this.call('memory.delete', p);
140
- }
141
- /**
142
- * Compress a window of memories into one gist `Mc` (CMP.1). Pure
143
- * exposure of the engine's `compress()` lib fn — mints `Mc` with
144
- * `derived_from = ids` + summed citation counters; does NOT delete
145
- * predecessors (that is the host's verified, gated terminal step).
146
- */
147
- async memoryCompress(p) {
148
- return this.call('memory.compress', p);
149
- }
150
- /**
151
- * Atomic safe-compression (CMP.4). The engine compresses the window
152
- * into one gist `Mc`, VERIFIES via recall-replay that `Mc` preserves
153
- * each predecessor's recall, and ONLY THEN force-deletes the
154
- * NON-immune predecessors — user-cited ones are kept. Any error or
155
- * verify-miss → deletes NOTHING and returns `verified: false` with
156
- * the minted `Mc` id (so the host keeps `Mc` alongside the originals
157
- * + surfaces drift).
158
- *
159
- * The D2 safety contract (verify + immunity + fail-closed) is
160
- * GUARANTEED inside the engine (race-free, universal substrate
161
- * integrity) — the host no longer runs recall-replay or issues any
162
- * `memory.delete` in the compression path.
163
- */
164
- async memoryConsolidate(p) {
165
- return this.call('memory.consolidate', p);
166
- }
167
- /**
168
- * Recompute every memory's `consumed_by_user_lessons` counter to
169
- * ground truth (CMP.1). A host runs this after a batch of
170
- * compressions / deletions to confirm citation integrity survived
171
- * the `derived_from` chain.
172
- */
173
- async memoryRecomputeCitations() {
174
- return this.call('memory.recompute_citations', {});
175
- }
176
- async manifestAssemble(p) {
177
- return this.call('manifest.assemble', p);
178
- }
179
- async taskLogPhase(p) {
180
- return this.call('task.log_phase', p);
181
- }
182
- async taskGetLedger(p) {
183
- return this.call('task.get_ledger', p);
184
- }
185
- // --- transport ------------------------------------------------------
186
- /**
187
- * Send a JSON-RPC request, await the response. Throws `RpcError` on
188
- * engine-side errors; throws `Error` on socket close mid-call.
189
- *
190
- * The startup `ping` call passes through without re-entering
191
- * `ensureConnected` to break the chicken-and-egg.
192
- */
193
- async call(method, params) {
194
- if (method !== 'ping' || this.socket === null) {
195
- await this.ensureConnected();
196
- }
197
- const id = this.nextId++;
198
- return new Promise((resolve, reject) => {
199
- this.pending.set(id, {
200
- resolve: (v) => resolve(v),
201
- reject,
202
- });
203
- const sock = this.socket;
204
- if (!sock) {
205
- this.pending.delete(id);
206
- reject(new Error('engine connection not established'));
207
- return;
208
- }
209
- const line = JSON.stringify({ jsonrpc: '2.0', id, method, params }) + '\n';
210
- sock.write(line);
211
- });
212
- }
213
- /**
214
- * Close the connection to the engine daemon. Does NOT kill the
215
- * daemon — engine lifecycle is owned by `singleton.ts` (and by
216
- * T.7's `engine kill` for explicit teardown). After close(), the
217
- * next `call()` will re-acquire.
218
- */
219
- async close() {
220
- const sock = this.socket;
221
- if (!sock)
222
- return;
223
- return new Promise((resolve) => {
224
- // If the socket is already closed, end() is a noop and `close`
225
- // fires synchronously on the next tick.
226
- sock.once('close', () => resolve());
227
- sock.end();
228
- });
229
- }
230
- /**
231
- * Returns true if this client's last connection was the one that
232
- * spawned the engine daemon. Useful for telemetry — production
233
- * callers should not rely on this for correctness.
234
- */
235
- get didSpawnEngine() {
236
- return this.spawnedByUs;
237
- }
238
- // --- internals ------------------------------------------------------
239
- async ensureConnected() {
240
- if (this.socket)
241
- return;
242
- if (this.startupAck)
243
- return this.startupAck;
244
- // Acquire or spawn. Singleton handles the lock, recheck, spawn,
245
- // pidfile, and socket-wait — this module just consumes the result.
246
- const { socket, spawnedByUs } = await acquireOrSpawnEngine();
247
- this.socket = socket;
248
- this.spawnedByUs = spawnedByUs;
249
- // Line-framed JSON-RPC over the socket. `createInterface` strips
250
- // '\n' and emits per-line events. Same plumbing as the legacy
251
- // stdio path — only the underlying stream changed.
252
- this.reader = createInterface({ input: socket });
253
- this.reader.on('line', (line) => {
254
- this.onLine(line);
255
- });
256
- socket.on('close', () => this.onClose('socket closed'));
257
- socket.on('error', (err) => {
258
- process.stderr.write(`[opensquid] engine socket error: ${err.message}\n`);
259
- });
260
- // Confirm liveness before returning. A successful ping proves the
261
- // daemon is past rehydrate + ready to dispatch.
262
- this.startupAck = this.call('ping', {})
263
- .then(() => undefined)
264
- .catch((e) => {
265
- throw new Error(`engine handshake failed: ${e.message}`);
266
- });
267
- return this.startupAck;
268
- }
269
- onLine(line) {
270
- const trimmed = line.trim();
271
- if (!trimmed)
272
- return;
273
- let msg;
274
- try {
275
- msg = JSON.parse(trimmed);
276
- }
277
- catch (e) {
278
- process.stderr.write(`[opensquid] failed to parse engine line: ${String(e)}\n`);
279
- return;
280
- }
281
- const pending = this.pending.get(msg.id);
282
- if (!pending) {
283
- process.stderr.write(`[opensquid] response for unknown id=${String(msg.id)}\n`);
284
- return;
285
- }
286
- this.pending.delete(msg.id);
287
- if (msg.error) {
288
- pending.reject(new RpcError(msg.error.message, msg.error.code, msg.error.data));
289
- }
290
- else {
291
- pending.resolve(msg.result);
292
- }
293
- }
294
- /**
295
- * Clear connection state on close so the next call re-acquires.
296
- * Mirrors the pre-T.4 behavior for subprocess exits — the daemon
297
- * may restart out-of-band (kill -9, OOM, T.7 `engine kill`) and
298
- * the next call should transparently respawn / reconnect.
299
- */
300
- onClose(reason) {
301
- process.stderr.write(`[opensquid] engine connection closed: ${reason}\n`);
302
- this.socket = null;
303
- this.reader = null;
304
- this.startupAck = null;
305
- this.spawnedByUs = false;
306
- for (const [, pending] of this.pending) {
307
- pending.reject(new Error(`loop-engine connection lost: ${reason}`));
308
- }
309
- this.pending.clear();
310
- }
311
- }
312
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/engine/client.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- /**
2
- * Engine binary discovery + persisted-path management.
3
- *
4
- * Resolution chain (per T.1 audit §J + src.legacy precedent):
5
- * 1. `OPENSQUID_ENGINE_BIN` env var — explicit override, always wins
6
- * 2. `~/.opensquid/engine-config.json` `engine_bin` field — persisted choice
7
- * 3. Bundled npm optional dep (`opensquid-engine-<platform>-<arch>`)
8
- * — returns `null` until npm stubs ship (follow-up track)
9
- * 4. Auto-search dev paths under `~/projects/*` and `~/work/*`
10
- * 5. `loop-engine` on `$PATH`
11
- * 6. `null` — caller surfaces a helpful error
12
- *
13
- * First successful resolution from (4) or (5) is persisted to
14
- * `~/.opensquid/engine-config.json` so the next session skips the search.
15
- * Bundled-binary hits (3) are NOT persisted because the path is
16
- * deterministic from the npm install layout and persisting it would
17
- * point at a stale `node_modules/` path after upgrades.
18
- *
19
- * The persisted file is engine-specific so it doesn't collide with the
20
- * existing `~/.opensquid/config.json` written by the chat-daemon stack.
21
- *
22
- * Imports `OPENSQUID_HOME` from `runtime/paths.ts` so the data root
23
- * honors the `OPENSQUID_HOME` env override (tests + relocatable installs).
24
- */
25
- export interface EngineConfig {
26
- version: 1;
27
- /** Last-known path to the loop-engine binary. */
28
- engine_bin?: string;
29
- /** ISO timestamp the engine_bin was last resolved via search. */
30
- engine_bin_resolved_at?: string;
31
- }
32
- export declare function loadEngineConfig(): Promise<EngineConfig>;
33
- export declare function saveEngineConfig(config: EngineConfig): Promise<void>;
34
- /**
35
- * Resolve the engine binary path using the priority chain above. Writes
36
- * the resolved path back to config when discovered via search so the
37
- * next session is instant. Returns `null` if no working binary could be
38
- * located.
39
- *
40
- * **Re-resolution on every start** (T.7 / T.1.P): a persisted
41
- * `engine_bin` that no longer points at an executable file is cleared
42
- * from the config and the resolver falls through to bundled → dev →
43
- * `$PATH`. This adds ~10-100ms (one extra `fs.stat`) but means a
44
- * deleted / moved / freshly-rebuilt binary silently self-heals on the
45
- * next start instead of failing loudly with `ENOENT`. Bundled hits
46
- * are NOT persisted (deterministic from npm layout); dev-path + `$PATH`
47
- * hits ARE persisted so subsequent sessions skip the search.
48
- */
49
- export declare function resolveEngineBin(): Promise<string | null>;
50
- /**
51
- * Set the engine binary path explicitly and persist. Validates that the
52
- * path points at an executable file before writing.
53
- */
54
- export declare function setEngineBin(binPath: string): Promise<{
55
- resolved: string;
56
- }>;
57
- /**
58
- * Forget the persisted engine binary path. Forces re-discovery on the
59
- * next `resolveEngineBin` call.
60
- */
61
- export declare function forgetEngineBin(): Promise<void>;
62
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/engine/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAaH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAQD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CAoC9D;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2C/D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAUjF;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAKrD"}