deepclause-sdk 0.0.88 → 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 (318) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +418 -914
  3. package/dist/agent.d.ts +19 -2
  4. package/dist/agent.d.ts.map +1 -1
  5. package/dist/agent.js +221 -4
  6. package/dist/agent.js.map +1 -1
  7. package/dist/cli/config.d.ts +323 -176
  8. package/dist/cli/config.d.ts.map +1 -1
  9. package/dist/cli/config.js +146 -188
  10. package/dist/cli/config.js.map +1 -1
  11. package/dist/cli/index.d.ts +3 -2
  12. package/dist/cli/index.d.ts.map +1 -1
  13. package/dist/cli/index.js +61 -425
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/login.d.ts +29 -0
  16. package/dist/cli/login.d.ts.map +1 -0
  17. package/dist/cli/login.js +184 -0
  18. package/dist/cli/login.js.map +1 -0
  19. package/dist/cli/readline.d.ts +6 -0
  20. package/dist/cli/readline.d.ts.map +1 -0
  21. package/dist/cli/readline.js +15 -0
  22. package/dist/cli/readline.js.map +1 -0
  23. package/dist/cli/repl-bin.d.ts +9 -0
  24. package/dist/cli/repl-bin.d.ts.map +1 -0
  25. package/dist/cli/repl-bin.js +16 -0
  26. package/dist/cli/repl-bin.js.map +1 -0
  27. package/dist/cli/repl.d.ts +191 -0
  28. package/dist/cli/repl.d.ts.map +1 -0
  29. package/dist/cli/repl.js +1232 -0
  30. package/dist/cli/repl.js.map +1 -0
  31. package/dist/cli/run.d.ts +17 -18
  32. package/dist/cli/run.d.ts.map +1 -1
  33. package/dist/cli/run.js +196 -183
  34. package/dist/cli/run.js.map +1 -1
  35. package/dist/cli/set-backend.d.ts +53 -0
  36. package/dist/cli/set-backend.d.ts.map +1 -0
  37. package/dist/cli/set-backend.js +259 -0
  38. package/dist/cli/set-backend.js.map +1 -0
  39. package/dist/cli/visualize.d.ts +38 -0
  40. package/dist/cli/visualize.d.ts.map +1 -0
  41. package/dist/cli/visualize.js +125 -0
  42. package/dist/cli/visualize.js.map +1 -0
  43. package/dist/compiler.d.ts +5 -52
  44. package/dist/compiler.d.ts.map +1 -1
  45. package/dist/compiler.js +4 -768
  46. package/dist/compiler.js.map +1 -1
  47. package/dist/index.d.ts +29 -2
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +20 -2
  50. package/dist/index.js.map +1 -1
  51. package/dist/judge/index.d.ts +9 -0
  52. package/dist/judge/index.d.ts.map +1 -0
  53. package/dist/judge/index.js +6 -0
  54. package/dist/judge/index.js.map +1 -0
  55. package/dist/judge/jev.d.ts +21 -0
  56. package/dist/judge/jev.d.ts.map +1 -0
  57. package/dist/judge/jev.js +218 -0
  58. package/dist/judge/jev.js.map +1 -0
  59. package/dist/judge/llm.d.ts +23 -0
  60. package/dist/judge/llm.d.ts.map +1 -0
  61. package/dist/judge/llm.js +120 -0
  62. package/dist/judge/llm.js.map +1 -0
  63. package/dist/judge/marshal.d.ts +26 -0
  64. package/dist/judge/marshal.d.ts.map +1 -0
  65. package/dist/judge/marshal.js +266 -0
  66. package/dist/judge/marshal.js.map +1 -0
  67. package/dist/judge/mock.d.ts +28 -0
  68. package/dist/judge/mock.d.ts.map +1 -0
  69. package/dist/judge/mock.js +98 -0
  70. package/dist/judge/mock.js.map +1 -0
  71. package/dist/judge/types.d.ts +95 -0
  72. package/dist/judge/types.d.ts.map +1 -0
  73. package/dist/judge/types.js +23 -0
  74. package/dist/judge/types.js.map +1 -0
  75. package/dist/prolog/bridge.d.ts +5 -1
  76. package/dist/prolog/bridge.d.ts.map +1 -1
  77. package/dist/prolog/bridge.js +29 -1
  78. package/dist/prolog/bridge.js.map +1 -1
  79. package/dist/prolog-src/deepclause_analysis.pl +10 -2
  80. package/dist/prolog-src/deepclause_mi.pl +2522 -118
  81. package/dist/repl/agent.d.ts +72 -0
  82. package/dist/repl/agent.d.ts.map +1 -0
  83. package/dist/repl/agent.js +366 -0
  84. package/dist/repl/agent.js.map +1 -0
  85. package/dist/repl/auth.d.ts +45 -0
  86. package/dist/repl/auth.d.ts.map +1 -0
  87. package/dist/repl/auth.js +116 -0
  88. package/dist/repl/auth.js.map +1 -0
  89. package/dist/repl/backend.d.ts +290 -0
  90. package/dist/repl/backend.d.ts.map +1 -0
  91. package/dist/repl/backend.js +370 -0
  92. package/dist/repl/backend.js.map +1 -0
  93. package/dist/repl/compaction.d.ts +122 -0
  94. package/dist/repl/compaction.d.ts.map +1 -0
  95. package/dist/repl/compaction.js +318 -0
  96. package/dist/repl/compaction.js.map +1 -0
  97. package/dist/repl/export.d.ts +30 -0
  98. package/dist/repl/export.d.ts.map +1 -0
  99. package/dist/repl/export.js +23 -0
  100. package/dist/repl/export.js.map +1 -0
  101. package/dist/repl/frames.d.ts +21 -0
  102. package/dist/repl/frames.d.ts.map +1 -0
  103. package/dist/repl/frames.js +79 -0
  104. package/dist/repl/frames.js.map +1 -0
  105. package/dist/repl/harness-tools.d.ts +74 -0
  106. package/dist/repl/harness-tools.d.ts.map +1 -0
  107. package/dist/repl/harness-tools.js +121 -0
  108. package/dist/repl/harness-tools.js.map +1 -0
  109. package/dist/repl/highlight.d.ts +30 -0
  110. package/dist/repl/highlight.d.ts.map +1 -0
  111. package/dist/repl/highlight.js +285 -0
  112. package/dist/repl/highlight.js.map +1 -0
  113. package/dist/repl/history.d.ts +234 -0
  114. package/dist/repl/history.d.ts.map +1 -0
  115. package/dist/repl/history.js +661 -0
  116. package/dist/repl/history.js.map +1 -0
  117. package/dist/repl/index.d.ts +120 -0
  118. package/dist/repl/index.d.ts.map +1 -0
  119. package/dist/repl/index.js +107 -0
  120. package/dist/repl/index.js.map +1 -0
  121. package/dist/repl/judge.d.ts +51 -0
  122. package/dist/repl/judge.d.ts.map +1 -0
  123. package/dist/repl/judge.js +58 -0
  124. package/dist/repl/judge.js.map +1 -0
  125. package/dist/repl/markdown.d.ts +25 -0
  126. package/dist/repl/markdown.d.ts.map +1 -0
  127. package/dist/repl/markdown.js +103 -0
  128. package/dist/repl/markdown.js.map +1 -0
  129. package/dist/repl/picker.d.ts +34 -0
  130. package/dist/repl/picker.d.ts.map +1 -0
  131. package/dist/repl/picker.js +81 -0
  132. package/dist/repl/picker.js.map +1 -0
  133. package/dist/repl/project-context.d.ts +16 -0
  134. package/dist/repl/project-context.d.ts.map +1 -0
  135. package/dist/repl/project-context.js +23 -0
  136. package/dist/repl/project-context.js.map +1 -0
  137. package/dist/repl/render.d.ts +160 -0
  138. package/dist/repl/render.d.ts.map +1 -0
  139. package/dist/repl/render.js +715 -0
  140. package/dist/repl/render.js.map +1 -0
  141. package/dist/repl/session.d.ts +356 -0
  142. package/dist/repl/session.d.ts.map +1 -0
  143. package/dist/repl/session.js +1275 -0
  144. package/dist/repl/session.js.map +1 -0
  145. package/dist/repl/status.d.ts +100 -0
  146. package/dist/repl/status.d.ts.map +1 -0
  147. package/dist/repl/status.js +218 -0
  148. package/dist/repl/status.js.map +1 -0
  149. package/dist/repl/tools.d.ts +53 -0
  150. package/dist/repl/tools.d.ts.map +1 -0
  151. package/dist/repl/tools.js +307 -0
  152. package/dist/repl/tools.js.map +1 -0
  153. package/dist/repl/toolset.d.ts +32 -0
  154. package/dist/repl/toolset.d.ts.map +1 -0
  155. package/dist/repl/toolset.js +82 -0
  156. package/dist/repl/toolset.js.map +1 -0
  157. package/dist/repl/tui/editor.d.ts +17 -0
  158. package/dist/repl/tui/editor.d.ts.map +1 -0
  159. package/dist/repl/tui/editor.js +39 -0
  160. package/dist/repl/tui/editor.js.map +1 -0
  161. package/dist/repl/tui/status-bar.d.ts +26 -0
  162. package/dist/repl/tui/status-bar.d.ts.map +1 -0
  163. package/dist/repl/tui/status-bar.js +47 -0
  164. package/dist/repl/tui/status-bar.js.map +1 -0
  165. package/dist/repl/tui/theme.d.ts +30 -0
  166. package/dist/repl/tui/theme.d.ts.map +1 -0
  167. package/dist/repl/tui/theme.js +81 -0
  168. package/dist/repl/tui/theme.js.map +1 -0
  169. package/dist/repl/tui/transcript.d.ts +39 -0
  170. package/dist/repl/tui/transcript.d.ts.map +1 -0
  171. package/dist/repl/tui/transcript.js +123 -0
  172. package/dist/repl/tui/transcript.js.map +1 -0
  173. package/dist/runner.d.ts +145 -13
  174. package/dist/runner.d.ts.map +1 -1
  175. package/dist/runner.js +600 -282
  176. package/dist/runner.js.map +1 -1
  177. package/dist/sdk.d.ts.map +1 -1
  178. package/dist/sdk.js +56 -32
  179. package/dist/sdk.js.map +1 -1
  180. package/dist/system/assets/docs/AGENT_PROMPT.md +1373 -0
  181. package/dist/system/assets/docs/DML_AUTHORING.md +195 -0
  182. package/dist/system/assets/docs/DML_REFERENCE.md +393 -72
  183. package/dist/system/assets/docs/HARNESS_EXAMPLES.md +172 -0
  184. package/dist/system/assets/docs/HARNESS_PATTERNS.md +562 -0
  185. package/dist/system/assets/docs/META_PROMPT.md +68 -0
  186. package/dist/system/assets/docs/PROLOG_SNIPPETS.md +117 -0
  187. package/dist/system/assets/index.d.ts +9 -17
  188. package/dist/system/assets/index.d.ts.map +1 -1
  189. package/dist/system/assets/index.js +26 -85
  190. package/dist/system/assets/index.js.map +1 -1
  191. package/dist/system/runtime/agentvm-manager.d.ts +9 -2
  192. package/dist/system/runtime/agentvm-manager.d.ts.map +1 -1
  193. package/dist/system/runtime/agentvm-manager.js +70 -44
  194. package/dist/system/runtime/agentvm-manager.js.map +1 -1
  195. package/dist/system/runtime/media.d.ts +23 -0
  196. package/dist/system/runtime/media.d.ts.map +1 -0
  197. package/dist/system/runtime/media.js +55 -0
  198. package/dist/system/runtime/media.js.map +1 -0
  199. package/dist/system/runtime/shell-limits.d.ts +21 -0
  200. package/dist/system/runtime/shell-limits.d.ts.map +1 -0
  201. package/dist/system/runtime/shell-limits.js +39 -0
  202. package/dist/system/runtime/shell-limits.js.map +1 -0
  203. package/dist/system/runtime/shell-manager.d.ts +8 -3
  204. package/dist/system/runtime/shell-manager.d.ts.map +1 -1
  205. package/dist/system/runtime/shell-manager.js +56 -39
  206. package/dist/system/runtime/shell-manager.js.map +1 -1
  207. package/dist/system/runtime/shell-tool-events.js +5 -0
  208. package/dist/system/runtime/shell-tool-events.js.map +1 -1
  209. package/dist/system/runtime/token-usage.d.ts +2 -0
  210. package/dist/system/runtime/token-usage.d.ts.map +1 -1
  211. package/dist/system/runtime/token-usage.js +7 -0
  212. package/dist/system/runtime/token-usage.js.map +1 -1
  213. package/dist/tools.d.ts +3 -21
  214. package/dist/tools.d.ts.map +1 -1
  215. package/dist/tools.js +14 -168
  216. package/dist/tools.js.map +1 -1
  217. package/dist/types.d.ts +149 -118
  218. package/dist/types.d.ts.map +1 -1
  219. package/dist/validate.d.ts +19 -0
  220. package/dist/validate.d.ts.map +1 -0
  221. package/dist/validate.js +338 -0
  222. package/dist/validate.js.map +1 -0
  223. package/dist/visualize/index.d.ts +52 -0
  224. package/dist/visualize/index.d.ts.map +1 -0
  225. package/dist/visualize/index.js +189 -0
  226. package/dist/visualize/index.js.map +1 -0
  227. package/package.json +17 -15
  228. package/src/prolog-src/deepclause_analysis.pl +10 -2
  229. package/src/prolog-src/deepclause_mi.pl +2522 -118
  230. package/dist/cli/commands.d.ts +0 -42
  231. package/dist/cli/commands.d.ts.map +0 -1
  232. package/dist/cli/commands.js +0 -246
  233. package/dist/cli/commands.js.map +0 -1
  234. package/dist/cli/compile.d.ts +0 -99
  235. package/dist/cli/compile.d.ts.map +0 -1
  236. package/dist/cli/compile.js +0 -363
  237. package/dist/cli/compile.js.map +0 -1
  238. package/dist/cli/default-skills.d.ts +0 -10
  239. package/dist/cli/default-skills.d.ts.map +0 -1
  240. package/dist/cli/default-skills.js +0 -206
  241. package/dist/cli/default-skills.js.map +0 -1
  242. package/dist/cli/interactive.d.ts +0 -2
  243. package/dist/cli/interactive.d.ts.map +0 -1
  244. package/dist/cli/interactive.js +0 -20
  245. package/dist/cli/interactive.js.map +0 -1
  246. package/dist/cli/mcp.d.ts +0 -56
  247. package/dist/cli/mcp.d.ts.map +0 -1
  248. package/dist/cli/mcp.js +0 -138
  249. package/dist/cli/mcp.js.map +0 -1
  250. package/dist/cli/prompt.d.ts +0 -2
  251. package/dist/cli/prompt.d.ts.map +0 -1
  252. package/dist/cli/prompt.js +0 -2
  253. package/dist/cli/prompt.js.map +0 -1
  254. package/dist/cli/search.d.ts +0 -19
  255. package/dist/cli/search.d.ts.map +0 -1
  256. package/dist/cli/search.js +0 -189
  257. package/dist/cli/search.js.map +0 -1
  258. package/dist/cli/tool-args.d.ts +0 -2
  259. package/dist/cli/tool-args.d.ts.map +0 -1
  260. package/dist/cli/tool-args.js +0 -39
  261. package/dist/cli/tool-args.js.map +0 -1
  262. package/dist/cli/tools.d.ts +0 -36
  263. package/dist/cli/tools.d.ts.map +0 -1
  264. package/dist/cli/tools.js +0 -229
  265. package/dist/cli/tools.js.map +0 -1
  266. package/dist/cli/tui/index.d.ts +0 -22
  267. package/dist/cli/tui/index.d.ts.map +0 -1
  268. package/dist/cli/tui/index.js +0 -29
  269. package/dist/cli/tui/index.js.map +0 -1
  270. package/dist/cli/tui.d.ts +0 -167
  271. package/dist/cli/tui.d.ts.map +0 -1
  272. package/dist/cli/tui.js +0 -5228
  273. package/dist/cli/tui.js.map +0 -1
  274. package/dist/compiler_prompt.d.ts +0 -20
  275. package/dist/compiler_prompt.d.ts.map +0 -1
  276. package/dist/compiler_prompt.js +0 -870
  277. package/dist/compiler_prompt.js.map +0 -1
  278. package/dist/deepclause-cli.skill +0 -0
  279. package/dist/prolog-src/deepclause_mi.pl.bak +0 -570
  280. package/dist/system/assets/compactors/default-memory-compactor.dml +0 -6
  281. package/dist/system/assets/docs/CONDUCTOR_PROMPT.md +0 -105
  282. package/dist/system/assets/docs/DML_COMPILER_PROMPT.md +0 -700
  283. package/dist/system/assets/docs/TUI.md +0 -150
  284. package/dist/system/assets/recipes/deepclause-coding-workflow/SKILL.md +0 -100
  285. package/dist/system/assets/skills/conductor.dml +0 -76
  286. package/dist/system/assets/skills/deep-planner.dml +0 -412
  287. package/dist/system/assets/skills/plan.dml +0 -429
  288. package/dist/system/assets/skills/security-planner.dml +0 -337
  289. package/dist/system/assets/skills/skill-creator.dml +0 -187
  290. package/dist/system/runtime/catalog-recipes.d.ts +0 -24
  291. package/dist/system/runtime/catalog-recipes.d.ts.map +0 -1
  292. package/dist/system/runtime/catalog-recipes.js +0 -273
  293. package/dist/system/runtime/catalog-recipes.js.map +0 -1
  294. package/dist/system/runtime/catalog-skills.d.ts +0 -50
  295. package/dist/system/runtime/catalog-skills.d.ts.map +0 -1
  296. package/dist/system/runtime/catalog-skills.js +0 -152
  297. package/dist/system/runtime/catalog-skills.js.map +0 -1
  298. package/dist/system/runtime/conductor.d.ts +0 -105
  299. package/dist/system/runtime/conductor.d.ts.map +0 -1
  300. package/dist/system/runtime/conductor.js +0 -732
  301. package/dist/system/runtime/conductor.js.map +0 -1
  302. package/dist/system/runtime/console-capture.d.ts +0 -9
  303. package/dist/system/runtime/console-capture.d.ts.map +0 -1
  304. package/dist/system/runtime/console-capture.js +0 -67
  305. package/dist/system/runtime/console-capture.js.map +0 -1
  306. package/dist/system/runtime/dml-executor.d.ts +0 -52
  307. package/dist/system/runtime/dml-executor.d.ts.map +0 -1
  308. package/dist/system/runtime/dml-executor.js +0 -203
  309. package/dist/system/runtime/dml-executor.js.map +0 -1
  310. package/dist/system/runtime/runtime-tools.d.ts +0 -31
  311. package/dist/system/runtime/runtime-tools.d.ts.map +0 -1
  312. package/dist/system/runtime/runtime-tools.js +0 -312
  313. package/dist/system/runtime/runtime-tools.js.map +0 -1
  314. package/dist/system/runtime/skill-creator.d.ts +0 -38
  315. package/dist/system/runtime/skill-creator.d.ts.map +0 -1
  316. package/dist/system/runtime/skill-creator.js +0 -763
  317. package/dist/system/runtime/skill-creator.js.map +0 -1
  318. package/src/prolog-src/deepclause_mi.pl.bak +0 -570
