@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,424 @@
1
+ // Mappa architetturale del workspace (funzionalita' di architettura Vascend).
2
+ //
3
+ // Costruisce una vista MODULO-centrica del progetto: raggruppa i file in moduli
4
+ // per directory, estrae le dipendenze interne (import relativi risolti al
5
+ // modulo di destinazione), rileva i cicli fra moduli (SCC), individua entry
6
+ // point, hotspot (file piu' grandi) e dipendenze esterne aggregate.
7
+ //
8
+ // Due strati:
9
+ // - buildArchitectureMap: PURO, input {path,source}[] -> ArchitectureMap
10
+ // (testabile in memoria, nessun side-effect);
11
+ // - scanArchitectureMap: orchestrazione su disco con limiti duri (max file,
12
+ // max bytes) e ignore-set condiviso con glob/grep.
13
+ //
14
+ // Il render (renderArchitectureMap) produce markdown compatto pensato per tre
15
+ // consumatori: il tool `architecture_map` (chat Horizon in vascend-terminal),
16
+ // il comando TUI `/arch` e la modalita' print.
17
+ import { readFileSync, readdirSync, statSync } from "node:fs";
18
+ import { join, relative } from "node:path";
19
+ import { parseSource } from "./code-parser.js";
20
+ // --- classificazione --------------------------------------------------------
21
+ const CODE_EXT_RE = /\.(?:ts|tsx|js|jsx|mjs|cjs)$/i;
22
+ const PY_EXT_RE = /\.py$/i;
23
+ export function isArchSourceFile(path) {
24
+ return CODE_EXT_RE.test(path) || PY_EXT_RE.test(path);
25
+ }
26
+ // Modulo di appartenenza di un file: i primi `depth` segmenti della directory.
27
+ // File alla radice -> "(root)".
28
+ export function moduleIdOf(path, depth) {
29
+ const parts = path.split("/");
30
+ parts.pop(); // via il nome file
31
+ if (!parts.length)
32
+ return "(root)";
33
+ return parts.slice(0, Math.max(1, depth)).join("/");
34
+ }
35
+ // Nome pacchetto di un import esterno: "@scope/pkg/sub" -> "@scope/pkg",
36
+ // "react/jsx-runtime" -> "react", "node:fs/promises" -> "node:fs".
37
+ export function externalPackageName(module) {
38
+ const m = module.trim();
39
+ if (!m)
40
+ return "";
41
+ if (m.startsWith("node:"))
42
+ return m.split("/")[0] ?? m;
43
+ const parts = m.split("/");
44
+ if (m.startsWith("@") && parts.length >= 2)
45
+ return `${parts[0]}/${parts[1]}`;
46
+ return parts[0] ?? m;
47
+ }
48
+ // --- risoluzione import relativi --------------------------------------------
49
+ // Normalizza un path con "." e ".." senza toccare il filesystem.
50
+ export function normalizeRelPath(path) {
51
+ const out = [];
52
+ for (const part of path.split("/")) {
53
+ if (!part || part === ".")
54
+ continue;
55
+ if (part === "..") {
56
+ out.pop();
57
+ continue;
58
+ }
59
+ out.push(part);
60
+ }
61
+ return out.join("/");
62
+ }
63
+ const RESOLVE_SUFFIXES = [
64
+ "", ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".d.ts",
65
+ "/index.ts", "/index.tsx", "/index.js", "/index.jsx",
66
+ ];
67
+ // Risolve un import relativo al file di destinazione fra quelli noti.
68
+ // Gestisce la convenzione node16 di questo repo (import "./x.js" -> "x.ts").
69
+ export function resolveRelativeImport(fromFile, spec, known) {
70
+ const dir = fromFile.split("/").slice(0, -1).join("/");
71
+ const base = normalizeRelPath(dir ? `${dir}/${spec}` : spec);
72
+ if (!base)
73
+ return null;
74
+ // Swap estensione .js -> sorgente TS (layout tsc node16).
75
+ const candidates = [];
76
+ const jsSwap = base.replace(/\.(js|jsx|mjs|cjs)$/i, "");
77
+ for (const suffix of RESOLVE_SUFFIXES) {
78
+ candidates.push(base + suffix);
79
+ if (jsSwap !== base)
80
+ candidates.push(jsSwap + suffix);
81
+ }
82
+ for (const candidate of candidates) {
83
+ if (known.has(candidate))
84
+ return candidate;
85
+ }
86
+ return null;
87
+ }
88
+ // --- import Python (best effort) ---------------------------------------------
89
+ // Estrae i moduli importati da un sorgente Python: `import a.b`, `from a import b`,
90
+ // `from . import x` / `from .mod import y` (relativi -> stesso package).
91
+ export function parsePythonImports(source) {
92
+ const externals = [];
93
+ let relative = false;
94
+ for (const rawLine of source.split("\n")) {
95
+ const line = rawLine.trim();
96
+ let m = /^import\s+([A-Za-z_][\w.]*)/.exec(line);
97
+ if (m) {
98
+ externals.push((m[1] ?? "").split(".")[0] ?? "");
99
+ continue;
100
+ }
101
+ m = /^from\s+(\.*)([A-Za-z_][\w.]*)?\s+import\s+/.exec(line);
102
+ if (m) {
103
+ if (m[1])
104
+ relative = true;
105
+ else if (m[2])
106
+ externals.push((m[2] ?? "").split(".")[0] ?? "");
107
+ }
108
+ }
109
+ return { externals: externals.filter(Boolean), relative };
110
+ }
111
+ // --- cicli (SCC, Tarjan iterativo) -------------------------------------------
112
+ // Componenti fortemente connesse del grafo dei moduli; ritorna solo quelle con
113
+ // almeno 2 nodi (i cicli architetturali veri).
114
+ export function findModuleCycles(nodes, edges) {
115
+ let counter = 0;
116
+ const index = new Map();
117
+ const low = new Map();
118
+ const onStack = new Set();
119
+ const stack = [];
120
+ const sccs = [];
121
+ for (const start of nodes) {
122
+ if (index.has(start))
123
+ continue;
124
+ const frames = [];
125
+ const open = (node) => {
126
+ index.set(node, counter);
127
+ low.set(node, counter);
128
+ counter += 1;
129
+ stack.push(node);
130
+ onStack.add(node);
131
+ const targets = edges.get(node) ?? new Set();
132
+ frames.push({ node, iter: targets[Symbol.iterator]() });
133
+ };
134
+ open(start);
135
+ while (frames.length) {
136
+ const frame = frames[frames.length - 1];
137
+ const next = frame.iter.next();
138
+ if (!next.done) {
139
+ const target = next.value;
140
+ if (!index.has(target))
141
+ open(target);
142
+ else if (onStack.has(target)) {
143
+ low.set(frame.node, Math.min(low.get(frame.node), index.get(target)));
144
+ }
145
+ continue;
146
+ }
147
+ frames.pop();
148
+ const parent = frames[frames.length - 1];
149
+ if (parent)
150
+ low.set(parent.node, Math.min(low.get(parent.node), low.get(frame.node)));
151
+ if (low.get(frame.node) === index.get(frame.node)) {
152
+ const scc = [];
153
+ for (;;) {
154
+ const popped = stack.pop();
155
+ onStack.delete(popped);
156
+ scc.push(popped);
157
+ if (popped === frame.node)
158
+ break;
159
+ }
160
+ if (scc.length >= 2)
161
+ sccs.push(scc.sort());
162
+ }
163
+ }
164
+ }
165
+ return sccs.sort((a, b) => (a[0] ?? "").localeCompare(b[0] ?? ""));
166
+ }
167
+ // --- entry point --------------------------------------------------------------
168
+ const CONVENTIONAL_ENTRIES = [
169
+ "src/index.ts", "src/index.tsx", "src/index.js", "index.ts", "index.js",
170
+ "src/main.ts", "src/main.js", "main.py", "app.py", "src/cli.ts",
171
+ ];
172
+ function packageEntryPoints(pkg, known) {
173
+ if (!pkg)
174
+ return [];
175
+ const out = [];
176
+ const norm = (value) => normalizeRelPath(String(value ?? "").replace(/^\.\//, ""));
177
+ const push = (file, reason) => {
178
+ if (file && known.has(file) && !out.some((e) => e.file === file))
179
+ out.push({ file, reason });
180
+ };
181
+ push(norm(pkg["main"]), "package.json main");
182
+ const bin = pkg["bin"];
183
+ if (typeof bin === "string")
184
+ push(norm(bin), "package.json bin");
185
+ else if (bin && typeof bin === "object") {
186
+ for (const [name, value] of Object.entries(bin)) {
187
+ push(norm(value), `package.json bin "${name}"`);
188
+ }
189
+ }
190
+ const exportsField = pkg["exports"];
191
+ if (typeof exportsField === "string")
192
+ push(norm(exportsField), "package.json exports");
193
+ else if (exportsField && typeof exportsField === "object") {
194
+ const dot = exportsField["."];
195
+ if (typeof dot === "string")
196
+ push(norm(dot), "package.json exports \".\"");
197
+ }
198
+ return out;
199
+ }
200
+ // --- build (puro) --------------------------------------------------------------
201
+ export function buildArchitectureMap(files, options = {}) {
202
+ const depth = Math.max(1, options.moduleDepth ?? 2);
203
+ const top = Math.max(3, options.top ?? 10);
204
+ const known = new Set(files.map((f) => f.path));
205
+ const modules = new Map();
206
+ const edgeCounts = new Map(); // "fromto" -> count
207
+ const externals = new Map();
208
+ const hotspots = [];
209
+ let totalLoc = 0;
210
+ const modOf = (path) => moduleIdOf(path, depth);
211
+ const bump = (path) => {
212
+ const id = modOf(path);
213
+ let acc = modules.get(id);
214
+ if (!acc) {
215
+ acc = { files: 0, loc: 0, exports: 0, testFiles: 0 };
216
+ modules.set(id, acc);
217
+ }
218
+ return acc;
219
+ };
220
+ for (const file of files) {
221
+ if (!isArchSourceFile(file.path))
222
+ continue;
223
+ const loc = file.source.length ? file.source.split("\n").length : 0;
224
+ totalLoc += loc;
225
+ const acc = bump(file.path);
226
+ acc.files += 1;
227
+ acc.loc += loc;
228
+ hotspots.push({ file: file.path, loc });
229
+ if (PY_EXT_RE.test(file.path)) {
230
+ const py = parsePythonImports(file.source);
231
+ if (/(^|\/)(test|tests)\//.test(file.path) || /_test\.py$/.test(file.path) || /(^|\/)test_[^/]*\.py$/.test(file.path)) {
232
+ acc.testFiles += 1;
233
+ }
234
+ for (const ext of py.externals) {
235
+ externals.set(ext, (externals.get(ext) ?? 0) + 1);
236
+ }
237
+ continue;
238
+ }
239
+ const parsed = parseSource(file.path, file.source);
240
+ if (parsed.isTest)
241
+ acc.testFiles += 1;
242
+ acc.exports += parsed.symbols.filter((s) => s.exported).length;
243
+ for (const imp of parsed.imports) {
244
+ if (imp.external) {
245
+ const name = externalPackageName(imp.module);
246
+ if (name)
247
+ externals.set(name, (externals.get(name) ?? 0) + 1);
248
+ continue;
249
+ }
250
+ const target = resolveRelativeImport(file.path, imp.module, known);
251
+ if (!target)
252
+ continue;
253
+ const fromMod = modOf(file.path);
254
+ const toMod = modOf(target);
255
+ if (fromMod === toMod)
256
+ continue;
257
+ const key = `${fromMod}${toMod}`;
258
+ edgeCounts.set(key, (edgeCounts.get(key) ?? 0) + 1);
259
+ }
260
+ }
261
+ const dependencies = [...edgeCounts.entries()]
262
+ .map(([key, count]) => {
263
+ const [from = "", to = ""] = key.split("");
264
+ return { from, to, count };
265
+ })
266
+ .sort((a, b) => b.count - a.count || a.from.localeCompare(b.from));
267
+ const adjacency = new Map();
268
+ for (const dep of dependencies) {
269
+ let set = adjacency.get(dep.from);
270
+ if (!set) {
271
+ set = new Set();
272
+ adjacency.set(dep.from, set);
273
+ }
274
+ set.add(dep.to);
275
+ }
276
+ const cycles = findModuleCycles([...modules.keys()], adjacency);
277
+ const entryPoints = packageEntryPoints(options.packageJson, known);
278
+ for (const conventional of CONVENTIONAL_ENTRIES) {
279
+ if (known.has(conventional) && !entryPoints.some((e) => e.file === conventional)) {
280
+ entryPoints.push({ file: conventional, reason: "convenzione" });
281
+ }
282
+ }
283
+ const moduleStats = [...modules.entries()]
284
+ .map(([id, acc]) => ({ id, ...acc }))
285
+ .sort((a, b) => b.loc - a.loc || a.id.localeCompare(b.id));
286
+ return {
287
+ rootName: options.rootName ?? "",
288
+ files: moduleStats.reduce((sum, m) => sum + m.files, 0),
289
+ loc: totalLoc,
290
+ modules: moduleStats,
291
+ dependencies,
292
+ cycles,
293
+ entryPoints,
294
+ hotspots: hotspots.sort((a, b) => b.loc - a.loc).slice(0, top),
295
+ externals: [...externals.entries()]
296
+ .map(([module, count]) => ({ module, count }))
297
+ .sort((a, b) => b.count - a.count || a.module.localeCompare(b.module))
298
+ .slice(0, top),
299
+ truncated: options.truncated === true,
300
+ };
301
+ }
302
+ // --- render -------------------------------------------------------------------
303
+ export function renderArchitectureMap(map, options = {}) {
304
+ const maxModules = Math.max(5, options.maxModules ?? 24);
305
+ const lines = [];
306
+ const title = map.rootName ? `Architettura — ${map.rootName}` : "Architettura";
307
+ lines.push(`# ${title}`);
308
+ lines.push(`${map.files} file sorgente · ${map.loc.toLocaleString("it-IT")} LOC · ` +
309
+ `${map.modules.length} moduli · ${map.dependencies.length} dipendenze interne` +
310
+ (map.truncated ? " · SCAN PARZIALE (limite file raggiunto)" : ""));
311
+ lines.push("", "## Moduli (per LOC)");
312
+ const deps = new Map();
313
+ for (const d of map.dependencies) {
314
+ const list = deps.get(d.from) ?? [];
315
+ list.push(d.to);
316
+ deps.set(d.from, list);
317
+ }
318
+ for (const mod of map.modules.slice(0, maxModules)) {
319
+ const to = (deps.get(mod.id) ?? []).slice(0, 6);
320
+ lines.push(`- ${mod.id}: ${mod.files} file, ${mod.loc} LOC, ${mod.exports} export` +
321
+ (mod.testFiles ? `, ${mod.testFiles} test` : "") +
322
+ (to.length ? ` -> ${to.join(", ")}` : ""));
323
+ }
324
+ if (map.modules.length > maxModules)
325
+ lines.push(`- … altri ${map.modules.length - maxModules} moduli`);
326
+ lines.push("", "## Cicli fra moduli");
327
+ if (!map.cycles.length)
328
+ lines.push("- nessun ciclo rilevato");
329
+ for (const cycle of map.cycles)
330
+ lines.push(`- CICLO: ${cycle.join(" <-> ")}`);
331
+ lines.push("", "## Entry point");
332
+ if (!map.entryPoints.length)
333
+ lines.push("- nessuno riconosciuto");
334
+ for (const entry of map.entryPoints)
335
+ lines.push(`- ${entry.file} (${entry.reason})`);
336
+ lines.push("", "## Hotspot (file piu' grandi)");
337
+ for (const hot of map.hotspots)
338
+ lines.push(`- ${hot.file} (${hot.loc} righe)`);
339
+ if (map.externals.length) {
340
+ lines.push("", "## Dipendenze esterne (per numero di import)");
341
+ for (const ext of map.externals)
342
+ lines.push(`- ${ext.module} (${ext.count})`);
343
+ }
344
+ return lines.join("\n");
345
+ }
346
+ // --- scan su disco --------------------------------------------------------------
347
+ // Stesso ignore-set di glob/grep (builtin), duplicato qui per non creare un
348
+ // import circolare tools -> vascend -> tools.
349
+ const SCAN_IGNORE = new Set([
350
+ "node_modules", ".git", "dist", "build", ".next", ".turbo", ".cache",
351
+ "coverage", ".venv", "venv", "__pycache__", "target", ".idea", ".vscode",
352
+ "output", "tmp",
353
+ ]);
354
+ // Scansiona il workspace e costruisce la mappa. Limiti duri: file oltre il cap
355
+ // -> truncated=true; file oltre maxFileBytes ignorati (bundle/generati).
356
+ export function scanArchitectureMap(root, options = {}) {
357
+ const maxFiles = Math.max(10, options.maxFiles ?? 4000);
358
+ const maxBytes = Math.max(4096, options.maxFileBytes ?? 1024 * 1024);
359
+ const files = [];
360
+ let truncated = false;
361
+ const stack = [root];
362
+ while (stack.length) {
363
+ const dir = stack.pop();
364
+ let entries;
365
+ try {
366
+ entries = readdirSync(dir);
367
+ }
368
+ catch {
369
+ continue;
370
+ }
371
+ for (const name of entries) {
372
+ if (files.length >= maxFiles) {
373
+ truncated = true;
374
+ break;
375
+ }
376
+ const full = join(dir, name);
377
+ let stat;
378
+ try {
379
+ stat = statSync(full);
380
+ }
381
+ catch {
382
+ continue;
383
+ }
384
+ if (stat.isDirectory()) {
385
+ if (SCAN_IGNORE.has(name) || name.startsWith("."))
386
+ continue;
387
+ stack.push(full);
388
+ continue;
389
+ }
390
+ if (!stat.isFile() || !isArchSourceFile(name) || stat.size > maxBytes)
391
+ continue;
392
+ let source;
393
+ try {
394
+ source = readFileSync(full, "utf8");
395
+ }
396
+ catch {
397
+ continue;
398
+ }
399
+ files.push({ path: relForward(root, full), source });
400
+ }
401
+ if (truncated)
402
+ break;
403
+ }
404
+ let packageJson = null;
405
+ try {
406
+ const parsed = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
407
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
408
+ packageJson = parsed;
409
+ }
410
+ }
411
+ catch { /* package.json assente o invalido: gli entry point restano convenzionali */ }
412
+ const rootName = root.replace(/[\\/]+$/, "").split(/[\\/]/).pop() ?? "";
413
+ return buildArchitectureMap(files, {
414
+ rootName,
415
+ truncated,
416
+ ...(options.moduleDepth !== undefined ? { moduleDepth: options.moduleDepth } : {}),
417
+ ...(options.top !== undefined ? { top: options.top } : {}),
418
+ packageJson,
419
+ });
420
+ }
421
+ function relForward(root, abs) {
422
+ const rel = relative(root, abs);
423
+ return (rel || abs).split(/[\\/]/).join("/");
424
+ }
@@ -0,0 +1,19 @@
1
+ import type { ContextZone } from "./budget-allocator.js";
2
+ export type ZoneContent = Partial<Record<ContextZone, string>>;
3
+ export declare const ZONE_ORDER: readonly ContextZone[];
4
+ export declare function layoutOverheadTokens(zones: readonly ContextZone[]): number;
5
+ export interface MissionAnchorInput {
6
+ readonly goal: string;
7
+ readonly constraints?: readonly string[];
8
+ readonly success?: string;
9
+ }
10
+ export declare function buildMissionAnchor(input: MissionAnchorInput, maxTokens?: number): string;
11
+ export interface TailAnchorInput {
12
+ readonly goal: string;
13
+ readonly constraints?: readonly string[];
14
+ readonly activeDecisions?: readonly string[];
15
+ readonly nextAction?: string;
16
+ readonly recallPolicy?: boolean;
17
+ }
18
+ export declare function buildTailAnchor(input: TailAnchorInput, maxTokens?: number): string;
19
+ export declare function assembleLayout(content: ZoneContent): string;
@@ -0,0 +1,141 @@
1
+ // Attention-Safe Layout (metodo Danilov, Memory OS).
2
+ //
3
+ // La context window non e' uno spazio uniforme: l'attenzione del modello
4
+ // degrada nel mezzo ("lost in the middle"). Questo modulo dispone le ZONE del
5
+ // prompt nell'ordine 1-9 del documento talos-context, mettendo le ancore
6
+ // fondamentali in TESTA (mission anchor) e in CODA (tail anchor) cosi' che le
7
+ // cose critiche siano riprese prima della generazione.
8
+ //
9
+ // 1. System invariants (testa, non comprimibile)
10
+ // 2. Mission Anchor (obiettivo, vincoli, definizione di successo)
11
+ // 3. Vision + Piano attivo
12
+ // 4. Memory Packet L0
13
+ // 5. Evidence Slots
14
+ // 6. Recall Handles
15
+ // 7. Tool State
16
+ // 8. User Turn
17
+ // 9. Tail Anchor (coda, riassunto operativo finale)
18
+ //
19
+ // Modulo PURO: assembla stringhe gia' pronte in un ordine fisso e produce il
20
+ // testo finale del Prompt Pack.
21
+ import { estimateTokens } from "./budget-allocator.js";
22
+ // Ordine canonico delle zone (1-9). "user" e "tail" vanno in fondo per
23
+ // combattere il lost-in-the-middle.
24
+ export const ZONE_ORDER = [
25
+ "system",
26
+ "mission",
27
+ "vision",
28
+ "memory",
29
+ "evidence",
30
+ "recall",
31
+ "tool",
32
+ "user",
33
+ "tail",
34
+ ];
35
+ // Intestazioni leggibili per zona (commenti del pack, in notazione Danilov).
36
+ const ZONE_HEADER = {
37
+ system: "[CTX:SYSTEM_INVARIANTS]",
38
+ mission: "[CTX:MISSION_ANCHOR]",
39
+ vision: "[CTX:VISION_E_PIANO]",
40
+ memory: "[CTX:MEMORY_PACKET]",
41
+ evidence: "[CTX:EVIDENCE_SLOTS]",
42
+ recall: "[CTX:RECALL_HANDLES]",
43
+ tool: "[CTX:TOOL_STATE]",
44
+ user: "[CTX:USER_TURN]",
45
+ tail: "[CTX:TAIL_ANCHOR]",
46
+ };
47
+ // Riserva intestazioni e separatori PRIMA di assegnare i budget ai contenuti.
48
+ // Un clamp dopo il layout puo' cancellare la tail o spezzare l'ultima prova.
49
+ export function layoutOverheadTokens(zones) {
50
+ return zones.reduce((sum, zone) => sum + estimateTokens(`${ZONE_HEADER[zone]}\n\n\n`), 0);
51
+ }
52
+ export function buildMissionAnchor(input, maxTokens) {
53
+ if (maxTokens !== undefined)
54
+ return boundedAnchor([
55
+ ...(input.constraints?.length ? [constraintField("@vincoli[attivi]", input.constraints)] : []),
56
+ ...(input.success ? [{ label: "@successo[definizione]", value: input.success }] : []),
57
+ { label: "@obiettivo[corrente]", value: input.goal, shorten: true },
58
+ ], maxTokens);
59
+ const lines = ["INDICE", "1 = obiettivo", "2 = vincoli", "3 = successo", "", "DEFINIZIONI"];
60
+ lines.push(`@obiettivo[corrente]: "${esc(input.goal)}"`);
61
+ if (input.constraints?.length) {
62
+ lines.push(`@vincoli[attivi]: ${input.constraints.map((c) => `"${esc(c)}"`).join(", ")}`);
63
+ }
64
+ if (input.success)
65
+ lines.push(`@successo[definizione]: "${esc(input.success)}"`);
66
+ lines.push("", "OUTPUT: tieni questo obiettivo come bussola del turno.");
67
+ return lines.join("\n");
68
+ }
69
+ export function buildTailAnchor(input, maxTokens) {
70
+ if (maxTokens !== undefined)
71
+ return boundedAnchor([
72
+ ...(input.constraints?.length ? [constraintField("@vincoli[ricorda]", input.constraints)] : []),
73
+ ...(input.nextAction ? [{ label: "@azione[adesso]", value: input.nextAction, shorten: true }] : []),
74
+ { label: "@obiettivo[ora]", value: input.goal, shorten: true },
75
+ ...(input.activeDecisions?.length ? [{ label: "@decisioni[attive]", value: input.activeDecisions.join("; ") }] : []),
76
+ ...(input.recallPolicy ? [{ label: "@recall[regola]", value: "Se mancano prove sul passato, usa recall." }] : []),
77
+ ], maxTokens);
78
+ const lines = ["INDICE", "1 = obiettivo", "2 = vincoli", "3 = decisioni", "4 = azione", "", "DEFINIZIONI"];
79
+ lines.push(`@obiettivo[ora]: "${esc(input.goal)}"`);
80
+ if (input.constraints?.length) {
81
+ lines.push(`@vincoli[ricorda]: ${input.constraints.map((c) => `"${esc(c)}"`).join(", ")}`);
82
+ }
83
+ if (input.activeDecisions?.length) {
84
+ lines.push(`@decisioni[attive]: ${input.activeDecisions.map((d) => `"${esc(d)}"`).join(", ")}`);
85
+ }
86
+ if (input.nextAction)
87
+ lines.push(`@azione[adesso]: "${esc(input.nextAction)}"`);
88
+ if (input.recallPolicy) {
89
+ lines.push("@recall[regola]: se la risposta dipende dal passato e manca tra le prove, usa recall, NON indovinare");
90
+ }
91
+ lines.push("", "OUTPUT: agisci ORA su @azione restando dentro @vincoli e @decisioni.");
92
+ return lines.join("\n");
93
+ }
94
+ // Assembla il Prompt Pack finale dalle zone non vuote, nell'ordine canonico,
95
+ // con intestazioni. Deterministico.
96
+ export function assembleLayout(content) {
97
+ const blocks = [];
98
+ for (const zone of ZONE_ORDER) {
99
+ const text = (content[zone] ?? "").trim();
100
+ if (!text)
101
+ continue;
102
+ blocks.push(`${ZONE_HEADER[zone]}\n${text}`);
103
+ }
104
+ return blocks.join("\n\n");
105
+ }
106
+ function esc(value) {
107
+ return value.replace(/\s+/g, " ").trim().replace(/"/g, "'");
108
+ }
109
+ function constraintField(label, constraints) {
110
+ return {
111
+ label, value: constraints.join("; "),
112
+ omission: "Vincoli omessi per budget: recuperarli prima di agire.",
113
+ };
114
+ }
115
+ // In un'ancora piccola il preambolo INDICE consumava i token destinati ai
116
+ // vincoli e all'azione. Assegna lo spazio ai campi operativi prima del goal,
117
+ // che puo' essere molto lungo. I vincoli entrano interi o con omissione
118
+ // esplicita: troncando una condizione si potrebbe cambiarne il significato.
119
+ function boundedAnchor(fields, maxTokens) {
120
+ let remaining = Math.max(0, Math.floor(maxTokens)) * 4;
121
+ const lines = [];
122
+ for (const field of fields) {
123
+ const prefix = `${field.label}: "`;
124
+ const overhead = prefix.length + 1 + (lines.length ? 1 : 0);
125
+ const available = remaining - overhead;
126
+ if (available <= 0)
127
+ continue;
128
+ let value = esc(field.value);
129
+ if (value.length > available) {
130
+ if (field.shorten && available >= 20)
131
+ value = value.slice(0, available - 1).trimEnd() + "…";
132
+ else if (field.omission && field.omission.length <= available)
133
+ value = field.omission;
134
+ else
135
+ continue;
136
+ }
137
+ lines.push(`${prefix}${value}"`);
138
+ remaining -= overhead + value.length;
139
+ }
140
+ return lines.join("\n");
141
+ }
@@ -0,0 +1,31 @@
1
+ export type ContextZone = "system" | "mission" | "vision" | "memory" | "evidence" | "recall" | "tool" | "user" | "tail";
2
+ export interface BudgetPolicy {
3
+ readonly system: number;
4
+ readonly mission: number;
5
+ readonly vision: number;
6
+ readonly memory: number;
7
+ readonly evidence: number;
8
+ readonly recall: number;
9
+ readonly tool: number;
10
+ readonly tail: number;
11
+ }
12
+ export declare const DEFAULT_POLICY: BudgetPolicy;
13
+ export type BudgetAllocation = Readonly<Record<ContextZone, number>>;
14
+ export interface AllocateInput {
15
+ readonly totalTokens: number;
16
+ readonly policy?: BudgetPolicy;
17
+ readonly userTokens?: number;
18
+ }
19
+ export declare function allocateBudget(input: AllocateInput): BudgetAllocation;
20
+ export declare function estimateTokens(text: string): number;
21
+ export declare function clampToBudget(text: string, maxTokens: number): string;
22
+ export interface BudgetItem<T> {
23
+ readonly ref: T;
24
+ readonly tokens: number;
25
+ readonly priority?: number;
26
+ }
27
+ export declare function packToBudget<T>(items: readonly BudgetItem<T>[], maxTokens: number): {
28
+ readonly included: readonly T[];
29
+ readonly excluded: readonly T[];
30
+ readonly usedTokens: number;
31
+ };