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 @@
|
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/repl/backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript context compaction for the REPL (and, later, the one-shot runner).
|
|
3
|
+
*
|
|
4
|
+
* This ports pi's compaction algorithm (`core/compaction/compaction.ts`) to the
|
|
5
|
+
* SDK's `MemoryMessage[]` model. It intentionally shares pi's shapes:
|
|
6
|
+
*
|
|
7
|
+
* - chars/4 token estimation (`estimateMemoryTokens`);
|
|
8
|
+
* - `shouldCompact` threshold semantics (`contextWindow - reserveTokens`);
|
|
9
|
+
* - the cut-point search that keeps a recent tail;
|
|
10
|
+
* - the structured summarization prompts (Goal / Constraints / Progress /
|
|
11
|
+
* Decisions / Next Steps / Critical Context).
|
|
12
|
+
*
|
|
13
|
+
* Unlike pi's version it does not use `SessionEntry`/`AgentMessage` trees: the
|
|
14
|
+
* REPL stores memory as `message{role, content}` Prolog terms, mapped to
|
|
15
|
+
* `MemoryMessage[]` on the host. The summarization call goes through the active
|
|
16
|
+
* `LLMBackend`, so it reuses pi's model, credentials, streaming, and cancellation.
|
|
17
|
+
*/
|
|
18
|
+
import type { LLMBackend, LLMUsage, MemoryMessage } from '../types.js';
|
|
19
|
+
import { DEFAULT_COMPACTION_SETTINGS } from '@earendil-works/pi-coding-agent';
|
|
20
|
+
/**
|
|
21
|
+
* pi's compaction settings (same shape as its `core/compaction` settings).
|
|
22
|
+
* `DEFAULT_COMPACTION_SETTINGS` and the threshold come straight from pi; only
|
|
23
|
+
* the cut/summarization below is the SDK's port.
|
|
24
|
+
*/
|
|
25
|
+
export interface CompactionSettings {
|
|
26
|
+
enabled: boolean;
|
|
27
|
+
reserveTokens: number;
|
|
28
|
+
keepRecentTokens: number;
|
|
29
|
+
}
|
|
30
|
+
export { DEFAULT_COMPACTION_SETTINGS };
|
|
31
|
+
/** Leading marker of a compacted checkpoint message. */
|
|
32
|
+
export declare const SUMMARY_PREFIX = "[Context summary]";
|
|
33
|
+
/** Conservative chars/4 estimate for one message. */
|
|
34
|
+
export declare function estimateMessageTokens(message: MemoryMessage): number;
|
|
35
|
+
/** Conservative chars/4 estimate for a message list. */
|
|
36
|
+
export declare function estimateMemoryTokens(messages: MemoryMessage[]): number;
|
|
37
|
+
/** Total context tokens from a usage record, preferring the provider total. */
|
|
38
|
+
export declare function calculateContextTokens(usage: LLMUsage): number;
|
|
39
|
+
/** Whether the context has grown past `contextWindow - reserveTokens`. */
|
|
40
|
+
export declare function shouldCompact(contextTokens: number, contextWindow: number, settings?: CompactionSettings): boolean;
|
|
41
|
+
export interface CompactionCut {
|
|
42
|
+
/** Index of the first message to keep. `0` means "nothing to summarize". */
|
|
43
|
+
cutIndex: number;
|
|
44
|
+
/** Messages to hand to the summarizer. */
|
|
45
|
+
messagesToSummarize: MemoryMessage[];
|
|
46
|
+
/** Messages retained verbatim. */
|
|
47
|
+
keptMessages: MemoryMessage[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Walk from the newest message backwards, accumulating estimated tokens, until
|
|
51
|
+
* `keepRecentTokens` is reached. The cut is then moved back to the nearest
|
|
52
|
+
* `user` boundary so an assistant turn is never separated from its prompt.
|
|
53
|
+
*
|
|
54
|
+
* System messages are never summarized (they carry the checkpoint and the
|
|
55
|
+
* runtime contract) and are excluded from the accumulated size, matching the
|
|
56
|
+
* intent of pi's "never cut the current system prompt" rule.
|
|
57
|
+
*/
|
|
58
|
+
export declare function findCompactionCut(messages: MemoryMessage[], keepRecentTokens?: number): CompactionCut;
|
|
59
|
+
/** The most recent compacted checkpoint, if the memory already contains one. */
|
|
60
|
+
export declare function findExistingSummary(messages: MemoryMessage[]): string | undefined;
|
|
61
|
+
/** Wrap a summary as the checkpoint message prepended to compacted memory. */
|
|
62
|
+
export declare function buildSummaryMessage(summary: string): MemoryMessage;
|
|
63
|
+
/** Ported verbatim from pi's `SUMMARIZATION_SYSTEM_PROMPT`. */
|
|
64
|
+
export declare const SUMMARIZATION_SYSTEM_PROMPT = "You are a context summarization assistant. Your task is to read a conversation between a user and an AI assistant, then produce a structured summary following the exact format specified.\n\nDo NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.";
|
|
65
|
+
/** Serialize a conversation to text so the model summarizes instead of continuing. */
|
|
66
|
+
export declare function serializeMemoryConversation(messages: MemoryMessage[]): string;
|
|
67
|
+
/** Build the user-side summarization prompt, wrapping the conversation in tags. */
|
|
68
|
+
export declare function buildSummarizationPrompt(messages: MemoryMessage[], previousSummary?: string, customInstructions?: string): string;
|
|
69
|
+
export interface GenerateMemorySummaryParams {
|
|
70
|
+
/** Messages to summarize (already cut). System messages are ignored. */
|
|
71
|
+
messages: MemoryMessage[];
|
|
72
|
+
previousSummary?: string;
|
|
73
|
+
backend: LLMBackend;
|
|
74
|
+
model: string;
|
|
75
|
+
reserveTokens?: number;
|
|
76
|
+
signal?: AbortSignal;
|
|
77
|
+
customInstructions?: string;
|
|
78
|
+
}
|
|
79
|
+
/** Generate a structured summary of `messages` through the active backend. */
|
|
80
|
+
export declare function generateMemorySummary(params: GenerateMemorySummaryParams): Promise<{
|
|
81
|
+
summary: string;
|
|
82
|
+
usage?: LLMUsage;
|
|
83
|
+
}>;
|
|
84
|
+
export interface CompactMemoryParams {
|
|
85
|
+
messages: MemoryMessage[];
|
|
86
|
+
backend: LLMBackend;
|
|
87
|
+
model: string;
|
|
88
|
+
contextWindow?: number;
|
|
89
|
+
settings?: CompactionSettings;
|
|
90
|
+
signal?: AbortSignal;
|
|
91
|
+
customInstructions?: string;
|
|
92
|
+
/** Compact even when the context is below the threshold (manual `compact.`). */
|
|
93
|
+
force?: boolean;
|
|
94
|
+
}
|
|
95
|
+
export type CompactMemoryReason = 'applied' | 'disabled' | 'below-threshold' | 'nothing-to-summarize' | 'empty-summary' | 'no-reduction' | 'failed';
|
|
96
|
+
export interface CompactMemoryResult {
|
|
97
|
+
applied: boolean;
|
|
98
|
+
reason: CompactMemoryReason;
|
|
99
|
+
messages: MemoryMessage[];
|
|
100
|
+
summary?: string;
|
|
101
|
+
tokensBefore: number;
|
|
102
|
+
tokensAfter: number;
|
|
103
|
+
usage?: LLMUsage;
|
|
104
|
+
error?: string;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Compact `messages` if needed (or `force`d). Returns the rewritten list: the
|
|
108
|
+
* preserved system messages, the new checkpoint, then the recent tail.
|
|
109
|
+
*/
|
|
110
|
+
export declare function compactMemory(params: CompactMemoryParams): Promise<CompactMemoryResult>;
|
|
111
|
+
export interface MemoryCompactionEvent {
|
|
112
|
+
scope: 'loop' | 'session';
|
|
113
|
+
trigger: 'before_model_call' | 'before_user_message';
|
|
114
|
+
action: 'applied' | 'skipped' | 'failed';
|
|
115
|
+
beforeTokens: number;
|
|
116
|
+
afterTokens: number;
|
|
117
|
+
error?: string;
|
|
118
|
+
usage?: LLMUsage;
|
|
119
|
+
}
|
|
120
|
+
/** Turn a `CompactMemoryResult` into the fields consumed by a `memory_compaction` event. */
|
|
121
|
+
export declare function toCompactionEvent(scope: MemoryCompactionEvent['scope'], trigger: MemoryCompactionEvent['trigger'], result: CompactMemoryResult): MemoryCompactionEvent;
|
|
122
|
+
//# sourceMappingURL=compaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/repl/compaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript context compaction for the REPL (and, later, the one-shot runner).
|
|
3
|
+
*
|
|
4
|
+
* This ports pi's compaction algorithm (`core/compaction/compaction.ts`) to the
|
|
5
|
+
* SDK's `MemoryMessage[]` model. It intentionally shares pi's shapes:
|
|
6
|
+
*
|
|
7
|
+
* - chars/4 token estimation (`estimateMemoryTokens`);
|
|
8
|
+
* - `shouldCompact` threshold semantics (`contextWindow - reserveTokens`);
|
|
9
|
+
* - the cut-point search that keeps a recent tail;
|
|
10
|
+
* - the structured summarization prompts (Goal / Constraints / Progress /
|
|
11
|
+
* Decisions / Next Steps / Critical Context).
|
|
12
|
+
*
|
|
13
|
+
* Unlike pi's version it does not use `SessionEntry`/`AgentMessage` trees: the
|
|
14
|
+
* REPL stores memory as `message{role, content}` Prolog terms, mapped to
|
|
15
|
+
* `MemoryMessage[]` on the host. The summarization call goes through the active
|
|
16
|
+
* `LLMBackend`, so it reuses pi's model, credentials, streaming, and cancellation.
|
|
17
|
+
*/
|
|
18
|
+
import { DEFAULT_COMPACTION_SETTINGS, shouldCompact as piShouldCompact, } from '@earendil-works/pi-coding-agent';
|
|
19
|
+
export { DEFAULT_COMPACTION_SETTINGS };
|
|
20
|
+
/** Leading marker of a compacted checkpoint message. */
|
|
21
|
+
export const SUMMARY_PREFIX = '[Context summary]';
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// Token accounting
|
|
24
|
+
// =============================================================================
|
|
25
|
+
/** Per-message overhead, matching the SDK's historical estimate. */
|
|
26
|
+
const PER_MESSAGE_OVERHEAD = 4;
|
|
27
|
+
/** Conservative chars/4 estimate for one message. */
|
|
28
|
+
export function estimateMessageTokens(message) {
|
|
29
|
+
return PER_MESSAGE_OVERHEAD + Math.max(1, Math.ceil(message.content.length / 4));
|
|
30
|
+
}
|
|
31
|
+
/** Conservative chars/4 estimate for a message list. */
|
|
32
|
+
export function estimateMemoryTokens(messages) {
|
|
33
|
+
return messages.reduce((total, message) => total + estimateMessageTokens(message), 0);
|
|
34
|
+
}
|
|
35
|
+
/** Total context tokens from a usage record, preferring the provider total. */
|
|
36
|
+
export function calculateContextTokens(usage) {
|
|
37
|
+
return usage.totalTokens || (usage.inputTokens + usage.outputTokens + (usage.cacheReadTokens ?? 0) + (usage.cacheWriteTokens ?? 0));
|
|
38
|
+
}
|
|
39
|
+
/** Whether the context has grown past `contextWindow - reserveTokens`. */
|
|
40
|
+
export function shouldCompact(contextTokens, contextWindow, settings = DEFAULT_COMPACTION_SETTINGS) {
|
|
41
|
+
// Guard the unknown-window case (pi assumes a positive window).
|
|
42
|
+
if (contextWindow <= 0) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return piShouldCompact(contextTokens, contextWindow, settings);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Walk from the newest message backwards, accumulating estimated tokens, until
|
|
49
|
+
* `keepRecentTokens` is reached. The cut is then moved back to the nearest
|
|
50
|
+
* `user` boundary so an assistant turn is never separated from its prompt.
|
|
51
|
+
*
|
|
52
|
+
* System messages are never summarized (they carry the checkpoint and the
|
|
53
|
+
* runtime contract) and are excluded from the accumulated size, matching the
|
|
54
|
+
* intent of pi's "never cut the current system prompt" rule.
|
|
55
|
+
*/
|
|
56
|
+
export function findCompactionCut(messages, keepRecentTokens = DEFAULT_COMPACTION_SETTINGS.keepRecentTokens) {
|
|
57
|
+
let accumulated = 0;
|
|
58
|
+
let candidate = messages.length;
|
|
59
|
+
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
60
|
+
const message = messages[index];
|
|
61
|
+
if (message.role === 'system') {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
accumulated += estimateMessageTokens(message);
|
|
65
|
+
if (accumulated >= keepRecentTokens) {
|
|
66
|
+
candidate = index;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (candidate >= messages.length) {
|
|
71
|
+
return { cutIndex: 0, messagesToSummarize: [], keptMessages: messages.slice() };
|
|
72
|
+
}
|
|
73
|
+
// Move back to a user boundary (the start of a turn), skipping assistants.
|
|
74
|
+
let cutIndex = candidate;
|
|
75
|
+
while (cutIndex > 0 && messages[cutIndex]?.role !== 'user') {
|
|
76
|
+
cutIndex -= 1;
|
|
77
|
+
}
|
|
78
|
+
const messagesToSummarize = messages
|
|
79
|
+
.slice(0, cutIndex)
|
|
80
|
+
.filter((message) => message.role !== 'system');
|
|
81
|
+
const preservedSystem = messages
|
|
82
|
+
.slice(0, cutIndex)
|
|
83
|
+
.filter((message) => message.role === 'system');
|
|
84
|
+
const keptMessages = [...preservedSystem, ...messages.slice(cutIndex)];
|
|
85
|
+
return { cutIndex, messagesToSummarize, keptMessages };
|
|
86
|
+
}
|
|
87
|
+
// =============================================================================
|
|
88
|
+
// Summary detection
|
|
89
|
+
// =============================================================================
|
|
90
|
+
/** The most recent compacted checkpoint, if the memory already contains one. */
|
|
91
|
+
export function findExistingSummary(messages) {
|
|
92
|
+
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
93
|
+
const message = messages[index];
|
|
94
|
+
if (message.role === 'system' && message.content.startsWith(SUMMARY_PREFIX)) {
|
|
95
|
+
return message.content.slice(SUMMARY_PREFIX.length).trim();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
/** Wrap a summary as the checkpoint message prepended to compacted memory. */
|
|
101
|
+
export function buildSummaryMessage(summary) {
|
|
102
|
+
return { role: 'system', content: `${SUMMARY_PREFIX}\n${summary.trim()}` };
|
|
103
|
+
}
|
|
104
|
+
// =============================================================================
|
|
105
|
+
// Summarization prompts (ported from pi)
|
|
106
|
+
// =============================================================================
|
|
107
|
+
/** Ported verbatim from pi's `SUMMARIZATION_SYSTEM_PROMPT`. */
|
|
108
|
+
export const SUMMARIZATION_SYSTEM_PROMPT = `You are a context summarization assistant. Your task is to read a conversation between a user and an AI assistant, then produce a structured summary following the exact format specified.
|
|
109
|
+
|
|
110
|
+
Do NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.`;
|
|
111
|
+
/** Ported from pi's `SUMMARIZATION_PROMPT`. */
|
|
112
|
+
const SUMMARIZATION_PROMPT = `The messages above are a conversation to summarize. Create a structured context checkpoint summary that another LLM will use to continue the work.
|
|
113
|
+
|
|
114
|
+
Use this EXACT format:
|
|
115
|
+
|
|
116
|
+
## Goal
|
|
117
|
+
[What is the user trying to accomplish? Can be multiple items if the session covers different tasks.]
|
|
118
|
+
|
|
119
|
+
## Constraints & Preferences
|
|
120
|
+
- [Any constraints, preferences, or requirements mentioned by user]
|
|
121
|
+
- [Or "(none)" if none were mentioned]
|
|
122
|
+
|
|
123
|
+
## Progress
|
|
124
|
+
### Done
|
|
125
|
+
- [x] [Completed tasks/changes]
|
|
126
|
+
|
|
127
|
+
### In Progress
|
|
128
|
+
- [ ] [Current work]
|
|
129
|
+
|
|
130
|
+
### Blocked
|
|
131
|
+
- [Issues preventing progress, if any]
|
|
132
|
+
|
|
133
|
+
## Key Decisions
|
|
134
|
+
- **[Decision]**: [Brief rationale]
|
|
135
|
+
|
|
136
|
+
## Next Steps
|
|
137
|
+
1. [Ordered list of what should happen next]
|
|
138
|
+
|
|
139
|
+
## Critical Context
|
|
140
|
+
- [Any data, examples, or references needed to continue]
|
|
141
|
+
- [Or "(none)" if not applicable]
|
|
142
|
+
|
|
143
|
+
Keep each section concise. Preserve exact file paths, function names, and error messages.`;
|
|
144
|
+
/** Ported from pi's `UPDATE_SUMMARIZATION_INSTRUCTIONS`. */
|
|
145
|
+
const UPDATE_SUMMARIZATION_INSTRUCTIONS = `Update the existing structured summary with new information. RULES:
|
|
146
|
+
- PRESERVE all existing information from the previous summary
|
|
147
|
+
- ADD new progress, decisions, and context from the new messages
|
|
148
|
+
- UPDATE the Progress section: move items from "In Progress" to "Done" when completed
|
|
149
|
+
- UPDATE "Next Steps" based on what was accomplished
|
|
150
|
+
- PRESERVE exact file paths, function names, and error messages
|
|
151
|
+
- If something is no longer relevant, you may remove it
|
|
152
|
+
|
|
153
|
+
Use this EXACT format:
|
|
154
|
+
|
|
155
|
+
## Goal
|
|
156
|
+
[Preserve existing goals, add new ones if the task expanded]
|
|
157
|
+
|
|
158
|
+
## Constraints & Preferences
|
|
159
|
+
- [Preserve existing, add new ones discovered]
|
|
160
|
+
|
|
161
|
+
## Progress
|
|
162
|
+
### Done
|
|
163
|
+
- [x] [Include previously done items AND newly completed items]
|
|
164
|
+
|
|
165
|
+
### In Progress
|
|
166
|
+
- [ ] [Current work - update based on progress]
|
|
167
|
+
|
|
168
|
+
### Blocked
|
|
169
|
+
- [Current blockers - remove if resolved]
|
|
170
|
+
|
|
171
|
+
## Key Decisions
|
|
172
|
+
- **[Decision]**: [Brief rationale] (preserve all previous, add new)
|
|
173
|
+
|
|
174
|
+
## Next Steps
|
|
175
|
+
1. [Update based on current state]
|
|
176
|
+
|
|
177
|
+
## Critical Context
|
|
178
|
+
- [Preserve important context, add new if needed]
|
|
179
|
+
|
|
180
|
+
Keep each section concise. Preserve exact file paths, function names, and error messages.`;
|
|
181
|
+
const UPDATE_SUMMARIZATION_PROMPT = `The messages above are NEW conversation messages to incorporate into the existing summary provided in <previous-summary> tags.
|
|
182
|
+
|
|
183
|
+
${UPDATE_SUMMARIZATION_INSTRUCTIONS}`;
|
|
184
|
+
/** Serialize a conversation to text so the model summarizes instead of continuing. */
|
|
185
|
+
export function serializeMemoryConversation(messages) {
|
|
186
|
+
return messages
|
|
187
|
+
.map((message) => {
|
|
188
|
+
const label = message.role === 'assistant'
|
|
189
|
+
? 'Assistant'
|
|
190
|
+
: message.role === 'system'
|
|
191
|
+
? 'System'
|
|
192
|
+
: 'User';
|
|
193
|
+
return `[${label}]: ${message.content}`;
|
|
194
|
+
})
|
|
195
|
+
.join('\n\n');
|
|
196
|
+
}
|
|
197
|
+
/** Build the user-side summarization prompt, wrapping the conversation in tags. */
|
|
198
|
+
export function buildSummarizationPrompt(messages, previousSummary, customInstructions) {
|
|
199
|
+
const conversationText = serializeMemoryConversation(messages);
|
|
200
|
+
let basePrompt = previousSummary ? UPDATE_SUMMARIZATION_PROMPT : SUMMARIZATION_PROMPT;
|
|
201
|
+
if (customInstructions) {
|
|
202
|
+
basePrompt = `${basePrompt}\n\nAdditional focus: ${customInstructions}`;
|
|
203
|
+
}
|
|
204
|
+
let promptText = `<conversation>\n${conversationText}\n</conversation>\n\n`;
|
|
205
|
+
if (previousSummary) {
|
|
206
|
+
promptText += `<previous-summary>\n${previousSummary}\n</previous-summary>\n\n`;
|
|
207
|
+
}
|
|
208
|
+
promptText += basePrompt;
|
|
209
|
+
return promptText;
|
|
210
|
+
}
|
|
211
|
+
/** Generate a structured summary of `messages` through the active backend. */
|
|
212
|
+
export async function generateMemorySummary(params) {
|
|
213
|
+
const conversation = params.messages.filter((message) => message.role !== 'system');
|
|
214
|
+
const promptText = buildSummarizationPrompt(conversation, params.previousSummary, params.customInstructions);
|
|
215
|
+
const reserveTokens = params.reserveTokens ?? DEFAULT_COMPACTION_SETTINGS.reserveTokens;
|
|
216
|
+
const maxTokens = Math.max(512, Math.min(Math.floor(0.8 * reserveTokens), 8192));
|
|
217
|
+
const response = await params.backend.complete({
|
|
218
|
+
messages: [
|
|
219
|
+
{ role: 'system', content: SUMMARIZATION_SYSTEM_PROMPT },
|
|
220
|
+
{ role: 'user', content: promptText },
|
|
221
|
+
],
|
|
222
|
+
temperature: 0.3,
|
|
223
|
+
maxTokens,
|
|
224
|
+
signal: params.signal,
|
|
225
|
+
});
|
|
226
|
+
if (response.finishReason === 'error' || response.finishReason === 'aborted') {
|
|
227
|
+
throw new Error(`summarization ${response.finishReason}`);
|
|
228
|
+
}
|
|
229
|
+
const summary = (response.text ?? '').trim();
|
|
230
|
+
if (!summary) {
|
|
231
|
+
throw new Error('summarization returned an empty summary');
|
|
232
|
+
}
|
|
233
|
+
return { summary, usage: response.usage };
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Compact `messages` if needed (or `force`d). Returns the rewritten list: the
|
|
237
|
+
* preserved system messages, the new checkpoint, then the recent tail.
|
|
238
|
+
*/
|
|
239
|
+
export async function compactMemory(params) {
|
|
240
|
+
const settings = params.settings ?? DEFAULT_COMPACTION_SETTINGS;
|
|
241
|
+
const messages = params.messages;
|
|
242
|
+
const tokensBefore = estimateMemoryTokens(messages);
|
|
243
|
+
if (!settings.enabled && !params.force) {
|
|
244
|
+
return { applied: false, reason: 'disabled', messages, tokensBefore, tokensAfter: tokensBefore };
|
|
245
|
+
}
|
|
246
|
+
if (!params.force
|
|
247
|
+
&& params.contextWindow !== undefined
|
|
248
|
+
&& !shouldCompact(tokensBefore, params.contextWindow, settings)) {
|
|
249
|
+
return { applied: false, reason: 'below-threshold', messages, tokensBefore, tokensAfter: tokensBefore };
|
|
250
|
+
}
|
|
251
|
+
const cut = findCompactionCut(messages, settings.keepRecentTokens);
|
|
252
|
+
if (cut.messagesToSummarize.length === 0) {
|
|
253
|
+
return { applied: false, reason: 'nothing-to-summarize', messages, tokensBefore, tokensAfter: tokensBefore };
|
|
254
|
+
}
|
|
255
|
+
const previousSummary = findExistingSummary(messages);
|
|
256
|
+
let generated;
|
|
257
|
+
try {
|
|
258
|
+
generated = await generateMemorySummary({
|
|
259
|
+
messages: cut.messagesToSummarize,
|
|
260
|
+
previousSummary,
|
|
261
|
+
backend: params.backend,
|
|
262
|
+
model: params.model,
|
|
263
|
+
reserveTokens: settings.reserveTokens,
|
|
264
|
+
signal: params.signal,
|
|
265
|
+
customInstructions: params.customInstructions,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
return {
|
|
270
|
+
applied: false,
|
|
271
|
+
reason: 'failed',
|
|
272
|
+
messages,
|
|
273
|
+
tokensBefore,
|
|
274
|
+
tokensAfter: tokensBefore,
|
|
275
|
+
error: error instanceof Error ? error.message : String(error),
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
const rewritten = [...cut.keptMessages, buildSummaryMessage(generated.summary)];
|
|
279
|
+
const tokensAfter = estimateMemoryTokens(rewritten);
|
|
280
|
+
if (tokensAfter >= tokensBefore) {
|
|
281
|
+
return {
|
|
282
|
+
applied: false,
|
|
283
|
+
reason: 'no-reduction',
|
|
284
|
+
messages,
|
|
285
|
+
tokensBefore,
|
|
286
|
+
tokensAfter,
|
|
287
|
+
summary: generated.summary,
|
|
288
|
+
usage: generated.usage,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
return {
|
|
292
|
+
applied: true,
|
|
293
|
+
reason: 'applied',
|
|
294
|
+
messages: rewritten,
|
|
295
|
+
summary: generated.summary,
|
|
296
|
+
tokensBefore,
|
|
297
|
+
tokensAfter,
|
|
298
|
+
usage: generated.usage,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/** Turn a `CompactMemoryResult` into the fields consumed by a `memory_compaction` event. */
|
|
302
|
+
export function toCompactionEvent(scope, trigger, result) {
|
|
303
|
+
const action = result.applied
|
|
304
|
+
? 'applied'
|
|
305
|
+
: result.reason === 'failed' || result.reason === 'empty-summary'
|
|
306
|
+
? 'failed'
|
|
307
|
+
: 'skipped';
|
|
308
|
+
return {
|
|
309
|
+
scope,
|
|
310
|
+
trigger,
|
|
311
|
+
action,
|
|
312
|
+
beforeTokens: result.tokensBefore,
|
|
313
|
+
afterTokens: result.tokensAfter,
|
|
314
|
+
error: result.error,
|
|
315
|
+
usage: result.usage,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=compaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/repl/compaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness export helpers (M2).
|
|
3
|
+
*
|
|
4
|
+
* The actual serialization lives in Prolog (`export_harness/3`); this module
|
|
5
|
+
* builds the header, applies the optional `--skill` wrapper, and defines the
|
|
6
|
+
* result shape.
|
|
7
|
+
*/
|
|
8
|
+
export interface HarnessExportOptions {
|
|
9
|
+
/** Override the header comment line (used by deterministic tests). */
|
|
10
|
+
header?: string;
|
|
11
|
+
/** Mark the export as a skill (header only). Define `agent_main` in the harness for `run`. */
|
|
12
|
+
skill?: boolean;
|
|
13
|
+
/** Output path; defaults to `harness.dml` in the workspace. */
|
|
14
|
+
path?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface HarnessExportResult {
|
|
17
|
+
path: string;
|
|
18
|
+
clauses: number;
|
|
19
|
+
tools: number;
|
|
20
|
+
scripts: number;
|
|
21
|
+
}
|
|
22
|
+
/** Header used when the caller does not supply one. */
|
|
23
|
+
export declare function buildHarnessHeader(info?: {
|
|
24
|
+
timestamp?: string;
|
|
25
|
+
backend?: string;
|
|
26
|
+
model?: string;
|
|
27
|
+
}): string;
|
|
28
|
+
/** Strip the informational header line, e.g. for byte-stability comparisons. */
|
|
29
|
+
export declare function stripExportHeader(text: string): string;
|
|
30
|
+
//# sourceMappingURL=export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/repl/export.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,oBAAoB;IACnC,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8FAA8F;IAC9F,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,CAAC,IAAI,GAAE;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACX,GAAG,MAAM,CAMd;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness export helpers (M2).
|
|
3
|
+
*
|
|
4
|
+
* The actual serialization lives in Prolog (`export_harness/3`); this module
|
|
5
|
+
* builds the header, applies the optional `--skill` wrapper, and defines the
|
|
6
|
+
* result shape.
|
|
7
|
+
*/
|
|
8
|
+
/** Header used when the caller does not supply one. */
|
|
9
|
+
export function buildHarnessHeader(info = {}) {
|
|
10
|
+
const parts = ['DML harness — exported'];
|
|
11
|
+
if (info.timestamp)
|
|
12
|
+
parts.push(info.timestamp);
|
|
13
|
+
if (info.backend)
|
|
14
|
+
parts.push(`backend: ${info.backend}`);
|
|
15
|
+
if (info.model)
|
|
16
|
+
parts.push(`model: ${info.model}`);
|
|
17
|
+
return parts.join(' ');
|
|
18
|
+
}
|
|
19
|
+
/** Strip the informational header line, e.g. for byte-stability comparisons. */
|
|
20
|
+
export function stripExportHeader(text) {
|
|
21
|
+
return text.replace(/^% DML harness[^\n]*\n/, '');
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/repl/export.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,uDAAuD;AACvD,MAAM,UAAU,kBAAkB,CAAC,OAI/B,EAAE;IACJ,MAAM,KAAK,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers shared by the REPL session/frame layers.
|
|
3
|
+
*
|
|
4
|
+
* The frame stack itself lives in the Prolog runtime (`session_frame/4`,
|
|
5
|
+
* `step_frame/4`) and is driven by `DMLRunner.runFrame`. These helpers cover
|
|
6
|
+
* the Prolog-term marshalling and small presentation utilities the REPL needs.
|
|
7
|
+
*/
|
|
8
|
+
import type { FrameKind } from '../types.js';
|
|
9
|
+
/** Unwrap a swipl-wasm tagged value (`{ $t, v }`) into a plain JS value. */
|
|
10
|
+
export declare function plainValue(value: unknown): unknown;
|
|
11
|
+
/** Convert a JS value into a Prolog term string, mirroring DMLRunner.toPrologTerm. */
|
|
12
|
+
export declare function toPrologTerm(value: unknown): string;
|
|
13
|
+
/** Quote a string as a single-line Prolog string literal. */
|
|
14
|
+
export declare function quotePrologString(value: string): string;
|
|
15
|
+
/** Quote a string as a Prolog atom when needed. */
|
|
16
|
+
export declare function quoteAtom(value: string): string;
|
|
17
|
+
/** Build a `params{...}` dict term from a JS record (keys lowercased). */
|
|
18
|
+
export declare function buildParamsTerm(params: Record<string, unknown>): string;
|
|
19
|
+
/** Human label for a frame kind, used by the renderer. */
|
|
20
|
+
export declare function frameKindLabel(kind: FrameKind): string;
|
|
21
|
+
//# sourceMappingURL=frames.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frames.d.ts","sourceRoot":"","sources":["../../src/repl/frames.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQlD;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAuBnD;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAKvE;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAUtD"}
|