nodebench-mcp 2.70.0 → 3.0.1

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 (361) hide show
  1. package/README.md +95 -41
  2. package/dist/agents/alertRouter.d.ts +38 -0
  3. package/dist/agents/alertRouter.js +151 -0
  4. package/dist/agents/alertRouter.js.map +1 -0
  5. package/dist/agents/entityMemory.d.ts +40 -0
  6. package/dist/agents/entityMemory.js +64 -0
  7. package/dist/agents/entityMemory.js.map +1 -0
  8. package/dist/agents/subAgents.d.ts +35 -0
  9. package/dist/agents/subAgents.js +62 -0
  10. package/dist/agents/subAgents.js.map +1 -0
  11. package/dist/benchmarks/benchmarkRunner.js +14 -0
  12. package/dist/benchmarks/benchmarkRunner.js.map +1 -1
  13. package/dist/benchmarks/chainEval.js +107 -0
  14. package/dist/benchmarks/chainEval.js.map +1 -1
  15. package/dist/benchmarks/llmJudgeEval.js +85 -0
  16. package/dist/benchmarks/llmJudgeEval.js.map +1 -1
  17. package/dist/benchmarks/searchQualityEval.js +118 -5
  18. package/dist/benchmarks/searchQualityEval.js.map +1 -1
  19. package/dist/cli/search.d.ts +13 -0
  20. package/dist/cli/search.js +130 -0
  21. package/dist/cli/search.js.map +1 -0
  22. package/dist/dashboard/operatingDashboardHtml.js +2 -1
  23. package/dist/dashboard/operatingDashboardHtml.js.map +1 -1
  24. package/dist/dashboard/operatingServer.js +3 -2
  25. package/dist/dashboard/operatingServer.js.map +1 -1
  26. package/dist/db.d.ts +6 -2
  27. package/dist/db.js +521 -6
  28. package/dist/db.js.map +1 -1
  29. package/dist/index.js +349 -67
  30. package/dist/index.js.map +1 -1
  31. package/dist/packageInfo.d.ts +3 -0
  32. package/dist/packageInfo.js +32 -0
  33. package/dist/packageInfo.js.map +1 -0
  34. package/dist/profiler/behaviorStore.d.ts +97 -0
  35. package/dist/profiler/behaviorStore.js +276 -0
  36. package/dist/profiler/behaviorStore.js.map +1 -0
  37. package/dist/profiler/eventCollector.d.ts +119 -0
  38. package/dist/profiler/eventCollector.js +267 -0
  39. package/dist/profiler/eventCollector.js.map +1 -0
  40. package/dist/profiler/index.d.ts +15 -0
  41. package/dist/profiler/index.js +16 -0
  42. package/dist/profiler/index.js.map +1 -0
  43. package/dist/profiler/mcpProxy.d.ts +49 -0
  44. package/dist/profiler/mcpProxy.js +123 -0
  45. package/dist/profiler/mcpProxy.js.map +1 -0
  46. package/dist/profiler/modelRouter.d.ts +30 -0
  47. package/dist/profiler/modelRouter.js +99 -0
  48. package/dist/profiler/modelRouter.js.map +1 -0
  49. package/dist/profiler/otelReceiver.d.ts +17 -0
  50. package/dist/profiler/otelReceiver.js +62 -0
  51. package/dist/profiler/otelReceiver.js.map +1 -0
  52. package/dist/profiler/proofEngine.d.ts +41 -0
  53. package/dist/profiler/proofEngine.js +93 -0
  54. package/dist/profiler/proofEngine.js.map +1 -0
  55. package/dist/profiler/workflowTemplates.d.ts +41 -0
  56. package/dist/profiler/workflowTemplates.js +95 -0
  57. package/dist/profiler/workflowTemplates.js.map +1 -0
  58. package/dist/providers/localMemoryProvider.js +3 -2
  59. package/dist/providers/localMemoryProvider.js.map +1 -1
  60. package/dist/runtimeConfig.d.ts +11 -0
  61. package/dist/runtimeConfig.js +27 -0
  62. package/dist/runtimeConfig.js.map +1 -0
  63. package/dist/sandboxApi.js +2 -1
  64. package/dist/sandboxApi.js.map +1 -1
  65. package/dist/security/auditLog.js +8 -3
  66. package/dist/security/auditLog.js.map +1 -1
  67. package/dist/subconscious/blocks.d.ts +43 -0
  68. package/dist/subconscious/blocks.js +158 -0
  69. package/dist/subconscious/blocks.js.map +1 -0
  70. package/dist/subconscious/classifier.d.ts +22 -0
  71. package/dist/subconscious/classifier.js +118 -0
  72. package/dist/subconscious/classifier.js.map +1 -0
  73. package/dist/subconscious/graphEngine.d.ts +65 -0
  74. package/dist/subconscious/graphEngine.js +234 -0
  75. package/dist/subconscious/graphEngine.js.map +1 -0
  76. package/dist/subconscious/index.d.ts +19 -0
  77. package/dist/subconscious/index.js +20 -0
  78. package/dist/subconscious/index.js.map +1 -0
  79. package/dist/subconscious/tools.d.ts +5 -0
  80. package/dist/subconscious/tools.js +255 -0
  81. package/dist/subconscious/tools.js.map +1 -0
  82. package/dist/subconscious/whisperPolicy.d.ts +20 -0
  83. package/dist/subconscious/whisperPolicy.js +171 -0
  84. package/dist/subconscious/whisperPolicy.js.map +1 -0
  85. package/dist/sweep/engine.d.ts +27 -0
  86. package/dist/sweep/engine.js +244 -0
  87. package/dist/sweep/engine.js.map +1 -0
  88. package/dist/sweep/index.d.ts +9 -0
  89. package/dist/sweep/index.js +8 -0
  90. package/dist/sweep/index.js.map +1 -0
  91. package/dist/sweep/sources/github_trending.d.ts +6 -0
  92. package/dist/sweep/sources/github_trending.js +37 -0
  93. package/dist/sweep/sources/github_trending.js.map +1 -0
  94. package/dist/sweep/sources/hackernews.d.ts +7 -0
  95. package/dist/sweep/sources/hackernews.js +57 -0
  96. package/dist/sweep/sources/hackernews.js.map +1 -0
  97. package/dist/sweep/sources/openbb_finance.d.ts +9 -0
  98. package/dist/sweep/sources/openbb_finance.js +46 -0
  99. package/dist/sweep/sources/openbb_finance.js.map +1 -0
  100. package/dist/sweep/sources/producthunt.d.ts +6 -0
  101. package/dist/sweep/sources/producthunt.js +41 -0
  102. package/dist/sweep/sources/producthunt.js.map +1 -0
  103. package/dist/sweep/sources/web_signals.d.ts +7 -0
  104. package/dist/sweep/sources/web_signals.js +63 -0
  105. package/dist/sweep/sources/web_signals.js.map +1 -0
  106. package/dist/sweep/sources/yahoo_finance.d.ts +6 -0
  107. package/dist/sweep/sources/yahoo_finance.js +47 -0
  108. package/dist/sweep/sources/yahoo_finance.js.map +1 -0
  109. package/dist/sweep/types.d.ts +50 -0
  110. package/dist/sweep/types.js +9 -0
  111. package/dist/sweep/types.js.map +1 -0
  112. package/dist/sync/founderEpisodeStore.d.ts +98 -0
  113. package/dist/sync/founderEpisodeStore.js +230 -0
  114. package/dist/sync/founderEpisodeStore.js.map +1 -0
  115. package/dist/sync/hyperloopArchive.d.ts +51 -0
  116. package/dist/sync/hyperloopArchive.js +153 -0
  117. package/dist/sync/hyperloopArchive.js.map +1 -0
  118. package/dist/sync/hyperloopEval.d.ts +123 -0
  119. package/dist/sync/hyperloopEval.js +389 -0
  120. package/dist/sync/hyperloopEval.js.map +1 -0
  121. package/dist/sync/protocol.d.ts +172 -0
  122. package/dist/sync/protocol.js +9 -0
  123. package/dist/sync/protocol.js.map +1 -0
  124. package/dist/sync/sessionMemory.d.ts +47 -0
  125. package/dist/sync/sessionMemory.js +138 -0
  126. package/dist/sync/sessionMemory.js.map +1 -0
  127. package/dist/sync/store.d.ts +384 -0
  128. package/dist/sync/store.js +1435 -0
  129. package/dist/sync/store.js.map +1 -0
  130. package/dist/sync/syncBridgeClient.d.ts +30 -0
  131. package/dist/sync/syncBridgeClient.js +172 -0
  132. package/dist/sync/syncBridgeClient.js.map +1 -0
  133. package/dist/tools/autonomousDeliveryTools.d.ts +2 -0
  134. package/dist/tools/autonomousDeliveryTools.js +1104 -0
  135. package/dist/tools/autonomousDeliveryTools.js.map +1 -0
  136. package/dist/tools/boilerplateTools.js +10 -9
  137. package/dist/tools/boilerplateTools.js.map +1 -1
  138. package/dist/tools/claudeCodeIngestTools.d.ts +10 -0
  139. package/dist/tools/claudeCodeIngestTools.js +347 -0
  140. package/dist/tools/claudeCodeIngestTools.js.map +1 -0
  141. package/dist/tools/coreWorkflowTools.d.ts +2 -0
  142. package/dist/tools/coreWorkflowTools.js +488 -0
  143. package/dist/tools/coreWorkflowTools.js.map +1 -0
  144. package/dist/tools/deltaTools.d.ts +15 -0
  145. package/dist/tools/deltaTools.js +1522 -0
  146. package/dist/tools/deltaTools.js.map +1 -0
  147. package/dist/tools/documentationTools.js +2 -1
  148. package/dist/tools/documentationTools.js.map +1 -1
  149. package/dist/tools/entityLookupTools.d.ts +14 -0
  150. package/dist/tools/entityLookupTools.js +159 -0
  151. package/dist/tools/entityLookupTools.js.map +1 -0
  152. package/dist/tools/entityTemporalTools.d.ts +12 -0
  153. package/dist/tools/entityTemporalTools.js +330 -0
  154. package/dist/tools/entityTemporalTools.js.map +1 -0
  155. package/dist/tools/founderLocalPipeline.d.ts +215 -0
  156. package/dist/tools/founderLocalPipeline.js +1516 -2
  157. package/dist/tools/founderLocalPipeline.js.map +1 -1
  158. package/dist/tools/founderOperatingModel.d.ts +120 -0
  159. package/dist/tools/founderOperatingModel.js +469 -0
  160. package/dist/tools/founderOperatingModel.js.map +1 -0
  161. package/dist/tools/founderOperatingModelTools.d.ts +2 -0
  162. package/dist/tools/founderOperatingModelTools.js +169 -0
  163. package/dist/tools/founderOperatingModelTools.js.map +1 -0
  164. package/dist/tools/founderStrategicOpsTools.d.ts +2 -0
  165. package/dist/tools/founderStrategicOpsTools.js +1310 -0
  166. package/dist/tools/founderStrategicOpsTools.js.map +1 -0
  167. package/dist/tools/graphifyTools.d.ts +19 -0
  168. package/dist/tools/graphifyTools.js +375 -0
  169. package/dist/tools/graphifyTools.js.map +1 -0
  170. package/dist/tools/index.d.ts +3 -0
  171. package/dist/tools/index.js +4 -0
  172. package/dist/tools/index.js.map +1 -1
  173. package/dist/tools/monteCarloTools.d.ts +16 -0
  174. package/dist/tools/monteCarloTools.js +225 -0
  175. package/dist/tools/monteCarloTools.js.map +1 -0
  176. package/dist/tools/packetCompilerTools.d.ts +12 -0
  177. package/dist/tools/packetCompilerTools.js +322 -0
  178. package/dist/tools/packetCompilerTools.js.map +1 -0
  179. package/dist/tools/planSynthesisTools.d.ts +15 -0
  180. package/dist/tools/planSynthesisTools.js +455 -0
  181. package/dist/tools/planSynthesisTools.js.map +1 -0
  182. package/dist/tools/profilerTools.d.ts +20 -0
  183. package/dist/tools/profilerTools.js +364 -0
  184. package/dist/tools/profilerTools.js.map +1 -0
  185. package/dist/tools/progressiveDiscoveryTools.js +2 -1
  186. package/dist/tools/progressiveDiscoveryTools.js.map +1 -1
  187. package/dist/tools/savingsTools.d.ts +11 -0
  188. package/dist/tools/savingsTools.js +155 -0
  189. package/dist/tools/savingsTools.js.map +1 -0
  190. package/dist/tools/scenarioCompilerTools.d.ts +14 -0
  191. package/dist/tools/scenarioCompilerTools.js +290 -0
  192. package/dist/tools/scenarioCompilerTools.js.map +1 -0
  193. package/dist/tools/sharedContextTools.d.ts +2 -0
  194. package/dist/tools/sharedContextTools.js +423 -0
  195. package/dist/tools/sharedContextTools.js.map +1 -0
  196. package/dist/tools/sitemapTools.d.ts +15 -0
  197. package/dist/tools/sitemapTools.js +560 -0
  198. package/dist/tools/sitemapTools.js.map +1 -0
  199. package/dist/tools/sweepTools.d.ts +9 -0
  200. package/dist/tools/sweepTools.js +112 -0
  201. package/dist/tools/sweepTools.js.map +1 -0
  202. package/dist/tools/syncBridgeTools.d.ts +2 -0
  203. package/dist/tools/syncBridgeTools.js +258 -0
  204. package/dist/tools/syncBridgeTools.js.map +1 -0
  205. package/dist/tools/toolRegistry.js +1223 -45
  206. package/dist/tools/toolRegistry.js.map +1 -1
  207. package/dist/tools/workspaceTools.d.ts +19 -0
  208. package/dist/tools/workspaceTools.js +762 -0
  209. package/dist/tools/workspaceTools.js.map +1 -0
  210. package/dist/toolsetRegistry.js +162 -3
  211. package/dist/toolsetRegistry.js.map +1 -1
  212. package/package.json +39 -38
  213. package/rules/nodebench-agentic-reliability.md +32 -0
  214. package/rules/nodebench-analyst-diagnostic.md +25 -0
  215. package/rules/nodebench-auto-qa.md +31 -0
  216. package/rules/nodebench-completion-traceability.md +22 -0
  217. package/rules/nodebench-flywheel-continuous.md +25 -0
  218. package/rules/nodebench-pre-release-review.md +24 -0
  219. package/rules/nodebench-qa-dogfood.md +26 -0
  220. package/rules/nodebench-scenario-testing.md +30 -0
  221. package/rules/nodebench-self-direction.md +23 -0
  222. package/rules/nodebench-self-judge-loop.md +24 -0
  223. package/scripts/install.sh +215 -0
  224. package/dist/__tests__/analytics.test.d.ts +0 -11
  225. package/dist/__tests__/analytics.test.js +0 -546
  226. package/dist/__tests__/analytics.test.js.map +0 -1
  227. package/dist/__tests__/architectComplex.test.d.ts +0 -1
  228. package/dist/__tests__/architectComplex.test.js +0 -373
  229. package/dist/__tests__/architectComplex.test.js.map +0 -1
  230. package/dist/__tests__/architectSmoke.test.d.ts +0 -1
  231. package/dist/__tests__/architectSmoke.test.js +0 -92
  232. package/dist/__tests__/architectSmoke.test.js.map +0 -1
  233. package/dist/__tests__/audit-registry.d.ts +0 -1
  234. package/dist/__tests__/audit-registry.js +0 -60
  235. package/dist/__tests__/audit-registry.js.map +0 -1
  236. package/dist/__tests__/batchAutopilot.test.d.ts +0 -8
  237. package/dist/__tests__/batchAutopilot.test.js +0 -218
  238. package/dist/__tests__/batchAutopilot.test.js.map +0 -1
  239. package/dist/__tests__/cliSubcommands.test.d.ts +0 -1
  240. package/dist/__tests__/cliSubcommands.test.js +0 -138
  241. package/dist/__tests__/cliSubcommands.test.js.map +0 -1
  242. package/dist/__tests__/comparativeBench.test.d.ts +0 -1
  243. package/dist/__tests__/comparativeBench.test.js +0 -722
  244. package/dist/__tests__/comparativeBench.test.js.map +0 -1
  245. package/dist/__tests__/critterCalibrationEval.d.ts +0 -8
  246. package/dist/__tests__/critterCalibrationEval.js +0 -370
  247. package/dist/__tests__/critterCalibrationEval.js.map +0 -1
  248. package/dist/__tests__/dynamicLoading.test.d.ts +0 -1
  249. package/dist/__tests__/dynamicLoading.test.js +0 -280
  250. package/dist/__tests__/dynamicLoading.test.js.map +0 -1
  251. package/dist/__tests__/embeddingProvider.test.d.ts +0 -1
  252. package/dist/__tests__/embeddingProvider.test.js +0 -86
  253. package/dist/__tests__/embeddingProvider.test.js.map +0 -1
  254. package/dist/__tests__/evalDatasetBench.test.d.ts +0 -1
  255. package/dist/__tests__/evalDatasetBench.test.js +0 -738
  256. package/dist/__tests__/evalDatasetBench.test.js.map +0 -1
  257. package/dist/__tests__/evalHarness.test.d.ts +0 -1
  258. package/dist/__tests__/evalHarness.test.js +0 -1107
  259. package/dist/__tests__/evalHarness.test.js.map +0 -1
  260. package/dist/__tests__/fixtures/bfcl_v3_long_context.sample.json +0 -264
  261. package/dist/__tests__/fixtures/generateBfclLongContextFixture.d.ts +0 -10
  262. package/dist/__tests__/fixtures/generateBfclLongContextFixture.js +0 -135
  263. package/dist/__tests__/fixtures/generateBfclLongContextFixture.js.map +0 -1
  264. package/dist/__tests__/fixtures/generateSwebenchVerifiedFixture.d.ts +0 -14
  265. package/dist/__tests__/fixtures/generateSwebenchVerifiedFixture.js +0 -189
  266. package/dist/__tests__/fixtures/generateSwebenchVerifiedFixture.js.map +0 -1
  267. package/dist/__tests__/fixtures/generateToolbenchInstructionFixture.d.ts +0 -16
  268. package/dist/__tests__/fixtures/generateToolbenchInstructionFixture.js +0 -154
  269. package/dist/__tests__/fixtures/generateToolbenchInstructionFixture.js.map +0 -1
  270. package/dist/__tests__/fixtures/swebench_verified.sample.json +0 -162
  271. package/dist/__tests__/fixtures/toolbench_instruction.sample.json +0 -109
  272. package/dist/__tests__/forecastingDogfood.test.d.ts +0 -9
  273. package/dist/__tests__/forecastingDogfood.test.js +0 -284
  274. package/dist/__tests__/forecastingDogfood.test.js.map +0 -1
  275. package/dist/__tests__/forecastingScoring.test.d.ts +0 -9
  276. package/dist/__tests__/forecastingScoring.test.js +0 -202
  277. package/dist/__tests__/forecastingScoring.test.js.map +0 -1
  278. package/dist/__tests__/gaiaCapabilityAudioEval.test.d.ts +0 -15
  279. package/dist/__tests__/gaiaCapabilityAudioEval.test.js +0 -265
  280. package/dist/__tests__/gaiaCapabilityAudioEval.test.js.map +0 -1
  281. package/dist/__tests__/gaiaCapabilityEval.test.d.ts +0 -14
  282. package/dist/__tests__/gaiaCapabilityEval.test.js +0 -1259
  283. package/dist/__tests__/gaiaCapabilityEval.test.js.map +0 -1
  284. package/dist/__tests__/gaiaCapabilityFilesEval.test.d.ts +0 -15
  285. package/dist/__tests__/gaiaCapabilityFilesEval.test.js +0 -914
  286. package/dist/__tests__/gaiaCapabilityFilesEval.test.js.map +0 -1
  287. package/dist/__tests__/gaiaCapabilityMediaEval.test.d.ts +0 -15
  288. package/dist/__tests__/gaiaCapabilityMediaEval.test.js +0 -1101
  289. package/dist/__tests__/gaiaCapabilityMediaEval.test.js.map +0 -1
  290. package/dist/__tests__/helpers/answerMatch.d.ts +0 -41
  291. package/dist/__tests__/helpers/answerMatch.js +0 -267
  292. package/dist/__tests__/helpers/answerMatch.js.map +0 -1
  293. package/dist/__tests__/helpers/textLlm.d.ts +0 -25
  294. package/dist/__tests__/helpers/textLlm.js +0 -214
  295. package/dist/__tests__/helpers/textLlm.js.map +0 -1
  296. package/dist/__tests__/localDashboard.test.d.ts +0 -1
  297. package/dist/__tests__/localDashboard.test.js +0 -226
  298. package/dist/__tests__/localDashboard.test.js.map +0 -1
  299. package/dist/__tests__/multiHopDogfood.test.d.ts +0 -12
  300. package/dist/__tests__/multiHopDogfood.test.js +0 -303
  301. package/dist/__tests__/multiHopDogfood.test.js.map +0 -1
  302. package/dist/__tests__/openDatasetParallelEval.test.d.ts +0 -7
  303. package/dist/__tests__/openDatasetParallelEval.test.js +0 -209
  304. package/dist/__tests__/openDatasetParallelEval.test.js.map +0 -1
  305. package/dist/__tests__/openDatasetParallelEvalGaia.test.d.ts +0 -7
  306. package/dist/__tests__/openDatasetParallelEvalGaia.test.js +0 -279
  307. package/dist/__tests__/openDatasetParallelEvalGaia.test.js.map +0 -1
  308. package/dist/__tests__/openDatasetParallelEvalSwebench.test.d.ts +0 -7
  309. package/dist/__tests__/openDatasetParallelEvalSwebench.test.js +0 -220
  310. package/dist/__tests__/openDatasetParallelEvalSwebench.test.js.map +0 -1
  311. package/dist/__tests__/openDatasetParallelEvalToolbench.test.d.ts +0 -7
  312. package/dist/__tests__/openDatasetParallelEvalToolbench.test.js +0 -218
  313. package/dist/__tests__/openDatasetParallelEvalToolbench.test.js.map +0 -1
  314. package/dist/__tests__/openDatasetPerfComparison.test.d.ts +0 -10
  315. package/dist/__tests__/openDatasetPerfComparison.test.js +0 -318
  316. package/dist/__tests__/openDatasetPerfComparison.test.js.map +0 -1
  317. package/dist/__tests__/openclawDogfood.test.d.ts +0 -23
  318. package/dist/__tests__/openclawDogfood.test.js +0 -535
  319. package/dist/__tests__/openclawDogfood.test.js.map +0 -1
  320. package/dist/__tests__/openclawMessaging.test.d.ts +0 -14
  321. package/dist/__tests__/openclawMessaging.test.js +0 -232
  322. package/dist/__tests__/openclawMessaging.test.js.map +0 -1
  323. package/dist/__tests__/presetRealWorldBench.test.d.ts +0 -1
  324. package/dist/__tests__/presetRealWorldBench.test.js +0 -859
  325. package/dist/__tests__/presetRealWorldBench.test.js.map +0 -1
  326. package/dist/__tests__/tools.test.d.ts +0 -1
  327. package/dist/__tests__/tools.test.js +0 -3201
  328. package/dist/__tests__/tools.test.js.map +0 -1
  329. package/dist/__tests__/toolsetGatingEval.test.d.ts +0 -1
  330. package/dist/__tests__/toolsetGatingEval.test.js +0 -1099
  331. package/dist/__tests__/toolsetGatingEval.test.js.map +0 -1
  332. package/dist/__tests__/traceabilityDogfood.test.d.ts +0 -12
  333. package/dist/__tests__/traceabilityDogfood.test.js +0 -241
  334. package/dist/__tests__/traceabilityDogfood.test.js.map +0 -1
  335. package/dist/__tests__/webmcpTools.test.d.ts +0 -7
  336. package/dist/__tests__/webmcpTools.test.js +0 -195
  337. package/dist/__tests__/webmcpTools.test.js.map +0 -1
  338. package/dist/benchmarks/testProviderBus.d.ts +0 -7
  339. package/dist/benchmarks/testProviderBus.js +0 -272
  340. package/dist/benchmarks/testProviderBus.js.map +0 -1
  341. package/dist/hooks/postCompaction.d.ts +0 -14
  342. package/dist/hooks/postCompaction.js +0 -51
  343. package/dist/hooks/postCompaction.js.map +0 -1
  344. package/dist/security/__tests__/security.test.d.ts +0 -8
  345. package/dist/security/__tests__/security.test.js +0 -295
  346. package/dist/security/__tests__/security.test.js.map +0 -1
  347. package/dist/tools/documentTools.d.ts +0 -5
  348. package/dist/tools/documentTools.js +0 -524
  349. package/dist/tools/documentTools.js.map +0 -1
  350. package/dist/tools/financialTools.d.ts +0 -10
  351. package/dist/tools/financialTools.js +0 -403
  352. package/dist/tools/financialTools.js.map +0 -1
  353. package/dist/tools/memoryTools.d.ts +0 -5
  354. package/dist/tools/memoryTools.js +0 -137
  355. package/dist/tools/memoryTools.js.map +0 -1
  356. package/dist/tools/planningTools.d.ts +0 -5
  357. package/dist/tools/planningTools.js +0 -147
  358. package/dist/tools/planningTools.js.map +0 -1
  359. package/dist/tools/searchTools.d.ts +0 -5
  360. package/dist/tools/searchTools.js +0 -145
  361. package/dist/tools/searchTools.js.map +0 -1
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Yahoo Finance source — live market data for key AI/tech stocks.
3
+ * No API key needed. Pattern from Crucix's yfinance.mjs.
4
+ */
5
+ // Key AI/tech tickers that founders track
6
+ const TICKERS = ["GOOGL", "MSFT", "META", "NVDA", "AMD", "PLTR", "SNOW", "CRM"];
7
+ export async function collect() {
8
+ const signals = [];
9
+ try {
10
+ // Use Yahoo Finance v8 API (no key needed)
11
+ const tickerStr = TICKERS.join(",");
12
+ const resp = await fetch(`https://query1.finance.yahoo.com/v8/finance/spark?symbols=${tickerStr}&range=1d&interval=1d`, { signal: AbortSignal.timeout(5000), headers: { "User-Agent": "NodeBench/1.0" } });
13
+ if (!resp.ok)
14
+ return [];
15
+ const data = (await resp.json());
16
+ for (const ticker of TICKERS) {
17
+ const spark = data?.spark?.result?.find((r) => r.symbol === ticker);
18
+ if (!spark?.response?.[0]?.indicators?.quote?.[0])
19
+ continue;
20
+ const quote = spark.response[0].indicators.quote[0];
21
+ const close = quote.close?.filter(Boolean);
22
+ if (!close?.length)
23
+ continue;
24
+ const current = close[close.length - 1];
25
+ const prev = close[0];
26
+ const changePct = prev > 0 ? ((current - prev) / prev) * 100 : 0;
27
+ const absChange = Math.abs(changePct);
28
+ if (absChange < 2)
29
+ continue; // Only signal meaningful moves
30
+ signals.push({
31
+ id: `yf_${ticker}_${new Date().toISOString().slice(0, 10)}`,
32
+ source: "yahoo_finance",
33
+ entity: ticker,
34
+ headline: `${ticker} ${changePct > 0 ? "up" : "down"} ${absChange.toFixed(1)}% today ($${current.toFixed(2)})`,
35
+ url: `https://finance.yahoo.com/quote/${ticker}`,
36
+ score: Math.min(100, Math.round(absChange * 10)),
37
+ category: "market",
38
+ severity: absChange > 5 ? "flash" : absChange > 3 ? "priority" : "routine",
39
+ metadata: { price: current, changePct: Math.round(changePct * 100) / 100 },
40
+ collectedAt: new Date().toISOString(),
41
+ });
42
+ }
43
+ }
44
+ catch { /* Yahoo unavailable */ }
45
+ return signals;
46
+ }
47
+ //# sourceMappingURL=yahoo_finance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yahoo_finance.js","sourceRoot":"","sources":["../../../src/sweep/sources/yahoo_finance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Sweep Engine Types — following Crucix's pattern of self-contained
3
+ * source modules with standardized output shapes.
4
+ *
5
+ * Each source module exports collect() → Promise<SweepSignal[]>
6
+ * The sweep engine runs all sources in parallel and feeds the delta engine.
7
+ */
8
+ export interface SweepSignal {
9
+ id: string;
10
+ source: string;
11
+ entity: string;
12
+ headline: string;
13
+ url?: string;
14
+ score?: number;
15
+ category: "company" | "product" | "market" | "funding" | "launch" | "trend" | "risk" | "regulatory";
16
+ severity: "flash" | "priority" | "routine";
17
+ metadata?: Record<string, unknown>;
18
+ collectedAt: string;
19
+ }
20
+ export interface SweepResult {
21
+ signals: SweepSignal[];
22
+ sources: Array<{
23
+ name: string;
24
+ status: "ok" | "error" | "timeout";
25
+ count: number;
26
+ durationMs: number;
27
+ }>;
28
+ totalDurationMs: number;
29
+ sweepId: string;
30
+ timestamp: string;
31
+ }
32
+ export interface DeltaResult {
33
+ newSignals: SweepSignal[];
34
+ escalations: Array<{
35
+ signal: SweepSignal;
36
+ from: string;
37
+ to: string;
38
+ }>;
39
+ deescalations: Array<{
40
+ signal: SweepSignal;
41
+ from: string;
42
+ to: string;
43
+ }>;
44
+ topEntity: string | null;
45
+ topEntityQuery: string | null;
46
+ topEntitySeverity: "flash" | "priority" | "routine" | null;
47
+ sweepId: string;
48
+ previousSweepId: string | null;
49
+ }
50
+ export type SourceCollector = () => Promise<SweepSignal[]>;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Sweep Engine Types — following Crucix's pattern of self-contained
3
+ * source modules with standardized output shapes.
4
+ *
5
+ * Each source module exports collect() → Promise<SweepSignal[]>
6
+ * The sweep engine runs all sources in parallel and feeds the delta engine.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sweep/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,98 @@
1
+ export type FounderEpisodeStatus = "active" | "completed" | "error" | "aborted";
2
+ export type FounderEpisodeSurface = "web" | "api" | "browser" | "claude_code" | "openclaw" | "local_runtime";
3
+ export interface FounderEpisodeRecord {
4
+ episodeId: string;
5
+ correlationId: string;
6
+ sessionKey?: string | null;
7
+ workspaceId?: string | null;
8
+ companyKey?: string | null;
9
+ surface: FounderEpisodeSurface;
10
+ episodeType: string;
11
+ status: FounderEpisodeStatus;
12
+ query?: string | null;
13
+ lens?: string | null;
14
+ entityName?: string | null;
15
+ packetId?: string | null;
16
+ packetType?: string | null;
17
+ workflowAssetId?: string | null;
18
+ workflowEnvelopeId?: string | null;
19
+ contextId?: string | null;
20
+ taskId?: string | null;
21
+ summary?: string | null;
22
+ stateBefore?: Record<string, unknown>;
23
+ stateAfter?: Record<string, unknown>;
24
+ stateBeforeHash?: string | null;
25
+ stateAfterHash?: string | null;
26
+ spans: Array<Record<string, unknown>>;
27
+ traceStepCount?: number | null;
28
+ toolsInvoked: string[];
29
+ artifactsProduced: string[];
30
+ importantChangesDetected?: number | null;
31
+ contradictionsDetected?: number | null;
32
+ metadata?: Record<string, unknown>;
33
+ startedAt: string;
34
+ updatedAt: string;
35
+ completedAt?: string | null;
36
+ }
37
+ export declare function startFounderEpisode(input: {
38
+ episodeId?: string;
39
+ correlationId?: string;
40
+ sessionKey?: string | null;
41
+ workspaceId?: string | null;
42
+ companyKey?: string | null;
43
+ surface: FounderEpisodeSurface;
44
+ episodeType: string;
45
+ query?: string | null;
46
+ lens?: string | null;
47
+ entityName?: string | null;
48
+ stateBefore?: Record<string, unknown>;
49
+ stateBeforeHash?: string;
50
+ metadata?: Record<string, unknown>;
51
+ initialSpan?: Record<string, unknown>;
52
+ workflowAssetId?: string | null;
53
+ workflowEnvelopeId?: string | null;
54
+ }): FounderEpisodeRecord;
55
+ export declare function appendFounderEpisodeSpan(input: {
56
+ episodeId: string;
57
+ span: Record<string, unknown>;
58
+ contextId?: string | null;
59
+ taskId?: string | null;
60
+ entityName?: string | null;
61
+ packetId?: string | null;
62
+ packetType?: string | null;
63
+ workspaceId?: string | null;
64
+ companyKey?: string | null;
65
+ metadata?: Record<string, unknown>;
66
+ workflowAssetId?: string | null;
67
+ workflowEnvelopeId?: string | null;
68
+ }): FounderEpisodeRecord;
69
+ export declare function finalizeFounderEpisode(input: {
70
+ episodeId: string;
71
+ status?: FounderEpisodeStatus;
72
+ stateAfter?: Record<string, unknown>;
73
+ stateAfterHash?: string;
74
+ summary?: string | null;
75
+ toolsInvoked?: string[];
76
+ artifactsProduced?: string[];
77
+ traceStepCount?: number | null;
78
+ importantChangesDetected?: number | null;
79
+ contradictionsDetected?: number | null;
80
+ contextId?: string | null;
81
+ taskId?: string | null;
82
+ entityName?: string | null;
83
+ packetId?: string | null;
84
+ packetType?: string | null;
85
+ workspaceId?: string | null;
86
+ companyKey?: string | null;
87
+ finalSpan?: Record<string, unknown>;
88
+ metadata?: Record<string, unknown>;
89
+ workflowAssetId?: string | null;
90
+ workflowEnvelopeId?: string | null;
91
+ }): FounderEpisodeRecord;
92
+ export declare function getFounderEpisode(episodeId: string): FounderEpisodeRecord | null;
93
+ export declare function listFounderEpisodes(input?: {
94
+ sessionKey?: string | null;
95
+ workspaceId?: string | null;
96
+ status?: FounderEpisodeStatus;
97
+ limit?: number;
98
+ }): FounderEpisodeRecord[];
@@ -0,0 +1,230 @@
1
+ import { createHash } from "node:crypto";
2
+ import { genId, getDb } from "../db.js";
3
+ function json(value, fallback = {}) {
4
+ return JSON.stringify(value ?? fallback);
5
+ }
6
+ function parseJson(value, fallback) {
7
+ if (!value)
8
+ return fallback;
9
+ try {
10
+ return JSON.parse(value);
11
+ }
12
+ catch {
13
+ return fallback;
14
+ }
15
+ }
16
+ function hashPayload(payload) {
17
+ return createHash("sha256").update(JSON.stringify(payload ?? null)).digest("hex");
18
+ }
19
+ function ensureFounderEpisodeColumns() {
20
+ const db = getDb();
21
+ const columns = db.prepare("PRAGMA table_info(founder_harness_episodes)").all();
22
+ if (!columns.some((column) => column.name === "workflow_asset_id")) {
23
+ db.exec("ALTER TABLE founder_harness_episodes ADD COLUMN workflow_asset_id TEXT");
24
+ }
25
+ if (!columns.some((column) => column.name === "workflow_envelope_id")) {
26
+ db.exec("ALTER TABLE founder_harness_episodes ADD COLUMN workflow_envelope_id TEXT");
27
+ }
28
+ }
29
+ function parseRow(row) {
30
+ return {
31
+ episodeId: row.episode_id,
32
+ correlationId: row.correlation_id,
33
+ sessionKey: row.session_key ?? null,
34
+ workspaceId: row.workspace_id ?? null,
35
+ companyKey: row.company_key ?? null,
36
+ surface: row.surface,
37
+ episodeType: row.episode_type,
38
+ status: row.status,
39
+ query: row.query ?? null,
40
+ lens: row.lens ?? null,
41
+ entityName: row.entity_name ?? null,
42
+ packetId: row.packet_id ?? null,
43
+ packetType: row.packet_type ?? null,
44
+ workflowAssetId: row.workflow_asset_id ?? null,
45
+ workflowEnvelopeId: row.workflow_envelope_id ?? null,
46
+ contextId: row.context_id ?? null,
47
+ taskId: row.task_id ?? null,
48
+ summary: row.summary ?? null,
49
+ stateBefore: parseJson(row.state_before_json, {}),
50
+ stateAfter: parseJson(row.state_after_json, {}),
51
+ stateBeforeHash: row.state_before_hash ?? null,
52
+ stateAfterHash: row.state_after_hash ?? null,
53
+ spans: parseJson(row.spans_json, []),
54
+ traceStepCount: row.trace_step_count ?? null,
55
+ toolsInvoked: parseJson(row.tools_invoked_json, []),
56
+ artifactsProduced: parseJson(row.artifacts_produced_json, []),
57
+ importantChangesDetected: row.important_changes_detected ?? null,
58
+ contradictionsDetected: row.contradictions_detected ?? null,
59
+ metadata: parseJson(row.metadata_json, {}),
60
+ startedAt: row.started_at,
61
+ updatedAt: row.updated_at,
62
+ completedAt: row.completed_at ?? null,
63
+ };
64
+ }
65
+ export function startFounderEpisode(input) {
66
+ ensureFounderEpisodeColumns();
67
+ const db = getDb();
68
+ const now = new Date().toISOString();
69
+ const episodeId = input.episodeId ?? genId("episode");
70
+ const correlationId = input.correlationId ?? genId("corr");
71
+ const existing = db.prepare(`
72
+ SELECT *
73
+ FROM founder_harness_episodes
74
+ WHERE episode_id = ?
75
+ LIMIT 1
76
+ `).get(episodeId);
77
+ const stateBeforeHash = input.stateBeforeHash ?? hashPayload(input.stateBefore ?? null);
78
+ const spans = input.initialSpan ? [input.initialSpan] : [];
79
+ if (existing) {
80
+ db.prepare(`
81
+ UPDATE founder_harness_episodes
82
+ SET correlation_id = ?,
83
+ session_key = COALESCE(?, session_key),
84
+ workspace_id = COALESCE(?, workspace_id),
85
+ company_key = COALESCE(?, company_key),
86
+ surface = ?,
87
+ episode_type = ?,
88
+ query = COALESCE(?, query),
89
+ lens = COALESCE(?, lens),
90
+ entity_name = COALESCE(?, entity_name),
91
+ workflow_asset_id = COALESCE(?, workflow_asset_id),
92
+ workflow_envelope_id = COALESCE(?, workflow_envelope_id),
93
+ state_before_json = COALESCE(?, state_before_json),
94
+ state_before_hash = COALESCE(?, state_before_hash),
95
+ spans_json = CASE WHEN length(COALESCE(spans_json, '')) > 2 THEN spans_json ELSE ? END,
96
+ metadata_json = COALESCE(?, metadata_json),
97
+ updated_at = ?,
98
+ status = CASE WHEN status = 'completed' THEN status ELSE 'active' END
99
+ WHERE episode_id = ?
100
+ `).run(correlationId, input.sessionKey ?? null, input.workspaceId ?? null, input.companyKey ?? null, input.surface, input.episodeType, input.query ?? null, input.lens ?? null, input.entityName ?? null, input.workflowAssetId ?? null, input.workflowEnvelopeId ?? null, input.stateBefore ? json(input.stateBefore) : null, stateBeforeHash, json(spans, []), input.metadata ? json(input.metadata) : null, now, episodeId);
101
+ }
102
+ else {
103
+ db.prepare(`
104
+ INSERT INTO founder_harness_episodes (
105
+ episode_id, correlation_id, session_key, workspace_id, company_key,
106
+ surface, episode_type, status, query, lens, entity_name, state_before_json,
107
+ workflow_asset_id, workflow_envelope_id, state_before_hash, spans_json, tools_invoked_json, artifacts_produced_json,
108
+ metadata_json, started_at, updated_at
109
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
110
+ `).run(episodeId, correlationId, input.sessionKey ?? null, input.workspaceId ?? null, input.companyKey ?? null, input.surface, input.episodeType, "active", input.query ?? null, input.lens ?? null, input.entityName ?? null, json(input.stateBefore), input.workflowAssetId ?? null, input.workflowEnvelopeId ?? null, stateBeforeHash, json(spans, []), "[]", "[]", input.metadata ? json(input.metadata) : null, now, now);
111
+ }
112
+ return getFounderEpisode(episodeId);
113
+ }
114
+ export function appendFounderEpisodeSpan(input) {
115
+ ensureFounderEpisodeColumns();
116
+ const db = getDb();
117
+ const existing = getFounderEpisode(input.episodeId);
118
+ if (!existing) {
119
+ throw new Error(`Founder harness episode not found: ${input.episodeId}`);
120
+ }
121
+ const spans = [...existing.spans, input.span];
122
+ const metadata = input.metadata ? { ...(existing.metadata ?? {}), ...input.metadata } : existing.metadata;
123
+ const now = new Date().toISOString();
124
+ db.prepare(`
125
+ UPDATE founder_harness_episodes
126
+ SET spans_json = ?,
127
+ context_id = COALESCE(?, context_id),
128
+ task_id = COALESCE(?, task_id),
129
+ entity_name = COALESCE(?, entity_name),
130
+ packet_id = COALESCE(?, packet_id),
131
+ packet_type = COALESCE(?, packet_type),
132
+ workflow_asset_id = COALESCE(?, workflow_asset_id),
133
+ workflow_envelope_id = COALESCE(?, workflow_envelope_id),
134
+ workspace_id = COALESCE(?, workspace_id),
135
+ company_key = COALESCE(?, company_key),
136
+ metadata_json = ?,
137
+ updated_at = ?
138
+ WHERE episode_id = ?
139
+ `).run(json(spans, []), input.contextId ?? null, input.taskId ?? null, input.entityName ?? null, input.packetId ?? null, input.packetType ?? null, input.workflowAssetId ?? null, input.workflowEnvelopeId ?? null, input.workspaceId ?? null, input.companyKey ?? null, json(metadata), now, input.episodeId);
140
+ return getFounderEpisode(input.episodeId);
141
+ }
142
+ export function finalizeFounderEpisode(input) {
143
+ ensureFounderEpisodeColumns();
144
+ const db = getDb();
145
+ const existing = getFounderEpisode(input.episodeId);
146
+ if (!existing) {
147
+ throw new Error(`Founder harness episode not found: ${input.episodeId}`);
148
+ }
149
+ const spans = input.finalSpan ? [...existing.spans, input.finalSpan] : existing.spans;
150
+ const toolsInvoked = input.toolsInvoked
151
+ ? Array.from(new Set([...(existing.toolsInvoked ?? []), ...input.toolsInvoked]))
152
+ : existing.toolsInvoked;
153
+ const artifactsProduced = input.artifactsProduced
154
+ ? Array.from(new Set([...(existing.artifactsProduced ?? []), ...input.artifactsProduced]))
155
+ : existing.artifactsProduced;
156
+ const metadata = input.metadata ? { ...(existing.metadata ?? {}), ...input.metadata } : existing.metadata;
157
+ const now = new Date().toISOString();
158
+ db.prepare(`
159
+ UPDATE founder_harness_episodes
160
+ SET status = ?,
161
+ state_after_json = COALESCE(?, state_after_json),
162
+ state_after_hash = COALESCE(?, state_after_hash),
163
+ summary = COALESCE(?, summary),
164
+ tools_invoked_json = ?,
165
+ artifacts_produced_json = ?,
166
+ trace_step_count = COALESCE(?, trace_step_count),
167
+ important_changes_detected = COALESCE(?, important_changes_detected),
168
+ contradictions_detected = COALESCE(?, contradictions_detected),
169
+ context_id = COALESCE(?, context_id),
170
+ task_id = COALESCE(?, task_id),
171
+ entity_name = COALESCE(?, entity_name),
172
+ packet_id = COALESCE(?, packet_id),
173
+ packet_type = COALESCE(?, packet_type),
174
+ workflow_asset_id = COALESCE(?, workflow_asset_id),
175
+ workflow_envelope_id = COALESCE(?, workflow_envelope_id),
176
+ workspace_id = COALESCE(?, workspace_id),
177
+ company_key = COALESCE(?, company_key),
178
+ spans_json = ?,
179
+ metadata_json = ?,
180
+ updated_at = ?,
181
+ completed_at = ?
182
+ WHERE episode_id = ?
183
+ `).run(input.status ?? "completed", input.stateAfter ? json(input.stateAfter) : null, input.stateAfterHash ?? hashPayload(input.stateAfter ?? existing.stateAfter ?? null), input.summary ?? null, json(toolsInvoked, []), json(artifactsProduced, []), input.traceStepCount ?? null, input.importantChangesDetected ?? null, input.contradictionsDetected ?? null, input.contextId ?? null, input.taskId ?? null, input.entityName ?? null, input.packetId ?? null, input.packetType ?? null, input.workflowAssetId ?? null, input.workflowEnvelopeId ?? null, input.workspaceId ?? null, input.companyKey ?? null, json(spans, []), json(metadata), now, now, input.episodeId);
184
+ return getFounderEpisode(input.episodeId);
185
+ }
186
+ export function getFounderEpisode(episodeId) {
187
+ ensureFounderEpisodeColumns();
188
+ const row = getDb().prepare(`
189
+ SELECT *
190
+ FROM founder_harness_episodes
191
+ WHERE episode_id = ?
192
+ LIMIT 1
193
+ `).get(episodeId);
194
+ return row ? parseRow(row) : null;
195
+ }
196
+ export function listFounderEpisodes(input = {}) {
197
+ ensureFounderEpisodeColumns();
198
+ const limit = Math.min(Math.max(input.limit ?? 10, 1), 50);
199
+ const db = getDb();
200
+ let rows = [];
201
+ if (input.sessionKey) {
202
+ rows = db.prepare(`
203
+ SELECT *
204
+ FROM founder_harness_episodes
205
+ WHERE session_key = ?
206
+ ORDER BY started_at DESC
207
+ LIMIT ?
208
+ `).all(input.sessionKey, limit * 2);
209
+ }
210
+ else if (input.workspaceId) {
211
+ rows = db.prepare(`
212
+ SELECT *
213
+ FROM founder_harness_episodes
214
+ WHERE workspace_id = ?
215
+ ORDER BY started_at DESC
216
+ LIMIT ?
217
+ `).all(input.workspaceId, limit * 2);
218
+ }
219
+ else {
220
+ rows = db.prepare(`
221
+ SELECT *
222
+ FROM founder_harness_episodes
223
+ ORDER BY started_at DESC
224
+ LIMIT ?
225
+ `).all(limit * 2);
226
+ }
227
+ const parsed = rows.map(parseRow);
228
+ return input.status ? parsed.filter((row) => row.status === input.status).slice(0, limit) : parsed.slice(0, limit);
229
+ }
230
+ //# sourceMappingURL=founderEpisodeStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"founderEpisodeStore.js","sourceRoot":"","sources":["../../src/sync/founderEpisodeStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * hyperloopArchive.ts — Archive of historically successful variants.
3
+ *
4
+ * Meta HyperAgent pattern: keep a population of successful variants
5
+ * as stepping stones for improvement. Each entry is a packet template,
6
+ * workflow path, routing policy, or signal recipe that worked.
7
+ *
8
+ * SQLite-backed. Bounded (MAX_ARCHIVE entries with eviction by lowest score).
9
+ */
10
+ export type ArchiveEntryType = "packet_template" | "workflow_path" | "routing_policy" | "signal_recipe" | "export_adapter" | "delegation_shape";
11
+ export type ArchiveEntryStatus = "candidate" | "validated" | "promoted" | "retired";
12
+ export interface ArchiveEntry {
13
+ id: string;
14
+ type: ArchiveEntryType;
15
+ name: string;
16
+ description: string;
17
+ content: string;
18
+ sourceEpisodeId: string;
19
+ sourceQuery: string;
20
+ sourceLens: string;
21
+ sourceEntity: string | null;
22
+ evidenceCoverage: number;
23
+ contradictionsCaught: number;
24
+ userEditDistance: number;
25
+ wasExported: boolean;
26
+ wasDelegated: boolean;
27
+ qualityScore: number;
28
+ improvementDelta: number;
29
+ status: ArchiveEntryStatus;
30
+ usageCount: number;
31
+ createdAt: string;
32
+ updatedAt: string;
33
+ }
34
+ export declare function initHyperloopTables(): void;
35
+ export declare function addArchiveEntry(entry: Omit<ArchiveEntry, "id" | "status" | "usageCount" | "updatedAt">): ArchiveEntry;
36
+ /** Find the best archive entry for a given type + query context. */
37
+ export declare function lookupBestVariant(type: ArchiveEntryType, lens?: string, entity?: string): ArchiveEntry | null;
38
+ /** Validate entries that meet thresholds. Promotion is human-gated in Convex. */
39
+ export declare function runPromotionCycle(): {
40
+ promoted: number;
41
+ validated: number;
42
+ };
43
+ /** Get archive stats. */
44
+ export declare function getArchiveStats(): {
45
+ total: number;
46
+ byType: Record<string, number>;
47
+ byStatus: Record<string, number>;
48
+ avgQuality: number;
49
+ };
50
+ /** List top archive entries. */
51
+ export declare function listTopEntries(type?: ArchiveEntryType, limit?: number): ArchiveEntry[];
@@ -0,0 +1,153 @@
1
+ /**
2
+ * hyperloopArchive.ts — Archive of historically successful variants.
3
+ *
4
+ * Meta HyperAgent pattern: keep a population of successful variants
5
+ * as stepping stones for improvement. Each entry is a packet template,
6
+ * workflow path, routing policy, or signal recipe that worked.
7
+ *
8
+ * SQLite-backed. Bounded (MAX_ARCHIVE entries with eviction by lowest score).
9
+ */
10
+ import { getDb, genId } from "../db.js";
11
+ // ─── Constants ───────────────────────────────────────────────────
12
+ const MAX_ARCHIVE = 200;
13
+ const PROMOTE_USAGE_THRESHOLD = 5;
14
+ const VALIDATE_USAGE_THRESHOLD = 3;
15
+ const PROMOTE_QUALITY_THRESHOLD = 0.7;
16
+ // ─── Schema init ─────────────────────────────────────────────────
17
+ export function initHyperloopTables() {
18
+ const db = getDb();
19
+ db.exec(`
20
+ CREATE TABLE IF NOT EXISTS hyperloop_archive (
21
+ id TEXT PRIMARY KEY,
22
+ type TEXT NOT NULL,
23
+ name TEXT NOT NULL,
24
+ description TEXT NOT NULL,
25
+ content TEXT NOT NULL,
26
+ source_episode_id TEXT NOT NULL,
27
+ source_query TEXT NOT NULL,
28
+ source_lens TEXT NOT NULL,
29
+ source_entity TEXT,
30
+ evidence_coverage REAL NOT NULL DEFAULT 0,
31
+ contradictions_caught INTEGER NOT NULL DEFAULT 0,
32
+ user_edit_distance REAL NOT NULL DEFAULT 1,
33
+ was_exported INTEGER NOT NULL DEFAULT 0,
34
+ was_delegated INTEGER NOT NULL DEFAULT 0,
35
+ quality_score REAL NOT NULL DEFAULT 0,
36
+ improvement_delta REAL NOT NULL DEFAULT 0,
37
+ status TEXT NOT NULL DEFAULT 'candidate',
38
+ usage_count INTEGER NOT NULL DEFAULT 0,
39
+ created_at TEXT NOT NULL,
40
+ updated_at TEXT NOT NULL
41
+ );
42
+
43
+ CREATE INDEX IF NOT EXISTS idx_archive_type_status ON hyperloop_archive(type, status);
44
+ CREATE INDEX IF NOT EXISTS idx_archive_quality ON hyperloop_archive(quality_score DESC);
45
+ CREATE INDEX IF NOT EXISTS idx_archive_type_quality ON hyperloop_archive(type, quality_score DESC);
46
+ `);
47
+ }
48
+ // ─── CRUD ────────────────────────────────────────────────────────
49
+ export function addArchiveEntry(entry) {
50
+ const db = getDb();
51
+ initHyperloopTables();
52
+ const id = genId("hyp");
53
+ const now = new Date().toISOString();
54
+ // Bounded: evict lowest quality if over limit
55
+ const countRow = db.prepare("SELECT COUNT(*) as cnt FROM hyperloop_archive").get();
56
+ if ((countRow?.cnt ?? 0) >= MAX_ARCHIVE) {
57
+ db.prepare("DELETE FROM hyperloop_archive WHERE id IN (SELECT id FROM hyperloop_archive WHERE status = 'candidate' ORDER BY quality_score ASC LIMIT 10)").run();
58
+ }
59
+ db.prepare(`
60
+ INSERT INTO hyperloop_archive (id, type, name, description, content, source_episode_id, source_query, source_lens, source_entity, evidence_coverage, contradictions_caught, user_edit_distance, was_exported, was_delegated, quality_score, improvement_delta, status, usage_count, created_at, updated_at)
61
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'candidate', 0, ?, ?)
62
+ `).run(id, entry.type, entry.name, entry.description, entry.content, entry.sourceEpisodeId, entry.sourceQuery, entry.sourceLens, entry.sourceEntity ?? null, entry.evidenceCoverage, entry.contradictionsCaught, entry.userEditDistance, entry.wasExported ? 1 : 0, entry.wasDelegated ? 1 : 0, entry.qualityScore, entry.improvementDelta, entry.createdAt, now);
63
+ return { ...entry, id, status: "candidate", usageCount: 0, updatedAt: now };
64
+ }
65
+ /** Find the best archive entry for a given type + query context. */
66
+ export function lookupBestVariant(type, lens, entity) {
67
+ const db = getDb();
68
+ initHyperloopTables();
69
+ // Prefer promoted > validated > candidate. Match lens/entity if possible.
70
+ let row = null;
71
+ if (entity) {
72
+ row = db.prepare("SELECT * FROM hyperloop_archive WHERE type = ? AND status = 'promoted' AND source_entity = ? ORDER BY quality_score DESC LIMIT 1").get(type, entity);
73
+ }
74
+ if (!row && lens) {
75
+ row = db.prepare("SELECT * FROM hyperloop_archive WHERE type = ? AND status = 'promoted' AND source_lens = ? ORDER BY quality_score DESC LIMIT 1").get(type, lens);
76
+ }
77
+ if (!row) {
78
+ row = db.prepare("SELECT * FROM hyperloop_archive WHERE type = ? AND status IN ('promoted', 'validated') ORDER BY quality_score DESC LIMIT 1").get(type);
79
+ }
80
+ if (!row)
81
+ return null;
82
+ // Increment usage count
83
+ db.prepare("UPDATE hyperloop_archive SET usage_count = usage_count + 1, updated_at = ? WHERE id = ?")
84
+ .run(new Date().toISOString(), row.id);
85
+ return rowToEntry(row);
86
+ }
87
+ /** Validate entries that meet thresholds. Promotion is human-gated in Convex. */
88
+ export function runPromotionCycle() {
89
+ const db = getDb();
90
+ initHyperloopTables();
91
+ // Candidate → Validated: usage >= 3, quality > 0.6
92
+ const validated = db.prepare("UPDATE hyperloop_archive SET status = 'validated', updated_at = ? WHERE status = 'candidate' AND usage_count >= ? AND quality_score > 0.6").run(new Date().toISOString(), VALIDATE_USAGE_THRESHOLD);
93
+ // Validated → Promoted: usage >= 5, quality > 0.7, improvement_delta > 0
94
+ // Promotion is deliberately not automatic here. Use the Convex HyperLoop
95
+ // promotion mutation so reviewer id and deterministic gates are preserved.
96
+ const promoted = { changes: 0 };
97
+ return {
98
+ promoted: promoted.changes,
99
+ validated: validated.changes,
100
+ };
101
+ }
102
+ /** Get archive stats. */
103
+ export function getArchiveStats() {
104
+ const db = getDb();
105
+ initHyperloopTables();
106
+ const total = db.prepare("SELECT COUNT(*) as cnt FROM hyperloop_archive").get()?.cnt ?? 0;
107
+ const typeRows = db.prepare("SELECT type, COUNT(*) as cnt FROM hyperloop_archive GROUP BY type").all();
108
+ const byType = {};
109
+ for (const r of typeRows)
110
+ byType[r.type] = r.cnt;
111
+ const statusRows = db.prepare("SELECT status, COUNT(*) as cnt FROM hyperloop_archive GROUP BY status").all();
112
+ const byStatus = {};
113
+ for (const r of statusRows)
114
+ byStatus[r.status] = r.cnt;
115
+ const avgRow = db.prepare("SELECT AVG(quality_score) as avg FROM hyperloop_archive").get();
116
+ const avgQuality = avgRow?.avg ?? 0;
117
+ return { total, byType, byStatus, avgQuality: Math.round(avgQuality * 100) / 100 };
118
+ }
119
+ /** List top archive entries. */
120
+ export function listTopEntries(type, limit = 10) {
121
+ const db = getDb();
122
+ initHyperloopTables();
123
+ const rows = type
124
+ ? db.prepare("SELECT * FROM hyperloop_archive WHERE type = ? ORDER BY quality_score DESC LIMIT ?").all(type, limit)
125
+ : db.prepare("SELECT * FROM hyperloop_archive ORDER BY quality_score DESC LIMIT ?").all(limit);
126
+ return rows.map(rowToEntry);
127
+ }
128
+ // ─── Helpers ─────────────────────────────────────────────────────
129
+ function rowToEntry(row) {
130
+ return {
131
+ id: row.id,
132
+ type: row.type,
133
+ name: row.name,
134
+ description: row.description,
135
+ content: row.content,
136
+ sourceEpisodeId: row.source_episode_id,
137
+ sourceQuery: row.source_query,
138
+ sourceLens: row.source_lens,
139
+ sourceEntity: row.source_entity,
140
+ evidenceCoverage: row.evidence_coverage,
141
+ contradictionsCaught: row.contradictions_caught,
142
+ userEditDistance: row.user_edit_distance,
143
+ wasExported: !!row.was_exported,
144
+ wasDelegated: !!row.was_delegated,
145
+ qualityScore: row.quality_score,
146
+ improvementDelta: row.improvement_delta,
147
+ status: row.status,
148
+ usageCount: row.usage_count,
149
+ createdAt: row.created_at,
150
+ updatedAt: row.updated_at,
151
+ };
152
+ }
153
+ //# sourceMappingURL=hyperloopArchive.js.map