spexcode 0.6.2 → 0.6.6

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 (495) hide show
  1. package/README.md +3 -1
  2. package/bin/spex.mjs +4 -0
  3. package/node_modules/@spexcode/session-core/dist/delivery-queue.d.ts +23 -0
  4. package/node_modules/@spexcode/session-core/dist/delivery-queue.js +195 -0
  5. package/node_modules/@spexcode/session-core/dist/index.d.ts +5 -0
  6. package/node_modules/@spexcode/session-core/dist/index.js +5 -0
  7. package/node_modules/@spexcode/session-core/dist/internal.d.ts +3 -0
  8. package/node_modules/@spexcode/session-core/dist/internal.js +3 -0
  9. package/node_modules/@spexcode/session-core/dist/message.d.ts +22 -0
  10. package/node_modules/@spexcode/session-core/dist/message.js +52 -0
  11. package/node_modules/@spexcode/session-core/dist/record-lock.d.ts +7 -0
  12. package/node_modules/@spexcode/session-core/dist/record-lock.js +152 -0
  13. package/node_modules/@spexcode/session-core/dist/runtime-session.d.ts +50 -0
  14. package/node_modules/@spexcode/session-core/dist/runtime-session.js +286 -0
  15. package/node_modules/@spexcode/session-core/dist/session-cursors.d.ts +14 -0
  16. package/node_modules/@spexcode/session-core/dist/session-cursors.js +82 -0
  17. package/node_modules/@spexcode/session-core/dist/session-timeline.d.ts +46 -0
  18. package/node_modules/@spexcode/session-core/dist/session-timeline.js +216 -0
  19. package/node_modules/@spexcode/session-core/package.json +33 -0
  20. package/node_modules/@spexcode/spec-cli/bin/spex.mjs +77 -0
  21. package/node_modules/@spexcode/spec-cli/dist/attach.d.ts +2 -0
  22. package/node_modules/@spexcode/spec-cli/dist/attach.js +48 -0
  23. package/node_modules/@spexcode/spec-cli/dist/claude-headless.d.ts +36 -0
  24. package/node_modules/@spexcode/spec-cli/dist/claude-headless.js +316 -0
  25. package/node_modules/@spexcode/spec-cli/dist/cli.d.ts +1 -0
  26. package/node_modules/@spexcode/spec-cli/dist/cli.js +1908 -0
  27. package/node_modules/@spexcode/spec-cli/dist/client.d.ts +112 -0
  28. package/node_modules/@spexcode/spec-cli/dist/client.js +481 -0
  29. package/node_modules/@spexcode/spec-cli/dist/cockpit.d.ts +7 -0
  30. package/node_modules/@spexcode/spec-cli/dist/cockpit.js +26 -0
  31. package/node_modules/@spexcode/spec-cli/dist/codex-headless.d.ts +1 -0
  32. package/{spec-cli/src/codex-headless.ts → node_modules/@spexcode/spec-cli/dist/codex-headless.js} +3 -9
  33. package/node_modules/@spexcode/spec-cli/dist/codex-runtime-generations.d.ts +58 -0
  34. package/node_modules/@spexcode/spec-cli/dist/codex-runtime-generations.js +798 -0
  35. package/node_modules/@spexcode/spec-cli/dist/commit-surgery.d.ts +1 -0
  36. package/node_modules/@spexcode/spec-cli/dist/commit-surgery.js +90 -0
  37. package/node_modules/@spexcode/spec-cli/dist/contract-filter.d.ts +14 -0
  38. package/node_modules/@spexcode/spec-cli/dist/contract-filter.js +219 -0
  39. package/node_modules/@spexcode/spec-cli/dist/dashboard-assets.d.ts +6 -0
  40. package/node_modules/@spexcode/spec-cli/dist/dashboard-assets.js +50 -0
  41. package/node_modules/@spexcode/spec-cli/dist/doctor.d.ts +9 -0
  42. package/node_modules/@spexcode/spec-cli/dist/doctor.js +553 -0
  43. package/node_modules/@spexcode/spec-cli/dist/eval-host.d.ts +1 -0
  44. package/node_modules/@spexcode/spec-cli/dist/eval-host.js +19 -0
  45. package/node_modules/@spexcode/spec-cli/dist/execution-trace.d.ts +26 -0
  46. package/node_modules/@spexcode/spec-cli/dist/execution-trace.js +475 -0
  47. package/node_modules/@spexcode/spec-cli/dist/file-write.d.ts +2 -0
  48. package/node_modules/@spexcode/spec-cli/dist/file-write.js +26 -0
  49. package/node_modules/@spexcode/spec-cli/dist/flat.d.ts +89 -0
  50. package/node_modules/@spexcode/spec-cli/dist/flat.js +1076 -0
  51. package/node_modules/@spexcode/spec-cli/dist/gateway-auth.d.ts +56 -0
  52. package/node_modules/@spexcode/spec-cli/dist/gateway-auth.js +168 -0
  53. package/node_modules/@spexcode/spec-cli/dist/gateway-hub.d.ts +28 -0
  54. package/node_modules/@spexcode/spec-cli/dist/gateway-hub.js +363 -0
  55. package/node_modules/@spexcode/spec-cli/dist/gateway.d.ts +38 -0
  56. package/node_modules/@spexcode/spec-cli/dist/gateway.js +527 -0
  57. package/node_modules/@spexcode/spec-cli/dist/graphCache.d.ts +27 -0
  58. package/node_modules/@spexcode/spec-cli/dist/graphCache.js +717 -0
  59. package/node_modules/@spexcode/spec-cli/dist/graphSnapshot.d.ts +14 -0
  60. package/node_modules/@spexcode/spec-cli/dist/graphSnapshot.js +36 -0
  61. package/node_modules/@spexcode/spec-cli/dist/graphStream.d.ts +85 -0
  62. package/node_modules/@spexcode/spec-cli/dist/graphStream.js +1195 -0
  63. package/node_modules/@spexcode/spec-cli/dist/guidance-catalog.d.ts +64 -0
  64. package/node_modules/@spexcode/spec-cli/dist/guidance-catalog.js +166 -0
  65. package/node_modules/@spexcode/spec-cli/dist/guide.d.ts +8 -0
  66. package/{spec-cli/src/guide.ts → node_modules/@spexcode/spec-cli/dist/guide.js} +36 -32
  67. package/node_modules/@spexcode/spec-cli/dist/harness-select.d.ts +18 -0
  68. package/node_modules/@spexcode/spec-cli/dist/harness-select.js +62 -0
  69. package/node_modules/@spexcode/spec-cli/dist/harness.d.ts +338 -0
  70. package/node_modules/@spexcode/spec-cli/dist/harness.js +3146 -0
  71. package/node_modules/@spexcode/spec-cli/dist/headless-controller.d.ts +9 -0
  72. package/node_modules/@spexcode/spec-cli/dist/headless-controller.js +47 -0
  73. package/node_modules/@spexcode/spec-cli/dist/help.d.ts +15 -0
  74. package/node_modules/@spexcode/spec-cli/dist/help.js +594 -0
  75. package/node_modules/@spexcode/spec-cli/dist/hook-prompts.d.ts +18 -0
  76. package/node_modules/@spexcode/spec-cli/dist/hook-prompts.js +122 -0
  77. package/node_modules/@spexcode/spec-cli/dist/hooks.d.ts +1 -0
  78. package/{spec-cli/src/hooks.ts → node_modules/@spexcode/spec-cli/dist/hooks.js} +15 -15
  79. package/node_modules/@spexcode/spec-cli/dist/host-resources.d.ts +97 -0
  80. package/node_modules/@spexcode/spec-cli/dist/host-resources.js +795 -0
  81. package/node_modules/@spexcode/spec-cli/dist/host.d.ts +88 -0
  82. package/node_modules/@spexcode/spec-cli/dist/host.js +663 -0
  83. package/node_modules/@spexcode/spec-cli/dist/index.d.ts +1 -0
  84. package/node_modules/@spexcode/spec-cli/dist/index.js +899 -0
  85. package/node_modules/@spexcode/spec-cli/dist/init.d.ts +1 -0
  86. package/node_modules/@spexcode/spec-cli/dist/init.js +284 -0
  87. package/node_modules/@spexcode/spec-cli/dist/issues-cli.d.ts +6 -0
  88. package/node_modules/@spexcode/spec-cli/dist/issues-cli.js +334 -0
  89. package/node_modules/@spexcode/spec-cli/dist/issues.d.ts +69 -0
  90. package/node_modules/@spexcode/spec-cli/dist/issues.js +189 -0
  91. package/node_modules/@spexcode/spec-cli/dist/lint.d.ts +34 -0
  92. package/node_modules/@spexcode/spec-cli/dist/lint.js +476 -0
  93. package/node_modules/@spexcode/spec-cli/dist/listen.d.ts +8 -0
  94. package/node_modules/@spexcode/spec-cli/dist/listen.js +24 -0
  95. package/node_modules/@spexcode/spec-cli/dist/localIssues.d.ts +65 -0
  96. package/node_modules/@spexcode/spec-cli/dist/localIssues.js +582 -0
  97. package/node_modules/@spexcode/spec-cli/dist/login-page.d.ts +5 -0
  98. package/{spec-cli/src/login-page.ts → node_modules/@spexcode/spec-cli/dist/login-page.js} +7 -7
  99. package/node_modules/@spexcode/spec-cli/dist/loop-in.d.ts +23 -0
  100. package/{spec-cli/src/loop-in.ts → node_modules/@spexcode/spec-cli/dist/loop-in.js} +35 -45
  101. package/node_modules/@spexcode/spec-cli/dist/machine-peer.d.ts +69 -0
  102. package/node_modules/@spexcode/spec-cli/dist/machine-peer.js +603 -0
  103. package/node_modules/@spexcode/spec-cli/dist/materialize.d.ts +18 -0
  104. package/node_modules/@spexcode/spec-cli/dist/materialize.js +468 -0
  105. package/node_modules/@spexcode/spec-cli/dist/mentions.d.ts +50 -0
  106. package/node_modules/@spexcode/spec-cli/dist/mentions.js +117 -0
  107. package/node_modules/@spexcode/spec-cli/dist/opencode-headless.d.ts +5 -0
  108. package/node_modules/@spexcode/spec-cli/dist/opencode-headless.js +215 -0
  109. package/node_modules/@spexcode/spec-cli/dist/opencode.d.ts +3 -0
  110. package/{spec-cli/src/opencode.ts → node_modules/@spexcode/spec-cli/dist/opencode.js} +9 -13
  111. package/node_modules/@spexcode/spec-cli/dist/pi-harness.d.ts +3 -0
  112. package/{spec-cli/src/pi-harness.ts → node_modules/@spexcode/spec-cli/dist/pi-harness.js} +45 -40
  113. package/node_modules/@spexcode/spec-cli/dist/pi-headless.d.ts +25 -0
  114. package/node_modules/@spexcode/spec-cli/dist/pi-headless.js +196 -0
  115. package/node_modules/@spexcode/spec-cli/dist/plugin-harness.d.ts +21 -0
  116. package/node_modules/@spexcode/spec-cli/dist/plugin-harness.js +146 -0
  117. package/node_modules/@spexcode/spec-cli/dist/pty-bridge.d.ts +10 -0
  118. package/node_modules/@spexcode/spec-cli/dist/pty-bridge.js +404 -0
  119. package/node_modules/@spexcode/spec-cli/dist/pty-helper.d.mts +1 -0
  120. package/node_modules/@spexcode/spec-cli/dist/pty-helper.mjs +101 -0
  121. package/node_modules/@spexcode/spec-cli/dist/pty-native-helper.d.mts +2 -0
  122. package/node_modules/@spexcode/spec-cli/dist/pty-native-helper.mjs +23 -0
  123. package/node_modules/@spexcode/spec-cli/dist/public-graph.d.ts +46 -0
  124. package/node_modules/@spexcode/spec-cli/dist/public-graph.js +56 -0
  125. package/node_modules/@spexcode/spec-cli/dist/ranker.d.ts +15 -0
  126. package/node_modules/@spexcode/spec-cli/dist/ranker.js +188 -0
  127. package/node_modules/@spexcode/spec-cli/dist/reaper.d.ts +6 -0
  128. package/node_modules/@spexcode/spec-cli/dist/reaper.js +81 -0
  129. package/node_modules/@spexcode/spec-cli/dist/reviews.d.ts +189 -0
  130. package/node_modules/@spexcode/spec-cli/dist/reviews.js +350 -0
  131. package/node_modules/@spexcode/spec-cli/dist/runtime-guard.d.ts +6 -0
  132. package/node_modules/@spexcode/spec-cli/dist/runtime-guard.js +37 -0
  133. package/node_modules/@spexcode/spec-cli/dist/runtime-ownership.d.ts +21 -0
  134. package/node_modules/@spexcode/spec-cli/dist/runtime-ownership.js +84 -0
  135. package/node_modules/@spexcode/spec-cli/dist/runtime-rotate.d.ts +1 -0
  136. package/node_modules/@spexcode/spec-cli/dist/runtime-rotate.js +58 -0
  137. package/node_modules/@spexcode/spec-cli/dist/search.bench.d.mts +1 -0
  138. package/node_modules/@spexcode/spec-cli/dist/search.bench.mjs +75 -0
  139. package/node_modules/@spexcode/spec-cli/dist/search.d.ts +20 -0
  140. package/node_modules/@spexcode/spec-cli/dist/search.js +61 -0
  141. package/node_modules/@spexcode/spec-cli/dist/session-declarations.d.ts +13 -0
  142. package/node_modules/@spexcode/spec-cli/dist/session-declarations.js +126 -0
  143. package/node_modules/@spexcode/spec-cli/dist/session-execution.d.ts +10 -0
  144. package/node_modules/@spexcode/spec-cli/dist/session-execution.js +70 -0
  145. package/node_modules/@spexcode/spec-cli/dist/session-files.d.ts +28 -0
  146. package/node_modules/@spexcode/spec-cli/dist/session-files.js +130 -0
  147. package/node_modules/@spexcode/spec-cli/dist/session-follow.d.ts +31 -0
  148. package/node_modules/@spexcode/spec-cli/dist/session-follow.js +179 -0
  149. package/node_modules/@spexcode/spec-cli/dist/session-reparent.d.ts +10 -0
  150. package/node_modules/@spexcode/spec-cli/dist/session-reparent.js +33 -0
  151. package/node_modules/@spexcode/spec-cli/dist/session-timeline.d.ts +11 -0
  152. package/node_modules/@spexcode/spec-cli/dist/session-timeline.js +20 -0
  153. package/node_modules/@spexcode/spec-cli/dist/session-web.d.ts +24 -0
  154. package/node_modules/@spexcode/spec-cli/dist/session-web.js +141 -0
  155. package/node_modules/@spexcode/spec-cli/dist/sessions.d.ts +433 -0
  156. package/node_modules/@spexcode/spec-cli/dist/sessions.js +4667 -0
  157. package/node_modules/@spexcode/spec-cli/dist/sh.d.ts +1 -0
  158. package/node_modules/@spexcode/spec-cli/dist/sh.js +3 -0
  159. package/node_modules/@spexcode/spec-cli/dist/shim-runtime.d.ts +1 -0
  160. package/{spec-cli/src/shim-runtime.ts → node_modules/@spexcode/spec-cli/dist/shim-runtime.js} +3 -4
  161. package/node_modules/@spexcode/spec-cli/dist/slash-commands.d.ts +9 -0
  162. package/node_modules/@spexcode/spec-cli/dist/slash-commands.js +307 -0
  163. package/node_modules/@spexcode/spec-cli/dist/source-files.d.ts +9 -0
  164. package/node_modules/@spexcode/spec-cli/dist/source-files.js +113 -0
  165. package/node_modules/@spexcode/spec-cli/dist/supervise.d.ts +1 -0
  166. package/node_modules/@spexcode/spec-cli/dist/supervise.js +308 -0
  167. package/node_modules/@spexcode/spec-cli/dist/tree.d.ts +25 -0
  168. package/node_modules/@spexcode/spec-cli/dist/tree.js +98 -0
  169. package/node_modules/@spexcode/spec-cli/dist/tsx-bin.d.ts +3 -0
  170. package/node_modules/@spexcode/spec-cli/dist/tsx-bin.js +41 -0
  171. package/node_modules/@spexcode/spec-cli/dist/uninstall.d.ts +3 -0
  172. package/node_modules/@spexcode/spec-cli/dist/uninstall.js +177 -0
  173. package/node_modules/@spexcode/spec-cli/dist/uploads.d.ts +36 -0
  174. package/node_modules/@spexcode/spec-cli/dist/uploads.js +243 -0
  175. package/node_modules/@spexcode/spec-cli/dist/worktree-sources.d.ts +1 -0
  176. package/node_modules/@spexcode/spec-cli/dist/worktree-sources.js +47 -0
  177. package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/dispatch.sh +5 -5
  178. package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/harness.sh +1 -1
  179. package/node_modules/@spexcode/spec-cli/package.json +49 -0
  180. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/commands/supervisor/spec.md +8 -0
  181. package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-first/spec-first.sh +1 -1
  182. package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-of-file/spec-of-file.sh +1 -0
  183. package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/stop-gate/spec.md +2 -2
  184. package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/stop-gate/stop-gate.sh +31 -29
  185. package/node_modules/@spexcode/spec-core/dist/anchors.d.ts +94 -0
  186. package/node_modules/@spexcode/spec-core/dist/anchors.js +730 -0
  187. package/node_modules/@spexcode/spec-core/dist/git.d.ts +170 -0
  188. package/node_modules/@spexcode/spec-core/dist/git.js +2768 -0
  189. package/node_modules/@spexcode/spec-core/dist/graph-delta.d.ts +44 -0
  190. package/node_modules/@spexcode/spec-core/dist/graph-delta.js +72 -0
  191. package/node_modules/@spexcode/spec-core/dist/graph.d.ts +34 -0
  192. package/node_modules/@spexcode/spec-core/dist/graph.js +237 -0
  193. package/node_modules/@spexcode/spec-core/dist/graphDelta.d.ts +3 -0
  194. package/node_modules/@spexcode/spec-core/dist/graphDelta.js +13 -0
  195. package/node_modules/@spexcode/spec-core/dist/harness-identity.d.ts +31 -0
  196. package/node_modules/@spexcode/spec-core/dist/harness-identity.js +20 -0
  197. package/node_modules/@spexcode/spec-core/dist/identity-presets.d.ts +152 -0
  198. package/node_modules/@spexcode/spec-core/dist/identity-presets.js +132 -0
  199. package/node_modules/@spexcode/spec-core/dist/index.d.ts +45 -0
  200. package/node_modules/@spexcode/spec-core/dist/index.js +19 -0
  201. package/node_modules/@spexcode/spec-core/dist/layout.d.ts +187 -0
  202. package/node_modules/@spexcode/spec-core/dist/layout.js +548 -0
  203. package/node_modules/@spexcode/spec-core/dist/process-identity.d.ts +37 -0
  204. package/node_modules/@spexcode/spec-core/dist/process-identity.js +214 -0
  205. package/node_modules/@spexcode/spec-core/dist/project-identity.d.ts +12 -0
  206. package/node_modules/@spexcode/spec-core/dist/project-identity.js +71 -0
  207. package/node_modules/@spexcode/spec-core/dist/project-store.d.ts +3 -0
  208. package/node_modules/@spexcode/spec-core/dist/project-store.js +14 -0
  209. package/node_modules/@spexcode/spec-core/dist/resilience.d.ts +2 -0
  210. package/node_modules/@spexcode/spec-core/dist/resilience.js +40 -0
  211. package/node_modules/@spexcode/spec-core/dist/review/index.d.ts +3 -0
  212. package/node_modules/@spexcode/spec-core/dist/review/index.js +5 -0
  213. package/node_modules/@spexcode/spec-core/dist/review/reviewFilters.d.ts +77 -0
  214. package/node_modules/@spexcode/spec-core/dist/review/reviewFilters.js +308 -0
  215. package/node_modules/@spexcode/spec-core/dist/review/reviewQuery.d.ts +66 -0
  216. package/node_modules/@spexcode/spec-core/dist/review/reviewQuery.js +180 -0
  217. package/node_modules/@spexcode/spec-core/dist/review/session.d.ts +4 -0
  218. package/node_modules/@spexcode/spec-core/dist/review/session.js +8 -0
  219. package/node_modules/@spexcode/spec-core/dist/reviewSnapshot.d.ts +15 -0
  220. package/node_modules/@spexcode/spec-core/dist/reviewSnapshot.js +12 -0
  221. package/node_modules/@spexcode/spec-core/dist/root-lru.d.ts +4 -0
  222. package/{spec-cli/src/root-lru.ts → node_modules/@spexcode/spec-core/dist/root-lru.js} +26 -30
  223. package/node_modules/@spexcode/spec-core/dist/specs.d.ts +117 -0
  224. package/node_modules/@spexcode/spec-core/dist/specs.js +489 -0
  225. package/node_modules/@spexcode/spec-core/package.json +28 -0
  226. package/node_modules/@spexcode/spec-eval/dist/cache.d.ts +10 -0
  227. package/node_modules/@spexcode/spec-eval/dist/cache.js +50 -0
  228. package/node_modules/@spexcode/spec-eval/dist/cli.d.ts +22 -0
  229. package/node_modules/@spexcode/spec-eval/dist/cli.js +981 -0
  230. package/node_modules/@spexcode/spec-eval/dist/evaltab.d.ts +98 -0
  231. package/node_modules/@spexcode/spec-eval/dist/evaltab.js +176 -0
  232. package/node_modules/@spexcode/spec-eval/dist/filing.d.ts +16 -0
  233. package/node_modules/@spexcode/spec-eval/dist/filing.js +36 -0
  234. package/node_modules/@spexcode/spec-eval/dist/freshness.d.ts +48 -0
  235. package/node_modules/@spexcode/spec-eval/dist/freshness.js +799 -0
  236. package/node_modules/@spexcode/spec-eval/dist/host.d.ts +46 -0
  237. package/node_modules/@spexcode/spec-eval/dist/host.js +53 -0
  238. package/node_modules/@spexcode/spec-eval/dist/humanok.d.ts +11 -0
  239. package/node_modules/@spexcode/spec-eval/dist/humanok.js +27 -0
  240. package/node_modules/@spexcode/spec-eval/dist/index.d.ts +4 -0
  241. package/node_modules/@spexcode/spec-eval/dist/index.js +4 -0
  242. package/node_modules/@spexcode/spec-eval/dist/remarks.d.ts +31 -0
  243. package/node_modules/@spexcode/spec-eval/dist/remarks.js +1 -0
  244. package/node_modules/@spexcode/spec-eval/dist/scenariofresh.d.ts +13 -0
  245. package/node_modules/@spexcode/spec-eval/dist/scenariofresh.js +303 -0
  246. package/node_modules/@spexcode/spec-eval/dist/scenarios.d.ts +99 -0
  247. package/node_modules/@spexcode/spec-eval/dist/scenarios.js +650 -0
  248. package/node_modules/@spexcode/spec-eval/dist/sessioneval.d.ts +307 -0
  249. package/node_modules/@spexcode/spec-eval/dist/sessioneval.js +1883 -0
  250. package/node_modules/@spexcode/spec-eval/dist/sidecar.d.ts +55 -0
  251. package/node_modules/@spexcode/spec-eval/dist/sidecar.js +82 -0
  252. package/node_modules/@spexcode/spec-eval/dist/timeline.d.ts +25 -0
  253. package/node_modules/@spexcode/spec-eval/dist/timeline.js +65 -0
  254. package/node_modules/@spexcode/spec-eval/dist/ui-path.d.ts +1 -0
  255. package/node_modules/@spexcode/spec-eval/dist/ui-path.js +2 -0
  256. package/node_modules/@spexcode/spec-eval/package.json +36 -0
  257. package/node_modules/@spexcode/spec-forge/dist/cache.d.ts +29 -0
  258. package/node_modules/@spexcode/spec-forge/dist/cache.js +59 -0
  259. package/node_modules/@spexcode/spec-forge/dist/cli.d.ts +1 -0
  260. package/node_modules/@spexcode/spec-forge/dist/cli.js +100 -0
  261. package/node_modules/@spexcode/spec-forge/dist/drivers/github.d.ts +2 -0
  262. package/node_modules/@spexcode/spec-forge/dist/drivers/github.js +116 -0
  263. package/node_modules/@spexcode/spec-forge/dist/drivers/gitlab.d.ts +7 -0
  264. package/node_modules/@spexcode/spec-forge/dist/drivers/gitlab.js +144 -0
  265. package/node_modules/@spexcode/spec-forge/dist/drivers.d.ts +10 -0
  266. package/node_modules/@spexcode/spec-forge/dist/drivers.js +83 -0
  267. package/node_modules/@spexcode/spec-forge/dist/index.d.ts +4 -0
  268. package/node_modules/@spexcode/spec-forge/dist/index.js +4 -0
  269. package/node_modules/@spexcode/spec-forge/dist/links.d.ts +15 -0
  270. package/node_modules/@spexcode/spec-forge/dist/links.js +65 -0
  271. package/node_modules/@spexcode/spec-forge/dist/needs-eval.d.ts +10 -0
  272. package/node_modules/@spexcode/spec-forge/dist/needs-eval.js +20 -0
  273. package/node_modules/@spexcode/spec-forge/dist/port.d.ts +53 -0
  274. package/node_modules/@spexcode/spec-forge/dist/port.js +1 -0
  275. package/node_modules/@spexcode/spec-forge/dist/resident.d.ts +7 -0
  276. package/node_modules/@spexcode/spec-forge/dist/resident.js +43 -0
  277. package/node_modules/@spexcode/spec-forge/package.json +32 -0
  278. package/package.json +33 -19
  279. package/spec-cli/bin/spex.mjs +0 -69
  280. package/spec-cli/src/anchors.ts +0 -728
  281. package/spec-cli/src/attach.ts +0 -43
  282. package/spec-cli/src/claude-headless.ts +0 -321
  283. package/spec-cli/src/cli.ts +0 -1258
  284. package/spec-cli/src/client.ts +0 -414
  285. package/spec-cli/src/cockpit.ts +0 -43
  286. package/spec-cli/src/codex-runtime-generations.ts +0 -646
  287. package/spec-cli/src/commit-surgery.ts +0 -68
  288. package/spec-cli/src/contract-filter.ts +0 -202
  289. package/spec-cli/src/delivery-queue.ts +0 -165
  290. package/spec-cli/src/doctor.ts +0 -516
  291. package/spec-cli/src/execution-trace.ts +0 -444
  292. package/spec-cli/src/file-write.ts +0 -22
  293. package/spec-cli/src/gateway-auth.ts +0 -181
  294. package/spec-cli/src/gateway-hub.ts +0 -358
  295. package/spec-cli/src/gateway.ts +0 -461
  296. package/spec-cli/src/git.ts +0 -2556
  297. package/spec-cli/src/graph.ts +0 -271
  298. package/spec-cli/src/graphCache.ts +0 -710
  299. package/spec-cli/src/graphDelta.ts +0 -77
  300. package/spec-cli/src/graphStream.ts +0 -1019
  301. package/spec-cli/src/harness-select.ts +0 -77
  302. package/spec-cli/src/harness.ts +0 -3025
  303. package/spec-cli/src/headless-controller.ts +0 -63
  304. package/spec-cli/src/help.ts +0 -492
  305. package/spec-cli/src/host-resources.ts +0 -762
  306. package/spec-cli/src/host.ts +0 -611
  307. package/spec-cli/src/identity-presets.d.ts +0 -13
  308. package/spec-cli/src/identity-presets.js +0 -138
  309. package/spec-cli/src/index.ts +0 -818
  310. package/spec-cli/src/init.ts +0 -258
  311. package/spec-cli/src/issues-cli.ts +0 -276
  312. package/spec-cli/src/issues.ts +0 -237
  313. package/spec-cli/src/layout.ts +0 -640
  314. package/spec-cli/src/lint.ts +0 -488
  315. package/spec-cli/src/listen.ts +0 -28
  316. package/spec-cli/src/localIssues.ts +0 -538
  317. package/spec-cli/src/materialize.ts +0 -417
  318. package/spec-cli/src/mentions.ts +0 -81
  319. package/spec-cli/src/opencode-headless.ts +0 -205
  320. package/spec-cli/src/pi-headless.ts +0 -153
  321. package/spec-cli/src/plugin-harness.ts +0 -157
  322. package/spec-cli/src/process-identity.ts +0 -207
  323. package/spec-cli/src/project-identity.ts +0 -73
  324. package/spec-cli/src/project-store.ts +0 -17
  325. package/spec-cli/src/pty-bridge.ts +0 -396
  326. package/spec-cli/src/pty-helper.mjs +0 -96
  327. package/spec-cli/src/pty-native-helper.mjs +0 -22
  328. package/spec-cli/src/ranker.ts +0 -191
  329. package/spec-cli/src/reaper.ts +0 -125
  330. package/spec-cli/src/resilience.ts +0 -41
  331. package/spec-cli/src/reviewSnapshot.ts +0 -28
  332. package/spec-cli/src/reviews.ts +0 -434
  333. package/spec-cli/src/runtime-guard.ts +0 -35
  334. package/spec-cli/src/runtime-ownership.ts +0 -88
  335. package/spec-cli/src/search.bench.mjs +0 -80
  336. package/spec-cli/src/search.ts +0 -63
  337. package/spec-cli/src/session-cursors.ts +0 -91
  338. package/spec-cli/src/session-execution.ts +0 -68
  339. package/spec-cli/src/session-files.ts +0 -121
  340. package/spec-cli/src/session-follow.ts +0 -182
  341. package/spec-cli/src/session-reparent.ts +0 -33
  342. package/spec-cli/src/session-timeline.ts +0 -247
  343. package/spec-cli/src/session-web.ts +0 -135
  344. package/spec-cli/src/sessions.ts +0 -3883
  345. package/spec-cli/src/sh.ts +0 -3
  346. package/spec-cli/src/slash-commands.ts +0 -318
  347. package/spec-cli/src/source-files.ts +0 -104
  348. package/spec-cli/src/specs.ts +0 -498
  349. package/spec-cli/src/supervise.ts +0 -245
  350. package/spec-cli/src/tree.ts +0 -118
  351. package/spec-cli/src/tsx-bin.ts +0 -18
  352. package/spec-cli/src/uninstall.ts +0 -171
  353. package/spec-cli/src/uploads.ts +0 -253
  354. package/spec-cli/src/worktree-sources.ts +0 -42
  355. package/spec-cli/templates/spec/project/.plugins/commands/supervisor/spec.md +0 -8
  356. package/spec-dashboard/dist/assets/App-B6IbFbGu.js +0 -2
  357. package/spec-dashboard/dist/assets/Dashboard-C5ap-Sga.css +0 -1
  358. package/spec-dashboard/dist/assets/Dashboard-_sDk7Rcg.js +0 -27
  359. package/spec-dashboard/dist/assets/EvalsPage-BT357Lyt.js +0 -2
  360. package/spec-dashboard/dist/assets/IssuesPage-BG9rNOgV.js +0 -1
  361. package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  362. package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  363. package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  364. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  365. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  366. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  367. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  368. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  369. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  370. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  371. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  372. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  373. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  374. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  375. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  376. package/spec-dashboard/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  377. package/spec-dashboard/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  378. package/spec-dashboard/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  379. package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  380. package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  381. package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  382. package/spec-dashboard/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  383. package/spec-dashboard/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  384. package/spec-dashboard/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  385. package/spec-dashboard/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  386. package/spec-dashboard/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  387. package/spec-dashboard/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  388. package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  389. package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  390. package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  391. package/spec-dashboard/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  392. package/spec-dashboard/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  393. package/spec-dashboard/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  394. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  395. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  396. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  397. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  398. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  399. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  400. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  401. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  402. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  403. package/spec-dashboard/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  404. package/spec-dashboard/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  405. package/spec-dashboard/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  406. package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  407. package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  408. package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  409. package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  410. package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  411. package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  412. package/spec-dashboard/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  413. package/spec-dashboard/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  414. package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  415. package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  416. package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  417. package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  418. package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  419. package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  420. package/spec-dashboard/dist/assets/MobileApp-D9yPMR3A.js +0 -2
  421. package/spec-dashboard/dist/assets/Modal-B3EcgeA3.js +0 -1
  422. package/spec-dashboard/dist/assets/PageScroll-CNZOugWV.js +0 -1
  423. package/spec-dashboard/dist/assets/ProjectsPage-C2CRHmvs.js +0 -1
  424. package/spec-dashboard/dist/assets/SessionInterface-6GBZ9nXN.css +0 -32
  425. package/spec-dashboard/dist/assets/SessionInterface-DOEjuT3l.js +0 -40
  426. package/spec-dashboard/dist/assets/SessionWindow-1nYgZ4CL.js +0 -1
  427. package/spec-dashboard/dist/assets/Settings-7WeTJn0V.js +0 -1
  428. package/spec-dashboard/dist/assets/Thread-CEbzAFQn.js +0 -13
  429. package/spec-dashboard/dist/assets/bindings-BC9vqpYU.js +0 -1
  430. package/spec-dashboard/dist/assets/data-SlvxNA2r.js +0 -1
  431. package/spec-dashboard/dist/assets/index-DLVeOHL-.js +0 -41
  432. package/spec-dashboard/dist/assets/index-DYLGfPjx.css +0 -1
  433. package/spec-dashboard/dist/assets/launch-Cp579UoJ.css +0 -1
  434. package/spec-dashboard/dist/assets/launch-yxCYr64x.js +0 -276
  435. package/spec-dashboard/dist/assets/sessionSurface--7l69h4F.js +0 -1
  436. package/spec-dashboard/dist/index.html +0 -29
  437. package/spec-dashboard/src/reviewFilters.js +0 -322
  438. package/spec-dashboard/src/reviewQuery.js +0 -174
  439. package/spec-dashboard/src/session.js +0 -199
  440. package/spec-eval/src/cache.ts +0 -57
  441. package/spec-eval/src/cli.ts +0 -894
  442. package/spec-eval/src/evaltab.ts +0 -264
  443. package/spec-eval/src/filing.ts +0 -39
  444. package/spec-eval/src/freshness.ts +0 -836
  445. package/spec-eval/src/humanok.ts +0 -28
  446. package/spec-eval/src/scenariofresh.ts +0 -244
  447. package/spec-eval/src/scenarios.ts +0 -672
  448. package/spec-eval/src/sessioneval.ts +0 -2220
  449. package/spec-eval/src/sidecar.ts +0 -93
  450. package/spec-eval/src/timeline.ts +0 -54
  451. package/spec-forge/src/__fixtures__/github-forge.json +0 -63
  452. package/spec-forge/src/cache.ts +0 -66
  453. package/spec-forge/src/cli.ts +0 -99
  454. package/spec-forge/src/drivers/github.ts +0 -132
  455. package/spec-forge/src/drivers/gitlab.ts +0 -153
  456. package/spec-forge/src/drivers.ts +0 -73
  457. package/spec-forge/src/links.ts +0 -72
  458. package/spec-forge/src/needs-eval.ts +0 -29
  459. package/spec-forge/src/port.ts +0 -36
  460. package/spec-forge/src/resident.ts +0 -46
  461. /package/{spec-cli → node_modules/@spexcode/spec-cli}/README.md +0 -0
  462. /package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/compat/mark-active-0.5.2-eef1.fixture +0 -0
  463. /package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/compat/mark-active-sed-v0.fixture +0 -0
  464. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/commit-msg +0 -0
  465. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/post-checkout +0 -0
  466. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/post-merge +0 -0
  467. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/pre-commit +0 -0
  468. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/prepare-commit-msg +0 -0
  469. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/reference-transaction +0 -0
  470. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/extract/spec.md +0 -0
  471. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/regroup/spec.md +0 -0
  472. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/rename/spec.md +0 -0
  473. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/spec.md +0 -0
  474. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/tidy/spec.md +0 -0
  475. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/comment-altitude/spec.md +0 -0
  476. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/idle/idle.sh +0 -0
  477. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/idle/spec.md +0 -0
  478. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/mark-active/mark-active.sh +0 -0
  479. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/mark-active/spec.md +0 -0
  480. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/session-fail/fail.sh +0 -0
  481. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/session-fail/spec.md +0 -0
  482. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-first/spec.md +0 -0
  483. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-of-file/spec.md +0 -0
  484. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec.md +0 -0
  485. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/prompts/atomic-landing/spec.md +0 -0
  486. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/prompts/forge-link/spec.md +0 -0
  487. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/prompts/memory-hygiene/spec.md +0 -0
  488. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/prompts/reproduce-before-fix/spec.md +0 -0
  489. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/prompts/spec.md +0 -0
  490. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/skills/distill/digest.mjs +0 -0
  491. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/skills/distill/spec.md +0 -0
  492. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/skills/spec.md +0 -0
  493. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/spec.md +0 -0
  494. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/spec.md +0 -0
  495. /package/{spec-cli → node_modules/@spexcode/spec-core}/templates/spexcode.json +0 -0
