@amodalai/core 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 (463) hide show
  1. package/LICENSE +21 -0
  2. package/dist/.last_build +0 -0
  3. package/dist/src/amodal-config.d.ts +194 -0
  4. package/dist/src/amodal-config.js +326 -0
  5. package/dist/src/amodal-config.js.map +1 -0
  6. package/dist/src/audit/audit-logger.d.ts +52 -0
  7. package/dist/src/audit/audit-logger.js +137 -0
  8. package/dist/src/audit/audit-logger.js.map +1 -0
  9. package/dist/src/audit/audit-outputs.d.ts +34 -0
  10. package/dist/src/audit/audit-outputs.js +73 -0
  11. package/dist/src/audit/audit-outputs.js.map +1 -0
  12. package/dist/src/audit/audit-redact.d.ts +14 -0
  13. package/dist/src/audit/audit-redact.js +55 -0
  14. package/dist/src/audit/audit-redact.js.map +1 -0
  15. package/dist/src/audit/audit-types.d.ts +122 -0
  16. package/dist/src/audit/audit-types.js +64 -0
  17. package/dist/src/audit/audit-types.js.map +1 -0
  18. package/dist/src/audit/index.d.ts +10 -0
  19. package/dist/src/audit/index.js +10 -0
  20. package/dist/src/audit/index.js.map +1 -0
  21. package/dist/src/eval/eval-cost.d.ts +33 -0
  22. package/dist/src/eval/eval-cost.js +73 -0
  23. package/dist/src/eval/eval-cost.js.map +1 -0
  24. package/dist/src/eval/eval-diff.d.ts +11 -0
  25. package/dist/src/eval/eval-diff.js +97 -0
  26. package/dist/src/eval/eval-diff.js.map +1 -0
  27. package/dist/src/eval/eval-formatter.d.ts +23 -0
  28. package/dist/src/eval/eval-formatter.js +221 -0
  29. package/dist/src/eval/eval-formatter.js.map +1 -0
  30. package/dist/src/eval/eval-judge.d.ts +26 -0
  31. package/dist/src/eval/eval-judge.js +76 -0
  32. package/dist/src/eval/eval-judge.js.map +1 -0
  33. package/dist/src/eval/eval-run-builder.d.ts +25 -0
  34. package/dist/src/eval/eval-run-builder.js +78 -0
  35. package/dist/src/eval/eval-run-builder.js.map +1 -0
  36. package/dist/src/eval/eval-runner.d.ts +36 -0
  37. package/dist/src/eval/eval-runner.js +92 -0
  38. package/dist/src/eval/eval-runner.js.map +1 -0
  39. package/dist/src/eval/eval-session-provider.d.ts +40 -0
  40. package/dist/src/eval/eval-session-provider.js +46 -0
  41. package/dist/src/eval/eval-session-provider.js.map +1 -0
  42. package/dist/src/eval/eval-types.d.ts +146 -0
  43. package/dist/src/eval/eval-types.js +7 -0
  44. package/dist/src/eval/eval-types.js.map +1 -0
  45. package/dist/src/eval/experiment-runner.d.ts +16 -0
  46. package/dist/src/eval/experiment-runner.js +73 -0
  47. package/dist/src/eval/experiment-runner.js.map +1 -0
  48. package/dist/src/eval/experiment-types.d.ts +56 -0
  49. package/dist/src/eval/experiment-types.js +7 -0
  50. package/dist/src/eval/experiment-types.js.map +1 -0
  51. package/dist/src/eval/index.d.ts +22 -0
  52. package/dist/src/eval/index.js +18 -0
  53. package/dist/src/eval/index.js.map +1 -0
  54. package/dist/src/eval/multi-model-runner.d.ts +42 -0
  55. package/dist/src/eval/multi-model-runner.js +70 -0
  56. package/dist/src/eval/multi-model-runner.js.map +1 -0
  57. package/dist/src/eval/platform-eval-client.d.ts +105 -0
  58. package/dist/src/eval/platform-eval-client.js +155 -0
  59. package/dist/src/eval/platform-eval-client.js.map +1 -0
  60. package/dist/src/index.d.ts +41 -0
  61. package/dist/src/index.js +68 -0
  62. package/dist/src/index.js.map +1 -0
  63. package/dist/src/knowledge/index.d.ts +11 -0
  64. package/dist/src/knowledge/index.js +12 -0
  65. package/dist/src/knowledge/index.js.map +1 -0
  66. package/dist/src/knowledge/kb-formatter.d.ts +15 -0
  67. package/dist/src/knowledge/kb-formatter.js +78 -0
  68. package/dist/src/knowledge/kb-formatter.js.map +1 -0
  69. package/dist/src/knowledge/kb-index.d.ts +27 -0
  70. package/dist/src/knowledge/kb-index.js +66 -0
  71. package/dist/src/knowledge/kb-index.js.map +1 -0
  72. package/dist/src/knowledge/kb-types.d.ts +54 -0
  73. package/dist/src/knowledge/kb-types.js +7 -0
  74. package/dist/src/knowledge/kb-types.js.map +1 -0
  75. package/dist/src/knowledge/knowledge-store.d.ts +56 -0
  76. package/dist/src/knowledge/knowledge-store.js +141 -0
  77. package/dist/src/knowledge/knowledge-store.js.map +1 -0
  78. package/dist/src/knowledge/load-knowledge.d.ts +30 -0
  79. package/dist/src/knowledge/load-knowledge.js +161 -0
  80. package/dist/src/knowledge/load-knowledge.js.map +1 -0
  81. package/dist/src/knowledge/propose-kb-update.d.ts +32 -0
  82. package/dist/src/knowledge/propose-kb-update.js +148 -0
  83. package/dist/src/knowledge/propose-kb-update.js.map +1 -0
  84. package/dist/src/knowledge/propose-knowledge.d.ts +34 -0
  85. package/dist/src/knowledge/propose-knowledge.js +163 -0
  86. package/dist/src/knowledge/propose-knowledge.js.map +1 -0
  87. package/dist/src/mcp/index.d.ts +7 -0
  88. package/dist/src/mcp/index.js +7 -0
  89. package/dist/src/mcp/index.js.map +1 -0
  90. package/dist/src/mcp/mcp-manager.d.ts +96 -0
  91. package/dist/src/mcp/mcp-manager.js +192 -0
  92. package/dist/src/mcp/mcp-manager.js.map +1 -0
  93. package/dist/src/packages/config-deps.d.ts +20 -0
  94. package/dist/src/packages/config-deps.js +77 -0
  95. package/dist/src/packages/config-deps.js.map +1 -0
  96. package/dist/src/packages/env-file.d.ts +28 -0
  97. package/dist/src/packages/env-file.js +143 -0
  98. package/dist/src/packages/env-file.js.map +1 -0
  99. package/dist/src/packages/frontmatter.d.ts +28 -0
  100. package/dist/src/packages/frontmatter.js +77 -0
  101. package/dist/src/packages/frontmatter.js.map +1 -0
  102. package/dist/src/packages/index.d.ts +16 -0
  103. package/dist/src/packages/index.js +17 -0
  104. package/dist/src/packages/index.js.map +1 -0
  105. package/dist/src/packages/lock-file.d.ts +35 -0
  106. package/dist/src/packages/lock-file.js +117 -0
  107. package/dist/src/packages/lock-file.js.map +1 -0
  108. package/dist/src/packages/manifest-reader.d.ts +19 -0
  109. package/dist/src/packages/manifest-reader.js +91 -0
  110. package/dist/src/packages/manifest-reader.js.map +1 -0
  111. package/dist/src/packages/merge-engine.d.ts +63 -0
  112. package/dist/src/packages/merge-engine.js +357 -0
  113. package/dist/src/packages/merge-engine.js.map +1 -0
  114. package/dist/src/packages/npm-context.d.ts +56 -0
  115. package/dist/src/packages/npm-context.js +235 -0
  116. package/dist/src/packages/npm-context.js.map +1 -0
  117. package/dist/src/packages/npm-registry.d.ts +35 -0
  118. package/dist/src/packages/npm-registry.js +107 -0
  119. package/dist/src/packages/npm-registry.js.map +1 -0
  120. package/dist/src/packages/package-error.d.ts +16 -0
  121. package/dist/src/packages/package-error.js +17 -0
  122. package/dist/src/packages/package-error.js.map +1 -0
  123. package/dist/src/packages/package-types.d.ts +477 -0
  124. package/dist/src/packages/package-types.js +156 -0
  125. package/dist/src/packages/package-types.js.map +1 -0
  126. package/dist/src/packages/resolver.d.ts +41 -0
  127. package/dist/src/packages/resolver.js +353 -0
  128. package/dist/src/packages/resolver.js.map +1 -0
  129. package/dist/src/platform/config-builder.d.ts +24 -0
  130. package/dist/src/platform/config-builder.js +70 -0
  131. package/dist/src/platform/config-builder.js.map +1 -0
  132. package/dist/src/platform/index.d.ts +8 -0
  133. package/dist/src/platform/index.js +9 -0
  134. package/dist/src/platform/index.js.map +1 -0
  135. package/dist/src/platform/platform-client.d.ts +160 -0
  136. package/dist/src/platform/platform-client.js +486 -0
  137. package/dist/src/platform/platform-client.js.map +1 -0
  138. package/dist/src/platform/platform-types.d.ts +81 -0
  139. package/dist/src/platform/platform-types.js +18 -0
  140. package/dist/src/platform/platform-types.js.map +1 -0
  141. package/dist/src/providers/content-generator/google-to-llm.d.ts +87 -0
  142. package/dist/src/providers/content-generator/google-to-llm.js +226 -0
  143. package/dist/src/providers/content-generator/google-to-llm.js.map +1 -0
  144. package/dist/src/providers/content-generator/index.d.ts +10 -0
  145. package/dist/src/providers/content-generator/index.js +9 -0
  146. package/dist/src/providers/content-generator/index.js.map +1 -0
  147. package/dist/src/providers/content-generator/llm-to-google.d.ts +59 -0
  148. package/dist/src/providers/content-generator/llm-to-google.js +178 -0
  149. package/dist/src/providers/content-generator/llm-to-google.js.map +1 -0
  150. package/dist/src/providers/content-generator/multi-provider-content-generator.d.ts +61 -0
  151. package/dist/src/providers/content-generator/multi-provider-content-generator.js +144 -0
  152. package/dist/src/providers/content-generator/multi-provider-content-generator.js.map +1 -0
  153. package/dist/src/providers/runtime/anthropic-provider.d.ts +18 -0
  154. package/dist/src/providers/runtime/anthropic-provider.js +253 -0
  155. package/dist/src/providers/runtime/anthropic-provider.js.map +1 -0
  156. package/dist/src/providers/runtime/azure-provider.d.ts +25 -0
  157. package/dist/src/providers/runtime/azure-provider.js +206 -0
  158. package/dist/src/providers/runtime/azure-provider.js.map +1 -0
  159. package/dist/src/providers/runtime/bedrock-provider.d.ts +22 -0
  160. package/dist/src/providers/runtime/bedrock-provider.js +276 -0
  161. package/dist/src/providers/runtime/bedrock-provider.js.map +1 -0
  162. package/dist/src/providers/runtime/failover-provider.d.ts +30 -0
  163. package/dist/src/providers/runtime/failover-provider.js +124 -0
  164. package/dist/src/providers/runtime/failover-provider.js.map +1 -0
  165. package/dist/src/providers/runtime/google-provider.d.ts +17 -0
  166. package/dist/src/providers/runtime/google-provider.js +239 -0
  167. package/dist/src/providers/runtime/google-provider.js.map +1 -0
  168. package/dist/src/providers/runtime/index.d.ts +16 -0
  169. package/dist/src/providers/runtime/index.js +16 -0
  170. package/dist/src/providers/runtime/index.js.map +1 -0
  171. package/dist/src/providers/runtime/openai-provider.d.ts +21 -0
  172. package/dist/src/providers/runtime/openai-provider.js +266 -0
  173. package/dist/src/providers/runtime/openai-provider.js.map +1 -0
  174. package/dist/src/providers/runtime/provider-errors.d.ts +39 -0
  175. package/dist/src/providers/runtime/provider-errors.js +50 -0
  176. package/dist/src/providers/runtime/provider-errors.js.map +1 -0
  177. package/dist/src/providers/runtime/provider-factory.d.ts +19 -0
  178. package/dist/src/providers/runtime/provider-factory.js +45 -0
  179. package/dist/src/providers/runtime/provider-factory.js.map +1 -0
  180. package/dist/src/providers/runtime/runtime-provider-types.d.ts +63 -0
  181. package/dist/src/providers/runtime/runtime-provider-types.js +7 -0
  182. package/dist/src/providers/runtime/runtime-provider-types.js.map +1 -0
  183. package/dist/src/providers/runtime/streaming-types.d.ts +40 -0
  184. package/dist/src/providers/runtime/streaming-types.js +7 -0
  185. package/dist/src/providers/runtime/streaming-types.js.map +1 -0
  186. package/dist/src/repo/config-schema.d.ts +238 -0
  187. package/dist/src/repo/config-schema.js +155 -0
  188. package/dist/src/repo/config-schema.js.map +1 -0
  189. package/dist/src/repo/connection-schemas.d.ts +449 -0
  190. package/dist/src/repo/connection-schemas.js +109 -0
  191. package/dist/src/repo/connection-schemas.js.map +1 -0
  192. package/dist/src/repo/connection-types.d.ts +29 -0
  193. package/dist/src/repo/connection-types.js +7 -0
  194. package/dist/src/repo/connection-types.js.map +1 -0
  195. package/dist/src/repo/drift-detector.d.ts +26 -0
  196. package/dist/src/repo/drift-detector.js +66 -0
  197. package/dist/src/repo/drift-detector.js.map +1 -0
  198. package/dist/src/repo/graphql-drift-detector.d.ts +27 -0
  199. package/dist/src/repo/graphql-drift-detector.js +66 -0
  200. package/dist/src/repo/graphql-drift-detector.js.map +1 -0
  201. package/dist/src/repo/graphql-parser.d.ts +30 -0
  202. package/dist/src/repo/graphql-parser.js +125 -0
  203. package/dist/src/repo/graphql-parser.js.map +1 -0
  204. package/dist/src/repo/graphql-surface-parser.d.ts +20 -0
  205. package/dist/src/repo/graphql-surface-parser.js +74 -0
  206. package/dist/src/repo/graphql-surface-parser.js.map +1 -0
  207. package/dist/src/repo/index.d.ts +30 -0
  208. package/dist/src/repo/index.js +29 -0
  209. package/dist/src/repo/index.js.map +1 -0
  210. package/dist/src/repo/local-reader.d.ts +10 -0
  211. package/dist/src/repo/local-reader.js +299 -0
  212. package/dist/src/repo/local-reader.js.map +1 -0
  213. package/dist/src/repo/openapi-parser.d.ts +35 -0
  214. package/dist/src/repo/openapi-parser.js +93 -0
  215. package/dist/src/repo/openapi-parser.js.map +1 -0
  216. package/dist/src/repo/parsers.d.ts +91 -0
  217. package/dist/src/repo/parsers.js +454 -0
  218. package/dist/src/repo/parsers.js.map +1 -0
  219. package/dist/src/repo/platform-reader.d.ts +10 -0
  220. package/dist/src/repo/platform-reader.js +206 -0
  221. package/dist/src/repo/platform-reader.js.map +1 -0
  222. package/dist/src/repo/repo-loader.d.ts +14 -0
  223. package/dist/src/repo/repo-loader.js +25 -0
  224. package/dist/src/repo/repo-loader.js.map +1 -0
  225. package/dist/src/repo/repo-types.d.ts +159 -0
  226. package/dist/src/repo/repo-types.js +17 -0
  227. package/dist/src/repo/repo-types.js.map +1 -0
  228. package/dist/src/repo/spec-syncer.d.ts +30 -0
  229. package/dist/src/repo/spec-syncer.js +85 -0
  230. package/dist/src/repo/spec-syncer.js.map +1 -0
  231. package/dist/src/repo/store-loader.d.ts +19 -0
  232. package/dist/src/repo/store-loader.js +94 -0
  233. package/dist/src/repo/store-loader.js.map +1 -0
  234. package/dist/src/repo/store-schemas.d.ts +313 -0
  235. package/dist/src/repo/store-schemas.js +103 -0
  236. package/dist/src/repo/store-schemas.js.map +1 -0
  237. package/dist/src/repo/store-tool-schema.d.ts +29 -0
  238. package/dist/src/repo/store-tool-schema.js +103 -0
  239. package/dist/src/repo/store-tool-schema.js.map +1 -0
  240. package/dist/src/repo/store-types.d.ts +91 -0
  241. package/dist/src/repo/store-types.js +7 -0
  242. package/dist/src/repo/store-types.js.map +1 -0
  243. package/dist/src/repo/surface-parser.d.ts +17 -0
  244. package/dist/src/repo/surface-parser.js +75 -0
  245. package/dist/src/repo/surface-parser.js.map +1 -0
  246. package/dist/src/repo/tool-loader.d.ts +33 -0
  247. package/dist/src/repo/tool-loader.js +240 -0
  248. package/dist/src/repo/tool-loader.js.map +1 -0
  249. package/dist/src/repo/tool-types.d.ts +205 -0
  250. package/dist/src/repo/tool-types.js +61 -0
  251. package/dist/src/repo/tool-types.js.map +1 -0
  252. package/dist/src/roles/index.d.ts +7 -0
  253. package/dist/src/roles/index.js +8 -0
  254. package/dist/src/roles/index.js.map +1 -0
  255. package/dist/src/roles/role-filter.d.ts +33 -0
  256. package/dist/src/roles/role-filter.js +55 -0
  257. package/dist/src/roles/role-filter.js.map +1 -0
  258. package/dist/src/roles/role-types.d.ts +76 -0
  259. package/dist/src/roles/role-types.js +38 -0
  260. package/dist/src/roles/role-types.js.map +1 -0
  261. package/dist/src/runtime/connection-bridge.d.ts +19 -0
  262. package/dist/src/runtime/connection-bridge.js +103 -0
  263. package/dist/src/runtime/connection-bridge.js.map +1 -0
  264. package/dist/src/runtime/context-compiler.d.ts +35 -0
  265. package/dist/src/runtime/context-compiler.js +183 -0
  266. package/dist/src/runtime/context-compiler.js.map +1 -0
  267. package/dist/src/runtime/default-prompt.d.ts +28 -0
  268. package/dist/src/runtime/default-prompt.js +71 -0
  269. package/dist/src/runtime/default-prompt.js.map +1 -0
  270. package/dist/src/runtime/explore-tool.d.ts +96 -0
  271. package/dist/src/runtime/explore-tool.js +111 -0
  272. package/dist/src/runtime/explore-tool.js.map +1 -0
  273. package/dist/src/runtime/index.d.ts +26 -0
  274. package/dist/src/runtime/index.js +19 -0
  275. package/dist/src/runtime/index.js.map +1 -0
  276. package/dist/src/runtime/output-pipeline.d.ts +62 -0
  277. package/dist/src/runtime/output-pipeline.js +69 -0
  278. package/dist/src/runtime/output-pipeline.js.map +1 -0
  279. package/dist/src/runtime/plan-mode.d.ts +39 -0
  280. package/dist/src/runtime/plan-mode.js +81 -0
  281. package/dist/src/runtime/plan-mode.js.map +1 -0
  282. package/dist/src/runtime/preference-client.d.ts +39 -0
  283. package/dist/src/runtime/preference-client.js +70 -0
  284. package/dist/src/runtime/preference-client.js.map +1 -0
  285. package/dist/src/runtime/preference-detector.d.ts +22 -0
  286. package/dist/src/runtime/preference-detector.js +95 -0
  287. package/dist/src/runtime/preference-detector.js.map +1 -0
  288. package/dist/src/runtime/request-integration.d.ts +18 -0
  289. package/dist/src/runtime/request-integration.js +36 -0
  290. package/dist/src/runtime/request-integration.js.map +1 -0
  291. package/dist/src/runtime/runtime-types.d.ts +48 -0
  292. package/dist/src/runtime/runtime-types.js +7 -0
  293. package/dist/src/runtime/runtime-types.js.map +1 -0
  294. package/dist/src/runtime/session-setup.d.ts +53 -0
  295. package/dist/src/runtime/session-setup.js +90 -0
  296. package/dist/src/runtime/session-setup.js.map +1 -0
  297. package/dist/src/runtime/telemetry-client.d.ts +39 -0
  298. package/dist/src/runtime/telemetry-client.js +87 -0
  299. package/dist/src/runtime/telemetry-client.js.map +1 -0
  300. package/dist/src/runtime/telemetry-hooks.d.ts +47 -0
  301. package/dist/src/runtime/telemetry-hooks.js +115 -0
  302. package/dist/src/runtime/telemetry-hooks.js.map +1 -0
  303. package/dist/src/runtime/token-allocator.d.ts +34 -0
  304. package/dist/src/runtime/token-allocator.js +86 -0
  305. package/dist/src/runtime/token-allocator.js.map +1 -0
  306. package/dist/src/runtime/user-context.d.ts +49 -0
  307. package/dist/src/runtime/user-context.js +135 -0
  308. package/dist/src/runtime/user-context.js.map +1 -0
  309. package/dist/src/sdk.d.ts +57 -0
  310. package/dist/src/sdk.js +377 -0
  311. package/dist/src/sdk.js.map +1 -0
  312. package/dist/src/security/action-gate.d.ts +23 -0
  313. package/dist/src/security/action-gate.js +78 -0
  314. package/dist/src/security/action-gate.js.map +1 -0
  315. package/dist/src/security/field-scrubber.d.ts +27 -0
  316. package/dist/src/security/field-scrubber.js +152 -0
  317. package/dist/src/security/field-scrubber.js.map +1 -0
  318. package/dist/src/security/index.d.ts +14 -0
  319. package/dist/src/security/index.js +15 -0
  320. package/dist/src/security/index.js.map +1 -0
  321. package/dist/src/security/leak-detector.d.ts +23 -0
  322. package/dist/src/security/leak-detector.js +51 -0
  323. package/dist/src/security/leak-detector.js.map +1 -0
  324. package/dist/src/security/output-guard.d.ts +33 -0
  325. package/dist/src/security/output-guard.js +118 -0
  326. package/dist/src/security/output-guard.js.map +1 -0
  327. package/dist/src/security/pattern-scanner.d.ts +19 -0
  328. package/dist/src/security/pattern-scanner.js +66 -0
  329. package/dist/src/security/pattern-scanner.js.map +1 -0
  330. package/dist/src/security/scope-checker.d.ts +27 -0
  331. package/dist/src/security/scope-checker.js +52 -0
  332. package/dist/src/security/scope-checker.js.map +1 -0
  333. package/dist/src/security/scrub-tracker.d.ts +21 -0
  334. package/dist/src/security/scrub-tracker.js +39 -0
  335. package/dist/src/security/scrub-tracker.js.map +1 -0
  336. package/dist/src/security/security-types.d.ts +69 -0
  337. package/dist/src/security/security-types.js +17 -0
  338. package/dist/src/security/security-types.js.map +1 -0
  339. package/dist/src/security/threshold-evaluator.d.ts +13 -0
  340. package/dist/src/security/threshold-evaluator.js +44 -0
  341. package/dist/src/security/threshold-evaluator.js.map +1 -0
  342. package/dist/src/snapshot/index.d.ts +8 -0
  343. package/dist/src/snapshot/index.js +9 -0
  344. package/dist/src/snapshot/index.js.map +1 -0
  345. package/dist/src/snapshot/snapshot-builder.d.ts +37 -0
  346. package/dist/src/snapshot/snapshot-builder.js +152 -0
  347. package/dist/src/snapshot/snapshot-builder.js.map +1 -0
  348. package/dist/src/snapshot/snapshot-loader.d.ts +29 -0
  349. package/dist/src/snapshot/snapshot-loader.js +188 -0
  350. package/dist/src/snapshot/snapshot-loader.js.map +1 -0
  351. package/dist/src/snapshot/snapshot-types.d.ts +1940 -0
  352. package/dist/src/snapshot/snapshot-types.js +145 -0
  353. package/dist/src/snapshot/snapshot-types.js.map +1 -0
  354. package/dist/src/stores/index.d.ts +6 -0
  355. package/dist/src/stores/index.js +7 -0
  356. package/dist/src/stores/index.js.map +1 -0
  357. package/dist/src/stores/store-backend.d.ts +135 -0
  358. package/dist/src/stores/store-backend.js +7 -0
  359. package/dist/src/stores/store-backend.js.map +1 -0
  360. package/dist/src/templates/connections.d.ts +14 -0
  361. package/dist/src/templates/connections.js +7 -0
  362. package/dist/src/templates/connections.js.map +1 -0
  363. package/dist/src/templates/index.d.ts +7 -0
  364. package/dist/src/templates/index.js +8 -0
  365. package/dist/src/templates/index.js.map +1 -0
  366. package/dist/src/templates/template-resolver.d.ts +45 -0
  367. package/dist/src/templates/template-resolver.js +121 -0
  368. package/dist/src/templates/template-resolver.js.map +1 -0
  369. package/dist/src/tool-context.d.ts +33 -0
  370. package/dist/src/tool-context.js +7 -0
  371. package/dist/src/tool-context.js.map +1 -0
  372. package/dist/src/tool-registration.d.ts +14 -0
  373. package/dist/src/tool-registration.js +51 -0
  374. package/dist/src/tool-registration.js.map +1 -0
  375. package/dist/src/tools/amodal-tool-errors.d.ts +24 -0
  376. package/dist/src/tools/amodal-tool-errors.js +28 -0
  377. package/dist/src/tools/amodal-tool-errors.js.map +1 -0
  378. package/dist/src/tools/amodal-tool-names.d.ts +14 -0
  379. package/dist/src/tools/amodal-tool-names.js +15 -0
  380. package/dist/src/tools/amodal-tool-names.js.map +1 -0
  381. package/dist/src/tools/chain-tool-registry.d.ts +20 -0
  382. package/dist/src/tools/chain-tool-registry.js +49 -0
  383. package/dist/src/tools/chain-tool-registry.js.map +1 -0
  384. package/dist/src/tools/chain-tool-types.d.ts +190 -0
  385. package/dist/src/tools/chain-tool-types.js +50 -0
  386. package/dist/src/tools/chain-tool-types.js.map +1 -0
  387. package/dist/src/tools/chain-tool.d.ts +34 -0
  388. package/dist/src/tools/chain-tool.js +294 -0
  389. package/dist/src/tools/chain-tool.js.map +1 -0
  390. package/dist/src/tools/custom-tool-registrar.d.ts +8 -0
  391. package/dist/src/tools/custom-tool-registrar.js +10 -0
  392. package/dist/src/tools/custom-tool-registrar.js.map +1 -0
  393. package/dist/src/tools/definitions/amodal-tools.d.ts +9 -0
  394. package/dist/src/tools/definitions/amodal-tools.js +192 -0
  395. package/dist/src/tools/definitions/amodal-tools.js.map +1 -0
  396. package/dist/src/tools/function-tool-registry.d.ts +22 -0
  397. package/dist/src/tools/function-tool-registry.js +45 -0
  398. package/dist/src/tools/function-tool-registry.js.map +1 -0
  399. package/dist/src/tools/function-tool-types.d.ts +76 -0
  400. package/dist/src/tools/function-tool-types.js +27 -0
  401. package/dist/src/tools/function-tool-types.js.map +1 -0
  402. package/dist/src/tools/function-tool.d.ts +34 -0
  403. package/dist/src/tools/function-tool.js +97 -0
  404. package/dist/src/tools/function-tool.js.map +1 -0
  405. package/dist/src/tools/http-tool-registry.d.ts +20 -0
  406. package/dist/src/tools/http-tool-registry.js +34 -0
  407. package/dist/src/tools/http-tool-registry.js.map +1 -0
  408. package/dist/src/tools/http-tool-types.d.ts +92 -0
  409. package/dist/src/tools/http-tool-types.js +44 -0
  410. package/dist/src/tools/http-tool-types.js.map +1 -0
  411. package/dist/src/tools/http-tool.d.ts +32 -0
  412. package/dist/src/tools/http-tool.js +176 -0
  413. package/dist/src/tools/http-tool.js.map +1 -0
  414. package/dist/src/tools/merge-template.d.ts +33 -0
  415. package/dist/src/tools/merge-template.js +65 -0
  416. package/dist/src/tools/merge-template.js.map +1 -0
  417. package/dist/src/tools/request-tool-types.d.ts +46 -0
  418. package/dist/src/tools/request-tool-types.js +20 -0
  419. package/dist/src/tools/request-tool-types.js.map +1 -0
  420. package/dist/src/tools/request-tool.d.ts +29 -0
  421. package/dist/src/tools/request-tool.js +268 -0
  422. package/dist/src/tools/request-tool.js.map +1 -0
  423. package/dist/src/tools/store-query-tool.d.ts +29 -0
  424. package/dist/src/tools/store-query-tool.js +82 -0
  425. package/dist/src/tools/store-query-tool.js.map +1 -0
  426. package/dist/src/tools/store-write-tool.d.ts +26 -0
  427. package/dist/src/tools/store-write-tool.js +84 -0
  428. package/dist/src/tools/store-write-tool.js.map +1 -0
  429. package/dist/src/tools/tool-definition-types.d.ts +21 -0
  430. package/dist/src/tools/tool-definition-types.js +7 -0
  431. package/dist/src/tools/tool-definition-types.js.map +1 -0
  432. package/dist/src/tools/tool-utils.d.ts +29 -0
  433. package/dist/src/tools/tool-utils.js +66 -0
  434. package/dist/src/tools/tool-utils.js.map +1 -0
  435. package/dist/src/versions/bundle-loader.d.ts +37 -0
  436. package/dist/src/versions/bundle-loader.js +99 -0
  437. package/dist/src/versions/bundle-loader.js.map +1 -0
  438. package/dist/src/versions/dependency-manager.d.ts +54 -0
  439. package/dist/src/versions/dependency-manager.js +132 -0
  440. package/dist/src/versions/dependency-manager.js.map +1 -0
  441. package/dist/src/versions/handler-loader.d.ts +27 -0
  442. package/dist/src/versions/handler-loader.js +62 -0
  443. package/dist/src/versions/handler-loader.js.map +1 -0
  444. package/dist/src/versions/index.d.ts +10 -0
  445. package/dist/src/versions/index.js +11 -0
  446. package/dist/src/versions/index.js.map +1 -0
  447. package/dist/src/versions/version-bundle-types.d.ts +1278 -0
  448. package/dist/src/versions/version-bundle-types.js +207 -0
  449. package/dist/src/versions/version-bundle-types.js.map +1 -0
  450. package/dist/src/versions/version-manager.d.ts +89 -0
  451. package/dist/src/versions/version-manager.js +124 -0
  452. package/dist/src/versions/version-manager.js.map +1 -0
  453. package/dist/src/widgets/index.d.ts +8 -0
  454. package/dist/src/widgets/index.js +8 -0
  455. package/dist/src/widgets/index.js.map +1 -0
  456. package/dist/src/widgets/present-tool.d.ts +21 -0
  457. package/dist/src/widgets/present-tool.js +107 -0
  458. package/dist/src/widgets/present-tool.js.map +1 -0
  459. package/dist/src/widgets/widget-types.d.ts +78 -0
  460. package/dist/src/widgets/widget-types.js +28 -0
  461. package/dist/src/widgets/widget-types.js.map +1 -0
  462. package/dist/tsconfig.tsbuildinfo +1 -0
  463. package/package.json +50 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ /**
7
+ * Supported field types in a store entity schema.
8
+ */
9
+ export type StoreFieldType = 'string' | 'number' | 'boolean' | 'datetime' | 'enum' | 'array' | 'object' | 'ref';
10
+ /**
11
+ * A single field definition within a store entity schema.
12
+ */
13
+ export interface StoreFieldDefinition {
14
+ /** The field type */
15
+ type: StoreFieldType;
16
+ /** If true, the field may be null */
17
+ nullable?: boolean;
18
+ /** For enum fields — allowed values */
19
+ values?: string[];
20
+ /** For number fields — minimum value */
21
+ min?: number;
22
+ /** For number fields — maximum value */
23
+ max?: number;
24
+ /** For array fields — the element type */
25
+ item?: StoreFieldDefinition;
26
+ /** For object fields — nested field definitions */
27
+ fields?: Record<string, StoreFieldDefinition>;
28
+ /** For ref fields — the target store name */
29
+ store?: string;
30
+ }
31
+ /**
32
+ * The entity definition within a store — name, key template, and schema.
33
+ */
34
+ export interface StoreEntityDefinition {
35
+ /** TypeScript type name for the entity (e.g., "ClassifiedAlert") */
36
+ name: string;
37
+ /** Key template (e.g., "{event_id}" or "alert:{event_id}") */
38
+ key: string;
39
+ /** Field definitions for the entity */
40
+ schema: Record<string, StoreFieldDefinition>;
41
+ }
42
+ /**
43
+ * TTL configuration for a store. Either a simple number (seconds)
44
+ * or a conditional config with overrides.
45
+ */
46
+ export type StoreTtlConfig = number | {
47
+ default: number;
48
+ override?: Array<{
49
+ condition: string;
50
+ ttl: number;
51
+ }>;
52
+ };
53
+ /**
54
+ * Failure handling configuration for store writes.
55
+ */
56
+ export interface StoreFailureConfig {
57
+ /** How to handle write failures */
58
+ mode: 'partial' | 'all-or-nothing' | 'skip';
59
+ /** Number of retries before giving up */
60
+ retries?: number;
61
+ /** Backoff strategy between retries */
62
+ backoff?: 'exponential' | 'linear' | 'none';
63
+ /** Whether to store failed writes in a dead-letter collection */
64
+ deadLetter?: boolean;
65
+ }
66
+ /**
67
+ * History/versioning configuration for a store.
68
+ */
69
+ export interface StoreHistoryConfig {
70
+ /** Number of previous versions to retain per document */
71
+ versions: number;
72
+ }
73
+ /**
74
+ * A fully loaded store definition, ready for use by the runtime.
75
+ */
76
+ export interface LoadedStore {
77
+ /** Store name (from filename or "name" field) — kebab-case */
78
+ name: string;
79
+ /** Entity definition: type name, key template, field schema */
80
+ entity: StoreEntityDefinition;
81
+ /** TTL configuration — seconds or conditional */
82
+ ttl?: StoreTtlConfig;
83
+ /** Failure handling configuration */
84
+ failure?: StoreFailureConfig;
85
+ /** Version history configuration */
86
+ history?: StoreHistoryConfig;
87
+ /** Whether to store reasoning traces alongside documents */
88
+ trace?: boolean;
89
+ /** Filesystem path to the store definition file */
90
+ location: string;
91
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=store-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-types.js","sourceRoot":"","sources":["../../../src/repo/store-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import type { SurfaceEndpoint } from './connection-types.js';
7
+ /**
8
+ * Parse surface.md content into SurfaceEndpoint[].
9
+ *
10
+ * States:
11
+ * - scanning: before any ## Included / ## Excluded heading
12
+ * - included: inside ## Included section
13
+ * - excluded: inside ## Excluded section
14
+ *
15
+ * If no ## Included heading is found, all ### endpoints are treated as included.
16
+ */
17
+ export declare function parseSurface(content: string): SurfaceEndpoint[];
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ const ENDPOINT_HEADING_RE = /^###\s+(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\s+(\S+)/;
7
+ const INCLUDED_HEADING_RE = /^##\s+Included/i;
8
+ const EXCLUDED_HEADING_RE = /^##\s+Excluded/i;
9
+ /**
10
+ * Parse surface.md content into SurfaceEndpoint[].
11
+ *
12
+ * States:
13
+ * - scanning: before any ## Included / ## Excluded heading
14
+ * - included: inside ## Included section
15
+ * - excluded: inside ## Excluded section
16
+ *
17
+ * If no ## Included heading is found, all ### endpoints are treated as included.
18
+ */
19
+ export function parseSurface(content) {
20
+ const lines = content.split('\n');
21
+ const endpoints = [];
22
+ let state = 'scanning';
23
+ let hasIncludedSection = false;
24
+ let currentEndpoint = null;
25
+ const descriptionLines = [];
26
+ function flushEndpoint() {
27
+ if (currentEndpoint) {
28
+ currentEndpoint.description = descriptionLines.join('\n').trim();
29
+ endpoints.push(currentEndpoint);
30
+ descriptionLines.length = 0;
31
+ currentEndpoint = null;
32
+ }
33
+ }
34
+ for (const line of lines) {
35
+ // Check for section headings
36
+ if (INCLUDED_HEADING_RE.test(line)) {
37
+ flushEndpoint();
38
+ state = 'included';
39
+ hasIncludedSection = true;
40
+ continue;
41
+ }
42
+ if (EXCLUDED_HEADING_RE.test(line)) {
43
+ flushEndpoint();
44
+ state = 'excluded';
45
+ continue;
46
+ }
47
+ // Check for endpoint headings
48
+ const endpointMatch = ENDPOINT_HEADING_RE.exec(line);
49
+ if (endpointMatch) {
50
+ flushEndpoint();
51
+ const included = state === 'excluded' ? false : true;
52
+ currentEndpoint = {
53
+ method: endpointMatch[1],
54
+ path: endpointMatch[2],
55
+ description: '',
56
+ included,
57
+ };
58
+ continue;
59
+ }
60
+ // Accumulate description lines
61
+ if (currentEndpoint) {
62
+ descriptionLines.push(line);
63
+ }
64
+ }
65
+ // Flush last endpoint
66
+ flushEndpoint();
67
+ // If no ## Included section was found, all endpoints are included (already the default)
68
+ // If there was an included section, endpoints found in scanning state
69
+ // (before any section) should also be treated as included
70
+ if (!hasIncludedSection) {
71
+ // All endpoints already have included = true (scanning state default)
72
+ }
73
+ return endpoints;
74
+ }
75
+ //# sourceMappingURL=surface-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-parser.js","sourceRoot":"","sources":["../../../src/repo/surface-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,mBAAmB,GAAG,yDAAyD,CAAC;AACtF,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAC9C,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAE9C;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,IAAI,KAAK,GAAgB,UAAU,CAAC;IACpC,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,eAAe,GAA2B,IAAI,CAAC;IACnD,MAAM,gBAAgB,GAAa,EAAE,CAAC;IAEtC,SAAS,aAAa;QACpB,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,CAAC,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACjE,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAChC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5B,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,6BAA6B;QAC7B,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,aAAa,EAAE,CAAC;YAChB,KAAK,GAAG,UAAU,CAAC;YACnB,kBAAkB,GAAG,IAAI,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,aAAa,EAAE,CAAC;YAChB,KAAK,GAAG,UAAU,CAAC;YACnB,SAAS;QACX,CAAC;QAED,8BAA8B;QAC9B,MAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YACrD,eAAe,GAAG;gBAChB,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;gBACxB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;gBACtB,WAAW,EAAE,EAAE;gBACf,QAAQ;aACT,CAAC;YACF,SAAS;QACX,CAAC;QAED,+BAA+B;QAC/B,IAAI,eAAe,EAAE,CAAC;YACpB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,aAAa,EAAE,CAAC;IAEhB,wFAAwF;IACxF,sEAAsE;IACtE,0DAA0D;IAC1D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,sEAAsE;IACxE,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import type { LoadedTool, ToolHandlerDefinition } from './tool-types.js';
7
+ /**
8
+ * Check if a value is a ToolHandlerDefinition (from defineToolHandler).
9
+ */
10
+ declare function isToolHandlerDefinition(value: unknown): value is ToolHandlerDefinition;
11
+ /**
12
+ * Load all custom tools from the tools/ directory.
13
+ *
14
+ * Each tool is a subdirectory containing either:
15
+ *
16
+ * **Option A — tool.json + handler.ts:**
17
+ * ```
18
+ * tools/my_tool/
19
+ * tool.json ← { "description": "...", "parameters": { ... } }
20
+ * handler.ts ← export default async (params, ctx) => { ... }
21
+ * ```
22
+ *
23
+ * **Option B — handler.ts only (single-file tool):**
24
+ * ```
25
+ * tools/my_tool/
26
+ * handler.ts ← export default defineToolHandler({ description: "...", handler: ... })
27
+ * ```
28
+ *
29
+ * The tool name is always the directory name (must be snake_case).
30
+ * Missing tools/ directory returns [].
31
+ */
32
+ export declare function loadTools(repoPath: string): Promise<LoadedTool[]>;
33
+ export { isToolHandlerDefinition };
@@ -0,0 +1,240 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { readFile, readdir, stat } from 'node:fs/promises';
7
+ import * as path from 'node:path';
8
+ import { ToolJsonSchema, TOOL_NAME_REGEX } from './tool-types.js';
9
+ import { RepoError } from './repo-types.js';
10
+ /**
11
+ * List subdirectories in a directory. Returns [] if dir doesn't exist.
12
+ */
13
+ async function listSubdirs(dirPath) {
14
+ try {
15
+ const entries = await readdir(dirPath, { withFileTypes: true });
16
+ return entries
17
+ .filter((e) => e.isDirectory())
18
+ .map((e) => e.name);
19
+ }
20
+ catch {
21
+ return [];
22
+ }
23
+ }
24
+ /**
25
+ * Check if a file exists.
26
+ */
27
+ async function fileExists(filePath) {
28
+ try {
29
+ const s = await stat(filePath);
30
+ return s.isFile();
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ /**
37
+ * Validate that a directory name is a valid tool name.
38
+ */
39
+ function validateToolName(dirName) {
40
+ if (!TOOL_NAME_REGEX.test(dirName)) {
41
+ throw new RepoError('CONFIG_VALIDATION_FAILED', `Tool directory "${dirName}" is not a valid tool name. ` +
42
+ 'Tool names must be snake_case (lowercase letters, digits, underscores), starting with a letter.');
43
+ }
44
+ }
45
+ /**
46
+ * Load a tool that has a tool.json file.
47
+ */
48
+ async function loadToolWithJson(toolDir, dirName, handlerPath) {
49
+ const toolJsonPath = path.join(toolDir, 'tool.json');
50
+ let toolJsonContent;
51
+ try {
52
+ toolJsonContent = await readFile(toolJsonPath, 'utf-8');
53
+ }
54
+ catch {
55
+ throw new RepoError('CONFIG_NOT_FOUND', `Missing tool.json for tool "${dirName}" at ${toolJsonPath}`);
56
+ }
57
+ let raw;
58
+ try {
59
+ raw = JSON.parse(toolJsonContent);
60
+ }
61
+ catch (err) {
62
+ throw new RepoError('CONFIG_PARSE_FAILED', `Invalid JSON in tool.json for tool "${dirName}"`, err);
63
+ }
64
+ const parsed = ToolJsonSchema.safeParse(raw);
65
+ if (!parsed.success) {
66
+ const issues = parsed.error.issues
67
+ .map((i) => `${i.path.join('.')}: ${i.message}`)
68
+ .join('; ');
69
+ throw new RepoError('CONFIG_VALIDATION_FAILED', `Invalid tool.json for tool "${dirName}": ${issues}`);
70
+ }
71
+ const toolJson = parsed.data;
72
+ // If name is provided, it must match the directory name
73
+ if (toolJson.name && toolJson.name !== dirName) {
74
+ throw new RepoError('CONFIG_VALIDATION_FAILED', `Tool name "${toolJson.name}" in tool.json does not match directory name "${dirName}". ` +
75
+ 'Either remove the name field (directory name is used) or make them match.');
76
+ }
77
+ const [hasPackageJson, hasSetupScript, hasRequirementsTxt, hasDockerfile] = await Promise.all([
78
+ fileExists(path.join(toolDir, 'package.json')),
79
+ fileExists(path.join(toolDir, 'setup.sh')),
80
+ fileExists(path.join(toolDir, 'requirements.txt')),
81
+ fileExists(path.join(toolDir, 'Dockerfile')),
82
+ ]);
83
+ const loaded = {
84
+ name: dirName,
85
+ description: toolJson.description,
86
+ parameters: toolJson.parameters,
87
+ confirm: toolJson.confirm,
88
+ timeout: toolJson.timeout,
89
+ env: toolJson.env,
90
+ handlerPath,
91
+ location: toolDir,
92
+ hasPackageJson,
93
+ hasSetupScript,
94
+ hasRequirementsTxt,
95
+ hasDockerfile,
96
+ sandboxLanguage: toolJson.sandbox?.language ?? 'typescript',
97
+ };
98
+ if (toolJson.responseShaping) {
99
+ loaded.responseShaping = toolJson.responseShaping;
100
+ }
101
+ return loaded;
102
+ }
103
+ /**
104
+ * Check if a value is a ToolHandlerDefinition (from defineToolHandler).
105
+ */
106
+ function isToolHandlerDefinition(value) {
107
+ return (typeof value === 'object' &&
108
+ value !== null &&
109
+ '__toolHandler' in value &&
110
+ value['__toolHandler'] === true);
111
+ }
112
+ /**
113
+ * Load a tool from handler.ts metadata (no tool.json).
114
+ *
115
+ * Supports two patterns:
116
+ *
117
+ * 1. defineToolHandler default export:
118
+ * ```ts
119
+ * export default defineToolHandler({
120
+ * description: '...',
121
+ * parameters: { ... },
122
+ * handler: async (params, ctx) => { ... }
123
+ * })
124
+ * ```
125
+ *
126
+ * 2. Named exports:
127
+ * ```ts
128
+ * export const description = '...'
129
+ * export const parameters = { ... }
130
+ * export default async (params, ctx) => { ... }
131
+ * ```
132
+ */
133
+ async function loadToolFromHandler(toolDir, dirName, handlerPath) {
134
+ // We can't dynamically import at load time in the core package
135
+ // (handler.ts is TypeScript that hasn't been compiled).
136
+ // Instead, we read the file and extract metadata from export statements.
137
+ let content;
138
+ try {
139
+ content = await readFile(handlerPath, 'utf-8');
140
+ }
141
+ catch {
142
+ throw new RepoError('READ_FAILED', `Failed to read handler.ts for tool "${dirName}"`);
143
+ }
144
+ // Look for a defineToolHandler call — if present, we'll extract metadata at runtime.
145
+ // For load-time, extract the description from the source text.
146
+ const meta = extractHandlerMetadata(content, dirName);
147
+ const [hasPackageJson, hasSetupScript, hasRequirementsTxt, hasDockerfile] = await Promise.all([
148
+ fileExists(path.join(toolDir, 'package.json')),
149
+ fileExists(path.join(toolDir, 'setup.sh')),
150
+ fileExists(path.join(toolDir, 'requirements.txt')),
151
+ fileExists(path.join(toolDir, 'Dockerfile')),
152
+ ]);
153
+ return {
154
+ name: dirName,
155
+ description: meta.description,
156
+ parameters: meta.parameters ?? {},
157
+ confirm: meta.confirm ?? false,
158
+ timeout: meta.timeout ?? 30000,
159
+ env: meta.env ?? [],
160
+ handlerPath,
161
+ location: toolDir,
162
+ hasPackageJson,
163
+ hasSetupScript,
164
+ hasRequirementsTxt,
165
+ hasDockerfile,
166
+ sandboxLanguage: 'typescript',
167
+ };
168
+ }
169
+ /**
170
+ * Extract tool metadata from handler.ts source text.
171
+ *
172
+ * Looks for patterns like:
173
+ * export const description = "..."
174
+ * export const description = '...'
175
+ * defineToolHandler({ description: "..." })
176
+ */
177
+ function extractHandlerMetadata(source, dirName) {
178
+ // Try to find description from named export
179
+ const descMatch = source.match(/export\s+const\s+description\s*=\s*(['"`])([\s\S]*?)\1/);
180
+ if (descMatch) {
181
+ return { description: descMatch[2] };
182
+ }
183
+ // Try to find description from defineToolHandler call
184
+ const defineMatch = source.match(/defineToolHandler\s*\(\s*\{[^}]*description\s*:\s*(['"`])([\s\S]*?)\1/);
185
+ if (defineMatch) {
186
+ return { description: defineMatch[2] };
187
+ }
188
+ throw new RepoError('CONFIG_VALIDATION_FAILED', `Tool "${dirName}" has no tool.json and no description found in handler.ts. ` +
189
+ 'Either create a tool.json with a description, use defineToolHandler({ description: "..." }), ' +
190
+ 'or add: export const description = "..."');
191
+ }
192
+ /**
193
+ * Load all custom tools from the tools/ directory.
194
+ *
195
+ * Each tool is a subdirectory containing either:
196
+ *
197
+ * **Option A — tool.json + handler.ts:**
198
+ * ```
199
+ * tools/my_tool/
200
+ * tool.json ← { "description": "...", "parameters": { ... } }
201
+ * handler.ts ← export default async (params, ctx) => { ... }
202
+ * ```
203
+ *
204
+ * **Option B — handler.ts only (single-file tool):**
205
+ * ```
206
+ * tools/my_tool/
207
+ * handler.ts ← export default defineToolHandler({ description: "...", handler: ... })
208
+ * ```
209
+ *
210
+ * The tool name is always the directory name (must be snake_case).
211
+ * Missing tools/ directory returns [].
212
+ */
213
+ export async function loadTools(repoPath) {
214
+ const toolsDir = path.join(repoPath, 'tools');
215
+ const dirs = await listSubdirs(toolsDir);
216
+ if (dirs.length === 0) {
217
+ return [];
218
+ }
219
+ const results = await Promise.all(dirs.map(async (dirName) => {
220
+ const toolDir = path.join(toolsDir, dirName);
221
+ // Validate directory name is a valid tool name
222
+ validateToolName(dirName);
223
+ // handler.ts is always required
224
+ const handlerPath = path.join(toolDir, 'handler.ts');
225
+ if (!(await fileExists(handlerPath))) {
226
+ throw new RepoError('CONFIG_NOT_FOUND', `Missing handler.ts for tool "${dirName}" at ${handlerPath}`);
227
+ }
228
+ // If tool.json exists, use it for metadata
229
+ const hasToolJson = await fileExists(path.join(toolDir, 'tool.json'));
230
+ if (hasToolJson) {
231
+ return loadToolWithJson(toolDir, dirName, handlerPath);
232
+ }
233
+ // Otherwise, extract metadata from handler.ts
234
+ return loadToolFromHandler(toolDir, dirName, handlerPath);
235
+ }));
236
+ return results;
237
+ }
238
+ // Re-export for use by the runtime when loading defineToolHandler modules
239
+ export { isToolHandlerDefinition };
240
+ //# sourceMappingURL=tool-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-loader.js","sourceRoot":"","sources":["../../../src/repo/tool-loader.ts"],"names":[],"mappings":"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"}