@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.
Files changed (119) hide show
  1. package/LICENSE +14 -0
  2. package/README.md +644 -0
  3. package/cordis.patch.yml +88 -0
  4. package/docs/architecture.md +460 -0
  5. package/docs/contract.md +375 -0
  6. package/docs/development.md +437 -0
  7. package/docs/host-compaction-seam.md +117 -0
  8. package/docs/knowledge-repo.md +730 -0
  9. package/docs/provider.md +98 -0
  10. package/docs/verify.md +200 -0
  11. package/lib/archive.d.ts +88 -0
  12. package/lib/archive.js +114 -0
  13. package/lib/archive.js.map +1 -0
  14. package/lib/arrival.d.ts +23 -0
  15. package/lib/arrival.js +86 -0
  16. package/lib/arrival.js.map +1 -0
  17. package/lib/artifact-query.d.ts +53 -0
  18. package/lib/artifact-query.js +130 -0
  19. package/lib/artifact-query.js.map +1 -0
  20. package/lib/client.js +234 -0
  21. package/lib/client.js.map +1 -0
  22. package/lib/commands.d.ts +28 -0
  23. package/lib/commands.js +305 -0
  24. package/lib/commands.js.map +1 -0
  25. package/lib/compose.d.ts +30 -0
  26. package/lib/compose.js +131 -0
  27. package/lib/compose.js.map +1 -0
  28. package/lib/continue-core.d.ts +153 -0
  29. package/lib/continue-core.js +252 -0
  30. package/lib/continue-core.js.map +1 -0
  31. package/lib/engine-core.d.ts +219 -0
  32. package/lib/engine-core.js +405 -0
  33. package/lib/engine-core.js.map +1 -0
  34. package/lib/engine.d.ts +211 -0
  35. package/lib/engine.js +571 -0
  36. package/lib/engine.js.map +1 -0
  37. package/lib/enrich-queue.d.ts +66 -0
  38. package/lib/enrich-queue.js +100 -0
  39. package/lib/enrich-queue.js.map +1 -0
  40. package/lib/enrich-store.d.ts +31 -0
  41. package/lib/enrich-store.js +103 -0
  42. package/lib/enrich-store.js.map +1 -0
  43. package/lib/enrich-wire.d.ts +73 -0
  44. package/lib/enrich-wire.js +209 -0
  45. package/lib/enrich-wire.js.map +1 -0
  46. package/lib/enrich.d.ts +73 -0
  47. package/lib/enrich.js +150 -0
  48. package/lib/enrich.js.map +1 -0
  49. package/lib/gitops.d.ts +107 -0
  50. package/lib/gitops.js +539 -0
  51. package/lib/gitops.js.map +1 -0
  52. package/lib/index.d.ts +81 -0
  53. package/lib/index.js +305 -0
  54. package/lib/index.js.map +1 -0
  55. package/lib/indexing.d.ts +85 -0
  56. package/lib/indexing.js +212 -0
  57. package/lib/indexing.js.map +1 -0
  58. package/lib/injections.d.ts +66 -0
  59. package/lib/injections.js +83 -0
  60. package/lib/injections.js.map +1 -0
  61. package/lib/notice.d.ts +60 -0
  62. package/lib/notice.js +84 -0
  63. package/lib/notice.js.map +1 -0
  64. package/lib/provider.d.ts +44 -0
  65. package/lib/provider.js +66 -0
  66. package/lib/provider.js.map +1 -0
  67. package/lib/redact.d.ts +24 -0
  68. package/lib/redact.js +85 -0
  69. package/lib/redact.js.map +1 -0
  70. package/lib/registry.d.ts +120 -0
  71. package/lib/registry.js +130 -0
  72. package/lib/registry.js.map +1 -0
  73. package/lib/render.d.ts +40 -0
  74. package/lib/render.js +280 -0
  75. package/lib/render.js.map +1 -0
  76. package/lib/repo.d.ts +78 -0
  77. package/lib/repo.js +184 -0
  78. package/lib/repo.js.map +1 -0
  79. package/lib/rules-commands.d.ts +24 -0
  80. package/lib/rules-commands.js +138 -0
  81. package/lib/rules-commands.js.map +1 -0
  82. package/lib/rules.d.ts +90 -0
  83. package/lib/rules.js +185 -0
  84. package/lib/rules.js.map +1 -0
  85. package/lib/search.d.ts +48 -0
  86. package/lib/search.js +152 -0
  87. package/lib/search.js.map +1 -0
  88. package/lib/signature.d.ts +28 -0
  89. package/lib/signature.js +149 -0
  90. package/lib/signature.js.map +1 -0
  91. package/lib/store.d.ts +130 -0
  92. package/lib/store.js +235 -0
  93. package/lib/store.js.map +1 -0
  94. package/lib/sync.d.ts +183 -0
  95. package/lib/sync.js +719 -0
  96. package/lib/sync.js.map +1 -0
  97. package/lib/tools.d.ts +84 -0
  98. package/lib/tools.js +581 -0
  99. package/lib/tools.js.map +1 -0
  100. package/lib/treedx/client.d.ts +57 -0
  101. package/lib/treedx/client.js +82 -0
  102. package/lib/treedx/client.js.map +1 -0
  103. package/lib/treedx/provider.d.ts +39 -0
  104. package/lib/treedx/provider.js +479 -0
  105. package/lib/treedx/provider.js.map +1 -0
  106. package/lib/treedx/state.d.ts +27 -0
  107. package/lib/treedx/state.js +65 -0
  108. package/lib/treedx/state.js.map +1 -0
  109. package/lib/types.d.ts +100 -0
  110. package/lib/types.js +19 -0
  111. package/lib/types.js.map +1 -0
  112. package/lib/vocabulary.d.ts +41 -0
  113. package/lib/vocabulary.js +118 -0
  114. package/lib/vocabulary.js.map +1 -0
  115. package/package.json +132 -0
  116. package/presets/chapters/agent.cordis.yml +272 -0
  117. package/presets/chapters/preset.yml +3 -0
  118. package/presets/probe-roots/agent.cordis.yml +11 -0
  119. package/presets/probe-roots/preset.yml +3 -0
