@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,33 @@
1
+ import type { EvaluatedPattern } from "./context-pattern-explorer.js";
2
+ import type { ContextMetrics } from "./context-metrics.js";
3
+ export type PatternMode = "fast" | "safe" | "deep" | "cheap" | "creative" | "surgical";
4
+ export declare const PATTERN_MODES: readonly PatternMode[];
5
+ export interface ParetoMetrics {
6
+ readonly quality: number;
7
+ readonly tokenEconomy: number;
8
+ readonly cleanliness: number;
9
+ readonly evidenceCoverage: number;
10
+ readonly decisionConsistency: number;
11
+ readonly novelty: number;
12
+ }
13
+ export interface ParetoPattern {
14
+ readonly id: string;
15
+ readonly family: string;
16
+ readonly label: string;
17
+ readonly metrics: ParetoMetrics;
18
+ readonly modeFit: Readonly<Record<PatternMode, number>>;
19
+ readonly dominated: boolean;
20
+ readonly dominatedBy: readonly string[];
21
+ }
22
+ export interface ParetoFront {
23
+ readonly patterns: readonly ParetoPattern[];
24
+ readonly frontier: readonly ParetoPattern[];
25
+ readonly bestByMode: Readonly<Record<PatternMode, string>>;
26
+ }
27
+ export declare function toParetoMetrics(m: ContextMetrics, score: number, tokenBudget?: number): ParetoMetrics;
28
+ export declare function modeFit(metrics: ParetoMetrics, mode: PatternMode): number;
29
+ export interface ParetoOptions {
30
+ readonly tokenBudget?: number;
31
+ }
32
+ export declare function buildParetoFront(evaluated: readonly EvaluatedPattern[], opts?: ParetoOptions): ParetoFront;
33
+ export declare function formatParetoFront(front: ParetoFront): string;
@@ -0,0 +1,165 @@
1
+ // Pareto Pattern Explorer (metodo Danilov, Memory OS) -- L3: Optimization Layer.
2
+ //
3
+ // Il limite del Pattern Explorer e' che cerca UN solo qualityScore: un punteggio
4
+ // scalare nasconde i trade-off. Un pattern puo' avere qualita' altissima ma
5
+ // molti token; un altro qualita' buona ma latenza bassa; un altro coerenza
6
+ // massima ma poca copertura.
7
+ //
8
+ // Questo modulo non sceglie un vincitore unico: estrae la FRONTIERA DI PARETO su
9
+ // piu' metriche e, per ogni MODALITA' (fast/safe/deep/cheap/creative/surgical),
10
+ // indica il pattern che la serve meglio.
11
+ //
12
+ // pattern -> {quality, tokens, latency, staleRate, evidenceCoverage,
13
+ // decisionConsistency} -> frontiera -> modeFit per modalita'
14
+ //
15
+ // Modulo PURO e DETERMINISTICO: opera sui pattern gia' valutati dal Pattern
16
+ // Explorer. Nessun side-effect, nessuna rete.
17
+ export const PATTERN_MODES = [
18
+ "fast",
19
+ "safe",
20
+ "deep",
21
+ "cheap",
22
+ "creative",
23
+ "surgical",
24
+ ];
25
+ // Estrae le metriche Pareto da un pattern valutato. tokenBudget normalizza
26
+ // l'economia di token (default 4000, coerente col compiler). Deterministico.
27
+ export function toParetoMetrics(m, score, tokenBudget = 4_000) {
28
+ const quality = clamp01(score / 100);
29
+ const tokenEconomy = clamp01(1 - m.counts.packTokens / Math.max(1, tokenBudget));
30
+ const cleanliness = clamp01(1 - m.staleMemoryRate);
31
+ return {
32
+ quality,
33
+ tokenEconomy,
34
+ cleanliness,
35
+ evidenceCoverage: clamp01(m.evidenceCoverage),
36
+ decisionConsistency: m.decisionConsistency ? 1 : 0,
37
+ novelty: clamp01(m.contextUtility / 20), // utile/1k come proxy, cap a 20
38
+ };
39
+ }
40
+ // Pesi di ogni modalita' sulle metriche Pareto. Sommano a ~1 per modalita'.
41
+ const MODE_WEIGHTS = {
42
+ // fast: pochi token, latenza bassa (proxy: token economy alta) + qualita' decente.
43
+ fast: { tokenEconomy: 0.6, quality: 0.3, novelty: 0.1 },
44
+ // safe: coerenza decisioni + pulizia stale soprattutto.
45
+ safe: { decisionConsistency: 0.4, cleanliness: 0.4, quality: 0.2 },
46
+ // deep: copertura evidenza ampia + qualita'.
47
+ deep: { evidenceCoverage: 0.5, quality: 0.3, cleanliness: 0.2 },
48
+ // cheap: massima utilita' per token (economy + qualita').
49
+ cheap: { tokenEconomy: 0.5, quality: 0.4, cleanliness: 0.1 },
50
+ // creative: novelty alta, meno vincoli.
51
+ creative: { novelty: 0.5, quality: 0.3, evidenceCoverage: 0.2 },
52
+ // surgical: prove forti e poche (coverage + consistency + pulizia).
53
+ surgical: { evidenceCoverage: 0.35, decisionConsistency: 0.35, cleanliness: 0.3 },
54
+ };
55
+ // modeFit di un pattern per una modalita': somma pesata delle metriche Pareto.
56
+ export function modeFit(metrics, mode) {
57
+ const weights = MODE_WEIGHTS[mode];
58
+ let sum = 0;
59
+ for (const key of Object.keys(weights)) {
60
+ sum += (weights[key] ?? 0) * metrics[key];
61
+ }
62
+ return round(sum);
63
+ }
64
+ // Vero se `a` domina `b`: a >= b su tutte le metriche e > su almeno una.
65
+ function dominates(a, b) {
66
+ const keys = [
67
+ "quality",
68
+ "tokenEconomy",
69
+ "cleanliness",
70
+ "evidenceCoverage",
71
+ "decisionConsistency",
72
+ "novelty",
73
+ ];
74
+ let strictlyBetter = false;
75
+ for (const k of keys) {
76
+ if (a[k] < b[k] - 1e-9)
77
+ return false;
78
+ if (a[k] > b[k] + 1e-9)
79
+ strictlyBetter = true;
80
+ }
81
+ return strictlyBetter;
82
+ }
83
+ // Costruisce la frontiera di Pareto dai pattern valutati. Deterministico:
84
+ // l'ordine dei pattern e i tie-break sono stabili sull'id.
85
+ export function buildParetoFront(evaluated, opts = {}) {
86
+ const budget = opts.tokenBudget ?? 4_000;
87
+ const base = evaluated.map((e) => {
88
+ const metrics = toParetoMetrics(e.metrics, e.score, budget);
89
+ const fit = {
90
+ fast: modeFit(metrics, "fast"),
91
+ safe: modeFit(metrics, "safe"),
92
+ deep: modeFit(metrics, "deep"),
93
+ cheap: modeFit(metrics, "cheap"),
94
+ creative: modeFit(metrics, "creative"),
95
+ surgical: modeFit(metrics, "surgical"),
96
+ };
97
+ return {
98
+ id: e.id,
99
+ family: e.family,
100
+ label: e.label,
101
+ metrics,
102
+ modeFit: fit,
103
+ dominated: false,
104
+ dominatedBy: [],
105
+ };
106
+ });
107
+ // Marca i dominati.
108
+ const patterns = base.map((p) => {
109
+ const dominatedBy = [];
110
+ for (const q of base) {
111
+ if (q.id === p.id)
112
+ continue;
113
+ if (dominates(q.metrics, p.metrics))
114
+ dominatedBy.push(q.id);
115
+ }
116
+ dominatedBy.sort();
117
+ return { ...p, dominated: dominatedBy.length > 0, dominatedBy };
118
+ });
119
+ const frontier = patterns.filter((p) => !p.dominated).sort((a, b) => a.id.localeCompare(b.id));
120
+ // Miglior pattern per modalita' (tie-break su id).
121
+ const bestByMode = {};
122
+ for (const mode of PATTERN_MODES) {
123
+ let best = patterns[0];
124
+ for (const p of patterns) {
125
+ if (!best) {
126
+ best = p;
127
+ continue;
128
+ }
129
+ const d = p.modeFit[mode] - best.modeFit[mode];
130
+ if (d > 1e-9 || (Math.abs(d) <= 1e-9 && p.id.localeCompare(best.id) < 0))
131
+ best = p;
132
+ }
133
+ bestByMode[mode] = best ? best.id : "";
134
+ }
135
+ return { patterns, frontier, bestByMode };
136
+ }
137
+ // Diagnostica come blocco Danilov: frontiera + miglior pattern per modalita'.
138
+ export function formatParetoFront(front) {
139
+ const lines = [
140
+ "[CONTEXT_PARETO]",
141
+ `@frontiera: ${front.frontier.length}/${front.patterns.length} pattern non-dominati`,
142
+ "--- frontiera ---",
143
+ ];
144
+ for (const p of front.frontier) {
145
+ lines.push(`@front[${p.id}] ${p.family}: q=${p.metrics.quality} tok=${p.metrics.tokenEconomy} clean=${p.metrics.cleanliness} cov=${p.metrics.evidenceCoverage}`);
146
+ }
147
+ lines.push("--- best per modalita' ---");
148
+ for (const mode of PATTERN_MODES) {
149
+ lines.push(`@mode[${mode}]: ${front.bestByMode[mode]}`);
150
+ }
151
+ lines.push("OUTPUT: scegli il pattern in base alla modalita' del task, non un solo best globale.");
152
+ return lines.join("\n");
153
+ }
154
+ function clamp01(v) {
155
+ if (Number.isNaN(v))
156
+ return 0;
157
+ if (v < 0)
158
+ return 0;
159
+ if (v > 1)
160
+ return 1;
161
+ return v;
162
+ }
163
+ function round(v) {
164
+ return Math.round(v * 1000) / 1000;
165
+ }
@@ -0,0 +1,41 @@
1
+ import { type TuneConfig, type QualityTargets } from "./context-autotuner.js";
2
+ import type { ContextMetrics } from "./context-metrics.js";
3
+ export type CompileWithConfigAsync = (config: TuneConfig) => ContextMetrics | Promise<ContextMetrics>;
4
+ export type PatternFamily = "baseline" | "greedy" | "preset" | "perturbation" | "restart";
5
+ export interface ConfigPattern {
6
+ readonly id: string;
7
+ readonly family: PatternFamily;
8
+ readonly label: string;
9
+ readonly config: TuneConfig;
10
+ }
11
+ export interface EvaluatedPattern extends ConfigPattern {
12
+ readonly metrics: ContextMetrics;
13
+ readonly score: number;
14
+ readonly delta: number;
15
+ readonly improves: boolean;
16
+ }
17
+ export interface PatternRanking {
18
+ readonly baselineScore: number;
19
+ readonly ranked: readonly EvaluatedPattern[];
20
+ readonly improvements: readonly EvaluatedPattern[];
21
+ readonly best: EvaluatedPattern;
22
+ readonly greedyScore: number;
23
+ readonly deepGain: number;
24
+ readonly evaluated: number;
25
+ }
26
+ export interface ExploreOptions {
27
+ readonly baseConfig?: TuneConfig;
28
+ readonly targets?: QualityTargets;
29
+ readonly perturbations?: number;
30
+ readonly seed?: number;
31
+ readonly multiStart?: boolean;
32
+ readonly greedyRounds?: number;
33
+ }
34
+ export declare function buildPatterns(compileSyncForGreedy: (config: TuneConfig) => ContextMetrics, opts?: ExploreOptions): ConfigPattern[];
35
+ export declare function exploreContextPatterns(compile: CompileWithConfigAsync, opts?: ExploreOptions & {
36
+ readonly compileSyncForGreedy?: (config: TuneConfig) => ContextMetrics;
37
+ }): Promise<PatternRanking>;
38
+ export declare function formatPatternRanking(r: PatternRanking, opts?: {
39
+ readonly top?: number;
40
+ }): string;
41
+ export declare function patternRankingSummary(r: PatternRanking): string;
@@ -0,0 +1,276 @@
1
+ // Context Pattern Explorer (metodo Danilov, Memory OS) -- L4: l'auto-miglioramento DEEP.
2
+ //
3
+ // Il limite dell'autotuner (context-feedback-loop) e' che esplora UNA sola
4
+ // traiettoria greedy: parte da una config, applica la diagnosi deterministica e
5
+ // converge al primo OTTIMO LOCALE che incontra. Bastano metriche con piu' bacini
6
+ // di attrazione perche' resti incastrato e NON veda config migliori altrove.
7
+ //
8
+ // Questo modulo va oltre il KPI: esplora in PROFONDITA' lo spazio di config
9
+ // generando MOLTI pattern candidati in PARALLELO (preset architetturali +
10
+ // perturbazioni deterministiche + l'esito greedy), valutandoli TUTTI con la
11
+ // stessa compile, e CLASSIFICANDOLI in una lista ordinata di migliorie. La lista
12
+ // non e' solo il vincitore: e' la mappa dei pattern che migliorano l'architettura
13
+ // del context, ognuno con il suo delta misurato, cosi' le migliorie sono
14
+ // ESPLICITE, in lista e classificate.
15
+ //
16
+ // genera pattern[] --(parallelo)--> compile+score ognuno --> classifica per score
17
+ // -> lista migliorie (delta vs baseline)
18
+ //
19
+ // Garanzie:
20
+ // - DETERMINISMO: stessa baseline + stessa compile => stessa lista (PRNG seedato).
21
+ // - DOMINANZA: il vincitore non e' mai PEGGIORE del greedy (greedy e' incluso
22
+ // come pattern, quindi la lista lo contiene e il top >= greedy).
23
+ // - PARALLELISMO: i pattern sono indipendenti (nessuno dipende dall'altro), la
24
+ // valutazione e' mappata in parallelo (Promise.all) senza ordine implicito.
25
+ //
26
+ // Modulo PURO rispetto alla compile iniettata: nessun side-effect proprio, niente
27
+ // provider, niente rete. La compile incapsula l'unico mondo esterno (gli store).
28
+ import { qualityScore, runFeedbackLoopGreedy, DEFAULT_CONFIG, DEFAULT_TARGETS, WEIGHT_BOUNDS, HIGH_BOUNDS, MID_BOUNDS, } from "./context-autotuner.js";
29
+ // --- PRNG deterministico (mulberry32) ---------------------------------------
30
+ // Generatore pseudo-casuale seedato: le perturbazioni devono essere RIPRODUCIBILI
31
+ // (a parita' di seed, stessi pattern), altrimenti l'esploratore non e' deterministico.
32
+ function mulberry32(seed) {
33
+ let a = seed >>> 0;
34
+ return () => {
35
+ a |= 0;
36
+ a = (a + 0x6d2b79f5) | 0;
37
+ let t = Math.imul(a ^ (a >>> 15), 1 | a);
38
+ t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
39
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
40
+ };
41
+ }
42
+ function clamp(v, lo, hi) {
43
+ if (!Number.isFinite(v))
44
+ return lo;
45
+ return Math.max(lo, Math.min(hi, v));
46
+ }
47
+ function round3(v) {
48
+ return Math.round(v * 1000) / 1000;
49
+ }
50
+ // Normalizza una config dentro i range sani (stessi bound dell'autotuner) e
51
+ // mantiene l'invariante mid < high. Ogni pattern generato passa di qui.
52
+ function sanitize(config) {
53
+ const w = config.weights;
54
+ const weights = {
55
+ relevance: clamp(round3(w.relevance), WEIGHT_BOUNDS.relevance[0], WEIGHT_BOUNDS.relevance[1]),
56
+ dependency: clamp(round3(w.dependency), WEIGHT_BOUNDS.dependency[0], WEIGHT_BOUNDS.dependency[1]),
57
+ trust: clamp(round3(w.trust), WEIGHT_BOUNDS.trust[0], WEIGHT_BOUNDS.trust[1]),
58
+ freshness: clamp(round3(w.freshness), WEIGHT_BOUNDS.freshness[0], WEIGHT_BOUNDS.freshness[1]),
59
+ novelty: clamp(round3(w.novelty), WEIGHT_BOUNDS.novelty[0], WEIGHT_BOUNDS.novelty[1]),
60
+ conflictRisk: clamp(round3(w.conflictRisk), WEIGHT_BOUNDS.conflictRisk[0], WEIGHT_BOUNDS.conflictRisk[1]),
61
+ tokenCost: clamp(round3(w.tokenCost), WEIGHT_BOUNDS.tokenCost[0], WEIGHT_BOUNDS.tokenCost[1]),
62
+ };
63
+ const high = clamp(round3(config.thresholds.high), HIGH_BOUNDS[0], HIGH_BOUNDS[1]);
64
+ const midRaw = clamp(round3(config.thresholds.mid), MID_BOUNDS[0], MID_BOUNDS[1]);
65
+ const mid = Math.min(midRaw, round3(high - 0.1));
66
+ return { weights, thresholds: { high, mid } };
67
+ }
68
+ // --- archetipi (preset) ------------------------------------------------------
69
+ // Ogni preset incarna un'IPOTESI architetturale diversa sul context. Sono i
70
+ // "bacini" che il greedy single-path da solo non visiterebbe mai. Partendo da
71
+ // punti cosi' diversi, l'esplorazione copre regioni distinte dello spazio.
72
+ function presetPatterns(base) {
73
+ const mk = (id, label, patch, th) => ({
74
+ id,
75
+ family: "preset",
76
+ label,
77
+ config: sanitize({
78
+ weights: { ...base.weights, ...patch },
79
+ thresholds: { ...base.thresholds, ...th },
80
+ }),
81
+ });
82
+ return [
83
+ // Corpo-pesante: piu' candidati entrano come evidenza (soglia HIGH bassa,
84
+ // rilevanza alta, costo token basso). Ipotesi: serve piu' corpo.
85
+ mk("preset-evidence-heavy", "corpo-pesante: piu' evidenza, soglia HIGH bassa", { relevance: 1.6, tokenCost: 0.1 }, { high: 0.8 }),
86
+ // Costo-pesante: prompt magro, paga caro ogni token (soglia HIGH alta).
87
+ // Ipotesi: il context e' gonfio, comprimere migliora la densita'.
88
+ mk("preset-cost-lean", "costo-pesante: prompt magro, soglia HIGH alta", { tokenCost: 0.6, relevance: 1.2 }, { high: 1.5 }),
89
+ // Conflict-pesante: caccia aggressiva agli obsoleti/contraddittori.
90
+ // Ipotesi: il rumore stale e' il problema dominante.
91
+ mk("preset-conflict-strict", "conflict-pesante: caccia gli obsoleti", { conflictRisk: 2.2, trust: 1.0 }, {}),
92
+ // Dipendenza-pesante: privilegia i nodi collegati (decisioni, prerequisiti).
93
+ // Ipotesi: la coerenza del grafo conta piu' della freschezza.
94
+ mk("preset-dependency-first", "dipendenza-pesante: privilegia il grafo", { dependency: 1.4, trust: 1.0, freshness: 0.3 }, {}),
95
+ // Freschezza-pesante: il recente domina (freshness e novelty alte).
96
+ // Ipotesi: il lavoro e' molto dinamico, il vecchio e' rumore.
97
+ mk("preset-recency-first", "freschezza-pesante: il recente domina", { freshness: 0.9, novelty: 0.8 }, {}),
98
+ // Bilanciato-largo: tutti i fattori a peso medio-alto, soglie centrali.
99
+ // Ipotesi: nessun fattore deve dominare.
100
+ mk("preset-balanced-wide", "bilanciato-largo: nessun fattore domina", { relevance: 1.3, dependency: 1.0, trust: 0.8, freshness: 0.6, novelty: 0.6, conflictRisk: 1.3, tokenCost: 0.25 }, { high: 1.0, mid: 0.45 }),
101
+ ];
102
+ }
103
+ // --- perturbazioni (search casuale deterministica) --------------------------
104
+ // Genera N perturbazioni attorno a una config: jitter gaussiano-ish su ogni leva.
105
+ // Esplora il vicinato della baseline in piu' direzioni CONTEMPORANEAMENTE (non
106
+ // la sola direzione del gradiente greedy), cosi' scopre migliorie laterali.
107
+ function perturbationPatterns(base, count, seed) {
108
+ const rnd = mulberry32(seed);
109
+ const out = [];
110
+ const jitter = (v, span) => v + (rnd() - 0.5) * 2 * span;
111
+ for (let i = 0; i < count; i++) {
112
+ const w = base.weights;
113
+ const config = sanitize({
114
+ weights: {
115
+ relevance: jitter(w.relevance, 0.4),
116
+ dependency: jitter(w.dependency, 0.35),
117
+ trust: jitter(w.trust, 0.3),
118
+ freshness: jitter(w.freshness, 0.3),
119
+ novelty: jitter(w.novelty, 0.3),
120
+ conflictRisk: jitter(w.conflictRisk, 0.5),
121
+ tokenCost: jitter(w.tokenCost, 0.2),
122
+ },
123
+ thresholds: {
124
+ high: jitter(base.thresholds.high, 0.25),
125
+ mid: jitter(base.thresholds.mid, 0.15),
126
+ },
127
+ });
128
+ out.push({ id: `perturb-${i + 1}`, family: "perturbation", label: `perturbazione #${i + 1} attorno alla baseline`, config });
129
+ }
130
+ return out;
131
+ }
132
+ // Costruisce l'INSIEME dei pattern candidati (senza valutarli): baseline +
133
+ // greedy + preset + perturbazioni + restart. Esposta per i test (verifica che
134
+ // le famiglie ci siano tutte e siano deterministiche).
135
+ export function buildPatterns(compileSyncForGreedy, opts = {}) {
136
+ const base = sanitize(opts.baseConfig ?? DEFAULT_CONFIG);
137
+ const targets = opts.targets ?? DEFAULT_TARGETS;
138
+ const perturbations = opts.perturbations ?? 8;
139
+ const seed = opts.seed ?? 0x5eed;
140
+ const greedyRounds = opts.greedyRounds ?? 6;
141
+ const patterns = [];
142
+ // 1) Baseline: il riferimento (delta 0 per definizione).
143
+ patterns.push({ id: "baseline", family: "baseline", label: "config di partenza (riferimento)", config: base });
144
+ // 2) Greedy: l'esito dell'autotuner single-path = stato dell'arte attuale.
145
+ const greedy = runFeedbackLoopGreedy(compileSyncForGreedy, { config: base, targets, maxRounds: greedyRounds });
146
+ patterns.push({ id: "greedy", family: "greedy", label: "esito autotuner greedy (single-path)", config: sanitize(greedy.bestConfig) });
147
+ // 3) Preset: archetipi architetturali (bacini lontani dalla baseline).
148
+ const presets = presetPatterns(base);
149
+ patterns.push(...presets);
150
+ // 4) Perturbazioni: vicinato casuale deterministico della baseline.
151
+ patterns.push(...perturbationPatterns(base, perturbations, seed));
152
+ // 5) Restart (multi-start): greedy ripartito da OGNI preset. Scava i bacini
153
+ // dei preset col gradiente, spesso trovando ottimi locali migliori.
154
+ if (opts.multiStart !== false) {
155
+ for (const p of presets) {
156
+ const r = runFeedbackLoopGreedy(compileSyncForGreedy, { config: p.config, targets, maxRounds: greedyRounds });
157
+ patterns.push({
158
+ id: `restart-${p.id}`,
159
+ family: "restart",
160
+ label: `greedy ripartito da ${p.label}`,
161
+ config: sanitize(r.bestConfig),
162
+ });
163
+ }
164
+ }
165
+ // Dedup per config identica (preset/perturbazioni possono collassare sullo
166
+ // stesso punto dopo il sanitize): tieni la prima (famiglia piu' informativa).
167
+ return dedupeByConfig(patterns);
168
+ }
169
+ // Dedup stabile per chiave-config: due pattern con identici pesi+soglie sono lo
170
+ // stesso punto dello spazio; ne basta uno (il primo, gia' nell'ordine di priorita').
171
+ // ECCEZIONE: baseline e greedy NON si deduplicano mai, anche se coincidono col
172
+ // punto di partenza: sono riferimenti semantici (il greedy che non si muove e'
173
+ // un'INFORMAZIONE, dice che il single-path e' gia' fermo li').
174
+ function dedupeByConfig(list) {
175
+ const seen = new Set();
176
+ const out = [];
177
+ for (const p of list) {
178
+ const keep = p.family === "baseline" || p.family === "greedy";
179
+ const key = configKey(p.config);
180
+ if (!keep && seen.has(key))
181
+ continue;
182
+ seen.add(key);
183
+ out.push(p);
184
+ }
185
+ return out;
186
+ }
187
+ function configKey(c) {
188
+ const w = c.weights;
189
+ return [w.relevance, w.dependency, w.trust, w.freshness, w.novelty, w.conflictRisk, w.tokenCost, c.thresholds.high, c.thresholds.mid]
190
+ .map((n) => n.toFixed(3))
191
+ .join("|");
192
+ }
193
+ // --- valutazione PARALLELA + classifica -------------------------------------
194
+ // Esegue l'esplorazione DEEP: genera i pattern, li valuta TUTTI in parallelo con
195
+ // la compile iniettata, e li CLASSIFICA in una lista ordinata di migliorie.
196
+ //
197
+ // Il greedy interno serve una compile sincrona; per il caso reale (compile
198
+ // asincrona/costosa) passa anche `compileSyncForGreedy`, una versione sincrona
199
+ // usata SOLO per derivare i punti di partenza greedy/restart. Se ometti quella
200
+ // sincrona e la compile e' sincrona, viene riusata per entrambi.
201
+ export async function exploreContextPatterns(compile, opts = {}) {
202
+ const targets = opts.targets ?? DEFAULT_TARGETS;
203
+ // Per generare i punti greedy serve una compile sincrona. Se non fornita,
204
+ // proviamo a usare `compile` assumendola sincrona (caso test/puro).
205
+ const syncCompile = opts.compileSyncForGreedy ?? ((config) => {
206
+ const r = compile(config);
207
+ if (r instanceof Promise) {
208
+ throw new Error("exploreContextPatterns: compile asincrona richiede compileSyncForGreedy per i punti greedy/restart");
209
+ }
210
+ return r;
211
+ });
212
+ const patterns = buildPatterns(syncCompile, opts);
213
+ // VALUTAZIONE IN PARALLELO: ogni pattern e' indipendente: nessuno usa il
214
+ // risultato di un altro. Promise.all li mappa tutti insieme.
215
+ const evaluated = await Promise.all(patterns.map(async (p) => {
216
+ const metrics = await compile(p.config);
217
+ const score = qualityScore(metrics, targets);
218
+ return { ...p, metrics, score, delta: 0, improves: false };
219
+ }));
220
+ // Baseline score = quello del pattern "baseline".
221
+ const baselinePat = evaluated.find((e) => e.id === "baseline");
222
+ const baselineScore = baselinePat ? baselinePat.score : Math.max(0, ...evaluated.map((e) => e.score));
223
+ // Calcola delta e flag miglioria rispetto alla baseline.
224
+ const withDelta = evaluated.map((e) => {
225
+ const delta = e.score - baselineScore;
226
+ return { ...e, delta, improves: delta > 0 };
227
+ });
228
+ // CLASSIFICA: score decrescente, poi delta, poi id stabile (determinismo).
229
+ const ranked = [...withDelta].sort((a, b) => {
230
+ if (b.score !== a.score)
231
+ return b.score - a.score;
232
+ if (b.delta !== a.delta)
233
+ return b.delta - a.delta;
234
+ return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
235
+ });
236
+ const improvements = ranked.filter((e) => e.improves);
237
+ const greedyPat = ranked.find((e) => e.family === "greedy");
238
+ const greedyScore = greedyPat ? greedyPat.score : baselineScore;
239
+ const best = ranked[0];
240
+ const deepGain = best.score - greedyScore;
241
+ return {
242
+ baselineScore,
243
+ ranked,
244
+ improvements,
245
+ best,
246
+ greedyScore,
247
+ deepGain,
248
+ evaluated: ranked.length,
249
+ };
250
+ }
251
+ // --- diagnostica / output Danilov -------------------------------------------
252
+ // Formatta la classifica come blocco Danilov: la LISTA delle migliorie scoperte,
253
+ // classificate, con famiglia/delta. E' la consegna richiesta dal goal: migliorie
254
+ // in lista e classificate, oltre il solo KPI vincente.
255
+ export function formatPatternRanking(r, opts) {
256
+ const top = opts?.top ?? r.ranked.length;
257
+ const lines = [
258
+ "[CONTEXT_PATTERN_EXPLORER]",
259
+ `@esplorazione: pattern_valutati=${r.evaluated} (in parallelo)`,
260
+ `@baseline: score=${r.baselineScore}`,
261
+ `@greedy: score=${r.greedyScore} (single-path, stato dell'arte)`,
262
+ `@deep: best=${r.best.score} via ${r.best.family}:${r.best.id} deep_gain_su_greedy=${r.deepGain >= 0 ? "+" : ""}${r.deepGain}`,
263
+ `@migliorie: ${r.improvements.length} pattern migliorano la baseline`,
264
+ "--- classifica (score desc) ---",
265
+ ];
266
+ r.ranked.slice(0, top).forEach((e, i) => {
267
+ const tag = e.delta > 0 ? `+${e.delta}` : `${e.delta}`;
268
+ lines.push(`@rank[${i + 1}] ${e.family}:${e.id} score=${e.score} (delta ${tag}) [ ${e.label} ]`);
269
+ });
270
+ lines.push("OUTPUT: adotta best.config come pesi/soglie; la lista classifica le migliorie alternative.");
271
+ return lines.join("\n");
272
+ }
273
+ // Vista compatta in una riga (per log/TUI).
274
+ export function patternRankingSummary(r) {
275
+ return `deep-explore: ${r.evaluated} pattern, ${r.improvements.length} migliorie, best ${r.best.family}:${r.best.id} score=${r.best.score} (deep_gain ${r.deepGain >= 0 ? "+" : ""}${r.deepGain} su greedy)`;
276
+ }
@@ -0,0 +1,32 @@
1
+ import type { ContextScore } from "./context-candidate.js";
2
+ import type { ContextMetrics } from "./context-metrics.js";
3
+ import type { LintReport } from "./context-lint.js";
4
+ export interface RegretComponents {
5
+ readonly missedRelevantEvidence: number;
6
+ readonly staleLeaks: number;
7
+ readonly duplicateTokens: number;
8
+ readonly wrongLayoutPenalty: number;
9
+ readonly unnecessaryRecallCost: number;
10
+ }
11
+ export interface ContextRegret {
12
+ readonly regret: number;
13
+ readonly components: RegretComponents;
14
+ }
15
+ export interface RegretWeights {
16
+ readonly missedRelevantEvidence: number;
17
+ readonly staleLeaks: number;
18
+ readonly duplicateTokens: number;
19
+ readonly wrongLayoutPenalty: number;
20
+ readonly unnecessaryRecallCost: number;
21
+ }
22
+ export declare const DEFAULT_REGRET_WEIGHTS: RegretWeights;
23
+ export interface RegretInput {
24
+ readonly scored: readonly ContextScore[];
25
+ readonly report: LintReport;
26
+ readonly metrics: ContextMetrics;
27
+ readonly includedIds?: ReadonlySet<string>;
28
+ readonly recallPlannedButUnused?: boolean;
29
+ readonly weights?: RegretWeights;
30
+ }
31
+ export declare function computeContextRegret(input: RegretInput): ContextRegret;
32
+ export declare function formatContextRegret(r: ContextRegret): string;
@@ -0,0 +1,93 @@
1
+ // Context Regret (metodo Danilov, Memory OS) -- nuova metrica centrale.
2
+ //
3
+ // qualityScore misura quanto e' buono un prompt. context_regret misura quanto
4
+ // hai PERSO scegliendo questo prompt invece del migliore possibile osservato:
5
+ //
6
+ // regret = bestKnownUtility - actualUtility
7
+ //
8
+ // Versione pratica, scomposta in componenti misurabili sul contesto compilato:
9
+ //
10
+ // context_regret =
11
+ // missed_relevant_evidence (prove rilevanti rimaste fuori)
12
+ // + stale_leaks (obsoleti entrati)
13
+ // + duplicate_tokens (ridondanza)
14
+ // + wrong_layout_penalty (layout inefficace)
15
+ // + unnecessary_recall_cost (recall non necessario)
16
+ //
17
+ // E' piu' forte del solo qualityScore perche' misura il COSTO dell'architettura
18
+ // scelta, e alimenta l'aggiornamento di baseline / Pareto / pattern.
19
+ //
20
+ // Modulo PURO e DETERMINISTICO: opera su ContextScore + report di lint, nessun
21
+ // side-effect, nessuna rete.
22
+ export const DEFAULT_REGRET_WEIGHTS = {
23
+ missedRelevantEvidence: 1.0,
24
+ staleLeaks: 1.0,
25
+ duplicateTokens: 0.5,
26
+ wrongLayoutPenalty: 0.4,
27
+ unnecessaryRecallCost: 0.3,
28
+ };
29
+ // Stima il regret del contesto compilato. Deterministico.
30
+ export function computeContextRegret(input) {
31
+ const weights = input.weights ?? DEFAULT_REGRET_WEIGHTS;
32
+ const scored = input.scored;
33
+ // missed_relevant_evidence: dei candidati HIGH (corpo-degni), quanto VALORE e'
34
+ // rimasto LOW/escluso. Approssimazione: quota di score positivo non incluso.
35
+ const highValue = scored.filter((s) => s.tier === "high");
36
+ const included = input.includedIds
37
+ ? scored.filter((score) => input.includedIds?.has(score.candidate.id))
38
+ : scored.filter((s) => s.tier !== "low");
39
+ const totalPositive = scored.reduce((acc, s) => acc + Math.max(0, s.score), 0) || 1;
40
+ const includedPositive = included.reduce((acc, s) => acc + Math.max(0, s.score), 0);
41
+ const missedRelevantEvidence = clamp01(1 - includedPositive / totalPositive);
42
+ // stale_leaks: la quota stale gia' calcolata dalle metriche.
43
+ const staleLeaks = clamp01(input.metrics.staleMemoryRate);
44
+ // duplicate_tokens: la novelty media bassa tra gli inclusi indica ridondanza.
45
+ const avgNovelty = included.length > 0
46
+ ? included.reduce((acc, s) => acc + s.factors.novelty, 0) / included.length
47
+ : 1;
48
+ const duplicateTokens = clamp01(1 - avgNovelty);
49
+ // wrong_layout_penalty: i findings del lint normalizzati (piu' problemi = peggio).
50
+ const findings = input.report.findings?.length ?? 0;
51
+ const wrongLayoutPenalty = clamp01(findings / 5);
52
+ // unnecessary_recall_cost: 1 se si e' pianificato recall poi non servito.
53
+ const unnecessaryRecallCost = input.recallPlannedButUnused ? 1 : 0;
54
+ const components = {
55
+ missedRelevantEvidence,
56
+ staleLeaks,
57
+ duplicateTokens,
58
+ wrongLayoutPenalty,
59
+ unnecessaryRecallCost,
60
+ };
61
+ const regret = round(weights.missedRelevantEvidence * components.missedRelevantEvidence +
62
+ weights.staleLeaks * components.staleLeaks +
63
+ weights.duplicateTokens * components.duplicateTokens +
64
+ weights.wrongLayoutPenalty * components.wrongLayoutPenalty +
65
+ weights.unnecessaryRecallCost * components.unnecessaryRecallCost);
66
+ return { regret, components };
67
+ }
68
+ // Diagnostica come blocco Danilov.
69
+ export function formatContextRegret(r) {
70
+ const c = r.components;
71
+ return [
72
+ "[CONTEXT_REGRET]",
73
+ `@regret[totale]: ${r.regret}`,
74
+ `@comp[missed_evidence]: ${round(c.missedRelevantEvidence)}`,
75
+ `@comp[stale_leaks]: ${round(c.staleLeaks)}`,
76
+ `@comp[duplicate_tokens]: ${round(c.duplicateTokens)}`,
77
+ `@comp[wrong_layout]: ${round(c.wrongLayoutPenalty)}`,
78
+ `@comp[unnecessary_recall]: ${round(c.unnecessaryRecallCost)}`,
79
+ "OUTPUT: regret basso = il prompt si avvicina al migliore osservato; usa il delta per aggiornare baseline/Pareto.",
80
+ ].join("\n");
81
+ }
82
+ function clamp01(v) {
83
+ if (Number.isNaN(v))
84
+ return 0;
85
+ if (v < 0)
86
+ return 0;
87
+ if (v > 1)
88
+ return 1;
89
+ return v;
90
+ }
91
+ function round(v) {
92
+ return Math.round(v * 1000) / 1000;
93
+ }
@@ -0,0 +1,22 @@
1
+ import { ContextSearchIndex } from "./context-search-index.js";
2
+ import type { ContextCandidate } from "./context-candidate.js";
3
+ import { type SynonymIndex } from "./lexical-search.js";
4
+ export interface RetrieveOptions {
5
+ readonly index?: ContextSearchIndex;
6
+ /** Reference path for rollback and ranking equivalence checks. */
7
+ readonly legacy?: boolean;
8
+ readonly query: string;
9
+ readonly limit?: number;
10
+ readonly expandLinks?: boolean;
11
+ readonly minScore?: number;
12
+ readonly synonyms?: SynonymIndex;
13
+ readonly dropSuperseded?: boolean;
14
+ }
15
+ export interface RetrievedCandidate {
16
+ readonly candidate: ContextCandidate;
17
+ readonly lexScore: number;
18
+ readonly graphScore: number;
19
+ readonly retrievalScore: number;
20
+ readonly viaLink: boolean;
21
+ }
22
+ export declare function retrieve(pool: readonly ContextCandidate[], opts: RetrieveOptions): readonly RetrievedCandidate[];