deepclause-sdk 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -12
- package/dist/agent.d.ts +2 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +1 -0
- package/dist/agent.js.map +1 -1
- package/dist/cli/config.d.ts +62 -2
- 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 +25 -0
- package/dist/cli/repl.d.ts.map +1 -1
- package/dist/cli/repl.js +165 -5
- package/dist/cli/repl.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +6 -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-src/deepclause_mi.pl +196 -9
- package/dist/repl/agent.d.ts +18 -0
- package/dist/repl/agent.d.ts.map +1 -1
- package/dist/repl/agent.js +47 -3
- 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 +25 -0
- package/dist/repl/harness-tools.d.ts.map +1 -1
- package/dist/repl/harness-tools.js +73 -2
- 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 +12 -2
- package/dist/repl/index.d.ts.map +1 -1
- package/dist/repl/index.js +5 -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 +28 -1
- package/dist/repl/render.d.ts.map +1 -1
- package/dist/repl/render.js +94 -1
- package/dist/repl/render.js.map +1 -1
- package/dist/repl/session.d.ts +68 -0
- package/dist/repl/session.d.ts.map +1 -1
- package/dist/repl/session.js +206 -8
- package/dist/repl/session.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 +13 -2
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +101 -16
- package/dist/runner.js.map +1 -1
- package/dist/system/assets/docs/AGENT_PROMPT.md +75 -1
- package/dist/system/assets/docs/DML_REFERENCE.md +32 -0
- package/dist/types.d.ts +56 -1
- 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 +7 -5
- package/src/prolog-src/deepclause_mi.pl +196 -9
|
@@ -74,7 +74,11 @@ Editing is a **transaction**:
|
|
|
74
74
|
- `assert(clause)` — add one clause (new predicates only).
|
|
75
75
|
- `assert_many(clauses)` — add a block of clauses in written order.
|
|
76
76
|
- `retract(clause)` / `delete("Name/Arity")` — remove clauses / a whole predicate.
|
|
77
|
-
- `end_turn` — validate and commit the change (records a version).
|
|
77
|
+
- `end_turn` — validate and commit the change (records a version). It also
|
|
78
|
+
probes the predicates you changed and returns a `warnings` list (shown as `⚠`)
|
|
79
|
+
when a helper looks nondeterministic — e.g. yields many solutions on fresh
|
|
80
|
+
variables because it is missing a commit. Fix such warnings with `once/1` or
|
|
81
|
+
`!` before moving on; they are exactly the predicates that flood `execute`.
|
|
78
82
|
- `rollback` — discard the transaction and restore the last committed module.
|
|
79
83
|
|
|
80
84
|
Edits are **refused** while no transaction is open, and after `end_turn` you must
|
|
@@ -88,6 +92,44 @@ Other tools: `reference(topic)` reads the DeepClause docs (`language`,
|
|
|
88
92
|
End your turn by replying with text and no tool call. To ask the human a
|
|
89
93
|
question, write it in that final message.
|
|
90
94
|
|
|
95
|
+
# Writing files and images
|
|
96
|
+
|
|
97
|
+
- `write_file(path, content)` writes any workspace file (creating parent
|
|
98
|
+
directories). The content is an ordinary string, so use it for SVG, JSON, or
|
|
99
|
+
scripts instead of building them inside a shell command. Then
|
|
100
|
+
`show_image(path)` displays an image.
|
|
101
|
+
- From DML, `output(media("path.png"))` shows a workspace image and
|
|
102
|
+
`output(media{svg: Svg})` shows inline SVG. `save_image(Media, "out.svg")`
|
|
103
|
+
writes a reference to a file.
|
|
104
|
+
- `task("a red fox in snow", media(X))` generates an image and binds `X` to its
|
|
105
|
+
workspace path; display it with `output(media(X))`.
|
|
106
|
+
- Avoid multi-line literals inside `exec(bash(command: "…"))` (heredocs): `\n`
|
|
107
|
+
and `"` must be escaped for DML and again for the shell, and it breaks easily.
|
|
108
|
+
Use `write_file` for content; if you must use the shell, write the file with a
|
|
109
|
+
single-line `printf '%s' '…' > path`, not a heredoc.
|
|
110
|
+
|
|
111
|
+
# Choosing models
|
|
112
|
+
|
|
113
|
+
`with_model(Spec, Goal)` runs `Goal` on a different model, optionally at a
|
|
114
|
+
reasoning level. It applies to the `task/N`, `prompt/N` and `sample_token/N`
|
|
115
|
+
calls inside `Goal` (not to judgments):
|
|
116
|
+
|
|
117
|
+
```prolog
|
|
118
|
+
with_model("openai:gpt-4o-mini", prompt("Classify as billing/orders: {Msg}", Team)).
|
|
119
|
+
with_model("anthropic:claude-sonnet-4#high", task("Reason carefully: {Q}", Out)).
|
|
120
|
+
with_model(model{provider: "google", id: "gemini-2.5-pro", temperature: 0.2}, Goal).
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Use it to route cheap work to a small model and hard work to a strong one, or to
|
|
124
|
+
tune a harness to a specific model. The innermost `with_model` wins; a nested
|
|
125
|
+
`with_reasoning/2` overrides the spec's reasoning level.
|
|
126
|
+
|
|
127
|
+
The models available this session are listed under **AVAILABLE MODELS** (above),
|
|
128
|
+
including their catalog price in USD per 1M tokens (input/output); call the
|
|
129
|
+
`models` tool for the current list and the active default. Prefer the cheapest
|
|
130
|
+
model that can do the job, and a `with_model` spec must name one of those
|
|
131
|
+
`provider:model` ids.
|
|
132
|
+
|
|
91
133
|
# Your goal
|
|
92
134
|
|
|
93
135
|
Satisfy the user's request — by answering directly, by running existing module
|
|
@@ -407,6 +449,7 @@ More patterns: `reference("patterns")`; shapes: `reference("examples")`.
|
|
|
407
449
|
- [exec/2](#exec2)
|
|
408
450
|
- [Tool Definitions](#tool-definitions)
|
|
409
451
|
- [Tool Scoping](#tool-scoping)
|
|
452
|
+
- [Model Selection](#model-selection)
|
|
410
453
|
- [system/1, user/1](#memory-predicates)
|
|
411
454
|
- [output/1, yield/1, log/1](#output-predicates)
|
|
412
455
|
- [answer/1](#answer1)
|
|
@@ -767,6 +810,37 @@ agent_main :-
|
|
|
767
810
|
|
|
768
811
|
---
|
|
769
812
|
|
|
813
|
+
### Model Selection
|
|
814
|
+
|
|
815
|
+
#### `with_model(+Spec, +Goal)`
|
|
816
|
+
|
|
817
|
+
Run `Goal` with a different model — and optionally a reasoning level — for every
|
|
818
|
+
`task/N`, `prompt/N` and `sample_token/N` call inside it. Judgments
|
|
819
|
+
(`choose/rate/verify/probability`) are not affected.
|
|
820
|
+
|
|
821
|
+
```prolog
|
|
822
|
+
% a cheap model for classification
|
|
823
|
+
with_model("openai:gpt-4o-mini",
|
|
824
|
+
prompt("Classify as billing/orders/account: {Message}", Team)).
|
|
825
|
+
|
|
826
|
+
% a strong model with high reasoning, only for the hard step
|
|
827
|
+
with_model("anthropic:claude-sonnet-4#high",
|
|
828
|
+
task("Review this diff and list defects:\n{Diff}", Notes)).
|
|
829
|
+
|
|
830
|
+
% full control with a dict
|
|
831
|
+
with_model(model{provider: "google", id: "gemini-2.5-pro",
|
|
832
|
+
temperature: 0.2, maxTokens: 8192}, Goal).
|
|
833
|
+
```
|
|
834
|
+
|
|
835
|
+
`Spec` is a string — `"provider:model"`, `"provider/model"`, `"model"`, each with
|
|
836
|
+
an optional `#reasoning` suffix (`off|minimal|low|medium|high|xhigh|max`) — or a
|
|
837
|
+
`model{provider, id, temperature, maxTokens, reasoning}` dict. The innermost
|
|
838
|
+
`with_model` wins, and a nested `with_reasoning/2` overrides the spec's reasoning.
|
|
839
|
+
The default is the session's active model. An unknown or unsigned-in model fails
|
|
840
|
+
with a clear error.
|
|
841
|
+
|
|
842
|
+
---
|
|
843
|
+
|
|
770
844
|
### Memory Predicates
|
|
771
845
|
|
|
772
846
|
Memory predicates build the conversation context sent to the LLM.
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
- [exec/2](#exec2)
|
|
12
12
|
- [Tool Definitions](#tool-definitions)
|
|
13
13
|
- [Tool Scoping](#tool-scoping)
|
|
14
|
+
- [Model Selection](#model-selection)
|
|
14
15
|
- [system/1, user/1](#memory-predicates)
|
|
15
16
|
- [output/1, yield/1, log/1](#output-predicates)
|
|
16
17
|
- [answer/1](#answer1)
|
|
@@ -371,6 +372,37 @@ agent_main :-
|
|
|
371
372
|
|
|
372
373
|
---
|
|
373
374
|
|
|
375
|
+
### Model Selection
|
|
376
|
+
|
|
377
|
+
#### `with_model(+Spec, +Goal)`
|
|
378
|
+
|
|
379
|
+
Run `Goal` with a different model — and optionally a reasoning level — for every
|
|
380
|
+
`task/N`, `prompt/N` and `sample_token/N` call inside it. Judgments
|
|
381
|
+
(`choose/rate/verify/probability`) are not affected.
|
|
382
|
+
|
|
383
|
+
```prolog
|
|
384
|
+
% a cheap model for classification
|
|
385
|
+
with_model("openai:gpt-4o-mini",
|
|
386
|
+
prompt("Classify as billing/orders/account: {Message}", Team)).
|
|
387
|
+
|
|
388
|
+
% a strong model with high reasoning, only for the hard step
|
|
389
|
+
with_model("anthropic:claude-sonnet-4#high",
|
|
390
|
+
task("Review this diff and list defects:\n{Diff}", Notes)).
|
|
391
|
+
|
|
392
|
+
% full control with a dict
|
|
393
|
+
with_model(model{provider: "google", id: "gemini-2.5-pro",
|
|
394
|
+
temperature: 0.2, maxTokens: 8192}, Goal).
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
`Spec` is a string — `"provider:model"`, `"provider/model"`, `"model"`, each with
|
|
398
|
+
an optional `#reasoning` suffix (`off|minimal|low|medium|high|xhigh|max`) — or a
|
|
399
|
+
`model{provider, id, temperature, maxTokens, reasoning}` dict. The innermost
|
|
400
|
+
`with_model` wins, and a nested `with_reasoning/2` overrides the spec's reasoning.
|
|
401
|
+
The default is the session's active model. An unknown or unsigned-in model fails
|
|
402
|
+
with a clear error.
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
374
406
|
### Memory Predicates
|
|
375
407
|
|
|
376
408
|
Memory predicates build the conversation context sent to the LLM.
|
package/dist/types.d.ts
CHANGED
|
@@ -48,6 +48,58 @@ export interface MediaRef {
|
|
|
48
48
|
path: string;
|
|
49
49
|
mimeType: string;
|
|
50
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* A parsed `model_spec` from a `with_model/2` scope: a provider+id with optional
|
|
53
|
+
* temperature/maxTokens/reasoning overrides. `default`/`none` means "no override".
|
|
54
|
+
*/
|
|
55
|
+
export type ModelSpec = 'default' | {
|
|
56
|
+
provider?: string;
|
|
57
|
+
id: string;
|
|
58
|
+
temperature?: number;
|
|
59
|
+
maxTokens?: number;
|
|
60
|
+
/** Reasoning level (`off|minimal|low|medium|high|xhigh|max`). */
|
|
61
|
+
reasoning?: string;
|
|
62
|
+
};
|
|
63
|
+
/** A fully resolved model profile used for one call. */
|
|
64
|
+
export interface ResolvedModel {
|
|
65
|
+
provider: string;
|
|
66
|
+
id: string;
|
|
67
|
+
temperature?: number;
|
|
68
|
+
maxTokens?: number;
|
|
69
|
+
/** Context window, for nested compaction thresholds. */
|
|
70
|
+
contextWindow?: number;
|
|
71
|
+
/** Whether the model supports a reasoning/thinking mode. */
|
|
72
|
+
reasoning: boolean;
|
|
73
|
+
/** Requested reasoning level for this scope, if any. */
|
|
74
|
+
reasoningLevel?: string;
|
|
75
|
+
/** For the env backend: how reasoning maps to provider options. */
|
|
76
|
+
reasoningType?: 'effort' | 'budget_tokens' | 'thinking_config' | 'none';
|
|
77
|
+
reasoningBudgetMap?: Record<string, number>;
|
|
78
|
+
/** For the pi backend: thinking levels the model accepts. */
|
|
79
|
+
supportedThinkingLevels?: string[];
|
|
80
|
+
}
|
|
81
|
+
/** Request passed to an injected image-generation backend (see `task/…, media(X))`). */
|
|
82
|
+
export interface ImageGenerationRequest {
|
|
83
|
+
/** The prompt (the task description, interpolated). */
|
|
84
|
+
prompt: string;
|
|
85
|
+
/** Attached input images, for image-to-image. */
|
|
86
|
+
refs?: MediaRef[];
|
|
87
|
+
/** Optional square/edge size in px. */
|
|
88
|
+
size?: number;
|
|
89
|
+
signal?: AbortSignal;
|
|
90
|
+
}
|
|
91
|
+
export interface ImageGenerationResult {
|
|
92
|
+
/** Workspace-relative path of the written image. */
|
|
93
|
+
path: string;
|
|
94
|
+
mimeType: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* A host image generator. The pi backend implements this on top of pi's image
|
|
98
|
+
* models and credential store; tests inject a canned one.
|
|
99
|
+
*/
|
|
100
|
+
export interface ImageBackend {
|
|
101
|
+
generate(request: ImageGenerationRequest): Promise<ImageGenerationResult>;
|
|
102
|
+
}
|
|
51
103
|
/** Resolved media bytes attached to a backend message (base64). */
|
|
52
104
|
export interface LLMBackendMedia {
|
|
53
105
|
mimeType: string;
|
|
@@ -86,6 +138,8 @@ export interface LLMBackendRequest {
|
|
|
86
138
|
onText?: (chunk: string) => void;
|
|
87
139
|
/** Receives reasoning/thinking text as it becomes available (display only). */
|
|
88
140
|
onReasoning?: (chunk: string) => void;
|
|
141
|
+
/** Per-call model override from `with_model/2`. */
|
|
142
|
+
target?: ResolvedModel;
|
|
89
143
|
}
|
|
90
144
|
export interface LLMBackendResponse {
|
|
91
145
|
text: string;
|
|
@@ -187,6 +241,7 @@ export interface DMLEvent extends FrameEventMeta {
|
|
|
187
241
|
path?: string;
|
|
188
242
|
mimeType: string;
|
|
189
243
|
data?: string;
|
|
244
|
+
kind?: string;
|
|
190
245
|
};
|
|
191
246
|
/** Model-call lifecycle (only for 'model_call' events). */
|
|
192
247
|
modelCallState?: 'started' | 'completed' | 'failed';
|
|
@@ -364,7 +419,7 @@ export type FrameKind = 'query' | 'nested' | 'object';
|
|
|
364
419
|
*/
|
|
365
420
|
export interface TypedVar {
|
|
366
421
|
name: string;
|
|
367
|
-
type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object';
|
|
422
|
+
type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object' | 'media';
|
|
368
423
|
itemType?: TypedVar['type'];
|
|
369
424
|
}
|
|
370
425
|
/**
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render a Mermaid `flowchart` (the subset `visualize` asks the model for) as a
|
|
3
|
+
* Unicode tree, so a diagram can be shown inline in the REPL, in a tool result,
|
|
4
|
+
* or over a terminal that has no image protocol.
|
|
5
|
+
*
|
|
6
|
+
* No dependencies and no browser: the diagram is parsed into nodes and edges and
|
|
7
|
+
* laid out as an indented flow. `parseMermaidFlowchart` / `buildFlowTree` are
|
|
8
|
+
* also consumed by `svg.ts` for the terminal-image path.
|
|
9
|
+
*
|
|
10
|
+
* Supported: `flowchart TD|TB|BT|LR|RL`, node shapes `[..] (..) {..} ([..])
|
|
11
|
+
* [[..]] ((..)) {{..}}`, quoted labels, chained edges (`A --> B --> C`),
|
|
12
|
+
* connectors `--> --- -.-> ==> -.- ===`, edge labels (`-->|x|`, `-- x -->`),
|
|
13
|
+
* and `subgraph`/`end` (grouping is flattened).
|
|
14
|
+
*/
|
|
15
|
+
export type NodeShape = 'rect' | 'round' | 'diamond' | 'stadium' | 'subroutine' | 'circle' | 'hexagon';
|
|
16
|
+
export interface MermaidNode {
|
|
17
|
+
id: string;
|
|
18
|
+
/** The display label (defaults to the node id). */
|
|
19
|
+
label: string;
|
|
20
|
+
shape: NodeShape;
|
|
21
|
+
}
|
|
22
|
+
export interface MermaidEdge {
|
|
23
|
+
from: string;
|
|
24
|
+
to: string;
|
|
25
|
+
/** Edge label (`-->|yes|` or `-- yes -->`). */
|
|
26
|
+
label?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ParsedFlowchart {
|
|
29
|
+
/** `TD`, `LR`, … (defaults to `TD`). */
|
|
30
|
+
direction: string;
|
|
31
|
+
nodes: MermaidNode[];
|
|
32
|
+
edges: MermaidEdge[];
|
|
33
|
+
}
|
|
34
|
+
export interface FlowTreeNode {
|
|
35
|
+
id: string;
|
|
36
|
+
label: string;
|
|
37
|
+
shape: NodeShape;
|
|
38
|
+
/** Label on the edge from the parent (undefined for a root). */
|
|
39
|
+
edgeLabel?: string;
|
|
40
|
+
/** True for a back/duplicate reference (the subtree is not expanded again). */
|
|
41
|
+
repeated?: boolean;
|
|
42
|
+
children: FlowTreeNode[];
|
|
43
|
+
}
|
|
44
|
+
/** Parse a Mermaid flowchart into nodes and edges. */
|
|
45
|
+
export declare function parseMermaidFlowchart(source: string): ParsedFlowchart;
|
|
46
|
+
/** Build the root(s) of a tree view, marking back/duplicate references. */
|
|
47
|
+
export declare function buildFlowTree(parsed: ParsedFlowchart): FlowTreeNode[];
|
|
48
|
+
/** Lay a tree view out as indented Unicode lines. */
|
|
49
|
+
export declare function renderFlowTree(roots: FlowTreeNode[]): string[];
|
|
50
|
+
/**
|
|
51
|
+
* Render Mermaid flowchart source as terminal text. Falls back to the trimmed
|
|
52
|
+
* source when the input is not a recognizable flowchart.
|
|
53
|
+
*/
|
|
54
|
+
export declare function renderMermaidAscii(source: string): string;
|
|
55
|
+
//# sourceMappingURL=ascii.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ascii.d.ts","sourceRoot":"","sources":["../../src/visualize/ascii.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEvG,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AA0HD,sDAAsD;AACtD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAsCrE;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,YAAY,EAAE,CA+CrE;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAkB9D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMzD"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render a Mermaid `flowchart` (the subset `visualize` asks the model for) as a
|
|
3
|
+
* Unicode tree, so a diagram can be shown inline in the REPL, in a tool result,
|
|
4
|
+
* or over a terminal that has no image protocol.
|
|
5
|
+
*
|
|
6
|
+
* No dependencies and no browser: the diagram is parsed into nodes and edges and
|
|
7
|
+
* laid out as an indented flow. `parseMermaidFlowchart` / `buildFlowTree` are
|
|
8
|
+
* also consumed by `svg.ts` for the terminal-image path.
|
|
9
|
+
*
|
|
10
|
+
* Supported: `flowchart TD|TB|BT|LR|RL`, node shapes `[..] (..) {..} ([..])
|
|
11
|
+
* [[..]] ((..)) {{..}}`, quoted labels, chained edges (`A --> B --> C`),
|
|
12
|
+
* connectors `--> --- -.-> ==> -.- ===`, edge labels (`-->|x|`, `-- x -->`),
|
|
13
|
+
* and `subgraph`/`end` (grouping is flattened).
|
|
14
|
+
*/
|
|
15
|
+
const HEADER = /^\s*(?:flowchart|graph)\s+(TD|TB|BT|LR|RL)\b/i;
|
|
16
|
+
const CONNECTOR = /^(-{2,3}>|={2,}>|-\.-+>|-\.-|--o|--x|-{2,}|={2,})/;
|
|
17
|
+
/** Shape open/close pairs, longest opener first. */
|
|
18
|
+
const SHAPES = [
|
|
19
|
+
{ open: '([', close: '])', shape: 'stadium' },
|
|
20
|
+
{ open: '[[', close: ']]', shape: 'subroutine' },
|
|
21
|
+
{ open: '((', close: '))', shape: 'circle' },
|
|
22
|
+
{ open: '{{', close: '}}', shape: 'hexagon' },
|
|
23
|
+
{ open: '[', close: ']', shape: 'rect' },
|
|
24
|
+
{ open: '(', close: ')', shape: 'round' },
|
|
25
|
+
{ open: '{', close: '}', shape: 'diamond' },
|
|
26
|
+
];
|
|
27
|
+
/** Normalize `-- label -->` into `-->|label|` so one edge form is parsed. */
|
|
28
|
+
function normalizeEdgeLabels(line) {
|
|
29
|
+
return line
|
|
30
|
+
.replace(/--\s+([^|>{}[\]]+?)\s+-->/g, '-->|$1|')
|
|
31
|
+
.replace(/--\s+([^|>{}[\]]+?)\s+---/g, '---|$1|');
|
|
32
|
+
}
|
|
33
|
+
/** Read one node reference (`id` plus an optional shape) starting at `i`. */
|
|
34
|
+
function readNode(text, i) {
|
|
35
|
+
let j = i;
|
|
36
|
+
while (j < text.length && /\s/.test(text[j])) {
|
|
37
|
+
j += 1;
|
|
38
|
+
}
|
|
39
|
+
const idMatch = /^([A-Za-z_][A-Za-z0-9_-]*|\d+)/.exec(text.slice(j));
|
|
40
|
+
if (!idMatch) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
const id = idMatch[1];
|
|
44
|
+
j += id.length;
|
|
45
|
+
let label = id;
|
|
46
|
+
let shape = 'rect';
|
|
47
|
+
const spec = SHAPES.find((s) => text.startsWith(s.open, j));
|
|
48
|
+
if (spec) {
|
|
49
|
+
const start = j + spec.open.length;
|
|
50
|
+
const close = text.indexOf(spec.close, start);
|
|
51
|
+
if (close !== -1) {
|
|
52
|
+
label = text.slice(start, close).trim();
|
|
53
|
+
shape = spec.shape;
|
|
54
|
+
j = close + spec.close.length;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if ((label.startsWith('"') && label.endsWith('"')) || (label.startsWith("'") && label.endsWith("'"))) {
|
|
58
|
+
label = label.slice(1, -1);
|
|
59
|
+
}
|
|
60
|
+
return { node: { id, label: label || id, shape }, next: j };
|
|
61
|
+
}
|
|
62
|
+
/** Parse a single flowchart line into edges (and register any new nodes). */
|
|
63
|
+
function parseLine(line, nodes, edges) {
|
|
64
|
+
const text = normalizeEdgeLabels(line.trim().replace(/;+\s*$/, ''));
|
|
65
|
+
if (!text) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const register = (node) => {
|
|
69
|
+
const existing = nodes.get(node.id);
|
|
70
|
+
if (existing) {
|
|
71
|
+
// Prefer a real label over a bare id reference.
|
|
72
|
+
if (node.label !== node.id && existing.label === existing.id) {
|
|
73
|
+
nodes.set(node.id, { ...existing, label: node.label, shape: node.shape });
|
|
74
|
+
}
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
nodes.set(node.id, node);
|
|
78
|
+
};
|
|
79
|
+
let cursor = 0;
|
|
80
|
+
let prev = readNode(text, cursor);
|
|
81
|
+
if (!prev) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
register(prev.node);
|
|
85
|
+
cursor = prev.next;
|
|
86
|
+
for (;;) {
|
|
87
|
+
while (cursor < text.length && /\s/.test(text[cursor])) {
|
|
88
|
+
cursor += 1;
|
|
89
|
+
}
|
|
90
|
+
if (cursor >= text.length) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const connector = CONNECTOR.exec(text.slice(cursor));
|
|
94
|
+
if (!connector) {
|
|
95
|
+
const extra = readNode(text, cursor);
|
|
96
|
+
if (!extra) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
register(extra.node);
|
|
100
|
+
prev = extra;
|
|
101
|
+
cursor = extra.next;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
cursor += connector[1].length;
|
|
105
|
+
while (cursor < text.length && /\s/.test(text[cursor])) {
|
|
106
|
+
cursor += 1;
|
|
107
|
+
}
|
|
108
|
+
let label;
|
|
109
|
+
if (text[cursor] === '|') {
|
|
110
|
+
const close = text.indexOf('|', cursor + 1);
|
|
111
|
+
if (close !== -1) {
|
|
112
|
+
label = text.slice(cursor + 1, close).trim() || undefined;
|
|
113
|
+
cursor = close + 1;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const next = readNode(text, cursor);
|
|
117
|
+
if (!next) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
register(next.node);
|
|
121
|
+
edges.push({ from: prev.node.id, to: next.node.id, label });
|
|
122
|
+
prev = next;
|
|
123
|
+
cursor = next.next;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** Parse a Mermaid flowchart into nodes and edges. */
|
|
127
|
+
export function parseMermaidFlowchart(source) {
|
|
128
|
+
const nodes = new Map();
|
|
129
|
+
const edges = [];
|
|
130
|
+
let direction = 'TD';
|
|
131
|
+
let subgraphs = 0;
|
|
132
|
+
let sawHeader = false;
|
|
133
|
+
for (const rawLine of (source ?? '').split('\n')) {
|
|
134
|
+
const trimmed = rawLine.replace(/\s+$/, '').trim();
|
|
135
|
+
if (!trimmed || trimmed.startsWith('%%')) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const header = HEADER.exec(trimmed);
|
|
139
|
+
if (header) {
|
|
140
|
+
direction = header[1].toUpperCase() === 'TB' ? 'TD' : header[1].toUpperCase();
|
|
141
|
+
sawHeader = true;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
// Only parse a body once a flowchart header has been seen, so prose that
|
|
145
|
+
// was not a diagram is not mistaken for a list of bare nodes.
|
|
146
|
+
if (!sawHeader) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (/^subgraph\b/i.test(trimmed)) {
|
|
150
|
+
subgraphs += 1;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (/^end\b/i.test(trimmed) && subgraphs > 0) {
|
|
154
|
+
subgraphs -= 1;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
if (/^(classDef|class|style|linkStyle|click|direction)\b/i.test(trimmed)) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
parseLine(trimmed, nodes, edges);
|
|
161
|
+
}
|
|
162
|
+
return { direction, nodes: [...nodes.values()], edges };
|
|
163
|
+
}
|
|
164
|
+
/** Build the root(s) of a tree view, marking back/duplicate references. */
|
|
165
|
+
export function buildFlowTree(parsed) {
|
|
166
|
+
const byId = new Map(parsed.nodes.map((n) => [n.id, n]));
|
|
167
|
+
const children = new Map();
|
|
168
|
+
const indegree = new Map();
|
|
169
|
+
for (const node of parsed.nodes) {
|
|
170
|
+
children.set(node.id, []);
|
|
171
|
+
indegree.set(node.id, 0);
|
|
172
|
+
}
|
|
173
|
+
for (const edge of parsed.edges) {
|
|
174
|
+
if (!byId.has(edge.from)) {
|
|
175
|
+
byId.set(edge.from, { id: edge.from, label: edge.from, shape: 'rect' });
|
|
176
|
+
}
|
|
177
|
+
if (!byId.has(edge.to)) {
|
|
178
|
+
byId.set(edge.to, { id: edge.to, label: edge.to, shape: 'rect' });
|
|
179
|
+
}
|
|
180
|
+
indegree.set(edge.to, (indegree.get(edge.to) ?? 0) + 1);
|
|
181
|
+
indegree.set(edge.from, indegree.get(edge.from) ?? 0);
|
|
182
|
+
if (!children.has(edge.from)) {
|
|
183
|
+
children.set(edge.from, []);
|
|
184
|
+
}
|
|
185
|
+
children.get(edge.from).push(edge);
|
|
186
|
+
}
|
|
187
|
+
const build = (id, edgeLabel, seen) => {
|
|
188
|
+
const node = byId.get(id) ?? { id, label: id, shape: 'rect' };
|
|
189
|
+
const repeated = seen.has(id);
|
|
190
|
+
const treeNode = {
|
|
191
|
+
id,
|
|
192
|
+
label: node.label,
|
|
193
|
+
shape: node.shape,
|
|
194
|
+
edgeLabel,
|
|
195
|
+
repeated,
|
|
196
|
+
children: [],
|
|
197
|
+
};
|
|
198
|
+
if (repeated) {
|
|
199
|
+
return treeNode;
|
|
200
|
+
}
|
|
201
|
+
seen.add(id);
|
|
202
|
+
for (const edge of children.get(id) ?? []) {
|
|
203
|
+
treeNode.children.push(build(edge.to, edge.label, seen));
|
|
204
|
+
}
|
|
205
|
+
return treeNode;
|
|
206
|
+
};
|
|
207
|
+
const roots = parsed.nodes.filter((n) => (indegree.get(n.id) ?? 0) === 0).map((n) => n.id);
|
|
208
|
+
const rootIds = roots.length > 0 ? roots : parsed.nodes.slice(0, 1).map((n) => n.id);
|
|
209
|
+
return rootIds.map((id) => build(id, undefined, new Set()));
|
|
210
|
+
}
|
|
211
|
+
/** Lay a tree view out as indented Unicode lines. */
|
|
212
|
+
export function renderFlowTree(roots) {
|
|
213
|
+
const lines = [];
|
|
214
|
+
const emit = (node, prefix, isLast) => {
|
|
215
|
+
const edge = node.edgeLabel ? `(${node.edgeLabel}) ` : '';
|
|
216
|
+
lines.push(`${prefix}${isLast ? '└─▶ ' : '├─▶ '}${edge}${node.label}${node.repeated ? ' ↻' : ''}`);
|
|
217
|
+
const childPrefix = prefix + (isLast ? ' ' : '│ ');
|
|
218
|
+
node.children.forEach((child, index) => emit(child, childPrefix, index === node.children.length - 1));
|
|
219
|
+
};
|
|
220
|
+
for (const root of roots) {
|
|
221
|
+
if (roots.length === 1) {
|
|
222
|
+
lines.push(root.label);
|
|
223
|
+
root.children.forEach((child, index) => emit(child, '', index === root.children.length - 1));
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
emit(root, '', root === roots[roots.length - 1]);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return lines;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Render Mermaid flowchart source as terminal text. Falls back to the trimmed
|
|
233
|
+
* source when the input is not a recognizable flowchart.
|
|
234
|
+
*/
|
|
235
|
+
export function renderMermaidAscii(source) {
|
|
236
|
+
const parsed = parseMermaidFlowchart(source);
|
|
237
|
+
if (parsed.nodes.length === 0) {
|
|
238
|
+
return (source ?? '').trim();
|
|
239
|
+
}
|
|
240
|
+
return renderFlowTree(buildFlowTree(parsed)).join('\n');
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=ascii.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ascii.js","sourceRoot":"","sources":["../../src/visualize/ascii.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared "diagram → terminal image" step.
|
|
3
|
+
*
|
|
4
|
+
* Both `/viz` (user-typed) and the authoring agent's `visualize` tool use this,
|
|
5
|
+
* so a diagram is painted the same way everywhere: resolve the terminal's image
|
|
6
|
+
* protocol, rasterize the SVG (no browser), and encode an inline image. Returns
|
|
7
|
+
* undefined when the terminal has no image support or no rasterizer is
|
|
8
|
+
* installed, so the caller can fall back to the ASCII tree.
|
|
9
|
+
*/
|
|
10
|
+
import { type GraphicsMode } from './graphics.js';
|
|
11
|
+
export interface DiagramImageSource {
|
|
12
|
+
svg: string;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
}
|
|
16
|
+
export interface DiagramImageOptions {
|
|
17
|
+
/** `auto` (default) or a forced protocol; `ascii`/`off` disable the image. */
|
|
18
|
+
graphics?: GraphicsMode;
|
|
19
|
+
maxWidthCells?: number;
|
|
20
|
+
maxHeightCells?: number;
|
|
21
|
+
}
|
|
22
|
+
/** Encode a diagram as inline terminal-image lines, or undefined. */
|
|
23
|
+
export declare function renderDiagramImage(source: DiagramImageSource, options?: DiagramImageOptions): Promise<string[] | undefined>;
|
|
24
|
+
//# sourceMappingURL=display.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/visualize/display.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAgD,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAEhG,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qEAAqE;AACrE,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAe/B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared "diagram → terminal image" step.
|
|
3
|
+
*
|
|
4
|
+
* Both `/viz` (user-typed) and the authoring agent's `visualize` tool use this,
|
|
5
|
+
* so a diagram is painted the same way everywhere: resolve the terminal's image
|
|
6
|
+
* protocol, rasterize the SVG (no browser), and encode an inline image. Returns
|
|
7
|
+
* undefined when the terminal has no image support or no rasterizer is
|
|
8
|
+
* installed, so the caller can fall back to the ASCII tree.
|
|
9
|
+
*/
|
|
10
|
+
import { rasterizeSvg } from './raster.js';
|
|
11
|
+
import { renderTerminalImage, resolveGraphicsProtocol } from './graphics.js';
|
|
12
|
+
/** Encode a diagram as inline terminal-image lines, or undefined. */
|
|
13
|
+
export async function renderDiagramImage(source, options = {}) {
|
|
14
|
+
const protocol = resolveGraphicsProtocol(options.graphics ?? 'auto');
|
|
15
|
+
if (!protocol) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const png = await rasterizeSvg(source.svg, { width: source.width, height: source.height });
|
|
19
|
+
if (!png) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const image = renderTerminalImage(png, {
|
|
23
|
+
protocol,
|
|
24
|
+
maxWidthCells: options.maxWidthCells ?? 80,
|
|
25
|
+
maxHeightCells: options.maxHeightCells,
|
|
26
|
+
});
|
|
27
|
+
return image?.lines;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=display.js.map
|