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,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend resolution for the REPL (M5).
|
|
3
|
+
*
|
|
4
|
+
* `env` uses the SDK's provider/API-key backend (unchanged). `pi` reuses pi's
|
|
5
|
+
* own model registry and credential store so the REPL runs against the model
|
|
6
|
+
* configured in pi, without asking for API keys or writing provider env vars.
|
|
7
|
+
*
|
|
8
|
+
* The pi packages are optional peers and loaded with a dynamic import only when
|
|
9
|
+
* the pi backend is selected.
|
|
10
|
+
*/
|
|
11
|
+
import type { LLMBackend } from '../types.js';
|
|
12
|
+
export type BackendKind = 'env' | 'pi';
|
|
13
|
+
export interface PiBackendConfig {
|
|
14
|
+
kind?: BackendKind;
|
|
15
|
+
agentDir?: string;
|
|
16
|
+
modelsPath?: string | null;
|
|
17
|
+
authPath?: string | null;
|
|
18
|
+
model?: string;
|
|
19
|
+
/** Requested thinking level for reasoning models (see `ThinkingLevel`). */
|
|
20
|
+
thinkingLevel?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ResolvedBackendPaths {
|
|
23
|
+
agentDir: string;
|
|
24
|
+
modelsPath: string;
|
|
25
|
+
authPath: string;
|
|
26
|
+
model?: string;
|
|
27
|
+
}
|
|
28
|
+
/** Minimal structural view of pi's ModelRegistry used by the adapter. */
|
|
29
|
+
export interface PiModelLike {
|
|
30
|
+
provider: string;
|
|
31
|
+
id: string;
|
|
32
|
+
api?: string;
|
|
33
|
+
/** Whether the model accepts a thinking/reasoning level. */
|
|
34
|
+
reasoning?: boolean;
|
|
35
|
+
/** Model context window in tokens. */
|
|
36
|
+
contextWindow?: number;
|
|
37
|
+
/** Maximum output tokens. */
|
|
38
|
+
maxTokens?: number;
|
|
39
|
+
/** Maps pi thinking levels to provider values; `null` marks a level unsupported. */
|
|
40
|
+
thinkingLevelMap?: Partial<Record<ThinkingLevel, string | null>>;
|
|
41
|
+
}
|
|
42
|
+
/** pi's thinking levels, in ascending effort order. */
|
|
43
|
+
export type ThinkingLevel = 'off' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max';
|
|
44
|
+
export declare const THINKING_LEVELS: readonly ThinkingLevel[];
|
|
45
|
+
/** Levels a model accepts: reasoning models expose all but explicitly-unsupported ones. */
|
|
46
|
+
export declare function supportedThinkingLevels(model: PiModelLike): ThinkingLevel[];
|
|
47
|
+
/**
|
|
48
|
+
* Validate a requested thinking level against the model. Returns the level to
|
|
49
|
+
* pass through (or `undefined` for the provider default) plus a warning when a
|
|
50
|
+
* request had to be dropped.
|
|
51
|
+
*/
|
|
52
|
+
export declare function resolveThinkingLevel(model: PiModelLike, requested?: string): {
|
|
53
|
+
level?: ThinkingLevel;
|
|
54
|
+
supported: ThinkingLevel[];
|
|
55
|
+
warning?: string;
|
|
56
|
+
};
|
|
57
|
+
export interface PiCompletionRequest {
|
|
58
|
+
systemPrompt?: string;
|
|
59
|
+
messages: unknown[];
|
|
60
|
+
tools?: unknown[];
|
|
61
|
+
}
|
|
62
|
+
export interface PiCompletionResult {
|
|
63
|
+
content: Array<{
|
|
64
|
+
type: 'text';
|
|
65
|
+
text: string;
|
|
66
|
+
} | {
|
|
67
|
+
type: 'toolCall';
|
|
68
|
+
id: string;
|
|
69
|
+
name: string;
|
|
70
|
+
arguments: Record<string, unknown>;
|
|
71
|
+
}>;
|
|
72
|
+
usage: {
|
|
73
|
+
input: number;
|
|
74
|
+
output: number;
|
|
75
|
+
totalTokens: number;
|
|
76
|
+
cacheRead?: number;
|
|
77
|
+
cacheWrite?: number;
|
|
78
|
+
reasoning?: number;
|
|
79
|
+
};
|
|
80
|
+
stopReason: 'stop' | 'toolUse' | 'length' | 'error' | 'aborted';
|
|
81
|
+
errorMessage?: string;
|
|
82
|
+
}
|
|
83
|
+
export interface PiStreamEventLike {
|
|
84
|
+
type: string;
|
|
85
|
+
delta?: string;
|
|
86
|
+
}
|
|
87
|
+
export interface PiStreamLike extends AsyncIterable<PiStreamEventLike> {
|
|
88
|
+
result(): Promise<PiCompletionResult>;
|
|
89
|
+
}
|
|
90
|
+
export interface PiRegistryLike {
|
|
91
|
+
getAvailable(): PiModelLike[];
|
|
92
|
+
find?(provider: string, modelId: string): PiModelLike | undefined;
|
|
93
|
+
hasConfiguredAuth(model: PiModelLike): boolean;
|
|
94
|
+
complete(model: PiModelLike, context: PiCompletionRequest, options: unknown): Promise<PiCompletionResult>;
|
|
95
|
+
/** Streaming API; when present, `complete` forwards text/thinking deltas. */
|
|
96
|
+
streamSimple?(model: PiModelLike, context: PiCompletionRequest, options: unknown): PiStreamLike;
|
|
97
|
+
}
|
|
98
|
+
/** Resolve pi's agent dir, models.json, and auth.json paths. */
|
|
99
|
+
export declare function resolvePiPaths(config: PiBackendConfig, defaults: {
|
|
100
|
+
agentDir: string;
|
|
101
|
+
}): ResolvedBackendPaths;
|
|
102
|
+
/** Select the pi model to use, honoring an explicit provider/model request. */
|
|
103
|
+
export declare function selectPiModel(registry: PiRegistryLike, requested?: string): PiModelLike;
|
|
104
|
+
/**
|
|
105
|
+
* Wrap a pi registry + model as an SDK `LLMBackend`. Reused by the extension
|
|
106
|
+
* embedding, which passes its live registry.
|
|
107
|
+
*
|
|
108
|
+
* `thinkingLevel` is forwarded to the provider only for reasoning models and
|
|
109
|
+
* non-`off` levels, so provider defaults are preserved for every other model.
|
|
110
|
+
*/
|
|
111
|
+
export declare function createPiAdapter(registry: PiRegistryLike, model: PiModelLike, maxTokens?: number, thinkingLevel?: string): {
|
|
112
|
+
backend: LLMBackend;
|
|
113
|
+
modelId: string;
|
|
114
|
+
provider: string;
|
|
115
|
+
contextWindow?: number;
|
|
116
|
+
maxTokens: number;
|
|
117
|
+
reasoning: boolean;
|
|
118
|
+
thinkingLevel?: ThinkingLevel;
|
|
119
|
+
supportedThinkingLevels: ThinkingLevel[];
|
|
120
|
+
warning?: string;
|
|
121
|
+
};
|
|
122
|
+
export interface CreatePiBackendOptions extends PiBackendConfig {
|
|
123
|
+
maxTokens?: number;
|
|
124
|
+
/** Injected registry (used by tests and by a pi embedding). */
|
|
125
|
+
modelRegistry?: PiRegistryLike;
|
|
126
|
+
}
|
|
127
|
+
/** Structural view of pi's runtime used for setup/catalog/auth operations. */
|
|
128
|
+
export interface PiRuntimeLike {
|
|
129
|
+
getProviders(): Array<{
|
|
130
|
+
id: string;
|
|
131
|
+
name?: string;
|
|
132
|
+
auth?: {
|
|
133
|
+
apiKey?: unknown;
|
|
134
|
+
oauth?: {
|
|
135
|
+
isSubscription?: boolean;
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
}>;
|
|
139
|
+
getProvider(providerId: string): {
|
|
140
|
+
id: string;
|
|
141
|
+
name?: string;
|
|
142
|
+
auth?: {
|
|
143
|
+
apiKey?: unknown;
|
|
144
|
+
oauth?: {
|
|
145
|
+
isSubscription?: boolean;
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
} | undefined;
|
|
149
|
+
getModels(providerId?: string): PiModelLike[];
|
|
150
|
+
hasConfiguredAuth(providerId: string): boolean;
|
|
151
|
+
getProviderAuthStatus(providerId: string): {
|
|
152
|
+
configured: boolean;
|
|
153
|
+
label?: string;
|
|
154
|
+
source?: string;
|
|
155
|
+
};
|
|
156
|
+
isUsingOAuth(providerId: string): boolean;
|
|
157
|
+
listCredentials(options?: unknown): Promise<Array<{
|
|
158
|
+
providerId: string;
|
|
159
|
+
type: string;
|
|
160
|
+
}>>;
|
|
161
|
+
login(providerId: string, type: string, interaction: unknown, options?: unknown): Promise<unknown>;
|
|
162
|
+
logout(providerId: string, options?: unknown): Promise<void>;
|
|
163
|
+
}
|
|
164
|
+
export interface PiProviderInfo {
|
|
165
|
+
id: string;
|
|
166
|
+
name: string;
|
|
167
|
+
apiKey: boolean;
|
|
168
|
+
oauth: boolean;
|
|
169
|
+
configured: boolean;
|
|
170
|
+
source?: string;
|
|
171
|
+
label?: string;
|
|
172
|
+
}
|
|
173
|
+
export interface PiModelInfo {
|
|
174
|
+
provider: string;
|
|
175
|
+
id: string;
|
|
176
|
+
name: string;
|
|
177
|
+
reasoning: boolean;
|
|
178
|
+
contextWindow?: number;
|
|
179
|
+
maxTokens?: number;
|
|
180
|
+
/** Thinking levels the model accepts (empty/undefined for non-reasoning). */
|
|
181
|
+
supportedThinkingLevels?: ThinkingLevel[];
|
|
182
|
+
}
|
|
183
|
+
/** Build the catalog `PiModelInfo` (with reasoning levels) from a raw model. */
|
|
184
|
+
export declare function toPiModelInfo(model: PiModelLike & {
|
|
185
|
+
name?: string;
|
|
186
|
+
}): PiModelInfo;
|
|
187
|
+
export interface PiAuthPromptLike {
|
|
188
|
+
signal?: AbortSignal;
|
|
189
|
+
type: 'text' | 'secret' | 'select' | 'manual_code';
|
|
190
|
+
message: string;
|
|
191
|
+
placeholder?: string;
|
|
192
|
+
options?: ReadonlyArray<{
|
|
193
|
+
id: string;
|
|
194
|
+
label: string;
|
|
195
|
+
description?: string;
|
|
196
|
+
}>;
|
|
197
|
+
}
|
|
198
|
+
export interface PiAuthEventLike {
|
|
199
|
+
type: 'info' | 'auth_url' | 'device_code' | 'progress';
|
|
200
|
+
message?: string;
|
|
201
|
+
url?: string;
|
|
202
|
+
instructions?: string;
|
|
203
|
+
userCode?: string;
|
|
204
|
+
verificationUri?: string;
|
|
205
|
+
links?: ReadonlyArray<{
|
|
206
|
+
url: string;
|
|
207
|
+
label?: string;
|
|
208
|
+
}>;
|
|
209
|
+
}
|
|
210
|
+
export interface PiAuthInteractionLike {
|
|
211
|
+
signal?: AbortSignal;
|
|
212
|
+
prompt(prompt: PiAuthPromptLike): Promise<string>;
|
|
213
|
+
notify(event: PiAuthEventLike): void;
|
|
214
|
+
}
|
|
215
|
+
/** List providers from a pi runtime with auth capability/status. */
|
|
216
|
+
export declare function listPiProviders(runtime: PiRuntimeLike): PiProviderInfo[];
|
|
217
|
+
/** List chat models from a pi runtime, optionally filtered by provider. */
|
|
218
|
+
export declare function listPiModels(runtime: PiRuntimeLike, providerId?: string): PiModelInfo[];
|
|
219
|
+
/** A pi runtime handle: the model registry plus catalog/auth operations. */
|
|
220
|
+
export interface PiRuntimeHandle {
|
|
221
|
+
registry: PiRegistryLike;
|
|
222
|
+
runtime: PiRuntimeLike;
|
|
223
|
+
listProviders(): PiProviderInfo[];
|
|
224
|
+
listModels(providerId?: string): PiModelInfo[];
|
|
225
|
+
hasAuth(providerId: string): boolean;
|
|
226
|
+
isUsingOAuth(providerId: string): boolean;
|
|
227
|
+
listCredentials(): Promise<Array<{
|
|
228
|
+
providerId: string;
|
|
229
|
+
type: string;
|
|
230
|
+
}>>;
|
|
231
|
+
login(providerId: string, interaction: PiAuthInteractionLike, type?: 'api_key' | 'oauth'): Promise<void>;
|
|
232
|
+
logout(providerId: string): Promise<void>;
|
|
233
|
+
}
|
|
234
|
+
/** Whether the pi dependency resolves (it is a required dependency of the SDK). */
|
|
235
|
+
export declare function isPiPackageAvailable(): boolean;
|
|
236
|
+
/**
|
|
237
|
+
* Open a pi runtime using an existing install's credential store and model
|
|
238
|
+
* catalog. This is the setup entry point used by `set-backend pi`; it does not
|
|
239
|
+
* require the pi CLI or a pre-existing pi session.
|
|
240
|
+
*/
|
|
241
|
+
export declare function openPiRuntime(options?: CreatePiBackendOptions): Promise<PiRuntimeHandle>;
|
|
242
|
+
/** Resolved pi backend plus the model capabilities the UI/config needs. */
|
|
243
|
+
export interface PiBackendInfo {
|
|
244
|
+
backend: LLMBackend;
|
|
245
|
+
modelId: string;
|
|
246
|
+
provider: string;
|
|
247
|
+
contextWindow?: number;
|
|
248
|
+
maxTokens: number;
|
|
249
|
+
reasoning: boolean;
|
|
250
|
+
thinkingLevel?: ThinkingLevel;
|
|
251
|
+
supportedThinkingLevels: ThinkingLevel[];
|
|
252
|
+
/** Set when a requested thinking level was unsupported and dropped. */
|
|
253
|
+
warning?: string;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Build an `LLMBackend` from pi's credential store. Throws a clear error when
|
|
257
|
+
* the pi packages are not installed.
|
|
258
|
+
*/
|
|
259
|
+
export declare function createPiBackend(options?: CreatePiBackendOptions): Promise<PiBackendInfo>;
|
|
260
|
+
export interface ResolveBackendOptions {
|
|
261
|
+
kind?: BackendKind;
|
|
262
|
+
model?: string;
|
|
263
|
+
provider?: string;
|
|
264
|
+
maxTokens?: number;
|
|
265
|
+
agentDir?: string;
|
|
266
|
+
modelsPath?: string | null;
|
|
267
|
+
authPath?: string | null;
|
|
268
|
+
thinkingLevel?: string;
|
|
269
|
+
}
|
|
270
|
+
export interface ResolvedBackend {
|
|
271
|
+
kind: BackendKind;
|
|
272
|
+
/** Injected backend for pi; undefined for env (the runner builds it). */
|
|
273
|
+
llmBackend?: LLMBackend;
|
|
274
|
+
provider: string;
|
|
275
|
+
/** Bare model id. */
|
|
276
|
+
model: string;
|
|
277
|
+
/** `provider/model` (pi) or bare id (env), for display/persistence. */
|
|
278
|
+
modelId: string;
|
|
279
|
+
/** pi model capabilities (undefined for env). */
|
|
280
|
+
contextWindow?: number;
|
|
281
|
+
reasoning?: boolean;
|
|
282
|
+
thinkingLevel?: ThinkingLevel;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Resolve the shared pi/env model backend used by both `deepclause run` and the
|
|
286
|
+
* REPL. `pi` (the default) returns an injected `LLMBackend`; `env` returns the
|
|
287
|
+
* provider/model so the runner builds the SDK provider backend.
|
|
288
|
+
*/
|
|
289
|
+
export declare function resolveLlmBackend(options?: ResolveBackendOptions): Promise<ResolvedBackend>;
|
|
290
|
+
//# sourceMappingURL=backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/repl/backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend resolution for the REPL (M5).
|
|
3
|
+
*
|
|
4
|
+
* `env` uses the SDK's provider/API-key backend (unchanged). `pi` reuses pi's
|
|
5
|
+
* own model registry and credential store so the REPL runs against the model
|
|
6
|
+
* configured in pi, without asking for API keys or writing provider env vars.
|
|
7
|
+
*
|
|
8
|
+
* The pi packages are optional peers and loaded with a dynamic import only when
|
|
9
|
+
* the pi backend is selected.
|
|
10
|
+
*/
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
export const THINKING_LEVELS = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'];
|
|
13
|
+
/** Levels a model accepts: reasoning models expose all but explicitly-unsupported ones. */
|
|
14
|
+
export function supportedThinkingLevels(model) {
|
|
15
|
+
if (!model.reasoning) {
|
|
16
|
+
return ['off'];
|
|
17
|
+
}
|
|
18
|
+
return THINKING_LEVELS.filter((level) => model.thinkingLevelMap?.[level] !== null);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Validate a requested thinking level against the model. Returns the level to
|
|
22
|
+
* pass through (or `undefined` for the provider default) plus a warning when a
|
|
23
|
+
* request had to be dropped.
|
|
24
|
+
*/
|
|
25
|
+
export function resolveThinkingLevel(model, requested) {
|
|
26
|
+
const supported = supportedThinkingLevels(model);
|
|
27
|
+
if (!requested) {
|
|
28
|
+
return { level: undefined, supported };
|
|
29
|
+
}
|
|
30
|
+
if (THINKING_LEVELS.includes(requested) && supported.includes(requested)) {
|
|
31
|
+
return { level: requested, supported };
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
level: undefined,
|
|
35
|
+
supported,
|
|
36
|
+
warning: `thinking level '${requested}' is not supported by ${model.provider}/${model.id}; using the provider default`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** Resolve pi's agent dir, models.json, and auth.json paths. */
|
|
40
|
+
export function resolvePiPaths(config, defaults) {
|
|
41
|
+
const agentDir = config.agentDir ?? defaults.agentDir;
|
|
42
|
+
return {
|
|
43
|
+
agentDir,
|
|
44
|
+
modelsPath: config.modelsPath ?? path.join(agentDir, 'models.json'),
|
|
45
|
+
authPath: config.authPath ?? path.join(agentDir, 'auth.json'),
|
|
46
|
+
model: config.model,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function modelLabel(model) {
|
|
50
|
+
return `${model.provider}/${model.id}`;
|
|
51
|
+
}
|
|
52
|
+
/** Select the pi model to use, honoring an explicit provider/model request. */
|
|
53
|
+
export function selectPiModel(registry, requested) {
|
|
54
|
+
const available = registry.getAvailable();
|
|
55
|
+
if (available.length === 0) {
|
|
56
|
+
throw new Error('pi has no configured models; run pi or `deepclause set-backend env`');
|
|
57
|
+
}
|
|
58
|
+
if (requested) {
|
|
59
|
+
const normalized = requested.replace(':', '/');
|
|
60
|
+
const [provider, ...rest] = normalized.split('/');
|
|
61
|
+
const modelId = rest.join('/');
|
|
62
|
+
if (modelId && registry.find) {
|
|
63
|
+
const found = registry.find(provider, modelId);
|
|
64
|
+
if (found)
|
|
65
|
+
return found;
|
|
66
|
+
}
|
|
67
|
+
const byId = available.find((model) => model.id === requested || modelLabel(model) === requested);
|
|
68
|
+
if (byId)
|
|
69
|
+
return byId;
|
|
70
|
+
throw new Error(`pi model not found: ${requested}`);
|
|
71
|
+
}
|
|
72
|
+
return available[0];
|
|
73
|
+
}
|
|
74
|
+
function emptyUsage() {
|
|
75
|
+
return { input: 0, output: 0, totalTokens: 0, cacheRead: 0, cacheWrite: 0, reasoning: 0 };
|
|
76
|
+
}
|
|
77
|
+
function toPiMessages(messages, model) {
|
|
78
|
+
return messages
|
|
79
|
+
.filter((message) => message.role !== 'system')
|
|
80
|
+
.map((message) => {
|
|
81
|
+
if (message.role === 'assistant' && message.providerData) {
|
|
82
|
+
return message.providerData;
|
|
83
|
+
}
|
|
84
|
+
if (message.role === 'user') {
|
|
85
|
+
// Attach resolved media as pi image content blocks alongside the text.
|
|
86
|
+
const content = message.media && message.media.length > 0
|
|
87
|
+
? [
|
|
88
|
+
...(message.content ? [{ type: 'text', text: message.content }] : []),
|
|
89
|
+
...message.media.map((media) => ({
|
|
90
|
+
type: 'image',
|
|
91
|
+
data: media.data,
|
|
92
|
+
mimeType: media.mimeType,
|
|
93
|
+
})),
|
|
94
|
+
]
|
|
95
|
+
: message.content;
|
|
96
|
+
return { role: 'user', content, timestamp: Date.now() };
|
|
97
|
+
}
|
|
98
|
+
if (message.role === 'tool') {
|
|
99
|
+
return {
|
|
100
|
+
role: 'toolResult',
|
|
101
|
+
toolCallId: message.toolCallId ?? 'unknown',
|
|
102
|
+
toolName: message.toolName ?? 'unknown',
|
|
103
|
+
content: [{ type: 'text', text: message.content }],
|
|
104
|
+
isError: false,
|
|
105
|
+
timestamp: Date.now(),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
role: 'assistant',
|
|
110
|
+
content: [
|
|
111
|
+
...(message.content ? [{ type: 'text', text: message.content }] : []),
|
|
112
|
+
...(message.toolCalls ?? []).map((call) => ({
|
|
113
|
+
type: 'toolCall',
|
|
114
|
+
id: call.id,
|
|
115
|
+
name: call.name,
|
|
116
|
+
arguments: call.arguments,
|
|
117
|
+
})),
|
|
118
|
+
],
|
|
119
|
+
api: model.api,
|
|
120
|
+
provider: model.provider,
|
|
121
|
+
model: model.id,
|
|
122
|
+
usage: emptyUsage(),
|
|
123
|
+
stopReason: message.toolCalls?.length ? 'toolUse' : 'stop',
|
|
124
|
+
timestamp: Date.now(),
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Wrap a pi registry + model as an SDK `LLMBackend`. Reused by the extension
|
|
130
|
+
* embedding, which passes its live registry.
|
|
131
|
+
*
|
|
132
|
+
* `thinkingLevel` is forwarded to the provider only for reasoning models and
|
|
133
|
+
* non-`off` levels, so provider defaults are preserved for every other model.
|
|
134
|
+
*/
|
|
135
|
+
export function createPiAdapter(registry, model, maxTokens = 65536, thinkingLevel) {
|
|
136
|
+
if (!registry.hasConfiguredAuth(model)) {
|
|
137
|
+
throw new Error(`pi has no configured authentication for ${modelLabel(model)}`);
|
|
138
|
+
}
|
|
139
|
+
const resolved = resolveThinkingLevel(model, thinkingLevel);
|
|
140
|
+
const backend = {
|
|
141
|
+
async complete(request) {
|
|
142
|
+
const systemPrompt = request.messages
|
|
143
|
+
.filter((message) => message.role === 'system')
|
|
144
|
+
.map((message) => message.content)
|
|
145
|
+
.join('\n\n');
|
|
146
|
+
const context = {
|
|
147
|
+
systemPrompt: systemPrompt || undefined,
|
|
148
|
+
messages: toPiMessages(request.messages, model),
|
|
149
|
+
tools: request.tools?.map((tool) => ({
|
|
150
|
+
name: tool.name,
|
|
151
|
+
description: tool.description,
|
|
152
|
+
parameters: tool.parameters,
|
|
153
|
+
})),
|
|
154
|
+
};
|
|
155
|
+
const options = {
|
|
156
|
+
signal: request.signal,
|
|
157
|
+
maxTokens: request.maxTokens ?? maxTokens,
|
|
158
|
+
cacheRetention: 'none',
|
|
159
|
+
};
|
|
160
|
+
if (model.reasoning && resolved.level && resolved.level !== 'off') {
|
|
161
|
+
// pi's `SimpleStreamOptions` enables thinking with `reasoning` (a
|
|
162
|
+
// ThinkingLevel), not `thinkingLevel`.
|
|
163
|
+
options.reasoning = resolved.level;
|
|
164
|
+
}
|
|
165
|
+
let response;
|
|
166
|
+
if (registry.streamSimple) {
|
|
167
|
+
// Stream text/thinking deltas as they arrive; the final message carries
|
|
168
|
+
// the full text, tool calls, and usage.
|
|
169
|
+
const stream = registry.streamSimple(model, context, options);
|
|
170
|
+
for await (const event of stream) {
|
|
171
|
+
if (event.type === 'text_delta') {
|
|
172
|
+
if (event.delta)
|
|
173
|
+
request.onText?.(event.delta);
|
|
174
|
+
}
|
|
175
|
+
else if (event.type === 'thinking_delta') {
|
|
176
|
+
if (event.delta)
|
|
177
|
+
request.onReasoning?.(event.delta);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
response = await stream.result();
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
response = await registry.complete(model, context, options);
|
|
184
|
+
const streamedText = response.content
|
|
185
|
+
.filter((content) => content.type === 'text')
|
|
186
|
+
.map((content) => content.text)
|
|
187
|
+
.join('');
|
|
188
|
+
if (streamedText)
|
|
189
|
+
request.onText?.(streamedText);
|
|
190
|
+
}
|
|
191
|
+
if (response.stopReason === 'error' || response.stopReason === 'aborted') {
|
|
192
|
+
throw new Error(response.errorMessage || `pi model request ${response.stopReason}`);
|
|
193
|
+
}
|
|
194
|
+
const text = response.content
|
|
195
|
+
.filter((content) => content.type === 'text')
|
|
196
|
+
.map((content) => content.text)
|
|
197
|
+
.join('');
|
|
198
|
+
return {
|
|
199
|
+
text,
|
|
200
|
+
toolCalls: response.content
|
|
201
|
+
.filter((content) => content.type === 'toolCall')
|
|
202
|
+
.map((call) => ({ id: call.id, name: call.name, arguments: call.arguments })),
|
|
203
|
+
usage: {
|
|
204
|
+
inputTokens: response.usage.input,
|
|
205
|
+
outputTokens: response.usage.output,
|
|
206
|
+
totalTokens: response.usage.totalTokens,
|
|
207
|
+
cacheReadTokens: response.usage.cacheRead || undefined,
|
|
208
|
+
cacheWriteTokens: response.usage.cacheWrite || undefined,
|
|
209
|
+
reasoningTokens: response.usage.reasoning || undefined,
|
|
210
|
+
},
|
|
211
|
+
finishReason: response.stopReason === 'toolUse'
|
|
212
|
+
? 'tool_use'
|
|
213
|
+
: response.stopReason === 'length'
|
|
214
|
+
? 'length'
|
|
215
|
+
: 'stop',
|
|
216
|
+
providerData: response,
|
|
217
|
+
};
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
return {
|
|
221
|
+
backend,
|
|
222
|
+
modelId: modelLabel(model),
|
|
223
|
+
provider: model.provider,
|
|
224
|
+
contextWindow: model.contextWindow,
|
|
225
|
+
maxTokens,
|
|
226
|
+
reasoning: Boolean(model.reasoning),
|
|
227
|
+
thinkingLevel: resolved.level,
|
|
228
|
+
supportedThinkingLevels: resolved.supported,
|
|
229
|
+
warning: resolved.warning,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
const PI_PACKAGE_NAME = '@earendil-works/pi-coding-agent';
|
|
233
|
+
/**
|
|
234
|
+
* Import the pi coding agent. It is a regular dependency of this SDK, so the
|
|
235
|
+
* bare specifier always resolves; a globally installed `pi` is deliberately
|
|
236
|
+
* not consulted, which keeps the version deterministic.
|
|
237
|
+
*/
|
|
238
|
+
async function importPiModule() {
|
|
239
|
+
try {
|
|
240
|
+
return (await import(PI_PACKAGE_NAME));
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
throw new Error(`Backend 'pi' requires ${PI_PACKAGE_NAME} (a dependency of this SDK). `
|
|
244
|
+
+ 'Reinstall dependencies, or run `deepclause set-backend env` to use the SDK provider/API-key backend.');
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/** Build the catalog `PiModelInfo` (with reasoning levels) from a raw model. */
|
|
248
|
+
export function toPiModelInfo(model) {
|
|
249
|
+
return {
|
|
250
|
+
provider: model.provider,
|
|
251
|
+
id: model.id,
|
|
252
|
+
name: model.name ?? model.id,
|
|
253
|
+
reasoning: Boolean(model.reasoning),
|
|
254
|
+
contextWindow: model.contextWindow,
|
|
255
|
+
maxTokens: model.maxTokens,
|
|
256
|
+
supportedThinkingLevels: supportedThinkingLevels(model),
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
/** List providers from a pi runtime with auth capability/status. */
|
|
260
|
+
export function listPiProviders(runtime) {
|
|
261
|
+
return runtime.getProviders().map((provider) => {
|
|
262
|
+
const status = runtime.getProviderAuthStatus(provider.id);
|
|
263
|
+
return {
|
|
264
|
+
id: provider.id,
|
|
265
|
+
name: provider.name ?? provider.id,
|
|
266
|
+
apiKey: Boolean(provider.auth?.apiKey),
|
|
267
|
+
oauth: Boolean(provider.auth?.oauth),
|
|
268
|
+
configured: status?.configured ?? runtime.hasConfiguredAuth(provider.id),
|
|
269
|
+
source: status?.source,
|
|
270
|
+
label: status?.label,
|
|
271
|
+
};
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
/** List chat models from a pi runtime, optionally filtered by provider. */
|
|
275
|
+
export function listPiModels(runtime, providerId) {
|
|
276
|
+
return runtime.getModels(providerId).map((model) => toPiModelInfo(model));
|
|
277
|
+
}
|
|
278
|
+
/** Whether the pi dependency resolves (it is a required dependency of the SDK). */
|
|
279
|
+
export function isPiPackageAvailable() {
|
|
280
|
+
try {
|
|
281
|
+
const resolve = import.meta.resolve;
|
|
282
|
+
return typeof resolve === 'function' && Boolean(resolve(PI_PACKAGE_NAME));
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Open a pi runtime using an existing install's credential store and model
|
|
290
|
+
* catalog. This is the setup entry point used by `set-backend pi`; it does not
|
|
291
|
+
* require the pi CLI or a pre-existing pi session.
|
|
292
|
+
*/
|
|
293
|
+
export async function openPiRuntime(options = {}) {
|
|
294
|
+
const pi = await importPiModule();
|
|
295
|
+
const paths = resolvePiPaths(options, { agentDir: pi.getAgentDir() });
|
|
296
|
+
const runtime = (await pi.ModelRuntime.create({
|
|
297
|
+
authPath: paths.authPath,
|
|
298
|
+
modelsPath: paths.modelsPath,
|
|
299
|
+
allowModelNetwork: false,
|
|
300
|
+
}));
|
|
301
|
+
const registry = options.modelRegistry ?? new pi.ModelRegistry(runtime);
|
|
302
|
+
return {
|
|
303
|
+
registry,
|
|
304
|
+
runtime,
|
|
305
|
+
listProviders: () => listPiProviders(runtime),
|
|
306
|
+
listModels: (providerId) => listPiModels(runtime, providerId),
|
|
307
|
+
hasAuth: (providerId) => runtime.hasConfiguredAuth(providerId),
|
|
308
|
+
isUsingOAuth: (providerId) => runtime.isUsingOAuth(providerId),
|
|
309
|
+
listCredentials: async () => (await runtime.listCredentials()) ?? [],
|
|
310
|
+
login: async (providerId, interaction, type) => {
|
|
311
|
+
const authType = type ?? 'api_key';
|
|
312
|
+
await runtime.login(providerId, authType, interaction, {});
|
|
313
|
+
},
|
|
314
|
+
logout: async (providerId) => {
|
|
315
|
+
await runtime.logout(providerId);
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Build an `LLMBackend` from pi's credential store. Throws a clear error when
|
|
321
|
+
* the pi packages are not installed.
|
|
322
|
+
*/
|
|
323
|
+
export async function createPiBackend(options = {}) {
|
|
324
|
+
let registry = options.modelRegistry;
|
|
325
|
+
let requested = options.model;
|
|
326
|
+
if (!registry) {
|
|
327
|
+
const pi = await importPiModule();
|
|
328
|
+
const paths = resolvePiPaths(options, { agentDir: pi.getAgentDir() });
|
|
329
|
+
requested = requested ?? paths.model;
|
|
330
|
+
const runtime = await pi.ModelRuntime.create({
|
|
331
|
+
authPath: paths.authPath,
|
|
332
|
+
modelsPath: paths.modelsPath,
|
|
333
|
+
allowModelNetwork: false,
|
|
334
|
+
});
|
|
335
|
+
registry = new pi.ModelRegistry(runtime);
|
|
336
|
+
}
|
|
337
|
+
const model = selectPiModel(registry, requested);
|
|
338
|
+
return createPiAdapter(registry, model, options.maxTokens, options.thinkingLevel);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Resolve the shared pi/env model backend used by both `deepclause run` and the
|
|
342
|
+
* REPL. `pi` (the default) returns an injected `LLMBackend`; `env` returns the
|
|
343
|
+
* provider/model so the runner builds the SDK provider backend.
|
|
344
|
+
*/
|
|
345
|
+
export async function resolveLlmBackend(options = {}) {
|
|
346
|
+
const kind = options.kind ?? 'pi';
|
|
347
|
+
if (kind === 'pi') {
|
|
348
|
+
const pi = await createPiBackend({
|
|
349
|
+
agentDir: options.agentDir,
|
|
350
|
+
modelsPath: options.modelsPath ?? undefined,
|
|
351
|
+
authPath: options.authPath ?? undefined,
|
|
352
|
+
model: options.model,
|
|
353
|
+
maxTokens: options.maxTokens,
|
|
354
|
+
thinkingLevel: options.thinkingLevel,
|
|
355
|
+
});
|
|
356
|
+
return {
|
|
357
|
+
kind: 'pi',
|
|
358
|
+
llmBackend: pi.backend,
|
|
359
|
+
provider: pi.provider,
|
|
360
|
+
model: pi.modelId.split('/').slice(1).join('/') || pi.modelId,
|
|
361
|
+
modelId: pi.modelId,
|
|
362
|
+
contextWindow: pi.contextWindow,
|
|
363
|
+
reasoning: pi.reasoning,
|
|
364
|
+
thinkingLevel: pi.thinkingLevel,
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
const model = options.model ?? 'gpt-4o';
|
|
368
|
+
return { kind: 'env', provider: options.provider ?? 'openai', model, modelId: model };
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=backend.js.map
|