whitesmith 0.0.0 → 0.0.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 (71) hide show
  1. package/README.md +228 -0
  2. package/dist/auto-work.d.ts +11 -0
  3. package/dist/auto-work.d.ts.map +1 -0
  4. package/dist/auto-work.js +22 -0
  5. package/dist/auto-work.js.map +1 -0
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +108 -1
  8. package/dist/cli.js.map +1 -1
  9. package/dist/comment.d.ts +29 -0
  10. package/dist/comment.d.ts.map +1 -0
  11. package/dist/comment.js +390 -0
  12. package/dist/comment.js.map +1 -0
  13. package/dist/git.d.ts +12 -0
  14. package/dist/git.d.ts.map +1 -1
  15. package/dist/git.js +57 -14
  16. package/dist/git.js.map +1 -1
  17. package/dist/harnesses/agent-harness.d.ts +13 -0
  18. package/dist/harnesses/agent-harness.d.ts.map +1 -1
  19. package/dist/harnesses/index.d.ts +1 -1
  20. package/dist/harnesses/index.d.ts.map +1 -1
  21. package/dist/harnesses/pi.d.ts +7 -5
  22. package/dist/harnesses/pi.d.ts.map +1 -1
  23. package/dist/harnesses/pi.js +122 -9
  24. package/dist/harnesses/pi.js.map +1 -1
  25. package/dist/install-ci.d.ts +7 -0
  26. package/dist/install-ci.d.ts.map +1 -0
  27. package/dist/install-ci.js +760 -0
  28. package/dist/install-ci.js.map +1 -0
  29. package/dist/orchestrator.d.ts +24 -4
  30. package/dist/orchestrator.d.ts.map +1 -1
  31. package/dist/orchestrator.js +254 -63
  32. package/dist/orchestrator.js.map +1 -1
  33. package/dist/prompts.d.ts.map +1 -1
  34. package/dist/prompts.js +1 -0
  35. package/dist/prompts.js.map +1 -1
  36. package/dist/providers/github-ci.d.ts +16 -0
  37. package/dist/providers/github-ci.d.ts.map +1 -0
  38. package/dist/providers/github-ci.js +733 -0
  39. package/dist/providers/github-ci.js.map +1 -0
  40. package/dist/providers/github.d.ts +21 -0
  41. package/dist/providers/github.d.ts.map +1 -1
  42. package/dist/providers/github.js +88 -3
  43. package/dist/providers/github.js.map +1 -1
  44. package/dist/providers/index.d.ts +1 -0
  45. package/dist/providers/index.d.ts.map +1 -1
  46. package/dist/providers/issue-provider.d.ts +26 -0
  47. package/dist/providers/issue-provider.d.ts.map +1 -1
  48. package/dist/task-manager.d.ts +4 -0
  49. package/dist/task-manager.d.ts.map +1 -1
  50. package/dist/task-manager.js +6 -0
  51. package/dist/task-manager.js.map +1 -1
  52. package/dist/types.d.ts +13 -0
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/types.js +2 -0
  55. package/dist/types.js.map +1 -1
  56. package/package.json +3 -1
  57. package/src/auto-work.ts +26 -0
  58. package/src/cli.ts +123 -1
  59. package/src/comment.ts +531 -0
  60. package/src/git.ts +58 -12
  61. package/src/harnesses/agent-harness.ts +15 -0
  62. package/src/harnesses/index.ts +1 -1
  63. package/src/harnesses/pi.ts +146 -10
  64. package/src/orchestrator.ts +290 -72
  65. package/src/prompts.ts +1 -0
  66. package/src/providers/github-ci.ts +840 -0
  67. package/src/providers/github.ts +118 -5
  68. package/src/providers/index.ts +1 -0
  69. package/src/providers/issue-provider.ts +25 -1
  70. package/src/task-manager.ts +7 -0
  71. package/src/types.ts +11 -0
