@kawacode/mcp 8.1.2 → 10.0.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/CLAUDE.md.example CHANGED
@@ -62,19 +62,15 @@ For exploration turns, still call `get_relevant_context` to enrich your answer
62
62
 
63
63
  ## Intent conflicts
64
64
 
65
- `create_and_activate_intent` auto-detects conflicts. When the tool returns `action: "conflict"`:
66
-
67
- 1. Present each conflict to the user — severity, the conflicting intent's title, nature of the overlap. **Do not name the author**: MCP payloads carry an opaque `authorId` only, never a display name (DECISION_LINKING §3.3). Who owns the conflicting intent is shown in Kawa Code.
68
- 2. **Classify the conflict**:
69
- - **Supersession** — the new work *replaces* or *retargets* the conflicting intent (same problem area, different approach; the old intent's assumptions no longer hold).
70
- - **Independent overlap** — the conflict is structural (same files / domain) but the new work is unrelated to the old one's purpose.
71
- 3. Ask the user for the disposition. **For supersession**, prefer this flow:
72
- - Create the new intent with `force: true`.
73
- - Then `complete_intent(intentId=<old>, status="superseded", supersededBy=<new>)`. This requires the old intent to be active, so: `activate_intent(<old>, force: true)` → `complete_intent(... status="superseded" ...)` → `activate_intent(<new>)`.
74
- - The lineage is durably recorded and queryable from either side.
75
- 4. **For independent overlap**, just retry `create_and_activate_intent` with `force: true`. Bypassed conflict IDs are recorded for audit, but no formal relationship is stored — the two intents remain unrelated in lineage walks.
76
-
77
- `force: true` only bypasses the conflict-detection block; it does NOT record any relationship. Always reach for supersession first when the new work genuinely replaces the old.
65
+ When a new intent overlaps existing work, **Kawa Code asks the user — you do not decide.** `create_and_activate_intent` reports the outcome in `action`:
66
+
67
+ - `created` / `reactivated` — done; the intent is active. Proceed.
68
+ - `pending_approval` — the user has been asked in Kawa Code (Orchestration panel). Tell them it is waiting for them, then call the tool again with the returned `pendingId` (same title, description and `repoPath`). Each call waits up to ~20 seconds for the answer.
69
+ - `awaiting_user` — stop calling. Tell the user the decision is waiting in Kawa Code, and call once more with the `pendingId` only after they say they have answered.
70
+ - `declined` — the user said no. **Stop all work on this task** and tell them.
71
+ - `expired` / `unknown_pending` — nothing was decided; call again without `pendingId` if the work is still wanted.
72
+
73
+ There is no `force` option and no way to bypass an overlap from the agent's side. The user chooses, in Kawa Code, whether the new work is independent of the existing intent or supersedes it; the lineage is recorded there. Do not name the authors of conflicting intents — you are not given them, and who owns what is shown in Kawa Code.
78
74
 
79
75
  ---
80
76
 
package/README.md CHANGED
@@ -117,7 +117,7 @@ Because compiled build directories can't be shared, they multiply — one per wo
117
117
 
118
118
  Isolation alone would just give you several agents doing overlapping work in private. Kawa's job is the coordination on top.
119
119
 
120
- Each agent session gets its own identity, and intents are tracked **per session** — so several intents can be active on one repository at once, each with its own current focus, without a lock and without agents clobbering each other's context. From there the normal machinery applies across agents exactly as it does across teammates: `get_relevant_context` surfaces what the *other* agents have already decided, `create_and_activate_intent` reports a conflict when new work overlaps something already in flight, and the pre-edit check fires on reasoning any of them recorded.
120
+ Each agent session gets its own identity, and intents are tracked **per session** — so several intents can be active on one repository at once, each with its own current focus, without a lock and without agents clobbering each other's context. From there the normal machinery applies across agents exactly as it does across teammates: `get_relevant_context` surfaces what the *other* agents have already decided, `create_and_activate_intent` hands the user a decision in Kawa Code when new work overlaps something already in flight, and the pre-edit check fires on reasoning any of them recorded.
121
121
 
122
122
  The practical result: your agents inherit each other's decisions instead of re-deriving them, and you find out about overlapping work while it's still cheap to redirect — not at merge time.
123
123
 
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * kawacode-on-session-end — Claude Code SessionEnd hook.
4
+ *
5
+ * Tells Kawa Code that this Claude Code session is over, so a request it parked
6
+ * for the user's decision (create_and_activate_intent overlap) is not turned
7
+ * into an intent for an agent that is no longer there. ONE IPC:
8
+ * intent:pending-intent-session-ended { aid }. Kawa Code owns what happens next.
9
+ *
10
+ * `aid` is the hook payload's `session_id`: the same id the MCP stamps on every
11
+ * request as `_agentId` (CLAUDE_CODE_SESSION_ID), so it names the same session.
12
+ *
13
+ * Failure discipline: every error path exits 0, as with kawacode-on-stop. The
14
+ * hook runs while Claude Code is shutting down and must never delay or fail it;
15
+ * if Kawa Code is down or the message is lost, the parked request simply
16
+ * expires on its own after 24 hours.
17
+ */
18
+ export {};
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * kawacode-on-session-end — Claude Code SessionEnd hook.
4
+ *
5
+ * Tells Kawa Code that this Claude Code session is over, so a request it parked
6
+ * for the user's decision (create_and_activate_intent overlap) is not turned
7
+ * into an intent for an agent that is no longer there. ONE IPC:
8
+ * intent:pending-intent-session-ended { aid }. Kawa Code owns what happens next.
9
+ *
10
+ * `aid` is the hook payload's `session_id`: the same id the MCP stamps on every
11
+ * request as `_agentId` (CLAUDE_CODE_SESSION_ID), so it names the same session.
12
+ *
13
+ * Failure discipline: every error path exits 0, as with kawacode-on-stop. The
14
+ * hook runs while Claude Code is shutting down and must never delay or fail it;
15
+ * if Kawa Code is down or the message is lost, the parked request simply
16
+ * expires on its own after 24 hours.
17
+ */
18
+ import { readFileSync } from 'node:fs';
19
+ import { connectToMuninn, request, disconnect, setQuiet } from './services/muninn-ipc.js';
20
+ // Hook stderr can surface to the user; suppress IPC lifecycle chatter.
21
+ setQuiet(!process.env.KAWA_DEBUG);
22
+ /** SessionEnd runs at shutdown under a short limit, so give up quickly. */
23
+ const SEND_TIMEOUT_MS = 1_000;
24
+ function readStdin() {
25
+ try {
26
+ return readFileSync(0, 'utf8');
27
+ }
28
+ catch {
29
+ return '';
30
+ }
31
+ }
32
+ async function main() {
33
+ let aid;
34
+ try {
35
+ aid = JSON.parse(readStdin()).session_id;
36
+ }
37
+ catch {
38
+ process.exit(0);
39
+ }
40
+ if (!aid)
41
+ process.exit(0);
42
+ try {
43
+ await connectToMuninn();
44
+ await request('intent', 'pending-intent-session-ended', { aid }, SEND_TIMEOUT_MS);
45
+ }
46
+ catch {
47
+ // Kawa Code is down or slow: nothing to do, the request expires on its own.
48
+ }
49
+ disconnect();
50
+ process.exit(0);
51
+ }
52
+ main().catch(() => process.exit(0));
53
+ //# sourceMappingURL=kawacode-on-session-end.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kawacode-on-session-end.js","sourceRoot":"","sources":["../src/kawacode-on-session-end.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEzF,uEAAuE;AACvE,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;AAEjC,2EAA2E;AAC3E,MAAM,eAAe,GAAG,KAAK,CAAA;AAE7B,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,GAAuB,CAAA;IAC3B,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,UAAU,CAAA;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEzB,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAA;QACvB,MAAM,OAAO,CAAC,QAAQ,EAAE,8BAA8B,EAAE,EAAE,GAAG,EAAE,EAAE,eAAe,CAAC,CAAA;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;IAC9E,CAAC;IACD,UAAU,EAAE,CAAA;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -80,6 +80,16 @@ export declare function repoAccessToolOutput(err: RepoAccessError, tool: string)
80
80
  * pass through unchanged.
81
81
  */
82
82
  export declare function routeResponse(msg: any): void;
83
+ /**
84
+ * A request got no answer within its timeout. A class of its own because "Kawa
85
+ * Code is busy" is not the same as "Kawa Code said no": it runs one request at a
86
+ * time, so a call can wait behind another session's slow handler, and a tool that
87
+ * can safely ask again (create_and_activate_intent's wait) needs to tell the two
88
+ * apart without matching on message text.
89
+ */
90
+ export declare class MuninnTimeoutError extends Error {
91
+ constructor(timeoutMs: number, domain: string, action: string);
92
+ }
83
93
  /**
84
94
  * Send an IPC request to Muninn and await the correlated response.
85
95
  *
@@ -310,6 +310,19 @@ export function routeResponse(msg) {
310
310
  pending.resolve(data);
311
311
  }
312
312
  }
313
+ /**
314
+ * A request got no answer within its timeout. A class of its own because "Kawa
315
+ * Code is busy" is not the same as "Kawa Code said no": it runs one request at a
316
+ * time, so a call can wait behind another session's slow handler, and a tool that
317
+ * can safely ask again (create_and_activate_intent's wait) needs to tell the two
318
+ * apart without matching on message text.
319
+ */
320
+ export class MuninnTimeoutError extends Error {
321
+ constructor(timeoutMs, domain, action) {
322
+ super(`Muninn request timeout (${timeoutMs / 1000}s): ${domain}:${action}`);
323
+ this.name = 'MuninnTimeoutError';
324
+ }
325
+ }
313
326
  /**
314
327
  * Send an IPC request to Muninn and await the correlated response.
315
328
  *
@@ -331,7 +344,7 @@ export async function request(domain, action, data = {}, timeoutMs = DEFAULT_REQ
331
344
  return new Promise((resolve, reject) => {
332
345
  const timer = setTimeout(() => {
333
346
  pendingRequests.delete(msgId);
334
- reject(new Error(`Muninn request timeout (${timeoutMs / 1000}s): ${domain}:${action}`));
347
+ reject(new MuninnTimeoutError(timeoutMs, domain, action));
335
348
  }, timeoutMs);
336
349
  pendingRequests.set(msgId, { resolve, reject, timer });
337
350
  const message = JSON.stringify({
@@ -1 +1 @@
1
- {"version":3,"file":"muninn-ipc.js","sourceRoot":"","sources":["../../src/services/muninn-ipc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"muninn-ipc.js","sourceRoot":"","sources":["../../src/services/muninn-ipc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,202 @@
1
+ import { test } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { MuninnTimeoutError } from '../services/muninn-ipc.js';
4
+ import { createIntentFlow, createAndActivateIntentSchema, WAIT_BUDGET_MS, MAX_STATUS_CALL_MS, } from './create-intent.js';
5
+ const INPUT = {
6
+ repoPath: '/repo',
7
+ title: 'Add X',
8
+ description: 'because',
9
+ templateType: 'feature',
10
+ };
11
+ /** A fake Muninn and a fake clock. `sleep` advances the clock; a reply may also
12
+ * cost time (a busy Kawa Code), which is how the deadline gets tested. */
13
+ function harness(replies, opts = {}) {
14
+ let t = 1_000_000;
15
+ const calls = [];
16
+ let i = 0;
17
+ const deps = {
18
+ now: () => t,
19
+ sleep: async (ms) => { t += ms; },
20
+ resolveOrigin: () => 'github.com:acme/widgets',
21
+ request: async (domain, action, data, timeoutMs) => {
22
+ const call = { domain, action, data, timeoutMs, at: t };
23
+ calls.push(call);
24
+ t += opts.costMs ?? 0;
25
+ const reply = replies[Math.min(i++, replies.length - 1)];
26
+ const out = typeof reply === 'function' ? reply(call) : reply;
27
+ if (out instanceof Error)
28
+ throw out;
29
+ return out;
30
+ },
31
+ };
32
+ return { deps, calls, elapsed: () => t - 1_000_000 };
33
+ }
34
+ const pending = (pollsLeft = 4) => ({ success: true, action: 'pending_approval', pendingId: 'p-1', pollsLeft });
35
+ // --- force is gone -----------------------------------------------------------
36
+ test('force is not part of the schema', () => {
37
+ assert.equal('force' in createAndActivateIntentSchema.shape, false);
38
+ assert.equal('pendingId' in createAndActivateIntentSchema.shape, true);
39
+ });
40
+ test('a call that passes force:true is refused before anything is sent', async () => {
41
+ const h = harness([{}]);
42
+ await assert.rejects(createIntentFlow({ ...INPUT, force: true }, h.deps), /`force` is no longer accepted/);
43
+ assert.equal(h.calls.length, 0);
44
+ });
45
+ test('force:false carries no meaning and is not an error', async () => {
46
+ const h = harness([{ success: true, action: 'created', intent: { id: 'i-1' } }, {}]);
47
+ const r = await createIntentFlow({ ...INPUT, force: false }, h.deps);
48
+ assert.equal(r.action, 'created');
49
+ });
50
+ // --- the first call ----------------------------------------------------------
51
+ test('no overlap: created, then set active under this session', async () => {
52
+ const h = harness([{ success: true, action: 'created', intent: { id: 'i-1' } }, { success: true }]);
53
+ const r = await createIntentFlow(INPUT, h.deps);
54
+ assert.deepEqual([r.success, r.action, r.intentId], [true, 'created', 'i-1']);
55
+ assert.deepEqual(h.calls.map(c => `${c.domain}:${c.action}`), ['intent:create', 'intent:set-active']);
56
+ assert.equal(h.calls[0].data.force, undefined, 'force is never sent');
57
+ assert.equal(h.calls[1].data.intentId, 'i-1');
58
+ });
59
+ test('an existing similar intent of this session is reactivated', async () => {
60
+ const h = harness([{ success: true, action: 'reactivated', intent: { id: 'i-9' } }, {}]);
61
+ const r = await createIntentFlow(INPUT, h.deps);
62
+ assert.equal(r.action, 'reactivated');
63
+ assert.match(r.message, /Reactivated/);
64
+ });
65
+ test('an overlap returns pending_approval at once, without waiting or polling', async () => {
66
+ const h = harness([{ success: true, action: 'pending_approval', pendingId: 'p-1', conflictCount: 2 }]);
67
+ const r = await createIntentFlow(INPUT, h.deps);
68
+ assert.deepEqual([r.success, r.action, r.pendingId, r.intentId], [false, 'pending_approval', 'p-1', '']);
69
+ assert.match(r.message, /overlaps with 2 existing intents/);
70
+ assert.match(r.message, /pendingId="p-1"/);
71
+ assert.equal(h.calls.length, 1, 'no status call yet');
72
+ assert.equal(h.elapsed(), 0, 'and no waiting');
73
+ });
74
+ test('the pending_approval reply carries no conflict titles, authors or ids', async () => {
75
+ // Even if Kawa Code (wrongly) sent the details along, none reach the model.
76
+ const h = harness([{
77
+ success: true, action: 'pending_approval', pendingId: 'p-1', conflictCount: 1,
78
+ conflicts: [{ title: 'SECRET TITLE', author: 'A Display Name', intentId: '6a1de54431fc5095c5645ce5' }],
79
+ }]);
80
+ const text = JSON.stringify(await createIntentFlow(INPUT, h.deps));
81
+ for (const leaked of ['SECRET TITLE', 'A Display Name', '6a1de544', 'author']) {
82
+ assert.equal(text.includes(leaked), false, `leaked ${leaked}`);
83
+ }
84
+ });
85
+ test('an error from Kawa Code is raised so the agent can tell the user how to recover', async () => {
86
+ const h = harness([{ success: false, error: "You're not signed in to Kawa Code." }]);
87
+ await assert.rejects(createIntentFlow(INPUT, h.deps), /not signed in/);
88
+ });
89
+ test('a create that times out is raised, not mistaken for a pending request', async () => {
90
+ const h = harness([new MuninnTimeoutError(30_000, 'intent', 'create')]);
91
+ await assert.rejects(createIntentFlow(INPUT, h.deps), MuninnTimeoutError);
92
+ });
93
+ // --- waiting with a pendingId -----------------------------------------------
94
+ const WITH_ID = { ...INPUT, pendingId: 'p-1' };
95
+ test('the first status call of a tool call counts as a poll; the rest of that call do not', async () => {
96
+ const h = harness([pending(), pending(), pending(), { success: true, action: 'created', intentId: 'i-1' }, {}]);
97
+ const r = await createIntentFlow(WITH_ID, h.deps);
98
+ assert.equal(r.action, 'created');
99
+ const status = h.calls.filter(c => c.action === 'pending-intent-status');
100
+ assert.deepEqual(status.map(c => c.data.countPoll), [true, false, false, false]);
101
+ assert.ok(status.every(c => c.data.pendingId === 'p-1' && c.data.repoOrigin === 'github.com:acme/widgets'));
102
+ });
103
+ test('a decision to create sets the intent active under this session', async () => {
104
+ const h = harness([{ success: true, action: 'created', intentId: 'i-1' }, {}]);
105
+ const r = await createIntentFlow(WITH_ID, h.deps);
106
+ assert.deepEqual([r.success, r.intentId], [true, 'i-1']);
107
+ assert.deepEqual(h.calls.map(c => c.action), ['pending-intent-status', 'set-active']);
108
+ assert.equal(h.calls[1].data.intentId, 'i-1');
109
+ });
110
+ test('a reactivated decision is reported as reactivated', async () => {
111
+ const h = harness([{ success: true, action: 'reactivated', intentId: 'i-2' }, {}]);
112
+ assert.equal((await createIntentFlow(WITH_ID, h.deps)).action, 'reactivated');
113
+ });
114
+ test('declined tells the agent to stop all work', async () => {
115
+ const h = harness([{ success: true, action: 'declined' }]);
116
+ const r = await createIntentFlow(WITH_ID, h.deps);
117
+ assert.deepEqual([r.success, r.action], [false, 'declined']);
118
+ assert.match(r.message, /Stop all work/);
119
+ assert.equal(h.calls.length, 1, 'nothing is activated');
120
+ });
121
+ test('expired and unknown_pending say how to start over', async () => {
122
+ for (const action of ['expired', 'unknown_pending']) {
123
+ const h = harness([{ success: true, action }]);
124
+ const r = await createIntentFlow(WITH_ID, h.deps);
125
+ assert.equal(r.action, action);
126
+ assert.match(r.message, /WITHOUT pendingId/);
127
+ }
128
+ });
129
+ test('awaiting_user tells the agent to stop polling and wait for the user', async () => {
130
+ const h = harness([{ success: true, action: 'awaiting_user', pendingId: 'p-1', pollsLeft: 0 }]);
131
+ const r = await createIntentFlow(WITH_ID, h.deps);
132
+ assert.deepEqual([r.action, r.pollsLeft], ['awaiting_user', 0]);
133
+ assert.match(r.message, /Stop checking/);
134
+ assert.equal(h.elapsed(), 0, 'it returns at once instead of burning 20 s');
135
+ });
136
+ // --- the deadline ------------------------------------------------------------
137
+ test('an unanswered wait ends at the 20 s wall-clock deadline with pending_approval', async () => {
138
+ const h = harness([pending(3)]);
139
+ const r = await createIntentFlow(WITH_ID, h.deps);
140
+ assert.equal(r.action, 'pending_approval');
141
+ assert.equal(r.pollsLeft, 3);
142
+ assert.match(r.message, /Checks left before you must stop and wait: 3/);
143
+ assert.ok(h.elapsed() <= WAIT_BUDGET_MS, `took ${h.elapsed()} ms`);
144
+ assert.ok(h.elapsed() >= WAIT_BUDGET_MS - 1_000, 'and used the budget');
145
+ const n = h.calls.length;
146
+ assert.ok(n >= 19 && n <= 21, `about one status call a second, got ${n}`);
147
+ });
148
+ test('every status call is bounded by what is left of the budget, never more than 30 s', async () => {
149
+ const h = harness([pending()]);
150
+ await createIntentFlow(WITH_ID, h.deps);
151
+ for (const c of h.calls) {
152
+ const remaining = WAIT_BUDGET_MS - (c.at - 1_000_000);
153
+ assert.ok(c.timeoutMs <= Math.min(remaining, MAX_STATUS_CALL_MS), `call at ${c.at} got ${c.timeoutMs}`);
154
+ assert.ok(c.timeoutMs > 0);
155
+ }
156
+ assert.equal(h.calls[0].timeoutMs, WAIT_BUDGET_MS, 'the first call may use the whole budget');
157
+ });
158
+ test('a status call that times out ends the wait as pending_approval, by the deadline', async () => {
159
+ // Kawa Code is busy with another session's slow handler: the call burns its
160
+ // whole timeout and gets nothing. The tool must still return by the deadline
161
+ // — not 30 s after it — and it is not an error.
162
+ let spent = 0;
163
+ const h = harness([(call) => {
164
+ spent = call.timeoutMs;
165
+ return new MuninnTimeoutError(call.timeoutMs / 1000, 'intent', 'pending-intent-status');
166
+ }], { costMs: 0 });
167
+ // The fake request must also cost its timeout, as a real one would.
168
+ const base = h.deps.request;
169
+ h.deps.request = async (d, a, data, timeoutMs) => {
170
+ try {
171
+ return await base(d, a, data, timeoutMs);
172
+ }
173
+ finally {
174
+ await h.deps.sleep(timeoutMs ?? 0);
175
+ }
176
+ };
177
+ const r = await createIntentFlow(WITH_ID, h.deps);
178
+ assert.equal(r.action, 'pending_approval');
179
+ assert.equal(spent, WAIT_BUDGET_MS);
180
+ assert.ok(h.elapsed() <= WAIT_BUDGET_MS, `took ${h.elapsed()} ms`);
181
+ });
182
+ test('a slow earlier reply leaves later calls only the time that remains', async () => {
183
+ const h = harness([pending()], { costMs: 4_000 });
184
+ const r = await createIntentFlow(WITH_ID, h.deps);
185
+ assert.equal(r.action, 'pending_approval');
186
+ assert.ok(h.elapsed() <= WAIT_BUDGET_MS + 4_000 + 1_000, `took ${h.elapsed()} ms`);
187
+ for (const c of h.calls)
188
+ assert.ok(c.timeoutMs <= MAX_STATUS_CALL_MS);
189
+ });
190
+ test('an error that is not a timeout is raised', async () => {
191
+ const h = harness([new Error('Muninn handler returned success: false with no error message')]);
192
+ await assert.rejects(createIntentFlow(WITH_ID, h.deps), /no error message/);
193
+ });
194
+ test('a reply it does not recognise is raised rather than guessed at', async () => {
195
+ const h = harness([{ success: true, action: 'something-new' }]);
196
+ await assert.rejects(createIntentFlow(WITH_ID, h.deps), /Unexpected reply/);
197
+ });
198
+ test('a decision to create with no intent id is raised', async () => {
199
+ const h = harness([{ success: true, action: 'created' }]);
200
+ await assert.rejects(createIntentFlow(WITH_ID, h.deps), /no intent ID/);
201
+ });
202
+ //# sourceMappingURL=_create-intent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_create-intent.test.js","sourceRoot":"","sources":["../../src/tools/_create-intent.test.ts"],"names":[],"mappings":"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"}
@@ -96,9 +96,12 @@ export interface CompleteIntentResponse {
96
96
  /**
97
97
  * Set when success=false to discriminate the failure mode:
98
98
  * - "transient-failure" → distiller LLM call or /check-conflicts API errored;
99
- * `failedStage` and `error` carry diagnostics, the user retries.
99
+ * `failedStage` and `error` carry diagnostics.
100
+ * - "resolution_required", "completion_locked", … likewise.
101
+ * Passed through as Kawa Code sent it. Its `message` / `error` is folded into
102
+ * `message` below, so this file knows no reason by name.
100
103
  */
101
- reason?: 'transient-failure';
104
+ reason?: string;
102
105
  failedStage?: string;
103
106
  error?: string;
104
107
  /**
@@ -56,31 +56,25 @@ export async function completeIntent(input) {
56
56
  const success = res.success !== false && !!intentId;
57
57
  const deferredConflicts = Array.isArray(res.deferredConflicts) ? res.deferredConflicts : [];
58
58
  const committedDecisionCount = typeof res.committedDecisionCount === 'number' ? res.committedDecisionCount : undefined;
59
- const reason = res.reason === 'transient-failure' ? res.reason : undefined;
59
+ const reason = typeof res.reason === 'string' ? res.reason : undefined;
60
60
  const apiSyncDeferred = res.apiSyncDeferred === true;
61
61
  const completionCollisions = Array.isArray(res.collisions) ? res.collisions : [];
62
62
  // Branch on the outcome shape — pick the message that tells the agent exactly
63
63
  // what to surface to the user.
64
64
  let newStatus;
65
65
  let message;
66
- if (!success && reason === 'transient-failure') {
67
- // Distiller LLM error or /check-conflicts API error. Bucket re-populated,
68
- // intent stays active. User decides whether to wait + retry or abandon.
69
- newStatus = res.status || 'active';
70
- const stage = res.failedStage ? ` (${res.failedStage})` : '';
71
- const errPart = res.error ? `: ${res.error}` : '';
72
- message =
73
- `Could not complete intent "${intentTitle}" — transient failure${stage}${errPart}. ` +
74
- `The ephemerals were preserved. Wait for the underlying issue to clear, then retry complete_intent. ` +
75
- `If retrying repeatedly fails, the user can abandon the intent (complete_intent(status="abandoned")).`;
76
- }
77
- else if (!success) {
78
- // Catch-all for legacy / unexpected error shapes, plus the anomalous
79
- // "no failure declared AND no intentId" case. In the latter nothing ran,
80
- // so do NOT echo the requested status as though it had landed.
66
+ if (!success) {
67
+ // Every failure shape (transient-failure, resolution_required,
68
+ // completion_locked, legacy errors), plus the anomalous "no failure
69
+ // declared AND no intentId" case. In the latter nothing ran, so do NOT echo
70
+ // the requested status as though it had landed. Kawa Code owns the wording
71
+ // of what to do next: relay its `message` (else `error`) verbatim.
81
72
  newStatus = res.newStatus || res.status || (intentId ? input.status : 'active');
73
+ const guidance = typeof res.message === 'string' && res.message
74
+ ? res.message
75
+ : typeof res.error === 'string' ? res.error : '';
82
76
  message = intentId
83
- ? `Failed to complete intent "${intentTitle}".`
77
+ ? `Failed to complete intent "${intentTitle}".${guidance ? ` ${guidance}` : ''}`
84
78
  : `Could not complete intent "${intentTitle}" — Kawa Code returned no intent id, so NOTHING was completed: the status was not changed, no code blocks were captured, and no decisions were distilled. Do NOT report this as committed. Retry complete_intent; if it fails again, surface the failure to the user rather than assuming the intent closed.`;
85
79
  }
86
80
  else {
@@ -149,6 +143,8 @@ You MUST inspect the response:
149
143
 
150
144
  - success === false && reason === "transient-failure" — the intent stays active and nothing was lost. Report failedStage plus the error; retry once the cause clears, or abandon if it persists.
151
145
 
146
+ - success === false with any other reason (e.g. "resolution_required", "completion_locked") — the intent stays active and nothing was written. \`message\` carries Kawa Code's instructions for the next step; follow them rather than retrying blindly.
147
+
152
148
  Autonomous sessions: deferredConflicts is not a blocking state — log and continue.`,
153
149
  inputSchema: completeIntentSchema,
154
150
  handler: completeIntent
@@ -1 +1 @@
1
- {"version":3,"file":"complete-intent.js","sourceRoot":"","sources":["../../src/tools/complete-intent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"complete-intent.js","sourceRoot":"","sources":["../../src/tools/complete-intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;IACzH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAClE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2VAA2V,CAAC;IACrY,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC;IACpH,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;SAC5F,QAAQ,CAAC,4KAA4K,CAAC;IACzL,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;IACzH,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qRAAqR,CAAC;CACtU,CAAC,CAAA;AAuGF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAA0B;IAC7D,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAEpE,kFAAkF;IAClF,iFAAiF;IACjF,4EAA4E;IAC5E,+EAA+E;IAC/E,iFAAiF;IACjF,4EAA4E;IAC5E,gDAAgD;IAEhD,8EAA8E;IAC9E,0EAA0E;IAC1E,wEAAwE;IACxE,2EAA2E;IAC3E,4EAA4E;IAC5E,mFAAmF;IACnF,MAAM,mBAAmB,GAAG,OAAO,CAAA;IACnC,gFAAgF;IAChF,gFAAgF;IAChF,kFAAkF;IAClF,kFAAkF;IAClF,kFAAkF;IAClF,+EAA+E;IAC/E,6EAA6E;IAC7E,+BAA+B;IAC/B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE;QAC9C,UAAU,EAAE,YAAY;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,KAAK,CAAC,aAAa;KACnC,EAAE,mBAAmB,CAAC,CAAA;IAEvB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAA;IACnC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,QAAQ,CAAA;IAC/C,MAAM,cAAc,GAAG,GAAG,CAAC,cAAc,IAAI,QAAQ,CAAA;IACrD,8EAA8E;IAC9E,wEAAwE;IACxE,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,6CAA6C;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAA;IACnD,MAAM,iBAAiB,GAAoB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5G,MAAM,sBAAsB,GAC1B,OAAO,GAAG,CAAC,sBAAsB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAA;IACzF,MAAM,MAAM,GAAuB,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1F,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,KAAK,IAAI,CAAA;IACpD,MAAM,oBAAoB,GAA0B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;IAEvG,8EAA8E;IAC9E,+BAA+B;IAC/B,IAAI,SAAiB,CAAA;IACrB,IAAI,OAAe,CAAA;IAEnB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,+DAA+D;QAC/D,oEAAoE;QACpE,4EAA4E;QAC5E,2EAA2E;QAC3E,mEAAmE;QACnE,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC/E,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO;YAC7D,CAAC,CAAC,GAAG,CAAC,OAAO;YACb,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAClD,OAAO,GAAG,QAAQ;YAChB,CAAC,CAAC,8BAA8B,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YAChF,CAAC,CAAC,8BAA8B,WAAW,8SAA8S,CAAA;IAC7V,CAAC;SAAM,CAAC;QACN,qEAAqE;QACrE,kEAAkE;QAClE,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAA;QACzC,MAAM,cAAc,GAA2B;YAC7C,SAAS,EAAE,WAAW,WAAW,uBAAuB;YACxD,MAAM,EAAE,WAAW,WAAW,oBAAoB;YAClD,IAAI,EAAE,WAAW,WAAW,kBAAkB;YAC9C,SAAS,EAAE,WAAW,WAAW,aAAa;YAC9C,UAAU,EAAE,WAAW,WAAW,wBAAwB;SAC3D,CAAA;QACD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,WAAW,WAAW,WAAW,CAAA;QACnF,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QACtF,MAAM,aAAa,GAAG,sBAAsB,IAAI,sBAAsB,GAAG,CAAC;YACxE,CAAC,CAAC,MAAM,sBAAsB,iCAAiC;YAC/D,CAAC,CAAC,EAAE,CAAA;QACN,MAAM,YAAY,GAAG,eAAe;YAClC,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC;YACrG,CAAC,CAAC,EAAE,CAAA;QACN,2EAA2E;QAC3E,kEAAkE;QAClE,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,GAAG,CAAC;YACnD,CAAC,CAAC,gBAAgB,oBAAoB,CAAC,MAAM,2CAA2C;gBACtF,oBAAoB;qBACjB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;qBAC/F,IAAI,CAAC,IAAI,CAAC;YACf,CAAC,CAAC,EAAE,CAAA;QACN,4EAA4E;QAC5E,4EAA4E;QAC5E,4EAA4E;QAC5E,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC;YACvD,CAAC,CAAC,MAAM,iBAAiB,CAAC,MAAM,sEAAsE;YACtG,CAAC,CAAC,EAAE,CAAA;QACN,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,GAAG,oBAAoB,CAAA;IACrG,CAAC;IAED,OAAO;QACL,OAAO;QACP,QAAQ;QACR,cAAc;QACd,SAAS;QACT,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO;QACP,sBAAsB;QACtB,iBAAiB,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;QAC/E,MAAM;QACN,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACnD,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;QAClF,qBAAqB,EAAE,OAAO,GAAG,CAAC,qBAAqB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;QAC5G,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,UAAU,EAAE,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS;KAC/E,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE;;;;;;;;;;;;mFAYoE;IACjF,WAAW,EAAE,oBAAoB;IACjC,OAAO,EAAE,cAAc;CACxB,CAAA"}
@@ -6,15 +6,15 @@ export declare const createAndActivateIntentSchema: z.ZodObject<{
6
6
  description: z.ZodString;
7
7
  templateType: z.ZodDefault<z.ZodEnum<["feature", "refactor", "exploration"]>>;
8
8
  constraints: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
9
- force: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
9
+ pendingId: z.ZodOptional<z.ZodString>;
10
10
  }, "strip", z.ZodTypeAny, {
11
11
  repoPath: string;
12
12
  title: string;
13
13
  description: string;
14
14
  templateType: "feature" | "refactor" | "exploration";
15
- force: boolean;
16
15
  repoOrigin?: string | undefined;
17
16
  constraints?: string[] | undefined;
17
+ pendingId?: string | undefined;
18
18
  }, {
19
19
  repoPath: string;
20
20
  title: string;
@@ -22,31 +22,51 @@ export declare const createAndActivateIntentSchema: z.ZodObject<{
22
22
  repoOrigin?: string | undefined;
23
23
  templateType?: "feature" | "refactor" | "exploration" | undefined;
24
24
  constraints?: string[] | undefined;
25
- force?: boolean | undefined;
25
+ pendingId?: string | undefined;
26
26
  }>;
27
27
  export type CreateIntentInput = z.infer<typeof createAndActivateIntentSchema>;
28
- interface ConflictInfo {
29
- intentId: string;
30
- title: string;
31
- author: string;
32
- status: string;
33
- createdBy: string;
34
- staleness: 'fresh' | 'aging' | 'likely_stale';
35
- severity: 'high' | 'medium' | 'low';
36
- overlapType: string;
37
- overlappingFiles: string[];
38
- similarityScore: number;
39
- oppositionDetected: boolean;
40
- oppositionDetail: string | null;
41
- }
28
+ export type CreateIntentAction = 'created' | 'reactivated' | 'pending_approval' | 'awaiting_user' | 'declined' | 'expired' | 'unknown_pending';
42
29
  export interface CreateIntentResponse {
43
30
  success: boolean;
44
31
  intentId: string;
45
- action: 'created' | 'reactivated' | 'conflict';
32
+ action: CreateIntentAction;
33
+ /** Present while the request is parked in Kawa Code. */
34
+ pendingId?: string;
35
+ /** How many more times the user's decision may be checked before waiting for them. */
36
+ pollsLeft?: number;
46
37
  message: string;
47
- conflicts?: ConflictInfo[];
38
+ }
39
+ /**
40
+ * How long one tool call waits for the user's decision. A WALL-CLOCK budget, not a
41
+ * count of status calls: each status call is bounded by what is left of it, so the
42
+ * deadline holds even when Kawa Code is busy. 20 s sits well inside every Claude
43
+ * Code tool-call limit (hours; auto-background at 2 min) and inside the 30 s IPC
44
+ * default.
45
+ */
46
+ export declare const WAIT_BUDGET_MS = 20000;
47
+ /** Pause between status calls. */
48
+ export declare const POLL_INTERVAL_MS = 1000;
49
+ /** The IPC default; a status call never gets more than this. */
50
+ export declare const MAX_STATUS_CALL_MS = 30000;
51
+ /** Below this, another status call cannot usefully finish: stop and report. */
52
+ export declare const MIN_STATUS_CALL_MS = 250;
53
+ /** The side effects, injected so the loop is testable without Muninn or a clock. */
54
+ export interface CreateIntentDeps {
55
+ request: (domain: string, action: string, data?: any, timeoutMs?: number) => Promise<any>;
56
+ now: () => number;
57
+ sleep: (ms: number) => Promise<void>;
58
+ resolveOrigin: (repoOrigin: string | undefined, repoPath: string) => string;
48
59
  }
49
60
  export declare function createAndActivateIntent(input: CreateIntentInput): Promise<CreateIntentResponse>;
61
+ /**
62
+ * Forward the request to Kawa Code and relay the outcome. No state, no cache: the
63
+ * parked request, the owner's answer and the poll cap all live in Kawa Code.
64
+ *
65
+ * Deliberately a plain forward-and-wait. The wait is here, not in Kawa Code,
66
+ * because Kawa Code runs one request at a time: a handler that waited would stall
67
+ * every other session's calls.
68
+ */
69
+ export declare function createIntentFlow(input: CreateIntentInput, deps: CreateIntentDeps): Promise<CreateIntentResponse>;
50
70
  export declare const createAndActivateIntentTool: {
51
71
  name: string;
52
72
  description: string;
@@ -57,15 +77,15 @@ export declare const createAndActivateIntentTool: {
57
77
  description: z.ZodString;
58
78
  templateType: z.ZodDefault<z.ZodEnum<["feature", "refactor", "exploration"]>>;
59
79
  constraints: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
60
- force: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
80
+ pendingId: z.ZodOptional<z.ZodString>;
61
81
  }, "strip", z.ZodTypeAny, {
62
82
  repoPath: string;
63
83
  title: string;
64
84
  description: string;
65
85
  templateType: "feature" | "refactor" | "exploration";
66
- force: boolean;
67
86
  repoOrigin?: string | undefined;
68
87
  constraints?: string[] | undefined;
88
+ pendingId?: string | undefined;
69
89
  }, {
70
90
  repoPath: string;
71
91
  title: string;
@@ -73,8 +93,7 @@ export declare const createAndActivateIntentTool: {
73
93
  repoOrigin?: string | undefined;
74
94
  templateType?: "feature" | "refactor" | "exploration" | undefined;
75
95
  constraints?: string[] | undefined;
76
- force?: boolean | undefined;
96
+ pendingId?: string | undefined;
77
97
  }>;
78
98
  handler: typeof createAndActivateIntent;
79
99
  };
80
- export {};
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { request } from '../services/muninn-ipc.js';
2
+ import { request, MuninnTimeoutError } from '../services/muninn-ipc.js';
3
3
  import { resolveOrigin } from './resolve-origin.js';
4
4
  export const createAndActivateIntentSchema = z.object({
5
5
  repoOrigin: z.string().optional().describe('Git remote origin URL. Auto-detected from repoPath via git if not provided.'),
@@ -8,52 +8,69 @@ export const createAndActivateIntentSchema = z.object({
8
8
  description: z.string().max(2000).describe('What this intent accomplishes'),
9
9
  templateType: z.enum(['feature', 'refactor', 'exploration']).default('feature').describe('Type of work'),
10
10
  constraints: z.array(z.string()).optional().describe('Requirements or constraints for this work'),
11
- force: z.boolean().optional().default(false).describe('Bypass conflict detection. Set to true after the user has reviewed detected conflicts and chosen to proceed anyway.'),
11
+ pendingId: z.string().optional().describe('Only after a pending_approval response: the pendingId it returned. Asks whether the user has decided. Pass the same title, description and repoPath as before.'),
12
12
  });
13
+ /**
14
+ * How long one tool call waits for the user's decision. A WALL-CLOCK budget, not a
15
+ * count of status calls: each status call is bounded by what is left of it, so the
16
+ * deadline holds even when Kawa Code is busy. 20 s sits well inside every Claude
17
+ * Code tool-call limit (hours; auto-background at 2 min) and inside the 30 s IPC
18
+ * default.
19
+ */
20
+ export const WAIT_BUDGET_MS = 20_000;
21
+ /** Pause between status calls. */
22
+ export const POLL_INTERVAL_MS = 1_000;
23
+ /** The IPC default; a status call never gets more than this. */
24
+ export const MAX_STATUS_CALL_MS = 30_000;
25
+ /** Below this, another status call cannot usefully finish: stop and report. */
26
+ export const MIN_STATUS_CALL_MS = 250;
27
+ const liveDeps = {
28
+ request,
29
+ now: () => Date.now(),
30
+ sleep: ms => new Promise(resolve => setTimeout(resolve, ms)),
31
+ resolveOrigin,
32
+ };
13
33
  export async function createAndActivateIntent(input) {
14
- const actualOrigin = resolveOrigin(input.repoOrigin, input.repoPath);
15
- // Step 1: Create the intent. If a sufficiently similar one created by THIS
16
- // session already exists, the server may reactivate it instead of creating a
17
- // duplicate (dedup is scoped per-session — IMPLEMENTATION_PLAN_MULTI_ACTIVE_INTENTS.md
18
- // §10.4 — so two sessions' near-duplicates are surfaced as conflicts, not merged).
19
- const createRes = await request('intent', 'create', {
20
- repoOrigin: actualOrigin,
34
+ return createIntentFlow(input, liveDeps);
35
+ }
36
+ /**
37
+ * Forward the request to Kawa Code and relay the outcome. No state, no cache: the
38
+ * parked request, the owner's answer and the poll cap all live in Kawa Code.
39
+ *
40
+ * Deliberately a plain forward-and-wait. The wait is here, not in Kawa Code,
41
+ * because Kawa Code runs one request at a time: a handler that waited would stall
42
+ * every other session's calls.
43
+ */
44
+ export async function createIntentFlow(input, deps) {
45
+ // `force` is gone (hard cut). Only the owner, in Kawa Code, can decide to
46
+ // proceed past an overlap. A client holding a stale schema must be told, not
47
+ // silently ignored: it believes it asked to bypass the check.
48
+ if (input.force === true) {
49
+ throw new Error('`force` is no longer accepted. If the new intent overlaps existing work, Kawa Code asks the user to decide; ' +
50
+ 'call create_and_activate_intent again without `force`.');
51
+ }
52
+ const origin = deps.resolveOrigin(input.repoOrigin, input.repoPath);
53
+ if (input.pendingId) {
54
+ return waitForDecision(origin, input.pendingId, deps);
55
+ }
56
+ // Create. If a sufficiently similar intent created by THIS session already
57
+ // exists, the server may reactivate it instead of creating a duplicate; two
58
+ // sessions' near-duplicates are surfaced as an overlap, not merged.
59
+ const createRes = await deps.request('intent', 'create', {
60
+ repoOrigin: origin,
21
61
  title: input.title,
22
62
  description: input.description,
23
63
  templateType: input.templateType,
24
64
  constraints: input.constraints || [],
25
65
  scope: { type: 'repo', paths: [] },
26
- force: input.force || false,
27
66
  });
28
- // Handle conflict detection — API returned 409 with conflict data.
29
- // Return the conflicts to the caller (Claude Code) so it can present
30
- // them to the user and optionally retry with force=true.
31
- if (createRes.conflict === true && createRes.conflicts) {
32
- const conflicts = createRes.conflicts;
33
- const lines = [
34
- `Found ${conflicts.length} potential conflict(s) with existing intents:`,
35
- '',
36
- ];
37
- for (const c of conflicts) {
38
- const badge = c.severity === 'high' ? '[HIGH]' : c.severity === 'medium' ? '[MEDIUM]' : '[LOW]';
39
- lines.push(`${badge} "${c.title}" by ${c.author} (${c.status}, ${c.staleness})`);
40
- if (c.overlappingFiles.length > 0) {
41
- lines.push(` Files: ${c.overlappingFiles.join(', ')}`);
42
- }
43
- if (c.oppositionDetected) {
44
- lines.push(` Semantic opposition: ${c.oppositionDetail}`);
45
- }
46
- lines.push(` Similarity: ${(c.similarityScore * 100).toFixed(0)}%`);
47
- lines.push('');
48
- }
49
- lines.push('To proceed anyway, call create_and_activate_intent again with force=true.');
50
- return {
51
- success: false,
52
- intentId: '',
53
- action: 'conflict',
54
- message: lines.join('\n'),
55
- conflicts,
56
- };
67
+ // Overlap: Kawa Code parked the request for the user. NOTHING about the
68
+ // overlapping intents is relayed here beyond a count — the API fills each one's
69
+ // `author` with a display name, and the card in Kawa Code is where the user
70
+ // reads the detail.
71
+ if (createRes.action === 'pending_approval') {
72
+ const count = typeof createRes.conflictCount === 'number' ? createRes.conflictCount : 0;
73
+ return pendingApproval(createRes.pendingId, undefined, count);
57
74
  }
58
75
  // Propagate Muninn-side errors (e.g. not signed in, API unreachable) to the AI
59
76
  // so it can tell the user how to recover instead of silently proceeding.
@@ -64,24 +81,118 @@ export async function createAndActivateIntent(input) {
64
81
  if (!intentId) {
65
82
  throw new Error('Intent creation succeeded but no intent ID was returned');
66
83
  }
67
- const action = createRes.action === 'reactivated' ? 'reactivated' : 'created';
68
- // Step 2: Set it as THIS session's current intent. Under the multi-active
69
- // model (no lock) set-active never conflicts — many intents can be active per
70
- // repo at once, and this only moves this session's `current` focus pointer.
71
- await request('intent', 'set-active', {
72
- repoOrigin: actualOrigin,
73
- intentId,
74
- });
75
- const message = action === 'reactivated'
76
- ? `Reactivated existing similar intent: "${input.title}" — resuming previous work instead of creating a duplicate.`
77
- : `Created and activated intent: "${input.title}"`;
84
+ return activate(origin, intentId, createRes.action === 'reactivated' ? 'reactivated' : 'created', input.title, deps);
85
+ }
86
+ /**
87
+ * Ask Kawa Code whether the user has decided, for up to [`WAIT_BUDGET_MS`].
88
+ *
89
+ * Only the FIRST status call of a tool call carries `countPoll`: the loop makes
90
+ * ~20 of them per call, and the cap on polling counts tool calls.
91
+ */
92
+ async function waitForDecision(origin, pendingId, deps) {
93
+ const deadline = deps.now() + WAIT_BUDGET_MS;
94
+ let countPoll = true;
95
+ let pollsLeft;
96
+ for (;;) {
97
+ const remaining = deadline - deps.now();
98
+ if (remaining < MIN_STATUS_CALL_MS)
99
+ break;
100
+ let res;
101
+ try {
102
+ res = await deps.request('intent', 'pending-intent-status', { repoOrigin: origin, pendingId, countPoll }, Math.min(remaining, MAX_STATUS_CALL_MS));
103
+ }
104
+ catch (err) {
105
+ // Kawa Code runs one request at a time, so a status call can sit behind
106
+ // another session's slow handler (a distillation can run for minutes).
107
+ // That is not a failure: the user has not decided, and the agent's next
108
+ // step is the same as for any other pending reply — call again.
109
+ if (err instanceof MuninnTimeoutError)
110
+ break;
111
+ throw err;
112
+ }
113
+ countPoll = false;
114
+ switch (res?.action) {
115
+ case 'created':
116
+ case 'reactivated': {
117
+ const intentId = res.intentId || res.intent?.id || '';
118
+ if (!intentId)
119
+ throw new Error('The decision was recorded but Kawa Code returned no intent ID');
120
+ return activate(origin, intentId, res.action, undefined, deps);
121
+ }
122
+ case 'declined':
123
+ return {
124
+ success: false,
125
+ intentId: '',
126
+ action: 'declined',
127
+ message: 'The user declined this intent. It was NOT created. Stop all work on this task now — ' +
128
+ 'make no further edits or commits — and tell the user you have stopped.',
129
+ };
130
+ case 'expired':
131
+ return {
132
+ success: false,
133
+ intentId: '',
134
+ action: 'expired',
135
+ message: 'The request went unanswered for 24 hours and expired. Nothing was created and nothing was decided. ' +
136
+ 'If the user still wants this work, call create_and_activate_intent again WITHOUT pendingId.',
137
+ };
138
+ case 'unknown_pending':
139
+ return {
140
+ success: false,
141
+ intentId: '',
142
+ action: 'unknown_pending',
143
+ message: 'Kawa Code has no pending request with that pendingId (it may have been cleaned up). ' +
144
+ 'Call create_and_activate_intent again WITHOUT pendingId to start over.',
145
+ };
146
+ case 'awaiting_user':
147
+ return {
148
+ success: false,
149
+ intentId: '',
150
+ action: 'awaiting_user',
151
+ pendingId,
152
+ pollsLeft: 0,
153
+ message: 'Stop checking. The decision is waiting for the user in Kawa Code (Orchestration panel). ' +
154
+ 'Tell the user, and do not call this tool again until they say they have answered; ' +
155
+ 'then call it once more with the same pendingId.',
156
+ };
157
+ case 'pending_approval':
158
+ pollsLeft = typeof res.pollsLeft === 'number' ? res.pollsLeft : pollsLeft;
159
+ break;
160
+ default:
161
+ throw new Error(`Unexpected reply from Kawa Code while waiting for the user's decision: ${JSON.stringify(res)}`);
162
+ }
163
+ const left = deadline - deps.now();
164
+ if (left < MIN_STATUS_CALL_MS)
165
+ break;
166
+ await deps.sleep(Math.min(POLL_INTERVAL_MS, left));
167
+ }
168
+ return pendingApproval(pendingId, pollsLeft);
169
+ }
170
+ function pendingApproval(pendingId, pollsLeft, conflictCount) {
171
+ const overlap = conflictCount && conflictCount > 0
172
+ ? `This intent overlaps with ${conflictCount} existing intent${conflictCount === 1 ? '' : 's'}. `
173
+ : '';
174
+ const left = pollsLeft === undefined ? '' : ` Checks left before you must stop and wait: ${pollsLeft}.`;
78
175
  return {
79
- success: true,
80
- intentId,
81
- action,
82
- message,
176
+ success: false,
177
+ intentId: '',
178
+ action: 'pending_approval',
179
+ pendingId,
180
+ pollsLeft,
181
+ message: `${overlap}The user decides in Kawa Code (Orchestration panel); the intent has NOT been created. ` +
182
+ `Tell the user it is waiting for them, then call create_and_activate_intent again with pendingId="${pendingId}" ` +
183
+ `and the same title, description and repoPath.${left}`,
83
184
  };
84
185
  }
186
+ /** Set the new intent as THIS session's current focus. Under the multi-active
187
+ * model (no lock) this never conflicts: it only moves this session's pointer. */
188
+ async function activate(origin, intentId, action, title, deps) {
189
+ await deps.request('intent', 'set-active', { repoOrigin: origin, intentId });
190
+ const named = title ? ` "${title}"` : '';
191
+ const message = action === 'reactivated'
192
+ ? `Reactivated existing similar intent${named} — resuming previous work instead of creating a duplicate.`
193
+ : `Created and activated intent${named}`;
194
+ return { success: true, intentId, action, message };
195
+ }
85
196
  export const createAndActivateIntentTool = {
86
197
  name: 'create_and_activate_intent',
87
198
  description: `Create a new intent from the user's request and mark it as active for THIS session.
@@ -95,13 +206,23 @@ This ensures all AI-generated code gets properly tracked and attributed.
95
206
 
96
207
  Multi-active model: many intents can be active on a repo at once (one per
97
208
  session/teammate). Creating + activating one only sets YOUR session's current
98
- focus — it never blocks or displaces another session's active intent, so there
99
- is no lock conflict to resolve.
209
+ focus — it never blocks or displaces another session's active intent.
210
+
211
+ If the new intent overlaps existing work, YOU do not decide what happens: Kawa
212
+ Code asks the user, and this tool reports the outcome. Act on "action":
213
+ - "created" / "reactivated": done; the intent is active. Proceed.
214
+ - "pending_approval": the user has been asked in Kawa Code. Tell them it is waiting
215
+ for them, then call this tool again with the returned pendingId (same title,
216
+ description and repoPath). Each call waits up to ~20 seconds for the answer.
217
+ - "awaiting_user": stop calling. Tell the user the decision is waiting in Kawa Code
218
+ and call once more with the pendingId only after they say they have answered.
219
+ - "declined": the user said no. Stop all work on this task and tell them.
220
+ - "expired" / "unknown_pending": nothing was decided; call again without pendingId
221
+ if the work is still wanted.
222
+ Never try to bypass an overlap; there is no force option.
100
223
 
101
- If the tool returns conflicts (action="conflict"), it found an existing
102
- team-member intent that overlaps semantically or in files. Present the conflict
103
- details to the user and ask whether to proceed. If yes, retry with force=true to
104
- bypass conflict detection.`,
224
+ If this tool call itself times out (before any pendingId was returned), call it
225
+ once more with the same arguments — it will not create a duplicate request.`,
105
226
  inputSchema: createAndActivateIntentSchema,
106
227
  handler: createAndActivateIntent
107
228
  };
@@ -1 +1 @@
1
- {"version":3,"file":"create-intent.js","sourceRoot":"","sources":["../../src/tools/create-intent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-intent.js","sourceRoot":"","sources":["../../src/tools/create-intent.ts"],"names":[],"mappings":"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"}
@@ -72,15 +72,15 @@ export declare const allTools: ({
72
72
  description: import("zod").ZodString;
73
73
  templateType: import("zod").ZodDefault<import("zod").ZodEnum<["feature", "refactor", "exploration"]>>;
74
74
  constraints: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
75
- force: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodBoolean>>;
75
+ pendingId: import("zod").ZodOptional<import("zod").ZodString>;
76
76
  }, "strip", import("zod").ZodTypeAny, {
77
77
  repoPath: string;
78
78
  title: string;
79
79
  description: string;
80
80
  templateType: "feature" | "refactor" | "exploration";
81
- force: boolean;
82
81
  repoOrigin?: string | undefined;
83
82
  constraints?: string[] | undefined;
83
+ pendingId?: string | undefined;
84
84
  }, {
85
85
  repoPath: string;
86
86
  title: string;
@@ -88,7 +88,7 @@ export declare const allTools: ({
88
88
  repoOrigin?: string | undefined;
89
89
  templateType?: "feature" | "refactor" | "exploration" | undefined;
90
90
  constraints?: string[] | undefined;
91
- force?: boolean | undefined;
91
+ pendingId?: string | undefined;
92
92
  }>;
93
93
  handler: typeof createAndActivateIntent;
94
94
  } | {
@@ -588,17 +588,16 @@ export declare const allTools: ({
588
588
  force: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodBoolean>>;
589
589
  }, "strip", import("zod").ZodTypeAny, {
590
590
  repoPath: string;
591
- force: boolean;
592
591
  contextIssues: boolean;
593
592
  model: string;
594
593
  maxStories: number;
595
594
  allowCommitSplitting: boolean;
596
595
  estimateOnly: boolean;
596
+ force: boolean;
597
597
  commits?: number | undefined;
598
598
  commitRange?: string | undefined;
599
599
  }, {
600
600
  repoPath: string;
601
- force?: boolean | undefined;
602
601
  commits?: number | undefined;
603
602
  commitRange?: string | undefined;
604
603
  contextIssues?: boolean | undefined;
@@ -606,6 +605,7 @@ export declare const allTools: ({
606
605
  maxStories?: number | undefined;
607
606
  allowCommitSplitting?: boolean | undefined;
608
607
  estimateOnly?: boolean | undefined;
608
+ force?: boolean | undefined;
609
609
  }>;
610
610
  handler: typeof inferHistory;
611
611
  } | {
@@ -11,17 +11,16 @@ export declare const inferHistorySchema: z.ZodObject<{
11
11
  force: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
12
12
  }, "strip", z.ZodTypeAny, {
13
13
  repoPath: string;
14
- force: boolean;
15
14
  contextIssues: boolean;
16
15
  model: string;
17
16
  maxStories: number;
18
17
  allowCommitSplitting: boolean;
19
18
  estimateOnly: boolean;
19
+ force: boolean;
20
20
  commits?: number | undefined;
21
21
  commitRange?: string | undefined;
22
22
  }, {
23
23
  repoPath: string;
24
- force?: boolean | undefined;
25
24
  commits?: number | undefined;
26
25
  commitRange?: string | undefined;
27
26
  contextIssues?: boolean | undefined;
@@ -29,6 +28,7 @@ export declare const inferHistorySchema: z.ZodObject<{
29
28
  maxStories?: number | undefined;
30
29
  allowCommitSplitting?: boolean | undefined;
31
30
  estimateOnly?: boolean | undefined;
31
+ force?: boolean | undefined;
32
32
  }>;
33
33
  export type InferHistoryInput = z.infer<typeof inferHistorySchema>;
34
34
  export type AutoMode = 'first-run' | 'resume' | 'head-equals-last' | 'fallback-rewritten' | 'fallback-no-remote' | 'fallback-error';
@@ -81,17 +81,16 @@ export declare const inferHistoryTool: {
81
81
  force: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
82
82
  }, "strip", z.ZodTypeAny, {
83
83
  repoPath: string;
84
- force: boolean;
85
84
  contextIssues: boolean;
86
85
  model: string;
87
86
  maxStories: number;
88
87
  allowCommitSplitting: boolean;
89
88
  estimateOnly: boolean;
89
+ force: boolean;
90
90
  commits?: number | undefined;
91
91
  commitRange?: string | undefined;
92
92
  }, {
93
93
  repoPath: string;
94
- force?: boolean | undefined;
95
94
  commits?: number | undefined;
96
95
  commitRange?: string | undefined;
97
96
  contextIssues?: boolean | undefined;
@@ -99,6 +98,7 @@ export declare const inferHistoryTool: {
99
98
  maxStories?: number | undefined;
100
99
  allowCommitSplitting?: boolean | undefined;
101
100
  estimateOnly?: boolean | undefined;
101
+ force?: boolean | undefined;
102
102
  }>;
103
103
  handler: typeof inferHistory;
104
104
  };
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@kawacode/mcp",
3
- "version": "8.1.2",
3
+ "version": "10.0.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": {
7
7
  "mcp": "build/index.js",
8
8
  "kawacode-mcp": "build/index.js",
9
9
  "kawacode-on-stop": "build/kawacode-on-stop.js",
10
+ "kawacode-on-session-end": "build/kawacode-on-session-end.js",
10
11
  "kawacode-on-pre-edit": "build/kawacode-on-pre-edit.js"
11
12
  },
12
13
  "type": "module",