sammy-sdk 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 (274) hide show
  1. package/README.md +75 -0
  2. package/dist/cli/commands/dev.d.ts +3 -0
  3. package/dist/cli/commands/dev.d.ts.map +1 -0
  4. package/dist/cli/commands/dev.js +13 -0
  5. package/dist/cli/commands/dev.js.map +1 -0
  6. package/dist/cli/commands/eval.d.ts +3 -0
  7. package/dist/cli/commands/eval.d.ts.map +1 -0
  8. package/dist/cli/commands/eval.js +28 -0
  9. package/dist/cli/commands/eval.js.map +1 -0
  10. package/dist/cli/commands/generate.d.ts +3 -0
  11. package/dist/cli/commands/generate.d.ts.map +1 -0
  12. package/dist/cli/commands/generate.js +10 -0
  13. package/dist/cli/commands/generate.js.map +1 -0
  14. package/dist/cli/commands/init.d.ts +3 -0
  15. package/dist/cli/commands/init.d.ts.map +1 -0
  16. package/dist/cli/commands/init.js +9 -0
  17. package/dist/cli/commands/init.js.map +1 -0
  18. package/dist/cli/index.d.ts +3 -0
  19. package/dist/cli/index.d.ts.map +1 -0
  20. package/dist/cli/index.js +17 -0
  21. package/dist/cli/index.js.map +1 -0
  22. package/dist/cloud/sammy-cloud.d.ts +10 -0
  23. package/dist/cloud/sammy-cloud.d.ts.map +1 -0
  24. package/dist/cloud/sammy-cloud.js +113 -0
  25. package/dist/cloud/sammy-cloud.js.map +1 -0
  26. package/dist/dev/chat-ui.d.ts +6 -0
  27. package/dist/dev/chat-ui.d.ts.map +1 -0
  28. package/dist/dev/chat-ui.js +95 -0
  29. package/dist/dev/chat-ui.js.map +1 -0
  30. package/dist/dev/server.d.ts +5 -0
  31. package/dist/dev/server.d.ts.map +1 -0
  32. package/dist/dev/server.js +87 -0
  33. package/dist/dev/server.js.map +1 -0
  34. package/dist/dev/watcher.d.ts +2 -0
  35. package/dist/dev/watcher.d.ts.map +1 -0
  36. package/dist/dev/watcher.js +19 -0
  37. package/dist/dev/watcher.js.map +1 -0
  38. package/dist/discovery/ast/call-route-finder.d.ts +16 -0
  39. package/dist/discovery/ast/call-route-finder.d.ts.map +1 -0
  40. package/dist/discovery/ast/call-route-finder.js +106 -0
  41. package/dist/discovery/ast/call-route-finder.js.map +1 -0
  42. package/dist/discovery/ast/handler-detector.d.ts +8 -0
  43. package/dist/discovery/ast/handler-detector.d.ts.map +1 -0
  44. package/dist/discovery/ast/handler-detector.js +56 -0
  45. package/dist/discovery/ast/handler-detector.js.map +1 -0
  46. package/dist/discovery/ast/named-export-finder.d.ts +7 -0
  47. package/dist/discovery/ast/named-export-finder.d.ts.map +1 -0
  48. package/dist/discovery/ast/named-export-finder.js +21 -0
  49. package/dist/discovery/ast/named-export-finder.js.map +1 -0
  50. package/dist/discovery/ast/param-extractor.d.ts +7 -0
  51. package/dist/discovery/ast/param-extractor.d.ts.map +1 -0
  52. package/dist/discovery/ast/param-extractor.js +236 -0
  53. package/dist/discovery/ast/param-extractor.js.map +1 -0
  54. package/dist/discovery/ast/project.d.ts +8 -0
  55. package/dist/discovery/ast/project.d.ts.map +1 -0
  56. package/dist/discovery/ast/project.js +66 -0
  57. package/dist/discovery/ast/project.js.map +1 -0
  58. package/dist/discovery/ast/resolve.d.ts +5 -0
  59. package/dist/discovery/ast/resolve.d.ts.map +1 -0
  60. package/dist/discovery/ast/resolve.js +60 -0
  61. package/dist/discovery/ast/resolve.js.map +1 -0
  62. package/dist/discovery/ast/side-effect-tracer.d.ts +4 -0
  63. package/dist/discovery/ast/side-effect-tracer.d.ts.map +1 -0
  64. package/dist/discovery/ast/side-effect-tracer.js +100 -0
  65. package/dist/discovery/ast/side-effect-tracer.js.map +1 -0
  66. package/dist/discovery/ast/source-files.d.ts +3 -0
  67. package/dist/discovery/ast/source-files.d.ts.map +1 -0
  68. package/dist/discovery/ast/source-files.js +37 -0
  69. package/dist/discovery/ast/source-files.js.map +1 -0
  70. package/dist/discovery/config-generator.d.ts +5 -0
  71. package/dist/discovery/config-generator.d.ts.map +1 -0
  72. package/dist/discovery/config-generator.js +71 -0
  73. package/dist/discovery/config-generator.js.map +1 -0
  74. package/dist/discovery/extractors/auth-detector.d.ts +3 -0
  75. package/dist/discovery/extractors/auth-detector.d.ts.map +1 -0
  76. package/dist/discovery/extractors/auth-detector.js +97 -0
  77. package/dist/discovery/extractors/auth-detector.js.map +1 -0
  78. package/dist/discovery/extractors/http-call-extractor.d.ts +5 -0
  79. package/dist/discovery/extractors/http-call-extractor.d.ts.map +1 -0
  80. package/dist/discovery/extractors/http-call-extractor.js +122 -0
  81. package/dist/discovery/extractors/http-call-extractor.js.map +1 -0
  82. package/dist/discovery/extractors/model-extractor.d.ts +4 -0
  83. package/dist/discovery/extractors/model-extractor.d.ts.map +1 -0
  84. package/dist/discovery/extractors/model-extractor.js +256 -0
  85. package/dist/discovery/extractors/model-extractor.js.map +1 -0
  86. package/dist/discovery/extractors/nestjs-extractor.d.ts +4 -0
  87. package/dist/discovery/extractors/nestjs-extractor.d.ts.map +1 -0
  88. package/dist/discovery/extractors/nestjs-extractor.js +156 -0
  89. package/dist/discovery/extractors/nestjs-extractor.js.map +1 -0
  90. package/dist/discovery/extractors/remix-extractor.d.ts +5 -0
  91. package/dist/discovery/extractors/remix-extractor.d.ts.map +1 -0
  92. package/dist/discovery/extractors/remix-extractor.js +118 -0
  93. package/dist/discovery/extractors/remix-extractor.js.map +1 -0
  94. package/dist/discovery/extractors/route-extractor.d.ts +4 -0
  95. package/dist/discovery/extractors/route-extractor.d.ts.map +1 -0
  96. package/dist/discovery/extractors/route-extractor.js +108 -0
  97. package/dist/discovery/extractors/route-extractor.js.map +1 -0
  98. package/dist/discovery/extractors/server-action-extractor.d.ts +4 -0
  99. package/dist/discovery/extractors/server-action-extractor.d.ts.map +1 -0
  100. package/dist/discovery/extractors/server-action-extractor.js +129 -0
  101. package/dist/discovery/extractors/server-action-extractor.js.map +1 -0
  102. package/dist/discovery/extractors/service-detector.d.ts +3 -0
  103. package/dist/discovery/extractors/service-detector.d.ts.map +1 -0
  104. package/dist/discovery/extractors/service-detector.js +114 -0
  105. package/dist/discovery/extractors/service-detector.js.map +1 -0
  106. package/dist/discovery/extractors/sveltekit-extractor.d.ts +5 -0
  107. package/dist/discovery/extractors/sveltekit-extractor.d.ts.map +1 -0
  108. package/dist/discovery/extractors/sveltekit-extractor.js +129 -0
  109. package/dist/discovery/extractors/sveltekit-extractor.js.map +1 -0
  110. package/dist/discovery/extractors/trpc-extractor.d.ts +4 -0
  111. package/dist/discovery/extractors/trpc-extractor.d.ts.map +1 -0
  112. package/dist/discovery/extractors/trpc-extractor.js +191 -0
  113. package/dist/discovery/extractors/trpc-extractor.js.map +1 -0
  114. package/dist/discovery/framework-detector.d.ts +9 -0
  115. package/dist/discovery/framework-detector.d.ts.map +1 -0
  116. package/dist/discovery/framework-detector.js +68 -0
  117. package/dist/discovery/framework-detector.js.map +1 -0
  118. package/dist/discovery/init.d.ts +4 -0
  119. package/dist/discovery/init.d.ts.map +1 -0
  120. package/dist/discovery/init.js +102 -0
  121. package/dist/discovery/init.js.map +1 -0
  122. package/dist/discovery/llm-analyzer.d.ts +32 -0
  123. package/dist/discovery/llm-analyzer.d.ts.map +1 -0
  124. package/dist/discovery/llm-analyzer.js +162 -0
  125. package/dist/discovery/llm-analyzer.js.map +1 -0
  126. package/dist/discovery/orchestrator.d.ts +4 -0
  127. package/dist/discovery/orchestrator.d.ts.map +1 -0
  128. package/dist/discovery/orchestrator.js +47 -0
  129. package/dist/discovery/orchestrator.js.map +1 -0
  130. package/dist/discovery/scanners/express-scanner.d.ts +3 -0
  131. package/dist/discovery/scanners/express-scanner.d.ts.map +1 -0
  132. package/dist/discovery/scanners/express-scanner.js +10 -0
  133. package/dist/discovery/scanners/express-scanner.js.map +1 -0
  134. package/dist/discovery/scanners/fastify-scanner.d.ts +3 -0
  135. package/dist/discovery/scanners/fastify-scanner.d.ts.map +1 -0
  136. package/dist/discovery/scanners/fastify-scanner.js +10 -0
  137. package/dist/discovery/scanners/fastify-scanner.js.map +1 -0
  138. package/dist/discovery/scanners/hono-scanner.d.ts +3 -0
  139. package/dist/discovery/scanners/hono-scanner.d.ts.map +1 -0
  140. package/dist/discovery/scanners/hono-scanner.js +10 -0
  141. package/dist/discovery/scanners/hono-scanner.js.map +1 -0
  142. package/dist/discovery/scanners/nestjs-scanner.d.ts +3 -0
  143. package/dist/discovery/scanners/nestjs-scanner.d.ts.map +1 -0
  144. package/dist/discovery/scanners/nestjs-scanner.js +10 -0
  145. package/dist/discovery/scanners/nestjs-scanner.js.map +1 -0
  146. package/dist/discovery/scanners/nextjs-scanner.d.ts +3 -0
  147. package/dist/discovery/scanners/nextjs-scanner.d.ts.map +1 -0
  148. package/dist/discovery/scanners/nextjs-scanner.js +15 -0
  149. package/dist/discovery/scanners/nextjs-scanner.js.map +1 -0
  150. package/dist/discovery/scanners/registry.d.ts +3 -0
  151. package/dist/discovery/scanners/registry.d.ts.map +1 -0
  152. package/dist/discovery/scanners/registry.js +22 -0
  153. package/dist/discovery/scanners/registry.js.map +1 -0
  154. package/dist/discovery/scanners/remix-scanner.d.ts +3 -0
  155. package/dist/discovery/scanners/remix-scanner.d.ts.map +1 -0
  156. package/dist/discovery/scanners/remix-scanner.js +13 -0
  157. package/dist/discovery/scanners/remix-scanner.js.map +1 -0
  158. package/dist/discovery/scanners/sveltekit-scanner.d.ts +3 -0
  159. package/dist/discovery/scanners/sveltekit-scanner.d.ts.map +1 -0
  160. package/dist/discovery/scanners/sveltekit-scanner.js +10 -0
  161. package/dist/discovery/scanners/sveltekit-scanner.js.map +1 -0
  162. package/dist/discovery/scanners/trpc-scanner.d.ts +3 -0
  163. package/dist/discovery/scanners/trpc-scanner.d.ts.map +1 -0
  164. package/dist/discovery/scanners/trpc-scanner.js +21 -0
  165. package/dist/discovery/scanners/trpc-scanner.js.map +1 -0
  166. package/dist/discovery/scanners/types.d.ts +18 -0
  167. package/dist/discovery/scanners/types.d.ts.map +1 -0
  168. package/dist/discovery/scanners/types.js +2 -0
  169. package/dist/discovery/scanners/types.js.map +1 -0
  170. package/dist/discovery/types.d.ts +60 -0
  171. package/dist/discovery/types.d.ts.map +1 -0
  172. package/dist/discovery/types.js +2 -0
  173. package/dist/discovery/types.js.map +1 -0
  174. package/dist/eval/diagnoser.d.ts +4 -0
  175. package/dist/eval/diagnoser.d.ts.map +1 -0
  176. package/dist/eval/diagnoser.js +97 -0
  177. package/dist/eval/diagnoser.js.map +1 -0
  178. package/dist/eval/judge.d.ts +8 -0
  179. package/dist/eval/judge.d.ts.map +1 -0
  180. package/dist/eval/judge.js +71 -0
  181. package/dist/eval/judge.js.map +1 -0
  182. package/dist/eval/loop-guard.d.ts +12 -0
  183. package/dist/eval/loop-guard.d.ts.map +1 -0
  184. package/dist/eval/loop-guard.js +45 -0
  185. package/dist/eval/loop-guard.js.map +1 -0
  186. package/dist/eval/refiner.d.ts +5 -0
  187. package/dist/eval/refiner.d.ts.map +1 -0
  188. package/dist/eval/refiner.js +149 -0
  189. package/dist/eval/refiner.js.map +1 -0
  190. package/dist/eval/runner.d.ts +27 -0
  191. package/dist/eval/runner.d.ts.map +1 -0
  192. package/dist/eval/runner.js +198 -0
  193. package/dist/eval/runner.js.map +1 -0
  194. package/dist/eval/scenario-generator.d.ts +5 -0
  195. package/dist/eval/scenario-generator.d.ts.map +1 -0
  196. package/dist/eval/scenario-generator.js +185 -0
  197. package/dist/eval/scenario-generator.js.map +1 -0
  198. package/dist/eval/scorer.d.ts +9 -0
  199. package/dist/eval/scorer.d.ts.map +1 -0
  200. package/dist/eval/scorer.js +189 -0
  201. package/dist/eval/scorer.js.map +1 -0
  202. package/dist/eval/types.d.ts +135 -0
  203. package/dist/eval/types.d.ts.map +1 -0
  204. package/dist/eval/types.js +37 -0
  205. package/dist/eval/types.js.map +1 -0
  206. package/dist/generator/agent-generator.d.ts +3 -0
  207. package/dist/generator/agent-generator.d.ts.map +1 -0
  208. package/dist/generator/agent-generator.js +29 -0
  209. package/dist/generator/agent-generator.js.map +1 -0
  210. package/dist/generator/generate.d.ts +5 -0
  211. package/dist/generator/generate.d.ts.map +1 -0
  212. package/dist/generator/generate.js +119 -0
  213. package/dist/generator/generate.js.map +1 -0
  214. package/dist/generator/handler-generator.d.ts +3 -0
  215. package/dist/generator/handler-generator.d.ts.map +1 -0
  216. package/dist/generator/handler-generator.js +66 -0
  217. package/dist/generator/handler-generator.js.map +1 -0
  218. package/dist/generator/index-generator.d.ts +3 -0
  219. package/dist/generator/index-generator.d.ts.map +1 -0
  220. package/dist/generator/index-generator.js +28 -0
  221. package/dist/generator/index-generator.js.map +1 -0
  222. package/dist/generator/merge-logic.d.ts +15 -0
  223. package/dist/generator/merge-logic.d.ts.map +1 -0
  224. package/dist/generator/merge-logic.js +52 -0
  225. package/dist/generator/merge-logic.js.map +1 -0
  226. package/dist/generator/router-generator.d.ts +3 -0
  227. package/dist/generator/router-generator.d.ts.map +1 -0
  228. package/dist/generator/router-generator.js +55 -0
  229. package/dist/generator/router-generator.js.map +1 -0
  230. package/dist/generator/schema-generator.d.ts +3 -0
  231. package/dist/generator/schema-generator.d.ts.map +1 -0
  232. package/dist/generator/schema-generator.js +58 -0
  233. package/dist/generator/schema-generator.js.map +1 -0
  234. package/dist/index.d.ts +4 -0
  235. package/dist/index.d.ts.map +1 -0
  236. package/dist/index.js +2 -0
  237. package/dist/index.js.map +1 -0
  238. package/dist/runtime/agent-orchestrator.d.ts +19 -0
  239. package/dist/runtime/agent-orchestrator.d.ts.map +1 -0
  240. package/dist/runtime/agent-orchestrator.js +96 -0
  241. package/dist/runtime/agent-orchestrator.js.map +1 -0
  242. package/dist/runtime/agent-runner.d.ts +22 -0
  243. package/dist/runtime/agent-runner.d.ts.map +1 -0
  244. package/dist/runtime/agent-runner.js +59 -0
  245. package/dist/runtime/agent-runner.js.map +1 -0
  246. package/dist/runtime/config-loader.d.ts +12 -0
  247. package/dist/runtime/config-loader.d.ts.map +1 -0
  248. package/dist/runtime/config-loader.js +42 -0
  249. package/dist/runtime/config-loader.js.map +1 -0
  250. package/dist/runtime/conversation-manager.d.ts +16 -0
  251. package/dist/runtime/conversation-manager.d.ts.map +1 -0
  252. package/dist/runtime/conversation-manager.js +33 -0
  253. package/dist/runtime/conversation-manager.js.map +1 -0
  254. package/dist/runtime/sammy.d.ts +17 -0
  255. package/dist/runtime/sammy.d.ts.map +1 -0
  256. package/dist/runtime/sammy.js +97 -0
  257. package/dist/runtime/sammy.js.map +1 -0
  258. package/dist/runtime/tool-executor.d.ts +14 -0
  259. package/dist/runtime/tool-executor.d.ts.map +1 -0
  260. package/dist/runtime/tool-executor.js +58 -0
  261. package/dist/runtime/tool-executor.js.map +1 -0
  262. package/dist/runtime/tool-types.d.ts +26 -0
  263. package/dist/runtime/tool-types.d.ts.map +1 -0
  264. package/dist/runtime/tool-types.js +2 -0
  265. package/dist/runtime/tool-types.js.map +1 -0
  266. package/dist/runtime/types.d.ts +100 -0
  267. package/dist/runtime/types.d.ts.map +1 -0
  268. package/dist/runtime/types.js +2 -0
  269. package/dist/runtime/types.js.map +1 -0
  270. package/dist/runtime/zod-to-json-schema.d.ts +3 -0
  271. package/dist/runtime/zod-to-json-schema.d.ts.map +1 -0
  272. package/dist/runtime/zod-to-json-schema.js +82 -0
  273. package/dist/runtime/zod-to-json-schema.js.map +1 -0
  274. package/package.json +82 -0