@@ -0,0 +1,475 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { closeSync, openSync, readFileSync, readSync, readdirSync, statSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ const cache = new Map();
6
+ const sessionJsonlPaths = new Map();
7
+ const localStoreCache = new Map();
8
+ const emptyTrace = (turn, revision = '0') => ({
9
+ revision: `${turn?.token ?? '0'}:${revision}`,
10
+ turnId: turn?.token ?? null,
11
+ workingNote: null,
12
+ steps: [],
13
+ });
14
+ const object = (value) => value && typeof value === 'object' && !Array.isArray(value) ? value : null;
15
+ const items = (value) => Array.isArray(value) ? value : [];
16
+ const text = (value) => typeof value === 'string' && value.trim() ? value.trim() : null;
17
+ const field = (value, ...names) => {
18
+ for (const name of names) {
19
+ const found = text(value[name]);
20
+ if (found)
21
+ return found;
22
+ }
23
+ return null;
24
+ };
25
+ const children = (dir) => { try {
26
+ return readdirSync(dir).sort().reverse();
27
+ }
28
+ catch {
29
+ return [];
30
+ } };
31
+ const sensitive = /(token|secret|password|authorization|bearer|cookie|credential|api[_-]?key|private[ _-]?key)/i;
32
+ const detailFields = [
33
+ ['cmd', 'cmd'], ['command', 'command'], ['path', 'path'], ['file_path', 'path'],
34
+ ['query', 'query'], ['pattern', 'pattern'], ['url', 'url'], ['workdir', 'in'],
35
+ ];
36
+ function toolKind(name) {
37
+ const normalized = name.toLowerCase();
38
+ if (/(search|browse|web)/.test(normalized))
39
+ return 'search';
40
+ if (/(read|list|find|grep|glob|stat)/.test(normalized))
41
+ return 'read';
42
+ if (/(write|edit|patch|create|delete|move|rename)/.test(normalized))
43
+ return 'write';
44
+ if (/(exec|shell|command|terminal|bash|npm|git)/.test(normalized))
45
+ return 'command';
46
+ return 'tool';
47
+ }
48
+ function toolLabel(name, kind) {
49
+ const labels = {
50
+ command: 'Run command', read: 'Read files', write: 'Update files', search: 'Search', tool: 'Use tool',
51
+ };
52
+ return name.trim() || labels[kind];
53
+ }
54
+ function recordInput(value) {
55
+ if (value && typeof value === 'object' && !Array.isArray(value))
56
+ return value;
57
+ if (typeof value !== 'string')
58
+ return null;
59
+ try {
60
+ const parsed = JSON.parse(value);
61
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : null;
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ function sensitiveInput(value) {
68
+ if (typeof value === 'string')
69
+ return sensitive.test(value);
70
+ if (Array.isArray(value))
71
+ return value.some(sensitiveInput);
72
+ if (value && typeof value === 'object')
73
+ return Object.entries(value)
74
+ .some(([key, entry]) => sensitive.test(key) || sensitiveInput(entry));
75
+ return false;
76
+ }
77
+ function compactValue(key, value) {
78
+ const compact = String(value).trim().replace(/\s+/g, ' ');
79
+ if (key === 'path' || key === 'file_path' || key === 'workdir') {
80
+ const parts = compact.replace(/\\/g, '/').split('/').filter(Boolean);
81
+ return parts.slice(-2).join('/') || compact;
82
+ }
83
+ return compact.length > 96 ? `${compact.slice(0, 95)}...` : compact;
84
+ }
85
+ function detailFromInput(value) {
86
+ const input = recordInput(value);
87
+ if (!input || sensitiveInput(input))
88
+ return undefined;
89
+ const details = [];
90
+ for (const [key, title] of detailFields) {
91
+ const value = input[key];
92
+ if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean')
93
+ continue;
94
+ details.push(`${title}: ${compactValue(key, value)}`);
95
+ if (details.length === 2)
96
+ break;
97
+ }
98
+ const lineStart = input.line_start;
99
+ const lineEnd = input.line_end;
100
+ if (details.length < 2 && (typeof lineStart === 'number' || typeof lineEnd === 'number')) {
101
+ details.push(`lines: ${typeof lineStart === 'number' ? lineStart : 1}-${typeof lineEnd === 'number' ? lineEnd : lineStart}`);
102
+ }
103
+ return details.length ? details.join(' · ') : undefined;
104
+ }
105
+ function displayableNote(value) {
106
+ const note = text(value)?.replace(/\s+/g, ' ');
107
+ return note ? (note.length > 240 ? `${note.slice(0, 239)}...` : note) : null;
108
+ }
109
+ function stepFromInput(id, name, input, state) {
110
+ const kind = toolKind(name);
111
+ const detail = detailFromInput(input);
112
+ return { id, kind, label: toolLabel(name, kind), ...(detail ? { detail } : {}), state };
113
+ }
114
+ function timestamp(value) {
115
+ if (typeof value === 'number' && Number.isFinite(value))
116
+ return value;
117
+ if (typeof value !== 'string' || !value.trim())
118
+ return null;
119
+ const number = Number(value);
120
+ if (Number.isFinite(number))
121
+ return number;
122
+ const parsed = Date.parse(value);
123
+ return Number.isFinite(parsed) ? parsed : null;
124
+ }
125
+ function identities(...values) {
126
+ const result = new Set();
127
+ for (const value of values)
128
+ for (const key of ['id', 'uuid', 'message_id', 'messageId', 'client_id', 'clientId', 'client_user_message_id', 'clientUserMessageId', 'promptId']) {
129
+ const id = field(value || {}, key);
130
+ if (id)
131
+ result.add(id);
132
+ }
133
+ return [...result];
134
+ }
135
+ function at(value) {
136
+ for (const key of ['timestamp', 'created_at', 'createdAt', 'created', 'time']) {
137
+ const found = timestamp(value[key]);
138
+ if (found !== null)
139
+ return found;
140
+ }
141
+ return null;
142
+ }
143
+ function isPrompt(content) {
144
+ if (typeof content === 'string')
145
+ return !!content.trim();
146
+ const blocks = items(content);
147
+ return blocks.some((block) => object(block)?.type !== 'tool_result');
148
+ }
149
+ function project(events, sourceRevision, turn) {
150
+ let start = -1;
151
+ if (!turn) {
152
+ for (const [index, event] of events.entries())
153
+ if (event.type === 'boundary')
154
+ start = index;
155
+ }
156
+ else {
157
+ const acceptedAt = timestamp(turn.acceptedAt);
158
+ const exact = events.flatMap((event, index) => event.type === 'boundary' && event.ids.includes(turn.token) ? [index] : []);
159
+ start = exact.length === 1 ? exact[0] : -1;
160
+ if (start < 0 && exact.length === 0 && acceptedAt !== null) {
161
+ const candidates = events.flatMap((event, index) => event.type === 'boundary' && event.at !== null && event.at >= acceptedAt
162
+ ? [{ index, at: event.at }] : []);
163
+ const earliest = candidates.reduce((value, candidate) => value === null || candidate.at < value ? candidate.at : value, null);
164
+ const matches = earliest === null ? [] : candidates.filter((candidate) => candidate.at === earliest);
165
+ if (matches.length === 1)
166
+ start = matches[0].index;
167
+ }
168
+ }
169
+ if (turn && start < 0)
170
+ return emptyTrace(turn, sourceRevision);
171
+ let note = null;
172
+ let steps = [];
173
+ for (let index = start + 1; index < events.length; index++) {
174
+ const event = events[index];
175
+ if (event.type === 'boundary')
176
+ return emptyTrace(turn, sourceRevision);
177
+ if (event.type === 'note') {
178
+ note = event.text;
179
+ steps = [];
180
+ continue;
181
+ }
182
+ if (event.type === 'call') {
183
+ if (note)
184
+ steps.push(event.step);
185
+ continue;
186
+ }
187
+ const step = steps.find((value) => value.id === event.id);
188
+ if (step)
189
+ steps[steps.indexOf(step)] = { ...step, state: 'done' };
190
+ }
191
+ return note
192
+ ? { revision: `${turn?.token ?? '0'}:${sourceRevision}`, turnId: turn?.token ?? null, workingNote: note, steps }
193
+ : emptyTrace(turn, sourceRevision);
194
+ }
195
+ function applyRolloutEvent(value, ordinal) {
196
+ const event = object(value);
197
+ const payload = object(event?.payload);
198
+ if (!event || !payload)
199
+ return [];
200
+ const result = [];
201
+ const type = field(payload, 'type');
202
+ if ((event.type === 'event_msg' && type === 'user_message')
203
+ || (event.type === 'response_item' && (type === 'message' || type === 'input_message') && payload.role === 'user')) {
204
+ result.push({ type: 'boundary', ids: identities(payload, event), at: at(payload) ?? at(event) });
205
+ }
206
+ if (event.type === 'event_msg' && type === 'agent_message' && payload.phase === 'commentary') {
207
+ const note = displayableNote(payload.message ?? payload.text);
208
+ if (note)
209
+ result.push({ type: 'note', text: note });
210
+ }
211
+ if (event.type === 'response_item' && (type === 'custom_tool_call' || type === 'function_call')) {
212
+ const name = field(payload, 'name', 'tool_name') || 'tool';
213
+ const id = field(payload, 'call_id', 'id') || `tool-${ordinal}`;
214
+ result.push({ type: 'call', step: stepFromInput(id, name, payload.input ?? payload.arguments ?? payload.args, 'running') });
215
+ }
216
+ if (event.type === 'response_item' && (type === 'custom_tool_call_output' || type === 'function_call_output')) {
217
+ const id = field(payload, 'call_id', 'id');
218
+ if (id)
219
+ result.push({ type: 'done', id });
220
+ }
221
+ if (event.type === 'event_msg' && type === 'web_search_end') {
222
+ result.push({ type: 'call', step: stepFromInput(field(payload, 'id', 'call_id') || `search-${ordinal}`, 'Search', payload, 'done') });
223
+ }
224
+ return result;
225
+ }
226
+ function applyProjectJsonlEvent(value, ordinal) {
227
+ const entry = object(value);
228
+ const message = object(entry?.message);
229
+ if (!entry || !message)
230
+ return [];
231
+ const result = [];
232
+ if (entry.type === 'user' && message.role === 'user' && isPrompt(message.content))
233
+ result.push({ type: 'boundary', ids: identities(entry, message), at: at(entry) ?? at(message) });
234
+ if (entry.type === 'assistant' && message.role === 'assistant')
235
+ for (const blockValue of items(message.content)) {
236
+ const block = object(blockValue);
237
+ if (block?.type === 'text') {
238
+ const note = displayableNote(block.text);
239
+ if (note)
240
+ result.push({ type: 'note', text: note });
241
+ }
242
+ if (block?.type === 'tool_use') {
243
+ const id = field(block, 'id') || `tool-${ordinal}`;
244
+ result.push({ type: 'call', step: stepFromInput(id, field(block, 'name') || 'tool', block.input, 'running') });
245
+ }
246
+ }
247
+ if (entry.type === 'user' && message.role === 'user')
248
+ for (const blockValue of items(message.content)) {
249
+ const block = object(blockValue);
250
+ if (block?.type === 'tool_result') {
251
+ const id = field(block, 'tool_use_id');
252
+ if (id)
253
+ result.push({ type: 'done', id });
254
+ }
255
+ }
256
+ return result;
257
+ }
258
+ function applySessionJsonlEvent(value, ordinal) {
259
+ const entry = object(value);
260
+ const message = object(entry?.message);
261
+ if (!entry || entry.type !== 'message' || !message)
262
+ return [];
263
+ const result = [];
264
+ if (message.role === 'user' && isPrompt(message.content))
265
+ result.push({ type: 'boundary', ids: identities(entry, message), at: at(entry) ?? at(message) });
266
+ if (message.role === 'assistant')
267
+ for (const blockValue of items(message.content)) {
268
+ const block = object(blockValue);
269
+ if (block?.type === 'text') {
270
+ const note = displayableNote(block.text);
271
+ if (note)
272
+ result.push({ type: 'note', text: note });
273
+ }
274
+ if (block?.type === 'toolCall') {
275
+ const id = field(block, 'id') || `tool-${ordinal}`;
276
+ result.push({ type: 'call', step: stepFromInput(id, field(block, 'name') || 'tool', block.arguments, 'running') });
277
+ }
278
+ }
279
+ if (message.role === 'toolResult') {
280
+ const id = field(message, 'toolCallId');
281
+ if (id)
282
+ result.push({ type: 'done', id });
283
+ }
284
+ return result;
285
+ }
286
+ function completeLines(buffer) {
287
+ const lines = [];
288
+ let start = 0;
289
+ for (let index = 0; index < buffer.length; index++) {
290
+ if (buffer[index] !== 10)
291
+ continue;
292
+ if (index > start)
293
+ lines.push(buffer.subarray(start, index));
294
+ start = index + 1;
295
+ }
296
+ return { lines, remainder: buffer.subarray(start) };
297
+ }
298
+ function readFrom(path, start) {
299
+ let fd = null;
300
+ try {
301
+ const size = statSync(path).size;
302
+ if (size <= start)
303
+ return Buffer.alloc(0);
304
+ const chunk = Buffer.allocUnsafe(size - start);
305
+ fd = openSync(path, 'r');
306
+ readSync(fd, chunk, 0, chunk.length, start);
307
+ return chunk;
308
+ }
309
+ catch {
310
+ return null;
311
+ }
312
+ finally {
313
+ if (fd !== null)
314
+ closeSync(fd);
315
+ }
316
+ }
317
+ function readIncremental(path, apply, turn) {
318
+ if (!path)
319
+ return emptyTrace(turn);
320
+ let size;
321
+ try {
322
+ size = statSync(path).size;
323
+ }
324
+ catch {
325
+ return emptyTrace(turn);
326
+ }
327
+ const prior = cache.get(path);
328
+ const trace = prior && prior.size <= size
329
+ ? { ...prior, events: [...prior.events] }
330
+ : { size: 0, remainder: Buffer.alloc(0), events: [] };
331
+ const appended = readFrom(path, trace.size);
332
+ if (appended === null)
333
+ return emptyTrace(turn);
334
+ const { lines, remainder } = completeLines(Buffer.concat([trace.remainder, appended]));
335
+ for (const [index, line] of lines.entries()) {
336
+ try {
337
+ trace.events.push(...apply(JSON.parse(line.toString('utf8')), trace.size + index));
338
+ }
339
+ catch { /* malformed native data is ignored */ }
340
+ }
341
+ trace.size = size;
342
+ trace.remainder = remainder;
343
+ cache.set(path, trace);
344
+ return project(trace.events, String(size), turn);
345
+ }
346
+ const codexSessionsDir = () => join(process.env.CODEX_HOME || join(homedir(), '.codex'), 'sessions');
347
+ export function codexRolloutPath(threadId, root = codexSessionsDir()) {
348
+ for (const year of children(root))
349
+ for (const month of children(join(root, year)))
350
+ for (const day of children(join(root, year, month))) {
351
+ const dir = join(root, year, month, day);
352
+ const file = children(dir).find((name) => name.includes(threadId));
353
+ if (file)
354
+ return join(dir, file);
355
+ }
356
+ return null;
357
+ }
358
+ export function readCodexExecutionTrace(threadId, turn, root = codexSessionsDir()) {
359
+ return readIncremental(codexRolloutPath(threadId, root), applyRolloutEvent, turn);
360
+ }
361
+ const projectTranscriptRoot = () => join(process.env.CLAUDE_CONFIG_DIR || join(homedir(), '.claude'), 'projects');
362
+ function projectJsonlPath(threadId, root = projectTranscriptRoot()) {
363
+ for (const project of children(root)) {
364
+ const path = join(root, project, `${threadId}.jsonl`);
365
+ try {
366
+ if (statSync(path).isFile())
367
+ return path;
368
+ }
369
+ catch { /* try next */ }
370
+ }
371
+ return null;
372
+ }
373
+ export function readProjectJsonlExecutionTrace(threadId, turn, root = projectTranscriptRoot()) {
374
+ return readIncremental(projectJsonlPath(threadId, root), applyProjectJsonlEvent, turn);
375
+ }
376
+ const sessionJsonlRoot = () => join(process.env.SPEXCODE_PI_AGENT_DIR || join(homedir(), '.pi', 'agent'), 'sessions');
377
+ function sessionJsonlPath(threadId, root = sessionJsonlRoot()) {
378
+ const key = `${root}:${threadId}`;
379
+ const cached = sessionJsonlPaths.get(key);
380
+ if (cached) {
381
+ try {
382
+ if (statSync(cached).isFile())
383
+ return cached;
384
+ }
385
+ catch {
386
+ sessionJsonlPaths.delete(key);
387
+ }
388
+ }
389
+ for (const directory of children(root))
390
+ for (const file of children(join(root, directory))) {
391
+ if (!file.endsWith('.jsonl'))
392
+ continue;
393
+ const path = join(root, directory, file);
394
+ try {
395
+ const header = object(JSON.parse(readFileSync(path, 'utf8').split('\n', 1)[0]));
396
+ if (header?.type === 'session' && header.id === threadId) {
397
+ sessionJsonlPaths.set(key, path);
398
+ return path;
399
+ }
400
+ }
401
+ catch { /* unreadable entries are not a match */ }
402
+ }
403
+ return null;
404
+ }
405
+ export function readSessionJsonlExecutionTrace(threadId, turn, root = sessionJsonlRoot()) {
406
+ return readIncremental(sessionJsonlPath(threadId, root), applySessionJsonlEvent, turn);
407
+ }
408
+ const localStoreRoot = () => process.env.SPEXCODE_OPENCODE_DATA_DIR
409
+ || join(process.env.XDG_DATA_HOME || join(homedir(), '.local', 'share'), 'opencode');
410
+ function readLocalExport(threadId) {
411
+ return execFileSync(process.env.SPEXCODE_OPENCODE_CMD || 'opencode', ['export', threadId, '--sanitize'], {
412
+ encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'],
413
+ });
414
+ }
415
+ function localStoreRevision(root) {
416
+ try {
417
+ const database = statSync(join(root, 'opencode.db'));
418
+ let writeAheadLog = '0:0';
419
+ try {
420
+ const stat = statSync(join(root, 'opencode.db-wal'));
421
+ writeAheadLog = `${stat.size}:${Math.floor(stat.mtimeMs)}`;
422
+ }
423
+ catch { /* a checkpointed database has no separate write-ahead log */ }
424
+ return `${database.size}:${Math.floor(database.mtimeMs)}:${writeAheadLog}`;
425
+ }
426
+ catch {
427
+ return null;
428
+ }
429
+ }
430
+ function localStoreEvents(value) {
431
+ const events = [];
432
+ for (const messageValue of items(object(value)?.messages)) {
433
+ const message = object(messageValue);
434
+ const info = object(message?.info);
435
+ if (!message || !info)
436
+ continue;
437
+ if (info.role === 'user')
438
+ events.push({ type: 'boundary', ids: identities(info, message), at: at(object(info.time) || info) });
439
+ if (info.role !== 'assistant')
440
+ continue;
441
+ for (const partValue of items(message.parts)) {
442
+ const part = object(partValue);
443
+ if (part?.type === 'text') {
444
+ const note = displayableNote(part.text);
445
+ if (note)
446
+ events.push({ type: 'note', text: note });
447
+ }
448
+ if (part?.type === 'tool') {
449
+ const state = object(part.state);
450
+ const status = field(state || {}, 'status')?.toLowerCase() || '';
451
+ const id = field(part, 'callID', 'id') || `tool-${events.length}`;
452
+ events.push({ type: 'call', step: stepFromInput(id, field(part, 'tool') || 'tool', state?.input, /completed|error|cancelled/.test(status) ? 'done' : 'running') });
453
+ }
454
+ }
455
+ }
456
+ return events;
457
+ }
458
+ export function readLocalStoreExecutionTrace(threadId, turn, root = localStoreRoot(), load = readLocalExport) {
459
+ const revision = localStoreRevision(root);
460
+ if (!revision)
461
+ return emptyTrace(turn);
462
+ const key = `${root}:${threadId}`;
463
+ let cached = localStoreCache.get(key);
464
+ if (!cached || cached.revision !== revision) {
465
+ try {
466
+ cached = { revision, events: localStoreEvents(JSON.parse(load(threadId))) };
467
+ localStoreCache.set(key, cached);
468
+ }
469
+ catch {
470
+ return emptyTrace(turn, revision);
471
+ }
472
+ }
473
+ return project(cached.events, revision, turn);
474
+ }
475
+ export const noExecutionTrace = (_threadId, _turn) => null;
@@ -0,0 +1,2 @@
1
+ export declare function writeFileIfChanged(path: string, content: string | Uint8Array): boolean;
2
+ export declare function copyFileIfChanged(source: string, target: string): boolean;
@@ -0,0 +1,26 @@
1
+ import { copyFileSync, readFileSync, writeFileSync } from 'node:fs';
2
+ export function writeFileIfChanged(path, content) {
3
+ const next = Buffer.from(content);
4
+ try {
5
+ if (readFileSync(path).equals(next))
6
+ return false;
7
+ }
8
+ catch (error) {
9
+ if (error?.code !== 'ENOENT')
10
+ throw error;
11
+ }
12
+ writeFileSync(path, content);
13
+ return true;
14
+ }
15
+ export function copyFileIfChanged(source, target) {
16
+ try {
17
+ if (readFileSync(target).equals(readFileSync(source)))
18
+ return false;
19
+ }
20
+ catch (error) {
21
+ if (error?.code !== 'ENOENT')
22
+ throw error;
23
+ }
24
+ copyFileSync(source, target);
25
+ return true;
26
+ }
@@ -0,0 +1,89 @@
1
+ import { type Harness } from './harness.js';
2
+ export declare const FLAT_BRANCH = "flatcode";
3
+ export declare const FLAT_AGENT_CHOICES: readonly [{
4
+ readonly name: "claude";
5
+ readonly label: "Claude Code";
6
+ readonly harness: "claude";
7
+ readonly cmd: "claude";
8
+ }, {
9
+ readonly name: "codex";
10
+ readonly label: "Codex";
11
+ readonly harness: "codex";
12
+ readonly cmd: "codex";
13
+ }, {
14
+ readonly name: "opencode";
15
+ readonly label: "OpenCode";
16
+ readonly harness: "opencode";
17
+ readonly cmd: "opencode";
18
+ }, {
19
+ readonly name: "pi";
20
+ readonly label: "Pi";
21
+ readonly harness: "pi";
22
+ readonly cmd: "pi";
23
+ }];
24
+ export declare const languageName: (code: string) => string;
25
+ export type FlatGate = {
26
+ errors: number;
27
+ governed: number;
28
+ uncovered: number;
29
+ coverage: number;
30
+ errorFindings: readonly string[];
31
+ uncoveredFiles: readonly string[];
32
+ sourceFiles: readonly string[];
33
+ };
34
+ export type FlatProfile = {
35
+ sourceExtensions: readonly string[];
36
+ governedRoots: readonly string[];
37
+ languages: readonly string[];
38
+ fileCount: number;
39
+ };
40
+ export declare function profileFiles(files: readonly string[]): FlatProfile;
41
+ export declare function readGate(payload: string): FlatGate;
42
+ export declare const gatePassed: (gate: FlatGate, coverageFloor: number) => boolean;
43
+ export declare function confirmProfile(proposed: FlatProfile, sourceFiles: readonly string[]): FlatProfile;
44
+ type FlatTurnHarness = {
45
+ harness: Harness;
46
+ cmd: string;
47
+ name: string;
48
+ harnessId: string;
49
+ };
50
+ export type FlatOptions = {
51
+ target: string;
52
+ out?: string;
53
+ launcher?: string;
54
+ rounds?: number;
55
+ coverage?: number;
56
+ lang?: string;
57
+ };
58
+ export type FlatResult = {
59
+ out: string;
60
+ repo: string;
61
+ source: string;
62
+ revision: string;
63
+ rounds: number;
64
+ gate: FlatGate;
65
+ passed: boolean;
66
+ profile: FlatProfile;
67
+ };
68
+ export declare function flatNew(options: FlatOptions, log?: (line: string) => void, choose?: (root: string) => Promise<FlatTurnHarness>): Promise<FlatResult>;
69
+ export declare function publicShellDir(): string;
70
+ export declare function flatSite(flatDir: string, log?: (line: string) => void): Promise<{
71
+ site: string;
72
+ nodes: number;
73
+ }>;
74
+ export declare function gallerySlug(source: string): string;
75
+ export type GalleryEntry = {
76
+ slug: string;
77
+ source: string;
78
+ revision: string;
79
+ coverage: number;
80
+ governed: number;
81
+ nodes: number;
82
+ passed: boolean;
83
+ languages: readonly string[];
84
+ lang: string;
85
+ };
86
+ export declare function galleryIndexHtml(entries: readonly GalleryEntry[]): string;
87
+ export declare function flatGallery(out: string, flatDirs: readonly string[], log?: (line: string) => void): Promise<GalleryEntry[]>;
88
+ export declare function runFlat(argv: readonly string[]): Promise<number>;
89
+ export {};