@vascend/talos 0.1.0

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 (620) hide show
  1. package/README.md +202 -0
  2. package/dist/backend/asset-events.d.ts +31 -0
  3. package/dist/backend/asset-events.js +149 -0
  4. package/dist/backend/assets.d.ts +31 -0
  5. package/dist/backend/assets.js +210 -0
  6. package/dist/backend/auth.d.ts +18 -0
  7. package/dist/backend/auth.js +59 -0
  8. package/dist/backend/config.d.ts +14 -0
  9. package/dist/backend/config.js +41 -0
  10. package/dist/backend/conversations.d.ts +21 -0
  11. package/dist/backend/conversations.js +141 -0
  12. package/dist/backend/crypto.d.ts +9 -0
  13. package/dist/backend/crypto.js +68 -0
  14. package/dist/backend/engine.d.ts +13 -0
  15. package/dist/backend/engine.js +78 -0
  16. package/dist/backend/http.d.ts +25 -0
  17. package/dist/backend/http.js +112 -0
  18. package/dist/backend/index.d.ts +1 -0
  19. package/dist/backend/index.js +24 -0
  20. package/dist/backend/routes.d.ts +14 -0
  21. package/dist/backend/routes.js +169 -0
  22. package/dist/backend/sdk.d.ts +12 -0
  23. package/dist/backend/sdk.js +11 -0
  24. package/dist/backend/server.d.ts +12 -0
  25. package/dist/backend/server.js +91 -0
  26. package/dist/backend/temp-image-store.d.ts +46 -0
  27. package/dist/backend/temp-image-store.js +197 -0
  28. package/dist/backend/types.d.ts +103 -0
  29. package/dist/backend/types.js +29 -0
  30. package/dist/backend/users.d.ts +13 -0
  31. package/dist/backend/users.js +76 -0
  32. package/dist/backend/ws-handler.d.ts +14 -0
  33. package/dist/backend/ws-handler.js +72 -0
  34. package/dist/backend/ws.d.ts +19 -0
  35. package/dist/backend/ws.js +146 -0
  36. package/dist/core/agent.d.ts +56 -0
  37. package/dist/core/agent.js +1783 -0
  38. package/dist/core/background.d.ts +45 -0
  39. package/dist/core/background.js +140 -0
  40. package/dist/core/bootstrap.d.ts +45 -0
  41. package/dist/core/bootstrap.js +294 -0
  42. package/dist/core/cli-args.d.ts +41 -0
  43. package/dist/core/cli-args.js +282 -0
  44. package/dist/core/collapsible-output.d.ts +38 -0
  45. package/dist/core/collapsible-output.js +143 -0
  46. package/dist/core/compaction-checkpoint.d.ts +9 -0
  47. package/dist/core/compaction-checkpoint.js +58 -0
  48. package/dist/core/compaction.d.ts +42 -0
  49. package/dist/core/compaction.js +270 -0
  50. package/dist/core/config.d.ts +49 -0
  51. package/dist/core/config.js +417 -0
  52. package/dist/core/context-ledger.d.ts +99 -0
  53. package/dist/core/context-ledger.js +222 -0
  54. package/dist/core/context-policy.d.ts +17 -0
  55. package/dist/core/context-policy.js +81 -0
  56. package/dist/core/continuation-review.d.ts +23 -0
  57. package/dist/core/continuation-review.js +64 -0
  58. package/dist/core/crash-report.d.ts +3 -0
  59. package/dist/core/crash-report.js +27 -0
  60. package/dist/core/credentials.d.ts +11 -0
  61. package/dist/core/credentials.js +183 -0
  62. package/dist/core/doctor.d.ts +24 -0
  63. package/dist/core/doctor.js +125 -0
  64. package/dist/core/effort.d.ts +5 -0
  65. package/dist/core/effort.js +42 -0
  66. package/dist/core/env-paths.d.ts +3 -0
  67. package/dist/core/env-paths.js +38 -0
  68. package/dist/core/execution-guidance.d.ts +9 -0
  69. package/dist/core/execution-guidance.js +73 -0
  70. package/dist/core/execution-target.d.ts +41 -0
  71. package/dist/core/execution-target.js +69 -0
  72. package/dist/core/file-coordination.d.ts +66 -0
  73. package/dist/core/file-coordination.js +176 -0
  74. package/dist/core/file-lease-store.d.ts +14 -0
  75. package/dist/core/file-lease-store.js +89 -0
  76. package/dist/core/image-limits.d.ts +26 -0
  77. package/dist/core/image-limits.js +205 -0
  78. package/dist/core/interruptible-completion.d.ts +3 -0
  79. package/dist/core/interruptible-completion.js +42 -0
  80. package/dist/core/kingdoms-mode-state.d.ts +24 -0
  81. package/dist/core/kingdoms-mode-state.js +139 -0
  82. package/dist/core/licenza.d.ts +38 -0
  83. package/dist/core/licenza.js +125 -0
  84. package/dist/core/model-limits.d.ts +2 -0
  85. package/dist/core/model-limits.js +36 -0
  86. package/dist/core/output-lifecycle.d.ts +44 -0
  87. package/dist/core/output-lifecycle.js +190 -0
  88. package/dist/core/package-update.d.ts +15 -0
  89. package/dist/core/package-update.js +121 -0
  90. package/dist/core/permission-queue.d.ts +2 -0
  91. package/dist/core/permission-queue.js +20 -0
  92. package/dist/core/prompt-attachment.d.ts +21 -0
  93. package/dist/core/prompt-attachment.js +123 -0
  94. package/dist/core/request-plan.d.ts +16 -0
  95. package/dist/core/request-plan.js +36 -0
  96. package/dist/core/run-timing.d.ts +17 -0
  97. package/dist/core/run-timing.js +123 -0
  98. package/dist/core/self-update.d.ts +17 -0
  99. package/dist/core/self-update.js +54 -0
  100. package/dist/core/session-refs.d.ts +27 -0
  101. package/dist/core/session-refs.js +126 -0
  102. package/dist/core/session-storage.d.ts +4 -0
  103. package/dist/core/session-storage.js +48 -0
  104. package/dist/core/session-title.d.ts +1 -0
  105. package/dist/core/session-title.js +21 -0
  106. package/dist/core/session-usage.d.ts +17 -0
  107. package/dist/core/session-usage.js +74 -0
  108. package/dist/core/session.d.ts +58 -0
  109. package/dist/core/session.js +296 -0
  110. package/dist/core/settings.d.ts +17 -0
  111. package/dist/core/settings.js +107 -0
  112. package/dist/core/storage-retention.d.ts +21 -0
  113. package/dist/core/storage-retention.js +227 -0
  114. package/dist/core/text-sanitize.d.ts +1 -0
  115. package/dist/core/text-sanitize.js +35 -0
  116. package/dist/core/tool-artifacts.d.ts +6 -0
  117. package/dist/core/tool-artifacts.js +51 -0
  118. package/dist/core/tool-compress.d.ts +8 -0
  119. package/dist/core/tool-compress.js +111 -0
  120. package/dist/core/tool-executor.d.ts +16 -0
  121. package/dist/core/tool-executor.js +97 -0
  122. package/dist/core/tool-result-index.d.ts +52 -0
  123. package/dist/core/tool-result-index.js +327 -0
  124. package/dist/core/tool-result-store.d.ts +38 -0
  125. package/dist/core/tool-result-store.js +190 -0
  126. package/dist/core/tool-scheduler.d.ts +16 -0
  127. package/dist/core/tool-scheduler.js +35 -0
  128. package/dist/core/trust.d.ts +21 -0
  129. package/dist/core/trust.js +95 -0
  130. package/dist/core/types.d.ts +402 -0
  131. package/dist/core/types.js +1 -0
  132. package/dist/core/update-check.d.ts +26 -0
  133. package/dist/core/update-check.js +89 -0
  134. package/dist/core/update-process.d.ts +10 -0
  135. package/dist/core/update-process.js +31 -0
  136. package/dist/core/user-inbox.d.ts +23 -0
  137. package/dist/core/user-inbox.js +56 -0
  138. package/dist/core/user-input.d.ts +10 -0
  139. package/dist/core/user-input.js +35 -0
  140. package/dist/core/version.d.ts +1 -0
  141. package/dist/core/version.js +10 -0
  142. package/dist/core/vibe-modes.d.ts +38 -0
  143. package/dist/core/vibe-modes.js +383 -0
  144. package/dist/core/workspace-roots.d.ts +13 -0
  145. package/dist/core/workspace-roots.js +91 -0
  146. package/dist/core/workspace-sessions.d.ts +51 -0
  147. package/dist/core/workspace-sessions.js +243 -0
  148. package/dist/cowork/client.d.ts +29 -0
  149. package/dist/cowork/client.js +49 -0
  150. package/dist/cowork/engine-bridge.d.ts +22 -0
  151. package/dist/cowork/engine-bridge.js +98 -0
  152. package/dist/cowork/index.d.ts +11 -0
  153. package/dist/cowork/index.js +16 -0
  154. package/dist/cowork/ipc.d.ts +97 -0
  155. package/dist/cowork/ipc.js +96 -0
  156. package/dist/cowork/manager.d.ts +66 -0
  157. package/dist/cowork/manager.js +325 -0
  158. package/dist/cowork/store.d.ts +23 -0
  159. package/dist/cowork/store.js +182 -0
  160. package/dist/cowork/sync.d.ts +20 -0
  161. package/dist/cowork/sync.js +164 -0
  162. package/dist/cowork/types.d.ts +78 -0
  163. package/dist/cowork/types.js +21 -0
  164. package/dist/extensions/ext-tools.d.ts +3 -0
  165. package/dist/extensions/ext-tools.js +73 -0
  166. package/dist/extensions/loader.d.ts +91 -0
  167. package/dist/extensions/loader.js +474 -0
  168. package/dist/extensions/settings.d.ts +20 -0
  169. package/dist/extensions/settings.js +86 -0
  170. package/dist/extensions/types.d.ts +219 -0
  171. package/dist/extensions/types.js +1 -0
  172. package/dist/horizon/async-queue.d.ts +9 -0
  173. package/dist/horizon/async-queue.js +46 -0
  174. package/dist/horizon/engine.d.ts +85 -0
  175. package/dist/horizon/engine.js +603 -0
  176. package/dist/horizon/index.d.ts +4 -0
  177. package/dist/horizon/index.js +2 -0
  178. package/dist/horizon/main-team.d.ts +163 -0
  179. package/dist/horizon/main-team.js +774 -0
  180. package/dist/horizon/types.d.ts +233 -0
  181. package/dist/horizon/types.js +1 -0
  182. package/dist/index.d.ts +2 -0
  183. package/dist/index.js +233 -0
  184. package/dist/mcp/protocol.d.ts +81 -0
  185. package/dist/mcp/protocol.js +122 -0
  186. package/dist/package.json +1 -0
  187. package/dist/packages/packages.d.ts +12 -0
  188. package/dist/packages/packages.js +323 -0
  189. package/dist/prompts/templates.d.ts +13 -0
  190. package/dist/prompts/templates.js +139 -0
  191. package/dist/providers/anthropic-oauth.d.ts +13 -0
  192. package/dist/providers/anthropic-oauth.js +124 -0
  193. package/dist/providers/anthropic.d.ts +27 -0
  194. package/dist/providers/anthropic.js +526 -0
  195. package/dist/providers/catalog.d.ts +15 -0
  196. package/dist/providers/catalog.js +166 -0
  197. package/dist/providers/effort.d.ts +12 -0
  198. package/dist/providers/effort.js +102 -0
  199. package/dist/providers/model-catalog.d.ts +43 -0
  200. package/dist/providers/model-catalog.js +70 -0
  201. package/dist/providers/model-effort.d.ts +5 -0
  202. package/dist/providers/model-effort.js +43 -0
  203. package/dist/providers/model-registry.d.ts +39 -0
  204. package/dist/providers/model-registry.js +142 -0
  205. package/dist/providers/models-dev.d.ts +9 -0
  206. package/dist/providers/models-dev.js +97 -0
  207. package/dist/providers/oauth-callback-server.d.ts +28 -0
  208. package/dist/providers/oauth-callback-server.js +184 -0
  209. package/dist/providers/oauth-orchestrator.d.ts +58 -0
  210. package/dist/providers/oauth-orchestrator.js +159 -0
  211. package/dist/providers/oauth-store.d.ts +12 -0
  212. package/dist/providers/oauth-store.js +139 -0
  213. package/dist/providers/open-browser.d.ts +20 -0
  214. package/dist/providers/open-browser.js +92 -0
  215. package/dist/providers/openai-compat.d.ts +14 -0
  216. package/dist/providers/openai-compat.js +523 -0
  217. package/dist/providers/openai-oauth.d.ts +15 -0
  218. package/dist/providers/openai-oauth.js +382 -0
  219. package/dist/providers/openrouter-auth.d.ts +73 -0
  220. package/dist/providers/openrouter-auth.js +321 -0
  221. package/dist/providers/openrouter-manual-fallback.d.ts +25 -0
  222. package/dist/providers/openrouter-manual-fallback.js +161 -0
  223. package/dist/providers/openrouter.d.ts +15 -0
  224. package/dist/providers/openrouter.js +107 -0
  225. package/dist/providers/plan-limits.d.ts +6 -0
  226. package/dist/providers/plan-limits.js +175 -0
  227. package/dist/providers/provider-reset.d.ts +4 -0
  228. package/dist/providers/provider-reset.js +83 -0
  229. package/dist/providers/quota-limits.d.ts +4 -0
  230. package/dist/providers/quota-limits.js +33 -0
  231. package/dist/providers/registry.d.ts +33 -0
  232. package/dist/providers/registry.js +213 -0
  233. package/dist/providers/retry.d.ts +37 -0
  234. package/dist/providers/retry.js +347 -0
  235. package/dist/rpc/server.d.ts +23 -0
  236. package/dist/rpc/server.js +222 -0
  237. package/dist/sdk.d.ts +67 -0
  238. package/dist/sdk.js +64 -0
  239. package/dist/skills/skills.d.ts +17 -0
  240. package/dist/skills/skills.js +155 -0
  241. package/dist/text-sanitize.js +28 -0
  242. package/dist/tools/ask-user.d.ts +2 -0
  243. package/dist/tools/ask-user.js +60 -0
  244. package/dist/tools/builtin.d.ts +48 -0
  245. package/dist/tools/builtin.js +2494 -0
  246. package/dist/tools/capabilities.d.ts +5 -0
  247. package/dist/tools/capabilities.js +55 -0
  248. package/dist/tools/computer-capture.d.ts +2 -0
  249. package/dist/tools/computer-capture.js +91 -0
  250. package/dist/tools/computer-posix.d.ts +5 -0
  251. package/dist/tools/computer-posix.js +136 -0
  252. package/dist/tools/computer-use.d.ts +14 -0
  253. package/dist/tools/computer-use.js +108 -0
  254. package/dist/tools/discovery.d.ts +12 -0
  255. package/dist/tools/discovery.js +205 -0
  256. package/dist/tools/execute.d.ts +2 -0
  257. package/dist/tools/execute.js +73 -0
  258. package/dist/tools/normalize-input.d.ts +17 -0
  259. package/dist/tools/normalize-input.js +174 -0
  260. package/dist/tools/output-artifact.d.ts +3 -0
  261. package/dist/tools/output-artifact.js +80 -0
  262. package/dist/tools/pagination.d.ts +15 -0
  263. package/dist/tools/pagination.js +93 -0
  264. package/dist/tools/plan-status.d.ts +2 -0
  265. package/dist/tools/plan-status.js +109 -0
  266. package/dist/tools/program-input.d.ts +3 -0
  267. package/dist/tools/program-input.js +19 -0
  268. package/dist/tools/program.d.ts +3 -0
  269. package/dist/tools/program.js +567 -0
  270. package/dist/tools/protocol-catalog.d.ts +12 -0
  271. package/dist/tools/protocol-catalog.js +46 -0
  272. package/dist/tools/ramification-tools.d.ts +12 -0
  273. package/dist/tools/ramification-tools.js +528 -0
  274. package/dist/tools/regex-compat.d.ts +9 -0
  275. package/dist/tools/regex-compat.js +96 -0
  276. package/dist/tools/registry.d.ts +51 -0
  277. package/dist/tools/registry.js +185 -0
  278. package/dist/tools/resolve.d.ts +2 -0
  279. package/dist/tools/resolve.js +107 -0
  280. package/dist/tools/shell-env.d.ts +2 -0
  281. package/dist/tools/shell-env.js +7 -0
  282. package/dist/tools/team-input.d.ts +3 -0
  283. package/dist/tools/team-input.js +129 -0
  284. package/dist/tools/team-tools.d.ts +7 -0
  285. package/dist/tools/team-tools.js +348 -0
  286. package/dist/tools/workspace-sessions.d.ts +2 -0
  287. package/dist/tools/workspace-sessions.js +35 -0
  288. package/dist/tui/account-entry.d.ts +1 -0
  289. package/dist/tui/account-entry.js +93 -0
  290. package/dist/tui/attachment-highlight.d.ts +1 -0
  291. package/dist/tui/attachment-highlight.js +24 -0
  292. package/dist/tui/attachment-refs.d.ts +2 -0
  293. package/dist/tui/attachment-refs.js +3 -0
  294. package/dist/tui/bottom-input.d.ts +219 -0
  295. package/dist/tui/bottom-input.js +1958 -0
  296. package/dist/tui/branding.d.ts +107 -0
  297. package/dist/tui/branding.js +750 -0
  298. package/dist/tui/clipboard-image.d.ts +10 -0
  299. package/dist/tui/clipboard-image.js +163 -0
  300. package/dist/tui/clipboard-text.d.ts +9 -0
  301. package/dist/tui/clipboard-text.js +51 -0
  302. package/dist/tui/clipboard-windows.d.ts +8 -0
  303. package/dist/tui/clipboard-windows.js +84 -0
  304. package/dist/tui/collapsible-command.d.ts +15 -0
  305. package/dist/tui/collapsible-command.js +48 -0
  306. package/dist/tui/command-feedback.d.ts +10 -0
  307. package/dist/tui/command-feedback.js +46 -0
  308. package/dist/tui/command-output-registry.d.ts +28 -0
  309. package/dist/tui/command-output-registry.js +103 -0
  310. package/dist/tui/command-transcript.d.ts +12 -0
  311. package/dist/tui/command-transcript.js +90 -0
  312. package/dist/tui/commands.d.ts +20 -0
  313. package/dist/tui/commands.js +131 -0
  314. package/dist/tui/context-bar.d.ts +4 -0
  315. package/dist/tui/context-bar.js +74 -0
  316. package/dist/tui/context-meter.d.ts +25 -0
  317. package/dist/tui/context-meter.js +81 -0
  318. package/dist/tui/cost-binding.d.ts +8 -0
  319. package/dist/tui/cost-binding.js +43 -0
  320. package/dist/tui/cost-tracker.d.ts +49 -0
  321. package/dist/tui/cost-tracker.js +122 -0
  322. package/dist/tui/diff.d.ts +9 -0
  323. package/dist/tui/diff.js +119 -0
  324. package/dist/tui/i18n-catalog.d.ts +5 -0
  325. package/dist/tui/i18n-catalog.js +184 -0
  326. package/dist/tui/i18n.d.ts +6 -0
  327. package/dist/tui/i18n.js +10 -0
  328. package/dist/tui/image-attachments.d.ts +46 -0
  329. package/dist/tui/image-attachments.js +167 -0
  330. package/dist/tui/images.d.ts +12 -0
  331. package/dist/tui/images.js +87 -0
  332. package/dist/tui/intro.d.ts +13 -0
  333. package/dist/tui/intro.js +109 -0
  334. package/dist/tui/language-preference.d.ts +6 -0
  335. package/dist/tui/language-preference.js +24 -0
  336. package/dist/tui/live-output.d.ts +2 -0
  337. package/dist/tui/live-output.js +18 -0
  338. package/dist/tui/locales.d.ts +19 -0
  339. package/dist/tui/locales.js +22 -0
  340. package/dist/tui/login-menu.d.ts +17 -0
  341. package/dist/tui/login-menu.js +58 -0
  342. package/dist/tui/logo.d.ts +8 -0
  343. package/dist/tui/logo.js +305 -0
  344. package/dist/tui/markdown-inline.d.ts +3 -0
  345. package/dist/tui/markdown-inline.js +99 -0
  346. package/dist/tui/markdown-table.d.ts +4 -0
  347. package/dist/tui/markdown-table.js +63 -0
  348. package/dist/tui/markdown.d.ts +11 -0
  349. package/dist/tui/markdown.js +257 -0
  350. package/dist/tui/mcp-transcript.d.ts +7 -0
  351. package/dist/tui/mcp-transcript.js +40 -0
  352. package/dist/tui/model-details.d.ts +2 -0
  353. package/dist/tui/model-details.js +21 -0
  354. package/dist/tui/model-selection.d.ts +7 -0
  355. package/dist/tui/model-selection.js +41 -0
  356. package/dist/tui/native-scrollback.d.ts +27 -0
  357. package/dist/tui/native-scrollback.js +134 -0
  358. package/dist/tui/onboarding.d.ts +72 -0
  359. package/dist/tui/onboarding.js +207 -0
  360. package/dist/tui/paste-collapse.d.ts +39 -0
  361. package/dist/tui/paste-collapse.js +117 -0
  362. package/dist/tui/perm-mode.d.ts +8 -0
  363. package/dist/tui/perm-mode.js +41 -0
  364. package/dist/tui/prompt-queue-store.d.ts +26 -0
  365. package/dist/tui/prompt-queue-store.js +87 -0
  366. package/dist/tui/prompt-queue.d.ts +47 -0
  367. package/dist/tui/prompt-queue.js +187 -0
  368. package/dist/tui/provider-menu.d.ts +33 -0
  369. package/dist/tui/provider-menu.js +175 -0
  370. package/dist/tui/question.d.ts +24 -0
  371. package/dist/tui/question.js +32 -0
  372. package/dist/tui/queue-screen.d.ts +25 -0
  373. package/dist/tui/queue-screen.js +152 -0
  374. package/dist/tui/queue-team.d.ts +3 -0
  375. package/dist/tui/queue-team.js +28 -0
  376. package/dist/tui/queued-questions.d.ts +20 -0
  377. package/dist/tui/queued-questions.js +163 -0
  378. package/dist/tui/quick-help.d.ts +1 -0
  379. package/dist/tui/quick-help.js +53 -0
  380. package/dist/tui/repl.d.ts +78 -0
  381. package/dist/tui/repl.js +4130 -0
  382. package/dist/tui/restore-queued-input.d.ts +3 -0
  383. package/dist/tui/restore-queued-input.js +20 -0
  384. package/dist/tui/review-detail.d.ts +6 -0
  385. package/dist/tui/review-detail.js +56 -0
  386. package/dist/tui/review-files.d.ts +3 -0
  387. package/dist/tui/review-files.js +22 -0
  388. package/dist/tui/review-render.d.ts +22 -0
  389. package/dist/tui/review-render.js +98 -0
  390. package/dist/tui/review-screen.d.ts +38 -0
  391. package/dist/tui/review-screen.js +358 -0
  392. package/dist/tui/review-store.d.ts +60 -0
  393. package/dist/tui/review-store.js +270 -0
  394. package/dist/tui/review-team.d.ts +2 -0
  395. package/dist/tui/review-team.js +27 -0
  396. package/dist/tui/selector-mouse.d.ts +26 -0
  397. package/dist/tui/selector-mouse.js +65 -0
  398. package/dist/tui/selector.d.ts +51 -0
  399. package/dist/tui/selector.js +299 -0
  400. package/dist/tui/session-replay.d.ts +10 -0
  401. package/dist/tui/session-replay.js +78 -0
  402. package/dist/tui/session-usage.d.ts +22 -0
  403. package/dist/tui/session-usage.js +55 -0
  404. package/dist/tui/skill-transcript.d.ts +5 -0
  405. package/dist/tui/skill-transcript.js +31 -0
  406. package/dist/tui/startup.d.ts +5 -0
  407. package/dist/tui/startup.js +61 -0
  408. package/dist/tui/status-line-loader.d.ts +8 -0
  409. package/dist/tui/status-line-loader.js +33 -0
  410. package/dist/tui/status-line.d.ts +38 -0
  411. package/dist/tui/status-line.js +213 -0
  412. package/dist/tui/system-language.d.ts +8 -0
  413. package/dist/tui/system-language.js +41 -0
  414. package/dist/tui/task-labels.d.ts +2 -0
  415. package/dist/tui/task-labels.js +7 -0
  416. package/dist/tui/term-bg.d.ts +4 -0
  417. package/dist/tui/term-bg.js +67 -0
  418. package/dist/tui/terminal-screen.d.ts +12 -0
  419. package/dist/tui/terminal-screen.js +1 -0
  420. package/dist/tui/terminal-text.d.ts +7 -0
  421. package/dist/tui/terminal-text.js +123 -0
  422. package/dist/tui/theme.d.ts +25 -0
  423. package/dist/tui/theme.js +383 -0
  424. package/dist/tui/tool-style.d.ts +7 -0
  425. package/dist/tui/tool-style.js +119 -0
  426. package/dist/tui/update-prompt.d.ts +14 -0
  427. package/dist/tui/update-prompt.js +104 -0
  428. package/dist/tui/usage-footer.d.ts +9 -0
  429. package/dist/tui/usage-footer.js +123 -0
  430. package/dist/tui/vascend-login.d.ts +68 -0
  431. package/dist/tui/vascend-login.js +355 -0
  432. package/dist/tui/web-login.d.ts +28 -0
  433. package/dist/tui/web-login.js +115 -0
  434. package/dist/vascend/activity-status.d.ts +12 -0
  435. package/dist/vascend/activity-status.js +68 -0
  436. package/dist/vascend/architecture-map.d.ts +73 -0
  437. package/dist/vascend/architecture-map.js +424 -0
  438. package/dist/vascend/attention-layout.d.ts +19 -0
  439. package/dist/vascend/attention-layout.js +141 -0
  440. package/dist/vascend/budget-allocator.d.ts +31 -0
  441. package/dist/vascend/budget-allocator.js +79 -0
  442. package/dist/vascend/candidate-collector.d.ts +20 -0
  443. package/dist/vascend/candidate-collector.js +220 -0
  444. package/dist/vascend/code-events.d.ts +24 -0
  445. package/dist/vascend/code-events.js +304 -0
  446. package/dist/vascend/code-graph-memory.d.ts +38 -0
  447. package/dist/vascend/code-graph-memory.js +334 -0
  448. package/dist/vascend/code-graph-runtime.d.ts +19 -0
  449. package/dist/vascend/code-graph-runtime.js +190 -0
  450. package/dist/vascend/code-graph-types.d.ts +58 -0
  451. package/dist/vascend/code-graph-types.js +50 -0
  452. package/dist/vascend/code-parser.d.ts +4 -0
  453. package/dist/vascend/code-parser.js +257 -0
  454. package/dist/vascend/competitor-knowledge.d.ts +53 -0
  455. package/dist/vascend/competitor-knowledge.js +262 -0
  456. package/dist/vascend/completeness.d.ts +16 -0
  457. package/dist/vascend/completeness.js +90 -0
  458. package/dist/vascend/context-autotuner.d.ts +45 -0
  459. package/dist/vascend/context-autotuner.js +231 -0
  460. package/dist/vascend/context-candidate.d.ts +45 -0
  461. package/dist/vascend/context-candidate.js +150 -0
  462. package/dist/vascend/context-capsule.d.ts +51 -0
  463. package/dist/vascend/context-capsule.js +133 -0
  464. package/dist/vascend/context-fabric.d.ts +108 -0
  465. package/dist/vascend/context-fabric.js +480 -0
  466. package/dist/vascend/context-feedback-loop.d.ts +56 -0
  467. package/dist/vascend/context-feedback-loop.js +204 -0
  468. package/dist/vascend/context-learning-identity.d.ts +4 -0
  469. package/dist/vascend/context-learning-identity.js +8 -0
  470. package/dist/vascend/context-links.d.ts +14 -0
  471. package/dist/vascend/context-links.js +83 -0
  472. package/dist/vascend/context-lint.d.ts +22 -0
  473. package/dist/vascend/context-lint.js +91 -0
  474. package/dist/vascend/context-market-selection.d.ts +17 -0
  475. package/dist/vascend/context-market-selection.js +50 -0
  476. package/dist/vascend/context-metrics.d.ts +25 -0
  477. package/dist/vascend/context-metrics.js +57 -0
  478. package/dist/vascend/context-pack-render.d.ts +16 -0
  479. package/dist/vascend/context-pack-render.js +52 -0
  480. package/dist/vascend/context-pareto.d.ts +33 -0
  481. package/dist/vascend/context-pareto.js +165 -0
  482. package/dist/vascend/context-pattern-explorer.d.ts +41 -0
  483. package/dist/vascend/context-pattern-explorer.js +276 -0
  484. package/dist/vascend/context-regret.d.ts +32 -0
  485. package/dist/vascend/context-regret.js +93 -0
  486. package/dist/vascend/context-retriever.d.ts +22 -0
  487. package/dist/vascend/context-retriever.js +243 -0
  488. package/dist/vascend/context-scope-index.d.ts +5 -0
  489. package/dist/vascend/context-scope-index.js +96 -0
  490. package/dist/vascend/context-scorer.d.ts +35 -0
  491. package/dist/vascend/context-scorer.js +162 -0
  492. package/dist/vascend/context-search-index.d.ts +12 -0
  493. package/dist/vascend/context-search-index.js +25 -0
  494. package/dist/vascend/context-snapshot.d.ts +22 -0
  495. package/dist/vascend/context-snapshot.js +135 -0
  496. package/dist/vascend/context-window-compiler.d.ts +42 -0
  497. package/dist/vascend/context-window-compiler.js +237 -0
  498. package/dist/vascend/contract-memory.d.ts +61 -0
  499. package/dist/vascend/contract-memory.js +435 -0
  500. package/dist/vascend/council.d.ts +58 -0
  501. package/dist/vascend/council.js +337 -0
  502. package/dist/vascend/decision-promotion.d.ts +48 -0
  503. package/dist/vascend/decision-promotion.js +410 -0
  504. package/dist/vascend/delta-context.d.ts +12 -0
  505. package/dist/vascend/delta-context.js +36 -0
  506. package/dist/vascend/dev-context-compiler.d.ts +27 -0
  507. package/dist/vascend/dev-context-compiler.js +133 -0
  508. package/dist/vascend/dev-context-layout.d.ts +30 -0
  509. package/dist/vascend/dev-context-layout.js +262 -0
  510. package/dist/vascend/evidence-slots.d.ts +14 -0
  511. package/dist/vascend/evidence-slots.js +55 -0
  512. package/dist/vascend/expansion-levels.d.ts +15 -0
  513. package/dist/vascend/expansion-levels.js +178 -0
  514. package/dist/vascend/file-lock.d.ts +7 -0
  515. package/dist/vascend/file-lock.js +95 -0
  516. package/dist/vascend/granular-kingdom.d.ts +25 -0
  517. package/dist/vascend/granular-kingdom.js +259 -0
  518. package/dist/vascend/granular-launcher.d.ts +48 -0
  519. package/dist/vascend/granular-launcher.js +202 -0
  520. package/dist/vascend/kingdom-bus.d.ts +25 -0
  521. package/dist/vascend/kingdom-bus.js +54 -0
  522. package/dist/vascend/kingdom-channel.d.ts +22 -0
  523. package/dist/vascend/kingdom-channel.js +180 -0
  524. package/dist/vascend/kingdom-kpi.d.ts +48 -0
  525. package/dist/vascend/kingdom-kpi.js +172 -0
  526. package/dist/vascend/kingdom-live.d.ts +28 -0
  527. package/dist/vascend/kingdom-live.js +61 -0
  528. package/dist/vascend/kingdom-run.d.ts +18 -0
  529. package/dist/vascend/kingdom-run.js +506 -0
  530. package/dist/vascend/kingdom-scribe.d.ts +20 -0
  531. package/dist/vascend/kingdom-scribe.js +52 -0
  532. package/dist/vascend/kingdom.d.ts +79 -0
  533. package/dist/vascend/kingdom.js +870 -0
  534. package/dist/vascend/lexical-index.d.ts +10 -0
  535. package/dist/vascend/lexical-index.js +99 -0
  536. package/dist/vascend/lexical-search.d.ts +29 -0
  537. package/dist/vascend/lexical-search.js +262 -0
  538. package/dist/vascend/long-term-context.d.ts +51 -0
  539. package/dist/vascend/long-term-context.js +194 -0
  540. package/dist/vascend/mandate.d.ts +33 -0
  541. package/dist/vascend/mandate.js +107 -0
  542. package/dist/vascend/memory-packet.d.ts +13 -0
  543. package/dist/vascend/memory-packet.js +155 -0
  544. package/dist/vascend/memory-status.d.ts +22 -0
  545. package/dist/vascend/memory-status.js +73 -0
  546. package/dist/vascend/memory-store.d.ts +62 -0
  547. package/dist/vascend/memory-store.js +273 -0
  548. package/dist/vascend/objective-revision.d.ts +69 -0
  549. package/dist/vascend/objective-revision.js +319 -0
  550. package/dist/vascend/patch-plan-store.d.ts +33 -0
  551. package/dist/vascend/patch-plan-store.js +240 -0
  552. package/dist/vascend/patch-plan.d.ts +97 -0
  553. package/dist/vascend/patch-plan.js +345 -0
  554. package/dist/vascend/plan-progress.d.ts +11 -0
  555. package/dist/vascend/plan-progress.js +68 -0
  556. package/dist/vascend/plan-store.d.ts +64 -0
  557. package/dist/vascend/plan-store.js +460 -0
  558. package/dist/vascend/proof-chains.d.ts +19 -0
  559. package/dist/vascend/proof-chains.js +120 -0
  560. package/dist/vascend/ramification-store.d.ts +25 -0
  561. package/dist/vascend/ramification-store.js +94 -0
  562. package/dist/vascend/ramification.d.ts +193 -0
  563. package/dist/vascend/ramification.js +583 -0
  564. package/dist/vascend/recall-planner.d.ts +17 -0
  565. package/dist/vascend/recall-planner.js +109 -0
  566. package/dist/vascend/requirements.d.ts +31 -0
  567. package/dist/vascend/requirements.js +151 -0
  568. package/dist/vascend/reviewer.d.ts +9 -0
  569. package/dist/vascend/reviewer.js +93 -0
  570. package/dist/vascend/room-graph.d.ts +29 -0
  571. package/dist/vascend/room-graph.js +242 -0
  572. package/dist/vascend/room-memory.d.ts +57 -0
  573. package/dist/vascend/room-memory.js +631 -0
  574. package/dist/vascend/runtime.d.ts +84 -0
  575. package/dist/vascend/runtime.js +286 -0
  576. package/dist/vascend/self-improve.d.ts +104 -0
  577. package/dist/vascend/self-improve.js +396 -0
  578. package/dist/vascend/session-search.d.ts +52 -0
  579. package/dist/vascend/session-search.js +349 -0
  580. package/dist/vascend/supersession-graph.d.ts +14 -0
  581. package/dist/vascend/supersession-graph.js +70 -0
  582. package/dist/vascend/team-areas.d.ts +9 -0
  583. package/dist/vascend/team-areas.js +28 -0
  584. package/dist/vascend/team-handoff.d.ts +24 -0
  585. package/dist/vascend/team-handoff.js +37 -0
  586. package/dist/vascend/team-scheduler.d.ts +13 -0
  587. package/dist/vascend/team-scheduler.js +74 -0
  588. package/dist/vascend/team-session.d.ts +42 -0
  589. package/dist/vascend/team-session.js +142 -0
  590. package/dist/vascend/test-failure-memory.d.ts +76 -0
  591. package/dist/vascend/test-failure-memory.js +354 -0
  592. package/dist/vascend/token-market.d.ts +42 -0
  593. package/dist/vascend/token-market.js +144 -0
  594. package/dist/vascend/tuner-baseline-store.d.ts +52 -0
  595. package/dist/vascend/tuner-baseline-store.js +446 -0
  596. package/dist/vascend/user-profile.d.ts +44 -0
  597. package/dist/vascend/user-profile.js +131 -0
  598. package/dist/vascend/vision.d.ts +94 -0
  599. package/dist/vascend/vision.js +375 -0
  600. package/dist/vascend/work-agent.d.ts +12 -0
  601. package/dist/vascend/work-agent.js +83 -0
  602. package/dist/vascend/work-queue.d.ts +62 -0
  603. package/dist/vascend/work-queue.js +255 -0
  604. package/dist/vascend/work-runner.d.ts +64 -0
  605. package/dist/vascend/work-runner.js +137 -0
  606. package/dist/vascend/worktree.d.ts +38 -0
  607. package/dist/vascend/worktree.js +206 -0
  608. package/dist/vendor/computer-use/README.md +7 -0
  609. package/dist/vendor/computer-use/computer-desktop.js +211 -0
  610. package/dist/vendor/computer-use/computer-observe.js +315 -0
  611. package/dist/vendor/computer-use/computer-scripts.js +1230 -0
  612. package/dist/vendor/computer-use/computer-tools.js +2136 -0
  613. package/dist/vendor/computer-use/package.json +1 -0
  614. package/dist/vendor/computer-use/rac/atomic-input.js +91 -0
  615. package/dist/vendor/computer-use/rac/grammatica.js +101 -0
  616. package/dist/vendor/computer-use/rac/parser.js +185 -0
  617. package/dist/vendor/computer-use/rac/protocol.js +136 -0
  618. package/install.ps1 +30 -0
  619. package/install.sh +50 -0
  620. package/package.json +56 -0
