@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.
Files changed (58) hide show
  1. package/CLAUDE.md.example +101 -36
  2. package/README.md +3 -1
  3. package/build/index.js +24 -5
  4. package/build/index.js.map +1 -1
  5. package/build/prompts/intent-first-workflow.js +7 -8
  6. package/build/prompts/intent-first-workflow.js.map +1 -1
  7. package/build/resources/active-intent.js +2 -2
  8. package/build/resources/active-intent.js.map +1 -1
  9. package/build/services/muninn-ipc.d.ts +12 -5
  10. package/build/services/muninn-ipc.js +47 -12
  11. package/build/services/muninn-ipc.js.map +1 -1
  12. package/build/tools/activate-intent.d.ts +40 -0
  13. package/build/tools/activate-intent.js +52 -0
  14. package/build/tools/activate-intent.js.map +1 -0
  15. package/build/tools/check-active-intent.d.ts +0 -1
  16. package/build/tools/check-active-intent.js +3 -4
  17. package/build/tools/check-active-intent.js.map +1 -1
  18. package/build/tools/complete-intent.d.ts +18 -6
  19. package/build/tools/complete-intent.js +31 -2
  20. package/build/tools/complete-intent.js.map +1 -1
  21. package/build/tools/create-intent.d.ts +23 -1
  22. package/build/tools/create-intent.js +58 -5
  23. package/build/tools/create-intent.js.map +1 -1
  24. package/build/tools/detect-intent-conflicts.d.ts +22 -322
  25. package/build/tools/detect-intent-conflicts.js +35 -60
  26. package/build/tools/detect-intent-conflicts.js.map +1 -1
  27. package/build/tools/edit-session-decision.d.ts +4 -4
  28. package/build/tools/get-intents-for-file.js +1 -1
  29. package/build/tools/get-intents-for-file.js.map +1 -1
  30. package/build/tools/get-intents-for-lines.js +1 -1
  31. package/build/tools/get-intents-for-lines.js.map +1 -1
  32. package/build/tools/get-project-decisions.d.ts +1 -0
  33. package/build/tools/get-project-decisions.js +3 -2
  34. package/build/tools/get-project-decisions.js.map +1 -1
  35. package/build/tools/get-relevant-context.d.ts +1 -0
  36. package/build/tools/get-relevant-context.js +2 -1
  37. package/build/tools/get-relevant-context.js.map +1 -1
  38. package/build/tools/get-session-decisions.d.ts +1 -0
  39. package/build/tools/get-session-decisions.js +1 -0
  40. package/build/tools/get-session-decisions.js.map +1 -1
  41. package/build/tools/index.d.ts +51 -198
  42. package/build/tools/index.js +3 -3
  43. package/build/tools/index.js.map +1 -1
  44. package/build/tools/infer-history.d.ts +11 -10
  45. package/build/tools/infer-history.js +49 -26
  46. package/build/tools/infer-history.js.map +1 -1
  47. package/build/tools/list-team-intents.d.ts +30 -0
  48. package/build/tools/list-team-intents.js +39 -16
  49. package/build/tools/list-team-intents.js.map +1 -1
  50. package/build/tools/log-work.js +1 -1
  51. package/build/tools/log-work.js.map +1 -1
  52. package/build/tools/update-intent.d.ts +95 -0
  53. package/build/tools/update-intent.js +94 -0
  54. package/build/tools/update-intent.js.map +1 -0
  55. package/package.json +1 -1
  56. package/build/tools/assign-blocks.d.ts +0 -87
  57. package/build/tools/assign-blocks.js +0 -49
  58. package/build/tools/assign-blocks.js.map +0 -1
@@ -2,56 +2,84 @@ import { z } from 'zod';
2
2
  import { request } from '../services/muninn-ipc.js';
