@kawacode/mcp 8.1.0 → 8.1.2
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 +1 -1
- package/build/index.js +34 -8
- package/build/index.js.map +1 -1
- package/build/resources/active-intent.js +6 -2
- package/build/resources/active-intent.js.map +1 -1
- package/build/services/muninn-ipc.d.ts +44 -0
- package/build/services/muninn-ipc.js +40 -2
- package/build/services/muninn-ipc.js.map +1 -1
- package/build/tools/_relevant-context-refusal.test.d.ts +1 -0
- package/build/tools/_relevant-context-refusal.test.js +71 -0
- package/build/tools/_relevant-context-refusal.test.js.map +1 -0
- package/build/tools/_repo-access.test.d.ts +1 -0
- package/build/tools/_repo-access.test.js +98 -0
- package/build/tools/_repo-access.test.js.map +1 -0
- package/build/tools/_required-args.d.ts +53 -0
- package/build/tools/_required-args.js +73 -0
- package/build/tools/_required-args.js.map +1 -0
- package/build/tools/_required-args.test.d.ts +1 -0
- package/build/tools/_required-args.test.js +71 -0
- package/build/tools/_required-args.test.js.map +1 -0
- package/build/tools/complete-intent.d.ts +3 -3
- package/build/tools/complete-intent.js +1 -1
- package/build/tools/complete-intent.js.map +1 -1
- package/build/tools/detect-intent-conflicts.d.ts +1 -1
- package/build/tools/detect-intent-conflicts.js +7 -2
- package/build/tools/detect-intent-conflicts.js.map +1 -1
- package/build/tools/get-relevant-context.js +6 -2
- package/build/tools/get-relevant-context.js.map +1 -1
- package/build/tools/resolve-origin.d.ts +3 -2
- package/build/tools/resolve-origin.js +4 -3
- package/build/tools/resolve-origin.js.map +1 -1
- package/package.json +1 -1
package/CLAUDE.md.example
CHANGED
|
@@ -64,7 +64,7 @@ For exploration turns, still call `get_relevant_context` to enrich your answer
|
|
|
64
64
|
|
|
65
65
|
`create_and_activate_intent` auto-detects conflicts. When the tool returns `action: "conflict"`:
|
|
66
66
|
|
|
67
|
-
1. Present each conflict to the user — severity, the conflicting intent's title
|
|
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
68
|
2. **Classify the conflict**:
|
|
69
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
70
|
- **Independent overlap** — the conflict is structural (same files / domain) but the new work is unrelated to the old one's purpose.
|
package/build/index.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
-
import { connectToMuninn, disconnect, ensureRepo } from './services/muninn-ipc.js';
|
|
5
|
+
import { connectToMuninn, disconnect, ensureRepo, RepoAccessError, repoAccessToolOutput } from './services/muninn-ipc.js';
|
|
6
6
|
import { resolveMangledArgs, describeChainedArgs } from './tools/_mangled-args.js';
|
|
7
|
+
import { missingRequiredArgs, describeMissingArgs, requiredKeys } from './tools/_required-args.js';
|
|
7
8
|
import { allTools, getRelevantContext, checkActiveIntent, createAndActivateIntent, activateIntent, resumeIntent, getIntentsForFile, listTeamIntents, completeIntent, updateIntent, logWork, recordDecision, getSessionDecisions, getProjectDecisions, getDecisionDetail, editSessionDecision, detectIntentConflicts, inferHistory, getResolutionContext, arbiterResolve, arbiterApply } from './tools/index.js';
|
|
8
9
|
import { prompts } from './prompts/intent-first-workflow.js';
|
|
9
10
|
import { resources, readActiveIntentResource } from './resources/active-intent.js';
|
|
@@ -33,9 +34,9 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
33
34
|
description: value._def?.description || ''
|
|
34
35
|
}
|
|
35
36
|
])),
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
// Same helper the dispatcher enforces with, so what we ADVERTISE as
|
|
38
|
+
// required and what we REJECT for being absent cannot drift apart.
|
|
39
|
+
required: requiredKeys(tool.inputSchema.shape)
|
|
39
40
|
}
|
|
40
41
|
}))
|
|
41
42
|
};
|
|
@@ -73,6 +74,29 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
73
74
|
salvaged.map(s => `${s.field} (absorbed by ${s.fromField})`).join(', '));
|
|
74
75
|
}
|
|
75
76
|
}
|
|
77
|
+
// Presence check, AFTER the repair above so a field absorbed by a malformed
|
|
78
|
+
// tool-call block is salvaged before it can be reported missing.
|
|
79
|
+
//
|
|
80
|
+
// Without this a missing required argument was forwarded as `undefined`, and
|
|
81
|
+
// the handler turned the resulting IPC error into a well-formed EMPTY result.
|
|
82
|
+
// A broken call was shaped exactly like "nothing found" — see _required-args.ts.
|
|
83
|
+
if (schema) {
|
|
84
|
+
const missing = missingRequiredArgs(schema.shape, args);
|
|
85
|
+
if (missing.length > 0) {
|
|
86
|
+
const message = describeMissingArgs(name, missing, args);
|
|
87
|
+
// stderr only — stdout is the MCP transport.
|
|
88
|
+
console.error(`[MuninnIPC] ${message}`);
|
|
89
|
+
return {
|
|
90
|
+
content: [
|
|
91
|
+
{
|
|
92
|
+
type: 'text',
|
|
93
|
+
text: JSON.stringify({ success: false, error: message, tool: name }, null, 2),
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
isError: true,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
76
100
|
try {
|
|
77
101
|
const repoPath = args?.repoPath;
|
|
78
102
|
if (repoPath) {
|
|
@@ -160,6 +184,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
160
184
|
// raised as McpError below.
|
|
161
185
|
if (error instanceof McpError)
|
|
162
186
|
throw error;
|
|
187
|
+
if (error instanceof RepoAccessError) {
|
|
188
|
+
return {
|
|
189
|
+
content: [{ type: 'text', text: JSON.stringify(repoAccessToolOutput(error, name), null, 2) }],
|
|
190
|
+
isError: true,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
163
193
|
const message = error instanceof Error ? error.message : 'Tool execution failed';
|
|
164
194
|
return {
|
|
165
195
|
content: [
|
|
@@ -261,10 +291,6 @@ function getZodSchema(zodType) {
|
|
|
261
291
|
return { type: 'string' };
|
|
262
292
|
}
|
|
263
293
|
}
|
|
264
|
-
function isRequired(zodType) {
|
|
265
|
-
const typeName = zodType._def?.typeName;
|
|
266
|
-
return typeName !== 'ZodOptional' && typeName !== 'ZodDefault';
|
|
267
|
-
}
|
|
268
294
|
/**
|
|
269
295
|
* Terminate the server process, closing the Muninn socket on the way out.
|
|
270
296
|
*
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { request, isConnected } from '../services/muninn-ipc.js';
|
|
1
|
+
import { request, isConnected, RepoAccessError, repoAccessToolOutput } from '../services/muninn-ipc.js';
|
|
2
2
|
export const activeIntentResource = {
|
|
3
3
|
uri: 'kawa://intent/active',
|
|
4
4
|
name: 'Active Intent',
|
|
@@ -41,7 +41,11 @@ export async function readActiveIntentResource(repoOrigin) {
|
|
|
41
41
|
}
|
|
42
42
|
}, null, 2);
|
|
43
43
|
}
|
|
44
|
-
catch {
|
|
44
|
+
catch (err) {
|
|
45
|
+
// A refusal is not a failed query: relay the structured, non-retryable output.
|
|
46
|
+
if (err instanceof RepoAccessError) {
|
|
47
|
+
return JSON.stringify(repoAccessToolOutput(err, activeIntentResource.uri), null, 2);
|
|
48
|
+
}
|
|
45
49
|
return JSON.stringify({
|
|
46
50
|
hasActiveIntent: false,
|
|
47
51
|
note: 'Failed to query Muninn for active intent.'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"active-intent.js","sourceRoot":"","sources":["../../src/resources/active-intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"active-intent.js","sourceRoot":"","sources":["../../src/resources/active-intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AASvG,MAAM,CAAC,MAAM,oBAAoB,GAAyB;IACxD,GAAG,EAAE,sBAAsB;IAC3B,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,0DAA0D;IACvE,QAAQ,EAAE,kBAAkB;CAC7B,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,UAAmB;IAChE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,eAAe,EAAE,KAAK;YACtB,IAAI,EAAE,6DAA6D;SACpE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE;YAChD,UAAU,EAAE,UAAU,IAAI,EAAE;SAC7B,CAAC,CAAA;QAEF,uDAAuD;QACvD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,eAAe,EAAE,KAAK;gBACtB,UAAU,EAAE,UAAU,IAAI,SAAS;gBACnC,IAAI,EAAE,UAAU;oBACd,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,+DAA+D;aACpE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACb,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,eAAe,EAAE,IAAI;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,UAAU;YAC3C,MAAM,EAAE;gBACN,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;gBACzB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;gBACrC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,SAAS;gBAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ;gBACjC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;gBACrC,UAAU,EAAE,CAAC;aACd;SACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,+EAA+E;QAC/E,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACrF,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,eAAe,EAAE,KAAK;YACtB,IAAI,EAAE,2CAA2C;SAClD,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,oBAAoB,CAAC,CAAA"}
|
|
@@ -29,6 +29,12 @@
|
|
|
29
29
|
* lifts it into `IpcMessage.aid` and keys the per-session current pointer on it.
|
|
30
30
|
*/
|
|
31
31
|
export declare const SESSION_ID: string;
|
|
32
|
+
interface PendingRequest {
|
|
33
|
+
resolve: (data: any) => void;
|
|
34
|
+
reject: (error: Error) => void;
|
|
35
|
+
timer: ReturnType<typeof setTimeout>;
|
|
36
|
+
}
|
|
37
|
+
export declare const pendingRequests: Map<string, PendingRequest>;
|
|
32
38
|
export declare function setQuiet(value: boolean): void;
|
|
33
39
|
/**
|
|
34
40
|
* Connect to Muninn's Huginn IPC socket.
|
|
@@ -37,6 +43,43 @@ export declare function setQuiet(value: boolean): void;
|
|
|
37
43
|
* Throws if Muninn is not running or handshake fails.
|
|
38
44
|
*/
|
|
39
45
|
export declare function connectToMuninn(socketPath?: string): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Kawa Code refused access to a repository (private repo without the GitHub App,
|
|
48
|
+
* unsupported host, not a member, ...). Carried as its own type so it survives
|
|
49
|
+
* `ensureRepo` and the dispatcher catch intact and the agent can be told to stop
|
|
50
|
+
* retrying. Muninn sends `{ success: false, code: 'no_repo_access', accessReason, error }`.
|
|
51
|
+
*/
|
|
52
|
+
export declare class RepoAccessError extends Error {
|
|
53
|
+
readonly code: "no_repo_access";
|
|
54
|
+
readonly accessReason: string;
|
|
55
|
+
constructor(message: string, accessReason: string);
|
|
56
|
+
}
|
|
57
|
+
/** Structured, non-retryable tool output for a repo-access refusal. */
|
|
58
|
+
export declare function repoAccessToolOutput(err: RepoAccessError, tool: string): {
|
|
59
|
+
success: boolean;
|
|
60
|
+
error: "no_repo_access";
|
|
61
|
+
reason: string;
|
|
62
|
+
retryable: boolean;
|
|
63
|
+
message: string;
|
|
64
|
+
tool: string;
|
|
65
|
+
};
|
|
66
|
+
/** Route an inbound response message to its waiting pendingRequest entry.
|
|
67
|
+
*
|
|
68
|
+
* Failure propagation has two layers:
|
|
69
|
+
* 1. Envelope-level: `msg.err` is set when the IPC dispatch itself failed
|
|
70
|
+
* (unknown domain, malformed message, etc.). Reject directly.
|
|
71
|
+
* 2. Application-level: Muninn handlers wrap their own failures INSIDE
|
|
72
|
+
* `msg.data` as `{ success: false, error: "..." }`. Without this check,
|
|
73
|
+
* tools silently received the failure object as a successful resolve and
|
|
74
|
+
* had to remember to inspect it themselves — which several built tools
|
|
75
|
+
* did not, leading to fake `success: true, intentId: ""` responses.
|
|
76
|
+
*
|
|
77
|
+
* Strict equality (`=== false`) is intentional. Async-start responses such as
|
|
78
|
+
* `{ started: true, message: "..." }` (inference run/evolve) and estimate
|
|
79
|
+
* responses (`{ estimate: {...} }`) carry no `success` field at all and must
|
|
80
|
+
* pass through unchanged.
|
|
81
|
+
*/
|
|
82
|
+
export declare function routeResponse(msg: any): void;
|
|
40
83
|
/**
|
|
41
84
|
* Send an IPC request to Muninn and await the correlated response.
|
|
42
85
|
*
|
|
@@ -75,3 +118,4 @@ export declare function isConnected(): boolean;
|
|
|
75
118
|
* Disconnect from Muninn.
|
|
76
119
|
*/
|
|
77
120
|
export declare function disconnect(): void;
|
|
121
|
+
export {};
|
|
@@ -47,7 +47,7 @@ let socket = null;
|
|
|
47
47
|
let connected = false;
|
|
48
48
|
let cawId = '';
|
|
49
49
|
let connectionPromise = null;
|
|
50
|
-
const pendingRequests = new Map();
|
|
50
|
+
export const pendingRequests = new Map();
|
|
51
51
|
/**
|
|
52
52
|
* Quiet mode: suppresses connection-lifecycle info logging (connect,
|
|
53
53
|
* handshake, close). Hook dispatchers enable it because Claude Code surfaces
|
|
@@ -219,6 +219,32 @@ function connectClientPipe(pipePath, resolve, reject) {
|
|
|
219
219
|
cleanup();
|
|
220
220
|
});
|
|
221
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
* Kawa Code refused access to a repository (private repo without the GitHub App,
|
|
224
|
+
* unsupported host, not a member, ...). Carried as its own type so it survives
|
|
225
|
+
* `ensureRepo` and the dispatcher catch intact and the agent can be told to stop
|
|
226
|
+
* retrying. Muninn sends `{ success: false, code: 'no_repo_access', accessReason, error }`.
|
|
227
|
+
*/
|
|
228
|
+
export class RepoAccessError extends Error {
|
|
229
|
+
code = 'no_repo_access';
|
|
230
|
+
accessReason;
|
|
231
|
+
constructor(message, accessReason) {
|
|
232
|
+
super(message);
|
|
233
|
+
this.name = 'RepoAccessError';
|
|
234
|
+
this.accessReason = accessReason;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/** Structured, non-retryable tool output for a repo-access refusal. */
|
|
238
|
+
export function repoAccessToolOutput(err, tool) {
|
|
239
|
+
return {
|
|
240
|
+
success: false,
|
|
241
|
+
error: err.code,
|
|
242
|
+
reason: err.accessReason,
|
|
243
|
+
retryable: false,
|
|
244
|
+
message: `${err.message.replace(/[\s.]*$/, '')}. Do not retry. Tell the user the reason and what to do about it.`,
|
|
245
|
+
tool,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
222
248
|
/** Route an inbound response message to its waiting pendingRequest entry.
|
|
223
249
|
*
|
|
224
250
|
* Failure propagation has two layers:
|
|
@@ -235,7 +261,7 @@ function connectClientPipe(pipePath, resolve, reject) {
|
|
|
235
261
|
* responses (`{ estimate: {...} }`) carry no `success` field at all and must
|
|
236
262
|
* pass through unchanged.
|
|
237
263
|
*/
|
|
238
|
-
function routeResponse(msg) {
|
|
264
|
+
export function routeResponse(msg) {
|
|
239
265
|
const msgId = msg._msgId;
|
|
240
266
|
if (msgId && pendingRequests.has(msgId)) {
|
|
241
267
|
const pending = pendingRequests.get(msgId);
|
|
@@ -246,6 +272,16 @@ function routeResponse(msg) {
|
|
|
246
272
|
return;
|
|
247
273
|
}
|
|
248
274
|
const data = msg.data || {};
|
|
275
|
+
if (data.success === false && data.code === 'no_repo_access') {
|
|
276
|
+
// A refusal must never take the structured-failure carve-out below: it may
|
|
277
|
+
// carry a string `reason`, which would resolve it as data and let a tool
|
|
278
|
+
// treat the refusal as success. Reject with the typed error instead.
|
|
279
|
+
const text = typeof data.error === 'string' && data.error.length > 0
|
|
280
|
+
? data.error
|
|
281
|
+
: 'Kawa Code refused access to this repository.';
|
|
282
|
+
pending.reject(new RepoAccessError(text, typeof data.accessReason === 'string' ? data.accessReason : 'unknown'));
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
249
285
|
if (data.success === false) {
|
|
250
286
|
// Some handlers return structured failure shapes the calling tool is
|
|
251
287
|
// designed to interpret and present — these are data, not dispatch
|
|
@@ -329,6 +365,8 @@ export async function ensureRepo(repoPath) {
|
|
|
329
365
|
await request('code', 'add', { folder: repoPath });
|
|
330
366
|
}
|
|
331
367
|
catch (err) {
|
|
368
|
+
if (err instanceof RepoAccessError)
|
|
369
|
+
throw err;
|
|
332
370
|
throw new Error(`Could not register repository "${repoPath}" with Kawa Code: ${err.message}`);
|
|
333
371
|
}
|
|
334
372
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muninn-ipc.js","sourceRoot":"","sources":["../../src/services/muninn-ipc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAEhC,MAAM,YAAY,GAAG,KAAK,CAAA;AAC1B,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;AAEpG;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAA;AAC9G,MAAM,0BAA0B,GAAG,MAAM,CAAA;AACzC,MAAM,oBAAoB,GAAG,MAAM,CAAA;AAEnC;;;GAGG;AACH,MAAM,gBAAgB,GAAG,0BAA0B,CAAA;AAQnD,IAAI,MAAM,GAAsB,IAAI,CAAA;AACpC,IAAI,SAAS,GAAG,KAAK,CAAA;AACrB,IAAI,KAAK,GAAG,EAAE,CAAA;AACd,IAAI,iBAAiB,GAAyB,IAAI,CAAA;AAClD,MAAM,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAA;
|
|
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,71 @@
|
|
|
1
|
+
import { test, before, after } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import net from 'node:net';
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import os from 'node:os';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { connectToMuninn, disconnect, RepoAccessError } from '../services/muninn-ipc.js';
|
|
8
|
+
import { getRelevantContext } from './get-relevant-context.js';
|
|
9
|
+
import { readActiveIntentResource } from '../resources/active-intent.js';
|
|
10
|
+
// A fake Kawa Code on a temp Unix socket: sends the handshake, then answers every
|
|
11
|
+
// request with whatever `reply` currently holds. MUNINN_SOCKET points the client at it,
|
|
12
|
+
// so the real socket is never touched.
|
|
13
|
+
let reply = {};
|
|
14
|
+
let server;
|
|
15
|
+
let dir;
|
|
16
|
+
before(async () => {
|
|
17
|
+
dir = fs.mkdtempSync(path.join(os.tmpdir(), 'kawa-mcp-'));
|
|
18
|
+
const sock = path.join(dir, 's');
|
|
19
|
+
server = net.createServer((c) => {
|
|
20
|
+
c.write(JSON.stringify({ flow: 'brdc', domain: 'system', action: 'handshake', data: { caw: 'test' } }) + '\n');
|
|
21
|
+
let buf = '';
|
|
22
|
+
c.on('data', (chunk) => {
|
|
23
|
+
buf += chunk.toString();
|
|
24
|
+
let nl;
|
|
25
|
+
while ((nl = buf.indexOf('\n')) >= 0) {
|
|
26
|
+
const msg = JSON.parse(buf.slice(0, nl));
|
|
27
|
+
buf = buf.slice(nl + 1);
|
|
28
|
+
c.write(JSON.stringify({ flow: 'res', domain: msg.domain, action: msg.action, _msgId: msg._msgId, data: reply }) + '\n');
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
await new Promise((r) => server.listen(sock, r));
|
|
33
|
+
process.env.MUNINN_SOCKET = sock;
|
|
34
|
+
await connectToMuninn();
|
|
35
|
+
});
|
|
36
|
+
after(async () => {
|
|
37
|
+
disconnect();
|
|
38
|
+
await new Promise((r) => server.close(r));
|
|
39
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
40
|
+
});
|
|
41
|
+
const refusal = {
|
|
42
|
+
success: false,
|
|
43
|
+
code: 'no_repo_access',
|
|
44
|
+
accessReason: 'unsupported_host',
|
|
45
|
+
error: 'No access to this repository (unsupported_host)',
|
|
46
|
+
};
|
|
47
|
+
test('get_relevant_context relays a repo-access refusal instead of an empty "unavailable" result', async () => {
|
|
48
|
+
reply = refusal;
|
|
49
|
+
await assert.rejects(getRelevantContext({ repoOrigin: 'git@bitbucket.org:o/r.git', repoPath: '/x', prompt: 'p' }), (err) => err instanceof RepoAccessError && err.accessReason === 'unsupported_host');
|
|
50
|
+
});
|
|
51
|
+
test('get_relevant_context keeps the soft result for a real outage, without naming Muninn', async () => {
|
|
52
|
+
reply = { success: false, error: 'boom' };
|
|
53
|
+
const res = await getRelevantContext({ repoOrigin: 'git@github.com:o/r.git', repoPath: '/x', prompt: 'p' });
|
|
54
|
+
assert.deepEqual(res.relevantIntents, []);
|
|
55
|
+
assert.equal(res.error, 'Kawa Code unavailable: boom');
|
|
56
|
+
});
|
|
57
|
+
test('the active-intent resource relays a refusal as structured, non-retryable output', async () => {
|
|
58
|
+
reply = refusal;
|
|
59
|
+
const out = JSON.parse(await readActiveIntentResource('git@bitbucket.org:o/r.git'));
|
|
60
|
+
assert.equal(out.success, false);
|
|
61
|
+
assert.equal(out.error, 'no_repo_access');
|
|
62
|
+
assert.equal(out.reason, 'unsupported_host');
|
|
63
|
+
assert.equal(out.retryable, false);
|
|
64
|
+
});
|
|
65
|
+
test('the active-intent resource keeps its soft note for a real failure', async () => {
|
|
66
|
+
reply = { success: false, error: 'boom' };
|
|
67
|
+
const out = JSON.parse(await readActiveIntentResource('git@github.com:o/r.git'));
|
|
68
|
+
assert.equal(out.hasActiveIntent, false);
|
|
69
|
+
assert.match(out.note, /Failed to query/);
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=_relevant-context-refusal.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_relevant-context-refusal.test.js","sourceRoot":"","sources":["../../src/tools/_relevant-context-refusal.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,GAAG,MAAM,UAAU,CAAA;AAC1B,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AAExE,kFAAkF;AAClF,wFAAwF;AACxF,uCAAuC;AACvC,IAAI,KAAK,GAA4B,EAAE,CAAA;AACvC,IAAI,MAAkB,CAAA;AACtB,IAAI,GAAW,CAAA;AAEf,MAAM,CAAC,KAAK,IAAI,EAAE;IAChB,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAA;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAChC,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;QAC9G,IAAI,GAAG,GAAG,EAAE,CAAA;QACZ,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACrB,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAA;YACvB,IAAI,EAAU,CAAA;YACd,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;gBACxC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;gBACvB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;YAC1H,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACtD,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAA;IAChC,MAAM,eAAe,EAAE,CAAA;AACzB,CAAC,CAAC,CAAA;AAEF,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,UAAU,EAAE,CAAA;IACZ,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACzC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAClD,CAAC,CAAC,CAAA;AAEF,MAAM,OAAO,GAAG;IACd,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,gBAAgB;IACtB,YAAY,EAAE,kBAAkB;IAChC,KAAK,EAAE,iDAAiD;CACzD,CAAA;AAED,IAAI,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;IAC5G,KAAK,GAAG,OAAO,CAAA;IACf,MAAM,MAAM,CAAC,OAAO,CAClB,kBAAkB,CAAC,EAAE,UAAU,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAS,CAAC,EACnG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,YAAY,eAAe,IAAI,GAAG,CAAC,YAAY,KAAK,kBAAkB,CACxF,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;IACrG,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IACzC,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,EAAE,UAAU,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAS,CAAC,CAAA;IAClH,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACzC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAA;AACxD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;IACjG,KAAK,GAAG,OAAO,CAAA;IACf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAC,2BAA2B,CAAC,CAAC,CAAA;IACnF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAChC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAA;IACzC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;AACpC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;IACnF,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAC,wBAAwB,CAAC,CAAC,CAAA;IAChF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;IACxC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;AAC3C,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { test } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { RepoAccessError, repoAccessToolOutput, routeResponse, pendingRequests, } from '../services/muninn-ipc.js';
|
|
4
|
+
/** Register a pending request, route `data` to it, and report how it settled. */
|
|
5
|
+
async function settle(data, envelope = {}) {
|
|
6
|
+
const id = `test-${Math.random().toString(36).slice(2)}`;
|
|
7
|
+
const outcome = new Promise((resolve) => {
|
|
8
|
+
pendingRequests.set(id, {
|
|
9
|
+
resolve: (v) => resolve({ resolved: v }),
|
|
10
|
+
reject: (e) => resolve({ rejected: e }),
|
|
11
|
+
timer: setTimeout(() => { }, 0),
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
routeResponse({ _msgId: id, data, ...envelope });
|
|
15
|
+
return outcome;
|
|
16
|
+
}
|
|
17
|
+
test('a no_repo_access refusal rejects with a typed RepoAccessError', async () => {
|
|
18
|
+
const { rejected, resolved } = await settle({
|
|
19
|
+
success: false,
|
|
20
|
+
code: 'no_repo_access',
|
|
21
|
+
accessReason: 'app_not_installed',
|
|
22
|
+
error: 'Install the Kawa Code GitHub App.',
|
|
23
|
+
});
|
|
24
|
+
assert.equal(resolved, undefined);
|
|
25
|
+
assert.ok(rejected instanceof RepoAccessError);
|
|
26
|
+
assert.equal(rejected.code, 'no_repo_access');
|
|
27
|
+
assert.equal(rejected.accessReason, 'app_not_installed');
|
|
28
|
+
assert.equal(rejected.message, 'Install the Kawa Code GitHub App.');
|
|
29
|
+
});
|
|
30
|
+
test('a refusal that also carries a string `reason` is still rejected, never resolved as data', async () => {
|
|
31
|
+
const { rejected, resolved } = await settle({
|
|
32
|
+
success: false,
|
|
33
|
+
code: 'no_repo_access',
|
|
34
|
+
reason: 'app_not_installed',
|
|
35
|
+
accessReason: 'app_not_installed',
|
|
36
|
+
error: 'refused',
|
|
37
|
+
});
|
|
38
|
+
assert.equal(resolved, undefined);
|
|
39
|
+
assert.ok(rejected instanceof RepoAccessError);
|
|
40
|
+
});
|
|
41
|
+
test('the tool output is structured and non-retryable', () => {
|
|
42
|
+
const out = repoAccessToolOutput(new RepoAccessError('refused.', 'app_not_installed'), 'check_active_intent');
|
|
43
|
+
assert.equal(out.success, false);
|
|
44
|
+
assert.equal(out.error, 'no_repo_access');
|
|
45
|
+
assert.equal(out.reason, 'app_not_installed');
|
|
46
|
+
assert.equal(out.retryable, false);
|
|
47
|
+
assert.equal(out.tool, 'check_active_intent');
|
|
48
|
+
assert.match(out.message, /refused\./);
|
|
49
|
+
});
|
|
50
|
+
test('the tool output separates the refusal text from the instruction, whatever the text ends with', () => {
|
|
51
|
+
const noStop = repoAccessToolOutput(new RepoAccessError('No access (unsupported_host)', 'unsupported_host'), 't');
|
|
52
|
+
assert.match(noStop.message, /^No access \(unsupported_host\)\. Do not retry\./);
|
|
53
|
+
const stop = repoAccessToolOutput(new RepoAccessError('Install the App. ', 'app_not_installed'), 't');
|
|
54
|
+
assert.match(stop.message, /^Install the App\. Do not retry\./);
|
|
55
|
+
});
|
|
56
|
+
test('conflicts, frozen and transient-failure shapes still resolve as data', async () => {
|
|
57
|
+
const shapes = [
|
|
58
|
+
{ success: false, conflict: true, conflicts: [{ intentId: 'a' }] },
|
|
59
|
+
{ success: false, reason: 'conflicts', conflicts: [{ id: 'b' }] },
|
|
60
|
+
{ success: false, reason: 'transient-failure', error: 'x', failedStage: 'blocks' },
|
|
61
|
+
{ success: false, frozen: true, error: 'frozen' },
|
|
62
|
+
];
|
|
63
|
+
for (const shape of shapes) {
|
|
64
|
+
const { resolved, rejected } = await settle(shape);
|
|
65
|
+
assert.equal(rejected, undefined);
|
|
66
|
+
assert.deepEqual(resolved, shape);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
test('a success:false without code still rejects with its error text', async () => {
|
|
70
|
+
const { rejected } = await settle({ success: false, error: 'API down' });
|
|
71
|
+
assert.ok(rejected instanceof Error);
|
|
72
|
+
assert.ok(!(rejected instanceof RepoAccessError));
|
|
73
|
+
assert.equal(rejected.message, 'API down');
|
|
74
|
+
});
|
|
75
|
+
test('a success response resolves unchanged', async () => {
|
|
76
|
+
const { resolved } = await settle({ success: true, intent: { id: 'i' } });
|
|
77
|
+
assert.deepEqual(resolved, { success: true, intent: { id: 'i' } });
|
|
78
|
+
});
|
|
79
|
+
// kawacode-on-stop wraps every request() in a catch that returns null / exits 0
|
|
80
|
+
// (main().catch(() => process.exit(0))). A refusal is an ordinary rejected
|
|
81
|
+
// promise, so it must take that same fail-open path and never escape.
|
|
82
|
+
test('a refusal rejection is absorbed by the Stop hook fail-open pattern', async () => {
|
|
83
|
+
const gate = async () => {
|
|
84
|
+
try {
|
|
85
|
+
await new Promise((_, reject) => {
|
|
86
|
+
const id = `stop-${Math.random().toString(36).slice(2)}`;
|
|
87
|
+
pendingRequests.set(id, { resolve: () => { }, reject, timer: setTimeout(() => { }, 0) });
|
|
88
|
+
routeResponse({ _msgId: id, data: { success: false, code: 'no_repo_access', accessReason: 'x', error: 'no' } });
|
|
89
|
+
});
|
|
90
|
+
return 'unexpected';
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null; // fail open, no gate
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
assert.equal(await gate(), null);
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=_repo-access.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_repo-access.test.js","sourceRoot":"","sources":["../../src/tools/_repo-access.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reject a tool call that is missing a required argument, at the one seam every
|
|
3
|
+
* tool already passes through.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS. `get_relevant_context` was called with `task` instead of
|
|
6
|
+
* `prompt`. `prompt` has always been declared required — plain `z.string()`,
|
|
7
|
+
* and `isRequired()` puts it in the `required` array we advertise — but nothing
|
|
8
|
+
* checked incoming arguments. The dispatcher passes `args as any` straight to
|
|
9
|
+
* each handler, so `input.prompt` was `undefined`, the tool forwarded
|
|
10
|
+
* `query: undefined`, JSON dropped the key, and Muninn answered
|
|
11
|
+
* `missing field 'query'`.
|
|
12
|
+
*
|
|
13
|
+
* `query` is not a parameter of that tool. It is the internal IPC field name
|
|
14
|
+
* `prompt` maps onto, so the error named something the caller could not act on,
|
|
15
|
+
* and it was misdiagnosed as a Muninn outage twice before anyone read the
|
|
16
|
+
* schema.
|
|
17
|
+
*
|
|
18
|
+
* The worse half was the shape of the failure, not the wording. The handler
|
|
19
|
+
* caught it and returned a WELL-FORMED EMPTY RESULT — no intents, no decisions,
|
|
20
|
+
* `totalIntentsSearched: 0` — with `error` tucked into a field nothing
|
|
21
|
+
* surfaces. A broken call looked exactly like "nothing relevant found", which
|
|
22
|
+
* is a plausible answer, so two sessions ran with no recall at all and nothing
|
|
23
|
+
* appeared wrong.
|
|
24
|
+
*
|
|
25
|
+
* DELIBERATELY NOT a full `.parse()`. Several tools declare `.default()` values
|
|
26
|
+
* that Muninn currently supplies; parsing would start applying them here
|
|
27
|
+
* instead, changing behaviour nobody asked to change. The failure was a missing
|
|
28
|
+
* field, not a malformed one, so presence is the whole check.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* The required keys of a tool's schema, in declaration order.
|
|
32
|
+
*
|
|
33
|
+
* Mirrors the `required` array sent in `tools/list`, so what is advertised and
|
|
34
|
+
* what is enforced cannot disagree.
|
|
35
|
+
*/
|
|
36
|
+
export declare function requiredKeys(shape: Record<string, unknown>): string[];
|
|
37
|
+
/**
|
|
38
|
+
* Which required arguments are absent.
|
|
39
|
+
*
|
|
40
|
+
* `null` and `undefined` count as missing; every other value is the handler's
|
|
41
|
+
* business. An empty string is NOT treated as missing — that is a malformed
|
|
42
|
+
* value rather than an absent field, and this check deliberately stops at
|
|
43
|
+
* presence.
|
|
44
|
+
*/
|
|
45
|
+
export declare function missingRequiredArgs(shape: Record<string, unknown>, args: Record<string, unknown> | undefined): string[];
|
|
46
|
+
/**
|
|
47
|
+
* Operator-readable refusal naming what to re-send.
|
|
48
|
+
*
|
|
49
|
+
* It lists the keys that WERE received, because the original failure was a
|
|
50
|
+
* near-miss on a name: seeing `task` beside "missing: prompt" identifies the
|
|
51
|
+
* mistake immediately, where the parameter name alone did not.
|
|
52
|
+
*/
|
|
53
|
+
export declare function describeMissingArgs(name: string, missing: readonly string[], args: Record<string, unknown> | undefined): string;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reject a tool call that is missing a required argument, at the one seam every
|
|
3
|
+
* tool already passes through.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS. `get_relevant_context` was called with `task` instead of
|
|
6
|
+
* `prompt`. `prompt` has always been declared required — plain `z.string()`,
|
|
7
|
+
* and `isRequired()` puts it in the `required` array we advertise — but nothing
|
|
8
|
+
* checked incoming arguments. The dispatcher passes `args as any` straight to
|
|
9
|
+
* each handler, so `input.prompt` was `undefined`, the tool forwarded
|
|
10
|
+
* `query: undefined`, JSON dropped the key, and Muninn answered
|
|
11
|
+
* `missing field 'query'`.
|
|
12
|
+
*
|
|
13
|
+
* `query` is not a parameter of that tool. It is the internal IPC field name
|
|
14
|
+
* `prompt` maps onto, so the error named something the caller could not act on,
|
|
15
|
+
* and it was misdiagnosed as a Muninn outage twice before anyone read the
|
|
16
|
+
* schema.
|
|
17
|
+
*
|
|
18
|
+
* The worse half was the shape of the failure, not the wording. The handler
|
|
19
|
+
* caught it and returned a WELL-FORMED EMPTY RESULT — no intents, no decisions,
|
|
20
|
+
* `totalIntentsSearched: 0` — with `error` tucked into a field nothing
|
|
21
|
+
* surfaces. A broken call looked exactly like "nothing relevant found", which
|
|
22
|
+
* is a plausible answer, so two sessions ran with no recall at all and nothing
|
|
23
|
+
* appeared wrong.
|
|
24
|
+
*
|
|
25
|
+
* DELIBERATELY NOT a full `.parse()`. Several tools declare `.default()` values
|
|
26
|
+
* that Muninn currently supplies; parsing would start applying them here
|
|
27
|
+
* instead, changing behaviour nobody asked to change. The failure was a missing
|
|
28
|
+
* field, not a malformed one, so presence is the whole check.
|
|
29
|
+
*/
|
|
30
|
+
/** A Zod type is required unless it is optional or carries a default. */
|
|
31
|
+
function isRequiredType(zodType) {
|
|
32
|
+
const typeName = zodType?._def?.typeName;
|
|
33
|
+
return typeName !== 'ZodOptional' && typeName !== 'ZodDefault';
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The required keys of a tool's schema, in declaration order.
|
|
37
|
+
*
|
|
38
|
+
* Mirrors the `required` array sent in `tools/list`, so what is advertised and
|
|
39
|
+
* what is enforced cannot disagree.
|
|
40
|
+
*/
|
|
41
|
+
export function requiredKeys(shape) {
|
|
42
|
+
return Object.entries(shape)
|
|
43
|
+
.filter(([, value]) => isRequiredType(value))
|
|
44
|
+
.map(([key]) => key);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Which required arguments are absent.
|
|
48
|
+
*
|
|
49
|
+
* `null` and `undefined` count as missing; every other value is the handler's
|
|
50
|
+
* business. An empty string is NOT treated as missing — that is a malformed
|
|
51
|
+
* value rather than an absent field, and this check deliberately stops at
|
|
52
|
+
* presence.
|
|
53
|
+
*/
|
|
54
|
+
export function missingRequiredArgs(shape, args) {
|
|
55
|
+
const provided = args ?? {};
|
|
56
|
+
return requiredKeys(shape).filter(key => provided[key] === undefined || provided[key] === null);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Operator-readable refusal naming what to re-send.
|
|
60
|
+
*
|
|
61
|
+
* It lists the keys that WERE received, because the original failure was a
|
|
62
|
+
* near-miss on a name: seeing `task` beside "missing: prompt" identifies the
|
|
63
|
+
* mistake immediately, where the parameter name alone did not.
|
|
64
|
+
*/
|
|
65
|
+
export function describeMissingArgs(name, missing, args) {
|
|
66
|
+
const received = Object.keys(args ?? {});
|
|
67
|
+
const receivedText = received.length > 0 ? received.join(', ') : '(none)';
|
|
68
|
+
const plural = missing.length === 1 ? 'parameter' : 'parameters';
|
|
69
|
+
return (`${name}: missing required ${plural} ${missing.map(m => `"${m}"`).join(', ')}. ` +
|
|
70
|
+
`Received: ${receivedText}. Nothing was sent. ` +
|
|
71
|
+
`Re-send the call with the named ${plural} included.`);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=_required-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_required-args.js","sourceRoot":"","sources":["../../src/tools/_required-args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,yEAAyE;AACzE,SAAS,cAAc,CAAC,OAAgB;IACtC,MAAM,QAAQ,GAAI,OAAe,EAAE,IAAI,EAAE,QAAQ,CAAA;IACjD,OAAO,QAAQ,KAAK,aAAa,IAAI,QAAQ,KAAK,YAAY,CAAA;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAA8B;IACzD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;SAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAA8B,EAC9B,IAAyC;IAEzC,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAA;IAC3B,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAA;AACjG,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,OAA0B,EAC1B,IAAyC;IAEzC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;IACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAA;IAChE,OAAO,CACL,GAAG,IAAI,sBAAsB,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAChF,aAAa,YAAY,sBAAsB;QAC/C,mCAAmC,MAAM,YAAY,CACtD,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { test } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { requiredKeys, missingRequiredArgs, describeMissingArgs } from './_required-args.js';
|
|
5
|
+
/** The shape of the tool whose silent failure prompted this check. */
|
|
6
|
+
const RECALL_SHAPE = z.object({
|
|
7
|
+
repoOrigin: z.string().optional(),
|
|
8
|
+
repoPath: z.string(),
|
|
9
|
+
prompt: z.string(),
|
|
10
|
+
activeFiles: z.array(z.string()).optional(),
|
|
11
|
+
maxIntents: z.number().optional().default(10),
|
|
12
|
+
minRelevance: z.number().optional().default(0.3),
|
|
13
|
+
}).shape;
|
|
14
|
+
test('required keys exclude optional and defaulted fields', () => {
|
|
15
|
+
assert.deepEqual(requiredKeys(RECALL_SHAPE), ['repoPath', 'prompt']);
|
|
16
|
+
});
|
|
17
|
+
test('a defaulted field is never required, so Muninn keeps supplying the default', () => {
|
|
18
|
+
assert.equal(requiredKeys(RECALL_SHAPE).includes('maxIntents'), false);
|
|
19
|
+
assert.equal(requiredKeys(RECALL_SHAPE).includes('minRelevance'), false);
|
|
20
|
+
});
|
|
21
|
+
// The exact call that ran twice with no recall: `task` instead of `prompt`.
|
|
22
|
+
test('catches the near-miss that started this', () => {
|
|
23
|
+
const missing = missingRequiredArgs(RECALL_SHAPE, {
|
|
24
|
+
repoPath: '/repo',
|
|
25
|
+
task: 'find context about the relate engine',
|
|
26
|
+
});
|
|
27
|
+
assert.deepEqual(missing, ['prompt']);
|
|
28
|
+
});
|
|
29
|
+
test('a complete call reports nothing missing', () => {
|
|
30
|
+
const missing = missingRequiredArgs(RECALL_SHAPE, {
|
|
31
|
+
repoPath: '/repo',
|
|
32
|
+
prompt: 'find context',
|
|
33
|
+
});
|
|
34
|
+
assert.deepEqual(missing, []);
|
|
35
|
+
});
|
|
36
|
+
test('extra keys are not an error — only absence is checked', () => {
|
|
37
|
+
const missing = missingRequiredArgs(RECALL_SHAPE, {
|
|
38
|
+
repoPath: '/repo',
|
|
39
|
+
prompt: 'find context',
|
|
40
|
+
somethingNew: true,
|
|
41
|
+
});
|
|
42
|
+
assert.deepEqual(missing, []);
|
|
43
|
+
});
|
|
44
|
+
test('null counts as missing, since it reaches the handler as absent', () => {
|
|
45
|
+
assert.deepEqual(missingRequiredArgs(RECALL_SHAPE, { repoPath: '/repo', prompt: null }), ['prompt']);
|
|
46
|
+
});
|
|
47
|
+
// Presence, not validity: an empty string is a malformed VALUE, and rejecting
|
|
48
|
+
// it here would be the full .parse() this check deliberately is not.
|
|
49
|
+
test('an empty string is present, not missing', () => {
|
|
50
|
+
assert.deepEqual(missingRequiredArgs(RECALL_SHAPE, { repoPath: '/repo', prompt: '' }), []);
|
|
51
|
+
});
|
|
52
|
+
test('undefined args report every required key', () => {
|
|
53
|
+
assert.deepEqual(missingRequiredArgs(RECALL_SHAPE, undefined), ['repoPath', 'prompt']);
|
|
54
|
+
});
|
|
55
|
+
test('the message names the tool, the parameter and what was received', () => {
|
|
56
|
+
const message = describeMissingArgs('get_relevant_context', ['prompt'], {
|
|
57
|
+
repoPath: '/repo',
|
|
58
|
+
task: 'find context',
|
|
59
|
+
});
|
|
60
|
+
assert.match(message, /get_relevant_context/);
|
|
61
|
+
assert.match(message, /"prompt"/);
|
|
62
|
+
// Listing what arrived is what makes the near-miss obvious.
|
|
63
|
+
assert.match(message, /repoPath, task/);
|
|
64
|
+
assert.match(message, /Nothing was sent/);
|
|
65
|
+
});
|
|
66
|
+
test('the message pluralizes and survives an empty argument object', () => {
|
|
67
|
+
const message = describeMissingArgs('some_tool', ['a', 'b'], {});
|
|
68
|
+
assert.match(message, /missing required parameters "a", "b"/);
|
|
69
|
+
assert.match(message, /Received: \(none\)/);
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=_required-args.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_required-args.test.js","sourceRoot":"","sources":["../../src/tools/_required-args.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,8 @@ export type CompleteIntentInput = z.infer<typeof completeIntentSchema>;
|
|
|
31
31
|
* that conflict with previously-recorded ones. Since COMPLETION_CONFLICT_DECOUPLE.md
|
|
32
32
|
* these no longer block completion — the commit (status + blocks) already landed;
|
|
33
33
|
* each conflicting decision is *parked* for an async disposition in the
|
|
34
|
-
* Orchestration panel
|
|
34
|
+
* Orchestration panel, which owns the options — this file deliberately does
|
|
35
|
+
* not list them, so it cannot go stale when the panel gains one.
|
|
35
36
|
*/
|
|
36
37
|
export interface ConflictMatch {
|
|
37
38
|
/** Stable distillation id of the proposed decision; the panel keys the disposition on it. */
|
|
@@ -42,7 +43,6 @@ export interface ConflictMatch {
|
|
|
42
43
|
decisionId: string;
|
|
43
44
|
summary: string;
|
|
44
45
|
intentTitle?: string;
|
|
45
|
-
author?: string;
|
|
46
46
|
};
|
|
47
47
|
sharedConcern?: string;
|
|
48
48
|
description?: string;
|
|
@@ -90,7 +90,7 @@ export interface CompleteIntentResponse {
|
|
|
90
90
|
* standards. Since COMPLETION_CONFLICT_DECOUPLE.md the completion still
|
|
91
91
|
* SUCCEEDED (success=true, status flipped, blocks captured) — these decisions
|
|
92
92
|
* are *deferred*: parked for an async disposition in the Orchestration panel
|
|
93
|
-
* (
|
|
93
|
+
* (the panel owns the options). There is nothing to retry.
|
|
94
94
|
*/
|
|
95
95
|
deferredConflicts?: ConflictMatch[];
|
|
96
96
|
/**
|
|
@@ -114,7 +114,7 @@ export async function completeIntent(input) {
|
|
|
114
114
|
// standards did NOT block the completion — they're parked for a disposition
|
|
115
115
|
// in the Orchestration panel. Surface the count; there is nothing to retry.
|
|
116
116
|
const deferredConflictPart = deferredConflicts.length > 0
|
|
117
|
-
? ` — ${deferredConflicts.length} distilled decision(s) need a disposition in the Orchestration panel
|
|
117
|
+
? ` — ${deferredConflicts.length} distilled decision(s) need a disposition in the Orchestration panel`
|
|
118
118
|
: '';
|
|
119
119
|
message = statusMsg + shaPart + distilledPart + deferredPart + collisionPart + deferredConflictPart;
|
|
120
120
|
}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"complete-intent.js","sourceRoot":"","sources":["../../src/tools/complete-intent.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ export interface ConflictCandidate {
|
|
|
20
20
|
intentId: string;
|
|
21
21
|
title: string;
|
|
22
22
|
description: string;
|
|
23
|
-
|
|
23
|
+
/** Opaque owner id. NOT a display name — see the note on the mapping below. */
|
|
24
24
|
authorId: string;
|
|
25
25
|
score: number;
|
|
26
26
|
overlappingFiles: string[];
|
|
@@ -25,7 +25,12 @@ export async function detectIntentConflicts(input) {
|
|
|
25
25
|
intentId: c.intentId || '',
|
|
26
26
|
title: c.title || '',
|
|
27
27
|
description: c.description || '',
|
|
28
|
-
|
|
28
|
+
// `author` (the resolved display name) is deliberately NOT forwarded.
|
|
29
|
+
// DECISION_LINKING §3.3: names are resolved for the Kawa Code UX only and
|
|
30
|
+
// never enter an MCP payload — a name the model cannot act on is pure
|
|
31
|
+
// context cost, and it would push teammate PII into arbitrary client
|
|
32
|
+
// transcripts. `authorId` stays: opaque, non-PII, and enough to tell
|
|
33
|
+
// someone else's intent from your own.
|
|
29
34
|
authorId: c.authorId || '',
|
|
30
35
|
score: c.score || 0,
|
|
31
36
|
overlappingFiles: c.overlappingFiles || [],
|
|
@@ -58,7 +63,7 @@ Returns scored conflict candidates with:
|
|
|
58
63
|
- \`score\`: how strongly the candidate matches (higher = more likely conflict).
|
|
59
64
|
- \`overlappingFiles\`: files affected by both intents.
|
|
60
65
|
- \`decisions\`: decisions attached to the conflicting intent.
|
|
61
|
-
- \`
|
|
66
|
+
- \`authorId\`: opaque owner id — use it only to tell whether the intent is someone else's. Who they are is shown in Kawa Code, not here.
|
|
62
67
|
|
|
63
68
|
The list is informational — review candidates and their decisions to decide whether coordination is needed.`,
|
|
64
69
|
inputSchema: detectIntentConflictsSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-intent-conflicts.js","sourceRoot":"","sources":["../../src/tools/detect-intent-conflicts.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,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,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,CAAC,sBAAsB,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CAC9F,CAAC,CAAA;AA2BF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAiC;IAC3E,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IACpE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,kBAAkB,EAAE;QACxD,UAAU,EAAE,YAAY;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAA;IAEF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,CAAC;SACT,CAAA;IACH,CAAC;IAED,MAAM,SAAS,GAAwB,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAC5E,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;QAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;QACpB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;QAChC,
|
|
1
|
+
{"version":3,"file":"detect-intent-conflicts.js","sourceRoot":"","sources":["../../src/tools/detect-intent-conflicts.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,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,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,CAAC,sBAAsB,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CAC9F,CAAC,CAAA;AA2BF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAiC;IAC3E,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IACpE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,kBAAkB,EAAE;QACxD,UAAU,EAAE,YAAY;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAA;IAEF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,CAAC;SACT,CAAA;IACH,CAAC;IAED,MAAM,SAAS,GAAwB,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAC5E,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;QAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;QACpB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;QAChC,sEAAsE;QACtE,0EAA0E;QAC1E,sEAAsE;QACtE,qEAAqE;QACrE,qEAAqE;QACrE,uCAAuC;QACvC,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;QAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;QACnB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,IAAI,EAAE;QAC1C,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YAC9C,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;YAC9B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;YACxB,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;YAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;YAClB,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,EAAE;SACnC,CAAC,CAAC;KACJ,CAAC,CAAC,CAAA;IAEH,OAAO;QACL,YAAY,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;QAClC,SAAS;QACT,KAAK,EAAE,SAAS,CAAC,MAAM;KACxB,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EAAE;;;;;;;;;;;;;;;4GAe6F;IAC1G,WAAW,EAAE,2BAA2B;IACxC,OAAO,EAAE,qBAAqB;CAC/B,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { request } from '../services/muninn-ipc.js';
|
|
2
|
+
import { request, RepoAccessError } from '../services/muninn-ipc.js';
|
|
3
3
|
import { resolveOrigin } from './resolve-origin.js';
|
|
4
4
|
import { emitInjection, estimateTokens } from '../telemetry.js';
|
|
5
5
|
export const getRelevantContextSchema = z.object({
|
|
@@ -37,8 +37,12 @@ export async function getRelevantContext(input) {
|
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
catch (err) {
|
|
40
|
+
// A refusal is not an outage: relay it so the dispatcher emits the structured,
|
|
41
|
+
// non-retryable no_repo_access output instead of an empty "nothing relevant" result.
|
|
42
|
+
if (err instanceof RepoAccessError)
|
|
43
|
+
throw err;
|
|
40
44
|
const msg = err?.message || String(err);
|
|
41
|
-
return { ...EMPTY_RESPONSE(actualOrigin, input.repoPath), error: `
|
|
45
|
+
return { ...EMPTY_RESPONSE(actualOrigin, input.repoPath), error: `Kawa Code unavailable: ${msg}` };
|
|
42
46
|
}
|
|
43
47
|
const response = {
|
|
44
48
|
projectOrigin: actualOrigin,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-relevant-context.js","sourceRoot":"","sources":["../../src/tools/get-relevant-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"get-relevant-context.js","sourceRoot":"","sources":["../../src/tools/get-relevant-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Resolves the
|
|
2
|
+
* Resolves the git remote origin URL for a repository path, as configured (the
|
|
3
|
+
* raw `remote.origin.url`). Kawa Code canonicalizes it server-side.
|
|
3
4
|
*
|
|
4
5
|
* Uses a local `git config` call instead of IPC to Muninn, avoiding
|
|
5
6
|
* project registration side effects (in-memory state changes, git operations,
|
|
@@ -8,6 +9,6 @@
|
|
|
8
9
|
*
|
|
9
10
|
* @param repoOrigin - User-provided git remote origin (fallback)
|
|
10
11
|
* @param repoPath - Local path to the repository root
|
|
11
|
-
* @returns The
|
|
12
|
+
* @returns The git remote origin URL
|
|
12
13
|
*/
|
|
13
14
|
export declare function resolveOrigin(repoOrigin: string | undefined, repoPath?: string): string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { execSync } from 'child_process';
|
|
2
2
|
/**
|
|
3
|
-
* Resolves the
|
|
3
|
+
* Resolves the git remote origin URL for a repository path, as configured (the
|
|
4
|
+
* raw `remote.origin.url`). Kawa Code canonicalizes it server-side.
|
|
4
5
|
*
|
|
5
6
|
* Uses a local `git config` call instead of IPC to Muninn, avoiding
|
|
6
7
|
* project registration side effects (in-memory state changes, git operations,
|
|
@@ -9,7 +10,7 @@ import { execSync } from 'child_process';
|
|
|
9
10
|
*
|
|
10
11
|
* @param repoOrigin - User-provided git remote origin (fallback)
|
|
11
12
|
* @param repoPath - Local path to the repository root
|
|
12
|
-
* @returns The
|
|
13
|
+
* @returns The git remote origin URL
|
|
13
14
|
*/
|
|
14
15
|
export function resolveOrigin(repoOrigin, repoPath) {
|
|
15
16
|
if (repoPath) {
|
|
@@ -29,6 +30,6 @@ export function resolveOrigin(repoOrigin, repoPath) {
|
|
|
29
30
|
}
|
|
30
31
|
if (repoOrigin)
|
|
31
32
|
return repoOrigin;
|
|
32
|
-
throw new Error('Could not resolve git remote origin. Provide repoPath pointing to the repository root, or pass repoOrigin explicitly.');
|
|
33
|
+
throw new Error('Could not resolve git remote origin. Provide repoPath pointing to the repository root, or pass repoOrigin explicitly. Kawa Code needs a git remote on github.com or gitlab.com; local-only repositories are not supported.');
|
|
33
34
|
}
|
|
34
35
|
//# sourceMappingURL=resolve-origin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-origin.js","sourceRoot":"","sources":["../../src/tools/resolve-origin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC
|
|
1
|
+
{"version":3,"file":"resolve-origin.js","sourceRoot":"","sources":["../../src/tools/resolve-origin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,UAA8B,EAAE,QAAiB;IAC7E,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,oCAAoC,EAAE;gBAC5D,GAAG,EAAE,QAAQ;gBACb,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC,IAAI,EAAE,CAAA;YACT,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;IACH,CAAC;IACD,IAAI,UAAU;QAAE,OAAO,UAAU,CAAA;IACjC,MAAM,IAAI,KAAK,CACb,4NAA4N,CAC7N,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kawacode/mcp",
|
|
3
|
-
"version": "8.1.
|
|
3
|
+
"version": "8.1.2",
|
|
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": {
|