package/README.md ADDED
@@ -0,0 +1,75 @@
1
+ # sammy-sdk
2
+
3
+ > Auto-configuring AI agent framework that learns your codebase and builds itself.
4
+
5
+ `sammy-sdk` is the official TypeScript SDK and CLI for [Sammy](https://sammy.dev). It scans your Next.js (or any TypeScript) project, builds typed agent tools from your real server actions and route handlers, and gives you a chat-style runtime that calls them safely.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install sammy-sdk
11
+ ```
12
+
13
+ Get an API key at [sammy.dev](https://sammy.dev), add it to your project's `.env.local`:
14
+
15
+ ```
16
+ SAMMY_API_KEY=sk_sammy_...
17
+ ```
18
+
19
+ The SDK defaults to the public Sammy Cloud API at `https://sammyapi-production.up.railway.app`. To point at a self-hosted instance or a preview deployment, set:
20
+
21
+ ```
22
+ SAMMY_API_URL=https://your-sammy-api.example.com
23
+ ```
24
+
25
+ ## CLI
26
+
27
+ The `sammy` binary ships with the package, so once `sammy-sdk` is installed you can run:
28
+
29
+ ```bash
30
+ # 1. Scan your codebase and write sammy.config.ts
31
+ npx sammy init
32
+
33
+ # 2. Generate typed tool wrappers around the things Sammy found
34
+ npx sammy generate
35
+
36
+ # 3. Boot the local dev chat UI
37
+ npx sammy dev
38
+ ```
39
+
40
+ There's also `npx sammy eval` for running deterministic evals against your agent.
41
+
42
+ ## Programmatic usage
43
+
44
+ ```ts
45
+ import { Sammy } from "sammy-sdk";
46
+
47
+ const sammy = new Sammy({
48
+ apiKey: process.env.SAMMY_API_KEY!,
49
+ tier: "balanced", // "fast" | "balanced" | "powerful"
50
+ });
51
+
52
+ const reply = await sammy.chat([
53
+ { role: "user", content: "Create a new deal for Acme Corp at $50k." },
54
+ ]);
55
+
56
+ console.log(reply.content);
57
+ ```
58
+
59
+ ## Sub-paths
60
+
61
+ ```ts
62
+ import { runtimeFromConfig } from "sammy-sdk/runtime";
63
+ import { SammyCloudClient } from "sammy-sdk/cloud";
64
+ ```
65
+
66
+ ## Environment variables
67
+
68
+ | Var | Purpose | Default |
69
+ |---|---|---|
70
+ | `SAMMY_API_KEY` | Your Sammy Cloud API key | (required) |
71
+ | `SAMMY_API_URL` | Override the Cloud API base URL | `https://sammyapi-production.up.railway.app` |
72
+
73
+ ## License
74
+
75
+ MIT
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const devCommand: Command;
3
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,eAAO,MAAM,UAAU,SAUnB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Command } from "commander";
2
+ export const devCommand = new Command("dev")
3
+ .description("Start Sammy dev server with hot-reload")
4
+ .option("--port <port>", "Port for the dev server", "3100")
5
+ .option("--no-open", "Don't open browser automatically")
6
+ .action(async (options) => {
7
+ const { runDev } = await import("../../dev/server.js");
8
+ await runDev({
9
+ port: parseInt(options.port, 10),
10
+ open: options.open,
11
+ });
12
+ });
13
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,eAAe,EAAE,yBAAyB,EAAE,MAAM,CAAC;KAC1D,MAAM,CAAC,WAAW,EAAE,kCAAkC,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACvD,MAAM,MAAM,CAAC;QACX,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const evalCommand: Command;
3
+ //# sourceMappingURL=eval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,eAAO,MAAM,WAAW,SAyBpB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Command } from "commander";
2
+ export const evalCommand = new Command("eval")
3
+ .description("Run evaluation loop to test and refine agents")
4
+ .option("--no-refine", "Skip auto-refinement, only evaluate")
5
+ .option("--max-iterations <n>", "Maximum refinement iterations", "5")
6
+ .option("--ci", "Run in CI mode with strict pass/fail")
7
+ .option("--dimensions <dims>", "Comma-separated dimensions to evaluate")
8
+ .option("--agent <name>", "Evaluate a specific agent only")
9
+ .option("--budget <tokens>", "Token budget for eval run")
10
+ .option("--generate-only", "Generate scenarios without running eval")
11
+ .option("--from-iteration <n>", "Resume from a specific iteration")
12
+ .option("--dry-run", "Show what would be refined, don't apply changes")
13
+ .action(async (options) => {
14
+ const { EvalRunner } = await import("../../eval/runner.js");
15
+ const runner = new EvalRunner();
16
+ await runner.run({
17
+ noRefine: !options.refine,
18
+ maxIterations: parseInt(options.maxIterations, 10),
19
+ ci: options.ci,
20
+ dimensions: options.dimensions?.split(","),
21
+ agent: options.agent,
22
+ budget: options.budget ? parseInt(options.budget, 10) : undefined,
23
+ generateOnly: options.generateOnly,
24
+ fromIteration: options.fromIteration ? parseInt(options.fromIteration, 10) : undefined,
25
+ dryRun: options.dryRun,
26
+ });
27
+ });
28
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,aAAa,EAAE,qCAAqC,CAAC;KAC5D,MAAM,CAAC,sBAAsB,EAAE,+BAA+B,EAAE,GAAG,CAAC;KACpE,MAAM,CAAC,MAAM,EAAE,sCAAsC,CAAC;KACtD,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;KACvE,MAAM,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;KAC1D,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,CAAC;KACxD,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;KACpE,MAAM,CAAC,sBAAsB,EAAE,kCAAkC,CAAC;KAClE,MAAM,CAAC,WAAW,EAAE,iDAAiD,CAAC;KACtE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAChC,MAAM,MAAM,CAAC,GAAG,CAAC;QACf,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM;QACzB,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QAClD,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC;QAC1C,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QACjE,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QACtF,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const generateCommand: Command;
3
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,eAAO,MAAM,eAAe,SAOxB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Command } from "commander";
2
+ export const generateCommand = new Command("generate")
3
+ .description("Generate tools and agents from sammy.config.json")
4
+ .option("--dry-run", "Preview generated files without writing")
5
+ .option("--domain <domain>", "Generate tools for a specific domain only")
6
+ .action(async (options) => {
7
+ const { runGenerate } = await import("../../generator/generate.js");
8
+ await runGenerate(options);
9
+ });
10
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,WAAW,EAAE,yCAAyC,CAAC;KAC9D,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,CAAC;KACxE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;IACpE,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const initCommand: Command;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,eAAO,MAAM,WAAW,SAMpB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Command } from "commander";
2
+ export const initCommand = new Command("init")
3
+ .description("Scan your codebase and generate sammy.config.json")
4
+ .option("--force", "Overwrite existing config")
5
+ .action(async (options) => {
6
+ const { runInit } = await import("../../discovery/init.js");
7
+ await runInit(options);
8
+ });
9
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,SAAS,EAAE,2BAA2B,CAAC;KAC9C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAC5D,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { initCommand } from "./commands/init.js";
4
+ import { generateCommand } from "./commands/generate.js";
5
+ import { evalCommand } from "./commands/eval.js";
6
+ import { devCommand } from "./commands/dev.js";
7
+ const program = new Command();
8
+ program
9
+ .name("sammy")
10
+ .description("Auto-configuring AI agent framework")
11
+ .version("0.1.0");
12
+ program.addCommand(initCommand);
13
+ program.addCommand(generateCommand);
14
+ program.addCommand(evalCommand);
15
+ program.addCommand(devCommand);
16
+ program.parse();
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,qCAAqC,CAAC;KAClD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAE/B,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { CompletionRequest, CompletionResponse, KeyValidationResponse, StreamChunk } from "sammy-sdk-shared";
2
+ export declare class SammyCloudClient {
3
+ private apiKey;
4
+ private baseUrl;
5
+ constructor(apiKey: string, baseUrl?: string);
6
+ completion(request: CompletionRequest): Promise<CompletionResponse>;
7
+ completionStream(request: CompletionRequest): AsyncIterable<StreamChunk>;
8
+ validateKey(): Promise<KeyValidationResponse>;
9
+ }
10
+ //# sourceMappingURL=sammy-cloud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sammy-cloud.d.ts","sourceRoot":"","sources":["../../src/cloud/sammy-cloud.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG7G,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAqB;IAKpD,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmClE,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAAC,WAAW,CAAC;IAiEzE,WAAW,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAWpD"}
@@ -0,0 +1,113 @@
1
+ import { SDK_VERSION, API_BASE_URL } from "sammy-sdk-shared";
2
+ export class SammyCloudClient {
3
+ apiKey;
4
+ baseUrl;
5
+ constructor(apiKey, baseUrl = API_BASE_URL) {
6
+ this.apiKey = apiKey;
7
+ this.baseUrl = baseUrl;
8
+ }
9
+ async completion(request) {
10
+ const response = await fetch(`${this.baseUrl}/v1/completions`, {
11
+ method: "POST",
12
+ headers: {
13
+ Authorization: `Bearer ${this.apiKey}`,
14
+ "Content-Type": "application/json",
15
+ "X-Sammy-SDK-Version": SDK_VERSION,
16
+ "X-Sammy-Purpose": request.purpose,
17
+ },
18
+ body: JSON.stringify({
19
+ tier: request.tier,
20
+ messages: request.messages,
21
+ maxTokens: request.maxTokens,
22
+ temperature: request.temperature,
23
+ responseFormat: request.responseFormat,
24
+ stream: false,
25
+ tools: request.tools,
26
+ toolChoice: request.toolChoice,
27
+ }),
28
+ });
29
+ if (!response.ok) {
30
+ let errorMessage = `HTTP ${response.status}`;
31
+ try {
32
+ const error = await response.json();
33
+ errorMessage = `[${error.code}] ${error.message}`;
34
+ }
35
+ catch {
36
+ errorMessage = `HTTP ${response.status}: ${response.statusText}`;
37
+ }
38
+ throw new Error(errorMessage);
39
+ }
40
+ return response.json();
41
+ }
42
+ async *completionStream(request) {
43
+ const response = await fetch(`${this.baseUrl}/v1/completions`, {
44
+ method: "POST",
45
+ headers: {
46
+ Authorization: `Bearer ${this.apiKey}`,
47
+ "Content-Type": "application/json",
48
+ Accept: "text/event-stream",
49
+ "X-Sammy-SDK-Version": SDK_VERSION,
50
+ "X-Sammy-Purpose": request.purpose,
51
+ },
52
+ body: JSON.stringify({
53
+ tier: request.tier,
54
+ messages: request.messages,
55
+ maxTokens: request.maxTokens,
56
+ temperature: request.temperature,
57
+ responseFormat: request.responseFormat,
58
+ stream: true,
59
+ tools: request.tools,
60
+ toolChoice: request.toolChoice,
61
+ }),
62
+ });
63
+ if (!response.ok) {
64
+ let errorMessage = `HTTP ${response.status}`;
65
+ try {
66
+ const error = await response.json();
67
+ errorMessage = `[${error.code}] ${error.message}`;
68
+ }
69
+ catch {
70
+ errorMessage = `HTTP ${response.status}: ${response.statusText}`;
71
+ }
72
+ throw new Error(errorMessage);
73
+ }
74
+ if (!response.body) {
75
+ throw new Error("No response body for stream");
76
+ }
77
+ const reader = response.body.getReader();
78
+ const decoder = new TextDecoder();
79
+ let buffer = "";
80
+ while (true) {
81
+ const { done, value } = await reader.read();
82
+ if (done)
83
+ break;
84
+ buffer += decoder.decode(value, { stream: true });
85
+ const lines = buffer.split("\n");
86
+ buffer = lines.pop() || "";
87
+ for (const line of lines) {
88
+ if (line.startsWith("data: ")) {
89
+ const data = line.slice(6).trim();
90
+ if (!data || data === "[DONE]")
91
+ continue;
92
+ try {
93
+ const chunk = JSON.parse(data);
94
+ yield chunk;
95
+ }
96
+ catch {
97
+ // Skip malformed events
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ async validateKey() {
104
+ const response = await fetch(`${this.baseUrl}/v1/auth/validate`, {
105
+ headers: { Authorization: `Bearer ${this.apiKey}` },
106
+ });
107
+ if (!response.ok) {
108
+ throw new Error("Invalid API key");
109
+ }
110
+ return response.json();
111
+ }
112
+ }
113
+ //# sourceMappingURL=sammy-cloud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sammy-cloud.js","sourceRoot":"","sources":["../../src/cloud/sammy-cloud.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function getChatHTML(info: {
2
+ tools: number;
3
+ agents: number;
4
+ architecture: string;
5
+ }): string;
6
+ //# sourceMappingURL=chat-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-ui.d.ts","sourceRoot":"","sources":["../../src/dev/chat-ui.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CA6FjG"}
@@ -0,0 +1,95 @@
1
+ export function getChatHTML(info) {
2
+ return `<!DOCTYPE html>
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Sammy Dev</title>
8
+ <style>
9
+ * { margin: 0; padding: 0; box-sizing: border-box; }
10
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: #0f172a; color: #e2e8f0; height: 100vh; display: flex; flex-direction: column; }
11
+ header { padding: 16px 24px; border-bottom: 1px solid #1e293b; display: flex; justify-content: space-between; align-items: center; }
12
+ header h1 { font-size: 18px; font-weight: 600; }
13
+ header span { font-size: 13px; color: #64748b; }
14
+ #messages { flex: 1; overflow-y: auto; padding: 24px; display: flex; flex-direction: column; gap: 16px; }
15
+ .msg { max-width: 75%; padding: 12px 16px; border-radius: 12px; font-size: 14px; line-height: 1.5; white-space: pre-wrap; }
16
+ .msg.user { align-self: flex-end; background: #2563eb; color: white; border-bottom-right-radius: 4px; }
17
+ .msg.assistant { align-self: flex-start; background: #1e293b; border-bottom-left-radius: 4px; }
18
+ .msg.tool { align-self: flex-start; background: #1a1a2e; border: 1px solid #334155; font-family: monospace; font-size: 12px; color: #94a3b8; max-width: 90%; }
19
+ .msg.tool .label { color: #38bdf8; font-weight: 600; margin-bottom: 4px; }
20
+ .msg.agent-badge { align-self: center; background: transparent; color: #64748b; font-size: 12px; padding: 4px 12px; }
21
+ .streaming { opacity: 0.7; }
22
+ #input-area { padding: 16px 24px; border-top: 1px solid #1e293b; display: flex; gap: 12px; }
23
+ #input { flex: 1; padding: 12px 16px; border-radius: 10px; border: 1px solid #334155; background: #1e293b; color: #e2e8f0; font-size: 14px; outline: none; }
24
+ #input:focus { border-color: #2563eb; }
25
+ #send { padding: 12px 24px; border-radius: 10px; border: none; background: #2563eb; color: white; font-size: 14px; font-weight: 600; cursor: pointer; }
26
+ #send:hover { background: #1d4ed8; }
27
+ #send:disabled { background: #334155; cursor: not-allowed; }
28
+ </style>
29
+ </head>
30
+ <body>
31
+ <header>
32
+ <h1>Sammy Dev</h1>
33
+ <span>${info.tools} tools &middot; ${info.agents} agents &middot; ${info.architecture}</span>
34
+ </header>
35
+ <div id="messages"></div>
36
+ <div id="input-area">
37
+ <input id="input" type="text" placeholder="Type a message..." autofocus />
38
+ <button id="send">Send</button>
39
+ </div>
40
+ <script>
41
+ const messages = document.getElementById('messages');
42
+ const input = document.getElementById('input');
43
+ const sendBtn = document.getElementById('send');
44
+ let conversationId = null;
45
+
46
+ function addMessage(role, text, cls) {
47
+ const div = document.createElement('div');
48
+ div.className = 'msg ' + (cls || role);
49
+ div.textContent = text;
50
+ messages.appendChild(div);
51
+ messages.scrollTop = messages.scrollHeight;
52
+ return div;
53
+ }
54
+
55
+ async function send() {
56
+ const text = input.value.trim();
57
+ if (!text) return;
58
+ input.value = '';
59
+ sendBtn.disabled = true;
60
+
61
+ addMessage('user', text);
62
+
63
+ try {
64
+ const res = await fetch('/chat', {
65
+ method: 'POST',
66
+ headers: { 'Content-Type': 'application/json' },
67
+ body: JSON.stringify({ message: text, conversationId }),
68
+ });
69
+ const data = await res.json();
70
+ conversationId = data.conversationId;
71
+
72
+ if (data.agentUsed && data.agentUsed !== 'none') {
73
+ addMessage('', data.agentUsed, 'agent-badge');
74
+ }
75
+
76
+ for (const tool of data.toolsUsed || []) {
77
+ addMessage('', tool.name + '(' + JSON.stringify(tool.params) + ')\\n→ ' + JSON.stringify(tool.result), 'tool');
78
+ }
79
+
80
+ addMessage('assistant', data.message);
81
+ } catch (err) {
82
+ addMessage('assistant', 'Error: ' + err.message);
83
+ }
84
+
85
+ sendBtn.disabled = false;
86
+ input.focus();
87
+ }
88
+
89
+ sendBtn.addEventListener('click', send);
90
+ input.addEventListener('keydown', (e) => { if (e.key === 'Enter') send(); });
91
+ </script>
92
+ </body>
93
+ </html>`;
94
+ }
95
+ //# sourceMappingURL=chat-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-ui.js","sourceRoot":"","sources":["../../src/dev/chat-ui.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,IAA6D;IACvF,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA+BG,IAAI,CAAC,KAAK,mBAAmB,IAAI,CAAC,MAAM,oBAAoB,IAAI,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4DjF,CAAC;AACT,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function runDev(options: {
2
+ port: number;
3
+ open: boolean;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dev/server.ts"],"names":[],"mappings":"AAQA,wBAAsB,MAAM,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,iBAyFpE"}
@@ -0,0 +1,87 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import chalk from "chalk";
4
+ import express from "express";
5
+ import { Sammy } from "../runtime/sammy.js";
6
+ import { getChatHTML } from "./chat-ui.js";
7
+ import { watchForChanges } from "./watcher.js";
8
+ export async function runDev(options) {
9
+ const projectRoot = process.cwd();
10
+ const configPath = path.join(projectRoot, "sammy.config.json");
11
+ if (!fs.existsSync(configPath)) {
12
+ console.log(chalk.red("\n No sammy.config.json found. Run `npx sammy init` first.\n"));
13
+ process.exit(1);
14
+ }
15
+ const sammyDir = path.join(projectRoot, ".sammy");
16
+ if (!fs.existsSync(sammyDir)) {
17
+ console.log(chalk.red("\n No .sammy/ directory found. Run `npx sammy generate` first.\n"));
18
+ process.exit(1);
19
+ }
20
+ console.log(chalk.bold("\n Sammy Dev Server\n"));
21
+ const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
22
+ let sammy;
23
+ try {
24
+ sammy = new Sammy({
25
+ configPath,
26
+ systemPrompt: "You are a helpful AI assistant in development mode. Show detailed responses.",
27
+ });
28
+ // Wait for async initialization
29
+ await sammy.initPromise;
30
+ }
31
+ catch (err) {
32
+ console.log(chalk.red(` Failed to initialize: ${err.message}\n`));
33
+ process.exit(1);
34
+ }
35
+ const toolCount = config.domains?.reduce((sum, d) => sum + (d.tools?.length || 0), 0) || 0;
36
+ const agentCount = config.architecture?.agents?.length || 0;
37
+ const archType = config.architecture?.type || "single-agent";
38
+ console.log(chalk.dim(` ✓ Loaded sammy.config.json`));
39
+ console.log(chalk.dim(` ✓ ${toolCount} tools across ${config.domains?.length || 0} domains`));
40
+ console.log(chalk.dim(` ✓ ${agentCount} agents (${archType})`));
41
+ console.log();
42
+ const app = express();
43
+ app.use(express.json());
44
+ app.get("/", (_req, res) => {
45
+ res.type("html").send(getChatHTML({ tools: toolCount, agents: agentCount, architecture: archType }));
46
+ });
47
+ app.post("/chat", async (req, res) => {
48
+ try {
49
+ const { message, conversationId } = req.body;
50
+ const response = await sammy.chat({ message, conversationId });
51
+ res.json(response);
52
+ }
53
+ catch (err) {
54
+ res.status(500).json({ error: err.message });
55
+ }
56
+ });
57
+ app.post("/chat/stream", async (req, res) => {
58
+ try {
59
+ const { message, conversationId } = req.body;
60
+ const stream = sammy.chatStream({ message, conversationId });
61
+ res.setHeader("Content-Type", "text/event-stream");
62
+ res.setHeader("Cache-Control", "no-cache");
63
+ res.setHeader("Connection", "keep-alive");
64
+ res.flushHeaders();
65
+ const reader = stream.getReader();
66
+ while (true) {
67
+ const { done, value } = await reader.read();
68
+ if (done)
69
+ break;
70
+ res.write(value);
71
+ }
72
+ res.end();
73
+ }
74
+ catch (err) {
75
+ res.status(500).json({ error: err.message });
76
+ }
77
+ });
78
+ // Watch for changes and reload
79
+ watchForChanges(projectRoot, () => {
80
+ console.log(chalk.dim(" Detected changes, restart to reload..."));
81
+ });
82
+ app.listen(options.port, () => {
83
+ console.log(chalk.green(` ✓ Dev server running at http://localhost:${options.port}`));
84
+ console.log(chalk.dim(` Open in browser to chat with your agents\n`));
85
+ });
86
+ }
87
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dev/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function watchForChanges(projectRoot: string, onChange: () => void): void;
2
+ //# sourceMappingURL=watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/dev/watcher.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,IAAI,GACnB,IAAI,CAkBN"}
@@ -0,0 +1,19 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ export function watchForChanges(projectRoot, onChange) {
4
+ const sammyDir = path.join(projectRoot, ".sammy");
5
+ const configPath = path.join(projectRoot, "sammy.config.json");
6
+ let debounceTimer = null;
7
+ const debounced = () => {
8
+ if (debounceTimer)
9
+ clearTimeout(debounceTimer);
10
+ debounceTimer = setTimeout(onChange, 300);
11
+ };
12
+ if (fs.existsSync(sammyDir)) {
13
+ fs.watch(sammyDir, { recursive: true }, debounced);
14
+ }
15
+ if (fs.existsSync(configPath)) {
16
+ fs.watch(configPath, debounced);
17
+ }
18
+ }
19
+ //# sourceMappingURL=watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/dev/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,QAAoB;IAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAE/D,IAAI,aAAa,GAAyC,IAAI,CAAC;IAE/D,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,IAAI,aAAa;YAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QAC/C,aAAa,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Node, SourceFile } from "ts-morph";
2
+ export interface FoundCallRoute {
3
+ method: string;
4
+ path: string;
5
+ handlerBody: Node | undefined;
6
+ args: Node[];
7
+ }
8
+ export declare function findCallRoutes(sourceFile: SourceFile): FoundCallRoute[];
9
+ export interface FoundRouteObject {
10
+ methods: string[];
11
+ path: string;
12
+ handlerBody: Node | undefined;
13
+ schemaBody: Node | undefined;
14
+ }
15
+ export declare function findRouteObjects(sourceFile: SourceFile): FoundRouteObject[];
16
+ //# sourceMappingURL=call-route-finder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-route-finder.d.ts","sourceRoot":"","sources":["../../../src/discovery/ast/call-route-finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAc,MAAM,UAAU,CAAC;AAOxD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,IAAI,EAAE,CAAC;CACd;AAKD,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,EAAE,CAuBvE;AAGD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;IAC9B,UAAU,EAAE,IAAI,GAAG,SAAS,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,gBAAgB,EAAE,CAwB3E"}