deepclause-sdk 0.0.89 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +481 -941
- package/dist/agent.d.ts +19 -2
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +75 -21
- package/dist/agent.js.map +1 -1
- package/dist/cli/config.d.ts +385 -178
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +161 -188
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/index.d.ts +3 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +85 -411
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/login.d.ts +29 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +184 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/readline.d.ts +6 -0
- package/dist/cli/readline.d.ts.map +1 -0
- package/dist/cli/readline.js +15 -0
- package/dist/cli/readline.js.map +1 -0
- package/dist/cli/repl-bin.d.ts +9 -0
- package/dist/cli/repl-bin.d.ts.map +1 -0
- package/dist/cli/repl-bin.js +16 -0
- package/dist/cli/repl-bin.js.map +1 -0
- package/dist/cli/repl.d.ts +216 -0
- package/dist/cli/repl.d.ts.map +1 -0
- package/dist/cli/repl.js +1392 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/run.d.ts +17 -18
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +202 -183
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/set-backend.d.ts +53 -0
- package/dist/cli/set-backend.d.ts.map +1 -0
- package/dist/cli/set-backend.js +259 -0
- package/dist/cli/set-backend.js.map +1 -0
- package/dist/cli/visualize.d.ts +42 -0
- package/dist/cli/visualize.d.ts.map +1 -0
- package/dist/cli/visualize.js +150 -0
- package/dist/cli/visualize.js.map +1 -0
- package/dist/compiler.d.ts +5 -52
- package/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +4 -768
- package/dist/compiler.js.map +1 -1
- package/dist/index.d.ts +27 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -2
- package/dist/index.js.map +1 -1
- package/dist/prolog/bridge.d.ts +5 -1
- package/dist/prolog/bridge.d.ts.map +1 -1
- package/dist/prolog/bridge.js +10 -1
- package/dist/prolog/bridge.js.map +1 -1
- package/dist/prolog-src/deepclause_analysis.pl +10 -2
- package/dist/prolog-src/deepclause_mi.pl +2440 -49
- package/dist/repl/agent.d.ts +90 -0
- package/dist/repl/agent.d.ts.map +1 -0
- package/dist/repl/agent.js +410 -0
- package/dist/repl/agent.js.map +1 -0
- package/dist/repl/auth.d.ts +45 -0
- package/dist/repl/auth.d.ts.map +1 -0
- package/dist/repl/auth.js +116 -0
- package/dist/repl/auth.js.map +1 -0
- package/dist/repl/backend.d.ts +321 -0
- package/dist/repl/backend.d.ts.map +1 -0
- package/dist/repl/backend.js +415 -0
- package/dist/repl/backend.js.map +1 -0
- package/dist/repl/compaction.d.ts +122 -0
- package/dist/repl/compaction.d.ts.map +1 -0
- package/dist/repl/compaction.js +318 -0
- package/dist/repl/compaction.js.map +1 -0
- package/dist/repl/export.d.ts +30 -0
- package/dist/repl/export.d.ts.map +1 -0
- package/dist/repl/export.js +23 -0
- package/dist/repl/export.js.map +1 -0
- package/dist/repl/frames.d.ts +21 -0
- package/dist/repl/frames.d.ts.map +1 -0
- package/dist/repl/frames.js +79 -0
- package/dist/repl/frames.js.map +1 -0
- package/dist/repl/harness-tools.d.ts +99 -0
- package/dist/repl/harness-tools.d.ts.map +1 -0
- package/dist/repl/harness-tools.js +192 -0
- package/dist/repl/harness-tools.js.map +1 -0
- package/dist/repl/highlight.d.ts +30 -0
- package/dist/repl/highlight.d.ts.map +1 -0
- package/dist/repl/highlight.js +285 -0
- package/dist/repl/highlight.js.map +1 -0
- package/dist/repl/history.d.ts +234 -0
- package/dist/repl/history.d.ts.map +1 -0
- package/dist/repl/history.js +661 -0
- package/dist/repl/history.js.map +1 -0
- package/dist/repl/imagegen.d.ts +29 -0
- package/dist/repl/imagegen.d.ts.map +1 -0
- package/dist/repl/imagegen.js +84 -0
- package/dist/repl/imagegen.js.map +1 -0
- package/dist/repl/index.d.ts +130 -0
- package/dist/repl/index.d.ts.map +1 -0
- package/dist/repl/index.js +112 -0
- package/dist/repl/index.js.map +1 -0
- package/dist/repl/judge.d.ts +51 -0
- package/dist/repl/judge.d.ts.map +1 -0
- package/dist/repl/judge.js +58 -0
- package/dist/repl/judge.js.map +1 -0
- package/dist/repl/markdown.d.ts +25 -0
- package/dist/repl/markdown.d.ts.map +1 -0
- package/dist/repl/markdown.js +103 -0
- package/dist/repl/markdown.js.map +1 -0
- package/dist/repl/model-resolver.d.ts +59 -0
- package/dist/repl/model-resolver.d.ts.map +1 -0
- package/dist/repl/model-resolver.js +156 -0
- package/dist/repl/model-resolver.js.map +1 -0
- package/dist/repl/picker.d.ts +34 -0
- package/dist/repl/picker.d.ts.map +1 -0
- package/dist/repl/picker.js +81 -0
- package/dist/repl/picker.js.map +1 -0
- package/dist/repl/project-context.d.ts +16 -0
- package/dist/repl/project-context.d.ts.map +1 -0
- package/dist/repl/project-context.js +23 -0
- package/dist/repl/project-context.js.map +1 -0
- package/dist/repl/render.d.ts +187 -0
- package/dist/repl/render.d.ts.map +1 -0
- package/dist/repl/render.js +808 -0
- package/dist/repl/render.js.map +1 -0
- package/dist/repl/session.d.ts +424 -0
- package/dist/repl/session.d.ts.map +1 -0
- package/dist/repl/session.js +1473 -0
- package/dist/repl/session.js.map +1 -0
- package/dist/repl/status.d.ts +100 -0
- package/dist/repl/status.d.ts.map +1 -0
- package/dist/repl/status.js +218 -0
- package/dist/repl/status.js.map +1 -0
- package/dist/repl/tools.d.ts +53 -0
- package/dist/repl/tools.d.ts.map +1 -0
- package/dist/repl/tools.js +307 -0
- package/dist/repl/tools.js.map +1 -0
- package/dist/repl/toolset.d.ts +32 -0
- package/dist/repl/toolset.d.ts.map +1 -0
- package/dist/repl/toolset.js +82 -0
- package/dist/repl/toolset.js.map +1 -0
- package/dist/repl/tui/editor.d.ts +17 -0
- package/dist/repl/tui/editor.d.ts.map +1 -0
- package/dist/repl/tui/editor.js +39 -0
- package/dist/repl/tui/editor.js.map +1 -0
- package/dist/repl/tui/status-bar.d.ts +26 -0
- package/dist/repl/tui/status-bar.d.ts.map +1 -0
- package/dist/repl/tui/status-bar.js +47 -0
- package/dist/repl/tui/status-bar.js.map +1 -0
- package/dist/repl/tui/theme.d.ts +30 -0
- package/dist/repl/tui/theme.d.ts.map +1 -0
- package/dist/repl/tui/theme.js +81 -0
- package/dist/repl/tui/theme.js.map +1 -0
- package/dist/repl/tui/transcript.d.ts +41 -0
- package/dist/repl/tui/transcript.d.ts.map +1 -0
- package/dist/repl/tui/transcript.js +139 -0
- package/dist/repl/tui/transcript.js.map +1 -0
- package/dist/runner.d.ts +143 -13
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +532 -290
- package/dist/runner.js.map +1 -1
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +0 -32
- package/dist/sdk.js.map +1 -1
- package/dist/system/assets/docs/AGENT_PROMPT.md +1447 -0
- package/dist/system/assets/docs/DML_AUTHORING.md +195 -0
- package/dist/system/assets/docs/DML_REFERENCE.md +344 -72
- package/dist/system/assets/docs/HARNESS_EXAMPLES.md +172 -0
- package/dist/system/assets/docs/HARNESS_PATTERNS.md +562 -0
- package/dist/system/assets/docs/META_PROMPT.md +68 -0
- package/dist/system/assets/docs/PROLOG_SNIPPETS.md +117 -0
- package/dist/system/assets/index.d.ts +9 -17
- package/dist/system/assets/index.d.ts.map +1 -1
- package/dist/system/assets/index.js +26 -85
- package/dist/system/assets/index.js.map +1 -1
- package/dist/system/runtime/agentvm-manager.d.ts +9 -2
- package/dist/system/runtime/agentvm-manager.d.ts.map +1 -1
- package/dist/system/runtime/agentvm-manager.js +70 -44
- package/dist/system/runtime/agentvm-manager.js.map +1 -1
- package/dist/system/runtime/media.d.ts +23 -0
- package/dist/system/runtime/media.d.ts.map +1 -0
- package/dist/system/runtime/media.js +55 -0
- package/dist/system/runtime/media.js.map +1 -0
- package/dist/system/runtime/shell-limits.d.ts +21 -0
- package/dist/system/runtime/shell-limits.d.ts.map +1 -0
- package/dist/system/runtime/shell-limits.js +39 -0
- package/dist/system/runtime/shell-limits.js.map +1 -0
- package/dist/system/runtime/shell-manager.d.ts +8 -3
- package/dist/system/runtime/shell-manager.d.ts.map +1 -1
- package/dist/system/runtime/shell-manager.js +56 -39
- package/dist/system/runtime/shell-manager.js.map +1 -1
- package/dist/system/runtime/shell-tool-events.js +5 -0
- package/dist/system/runtime/shell-tool-events.js.map +1 -1
- package/dist/system/runtime/token-usage.d.ts +2 -0
- package/dist/system/runtime/token-usage.d.ts.map +1 -1
- package/dist/system/runtime/token-usage.js +7 -0
- package/dist/system/runtime/token-usage.js.map +1 -1
- package/dist/tools.d.ts +3 -21
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +14 -168
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +136 -119
- package/dist/types.d.ts.map +1 -1
- package/dist/validate.d.ts +19 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +338 -0
- package/dist/validate.js.map +1 -0
- package/dist/visualize/ascii.d.ts +55 -0
- package/dist/visualize/ascii.d.ts.map +1 -0
- package/dist/visualize/ascii.js +242 -0
- package/dist/visualize/ascii.js.map +1 -0
- package/dist/visualize/display.d.ts +24 -0
- package/dist/visualize/display.d.ts.map +1 -0
- package/dist/visualize/display.js +29 -0
- package/dist/visualize/display.js.map +1 -0
- package/dist/visualize/graphics.d.ts +35 -0
- package/dist/visualize/graphics.d.ts.map +1 -0
- package/dist/visualize/graphics.js +96 -0
- package/dist/visualize/graphics.js.map +1 -0
- package/dist/visualize/image.d.ts +38 -0
- package/dist/visualize/image.d.ts.map +1 -0
- package/dist/visualize/image.js +95 -0
- package/dist/visualize/image.js.map +1 -0
- package/dist/visualize/index.d.ts +59 -0
- package/dist/visualize/index.d.ts.map +1 -0
- package/dist/visualize/index.js +198 -0
- package/dist/visualize/index.js.map +1 -0
- package/dist/visualize/raster.d.ts +23 -0
- package/dist/visualize/raster.d.ts.map +1 -0
- package/dist/visualize/raster.js +47 -0
- package/dist/visualize/raster.js.map +1 -0
- package/dist/visualize/svg.d.ts +39 -0
- package/dist/visualize/svg.d.ts.map +1 -0
- package/dist/visualize/svg.js +148 -0
- package/dist/visualize/svg.js.map +1 -0
- package/dist/visualize/transcode.d.ts +13 -0
- package/dist/visualize/transcode.d.ts.map +1 -0
- package/dist/visualize/transcode.js +40 -0
- package/dist/visualize/transcode.js.map +1 -0
- package/docs/images/repl.png +0 -0
- package/package.json +19 -15
- package/src/prolog-src/deepclause_analysis.pl +10 -2
- package/src/prolog-src/deepclause_mi.pl +2440 -49
- package/dist/cli/commands.d.ts +0 -42
- package/dist/cli/commands.d.ts.map +0 -1
- package/dist/cli/commands.js +0 -246
- package/dist/cli/commands.js.map +0 -1
- package/dist/cli/compile.d.ts +0 -99
- package/dist/cli/compile.d.ts.map +0 -1
- package/dist/cli/compile.js +0 -363
- package/dist/cli/compile.js.map +0 -1
- package/dist/cli/default-skills.d.ts +0 -10
- package/dist/cli/default-skills.d.ts.map +0 -1
- package/dist/cli/default-skills.js +0 -206
- package/dist/cli/default-skills.js.map +0 -1
- package/dist/cli/interactive.d.ts +0 -2
- package/dist/cli/interactive.d.ts.map +0 -1
- package/dist/cli/interactive.js +0 -20
- package/dist/cli/interactive.js.map +0 -1
- package/dist/cli/mcp.d.ts +0 -56
- package/dist/cli/mcp.d.ts.map +0 -1
- package/dist/cli/mcp.js +0 -138
- package/dist/cli/mcp.js.map +0 -1
- package/dist/cli/prompt.d.ts +0 -2
- package/dist/cli/prompt.d.ts.map +0 -1
- package/dist/cli/prompt.js +0 -2
- package/dist/cli/prompt.js.map +0 -1
- package/dist/cli/search.d.ts +0 -19
- package/dist/cli/search.d.ts.map +0 -1
- package/dist/cli/search.js +0 -189
- package/dist/cli/search.js.map +0 -1
- package/dist/cli/tool-args.d.ts +0 -2
- package/dist/cli/tool-args.d.ts.map +0 -1
- package/dist/cli/tool-args.js +0 -39
- package/dist/cli/tool-args.js.map +0 -1
- package/dist/cli/tools.d.ts +0 -36
- package/dist/cli/tools.d.ts.map +0 -1
- package/dist/cli/tools.js +0 -229
- package/dist/cli/tools.js.map +0 -1
- package/dist/cli/tui/index.d.ts +0 -22
- package/dist/cli/tui/index.d.ts.map +0 -1
- package/dist/cli/tui/index.js +0 -29
- package/dist/cli/tui/index.js.map +0 -1
- package/dist/cli/tui.d.ts +0 -167
- package/dist/cli/tui.d.ts.map +0 -1
- package/dist/cli/tui.js +0 -5228
- package/dist/cli/tui.js.map +0 -1
- package/dist/compiler_prompt.d.ts +0 -20
- package/dist/compiler_prompt.d.ts.map +0 -1
- package/dist/compiler_prompt.js +0 -870
- package/dist/compiler_prompt.js.map +0 -1
- package/dist/deepclause-cli.skill +0 -0
- package/dist/prolog-src/deepclause_mi.pl.bak +0 -570
- package/dist/system/assets/docs/CONDUCTOR_PROMPT.md +0 -105
- package/dist/system/assets/docs/DML_COMPILER_PROMPT.md +0 -700
- package/dist/system/assets/docs/TUI.md +0 -150
- package/dist/system/assets/recipes/deepclause-coding-workflow/SKILL.md +0 -100
- package/dist/system/assets/skills/conductor.dml +0 -76
- package/dist/system/assets/skills/deep-planner.dml +0 -412
- package/dist/system/assets/skills/plan.dml +0 -429
- package/dist/system/assets/skills/security-planner.dml +0 -337
- package/dist/system/assets/skills/skill-creator.dml +0 -187
- package/dist/system/runtime/catalog-recipes.d.ts +0 -24
- package/dist/system/runtime/catalog-recipes.d.ts.map +0 -1
- package/dist/system/runtime/catalog-recipes.js +0 -273
- package/dist/system/runtime/catalog-recipes.js.map +0 -1
- package/dist/system/runtime/catalog-skills.d.ts +0 -50
- package/dist/system/runtime/catalog-skills.d.ts.map +0 -1
- package/dist/system/runtime/catalog-skills.js +0 -152
- package/dist/system/runtime/catalog-skills.js.map +0 -1
- package/dist/system/runtime/conductor.d.ts +0 -105
- package/dist/system/runtime/conductor.d.ts.map +0 -1
- package/dist/system/runtime/conductor.js +0 -732
- package/dist/system/runtime/conductor.js.map +0 -1
- package/dist/system/runtime/console-capture.d.ts +0 -9
- package/dist/system/runtime/console-capture.d.ts.map +0 -1
- package/dist/system/runtime/console-capture.js +0 -67
- package/dist/system/runtime/console-capture.js.map +0 -1
- package/dist/system/runtime/dml-executor.d.ts +0 -52
- package/dist/system/runtime/dml-executor.d.ts.map +0 -1
- package/dist/system/runtime/dml-executor.js +0 -203
- package/dist/system/runtime/dml-executor.js.map +0 -1
- package/dist/system/runtime/runtime-tools.d.ts +0 -31
- package/dist/system/runtime/runtime-tools.d.ts.map +0 -1
- package/dist/system/runtime/runtime-tools.js +0 -312
- package/dist/system/runtime/runtime-tools.js.map +0 -1
- package/dist/system/runtime/skill-creator.d.ts +0 -38
- package/dist/system/runtime/skill-creator.d.ts.map +0 -1
- package/dist/system/runtime/skill-creator.js +0 -763
- package/dist/system/runtime/skill-creator.js.map +0 -1
- package/src/prolog-src/deepclause_mi.pl.bak +0 -570
|
@@ -0,0 +1,90 @@
|
|
|
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
|
+
import { type ModelCatalogEntry } from './model-resolver.js';
|
|
12
|
+
export interface HarnessAgentOptions {
|
|
13
|
+
tools: Map<string, ToolDefinition>;
|
|
14
|
+
llmBackend: LLMBackend;
|
|
15
|
+
model: string;
|
|
16
|
+
temperature?: number;
|
|
17
|
+
maxTokens?: number;
|
|
18
|
+
streaming?: boolean;
|
|
19
|
+
/** Maximum model calls for one `run` (0 = unlimited). */
|
|
20
|
+
maxModelCalls?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Ask the human a question mid-turn (used to ask whether to extend the
|
|
23
|
+
* model-call budget). Returns undefined when there is no interactive channel.
|
|
24
|
+
*/
|
|
25
|
+
askInput?: (prompt: string, options?: string[]) => Promise<string | undefined>;
|
|
26
|
+
contextWindow?: number;
|
|
27
|
+
compaction?: {
|
|
28
|
+
settings: CompactionSettings;
|
|
29
|
+
auto: boolean;
|
|
30
|
+
};
|
|
31
|
+
/** Workspace root, so a `.deepclause/system/AGENT_PROMPT.md` override is used. */
|
|
32
|
+
workspacePath?: string;
|
|
33
|
+
/** The session's active model (`provider:model`), shown to the agent. */
|
|
34
|
+
currentModel?: string;
|
|
35
|
+
/** Models available this session (via `with_model/2`). */
|
|
36
|
+
modelCatalog?: ModelCatalogEntry[];
|
|
37
|
+
/** Pre-loaded documentation for the `reference` tool (handled by the controller). */
|
|
38
|
+
knownMessages?: MemoryMessage[];
|
|
39
|
+
}
|
|
40
|
+
export interface HarnessAgentRunOptions {
|
|
41
|
+
signal?: AbortSignal;
|
|
42
|
+
}
|
|
43
|
+
/** Generate the `TOOLS` section of the system prompt from the tool schemas. */
|
|
44
|
+
export declare function describeTools(tools: Map<string, ToolDefinition>): string;
|
|
45
|
+
/**
|
|
46
|
+
* Build the authoring agent's system prompt from the single bundled prompt file
|
|
47
|
+
* (or a `.deepclause/system/AGENT_PROMPT.md` override). The file is used as-is —
|
|
48
|
+
* no template substitution — plus the workspace `AGENTS.md` when present.
|
|
49
|
+
*/
|
|
50
|
+
export declare function buildAgentSystemPrompt(options?: {
|
|
51
|
+
workspacePath?: string;
|
|
52
|
+
currentModel?: string;
|
|
53
|
+
modelCatalog?: ModelCatalogEntry[];
|
|
54
|
+
}): Promise<string>;
|
|
55
|
+
/**
|
|
56
|
+
* A multi-turn authoring agent. `run` yields `DMLEvent`s (streaming text,
|
|
57
|
+
* reasoning, tool calls, usage, errors) and follows the tool loop until the
|
|
58
|
+
* model calls `finish` or the budget runs out.
|
|
59
|
+
*/
|
|
60
|
+
export declare class HarnessAgent {
|
|
61
|
+
readonly tools: Map<string, ToolDefinition>;
|
|
62
|
+
private readonly options;
|
|
63
|
+
private messages;
|
|
64
|
+
/** User messages delivered while a turn is running (pi-style steering). */
|
|
65
|
+
private readonly pendingSteers;
|
|
66
|
+
/** Aborts the in-flight model call when a steer arrives so it is seen now. */
|
|
67
|
+
private steerAbort?;
|
|
68
|
+
constructor(options: HarnessAgentOptions);
|
|
69
|
+
/** The persisted conversation (real user/assistant turns only, no host nudges). */
|
|
70
|
+
getMessages(): MemoryMessage[];
|
|
71
|
+
/**
|
|
72
|
+
* Deliver a message into the running turn (pi-style steering). It is queued
|
|
73
|
+
* and injected before the next model call; when a model call is in flight it
|
|
74
|
+
* is aborted so the steer is seen immediately.
|
|
75
|
+
*/
|
|
76
|
+
steer(text: string): void;
|
|
77
|
+
/**
|
|
78
|
+
* Compact the agent's own conversation. `force` ignores the threshold (used by
|
|
79
|
+
* the manual `compact.` command); the loop hook checks the threshold itself.
|
|
80
|
+
*/
|
|
81
|
+
compactMemory(force?: boolean, signal?: AbortSignal, customInstructions?: string): Promise<CompactMemoryResult>;
|
|
82
|
+
/**
|
|
83
|
+
* Ask the human whether to continue after the model-call budget is exhausted.
|
|
84
|
+
* Returns false when there is no interactive channel (autonomous runs keep the
|
|
85
|
+
* current abort behaviour).
|
|
86
|
+
*/
|
|
87
|
+
private askBudgetExtension;
|
|
88
|
+
run(request: string, options?: HarnessAgentRunOptions): AsyncGenerator<DMLEvent>;
|
|
89
|
+
}
|
|
90
|
+
//# 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;AAClH,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEtF,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;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/E,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,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,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;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC/B,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BvB;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;IAqBnH;;;;OAIG;YACW,kBAAkB;IAgBzB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,cAAc,CAAC,QAAQ,CAAC;CAuN5F"}
|
|
@@ -0,0 +1,410 @@
|
|
|
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
|
+
import { formatModelCatalogEntry } from './model-resolver.js';
|
|
13
|
+
const MAX_TOOL_RESULT_CHARS = 8000;
|
|
14
|
+
/** Generate the `TOOLS` section of the system prompt from the tool schemas. */
|
|
15
|
+
export function describeTools(tools) {
|
|
16
|
+
const lines = [];
|
|
17
|
+
for (const [name, tool] of tools) {
|
|
18
|
+
const properties = (tool.parameters.properties ?? {});
|
|
19
|
+
const required = new Set(tool.parameters.required ?? []);
|
|
20
|
+
const params = Object.entries(properties)
|
|
21
|
+
.map(([param, schema]) => `${param}${required.has(param) ? '' : '?'}: ${schema.type ?? 'any'}`)
|
|
22
|
+
.join(', ');
|
|
23
|
+
lines.push(`- ${name}(${params}): ${tool.description}`);
|
|
24
|
+
}
|
|
25
|
+
return lines.join('\n');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Build the authoring agent's system prompt from the single bundled prompt file
|
|
29
|
+
* (or a `.deepclause/system/AGENT_PROMPT.md` override). The file is used as-is —
|
|
30
|
+
* no template substitution — plus the workspace `AGENTS.md` when present.
|
|
31
|
+
*/
|
|
32
|
+
export async function buildAgentSystemPrompt(options = {}) {
|
|
33
|
+
let prompt = '';
|
|
34
|
+
try {
|
|
35
|
+
prompt = await readAgentPromptAsset({ workspacePath: options.workspacePath });
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
prompt = 'You are an agent with access to a DML REPL.';
|
|
39
|
+
}
|
|
40
|
+
// The models this session can switch to with `with_model/2`, with catalog prices.
|
|
41
|
+
const catalog = options.modelCatalog ?? [];
|
|
42
|
+
if (options.currentModel || catalog.length > 0) {
|
|
43
|
+
const shown = catalog.slice(0, 60).map(formatModelCatalogEntry);
|
|
44
|
+
prompt += [
|
|
45
|
+
'',
|
|
46
|
+
'AVAILABLE MODELS (price = USD per 1M tokens, input/output)',
|
|
47
|
+
options.currentModel ? `- current: ${options.currentModel}` : '',
|
|
48
|
+
shown.length > 0 ? `- with_model targets: ${shown.join(', ')}${catalog.length > shown.length ? ', …' : ''}` : '',
|
|
49
|
+
'- Pick the cheapest model that can do the job; use `with_model/2` to route calls.',
|
|
50
|
+
'- Other models may be configured with `deepclause login`; a `with_model` spec must name one of these.',
|
|
51
|
+
].filter(Boolean).join('\n') + '\n';
|
|
52
|
+
}
|
|
53
|
+
// Append a workspace `AGENTS.md` so repo-specific rules always apply.
|
|
54
|
+
const project = await loadProjectContext(options.workspacePath);
|
|
55
|
+
if (project) {
|
|
56
|
+
prompt += `\n\nPROJECT INSTRUCTIONS (AGENTS.md)\n${project.content}\n`;
|
|
57
|
+
}
|
|
58
|
+
return prompt;
|
|
59
|
+
}
|
|
60
|
+
/** Project the agent's message list onto `MemoryMessage[]` for compaction. */
|
|
61
|
+
function toMemoryMessages(messages) {
|
|
62
|
+
const out = [];
|
|
63
|
+
for (const message of messages) {
|
|
64
|
+
if (message.role === 'system') {
|
|
65
|
+
out.push({ role: 'system', content: message.content });
|
|
66
|
+
}
|
|
67
|
+
else if (message.role === 'user') {
|
|
68
|
+
out.push({ role: 'user', content: message.content });
|
|
69
|
+
}
|
|
70
|
+
else if (message.role === 'assistant') {
|
|
71
|
+
const calls = (message.toolCalls ?? [])
|
|
72
|
+
.map((call) => `${call.name}(${JSON.stringify(call.arguments)})`)
|
|
73
|
+
.join(', ');
|
|
74
|
+
out.push({ role: 'assistant', content: calls ? `${message.content}\n[tool calls: ${calls}]` : message.content });
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
out.push({ role: 'user', content: `[tool result: ${message.toolName ?? 'tool'}] ${message.content}` });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return out;
|
|
81
|
+
}
|
|
82
|
+
function fromMemoryMessages(messages) {
|
|
83
|
+
return messages.map((message) => ({ role: message.role, content: message.content }));
|
|
84
|
+
}
|
|
85
|
+
function stringifyToolResult(result) {
|
|
86
|
+
let text;
|
|
87
|
+
if (typeof result === 'string') {
|
|
88
|
+
text = result;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
try {
|
|
92
|
+
text = JSON.stringify(result);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
text = String(result);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return text.length > MAX_TOOL_RESULT_CHARS
|
|
99
|
+
? `${text.slice(0, MAX_TOOL_RESULT_CHARS)}\n… [truncated]`
|
|
100
|
+
: text;
|
|
101
|
+
}
|
|
102
|
+
/** A tool that returned `{ ok: false }` or `{ error }` should render as failed. */
|
|
103
|
+
function toolResultFailure(result) {
|
|
104
|
+
if (!result || typeof result !== 'object')
|
|
105
|
+
return undefined;
|
|
106
|
+
const record = result;
|
|
107
|
+
if (record.ok === false) {
|
|
108
|
+
return typeof record.error === 'string' && record.error ? record.error : 'failed';
|
|
109
|
+
}
|
|
110
|
+
if (typeof record.error === 'string' && record.error)
|
|
111
|
+
return record.error;
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* A multi-turn authoring agent. `run` yields `DMLEvent`s (streaming text,
|
|
116
|
+
* reasoning, tool calls, usage, errors) and follows the tool loop until the
|
|
117
|
+
* model calls `finish` or the budget runs out.
|
|
118
|
+
*/
|
|
119
|
+
export class HarnessAgent {
|
|
120
|
+
tools;
|
|
121
|
+
options;
|
|
122
|
+
messages;
|
|
123
|
+
/** User messages delivered while a turn is running (pi-style steering). */
|
|
124
|
+
pendingSteers = [];
|
|
125
|
+
/** Aborts the in-flight model call when a steer arrives so it is seen now. */
|
|
126
|
+
steerAbort;
|
|
127
|
+
constructor(options) {
|
|
128
|
+
this.options = options;
|
|
129
|
+
this.tools = options.tools;
|
|
130
|
+
this.messages = options.knownMessages
|
|
131
|
+
? options.knownMessages
|
|
132
|
+
// Defensively drop any older host nudge persisted as a user message.
|
|
133
|
+
.filter((message) => message.content.trim() !== 'Continue: call a tool, or call finish when done.')
|
|
134
|
+
.map((message) => ({ role: message.role, content: message.content }))
|
|
135
|
+
: [];
|
|
136
|
+
}
|
|
137
|
+
/** The persisted conversation (real user/assistant turns only, no host nudges). */
|
|
138
|
+
getMessages() {
|
|
139
|
+
return this.messages
|
|
140
|
+
.filter((message) => message.role === 'system' || message.role === 'user' || message.role === 'assistant')
|
|
141
|
+
// Drop assistant turns that only carry tool calls (empty text).
|
|
142
|
+
.filter((message) => message.role !== 'assistant' || (message.content ?? '').trim() !== '')
|
|
143
|
+
.map((message) => ({ role: message.role, content: message.content }));
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Deliver a message into the running turn (pi-style steering). It is queued
|
|
147
|
+
* and injected before the next model call; when a model call is in flight it
|
|
148
|
+
* is aborted so the steer is seen immediately.
|
|
149
|
+
*/
|
|
150
|
+
steer(text) {
|
|
151
|
+
const trimmed = text.trim();
|
|
152
|
+
if (!trimmed)
|
|
153
|
+
return;
|
|
154
|
+
this.pendingSteers.push(trimmed);
|
|
155
|
+
this.steerAbort?.abort();
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Compact the agent's own conversation. `force` ignores the threshold (used by
|
|
159
|
+
* the manual `compact.` command); the loop hook checks the threshold itself.
|
|
160
|
+
*/
|
|
161
|
+
async compactMemory(force = false, signal, customInstructions) {
|
|
162
|
+
const settings = this.options.compaction?.settings;
|
|
163
|
+
if (!settings?.enabled) {
|
|
164
|
+
return { applied: false, reason: 'disabled', messages: this.getMessages(), tokensBefore: 0, tokensAfter: 0 };
|
|
165
|
+
}
|
|
166
|
+
const result = await compactMemory({
|
|
167
|
+
messages: toMemoryMessages(this.messages),
|
|
168
|
+
backend: this.options.llmBackend,
|
|
169
|
+
model: this.options.model,
|
|
170
|
+
contextWindow: this.options.contextWindow,
|
|
171
|
+
settings,
|
|
172
|
+
signal,
|
|
173
|
+
customInstructions,
|
|
174
|
+
force,
|
|
175
|
+
});
|
|
176
|
+
if (result.applied) {
|
|
177
|
+
this.messages = fromMemoryMessages(result.messages);
|
|
178
|
+
}
|
|
179
|
+
return result;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Ask the human whether to continue after the model-call budget is exhausted.
|
|
183
|
+
* Returns false when there is no interactive channel (autonomous runs keep the
|
|
184
|
+
* current abort behaviour).
|
|
185
|
+
*/
|
|
186
|
+
async askBudgetExtension(used) {
|
|
187
|
+
const ask = this.options.askInput;
|
|
188
|
+
if (!ask) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
const perChunk = this.options.maxModelCalls ?? 0;
|
|
192
|
+
const answer = await ask(`The authoring turn has reached its model-call budget (${used} calls).\n`
|
|
193
|
+
+ `Continue for another ${perChunk} calls? [yes/no]\n`
|
|
194
|
+
+ 'change the limit: repl.maxModelCalls in .deepclause/config.json '
|
|
195
|
+
+ '("repl": { "maxModelCalls": N }), or pass --max-model-calls N; 0 means unlimited', ['yes', 'no']);
|
|
196
|
+
return /^(y|yes)$/i.test((answer ?? '').trim());
|
|
197
|
+
}
|
|
198
|
+
async *run(request, options = {}) {
|
|
199
|
+
const { llmBackend, tools } = this.options;
|
|
200
|
+
const streaming = this.options.streaming ?? true;
|
|
201
|
+
const maxModelCalls = this.options.maxModelCalls ?? 0;
|
|
202
|
+
const settings = this.options.compaction?.settings;
|
|
203
|
+
const autoCompact = this.options.compaction?.auto ?? false;
|
|
204
|
+
const systemPrompt = await buildAgentSystemPrompt({
|
|
205
|
+
workspacePath: this.options.workspacePath,
|
|
206
|
+
currentModel: this.options.currentModel,
|
|
207
|
+
modelCatalog: this.options.modelCatalog,
|
|
208
|
+
});
|
|
209
|
+
this.messages.push({ role: 'user', content: request });
|
|
210
|
+
const backendTools = [...tools].map(([name, tool]) => ({
|
|
211
|
+
name,
|
|
212
|
+
description: tool.description,
|
|
213
|
+
parameters: tool.parameters,
|
|
214
|
+
}));
|
|
215
|
+
let calls = 0;
|
|
216
|
+
// The model-call budget for this turn; `0` means unlimited. It grows by
|
|
217
|
+
// `maxModelCalls` each time the human agrees to continue.
|
|
218
|
+
let budget = maxModelCalls;
|
|
219
|
+
let finished = false;
|
|
220
|
+
let lastText = '';
|
|
221
|
+
let lastInputTokens;
|
|
222
|
+
const maxIterations = 1000;
|
|
223
|
+
while (!finished && calls < maxIterations) {
|
|
224
|
+
if (options.signal?.aborted)
|
|
225
|
+
break;
|
|
226
|
+
if (budget > 0 && calls >= budget) {
|
|
227
|
+
const extend = await this.askBudgetExtension(budget);
|
|
228
|
+
if (!extend) {
|
|
229
|
+
yield {
|
|
230
|
+
type: 'error',
|
|
231
|
+
content: `authoring turn stopped: model-call budget exhausted (${budget} calls). `
|
|
232
|
+
+ 'Raise repl.maxModelCalls in .deepclause/config.json (or pass --max-model-calls); 0 = unlimited.',
|
|
233
|
+
};
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
budget += maxModelCalls;
|
|
237
|
+
}
|
|
238
|
+
calls += 1;
|
|
239
|
+
// Inject any steering messages submitted during the previous iteration.
|
|
240
|
+
while (this.pendingSteers.length > 0) {
|
|
241
|
+
this.messages.push({ role: 'user', content: this.pendingSteers.shift() });
|
|
242
|
+
}
|
|
243
|
+
if (autoCompact && settings?.enabled && this.options.contextWindow) {
|
|
244
|
+
if (shouldCompact(lastInputTokens ?? 0, this.options.contextWindow, settings)) {
|
|
245
|
+
const result = await this.compactMemory(true, options.signal);
|
|
246
|
+
if (result.applied) {
|
|
247
|
+
yield {
|
|
248
|
+
type: 'memory_compaction',
|
|
249
|
+
content: `compact agent.before_model_call applied ${result.tokensBefore} -> ${result.tokensAfter} tokens`,
|
|
250
|
+
compactionScope: 'session',
|
|
251
|
+
compactionTrigger: 'before_model_call',
|
|
252
|
+
compactionAction: 'applied',
|
|
253
|
+
beforeTokens: result.tokensBefore,
|
|
254
|
+
afterTokens: result.tokensAfter,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
yield { type: 'model_call', modelCallState: 'started', modelId: this.options.model };
|
|
260
|
+
// Stream deltas live via a queue while the (single) backend call runs.
|
|
261
|
+
const streamQueue = [];
|
|
262
|
+
let wake = null;
|
|
263
|
+
let settled = false;
|
|
264
|
+
let response;
|
|
265
|
+
let failure;
|
|
266
|
+
const push = (event) => {
|
|
267
|
+
streamQueue.push(event);
|
|
268
|
+
if (wake) {
|
|
269
|
+
const resolve = wake;
|
|
270
|
+
wake = null;
|
|
271
|
+
resolve();
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
const requestMessages = [
|
|
275
|
+
{ role: 'system', content: systemPrompt },
|
|
276
|
+
...this.messages,
|
|
277
|
+
];
|
|
278
|
+
this.steerAbort = new AbortController();
|
|
279
|
+
const callSignal = options.signal
|
|
280
|
+
? AbortSignal.any([options.signal, this.steerAbort.signal])
|
|
281
|
+
: this.steerAbort.signal;
|
|
282
|
+
const completion = llmBackend.complete({
|
|
283
|
+
messages: requestMessages,
|
|
284
|
+
tools: backendTools,
|
|
285
|
+
temperature: this.options.temperature,
|
|
286
|
+
maxTokens: this.options.maxTokens,
|
|
287
|
+
signal: callSignal,
|
|
288
|
+
onText: streaming ? (chunk) => push({ type: 'stream', content: chunk }) : undefined,
|
|
289
|
+
onReasoning: streaming ? (chunk) => push({ type: 'reasoning', content: chunk }) : undefined,
|
|
290
|
+
}).then((value) => { response = value; settled = true; if (wake) {
|
|
291
|
+
const r = wake;
|
|
292
|
+
wake = null;
|
|
293
|
+
r();
|
|
294
|
+
} }, (error) => { failure = error; settled = true; if (wake) {
|
|
295
|
+
const r = wake;
|
|
296
|
+
wake = null;
|
|
297
|
+
r();
|
|
298
|
+
} });
|
|
299
|
+
while (true) {
|
|
300
|
+
while (streamQueue.length > 0)
|
|
301
|
+
yield streamQueue.shift();
|
|
302
|
+
if (settled)
|
|
303
|
+
break;
|
|
304
|
+
await new Promise((resolve) => { wake = resolve; });
|
|
305
|
+
}
|
|
306
|
+
while (streamQueue.length > 0)
|
|
307
|
+
yield streamQueue.shift();
|
|
308
|
+
await completion;
|
|
309
|
+
if (failure || !response) {
|
|
310
|
+
const steered = Boolean(this.steerAbort?.signal.aborted) && !options.signal?.aborted;
|
|
311
|
+
this.steerAbort = undefined;
|
|
312
|
+
if (steered && this.pendingSteers.length > 0) {
|
|
313
|
+
// A steer interrupted this call; re-run with the queued message.
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
yield { type: 'model_call', modelCallState: 'failed', modelId: this.options.model };
|
|
317
|
+
yield { type: 'error', content: failure instanceof Error ? failure.message : String(failure) };
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
this.steerAbort = undefined;
|
|
321
|
+
yield { type: 'model_call', modelCallState: 'completed', modelId: this.options.model };
|
|
322
|
+
if (response.usage) {
|
|
323
|
+
lastInputTokens = (response.usage.inputTokens ?? 0)
|
|
324
|
+
+ (response.usage.cacheReadTokens ?? 0)
|
|
325
|
+
+ (response.usage.cacheWriteTokens ?? 0);
|
|
326
|
+
yield { type: 'usage', usage: response.usage, usageSource: 'llm', usageModel: this.options.model };
|
|
327
|
+
}
|
|
328
|
+
if (response.text) {
|
|
329
|
+
lastText = response.text;
|
|
330
|
+
}
|
|
331
|
+
const toolCalls = response.toolCalls ?? [];
|
|
332
|
+
this.messages.push({
|
|
333
|
+
role: 'assistant',
|
|
334
|
+
content: response.text,
|
|
335
|
+
toolCalls,
|
|
336
|
+
providerData: response.providerData,
|
|
337
|
+
});
|
|
338
|
+
if (toolCalls.length === 0) {
|
|
339
|
+
// No tool call: the model answered directly or stopped; end the turn.
|
|
340
|
+
finished = true;
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
for (const call of toolCalls) {
|
|
344
|
+
yield { type: 'tool_call', toolName: call.name, toolArgs: call.arguments, toolState: 'starting' };
|
|
345
|
+
// `finish` is not offered to the model any more; a turn ends when the
|
|
346
|
+
// model replies without tool calls. Tolerate a stray `finish` (older
|
|
347
|
+
// transcripts, tests) as an explicit stop.
|
|
348
|
+
if (call.name === 'finish') {
|
|
349
|
+
finished = true;
|
|
350
|
+
yield { type: 'tool_call', toolName: 'finish', toolArgs: call.arguments, toolState: 'completed', toolSummary: 'done' };
|
|
351
|
+
this.messages.push({ role: 'tool', content: '{"finished":true}', toolCallId: call.id, toolName: 'finish' });
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
354
|
+
const tool = tools.get(call.name);
|
|
355
|
+
if (!tool) {
|
|
356
|
+
const message = `Tool not found: ${call.name}`;
|
|
357
|
+
yield { type: 'tool_call', toolName: call.name, toolState: 'failed', toolError: message };
|
|
358
|
+
this.messages.push({ role: 'tool', content: JSON.stringify({ error: message }), toolCallId: call.id, toolName: call.name });
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
let result;
|
|
362
|
+
let toolFailure;
|
|
363
|
+
let toolSettled = false;
|
|
364
|
+
const toolEvents = [];
|
|
365
|
+
let toolWake = null;
|
|
366
|
+
const wakeTool = () => {
|
|
367
|
+
if (toolWake) {
|
|
368
|
+
const resolve = toolWake;
|
|
369
|
+
toolWake = null;
|
|
370
|
+
resolve();
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
const toolStartedAt = Date.now();
|
|
374
|
+
const toolPromise = tool.execute(call.arguments, {
|
|
375
|
+
signal: options.signal,
|
|
376
|
+
onEvent: (event) => { toolEvents.push(event); wakeTool(); },
|
|
377
|
+
}).then((value) => { result = value; toolSettled = true; wakeTool(); }, (error) => { toolFailure = error; toolSettled = true; wakeTool(); });
|
|
378
|
+
// Stream events the tool produces (e.g. an `execute` child frame) live.
|
|
379
|
+
while (true) {
|
|
380
|
+
while (toolEvents.length > 0)
|
|
381
|
+
yield toolEvents.shift();
|
|
382
|
+
if (toolSettled)
|
|
383
|
+
break;
|
|
384
|
+
await new Promise((resolve) => { toolWake = resolve; });
|
|
385
|
+
}
|
|
386
|
+
while (toolEvents.length > 0)
|
|
387
|
+
yield toolEvents.shift();
|
|
388
|
+
await toolPromise;
|
|
389
|
+
const failureMessage = toolFailure
|
|
390
|
+
? (toolFailure instanceof Error ? toolFailure.message : String(toolFailure))
|
|
391
|
+
: toolResultFailure(result);
|
|
392
|
+
const text = stringifyToolResult(failureMessage ? { error: failureMessage } : result);
|
|
393
|
+
if (failureMessage) {
|
|
394
|
+
yield { type: 'tool_call', toolName: call.name, toolArgs: call.arguments, toolState: 'failed', toolError: text.slice(0, 200), toolDurationMs: Date.now() - toolStartedAt };
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
yield { type: 'tool_call', toolName: call.name, toolArgs: call.arguments, toolState: 'completed', toolSummary: text.slice(0, 200), toolDurationMs: Date.now() - toolStartedAt };
|
|
398
|
+
}
|
|
399
|
+
this.messages.push({ role: 'tool', content: text, toolCallId: call.id, toolName: call.name });
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
if (!finished && !options.signal?.aborted) {
|
|
403
|
+
yield { type: 'log', content: 'authoring agent reached its iteration limit without finishing' };
|
|
404
|
+
}
|
|
405
|
+
if (!streaming && lastText) {
|
|
406
|
+
yield { type: 'output', content: lastText };
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/repl/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAU1D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAqD,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAAE,uBAAuB,EAA0B,MAAM,qBAAqB,CAAC;AAgCtF,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,KAAkC;IAC9D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAsC,CAAC;QAC3F,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC;aAC9F,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,UAIzC,EAAE;IACJ,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,oBAAoB,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,6CAA6C,CAAC;IACzD,CAAC;IAED,kFAAkF;IAClF,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAC3C,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAChE,MAAM,IAAI;YACR,EAAE;YACF,6DAA6D;YAC7D,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;YAChE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;YAChH,mFAAmF;YACnF,uGAAuG;SACxG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACtC,CAAC;IAED,sEAAsE;IACtE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAChE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,yCAAyC,OAAO,CAAC,OAAO,IAAI,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,SAAS,gBAAgB,CAAC,QAA6B;IACrD,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;iBACpC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;iBAChE,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,kBAAkB,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACnH,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,OAAO,CAAC,QAAQ,IAAI,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAyB;IACnD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAe;IAC1C,IAAI,IAAY,CAAC;IACjB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,GAAG,MAAM,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,GAAG,qBAAqB;QACxC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,iBAAiB;QAC1D,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,mFAAmF;AACnF,SAAS,iBAAiB,CAAC,MAAe;IACxC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IACpF,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IAC1E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACd,KAAK,CAA8B;IAC3B,OAAO,CAAsB;IACtC,QAAQ,CAAsB;IACtC,2EAA2E;IAC1D,aAAa,GAAa,EAAE,CAAC;IAC9C,8EAA8E;IACtE,UAAU,CAAmB;IAErC,YAAY,OAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,aAAa;YACnC,CAAC,CAAC,OAAO,CAAC,aAAa;gBACnB,qEAAqE;iBACpE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,kDAAkD,CAAC;iBAClG,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAED,mFAAmF;IACnF,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ;aACjB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC;YAC1G,gEAAgE;aAC/D,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;aAC1F,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAA6B,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACnG,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAY;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,EAAE,MAAoB,EAAE,kBAA2B;QAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QAC/G,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACzC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;YAChC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;YACzC,QAAQ;YACR,MAAM;YACN,kBAAkB;YAClB,KAAK;SACN,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,kBAAkB,CAAC,IAAY;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,GAAG,CACtB,yDAAyD,IAAI,YAAY;cACvE,wBAAwB,QAAQ,oBAAoB;cACpD,kEAAkE;cAClE,kFAAkF,EACpF,CAAC,KAAK,EAAE,IAAI,CAAC,CACd,CAAC;QACF,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,CAAC,GAAG,CAAC,OAAe,EAAE,UAAkC,EAAE;QAC9D,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,IAAI,KAAK,CAAC;QAE3D,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC;YAChD,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;YACzC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;SACxC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAEvD,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACrD,IAAI;YACJ,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAgD;SAClE,CAAC,CAAC,CAAC;QAEJ,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,wEAAwE;QACxE,0DAA0D;QAC1D,IAAI,MAAM,GAAG,aAAa,CAAC;QAC3B,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,eAAmC,CAAC;QACxC,MAAM,aAAa,GAAG,IAAI,CAAC;QAE3B,OAAO,CAAC,QAAQ,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;gBAAE,MAAM;YACnC,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBACrD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM;wBACJ,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,wDAAwD,MAAM,WAAW;8BAC9E,iGAAiG;qBACtG,CAAC;oBACF,MAAM;gBACR,CAAC;gBACD,MAAM,IAAI,aAAa,CAAC;YAC1B,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;YAEX,wEAAwE;YACxE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAG,EAAE,CAAC,CAAC;YAC7E,CAAC;YAED,IAAI,WAAW,IAAI,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;gBACnE,IAAI,aAAa,CAAC,eAAe,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC;oBAC9E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC9D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;wBACnB,MAAM;4BACJ,IAAI,EAAE,mBAAmB;4BACzB,OAAO,EAAE,2CAA2C,MAAM,CAAC,YAAY,OAAO,MAAM,CAAC,WAAW,SAAS;4BACzG,eAAe,EAAE,SAAS;4BAC1B,iBAAiB,EAAE,mBAAmB;4BACtC,gBAAgB,EAAE,SAAS;4BAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;4BACjC,WAAW,EAAE,MAAM,CAAC,WAAW;yBAChC,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAErF,uEAAuE;YACvE,MAAM,WAAW,GAAe,EAAE,CAAC;YACnC,IAAI,IAAI,GAAwB,IAAI,CAAC;YACrC,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,QAAwC,CAAC;YAC7C,IAAI,OAAgB,CAAC;YACrB,MAAM,IAAI,GAAG,CAAC,KAAe,EAAQ,EAAE;gBACrC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,OAAO,GAAG,IAAI,CAAC;oBACrB,IAAI,GAAG,IAAI,CAAC;oBACZ,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC;YACF,MAAM,eAAe,GAAwB;gBAC3C,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;gBACzC,GAAG,IAAI,CAAC,QAAQ;aACjB,CAAC;YAEF,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;gBAC/B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC3D,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAE3B,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC;gBACrC,QAAQ,EAAE,eAAe;gBACzB,KAAK,EAAE,YAAY;gBACnB,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;gBACrC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gBACjC,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;gBACnF,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;aAC5F,CAAC,CAAC,IAAI,CACL,CAAC,KAAK,EAAE,EAAE,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBAAC,MAAM,CAAC,GAAG,IAAI,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC;gBAAC,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,CAAC,EAChG,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBAAC,MAAM,CAAC,GAAG,IAAI,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC;gBAAC,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,CAAC,CAChG,CAAC;YAEF,OAAO,IAAI,EAAE,CAAC;gBACZ,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM,WAAW,CAAC,KAAK,EAAG,CAAC;gBAC1D,IAAI,OAAO;oBAAE,MAAM;gBACnB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,WAAW,CAAC,KAAK,EAAG,CAAC;YAC1D,MAAM,UAAU,CAAC;YAEjB,IAAI,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;gBACrF,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC5B,IAAI,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7C,iEAAiE;oBACjE,SAAS;gBACX,CAAC;gBACD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACpF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/F,OAAO;YACT,CAAC;YACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAEvF,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,eAAe,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;sBAC/C,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC;sBACrC,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;gBAC3C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrG,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAClB,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,CAAC;YAED,MAAM,SAAS,GAAyB,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;YACjE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,QAAQ,CAAC,IAAI;gBACtB,SAAS;gBACT,YAAY,EAAE,QAAQ,CAAC,YAAY;aACpC,CAAC,CAAC;YAEH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,sEAAsE;gBACtE,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM;YACR,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;gBAClG,sEAAsE;gBACtE,qEAAqE;gBACrE,2CAA2C;gBAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3B,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;oBACvH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC5G,MAAM;gBACR,CAAC;gBACD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,OAAO,GAAG,mBAAmB,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC/C,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;oBAC1F,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC5H,SAAS;gBACX,CAAC;gBACD,IAAI,MAAe,CAAC;gBACpB,IAAI,WAAoB,CAAC;gBACzB,IAAI,WAAW,GAAG,KAAK,CAAC;gBACxB,MAAM,UAAU,GAAe,EAAE,CAAC;gBAClC,IAAI,QAAQ,GAAwB,IAAI,CAAC;gBACzC,MAAM,QAAQ,GAAG,GAAS,EAAE;oBAC1B,IAAI,QAAQ,EAAE,CAAC;wBAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;wBAAC,QAAQ,GAAG,IAAI,CAAC;wBAAC,OAAO,EAAE,CAAC;oBAAC,CAAC;gBACzE,CAAC,CAAC;gBACF,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACjC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;oBAC/C,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;iBAC5D,CAAC,CAAC,IAAI,CACL,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAC9D,CAAC,KAAK,EAAE,EAAE,GAAG,WAAW,GAAG,KAAK,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CACpE,CAAC;gBACF,wEAAwE;gBACxE,OAAO,IAAI,EAAE,CAAC;oBACZ,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC;wBAAE,MAAM,UAAU,CAAC,KAAK,EAAG,CAAC;oBACxD,IAAI,WAAW;wBAAE,MAAM;oBACvB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,CAAC;gBACD,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM,UAAU,CAAC,KAAK,EAAG,CAAC;gBACxD,MAAM,WAAW,CAAC;gBAClB,MAAM,cAAc,GAAG,WAAW;oBAChC,CAAC,CAAC,CAAC,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBAC5E,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC9B,MAAM,IAAI,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACtF,IAAI,cAAc,EAAE,CAAC;oBACnB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;gBAC7K,CAAC;qBAAM,CAAC;oBACN,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;gBAClL,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAChG,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC1C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,+DAA+D,EAAE,CAAC;QAClG,CAAC;QACD,IAAI,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -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"}
|