@kawacode/mcp 8.0.2 → 8.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/build/kawacode-on-stop.js +53 -0
- package/build/kawacode-on-stop.js.map +1 -1
- package/build/stop/referenced-ids.d.ts +49 -0
- package/build/stop/referenced-ids.js +161 -0
- package/build/stop/referenced-ids.js.map +1 -0
- package/build/stop/referenced-ids.test.d.ts +1 -0
- package/build/stop/referenced-ids.test.js +149 -0
- package/build/stop/referenced-ids.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -64,6 +64,7 @@ import { readFileSync } from 'node:fs';
|
|
|
64
64
|
import { execSync } from 'node:child_process';
|
|
65
65
|
import { resolve as resolvePath } from 'node:path';
|
|
66
66
|
import { connectToMuninn, request, disconnect, setQuiet } from './services/muninn-ipc.js';
|
|
67
|
+
import { harvestReferences } from './stop/referenced-ids.js';
|
|
67
68
|
import { resolveOrigin } from './tools/resolve-origin.js';
|
|
68
69
|
import { lastUnfinalizedCommit, nagAlreadyInTranscript, extractCommitPath, detectGateSave } from './stop/uncompleted-commit.js';
|
|
69
70
|
import { emitInjection, emitActedOn, emitTurnEnd, estimateTokens } from './telemetry.js';
|
|
@@ -302,6 +303,57 @@ async function emitGateSaveSignal(payload) {
|
|
|
302
303
|
}
|
|
303
304
|
catch { /* fire-and-forget */ }
|
|
304
305
|
}
|
|
306
|
+
/**
|
|
307
|
+
* Job 4 — report the entity references this turn's answer named
|
|
308
|
+
* (DECISION_LINKING §6.8). Fire-and-forget: it produces no hook output and
|
|
309
|
+
* never influences whether the turn ends.
|
|
310
|
+
*
|
|
311
|
+
* FAILS CLOSED on a missing `CLAUDE_CODE_SESSION_ID` (§6.8E1). This hook is a
|
|
312
|
+
* DIFFERENT PROCESS from the MCP server, and each derives its session id from
|
|
313
|
+
* that variable independently — when it is set they agree by construction; when
|
|
314
|
+
* it is absent each falls back to its own random id, and the record would be
|
|
315
|
+
* filed under a session that owns nothing. A missing group is honest; a phantom
|
|
316
|
+
* one is not, and it fails silently.
|
|
317
|
+
*/
|
|
318
|
+
async function reportReferencedEntities(payload) {
|
|
319
|
+
if (process.env.KAWA_REFERENCED_ENTITIES === 'off')
|
|
320
|
+
return;
|
|
321
|
+
const cwd = payload.cwd;
|
|
322
|
+
const transcriptPath = payload.transcript_path;
|
|
323
|
+
if (!cwd || !transcriptPath)
|
|
324
|
+
return;
|
|
325
|
+
const sessionId = process.env.CLAUDE_CODE_SESSION_ID;
|
|
326
|
+
if (!sessionId)
|
|
327
|
+
return; // see the fail-closed note above
|
|
328
|
+
let transcript;
|
|
329
|
+
try {
|
|
330
|
+
transcript = readFileSync(transcriptPath, 'utf8');
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
const { candidates, knownFull, firstRequest } = harvestReferences(transcript);
|
|
336
|
+
if (candidates.length === 0)
|
|
337
|
+
return;
|
|
338
|
+
let repoOrigin;
|
|
339
|
+
try {
|
|
340
|
+
repoOrigin = resolveOrigin(undefined, cwd);
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
if (!repoOrigin)
|
|
346
|
+
return;
|
|
347
|
+
// Tokens, never prose. Muninn resolves ids to labels and decides which of
|
|
348
|
+
// them name anything — the hook stays a lexer.
|
|
349
|
+
await request('session', 'referenced-entities', {
|
|
350
|
+
repoOrigin,
|
|
351
|
+
sessionId,
|
|
352
|
+
candidates,
|
|
353
|
+
knownFull,
|
|
354
|
+
label: firstRequest,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
305
357
|
async function main() {
|
|
306
358
|
const captureOff = process.env.KAWA_THOUGHT_CAPTURE === 'off';
|
|
307
359
|
const collisionOff = process.env.KAWA_STOP_COLLISION_CHECK === 'off';
|
|
@@ -335,6 +387,7 @@ async function main() {
|
|
|
335
387
|
// signal (VALUE_METRICS Phase 2).
|
|
336
388
|
const captureTasks = [];
|
|
337
389
|
captureTasks.push(emitGateSaveSignal(payload));
|
|
390
|
+
captureTasks.push(reportReferencedEntities(payload).catch(() => { }));
|
|
338
391
|
if (!captureOff && sessionId && transcriptPath) {
|
|
339
392
|
captureTasks.push(request('capture-thoughts', 'capture', {
|
|
340
393
|
sessionId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kawacode-on-stop.js","sourceRoot":"","sources":["../src/kawacode-on-stop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kawacode-on-stop.js","sourceRoot":"","sources":["../src/kawacode-on-stop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harvest entity references out of the session transcript (DECISION_LINKING §6.8A).
|
|
3
|
+
*
|
|
4
|
+
* Two sets, both from one read of the file:
|
|
5
|
+
*
|
|
6
|
+
* - `candidates` — hex tokens the agent WROTE in this turn's prose. Typically
|
|
7
|
+
* 8-char decision prefixes and full 24-char intent ids.
|
|
8
|
+
* - `knownFull` — full-form ids appearing in kawa TOOL RESULTS anywhere in the
|
|
9
|
+
* session. The entities this session has demonstrably handled.
|
|
10
|
+
*
|
|
11
|
+
* `knownFull` is a prefix→full-id disambiguator, not a source of labels; Muninn
|
|
12
|
+
* resolves labels from its own memo. Sending tokens rather than prose also keeps
|
|
13
|
+
* the payload tiny and avoids shipping the assistant's output over IPC.
|
|
14
|
+
*
|
|
15
|
+
* # Why "this turn", not "the last assistant message"
|
|
16
|
+
*
|
|
17
|
+
* The design said to read the last assistant message. Verified against a real
|
|
18
|
+
* transcript, that is wrong: ONE turn produces many `type: "assistant"` lines —
|
|
19
|
+
* one per tool call — so the final line usually holds a single trailing
|
|
20
|
+
* sentence. In a 415-assistant-line transcript only 79 lines carried text at
|
|
21
|
+
* all. Reading just the last one would silently miss most of what the agent
|
|
22
|
+
* wrote, and the failure would look like an under-populated panel rather than a
|
|
23
|
+
* bug.
|
|
24
|
+
*
|
|
25
|
+
* A turn is therefore delimited by the last REAL user message — one the human
|
|
26
|
+
* typed, not the synthetic `user` messages that carry `tool_result` blocks back
|
|
27
|
+
* to the model.
|
|
28
|
+
*
|
|
29
|
+
* # Git short SHAs
|
|
30
|
+
*
|
|
31
|
+
* Not filtered, because they cannot be: a short SHA and a truncated decision id
|
|
32
|
+
* are the same shape. They are eliminated downstream by resolution — a SHA names
|
|
33
|
+
* no decision, so it resolves to nothing and never reaches the panel.
|
|
34
|
+
*/
|
|
35
|
+
export interface Harvest {
|
|
36
|
+
/** Hex tokens the agent wrote this turn. */
|
|
37
|
+
candidates: string[];
|
|
38
|
+
/** Full-form ids seen in kawa tool results, this session. */
|
|
39
|
+
knownFull: string[];
|
|
40
|
+
/** The session's first user request, used as a group label when the session
|
|
41
|
+
* has no intent — the only label some repos will ever show. */
|
|
42
|
+
firstRequest: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Scan a transcript once and return both sets plus the session's opening ask.
|
|
46
|
+
*/
|
|
47
|
+
export declare function harvestReferences(transcriptText: string): Harvest;
|
|
48
|
+
/** A full id: canonical UUID (decision) or 24 hex characters (intent ObjectId). */
|
|
49
|
+
export declare function isFullId(token: string): boolean;
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harvest entity references out of the session transcript (DECISION_LINKING §6.8A).
|
|
3
|
+
*
|
|
4
|
+
* Two sets, both from one read of the file:
|
|
5
|
+
*
|
|
6
|
+
* - `candidates` — hex tokens the agent WROTE in this turn's prose. Typically
|
|
7
|
+
* 8-char decision prefixes and full 24-char intent ids.
|
|
8
|
+
* - `knownFull` — full-form ids appearing in kawa TOOL RESULTS anywhere in the
|
|
9
|
+
* session. The entities this session has demonstrably handled.
|
|
10
|
+
*
|
|
11
|
+
* `knownFull` is a prefix→full-id disambiguator, not a source of labels; Muninn
|
|
12
|
+
* resolves labels from its own memo. Sending tokens rather than prose also keeps
|
|
13
|
+
* the payload tiny and avoids shipping the assistant's output over IPC.
|
|
14
|
+
*
|
|
15
|
+
* # Why "this turn", not "the last assistant message"
|
|
16
|
+
*
|
|
17
|
+
* The design said to read the last assistant message. Verified against a real
|
|
18
|
+
* transcript, that is wrong: ONE turn produces many `type: "assistant"` lines —
|
|
19
|
+
* one per tool call — so the final line usually holds a single trailing
|
|
20
|
+
* sentence. In a 415-assistant-line transcript only 79 lines carried text at
|
|
21
|
+
* all. Reading just the last one would silently miss most of what the agent
|
|
22
|
+
* wrote, and the failure would look like an under-populated panel rather than a
|
|
23
|
+
* bug.
|
|
24
|
+
*
|
|
25
|
+
* A turn is therefore delimited by the last REAL user message — one the human
|
|
26
|
+
* typed, not the synthetic `user` messages that carry `tool_result` blocks back
|
|
27
|
+
* to the model.
|
|
28
|
+
*
|
|
29
|
+
* # Git short SHAs
|
|
30
|
+
*
|
|
31
|
+
* Not filtered, because they cannot be: a short SHA and a truncated decision id
|
|
32
|
+
* are the same shape. They are eliminated downstream by resolution — a SHA names
|
|
33
|
+
* no decision, so it resolves to nothing and never reaches the panel.
|
|
34
|
+
*/
|
|
35
|
+
/** Full UUID, or any hex run of 8+ characters (covers 24-char ObjectIds and
|
|
36
|
+
* 8-char prefixes alike). UUID first: alternation order decides which wins. */
|
|
37
|
+
const ID_LIKE = /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b|\b[0-9a-f]{8,}\b/gi;
|
|
38
|
+
/** A tool whose results are worth harvesting full ids from. */
|
|
39
|
+
function isKawaTool(name) {
|
|
40
|
+
return /kawa/i.test(name);
|
|
41
|
+
}
|
|
42
|
+
/** Flatten a content item's text payload to a plain string. */
|
|
43
|
+
function itemText(item) {
|
|
44
|
+
if (typeof item?.text === 'string')
|
|
45
|
+
return item.text;
|
|
46
|
+
const c = item?.content;
|
|
47
|
+
if (typeof c === 'string')
|
|
48
|
+
return c;
|
|
49
|
+
if (Array.isArray(c)) {
|
|
50
|
+
return c.map((p) => (typeof p?.text === 'string' ? p.text : '')).join('\n');
|
|
51
|
+
}
|
|
52
|
+
return '';
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* True for a message that represents the human speaking.
|
|
56
|
+
*
|
|
57
|
+
* `tool_result` blocks come back as `user` messages too, so role alone cannot
|
|
58
|
+
* delimit a turn. A real prompt carries a string content, or an array with a
|
|
59
|
+
* `text` block in it.
|
|
60
|
+
*/
|
|
61
|
+
function isRealUserMessage(obj) {
|
|
62
|
+
if (obj?.type !== 'user')
|
|
63
|
+
return false;
|
|
64
|
+
const content = obj?.message?.content;
|
|
65
|
+
if (typeof content === 'string')
|
|
66
|
+
return content.trim().length > 0;
|
|
67
|
+
if (!Array.isArray(content))
|
|
68
|
+
return false;
|
|
69
|
+
return content.some((it) => it?.type === 'text' && typeof it.text === 'string');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Scan a transcript once and return both sets plus the session's opening ask.
|
|
73
|
+
*/
|
|
74
|
+
export function harvestReferences(transcriptText) {
|
|
75
|
+
const lines = transcriptText.split('\n');
|
|
76
|
+
// Pass 1 — locate this turn, remember tool names, and collect tool results.
|
|
77
|
+
let turnStart = 0;
|
|
78
|
+
let firstRequest = '';
|
|
79
|
+
const kawaToolUseIds = new Set();
|
|
80
|
+
const resultsByToolUseId = new Map();
|
|
81
|
+
for (let i = 0; i < lines.length; i++) {
|
|
82
|
+
const ln = lines[i].trim();
|
|
83
|
+
if (!ln)
|
|
84
|
+
continue;
|
|
85
|
+
let obj;
|
|
86
|
+
try {
|
|
87
|
+
obj = JSON.parse(ln);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (isRealUserMessage(obj)) {
|
|
93
|
+
turnStart = i;
|
|
94
|
+
if (!firstRequest) {
|
|
95
|
+
const content = obj.message.content;
|
|
96
|
+
const text = typeof content === 'string'
|
|
97
|
+
? content
|
|
98
|
+
: content.find((it) => it?.type === 'text')?.text || '';
|
|
99
|
+
firstRequest = text.replace(/\s+/g, ' ').trim().slice(0, 120);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const content = obj?.message?.content;
|
|
103
|
+
if (!Array.isArray(content))
|
|
104
|
+
continue;
|
|
105
|
+
for (const item of content) {
|
|
106
|
+
if (item?.type === 'tool_use' && item.id && isKawaTool(item.name || '')) {
|
|
107
|
+
kawaToolUseIds.add(item.id);
|
|
108
|
+
}
|
|
109
|
+
else if (item?.type === 'tool_result' && item.tool_use_id) {
|
|
110
|
+
resultsByToolUseId.set(item.tool_use_id, itemText(item));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Pass 2 — the current turn's assistant prose. `thinking` blocks are excluded
|
|
115
|
+
// deliberately: the panel reflects what the agent SAID, and the user never saw
|
|
116
|
+
// the reasoning trace as an answer.
|
|
117
|
+
const written = [];
|
|
118
|
+
for (let i = turnStart; i < lines.length; i++) {
|
|
119
|
+
const ln = lines[i].trim();
|
|
120
|
+
if (!ln)
|
|
121
|
+
continue;
|
|
122
|
+
let obj;
|
|
123
|
+
try {
|
|
124
|
+
obj = JSON.parse(ln);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
if (obj?.type !== 'assistant')
|
|
130
|
+
continue;
|
|
131
|
+
const content = obj?.message?.content;
|
|
132
|
+
if (!Array.isArray(content))
|
|
133
|
+
continue;
|
|
134
|
+
for (const item of content) {
|
|
135
|
+
if (item?.type === 'text' && typeof item.text === 'string')
|
|
136
|
+
written.push(item.text);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const candidates = dedupe(matchIds(written.join('\n')));
|
|
140
|
+
// Full ids from kawa tool results only. A full id is one that needs no
|
|
141
|
+
// disambiguation, so prefixes found here are of no use and are dropped.
|
|
142
|
+
const knownFull = dedupe([...kawaToolUseIds]
|
|
143
|
+
.map((id) => resultsByToolUseId.get(id) || '')
|
|
144
|
+
.flatMap((text) => matchIds(text))
|
|
145
|
+
.filter(isFullId));
|
|
146
|
+
return { candidates, knownFull, firstRequest };
|
|
147
|
+
}
|
|
148
|
+
function matchIds(text) {
|
|
149
|
+
if (!text)
|
|
150
|
+
return [];
|
|
151
|
+
return (text.match(ID_LIKE) || []).map((s) => s.toLowerCase());
|
|
152
|
+
}
|
|
153
|
+
/** A full id: canonical UUID (decision) or 24 hex characters (intent ObjectId). */
|
|
154
|
+
export function isFullId(token) {
|
|
155
|
+
return (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(token) ||
|
|
156
|
+
/^[0-9a-f]{24}$/.test(token));
|
|
157
|
+
}
|
|
158
|
+
function dedupe(values) {
|
|
159
|
+
return [...new Set(values)];
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=referenced-ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referenced-ids.js","sourceRoot":"","sources":["../../src/stop/referenced-ids.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { test } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { harvestReferences, isFullId } from './referenced-ids.js';
|
|
4
|
+
const DECISION = 'c48374ea-15c7-4564-96a7-6a71d439ebc8';
|
|
5
|
+
const INTENT = '6a80150aa0c97eed460f45d6';
|
|
6
|
+
// ---- transcript line builders (Claude Code JSONL shape, verified against a
|
|
7
|
+
// real transcript: `type` at top level, role on `message`, content is an array
|
|
8
|
+
// of {text|tool_use|tool_result|thinking} items) ----
|
|
9
|
+
function userPrompt(text) {
|
|
10
|
+
return JSON.stringify({ type: 'user', message: { role: 'user', content: [{ type: 'text', text }] } });
|
|
11
|
+
}
|
|
12
|
+
function assistantText(text) {
|
|
13
|
+
return JSON.stringify({
|
|
14
|
+
type: 'assistant',
|
|
15
|
+
message: { role: 'assistant', content: [{ type: 'text', text }] },
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
function assistantThinking(text) {
|
|
19
|
+
return JSON.stringify({
|
|
20
|
+
type: 'assistant',
|
|
21
|
+
message: { role: 'assistant', content: [{ type: 'thinking', thinking: text, text }] },
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function toolUse(name, id) {
|
|
25
|
+
return JSON.stringify({
|
|
26
|
+
type: 'assistant',
|
|
27
|
+
message: { role: 'assistant', content: [{ type: 'tool_use', name, id, input: {} }] },
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/** Tool results come back as `user` messages — which is exactly why role alone
|
|
31
|
+
* cannot delimit a turn. */
|
|
32
|
+
function toolResult(toolUseId, text) {
|
|
33
|
+
return JSON.stringify({
|
|
34
|
+
type: 'user',
|
|
35
|
+
message: { role: 'user', content: [{ type: 'tool_result', tool_use_id: toolUseId, content: text }] },
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
test('collects prose from the WHOLE turn, not just the last assistant line', () => {
|
|
39
|
+
// The bug this guards: one turn emits many assistant lines (one per tool
|
|
40
|
+
// call), so reading only the last would miss everything written before it.
|
|
41
|
+
const t = [
|
|
42
|
+
userPrompt('do the thing'),
|
|
43
|
+
assistantText(`Starting with ${DECISION.slice(0, 8)}`),
|
|
44
|
+
toolUse('Bash', 'tu1'),
|
|
45
|
+
toolResult('tu1', 'ok'),
|
|
46
|
+
assistantText('Done.'),
|
|
47
|
+
].join('\n');
|
|
48
|
+
const { candidates } = harvestReferences(t);
|
|
49
|
+
assert.deepEqual(candidates, ['c48374ea']);
|
|
50
|
+
});
|
|
51
|
+
test('only the CURRENT turn is harvested', () => {
|
|
52
|
+
const t = [
|
|
53
|
+
userPrompt('first ask'),
|
|
54
|
+
assistantText('mentioned aaaa1111 last turn'),
|
|
55
|
+
userPrompt('second ask'),
|
|
56
|
+
assistantText('mentioning bbbb2222 now'),
|
|
57
|
+
].join('\n');
|
|
58
|
+
const { candidates } = harvestReferences(t);
|
|
59
|
+
assert.deepEqual(candidates, ['bbbb2222']);
|
|
60
|
+
});
|
|
61
|
+
test('a tool_result does not start a new turn', () => {
|
|
62
|
+
// tool_results arrive as `user` messages; if they delimited turns, everything
|
|
63
|
+
// written before the last tool call would be dropped.
|
|
64
|
+
const t = [
|
|
65
|
+
userPrompt('do it'),
|
|
66
|
+
assistantText(`see ${DECISION}`),
|
|
67
|
+
toolUse('Bash', 'tu1'),
|
|
68
|
+
toolResult('tu1', 'output'),
|
|
69
|
+
assistantText('and done'),
|
|
70
|
+
].join('\n');
|
|
71
|
+
assert.deepEqual(harvestReferences(t).candidates, [DECISION]);
|
|
72
|
+
});
|
|
73
|
+
test('thinking blocks are excluded — the panel reflects what was SAID', () => {
|
|
74
|
+
const t = [
|
|
75
|
+
userPrompt('go'),
|
|
76
|
+
assistantThinking(`privately considering ${DECISION}`),
|
|
77
|
+
assistantText('publicly saying nothing'),
|
|
78
|
+
].join('\n');
|
|
79
|
+
assert.deepEqual(harvestReferences(t).candidates, []);
|
|
80
|
+
});
|
|
81
|
+
test('full ids are harvested from kawa tool results only', () => {
|
|
82
|
+
const t = [
|
|
83
|
+
userPrompt('go'),
|
|
84
|
+
toolUse('mcp__kawa-intents__get_relevant_context', 'tu1'),
|
|
85
|
+
toolResult('tu1', `{"decisionId":"${DECISION}","intentId":"${INTENT}"}`),
|
|
86
|
+
toolUse('Bash', 'tu2'),
|
|
87
|
+
toolResult('tu2', 'commit aaaa1111-2222-4333-8444-555555555555'),
|
|
88
|
+
assistantText('done'),
|
|
89
|
+
].join('\n');
|
|
90
|
+
const { knownFull } = harvestReferences(t);
|
|
91
|
+
assert.deepEqual(knownFull.sort(), [DECISION, INTENT].sort());
|
|
92
|
+
});
|
|
93
|
+
test('knownFull keeps only FULL ids — a prefix there disambiguates nothing', () => {
|
|
94
|
+
const t = [
|
|
95
|
+
userPrompt('go'),
|
|
96
|
+
toolUse('mcp__kawa-intents__get_decision_detail', 'tu1'),
|
|
97
|
+
toolResult('tu1', `supersedes: 1d562397 and ${DECISION}`),
|
|
98
|
+
assistantText('done'),
|
|
99
|
+
].join('\n');
|
|
100
|
+
assert.deepEqual(harvestReferences(t).knownFull, [DECISION]);
|
|
101
|
+
});
|
|
102
|
+
test('a git short SHA is harvested as a candidate — it cannot be told apart here', () => {
|
|
103
|
+
// Deliberate: the SHA and a truncated decision id are the same shape. It is
|
|
104
|
+
// excluded downstream by resolution, not by pattern.
|
|
105
|
+
const t = [userPrompt('go'), assistantText('committed as 2035539f')].join('\n');
|
|
106
|
+
assert.deepEqual(harvestReferences(t).candidates, ['2035539f']);
|
|
107
|
+
});
|
|
108
|
+
test('tokens shorter than 8 hex characters are ignored', () => {
|
|
109
|
+
const t = [userPrompt('go'), assistantText('see 2035539 and abc')].join('\n');
|
|
110
|
+
assert.deepEqual(harvestReferences(t).candidates, []);
|
|
111
|
+
});
|
|
112
|
+
test('a full UUID is captured whole rather than as its leading 8 chars', () => {
|
|
113
|
+
const t = [userPrompt('go'), assistantText(`"Summary" (${DECISION})`)].join('\n');
|
|
114
|
+
assert.deepEqual(harvestReferences(t).candidates, [DECISION]);
|
|
115
|
+
});
|
|
116
|
+
test('repeats within one turn collapse', () => {
|
|
117
|
+
const t = [
|
|
118
|
+
userPrompt('go'),
|
|
119
|
+
assistantText('c48374ea here'),
|
|
120
|
+
assistantText('and c48374ea again'),
|
|
121
|
+
].join('\n');
|
|
122
|
+
assert.deepEqual(harvestReferences(t).candidates, ['c48374ea']);
|
|
123
|
+
});
|
|
124
|
+
test('case is normalized', () => {
|
|
125
|
+
const t = [userPrompt('go'), assistantText('C48374EA')].join('\n');
|
|
126
|
+
assert.deepEqual(harvestReferences(t).candidates, ['c48374ea']);
|
|
127
|
+
});
|
|
128
|
+
test("the session's first request is captured as a fallback label", () => {
|
|
129
|
+
const t = [
|
|
130
|
+
userPrompt('read DECISION_LINKING.md and tell me if W3c is ready'),
|
|
131
|
+
assistantText('sure'),
|
|
132
|
+
userPrompt('now do it'),
|
|
133
|
+
assistantText('ok'),
|
|
134
|
+
].join('\n');
|
|
135
|
+
// FIRST, not latest: the label names the session, and repos that create no
|
|
136
|
+
// intents (kawa.dev-doc) will never show anything else.
|
|
137
|
+
assert.equal(harvestReferences(t).firstRequest, 'read DECISION_LINKING.md and tell me if W3c is ready');
|
|
138
|
+
});
|
|
139
|
+
test('malformed lines and an empty transcript are survivable', () => {
|
|
140
|
+
assert.deepEqual(harvestReferences('').candidates, []);
|
|
141
|
+
assert.deepEqual(harvestReferences('not json\n{"broken":\n').candidates, []);
|
|
142
|
+
});
|
|
143
|
+
test('isFullId accepts UUIDs and ObjectIds, rejects prefixes', () => {
|
|
144
|
+
assert.ok(isFullId(DECISION));
|
|
145
|
+
assert.ok(isFullId(INTENT));
|
|
146
|
+
assert.ok(!isFullId('c48374ea'));
|
|
147
|
+
assert.ok(!isFullId(''));
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=referenced-ids.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referenced-ids.test.js","sourceRoot":"","sources":["../../src/stop/referenced-ids.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kawacode/mcp",
|
|
3
|
-
"version": "8.0
|
|
3
|
+
"version": "8.1.0",
|
|
4
4
|
"description": "Team-aware memory for Claude Code, Cursor, and other AI coding assistants — intent tracking, decision history, real-time team conflict detection.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"bin": {
|