3
3
  export const inferHistorySchema = z.object({
4
4
  repoPath: z.string().describe('Local path to the repository root'),
5
- commits: z.number().optional().default(50).describe('Number of recent commits to analyze (default: 50)'),
6
- tier: z.number().optional().default(5).describe('Enrichment tier 1-5: 1=git log, 2=+PR/MR descriptions (needs gh/glab), 3=+revert diffs, 4=+issue discussions (needs gh/glab), 5=+full diffs (default: 5)'),
7
- contextIssues: z.boolean().optional().default(false).describe('Include context issues from commit date range (Tier 4 only)'),
5
+ commits: z.number().optional().describe('Number of recent commits to analyze. If omitted, the server resumes from the last commit infer_history processed for this repo (or falls back to 50 on first run).'),
6
+ contextIssues: z.boolean().optional().default(false).describe('Include context issues from commit date range (requires gh/glab CLI)'),
8
7
  model: z.string().optional().default('claude-sonnet-4-20250514').describe('Anthropic model to use (default: claude-sonnet-4-20250514)'),
9
8
  maxStories: z.number().optional().default(0).describe('Maximum stories to analyze in Pass 2 (0 = unlimited)'),
10
9
  allowCommitSplitting: z.boolean().optional().default(false).describe('Allow splitting a single commit into multiple stories when it contains unrelated changes (recommended for repos with messy commit history)'),
11
10
  estimateOnly: z.boolean().optional().default(true).describe('If true (default), only estimate token cost without running the pipeline. Set to false to run the full pipeline.'),
12
11
  });
