@este.systems/dsc 1.3.0 → 1.5.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/CHANGELOG.md +19 -1
- package/README.md +12 -2
- package/dist/agent.js +68 -39
- package/dist/agent.js.map +1 -1
- package/dist/context.js +131 -0
- package/dist/context.js.map +1 -0
- package/dist/memory/extraction.js +111 -0
- package/dist/memory/extraction.js.map +1 -0
- package/dist/memory/graph.js +326 -0
- package/dist/memory/graph.js.map +1 -0
- package/dist/memory/index.js +175 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/tools.js +155 -0
- package/dist/memory/tools.js.map +1 -0
- package/dist/slash_dispatch.js +120 -0
- package/dist/slash_dispatch.js.map +1 -1
- package/dist/store.js +2 -0
- package/dist/store.js.map +1 -1
- package/dist/tui/App.js +2 -1
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/PlanLine.js +16 -0
- package/dist/tui/PlanLine.js.map +1 -0
- package/dist/tui.js +121 -17
- package/dist/tui.js.map +1 -1
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.5.0] - 2026-06-13
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **Native memory graph** (replaces the Python `mcp-memory` server). A SQLite-backed knowledge graph that extracts propositions from conversations, links them with typed edges (supports, contradicts, instantiates, analogizes, relates), and surfaces them automatically before every agent turn. Zero Python deps — everything runs in-process. Enable with `"memory": { "enabled": true }` in `~/.config/dsc/config.json`. The agent can also call `mcp_memory_*` tools directly (query, store, tensions, stats, decay, node detail). If you were running the Python `mcp-memory` server, remove its `mcp.servers.memory` block from config.json to avoid duplicate tools.
|
|
14
|
+
|
|
15
|
+
## [1.4.0] - 2026-06-13
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- **`/plan` mode** — type `/plan add auth middleware` and the agent creates a step-by-step task list. Use `/plan:show` to view progress, `/plan:go` to execute the next pending task, `/plan:done` to mark it complete, `/plan:skip [n]` to skip, `/plan:clear` to discard. A compact progress line (`plan: add auth [✓✓◌✗] 2/4 (50%)`) sits above the prompt. The plan persists across turns but is session-scoped (reset on `/clear`).
|
|
19
|
+
- **Project memory (auto-context)** — dsc now indexes `AGENTS.md`, `README.md`, `CHANGELOG.md`, and any files the agent reads or edits during the session. Before each turn, it searches the index for keywords from your prompt and prepends the most relevant paragraphs. The agent sees project docs without needing to grep for them first. Zero-dependency TF-IDF-style keyword matching; no embeddings or vector DB. Rebuilt on `/clear`.
|
|
20
|
+
- **Parallel read-only tool execution** — when the model issues multiple read-only tools in a single turn (`read_file`, `grep`, `glob`, `list_dir`, `mcp_files_*`), they now run concurrently. Read-write tools still execute sequentially (with approval gating). Cuts latency on multi-file operations.
|
|
21
|
+
- **`/review` command** — `/review` (or `/review 2` for the second-last response) asks the agent to critically examine its last answer, point out errors or omissions, and provide an improved version. Based on the Reflexion self-critique pattern.
|
|
22
|
+
- **Context compression** — tool outputs larger than 8 000 characters are now intelligently compressed before entering the message history. The first 60% and last 30% are kept; the middle is replaced with a one-line truncation notice. Browsing a 500-line file no longer consumes the entire context window in one read.
|
|
23
|
+
- **Tuned auto-compact defaults** — `DSC_AUTO_COMPACT_AT` default lowered from 50 000 to 20 000 (keeps per-turn input cost lower), `DSC_AUTO_COMPACT_KEEP` raised from 4 to 8 (keeps more recent turns verbatim before summarizing). Both overridable via env vars.
|
|
24
|
+
|
|
10
25
|
## [1.3.0] - 2026-06-13
|
|
11
26
|
|
|
12
27
|
### Added
|
|
@@ -263,7 +278,10 @@ Initial public release.
|
|
|
263
278
|
- DECSTBM-pinned status bar.
|
|
264
279
|
- Cross-platform packaging (`npm pack` + per-OS installer scripts).
|
|
265
280
|
|
|
266
|
-
[Unreleased]: https://github.com/EsteSystems/dsc/compare/v1.
|
|
281
|
+
[Unreleased]: https://github.com/EsteSystems/dsc/compare/v1.5.0...HEAD
|
|
282
|
+
[1.5.0]: https://github.com/EsteSystems/dsc/compare/v1.4.0...v1.5.0
|
|
283
|
+
[1.4.0]: https://github.com/EsteSystems/dsc/compare/v1.3.0...v1.4.0
|
|
284
|
+
[1.3.0]: https://github.com/EsteSystems/dsc/compare/v1.2.1...v1.3.0
|
|
267
285
|
[1.2.1]: https://github.com/EsteSystems/dsc/compare/v1.2.0...v1.2.1
|
|
268
286
|
[1.2.0]: https://github.com/EsteSystems/dsc/compare/v1.1.1...v1.2.0
|
|
269
287
|
[1.1.1]: https://github.com/EsteSystems/dsc/compare/v1.1.0...v1.1.1
|
package/README.md
CHANGED
|
@@ -364,6 +364,8 @@ ghost-text suggestion previews the match as you type.
|
|
|
364
364
|
| `/transcript` | Print the full conversation, including any messages compaction archived. |
|
|
365
365
|
| `/compact [N]` | Summarize older turns into a synthetic block (kept in the system prompt) and move them to the archive. Keeps the last `N` user turns verbatim (default 4). Cumulative across re-runs. |
|
|
366
366
|
| `/edit [text]` | Open `$VISUAL`/`$EDITOR`/`vi` on a tmp file; the saved content runs as the next prompt. |
|
|
367
|
+
| `/review [n]` | Critically review the last (or Nth-last) assistant response — identifies errors, omissions, and offers an improved version. |
|
|
368
|
+
| `/plan <description>` | Generate a step-by-step implementation plan for the task. The agent outputs a numbered task list; a compact progress indicator appears above the prompt. `/plan:show` to review, `/plan:go` to execute the next pending task, `/plan:done` to mark complete, `/plan:skip [n]` to skip, `/plan:clear` to discard. |
|
|
367
369
|
| `/version` | Print version (dsc, Node, platform/arch). |
|
|
368
370
|
| `/help` | Show the in-app help. |
|
|
369
371
|
| `/exit` | Quit. |
|
|
@@ -499,6 +501,13 @@ so the model knows the source. The dsc-specific file appears last and
|
|
|
499
501
|
effectively overrides earlier ones on conflict. Files re-read every turn
|
|
500
502
|
— edit them and the next request picks up the change.
|
|
501
503
|
|
|
504
|
+
dsc also automatically indexes AGENTS.md, README.md, CHANGELOG.md,
|
|
505
|
+
and any files the agent has read or edited during the session. Before
|
|
506
|
+
each turn it searches these for keywords matching your prompt and
|
|
507
|
+
prepends the most relevant paragraphs so the agent has project context
|
|
508
|
+
without needing to grep for it. The index is in-memory and rebuilt
|
|
509
|
+
on `/clear`.
|
|
510
|
+
|
|
502
511
|
`/instructions` lists which files are currently active and shows their
|
|
503
512
|
content. Empty files are treated as absent. Files larger than 64 KB are
|
|
504
513
|
skipped silently — keep instruction files reasonably short, both for the
|
|
@@ -651,7 +660,7 @@ so the model retains semantic context. Cumulative — re-running `/compact`
|
|
|
651
660
|
folds the prior summary into the new one.
|
|
652
661
|
|
|
653
662
|
Auto-compact runs the same routine after any successful turn whose
|
|
654
|
-
estimated context exceeds `DSC_AUTO_COMPACT_AT` tokens (default
|
|
663
|
+
estimated context exceeds `DSC_AUTO_COMPACT_AT` tokens (default 20 000;
|
|
655
664
|
set `0` / `off` / `false` to disable).
|
|
656
665
|
|
|
657
666
|
`/transcript` prints the full conversation, including archived chunks,
|
|
@@ -703,7 +712,8 @@ XDG variables observed: `XDG_CONFIG_HOME`, `XDG_STATE_HOME`, `XDG_DATA_HOME`.
|
|
|
703
712
|
| Var | Default | Purpose |
|
|
704
713
|
|---|---|---|
|
|
705
714
|
| `DEEPSEEK_API_KEY` | (read from config file) | Overrides the `api_key` in `config.json`. |
|
|
706
|
-
| `DSC_AUTO_COMPACT_AT` | `
|
|
715
|
+
| `DSC_AUTO_COMPACT_AT` | `20000` | Token threshold for auto-compact. `0`/`off`/`false` disables. |
|
|
716
|
+
| `DSC_AUTO_COMPACT_KEEP` | `8` | User turns kept verbatim before the compact cut-point. |
|
|
707
717
|
| `DSC_AUTO_CONTINUE` | `0` | When the agent hits the per-turn tool-call cap, auto-grant up to N extra 24-call budgets before stopping. `0`/`off`/`false` keeps the manual "type continue" prompt. |
|
|
708
718
|
| `DSC_NO_AUDIT` | (off) | `1` disables the JSONL audit log. |
|
|
709
719
|
| `DSC_SEARCH_PROVIDER` | (config or `ddg`) | `brave`, `tavily`, or `ddg`. |
|
package/dist/agent.js
CHANGED
|
@@ -87,6 +87,19 @@ function streamHandlers(spinner, showReasoning, assistantLabel, events, turnId)
|
|
|
87
87
|
},
|
|
88
88
|
};
|
|
89
89
|
}
|
|
90
|
+
/** Compress long tool outputs to keep the context window from ballooning.
|
|
91
|
+
* Keeps the first 60% and last 30% of the output; the middle is replaced
|
|
92
|
+
* with a one-line summary. Smaller than 8 000 chars pass through untouched. */
|
|
93
|
+
function compressToolOutput(text, maxChars = 8_000) {
|
|
94
|
+
if (text.length <= maxChars)
|
|
95
|
+
return text;
|
|
96
|
+
const head = Math.floor(maxChars * 0.6);
|
|
97
|
+
const tail = Math.floor(maxChars * 0.3);
|
|
98
|
+
const skipped = text.length - head - tail;
|
|
99
|
+
return (text.slice(0, head) +
|
|
100
|
+
`\n…(truncated ${skipped.toLocaleString()} chars — /compact or re-run with tighter scope to see more)\n` +
|
|
101
|
+
text.slice(text.length - tail));
|
|
102
|
+
}
|
|
90
103
|
export async function runAgent(opts) {
|
|
91
104
|
const { messages, model, stats, toolCtx, signal, onTurn, events } = opts;
|
|
92
105
|
const showReasoning = opts.showReasoning ?? true;
|
|
@@ -172,6 +185,8 @@ export async function runAgent(opts) {
|
|
|
172
185
|
return;
|
|
173
186
|
}
|
|
174
187
|
const toolCalls = msg.tool_calls;
|
|
188
|
+
const ro = [];
|
|
189
|
+
const rw = [];
|
|
175
190
|
for (let i = 0; i < toolCalls.length; i++) {
|
|
176
191
|
const call = toolCalls[i];
|
|
177
192
|
const name = call.function.name;
|
|
@@ -184,52 +199,64 @@ export async function runAgent(opts) {
|
|
|
184
199
|
}
|
|
185
200
|
stats.tool_calls_total += 1;
|
|
186
201
|
stats.tool_calls_by_name[name] = (stats.tool_calls_by_name[name] ?? 0) + 1;
|
|
187
|
-
const toolSpinner = new Spinner(`running ${name}`);
|
|
188
|
-
// Don't spin tools that need approval (interactive prompt).
|
|
189
202
|
const interactive = !READ_ONLY_TOOLS.has(name) && !toolCtx.yolo;
|
|
190
|
-
|
|
191
|
-
toolSpinner
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
catch {
|
|
204
|
-
// fall through with empty args — dispatcher returns a useful
|
|
205
|
-
// error string in its own ToolResult
|
|
203
|
+
const execute = async () => {
|
|
204
|
+
const toolSpinner = new Spinner(`running ${name}`);
|
|
205
|
+
if (!interactive && !events)
|
|
206
|
+
toolSpinner.start();
|
|
207
|
+
try {
|
|
208
|
+
if (opts.dispatchExtraTool && name.startsWith("mcp_")) {
|
|
209
|
+
let parsedArgs = {};
|
|
210
|
+
try {
|
|
211
|
+
parsedArgs = JSON.parse(argsRaw);
|
|
212
|
+
}
|
|
213
|
+
catch { /* use empty */ }
|
|
214
|
+
const raw = await opts.dispatchExtraTool(name, parsedArgs);
|
|
215
|
+
return { ...raw, content: compressToolOutput(raw.content) };
|
|
206
216
|
}
|
|
207
|
-
|
|
217
|
+
const raw = await executeTool(name, argsRaw, toolCtx, signal);
|
|
218
|
+
return { ...raw, content: compressToolOutput(raw.content) };
|
|
208
219
|
}
|
|
209
|
-
|
|
210
|
-
|
|
220
|
+
catch (e) {
|
|
221
|
+
const isAbort = e instanceof Error &&
|
|
222
|
+
(e.name === "AbortError" || e.code === "ABORT_ERR");
|
|
223
|
+
const result = {
|
|
224
|
+
content: isAbort ? "interrupted" : `error: ${e.message ?? "tool failed"}`,
|
|
225
|
+
rejected: isAbort,
|
|
226
|
+
};
|
|
227
|
+
// Save the original error — it's re-thrown after we record the stub
|
|
228
|
+
// result so the caller sees the first failure.
|
|
229
|
+
result._throwAfter = e;
|
|
230
|
+
return result;
|
|
211
231
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
232
|
+
finally {
|
|
233
|
+
toolSpinner.stop();
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
(interactive ? rw : ro).push({ index: i, call, fn: execute });
|
|
237
|
+
}
|
|
238
|
+
// Execute read-only tools in parallel, then read-write sequentially.
|
|
239
|
+
const results = new Array(toolCalls.length);
|
|
240
|
+
const roResults = await Promise.all(ro.map((p) => p.fn().then((r) => [p.index, r])));
|
|
241
|
+
for (const [idx, r] of roResults)
|
|
242
|
+
results[idx] = r;
|
|
243
|
+
let firstError = null;
|
|
244
|
+
for (const p of rw) {
|
|
245
|
+
results[p.index] = await p.fn();
|
|
246
|
+
}
|
|
247
|
+
// Record results in the original tool_call order and check for errors.
|
|
248
|
+
for (let i = 0; i < toolCalls.length; i++) {
|
|
249
|
+
const call = toolCalls[i];
|
|
250
|
+
const name = call.function.name;
|
|
251
|
+
const result = results[i];
|
|
252
|
+
const throwAfter = result?._throwAfter;
|
|
253
|
+
delete result?._throwAfter;
|
|
254
|
+
if (throwAfter && !firstError)
|
|
255
|
+
firstError = throwAfter;
|
|
229
256
|
messages.push({
|
|
230
257
|
role: "tool",
|
|
231
258
|
tool_call_id: call.id,
|
|
232
|
-
content: result
|
|
259
|
+
content: result?.content ?? "error: no result",
|
|
233
260
|
});
|
|
234
261
|
onTurn?.(); // status reflects the tool result we just recorded
|
|
235
262
|
if (events) {
|
|
@@ -252,6 +279,8 @@ export async function runAgent(opts) {
|
|
|
252
279
|
throw throwAfter;
|
|
253
280
|
}
|
|
254
281
|
}
|
|
282
|
+
if (firstError)
|
|
283
|
+
throw firstError;
|
|
255
284
|
}
|
|
256
285
|
// Inner for-loop exited because depth hit MAX_TOOL_DEPTH (the normal
|
|
257
286
|
// "model done, no tool_calls" exit `return`s out of runAgent). Decide
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/context.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { promises as fsp } from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
const DISCOVER_FILES = [
|
|
4
|
+
"AGENTS.md",
|
|
5
|
+
"README.md",
|
|
6
|
+
"CONTRIBUTING.md",
|
|
7
|
+
"CHANGELOG.md",
|
|
8
|
+
];
|
|
9
|
+
// Strip markdown syntax + punctuation, normalise to lowercase word set.
|
|
10
|
+
function tokenise(text) {
|
|
11
|
+
const cleaned = text
|
|
12
|
+
.replace(/[`*_~#\[\]()>|-]/g, " ")
|
|
13
|
+
.replace(/[.,:;!?"'\/\\{}]/g, " ");
|
|
14
|
+
return new Set(cleaned
|
|
15
|
+
.toLowerCase()
|
|
16
|
+
.split(/\s+/)
|
|
17
|
+
.filter((w) => w.length >= 3));
|
|
18
|
+
}
|
|
19
|
+
// Split text into ~150–300 char paragraphs, breaking at double-newlines
|
|
20
|
+
// or sentence boundaries when a single paragraph is too long.
|
|
21
|
+
function chunkFile(text, file) {
|
|
22
|
+
const raw = text
|
|
23
|
+
.split(/\n\n+/)
|
|
24
|
+
.map((p) => p.trim())
|
|
25
|
+
.filter((p) => p.length > 20);
|
|
26
|
+
const chunks = [];
|
|
27
|
+
for (const para of raw) {
|
|
28
|
+
if (para.length <= 400) {
|
|
29
|
+
chunks.push({ file, text: para, words: tokenise(para) });
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Split long paragraphs at sentence boundaries
|
|
33
|
+
const sentences = para.split(/(?<=[.!?])\s+/);
|
|
34
|
+
let buf = "";
|
|
35
|
+
for (const s of sentences) {
|
|
36
|
+
if (buf.length + s.length > 400 && buf.length > 80) {
|
|
37
|
+
chunks.push({ file, text: buf.trim(), words: tokenise(buf.trim()) });
|
|
38
|
+
buf = s;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
buf += (buf ? " " : "") + s;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (buf.trim().length > 20) {
|
|
45
|
+
chunks.push({ file, text: buf.trim(), words: tokenise(buf.trim()) });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return chunks;
|
|
50
|
+
}
|
|
51
|
+
/** Score a chunk against query tokens. Simple overlap ratio. */
|
|
52
|
+
function scoreChunk(chunk, queryTokens) {
|
|
53
|
+
let hits = 0;
|
|
54
|
+
for (const w of queryTokens) {
|
|
55
|
+
if (chunk.words.has(w))
|
|
56
|
+
hits++;
|
|
57
|
+
}
|
|
58
|
+
return queryTokens.size > 0 ? hits / queryTokens.size : 0;
|
|
59
|
+
}
|
|
60
|
+
export class ProjectContext {
|
|
61
|
+
chunks = [];
|
|
62
|
+
indexed = false;
|
|
63
|
+
/** (Re)build the index from discoverable files + extra paths. */
|
|
64
|
+
async build(cwd, extraFiles = []) {
|
|
65
|
+
this.chunks = [];
|
|
66
|
+
const allFiles = [...DISCOVER_FILES, ...extraFiles];
|
|
67
|
+
const seen = new Set();
|
|
68
|
+
for (const rel of allFiles) {
|
|
69
|
+
const abs = path.resolve(cwd, rel);
|
|
70
|
+
if (seen.has(abs))
|
|
71
|
+
continue;
|
|
72
|
+
seen.add(abs);
|
|
73
|
+
try {
|
|
74
|
+
const stat = await fsp.stat(abs);
|
|
75
|
+
if (!stat.isFile() || stat.size > 200_000)
|
|
76
|
+
continue; // skip huge files
|
|
77
|
+
const text = await fsp.readFile(abs, "utf-8");
|
|
78
|
+
this.chunks.push(...chunkFile(text, rel));
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// file doesn't exist or can't be read — skip
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
this.indexed = true;
|
|
85
|
+
}
|
|
86
|
+
/** Search the index for chunks relevant to `prompt`. Returns up to
|
|
87
|
+
* `maxChunks` snippets, sorted by relevance, with a total character
|
|
88
|
+
* budget of `maxChars`. */
|
|
89
|
+
search(prompt, maxChunks = 4, maxChars = 3000) {
|
|
90
|
+
if (!this.indexed || this.chunks.length === 0)
|
|
91
|
+
return [];
|
|
92
|
+
const queryTokens = tokenise(prompt);
|
|
93
|
+
if (queryTokens.size === 0)
|
|
94
|
+
return [];
|
|
95
|
+
const scored = this.chunks
|
|
96
|
+
.map((c) => ({ chunk: c, score: scoreChunk(c, queryTokens) }))
|
|
97
|
+
.filter((s) => s.score > 0.05)
|
|
98
|
+
.sort((a, b) => b.score - a.score);
|
|
99
|
+
const result = [];
|
|
100
|
+
let total = 0;
|
|
101
|
+
for (const { chunk, score } of scored) {
|
|
102
|
+
if (result.length >= maxChunks)
|
|
103
|
+
break;
|
|
104
|
+
if (total + chunk.text.length > maxChars)
|
|
105
|
+
break;
|
|
106
|
+
const prefix = score > 0.3 ? `From ${chunk.file}:\n` : "";
|
|
107
|
+
result.push(prefix + chunk.text);
|
|
108
|
+
total += chunk.text.length;
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
/** Add a newly-touched file to the index (after the agent reads or
|
|
113
|
+
* edits it). Call this from the post-turn hook for files that were
|
|
114
|
+
* actually read/modified. */
|
|
115
|
+
async addFile(cwd, relPath) {
|
|
116
|
+
const abs = path.resolve(cwd, relPath);
|
|
117
|
+
try {
|
|
118
|
+
const stat = await fsp.stat(abs);
|
|
119
|
+
if (!stat.isFile() || stat.size > 200_000)
|
|
120
|
+
return;
|
|
121
|
+
const text = await fsp.readFile(abs, "utf-8");
|
|
122
|
+
// Remove old chunks from this file before re-indexing
|
|
123
|
+
this.chunks = this.chunks.filter((c) => c.file !== relPath);
|
|
124
|
+
this.chunks.push(...chunkFile(text, relPath));
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// skip
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM-based proposition extraction and relationship classification.
|
|
3
|
+
*
|
|
4
|
+
* Ported from Python validate_extraction.py and graph.py's classify_relationships().
|
|
5
|
+
* Uses the DeepSeek API directly (same prompts as Python version).
|
|
6
|
+
*/
|
|
7
|
+
// ── Proposition extraction ────────────────────────────────────────────
|
|
8
|
+
const EXTRACTION_PROMPT = `Extract atomic propositions from this text.
|
|
9
|
+
|
|
10
|
+
Each proposition must be:
|
|
11
|
+
- A single minimal claim, self-contained
|
|
12
|
+
- Stated as a proposition (true/false capable)
|
|
13
|
+
- Free of source references ("Claude said", "we discussed")
|
|
14
|
+
- As small as possible without losing meaning
|
|
15
|
+
|
|
16
|
+
Return one proposition per line, nothing else.
|
|
17
|
+
No numbering, no bullets, no commentary.`;
|
|
18
|
+
/**
|
|
19
|
+
* Extract atomic propositions from arbitrary text.
|
|
20
|
+
* Splits long text into chunks at paragraph boundaries.
|
|
21
|
+
*/
|
|
22
|
+
export async function extractPropositions(text, model, apiCall, maxChunkChars = 3000) {
|
|
23
|
+
// Split long text into chunks at paragraph boundaries
|
|
24
|
+
const chunks = [];
|
|
25
|
+
if (text.length > maxChunkChars) {
|
|
26
|
+
const paragraphs = text.split("\n\n");
|
|
27
|
+
let current = "";
|
|
28
|
+
for (const para of paragraphs) {
|
|
29
|
+
if (current.length + para.length < maxChunkChars) {
|
|
30
|
+
current = current ? current + "\n\n" + para : para;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
if (current)
|
|
34
|
+
chunks.push(current.trim());
|
|
35
|
+
current = para;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (current)
|
|
39
|
+
chunks.push(current.trim());
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
chunks.push(text);
|
|
43
|
+
}
|
|
44
|
+
const allProps = [];
|
|
45
|
+
const seen = new Set();
|
|
46
|
+
for (const chunk of chunks) {
|
|
47
|
+
const prompt = `${EXTRACTION_PROMPT}\n\nText:\n${chunk}`;
|
|
48
|
+
const raw = await apiCall(model, [{ role: "user", content: prompt }], 4000);
|
|
49
|
+
for (const line of raw.split("\n")) {
|
|
50
|
+
const trimmed = line.trim();
|
|
51
|
+
if (trimmed && !seen.has(trimmed)) {
|
|
52
|
+
seen.add(trimmed);
|
|
53
|
+
allProps.push(trimmed);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return allProps;
|
|
58
|
+
}
|
|
59
|
+
const RELATIONSHIP_PROMPT_PREFIX = `Classify relationships between these propositions.
|
|
60
|
+
|
|
61
|
+
For each candidate, choose ONE type:
|
|
62
|
+
supports | contradicts | instantiates | analogizes | questions | relates | none
|
|
63
|
+
|
|
64
|
+
Return: NUMBER: type (one per line)
|
|
65
|
+
Example:
|
|
66
|
+
1: supports
|
|
67
|
+
2: none`;
|
|
68
|
+
/**
|
|
69
|
+
* Classify relationships between a source proposition and each candidate.
|
|
70
|
+
* Batch all candidates into a single API call for efficiency.
|
|
71
|
+
*/
|
|
72
|
+
export async function classifyRelationships(sourceText, candidates, model, apiCall) {
|
|
73
|
+
if (candidates.length === 0)
|
|
74
|
+
return {};
|
|
75
|
+
const candidateList = candidates
|
|
76
|
+
.map((c, i) => `${i + 1}. ${c.text}`)
|
|
77
|
+
.join("\n");
|
|
78
|
+
const prompt = `${RELATIONSHIP_PROMPT_PREFIX}\n\n` +
|
|
79
|
+
`Source: "${sourceText}"\n\n` +
|
|
80
|
+
`Candidates:\n${candidateList}`;
|
|
81
|
+
const raw = await apiCall(model, [{ role: "user", content: prompt }], 4000);
|
|
82
|
+
// Parse response: "1: supports", "2: none", etc.
|
|
83
|
+
const result = {};
|
|
84
|
+
for (const line of raw.split("\n")) {
|
|
85
|
+
const trimmed = line.trim();
|
|
86
|
+
const colonIdx = trimmed.indexOf(":");
|
|
87
|
+
if (colonIdx === -1)
|
|
88
|
+
continue;
|
|
89
|
+
try {
|
|
90
|
+
const idx = parseInt(trimmed.substring(0, colonIdx).trim(), 10) - 1; // 1-based → 0-based
|
|
91
|
+
const relType = trimmed.substring(colonIdx + 1).trim().toLowerCase();
|
|
92
|
+
if (idx >= 0 && idx < candidates.length) {
|
|
93
|
+
if (relType === "relates" || relType === "none") {
|
|
94
|
+
if (relType === "relates") {
|
|
95
|
+
result[candidates[idx].id] = "relates";
|
|
96
|
+
}
|
|
97
|
+
// "none" → don't add
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// One of: supports, contradicts, instantiates, analogizes, questions
|
|
101
|
+
result[candidates[idx].id] = relType;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// Parse error, skip this line
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=extraction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extraction.js","sourceRoot":"","sources":["../../src/memory/extraction.ts"],"names":[],"mappings":"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"}
|