@@ -0,0 +1,390 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { GitManager } from './git.js';
4
+ import { TaskManager } from './task-manager.js';
5
+ import { LABELS } from './types.js';
6
+ /**
7
+ * Handle a comment on a PR.
8
+ */
9
+ export async function handlePRComment(config, issues, agent) {
10
+ const git = new GitManager(config.workDir);
11
+ // Get PR details
12
+ const pr = await issues.getPR(config.number);
13
+ if (!pr) {
14
+ throw new Error(`Could not find PR #${config.number}`);
15
+ }
16
+ console.log(`PR #${config.number}: ${pr.title}`);
17
+ console.log(`Branch: ${pr.branch}`);
18
+ // Clean up temp files before checkout to avoid conflicts
19
+ git.cleanupTempFiles();
20
+ // Checkout PR branch
21
+ await git.fetch();
22
+ await git.checkout(pr.branch);
23
+ // Gather whitesmith context based on branch naming
24
+ const context = await gatherContextForPR(pr.branch, config.workDir, issues, config.number);
25
+ const responseFile = '.whitesmith-response.md';
26
+ const prompt = buildPRCommentPrompt({
27
+ title: pr.title,
28
+ url: pr.url,
29
+ number: config.number,
30
+ body: pr.body,
31
+ branch: pr.branch,
32
+ commentBody: config.commentBody,
33
+ context,
34
+ responseFile,
35
+ });
36
+ const { exitCode } = await agent.run({
37
+ prompt,
38
+ workDir: config.workDir,
39
+ logFile: config.logFile,
40
+ });
41
+ if (exitCode !== 0) {
42
+ throw new Error(`Agent failed with exit code ${exitCode}`);
43
+ }
44
+ // Read the response file before committing (so it doesn't get committed)
45
+ const responsePath = path.join(config.workDir, responseFile);
46
+ let response = null;
47
+ if (fs.existsSync(responsePath)) {
48
+ response = fs.readFileSync(responsePath, 'utf-8');
49
+ try {
50
+ fs.unlinkSync(responsePath);
51
+ }
52
+ catch {
53
+ // ignore
54
+ }
55
+ }
56
+ // Commit and push any changes
57
+ const committed = await git.commitAll(`fix(#${config.number}): address review comment`);
58
+ if (committed) {
59
+ await git.forcePush(pr.branch);
60
+ console.log(`Changes pushed to ${pr.branch}`);
61
+ }
62
+ else {
63
+ console.log('No changes to commit.');
64
+ }
65
+ // Post the response as a PR comment
66
+ if (response) {
67
+ if (config.post) {
68
+ await issues.comment(config.number, response);
69
+ console.log(`Response posted as comment on PR #${config.number}`);
70
+ }
71
+ else {
72
+ process.stdout.write(response);
73
+ }
74
+ }
75
+ else {
76
+ console.log('Agent did not produce a response file.');
77
+ }
78
+ }
79
+ /**
80
+ * Handle a comment on an issue (not a PR).
81
+ */
82
+ export async function handleIssueComment(config, issues, agent) {
83
+ const git = new GitManager(config.workDir);
84
+ const issue = await issues.getIssue(config.number);
85
+ console.log(`Issue #${config.number}: ${issue.title}`);
86
+ // Fetch so the agent can checkout related PR branches if needed
87
+ await git.fetch();
88
+ // Gather whitesmith context for this issue
89
+ const context = await gatherContextForIssue(config.number, config.workDir, issues);
90
+ const responseFile = '.whitesmith-response.md';
91
+ const prompt = buildIssueCommentPrompt({
92
+ title: issue.title,
93
+ url: issue.url,
94
+ number: config.number,
95
+ body: issue.body,
96
+ commentBody: config.commentBody,
97
+ responseFile,
98
+ context,
99
+ });
100
+ const { exitCode } = await agent.run({
101
+ prompt,
102
+ workDir: config.workDir,
103
+ logFile: config.logFile,
104
+ });
105
+ if (exitCode !== 0) {
106
+ throw new Error(`Agent failed with exit code ${exitCode}`);
107
+ }
108
+ // Read the response file
109
+ const responsePath = path.join(config.workDir, responseFile);
110
+ if (!fs.existsSync(responsePath)) {
111
+ console.error('Agent did not produce a response file.');
112
+ process.exitCode = 1;
113
+ return;
114
+ }
115
+ const response = fs.readFileSync(responsePath, 'utf-8');
116
+ // Clean up the response file
117
+ try {
118
+ fs.unlinkSync(responsePath);
119
+ }
120
+ catch {
121
+ // ignore
122
+ }
123
+ if (config.post) {
124
+ await issues.comment(config.number, response);
125
+ console.log(`Response posted as comment on issue #${config.number}`);
126
+ }
127
+ else {
128
+ // Print to stdout
129
+ process.stdout.write(response);
130
+ }
131
+ }
132
+ /**
133
+ * Detect whether a given number is a PR or an issue.
134
+ */
135
+ export async function isPullRequest(issues, number) {
136
+ const pr = await issues.getPR(number);
137
+ return pr !== null;
138
+ }
139
+ // --- Context gathering ---
140
+ /**
141
+ * Parse a whitesmith branch name to extract the issue number.
142
+ *
143
+ * - `investigate/<N>` → issue N (task proposal PR)
144
+ * - `task/<N>-<seq>` → issue N (implementation PR)
145
+ */
146
+ function parseWhitesmithBranch(branch) {
147
+ const investigateMatch = branch.match(/^investigate\/(\d+)$/);
148
+ if (investigateMatch) {
149
+ return { type: 'investigate', issueNumber: parseInt(investigateMatch[1], 10) };
150
+ }
151
+ const taskMatch = branch.match(/^task\/(\d+)-(\d+.*)$/);
152
+ if (taskMatch) {
153
+ return {
154
+ type: 'task',
155
+ issueNumber: parseInt(taskMatch[1], 10),
156
+ taskId: `${taskMatch[1]}-${taskMatch[2]}`,
157
+ };
158
+ }
159
+ return null;
160
+ }
161
+ /**
162
+ * Gather whitesmith context for a PR comment based on its branch name.
163
+ */
164
+ async function gatherContextForPR(branch, workDir, issues, commentNumber) {
165
+ const context = { implementationPRs: [], tasks: [], number: commentNumber };
166
+ const parsed = parseWhitesmithBranch(branch);
167
+ if (!parsed)
168
+ return context;
169
+ // Fetch the parent issue
170
+ try {
171
+ const issue = await issues.getIssue(parsed.issueNumber);
172
+ context.parentIssue = {
173
+ number: issue.number,
174
+ title: issue.title,
175
+ body: issue.body,
176
+ url: issue.url,
177
+ labels: issue.labels,
178
+ };
179
+ context.stateLabel = issue.labels.find((l) => l.startsWith('whitesmith:'));
180
+ }
181
+ catch {
182
+ // Issue might not exist
183
+ }
184
+ // Find related PRs for this issue
185
+ await gatherRelatedPRs(parsed.issueNumber, issues, context);
186
+ // If tasks are on main, list them
187
+ const taskManager = new TaskManager(workDir);
188
+ context.tasks = taskManager.listTasks(parsed.issueNumber).map((t) => ({
189
+ id: t.id,
190
+ title: t.title,
191
+ filePath: t.filePath,
192
+ }));
193
+ return context;
194
+ }
195
+ /**
196
+ * Gather whitesmith context for an issue comment.
197
+ */
198
+ async function gatherContextForIssue(issueNumber, workDir, issues) {
199
+ const context = { implementationPRs: [], tasks: [], number: issueNumber };
200
+ // Get the issue's labels for state
201
+ try {
202
+ const issue = await issues.getIssue(issueNumber);
203
+ context.stateLabel = issue.labels.find((l) => l.startsWith('whitesmith:'));
204
+ }
205
+ catch {
206
+ // ignore
207
+ }
208
+ // Find related PRs
209
+ await gatherRelatedPRs(issueNumber, issues, context);
210
+ // List tasks on main
211
+ const taskManager = new TaskManager(workDir);
212
+ context.tasks = taskManager.listTasks(issueNumber).map((t) => ({
213
+ id: t.id,
214
+ title: t.title,
215
+ filePath: t.filePath,
216
+ }));
217
+ return context;
218
+ }
219
+ /**
220
+ * Find task proposal and implementation PRs related to an issue.
221
+ */
222
+ async function gatherRelatedPRs(issueNumber, issues, context) {
223
+ // Task proposal PR
224
+ const taskPR = await issues.getPRForBranch(`investigate/${issueNumber}`);
225
+ if (taskPR) {
226
+ context.taskPR = {
227
+ branch: `investigate/${issueNumber}`,
228
+ number: taskPR.number,
229
+ title: '',
230
+ state: taskPR.state,
231
+ url: taskPR.url,
232
+ };
233
+ }
234
+ // Implementation PRs
235
+ const implPRs = await issues.listPRsByBranchPrefix(`task/${issueNumber}-`);
236
+ context.implementationPRs = implPRs;
237
+ }
238
+ // --- Prompt builders ---
239
+ function formatWhitesmithContext(context) {
240
+ const sections = [];
241
+ if (context.stateLabel) {
242
+ const stateDescriptions = {
243
+ [LABELS.INVESTIGATING]: 'The agent is currently investigating this issue and generating tasks.',
244
+ [LABELS.TASKS_PROPOSED]: 'Tasks have been proposed in a PR and are awaiting review.',
245
+ [LABELS.TASKS_ACCEPTED]: 'Tasks have been accepted and are being implemented.',
246
+ [LABELS.COMPLETED]: 'All tasks for this issue have been completed.',
247
+ };
248
+ const desc = stateDescriptions[context.stateLabel] || context.stateLabel;
249
+ sections.push(`### Whitesmith State\n\n**${context.stateLabel}**: ${desc}`);
250
+ }
251
+ if (context.parentIssue) {
252
+ sections.push(`### Parent Issue\n\n` +
253
+ `- **Title:** ${context.parentIssue.title}\n` +
254
+ `- **URL:** ${context.parentIssue.url}\n` +
255
+ `- **Number:** #${context.parentIssue.number}\n` +
256
+ `- **Labels:** ${context.parentIssue.labels.join(', ') || 'none'}\n\n` +
257
+ `#### Issue Description\n\n${context.parentIssue.body}`);
258
+ }
259
+ if (context.taskPR) {
260
+ sections.push(`### Task Proposal PR\n\n` +
261
+ `- **Branch:** \`${context.taskPR.branch}\`\n` +
262
+ `- **State:** ${context.taskPR.state}\n` +
263
+ `- **URL:** ${context.taskPR.url}`);
264
+ }
265
+ if (context.implementationPRs.length > 0) {
266
+ const prList = context.implementationPRs
267
+ .map((pr) => `- **#${pr.number}** ${pr.title} — \`${pr.branch}\` (${pr.state}) — ${pr.url}`)
268
+ .join('\n');
269
+ sections.push(`### Implementation PRs\n\n${prList}`);
270
+ }
271
+ if (context.tasks.length > 0) {
272
+ const taskList = context.tasks
273
+ .map((t) => `- **${t.id}**: ${t.title} (\`${t.filePath}\`)`)
274
+ .join('\n');
275
+ sections.push(`### Pending Tasks\n\n${taskList}`);
276
+ }
277
+ sections.push(`### Conversation History\n\n` +
278
+ `Previous comments are **not** included here to save context space. ` +
279
+ `If you need to read the conversation history, run:\n\n` +
280
+ `\`\`\`bash\ngh issue view ${context.number} --comments\n\`\`\``);
281
+ if (sections.length === 0) {
282
+ return '';
283
+ }
284
+ return (`\n## Whitesmith Context\n\n` +
285
+ `The following is the current whitesmith pipeline state and conversation history related to this issue/PR. ` +
286
+ `Use this context to provide informed responses.\n\n` +
287
+ sections.join('\n\n') +
288
+ '\n');
289
+ }
290
+ function buildPRCommentPrompt(args) {
291
+ return `# Agent Task from PR Comment
292
+
293
+ ## Pull Request
294
+
295
+ - **Title:** ${args.title}
296
+ - **URL:** ${args.url}
297
+ - **PR Number:** #${args.number}
298
+ - **Branch:** ${args.branch}
299
+
300
+ ### PR Description
301
+
302
+ ${args.body}
303
+ ${formatWhitesmithContext(args.context)}
304
+ ## Triggering Comment
305
+
306
+ ${args.commentBody}
307
+
308
+ ## Instructions
309
+
310
+ You are responding to a comment on a pull request. The comment may be a question, feedback,
311
+ a request for changes, or a general discussion point.
312
+
313
+ 1. You are already on the PR branch: \`${args.branch}\`
314
+ 2. Read and understand the comment.
315
+ 3. Review the whitesmith context above to understand the pipeline state.
316
+ 4. You have full access to the repository code — read files, explore the codebase as needed.
317
+ 5. If the comment requests code changes, make them. Do NOT commit — the caller will handle committing and pushing.
318
+ 6. **Always** write a response in Markdown to the file \`${args.responseFile}\`. This will be posted as a reply comment on the PR.
319
+ - If you made changes, summarize what you changed and why.
320
+ - If the comment is a question or discussion, provide a thoughtful answer.
321
+ - Be thorough but concise.
322
+
323
+ Do NOT push. Do NOT create a new PR. Do NOT commit. The caller handles all of that.
324
+ `;
325
+ }
326
+ function buildIssueCommentPrompt(args) {
327
+ // Build the list of related PR branches the agent can work on
328
+ const relatedBranches = [];
329
+ if (args.context.taskPR && args.context.taskPR.state === 'open') {
330
+ relatedBranches.push(args.context.taskPR.branch);
331
+ }
332
+ for (const pr of args.context.implementationPRs) {
333
+ if (pr.state === 'open') {
334
+ relatedBranches.push(pr.branch);
335
+ }
336
+ }
337
+ let workOnPRInstructions = '';
338
+ if (relatedBranches.length > 0) {
339
+ const branchList = relatedBranches.map((b) => ` - \`${b}\``).join('\n');
340
+ workOnPRInstructions = `
341
+
342
+ ### Working on related PRs
343
+
344
+ If the comment asks you to make changes to a related PR (e.g. update the task plan,
345
+ fix something in an implementation), you **can and should** do so. The related open PR branches are:
346
+
347
+ ${branchList}
348
+
349
+ To work on a PR branch:
350
+
351
+ 1. \`git checkout <branch>\` (branches have been fetched already)
352
+ 2. Make your changes.
353
+ 3. Commit with a descriptive message.
354
+ 4. \`git push origin <branch>\`
355
+ 5. Still write \`${args.responseFile}\` summarizing what you did.
356
+
357
+ When done, \`git checkout main\` to return to the default branch.`;
358
+ }
359
+ return `# Agent Task from Issue Comment
360
+
361
+ ## Issue
362
+
363
+ - **Title:** ${args.title}
364
+ - **URL:** ${args.url}
365
+ - **Issue Number:** #${args.number}
366
+
367
+ ### Issue Description
368
+
369
+ ${args.body}
370
+ ${formatWhitesmithContext(args.context)}
371
+ ## Triggering Comment
372
+
373
+ ${args.commentBody}
374
+
375
+ ## Instructions
376
+
377
+ You are responding to a comment on an issue.
378
+
379
+ 1. Read and understand the issue description and the triggering comment.
380
+ 2. Review the whitesmith context above to understand what work is already in progress.
381
+ 3. You have full access to the repository code — read files, explore the codebase as needed.
382
+ 4. Analyze the request and formulate a helpful response.
383
+ 5. Write your response in Markdown to the file \`${args.responseFile}\`.
384
+
385
+ Your response will be posted as a comment on the issue.
386
+ Be thorough but concise. Include code snippets, file references, or suggestions as appropriate.
387
+ If there are pending PRs or tasks, reference them in your response when relevant.${workOnPRInstructions}
388
+ `;
389
+ }
390
+ //# sourceMappingURL=comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment.js","sourceRoot":"","sources":["../src/comment.ts"],"names":[],"mappings":"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"}
package/dist/git.d.ts CHANGED
@@ -9,6 +9,10 @@ export declare class GitManager {
9
9
  * Get the current branch name
10
10
  */
11
11
  getCurrentBranch(): Promise<string>;
12
+ /**
13
+ * Remove all .whitesmith-* temp files from the working directory.
14
+ */
15
+ cleanupTempFiles(): void;
12
16
  /**
13
17
  * Fetch latest from origin
14
18
  */
@@ -52,6 +56,14 @@ export declare class GitManager {
52
56
  * Get the default branch (usually main)
53
57
  */
54
58
  getDefaultBranch(): Promise<string>;
59
+ /**
60
+ * Check if a file exists on a remote ref (without checking out)
61
+ */
62
+ remoteFileExists(ref: string, filePath: string): Promise<boolean>;
63
+ /**
64
+ * Check if a path has any files on a remote ref (without checking out)
65
+ */
66
+ remotePathHasFiles(ref: string, dirPath: string): Promise<boolean>;
55
67
  /**
56
68
  * Verify we're on the expected branch
57
69
  */
package/dist/git.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,qBAAa,UAAU;IACtB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;YAIb,GAAG;IAKjB;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAShG;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBtE;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAKpC;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASzD;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IASzC;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMnD"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,qBAAa,UAAU;IACtB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;YAIb,GAAG;IAKjB;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIzC;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAYxB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAShG;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA6BtE;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAKpC;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASzD;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IASzC;;OAEG;IACG,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASvE;;OAEG;IACG,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASxE;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMnD"}
package/dist/git.js CHANGED
@@ -1,4 +1,6 @@
1
1
  import { exec } from 'node:child_process';
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
2
4
  import { promisify } from 'node:util';
3
5
  const execAsync = promisify(exec);
4
6
  /**
@@ -19,6 +21,21 @@ export class GitManager {
19
21
  async getCurrentBranch() {
20
22
  return this.git('rev-parse --abbrev-ref HEAD');
21
23
  }
24
+ /**
25
+ * Remove all .whitesmith-* temp files from the working directory.
26
+ */
27
+ cleanupTempFiles() {
28
+ for (const entry of fs.readdirSync(this.workDir)) {
29
+ if (entry.startsWith('.whitesmith-')) {
30
+ try {
31
+ fs.unlinkSync(path.join(this.workDir, entry));
32
+ }
33
+ catch {
34
+ // ignore
35
+ }
36
+ }
37
+ }
38
+ }
22
39
  /**
23
40
  * Fetch latest from origin
24
41
  */
@@ -48,26 +65,28 @@ export class GitManager {
48
65
  * Stage all changes and commit
49
66
  */
50
67
  async commitAll(message, exclude) {
68
+ // Always exclude whitesmith temp files
69
+ const allExclude = ['.whitesmith-*', ...(exclude || [])];
70
+ // Remove any whitesmith temp files from the working tree
71
+ this.cleanupTempFiles();
51
72
  // Check if there are changes
52
73
  const status = await this.git('status --porcelain');
53
74
  if (!status)
54
75
  return false;
55
- let addCmd = 'git add -A';
56
- if (exclude && exclude.length > 0) {
57
- // Add all then unstage excluded
58
- await this.git('add -A');
59
- for (const pattern of exclude) {
60
- try {
61
- await this.git(`reset HEAD -- ${pattern}`);
62
- }
63
- catch {
64
- // File might not be staged
65
- }
76
+ // Add all then unstage excluded patterns
77
+ await this.git('add -A');
78
+ for (const pattern of allExclude) {
79
+ try {
80
+ await this.git(`reset HEAD -- ${pattern}`);
81
+ }
82
+ catch {
83
+ // File might not be staged
66
84
  }
67
85
  }
68
- else {
69
- await this.git('add -A');
70
- }
86
+ // Check if anything is still staged after exclusions
87
+ const staged = await this.git('diff --cached --name-only');
88
+ if (!staged)
89
+ return false;
71
90
  await this.git(`commit -m "${message.replace(/"/g, '\\"')}"`);
72
91
  return true;
73
92
  }
@@ -125,6 +144,30 @@ export class GitManager {
125
144
  return 'main';
126
145
  }
127
146
  }
147
+ /**
148
+ * Check if a file exists on a remote ref (without checking out)
149
+ */
150
+ async remoteFileExists(ref, filePath) {
151
+ try {
152
+ await this.git(`show ${ref}:${filePath}`);
153
+ return true;
154
+ }
155
+ catch {
156
+ return false;
157
+ }
158
+ }
159
+ /**
160
+ * Check if a path has any files on a remote ref (without checking out)
161
+ */
162
+ async remotePathHasFiles(ref, dirPath) {
163
+ try {
164
+ const result = await this.git(`ls-tree ${ref} -- ${dirPath}`);
165
+ return result.length > 0;
166
+ }
167
+ catch {
168
+ return false;
169
+ }
170
+ }
128
171
  /**
129
172
  * Verify we're on the expected branch
130
173
  */
package/dist/git.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,11 @@
3
3
  * Implementations wrap specific tools (pi, claude CLI, aider, etc.)
4
4
  */
5
5
  export interface AgentHarness {
6
+ /**
7
+ * Validate that the agent is available and properly configured.
8
+ * Throws an error with a descriptive message if validation fails.
9
+ */
10
+ validate(): Promise<void>;
6
11
  /**
7
12
  * Run the agent with a prompt and return its output.
8
13
  * The agent is expected to execute in the given working directory.
@@ -16,4 +21,12 @@ export interface AgentHarness {
16
21
  exitCode: number;
17
22
  }>;
18
23
  }
24
+ export interface AgentHarnessConfig {
25
+ /** Command to invoke the agent (e.g. 'pi') */
26
+ cmd: string;
27
+ /** AI provider name (e.g. 'anthropic', 'openai') */
28
+ provider: string;
29
+ /** AI model ID (e.g. 'claude-opus-4-6') */
30
+ model: string;
31
+ }
19
32
  //# sourceMappingURL=agent-harness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-harness.d.ts","sourceRoot":"","sources":["../../src/harnesses/agent-harness.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC5B;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;CAChD"}
1
+ {"version":3,"file":"agent-harness.d.ts","sourceRoot":"","sources":["../../src/harnesses/agent-harness.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC5B;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,kBAAkB;IAClC,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;CACd"}
@@ -1,3 +1,3 @@
1
- export type { AgentHarness } from './agent-harness.js';
1
+ export type { AgentHarness, AgentHarnessConfig } from './agent-harness.js';
2
2
  export { PiHarness } from './pi.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/harnesses/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/harnesses/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,YAAY,EAAE,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { AgentHarness } from './agent-harness.js';
1
+ import type { AgentHarness, AgentHarnessConfig } from './agent-harness.js';
2
2
  /**
3
3
  * Agent harness for @mariozechner/pi-coding-agent.
4
4
  *
@@ -6,10 +6,10 @@ import type { AgentHarness } from './agent-harness.js';
6
6
  */
7
7
  export declare class PiHarness implements AgentHarness {
8
8
  private cmd;
9
- /**
10
- * @param cmd - Command to invoke pi (default: "pi")
11
- */
12
- constructor(cmd?: string);
9
+ private provider;
10
+ private model;
11
+ constructor(config: AgentHarnessConfig);
12
+ validate(): Promise<void>;
13
13
  run(options: {
14
14
  prompt: string;
15
15
  workDir: string;
@@ -18,6 +18,8 @@ export declare class PiHarness implements AgentHarness {
18
18
  output: string;
19
19
  exitCode: number;
20
20
  }>;
21
+ /** Format a pi JSON event as a human-readable log line (null = skip) */
22
+ private formatEvent;
21
23
  private exec;
22
24
  }
23
25
  //# sourceMappingURL=pi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../src/harnesses/pi.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAErD;;;;GAIG;AACH,qBAAa,SAAU,YAAW,YAAY;IAC7C,OAAO,CAAC,GAAG,CAAS;IAEpB;;OAEG;gBACS,GAAG,GAAE,MAAa;IAIxB,GAAG,CAAC,OAAO,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,CAAC;IAsB/C,OAAO,CAAC,IAAI;CAmCZ"}
1
+ {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../src/harnesses/pi.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAmBzE;;;;GAIG;AACH,qBAAa,SAAU,YAAW,YAAY;IAC7C,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,kBAAkB;IAMhC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA2DzB,GAAG,CAAC,OAAO,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,CAAC;IAsB/C,wEAAwE;IACxE,OAAO,CAAC,WAAW;IAoCnB,OAAO,CAAC,IAAI;CAwDZ"}