@treeseed/dsh-chapters 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 +14 -0
- package/README.md +644 -0
- package/cordis.patch.yml +88 -0
- package/docs/architecture.md +460 -0
- package/docs/contract.md +375 -0
- package/docs/development.md +437 -0
- package/docs/host-compaction-seam.md +117 -0
- package/docs/knowledge-repo.md +730 -0
- package/docs/provider.md +98 -0
- package/docs/verify.md +200 -0
- package/lib/archive.d.ts +88 -0
- package/lib/archive.js +114 -0
- package/lib/archive.js.map +1 -0
- package/lib/arrival.d.ts +23 -0
- package/lib/arrival.js +86 -0
- package/lib/arrival.js.map +1 -0
- package/lib/artifact-query.d.ts +53 -0
- package/lib/artifact-query.js +130 -0
- package/lib/artifact-query.js.map +1 -0
- package/lib/client.js +234 -0
- package/lib/client.js.map +1 -0
- package/lib/commands.d.ts +28 -0
- package/lib/commands.js +305 -0
- package/lib/commands.js.map +1 -0
- package/lib/compose.d.ts +30 -0
- package/lib/compose.js +131 -0
- package/lib/compose.js.map +1 -0
- package/lib/continue-core.d.ts +153 -0
- package/lib/continue-core.js +252 -0
- package/lib/continue-core.js.map +1 -0
- package/lib/engine-core.d.ts +219 -0
- package/lib/engine-core.js +405 -0
- package/lib/engine-core.js.map +1 -0
- package/lib/engine.d.ts +211 -0
- package/lib/engine.js +571 -0
- package/lib/engine.js.map +1 -0
- package/lib/enrich-queue.d.ts +66 -0
- package/lib/enrich-queue.js +100 -0
- package/lib/enrich-queue.js.map +1 -0
- package/lib/enrich-store.d.ts +31 -0
- package/lib/enrich-store.js +103 -0
- package/lib/enrich-store.js.map +1 -0
- package/lib/enrich-wire.d.ts +73 -0
- package/lib/enrich-wire.js +209 -0
- package/lib/enrich-wire.js.map +1 -0
- package/lib/enrich.d.ts +73 -0
- package/lib/enrich.js +150 -0
- package/lib/enrich.js.map +1 -0
- package/lib/gitops.d.ts +107 -0
- package/lib/gitops.js +539 -0
- package/lib/gitops.js.map +1 -0
- package/lib/index.d.ts +81 -0
- package/lib/index.js +305 -0
- package/lib/index.js.map +1 -0
- package/lib/indexing.d.ts +85 -0
- package/lib/indexing.js +212 -0
- package/lib/indexing.js.map +1 -0
- package/lib/injections.d.ts +66 -0
- package/lib/injections.js +83 -0
- package/lib/injections.js.map +1 -0
- package/lib/notice.d.ts +60 -0
- package/lib/notice.js +84 -0
- package/lib/notice.js.map +1 -0
- package/lib/provider.d.ts +44 -0
- package/lib/provider.js +66 -0
- package/lib/provider.js.map +1 -0
- package/lib/redact.d.ts +24 -0
- package/lib/redact.js +85 -0
- package/lib/redact.js.map +1 -0
- package/lib/registry.d.ts +120 -0
- package/lib/registry.js +130 -0
- package/lib/registry.js.map +1 -0
- package/lib/render.d.ts +40 -0
- package/lib/render.js +280 -0
- package/lib/render.js.map +1 -0
- package/lib/repo.d.ts +78 -0
- package/lib/repo.js +184 -0
- package/lib/repo.js.map +1 -0
- package/lib/rules-commands.d.ts +24 -0
- package/lib/rules-commands.js +138 -0
- package/lib/rules-commands.js.map +1 -0
- package/lib/rules.d.ts +90 -0
- package/lib/rules.js +185 -0
- package/lib/rules.js.map +1 -0
- package/lib/search.d.ts +48 -0
- package/lib/search.js +152 -0
- package/lib/search.js.map +1 -0
- package/lib/signature.d.ts +28 -0
- package/lib/signature.js +149 -0
- package/lib/signature.js.map +1 -0
- package/lib/store.d.ts +130 -0
- package/lib/store.js +235 -0
- package/lib/store.js.map +1 -0
- package/lib/sync.d.ts +183 -0
- package/lib/sync.js +719 -0
- package/lib/sync.js.map +1 -0
- package/lib/tools.d.ts +84 -0
- package/lib/tools.js +581 -0
- package/lib/tools.js.map +1 -0
- package/lib/treedx/client.d.ts +57 -0
- package/lib/treedx/client.js +82 -0
- package/lib/treedx/client.js.map +1 -0
- package/lib/treedx/provider.d.ts +39 -0
- package/lib/treedx/provider.js +479 -0
- package/lib/treedx/provider.js.map +1 -0
- package/lib/treedx/state.d.ts +27 -0
- package/lib/treedx/state.js +65 -0
- package/lib/treedx/state.js.map +1 -0
- package/lib/types.d.ts +100 -0
- package/lib/types.js +19 -0
- package/lib/types.js.map +1 -0
- package/lib/vocabulary.d.ts +41 -0
- package/lib/vocabulary.js +118 -0
- package/lib/vocabulary.js.map +1 -0
- package/package.json +132 -0
- package/presets/chapters/agent.cordis.yml +272 -0
- package/presets/chapters/preset.yml +3 -0
- package/presets/probe-roots/agent.cordis.yml +11 -0
- package/presets/probe-roots/preset.yml +3 -0
package/lib/tools.js
ADDED
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* chapters_segment / chapters_continue — tool adapters. Thin by policy: caller
|
|
3
|
+
* resolution, port wiring, refusal mapping. The logic is continue-core.ts and
|
|
4
|
+
* the pure modules; the shapes are the dsh-session-fork idiom (defineTool,
|
|
5
|
+
* jsonOutput, exec.agent, ctx.tools.register), each cited in docs/contract.md.
|
|
6
|
+
*/
|
|
7
|
+
import { defineTool } from '@deepseek-ai/dsh-tools';
|
|
8
|
+
import { randomUUID } from 'node:crypto';
|
|
9
|
+
import * as fs from 'node:fs';
|
|
10
|
+
import * as path from 'node:path';
|
|
11
|
+
import { toolResultCandidates } from "./render.js";
|
|
12
|
+
import { buildRulesSection } from "./rules.js";
|
|
13
|
+
import { rulesCommand } from "./rules-commands.js";
|
|
14
|
+
import { DEFAULT_CLONE_DIR } from "./sync.js";
|
|
15
|
+
import { composeChapters } from "./compose.js";
|
|
16
|
+
import { projectForCwd } from "./sync.js";
|
|
17
|
+
import { deriveRanges, refusalResult, runContinue, runFork } from "./continue-core.js";
|
|
18
|
+
import { searchKnowledge } from "./search.js";
|
|
19
|
+
import { resolveArtifactPath, buildToc, searchArtifact, readLines } from "./artifact-query.js";
|
|
20
|
+
import { makeArchiveFs } from "./store.js";
|
|
21
|
+
const jsonOutput = (render) => ({
|
|
22
|
+
schema: { type: 'json' },
|
|
23
|
+
render: (_args, value) => [{ type: 'text', text: render(value) }],
|
|
24
|
+
});
|
|
25
|
+
const CALLER_MISSING = { ok: false, reason: 'no calling agent: this tool runs only inside an agent session' };
|
|
26
|
+
function callerOf(exec) {
|
|
27
|
+
const agent = exec.agent;
|
|
28
|
+
return agent ?? CALLER_MISSING;
|
|
29
|
+
}
|
|
30
|
+
/** Build the two tool definitions (registration is the caller's lifecycle). */
|
|
31
|
+
export function buildChaptersTools(ctx, store, config) {
|
|
32
|
+
const portsFor = async (caller) => {
|
|
33
|
+
const cwd = caller.session.header.cwd ?? '';
|
|
34
|
+
// every real tool use carries the caller's routed model — record it for
|
|
35
|
+
// the enrichment resolver (the only route source the host plane can have)
|
|
36
|
+
if (caller.options.provider !== undefined && caller.options.model !== undefined) {
|
|
37
|
+
config.noteRoute?.({ provider: caller.options.provider, model: caller.options.model });
|
|
38
|
+
}
|
|
39
|
+
const presetId = ctx.sessionProjections?.stateOf(caller.session, 'agentPreset') ?? null;
|
|
40
|
+
return {
|
|
41
|
+
readCallerEvents: async () => [...(caller.session.snapshotEvents?.() ?? [])],
|
|
42
|
+
getState: (sessionId) => store.get(sessionId),
|
|
43
|
+
putState: (sessionId, state) => store.put(sessionId, state),
|
|
44
|
+
fs: () => {
|
|
45
|
+
if (cwd === '')
|
|
46
|
+
throw new Error('caller session has no workspace cwd — nowhere reachable for the read tool');
|
|
47
|
+
return makeArchiveFs(cwd);
|
|
48
|
+
},
|
|
49
|
+
budgetProbe: async () => {
|
|
50
|
+
const { provider, model } = caller.options;
|
|
51
|
+
let windowTokens = null;
|
|
52
|
+
if (provider !== undefined && model !== undefined && ctx.llm?.resolveModelInfo !== undefined) {
|
|
53
|
+
try {
|
|
54
|
+
const info = await ctx.llm.resolveModelInfo(provider, model, new AbortController().signal);
|
|
55
|
+
windowTokens = info?.context?.contextWindow ?? null;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
windowTokens = null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Header bound: the last real request's full prompt (usage) — an
|
|
62
|
+
// UPPER bound on header+surface-at-that-time, so it over-counts the
|
|
63
|
+
// header conservatively; refusals err toward the loud side.
|
|
64
|
+
let headerBoundTokens = null;
|
|
65
|
+
const events = caller.session.snapshotEvents?.() ?? [];
|
|
66
|
+
for (let i = events.length - 1; i >= 0; i -= 1) {
|
|
67
|
+
const usage = events[i].data?.usage;
|
|
68
|
+
if (usage !== undefined) {
|
|
69
|
+
headerBoundTokens = (usage.inputTokens ?? 0) + (usage.cacheReadTokens ?? 0);
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return { windowTokens, headerBoundTokens };
|
|
74
|
+
},
|
|
75
|
+
newId: () => randomUUID(),
|
|
76
|
+
createChild: async ({ sessionId, noticeEvent, presetId: mountPreset, title }) => {
|
|
77
|
+
const callerOptions = caller.options;
|
|
78
|
+
const handle = await ctx.agents.create({
|
|
79
|
+
sessionId,
|
|
80
|
+
seed: [noticeEvent],
|
|
81
|
+
inheritedEventCount: 0,
|
|
82
|
+
meta: { cwd, isSeeded: false, ...(mountPreset !== undefined && mountPreset !== null ? { agentPreset: mountPreset } : {}) },
|
|
83
|
+
...(callerOptions.provider !== undefined ? { agentOptions: callerOptions } : {}),
|
|
84
|
+
setup: async (agentCtx) => {
|
|
85
|
+
const presets = ctx.get?.('agentPresets');
|
|
86
|
+
if (presets?.mount === undefined)
|
|
87
|
+
throw new Error('agentPresets service absent — the child would be tool-less');
|
|
88
|
+
await presets.mount(agentCtx, mountPreset);
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
try {
|
|
92
|
+
const workspaceRegistry = ctx.get?.('workspaceRegistry');
|
|
93
|
+
if (cwd !== '' && workspaceRegistry?.createCanonical !== undefined) {
|
|
94
|
+
const workspace = await workspaceRegistry.createCanonical(cwd);
|
|
95
|
+
await workspace?.attachSession?.(sessionId);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
// An unattached child is durable but may not list — say so, keep going.
|
|
100
|
+
ctx.logger?.warn?.(`dsh-chapters: child workspace attach failed (${String(error)})`);
|
|
101
|
+
}
|
|
102
|
+
// Title while the child is still live: sessionController.rename resolves
|
|
103
|
+
// the agent, routes through the official session-title normalizer, and
|
|
104
|
+
// appends the durable `session/title` event (r6: commands-execute was the
|
|
105
|
+
// wrong registry; the service method is the one that sticks). A refusal
|
|
106
|
+
// here is cosmetic — warn, never roll back a durable continuation.
|
|
107
|
+
try {
|
|
108
|
+
const controller = ctx.get?.('sessionController');
|
|
109
|
+
if (controller?.rename !== undefined)
|
|
110
|
+
await controller.rename({ sessionId, title });
|
|
111
|
+
else
|
|
112
|
+
ctx.logger?.warn?.('dsh-chapters: sessionController absent — child created without a title');
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
ctx.logger?.warn?.(`dsh-chapters: child title refused (${String(error)}); child remains untitled`);
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
// The live handle is ours only until the child is handed to the user:
|
|
119
|
+
// holding it blocks their resume ("already owned by an active write
|
|
120
|
+
// handle", measured r3). Dispose after the live-work, keep the session.
|
|
121
|
+
await handle.dispose?.();
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
now: () => Date.now(),
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
// ---------------------------------------------------------------- segment
|
|
128
|
+
const chaptersSegment = defineTool({
|
|
129
|
+
name: 'chapters_segment',
|
|
130
|
+
description: 'Facts for planning a chapter archive of THIS session: the completed-turn archive ceiling, '
|
|
131
|
+
+ 'every tool result with its real size, and the chapters already in the registry. '
|
|
132
|
+
+ 'Returns ranges for you to propose in chapters_continue — you never write chapter text; the plugin renders it from the log.',
|
|
133
|
+
parameters: {},
|
|
134
|
+
output: jsonOutput((value) => JSON.stringify(value, null, 1)),
|
|
135
|
+
async execute(_args, exec) {
|
|
136
|
+
const caller = callerOf(exec);
|
|
137
|
+
if ('reason' in caller)
|
|
138
|
+
return { ...CALLER_MISSING };
|
|
139
|
+
const events = caller.session.snapshotEvents?.() ?? [];
|
|
140
|
+
const lastTurnEnd = [...events].reverse().find((e) => e.type === 'turn/end');
|
|
141
|
+
if (lastTurnEnd === undefined)
|
|
142
|
+
return { ok: false, reason: 'no completed turn to archive yet' };
|
|
143
|
+
const ceiling = lastTurnEnd.seq;
|
|
144
|
+
const below = events.filter((e) => e.seq <= ceiling);
|
|
145
|
+
const callerState = await store.get(caller.session.id);
|
|
146
|
+
return {
|
|
147
|
+
ok: true,
|
|
148
|
+
archiveCeiling: ceiling,
|
|
149
|
+
eventCount: below.length,
|
|
150
|
+
// fresh literals, not the ToolResultCandidate interface: anonymous
|
|
151
|
+
// object types carry the implicit index signature JsonValue needs.
|
|
152
|
+
toolResults: toolResultCandidates(below, { title: '', summary: '', startSeq: 0, endSeq: ceiling })
|
|
153
|
+
.map((c) => ({ seq: c.seq, toolName: c.toolName, bytes: c.bytes, estimatedTokens: c.estimatedTokens, excerpt: c.excerpt })),
|
|
154
|
+
existingChapters: callerState.chapters.map((c) => ({
|
|
155
|
+
number: c.number, path: c.path, title: c.title, startSeq: c.startSeq, endSeq: c.endSeq,
|
|
156
|
+
})),
|
|
157
|
+
budgetHint: { continuationBudgetRatio: config.continuationBudgetRatio, chapterTokenTarget: config.chapterTokenTarget },
|
|
158
|
+
};
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
// ---------------------------------------------------------------- continue
|
|
162
|
+
const chaptersContinue = defineTool({
|
|
163
|
+
name: 'chapters_continue',
|
|
164
|
+
description: 'Archive this conversation as verbatim Markdown chapters and open a NEW session that starts from their '
|
|
165
|
+
+ 'table of contents plus your handoff note. Supply event ranges (startSeq/endSeq) — never chapter text; '
|
|
166
|
+
+ 'the plugin renders bodies from the session log. This session is left untouched; the child gets its own '
|
|
167
|
+
+ 'cache and can reload any chapter with read. Oversized tool results defer to reference files by default; '
|
|
168
|
+
+ 'toolResultOverrides marks the exceptions you want kept inline (it still writes the artifact).',
|
|
169
|
+
parameters: {
|
|
170
|
+
title: { type: 'string', required: true, description: 'Name for the continued session.' },
|
|
171
|
+
handoffNote: { type: 'string', required: true, description: 'State of play for the child: what was in progress, decisions held, the next step. Budget-checked as part of the notice, never silently truncated.' },
|
|
172
|
+
chapters: {
|
|
173
|
+
type: 'array',
|
|
174
|
+
required: true,
|
|
175
|
+
description: 'Ascending, non-overlapping ranges covering every event to archive (<= the archiveCeiling from chapters_segment).',
|
|
176
|
+
items: {
|
|
177
|
+
type: 'object',
|
|
178
|
+
additionalProperties: false,
|
|
179
|
+
properties: {
|
|
180
|
+
title: { type: 'string', required: true, description: 'Chapter title (topic-named; it becomes the file slug).' },
|
|
181
|
+
summary: { type: 'string', required: true, description: 'One-line TOC summary of what the chapter holds.' },
|
|
182
|
+
startSeq: { type: 'integer', required: true, description: 'First durable event seq, inclusive.' },
|
|
183
|
+
endSeq: { type: 'integer', required: true, description: 'Last durable event seq, inclusive.' },
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
toolResultOverrides: {
|
|
188
|
+
type: 'array',
|
|
189
|
+
description: 'Sparse exceptions to the defer-by-default rule: {seq, inline:true} keeps a large result inline in its chapter (the artifact is still written); {seq, inline:false} trims a small one.',
|
|
190
|
+
items: {
|
|
191
|
+
type: 'object',
|
|
192
|
+
additionalProperties: false,
|
|
193
|
+
properties: {
|
|
194
|
+
seq: { type: 'integer', required: true, description: 'The tool result event seq (from chapters_segment toolResults).' },
|
|
195
|
+
inline: { type: 'boolean', required: true, description: 'Keep inline (true) or defer (false), overriding the size default for this one result.' },
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
output: jsonOutput((value) => JSON.stringify(value, null, 1)),
|
|
201
|
+
async execute(args, exec) {
|
|
202
|
+
const caller = callerOf(exec);
|
|
203
|
+
if ('reason' in caller)
|
|
204
|
+
return { ...CALLER_MISSING };
|
|
205
|
+
try {
|
|
206
|
+
const ports = await portsFor(caller);
|
|
207
|
+
const cwd = caller.session.header?.cwd ?? '';
|
|
208
|
+
if (cwd !== '' && config.scheduler !== undefined) {
|
|
209
|
+
await config.scheduler.pullFor(cwd).catch(() => undefined); // §5.1: pull → archive → push
|
|
210
|
+
}
|
|
211
|
+
const line = projectLineFor(caller);
|
|
212
|
+
const rs = rulesSectionFor(caller);
|
|
213
|
+
if (rs.refusal !== undefined)
|
|
214
|
+
return { ok: false, reason: rs.refusal };
|
|
215
|
+
const result = await runContinue(ports, {
|
|
216
|
+
callerSessionId: caller.session.id,
|
|
217
|
+
callerPreset: ctx.sessionProjections?.stateOf(caller.session, 'agentPreset') ?? null,
|
|
218
|
+
title: args.title,
|
|
219
|
+
handoffNote: args.handoffNote,
|
|
220
|
+
chapters: args.chapters,
|
|
221
|
+
toolResultOverrides: args.toolResultOverrides ?? [],
|
|
222
|
+
...(line !== undefined ? { projectLine: line } : {}),
|
|
223
|
+
...(rs.section !== undefined ? { rulesSection: rs.section } : {}),
|
|
224
|
+
}, config);
|
|
225
|
+
if (result.ok && cwd !== '')
|
|
226
|
+
config.scheduler?.schedule(cwd, 'archive:continue');
|
|
227
|
+
// conditional spreads: absent optionals must not surface as `undefined`
|
|
228
|
+
// (not a JsonValue); the output schema validates the successful body.
|
|
229
|
+
return {
|
|
230
|
+
ok: true,
|
|
231
|
+
...(result.childSessionId !== undefined ? { childSessionId: result.childSessionId } : {}),
|
|
232
|
+
...(result.presetUsed !== undefined ? { presetUsed: result.presetUsed } : {}),
|
|
233
|
+
...(result.chapters !== undefined ? { chapters: result.chapters } : {}),
|
|
234
|
+
...(result.warnings !== undefined && result.warnings.length > 0 ? { warnings: result.warnings } : {}),
|
|
235
|
+
...(result.budget !== undefined ? { budget: result.budget } : {}),
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
const refusal = refusalResult(error);
|
|
240
|
+
if (refusal !== null) {
|
|
241
|
+
return {
|
|
242
|
+
ok: false,
|
|
243
|
+
reason: refusal.reason ?? 'refused',
|
|
244
|
+
...(refusal.budget !== undefined ? { budget: refusal.budget } : {}),
|
|
245
|
+
...(refusal.warnings !== undefined && refusal.warnings.length > 0 ? { warnings: refusal.warnings } : {}),
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
return { ok: false, reason: `chapters_continue failed: ${error?.stack ?? String(error)}`.slice(0, 800) };
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
});
|
|
252
|
+
// ---------------------------------------------------------------- fork
|
|
253
|
+
const chaptersFork = defineTool({
|
|
254
|
+
name: 'chapters_fork',
|
|
255
|
+
description: 'Open a SIBLING session citing the same chapter archive this one already has — nothing new is '
|
|
256
|
+
+ 'archived, no files written, no numbers spent. Use for trying a genuinely different approach '
|
|
257
|
+
+ 'while the current session keeps working. Your handoff note says what the sibling should do.',
|
|
258
|
+
parameters: {
|
|
259
|
+
title: { type: 'string', required: true, description: 'Name for the forked session.' },
|
|
260
|
+
handoffNote: { type: 'string', required: true, description: 'What the sibling is for — its whole context is the archive TOC plus this note.' },
|
|
261
|
+
},
|
|
262
|
+
output: jsonOutput((value) => JSON.stringify(value, null, 1)),
|
|
263
|
+
async execute(args, exec) {
|
|
264
|
+
const caller = callerOf(exec);
|
|
265
|
+
if ('reason' in caller)
|
|
266
|
+
return { ...CALLER_MISSING };
|
|
267
|
+
try {
|
|
268
|
+
const ports = await portsFor(caller);
|
|
269
|
+
const cwd = caller.session.header?.cwd ?? '';
|
|
270
|
+
if (cwd !== '' && config.scheduler !== undefined) {
|
|
271
|
+
await config.scheduler.pullFor(cwd).catch(() => undefined);
|
|
272
|
+
}
|
|
273
|
+
const line = projectLineFor(caller);
|
|
274
|
+
const rs = rulesSectionFor(caller);
|
|
275
|
+
if (rs.refusal !== undefined)
|
|
276
|
+
return { ok: false, reason: rs.refusal };
|
|
277
|
+
const result = await runFork(ports, {
|
|
278
|
+
callerSessionId: caller.session.id,
|
|
279
|
+
callerPreset: ctx.sessionProjections?.stateOf(caller.session, 'agentPreset') ?? null,
|
|
280
|
+
title: args.title,
|
|
281
|
+
handoffNote: args.handoffNote,
|
|
282
|
+
...(line !== undefined ? { projectLine: line } : {}),
|
|
283
|
+
...(rs.section !== undefined ? { rulesSection: rs.section } : {}),
|
|
284
|
+
}, config);
|
|
285
|
+
if (result.ok && cwd !== '')
|
|
286
|
+
config.scheduler?.schedule(cwd, 'archive:fork');
|
|
287
|
+
return {
|
|
288
|
+
ok: true,
|
|
289
|
+
...(result.childSessionId !== undefined ? { childSessionId: result.childSessionId } : {}),
|
|
290
|
+
...(result.presetUsed !== undefined ? { presetUsed: result.presetUsed } : {}),
|
|
291
|
+
...(result.budget !== undefined ? { budget: result.budget } : {}),
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
const refusal = refusalResult(error);
|
|
296
|
+
if (refusal !== null) {
|
|
297
|
+
return { ok: false, reason: refusal.reason ?? 'refused', ...(refusal.budget !== undefined ? { budget: refusal.budget } : {}) };
|
|
298
|
+
}
|
|
299
|
+
return { ok: false, reason: `chapters_fork failed: ${error?.stack ?? String(error)}`.slice(0, 800) };
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
// ---------------------------------------------------------------- command
|
|
304
|
+
// The palette/URL path for the fork BUTTON: same ports as the tools, ZERO
|
|
305
|
+
// model involvement — deriveRanges is deterministic, so a click needs no
|
|
306
|
+
// agent turn and no proposed ranges. `/chapters-fork [title]`: everything
|
|
307
|
+
// up to the last completed turn is archived verbatim and a titled child
|
|
308
|
+
// opens whose entire history is the cumulative TOC.
|
|
309
|
+
const forkCommand = {
|
|
310
|
+
name: 'chapters-fork',
|
|
311
|
+
description: 'Fork this conversation into a new session: archive everything so far into verbatim chapters and open a child whose history is the table of contents. Optional argument: a title for the branch.',
|
|
312
|
+
input: { hint: '[title]' },
|
|
313
|
+
async handler(invocation) {
|
|
314
|
+
const agent = invocation.agent;
|
|
315
|
+
if (agent?.session === undefined)
|
|
316
|
+
return { kind: 'error', text: 'chapters-fork: no session context for this invocation' };
|
|
317
|
+
try {
|
|
318
|
+
const ports = await portsFor(agent);
|
|
319
|
+
const cwd0 = agent.session.header?.cwd ?? '';
|
|
320
|
+
if (cwd0 !== '' && config.scheduler !== undefined) {
|
|
321
|
+
await config.scheduler.pullFor(cwd0).catch(() => undefined);
|
|
322
|
+
}
|
|
323
|
+
const events = await ports.readCallerEvents();
|
|
324
|
+
const anchor = [...events].reverse().find((e) => e.type === 'turn/end')?.seq;
|
|
325
|
+
if (anchor === undefined)
|
|
326
|
+
return { kind: 'error', text: 'chapters-fork: nothing to archive yet — the conversation has no completed turn' };
|
|
327
|
+
const trimmed = (invocation.rawInput ?? '').trim();
|
|
328
|
+
const parentTitle = [...events].reverse()
|
|
329
|
+
.find((e) => e.type === 'session/title')?.data?.title;
|
|
330
|
+
const title = trimmed !== '' ? trimmed : `${parentTitle ?? 'Chapters branch'} \u2014 branch`;
|
|
331
|
+
const rsCmd = rulesSectionFor(agent);
|
|
332
|
+
if (rsCmd.refusal !== undefined)
|
|
333
|
+
return { kind: 'error', text: `chapters-fork refused: ${rsCmd.refusal}` };
|
|
334
|
+
const callerArgs = {
|
|
335
|
+
callerSessionId: agent.session.id,
|
|
336
|
+
callerPreset: ctx.sessionProjections?.stateOf(agent.session, 'agentPreset') ?? null,
|
|
337
|
+
title,
|
|
338
|
+
toolResultOverrides: [],
|
|
339
|
+
...(projectLineFor(agent) !== undefined ? { projectLine: projectLineFor(agent) } : {}),
|
|
340
|
+
...(rsCmd.section !== undefined ? { rulesSection: rsCmd.section } : {}),
|
|
341
|
+
};
|
|
342
|
+
// Archive watermark: compaction chapters (and prior forks) already carry
|
|
343
|
+
// [.. lastArchived]. The fork segments ONLY what is newer — the store
|
|
344
|
+
// stays append-only AND duplicate-free, and the child's TOC inherits
|
|
345
|
+
// every earlier chapter through the ancestry walk. When nothing is
|
|
346
|
+
// newer, this degrades to a pure citation fork (runFork): child created,
|
|
347
|
+
// archive cited, nothing written.
|
|
348
|
+
const parentState = await ports.getState(agent.session.id);
|
|
349
|
+
const lastArchived = parentState.chapters.reduce((m, c) => Math.max(m, c.endSeq), 0);
|
|
350
|
+
const fromSeq = lastArchived > 0 ? lastArchived + 1 : 0;
|
|
351
|
+
if (fromSeq > 0 && anchor <= lastArchived) {
|
|
352
|
+
const forked = await runFork(ports, { ...callerArgs, handoffNote: 'Branched from the conversation through the Chapters fork. Nothing had been said since the last archive, so this branch cites the existing chapters unchanged. Ask the user what this branch should work on.' }, config);
|
|
353
|
+
if (cwd0 !== '')
|
|
354
|
+
config.scheduler?.schedule(cwd0, 'archive:fork-cite');
|
|
355
|
+
return { kind: 'success', text: `Forked (nothing new to archive): branch \u201C${title}\u201D is session ${forked.childSessionId ?? '(created)'} citing ${parentState.chapters.length} existing chapter(s). Switch from the sidebar.` };
|
|
356
|
+
}
|
|
357
|
+
// Topic-sequential composition (record §4.2): merge adjacent
|
|
358
|
+
// same-task collections from the stored per-turn signatures. No
|
|
359
|
+
// signatures yet (a session that predates the feature) → the legacy
|
|
360
|
+
// size-based segmentation, which is exactly what deriveRanges is.
|
|
361
|
+
const composed = composeChapters(events, fromSeq, anchor, parentState.collections, {
|
|
362
|
+
mergeThreshold: config.mergeThreshold,
|
|
363
|
+
chapterLimit: config.chapterLimit,
|
|
364
|
+
});
|
|
365
|
+
const chapters = composed.chapters.length > 0
|
|
366
|
+
? composed.chapters
|
|
367
|
+
: deriveRanges(events, anchor, config.chapterTokenTarget, fromSeq).chapters;
|
|
368
|
+
const notes = composed.chapters.length > 0
|
|
369
|
+
? composed.notes
|
|
370
|
+
: ['no stored turn signatures — legacy size-based segmentation'];
|
|
371
|
+
const handoffNote = 'Branched from the conversation through the Chapters fork. The chapters listed above carry every prior word verbatim — reload any with the read tool on its path. No task was handed over with this fork: ask the user what this branch should work on.'
|
|
372
|
+
+ (notes.length > 0 ? `\n(Segmentation notes: ${notes.join('; ')})` : '');
|
|
373
|
+
const result = await runContinue(ports, { ...callerArgs, handoffNote, chapters }, config);
|
|
374
|
+
if (result.ok && cwd0 !== '')
|
|
375
|
+
config.scheduler?.schedule(cwd0, 'archive:fork');
|
|
376
|
+
const budgetText = result.budget !== undefined ? `; TOC ~${result.budget.usedTokens} tokens, allowance ${result.budget.allowanceTokens}` : '';
|
|
377
|
+
return { kind: 'success', text: `Forked: ${chapters.length} new chapter(s) archived (watermark respected: seqs ${fromSeq}..${anchor}), branch \u201C${title}\u201D is session ${result.childSessionId ?? '(created)'}${budgetText}. Switch to it from the sidebar — its first message is the table of contents.` };
|
|
378
|
+
}
|
|
379
|
+
catch (error) {
|
|
380
|
+
const refusal = refusalResult(error);
|
|
381
|
+
if (refusal !== null) {
|
|
382
|
+
const budget = refusal.budget !== undefined ? ` (notice ~${refusal.budget.usedTokens} > allowance ${refusal.budget.allowanceTokens})` : '';
|
|
383
|
+
return { kind: 'error', text: `chapters-fork refused: ${refusal.reason ?? 'refused'}${budget}` };
|
|
384
|
+
}
|
|
385
|
+
return { kind: 'error', text: `chapters-fork failed: ${String(error?.message ?? error)}`.slice(0, 500) };
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
};
|
|
389
|
+
// ------------------------------------------------- knowledge project line
|
|
390
|
+
// The notice carries the knowledge-project line (record §8) when a project
|
|
391
|
+
// is linked for this workspace: the deepest project record whose recorded
|
|
392
|
+
// cwd is a prefix of the caller's cwd.
|
|
393
|
+
const projectLineFor = (agent) => {
|
|
394
|
+
try {
|
|
395
|
+
const cwd = agent.session.header?.cwd ?? '';
|
|
396
|
+
const best = projectForCwd(store.projects(), cwd);
|
|
397
|
+
if (best === undefined)
|
|
398
|
+
return undefined;
|
|
399
|
+
return `Project: ${best.slug} \u00B7 ${best.projectKey}\nSearch past work with chapters_search (topic or keyword query; paths open with the read tool).`;
|
|
400
|
+
}
|
|
401
|
+
catch {
|
|
402
|
+
return undefined;
|
|
403
|
+
}
|
|
404
|
+
};
|
|
405
|
+
/** P3 §7.3: this machine's rules block for a continuation notice. */
|
|
406
|
+
const rulesSectionFor = (agent) => {
|
|
407
|
+
try {
|
|
408
|
+
if (config.harnessId === undefined || config.coreRulesBudgetTokens === undefined)
|
|
409
|
+
return {};
|
|
410
|
+
const cwd = agent.session.header?.cwd ?? '';
|
|
411
|
+
const best = projectForCwd(store.projects(), cwd);
|
|
412
|
+
if (best === undefined)
|
|
413
|
+
return {};
|
|
414
|
+
const built = buildRulesSection(path.join(cwd, DEFAULT_CLONE_DIR), {
|
|
415
|
+
projectKey: best.projectKey, harnessId: config.harnessId, budgetTokens: config.coreRulesBudgetTokens,
|
|
416
|
+
});
|
|
417
|
+
if (built.kind === 'none')
|
|
418
|
+
return {};
|
|
419
|
+
if (built.kind === 'refusal') {
|
|
420
|
+
const per = built.perRule.map((r) => `${r.id}=${r.tokens}`).join(', ');
|
|
421
|
+
return { refusal: `core rules overflow their budget (${built.total} tokens > cap ${built.cap}; per rule: ${per}). Revoke or shrink with /chapters-rule — the notice never clips.` };
|
|
422
|
+
}
|
|
423
|
+
return { section: built.text };
|
|
424
|
+
}
|
|
425
|
+
catch {
|
|
426
|
+
return {}; // rules are additive; a broken mirror must not break continuation
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
// ------------------------------------------------- knowledge search
|
|
430
|
+
// The mirror (clone) is the corpus: it holds local + pulled files, so
|
|
431
|
+
// searching it is searching the whole knowledge pool for this project.
|
|
432
|
+
const chaptersSearch = defineTool({
|
|
433
|
+
name: 'chapters_search',
|
|
434
|
+
description: 'Search this project\u2019s chapter knowledge pool (past sessions, indexed by topic/title/summary). '
|
|
435
|
+
+ 'Pass a topic or keyword query; raise maxTokens to see more of the ranked list. Results are file paths readable with the read tool.',
|
|
436
|
+
parameters: {
|
|
437
|
+
query: { type: 'string', required: true, description: 'Topic or keyword query.' },
|
|
438
|
+
maxTokens: { type: 'number', description: 'Token budget for the result list (default 400; raise to page deeper).' },
|
|
439
|
+
},
|
|
440
|
+
output: jsonOutput((value) => JSON.stringify(value, null, 1)),
|
|
441
|
+
async execute(args, exec) {
|
|
442
|
+
const caller = callerOf(exec);
|
|
443
|
+
if ('reason' in caller)
|
|
444
|
+
return { ...CALLER_MISSING };
|
|
445
|
+
const cwd = caller.session.header?.cwd ?? '';
|
|
446
|
+
const cloneDir = path.join(cwd, DEFAULT_CLONE_DIR);
|
|
447
|
+
if (!fs.existsSync(cloneDir)) {
|
|
448
|
+
return { ok: true, results: [], total: 0, shown: 0, note: 'no knowledge mirror yet — no project is linked for this workspace (link one with /chapters-link)' };
|
|
449
|
+
}
|
|
450
|
+
const outcome = searchKnowledge(cloneDir, args.query, args.maxTokens ?? config.searchMaxTokens ?? 400, {
|
|
451
|
+
...(config.harnessId !== undefined ? { harnessId: config.harnessId } : {}),
|
|
452
|
+
...(config.rulesCoreBonus !== undefined ? { rulesCoreBonus: config.rulesCoreBonus } : {}),
|
|
453
|
+
});
|
|
454
|
+
return {
|
|
455
|
+
ok: true,
|
|
456
|
+
results: outcome.results.map((r) => ({ score: r.score, date: r.date, kind: r.kind, title: r.title, path: r.path, topics: r.topics })),
|
|
457
|
+
total: outcome.total,
|
|
458
|
+
shown: outcome.shown,
|
|
459
|
+
budget: { requested: outcome.budget.requested, used: outcome.budget.used, remaining: outcome.budget.remaining },
|
|
460
|
+
...(outcome.total > outcome.shown ? { note: `showing ${outcome.shown} of ${outcome.total} within ${outcome.budget.requested} tokens — raise maxTokens to see the rest` } : {}),
|
|
461
|
+
};
|
|
462
|
+
},
|
|
463
|
+
});
|
|
464
|
+
const chaptersArtifact = defineTool({
|
|
465
|
+
name: 'chapters_artifact',
|
|
466
|
+
description: 'Query a stored artifact (a tool result too large to sit in context — deferred blobs and arrival-stored documents alike) '
|
|
467
|
+
+ 'WITHOUT loading it whole: action "toc" = heading map with line numbers (structured/markdown files), '
|
|
468
|
+
+ '"search" = query (regex or phrase) → small matched blocks with line numbers, "read" = exact line range. '
|
|
469
|
+
+ 'path accepts the artifacts/… path or the bare sha256 from the stub line.',
|
|
470
|
+
parameters: {
|
|
471
|
+
path: { type: 'string', required: true, description: 'Artifact reference from the stub: artifacts/<xx>/<sha>.txt path or the 64-hex sha.' },
|
|
472
|
+
action: { type: 'string', required: true, description: 'One of: toc | search | read.' },
|
|
473
|
+
query: { type: 'string', description: 'Required for search: regex or literal phrase (case-insensitive).' },
|
|
474
|
+
offset: { type: 'number', description: 'read: first line (1-based). Default 1.' },
|
|
475
|
+
limit: { type: 'number', description: 'read: line count (hard cap 400).' },
|
|
476
|
+
maxTokens: { type: 'number', description: 'search: budget for returned blocks (default 400).' },
|
|
477
|
+
},
|
|
478
|
+
output: jsonOutput((value) => JSON.stringify(value, null, 1)),
|
|
479
|
+
async execute(args, exec) {
|
|
480
|
+
const caller = callerOf(exec);
|
|
481
|
+
if ('reason' in caller)
|
|
482
|
+
return { ...CALLER_MISSING };
|
|
483
|
+
const cwd = caller.session.header?.cwd ?? '';
|
|
484
|
+
const storeDir = path.join(cwd, config.artifactStoreRoot ?? '.dsh-chapters');
|
|
485
|
+
let abs;
|
|
486
|
+
try {
|
|
487
|
+
abs = resolveArtifactPath(storeDir, args.path);
|
|
488
|
+
}
|
|
489
|
+
catch (error) {
|
|
490
|
+
return { ok: false, error: String(error?.message ?? error) };
|
|
491
|
+
}
|
|
492
|
+
if (!fs.existsSync(abs))
|
|
493
|
+
return { ok: false, error: `no artifact at ${args.path} inside ${storeDir}` };
|
|
494
|
+
const text = fs.readFileSync(abs, 'utf8');
|
|
495
|
+
const action = args.action.toLowerCase();
|
|
496
|
+
if (action === 'toc') {
|
|
497
|
+
const toc = buildToc(text);
|
|
498
|
+
return { ok: true, action, path: args.path, bytes: fs.statSync(abs).size, headings: toc.entries.length, ...(toc.truncated ? { truncated: true } : {}), toc: toc.entries.map((e) => `${' '.repeat(e.depth - 1)}L${e.line} ${'#'.repeat(e.depth)} ${e.title}`) };
|
|
499
|
+
}
|
|
500
|
+
if (action === 'search') {
|
|
501
|
+
if (args.query === undefined || args.query.trim() === '')
|
|
502
|
+
return { ok: false, error: 'search requires a non-empty query' };
|
|
503
|
+
const pack = searchArtifact(text, args.query, { maxTokens: args.maxTokens ?? config.searchMaxTokens ?? 400 });
|
|
504
|
+
return { ok: true, action, path: args.path, query: args.query, totalMatches: pack.total, returnedBlocks: pack.blocks.length, truncated: pack.truncated, ...(pack.remaining > 0 ? { remainingMatches: pack.remaining, note: 'narrow the query or raise maxTokens' } : {}), blocks: pack.blocks.map((b) => b.lines.join('\n')) };
|
|
505
|
+
}
|
|
506
|
+
if (action === 'read') {
|
|
507
|
+
const r = readLines(text, args.offset ?? 1, args.limit ?? 200);
|
|
508
|
+
return { ok: true, action, path: args.path, start: r.start, end: r.end, of: r.of, ...(r.end - r.start + 1 < (args.limit ?? 200) ? { note: 'file end reached' } : {}), lines: r.lines };
|
|
509
|
+
}
|
|
510
|
+
return { ok: false, error: `unknown action ${args.action} (use toc | search | read)` };
|
|
511
|
+
},
|
|
512
|
+
});
|
|
513
|
+
// ---------------------------------------------------------------- P3 proposal tool
|
|
514
|
+
const chaptersRulePropose = defineTool({
|
|
515
|
+
name: 'chapters_rule_propose',
|
|
516
|
+
description: 'Propose a PROJECT RULE for shared review (record \u00A77): a durable, generalizable instruction '
|
|
517
|
+
+ 'learned from this work (conventions, invariants, pitfalls \u2014 not one-off facts). It enters as '
|
|
518
|
+
+ 'proposed: it changes NO session anywhere until a human approves it on their own machine.',
|
|
519
|
+
parameters: {
|
|
520
|
+
category: { type: 'string', required: true, description: 'Short slug, e.g. security, testing, style, deploy.' },
|
|
521
|
+
text: { type: 'string', required: true, description: 'The rule, one imperative paragraph. A human reads exactly this.' },
|
|
522
|
+
},
|
|
523
|
+
output: jsonOutput((value) => JSON.stringify(value, null, 1)),
|
|
524
|
+
async execute(args, exec) {
|
|
525
|
+
const caller = callerOf(exec);
|
|
526
|
+
if ('reason' in caller)
|
|
527
|
+
return { ...CALLER_MISSING };
|
|
528
|
+
const cwd = caller.session.header?.cwd ?? '';
|
|
529
|
+
if (config.harnessId === undefined)
|
|
530
|
+
return { ok: false, text: 'rules surface not configured (harnessId absent)' };
|
|
531
|
+
try {
|
|
532
|
+
const reply = await rulesCommand({
|
|
533
|
+
cwd: () => cwd,
|
|
534
|
+
storeRoot: config.artifactStoreRoot,
|
|
535
|
+
harnessId: config.harnessId,
|
|
536
|
+
store,
|
|
537
|
+
projectFor: (c) => projectForCwd(store.projects(), c),
|
|
538
|
+
mirrorDir: (c) => path.join(c, DEFAULT_CLONE_DIR),
|
|
539
|
+
syncNow: async (c) => { config.scheduler?.schedule(c, 'archive:rules'); },
|
|
540
|
+
now: () => new Date(),
|
|
541
|
+
sourceSession: caller.session.id,
|
|
542
|
+
}, `add ${args.category} ${args.text}`);
|
|
543
|
+
return { ok: reply.kind === 'success', text: reply.text };
|
|
544
|
+
}
|
|
545
|
+
catch (error) {
|
|
546
|
+
return { ok: false, text: `chapters_rule_propose failed: ${String(error?.message ?? error).slice(0, 200)}` };
|
|
547
|
+
}
|
|
548
|
+
},
|
|
549
|
+
});
|
|
550
|
+
return { segment: chaptersSegment, chaptersContinue, chaptersFork, chaptersSearch, chaptersArtifact, chaptersRulePropose, forkCommand };
|
|
551
|
+
}
|
|
552
|
+
export function registerChaptersTools(ctx, store, config) {
|
|
553
|
+
const built = buildChaptersTools(ctx, store, config);
|
|
554
|
+
const disposeSegment = ctx.tools.register(built.segment);
|
|
555
|
+
const disposeContinue = ctx.tools.register(built.chaptersContinue);
|
|
556
|
+
const disposeFork = ctx.tools.register(built.chaptersFork);
|
|
557
|
+
const disposeSearch = ctx.tools.register(built.chaptersSearch);
|
|
558
|
+
const disposeArtifact = ctx.tools.register(built.chaptersArtifact);
|
|
559
|
+
const disposeRulePropose = ctx.tools.register(built.chaptersRulePropose);
|
|
560
|
+
let disposeCommand = null;
|
|
561
|
+
const commands = ctx.get?.('commands');
|
|
562
|
+
if (commands?.register !== undefined) {
|
|
563
|
+
try {
|
|
564
|
+
const disposer = commands.register(built.forkCommand);
|
|
565
|
+
if (typeof disposer === 'function')
|
|
566
|
+
disposeCommand = disposer;
|
|
567
|
+
}
|
|
568
|
+
catch (error) {
|
|
569
|
+
ctx.logger?.warn?.(`dsh-chapters: /chapters-fork command registration failed (${String(error)}); tools unaffected`);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
return () => {
|
|
573
|
+
disposeSegment();
|
|
574
|
+
disposeContinue();
|
|
575
|
+
disposeFork();
|
|
576
|
+
disposeSearch();
|
|
577
|
+
disposeArtifact(), disposeRulePropose();
|
|
578
|
+
disposeCommand?.();
|
|
579
|
+
};
|
|
580
|
+
}
|
|
581
|
+
//# sourceMappingURL=tools.js.map
|
package/lib/tools.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|