@kawacode/mcp 5.1.1 → 5.2.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 +101 -36
- package/README.md +3 -1
- package/build/index.js +24 -5
- package/build/index.js.map +1 -1
- package/build/prompts/intent-first-workflow.js +7 -8
- package/build/prompts/intent-first-workflow.js.map +1 -1
- package/build/resources/active-intent.js +2 -2
- package/build/resources/active-intent.js.map +1 -1
- package/build/services/muninn-ipc.d.ts +12 -5
- package/build/services/muninn-ipc.js +47 -12
- package/build/services/muninn-ipc.js.map +1 -1
- package/build/tools/activate-intent.d.ts +40 -0
- package/build/tools/activate-intent.js +52 -0
- package/build/tools/activate-intent.js.map +1 -0
- package/build/tools/check-active-intent.d.ts +0 -1
- package/build/tools/check-active-intent.js +3 -4
- package/build/tools/check-active-intent.js.map +1 -1
- package/build/tools/complete-intent.d.ts +18 -6
- package/build/tools/complete-intent.js +31 -2
- package/build/tools/complete-intent.js.map +1 -1
- package/build/tools/create-intent.d.ts +23 -1
- package/build/tools/create-intent.js +58 -5
- package/build/tools/create-intent.js.map +1 -1
- package/build/tools/detect-intent-conflicts.d.ts +22 -322
- package/build/tools/detect-intent-conflicts.js +35 -60
- package/build/tools/detect-intent-conflicts.js.map +1 -1
- package/build/tools/edit-session-decision.d.ts +4 -4
- package/build/tools/get-intents-for-file.js +1 -1
- package/build/tools/get-intents-for-file.js.map +1 -1
- package/build/tools/get-intents-for-lines.js +1 -1
- package/build/tools/get-intents-for-lines.js.map +1 -1
- package/build/tools/get-project-decisions.d.ts +1 -0
- package/build/tools/get-project-decisions.js +3 -2
- package/build/tools/get-project-decisions.js.map +1 -1
- package/build/tools/get-relevant-context.d.ts +1 -0
- package/build/tools/get-relevant-context.js +2 -1
- package/build/tools/get-relevant-context.js.map +1 -1
- package/build/tools/get-session-decisions.d.ts +1 -0
- package/build/tools/get-session-decisions.js +1 -0
- package/build/tools/get-session-decisions.js.map +1 -1
- package/build/tools/index.d.ts +51 -198
- package/build/tools/index.js +3 -3
- package/build/tools/index.js.map +1 -1
- package/build/tools/infer-history.d.ts +11 -10
- package/build/tools/infer-history.js +49 -26
- package/build/tools/infer-history.js.map +1 -1
- package/build/tools/list-team-intents.d.ts +30 -0
- package/build/tools/list-team-intents.js +39 -16
- package/build/tools/list-team-intents.js.map +1 -1
- package/build/tools/log-work.js +1 -1
- package/build/tools/log-work.js.map +1 -1
- package/build/tools/update-intent.d.ts +95 -0
- package/build/tools/update-intent.js +94 -0
- package/build/tools/update-intent.js.map +1 -0
- package/package.json +1 -1
- package/build/tools/assign-blocks.d.ts +0 -87
- package/build/tools/assign-blocks.js +0 -49
- package/build/tools/assign-blocks.js.map +0 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { request } from '../services/muninn-ipc.js';
|
|
3
|
+
import { resolveOrigin } from './resolve-origin.js';
|
|
4
|
+
export const activateIntentSchema = z.object({
|
|
5
|
+
repoOrigin: z.string().optional().describe('Git remote origin URL. Auto-detected from repoPath via git if not provided.'),
|
|
6
|
+
repoPath: z.string().describe('Local path to the repository root'),
|
|
7
|
+
intentId: z.string().describe('The cloud ID (preferred) or local UUID of the existing intent to activate.'),
|
|
8
|
+
});
|
|
9
|
+
export async function activateIntent(input) {
|
|
10
|
+
const actualOrigin = resolveOrigin(input.repoOrigin, input.repoPath);
|
|
11
|
+
// Check if there's already an active intent
|
|
12
|
+
const activeRes = await request('intent', 'get-active', { repoOrigin: actualOrigin });
|
|
13
|
+
const previousActiveId = activeRes.intentId || activeRes.intent?.id || '';
|
|
14
|
+
if (previousActiveId === input.intentId) {
|
|
15
|
+
return {
|
|
16
|
+
success: true,
|
|
17
|
+
intentId: input.intentId,
|
|
18
|
+
previousActiveId,
|
|
19
|
+
message: `Intent ${input.intentId.substring(0, 8)} is already active`,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
// Set the intent as active
|
|
23
|
+
await request('intent', 'set-active', {
|
|
24
|
+
repoOrigin: actualOrigin,
|
|
25
|
+
intentId: input.intentId,
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
success: true,
|
|
29
|
+
intentId: input.intentId,
|
|
30
|
+
previousActiveId: previousActiveId || undefined,
|
|
31
|
+
message: previousActiveId
|
|
32
|
+
? `Activated intent ${input.intentId.substring(0, 8)} (was: ${previousActiveId.substring(0, 8)})`
|
|
33
|
+
: `Activated intent ${input.intentId.substring(0, 8)}`,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export const activateIntentTool = {
|
|
37
|
+
name: 'activate_intent',
|
|
38
|
+
description: `Activate an existing intent by ID without creating a new one.
|
|
39
|
+
|
|
40
|
+
Use this to:
|
|
41
|
+
- Switch to a different intent found via list_team_intents or get_relevant_context
|
|
42
|
+
- Re-activate an intent that was deactivated (e.g., to complete it)
|
|
43
|
+
- Resume work on a previously created intent
|
|
44
|
+
|
|
45
|
+
Accepts both cloud IDs (from get_relevant_context / API) and local UUIDs (from list_team_intents).
|
|
46
|
+
|
|
47
|
+
If another intent is currently active, it will be replaced (not completed).
|
|
48
|
+
To complete the previous intent first, call complete_intent before this tool.`,
|
|
49
|
+
inputSchema: activateIntentSchema,
|
|
50
|
+
handler: activateIntent,
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=activate-intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activate-intent.js","sourceRoot":"","sources":["../../src/tools/activate-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,CAAC,4EAA4E,CAAC;CAC5G,CAAC,CAAA;AAWF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAA0B;IAC7D,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAEpE,4CAA4C;IAC5C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAA;IACrF,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAA;IAEzE,IAAI,gBAAgB,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;QACxC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,gBAAgB;YAChB,OAAO,EAAE,UAAU,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,oBAAoB;SACtE,CAAA;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE;QACpC,UAAU,EAAE,YAAY;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAA;IAEF,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,gBAAgB,EAAE,gBAAgB,IAAI,SAAS;QAC/C,OAAO,EAAE,gBAAgB;YACvB,CAAC,CAAC,oBAAoB,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;YACjG,CAAC,CAAC,oBAAoB,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;KACzD,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE;;;;;;;;;;8EAU+D;IAC5E,WAAW,EAAE,oBAAoB;IACjC,OAAO,EAAE,cAAc;CACxB,CAAA"}
|
|
@@ -10,16 +10,15 @@ export async function checkActiveIntent(input) {
|
|
|
10
10
|
const res = await request('intent', 'get-active', {
|
|
11
11
|
repoOrigin: actualOrigin,
|
|
12
12
|
});
|
|
13
|
-
// Muninn returns {
|
|
14
|
-
const intent = res.
|
|
13
|
+
// Muninn returns { hasActiveIntent, intentId, intent }
|
|
14
|
+
const intent = res.intent;
|
|
15
15
|
if (!intent) {
|
|
16
16
|
return { hasActiveIntent: false };
|
|
17
17
|
}
|
|
18
18
|
return {
|
|
19
19
|
hasActiveIntent: true,
|
|
20
20
|
intent: {
|
|
21
|
-
id: intent.id || res.
|
|
22
|
-
localId: intent.id || res.activeIntentId || '',
|
|
21
|
+
id: intent.id || res.intentId || '',
|
|
23
22
|
title: intent.title || '',
|
|
24
23
|
description: intent.description || '',
|
|
25
24
|
templateType: (intent.templateType || 'feature'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-active-intent.js","sourceRoot":"","sources":["../../src/tools/check-active-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,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,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;CACnE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"check-active-intent.js","sourceRoot":"","sources":["../../src/tools/check-active-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,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,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;CACnE,CAAC,CAAA;AA2BF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAA6B;IACnE,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAEpE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE;QAChD,UAAU,EAAE,YAAY;KACzB,CAAC,CAAA;IAEF,uDAAuD;IACvD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;IACzB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAA;IACnC,CAAC;IAED,OAAO;QACL,eAAe,EAAE,IAAI;QACrB,MAAM,EAAE;YACN,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE;YACnC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;YACzB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;YACrC,YAAY,EAAE,CAAC,MAAM,CAAC,YAAY,IAAI,SAAS,CAA2C;YAC1F,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,EAAE,CAAC,wDAAwD;SACpE;KACF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE;;;;;;;;oDAQqC;IAClD,WAAW,EAAE,uBAAuB;IACpC,OAAO,EAAE,iBAAiB;CAC3B,CAAA"}
|
|
@@ -2,18 +2,24 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const completeIntentSchema: z.ZodObject<{
|
|
3
3
|
repoOrigin: z.ZodOptional<z.ZodString>;
|
|
4
4
|
repoPath: z.ZodString;
|
|
5
|
+
intentId: z.ZodOptional<z.ZodString>;
|
|
5
6
|
commitSha: z.ZodOptional<z.ZodString>;
|
|
6
|
-
status: z.ZodDefault<z.ZodEnum<["committed", "pushed", "done", "abandoned"]>>;
|
|
7
|
+
status: z.ZodDefault<z.ZodEnum<["committed", "pushed", "done", "abandoned", "superseded"]>>;
|
|
8
|
+
supersededBy: z.ZodOptional<z.ZodString>;
|
|
7
9
|
}, "strip", z.ZodTypeAny, {
|
|
8
10
|
repoPath: string;
|
|
9
|
-
status: "committed" | "pushed" | "done" | "abandoned";
|
|
11
|
+
status: "committed" | "pushed" | "done" | "abandoned" | "superseded";
|
|
10
12
|
repoOrigin?: string | undefined;
|
|
13
|
+
intentId?: string | undefined;
|
|
11
14
|
commitSha?: string | undefined;
|
|
15
|
+
supersededBy?: string | undefined;
|
|
12
16
|
}, {
|
|
13
17
|
repoPath: string;
|
|
14
18
|
repoOrigin?: string | undefined;
|
|
15
|
-
status?: "committed" | "pushed" | "done" | "abandoned" | undefined;
|
|
19
|
+
status?: "committed" | "pushed" | "done" | "abandoned" | "superseded" | undefined;
|
|
20
|
+
intentId?: string | undefined;
|
|
16
21
|
commitSha?: string | undefined;
|
|
22
|
+
supersededBy?: string | undefined;
|
|
17
23
|
}>;
|
|
18
24
|
export type CompleteIntentInput = z.infer<typeof completeIntentSchema>;
|
|
19
25
|
export interface CompleteIntentResponse {
|
|
@@ -31,18 +37,24 @@ export declare const completeIntentTool: {
|
|
|
31
37
|
inputSchema: z.ZodObject<{
|
|
32
38
|
repoOrigin: z.ZodOptional<z.ZodString>;
|
|
33
39
|
repoPath: z.ZodString;
|
|
40
|
+
intentId: z.ZodOptional<z.ZodString>;
|
|
34
41
|
commitSha: z.ZodOptional<z.ZodString>;
|
|
35
|
-
status: z.ZodDefault<z.ZodEnum<["committed", "pushed", "done", "abandoned"]>>;
|
|
42
|
+
status: z.ZodDefault<z.ZodEnum<["committed", "pushed", "done", "abandoned", "superseded"]>>;
|
|
43
|
+
supersededBy: z.ZodOptional<z.ZodString>;
|
|
36
44
|
}, "strip", z.ZodTypeAny, {
|
|
37
45
|
repoPath: string;
|
|
38
|
-
status: "committed" | "pushed" | "done" | "abandoned";
|
|
46
|
+
status: "committed" | "pushed" | "done" | "abandoned" | "superseded";
|
|
39
47
|
repoOrigin?: string | undefined;
|
|
48
|
+
intentId?: string | undefined;
|
|
40
49
|
commitSha?: string | undefined;
|
|
50
|
+
supersededBy?: string | undefined;
|
|
41
51
|
}, {
|
|
42
52
|
repoPath: string;
|
|
43
53
|
repoOrigin?: string | undefined;
|
|
44
|
-
status?: "committed" | "pushed" | "done" | "abandoned" | undefined;
|
|
54
|
+
status?: "committed" | "pushed" | "done" | "abandoned" | "superseded" | undefined;
|
|
55
|
+
intentId?: string | undefined;
|
|
45
56
|
commitSha?: string | undefined;
|
|
57
|
+
supersededBy?: string | undefined;
|
|
46
58
|
}>;
|
|
47
59
|
handler: typeof completeIntent;
|
|
48
60
|
};
|
|
@@ -4,16 +4,45 @@ import { resolveOrigin } from './resolve-origin.js';
|
|
|
4
4
|
export const completeIntentSchema = z.object({
|
|
5
5
|
repoOrigin: z.string().optional().describe('Git remote origin URL. Auto-detected from repoPath via git if not provided.'),
|
|
6
6
|
repoPath: z.string().describe('Local path to the repository root'),
|
|
7
|
+
intentId: z.string().optional().describe('Expected intent ID to complete. If provided, the tool verifies this matches the active intent and rejects if mismatched (prevents race conditions with concurrent sessions).'),
|
|
7
8
|
commitSha: z.string().optional().describe('The git commit SHA to associate with this intent (if already committed)'),
|
|
8
|
-
status: z.enum(['committed', 'pushed', 'done', 'abandoned']).default('committed')
|
|
9
|
-
.describe('The new status for the intent. Use "committed" after git commit, "done" when work is complete, "abandoned" to discard.')
|
|
9
|
+
status: z.enum(['committed', 'pushed', 'done', 'abandoned', 'superseded']).default('committed')
|
|
10
|
+
.describe('The new status for the intent. Use "committed" after git commit, "done" when work is complete, "abandoned" to discard, "superseded" when another intent replaces this one.'),
|
|
11
|
+
supersededBy: z.string().optional().describe('Intent ID that supersedes this one. Required when status is "superseded".')
|
|
10
12
|
});
|
|
11
13
|
export async function completeIntent(input) {
|
|
12
14
|
const actualOrigin = resolveOrigin(input.repoOrigin, input.repoPath);
|
|
15
|
+
// If intentId provided, verify it matches the active intent before completing
|
|
16
|
+
if (input.intentId) {
|
|
17
|
+
const activeRes = await request('intent', 'get-active', { repoOrigin: actualOrigin });
|
|
18
|
+
const activeId = activeRes.intentId || activeRes.intent?.id || '';
|
|
19
|
+
if (!activeId) {
|
|
20
|
+
return {
|
|
21
|
+
success: false,
|
|
22
|
+
intentId: input.intentId,
|
|
23
|
+
previousStatus: 'unknown',
|
|
24
|
+
newStatus: input.status,
|
|
25
|
+
commitSha: input.commitSha,
|
|
26
|
+
message: `No active intent found. Expected intent ${input.intentId.substring(0, 8)} but nothing is active.`
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (activeId !== input.intentId) {
|
|
30
|
+
const activeTitle = activeRes.intent?.title || 'unknown';
|
|
31
|
+
return {
|
|
32
|
+
success: false,
|
|
33
|
+
intentId: input.intentId,
|
|
34
|
+
previousStatus: 'unknown',
|
|
35
|
+
newStatus: input.status,
|
|
36
|
+
commitSha: input.commitSha,
|
|
37
|
+
message: `Intent mismatch: expected ${input.intentId.substring(0, 8)} but active intent is "${activeTitle}" (${activeId.substring(0, 8)}). Another session may have changed the active intent.`
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
13
41
|
const res = await request('intent', 'complete', {
|
|
14
42
|
repoOrigin: actualOrigin,
|
|
15
43
|
status: input.status,
|
|
16
44
|
commitSha: input.commitSha,
|
|
45
|
+
supersededBy: input.supersededBy,
|
|
17
46
|
});
|
|
18
47
|
const intentId = res.intentId || '';
|
|
19
48
|
const intentTitle = res.intentTitle || 'Intent';
|
|
@@ -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,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,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"complete-intent.js","sourceRoot":"","sources":["../../src/tools/complete-intent.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,13 @@ 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
10
|
}, "strip", z.ZodTypeAny, {
|
|
10
11
|
repoPath: string;
|
|
11
12
|
title: string;
|
|
12
13
|
description: string;
|
|
13
14
|
templateType: "feature" | "refactor" | "exploration";
|
|
15
|
+
force: boolean;
|
|
14
16
|
repoOrigin?: string | undefined;
|
|
15
17
|
constraints?: string[] | undefined;
|
|
16
18
|
}, {
|
|
@@ -20,13 +22,29 @@ export declare const createAndActivateIntentSchema: z.ZodObject<{
|
|
|
20
22
|
repoOrigin?: string | undefined;
|
|
21
23
|
templateType?: "feature" | "refactor" | "exploration" | undefined;
|
|
22
24
|
constraints?: string[] | undefined;
|
|
25
|
+
force?: boolean | undefined;
|
|
23
26
|
}>;
|
|
24
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
|
+
}
|
|
25
42
|
export interface CreateIntentResponse {
|
|
26
43
|
success: boolean;
|
|
27
44
|
intentId: string;
|
|
28
|
-
|
|
45
|
+
action: 'created' | 'reactivated' | 'conflict';
|
|
29
46
|
message: string;
|
|
47
|
+
conflicts?: ConflictInfo[];
|
|
30
48
|
}
|
|
31
49
|
export declare function createAndActivateIntent(input: CreateIntentInput): Promise<CreateIntentResponse>;
|
|
32
50
|
export declare const createAndActivateIntentTool: {
|
|
@@ -39,11 +57,13 @@ export declare const createAndActivateIntentTool: {
|
|
|
39
57
|
description: z.ZodString;
|
|
40
58
|
templateType: z.ZodDefault<z.ZodEnum<["feature", "refactor", "exploration"]>>;
|
|
41
59
|
constraints: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
60
|
+
force: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
42
61
|
}, "strip", z.ZodTypeAny, {
|
|
43
62
|
repoPath: string;
|
|
44
63
|
title: string;
|
|
45
64
|
description: string;
|
|
46
65
|
templateType: "feature" | "refactor" | "exploration";
|
|
66
|
+
force: boolean;
|
|
47
67
|
repoOrigin?: string | undefined;
|
|
48
68
|
constraints?: string[] | undefined;
|
|
49
69
|
}, {
|
|
@@ -53,6 +73,8 @@ export declare const createAndActivateIntentTool: {
|
|
|
53
73
|
repoOrigin?: string | undefined;
|
|
54
74
|
templateType?: "feature" | "refactor" | "exploration" | undefined;
|
|
55
75
|
constraints?: string[] | undefined;
|
|
76
|
+
force?: boolean | undefined;
|
|
56
77
|
}>;
|
|
57
78
|
handler: typeof createAndActivateIntent;
|
|
58
79
|
};
|
|
80
|
+
export {};
|
|
@@ -7,11 +7,15 @@ export const createAndActivateIntentSchema = z.object({
|
|
|
7
7
|
title: z.string().max(200).describe('Short, descriptive title for the intent'),
|
|
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
|
-
constraints: z.array(z.string()).optional().describe('Requirements or constraints for this work')
|
|
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
12
|
});
|
|
12
13
|
export async function createAndActivateIntent(input) {
|
|
13
14
|
const actualOrigin = resolveOrigin(input.repoOrigin, input.repoPath);
|
|
14
|
-
// Step 1: Create the intent
|
|
15
|
+
// Step 1: Create (or find-and-reactivate) the intent.
|
|
16
|
+
// The Muninn handler proxies to API POST /intents/find-or-create which
|
|
17
|
+
// dedups by embedding similarity (≥ 0.85) and runs automatic conflict
|
|
18
|
+
// detection against all other intents for the repo.
|
|
15
19
|
const createRes = await request('intent', 'create', {
|
|
16
20
|
repoOrigin: actualOrigin,
|
|
17
21
|
title: input.title,
|
|
@@ -19,18 +23,63 @@ export async function createAndActivateIntent(input) {
|
|
|
19
23
|
templateType: input.templateType,
|
|
20
24
|
constraints: input.constraints || [],
|
|
21
25
|
scope: { type: 'repo', paths: [] },
|
|
26
|
+
force: input.force || false,
|
|
22
27
|
});
|
|
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 highCount = conflicts.filter((c) => c.severity === 'high').length;
|
|
34
|
+
const mediumCount = conflicts.filter((c) => c.severity === 'medium').length;
|
|
35
|
+
const lines = [
|
|
36
|
+
`Found ${conflicts.length} potential conflict(s) with existing intents:`,
|
|
37
|
+
'',
|
|
38
|
+
];
|
|
39
|
+
for (const c of conflicts) {
|
|
40
|
+
const badge = c.severity === 'high' ? '[HIGH]' : c.severity === 'medium' ? '[MEDIUM]' : '[LOW]';
|
|
41
|
+
lines.push(`${badge} "${c.title}" by ${c.author} (${c.status}, ${c.staleness})`);
|
|
42
|
+
if (c.overlappingFiles.length > 0) {
|
|
43
|
+
lines.push(` Files: ${c.overlappingFiles.join(', ')}`);
|
|
44
|
+
}
|
|
45
|
+
if (c.oppositionDetected) {
|
|
46
|
+
lines.push(` Semantic opposition: ${c.oppositionDetail}`);
|
|
47
|
+
}
|
|
48
|
+
lines.push(` Similarity: ${(c.similarityScore * 100).toFixed(0)}%`);
|
|
49
|
+
lines.push('');
|
|
50
|
+
}
|
|
51
|
+
lines.push('To proceed anyway, call create_and_activate_intent again with force=true.');
|
|
52
|
+
return {
|
|
53
|
+
success: false,
|
|
54
|
+
intentId: '',
|
|
55
|
+
action: 'conflict',
|
|
56
|
+
message: lines.join('\n'),
|
|
57
|
+
conflicts,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// Propagate Muninn-side errors (e.g. not signed in, API unreachable) to the AI
|
|
61
|
+
// so it can tell the user how to recover instead of silently proceeding.
|
|
62
|
+
if (createRes.success === false) {
|
|
63
|
+
throw new Error(createRes.error || 'Intent creation failed');
|
|
64
|
+
}
|
|
23
65
|
const intentId = createRes.intent?.id || createRes.intentId || '';
|
|
66
|
+
if (!intentId) {
|
|
67
|
+
throw new Error('Intent creation succeeded but no intent ID was returned');
|
|
68
|
+
}
|
|
69
|
+
const action = createRes.action === 'reactivated' ? 'reactivated' : 'created';
|
|
24
70
|
// Step 2: Set it as active
|
|
25
71
|
await request('intent', 'set-active', {
|
|
26
72
|
repoOrigin: actualOrigin,
|
|
27
73
|
intentId,
|
|
28
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}"`;
|
|
29
78
|
return {
|
|
30
79
|
success: true,
|
|
31
80
|
intentId,
|
|
32
|
-
|
|
33
|
-
message
|
|
81
|
+
action,
|
|
82
|
+
message,
|
|
34
83
|
};
|
|
35
84
|
}
|
|
36
85
|
export const createAndActivateIntentTool = {
|
|
@@ -42,7 +91,11 @@ Call this when check_active_intent returns no active intent. Before calling:
|
|
|
42
91
|
2. Ask the user to confirm the intent details (title, description, type)
|
|
43
92
|
3. Then call this tool with the confirmed details
|
|
44
93
|
|
|
45
|
-
This ensures all AI-generated code gets properly tracked and attributed
|
|
94
|
+
This ensures all AI-generated code gets properly tracked and attributed.
|
|
95
|
+
|
|
96
|
+
If the tool returns conflicts (action="conflict"), present the conflict
|
|
97
|
+
details to the user and ask whether to proceed. If yes, retry with
|
|
98
|
+
force=true to bypass conflict detection.`,
|
|
46
99
|
inputSchema: createAndActivateIntentSchema,
|
|
47
100
|
handler: createAndActivateIntent
|
|
48
101
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-intent.js","sourceRoot":"","sources":["../../src/tools/create-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,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,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,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC9E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC3E,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;IACxG,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"create-intent.js","sourceRoot":"","sources":["../../src/tools/create-intent.ts"],"names":[],"mappings":"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"}
|