12
+ function describeAutoMode(am) {
13
+ const sha = am.lastSha ? ` (last_inferred_sha=${am.lastSha.slice(0, 7)})` : '';
14
+ switch (am.mode) {
15
+ case 'first-run':
16
+ return `\nℹ Auto-mode: first run for this repo — analyzing fallback of ${am.commits} most recent commits.`;
17
+ case 'resume':
18
+ return `\nℹ Auto-mode: resumed${sha} — ${am.commits} commits since last run.`;
19
+ case 'head-equals-last':
20
+ return `\nℹ Auto-mode: HEAD already matches last_inferred_sha${sha} — nothing new to analyze.`;
21
+ case 'fallback-rewritten':
22
+ return `\n⚠ Auto-mode: stored last_inferred_sha${sha} is no longer reachable (rebase/GC/branch switch). Falling back to ${am.commits} most recent commits.`;
23
+ case 'fallback-no-remote':
24
+ return `\n⚠ Auto-mode: no git remote 'origin' — cannot key resume state. Falling back to ${am.commits} most recent commits.`;
25
+ case 'fallback-error':
26
+ return `\n⚠ Auto-mode: failed to resolve resume state (see Muninn logs). Falling back to ${am.commits} most recent commits.`;
27
+ }
28
+ }
13
29
  export async function inferHistory(input) {
30
+ // Only forward `commits` when the caller explicitly provided one, so the
31
+ // server can fall back to last_inferred_sha tracking otherwise.
32
+ const inferencePayload = {
33
+ repoPath: input.repoPath,
34
+ contextIssues: input.contextIssues,
35
+ model: input.model,
36
+ };
37
+ if (input.commits !== undefined)
38
+ inferencePayload.commits = input.commits;
14
39
  if (input.estimateOnly) {
15
- const res = await request('inference', 'estimate', {
16
- repoPath: input.repoPath,
17
- commits: input.commits,
18
- tier: input.tier,
19
- contextIssues: input.contextIssues,
20
- model: input.model,
21
- });
40
+ // Walking git history on deep repos (e.g., zed at 37k commits) exceeds
41
+ // the 30s default. Estimate is synchronous — no async-start response —
42
+ // so the caller blocks until the server returns.
43
+ const ESTIMATE_TIMEOUT_MS = 180_000;
44
+ const res = await request('inference', 'estimate', inferencePayload, ESTIMATE_TIMEOUT_MS);
22
45
  let forgeWarning = '';
23
- if (input.tier >= 2 && !res.forge_cli_available) {
46
+ if (!res.forge_cli_available) {
24
47
  const forge = res.forge ?? 'Unknown';
25
48
  if (forge === 'Unknown') {
26
- forgeWarning = '\n⚠ Unrecognized git hosting platform. Tiers 2 (PR/MR descriptions) and 4 (issue discussions) will be skipped.';
49
+ forgeWarning = '\n⚠ Unrecognized git hosting platform. PR/MR descriptions and issue discussions will be skipped.';
27
50
  }
28
51
  else if (forge === 'GitHub') {
29
- forgeWarning = '\n⚠ GitHub CLI (gh) not found or not authenticated. Tiers 2 and 4 will be skipped. Run `gh auth login` to include PR and issue context.';
52
+ forgeWarning = '\n⚠ GitHub CLI (gh) not found or not authenticated. PR descriptions and issue discussions will be skipped. Run `gh auth login` to include them.';
30
53
  }
31
54
  else if (forge === 'GitLab') {
32
- forgeWarning = '\n⚠ GitLab CLI (glab) not found or not authenticated. Tiers 2 and 4 will be skipped. Run `glab auth login` to include MR and issue context.';
55
+ forgeWarning = '\n⚠ GitLab CLI (glab) not found or not authenticated. MR descriptions and issue discussions will be skipped. Run `glab auth login` to include them.';
33
56
  }
34
57
  }
58
+ const autoModeNote = res.autoMode ? describeAutoMode(res.autoMode) : '';
35
59
  return {
36
60
  estimate: res.estimate,
37
61
  forge: res.forge,
38
62
  forge_cli_available: res.forge_cli_available,
39
63
  commit_count: res.commit_count,
40
- message: `Estimated cost: $${res.estimate?.cost_usd ?? '?'} for ~${res.estimate?.est_stories ?? '?'} stories from ${res.commit_count ?? '?'} commits${forgeWarning}`
64
+ autoMode: res.autoMode,
65
+ message: `Estimated cost: $${res.estimate?.cost_usd ?? '?'} for ~${res.estimate?.est_stories ?? '?'} stories from ${res.commit_count ?? '?'} commits${autoModeNote}${forgeWarning}`
41
66
  };
42
67
  }
43
- const res = await request('inference', 'run', {
68
+ const runPayload = {
44
69
  repoPath: input.repoPath,
45
- commits: input.commits,
46
- tier: input.tier,
47
70
  contextIssues: input.contextIssues,
48
71
  model: input.model,
49
72
  maxStories: input.maxStories,
50
73
  allowCommitSplitting: input.allowCommitSplitting,
51
- });
74
+ };
75
+ if (input.commits !== undefined)
76
+ runPayload.commits = input.commits;
77
+ const res = await request('inference', 'run', runPayload);
78
+ const autoModeNote = res.autoMode ? describeAutoMode(res.autoMode) : '';
52
79
  return {
53
80
  started: res.started,
54
- message: res.message || 'Inference pipeline started. Progress updates will be sent as the pipeline runs.'
81
+ autoMode: res.autoMode,
82
+ message: (res.message || 'Inference pipeline started. Progress updates will be sent as the pipeline runs.') + autoModeNote
55
83
  };
56
84
  }
57
85
  export const inferHistoryTool = {
@@ -69,12 +97,7 @@ Use \`estimateOnly: true\` first to preview token cost before running the full p
69
97
 
70
98
  The pipeline supports checkpointing — if interrupted, re-running resumes from where it left off.
71
99
 
72
- Enrichment tiers control how much context is gathered:
73
- - Tier 1: Git log only (fastest, cheapest)
74
- - Tier 2: + PR/MR descriptions and review comments (requires forge CLI: gh or glab)
75
- - Tier 3: + Diffs for revert commits
76
- - Tier 4: + Issue discussions with decision-level content (requires forge CLI)
77
- - Tier 5: + Full diffs and code annotation extraction (most expensive)
100
+ Extraction includes: git log, file diffs, code annotations, revert detection, and optionally PR/MR descriptions + issue discussions (requires gh or glab CLI, auto-skipped if unavailable).
78
101
 
79
102
  Supports GitHub (gh CLI) and GitLab (glab CLI). Forge is auto-detected from the remote origin.`,
80
103
  inputSchema: inferHistorySchema,
@@ -1 +1 @@
1
- {"version":3,"file":"infer-history.js","sourceRoot":"","sources":["../../src/tools/infer-history.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"infer-history.js","sourceRoot":"","sources":["../../src/tools/infer-history.ts"],"names":[],"mappings":"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"}
@@ -3,14 +3,29 @@ export declare const listTeamIntentsSchema: z.ZodObject<{
3
3
  repoOrigin: z.ZodOptional<z.ZodString>;
4
4
  repoPath: z.ZodString;
5
5
  status: z.ZodOptional<z.ZodEnum<["active", "committed", "pushed", "done", "abandoned"]>>;
6
+ author: z.ZodOptional<z.ZodString>;
7
+ since: z.ZodOptional<z.ZodString>;
8
+ until: z.ZodOptional<z.ZodString>;
9
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
10
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
6
11
  }, "strip", z.ZodTypeAny, {
7
12
  repoPath: string;
13
+ limit: number;
14
+ offset: number;
8
15
  repoOrigin?: string | undefined;
9
16
  status?: "active" | "committed" | "pushed" | "done" | "abandoned" | undefined;
17
+ author?: string | undefined;
18
+ since?: string | undefined;
19
+ until?: string | undefined;
10
20
  }, {
11
21
  repoPath: string;
12
22
  repoOrigin?: string | undefined;
13
23
  status?: "active" | "committed" | "pushed" | "done" | "abandoned" | undefined;
24
+ author?: string | undefined;
25
+ since?: string | undefined;
26
+ until?: string | undefined;
27
+ limit?: number | undefined;
28
+ offset?: number | undefined;
14
29
  }>;
15
30
  export type ListTeamIntentsInput = z.infer<typeof listTeamIntentsSchema>;
16
31
  export interface TeamIntent {
@@ -38,14 +53,29 @@ export declare const listTeamIntentsTool: {
38
53
  repoOrigin: z.ZodOptional<z.ZodString>;
39
54
  repoPath: z.ZodString;
40
55
  status: z.ZodOptional<z.ZodEnum<["active", "committed", "pushed", "done", "abandoned"]>>;
56
+ author: z.ZodOptional<z.ZodString>;
57
+ since: z.ZodOptional<z.ZodString>;
58
+ until: z.ZodOptional<z.ZodString>;
59
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
60
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
41
61
  }, "strip", z.ZodTypeAny, {
42
62
  repoPath: string;
63
+ limit: number;
64
+ offset: number;
43
65
  repoOrigin?: string | undefined;
44
66
  status?: "active" | "committed" | "pushed" | "done" | "abandoned" | undefined;
67
+ author?: string | undefined;
68
+ since?: string | undefined;
69
+ until?: string | undefined;
45
70
  }, {
46
71
  repoPath: string;
47
72
  repoOrigin?: string | undefined;
48
73
  status?: "active" | "committed" | "pushed" | "done" | "abandoned" | undefined;
74
+ author?: string | undefined;
75
+ since?: string | undefined;
76
+ until?: string | undefined;
77
+ limit?: number | undefined;
78
+ offset?: number | undefined;
49
79
  }>;
50
80
  handler: typeof listTeamIntents;
51
81
  };
@@ -5,7 +5,12 @@ export const listTeamIntentsSchema = 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
7
  status: z.enum(['active', 'committed', 'pushed', 'done', 'abandoned']).optional()
8
- .describe('Filter by intent status')
8
+ .describe('Filter by intent status'),
9
+ author: z.string().optional().describe('Filter by author name or ID'),
10
+ since: z.string().optional().describe('Filter intents updated after this ISO8601 date (e.g. "2026-04-01")'),
11
+ until: z.string().optional().describe('Filter intents updated before this ISO8601 date'),
12
+ limit: z.number().optional().default(50).describe('Maximum number of intents to return (default: 50)'),
13
+ offset: z.number().optional().default(0).describe('Number of intents to skip for pagination (default: 0)'),
9
14
  });
10
15
  export async function listTeamIntents(input) {
11
16
  const actualOrigin = resolveOrigin(input.repoOrigin, input.repoPath);
@@ -13,8 +18,8 @@ export async function listTeamIntents(input) {
13
18
  repoOrigin: actualOrigin,
14
19
  status: input.status,
15
20
  });
16
- const intents = (res.intents || []).map((intent) => ({
17
- id: intent.id || intent._id || '',
21
+ let intents = (res.intents || []).map((intent) => ({
22
+ id: intent.id || '',
18
23
  title: intent.title || '',
19
24
  description: intent.description || '',
20
25
  author: intent.author || intent.author_name || intent.authorName || 'Unknown',
@@ -25,32 +30,50 @@ export async function listTeamIntents(input) {
25
30
  fileCount: intent.file_count || intent.fileCount || 0,
26
31
  updatedAt: intent.updated_at || intent.updatedAt || ''
27
32
  }));
28
- // Filter by status if provided (in case Muninn doesn't filter)
29
- const filteredIntents = input.status
30
- ? intents.filter(i => i.status === input.status)
31
- : intents;
32
- const activeCount = filteredIntents.filter(i => i.status === 'active').length;
33
- const summary = filteredIntents.length === 0
33
+ // Apply filters
34
+ if (input.status) {
35
+ intents = intents.filter(i => i.status === input.status);
36
+ }
37
+ if (input.author) {
38
+ const authorLower = input.author.toLowerCase();
39
+ intents = intents.filter(i => i.author.toLowerCase().includes(authorLower));
40
+ }
41
+ if (input.since) {
42
+ const sinceDate = new Date(input.since);
43
+ if (!isNaN(sinceDate.getTime())) {
44
+ intents = intents.filter(i => new Date(i.updatedAt) >= sinceDate);
45
+ }
46
+ }
47
+ if (input.until) {
48
+ const untilDate = new Date(input.until);
49
+ if (!isNaN(untilDate.getTime())) {
50
+ intents = intents.filter(i => new Date(i.updatedAt) <= untilDate);
51
+ }
52
+ }
53
+ const total = intents.length;
54
+ const offset = input.offset ?? 0;
55
+ const limit = input.limit ?? 50;
56
+ const paginated = intents.slice(offset, offset + limit);
57
+ const activeCount = paginated.filter(i => i.status === 'active').length;
58
+ const summary = total === 0
34
59
  ? 'No intents found'
35
- : input.status
36
- ? `${filteredIntents.length} ${input.status} intent(s)`
37
- : `${filteredIntents.length} intent(s), ${activeCount} active`;
60
+ : `${paginated.length} intent(s) returned (${total} total${offset > 0 ? `, offset ${offset}` : ''}), ${activeCount} active`;
38
61
  return {
39
- intents: filteredIntents,
40
- count: filteredIntents.length,
62
+ intents: paginated,
63
+ count: total,
41
64
  summary
42
65
  };
43
66
  }
44
67
  export const listTeamIntentsTool = {
45
68
  name: 'list_team_intents',
46
- description: `List all intents from team members for this repository.
69
+ description: `List intents from team members for this repository.
47
70
 
48
71
  Use this to:
49
72
  - See what your team is working on
50
73
  - Check for potential overlapping work before starting a new task
51
74
  - Review the status of various features/refactors in progress
52
75
 
53
- Optionally filter by status (active, committed, pushed, done, abandoned).`,
76
+ Supports filtering by status, author, and date range. Paginated (default: 50 per page).`,
54
77
  inputSchema: listTeamIntentsSchema,
55
78
  handler: listTeamIntents
56
79
  };
@@ -1 +1 @@
1
- {"version":3,"file":"list-team-intents.js","sourceRoot":"","sources":["../../src/tools/list-team-intents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-team-intents.js","sourceRoot":"","sources":["../../src/tools/list-team-intents.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ export async function logWork(input) {
23
23
  }
24
24
  export const logWorkTool = {
25
25
  name: 'log_work',
26
- description: 'Lightweight single-call tool to log completed work without the full intent lifecycle. Use for quick fixes, doc updates, config changes — any task where create/assign/complete is overhead. Creates a completed intent record in one call. Does NOT set an active intent.',
26
+ description: 'DEPRECATED — trivial changes (typos, one-line fixes, obvious bugs, doc updates, config changes) should skip the intent workflow entirely: just make the change and commit, no intent needed. Do not call this tool. Kept available for backwards compatibility only and will be removed in a future release.',
27
27
  inputSchema: logWorkSchema,
28
28
  handler: logWork
29
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"log-work.js","sourceRoot":"","sources":["../../src/tools/log-work.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,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;IACzH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC9D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACzE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CAC9F,CAAC,CAAA;AAUF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAmB;IAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAE9D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE;QAC9C,UAAU,EAAE,MAAM;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;KACzB,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAA;IAEnC,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,KAAK;QAC9B,QAAQ;QACR,OAAO,EAAE,YAAY,KAAK,CAAC,KAAK,GAAG;KACpC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,2QAA2Q;IACxR,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,OAAO;CACjB,CAAA"}
1
+ {"version":3,"file":"log-work.js","sourceRoot":"","sources":["../../src/tools/log-work.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,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;IACzH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC9D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACzE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CAC9F,CAAC,CAAA;AAUF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAmB;IAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAE9D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE;QAC9C,UAAU,EAAE,MAAM;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;KACzB,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAA;IAEnC,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,KAAK;QAC9B,QAAQ;QACR,OAAO,EAAE,YAAY,KAAK,CAAC,KAAK,GAAG;KACpC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,8SAA8S;IAC3T,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,OAAO;CACjB,CAAA"}
@@ -0,0 +1,95 @@
1
+ import { z } from 'zod';
2
+ export declare const updateIntentSchema: z.ZodObject<{
3
+ repoOrigin: z.ZodOptional<z.ZodString>;
4
+ repoPath: z.ZodString;
5
+ intentId: z.ZodOptional<z.ZodString>;
6
+ title: z.ZodOptional<z.ZodString>;
7
+ description: z.ZodOptional<z.ZodString>;
8
+ constraints: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
9
+ scope: z.ZodOptional<z.ZodObject<{
10
+ type: z.ZodEnum<["repo", "folder", "files"]>;
11
+ paths: z.ZodArray<z.ZodString, "many">;
12
+ }, "strip", z.ZodTypeAny, {
13
+ type: "repo" | "files" | "folder";
14
+ paths: string[];
15
+ }, {
16
+ type: "repo" | "files" | "folder";
17
+ paths: string[];
18
+ }>>;
19
+ }, "strip", z.ZodTypeAny, {
20
+ repoPath: string;
21
+ repoOrigin?: string | undefined;
22
+ title?: string | undefined;
23
+ description?: string | undefined;
24
+ constraints?: string[] | undefined;
25
+ intentId?: string | undefined;
26
+ scope?: {
27
+ type: "repo" | "files" | "folder";
28
+ paths: string[];
29
+ } | undefined;
30
+ }, {
31
+ repoPath: string;
32
+ repoOrigin?: string | undefined;
33
+ title?: string | undefined;
34
+ description?: string | undefined;
35
+ constraints?: string[] | undefined;
36
+ intentId?: string | undefined;
37
+ scope?: {
38
+ type: "repo" | "files" | "folder";
39
+ paths: string[];
40
+ } | undefined;
41
+ }>;
42
+ export type UpdateIntentInput = z.infer<typeof updateIntentSchema>;
43
+ export interface UpdateIntentResponse {
44
+ success: boolean;
45
+ intentId: string;
46
+ message: string;
47
+ updatedFields: string[];
48
+ warning?: string;
49
+ }
50
+ export declare function updateIntent(input: UpdateIntentInput): Promise<UpdateIntentResponse>;
51
+ export declare const updateIntentTool: {
52
+ name: string;
53
+ description: string;
54
+ inputSchema: z.ZodObject<{
55
+ repoOrigin: z.ZodOptional<z.ZodString>;
56
+ repoPath: z.ZodString;
57
+ intentId: z.ZodOptional<z.ZodString>;
58
+ title: z.ZodOptional<z.ZodString>;
59
+ description: z.ZodOptional<z.ZodString>;
60
+ constraints: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
61
+ scope: z.ZodOptional<z.ZodObject<{
62
+ type: z.ZodEnum<["repo", "folder", "files"]>;
63
+ paths: z.ZodArray<z.ZodString, "many">;
64
+ }, "strip", z.ZodTypeAny, {
65
+ type: "repo" | "files" | "folder";
66
+ paths: string[];
67
+ }, {
68
+ type: "repo" | "files" | "folder";
69
+ paths: string[];
70
+ }>>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ repoPath: string;
73
+ repoOrigin?: string | undefined;
74
+ title?: string | undefined;
75
+ description?: string | undefined;
76
+ constraints?: string[] | undefined;
77
+ intentId?: string | undefined;
78
+ scope?: {
79
+ type: "repo" | "files" | "folder";
80
+ paths: string[];
81
+ } | undefined;
82
+ }, {
83
+ repoPath: string;
84
+ repoOrigin?: string | undefined;
85
+ title?: string | undefined;
86
+ description?: string | undefined;
87
+ constraints?: string[] | undefined;
88
+ intentId?: string | undefined;
89
+ scope?: {
90
+ type: "repo" | "files" | "folder";
91
+ paths: string[];
92
+ } | undefined;
93
+ }>;
94
+ handler: typeof updateIntent;
95
+ };
@@ -0,0 +1,94 @@
1
+ import { z } from 'zod';
2
+ import { request } from '../services/muninn-ipc.js';
3
+ import { resolveOrigin } from './resolve-origin.js';
4
+ export const updateIntentSchema = 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().optional().describe('ID of the intent to update. If omitted, updates the currently active intent.'),
8
+ title: z.string().max(200).optional().describe('Updated title for the intent'),
9
+ description: z.string().max(2000).optional().describe('Updated description for the intent'),
10
+ constraints: z.array(z.string()).optional().describe('Updated constraints for this work'),
11
+ scope: z.object({
12
+ type: z.enum(['repo', 'folder', 'files']),
13
+ paths: z.array(z.string())
14
+ }).optional().describe('Updated scope for the intent'),
15
+ });
16
+ export async function updateIntent(input) {
17
+ const actualOrigin = resolveOrigin(input.repoOrigin, input.repoPath);
18
+ // Resolve the intent ID: use provided intentId, or look up the active intent
19
+ let intentId = input.intentId;
20
+ if (!intentId) {
21
+ const activeRes = await request('intent', 'get-active', { repoOrigin: actualOrigin });
22
+ intentId = activeRes.intentId || activeRes.intent?.id || '';
23
+ if (!intentId) {
24
+ return {
25
+ success: false,
26
+ intentId: '',
27
+ message: 'No active intent found and no intentId provided. Create an intent first or provide an intentId.',
28
+ updatedFields: [],
29
+ };
30
+ }
31
+ }
32
+ // Build the updates object from provided fields
33
+ const updates = {};
34
+ const updatedFields = [];
35
+ if (input.title !== undefined) {
36
+ updates.title = input.title;
37
+ updatedFields.push('title');
38
+ }
39
+ if (input.description !== undefined) {
40
+ updates.description = input.description;
41
+ updatedFields.push('description');
42
+ }
43
+ if (input.constraints !== undefined) {
44
+ updates.constraints = input.constraints;
45
+ updatedFields.push('constraints');
46
+ }
47
+ if (input.scope !== undefined) {
48
+ updates.scope = input.scope;
49
+ updatedFields.push('scope');
50
+ }
51
+ if (updatedFields.length === 0) {
52
+ return {
53
+ success: false,
54
+ intentId,
55
+ message: 'No fields to update. Provide at least one of: title, description, constraints, scope.',
56
+ updatedFields: [],
57
+ };
58
+ }
59
+ const res = await request('intent', 'update', {
60
+ id: intentId,
61
+ updates,
62
+ });
63
+ if (res.success === false) {
64
+ return {
65
+ success: false,
66
+ intentId,
67
+ message: res.error || 'Intent update failed',
68
+ updatedFields: [],
69
+ };
70
+ }
71
+ return {
72
+ success: true,
73
+ intentId,
74
+ message: `Intent updated: ${updatedFields.join(', ')}`,
75
+ updatedFields,
76
+ warning: res.warning,
77
+ };
78
+ }
79
+ export const updateIntentTool = {
80
+ name: 'update_intent',
81
+ description: `Update an active intent's title, description, scope, or constraints.
82
+
83
+ Use this to reformulate an intent as understanding evolves during work. Intents are
84
+ living documents — they should be updated to reflect what the work actually became,
85
+ not left as the initial guess. Common triggers for reformulation:
86
+ - The real problem turned out to be different from the initial hypothesis
87
+ - Scope expanded or narrowed during investigation
88
+ - The approach changed after discovering constraints
89
+
90
+ If no intentId is provided, the currently active intent is updated.`,
91
+ inputSchema: updateIntentSchema,
92
+ handler: updateIntent
93
+ };
94
+ //# sourceMappingURL=update-intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-intent.js","sourceRoot":"","sources":["../../src/tools/update-intent.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kawacode/mcp",
3
- "version": "5.1.1",
3
+ "version": "5.2.2",
4
4
  "description": "MCP server for Kawa Code intent integration with Claude Code and Cursor AI",
5
5
  "main": "build/index.js",
6
6
  "bin": {
@@ -1,87 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const assignBlocksSchema: z.ZodObject<{
3
- repoOrigin: z.ZodOptional<z.ZodString>;
4
- repoPath: z.ZodString;
5
- intentId: z.ZodString;
6
- blocks: z.ZodArray<z.ZodObject<{
7
- filePath: z.ZodString;
8
- startLine: z.ZodNumber;
9
- endLine: z.ZodNumber;
10
- }, "strip", z.ZodTypeAny, {
11
- filePath: string;
12
- startLine: number;
13
- endLine: number;
14
- }, {
15
- filePath: string;
16
- startLine: number;
17
- endLine: number;
18
- }>, "many">;
19
- }, "strip", z.ZodTypeAny, {
20
- repoPath: string;
21
- intentId: string;
22
- blocks: {
23
- filePath: string;
24
- startLine: number;
25
- endLine: number;
26
- }[];
27
- repoOrigin?: string | undefined;
28
- }, {
29
- repoPath: string;
30
- intentId: string;
31
- blocks: {
32
- filePath: string;
33
- startLine: number;
34
- endLine: number;
35
- }[];
36
- repoOrigin?: string | undefined;
37
- }>;
38
- export type AssignBlocksInput = z.infer<typeof assignBlocksSchema>;
39
- export interface AssignBlocksResponse {
40
- success: boolean;
41
- assignedBlocks: number;
42
- intentId: string;
43
- intentTitle: string;
44
- message: string;
45
- }
46
- export declare function assignBlocksToIntent(input: AssignBlocksInput): Promise<AssignBlocksResponse>;
47
- export declare const assignBlocksToIntentTool: {
48
- name: string;
49
- description: string;
50
- inputSchema: z.ZodObject<{
51
- repoOrigin: z.ZodOptional<z.ZodString>;
52
- repoPath: z.ZodString;
53
- intentId: z.ZodString;
54
- blocks: z.ZodArray<z.ZodObject<{
55
- filePath: z.ZodString;
56
- startLine: z.ZodNumber;
57
- endLine: z.ZodNumber;
58
- }, "strip", z.ZodTypeAny, {
59
- filePath: string;
60
- startLine: number;
61
- endLine: number;
62
- }, {
63
- filePath: string;
64
- startLine: number;
65
- endLine: number;
66
- }>, "many">;
67
- }, "strip", z.ZodTypeAny, {
68
- repoPath: string;
69
- intentId: string;
70
- blocks: {
71
- filePath: string;
72
- startLine: number;
73
- endLine: number;
74
- }[];
75
- repoOrigin?: string | undefined;
76
- }, {
77
- repoPath: string;
78
- intentId: string;
79
- blocks: {
80
- filePath: string;
81
- startLine: number;
82
- endLine: number;
83
- }[];
84
- repoOrigin?: string | undefined;
85
- }>;
86
- handler: typeof assignBlocksToIntent;
87
- };