@@ -0,0 +1,435 @@
1
+ import { appendFileSync, existsSync, mkdirSync, readFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { sanitizeText } from "../core/text-sanitize.js";
4
+ const CONTRACT_PATTERNS = [
5
+ // RENAME — IT: "rinominato X in Y", "rinomino X in Y"
6
+ { re: /\brinomin(?:at[oi]|o|iamo|are)\s+(?:la\s+|il\s+|lo\s+)?(?:funzione\s+|metodo\s+|tipo\s+|api\s+)?([A-Za-z_$][\w.$]*)\s+(?:in|->|=>|a)\s+([A-Za-z_$][\w.$]*)/i, kind: "rename", symbolGroup: 1, afterGroup: 2 },
7
+ // RENAME — EN: "renamed X to Y", "rename X to Y"
8
+ { re: /\brenam(?:ed|e|ing)\s+([A-Za-z_$][\w.$]*)\s+(?:to|into|->|=>)\s+([A-Za-z_$][\w.$]*)/i, kind: "rename", symbolGroup: 1, afterGroup: 2 },
9
+ // REMOVE param — IT: "rimosso il parametro foo da bar"
10
+ { re: /\brimoss[oi]\s+(?:il\s+|lo\s+)?(?:parametro|argomento|campo)\s+([A-Za-z_$][\w.$]*)\s+(?:da|di|dalla?)\s+([A-Za-z_$][\w.$]*)/i, kind: "remove", symbolGroup: 2, beforeGroup: 1 },
11
+ // REMOVE param — EN: "removed the param foo from bar"
12
+ { re: /\bremoved\s+(?:the\s+)?(?:param(?:eter)?|arg(?:ument)?|field)\s+([A-Za-z_$][\w.$]*)\s+from\s+([A-Za-z_$][\w.$]*)/i, kind: "remove", symbolGroup: 2, beforeGroup: 1 },
13
+ // REMOVE symbol — IT/EN: "rimosso X" / "removed X" (funzione/metodo/api)
14
+ { re: /\b(?:rimoss[oi]|removed|delet(?:ed|e))\s+(?:la\s+|il\s+|lo\s+|the\s+)?(?:funzione|metodo|tipo|api|function|method|type)\s+([A-Za-z_$][\w.$]*)/i, kind: "remove", symbolGroup: 1 },
15
+ // ADD param — IT: "aggiunto il parametro foo a bar"
16
+ { re: /\baggiunt[oi]\s+(?:il\s+|lo\s+)?(?:parametro|argomento|campo)\s+([A-Za-z_$][\w.$]*)\s+(?:a|alla?|in)\s+([A-Za-z_$][\w.$]*)/i, kind: "add", symbolGroup: 2, afterGroup: 1 },
17
+ // ADD param — EN: "added param foo to bar"
18
+ { re: /\badded\s+(?:the\s+)?(?:param(?:eter)?|arg(?:ument)?|field)\s+([A-Za-z_$][\w.$]*)\s+to\s+([A-Za-z_$][\w.$]*)/i, kind: "add", symbolGroup: 2, afterGroup: 1 },
19
+ // SIGNATURE — IT: "cambiato la firma di X da A a B"
20
+ { re: /\b(?:cambiat[oi]|modificat[oi])\s+(?:la\s+)?(?:firma|signature|interfaccia|api)\s+(?:di|del|della)\s+([A-Za-z_$][\w.$]*)(?:\s+da\s+(.+?)\s+a\s+(.+))?/i, kind: "signature", symbolGroup: 1, beforeGroup: 2, afterGroup: 3 },
21
+ // SIGNATURE — EN: "changed the signature of X from A to B"
22
+ { re: /\b(?:changed|modified|updated)\s+(?:the\s+)?(?:signature|interface|api)\s+of\s+([A-Za-z_$][\w.$]*)(?:\s+from\s+(.+?)\s+to\s+(.+))?/i, kind: "signature", symbolGroup: 1, beforeGroup: 2, afterGroup: 3 },
23
+ // SIGNATURE — IT: "X ora accetta/restituisce ..." (cambio firma implicito)
24
+ { re: /\b([A-Za-z_$][\w.$]*)\s+(?:ora|adesso)\s+(?:accetta|prende|restituisce|ritorna|richiede)\s+(.+)/i, kind: "signature", symbolGroup: 1, afterGroup: 2 },
25
+ // BEHAVIOR — IT/EN: "cambiato il comportamento di X" / "X now behaves"
26
+ { re: /\b(?:cambiat[oi]|modificat[oi])\s+(?:il\s+)?comportamento\s+(?:di|del|della)\s+([A-Za-z_$][\w.$]*)/i, kind: "behavior", symbolGroup: 1 },
27
+ { re: /\b([A-Za-z_$][\w.$]*)\s+now\s+(?:returns|takes|accepts|expects|behaves)\s+(.+)/i, kind: "behavior", symbolGroup: 1, afterGroup: 2 },
28
+ ];
29
+ // Estrazione di liste correlate dalla frase/contesto.
30
+ // callsite: "callsite: a, b", "chiamato da X", "callers: ..."
31
+ // test: "test: a, b", "rieseguire i test X", "tests: ..."
32
+ // docs: "docs: ...", "aggiornare la doc X", "documentazione: ..."
33
+ // NB: le forme con verbo/locuzione lunga (che catturano la lista SENZA
34
+ // separatore) vanno PRIMA; la keyword "nuda" richiede invece ":"/"=" cosi' non
35
+ // inghiotte parole di servizio come "da aggiornare:".
36
+ // Forma keyword + eventuali parole di servizio (es. "da aggiornare") + ":"/"="
37
+ // + lista. Il [^:=\n]* assorbe "da aggiornare" SENZA finire nella lista, che
38
+ // parte solo dopo il separatore. La forma con verbo iniziale ("chiamato da X")
39
+ // non richiede separatore.
40
+ const CALLSITE_PATTERNS = [
41
+ /\b(?:chiamat[oi]\s+(?:da|in)|usat[oi]\s+(?:da|in)|impatta(?:no|ti)?)\s+(.+)/i,
42
+ /\b(?:callsite[s]?|call\s*site[s]?|caller[s]?)[^:=\n]*[:=]\s*(.+)/i,
43
+ ];
44
+ const TESTS_PATTERNS = [
45
+ /\b(?:rieseguire\s+(?:i\s+)?test)\s+(.+)/i,
46
+ /\b(?:test[s]?|tests?\s+required)[^:=\n]*[:=]\s*(.+)/i,
47
+ ];
48
+ const DOCS_PATTERNS = [
49
+ /\b(?:doc[s]?|documentazione|docs?\s+to\s+update)[^:=\n]*[:=]\s*(.+)/i,
50
+ ];
51
+ // --- detection (puro) ------------------------------------------------------
52
+ // Riconosce le frasi di cambio contratto in un testo (di un singolo messaggio)
53
+ // e ne estrae symbol/before/after/kind/context. Niente side-effect. Ritorna 0+
54
+ // match in ordine di apparizione, deduplicati per simbolo.
55
+ export function detectContractChanges(text, source) {
56
+ const out = [];
57
+ const seen = new Set();
58
+ for (const sentence of splitSentences(text)) {
59
+ const match = matchSentence(sentence, source);
60
+ if (!match)
61
+ continue;
62
+ const key = normalizeKey(`${match.symbol} ${match.kind}`);
63
+ if (!key || seen.has(key))
64
+ continue;
65
+ seen.add(key);
66
+ out.push(match);
67
+ }
68
+ return out;
69
+ }
70
+ // Prova i pattern su UNA frase. Ritorna il primo che combacia.
71
+ function matchSentence(sentence, source) {
72
+ const s = sentence.trim();
73
+ if (!s || s.length < 6)
74
+ return null;
75
+ for (const p of CONTRACT_PATTERNS) {
76
+ const m = p.re.exec(s);
77
+ if (!m)
78
+ continue;
79
+ const symbol = cleanSymbol(m[p.symbolGroup] ?? "");
80
+ if (!symbol)
81
+ continue;
82
+ const before = p.beforeGroup ? cleanClause(m[p.beforeGroup] ?? "") : "";
83
+ const after = p.afterGroup ? cleanClause(m[p.afterGroup] ?? "") : "";
84
+ return {
85
+ symbol,
86
+ before,
87
+ after,
88
+ kind: p.kind,
89
+ context: oneLine(s).slice(0, 280),
90
+ source,
91
+ };
92
+ }
93
+ return null;
94
+ }
95
+ // Estrae callsite/test/docs da un testo (cerca su TUTTE le frasi). Le voci sono
96
+ // separate da virgola/"e"/"and"; ogni voce e' ripulita e deduplicata.
97
+ export function extractImpacts(text) {
98
+ return {
99
+ callsites: extractList(text, CALLSITE_PATTERNS),
100
+ testsRequired: extractList(text, TESTS_PATTERNS),
101
+ docsToUpdate: extractList(text, DOCS_PATTERNS),
102
+ };
103
+ }
104
+ function extractList(text, patterns) {
105
+ const out = [];
106
+ for (const sentence of splitSentences(text)) {
107
+ for (const re of patterns) {
108
+ const m = re.exec(sentence.trim());
109
+ if (m && m[1]) {
110
+ for (const item of splitItems(m[1])) {
111
+ const v = cleanClause(item);
112
+ if (v && v.length >= 2 && !out.includes(v))
113
+ out.push(v);
114
+ }
115
+ break; // un solo pattern per frase
116
+ }
117
+ }
118
+ }
119
+ return out;
120
+ }
121
+ // --- promozione: match -> evento ------------------------------------------
122
+ // Trasforma i match rilevati nei messaggi di un turno in eventi
123
+ // contract.changed, assegnando id progressivi, callsite/test/docs estratti dal
124
+ // testo del medesimo messaggio, link al task e timestamp. `startNum` da' il
125
+ // primo numero libero (es. dal ContractStore). Funzione pura.
126
+ export function promoteContractChanges(messages, opts) {
127
+ const events = [];
128
+ let num = opts.startNum ?? 1;
129
+ const ns = opts.ns ? `${opts.ns}-` : "";
130
+ const seen = new Set();
131
+ for (const m of messages) {
132
+ if (m.role !== "user" && m.role !== "assistant")
133
+ continue;
134
+ const source = m.role === "user" ? "user" : "assistant";
135
+ const text = plainText(m);
136
+ if (!text.trim())
137
+ continue;
138
+ const impacts = extractImpacts(text);
139
+ for (const match of detectContractChanges(text, source)) {
140
+ const key = normalizeKey(`${match.symbol} ${match.kind}`);
141
+ if (seen.has(key))
142
+ continue;
143
+ seen.add(key);
144
+ events.push(toEvent(match, impacts, `${ns}CT${num}`, opts.task ?? null, opts.now));
145
+ num += 1;
146
+ }
147
+ }
148
+ return events;
149
+ }
150
+ function toEvent(match, impacts, id, task, now) {
151
+ const symbol = oneLine(match.symbol).slice(0, 120);
152
+ const before = oneLine(match.before).slice(0, 200);
153
+ const after = oneLine(match.after).slice(0, 200);
154
+ const summary = buildSummary(symbol, match.kind, before, after, impacts.callsites.length);
155
+ return {
156
+ type: "contract.changed",
157
+ domain: "contracts",
158
+ id,
159
+ symbol,
160
+ before,
161
+ after,
162
+ kind: match.kind,
163
+ callsites: impacts.callsites.slice(0, 24),
164
+ testsRequired: impacts.testsRequired.slice(0, 24),
165
+ docsToUpdate: impacts.docsToUpdate.slice(0, 24),
166
+ context: oneLine(match.context).slice(0, 280),
167
+ task,
168
+ subject: symbol,
169
+ summary,
170
+ source: match.source,
171
+ createdAt: now,
172
+ };
173
+ }
174
+ function buildSummary(symbol, kind, before, after, nCallsites) {
175
+ const label = {
176
+ signature: "firma",
177
+ rename: "rinomina",
178
+ remove: "rimozione",
179
+ add: "aggiunta",
180
+ behavior: "comportamento",
181
+ };
182
+ const change = before && after ? `${before} -> ${after}` : after || before;
183
+ const head = `${symbol} [${label[kind]}]${change ? `: ${change}` : ""}`;
184
+ const tail = nCallsites ? ` · ${nCallsites} callsite da rivedere` : "";
185
+ return oneLine(`${head}${tail}`).slice(0, 280);
186
+ }
187
+ // --- formato RoomRecord (richiamabile via recall) --------------------------
188
+ // Rende un ContractEvent come RoomRecord Danilov, cosi' che il tool recall lo
189
+ // trovi insieme alle stanze. level=0 (foglia), parent=null (resta in frontiera
190
+ // finche' non viene compattato). I termini includono "contract", "callsite",
191
+ // "firma" e il simbolo per renderlo facile da cercare e prevenire i callsite
192
+ // dimenticati.
193
+ export function contractToRoomRecord(ev) {
194
+ const terms = contractTerms(ev);
195
+ const callsites = ev.callsites.length ? ev.callsites.map((c) => esc(c)).join(", ") : "(nessuno indicato)";
196
+ const tests = ev.testsRequired.length ? ev.testsRequired.map((t) => esc(t)).join(", ") : "(nessuno indicato)";
197
+ const docs = ev.docsToUpdate.length ? ev.docsToUpdate.map((d) => esc(d)).join(", ") : "(nessuna indicata)";
198
+ const body = `INDICE
199
+ 1 = symbol
200
+ 2 = before
201
+ 3 = after
202
+ 4 = callsite_impattati
203
+ 5 = test_richiesti
204
+ 6 = docs_da_aggiornare
205
+
206
+ DEFINIZIONI
207
+ @contract.changed[${ev.id}]: domain=contracts, kind=${ev.kind}
208
+ @symbol[${ev.id}]: "${esc(ev.symbol)}"
209
+ @before[${ev.id}]: "${esc(ev.before) || "(non espresso)"}"
210
+ @after[${ev.id}]: "${esc(ev.after) || "(non espresso)"}"
211
+ @callsites[${ev.id}]: ${callsites}
212
+ @testsRequired[${ev.id}]: ${tests}
213
+ @docsToUpdate[${ev.id}]: ${docs}
214
+ @context[${ev.id}]: "${esc(ev.context)}"
215
+ @task[${ev.id}]: ${ev.task ? esc(ev.task) : "(nessuno)"}
216
+ @source[${ev.id}]: ${ev.source}
217
+
218
+ RELAZIONI
219
+ @R1: ${ev.id} -> contract.changed [ dominio contracts, ${ev.kind}${ev.task ? `, task ${esc(ev.task)}` : ""} ]
220
+ ${ev.callsites.map((c, i) => `@R2.${i + 1}: ${ev.id} -> ${esc(c)} [ callsite da rivedere ]`).join("\n") || `@R2: ${ev.id} -> nessun_callsite [ verificare manualmente i chiamanti ]`}
221
+
222
+ OUTPUT: ${esc(ev.summary)}`;
223
+ return {
224
+ room: ev.id,
225
+ level: 0,
226
+ title: ev.summary,
227
+ terms,
228
+ body,
229
+ children: [],
230
+ parent: null,
231
+ createdAt: ev.createdAt,
232
+ };
233
+ }
234
+ function contractTerms(ev) {
235
+ const base = ["contract", "contracts", "contract.changed", "callsite", "firma", "signature", ev.kind];
236
+ const fromText = tokenize(`${ev.symbol} ${ev.before} ${ev.after} ${ev.callsites.join(" ")}`).slice(0, 12);
237
+ return [...new Set([...base, ...fromText])].slice(0, 18);
238
+ }
239
+ // Store append-only degli eventi contract.changed su file jsonl dedicato
240
+ // (`<store>.contracts.jsonl`), separato dalle stanze ma nella stessa
241
+ // sessionDir. Espone count/all/nextNum + query/search per il dominio contracts.
242
+ export class ContractStore {
243
+ file;
244
+ events = [];
245
+ constructor(file) {
246
+ this.file = file;
247
+ }
248
+ static open(sessionDir, storeId) {
249
+ const file = join(sessionDir, `${storeId}.contracts.jsonl`);
250
+ const store = new ContractStore(file);
251
+ if (existsSync(file)) {
252
+ const raw = readFileSync(file, "utf8");
253
+ for (const line of raw.split("\n")) {
254
+ if (!line.trim())
255
+ continue;
256
+ try {
257
+ store.events.push(normalizeEvent(JSON.parse(line)));
258
+ }
259
+ catch {
260
+ // riga corrotta: ignorata
261
+ }
262
+ }
263
+ }
264
+ return store;
265
+ }
266
+ count() {
267
+ return this.events.length;
268
+ }
269
+ all() {
270
+ return this.events;
271
+ }
272
+ // Primo numero libero per gli id CT<n> di un namespace (vassallo/castello).
273
+ nextNum(ns) {
274
+ const prefix = `${ns ? `${ns}-` : ""}CT`;
275
+ return this.events.filter((e) => e.id.startsWith(prefix)).length + 1;
276
+ }
277
+ // Aggiunge un evento (fast path append). Idempotente sull'id: salta i duplicati.
278
+ append(event) {
279
+ if (this.events.some((e) => e.id === event.id))
280
+ return false;
281
+ this.events.push(event);
282
+ mkdirSync(dirname(this.file), { recursive: true });
283
+ appendFileSync(this.file, JSON.stringify(event) + "\n", "utf8");
284
+ return true;
285
+ }
286
+ // Aggiunge piu' eventi, ritorna quelli effettivamente scritti.
287
+ appendAll(events) {
288
+ const written = [];
289
+ for (const e of events)
290
+ if (this.append(e))
291
+ written.push(e);
292
+ return written;
293
+ }
294
+ byTask(task) {
295
+ return this.events.filter((e) => e.task === task);
296
+ }
297
+ bySymbol(symbol) {
298
+ const want = symbol.toLowerCase();
299
+ return this.events.filter((e) => e.symbol.toLowerCase() === want);
300
+ }
301
+ // Ricerca BM25-lite (offline) sugli eventi di contratto.
302
+ search(query, limit = 5) {
303
+ const qTokens = unique(tokenize(query));
304
+ if (!qTokens.length) {
305
+ return this.events.slice(-limit).reverse().map((event) => ({ event, score: 0 }));
306
+ }
307
+ const n = this.events.length || 1;
308
+ const df = new Map();
309
+ const docTokens = this.events.map((e) => {
310
+ const toks = tokenize(`${e.symbol} ${e.before} ${e.after} ${e.callsites.join(" ")} ${e.testsRequired.join(" ")} ${e.docsToUpdate.join(" ")} ${e.context} ${e.kind}`);
311
+ for (const t of new Set(toks))
312
+ df.set(t, (df.get(t) ?? 0) + 1);
313
+ return toks;
314
+ });
315
+ const hits = this.events.map((event, i) => {
316
+ const toks = docTokens[i] ?? [];
317
+ const tf = new Map();
318
+ for (const t of toks)
319
+ tf.set(t, (tf.get(t) ?? 0) + 1);
320
+ let score = 0;
321
+ for (const q of qTokens) {
322
+ const f = tf.get(q) ?? 0;
323
+ if (!f)
324
+ continue;
325
+ score += (f / (f + 1.2)) * Math.log(1 + n / (df.get(q) ?? 1));
326
+ }
327
+ return { event, score };
328
+ });
329
+ return hits.filter((h) => h.score > 0).sort((a, b) => b.score - a.score).slice(0, limit);
330
+ }
331
+ // INDICE compatto dei contratti (per /regno o iniezione contestuale). Mette
332
+ // in evidenza i callsite ancora da rivedere: e' la rete di sicurezza contro i
333
+ // callsite dimenticati.
334
+ indexBlock() {
335
+ if (!this.events.length)
336
+ return "";
337
+ const rows = this.events
338
+ .map((e) => {
339
+ const cs = e.callsites.length ? ` · callsite=${e.callsites.length}` : "";
340
+ return `@contract[${e.id}]: "${esc(e.summary)}"${e.task ? ` · task=${esc(e.task)}` : ""}${cs}`;
341
+ })
342
+ .join("\n");
343
+ return `INDICE_CONTRATTI (dominio contracts, piano di lavoro)
344
+ Cambi di API/firma promossi automaticamente. Richiamabili col tool "recall"
345
+ (per query o per id CT<n>) per non dimenticare callsite, test e docs.
346
+
347
+ ${rows}
348
+
349
+ OUTPUT: indice contratti; dettaglio (callsite/test/docs) via recall.`;
350
+ }
351
+ }
352
+ function normalizeEvent(raw) {
353
+ const kind = isKind(raw.kind) ? raw.kind : "signature";
354
+ return {
355
+ type: "contract.changed",
356
+ domain: "contracts",
357
+ id: raw.id ?? "CT?",
358
+ symbol: raw.symbol ?? "",
359
+ before: raw.before ?? "",
360
+ after: raw.after ?? "",
361
+ kind,
362
+ callsites: Array.isArray(raw.callsites) ? raw.callsites.map(String) : [],
363
+ testsRequired: Array.isArray(raw.testsRequired) ? raw.testsRequired.map(String) : [],
364
+ docsToUpdate: Array.isArray(raw.docsToUpdate) ? raw.docsToUpdate.map(String) : [],
365
+ context: raw.context ?? "",
366
+ task: raw.task ?? null,
367
+ subject: raw.subject ?? raw.symbol ?? "",
368
+ summary: raw.summary ?? raw.symbol ?? "",
369
+ source: raw.source === "assistant" ? "assistant" : "user",
370
+ createdAt: typeof raw.createdAt === "number" ? raw.createdAt : 0,
371
+ };
372
+ }
373
+ function isKind(v) {
374
+ return v === "signature" || v === "rename" || v === "remove" || v === "add" || v === "behavior";
375
+ }
376
+ // --- util ------------------------------------------------------------------
377
+ function plainText(message) {
378
+ return message.content
379
+ .filter((p) => p.type === "text")
380
+ .map((p) => p.text)
381
+ .join("\n");
382
+ }
383
+ // Divide il testo in frasi su terminatori e a-capo, mantenendo clausole utili.
384
+ function splitSentences(text) {
385
+ return text
386
+ .split(/(?<=[.!?\n])\s+|\n+/)
387
+ .map((s) => s.trim())
388
+ .filter(Boolean);
389
+ }
390
+ // Spezza una lista testuale in voci: separatori virgola/punto e virgola/"e"/"and".
391
+ function splitItems(s) {
392
+ return oneLine(s)
393
+ .replace(/[.;]+$/, "")
394
+ .split(/\s*,\s*|\s+e\s+|\s+and\s+|\s*;\s*/i)
395
+ .map((x) => x.trim())
396
+ .filter(Boolean);
397
+ }
398
+ // Pulisce un nome di simbolo: toglie punteggiatura di bordo e backtick.
399
+ function cleanSymbol(s) {
400
+ return oneLine(s)
401
+ .replace(/[`'"()]/g, "")
402
+ .replace(/^[^A-Za-z_$]+/, "") // togli rumore iniziale (deve partire da id-char)
403
+ .replace(/[^A-Za-z0-9_$]+$/, "") // togli punteggiatura di bordo, anche "." e ","
404
+ .trim();
405
+ }
406
+ // Pulisce una clausola: toglie punteggiatura di bordo, articoli iniziali residui
407
+ // e spazi multipli. Conserva il contenuto sostanziale.
408
+ function cleanClause(s) {
409
+ return oneLine(s)
410
+ .replace(/^[\s,;:]+/, "")
411
+ .replace(/[\s.,;:]+$/, "")
412
+ .replace(/[`]/g, "")
413
+ .trim();
414
+ }
415
+ function normalizeKey(s) {
416
+ return oneLine(s).toLowerCase().replace(/[^a-z0-9 ]/g, "").trim();
417
+ }
418
+ function tokenize(s) {
419
+ return (s.toLowerCase().match(/[a-z0-9_./-]{2,}/g) ?? []).filter((t) => !STOP.has(t));
420
+ }
421
+ const STOP = new Set([
422
+ "the", "and", "for", "this", "that", "with", "from", "into", "you", "are", "use", "now", "to",
423
+ "il", "lo", "la", "le", "gli", "un", "uno", "una", "di", "da", "in", "su",
424
+ "che", "con", "per", "non", "ed", "tra", "fra", "come", "piu", "ora", "adesso",
425
+ "cambiato", "modificato", "rinominato", "rimosso", "aggiunto",
426
+ ]);
427
+ function unique(values) {
428
+ return [...new Set(values.filter(Boolean))];
429
+ }
430
+ function oneLine(value) {
431
+ return sanitizeText(value).replace(/\s+/g, " ").trim();
432
+ }
433
+ function esc(value) {
434
+ return oneLine(value).replace(/"/g, "'");
435
+ }
@@ -0,0 +1,58 @@
1
+ import type { Harness } from "../core/bootstrap.js";
2
+ export type CouncilAxis = "completeness" | "correctness" | "quality" | "requirements";
3
+ export interface CouncilEvaluator {
4
+ readonly id: string;
5
+ readonly axis: CouncilAxis;
6
+ readonly title: string;
7
+ readonly weight: number;
8
+ readonly system: string;
9
+ }
10
+ export interface EvaluatorVerdict {
11
+ readonly id: string;
12
+ readonly axis: CouncilAxis;
13
+ readonly title: string;
14
+ readonly weight: number;
15
+ readonly score: number;
16
+ readonly approve: boolean;
17
+ readonly rationale: string;
18
+ readonly gaps: readonly string[];
19
+ readonly fallback: boolean;
20
+ }
21
+ export interface CouncilVerdict {
22
+ readonly completion: number;
23
+ readonly approved: boolean;
24
+ readonly consensus: {
25
+ readonly approve: number;
26
+ readonly total: number;
27
+ };
28
+ readonly verdicts: readonly EvaluatorVerdict[];
29
+ readonly dissent: readonly string[];
30
+ readonly gaps: readonly string[];
31
+ readonly summary: string;
32
+ }
33
+ export declare function selectEvaluators(axes?: readonly string[]): readonly CouncilEvaluator[];
34
+ export declare function aggregateVerdicts(verdicts: readonly EvaluatorVerdict[], threshold: number): CouncilVerdict;
35
+ export declare function buildCouncilSteer(goal: string, verdict: CouncilVerdict): string;
36
+ export declare function parseEvaluatorVerdict(text: string, ev: CouncilEvaluator): EvaluatorVerdict | null;
37
+ export interface CouncilInput {
38
+ readonly harness: Harness;
39
+ readonly goal: string;
40
+ readonly evidence: string;
41
+ readonly signal: AbortSignal;
42
+ readonly axes?: readonly string[];
43
+ readonly threshold?: number;
44
+ readonly requirements?: readonly string[];
45
+ }
46
+ export declare function runCouncil(input: CouncilInput): Promise<CouncilVerdict>;
47
+ export interface CouncilOptions {
48
+ readonly enabled: boolean;
49
+ readonly threshold: number;
50
+ readonly rounds: number;
51
+ readonly axes: readonly CouncilAxis[];
52
+ }
53
+ export declare function councilEnabled(env: NodeJS.ProcessEnv): boolean;
54
+ export declare function councilThreshold(env: NodeJS.ProcessEnv): number;
55
+ export declare function councilRounds(env: NodeJS.ProcessEnv): number;
56
+ export declare function councilAxes(env: NodeJS.ProcessEnv): readonly CouncilAxis[];
57
+ export declare function councilOptions(env: NodeJS.ProcessEnv): CouncilOptions;
58
+ export declare function formatCouncilVerdict(verdict: CouncilVerdict): string;