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.
- package/LICENSE +21 -0
- package/README.md +418 -914
- package/dist/agent.d.ts +19 -2
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +221 -4
- package/dist/agent.js.map +1 -1
- package/dist/cli/config.d.ts +323 -176
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +146 -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 +61 -425
- 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 +191 -0
- package/dist/cli/repl.d.ts.map +1 -0
- package/dist/cli/repl.js +1232 -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 +196 -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 +38 -0
- package/dist/cli/visualize.d.ts.map +1 -0
- package/dist/cli/visualize.js +125 -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 +29 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -2
- package/dist/index.js.map +1 -1
- package/dist/judge/index.d.ts +9 -0
- package/dist/judge/index.d.ts.map +1 -0
- package/dist/judge/index.js +6 -0
- package/dist/judge/index.js.map +1 -0
- package/dist/judge/jev.d.ts +21 -0
- package/dist/judge/jev.d.ts.map +1 -0
- package/dist/judge/jev.js +218 -0
- package/dist/judge/jev.js.map +1 -0
- package/dist/judge/llm.d.ts +23 -0
- package/dist/judge/llm.d.ts.map +1 -0
- package/dist/judge/llm.js +120 -0
- package/dist/judge/llm.js.map +1 -0
- package/dist/judge/marshal.d.ts +26 -0
- package/dist/judge/marshal.d.ts.map +1 -0
- package/dist/judge/marshal.js +266 -0
- package/dist/judge/marshal.js.map +1 -0
- package/dist/judge/mock.d.ts +28 -0
- package/dist/judge/mock.d.ts.map +1 -0
- package/dist/judge/mock.js +98 -0
- package/dist/judge/mock.js.map +1 -0
- package/dist/judge/types.d.ts +95 -0
- package/dist/judge/types.d.ts.map +1 -0
- package/dist/judge/types.js +23 -0
- package/dist/judge/types.js.map +1 -0
- package/dist/prolog/bridge.d.ts +5 -1
- package/dist/prolog/bridge.d.ts.map +1 -1
- package/dist/prolog/bridge.js +29 -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 +2522 -118
- package/dist/repl/agent.d.ts +72 -0
- package/dist/repl/agent.d.ts.map +1 -0
- package/dist/repl/agent.js +366 -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 +290 -0
- package/dist/repl/backend.d.ts.map +1 -0
- package/dist/repl/backend.js +370 -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 +74 -0
- package/dist/repl/harness-tools.d.ts.map +1 -0
- package/dist/repl/harness-tools.js +121 -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/index.d.ts +120 -0
- package/dist/repl/index.d.ts.map +1 -0
- package/dist/repl/index.js +107 -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/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 +160 -0
- package/dist/repl/render.d.ts.map +1 -0
- package/dist/repl/render.js +715 -0
- package/dist/repl/render.js.map +1 -0
- package/dist/repl/session.d.ts +356 -0
- package/dist/repl/session.d.ts.map +1 -0
- package/dist/repl/session.js +1275 -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 +39 -0
- package/dist/repl/tui/transcript.d.ts.map +1 -0
- package/dist/repl/tui/transcript.js +123 -0
- package/dist/repl/tui/transcript.js.map +1 -0
- package/dist/runner.d.ts +145 -13
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +600 -282
- package/dist/runner.js.map +1 -1
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +56 -32
- package/dist/sdk.js.map +1 -1
- package/dist/system/assets/docs/AGENT_PROMPT.md +1373 -0
- package/dist/system/assets/docs/DML_AUTHORING.md +195 -0
- package/dist/system/assets/docs/DML_REFERENCE.md +393 -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 +149 -118
- 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/index.d.ts +52 -0
- package/dist/visualize/index.d.ts.map +1 -0
- package/dist/visualize/index.js +189 -0
- package/dist/visualize/index.js.map +1 -0
- package/package.json +17 -15
- package/src/prolog-src/deepclause_analysis.pl +10 -2
- package/src/prolog-src/deepclause_mi.pl +2522 -118
- 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/compactors/default-memory-compactor.dml +0 -6
- 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,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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"}
|