@sudosandwich/limps 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/README.md +114 -23
  2. package/dist/agent-parser.d.ts +1 -1
  3. package/dist/agent-parser.d.ts.map +1 -1
  4. package/dist/agent-parser.js +8 -4
  5. package/dist/agent-parser.js.map +1 -1
  6. package/dist/cli/docs-create.d.ts +34 -0
  7. package/dist/cli/docs-create.d.ts.map +1 -0
  8. package/dist/cli/docs-create.js +70 -0
  9. package/dist/cli/docs-create.js.map +1 -0
  10. package/dist/cli/docs-delete.d.ts +34 -0
  11. package/dist/cli/docs-delete.d.ts.map +1 -0
  12. package/dist/cli/docs-delete.js +84 -0
  13. package/dist/cli/docs-delete.js.map +1 -0
  14. package/dist/cli/docs-list.d.ts +35 -0
  15. package/dist/cli/docs-list.d.ts.map +1 -0
  16. package/dist/cli/docs-list.js +91 -0
  17. package/dist/cli/docs-list.js.map +1 -0
  18. package/dist/cli/docs-search.d.ts +35 -0
  19. package/dist/cli/docs-search.d.ts.map +1 -0
  20. package/dist/cli/docs-search.js +99 -0
  21. package/dist/cli/docs-search.js.map +1 -0
  22. package/dist/cli/docs-update.d.ts +40 -0
  23. package/dist/cli/docs-update.d.ts.map +1 -0
  24. package/dist/cli/docs-update.js +75 -0
  25. package/dist/cli/docs-update.js.map +1 -0
  26. package/dist/cli/init-project.js +1 -1
  27. package/dist/cli/status.d.ts +13 -0
  28. package/dist/cli/status.d.ts.map +1 -1
  29. package/dist/cli/status.js +64 -1
  30. package/dist/cli/status.js.map +1 -1
  31. package/dist/cli.js +9 -2
  32. package/dist/cli.js.map +1 -1
  33. package/dist/commands/config/index.d.ts.map +1 -1
  34. package/dist/commands/config/index.js +1 -0
  35. package/dist/commands/config/index.js.map +1 -1
  36. package/dist/commands/config/show-resolution.d.ts +11 -0
  37. package/dist/commands/config/show-resolution.d.ts.map +1 -0
  38. package/dist/commands/config/show-resolution.js +114 -0
  39. package/dist/commands/config/show-resolution.js.map +1 -0
  40. package/dist/commands/create-doc.d.ts +21 -0
  41. package/dist/commands/create-doc.d.ts.map +1 -0
  42. package/dist/commands/create-doc.js +99 -0
  43. package/dist/commands/create-doc.js.map +1 -0
  44. package/dist/commands/create-plan.d.ts +15 -0
  45. package/dist/commands/create-plan.d.ts.map +1 -0
  46. package/dist/commands/create-plan.js +73 -0
  47. package/dist/commands/create-plan.js.map +1 -0
  48. package/dist/commands/delete-doc.d.ts +16 -0
  49. package/dist/commands/delete-doc.d.ts.map +1 -0
  50. package/dist/commands/delete-doc.js +97 -0
  51. package/dist/commands/delete-doc.js.map +1 -0
  52. package/dist/commands/index.js +1 -1
  53. package/dist/commands/index.js.map +1 -1
  54. package/dist/commands/list-docs.d.ts +18 -0
  55. package/dist/commands/list-docs.d.ts.map +1 -0
  56. package/dist/commands/list-docs.js +83 -0
  57. package/dist/commands/list-docs.js.map +1 -0
  58. package/dist/commands/process.d.ts +20 -0
  59. package/dist/commands/process.d.ts.map +1 -0
  60. package/dist/commands/process.js +257 -0
  61. package/dist/commands/process.js.map +1 -0
  62. package/dist/commands/search-docs.d.ts +17 -0
  63. package/dist/commands/search-docs.d.ts.map +1 -0
  64. package/dist/commands/search-docs.js +109 -0
  65. package/dist/commands/search-docs.js.map +1 -0
  66. package/dist/commands/{status-server.d.ts → server-status.d.ts} +1 -1
  67. package/dist/commands/server-status.d.ts.map +1 -0
  68. package/dist/commands/{status-server.js → server-status.js} +33 -14
  69. package/dist/commands/server-status.js.map +1 -0
  70. package/dist/commands/start.d.ts.map +1 -1
  71. package/dist/commands/start.js +26 -9
  72. package/dist/commands/start.js.map +1 -1
  73. package/dist/commands/status.d.ts +7 -0
  74. package/dist/commands/status.d.ts.map +1 -1
  75. package/dist/commands/status.js +74 -2
  76. package/dist/commands/status.js.map +1 -1
  77. package/dist/commands/tags/add.d.ts +16 -0
  78. package/dist/commands/tags/add.d.ts.map +1 -0
  79. package/dist/commands/tags/add.js +120 -0
  80. package/dist/commands/tags/add.js.map +1 -0
  81. package/dist/commands/tags/index.d.ts +3 -0
  82. package/dist/commands/tags/index.d.ts.map +1 -0
  83. package/dist/commands/tags/index.js +33 -0
  84. package/dist/commands/tags/index.js.map +1 -0
  85. package/dist/commands/tags/list.d.ts +15 -0
  86. package/dist/commands/tags/list.d.ts.map +1 -0
  87. package/dist/commands/tags/list.js +111 -0
  88. package/dist/commands/tags/list.js.map +1 -0
  89. package/dist/commands/tags/remove.d.ts +16 -0
  90. package/dist/commands/tags/remove.d.ts.map +1 -0
  91. package/dist/commands/tags/remove.js +120 -0
  92. package/dist/commands/tags/remove.js.map +1 -0
  93. package/dist/commands/update-doc.d.ts +23 -0
  94. package/dist/commands/update-doc.d.ts.map +1 -0
  95. package/dist/commands/update-doc.js +144 -0
  96. package/dist/commands/update-doc.js.map +1 -0
  97. package/dist/extensions/context.d.ts.map +1 -1
  98. package/dist/extensions/context.js +10 -8
  99. package/dist/extensions/context.js.map +1 -1
  100. package/dist/extensions/loader.d.ts.map +1 -1
  101. package/dist/extensions/loader.js +3 -2
  102. package/dist/extensions/loader.js.map +1 -1
  103. package/dist/index.js +2 -1
  104. package/dist/index.js.map +1 -1
  105. package/dist/pidfile.d.ts +1 -0
  106. package/dist/pidfile.d.ts.map +1 -1
  107. package/dist/pidfile.js +4 -1
  108. package/dist/pidfile.js.map +1 -1
  109. package/dist/server-http-entry.js +39 -6
  110. package/dist/server-http-entry.js.map +1 -1
  111. package/dist/server-http.d.ts +11 -1
  112. package/dist/server-http.d.ts.map +1 -1
  113. package/dist/server-http.js +31 -9
  114. package/dist/server-http.js.map +1 -1
  115. package/dist/server-main.d.ts.map +1 -1
  116. package/dist/server-main.js +2 -1
  117. package/dist/server-main.js.map +1 -1
  118. package/dist/server.d.ts.map +1 -1
  119. package/dist/server.js +8 -7
  120. package/dist/server.js.map +1 -1
  121. package/dist/tools/create-plan.d.ts +1 -0
  122. package/dist/tools/create-plan.d.ts.map +1 -1
  123. package/dist/tools/create-plan.js +20 -6
  124. package/dist/tools/create-plan.js.map +1 -1
  125. package/dist/tools/index.js +1 -1
  126. package/dist/tools/index.js.map +1 -1
  127. package/dist/tools/update-task-status.d.ts +1 -1
  128. package/dist/tools/update-task-status.d.ts.map +1 -1
  129. package/dist/tools/update-task-status.js +17 -187
  130. package/dist/tools/update-task-status.js.map +1 -1
  131. package/dist/utils/config-resolver.d.ts +1 -1
  132. package/dist/utils/config-resolver.d.ts.map +1 -1
  133. package/dist/utils/config-resolver.js +6 -4
  134. package/dist/utils/config-resolver.js.map +1 -1
  135. package/dist/utils/daemon-log.d.ts +13 -0
  136. package/dist/utils/daemon-log.d.ts.map +1 -0
  137. package/dist/utils/daemon-log.js +27 -0
  138. package/dist/utils/daemon-log.js.map +1 -0
  139. package/dist/utils/safe-logging.d.ts +24 -0
  140. package/dist/utils/safe-logging.d.ts.map +1 -0
  141. package/dist/utils/safe-logging.js +88 -0
  142. package/dist/utils/safe-logging.js.map +1 -0
  143. package/package.json +1 -1
  144. package/dist/commands/status-server.d.ts.map +0 -1
  145. package/dist/commands/status-server.js.map +0 -1
