@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,50 @@
1
+ // Tipi del dominio CODE GRAPH (metodo Danilov, Memory OS).
2
+ //
3
+ // CodeGraphMemory indicizza la STRUTTURA del codice del repository:
4
+ // - simboli (funzioni, classi, interfacce, tipi, costanti esportate o no)
5
+ // - import / dipendenze tra file (grafo orientato)
6
+ // - API pubbliche (export) e contratti (signature di funzioni/metodi pubblici)
7
+ // - test mapping (quali file di test coprono quali file/simboli sorgente)
8
+ // - feature areas (raggruppamenti logici di file/simboli per area funzionale)
9
+ //
10
+ // Da queste viste emette eventi del dominio "code", consumati dal Context
11
+ // Window Compiler per portare in finestra il "code graph caldo": cio' che e'
12
+ // cambiato di recente, le API toccate, i test rotti, i contratti modificati.
13
+ //
14
+ // Modulo PURO: solo tipi ed helper deterministici, nessun side-effect, zero
15
+ // dipendenze a runtime. Combacia per struttura con MemoryEvent senza dipenderne
16
+ // rigidamente (un CodeEvent si converte in MemoryEvent nel sink).
17
+ // --- helper deterministici --------------------------------------------------
18
+ // Costruisce l'id stabile di un simbolo.
19
+ export function symbolId(file, name) {
20
+ return `${file}#${name}`;
21
+ }
22
+ // Etichetta umana breve del tipo evento (azione Danilov).
23
+ export function codeActionLabel(type) {
24
+ switch (type) {
25
+ case "code.symbol.changed": return "simbolo-cambiato";
26
+ case "code.file.touched": return "file-toccato";
27
+ case "code.import.added": return "import-aggiunto";
28
+ case "code.api.changed": return "api-cambiata";
29
+ case "code.contract.changed": return "contratto-cambiato";
30
+ case "code.test.failed": return "test-fallito";
31
+ case "code.test.passed": return "test-passato";
32
+ }
33
+ }
34
+ // Vero se un export e' parte di un'API pubblica "vera" (nome non interno).
35
+ export function isPublicName(name) {
36
+ return !!name && !name.startsWith("_");
37
+ }
38
+ // Deriva un id di feature area dal path relativo (prima cartella significativa
39
+ // sotto src/, altrimenti la cartella di primo livello). Deterministico.
40
+ export function featureAreaOf(file) {
41
+ const norm = file.replace(/\\/g, "/").replace(/^\.\//, "");
42
+ const parts = norm.split("/").filter(Boolean);
43
+ if (parts.length <= 1)
44
+ return "root";
45
+ // Salta una "src" iniziale per usare la cartella di dominio.
46
+ let i = 0;
47
+ if (parts[0] === "src")
48
+ i = 1;
49
+ return parts[i] ?? "root";
50
+ }
@@ -0,0 +1,4 @@
1
+ import { type ParsedFile } from "./code-graph-types.js";
2
+ export declare function isTestFile(file: string): boolean;
3
+ export declare function parseSource(file: string, source: string): ParsedFile;
4
+ export declare function publicApiOf(parsed: ParsedFile): readonly string[];
@@ -0,0 +1,257 @@
1
+ // Parser/scanner leggero per TS/JS (metodo Danilov, Memory OS).
2
+ //
3
+ // Estrae simboli, import ed export da un file SENZA AST e SENZA dipendenze:
4
+ // regex robuste, line-by-line, tolleranti. Non e' un compilatore: e' un
5
+ // indicizzatore "best effort" pensato per alimentare il code graph. Preferisce
6
+ // falsi negativi (perde qualche caso esotico) ai falsi positivi rumorosi.
7
+ //
8
+ // Modulo PURO: input stringa -> ParsedFile. Nessuna lettura su disco qui;
9
+ // l'orchestrazione (leggere i file) sta in CodeGraphMemory.
10
+ import { symbolId, } from "./code-graph-types.js";
11
+ // Vero se il path indica un file di test per convenzione comune.
12
+ export function isTestFile(file) {
13
+ const f = file.replace(/\\/g, "/").toLowerCase();
14
+ return (/\.(test|spec)\.[cm]?[jt]sx?$/.test(f) ||
15
+ /(^|\/)(test|tests|__tests__|spec)\//.test(f));
16
+ }
17
+ // Rimuove commenti di riga e di blocco (best effort) e le stringhe template
18
+ // multilinea non vengono toccate: ci interessa solo ridurre il rumore dei
19
+ // commenti che contengono parole chiave come "export" o "import".
20
+ function stripComments(source) {
21
+ // Blocchi /* ... */ (non greedy, multilinea).
22
+ let s = source.replace(/\/\*[\s\S]*?\*\//g, "");
23
+ // Commenti di riga // ... (evita di toccare "://" negli URL in modo grezzo).
24
+ s = s.replace(/(^|[^:])\/\/[^\n]*/g, "$1");
25
+ return s;
26
+ }
27
+ // Estrae il blocco import: gestisce
28
+ // import X from "m"; import { a, b as c } from "m"; import * as ns from "m";
29
+ // import "m"; import type { T } from "m";
30
+ const IMPORT_RE = /import\s+(?:type\s+)?(?:([\w$]+)\s*,?\s*)?(?:\{([^}]*)\})?\s*(?:\*\s+as\s+([\w$]+))?\s*(?:from\s*)?["']([^"']+)["']/g;
31
+ // Re-export: export { a, b } from "m"; / export * from "m";
32
+ const REEXPORT_RE = /export\s+(?:\*|\{([^}]*)\})\s+from\s+["']([^"']+)["']/g;
33
+ function parseImports(source) {
34
+ const out = [];
35
+ const seen = new Set();
36
+ const pushImport = (module, names) => {
37
+ const key = `${module}::${names.join(",")}`;
38
+ if (seen.has(key))
39
+ return;
40
+ seen.add(key);
41
+ out.push({
42
+ file: "", // riempito dal chiamante
43
+ module,
44
+ names: dedupe(names),
45
+ external: !module.startsWith("."),
46
+ });
47
+ };
48
+ for (const m of source.matchAll(IMPORT_RE)) {
49
+ const def = m[1];
50
+ const braced = m[2];
51
+ const ns = m[3];
52
+ const module = m[4] ?? "";
53
+ if (!module)
54
+ continue;
55
+ const names = [];
56
+ if (def)
57
+ names.push(def);
58
+ if (ns)
59
+ names.push(ns);
60
+ if (braced) {
61
+ for (const part of braced.split(",")) {
62
+ const name = part.trim().split(/\s+as\s+/)[0]?.trim();
63
+ if (name)
64
+ names.push(name.replace(/^type\s+/, ""));
65
+ }
66
+ }
67
+ pushImport(module, names);
68
+ }
69
+ for (const m of source.matchAll(REEXPORT_RE)) {
70
+ const braced = m[1];
71
+ const module = m[2] ?? "";
72
+ if (!module)
73
+ continue;
74
+ const names = [];
75
+ if (braced) {
76
+ for (const part of braced.split(",")) {
77
+ const name = part.trim().split(/\s+as\s+/)[0]?.trim();
78
+ if (name)
79
+ names.push(name);
80
+ }
81
+ }
82
+ pushImport(module, names);
83
+ }
84
+ return out;
85
+ }
86
+ const SYMBOL_PATTERNS = [
87
+ { re: /^\s*(?:export\s+)?(?:default\s+)?(?:async\s+)?function\s*\*?\s*([\w$]+)/, kind: "function" },
88
+ { re: /^\s*(?:export\s+)?(?:default\s+)?(?:abstract\s+)?class\s+([\w$]+)/, kind: "class" },
89
+ { re: /^\s*(?:export\s+)?interface\s+([\w$]+)/, kind: "interface" },
90
+ { re: /^\s*(?:export\s+)?type\s+([\w$]+)\s*[=<]/, kind: "type" },
91
+ { re: /^\s*(?:export\s+)?(?:const\s+)?enum\s+([\w$]+)/, kind: "enum" },
92
+ // const arrow function: const foo = (...) => / const foo = async (...) =>
93
+ { re: /^\s*(?:export\s+)?const\s+([\w$]+)\s*(?::[^=]+)?=\s*(?:async\s*)?(?:function|\([^)]*\)\s*(?::[^=]*)?=>|[\w$]+\s*=>)/, kind: "function" },
94
+ // const generico (non funzione)
95
+ { re: /^\s*(?:export\s+)?const\s+([\w$]+)\s*[:=]/, kind: "const" },
96
+ { re: /^\s*(?:export\s+)?(?:let|var)\s+([\w$]+)\s*[:=]/, kind: "variable" },
97
+ ];
98
+ // Cattura una firma sintetica della riga di definizione (troncata).
99
+ function signatureOf(line) {
100
+ const trimmed = line.trim().replace(/\s+/g, " ");
101
+ // Tronca all'inizio del corpo ({ oppure =>) per tenere solo la firma.
102
+ const body = trimmed.search(/[{]/);
103
+ const sig = body > 0 ? trimmed.slice(0, body).trim() : trimmed;
104
+ return sig.replace(/\s*=\s*$/, "").slice(0, 200);
105
+ }
106
+ function isExportedLine(line) {
107
+ return /^\s*export\b/.test(line);
108
+ }
109
+ // Variante "anywhere" dei pattern: stesso corpo ma senza ancora ^\s* e con
110
+ // flag globale, per catturare piu' definizioni sulla stessa riga (es.
111
+ // `export function a(){} export function b(){}`). Manteniamo SYMBOL_PATTERNS
112
+ // (ancorati) per il riconoscimento per-riga di const/var/type che richiedono
113
+ // l'inizio riga, e usiamo questi per function/class/interface/enum.
114
+ const GLOBAL_PATTERNS = [
115
+ { re: /(export\s+)?(?:default\s+)?(?:async\s+)?function\s*\*?\s*([\w$]+)/g, kind: "function" },
116
+ { re: /(export\s+)?(?:default\s+)?(?:abstract\s+)?class\s+([\w$]+)/g, kind: "class" },
117
+ { re: /(export\s+)?interface\s+([\w$]+)/g, kind: "interface" },
118
+ { re: /(export\s+)?(?:const\s+)?enum\s+([\w$]+)/g, kind: "enum" },
119
+ ];
120
+ // Arrow/funzione assegnata: per distinguere const-funzione da const-dato.
121
+ const ARROW_OR_FN = /=\s*(?:async\s*)?(?:function\b|\([^)]*\)\s*(?::[^=]*)?=>|[\w$]+\s*=>)/;
122
+ function parseSymbols(file, source) {
123
+ const lines = source.split("\n");
124
+ const out = [];
125
+ const seen = new Set();
126
+ const lineOf = (offset) => {
127
+ let n = 1;
128
+ for (let i = 0; i < offset && i < source.length; i++)
129
+ if (source[i] === "\n")
130
+ n++;
131
+ return n;
132
+ };
133
+ // 1) function/class/interface/enum: scansione globale (piu' match per riga).
134
+ for (const p of GLOBAL_PATTERNS) {
135
+ for (const m of source.matchAll(p.re)) {
136
+ const name = m[2];
137
+ if (!name)
138
+ continue;
139
+ const id = symbolId(file, name);
140
+ if (seen.has(id))
141
+ continue;
142
+ seen.add(id);
143
+ const line = lineOf(m.index ?? 0);
144
+ // Firma: dal punto del match fino a fine firma (apertura corpo/blocco).
145
+ // Usa il source dall'offset del match per includere i parametri completi.
146
+ const tail = source.slice(m.index ?? 0);
147
+ out.push({
148
+ id,
149
+ name,
150
+ kind: p.kind,
151
+ file,
152
+ // l'export e' significativo solo se immediatamente prima della keyword
153
+ // (gruppo m[1]); evita falsi positivi con piu' def sulla stessa riga.
154
+ exported: !!m[1],
155
+ line,
156
+ signature: signatureOf(tail),
157
+ });
158
+ }
159
+ }
160
+ // 2) const/var/type: riconoscimento per-riga (richiedono l'inizio riga).
161
+ const LINE_PATTERNS = SYMBOL_PATTERNS.filter((p) => p.kind === "type" || p.kind === "const" || p.kind === "variable" || p.kind === "function");
162
+ for (let i = 0; i < lines.length; i++) {
163
+ const line = lines[i] ?? "";
164
+ for (const p of LINE_PATTERNS) {
165
+ const m = p.re.exec(line);
166
+ if (!m)
167
+ continue;
168
+ const name = m[1];
169
+ if (!name)
170
+ continue;
171
+ const id = symbolId(file, name);
172
+ if (seen.has(id))
173
+ break;
174
+ seen.add(id);
175
+ out.push({
176
+ id,
177
+ name,
178
+ kind: p.kind,
179
+ file,
180
+ exported: isExportedLine(line),
181
+ line: i + 1,
182
+ signature: signatureOf(line),
183
+ });
184
+ break;
185
+ }
186
+ }
187
+ // 3) export const/let/var globali (multi-def sulla stessa riga). Dopo il
188
+ // passo per-riga, cosi' le arrow-function gia' catturate restano "function".
189
+ for (const m of source.matchAll(/(export\s+)(?:const|let|var)\s+([\w$]+)/g)) {
190
+ const name = m[2];
191
+ if (!name)
192
+ continue;
193
+ const id = symbolId(file, name);
194
+ if (seen.has(id))
195
+ continue;
196
+ seen.add(id);
197
+ const line = lineOf(m.index ?? 0);
198
+ const tail = source.slice(m.index ?? 0);
199
+ out.push({
200
+ id,
201
+ name,
202
+ kind: ARROW_OR_FN.test(tail.slice(0, 200)) ? "function" : "const",
203
+ file,
204
+ exported: true,
205
+ line,
206
+ signature: signatureOf(tail),
207
+ });
208
+ }
209
+ out.sort((a, b) => a.line - b.line);
210
+ // export { a, b } esplicito: marca come exported i simboli gia' trovati.
211
+ for (const m of source.matchAll(/export\s+\{([^}]*)\}\s*;?/g)) {
212
+ const inner = m[1] ?? "";
213
+ if (/\bfrom\b/.test(source.slice(m.index ?? 0, (m.index ?? 0) + (m[0]?.length ?? 0) + 20))) {
214
+ // gestito da re-export, non sono definizioni locali
215
+ }
216
+ for (const part of inner.split(",")) {
217
+ const name = part.trim().split(/\s+as\s+/)[0]?.trim();
218
+ if (!name)
219
+ continue;
220
+ const id = symbolId(file, name);
221
+ const found = out.find((s) => s.id === id);
222
+ if (found && !found.exported) {
223
+ const idx = out.indexOf(found);
224
+ out[idx] = { ...found, exported: true };
225
+ }
226
+ }
227
+ }
228
+ return out;
229
+ }
230
+ // Parsa un file sorgente in ParsedFile. `file` e' il path relativo (per gli id).
231
+ export function parseSource(file, source) {
232
+ const clean = stripComments(source);
233
+ const symbols = parseSymbols(file, clean);
234
+ const imports = parseImports(clean).map((i) => ({ ...i, file }));
235
+ return {
236
+ file,
237
+ symbols,
238
+ imports,
239
+ isTest: isTestFile(file),
240
+ };
241
+ }
242
+ // API pubblica di un file = nomi dei simboli esportati.
243
+ export function publicApiOf(parsed) {
244
+ return dedupe(parsed.symbols.filter((s) => s.exported).map((s) => s.name));
245
+ }
246
+ function dedupe(values) {
247
+ const out = [];
248
+ const seen = new Set();
249
+ for (const v of values) {
250
+ const t = (v ?? "").trim();
251
+ if (!t || seen.has(t))
252
+ continue;
253
+ seen.add(t);
254
+ out.push(t);
255
+ }
256
+ return out;
257
+ }
@@ -0,0 +1,53 @@
1
+ export type Category = "auth" | "data-model" | "crud" | "ui" | "api" | "observability" | "security" | "billing" | "testing" | "docs" | "deployment" | (string & {});
2
+ export type Importance = "must" | "should" | "nice";
3
+ export interface Competitor {
4
+ readonly id: string;
5
+ readonly name: string;
6
+ readonly domain: string;
7
+ readonly summary: string;
8
+ readonly features: readonly string[];
9
+ readonly reference?: string;
10
+ }
11
+ export interface BestPractice {
12
+ readonly id: string;
13
+ readonly title: string;
14
+ readonly category: Category;
15
+ readonly domain: string;
16
+ readonly importance: Importance;
17
+ readonly expectation: string;
18
+ readonly adoptedBy?: readonly string[];
19
+ readonly reference?: string;
20
+ }
21
+ export interface MarketStandard {
22
+ readonly domain: string;
23
+ readonly practices: readonly BestPractice[];
24
+ readonly competitors: readonly Competitor[];
25
+ }
26
+ export interface ComparisonVerdict {
27
+ readonly domain: string;
28
+ readonly score: number;
29
+ readonly met: readonly BestPractice[];
30
+ readonly gaps: readonly BestPractice[];
31
+ readonly extras: readonly string[];
32
+ readonly summary: string;
33
+ }
34
+ export declare class KnowledgeBase {
35
+ private readonly competitors;
36
+ private readonly practices;
37
+ constructor(opts?: {
38
+ readonly competitors?: readonly Competitor[];
39
+ readonly practices?: readonly BestPractice[];
40
+ });
41
+ static default(): KnowledgeBase;
42
+ allCompetitors(): readonly Competitor[];
43
+ competitor(id: string): Competitor | undefined;
44
+ competitorsByDomain(domain: string): readonly Competitor[];
45
+ allPractices(): readonly BestPractice[];
46
+ practice(id: string): BestPractice | undefined;
47
+ practicesByDomain(domain: string): readonly BestPractice[];
48
+ practicesByCategory(category: Category): readonly BestPractice[];
49
+ domains(): readonly string[];
50
+ marketStandard(domain: string): MarketStandard;
51
+ compareToMarket(domain: string, outputFeatures: readonly string[]): ComparisonVerdict;
52
+ }
53
+ export declare const knowledgeBase: KnowledgeBase;
@@ -0,0 +1,262 @@
1
+ // Knowledge base dei concorrenti e delle best practice di settore.
2
+ //
3
+ // Scopo: raccogliere riferimenti su prodotti concorrenti e standard di mercato
4
+ // per il dominio del task, ed esporre un'API per CONFRONTARE l'output prodotto
5
+ // (un insieme di feature/capabilities) con gli standard attesi, ritornando i
6
+ // gap e uno score. Modulo PURO e a zero dipendenze: dati statici + funzioni di
7
+ // query e confronto. Coerente con lo stile degli altri moduli vascend/.
8
+ // ---------------------------------------------------------------------------
9
+ // Dataset (Piano istanze) - concorrenti di riferimento.
10
+ // Curato e conciso: rappresenta gli standard di mercato per i domini comuni in
11
+ // cui un agente di coding produce output (SaaS, piattaforme dev, auth, ecc.).
12
+ // ---------------------------------------------------------------------------
13
+ const COMPETITORS = [
14
+ {
15
+ id: "stripe",
16
+ name: "Stripe",
17
+ domain: "billing",
18
+ summary: "Piattaforma di pagamenti con API-first, idempotenza e webhook robusti.",
19
+ features: ["billing.subscriptions", "billing.idempotency", "billing.webhooks", "api.versioning", "docs.api-reference"],
20
+ reference: "https://stripe.com/docs",
21
+ },
22
+ {
23
+ id: "auth0",
24
+ name: "Auth0",
25
+ domain: "auth",
26
+ summary: "Identity provider con OAuth2/OIDC, MFA e gestione sessioni.",
27
+ features: ["auth.oauth2", "auth.mfa", "auth.sessions", "auth.rbac", "security.token-rotation"],
28
+ reference: "https://auth0.com/docs",
29
+ },
30
+ {
31
+ id: "clerk",
32
+ name: "Clerk",
33
+ domain: "auth",
34
+ summary: "Auth as-a-service con UI components pronte e gestione utenti.",
35
+ features: ["auth.oauth2", "auth.mfa", "auth.sessions", "ui.prebuilt-components"],
36
+ reference: "https://clerk.com/docs",
37
+ },
38
+ {
39
+ id: "supabase",
40
+ name: "Supabase",
41
+ domain: "saas-backend",
42
+ summary: "Backend open-source: Postgres, auth, storage, realtime, RLS.",
43
+ features: ["auth.oauth2", "data-model.relational", "crud.rest", "crud.realtime", "security.row-level"],
44
+ reference: "https://supabase.com/docs",
45
+ },
46
+ {
47
+ id: "vercel",
48
+ name: "Vercel",
49
+ domain: "deployment",
50
+ summary: "Piattaforma di deploy con preview, edge e osservabilita' integrata.",
51
+ features: ["deployment.preview", "deployment.edge", "observability.logs", "observability.analytics"],
52
+ reference: "https://vercel.com/docs",
53
+ },
54
+ {
55
+ id: "datadog",
56
+ name: "Datadog",
57
+ domain: "observability",
58
+ summary: "Osservabilita' end-to-end: metriche, tracing, log correlati e alert.",
59
+ features: ["observability.metrics", "observability.tracing", "observability.logs", "observability.alerts"],
60
+ reference: "https://docs.datadoghq.com",
61
+ },
62
+ {
63
+ id: "linear",
64
+ name: "Linear",
65
+ domain: "saas-b2b",
66
+ summary: "SaaS B2B con UX rapida, keyboard-first, API GraphQL e webhooks.",
67
+ features: ["ui.keyboard-first", "ui.optimistic", "api.graphql", "billing.subscriptions", "docs.api-reference"],
68
+ reference: "https://linear.app/docs",
69
+ },
70
+ ];
71
+ // ---------------------------------------------------------------------------
72
+ // Dataset - best practice / standard di mercato.
73
+ // ---------------------------------------------------------------------------
74
+ const PRACTICES = [
75
+ // --- auth ---
76
+ { id: "auth.oauth2", title: "OAuth2/OIDC login", category: "auth", domain: "auth", importance: "must",
77
+ expectation: "Login federato (Google/GitHub) via OAuth2/OIDC, non solo password.", adoptedBy: ["auth0", "clerk", "supabase"] },
78
+ { id: "auth.mfa", title: "Multi-factor auth", category: "auth", domain: "auth", importance: "should",
79
+ expectation: "Secondo fattore (TOTP/WebAuthn) opzionale per gli account.", adoptedBy: ["auth0", "clerk"] },
80
+ { id: "auth.sessions", title: "Gestione sessioni sicura", category: "auth", domain: "auth", importance: "must",
81
+ expectation: "Sessioni con scadenza, refresh e revoca; cookie httpOnly/secure.", adoptedBy: ["auth0", "clerk", "supabase"] },
82
+ { id: "auth.rbac", title: "Ruoli e permessi (RBAC)", category: "security", domain: "auth", importance: "should",
83
+ expectation: "Controllo accessi basato su ruoli per le risorse protette.", adoptedBy: ["auth0"] },
84
+ { id: "security.token-rotation", title: "Rotazione dei token", category: "security", domain: "auth", importance: "should",
85
+ expectation: "Refresh token a rotazione con rilevamento riuso.", adoptedBy: ["auth0"] },
86
+ { id: "security.row-level", title: "Row-level security", category: "security", domain: "saas-backend", importance: "should",
87
+ expectation: "Isolamento dei dati per tenant/utente a livello di riga.", adoptedBy: ["supabase"] },
88
+ // --- data-model / crud ---
89
+ { id: "data-model.relational", title: "Modello dati relazionale", category: "data-model", domain: "saas-backend", importance: "must",
90
+ expectation: "Schema normalizzato con vincoli e relazioni esplicite.", adoptedBy: ["supabase"] },
91
+ { id: "crud.rest", title: "API CRUD REST", category: "crud", domain: "saas-backend", importance: "must",
92
+ expectation: "Operazioni CRUD complete via REST con paginazione e filtri.", adoptedBy: ["supabase"] },
93
+ { id: "crud.realtime", title: "Aggiornamenti realtime", category: "crud", domain: "saas-backend", importance: "nice",
94
+ expectation: "Subscribe alle modifiche dei dati (websocket/SSE).", adoptedBy: ["supabase"] },
95
+ // --- api ---
96
+ { id: "api.versioning", title: "Versionamento API", category: "api", domain: "api", importance: "should",
97
+ expectation: "API versionata con politica di deprecazione chiara.", adoptedBy: ["stripe"] },
98
+ { id: "api.graphql", title: "API GraphQL", category: "api", domain: "api", importance: "nice",
99
+ expectation: "Endpoint GraphQL tipizzato per query flessibili.", adoptedBy: ["linear"] },
100
+ // --- ui ---
101
+ { id: "ui.prebuilt-components", title: "Componenti UI pronti", category: "ui", domain: "ui", importance: "nice",
102
+ expectation: "Componenti riusabili e accessibili per i flussi comuni.", adoptedBy: ["clerk"] },
103
+ { id: "ui.keyboard-first", title: "Navigazione keyboard-first", category: "ui", domain: "ui", importance: "nice",
104
+ expectation: "Scorciatoie da tastiera per le azioni principali.", adoptedBy: ["linear"] },
105
+ { id: "ui.optimistic", title: "UI ottimistica", category: "ui", domain: "ui", importance: "nice",
106
+ expectation: "Aggiornamenti ottimistici con rollback su errore.", adoptedBy: ["linear"] },
107
+ // --- billing ---
108
+ { id: "billing.subscriptions", title: "Abbonamenti ricorrenti", category: "billing", domain: "billing", importance: "must",
109
+ expectation: "Piani/abbonamenti con prove, upgrade/downgrade e proration.", adoptedBy: ["stripe", "linear"] },
110
+ { id: "billing.idempotency", title: "Idempotenza dei pagamenti", category: "billing", domain: "billing", importance: "must",
111
+ expectation: "Chiavi di idempotenza per evitare doppi addebiti.", adoptedBy: ["stripe"] },
112
+ { id: "billing.webhooks", title: "Webhook affidabili", category: "billing", domain: "billing", importance: "should",
113
+ expectation: "Webhook firmati con retry e gestione degli eventi duplicati.", adoptedBy: ["stripe"] },
114
+ // --- observability ---
115
+ { id: "observability.logs", title: "Log strutturati", category: "observability", domain: "observability", importance: "must",
116
+ expectation: "Log strutturati e ricercabili con correlazione richiesta.", adoptedBy: ["vercel", "datadog"] },
117
+ { id: "observability.metrics", title: "Metriche", category: "observability", domain: "observability", importance: "should",
118
+ expectation: "Metriche di sistema e business esportate.", adoptedBy: ["datadog"] },
119
+ { id: "observability.tracing", title: "Tracing distribuito", category: "observability", domain: "observability", importance: "should",
120
+ expectation: "Tracce distribuite end-to-end fra servizi.", adoptedBy: ["datadog"] },
121
+ { id: "observability.alerts", title: "Alerting", category: "observability", domain: "observability", importance: "should",
122
+ expectation: "Alert su soglie e anomalie con notifiche.", adoptedBy: ["datadog"] },
123
+ { id: "observability.analytics", title: "Analytics d'uso", category: "observability", domain: "observability", importance: "nice",
124
+ expectation: "Analisi d'uso e performance per le pagine/endpoint.", adoptedBy: ["vercel"] },
125
+ // --- deployment ---
126
+ { id: "deployment.preview", title: "Deploy di preview", category: "deployment", domain: "deployment", importance: "should",
127
+ expectation: "Ambiente di anteprima per ogni branch/PR.", adoptedBy: ["vercel"] },
128
+ { id: "deployment.edge", title: "Esecuzione edge", category: "deployment", domain: "deployment", importance: "nice",
129
+ expectation: "Distribuzione su edge per bassa latenza globale.", adoptedBy: ["vercel"] },
130
+ // --- testing / docs (trasversali) ---
131
+ { id: "testing.automated", title: "Test automatici", category: "testing", domain: "*", importance: "must",
132
+ expectation: "Suite di test automatici (unit/integration) nella CI." },
133
+ { id: "docs.api-reference", title: "Documentazione API", category: "docs", domain: "*", importance: "should",
134
+ expectation: "Reference API completo con esempi.", adoptedBy: ["stripe", "linear"] },
135
+ ];
136
+ // ---------------------------------------------------------------------------
137
+ // KnowledgeBase (Piano RELAZIONI) - API di query e confronto.
138
+ // Classe immutabile: i dati restano interni, i metodi ritornano copie.
139
+ // ---------------------------------------------------------------------------
140
+ const IMPORTANCE_WEIGHT = { must: 3, should: 2, nice: 1 };
141
+ function norm(s) {
142
+ return s.trim().toLowerCase();
143
+ }
144
+ // Domini noti che si applicano "a tutti" (le best practice con domain "*").
145
+ function appliesToDomain(p, domain) {
146
+ return p.domain === "*" || norm(p.domain) === norm(domain);
147
+ }
148
+ export class KnowledgeBase {
149
+ competitors;
150
+ practices;
151
+ constructor(opts) {
152
+ this.competitors = opts?.competitors ?? COMPETITORS;
153
+ this.practices = opts?.practices ?? PRACTICES;
154
+ }
155
+ // Istanza con il dataset di default.
156
+ static default() {
157
+ return new KnowledgeBase();
158
+ }
159
+ // --- Query: concorrenti ---
160
+ allCompetitors() {
161
+ return this.competitors;
162
+ }
163
+ competitor(id) {
164
+ return this.competitors.find((c) => norm(c.id) === norm(id));
165
+ }
166
+ competitorsByDomain(domain) {
167
+ return this.competitors.filter((c) => norm(c.domain) === norm(domain));
168
+ }
169
+ // --- Query: best practice ---
170
+ allPractices() {
171
+ return this.practices;
172
+ }
173
+ practice(id) {
174
+ return this.practices.find((p) => norm(p.id) === norm(id));
175
+ }
176
+ practicesByDomain(domain) {
177
+ return this.practices.filter((p) => appliesToDomain(p, domain));
178
+ }
179
+ practicesByCategory(category) {
180
+ return this.practices.filter((p) => norm(p.category) === norm(String(category)));
181
+ }
182
+ // Elenco dei domini coperti dalla knowledge base.
183
+ domains() {
184
+ const set = new Set();
185
+ for (const c of this.competitors)
186
+ set.add(c.domain);
187
+ for (const p of this.practices)
188
+ if (p.domain !== "*")
189
+ set.add(p.domain);
190
+ return [...set].sort();
191
+ }
192
+ // --- Standard di mercato aggregato ---
193
+ marketStandard(domain) {
194
+ return {
195
+ domain,
196
+ practices: this.practicesByDomain(domain),
197
+ competitors: this.competitorsByDomain(domain),
198
+ };
199
+ }
200
+ // --- Confronto con il mercato ---
201
+ // Confronta un output (insieme di feature/capabilities prodotte) con lo
202
+ // standard di mercato di un dominio. Le feature possono essere id di best
203
+ // practice (es. "auth.oauth2") o testo libero; il match e' per id o per
204
+ // contenimento sul titolo/categoria.
205
+ compareToMarket(domain, outputFeatures) {
206
+ const standard = this.practicesByDomain(domain);
207
+ const have = outputFeatures.map(norm);
208
+ const matches = (p) => have.some((f) => f === norm(p.id) ||
209
+ f.includes(norm(p.id)) ||
210
+ norm(p.id).includes(f) ||
211
+ f.includes(norm(p.title)) ||
212
+ norm(p.title).includes(f));
213
+ const met = [];
214
+ const gaps = [];
215
+ for (const p of standard)
216
+ (matches(p) ? met : gaps).push(p);
217
+ // Feature dell'output che non corrispondono a nessuno standard del dominio.
218
+ const matchedIds = new Set(met.map((p) => norm(p.id)));
219
+ const matchedTitles = met.map((p) => norm(p.title));
220
+ const extras = outputFeatures.filter((f) => {
221
+ const nf = norm(f);
222
+ if (matchedIds.has(nf))
223
+ return false;
224
+ return !met.some((p) => nf.includes(norm(p.id)) || norm(p.id).includes(nf) ||
225
+ nf.includes(norm(p.title)) || matchedTitles.some((t) => t.includes(nf)));
226
+ });
227
+ // Score pesato per importanza.
228
+ const totWeight = standard.reduce((s, p) => s + IMPORTANCE_WEIGHT[p.importance], 0);
229
+ const metWeight = met.reduce((s, p) => s + IMPORTANCE_WEIGHT[p.importance], 0);
230
+ const score = totWeight === 0 ? 100 : Math.round((metWeight / totWeight) * 100);
231
+ const order = { must: 0, should: 1, nice: 2 };
232
+ const sortedGaps = [...gaps].sort((a, b) => order[a.importance] - order[b.importance]);
233
+ return {
234
+ domain,
235
+ score,
236
+ met,
237
+ gaps: sortedGaps,
238
+ extras,
239
+ summary: buildComparisonSummary(domain, score, met, sortedGaps, extras),
240
+ };
241
+ }
242
+ }
243
+ // Sintesi in notazione Danilov del confronto.
244
+ function buildComparisonSummary(domain, score, met, gaps, extras) {
245
+ const lines = [];
246
+ lines.push(`@confronto[${domain}]: score=${score}/100, coperte=${met.length}, gap=${gaps.length}, extra=${extras.length}`);
247
+ if (gaps.length) {
248
+ const mustGaps = gaps.filter((g) => g.importance === "must");
249
+ if (mustGaps.length) {
250
+ lines.push(`@gap[critici]: ${mustGaps.map((g) => g.title).join(" ; ")}`);
251
+ }
252
+ lines.push(`@gap[tutti]: ${gaps.map((g) => `${g.title}(${g.importance})`).join(" ; ")}`);
253
+ }
254
+ else {
255
+ lines.push(`@gap[nessuno]: output allineato allo standard del dominio`);
256
+ }
257
+ if (extras.length)
258
+ lines.push(`@extra[oltre_standard]: ${extras.join(" ; ")}`);
259
+ return lines.join("\n");
260
+ }
261
+ // Istanza condivisa pronta all'uso.
262
+ export const knowledgeBase = KnowledgeBase.default();
@@ -0,0 +1,16 @@
1
+ import type { Harness } from "../core/bootstrap.js";
2
+ export interface CompletenessVerdict {
3
+ readonly complete: boolean;
4
+ readonly missing: readonly string[];
5
+ readonly uncertain?: boolean;
6
+ readonly reason?: string;
7
+ }
8
+ export declare function completenessEnabled(env: NodeJS.ProcessEnv): boolean;
9
+ export declare function completenessRounds(env: NodeJS.ProcessEnv): number;
10
+ export declare function judgeCompleteness(opts: {
11
+ readonly harness: Harness;
12
+ readonly goal: string;
13
+ readonly evidence: string;
14
+ readonly signal: AbortSignal;
15
+ }): Promise<CompletenessVerdict>;
16
+ export declare function buildCompletenessSteer(goal: string, missing: readonly string[]): string;