@@ -0,0 +1,305 @@
1
+ /**
2
+ * Host-side slash commands for the knowledge layer (knowledge-repo.md §5, §2).
3
+ * Both render as command flow nodes — verified to stay OUT of the model's
4
+ * context (record §7.2: in-session UX, zero context cost).
5
+ *
6
+ * /chapters-link show upstream + mirror status
7
+ * /chapters-link <local-path> bind a path upstream (no creds)
8
+ * /chapters-link <https-url> <token> bind a network git upstream
9
+ * /chapters-link treedx+<url>/<repo> <token> bind a TreeDX service upstream
10
+ * /chapters-status last sync result
11
+ * /chapters-enrich run | model … | report P2 enrichment surface (record §6.2)
12
+ */
13
+ import fs from 'node:fs';
14
+ import path from 'node:path';
15
+ import { DEFAULT_CLONE_DIR, planStoreToRepo, projectForCwd, readSyncStatus, readToken, runSync, writeToken, } from "./sync.js";
16
+ import { isLocalUpstreamUrl, readOrigin, resolveLocalUpstreamPath } from "./gitops.js";
17
+ import { parseKnowledgeRemote, projectKeyForTarget, projectKeyFromRemote, resolveProject } from "./repo.js";
18
+ import { createTreeDxClient } from "./treedx/client.js";
19
+ import { resolveRepoId } from "./treedx/provider.js";
20
+ import { readState } from "./treedx/state.js";
21
+ import { selectProvider } from "./provider.js";
22
+ const cwdOf = (agent) => (agent?.session?.header?.cwd ?? process.cwd());
23
+ /** branch name (or short oid) the mirror's HEAD points at. */
24
+ function readMirrorHead(mirrorAbs) {
25
+ try {
26
+ const head = fs.readFileSync(path.join(mirrorAbs, '.git', 'HEAD'), 'utf8').trim();
27
+ const m = /^ref: refs\/heads\/(.+)$/.exec(head);
28
+ return m?.[1] ?? head.slice(0, 8);
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ /** store files not yet present in the mirror (the honest pending-push view). */
35
+ function countPending(mirrorAbs, storeDir, projectKey) {
36
+ try {
37
+ return planStoreToRepo(storeDir, projectKey).filter((f) => !fs.existsSync(path.join(mirrorAbs, f.rel))).length;
38
+ }
39
+ catch {
40
+ return -1;
41
+ }
42
+ }
43
+ export function registerHostCommands(ctx, domain, config) {
44
+ const commands = ctx.get?.('commands');
45
+ const disposers = [];
46
+ if (commands?.register === undefined)
47
+ return () => { };
48
+ /**
49
+ * /chapters-link — the upstream configuration surface, three modes:
50
+ * (no args) show the current upstream + mirror state (git-status-like)
51
+ * <local-path> bind the pool to a directory upstream (bare repo created
52
+ * on demand; no credentials — §2.1's local upstreams)
53
+ * <url> <token> bind to an http(s) upstream; the token is REQUIRED unless
54
+ * the host is loopback, and is stored in the DSH home, 0600
55
+ */
56
+ const linkCommand = {
57
+ name: 'chapters-link',
58
+ description: 'Show / set this project\u2019s knowledge upstream: /chapters-link [path | <https-url> <token> | treedx+<url>/<repo> <token>]',
59
+ input: { hint: '[path | <https-remote-url> <token> | treedx+<url>/<repo> <token>]' },
60
+ async handler(invocation) {
61
+ const parts = (invocation.rawInput ?? '').trim().split(/\s+/).filter((p) => p.length > 0);
62
+ const cwd = cwdOf(invocation.agent);
63
+ const table = domain.table('projects');
64
+ try {
65
+ // ---- mode 1: no args — the git-status-like view
66
+ if (parts.length === 0) {
67
+ const rec = projectForCwd(table.entries(), cwd);
68
+ if (rec === undefined) {
69
+ return { kind: 'success', text: 'Upstream: none — this workspace is knowledge-local (chapters, forks, signatures all work; nothing syncs).\nSet one: /chapters-link <path> or /chapters-link <https-url> <token>' };
70
+ }
71
+ const mirrorAbs = path.join(cwd, DEFAULT_CLONE_DIR);
72
+ const treedx = (rec.kind ?? 'git') === 'treedx';
73
+ const tstate = treedx ? readState(mirrorAbs) : null;
74
+ const head = treedx ? (tstate?.head !== null && tstate?.head !== undefined ? tstate.head.slice(0, 10) : null) : readMirrorHead(mirrorAbs);
75
+ const origin = treedx ? tstate?.origin ?? null : readOrigin(mirrorAbs);
76
+ const status = readSyncStatus(cwd, config.artifactStoreRoot);
77
+ const pending = countPending(mirrorAbs, path.join(cwd, config.artifactStoreRoot), rec.projectKey);
78
+ const hasToken = readToken(cwd, config.artifactStoreRoot, rec.projectKey) !== undefined;
79
+ const local = isLocalUpstreamUrl(rec.remote);
80
+ const lines = [
81
+ `Provider: ${rec.kind ?? 'git'}`,
82
+ `Upstream: ${rec.remote}`,
83
+ `Bound: ${rec.slug} · key ${rec.projectKey} · since ${rec.linkedAt}`,
84
+ `Mirror: ${fs.existsSync(mirrorAbs) ? DEFAULT_CLONE_DIR : '(not created yet)'}` +
85
+ (treedx ? ` head ${head ?? (tstate === null ? 'not cloned' : 'empty repo')}${tstate?.offline === true ? ' · OFFLINE (push deferred)' : ''}` : ` branch ${head ?? 'main'}`) +
86
+ (origin !== null && origin !== (treedx ? rec.remote : local ? resolveLocalUpstreamPath(rec.remote, cwd) : rec.remote) ? ` [origin drift: ${origin} — will rebuild]` : ''),
87
+ `Sync: ${status === null ? 'never run' : `${status.mode} @ ${status.at}`}${status !== null && !status.lastOk ? ` — ${status.detail}` : ''}`,
88
+ `Pending: ${pending} file(s) not yet mirrored${hasToken || local ? '' : ' ⚠ no credentials — /chapters-link ' + (treedx ? 'treedx+<url>/<repo> <token>' : '<url> <token>')}`,
89
+ `Harness: ${rec.harnessId}`,
90
+ ];
91
+ return { kind: 'success', text: lines.join('\n') };
92
+ }
93
+ // ---- mode 2: local-path upstream
94
+ const target = parts[0];
95
+ if (!/^https?:\/\//.test(target) && (target.startsWith('/') || target === '~' || target.startsWith('~/') || target.startsWith('./') || target.startsWith('../') || /^file:\/\/\//.test(target))) {
96
+ const resolved = resolveLocalUpstreamPath(target, cwd);
97
+ const record = {
98
+ projectKey: projectKeyFromRemote(`file://${resolved}`),
99
+ slug: path.basename(resolved).replace(/\.git$/, ''),
100
+ remote: resolved,
101
+ harnessId: config.harnessId,
102
+ linkedAt: new Date().toISOString(),
103
+ cwd,
104
+ };
105
+ table.put(record.projectKey, record);
106
+ const sync = await syncNow(cwd, record, undefined);
107
+ return { kind: 'success', text: `Linked to local upstream ${resolved} (a bare pool repo is created there if absent; no credentials needed).\nKey: ${record.projectKey}\nSync: ${sync.mode} \u2014 ${sync.steps.join(' \u2192 ') || sync.detail}` };
108
+ }
109
+ // ---- mode 4: TreeDX service upstream (§15 amendment)
110
+ if (target.startsWith('treedx+')) {
111
+ const parsed = parseKnowledgeRemote(target); // throws on a malformed form — caught below
112
+ const token = parts[1];
113
+ if (token === undefined || token === '') {
114
+ return { kind: 'error', text: 'TreeDX always needs a bearer token: /chapters-link treedx+<url>/<repo> <token> (a local dev container: scripts/treedx-local.sh token mints one)' };
115
+ }
116
+ if (parsed.treedx === undefined)
117
+ return { kind: 'error', text: 'internal: treedx+ target did not parse to a service target' };
118
+ const client = createTreeDxClient({ baseUrl: parsed.treedx.baseUrl, token, fetchTimeoutMs: 15000 });
119
+ // Resolve-or-create the managed repository — linking is an explicit
120
+ // human act (§2.1), so creating the named pool is in scope here and
121
+ // ONLY here. 409 (exists) is a success path. One shared live-shaped
122
+ // catalog parser with the transport (repoCatalog/resolveRepoId) —
123
+ // the first live run broke precisely on parser drift.
124
+ let repoId = await resolveRepoId(client, parsed.treedx.repoName);
125
+ let resolveNote = '';
126
+ if (repoId === '') {
127
+ const created = await client.post('/api/v1/repos', {
128
+ repositoryName: parsed.treedx.repoName, source: { type: 'empty' }, placement: { mode: 'local' },
129
+ });
130
+ if (!created.ok && created.code !== 'conflict' && created.status !== 409) {
131
+ return { kind: 'error', text: `TreeDX repository '${parsed.treedx.repoName}' not found and create failed (${created.detail}) — check the URL/token or create it server-side.` };
132
+ }
133
+ resolveNote = '\nCreated the managed repository (born with refs/heads/main).';
134
+ repoId = await resolveRepoId(client, parsed.treedx.repoName);
135
+ }
136
+ const record = {
137
+ projectKey: projectKeyForTarget(parsed),
138
+ slug: parsed.treedx.repoName,
139
+ remote: target,
140
+ kind: 'treedx',
141
+ ...(repoId !== '' ? { repoId } : {}),
142
+ harnessId: config.harnessId,
143
+ linkedAt: new Date().toISOString(),
144
+ cwd,
145
+ };
146
+ writeToken(record.projectKey, token);
147
+ table.put(record.projectKey, record);
148
+ const sync = await syncNow(cwd, record, token);
149
+ return {
150
+ kind: 'success',
151
+ text: `Linked to TreeDX ${parsed.treedx.baseUrl} repo '${parsed.treedx.repoName}'${repoId !== '' ? ` (${repoId})` : ''}.\nKey: ${record.projectKey}\nCredentials stored (DSH home, 0600).${resolveNote}\nSync: ${sync.mode} — ${sync.steps.join(' → ') || sync.detail}` +
152
+ (sync.ok || sync.mode === 'local-only' ? '' : '\nThe service may be down or the token wrong — /chapters-status carries the detail; nothing else is affected.'),
153
+ };
154
+ }
155
+ // ---- mode 3: https upstream — token required unless loopback
156
+ if (!/^https?:\/\//.test(target)) {
157
+ return { kind: 'error', text: 'usage: /chapters-link [<local-path> | <https-url> <token>] \u2014 (no args shows the current upstream)' };
158
+ }
159
+ const token = parts[1];
160
+ const host = (() => { try {
161
+ return new URL(target).hostname;
162
+ }
163
+ catch {
164
+ return '';
165
+ } })();
166
+ const loopback = host === '127.0.0.1' || host === 'localhost' || host === '::1';
167
+ if (token === undefined && !loopback) {
168
+ return { kind: 'error', text: 'A credential is required for a network upstream: /chapters-link <url> <token> (stored 0600 under the DSH home \u2014 never in the project). Local paths need none: /chapters-link ./vendor/kb.git' };
169
+ }
170
+ const resolved = resolveProject(cwd, undefined, target);
171
+ const record = {
172
+ projectKey: resolved.projectKey,
173
+ slug: (resolved.remote ?? target).split('/').pop().replace(/\.git$/, ''),
174
+ remote: target,
175
+ harnessId: config.harnessId,
176
+ linkedAt: new Date().toISOString(),
177
+ cwd,
178
+ };
179
+ if (token !== undefined)
180
+ writeToken(record.projectKey, token);
181
+ table.put(record.projectKey, record);
182
+ const sync = await syncNow(cwd, record, token ?? readToken(cwd, config.artifactStoreRoot, record.projectKey));
183
+ const hint = sync.ok || sync.mode === 'local-only'
184
+ ? ''
185
+ : '\nThe upstream may not exist yet \u2014 create the private repo (GitHub creates one on push for a suitably-scoped token), or point at a local path: /chapters-link ./vendor/kb.git';
186
+ return { kind: 'success', text: `Linked to ${target}.\nKey: ${record.projectKey}${token === undefined ? '\n(no credentials: loopback upstream)' : '\nCredentials stored (DSH home, 0600).'}\nSync: ${sync.mode} \u2014 ${sync.steps.join(' \u2192 ') || sync.detail}${hint}` };
187
+ }
188
+ catch (error) {
189
+ return { kind: 'error', text: `chapters-link failed: ${String(error?.message ?? error)}`.slice(0, 300) };
190
+ }
191
+ },
192
+ };
193
+ /** one immediate sync pass for a fresh record (explicit project wins). */
194
+ async function syncNow(cwd, record, token) {
195
+ if (config.scheduler !== undefined)
196
+ return config.scheduler.run(cwd, 'link', record);
197
+ return runSync({
198
+ cwd, storeRoot: config.artifactStoreRoot, cloneDir: DEFAULT_CLONE_DIR,
199
+ project: record, ...(token !== undefined && token !== null ? { token } : {}),
200
+ force: true,
201
+ });
202
+ }
203
+ const statusCommand = {
204
+ name: 'chapters-status',
205
+ description: 'Show the knowledge-repo mirror status for this project.',
206
+ input: { hint: '[prints project, remote, and last sync result]' },
207
+ async handler(invocation) {
208
+ const cwd = cwdOf(invocation.agent);
209
+ const project = projectForCwd(domain.table('projects').entries(), cwd);
210
+ const status = readSyncStatus(cwd, config.artifactStoreRoot);
211
+ if (project === undefined && status === null) {
212
+ return { kind: 'success', text: 'No knowledge repository is linked yet. Link one with /chapters-link <https-remote-url> [token].' };
213
+ }
214
+ const lines = [];
215
+ if (project !== undefined) {
216
+ const pending = config.scheduler?.hasPending(cwd) === true;
217
+ lines.push(`Project: ${project.slug} \u00B7 key ${project.projectKey}`);
218
+ lines.push(`Remote: ${project.remote}`);
219
+ try {
220
+ lines.push(`Provider: ${selectProvider(project).describe(project)}`);
221
+ }
222
+ catch {
223
+ lines.push('Provider: (kind unrecognized — sync will refuse loudly, nothing silently reroutes)');
224
+ }
225
+ lines.push(pending ? 'Sync: a push is pending (debounced)' : `Sync: ${status?.mode ?? 'never run'}${pending ? '' : ''}`);
226
+ }
227
+ if (status !== null) {
228
+ lines.push(`Last sync: ${status.at} \u2014 ${status.lastOk ? 'synced' : `${status.mode ?? 'local-only'}: ${status.detail}`}`);
229
+ lines.push(` ${(status.steps ?? []).join(' \u2192 ')}`);
230
+ }
231
+ if (config.enrich !== undefined)
232
+ lines.push(config.enrich.statusLine());
233
+ return { kind: 'success', text: lines.join('\n') };
234
+ },
235
+ };
236
+ const enrichCommand = {
237
+ name: 'chapters-enrich',
238
+ description: 'P2 chapter enrichment (record \u00A76): run a batch now, set the model, or report pending work.',
239
+ input: { hint: 'run | model <provider/model | clear> | report' },
240
+ async handler(invocation) {
241
+ if (config.enrich === undefined)
242
+ return { kind: 'error', text: 'enrichment is not wired on this plane' };
243
+ const parts = (invocation.rawInput ?? '').trim().split(/\s+/).filter((p) => p.length > 0);
244
+ const verb = parts[0] ?? 'help';
245
+ try {
246
+ if (verb === 'model') {
247
+ const arg = parts[1];
248
+ if (arg === undefined) {
249
+ const o = config.enrich.modelOverride();
250
+ return { kind: 'success', text: `enrichment model: ${o ?? 'conversation default'}${o === undefined || o === null ? '' : ' (override)'}` };
251
+ }
252
+ await config.enrich.setModelOverride(arg === 'clear' ? null : arg);
253
+ return { kind: 'success', text: arg === 'clear' ? 'enrichment model reset to the conversation default' : `enrichment model set to ${arg} (pending chapters re-qualify under the new key)` };
254
+ }
255
+ if (verb === 'run') {
256
+ const r = await config.enrich.runNow(cwdOf(invocation.agent));
257
+ return { kind: 'success', text: `enrichment: processed ${r.processed} chapter(s); ${r.remaining} pending` };
258
+ }
259
+ if (verb === 'report') {
260
+ return { kind: 'success', text: `${config.enrich.statusLine()}\npending: ${await config.enrich.pendingCount()} chapter(s)` };
261
+ }
262
+ return { kind: 'success', text: 'usage: /chapters-enrich run | model <provider/model | clear> | report' };
263
+ }
264
+ catch (error) {
265
+ return { kind: 'error', text: `chapters-enrich failed: ${String(error?.message ?? error).slice(0, 200)}` };
266
+ }
267
+ },
268
+ };
269
+ try {
270
+ const d1 = commands.register(linkCommand);
271
+ if (typeof d1 === 'function')
272
+ disposers.push(d1);
273
+ const d2 = commands.register(statusCommand);
274
+ if (typeof d2 === 'function')
275
+ disposers.push(d2);
276
+ const d3 = commands.register(enrichCommand);
277
+ if (typeof d3 === 'function')
278
+ disposers.push(d3);
279
+ if (config.rules !== undefined) {
280
+ const rulesFn = config.rules;
281
+ const rulesCommandDef = {
282
+ name: 'chapters-rule',
283
+ description: 'Project rules (record \u00A77): propose, review, approve per machine, revoke.',
284
+ input: { hint: 'add <category> <text> | list [--all|--proposed|--category <c>] | approve <id> | revoke <id>' },
285
+ async handler(invocation) {
286
+ const r = await rulesFn(cwdOf(invocation.agent), invocation.rawInput ?? '');
287
+ return { kind: r.kind, text: r.text };
288
+ },
289
+ };
290
+ const d4 = commands.register(rulesCommandDef);
291
+ if (typeof d4 === 'function')
292
+ disposers.push(d4);
293
+ }
294
+ }
295
+ catch (error) {
296
+ // LOUD on the operator's console too — a swallowed register error here is
297
+ // how r35g's silent command-absence cost an extra boot to diagnose.
298
+ const message = `dsh-chapters: host command registration failed (${String(error)})`;
299
+ ctx.logger?.warn?.(message);
300
+ console.error(message);
301
+ }
302
+ return () => { for (const d of disposers)
303
+ d(); };
304
+ }
305
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { CollectionSignature } from './signature.ts';
2
+ import type { ChapterRange } from './types.ts';
3
+ import type { SessionEventLike } from './types.ts';
4
+ export interface ComposeConfig {
5
+ /** Merge threshold τ in [0,1]: collections merge while overlap score ≥ τ. */
6
+ mergeThreshold: number;
7
+ /** Estimated-token cap per chapter; overshoot forces a split. */
8
+ chapterLimit: number;
9
+ }
10
+ export interface ComposeResult {
11
+ chapters: ChapterRange[];
12
+ notes: string[];
13
+ /** Span events belonging to turns that did not complete inside the span. */
14
+ unarchivedSeqs: number[];
15
+ }
16
+ /**
17
+ * Overlap score in [0,1]: path matches weigh 2× (same file ≈ same task),
18
+ * command and term matches 1×; denominator is the union, so a collection
19
+ * with mostly NEW signal scores low against the running chapter.
20
+ */
21
+ export declare function signatureScore(a: CollectionSignature, b: CollectionSignature): number;
22
+ /**
23
+ * Compose the span [spanStart, spanEnd] of `events` into topic-sequential
24
+ * chapters from `collections` (the session's stored per-turn signatures).
25
+ *
26
+ * Returns no chapters when the span holds no COMPLETED collections — the
27
+ * caller then falls back to its legacy size-based behavior rather than
28
+ * archiving nothing-and-claiming-to.
29
+ */
30
+ export declare function composeChapters(events: readonly SessionEventLike[], spanStart: number, spanEnd: number, collections: readonly CollectionSignature[], config: ComposeConfig): ComposeResult;
package/lib/compose.js ADDED
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Topic-sequential composition (knowledge-repo.md §4.2–4.4).
3
+ *
4
+ * The user requirement in the record: consecutive message collections that
5
+ * reference the SAME TASK merge into one chapter; a chapter splits only when
6
+ * the task changes (signature overlap < τ) or the chapter outgrows a limit.
7
+ * Greedy, sequential, deterministic — and composed from the per-turn
8
+ * signatures already stored at turn/end (§4.1), so archive time is O(turns).
9
+ *
10
+ * Completeness guard (§4.3): only collections whose turn COMPLETED inside the
11
+ * span are archived; anything cut by a span boundary stays live and is noted,
12
+ * never silently dropped and never silently included.
13
+ *
14
+ * Pure module: events + stored collections + config in, chapter ranges out.
15
+ * The titles/summaries come from deriveIdentity (engine-core) — the same
16
+ * deterministic derivation the rest of the plugin uses; P2 enrichment may
17
+ * relabel later, never re-chapter (append-only, §4.4).
18
+ */
19
+ import { deriveIdentity } from "./engine-core.js";
20
+ const union = (a, b) => new Set([...a, ...b]);
21
+ const inter = (a, b) => {
22
+ const set = new Set(a);
23
+ return b.reduce((n, v) => n + (set.has(v) ? 1 : 0), 0);
24
+ };
25
+ /**
26
+ * Overlap score in [0,1]: path matches weigh 2× (same file ≈ same task),
27
+ * command and term matches 1×; denominator is the union, so a collection
28
+ * with mostly NEW signal scores low against the running chapter.
29
+ */
30
+ export function signatureScore(a, b) {
31
+ const num = 2 * inter(a.paths, b.paths) + inter(a.commands, b.commands) + inter(a.terms, b.terms);
32
+ const den = 2 * union(a.paths, b.paths).size + union(a.commands, b.commands).size + union(a.terms, b.terms).size;
33
+ if (den === 0)
34
+ return 0;
35
+ return num / den;
36
+ }
37
+ const messagesOf = (events, lo, hi) => events
38
+ .filter((e) => e.seq >= lo && e.seq <= hi && (e.type === 'user/message' || e.type === 'assistant/message'))
39
+ .map((e) => {
40
+ const d = (e.data ?? {});
41
+ const message = (d.message ?? d);
42
+ const content = Array.isArray(message.content)
43
+ ? message.content
44
+ .filter((b) => b.type === 'text')
45
+ .map((b) => ({ type: 'text', ...(b.text !== undefined ? { text: b.text } : {}) }))
46
+ : [];
47
+ return { role: e.type === 'assistant/message' ? 'assistant' : 'user', content };
48
+ });
49
+ /**
50
+ * Compose the span [spanStart, spanEnd] of `events` into topic-sequential
51
+ * chapters from `collections` (the session's stored per-turn signatures).
52
+ *
53
+ * Returns no chapters when the span holds no COMPLETED collections — the
54
+ * caller then falls back to its legacy size-based behavior rather than
55
+ * archiving nothing-and-claiming-to.
56
+ */
57
+ export function composeChapters(events, spanStart, spanEnd, collections, config) {
58
+ const notes = [];
59
+ const inSpan = (c) => c.seqs.length > 0 && c.seqs[0] >= spanStart && c.seqs[c.seqs.length - 1] <= spanEnd;
60
+ const usable = collections.filter(inSpan).sort((a, b) => a.seqs[0] - b.seqs[0]);
61
+ if (usable.length === 0) {
62
+ const unarchived = events.filter((e) => e.seq >= spanStart && e.seq <= spanEnd).map((e) => e.seq);
63
+ notes.push('no completed collections in span — legacy segmentation applies');
64
+ return { chapters: [], notes, unarchivedSeqs: unarchived };
65
+ }
66
+ const covered = new Set(usable.flatMap((c) => c.seqs));
67
+ const unarchivedSeqs = events
68
+ .filter((e) => e.seq >= spanStart && e.seq <= spanEnd && !covered.has(e.seq))
69
+ .map((e) => e.seq);
70
+ if (unarchivedSeqs.length > 0) {
71
+ notes.push(`incomplete turn content (seqs ${unarchivedSeqs[0]}..${unarchivedSeqs[unarchivedSeqs.length - 1]}) `
72
+ + 'stays live — a chapter only archives completed turns');
73
+ }
74
+ const runningOf = (c) => ({
75
+ first: c, last: c, paths: new Set(c.paths), commands: new Set(c.commands), terms: new Set(c.terms),
76
+ size: c.size, startSeq: c.seqs[0], endSeq: c.seqs[c.seqs.length - 1],
77
+ });
78
+ const scoreAgainst = (c, r) => Math.max(signatureScore(c, r.first), signatureScore(c, r.last));
79
+ // primary match: the first path of c equals the first path of either member
80
+ // (with a prefix tolerance: 'src/render' vs 'src/render.ts' — the same file
81
+ // named from prose vs tool args).
82
+ const primaryOf = (sig) => sig.paths[0];
83
+ const primaryEq = (a, b) => {
84
+ if (a === undefined || b === undefined || a === '' || b === '')
85
+ return false;
86
+ return a === b || a.startsWith(b + '.') || b.startsWith(a + '.');
87
+ };
88
+ const primaryMatch = (c, r) => primaryEq(primaryOf(c), primaryOf(r.first)) || primaryEq(primaryOf(c), primaryOf(r.last));
89
+ const chapters = [];
90
+ let running = runningOf(usable[0]);
91
+ for (const c of usable.slice(1)) {
92
+ // r28 (first live topic test): overlap Jaccard ALONE never reaches τ on
93
+ // real research turns — a same-topic pair touching 5–6 files each scores
94
+ // ~0.08 because one shared path dilutes in a union of ~10. The signal
95
+ // that actually separates is the PRIMARY path (paths[0]: the first file
96
+ // the turn touched): identical across the render pair, distinct at every
97
+ // topic change. Merge on (score ≥ τ) OR (primary match).
98
+ const merge = (scoreAgainst(c, running) >= config.mergeThreshold || primaryMatch(c, running))
99
+ && running.size + c.size <= config.chapterLimit;
100
+ if (merge) {
101
+ for (const p of c.paths)
102
+ running.paths.add(p);
103
+ for (const q of c.commands)
104
+ running.commands.add(q);
105
+ for (const t of c.terms)
106
+ running.terms.add(t);
107
+ running.size += c.size;
108
+ running.last = c;
109
+ running.endSeq = c.seqs[c.seqs.length - 1];
110
+ }
111
+ else {
112
+ close();
113
+ running = runningOf(c);
114
+ }
115
+ }
116
+ close();
117
+ function close() {
118
+ const lo = running.startSeq;
119
+ const hi = running.endSeq;
120
+ const identity = deriveIdentity(messagesOf(events, lo, hi), false);
121
+ const pathsHint = [...running.paths].slice(0, 3).join(', ');
122
+ chapters.push({
123
+ title: identity.title,
124
+ summary: `${identity.summary}${pathsHint !== '' ? ` · ${pathsHint}` : ''}`,
125
+ startSeq: lo,
126
+ endSeq: hi,
127
+ });
128
+ }
129
+ return { chapters, notes, unarchivedSeqs };
130
+ }
131
+ //# sourceMappingURL=compose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"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"}