@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,180 @@
1
+ import { existsSync, mkdirSync, readFileSync, appendFileSync, writeFileSync, rmSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { withLockSync } from "./file-lock.js";
4
+ import { consumeInbox } from "./kingdom-bus.js";
5
+ // Canale di comunicazione PERSISTENTE tra kingdoms (Kingdoms Mode): mentre il
6
+ // KingdomBus in-memory funziona SOLO tra vassalli dello stesso processo (warm,
7
+ // async), questo canale e' file-based e quindi CROSS-PROCESS. Serve quando i
8
+ // kingdoms vengono lanciati granularmente (processi/sessioni separate che NON
9
+ // condividono la memoria del processo): possono comunque scambiarsi messaggi e
10
+ // coordinarsi durante l'esecuzione leggendo/scrivendo lo stesso file di board.
11
+ //
12
+ // Layout su disco (sotto sessionDir, accanto agli altri store del regno):
13
+ // ${kingdomId}.kingdom.bus.jsonl -> board append-only, una riga per msg
14
+ // ${kingdomId}.kingdom.cursors.json -> { slug -> ultimo seq letto }
15
+ //
16
+ // Mutua esclusione cross-process via file-lock (mkdir atomico). Le scritture
17
+ // sono brevissime (append di una riga / rewrite di un piccolo json), quindi il
18
+ // busy-wait sincrono del lock e' adeguato. Niente dipendenze a runtime.
19
+ const MAX_BOARD = 500;
20
+ function busFile(sessionDir, kingdomId) {
21
+ return join(sessionDir, `${kingdomId}.kingdom.bus.jsonl`);
22
+ }
23
+ function cursorsFile(sessionDir, kingdomId) {
24
+ return join(sessionDir, `${kingdomId}.kingdom.cursors.json`);
25
+ }
26
+ function readBoard(file) {
27
+ if (!existsSync(file))
28
+ return [];
29
+ const out = [];
30
+ let raw = "";
31
+ try {
32
+ raw = readFileSync(file, "utf8");
33
+ }
34
+ catch {
35
+ return out;
36
+ }
37
+ for (const line of raw.split("\n")) {
38
+ if (!line.trim())
39
+ continue;
40
+ try {
41
+ const o = JSON.parse(line);
42
+ if (typeof o.seq === "number" && typeof o.from === "string" && typeof o.text === "string") {
43
+ out.push({
44
+ seq: o.seq,
45
+ from: o.from,
46
+ to: typeof o.to === "string" && o.to ? o.to : null,
47
+ text: o.text,
48
+ ts: typeof o.ts === "number" ? o.ts : 0,
49
+ });
50
+ }
51
+ }
52
+ catch {
53
+ // riga corrotta: ignorata, il log resta recuperabile.
54
+ }
55
+ }
56
+ return out;
57
+ }
58
+ function readCursors(file) {
59
+ if (!existsSync(file))
60
+ return Object.create(null);
61
+ try {
62
+ const o = JSON.parse(readFileSync(file, "utf8"));
63
+ const out = Object.create(null);
64
+ for (const [k, v] of Object.entries(o)) {
65
+ if (typeof v === "number")
66
+ out[k] = { last: v }; // legacy cursor
67
+ else if (v && typeof v === "object" && typeof v.last === "number") {
68
+ const cursor = v;
69
+ out[k] = { last: cursor.last, seen: Array.isArray(cursor.seen) ? cursor.seen.filter(Number.isSafeInteger) : [] };
70
+ }
71
+ }
72
+ return out;
73
+ }
74
+ catch {
75
+ return Object.create(null);
76
+ }
77
+ }
78
+ // Canale persistente file-based con la STESSA interfaccia di KingdomBus, cosi'
79
+ // i tool kingdom_send/inbox/wait restano invariati a prescindere dalla modalita'
80
+ // (warm in-process vs granular cross-process).
81
+ export class PersistentKingdomChannel {
82
+ sessionDir;
83
+ maxBoard;
84
+ constructor(sessionDir, opts = {}) {
85
+ this.sessionDir = sessionDir;
86
+ this.maxBoard = opts.maxBoard ?? MAX_BOARD;
87
+ }
88
+ // Pubblica un messaggio sulla board del regno. Il seq globale e' derivato dal
89
+ // contenuto attuale del file SOTTO LOCK, cosi' due processi non collidono.
90
+ post(kingdomId, from, to, text, ts) {
91
+ const file = busFile(this.sessionDir, kingdomId);
92
+ mkdirSync(dirname(file), { recursive: true });
93
+ return withLockSync(file, () => {
94
+ const board = readBoard(file);
95
+ const seq = board.reduce((mx, m) => (m.seq > mx ? m.seq : mx), 0) + 1;
96
+ const m = {
97
+ seq,
98
+ from,
99
+ to: to && to.trim() ? to.trim() : null,
100
+ text,
101
+ ts,
102
+ };
103
+ // Potatura: se la board supera il cap, riscrive il file con la coda.
104
+ if (board.length + 1 > this.maxBoard) {
105
+ const kept = [...board, m].slice(-this.maxBoard);
106
+ writeFileSync(file, kept.map((x) => JSON.stringify(x)).join("\n") + "\n", "utf8");
107
+ }
108
+ else {
109
+ appendFileSync(file, JSON.stringify(m) + "\n", "utf8");
110
+ }
111
+ return m;
112
+ });
113
+ }
114
+ // Messaggi NON ancora letti da `me` (destinati a me o broadcast, non miei).
115
+ // Avanza il cursore di lettura di `me` (read-modify-write atomico sul file
116
+ // dei cursori, sotto lock dedicato).
117
+ inbox(kingdomId, me, filter) {
118
+ const cfile = cursorsFile(this.sessionDir, kingdomId);
119
+ mkdirSync(dirname(cfile), { recursive: true });
120
+ return withLockSync(cfile, () => {
121
+ const board = readBoard(busFile(this.sessionDir, kingdomId));
122
+ const cursors = readCursors(cfile);
123
+ const read = consumeInbox(board, me, cursors[me] ?? { last: 0 }, filter);
124
+ cursors[me] = read.cursor;
125
+ writeFileSync(cfile, JSON.stringify(cursors), "utf8");
126
+ return read.messages;
127
+ });
128
+ }
129
+ // Tutti i messaggi del regno (per riepilogo/log), senza toccare i cursori.
130
+ history(kingdomId) {
131
+ return readBoard(busFile(this.sessionDir, kingdomId));
132
+ }
133
+ // Rimuove board e cursori del regno (cleanup a fine corsa).
134
+ clear(kingdomId) {
135
+ for (const f of [busFile(this.sessionDir, kingdomId), cursorsFile(this.sessionDir, kingdomId)]) {
136
+ try {
137
+ rmSync(f, { force: true });
138
+ }
139
+ catch {
140
+ // gia' assente
141
+ }
142
+ }
143
+ }
144
+ }
145
+ // Una istanza per sessionDir (riusata tra i tool dello stesso processo). Il
146
+ // vero coordinamento cross-process avviene comunque sul file, quindi piu'
147
+ // istanze in processi diversi convivono correttamente.
148
+ const channels = new Map();
149
+ export function getKingdomChannel(sessionDir, opts) {
150
+ let c = channels.get(sessionDir);
151
+ if (!c) {
152
+ c = new PersistentKingdomChannel(sessionDir, opts);
153
+ channels.set(sessionDir, c);
154
+ }
155
+ return c;
156
+ }
157
+ // --- Facade di selezione del backend ------------------------------------
158
+ // I tool kingdom_send/inbox/wait non devono sapere QUALE backend e' attivo:
159
+ // chiamano `resolveKingdomBus(env, sessionDir)` e ottengono un oggetto con la
160
+ // stessa interfaccia (post/inbox/history/clear). Quando l'IPC e' abilitato e
161
+ // c'e' un sessionDir, ritorna il canale persistente file-based (cross-process,
162
+ // per i kingdoms lanciati granularmente); altrimenti il bus in-memory (warm,
163
+ // vassalli nello stesso processo). Nessuna modifica alla firma dei tool.
164
+ import { kingdomBus } from "./kingdom-bus.js";
165
+ // IPC cross-process attivo? Default: ON quando c'e' un sessionDir (cosi' i
166
+ // kingdoms granulari comunicano sempre). Disattivabile con TALOS_KINGDOM_IPC=0
167
+ // per forzare il solo bus in-memory (es. test o single-process puro).
168
+ export function kingdomIpcEnabled(env) {
169
+ const v = (env["TALOS_KINGDOM_IPC"] ?? "").trim().toLowerCase();
170
+ if (v === "0" || v === "off" || v === "false" || v === "no")
171
+ return false;
172
+ return true;
173
+ }
174
+ // Risolve il backend giusto. `sessionDir` assente => sempre in-memory (non c'e'
175
+ // dove persistere). Garantisce il typing comune KingdomBusLike.
176
+ export function resolveKingdomBus(env, sessionDir) {
177
+ if (sessionDir && kingdomIpcEnabled(env))
178
+ return getKingdomChannel(sessionDir);
179
+ return kingdomBus;
180
+ }
@@ -0,0 +1,48 @@
1
+ import type { Harness } from "../core/bootstrap.js";
2
+ import type { VassalReport } from "./kingdom.js";
3
+ import { type SelfImproveReport, type VisionLike } from "./self-improve.js";
4
+ export interface KingdomKpi {
5
+ readonly castles: number;
6
+ readonly succeeded: number;
7
+ readonly failed: number;
8
+ readonly rooms: number;
9
+ readonly merged: number;
10
+ readonly mergeConflicts: number;
11
+ readonly emptyVassals: number;
12
+ readonly executionScore: number;
13
+ }
14
+ export declare function computeKingdomKpi(reports: readonly VassalReport[]): KingdomKpi;
15
+ export declare function buildKingdomEvidence(opts: {
16
+ readonly reports: readonly VassalReport[];
17
+ readonly kpi: KingdomKpi;
18
+ readonly roomIndex?: string;
19
+ }): string;
20
+ export declare function kingdomVisionFromGoal(goal: string): VisionLike;
21
+ export interface KingdomGateVerdict {
22
+ readonly kpi: KingdomKpi;
23
+ readonly alignment: SelfImproveReport;
24
+ readonly executionThreshold: number;
25
+ readonly delivered: boolean;
26
+ readonly reason: string;
27
+ }
28
+ export declare function kingdomKpiThreshold(env: NodeJS.ProcessEnv): number;
29
+ export declare function kingdomKpiRounds(env: NodeJS.ProcessEnv): number;
30
+ export declare function decideKingdomGate(opts: {
31
+ readonly kpi: KingdomKpi;
32
+ readonly alignment: SelfImproveReport;
33
+ readonly executionThreshold: number;
34
+ }): KingdomGateVerdict;
35
+ export interface KingdomGateInput {
36
+ readonly harness: Harness;
37
+ readonly reports: readonly VassalReport[];
38
+ readonly goal: string;
39
+ readonly vision?: VisionLike | string;
40
+ readonly roomIndex?: string;
41
+ readonly signal: AbortSignal;
42
+ readonly executionThreshold?: number;
43
+ readonly threshold?: number;
44
+ readonly maxProposals?: number;
45
+ }
46
+ export declare function runKingdomGate(input: KingdomGateInput): Promise<KingdomGateVerdict>;
47
+ export declare function buildKingdomImproveSteer(goal: string, verdict: KingdomGateVerdict): string;
48
+ export declare function formatKingdomGate(verdict: KingdomGateVerdict): string;
@@ -0,0 +1,172 @@
1
+ import { runSelfImprove, } from "./self-improve.js";
2
+ // Estrae i KPI di processo dai report dei vassalli. Puro: nessun side-effect.
3
+ export function computeKingdomKpi(reports) {
4
+ const castles = reports.length;
5
+ const succeeded = reports.filter((r) => r.ok).length;
6
+ const failed = castles - succeeded;
7
+ const rooms = reports.reduce((acc, r) => acc + (r.rooms || 0), 0);
8
+ const merged = reports.filter((r) => r.merge?.ok).length;
9
+ const mergeConflicts = reports.filter((r) => r.merge && !r.merge.ok).length;
10
+ // Vassallo "vuoto": dichiarato ok ma senza alcuna evidenza (ne' stanze ne'
11
+ // testo di summary). Sospetto: forse non ha fatto nulla di reale.
12
+ const emptyVassals = reports.filter((r) => r.ok && (r.rooms || 0) === 0 && !r.summary.trim()).length;
13
+ const executionScore = scoreExecution({
14
+ castles,
15
+ succeeded,
16
+ mergeConflicts,
17
+ emptyVassals,
18
+ });
19
+ return { castles, succeeded, failed, rooms, merged, mergeConflicts, emptyVassals, executionScore };
20
+ }
21
+ // Punteggio di esecuzione 0..100. Base = quota di vassalli riusciti, con
22
+ // penalita' per conflitti di merge (lavoro non integrato) e vassalli vuoti
23
+ // (successo sospetto). Deterministico e monotono.
24
+ function scoreExecution(p) {
25
+ if (p.castles === 0)
26
+ return 100; // niente da fare = nessun fallimento
27
+ const successRatio = p.succeeded / p.castles;
28
+ let score = successRatio * 100;
29
+ // Ogni conflitto di merge: lavoro non integrato, pesa come mezzo fallimento.
30
+ score -= (p.mergeConflicts / p.castles) * 50;
31
+ // Ogni vassallo vuoto: successo dubbio, penalita' lieve.
32
+ score -= (p.emptyVassals / p.castles) * 15;
33
+ return clampScore(score);
34
+ }
35
+ function clampScore(n) {
36
+ if (!Number.isFinite(n))
37
+ return 0;
38
+ return Math.max(0, Math.min(100, Math.round(n)));
39
+ }
40
+ // ---------------------------------------------------------------------------
41
+ // Evidence di regno: sintesi testuale dell'operato dei vassalli, da passare a
42
+ // runSelfImprove come STATO CORRENTE per il giudizio di allineamento alla Vision.
43
+ // ---------------------------------------------------------------------------
44
+ // Costruisce l'evidence aggregata dei vassalli (KPI + per-castello). `roomIndex`
45
+ // opzionale = INDICE delle stanze del regno (RoomMemory.indexBlock) per dare al
46
+ // giudice il dettaglio recuperabile. Limitata in lunghezza (anti-overflow).
47
+ export function buildKingdomEvidence(opts) {
48
+ const { reports, kpi, roomIndex } = opts;
49
+ const head = `VERIFICA ATTIVITA: ${kpi.succeeded}/${kpi.castles} collaboratori ok, ` +
50
+ `${kpi.rooms} attivita, merge ${kpi.merged} ok / ${kpi.mergeConflicts} conflitti, ` +
51
+ `collaboratori vuoti ${kpi.emptyVassals}, executionScore ${kpi.executionScore}/100`;
52
+ const perCastle = reports
53
+ .map((r) => {
54
+ const status = r.ok ? "ok" : "FALLITO";
55
+ const mg = r.merge ? (r.merge.ok ? ", merge ok" : `, merge ${r.merge.conflict ? "CONFLITTO" : "errore"}`) : "";
56
+ const err = r.error ? `, errore: ${r.error}` : "";
57
+ const body = r.summary.trim() ? r.summary.trim().slice(0, 600) : "(nessun output)";
58
+ return `[${r.slug}] ${status} (${r.rooms} attivita${mg}${err}): ${body}`;
59
+ })
60
+ .join("\n");
61
+ const idx = roomIndex && roomIndex.trim()
62
+ ? `\n\nATTIVITA ARCHIVIATE (dettaglio recuperabile):\n${roomIndex.trim().slice(0, 2000)}`
63
+ : "";
64
+ return `${head}\n\nESITO PER GRUPPO:\n${perCastle}${idx}`;
65
+ }
66
+ // ---------------------------------------------------------------------------
67
+ // Vision del regno: se non e' fornita una Vision esplicita, si costruisce una
68
+ // Vision minima dal GOAL complessivo del regno (l'obiettivo finale dell'utente),
69
+ // cosi' il giudizio di allineamento ha un riferimento.
70
+ // ---------------------------------------------------------------------------
71
+ export function kingdomVisionFromGoal(goal) {
72
+ return { finalGoal: goal.trim(), title: "Piano" };
73
+ }
74
+ // Soglia di executionScore (0..100) per considerare lo swarm "ben eseguito".
75
+ // Default 80: la maggioranza schiacciante dei vassalli deve essere riuscita e
76
+ // integrata. Override con TALOS_KINGDOM_KPI_THRESHOLD.
77
+ export function kingdomKpiThreshold(env) {
78
+ const n = Number(env["TALOS_KINGDOM_KPI_THRESHOLD"]);
79
+ return Number.isFinite(n) && n >= 0 && n <= 100 ? Math.round(n) : 80;
80
+ }
81
+ // Quante iterazioni di wake-up del regno al massimo (anti-loop). Default 1:
82
+ // dopo lo swarm si concede al piu' un giro di miglioramento. 0 = gate solo
83
+ // diagnostico (misura ma non rilancia). Override con TALOS_KINGDOM_KPI_ROUNDS.
84
+ export function kingdomKpiRounds(env) {
85
+ const n = Number(env["TALOS_KINGDOM_KPI_ROUNDS"]);
86
+ return Number.isInteger(n) && n >= 0 ? n : 1;
87
+ }
88
+ // Combina KPI di processo e report di allineamento in un verdetto.
89
+ export function decideKingdomGate(opts) {
90
+ const { kpi, alignment, executionThreshold } = opts;
91
+ const execOk = kpi.executionScore >= executionThreshold;
92
+ const mustCount = alignment.proposals.filter((p) => p.priority === "must").length;
93
+ const delivered = execOk && alignment.atVision;
94
+ const reason = delivered
95
+ ? `piano consegnabile: esecuzione ${kpi.executionScore}/100 (soglia ${executionThreshold}), allineamento ${alignment.alignment}/100`
96
+ : `piano da rinforzare: esecuzione ${kpi.executionScore}/100 (soglia ${executionThreshold})` +
97
+ (execOk ? "" : `, ${kpi.failed} falliti/${kpi.mergeConflicts} conflitti`) +
98
+ (alignment.atVision ? "" : `, allineamento ${alignment.alignment}/100, ${mustCount} must residui`);
99
+ return { kpi, alignment, executionThreshold, delivered, reason };
100
+ }
101
+ export async function runKingdomGate(input) {
102
+ const kpi = computeKingdomKpi(input.reports);
103
+ const executionThreshold = input.executionThreshold ?? kingdomKpiThreshold(process.env);
104
+ const evidence = buildKingdomEvidence({
105
+ reports: input.reports,
106
+ kpi,
107
+ ...(input.roomIndex ? { roomIndex: input.roomIndex } : {}),
108
+ });
109
+ const vision = input.vision ?? kingdomVisionFromGoal(input.goal);
110
+ const alignment = await runSelfImprove({
111
+ harness: input.harness,
112
+ vision,
113
+ evidence,
114
+ goal: input.goal,
115
+ signal: input.signal,
116
+ ...(input.threshold !== undefined ? { threshold: input.threshold } : {}),
117
+ ...(input.maxProposals !== undefined ? { maxProposals: input.maxProposals } : {}),
118
+ });
119
+ return decideKingdomGate({ kpi, alignment, executionThreshold });
120
+ }
121
+ // ---------------------------------------------------------------------------
122
+ // Steer di miglioramento del REGNO (notazione Danilov): se il verdetto NON e'
123
+ // "delivered", rilancia l'agente principale (Imperatore) a colmare i gap —
124
+ // prima i fallimenti di esecuzione (vassalli falliti/conflitti), poi le proposte
125
+ // must verso la Vision. A differenza di buildSelfImproveSteer (un solo lavoro),
126
+ // qui il contesto e' il regno appena eseguito.
127
+ // ---------------------------------------------------------------------------
128
+ export function buildKingdomImproveSteer(goal, verdict) {
129
+ const g = goal.replace(/"/g, "'").slice(0, 200);
130
+ const { kpi, alignment } = verdict;
131
+ const must = alignment.proposals.filter((p) => p.priority === "must");
132
+ const rows = (must.length ? must : alignment.proposals.slice(0, 5))
133
+ .map((p, i) => `(${i + 1}) [${p.priority}/${p.category}] ${p.text}${p.visionRef ? ` <${p.visionRef}>` : ""} (impatto ${p.impact})`)
134
+ .join(" ; ");
135
+ const execGap = kpi.failed > 0 || kpi.mergeConflicts > 0 || kpi.emptyVassals > 0
136
+ ? `collaboratori falliti=${kpi.failed}, conflitti merge=${kpi.mergeConflicts}, collaboratori vuoti=${kpi.emptyVassals}`
137
+ : "esecuzione completa";
138
+ return `[VASCEND_ATTIVITA_MIGLIORA]
139
+ INDICE
140
+ 1 = goal
141
+ 2 = kpi
142
+ 3 = vision
143
+ 4 = azione
144
+
145
+ DEFINIZIONI
146
+ @goal[reale]: "${g}"
147
+ @kpi[esecuzione]: ${kpi.executionScore}/100 (soglia ${verdict.executionThreshold}) · ${execGap}
148
+ @vision[allineamento]: ${alignment.alignment}/100 verso l'obiettivo finale (must residui=${must.length})
149
+ @proposta[gap]: ${rows || "nessuna proposta esplicita: rifinisci verso l'obiettivo finale"}
150
+ @azione[colma]: NON consegni un piano parziale; PRIMA risolvi i gap di esecuzione (rilavora i gruppi falliti, integra i conflitti), POI realizza le proposte must verso la Vision
151
+
152
+ RELAZIONI
153
+ @R1: @kpi[esecuzione] -> @azione[colma] [ i fallimenti di esecuzione vanno chiusi per primi ]
154
+ @R2: @vision[allineamento] -> @proposta[gap] [ il gap verso l'obiettivo diventa proposte ]
155
+ @R3: @proposta[gap] -> @azione[colma] [ realizza i must, poi rivaluta ]
156
+
157
+ OUTPUT: colma i gap del piano col lavoro reale (esecuzione prima, poi proposte must verso la Vision) e completa le attivita con vascend_mark. Il gate KPI rivaluta.`;
158
+ }
159
+ // ---------------------------------------------------------------------------
160
+ // Vista human-readable del verdetto (per la TUI).
161
+ // ---------------------------------------------------------------------------
162
+ export function formatKingdomGate(verdict) {
163
+ const { kpi, alignment } = verdict;
164
+ const head = verdict.delivered
165
+ ? `Piano consegnabile · esecuzione ${kpi.executionScore}/100 · allineamento ${alignment.alignment}/100`
166
+ : `Piano da rinforzare · ${verdict.reason}`;
167
+ const rows = alignment.proposals
168
+ .slice(0, 6)
169
+ .map((p) => ` - [${p.priority}/${p.category}] ${p.text}${p.rationale ? ` — ${p.rationale}` : ""}`)
170
+ .join("\n");
171
+ return rows ? `${head}\n${rows}` : head;
172
+ }
@@ -0,0 +1,28 @@
1
+ import type { UserInbox } from "../core/user-inbox.js";
2
+ export interface LiveVassal {
3
+ readonly kingdomId: string;
4
+ readonly slug: string;
5
+ readonly inbox: UserInbox;
6
+ readonly since: number;
7
+ }
8
+ export interface DeliveryOutcome {
9
+ readonly ok: boolean;
10
+ readonly messageId?: string;
11
+ readonly error?: string;
12
+ }
13
+ export declare class KingdomLive {
14
+ private readonly vassals;
15
+ register(kingdomId: string, slug: string, inbox: UserInbox, now?: number): void;
16
+ release(kingdomId: string, slug: string): void;
17
+ has(kingdomId: string, slug: string): boolean;
18
+ /** Slug dei collaboratori che stanno lavorando adesso in questo regno. */
19
+ slugs(kingdomId: string): readonly string[];
20
+ /**
21
+ * Consegna un messaggio dell'utente a un collaboratore. Non attende che sia
22
+ * letto: ritorna l'id, cosi' l'host puo' dire "in attesa" e poi "letto"
23
+ * quando arriva l'evento `user_message` di quel vassallo.
24
+ */
25
+ deliver(kingdomId: string, slug: string, text: string, messageId?: string): DeliveryOutcome;
26
+ clear(kingdomId: string): void;
27
+ }
28
+ export declare const kingdomLive: KingdomLive;
@@ -0,0 +1,61 @@
1
+ // Collaboratori VIVI di un regno: il punto in cui l'utente puo' parlare a un
2
+ // singolo vassallo mentre lavora.
3
+ //
4
+ // Il KingdomBus e' il canale fra vassalli (pull: il destinatario legge quando
5
+ // chiama kingdom_inbox). Non basta per una chat: un messaggio dell'utente non
6
+ // puo' dipendere dal fatto che il collaboratore si ricordi di controllare la
7
+ // posta. Qui teniamo invece la CASELLA del suo loop (la stessa UserInbox della
8
+ // chat principale), che l'agente svuota da solo al primo confine sicuro, subito
9
+ // dopo gli esiti dei tool.
10
+ //
11
+ // Registro in-memory di processo, chiave `${kingdomId}::${slug}`. Vive quanto il
12
+ // turno del vassallo: chi lo registra lo rilascia in un finally, altrimenti la
13
+ // UI crederebbe di poter scrivere a un agente che non c'e' piu'.
14
+ const key = (kingdomId, slug) => `${kingdomId}::${slug}`;
15
+ export class KingdomLive {
16
+ vassals = new Map();
17
+ register(kingdomId, slug, inbox, now = Date.now()) {
18
+ const id = String(kingdomId || "").trim();
19
+ const who = String(slug || "").trim();
20
+ if (!id || !who)
21
+ return;
22
+ this.vassals.set(key(id, who), { kingdomId: id, slug: who, inbox, since: now });
23
+ }
24
+ release(kingdomId, slug) {
25
+ this.vassals.delete(key(String(kingdomId || "").trim(), String(slug || "").trim()));
26
+ }
27
+ has(kingdomId, slug) {
28
+ return this.vassals.has(key(String(kingdomId || "").trim(), String(slug || "").trim()));
29
+ }
30
+ /** Slug dei collaboratori che stanno lavorando adesso in questo regno. */
31
+ slugs(kingdomId) {
32
+ const id = String(kingdomId || "").trim();
33
+ return [...this.vassals.values()].filter((v) => v.kingdomId === id).map((v) => v.slug);
34
+ }
35
+ /**
36
+ * Consegna un messaggio dell'utente a un collaboratore. Non attende che sia
37
+ * letto: ritorna l'id, cosi' l'host puo' dire "in attesa" e poi "letto"
38
+ * quando arriva l'evento `user_message` di quel vassallo.
39
+ */
40
+ deliver(kingdomId, slug, text, messageId) {
41
+ const body = String(text ?? "").trim();
42
+ if (!body)
43
+ return { ok: false, error: "messaggio vuoto" };
44
+ const live = this.vassals.get(key(String(kingdomId || "").trim(), String(slug || "").trim()));
45
+ if (!live)
46
+ return { ok: false, error: "collaboratore non piu' attivo" };
47
+ try {
48
+ return { ok: true, messageId: live.inbox.push(body, messageId) };
49
+ }
50
+ catch (err) {
51
+ return { ok: false, error: err.message };
52
+ }
53
+ }
54
+ clear(kingdomId) {
55
+ const id = String(kingdomId || "").trim();
56
+ for (const [k, v] of [...this.vassals])
57
+ if (v.kingdomId === id)
58
+ this.vassals.delete(k);
59
+ }
60
+ }
61
+ export const kingdomLive = new KingdomLive();
@@ -0,0 +1,18 @@
1
+ import type { EventSink, ToolContext } from "../core/types.js";
2
+ import type { Harness } from "../core/bootstrap.js";
3
+ import { type CastleSpec, type VassalReport } from "./kingdom.js";
4
+ import type { FileCoordinationContext } from "../core/file-coordination.js";
5
+ export interface KingdomRunInput {
6
+ readonly harness: Harness;
7
+ readonly castles: readonly CastleSpec[];
8
+ readonly signal: AbortSignal;
9
+ readonly sink: EventSink;
10
+ readonly confirm: (action: string, detail: string) => Promise<boolean>;
11
+ readonly ask?: ToolContext["ask"];
12
+ readonly fileCoordination?: FileCoordinationContext;
13
+ readonly env?: NodeJS.ProcessEnv;
14
+ readonly baseBranch?: string;
15
+ readonly detach?: boolean;
16
+ }
17
+ export declare function runKingdomForHost(input: KingdomRunInput): Promise<string>;
18
+ export declare function formatKingdomOutcome(reports: readonly VassalReport[], sessionDir: string, kingdomId: string): string;