@@ -0,0 +1,72 @@
1
+ /**
2
+ * The REPL authoring agent.
3
+ *
4
+ * This is a normal TypeScript agent loop over the injected `LLMBackend`: a
5
+ * system prompt plus harness tools. It replaces the old DML `task_named` meta
6
+ * frame for authoring, so the runtime's frame machinery is only used for
7
+ * DML-internal `task/N` calls.
8
+ */
9
+ import type { DMLEvent, LLMBackend, MemoryMessage, ToolDefinition } from '../types.js';
10
+ import { type CompactionSettings, type CompactMemoryResult } from './compaction.js';
11
+ export interface HarnessAgentOptions {
12
+ tools: Map<string, ToolDefinition>;
13
+ llmBackend: LLMBackend;
14
+ model: string;
15
+ temperature?: number;
16
+ maxTokens?: number;
17
+ streaming?: boolean;
18
+ /** Maximum model calls for one `run` (0 = unlimited). */
19
+ maxModelCalls?: number;
20
+ contextWindow?: number;
21
+ compaction?: {
22
+ settings: CompactionSettings;
23
+ auto: boolean;
24
+ };
25
+ /** Workspace root, so a `.deepclause/system/AGENT_PROMPT.md` override is used. */
26
+ workspacePath?: string;
27
+ /** Pre-loaded documentation for the `reference` tool (handled by the controller). */
28
+ knownMessages?: MemoryMessage[];
29
+ }
30
+ export interface HarnessAgentRunOptions {
31
+ signal?: AbortSignal;
32
+ }
33
+ /** Generate the `TOOLS` section of the system prompt from the tool schemas. */
34
+ export declare function describeTools(tools: Map<string, ToolDefinition>): string;
35
+ /**
36
+ * Build the authoring agent's system prompt from the single bundled prompt file
37
+ * (or a `.deepclause/system/AGENT_PROMPT.md` override). The file is used as-is —
38
+ * no template substitution — plus the workspace `AGENTS.md` when present.
39
+ */
40
+ export declare function buildAgentSystemPrompt(options?: {
41
+ workspacePath?: string;
42
+ }): Promise<string>;
43
+ /**
44
+ * A multi-turn authoring agent. `run` yields `DMLEvent`s (streaming text,
45
+ * reasoning, tool calls, usage, errors) and follows the tool loop until the
46
+ * model calls `finish` or the budget runs out.
47
+ */
48
+ export declare class HarnessAgent {
49
+ readonly tools: Map<string, ToolDefinition>;
50
+ private readonly options;
51
+ private messages;
52
+ /** User messages delivered while a turn is running (pi-style steering). */
53
+ private readonly pendingSteers;
54
+ /** Aborts the in-flight model call when a steer arrives so it is seen now. */
55
+ private steerAbort?;
56
+ constructor(options: HarnessAgentOptions);
57
+ /** The persisted conversation (real user/assistant turns only, no host nudges). */
58
+ getMessages(): MemoryMessage[];
59
+ /**
60
+ * Deliver a message into the running turn (pi-style steering). It is queued
61
+ * and injected before the next model call; when a model call is in flight it
62
+ * is aborted so the steer is seen immediately.
63
+ */
64
+ steer(text: string): void;
65
+ /**
66
+ * Compact the agent's own conversation. `force` ignores the threshold (used by
67
+ * the manual `compact.` command); the loop hook checks the threshold itself.
68
+ */
69
+ compactMemory(force?: boolean, signal?: AbortSignal, customInstructions?: string): Promise<CompactMemoryResult>;
70
+ run(request: string, options?: HarnessAgentRunOptions): AsyncGenerator<DMLEvent>;
71
+ }
72
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/repl/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EAIV,aAAa,EACb,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAgC,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAElH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE;QAAE,QAAQ,EAAE,kBAAkB,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7D,kFAAkF;IAClF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAID,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,MAAM,CAWxE;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,GAAE;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,MAAM,CAAC,CAcvB;AAqDD;;;;GAIG;AACH,qBAAa,YAAY;IACvB,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAsB;IACtC,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,8EAA8E;IAC9E,OAAO,CAAC,UAAU,CAAC,CAAkB;gBAEzB,OAAO,EAAE,mBAAmB;IAWxC,mFAAmF;IACnF,WAAW,IAAI,aAAa,EAAE;IAQ9B;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOzB;;;OAGG;IACG,aAAa,CAAC,KAAK,UAAQ,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAqB5G,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,cAAc,CAAC,QAAQ,CAAC;CA0M5F"}
@@ -0,0 +1,366 @@
1
+ /**
2
+ * The REPL authoring agent.
3
+ *
4
+ * This is a normal TypeScript agent loop over the injected `LLMBackend`: a
5
+ * system prompt plus harness tools. It replaces the old DML `task_named` meta
6
+ * frame for authoring, so the runtime's frame machinery is only used for
7
+ * DML-internal `task/N` calls.
8
+ */
9
+ import { readAgentPromptAsset } from '../system/assets/index.js';
10
+ import { loadProjectContext } from './project-context.js';
11
+ import { compactMemory, shouldCompact } from './compaction.js';
12
+ const MAX_TOOL_RESULT_CHARS = 8000;
13
+ /** Generate the `TOOLS` section of the system prompt from the tool schemas. */
14
+ export function describeTools(tools) {
15
+ const lines = [];
16
+ for (const [name, tool] of tools) {
17
+ const properties = (tool.parameters.properties ?? {});
18
+ const required = new Set(tool.parameters.required ?? []);
19
+ const params = Object.entries(properties)
20
+ .map(([param, schema]) => `${param}${required.has(param) ? '' : '?'}: ${schema.type ?? 'any'}`)
21
+ .join(', ');
22
+ lines.push(`- ${name}(${params}): ${tool.description}`);
23
+ }
24
+ return lines.join('\n');
25
+ }
26
+ /**
27
+ * Build the authoring agent's system prompt from the single bundled prompt file
28
+ * (or a `.deepclause/system/AGENT_PROMPT.md` override). The file is used as-is —
29
+ * no template substitution — plus the workspace `AGENTS.md` when present.
30
+ */
31
+ export async function buildAgentSystemPrompt(options = {}) {
32
+ let prompt = '';
33
+ try {
34
+ prompt = await readAgentPromptAsset({ workspacePath: options.workspacePath });
35
+ }
36
+ catch {
37
+ prompt = 'You are an agent with access to a DML REPL.';
38
+ }
39
+ // Append a workspace `AGENTS.md` so repo-specific rules always apply.
40
+ const project = await loadProjectContext(options.workspacePath);
41
+ if (project) {
42
+ prompt += `\n\nPROJECT INSTRUCTIONS (AGENTS.md)\n${project.content}\n`;
43
+ }
44
+ return prompt;
45
+ }
46
+ /** Project the agent's message list onto `MemoryMessage[]` for compaction. */
47
+ function toMemoryMessages(messages) {
48
+ const out = [];
49
+ for (const message of messages) {
50
+ if (message.role === 'system') {
51
+ out.push({ role: 'system', content: message.content });
52
+ }
53
+ else if (message.role === 'user') {
54
+ out.push({ role: 'user', content: message.content });
55
+ }
56
+ else if (message.role === 'assistant') {
57
+ const calls = (message.toolCalls ?? [])
58
+ .map((call) => `${call.name}(${JSON.stringify(call.arguments)})`)
59
+ .join(', ');
60
+ out.push({ role: 'assistant', content: calls ? `${message.content}\n[tool calls: ${calls}]` : message.content });
61
+ }
62
+ else {
63
+ out.push({ role: 'user', content: `[tool result: ${message.toolName ?? 'tool'}] ${message.content}` });
64
+ }
65
+ }
66
+ return out;
67
+ }
68
+ function fromMemoryMessages(messages) {
69
+ return messages.map((message) => ({ role: message.role, content: message.content }));
70
+ }
71
+ function stringifyToolResult(result) {
72
+ let text;
73
+ if (typeof result === 'string') {
74
+ text = result;
75
+ }
76
+ else {
77
+ try {
78
+ text = JSON.stringify(result);
79
+ }
80
+ catch {
81
+ text = String(result);
82
+ }
83
+ }
84
+ return text.length > MAX_TOOL_RESULT_CHARS
85
+ ? `${text.slice(0, MAX_TOOL_RESULT_CHARS)}\n… [truncated]`
86
+ : text;
87
+ }
88
+ /** A tool that returned `{ ok: false }` or `{ error }` should render as failed. */
89
+ function toolResultFailure(result) {
90
+ if (!result || typeof result !== 'object')
91
+ return undefined;
92
+ const record = result;
93
+ if (record.ok === false) {
94
+ return typeof record.error === 'string' && record.error ? record.error : 'failed';
95
+ }
96
+ if (typeof record.error === 'string' && record.error)
97
+ return record.error;
98
+ return undefined;
99
+ }
100
+ /**
101
+ * A multi-turn authoring agent. `run` yields `DMLEvent`s (streaming text,
102
+ * reasoning, tool calls, usage, errors) and follows the tool loop until the
103
+ * model calls `finish` or the budget runs out.
104
+ */
105
+ export class HarnessAgent {
106
+ tools;
107
+ options;
108
+ messages;
109
+ /** User messages delivered while a turn is running (pi-style steering). */
110
+ pendingSteers = [];
111
+ /** Aborts the in-flight model call when a steer arrives so it is seen now. */
112
+ steerAbort;
113
+ constructor(options) {
114
+ this.options = options;
115
+ this.tools = options.tools;
116
+ this.messages = options.knownMessages
117
+ ? options.knownMessages
118
+ // Defensively drop any older host nudge persisted as a user message.
119
+ .filter((message) => message.content.trim() !== 'Continue: call a tool, or call finish when done.')
120
+ .map((message) => ({ role: message.role, content: message.content }))
121
+ : [];
122
+ }
123
+ /** The persisted conversation (real user/assistant turns only, no host nudges). */
124
+ getMessages() {
125
+ return this.messages
126
+ .filter((message) => message.role === 'system' || message.role === 'user' || message.role === 'assistant')
127
+ // Drop assistant turns that only carry tool calls (empty text).
128
+ .filter((message) => message.role !== 'assistant' || (message.content ?? '').trim() !== '')
129
+ .map((message) => ({ role: message.role, content: message.content }));
130
+ }
131
+ /**
132
+ * Deliver a message into the running turn (pi-style steering). It is queued
133
+ * and injected before the next model call; when a model call is in flight it
134
+ * is aborted so the steer is seen immediately.
135
+ */
136
+ steer(text) {
137
+ const trimmed = text.trim();
138
+ if (!trimmed)
139
+ return;
140
+ this.pendingSteers.push(trimmed);
141
+ this.steerAbort?.abort();
142
+ }
143
+ /**
144
+ * Compact the agent's own conversation. `force` ignores the threshold (used by
145
+ * the manual `compact.` command); the loop hook checks the threshold itself.
146
+ */
147
+ async compactMemory(force = false, signal, customInstructions) {
148
+ const settings = this.options.compaction?.settings;
149
+ if (!settings?.enabled) {
150
+ return { applied: false, reason: 'disabled', messages: this.getMessages(), tokensBefore: 0, tokensAfter: 0 };
151
+ }
152
+ const result = await compactMemory({
153
+ messages: toMemoryMessages(this.messages),
154
+ backend: this.options.llmBackend,
155
+ model: this.options.model,
156
+ contextWindow: this.options.contextWindow,
157
+ settings,
158
+ signal,
159
+ customInstructions,
160
+ force,
161
+ });
162
+ if (result.applied) {
163
+ this.messages = fromMemoryMessages(result.messages);
164
+ }
165
+ return result;
166
+ }
167
+ async *run(request, options = {}) {
168
+ const { llmBackend, tools } = this.options;
169
+ const streaming = this.options.streaming ?? true;
170
+ const maxModelCalls = this.options.maxModelCalls ?? 0;
171
+ const settings = this.options.compaction?.settings;
172
+ const autoCompact = this.options.compaction?.auto ?? false;
173
+ const systemPrompt = await buildAgentSystemPrompt({
174
+ workspacePath: this.options.workspacePath,
175
+ });
176
+ this.messages.push({ role: 'user', content: request });
177
+ const backendTools = [...tools].map(([name, tool]) => ({
178
+ name,
179
+ description: tool.description,
180
+ parameters: tool.parameters,
181
+ }));
182
+ let calls = 0;
183
+ let finished = false;
184
+ let lastText = '';
185
+ let lastInputTokens;
186
+ const maxIterations = 1000;
187
+ while (!finished && calls < maxIterations) {
188
+ if (options.signal?.aborted)
189
+ break;
190
+ if (maxModelCalls > 0 && calls >= maxModelCalls) {
191
+ yield { type: 'error', content: `model-call budget exhausted (${maxModelCalls})` };
192
+ break;
193
+ }
194
+ calls += 1;
195
+ // Inject any steering messages submitted during the previous iteration.
196
+ while (this.pendingSteers.length > 0) {
197
+ this.messages.push({ role: 'user', content: this.pendingSteers.shift() });
198
+ }
199
+ if (autoCompact && settings?.enabled && this.options.contextWindow) {
200
+ if (shouldCompact(lastInputTokens ?? 0, this.options.contextWindow, settings)) {
201
+ const result = await this.compactMemory(true, options.signal);
202
+ if (result.applied) {
203
+ yield {
204
+ type: 'memory_compaction',
205
+ content: `compact agent.before_model_call applied ${result.tokensBefore} -> ${result.tokensAfter} tokens`,
206
+ compactionScope: 'session',
207
+ compactionTrigger: 'before_model_call',
208
+ compactionAction: 'applied',
209
+ beforeTokens: result.tokensBefore,
210
+ afterTokens: result.tokensAfter,
211
+ };
212
+ }
213
+ }
214
+ }
215
+ yield { type: 'model_call', modelCallState: 'started', modelId: this.options.model };
216
+ // Stream deltas live via a queue while the (single) backend call runs.
217
+ const streamQueue = [];
218
+ let wake = null;
219
+ let settled = false;
220
+ let response;
221
+ let failure;
222
+ const push = (event) => {
223
+ streamQueue.push(event);
224
+ if (wake) {
225
+ const resolve = wake;
226
+ wake = null;
227
+ resolve();
228
+ }
229
+ };
230
+ const requestMessages = [
231
+ { role: 'system', content: systemPrompt },
232
+ ...this.messages,
233
+ ];
234
+ this.steerAbort = new AbortController();
235
+ const callSignal = options.signal
236
+ ? AbortSignal.any([options.signal, this.steerAbort.signal])
237
+ : this.steerAbort.signal;
238
+ const completion = llmBackend.complete({
239
+ messages: requestMessages,
240
+ tools: backendTools,
241
+ temperature: this.options.temperature,
242
+ maxTokens: this.options.maxTokens,
243
+ signal: callSignal,
244
+ onText: streaming ? (chunk) => push({ type: 'stream', content: chunk }) : undefined,
245
+ onReasoning: streaming ? (chunk) => push({ type: 'reasoning', content: chunk }) : undefined,
246
+ }).then((value) => { response = value; settled = true; if (wake) {
247
+ const r = wake;
248
+ wake = null;
249
+ r();
250
+ } }, (error) => { failure = error; settled = true; if (wake) {
251
+ const r = wake;
252
+ wake = null;
253
+ r();
254
+ } });
255
+ while (true) {
256
+ while (streamQueue.length > 0)
257
+ yield streamQueue.shift();
258
+ if (settled)
259
+ break;
260
+ await new Promise((resolve) => { wake = resolve; });
261
+ }
262
+ while (streamQueue.length > 0)
263
+ yield streamQueue.shift();
264
+ await completion;
265
+ if (failure || !response) {
266
+ const steered = Boolean(this.steerAbort?.signal.aborted) && !options.signal?.aborted;
267
+ this.steerAbort = undefined;
268
+ if (steered && this.pendingSteers.length > 0) {
269
+ // A steer interrupted this call; re-run with the queued message.
270
+ continue;
271
+ }
272
+ yield { type: 'model_call', modelCallState: 'failed', modelId: this.options.model };
273
+ yield { type: 'error', content: failure instanceof Error ? failure.message : String(failure) };
274
+ return;
275
+ }
276
+ this.steerAbort = undefined;
277
+ yield { type: 'model_call', modelCallState: 'completed', modelId: this.options.model };
278
+ if (response.usage) {
279
+ lastInputTokens = (response.usage.inputTokens ?? 0)
280
+ + (response.usage.cacheReadTokens ?? 0)
281
+ + (response.usage.cacheWriteTokens ?? 0);
282
+ yield { type: 'usage', usage: response.usage, usageSource: 'llm', usageModel: this.options.model };
283
+ }
284
+ if (response.text) {
285
+ lastText = response.text;
286
+ }
287
+ const toolCalls = response.toolCalls ?? [];
288
+ this.messages.push({
289
+ role: 'assistant',
290
+ content: response.text,
291
+ toolCalls,
292
+ providerData: response.providerData,
293
+ });
294
+ if (toolCalls.length === 0) {
295
+ // No tool call: the model answered directly or stopped; end the turn.
296
+ finished = true;
297
+ break;
298
+ }
299
+ for (const call of toolCalls) {
300
+ yield { type: 'tool_call', toolName: call.name, toolArgs: call.arguments, toolState: 'starting' };
301
+ // `finish` is not offered to the model any more; a turn ends when the
302
+ // model replies without tool calls. Tolerate a stray `finish` (older
303
+ // transcripts, tests) as an explicit stop.
304
+ if (call.name === 'finish') {
305
+ finished = true;
306
+ yield { type: 'tool_call', toolName: 'finish', toolArgs: call.arguments, toolState: 'completed', toolSummary: 'done' };
307
+ this.messages.push({ role: 'tool', content: '{"finished":true}', toolCallId: call.id, toolName: 'finish' });
308
+ break;
309
+ }
310
+ const tool = tools.get(call.name);
311
+ if (!tool) {
312
+ const message = `Tool not found: ${call.name}`;
313
+ yield { type: 'tool_call', toolName: call.name, toolState: 'failed', toolError: message };
314
+ this.messages.push({ role: 'tool', content: JSON.stringify({ error: message }), toolCallId: call.id, toolName: call.name });
315
+ continue;
316
+ }
317
+ let result;
318
+ let toolFailure;
319
+ let toolSettled = false;
320
+ const toolEvents = [];
321
+ let toolWake = null;
322
+ const wakeTool = () => {
323
+ if (toolWake) {
324
+ const resolve = toolWake;
325
+ toolWake = null;
326
+ resolve();
327
+ }
328
+ };
329
+ const toolStartedAt = Date.now();
330
+ const toolPromise = tool.execute(call.arguments, {
331
+ signal: options.signal,
332
+ onEvent: (event) => { toolEvents.push(event); wakeTool(); },
333
+ }).then((value) => { result = value; toolSettled = true; wakeTool(); }, (error) => { toolFailure = error; toolSettled = true; wakeTool(); });
334
+ // Stream events the tool produces (e.g. an `execute` child frame) live.
335
+ while (true) {
336
+ while (toolEvents.length > 0)
337
+ yield toolEvents.shift();
338
+ if (toolSettled)
339
+ break;
340
+ await new Promise((resolve) => { toolWake = resolve; });
341
+ }
342
+ while (toolEvents.length > 0)
343
+ yield toolEvents.shift();
344
+ await toolPromise;
345
+ const failureMessage = toolFailure
346
+ ? (toolFailure instanceof Error ? toolFailure.message : String(toolFailure))
347
+ : toolResultFailure(result);
348
+ const text = stringifyToolResult(failureMessage ? { error: failureMessage } : result);
349
+ if (failureMessage) {
350
+ yield { type: 'tool_call', toolName: call.name, toolArgs: call.arguments, toolState: 'failed', toolError: text.slice(0, 200), toolDurationMs: Date.now() - toolStartedAt };
351
+ }
352
+ else {
353
+ yield { type: 'tool_call', toolName: call.name, toolArgs: call.arguments, toolState: 'completed', toolSummary: text.slice(0, 200), toolDurationMs: Date.now() - toolStartedAt };
354
+ }
355
+ this.messages.push({ role: 'tool', content: text, toolCallId: call.id, toolName: call.name });
356
+ }
357
+ }
358
+ if (!finished && !options.signal?.aborted) {
359
+ yield { type: 'log', content: 'authoring agent reached its iteration limit without finishing' };
360
+ }
361
+ if (!streaming && lastText) {
362
+ yield { type: 'output', content: lastText };
363
+ }
364
+ }
365
+ }
366
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/repl/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * pi login/logout, ported to a plain terminal.
3
+ *
4
+ * This is the headless equivalent of pi's `/login`: enumerate providers with
5
+ * their auth methods and configured status, run `runtime.login(provider, type,
6
+ * interaction)` (which persists the credential), and render the auth
7
+ * events (`auth_url`, `device_code`, `progress`, `info`) that the flow emits.
8
+ *
9
+ * The interaction is a superset of pi-ai's `AuthInteraction`; the shapes are
10
+ * re-declared structurally so this module does not depend on pi-ai types.
11
+ */
12
+ import type { PiAuthInteractionLike, PiRuntimeHandle } from './backend.js';
13
+ export interface LoginProviderOption {
14
+ id: string;
15
+ name: string;
16
+ authType: 'oauth' | 'api_key';
17
+ configured: boolean;
18
+ source?: string;
19
+ /** OAuth backed by a provider subscription rather than a direct account. */
20
+ subscription: boolean;
21
+ }
22
+ /** Port of pi's login dialog to a plain terminal (readline + stdout). */
23
+ export declare function createTerminalAuthInteraction(): PiAuthInteractionLike;
24
+ /** Interaction that answers every prompt with a fixed API key. */
25
+ export declare function apiKeyInteraction(apiKey: string): PiAuthInteractionLike;
26
+ /**
27
+ * Providers that support login, one entry per auth method (mirrors pi's
28
+ * `getLoginProviderOptions`).
29
+ */
30
+ export declare function listLoginProviders(handle: PiRuntimeHandle, options?: {
31
+ authType?: 'oauth' | 'api_key';
32
+ }): LoginProviderOption[];
33
+ /**
34
+ * Run pi's login for a provider. `type` selects the auth method when a provider
35
+ * offers both; otherwise the only available method is used. `apiKey` short-
36
+ * circuits the interaction.
37
+ */
38
+ export declare function loginToProvider(handle: PiRuntimeHandle, providerId: string, options: {
39
+ interaction: PiAuthInteractionLike;
40
+ type?: 'api_key' | 'oauth';
41
+ apiKey?: string;
42
+ }): Promise<void>;
43
+ /** Remove a stored credential (pi `/logout`). */
44
+ export declare function logoutProvider(handle: PiRuntimeHandle, providerId: string): Promise<void>;
45
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/repl/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAEV,qBAAqB,EACrB,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,YAAY,EAAE,OAAO,CAAC;CACvB;AA0BD,yEAAyE;AACzE,wBAAgB,6BAA6B,IAAI,qBAAqB,CAqBrE;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAOvE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAO,GAC/C,mBAAmB,EAAE,CAiBvB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,WAAW,EAAE,qBAAqB,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3F,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,iDAAiD;AACjD,wBAAsB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/F"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * pi login/logout, ported to a plain terminal.
3
+ *
4
+ * This is the headless equivalent of pi's `/login`: enumerate providers with
5
+ * their auth methods and configured status, run `runtime.login(provider, type,
6
+ * interaction)` (which persists the credential), and render the auth
7
+ * events (`auth_url`, `device_code`, `progress`, `info`) that the flow emits.
8
+ *
9
+ * The interaction is a superset of pi-ai's `AuthInteraction`; the shapes are
10
+ * re-declared structurally so this module does not depend on pi-ai types.
11
+ */
12
+ import * as readline from 'readline';
13
+ function ask(question) {
14
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
15
+ return new Promise((resolve) => {
16
+ rl.question(question, (answer) => {
17
+ rl.close();
18
+ resolve(answer);
19
+ });
20
+ });
21
+ }
22
+ function renderAuthEvent(event) {
23
+ if (event.type === 'auth_url' && event.url) {
24
+ console.log(`\nOpen this URL to authorize:\n ${event.url}`);
25
+ if (event.instructions)
26
+ console.log(event.instructions);
27
+ }
28
+ else if (event.type === 'device_code') {
29
+ console.log(`\nVisit ${event.verificationUri} and enter code: ${event.userCode}`);
30
+ }
31
+ else if (event.message) {
32
+ console.log(event.message);
33
+ }
34
+ for (const link of event.links ?? []) {
35
+ console.log(` ${link.label ?? link.url}: ${link.url}`);
36
+ }
37
+ }
38
+ /** Port of pi's login dialog to a plain terminal (readline + stdout). */
39
+ export function createTerminalAuthInteraction() {
40
+ return {
41
+ async prompt(prompt) {
42
+ if (prompt.options && prompt.options.length > 0) {
43
+ const lines = prompt.options.map((option, index) => {
44
+ const description = option.description ? ` — ${option.description}` : '';
45
+ return ` ${index + 1}. ${option.label}${description}`;
46
+ });
47
+ const answer = await ask(`${prompt.message}\n${lines.join('\n')}\n> `);
48
+ const byIndex = Number(answer.trim()) - 1;
49
+ if (Number.isInteger(byIndex) && prompt.options[byIndex]) {
50
+ return prompt.options[byIndex].id;
51
+ }
52
+ const byId = prompt.options.find((option) => option.id === answer.trim());
53
+ return byId ? byId.id : answer.trim();
54
+ }
55
+ const placeholder = prompt.placeholder ? ` (${prompt.placeholder})` : '';
56
+ return ask(`${prompt.message}${placeholder}\n> `);
57
+ },
58
+ notify: renderAuthEvent,
59
+ };
60
+ }
61
+ /** Interaction that answers every prompt with a fixed API key. */
62
+ export function apiKeyInteraction(apiKey) {
63
+ return {
64
+ prompt: async () => apiKey,
65
+ notify: (event) => {
66
+ if (event.message)
67
+ console.log(event.message);
68
+ },
69
+ };
70
+ }
71
+ /**
72
+ * Providers that support login, one entry per auth method (mirrors pi's
73
+ * `getLoginProviderOptions`).
74
+ */
75
+ export function listLoginProviders(handle, options = {}) {
76
+ const status = new Map(handle.listProviders().map((provider) => [provider.id, provider]));
77
+ const out = [];
78
+ for (const provider of handle.runtime.getProviders()) {
79
+ const info = status.get(provider.id);
80
+ const configured = info?.configured ?? handle.hasAuth(provider.id);
81
+ const source = info?.label ?? info?.source;
82
+ const subscription = provider.auth?.oauth?.isSubscription === true;
83
+ const base = { id: provider.id, name: provider.name ?? provider.id, configured, source, subscription };
84
+ if ((!options.authType || options.authType === 'oauth') && provider.auth?.oauth) {
85
+ out.push({ ...base, authType: 'oauth' });
86
+ }
87
+ if ((!options.authType || options.authType === 'api_key') && provider.auth?.apiKey) {
88
+ out.push({ ...base, authType: 'api_key' });
89
+ }
90
+ }
91
+ return out.sort((a, b) => a.name.localeCompare(b.name) || a.authType.localeCompare(b.authType));
92
+ }
93
+ /**
94
+ * Run pi's login for a provider. `type` selects the auth method when a provider
95
+ * offers both; otherwise the only available method is used. `apiKey` short-
96
+ * circuits the interaction.
97
+ */
98
+ export async function loginToProvider(handle, providerId, options) {
99
+ if (options.apiKey) {
100
+ await handle.login(providerId, apiKeyInteraction(options.apiKey), 'api_key');
101
+ return;
102
+ }
103
+ const types = listLoginProviders(handle)
104
+ .filter((provider) => provider.id === providerId)
105
+ .map((provider) => provider.authType);
106
+ const type = options.type ?? (types.includes('api_key') ? 'api_key' : types[0]);
107
+ if (!type) {
108
+ throw new Error(`provider '${providerId}' has no login method`);
109
+ }
110
+ await handle.login(providerId, options.interaction, type);
111
+ }
112
+ /** Remove a stored credential (pi `/logout`). */
113
+ export async function logoutProvider(handle, providerId) {
114
+ await handle.logout(providerId);
115
+ }
116
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/repl/auth.ts"],"names":[],"mappings":"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"}