deepclause-sdk 0.1.0 → 0.1.2
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 +83 -12
- package/dist/agent.d.ts +14 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +117 -9
- package/dist/agent.js.map +1 -1
- package/dist/cli/config.d.ts +86 -26
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +15 -0
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/index.js +38 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/repl.d.ts +27 -0
- package/dist/cli/repl.d.ts.map +1 -1
- package/dist/cli/repl.js +191 -5
- package/dist/cli/repl.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +16 -0
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/visualize.d.ts +4 -0
- package/dist/cli/visualize.d.ts.map +1 -1
- package/dist/cli/visualize.js +29 -4
- package/dist/cli/visualize.js.map +1 -1
- package/dist/prolog/bridge.d.ts +3 -1
- package/dist/prolog/bridge.d.ts.map +1 -1
- package/dist/prolog/bridge.js +2 -0
- package/dist/prolog/bridge.js.map +1 -1
- package/dist/prolog/loader.d.ts +32 -0
- package/dist/prolog/loader.d.ts.map +1 -1
- package/dist/prolog/loader.js +87 -0
- package/dist/prolog/loader.js.map +1 -1
- package/dist/prolog-src/deepclause_mi.pl +1217 -120
- package/dist/repl/agent.d.ts +33 -1
- package/dist/repl/agent.d.ts.map +1 -1
- package/dist/repl/agent.js +91 -8
- package/dist/repl/agent.js.map +1 -1
- package/dist/repl/backend.d.ts +31 -0
- package/dist/repl/backend.d.ts.map +1 -1
- package/dist/repl/backend.js +122 -77
- package/dist/repl/backend.js.map +1 -1
- package/dist/repl/harness-tools.d.ts +49 -2
- package/dist/repl/harness-tools.d.ts.map +1 -1
- package/dist/repl/harness-tools.js +87 -7
- package/dist/repl/harness-tools.js.map +1 -1
- 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 +20 -2
- package/dist/repl/index.d.ts.map +1 -1
- package/dist/repl/index.js +6 -0
- package/dist/repl/index.js.map +1 -1
- 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/render.d.ts +36 -2
- package/dist/repl/render.d.ts.map +1 -1
- package/dist/repl/render.js +175 -17
- package/dist/repl/render.js.map +1 -1
- package/dist/repl/session.d.ts +129 -4
- package/dist/repl/session.d.ts.map +1 -1
- package/dist/repl/session.js +380 -17
- package/dist/repl/session.js.map +1 -1
- package/dist/repl/tool-arguments.d.ts +36 -0
- package/dist/repl/tool-arguments.d.ts.map +1 -0
- package/dist/repl/tool-arguments.js +123 -0
- package/dist/repl/tool-arguments.js.map +1 -0
- package/dist/repl/toolset.d.ts +28 -1
- package/dist/repl/toolset.d.ts.map +1 -1
- package/dist/repl/toolset.js +52 -4
- package/dist/repl/toolset.js.map +1 -1
- package/dist/repl/tui/transcript.d.ts +2 -0
- package/dist/repl/tui/transcript.d.ts.map +1 -1
- package/dist/repl/tui/transcript.js +16 -0
- package/dist/repl/tui/transcript.js.map +1 -1
- package/dist/runner.d.ts +44 -2
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +293 -33
- package/dist/runner.js.map +1 -1
- package/dist/system/assets/docs/AGENT_PROMPT.md +1000 -44
- package/dist/system/assets/docs/DML_AUTHORING.md +96 -17
- package/dist/system/assets/docs/DML_REFERENCE.md +652 -39
- package/dist/system/assets/docs/PROLOG_SNIPPETS.md +45 -1
- package/dist/system/assets/docs/TASK_PROMPT.md +2 -0
- package/dist/system/environment.d.ts +36 -0
- package/dist/system/environment.d.ts.map +1 -0
- package/dist/system/environment.js +81 -0
- package/dist/system/environment.js.map +1 -0
- package/dist/system/runtime/shell-manager.d.ts +40 -2
- package/dist/system/runtime/shell-manager.d.ts.map +1 -1
- package/dist/system/runtime/shell-manager.js +82 -16
- package/dist/system/runtime/shell-manager.js.map +1 -1
- package/dist/system/runtime/shell-tool-events.js +25 -1
- package/dist/system/runtime/shell-tool-events.js.map +1 -1
- package/dist/types.d.ts +76 -2
- package/dist/types.d.ts.map +1 -1
- 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 +7 -0
- package/dist/visualize/index.d.ts.map +1 -1
- package/dist/visualize/index.js +9 -0
- package/dist/visualize/index.js.map +1 -1
- 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 +10 -6
- package/src/prolog-src/deepclause_mi.pl +1217 -120
- package/dist/compaction.d.ts +0 -98
- package/dist/compaction.d.ts.map +0 -1
- package/dist/compaction.js +0 -471
- package/dist/compaction.js.map +0 -1
- package/dist/repl/tools.d.ts +0 -53
- package/dist/repl/tools.d.ts.map +0 -1
- package/dist/repl/tools.js +0 -307
- package/dist/repl/tools.js.map +0 -1
- package/dist/system/assets/compactors/default-loop-compactor.dml +0 -43
- package/dist/system/assets/compactors/default-session-compactor.dml +0 -30
- package/dist/system/assets/docs/META_PROMPT.md +0 -68
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image generation over pi's image models.
|
|
3
|
+
*
|
|
4
|
+
* Implements the injectable `ImageBackend` used by `task(…, media(X))`. It reuses
|
|
5
|
+
* pi's credential store and model catalog (the same one the chat backend uses),
|
|
6
|
+
* picks the first available image model unless one is configured, and writes the
|
|
7
|
+
* result into the workspace media directory. No separate API keys.
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from 'fs/promises';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import { openPiRuntime } from './backend.js';
|
|
12
|
+
const EXT_BY_MIME = {
|
|
13
|
+
'image/png': 'png',
|
|
14
|
+
'image/jpeg': 'jpg',
|
|
15
|
+
'image/webp': 'webp',
|
|
16
|
+
'image/gif': 'gif',
|
|
17
|
+
};
|
|
18
|
+
function parseModelRef(ref) {
|
|
19
|
+
if (!ref) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const match = ref.match(/^([^:/]+)[:/](.+)$/);
|
|
23
|
+
return match ? { provider: match[1], id: match[2] } : undefined;
|
|
24
|
+
}
|
|
25
|
+
/** List the ids of available image models (for diagnostics / `/gen`). */
|
|
26
|
+
export async function listImageModels(handle) {
|
|
27
|
+
const runtime = handle.runtime;
|
|
28
|
+
if (typeof runtime.getAvailableOfType !== 'function') {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
const models = (await runtime.getAvailableOfType('image'));
|
|
32
|
+
return models.map((m) => (m.provider && m.id ? `${m.provider}:${m.id}` : String(m)));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Build a pi-backed image generator, or undefined when the installed pi runtime
|
|
36
|
+
* cannot generate images (no image-capable provider / missing API).
|
|
37
|
+
*/
|
|
38
|
+
export async function createPiImageBackend(options) {
|
|
39
|
+
const handle = await openPiRuntime({
|
|
40
|
+
agentDir: options.agentDir,
|
|
41
|
+
modelsPath: options.modelsPath ?? undefined,
|
|
42
|
+
authPath: options.authPath,
|
|
43
|
+
});
|
|
44
|
+
const runtime = handle.runtime;
|
|
45
|
+
if (typeof runtime.getAvailableOfType !== 'function' || typeof runtime.generateImages !== 'function') {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const dir = options.dir ?? '.deepclause/media';
|
|
49
|
+
return {
|
|
50
|
+
async generate(request) {
|
|
51
|
+
const available = (await runtime.getAvailableOfType('image'));
|
|
52
|
+
if (available.length === 0) {
|
|
53
|
+
throw new Error('no image model is available — check that a provider with image generation is signed in');
|
|
54
|
+
}
|
|
55
|
+
const wanted = parseModelRef(options.model);
|
|
56
|
+
let model = available[0];
|
|
57
|
+
if (wanted && typeof runtime.getModelOfType === 'function') {
|
|
58
|
+
const found = runtime.getModelOfType('image', wanted.provider, wanted.id);
|
|
59
|
+
if (found) {
|
|
60
|
+
model = found;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const input = [{ type: 'text', text: request.prompt }];
|
|
64
|
+
for (const ref of request.refs ?? []) {
|
|
65
|
+
const abs = path.resolve(options.workspacePath, ref.path);
|
|
66
|
+
const bytes = await fs.readFile(abs);
|
|
67
|
+
input.push({ type: 'image', data: bytes.toString('base64'), mimeType: ref.mimeType });
|
|
68
|
+
}
|
|
69
|
+
const result = await runtime.generateImages(model, { input }, request.signal ? { signal: request.signal } : undefined);
|
|
70
|
+
const image = (result.output ?? []).find((part) => part.type === 'image' && part.data);
|
|
71
|
+
if (!image?.data) {
|
|
72
|
+
throw new Error(result.errorMessage || 'image generation returned no image');
|
|
73
|
+
}
|
|
74
|
+
const mimeType = image.mimeType ?? 'image/png';
|
|
75
|
+
const ext = EXT_BY_MIME[mimeType] ?? 'png';
|
|
76
|
+
const rel = path.posix.join(dir, `image-${Date.now()}.${ext}`);
|
|
77
|
+
const abs = path.resolve(options.workspacePath, rel);
|
|
78
|
+
await fs.mkdir(path.dirname(abs), { recursive: true });
|
|
79
|
+
await fs.writeFile(abs, Buffer.from(image.data, 'base64'));
|
|
80
|
+
return { path: rel, mimeType };
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=imagegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imagegen.js","sourceRoot":"","sources":["../../src/repl/imagegen.ts"],"names":[],"mappings":"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"}
|
package/dist/repl/index.d.ts
CHANGED
|
@@ -5,14 +5,17 @@
|
|
|
5
5
|
* used by the CLI (and, later, by pi). M1 implements goal mode, loading, and
|
|
6
6
|
* reset; prompt mode / freeze / export are filled in by later milestones.
|
|
7
7
|
*/
|
|
8
|
-
import type { DMLEvent, LLMBackend, MemoryMessage, ToolDefinition, ToolPolicy } from '../types.js';
|
|
8
|
+
import type { DMLEvent, ImageBackend, LLMBackend, MemoryMessage, ToolDefinition, ToolPolicy } from '../types.js';
|
|
9
9
|
import type { FrameKind } from '../types.js';
|
|
10
|
-
import { DMLSession, type DMLQueryOptions } from './session.js';
|
|
10
|
+
import { DMLSession, type DMLQueryOptions, type DiagramResult } from './session.js';
|
|
11
11
|
import type { HarnessExportOptions, HarnessExportResult } from './export.js';
|
|
12
12
|
import { type JevJudgeOptions } from './judge.js';
|
|
13
13
|
import type { HistoryOptions } from './history.js';
|
|
14
14
|
import type { JudgeSelection } from '../judge/types.js';
|
|
15
15
|
import type { CompactionSettings } from './compaction.js';
|
|
16
|
+
import type { DiagramMode } from '../visualize/index.js';
|
|
17
|
+
import type { ModelResolver } from './model-resolver.js';
|
|
18
|
+
import type { ExecutionBackendKind } from '../system/runtime/shell-manager.js';
|
|
16
19
|
export type RunOpts = DMLQueryOptions;
|
|
17
20
|
/** Goal-mode events are DMLEvents today; kept as a named alias for the API. */
|
|
18
21
|
export type DMLQueryEvent = DMLEvent;
|
|
@@ -44,6 +47,12 @@ export interface HarnessReplOptions {
|
|
|
44
47
|
maxModelCalls?: number;
|
|
45
48
|
/** Host tool catalog text injected into the meta prompt (M5). */
|
|
46
49
|
hostToolsCatalog?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Effective shell backend (`agentvm`/`bwrap`/`sandbox-exec`/`clean-room`).
|
|
52
|
+
* Pass `toolset.environment.kind` so the harness `require_sandbox` check and
|
|
53
|
+
* the model's environment block match the toolset that will run commands.
|
|
54
|
+
*/
|
|
55
|
+
executionBackend?: ExecutionBackendKind;
|
|
47
56
|
/** Human-in-the-loop channel for DML `input/2` / `exec(ask_user(...))`. */
|
|
48
57
|
askUser?: (prompt: string, options?: string[]) => Promise<{
|
|
49
58
|
answer: string;
|
|
@@ -71,6 +80,10 @@ export interface HarnessReplOptions {
|
|
|
71
80
|
};
|
|
72
81
|
/** Active model context window, used for compaction thresholds. */
|
|
73
82
|
contextWindow?: number;
|
|
83
|
+
/** Host image generator for `task(…, media(X))` typed outputs. */
|
|
84
|
+
imageBackend?: ImageBackend;
|
|
85
|
+
/** Resolves `with_model/2` scopes to concrete models. */
|
|
86
|
+
modelResolver?: ModelResolver;
|
|
74
87
|
}
|
|
75
88
|
export interface RollbackResult {
|
|
76
89
|
ok: boolean;
|
|
@@ -86,6 +99,7 @@ export interface HarnessRepl {
|
|
|
86
99
|
/** Load a DML file into the living module. */
|
|
87
100
|
load(file: string): Promise<{
|
|
88
101
|
error?: string;
|
|
102
|
+
warnings?: string[];
|
|
89
103
|
}>;
|
|
90
104
|
/** Read-only listing of the living module. */
|
|
91
105
|
list(filter?: string): Promise<string>;
|
|
@@ -109,6 +123,10 @@ export interface HarnessRepl {
|
|
|
109
123
|
afterTokens: number;
|
|
110
124
|
error?: string;
|
|
111
125
|
}>;
|
|
126
|
+
/** Generate a diagram of an entry predicate (Mermaid → ASCII tree + SVG). */
|
|
127
|
+
diagram(entry?: string, mode?: DiagramMode, options?: {
|
|
128
|
+
signal?: AbortSignal;
|
|
129
|
+
}): Promise<DiagramResult>;
|
|
112
130
|
/** Deliver a steering message into the running authoring turn. */
|
|
113
131
|
steer(text: string): void;
|
|
114
132
|
dispose(): Promise<void>;
|
package/dist/repl/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repl/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACX,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repl/index.ts"],"names":[],"mappings":"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"}
|
package/dist/repl/index.js
CHANGED
|
@@ -51,6 +51,9 @@ class HarnessReplImpl {
|
|
|
51
51
|
compact(customInstructions) {
|
|
52
52
|
return this.session.compact(customInstructions);
|
|
53
53
|
}
|
|
54
|
+
diagram(entry, mode, options) {
|
|
55
|
+
return this.session.diagram(entry, mode, options);
|
|
56
|
+
}
|
|
54
57
|
steer(text) {
|
|
55
58
|
this.session.steer(text);
|
|
56
59
|
}
|
|
@@ -86,6 +89,7 @@ export async function createHarnessRepl(options) {
|
|
|
86
89
|
maxDepth: options.maxDepth,
|
|
87
90
|
maxModelCalls: options.maxModelCalls,
|
|
88
91
|
hostToolsCatalog: options.hostToolsCatalog,
|
|
92
|
+
executionBackend: options.executionBackend,
|
|
89
93
|
askUser: options.askUser,
|
|
90
94
|
history: options.history,
|
|
91
95
|
harnessName: options.harness,
|
|
@@ -100,6 +104,8 @@ export async function createHarnessRepl(options) {
|
|
|
100
104
|
streaming: options.streaming ?? true,
|
|
101
105
|
llmBackend: options.llmBackend,
|
|
102
106
|
judgeSelection,
|
|
107
|
+
imageBackend: options.imageBackend,
|
|
108
|
+
modelResolver: options.modelResolver,
|
|
103
109
|
},
|
|
104
110
|
});
|
|
105
111
|
return new HarnessReplImpl(session);
|
package/dist/repl/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repl/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repl/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a `with_model/2` spec (string or dict) into a concrete model profile.
|
|
3
|
+
*
|
|
4
|
+
* Two sources, matching the chat backend:
|
|
5
|
+
* - `PiModelResolver` — pi's live registry; authoritative for existence and
|
|
6
|
+
* auth (the default backend).
|
|
7
|
+
* - `EnvModelResolver` — the bundled model database (the `env` backend).
|
|
8
|
+
*
|
|
9
|
+
* Resolution happens on first use of a scope and is cached by the runner.
|
|
10
|
+
*/
|
|
11
|
+
import type { ModelSpec, ResolvedModel } from '../types.js';
|
|
12
|
+
import { type PiRegistryLike } from './backend.js';
|
|
13
|
+
export declare class ModelResolutionError extends Error {
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parse a raw `model_spec` value (from the Prolog payload) into a `ModelSpec`.
|
|
18
|
+
* Accepts `none`/`default`/empty (→ default), a string
|
|
19
|
+
* (`provider:model`, `provider/model`, `model`, each with an optional `#level`),
|
|
20
|
+
* or a `model{…}` dict.
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseModelSpec(raw: unknown): ModelSpec;
|
|
23
|
+
export interface ModelResolver {
|
|
24
|
+
/** Resolve + validate a non-default spec. Throws `ModelResolutionError`. */
|
|
25
|
+
resolve(spec: ModelSpec): Promise<ResolvedModel>;
|
|
26
|
+
/** A short list of available models, for error messages. */
|
|
27
|
+
describe(): string;
|
|
28
|
+
/** The models available in this session, with catalog prices. */
|
|
29
|
+
catalog(): ModelCatalogEntry[];
|
|
30
|
+
}
|
|
31
|
+
/** One entry of the session's model catalog, as shown to the agent. */
|
|
32
|
+
export interface ModelCatalogEntry {
|
|
33
|
+
/** `provider:model` id, usable in `with_model/2`. */
|
|
34
|
+
model: string;
|
|
35
|
+
/** USD per 1M input tokens. */
|
|
36
|
+
inputCost?: number;
|
|
37
|
+
/** USD per 1M output tokens. */
|
|
38
|
+
outputCost?: number;
|
|
39
|
+
contextWindow?: number;
|
|
40
|
+
}
|
|
41
|
+
/** Format a catalog entry as `provider:model ($in/$out per 1M)`. */
|
|
42
|
+
export declare function formatModelCatalogEntry(entry: ModelCatalogEntry): string;
|
|
43
|
+
/** Resolve against pi's live registry (existence + auth are authoritative). */
|
|
44
|
+
export declare class PiModelResolver implements ModelResolver {
|
|
45
|
+
private readonly registry;
|
|
46
|
+
constructor(registry: PiRegistryLike);
|
|
47
|
+
resolve(spec: ModelSpec): Promise<ResolvedModel>;
|
|
48
|
+
describe(): string;
|
|
49
|
+
catalog(): ModelCatalogEntry[];
|
|
50
|
+
}
|
|
51
|
+
/** Resolve against the bundled model database (the `env` backend). */
|
|
52
|
+
export declare class EnvModelResolver implements ModelResolver {
|
|
53
|
+
private readonly sessionProvider;
|
|
54
|
+
constructor(sessionProvider: string);
|
|
55
|
+
resolve(spec: ModelSpec): Promise<ResolvedModel>;
|
|
56
|
+
describe(): string;
|
|
57
|
+
catalog(): ModelCatalogEntry[];
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=model-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../../src/repl/model-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAA6C,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9F,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,CAmCtD;AAED,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,4DAA4D;IAC5D,QAAQ,IAAI,MAAM,CAAC;IACnB,iEAAiE;IACjE,OAAO,IAAI,iBAAiB,EAAE,CAAC;CAChC;AAED,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,oEAAoE;AACpE,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAQxE;AAED,+EAA+E;AAC/E,qBAAa,eAAgB,YAAW,aAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,cAAc;IAE/C,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IAqCtD,QAAQ,IAAI,MAAM;IAQlB,OAAO,IAAI,iBAAiB,EAAE;CAQ/B;AAED,sEAAsE;AACtE,qBAAa,gBAAiB,YAAW,aAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,MAAM;IAE9C,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IAoBtD,QAAQ,IAAI,MAAM;IAIlB,OAAO,IAAI,iBAAiB,EAAE;CAG/B"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a `with_model/2` spec (string or dict) into a concrete model profile.
|
|
3
|
+
*
|
|
4
|
+
* Two sources, matching the chat backend:
|
|
5
|
+
* - `PiModelResolver` — pi's live registry; authoritative for existence and
|
|
6
|
+
* auth (the default backend).
|
|
7
|
+
* - `EnvModelResolver` — the bundled model database (the `env` backend).
|
|
8
|
+
*
|
|
9
|
+
* Resolution happens on first use of a scope and is cached by the runner.
|
|
10
|
+
*/
|
|
11
|
+
import { getAllModels, lookupModel, lookupProvider } from '../system/config/model-database.js';
|
|
12
|
+
import { supportedThinkingLevels } from './backend.js';
|
|
13
|
+
export class ModelResolutionError extends Error {
|
|
14
|
+
constructor(message) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = 'ModelResolutionError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parse a raw `model_spec` value (from the Prolog payload) into a `ModelSpec`.
|
|
21
|
+
* Accepts `none`/`default`/empty (→ default), a string
|
|
22
|
+
* (`provider:model`, `provider/model`, `model`, each with an optional `#level`),
|
|
23
|
+
* or a `model{…}` dict.
|
|
24
|
+
*/
|
|
25
|
+
export function parseModelSpec(raw) {
|
|
26
|
+
if (raw === null || raw === undefined) {
|
|
27
|
+
return 'default';
|
|
28
|
+
}
|
|
29
|
+
if (typeof raw === 'object') {
|
|
30
|
+
const obj = raw;
|
|
31
|
+
const id = typeof obj.id === 'string' ? obj.id : undefined;
|
|
32
|
+
if (!id) {
|
|
33
|
+
return 'default';
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
provider: typeof obj.provider === 'string' ? obj.provider : undefined,
|
|
37
|
+
id,
|
|
38
|
+
temperature: typeof obj.temperature === 'number' ? obj.temperature : undefined,
|
|
39
|
+
maxTokens: typeof obj.maxTokens === 'number' ? obj.maxTokens : undefined,
|
|
40
|
+
reasoning: typeof obj.reasoning === 'string' ? obj.reasoning : undefined,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const text = String(raw).trim();
|
|
44
|
+
if (!text || text === 'none' || text === 'default') {
|
|
45
|
+
return 'default';
|
|
46
|
+
}
|
|
47
|
+
let body = text;
|
|
48
|
+
let reasoning;
|
|
49
|
+
// Reasoning suffix uses the last `#` (provider/model ids may contain `:`/`/`).
|
|
50
|
+
const hash = body.lastIndexOf('#');
|
|
51
|
+
if (hash > 0) {
|
|
52
|
+
reasoning = body.slice(hash + 1).trim() || undefined;
|
|
53
|
+
body = body.slice(0, hash);
|
|
54
|
+
}
|
|
55
|
+
const sep = body.search(/[:/]/);
|
|
56
|
+
if (sep === -1) {
|
|
57
|
+
return { id: body, reasoning };
|
|
58
|
+
}
|
|
59
|
+
return { provider: body.slice(0, sep), id: body.slice(sep + 1), reasoning };
|
|
60
|
+
}
|
|
61
|
+
function trimCost(value) {
|
|
62
|
+
return String(Number(value.toFixed(3)));
|
|
63
|
+
}
|
|
64
|
+
/** Format a catalog entry as `provider:model ($in/$out per 1M)`. */
|
|
65
|
+
export function formatModelCatalogEntry(entry) {
|
|
66
|
+
const hasCost = typeof entry.inputCost === 'number' || typeof entry.outputCost === 'number';
|
|
67
|
+
if (!hasCost) {
|
|
68
|
+
return entry.model;
|
|
69
|
+
}
|
|
70
|
+
const input = typeof entry.inputCost === 'number' ? `$${trimCost(entry.inputCost)}` : '?';
|
|
71
|
+
const output = typeof entry.outputCost === 'number' ? `$${trimCost(entry.outputCost)}` : '?';
|
|
72
|
+
return `${entry.model} (${input}/${output} per 1M)`;
|
|
73
|
+
}
|
|
74
|
+
/** Resolve against pi's live registry (existence + auth are authoritative). */
|
|
75
|
+
export class PiModelResolver {
|
|
76
|
+
registry;
|
|
77
|
+
constructor(registry) {
|
|
78
|
+
this.registry = registry;
|
|
79
|
+
}
|
|
80
|
+
async resolve(spec) {
|
|
81
|
+
if (spec === 'default') {
|
|
82
|
+
throw new ModelResolutionError('internal: default spec resolved by the runner');
|
|
83
|
+
}
|
|
84
|
+
const available = this.registry.getAvailable();
|
|
85
|
+
const matches = available.filter((model) => model.id === spec.id && (spec.provider ? model.provider === spec.provider : true));
|
|
86
|
+
const label = spec.provider ? `${spec.provider}:${spec.id}` : spec.id;
|
|
87
|
+
if (matches.length === 0) {
|
|
88
|
+
throw new ModelResolutionError(`unknown model "${label}" — available: ${this.describe() || '(none)'}`);
|
|
89
|
+
}
|
|
90
|
+
if (matches.length > 1) {
|
|
91
|
+
throw new ModelResolutionError(`"${spec.id}" is ambiguous (${matches.map((m) => m.provider).join(', ')}) — use "provider:model"`);
|
|
92
|
+
}
|
|
93
|
+
const model = matches[0];
|
|
94
|
+
if (!this.registry.hasConfiguredAuth(model)) {
|
|
95
|
+
throw new ModelResolutionError(`provider "${model.provider}" is not signed in — run \`deepclause login\``);
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
provider: model.provider,
|
|
99
|
+
id: model.id,
|
|
100
|
+
temperature: spec.temperature,
|
|
101
|
+
maxTokens: spec.maxTokens ?? model.maxTokens,
|
|
102
|
+
contextWindow: model.contextWindow,
|
|
103
|
+
reasoning: Boolean(model.reasoning),
|
|
104
|
+
reasoningLevel: spec.reasoning,
|
|
105
|
+
supportedThinkingLevels: supportedThinkingLevels(model),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
describe() {
|
|
109
|
+
return this.registry
|
|
110
|
+
.getAvailable()
|
|
111
|
+
.map((model) => `${model.provider}:${model.id}`)
|
|
112
|
+
.slice(0, 12)
|
|
113
|
+
.join(', ');
|
|
114
|
+
}
|
|
115
|
+
catalog() {
|
|
116
|
+
return this.registry.getAvailable().map((model) => ({
|
|
117
|
+
model: `${model.provider}:${model.id}`,
|
|
118
|
+
inputCost: model.cost?.input,
|
|
119
|
+
outputCost: model.cost?.output,
|
|
120
|
+
contextWindow: model.contextWindow,
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/** Resolve against the bundled model database (the `env` backend). */
|
|
125
|
+
export class EnvModelResolver {
|
|
126
|
+
sessionProvider;
|
|
127
|
+
constructor(sessionProvider) {
|
|
128
|
+
this.sessionProvider = sessionProvider;
|
|
129
|
+
}
|
|
130
|
+
async resolve(spec) {
|
|
131
|
+
if (spec === 'default') {
|
|
132
|
+
throw new ModelResolutionError('internal: default spec resolved by the runner');
|
|
133
|
+
}
|
|
134
|
+
const provider = spec.provider ?? this.sessionProvider;
|
|
135
|
+
const entry = lookupModel(spec.id);
|
|
136
|
+
const providerEntry = lookupProvider(provider);
|
|
137
|
+
return {
|
|
138
|
+
provider,
|
|
139
|
+
id: spec.id,
|
|
140
|
+
temperature: spec.temperature,
|
|
141
|
+
maxTokens: spec.maxTokens ?? entry?.limit.output,
|
|
142
|
+
contextWindow: entry?.limit.context,
|
|
143
|
+
reasoning: entry?.reasoning ?? false,
|
|
144
|
+
reasoningLevel: spec.reasoning,
|
|
145
|
+
reasoningType: providerEntry?.reasoning_type ?? 'none',
|
|
146
|
+
reasoningBudgetMap: providerEntry?.budget_map,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
describe() {
|
|
150
|
+
return Object.keys(getAllModels()).slice(0, 12).join(', ');
|
|
151
|
+
}
|
|
152
|
+
catalog() {
|
|
153
|
+
return Object.keys(getAllModels()).map((id) => ({ model: id }));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=model-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../../src/repl/model-resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/repl/render.d.ts
CHANGED
|
@@ -33,6 +33,10 @@ export interface ReplRendererOptions {
|
|
|
33
33
|
errorSink?: (text: string) => void;
|
|
34
34
|
/** Observe every event before filtering (used by the status tracker). */
|
|
35
35
|
onEvent?: (event: DMLEvent) => void;
|
|
36
|
+
/** Workspace root, used to resolve media paths for the non-image fallback. */
|
|
37
|
+
workspace?: string;
|
|
38
|
+
/** Hand images to the OS viewer (xdg-open/open) when the terminal cannot show them. */
|
|
39
|
+
openImages?: boolean;
|
|
36
40
|
}
|
|
37
41
|
/** Human-readable wall-clock duration: `450ms`, `1.2s`, `2m05s`. */
|
|
38
42
|
export declare function formatDuration(ms: number): string;
|
|
@@ -51,7 +55,10 @@ export declare class ReplRenderer {
|
|
|
51
55
|
private width;
|
|
52
56
|
private sink;
|
|
53
57
|
private errorSink;
|
|
58
|
+
private imageSink?;
|
|
54
59
|
private eventSink?;
|
|
60
|
+
private workspace?;
|
|
61
|
+
private openImages;
|
|
55
62
|
/** Frame key of the currently open streamed-text region, or null. */
|
|
56
63
|
private lastStreamFrame;
|
|
57
64
|
/** Reasoning region key and characters shown so far (for `summary` mode). */
|
|
@@ -70,6 +77,13 @@ export declare class ReplRenderer {
|
|
|
70
77
|
constructor(options?: ReplRendererOptions);
|
|
71
78
|
/** Replace the output sinks (used when moving into a TUI transcript). */
|
|
72
79
|
setSink(sink: (text: string) => void, errorSink?: (text: string) => void): void;
|
|
80
|
+
/**
|
|
81
|
+
* Route terminal-image blocks (from `image()`) into a TUI transcript. When no
|
|
82
|
+
* sink is set, `image()` writes the escape sequence to stdout directly.
|
|
83
|
+
*/
|
|
84
|
+
setImageSink(sink?: (lines: string[]) => void): void;
|
|
85
|
+
/** Current rendering width in cells. */
|
|
86
|
+
getWidth(): number;
|
|
73
87
|
/** Update the rendering width (TUI resize). */
|
|
74
88
|
setWidth(width: number): void;
|
|
75
89
|
/** Clean up and syntax-highlight a Prolog listing for display. */
|
|
@@ -93,7 +107,18 @@ export declare class ReplRenderer {
|
|
|
93
107
|
write(text: string): void;
|
|
94
108
|
/** Write a line to the normal sink. */
|
|
95
109
|
writeLine(text?: string): void;
|
|
96
|
-
/**
|
|
110
|
+
/**
|
|
111
|
+
* Write a terminal-image block (the escape sequence plus reserved blank rows).
|
|
112
|
+
* In a TUI this goes to the image sink; otherwise it is written raw.
|
|
113
|
+
*/
|
|
114
|
+
image(lines: string[]): void;
|
|
115
|
+
/**
|
|
116
|
+
* Render a `media` event (from `output(media(...))`): an inline terminal image
|
|
117
|
+
* when supported, otherwise an OSC-8 hyperlinked path (optionally opened).
|
|
118
|
+
*/
|
|
119
|
+
private renderMedia;
|
|
120
|
+
/** Hand a file to the OS viewer (best effort, never blocks). */
|
|
121
|
+
private openExternal;
|
|
97
122
|
flush(): void;
|
|
98
123
|
writeErrorLine(text: string): void;
|
|
99
124
|
/**
|
|
@@ -109,7 +134,14 @@ export declare class ReplRenderer {
|
|
|
109
134
|
private renderTaskActivity;
|
|
110
135
|
private describeTask;
|
|
111
136
|
private renderToolCall;
|
|
112
|
-
/**
|
|
137
|
+
/**
|
|
138
|
+
* A summary line for the captured output, plus a few of its lines.
|
|
139
|
+
*
|
|
140
|
+
* Which lines depends on where the useful end is: stdout is shown from the
|
|
141
|
+
* *head* (for structured output the head carries the shape — `{`, a first
|
|
142
|
+
* record — while the tail is arbitrary fragments), and stderr from the *tail*,
|
|
143
|
+
* where the diagnostic normally is. Full output is `--verbose`.
|
|
144
|
+
*/
|
|
113
145
|
private toolOutputLines;
|
|
114
146
|
/** Show/hide the live model-call indicator. */
|
|
115
147
|
private renderModelCall;
|
|
@@ -142,6 +174,8 @@ export declare class ReplRenderer {
|
|
|
142
174
|
private writeReasoning;
|
|
143
175
|
/** Keep a `thinking…` spinner running (restart once if the label differs). */
|
|
144
176
|
private ensureThinkingSpinner;
|
|
177
|
+
/** Keep a live indicator on screen while a tool (e.g. bash) is running. */
|
|
178
|
+
private ensureToolSpinner;
|
|
145
179
|
private announceReasoningTruncated;
|
|
146
180
|
/** Write a streamed chunk, prefixing it with its frame label on first use. */
|
|
147
181
|
private writeStream;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/repl/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/repl/render.ts"],"names":[],"mappings":"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"}
|