@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,480 @@
1
+ import { projectMemoryScopes, contextFrameWritten } from "./context-scope-index.js";
2
+ import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
3
+ import { createHash } from "node:crypto";
4
+ import { basename, dirname, join, resolve } from "node:path";
5
+ import { isContinuationText, parseVibeMode, renderVibeModeBlock, routeVibeMode, vibeModeSpec, } from "../core/vibe-modes.js";
6
+ import { tokenize } from "./lexical-search.js";
7
+ import { withLockSync } from "./file-lock.js";
8
+ const FABRIC_DIR = "context-fabric";
9
+ const MAX_FOCUS_TERMS = 28;
10
+ const MAX_MISSION_CHARS = 480;
11
+ export function contextProjectKey(cwd) {
12
+ let canonical = resolve(cwd);
13
+ try {
14
+ canonical = realpathSync.native(canonical);
15
+ }
16
+ catch {
17
+ // Il cwd viene validato altrove. Se sparisce durante il turno, il path
18
+ // risolto resta comunque un'identita' deterministica e non collidente per
19
+ // semplice basename.
20
+ }
21
+ const normalized = process.platform === "win32" ? canonical.toLowerCase() : canonical;
22
+ const digest = createHash("sha256").update(normalized).digest("hex").slice(0, 16);
23
+ return `${safeName(basename(canonical) || "workspace")}-${digest}`;
24
+ }
25
+ export function contextFramePath(sessionDir, frameId) {
26
+ return join(sessionDir, FABRIC_DIR, `${safeName(frameId)}.json`);
27
+ }
28
+ export function loadContextFrame(sessionDir, frameId, projectKey, inherit = true) {
29
+ const own = readFrame(contextFramePath(sessionDir, frameId));
30
+ if (own && own.projectKey === projectKey)
31
+ return own;
32
+ if (!inherit)
33
+ return null;
34
+ const dir = join(sessionDir, FABRIC_DIR);
35
+ if (!existsSync(dir))
36
+ return null;
37
+ let files = [];
38
+ try {
39
+ files = readdirSync(dir).filter((name) => name.endsWith(".json"));
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ const candidates = files.flatMap((name) => {
45
+ const path = join(dir, name);
46
+ const frame = readFrame(path);
47
+ if (!frame || frame.projectKey !== projectKey || frame.owner === frameId)
48
+ return [];
49
+ let mtime = frame.updatedAt;
50
+ try {
51
+ mtime = Math.max(mtime, statSync(path).mtimeMs);
52
+ }
53
+ catch { /* best effort */ }
54
+ return [{ frame, mtime }];
55
+ });
56
+ return candidates
57
+ .sort((a, b) => b.mtime - a.mtime || b.frame.turn - a.frame.turn || a.frame.owner.localeCompare(b.frame.owner))[0]
58
+ ?.frame ?? null;
59
+ }
60
+ // Restituisce gli scope di memoria che le receipt associano esplicitamente a
61
+ // un progetto. Serve ai compiler quando piu' repository condividono lo stesso
62
+ // sessionDir (per esempio Horizon): senza questo filtro il working set recente
63
+ // di un repo omonimo poteva entrare nel prompt di un altro. Se il chiamante non
64
+ // passa un projectKey, i collector mantengono il comportamento legacy.
65
+ export function listContextMemoryScopes(sessionDir, projectKey) {
66
+ return projectMemoryScopes(sessionDir, projectKey);
67
+ }
68
+ export function buildContextFabric(input) {
69
+ const now = input.now ?? Date.now();
70
+ const projectKey = contextProjectKey(input.cwd);
71
+ const ownPrevious = loadContextFrame(input.sessionDir, input.frameId, projectKey, false);
72
+ const previous = ownPrevious ?? (input.inheritProjectFrame === false
73
+ ? null
74
+ : loadContextFrame(input.sessionDir, input.frameId, projectKey, true));
75
+ const inherited = Boolean(previous && !ownPrevious);
76
+ const rawUserText = extractRawUserText(input.userText);
77
+ const continuation = isContinuationText(rawUserText);
78
+ let route = routeVibeMode(input.selection, rawUserText, previous?.activeMode);
79
+ const nextTurn = (previous?.turn ?? 0) + 1;
80
+ const startsNewEpoch = shouldOpenEpoch(previous, rawUserText, inherited, continuation);
81
+ // Una lente precedente e' sticky dentro lo stesso epoch, non oltre una
82
+ // barriera di missione. Senza nuovi segnali, un epoch nuovo torna classic.
83
+ if (startsNewEpoch && input.selection === "auto" && previous && route.resolved === previous.activeMode) {
84
+ route = routeVibeMode("auto", rawUserText);
85
+ }
86
+ const mode = vibeModeSpec(route.resolved);
87
+ const epoch = previous ? previous.epoch + (startsNewEpoch ? 1 : 0) : 1;
88
+ const mission = missionFor(previous, rawUserText, startsNewEpoch, continuation);
89
+ const contract = reconcileGoalContract({
90
+ previous: previous?.contract,
91
+ fallbackObjective: mission || previous?.mission || rawUserText,
92
+ epoch,
93
+ turn: nextTurn,
94
+ startsNewEpoch,
95
+ userText: rawUserText,
96
+ continuation,
97
+ now,
98
+ });
99
+ const leases = reconcileLeases({
100
+ previous: previous?.leases ?? [],
101
+ epoch,
102
+ turn: nextTurn,
103
+ startsNewEpoch,
104
+ mission,
105
+ userText: rawUserText,
106
+ mode,
107
+ });
108
+ const focusTerms = leases.slice(0, MAX_FOCUS_TERMS).map((lease) => lease.term);
109
+ const retrievalQuery = buildRetrievalQuery(rawUserText, mission, focusTerms);
110
+ const receipt = {
111
+ generatedAt: now,
112
+ epoch,
113
+ mode: mode.id,
114
+ routeConfidence: route.confidence,
115
+ routeReasons: route.reasons,
116
+ memoryScopeId: input.memoryScopeId,
117
+ mission,
118
+ retrievalQuery,
119
+ focusTerms,
120
+ contextBudget: mode.context.totalTokens,
121
+ proofChains: mode.context.proofChains,
122
+ inherited,
123
+ };
124
+ const frame = {
125
+ version: 1,
126
+ owner: input.frameId,
127
+ projectKey,
128
+ epoch,
129
+ turn: nextTurn,
130
+ selection: input.selection,
131
+ activeMode: mode.id,
132
+ mission,
133
+ contract,
134
+ leases,
135
+ createdAt: startsNewEpoch || !previous ? now : previous.createdAt,
136
+ updatedAt: now,
137
+ reset: false,
138
+ receipt,
139
+ };
140
+ writeContextFrame(input.sessionDir, frame);
141
+ return {
142
+ frame,
143
+ route,
144
+ mode,
145
+ rawUserText,
146
+ systemBlock: `${renderVibeModeBlock(route)}\n\n${renderFabricBlock(frame, inherited)}\n\n${renderGoalContract(contract)}`,
147
+ compile: {
148
+ retrievalQuery,
149
+ totalTokens: mode.context.totalTokens,
150
+ policy: mode.context.policy,
151
+ weights: mode.context.weights,
152
+ thresholds: mode.context.thresholds,
153
+ goal: goalContractAnchor(contract),
154
+ constraints: dedupeText([...contract.constraints, ...mode.operatingRules]).slice(0, 20),
155
+ success: dedupeText([...contract.successCriteria, ...mode.completionGates]).join("; "),
156
+ nextAction: mode.firstMove,
157
+ proofChains: mode.context.proofChains,
158
+ },
159
+ };
160
+ }
161
+ export function updateContextPins(input) {
162
+ const projectKey = contextProjectKey(input.cwd);
163
+ const previous = loadContextFrame(input.sessionDir, input.frameId, projectKey, true);
164
+ if (!previous || previous.reset)
165
+ return null;
166
+ const now = input.now ?? Date.now();
167
+ const remove = new Set((input.remove ?? []).flatMap((value) => pinTerms(value)));
168
+ const kept = previous.leases.filter((lease) => lease.source !== "pinned" || !remove.has(lease.term));
169
+ const additions = (input.add ?? []).flatMap((value) => pinTerms(value)).map((term) => makeLease(previous.epoch, term, "pinned", 100, previous.turn, null));
170
+ const frame = {
171
+ ...previous,
172
+ owner: input.frameId,
173
+ leases: dedupeAndSortLeases([...kept, ...additions]),
174
+ updatedAt: now,
175
+ };
176
+ writeContextFrame(input.sessionDir, frame);
177
+ return frame;
178
+ }
179
+ export function resetContextFrame(input) {
180
+ const now = input.now ?? Date.now();
181
+ const projectKey = contextProjectKey(input.cwd);
182
+ const previous = loadContextFrame(input.sessionDir, input.frameId, projectKey, true);
183
+ const frame = {
184
+ version: 1,
185
+ owner: input.frameId,
186
+ projectKey,
187
+ epoch: (previous?.epoch ?? 0) + 1,
188
+ turn: previous?.turn ?? 0,
189
+ selection: input.selection ?? previous?.selection ?? "auto",
190
+ activeMode: "classic",
191
+ mission: "",
192
+ leases: input.preservePins === false
193
+ ? []
194
+ : previous?.leases.filter((lease) => lease.source === "pinned") ?? [],
195
+ createdAt: now,
196
+ updatedAt: now,
197
+ reset: true,
198
+ receipt: null,
199
+ };
200
+ writeContextFrame(input.sessionDir, frame);
201
+ return frame;
202
+ }
203
+ export function renderContextFrame(frame) {
204
+ if (!frame || frame.reset)
205
+ return "context fabric: nessun epoch attivo";
206
+ const pinned = frame.leases.filter((lease) => lease.source === "pinned").map((lease) => lease.term);
207
+ const expiring = frame.leases.filter((lease) => lease.expiresAfterTurn !== null).map((lease) => lease.term).slice(0, 12);
208
+ const receipt = frame.receipt;
209
+ return [
210
+ `context fabric · epoch ${frame.epoch} · turno ${frame.turn} · mode ${frame.activeMode}`,
211
+ `missione: ${frame.mission || "(non definita)"}`,
212
+ frame.contract ? `contratto: ${frame.contract.revisions.length} revisioni · ${frame.contract.constraints.length} vincoli · ${frame.contract.successCriteria.length} criteri` : "",
213
+ `pin: ${pinned.length ? pinned.join(", ") : "nessuno"}`,
214
+ `focus con lease: ${expiring.length ? expiring.join(", ") : "nessuno"}`,
215
+ receipt ? `budget: ${receipt.contextBudget} token · proof chains: ${receipt.proofChains ? "on" : "off"}` : "",
216
+ receipt ? `route: ${receipt.routeReasons.join("; ") || "manuale"}` : "",
217
+ ].filter(Boolean).join("\n");
218
+ }
219
+ function reconcileGoalContract(input) {
220
+ const text = oneLine(input.userText).slice(0, 1_200);
221
+ if (input.startsNewEpoch || !input.previous || input.previous.epoch !== input.epoch) {
222
+ return {
223
+ epoch: input.epoch,
224
+ objective: text && !input.continuation ? text : oneLine(input.fallbackObjective).slice(0, 1_200),
225
+ revisions: [],
226
+ constraints: extractContractLines(text, "constraint"),
227
+ successCriteria: extractContractLines(text, "success"),
228
+ updatedAt: input.now,
229
+ };
230
+ }
231
+ if (!text || input.continuation)
232
+ return { ...input.previous, updatedAt: input.now };
233
+ const kind = isConstraintText(text) ? "constraint" : "clarification";
234
+ const duplicate = input.previous.revisions.some((revision) => normalizeContractText(revision.text) === normalizeContractText(text));
235
+ const revision = { turn: input.turn, text, kind, createdAt: input.now };
236
+ const revisions = duplicate
237
+ ? input.previous.revisions
238
+ : [...input.previous.revisions, revision].slice(-32);
239
+ return {
240
+ ...input.previous,
241
+ revisions,
242
+ constraints: dedupeText([...input.previous.constraints, ...extractContractLines(text, "constraint")]).slice(-24),
243
+ successCriteria: dedupeText([...input.previous.successCriteria, ...extractContractLines(text, "success")]).slice(-16),
244
+ updatedAt: input.now,
245
+ };
246
+ }
247
+ function isConstraintText(text) {
248
+ return /\b(?:non|senza|mai|solo|deve|devono|voglio|serve|bisogna|evita|attenzione|invece|piuttosto|must|should|without|never|only|do not)\b/i.test(text);
249
+ }
250
+ function extractContractLines(text, kind) {
251
+ const pattern = kind === "constraint"
252
+ ? /\b(?:non|senza|mai|solo|deve|devono|voglio|serve|bisogna|evita|attenzione|invece|piuttosto|must|should|without|never|only|do not)\b/i
253
+ : /\b(?:funzion\w*|verific\w*|test\w*|mostr\w*|risultat\w*|success\w*|quando|deve|devono|must)\b/i;
254
+ return dedupeText(text.split(/(?<=[.!?;])\s+|\r?\n/).map((line) => oneLine(line).slice(0, 500)).filter((line) => line.length > 3 && pattern.test(line)));
255
+ }
256
+ function normalizeContractText(value) {
257
+ return oneLine(value).toLowerCase().replace(/[^a-z0-9à-ÿ]+/gi, " ").trim();
258
+ }
259
+ function dedupeText(values) {
260
+ const seen = new Set();
261
+ const out = [];
262
+ for (const value of values) {
263
+ const clean = oneLine(value);
264
+ const key = normalizeContractText(clean);
265
+ if (!key || seen.has(key))
266
+ continue;
267
+ seen.add(key);
268
+ out.push(clean);
269
+ }
270
+ return out;
271
+ }
272
+ function goalContractAnchor(contract) {
273
+ const revisions = contract.revisions.slice(-4).map((revision) => `rev${revision.turn}: ${revision.text}`);
274
+ return [contract.objective, ...revisions].filter(Boolean).join(" | ").slice(0, 2_400);
275
+ }
276
+ function renderGoalContract(contract) {
277
+ const revisions = contract.revisions.slice(-8).map((revision) => `@revisione[t${revision.turn}/${revision.kind}]: ${revision.text}`);
278
+ return [
279
+ "[TALOS_GOAL_CONTRACT]",
280
+ `@obiettivo[corrente]: ${contract.objective}`,
281
+ ...revisions,
282
+ ...contract.constraints.map((constraint, index) => `@vincolo[user-${index + 1}]: ${constraint}`),
283
+ ...contract.successCriteria.map((criterion, index) => `@success[${index + 1}]: ${criterion}`),
284
+ "OUTPUT: le revisioni piu recenti prevalgono; non ripristinare requisiti superati.",
285
+ "[/TALOS_GOAL_CONTRACT]",
286
+ ].join("\n");
287
+ }
288
+ function reconcileLeases(input) {
289
+ const retained = input.previous.filter((lease) => {
290
+ if (lease.source === "pinned")
291
+ return true;
292
+ if (input.startsNewEpoch)
293
+ return false;
294
+ return lease.expiresAfterTurn === null || lease.expiresAfterTurn >= input.turn;
295
+ });
296
+ const mission = meaningfulTerms(input.mission).map((term) => makeLease(input.epoch, term, "mission", 80, input.turn, null));
297
+ const turn = meaningfulTerms(input.userText).map((term) => makeLease(input.epoch, term, "turn", 60, input.turn, input.turn + 2));
298
+ const mode = input.mode.context.focusTerms.flatMap((value) => meaningfulTerms(value)).map((term) => makeLease(input.epoch, term, "mode", 30, input.turn, input.turn + 1));
299
+ return dedupeAndSortLeases([...retained, ...mission, ...turn, ...mode]);
300
+ }
301
+ function dedupeAndSortLeases(leases) {
302
+ const byTerm = new Map();
303
+ for (const lease of leases) {
304
+ const current = byTerm.get(lease.term);
305
+ if (!current || lease.weight > current.weight || (lease.weight === current.weight && (lease.expiresAfterTurn ?? Number.MAX_SAFE_INTEGER) > (current.expiresAfterTurn ?? Number.MAX_SAFE_INTEGER)))
306
+ byTerm.set(lease.term, lease);
307
+ }
308
+ return [...byTerm.values()].sort((a, b) => b.weight - a.weight || a.term.localeCompare(b.term));
309
+ }
310
+ function makeLease(epoch, term, source, weight, createdTurn, expiresAfterTurn) {
311
+ return {
312
+ id: `${epoch}:${source}:${term}`,
313
+ term,
314
+ source,
315
+ weight,
316
+ createdTurn,
317
+ expiresAfterTurn,
318
+ };
319
+ }
320
+ function shouldOpenEpoch(previous, userText, inherited, continuation) {
321
+ if (!previous || previous.reset || !previous.mission)
322
+ return true;
323
+ if (continuation)
324
+ return false;
325
+ if (inherited)
326
+ return true;
327
+ if (/\b(nuovo task|nuovo obiettivo|cambiamo argomento|passiamo a|invece occupati|new task|switch task|different task)\b/i.test(userText))
328
+ return true;
329
+ const oldTerms = new Set(meaningfulTerms(previous.mission));
330
+ const nextTerms = new Set(meaningfulTerms(userText));
331
+ let overlap = 0;
332
+ for (const term of nextTerms)
333
+ if (oldTerms.has(term))
334
+ overlap += 1;
335
+ const overlapRatio = overlap / Math.max(1, Math.min(oldTerms.size, nextTerms.size));
336
+ if (overlapRatio >= 0.18 || hasFollowupReference(userText))
337
+ return false;
338
+ // In dubbio isoliamo una richiesta concreta nuova: contaminare il control
339
+ // lane con una missione vecchia e' piu' dannoso che aprire un epoch in piu'.
340
+ // I follow-up minimi con un solo termine informativo ("documentalo") restano
341
+ // nello stesso epoch. Due termini nuovi e senza alcun legame con missione o
342
+ // riferimenti deittici sono gia' un segnale sufficiente di task nuovo. Questa
343
+ // decisione dipende solo dalla continuita' semantica dell'epoch: il mode
344
+ // routing non puo' piu' cambiare implicitamente la missione.
345
+ return nextTerms.size >= 2;
346
+ }
347
+ function hasFollowupReference(value) {
348
+ const text = value.trim();
349
+ return /^(?:e\s+|anche\b|inoltre\b|poi\b)/i.test(text) ||
350
+ /\b(stess[oaie]|precedent[ei]|quest[oaie]|quell[oaie]|sopra|il fix|la modifica|l'implementazione|the same|previous|this|that change)\b/i.test(text);
351
+ }
352
+ function missionFor(previous, userText, startsNewEpoch, continuation) {
353
+ if (previous && !previous.reset && !startsNewEpoch && (continuation || previous.mission))
354
+ return previous.mission;
355
+ return oneLine(userText).slice(0, MAX_MISSION_CHARS);
356
+ }
357
+ function buildRetrievalQuery(userText, mission, focusTerms) {
358
+ const parts = [oneLine(userText).slice(0, 2_000)];
359
+ if (mission && oneLine(userText) !== mission)
360
+ parts.push(mission);
361
+ if (focusTerms.length)
362
+ parts.push(focusTerms.join(" "));
363
+ return parts.filter(Boolean).join("\n");
364
+ }
365
+ function renderFabricBlock(frame, inherited) {
366
+ const pins = frame.leases.filter((lease) => lease.source === "pinned").map((lease) => lease.term);
367
+ const working = frame.leases.filter((lease) => lease.source !== "pinned").slice(0, 20).map((lease) => lease.term);
368
+ return `[CONTEXT_FABRIC]
369
+ INDICE
370
+ 1 = epoch
371
+ 2 = control_lane
372
+ 3 = working_lane
373
+ 4 = evidence_lane
374
+ 5 = quarantine_lane
375
+
376
+ DEFINIZIONI
377
+ @epoch[${frame.epoch}]: missione="${escapeValue(frame.mission)}", owner=${safeName(frame.owner)}, inherited=${inherited}
378
+ @lane[control]: mode=${frame.activeMode}, pin="${escapeValue(pins.join(", ") || "nessuno")}"
379
+ @lane[working]: focus="${escapeValue(working.join(", ") || "nessuno")}"
380
+ @lane[evidence]: accetta fatti passati solo se presenti negli evidence slot o recuperati con recall
381
+ @lane[quarantine]: epoch precedenti e lease scadute restano fuori dal prompt vivo; sono solo handle richiamabili
382
+ @lease[regola]: turn=scade, mission=dura_per_epoch, pinned=non_scade
383
+
384
+ OUTPUT: continua la missione dell'epoch; non sostituirla con un follow-up deittico come 'continua'.`;
385
+ }
386
+ function extractRawUserText(value) {
387
+ const marker = "\nINPUT_UTENTE\n";
388
+ const index = value.lastIndexOf(marker);
389
+ if (index >= 0)
390
+ return value.slice(index + marker.length).trim();
391
+ return value.trim();
392
+ }
393
+ function meaningfulTerms(value) {
394
+ return [...new Set(tokenize(value).filter((term) => term.length >= 3 && term !== "continua" && term !== "continue"))];
395
+ }
396
+ function pinTerms(value) {
397
+ const clean = oneLine(value).replace(/^(?:"([\s\S]*)"|'([\s\S]*)')$/, (_match, double, single) => double ?? single ?? "");
398
+ const normalizedPath = clean.replace(/\\/g, "/");
399
+ const pathLike = /^[a-z]:\//i.test(normalizedPath) || /^\.{0,2}\//.test(normalizedPath) ||
400
+ normalizedPath.startsWith("/") || /^[^\s/]+\/(?:[^/]+\/)*[^/]+$/.test(normalizedPath);
401
+ return pathLike && normalizedPath
402
+ ? [normalizedPath.toLowerCase()]
403
+ : meaningfulTerms(clean);
404
+ }
405
+ function writeContextFrame(sessionDir, frame) {
406
+ const path = contextFramePath(sessionDir, frame.owner);
407
+ mkdirSync(dirname(path), { recursive: true });
408
+ withLockSync(path, () => {
409
+ const temp = `${path}.${process.pid}.${Date.now()}.tmp`;
410
+ writeFileSync(temp, JSON.stringify(frame, null, 2) + "\n", "utf8");
411
+ try {
412
+ renameSync(temp, path);
413
+ }
414
+ catch {
415
+ // Windows puo' rifiutare la sostituzione atomica di un file esistente.
416
+ // Il lock impedisce lettori/scrittori Talos concorrenti sullo stesso owner.
417
+ rmSync(path, { force: true });
418
+ renameSync(temp, path);
419
+ }
420
+ });
421
+ contextFrameWritten(sessionDir, path);
422
+ }
423
+ function readFrame(path) {
424
+ if (!existsSync(path))
425
+ return null;
426
+ try {
427
+ const raw = JSON.parse(readFileSync(path, "utf8"));
428
+ return isContextFrame(raw) ? raw : null;
429
+ }
430
+ catch {
431
+ return null;
432
+ }
433
+ }
434
+ function isContextFrame(value) {
435
+ if (!value || typeof value !== "object" || Array.isArray(value))
436
+ return false;
437
+ const frame = value;
438
+ const activeMode = parseVibeMode(frame.activeMode);
439
+ return frame.version === 1 && typeof frame.owner === "string" && typeof frame.projectKey === "string" &&
440
+ isFiniteNumber(frame.epoch) && isFiniteNumber(frame.turn) && typeof frame.mission === "string" &&
441
+ Array.isArray(frame.leases) && frame.leases.every(isContextLease) &&
442
+ activeMode !== undefined && activeMode !== "auto" && parseVibeMode(frame.selection) !== undefined &&
443
+ isFiniteNumber(frame.createdAt) && isFiniteNumber(frame.updatedAt) && typeof frame.reset === "boolean" &&
444
+ (frame.receipt === null || isContextReceipt(frame.receipt));
445
+ }
446
+ function isContextLease(value) {
447
+ if (!value || typeof value !== "object" || Array.isArray(value))
448
+ return false;
449
+ const lease = value;
450
+ return typeof lease.id === "string" && typeof lease.term === "string" &&
451
+ (lease.source === "pinned" || lease.source === "mission" || lease.source === "turn" || lease.source === "mode") &&
452
+ isFiniteNumber(lease.weight) && isFiniteNumber(lease.createdTurn) &&
453
+ (lease.expiresAfterTurn === null || isFiniteNumber(lease.expiresAfterTurn));
454
+ }
455
+ function isContextReceipt(value) {
456
+ if (!value || typeof value !== "object" || Array.isArray(value))
457
+ return false;
458
+ const receipt = value;
459
+ const mode = parseVibeMode(receipt.mode);
460
+ return isFiniteNumber(receipt.generatedAt) && isFiniteNumber(receipt.epoch) &&
461
+ mode !== undefined && mode !== "auto" && isFiniteNumber(receipt.routeConfidence) &&
462
+ Array.isArray(receipt.routeReasons) && receipt.routeReasons.every((item) => typeof item === "string") &&
463
+ typeof receipt.memoryScopeId === "string" && typeof receipt.mission === "string" &&
464
+ typeof receipt.retrievalQuery === "string" && Array.isArray(receipt.focusTerms) &&
465
+ receipt.focusTerms.every((item) => typeof item === "string") && isFiniteNumber(receipt.contextBudget) &&
466
+ typeof receipt.proofChains === "boolean" && typeof receipt.inherited === "boolean";
467
+ }
468
+ function isFiniteNumber(value) {
469
+ return typeof value === "number" && Number.isFinite(value);
470
+ }
471
+ function safeName(value) {
472
+ const safe = value.trim().replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "");
473
+ return safe || "context";
474
+ }
475
+ function oneLine(value) {
476
+ return value.replace(/\s+/g, " ").trim();
477
+ }
478
+ function escapeValue(value) {
479
+ return oneLine(value).replace(/"/g, "'");
480
+ }
@@ -0,0 +1,56 @@
1
+ import { type TuneConfig, type QualityTargets, type TuneAdjustment } from "./context-autotuner.js";
2
+ import type { ContextMetrics } from "./context-metrics.js";
3
+ import { type CompileInput, type CompiledContext } from "./context-window-compiler.js";
4
+ import { type TunerBaseline } from "./tuner-baseline-store.js";
5
+ import { type ExploreOptions, type PatternRanking } from "./context-pattern-explorer.js";
6
+ export type CompileWithConfig = (config: TuneConfig) => ContextMetrics;
7
+ export interface LoopStep {
8
+ readonly round: number;
9
+ readonly config: TuneConfig;
10
+ readonly metrics: ContextMetrics;
11
+ readonly score: number;
12
+ readonly adjustments: readonly TuneAdjustment[];
13
+ }
14
+ export interface LoopResult {
15
+ readonly bestConfig: TuneConfig;
16
+ readonly bestScore: number;
17
+ readonly initialScore: number;
18
+ readonly improved: boolean;
19
+ readonly converged: boolean;
20
+ readonly rounds: number;
21
+ readonly trajectory: readonly LoopStep[];
22
+ }
23
+ export interface LoopOptions {
24
+ readonly config?: TuneConfig;
25
+ readonly targets?: QualityTargets;
26
+ readonly maxRounds?: number;
27
+ readonly minGain?: number;
28
+ }
29
+ export declare function runFeedbackLoop(compile: CompileWithConfig, opts?: LoopOptions): LoopResult;
30
+ export declare function runContextFeedbackLoop(input: CompileInput, opts?: LoopOptions): {
31
+ readonly loop: LoopResult;
32
+ readonly compiled: CompiledContext;
33
+ };
34
+ export interface LearningLoopOptions extends LoopOptions {
35
+ readonly dir: string;
36
+ readonly storeId: string;
37
+ readonly scope?: string;
38
+ readonly persist?: boolean;
39
+ }
40
+ export declare function runLearningFeedbackLoop(input: CompileInput, opts: LearningLoopOptions): {
41
+ readonly loop: LoopResult;
42
+ readonly compiled: CompiledContext;
43
+ readonly baseline: TunerBaseline;
44
+ };
45
+ export interface DeepSelfImproveOptions extends ExploreOptions {
46
+ readonly dir: string;
47
+ readonly storeId: string;
48
+ readonly scope?: string;
49
+ readonly persist?: boolean;
50
+ }
51
+ export declare function runDeepSelfImprove(input: CompileInput, opts: DeepSelfImproveOptions): Promise<{
52
+ readonly ranking: PatternRanking;
53
+ readonly compiled: CompiledContext;
54
+ readonly baseline: TunerBaseline;
55
+ }>;
56
+ export declare function formatLoopResult(result: LoopResult): string;