@@ -1,6 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { readFileSync, writeFileSync } from 'fs';
3
- import { indexDocument } from '../indexer.js';
2
+ import { findAgentFilePath, readAgentFile, updateAgentFrontmatter } from '../agent-parser.js';
4
3
  /**
5
4
  * Input schema for update_task_status tool.
6
5
  */
@@ -10,144 +9,9 @@ export const UpdateTaskStatusInputSchema = z.object({
10
9
  agentId: z.string().optional(),
11
10
  notes: z.string().optional(),
12
11
  });
13
- /**
14
- * Valid status transitions.
15
- */
16
- const VALID_TRANSITIONS = {
17
- GAP: ['WIP'],
18
- WIP: ['PASS', 'BLOCKED'],
19
- PASS: [], // Terminal state
20
- BLOCKED: ['GAP', 'WIP'], // Can be unblocked
21
- };
22
- /**
23
- * Check if a status transition is valid.
24
- */
25
- function isValidTransition(from, to) {
26
- const allowed = VALID_TRANSITIONS[from] || [];
27
- return allowed.includes(to);
28
- }
29
- /**
30
- * Find task in document by feature number.
31
- * Returns the content section for the task.
32
- * Supports both new format (### #N:) and legacy format (## Feature N:).
33
- */
34
- function findTaskSection(content, featureNumber) {
35
- // Try new format first: "### #N:"
36
- let featureRegex = new RegExp(`^###\\s+#${featureNumber}:`, 'm');
37
- let match = content.match(featureRegex);
38
- let nextFeaturePattern = '### #';
39
- // Try legacy format if new format not found: "## Feature N:"
40
- if (!match || match.index === undefined) {
41
- featureRegex = new RegExp(`^##\\s+Feature\\s+${featureNumber}:`, 'm');
42
- match = content.match(featureRegex);
43
- nextFeaturePattern = '## Feature ';
44
- }
45
- if (!match || match.index === undefined) {
46
- return null;
47
- }
48
- const start = match.index;
49
- // Find next feature or end of document (using the same pattern as matched)
50
- const nextFeatureMatch = content.indexOf(nextFeaturePattern, start + 1);
51
- const end = nextFeatureMatch > 0 ? nextFeatureMatch : content.length;
52
- const section = content.substring(start, end);
53
- return { start, end, section };
54
- }
55
- /**
56
- * Extract current status from a task section.
57
- * Supports both new format (Status: `GAP`) and legacy format (**Status:** GAP).
58
- */
59
- function extractStatusFromSection(section) {
60
- // Try new format first: "Status: `GAP`"
61
- let statusRegex = /Status:\s*`(\w+)`/i;
62
- let match = section.match(statusRegex);
63
- // Try legacy format if new format not found: "**Status:** GAP"
64
- if (!match) {
65
- statusRegex = /\*\*Status:\*\*\s+(\w+)/i;
66
- match = section.match(statusRegex);
67
- }
68
- return match ? match[1].toUpperCase() : null;
69
- }
70
- /**
71
- * Update status in task section.
72
- * Preserves formatting and other content.
73
- * Maintains the same format as the original (new or legacy).
74
- */
75
- function updateStatusInSection(section, newStatus) {
76
- // Try new format first: "Status: `GAP`"
77
- let statusRegex = /Status:\s*`(\w+)`/i;
78
- let match = section.match(statusRegex);
79
- if (match) {
80
- // Replace existing status in new format
81
- return section.replace(statusRegex, `Status: \`${newStatus}\``);
82
- }
83
- // Try legacy format: "**Status:** GAP"
84
- statusRegex = /\*\*Status:\*\*\s+(\w+)/i;
85
- match = section.match(statusRegex);
86
- if (match) {
87
- // Replace existing status in legacy format
88
- return section.replace(statusRegex, `**Status:** ${newStatus}`);
89
- }
90
- // Add status line if not found (shouldn't happen, but handle gracefully)
91
- // Insert after feature title (try both formats)
92
- let titleMatch = section.match(/^###\s+#\d+:\s+(.+)$/m);
93
- if (titleMatch) {
94
- const titleEnd = section.indexOf('\n', titleMatch.index || 0);
95
- return (section.substring(0, titleEnd + 1) +
96
- `\nStatus: \`${newStatus}\`\n` +
97
- section.substring(titleEnd + 1));
98
- }
99
- // Try legacy format title
100
- titleMatch = section.match(/^##\s+Feature\s+\d+:\s+(.+)$/m);
101
- if (titleMatch) {
102
- const titleEnd = section.indexOf('\n', titleMatch.index || 0);
103
- return (section.substring(0, titleEnd + 1) +
104
- `\n**Status:** ${newStatus}\n` +
105
- section.substring(titleEnd + 1));
106
- }
107
- return section;
108
- }
109
- /**
110
- * Parse task ID to extract plan ID and feature number.
111
- * Format: "<planId>#<featureNumber>"
112
- */
113
- function parseTaskId(taskId) {
114
- const match = taskId.match(/^(.+)#(\d+)$/);
115
- if (!match) {
116
- return null;
117
- }
118
- return {
119
- planId: match[1],
120
- featureNumber: parseInt(match[2], 10),
121
- };
122
- }
123
- /**
124
- * Find document path for a plan.
125
- */
126
- function findPlanDocument(db, plansPath, planId) {
127
- // Query database for plan documents
128
- // Match planId in path (could be "0001-plan-name" or just "0001")
129
- const plans = db
130
- .prepare(`
131
- SELECT path
132
- FROM documents
133
- WHERE path LIKE ?
134
- AND (path LIKE '%-plan.md' OR path LIKE '%/plan.md')
135
- `)
136
- .all(`${plansPath}%${planId}%`);
137
- if (plans.length === 0) {
138
- return null;
139
- }
140
- // Find exact match (plan directory should contain planId)
141
- for (const plan of plans) {
142
- if (plan.path.includes(planId)) {
143
- return plan.path;
144
- }
145
- }
146
- return plans[0]?.path || null;
147
- }
148
12
  /**
149
13
  * Handle update_task_status tool request.
150
- * Updates task status in planning documents (GAP WIP PASS/BLOCKED).
14
+ * Updates agent file frontmatter status field (GAP, WIP, PASS, or BLOCKED).
151
15
  *
152
16
  * @param input - Tool input
153
17
  * @param context - Tool context
@@ -156,86 +20,52 @@ function findPlanDocument(db, plansPath, planId) {
156
20
  export async function handleUpdateTaskStatus(input, context) {
157
21
  const { taskId, status, agentId, notes } = input;
158
22
  const { plansPath } = context.config;
159
- // Parse task ID
160
- const parsed = parseTaskId(taskId);
161
- if (!parsed) {
162
- return {
163
- content: [
164
- {
165
- type: 'text',
166
- text: `Invalid task ID format: ${taskId}. Expected format: "<planId>#<featureNumber>"`,
167
- },
168
- ],
169
- isError: true,
170
- };
171
- }
172
- const { planId, featureNumber } = parsed;
173
- // Find plan document
174
- const documentPath = findPlanDocument(context.db, plansPath, planId);
175
- if (!documentPath) {
176
- return {
177
- content: [
178
- {
179
- type: 'text',
180
- text: `Plan document not found for task ${taskId}`,
181
- },
182
- ],
183
- isError: true,
184
- };
185
- }
186
- // Read document
187
- const content = readFileSync(documentPath, 'utf-8');
188
- // Find task section
189
- const taskSection = findTaskSection(content, featureNumber);
190
- if (!taskSection) {
23
+ // Find agent file path
24
+ const agentFilePath = findAgentFilePath(plansPath, taskId);
25
+ if (!agentFilePath) {
191
26
  return {
192
27
  content: [
193
28
  {
194
29
  type: 'text',
195
- text: `Feature #${featureNumber} not found in document`,
30
+ text: `Agent file not found for task ${taskId}. Expected format: planFolder#agentNumber (e.g., "0001-feature-name#005")`,
196
31
  },
197
32
  ],
198
33
  isError: true,
199
34
  };
200
35
  }
201
- // Get current status from the document
202
- const currentStatus = extractStatusFromSection(taskSection.section);
203
- if (!currentStatus) {
36
+ // Read current agent file
37
+ const agent = readAgentFile(agentFilePath);
38
+ if (!agent) {
204
39
  return {
205
40
  content: [
206
41
  {
207
42
  type: 'text',
208
- text: `Could not determine current status for task ${taskId}`,
43
+ text: `Failed to read agent file: ${agentFilePath}`,
209
44
  },
210
45
  ],
211
46
  isError: true,
212
47
  };
213
48
  }
214
- // Validate status transition
215
- if (!isValidTransition(currentStatus, status)) {
49
+ // Capture old status before updating
50
+ const oldStatus = agent.frontmatter.status;
51
+ // Update status in frontmatter
52
+ const updated = updateAgentFrontmatter(agentFilePath, { status });
53
+ if (!updated) {
216
54
  return {
217
55
  content: [
218
56
  {
219
57
  type: 'text',
220
- text: `Invalid status transition from ${currentStatus} to ${status}. Valid transitions: ${VALID_TRANSITIONS[currentStatus]?.join(', ') || 'none'}`,
58
+ text: `Failed to update agent file frontmatter: ${agentFilePath}`,
221
59
  },
222
60
  ],
223
61
  isError: true,
224
62
  };
225
63
  }
226
- // Update status in section
227
- const updatedSection = updateStatusInSection(taskSection.section, status);
228
- // Replace section in document
229
- const updatedContent = content.substring(0, taskSection.start) + updatedSection + content.substring(taskSection.end);
230
- // Write updated document
231
- writeFileSync(documentPath, updatedContent, 'utf-8');
232
- // Re-index document
233
- await indexDocument(context.db, documentPath);
234
64
  return {
235
65
  content: [
236
66
  {
237
67
  type: 'text',
238
- text: `Task ${taskId} status updated to ${status}${agentId ? ` by agent ${agentId}` : ''}${notes ? `. Notes: ${notes}` : ''}`,
68
+ text: `Task ${taskId} status updated from ${oldStatus} to ${status}${agentId ? ` by agent ${agentId}` : ''}${notes ? `. Notes: ${notes}` : ''}`,
239
69
  },
240
70
  ],
241
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"update-task-status.js","sourceRoot":"","sources":["../../src/tools/update-task-status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-task-status.js","sourceRoot":"","sources":["../../src/tools/update-task-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE9F;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAkD,EAClD,OAAoB;IAEpB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACjD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAErC,uBAAuB;IACvB,MAAM,aAAa,GAAG,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,iCAAiC,MAAM,2EAA2E;iBACzH;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,MAAM,KAAK,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,8BAA8B,aAAa,EAAE;iBACpD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;IAE3C,+BAA+B;IAC/B,MAAM,OAAO,GAAG,sBAAsB,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,4CAA4C,aAAa,EAAE;iBAClE;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ,MAAM,wBAAwB,SAAS,OAAO,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;aAChJ;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -6,7 +6,7 @@
6
6
  * Resolve configuration file path with priority:
7
7
  * 1. CLI argument --config
8
8
  * 2. Environment variable MCP_PLANNING_CONFIG
9
- * 3. Local .limps/config.json (searches up directory tree)
9
+ * 3. Local .limps/config.json (searches up directory tree from cwd)
10
10
  *
11
11
  * Throws if no config source is found.
12
12
  *
@@ -1 +1 @@
1
- {"version":3,"file":"config-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/config-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgCH;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CA6BhE"}
1
+ {"version":3,"file":"config-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/config-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgCH;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CA+BhE"}
@@ -31,7 +31,7 @@ function findLocalConfig(startDir = process.cwd()) {
31
31
  * Resolve configuration file path with priority:
32
32
  * 1. CLI argument --config
33
33
  * 2. Environment variable MCP_PLANNING_CONFIG
34
- * 3. Local .limps/config.json (searches up directory tree)
34
+ * 3. Local .limps/config.json (searches up directory tree from cwd)
35
35
  *
36
36
  * Throws if no config source is found.
37
37
  *
@@ -56,12 +56,14 @@ export function resolveConfigPath(cliConfigPath) {
56
56
  if (envConfigPath) {
57
57
  return resolve(envConfigPath);
58
58
  }
59
- // Priority 3: Local .limps/config.json (walk up directory tree)
60
- const localConfig = findLocalConfig();
59
+ // Priority 3: Local .limps/config.json (walk up directory tree from cwd)
60
+ const cwd = process.cwd();
61
+ const localConfig = findLocalConfig(cwd);
61
62
  if (localConfig) {
62
63
  return localConfig;
63
64
  }
64
65
  // No config found — require explicit configuration
65
- throw new Error('No config found. Run `limps init`, use `--config <path>`, or set MCP_PLANNING_CONFIG.');
66
+ throw new Error(`No config found. Searched from: ${cwd}\n` +
67
+ `Run \`limps init\`, use \`--config <path>\`, or set MCP_PLANNING_CONFIG.`);
66
68
  }
67
69
  //# sourceMappingURL=config-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-resolver.js","sourceRoot":"","sources":["../../src/utils/config-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC;;;;;GAKG;AACH,SAAS,eAAe,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IACvD,IAAI,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1B,OAAO,UAAU,KAAK,IAAI,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,+BAA+B;IAC/B,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC9D,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAAsB;IACtD,2BAA2B;IAC3B,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,uDAAuD;IACvD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACtD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IAED,gEAAgE;IAChE,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IACtC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,mDAAmD;IACnD,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config-resolver.js","sourceRoot":"","sources":["../../src/utils/config-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC;;;;;GAKG;AACH,SAAS,eAAe,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IACvD,IAAI,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1B,OAAO,UAAU,KAAK,IAAI,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,+BAA+B;IAC/B,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC9D,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAAsB;IACtD,2BAA2B;IAC3B,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,uDAAuD;IACvD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACtD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IAED,yEAAyE;IACzE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,mDAAmD;IACnD,MAAM,IAAI,KAAK,CACb,mCAAmC,GAAG,IAAI;QACxC,0EAA0E,CAC7E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Get the system-wide daemon log directory path.
3
+ */
4
+ export declare function getSystemLogDir(): string;
5
+ /**
6
+ * Ensure the system-wide daemon log directory exists.
7
+ */
8
+ export declare function ensureSystemLogDir(): string;
9
+ /**
10
+ * Get the daemon log file path for a given port.
11
+ */
12
+ export declare function getDaemonLogPath(port: number): string;
13
+ //# sourceMappingURL=daemon-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-log.d.ts","sourceRoot":"","sources":["../../src/utils/daemon-log.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAM3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD"}
@@ -0,0 +1,27 @@
1
+ import { existsSync, mkdirSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { getAppDataPath } from './app-paths.js';
4
+ /**
5
+ * Get the system-wide daemon log directory path.
6
+ */
7
+ export function getSystemLogDir() {
8
+ return join(getAppDataPath(), 'logs');
9
+ }
10
+ /**
11
+ * Ensure the system-wide daemon log directory exists.
12
+ */
13
+ export function ensureSystemLogDir() {
14
+ const logDir = getSystemLogDir();
15
+ if (!existsSync(logDir)) {
16
+ mkdirSync(logDir, { recursive: true });
17
+ }
18
+ return logDir;
19
+ }
20
+ /**
21
+ * Get the daemon log file path for a given port.
22
+ */
23
+ export function getDaemonLogPath(port) {
24
+ const logDir = getSystemLogDir();
25
+ return join(logDir, `limps-${port}.log`);
26
+ }
27
+ //# sourceMappingURL=daemon-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-log.js","sourceRoot":"","sources":["../../src/utils/daemon-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,OAAO,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,MAAM,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Logging helpers that avoid writing potentially sensitive request payloads
3
+ * (including prompt/response text) to persisted daemon logs.
4
+ */
5
+ /**
6
+ * Return a non-sensitive summary of an unknown value for logs.
7
+ * Never includes raw payload content.
8
+ */
9
+ export declare function summarizeForLog(value: unknown): string;
10
+ /**
11
+ * Sanitize free-form text before writing to daemon logs.
12
+ * If text looks like it could include AI payload data, redact it.
13
+ */
14
+ export declare function sanitizeOperationalMessage(message: string): string;
15
+ /**
16
+ * Sanitize console arguments before writing to persistent logs.
17
+ * Strings are filtered for payload-like content; non-strings are summarized.
18
+ */
19
+ export declare function sanitizeConsoleArguments(args: unknown[]): string[];
20
+ /**
21
+ * Log an event with non-sensitive error details.
22
+ */
23
+ export declare function logRedactedError(prefix: string, value: unknown): void;
24
+ //# sourceMappingURL=safe-logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-logging.d.ts","sourceRoot":"","sources":["../../src/utils/safe-logging.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2BH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CActD;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYlE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAWlE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAErE"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Logging helpers that avoid writing potentially sensitive request payloads
3
+ * (including prompt/response text) to persisted daemon logs.
4
+ */
5
+ const SENSITIVE_TEXT_MARKERS = /\b(prompt|response|assistant|completion|messages?|content)\b/i;
6
+ const MAX_SAFE_MESSAGE_LENGTH = 240;
7
+ function safeString(value) {
8
+ if (typeof value === 'string') {
9
+ return value;
10
+ }
11
+ try {
12
+ return String(value);
13
+ }
14
+ catch {
15
+ return 'unstringifiable';
16
+ }
17
+ }
18
+ function getErrorCode(value) {
19
+ if (!value || typeof value !== 'object') {
20
+ return null;
21
+ }
22
+ const maybeCode = value.code;
23
+ if (typeof maybeCode === 'string' || typeof maybeCode === 'number') {
24
+ return safeString(maybeCode);
25
+ }
26
+ return null;
27
+ }
28
+ /**
29
+ * Return a non-sensitive summary of an unknown value for logs.
30
+ * Never includes raw payload content.
31
+ */
32
+ export function summarizeForLog(value) {
33
+ if (value === null)
34
+ return 'type=null';
35
+ if (value === undefined)
36
+ return 'type=undefined';
37
+ if (value instanceof Error) {
38
+ const code = getErrorCode(value);
39
+ return code ? `type=Error name=${value.name} code=${code}` : `type=Error name=${value.name}`;
40
+ }
41
+ if (Array.isArray(value))
42
+ return `type=array len=${value.length}`;
43
+ if (typeof value === 'string')
44
+ return `type=string len=${value.length}`;
45
+ if (typeof value === 'object') {
46
+ const ctor = value.constructor?.name;
47
+ return ctor ? `type=object ctor=${ctor}` : 'type=object';
48
+ }
49
+ return `type=${typeof value}`;
50
+ }
51
+ /**
52
+ * Sanitize free-form text before writing to daemon logs.
53
+ * If text looks like it could include AI payload data, redact it.
54
+ */
55
+ export function sanitizeOperationalMessage(message) {
56
+ const normalized = message.replace(/\s+/g, ' ').trim();
57
+ if (!normalized)
58
+ return '[redacted-empty-message]';
59
+ if (normalized.length > MAX_SAFE_MESSAGE_LENGTH ||
60
+ normalized.includes('{') ||
61
+ normalized.includes('[') ||
62
+ SENSITIVE_TEXT_MARKERS.test(normalized)) {
63
+ return '[redacted-sensitive-message]';
64
+ }
65
+ return normalized;
66
+ }
67
+ /**
68
+ * Sanitize console arguments before writing to persistent logs.
69
+ * Strings are filtered for payload-like content; non-strings are summarized.
70
+ */
71
+ export function sanitizeConsoleArguments(args) {
72
+ if (args.length === 0) {
73
+ return ['[redacted-empty-message]'];
74
+ }
75
+ return args.map((arg) => {
76
+ if (typeof arg === 'string') {
77
+ return sanitizeOperationalMessage(arg);
78
+ }
79
+ return summarizeForLog(arg);
80
+ });
81
+ }
82
+ /**
83
+ * Log an event with non-sensitive error details.
84
+ */
85
+ export function logRedactedError(prefix, value) {
86
+ console.error(`${prefix} (${summarizeForLog(value)})`);
87
+ }
88
+ //# sourceMappingURL=safe-logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-logging.js","sourceRoot":"","sources":["../../src/utils/safe-logging.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudosandwich/limps",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
4
4
  "description": "Local Intelligent MCP Planning Server - AI agent plan management",
5
5
  "mcpName": "io.github.paulbreuler/limps",
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-server.d.ts","sourceRoot":"","sources":["../../src/commands/status-server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,eAAO,MAAM,WAAW,kCAAkC,CAAC;AAE3D,eAAO,MAAM,OAAO;;;iBAGlB,CAAC;AAEH,UAAU,KAAK;IACb,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC;AA2FD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CAiDrF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-server.js","sourceRoot":"","sources":["../../src/commands/status-server.tsx"],"names":[],"mappings":"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"}