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,309 +0,0 @@
1
- /**
2
- * Codex YAML parsing + runtime validation.
3
- *
4
- * Authoritative parse for codex.yaml files. Used by `opensquid codex
5
- * install <path>` to validate before storing locally. Foreign-format
6
- * imports (superpowers SKILL.md, ECC, etc.) come pre-converted to
7
- * native codex YAML via LLM at install time — this parser sees the
8
- * native shape only.
9
- */
10
- import { parse as parseYaml } from "yaml";
11
- import { z } from "zod";
12
- // ---------------------------------------------------------------------
13
- // Primitive schemas
14
- // ---------------------------------------------------------------------
15
- const CodexToolSchema = z.object({
16
- name: z.string().min(1),
17
- semver: z.string().optional(),
18
- });
19
- const CodexFoundationSchema = z.object({
20
- tools: z.array(CodexToolSchema).optional(),
21
- domains: z.array(z.string()).optional(),
22
- methodologies: z.array(z.string()).optional(),
23
- });
24
- const ActivationScopeSchema = z.enum([
25
- "project",
26
- "user",
27
- "hybrid",
28
- "team",
29
- "global",
30
- ]);
31
- const BankStrategySchema = z.enum([
32
- "full",
33
- "trigger_only",
34
- "summary",
35
- "none",
36
- ]);
37
- // Detection — recursive type, defined via z.lazy()
38
- const DetectionSchema = z.lazy(() => z.discriminatedUnion("kind", [
39
- z.object({ kind: z.literal("file_exists"), path: z.string().min(1) }),
40
- z.object({ kind: z.literal("dir_exists"), path: z.string().min(1) }),
41
- z.object({
42
- kind: z.literal("file_match"),
43
- path: z.string().min(1),
44
- matches: z.record(z.string(), z.unknown()),
45
- }),
46
- z.object({
47
- kind: z.literal("file_glob"),
48
- pattern: z.string().min(1),
49
- min_count: z.number().int().nonnegative().optional(),
50
- }),
51
- z.object({
52
- kind: z.literal("memory_match"),
53
- memory_kind: z.string().min(1),
54
- value: z.string().min(1),
55
- }),
56
- z.object({
57
- kind: z.literal("conversation_signal"),
58
- contains: z.array(z.string()).min(1),
59
- }),
60
- z.object({ kind: z.literal("user_pinned") }),
61
- z.object({
62
- kind: z.literal("all_of"),
63
- conditions: z.array(DetectionSchema).min(1),
64
- }),
65
- z.object({
66
- kind: z.literal("any_of"),
67
- conditions: z.array(DetectionSchema).min(1),
68
- }),
69
- ]));
70
- const TriggerSchema = z.union([
71
- z.string().min(1),
72
- z.object({
73
- intent: z.string().min(1),
74
- prescriptive_form: z.string().optional(),
75
- }),
76
- ]);
77
- const SeedLessonSchema = z.object({
78
- id: z.string().min(1),
79
- trigger: TriggerSchema,
80
- priority: z.enum(["high", "medium", "low"]).optional(),
81
- bank_strategy: BankStrategySchema.optional(),
82
- body_path: z.string().min(1),
83
- citations: z.array(z.string()).optional(),
84
- });
85
- const VerifyGateSchema = z.object({
86
- id: z.string().min(1),
87
- before: z.object({
88
- tool_call: z.string().optional(),
89
- file_pattern: z.string().optional(),
90
- intent: z.string().optional(),
91
- }),
92
- require: z.array(z.record(z.string(), z.unknown())).min(1),
93
- });
94
- const MemoryTemplateSchema = z.object({
95
- scan: z.string().min(1),
96
- extract: z.array(z.string()).min(1),
97
- memorize_as: z
98
- .object({
99
- kind: z.string().min(1),
100
- scope: z.string().optional(),
101
- })
102
- .optional(),
103
- });
104
- const DocFetchSchema = z.object({
105
- trigger: z.string().min(1),
106
- url: z.string().url(),
107
- ttl_days: z.number().int().positive().optional(),
108
- });
109
- const ReferenceDocSchema = z.object({
110
- path: z.string().min(1),
111
- bank_strategy: BankStrategySchema.optional(),
112
- });
113
- // v0.6d: import provenance (set by the SKILL.md converter; absent on
114
- // natively-authored codexes).
115
- const SourceSchema = z.object({
116
- kind: z.enum(["skill_md", "native"]),
117
- original_variant: z.enum(["anthropic", "superpowers", "ecc", "hermes", "unknown"]).optional(),
118
- original_name: z.string().optional(),
119
- original_path: z.string().optional(),
120
- imported_at: z.string().optional(),
121
- });
122
- const HeaderSchema = z.object({
123
- id: z.string().min(1),
124
- version: z.string().min(1),
125
- author: z
126
- .object({
127
- name: z.string().optional(),
128
- contact: z.string().optional(),
129
- })
130
- .optional(),
131
- license: z.string().optional(),
132
- description: z.string().optional(),
133
- // v0.6d: optional import provenance + extensibility bucket. Both
134
- // additive; pre-v0.6d codex.yaml files parse unchanged.
135
- source: SourceSchema.optional(),
136
- metadata: z.record(z.string(), z.unknown()).optional(),
137
- });
138
- // ---------------------------------------------------------------------
139
- // Composite vs focused — discriminated by `kind` field
140
- // ---------------------------------------------------------------------
141
- const CompositeCodexSchema = HeaderSchema.extend({
142
- kind: z.literal("composite"),
143
- includes: z
144
- .array(z.object({
145
- id: z.string().min(1),
146
- semver: z.string().min(1),
147
- }))
148
- .min(1),
149
- });
150
- // ---------------------------------------------------------------------
151
- // Drift-as-codex section schemas (0.7.3+, additive)
152
- // ---------------------------------------------------------------------
153
- const DriftSeveritySchema = z.enum(["block", "warn"]);
154
- const DriftToolMatchSchema = z.enum(["Bash", "Edit", "Write", "*"]);
155
- const DriftTriggerSchema = z.discriminatedUnion("kind", [
156
- z.object({
157
- kind: z.literal("bash_contains"),
158
- needle: z.string().min(1),
159
- strip_quotes: z.boolean().optional(),
160
- }),
161
- z.object({
162
- kind: z.literal("bash_regex"),
163
- pattern: z.string().min(1),
164
- strip_quotes: z.boolean().optional(),
165
- }),
166
- z.object({
167
- kind: z.literal("text_regex"),
168
- pattern: z.string().min(1),
169
- field: z.string().min(1),
170
- }),
171
- ]);
172
- const DriftEntrySchema = z.object({
173
- id: z.string().min(1),
174
- tool: DriftToolMatchSchema,
175
- trigger: DriftTriggerSchema,
176
- lesson: z.string().min(1),
177
- message: z.string().min(1),
178
- severity: DriftSeveritySchema,
179
- });
180
- const WorkflowPhaseSchema = z.object({
181
- name: z.string().min(1),
182
- required: z.boolean(),
183
- description: z.string().optional(),
184
- });
185
- const WorkflowEntrySchema = z.object({
186
- id: z.string().min(1),
187
- phases: z.array(WorkflowPhaseSchema).min(1),
188
- enforce_on: z.array(z.string().min(1)).min(1),
189
- description: z.string().optional(),
190
- });
191
- const ClaimEvidenceSchema = z.lazy(() => z.discriminatedUnion("kind", [
192
- z.object({ kind: z.literal("tool_call"), tool: z.string().min(1) }),
193
- z.object({ kind: z.literal("bash_contains"), needle: z.string().min(1) }),
194
- z.object({ kind: z.literal("bash_regex"), pattern: z.string().min(1) }),
195
- z.object({
196
- kind: z.literal("input_contains"),
197
- tool: z.string().min(1),
198
- field: z.string().min(1),
199
- needle: z.string().min(1),
200
- }),
201
- z.object({ kind: z.literal("any_of"), options: z.array(ClaimEvidenceSchema).min(1) }),
202
- // 0.7.17 (chunk 3b): "any_tool" fulfills the claim if any tool
203
- // was called this turn. Used by claim patterns like "audit-done"
204
- // / "starting-now" where the proof of action is just doing work.
205
- z.object({ kind: z.literal("any_tool") }),
206
- ]));
207
- const ClaimEntrySchema = z.object({
208
- id: z.string().min(1),
209
- claim_pattern: z.string().min(1),
210
- evidence: ClaimEvidenceSchema,
211
- unfulfilled_message: z.string().min(1),
212
- severity: DriftSeveritySchema,
213
- });
214
- const VersioningPolicySchema = z.object({
215
- per_commit_required: z.boolean(),
216
- allowed_slots: z.array(z.enum(["patch", "minor", "major"])).min(1),
217
- slot_for: z
218
- .object({
219
- bug_fix: z.enum(["patch", "minor", "major"]).optional(),
220
- feature: z.enum(["patch", "minor", "major"]).optional(),
221
- breaking: z.enum(["patch", "minor", "major"]).optional(),
222
- })
223
- .optional(),
224
- });
225
- const PhaseLoggedPolicySchema = z.object({
226
- workflow_id: z.string().min(1),
227
- enforce_on: z.array(z.string().min(1)).min(1),
228
- });
229
- const PolicyEntrySchema = z.discriminatedUnion("kind", [
230
- z.object({
231
- id: z.string().min(1),
232
- kind: z.literal("versioning"),
233
- params: VersioningPolicySchema,
234
- }),
235
- z.object({
236
- id: z.string().min(1),
237
- kind: z.literal("phase_logged"),
238
- params: PhaseLoggedPolicySchema,
239
- }),
240
- ]);
241
- const FocusedCodexSchema = HeaderSchema.extend({
242
- kind: z.literal("focused").optional(),
243
- foundation: CodexFoundationSchema.optional(),
244
- activation_scope: ActivationScopeSchema.optional(),
245
- detected_by: z.array(DetectionSchema).optional(),
246
- seed_lessons: z.array(SeedLessonSchema).optional(),
247
- verify_gates: z.array(VerifyGateSchema).optional(),
248
- memory_templates: z.array(MemoryTemplateSchema).optional(),
249
- doc_fetch: z.array(DocFetchSchema).optional(),
250
- reference_docs: z.array(ReferenceDocSchema).optional(),
251
- drifts: z.array(DriftEntrySchema).optional(),
252
- workflows: z.array(WorkflowEntrySchema).optional(),
253
- default_workflow_id: z.string().min(1).optional(),
254
- claims: z.array(ClaimEntrySchema).optional(),
255
- policies: z.array(PolicyEntrySchema).optional(),
256
- evolves: z.boolean().optional(),
257
- });
258
- const CodexSchema = z.union([CompositeCodexSchema, FocusedCodexSchema]);
259
- // ---------------------------------------------------------------------
260
- // Errors
261
- // ---------------------------------------------------------------------
262
- export class CodexParseError extends Error {
263
- issues;
264
- constructor(message, issues) {
265
- super(message);
266
- this.issues = issues;
267
- this.name = "CodexParseError";
268
- }
269
- }
270
- // ---------------------------------------------------------------------
271
- // Public API
272
- // ---------------------------------------------------------------------
273
- /**
274
- * Parse + validate a codex from a raw object (already-parsed YAML/JSON).
275
- *
276
- * Throws `CodexParseError` on schema violations with detailed issues.
277
- */
278
- export function parseCodex(raw) {
279
- const result = CodexSchema.safeParse(raw);
280
- if (!result.success) {
281
- throw new CodexParseError(`codex validation failed: ${result.error.issues
282
- .map((i) => `${i.path.join(".") || "<root>"}: ${i.message}`)
283
- .join("; ")}`, result.error.issues);
284
- }
285
- // safeParse with z.union returns one of the union branches — narrow.
286
- const parsed = result.data;
287
- if (parsed.kind === "composite") {
288
- return parsed;
289
- }
290
- return parsed;
291
- }
292
- /**
293
- * Parse a codex from a YAML string.
294
- *
295
- * Throws `CodexParseError` on YAML syntax error or schema violation.
296
- */
297
- export function parseCodexYaml(source) {
298
- let raw;
299
- try {
300
- raw = parseYaml(source);
301
- }
302
- catch (err) {
303
- throw new CodexParseError(`codex YAML syntax error: ${err instanceof Error ? err.message : String(err)}`);
304
- }
305
- if (raw === null || typeof raw !== "object") {
306
- throw new CodexParseError(`codex YAML must be a top-level object, got ${raw === null ? "null" : typeof raw}`);
307
- }
308
- return parseCodex(raw);
309
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src.legacy/codex/parse.ts"],"names":[],"mappings":"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"}
@@ -1,241 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { CodexParseError, parseCodex, parseCodexYaml } from "./parse.js";
3
- import { isCompositeCodex, isFocusedCodex } from "./types.js";
4
- describe("parseCodex — focused codex", () => {
5
- it("accepts a minimal focused codex (id + version only)", () => {
6
- const c = parseCodex({ id: "minimal", version: "1.0.0" });
7
- expect(c.id).toBe("minimal");
8
- expect(isFocusedCodex(c)).toBe(true);
9
- expect(isCompositeCodex(c)).toBe(false);
10
- });
11
- it("accepts a fully-featured developer codex", () => {
12
- const c = parseCodex({
13
- id: "react-19",
14
- version: "1.0.0",
15
- author: { name: "anon", contact: "x@y.z" },
16
- license: "MIT",
17
- foundation: {
18
- tools: [{ name: "react", semver: ">=19,<20" }],
19
- domains: ["software-engineering", "frontend"],
20
- },
21
- activation_scope: "project",
22
- detected_by: [
23
- {
24
- kind: "file_match",
25
- path: "package.json",
26
- matches: { "dependencies.react": ">=19" },
27
- },
28
- ],
29
- seed_lessons: [
30
- {
31
- id: "atomic-search",
32
- trigger: "before creating a new React component",
33
- priority: "high",
34
- bank_strategy: "full",
35
- body_path: "lessons/atomic-search/lesson.md",
36
- },
37
- ],
38
- verify_gates: [
39
- {
40
- id: "atomic-boundary",
41
- before: { tool_call: "Write", file_pattern: "src/components/**/*.tsx" },
42
- require: [{ search_completed: "atoms/" }],
43
- },
44
- ],
45
- doc_fetch: [
46
- {
47
- trigger: "React hooks",
48
- url: "https://react.dev/reference/react/hooks",
49
- ttl_days: 30,
50
- },
51
- ],
52
- evolves: true,
53
- });
54
- expect(c.id).toBe("react-19");
55
- expect(isFocusedCodex(c)).toBe(true);
56
- if (isFocusedCodex(c)) {
57
- expect(c.foundation?.tools?.[0]?.name).toBe("react");
58
- expect(c.seed_lessons).toHaveLength(1);
59
- expect(c.evolves).toBe(true);
60
- }
61
- });
62
- it("accepts a methodology-only codex (no tools, no domain)", () => {
63
- const c = parseCodex({
64
- id: "tdd",
65
- version: "1.0.0",
66
- foundation: { methodologies: ["tdd"] },
67
- detected_by: [{ kind: "dir_exists", path: "tests/" }],
68
- });
69
- expect(isFocusedCodex(c)).toBe(true);
70
- });
71
- it("accepts a user-pinned codex (no filesystem signals)", () => {
72
- const c = parseCodex({
73
- id: "positive-discipline",
74
- version: "1.0.0",
75
- foundation: { domains: ["parenting"] },
76
- activation_scope: "user",
77
- detected_by: [{ kind: "user_pinned" }],
78
- });
79
- expect(isFocusedCodex(c)).toBe(true);
80
- if (isFocusedCodex(c)) {
81
- expect(c.activation_scope).toBe("user");
82
- }
83
- });
84
- it("accepts structured trigger objects", () => {
85
- const c = parseCodex({
86
- id: "x",
87
- version: "1.0.0",
88
- seed_lessons: [
89
- {
90
- id: "l1",
91
- trigger: {
92
- intent: "before doing X",
93
- prescriptive_form: "You MUST do X first",
94
- },
95
- body_path: "lessons/l1/lesson.md",
96
- },
97
- ],
98
- });
99
- expect(isFocusedCodex(c)).toBe(true);
100
- });
101
- it("accepts nested all_of / any_of detection", () => {
102
- const c = parseCodex({
103
- id: "x",
104
- version: "1.0.0",
105
- detected_by: [
106
- {
107
- kind: "all_of",
108
- conditions: [
109
- { kind: "file_exists", path: "a" },
110
- {
111
- kind: "any_of",
112
- conditions: [
113
- { kind: "dir_exists", path: "b" },
114
- { kind: "dir_exists", path: "c" },
115
- ],
116
- },
117
- ],
118
- },
119
- ],
120
- });
121
- expect(isFocusedCodex(c)).toBe(true);
122
- });
123
- });
124
- describe("parseCodex — composite codex", () => {
125
- it("accepts a composite codex (pure aggregator)", () => {
126
- const c = parseCodex({
127
- id: "fullstack-react-atomic",
128
- kind: "composite",
129
- version: "1.0.0",
130
- includes: [
131
- { id: "react", semver: ">=18,<20" },
132
- { id: "tailwindcss", semver: ">=4" },
133
- { id: "atomic-design", semver: ">=1" },
134
- ],
135
- });
136
- expect(isCompositeCodex(c)).toBe(true);
137
- if (isCompositeCodex(c)) {
138
- expect(c.includes).toHaveLength(3);
139
- }
140
- });
141
- it("rejects composite without includes", () => {
142
- expect(() => parseCodex({ id: "x", kind: "composite", version: "1.0.0" })).toThrow(CodexParseError);
143
- });
144
- it("rejects composite with empty includes array", () => {
145
- expect(() => parseCodex({ id: "x", kind: "composite", version: "1.0.0", includes: [] })).toThrow(CodexParseError);
146
- });
147
- });
148
- describe("parseCodex — validation errors", () => {
149
- it("rejects missing id", () => {
150
- expect(() => parseCodex({ version: "1.0.0" })).toThrow(CodexParseError);
151
- });
152
- it("rejects missing version", () => {
153
- expect(() => parseCodex({ id: "x" })).toThrow(CodexParseError);
154
- });
155
- it("rejects invalid activation_scope", () => {
156
- expect(() => parseCodex({ id: "x", version: "1.0.0", activation_scope: "bogus" })).toThrow(CodexParseError);
157
- });
158
- it("rejects invalid bank_strategy", () => {
159
- expect(() => parseCodex({
160
- id: "x",
161
- version: "1.0.0",
162
- seed_lessons: [
163
- {
164
- id: "l1",
165
- trigger: "t",
166
- body_path: "p",
167
- bank_strategy: "weird",
168
- },
169
- ],
170
- })).toThrow(CodexParseError);
171
- });
172
- it("rejects unknown detection kind", () => {
173
- expect(() => parseCodex({
174
- id: "x",
175
- version: "1.0.0",
176
- detected_by: [{ kind: "bogus_kind", path: "x" }],
177
- })).toThrow(CodexParseError);
178
- });
179
- it("rejects non-https URL in doc_fetch", () => {
180
- expect(() => parseCodex({
181
- id: "x",
182
- version: "1.0.0",
183
- doc_fetch: [{ trigger: "t", url: "not-a-url" }],
184
- })).toThrow(CodexParseError);
185
- });
186
- it("includes structured zod issues in error", () => {
187
- try {
188
- parseCodex({ version: "1.0.0" });
189
- expect.fail("expected throw");
190
- }
191
- catch (err) {
192
- expect(err).toBeInstanceOf(CodexParseError);
193
- const e = err;
194
- expect(e.issues).toBeDefined();
195
- expect(e.issues?.length).toBeGreaterThan(0);
196
- }
197
- });
198
- });
199
- describe("parseCodexYaml", () => {
200
- it("parses minimal YAML", () => {
201
- const yaml = `
202
- id: minimal
203
- version: 1.0.0
204
- `;
205
- const c = parseCodexYaml(yaml);
206
- expect(c.id).toBe("minimal");
207
- });
208
- it("parses fully-featured YAML round-trip", () => {
209
- const yaml = `
210
- id: react-19
211
- version: 1.0.0
212
- foundation:
213
- tools:
214
- - { name: react, semver: ">=19,<20" }
215
- domains: [software-engineering, frontend]
216
- activation_scope: project
217
- detected_by:
218
- - kind: dir_exists
219
- path: "src/components/atoms"
220
- seed_lessons:
221
- - id: atomic-search
222
- trigger: "before creating a component"
223
- priority: high
224
- bank_strategy: full
225
- body_path: "lessons/atomic-search/lesson.md"
226
- evolves: true
227
- `;
228
- const c = parseCodexYaml(yaml);
229
- expect(isFocusedCodex(c)).toBe(true);
230
- if (isFocusedCodex(c)) {
231
- expect(c.foundation?.tools?.[0]?.name).toBe("react");
232
- expect(c.detected_by?.[0]?.kind).toBe("dir_exists");
233
- }
234
- });
235
- it("throws CodexParseError on YAML syntax error", () => {
236
- expect(() => parseCodexYaml("id: x\n bad: indentation: here")).toThrow(CodexParseError);
237
- });
238
- it("throws CodexParseError on non-object root", () => {
239
- expect(() => parseCodexYaml("just a string")).toThrow(CodexParseError);
240
- });
241
- });
@@ -1,87 +0,0 @@
1
- /**
2
- * Codex local storage — filesystem layer for installed codexes.
3
- *
4
- * Stores codex YAML + lesson markdown files at <root>/codexes/<id>/.
5
- * Engine sees none of this; it only stores the resulting lessons that
6
- * opensquid seeds via `lesson.create` with `authored_by: Pack(<id>)`.
7
- *
8
- * Resolution order for the data root:
9
- * 1. `rootDir` parameter (explicit override; used by tests)
10
- * 2. `OPENSQUID_HOME` env var
11
- * 3. `LOOP_HOME` env var (engine-shared)
12
- * 4. `~/.opensquid/` default
13
- */
14
- import type { Codex } from "./types.js";
15
- export type CodexStoreErrorCode = "NOT_FOUND" | "ALREADY_INSTALLED" | "INVALID_ID" | "READ_FAILED" | "WRITE_FAILED" | "PARSE_FAILED";
16
- export declare class CodexStoreError extends Error {
17
- readonly code: CodexStoreErrorCode;
18
- readonly cause?: unknown | undefined;
19
- constructor(code: CodexStoreErrorCode, message: string, cause?: unknown | undefined);
20
- }
21
- /**
22
- * Resolve the opensquid data root.
23
- *
24
- * Order: explicit rootDir → OPENSQUID_HOME → LOOP_HOME → ~/.opensquid
25
- */
26
- export declare function resolveDataRoot(rootDir?: string): string;
27
- /** Directory holding all installed codexes. */
28
- export declare function codexesDir(rootDir?: string): string;
29
- /** Directory for a specific codex by id. */
30
- export declare function codexDir(id: string, rootDir?: string): string;
31
- /**
32
- * Validate a codex id: lowercase alphanumeric + `._-`, max 128 chars,
33
- * cannot start with `._-`. Prevents path traversal and ambiguous names.
34
- */
35
- export declare function validateCodexId(id: string): void;
36
- /**
37
- * Install a codex into local storage.
38
- *
39
- * Writes `codex.yaml` at the canonical path. If `force=false` and a
40
- * codex with this id is already installed, throws ALREADY_INSTALLED.
41
- */
42
- export declare function installCodex(codex: Codex, options?: {
43
- rootDir?: string;
44
- force?: boolean;
45
- }): Promise<{
46
- id: string;
47
- path: string;
48
- }>;
49
- /**
50
- * Load an installed codex by id.
51
- *
52
- * Reads + parses `codex.yaml`. Throws NOT_FOUND if not installed, or
53
- * PARSE_FAILED if the manifest is malformed.
54
- */
55
- export declare function getCodex(id: string, options?: {
56
- rootDir?: string;
57
- }): Promise<Codex>;
58
- /**
59
- * List all installed codex ids.
60
- *
61
- * Scans `<root>/codexes/` for directories that contain a `codex.yaml`.
62
- * Directories without a manifest are skipped (partial installs, etc.).
63
- * Returns ids in sorted order.
64
- */
65
- export declare function listCodexes(options?: {
66
- rootDir?: string;
67
- }): Promise<string[]>;
68
- /**
69
- * Remove an installed codex.
70
- *
71
- * Deletes the entire `<root>/codexes/<id>/` directory. Returns true if
72
- * the codex existed and was removed; false if it wasn't installed.
73
- * Does NOT touch the engine's lesson store — the caller is responsible
74
- * for retiring the codex's seeded lessons via the engine RPC first.
75
- */
76
- export declare function removeCodex(id: string, options?: {
77
- rootDir?: string;
78
- }): Promise<boolean>;
79
- /**
80
- * Resolve the path to a content file (lesson body, reference doc) inside
81
- * a codex. Used by the orchestrator when bank_strategy requires lazy
82
- * fetching the full body. Does NOT read the file — just returns the path.
83
- */
84
- export declare function codexContentPath(id: string, relativePath: string, options?: {
85
- rootDir?: string;
86
- }): string;
87
- //# sourceMappingURL=store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src.legacy/codex/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAQxC,MAAM,MAAM,mBAAmB,GAC3B,WAAW,GACX,mBAAmB,GACnB,YAAY,GACZ,aAAa,GACb,cAAc,GACd,cAAc,CAAC;AAEnB,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,IAAI,EAAE,mBAAmB;aAEzB,KAAK,CAAC,EAAE,OAAO;gBAFf,IAAI,EAAE,mBAAmB,EACzC,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,OAAO,YAAA;CAKlC;AAMD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED,+CAA+C;AAC/C,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,4CAA4C;AAC5C,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7D;AAQD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAOhD;AAgCD;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAClD,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBvC;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAY7F;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBvF;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,MAAM,EACV,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,MAAM,CASR"}