whitesmith 0.0.1 → 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 (64) hide show
  1. package/dist/auto-work.d.ts +11 -0
  2. package/dist/auto-work.d.ts.map +1 -0
  3. package/dist/auto-work.js +22 -0
  4. package/dist/auto-work.js.map +1 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +99 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/comment.d.ts +29 -0
  9. package/dist/comment.d.ts.map +1 -0
  10. package/dist/comment.js +390 -0
  11. package/dist/comment.js.map +1 -0
  12. package/dist/git.d.ts +12 -0
  13. package/dist/git.d.ts.map +1 -1
  14. package/dist/git.js +57 -14
  15. package/dist/git.js.map +1 -1
  16. package/dist/harnesses/pi.d.ts +2 -0
  17. package/dist/harnesses/pi.d.ts.map +1 -1
  18. package/dist/harnesses/pi.js +92 -6
  19. package/dist/harnesses/pi.js.map +1 -1
  20. package/dist/install-ci.d.ts +7 -0
  21. package/dist/install-ci.d.ts.map +1 -0
  22. package/dist/install-ci.js +760 -0
  23. package/dist/install-ci.js.map +1 -0
  24. package/dist/orchestrator.d.ts +24 -4
  25. package/dist/orchestrator.d.ts.map +1 -1
  26. package/dist/orchestrator.js +252 -67
  27. package/dist/orchestrator.js.map +1 -1
  28. package/dist/prompts.d.ts.map +1 -1
  29. package/dist/prompts.js +1 -0
  30. package/dist/prompts.js.map +1 -1
  31. package/dist/providers/github-ci.d.ts +16 -0
  32. package/dist/providers/github-ci.d.ts.map +1 -0
  33. package/dist/providers/github-ci.js +733 -0
  34. package/dist/providers/github-ci.js.map +1 -0
  35. package/dist/providers/github.d.ts +21 -0
  36. package/dist/providers/github.d.ts.map +1 -1
  37. package/dist/providers/github.js +88 -3
  38. package/dist/providers/github.js.map +1 -1
  39. package/dist/providers/index.d.ts +1 -0
  40. package/dist/providers/index.d.ts.map +1 -1
  41. package/dist/providers/issue-provider.d.ts +26 -0
  42. package/dist/providers/issue-provider.d.ts.map +1 -1
  43. package/dist/task-manager.d.ts +4 -0
  44. package/dist/task-manager.d.ts.map +1 -1
  45. package/dist/task-manager.js +6 -0
  46. package/dist/task-manager.js.map +1 -1
  47. package/dist/types.d.ts +9 -0
  48. package/dist/types.d.ts.map +1 -1
  49. package/dist/types.js +2 -0
  50. package/dist/types.js.map +1 -1
  51. package/package.json +2 -1
  52. package/src/auto-work.ts +26 -0
  53. package/src/cli.ts +114 -0
  54. package/src/comment.ts +531 -0
  55. package/src/git.ts +58 -12
  56. package/src/harnesses/pi.ts +108 -6
  57. package/src/orchestrator.ts +287 -76
  58. package/src/prompts.ts +1 -0
  59. package/src/providers/github-ci.ts +840 -0
  60. package/src/providers/github.ts +118 -5
  61. package/src/providers/index.ts +1 -0
  62. package/src/providers/issue-provider.ts +25 -1
  63. package/src/task-manager.ts +7 -0
  64. package/src/types.ts +7 -0
@@ -0,0 +1,11 @@
1
+ import type { DevPulseConfig, Issue } from './types.js';
2
+ /**
3
+ * Check whether auto-work mode is enabled for a given issue.
4
+ *
5
+ * Returns true if any of these conditions are met:
6
+ * 1. `config.autoWork` is `true` (global config / CLI flag)
7
+ * 2. The issue has the `whitesmith:auto-work` label
8
+ * 3. The issue body contains the string `whitesmith:auto-work`
9
+ */
10
+ export declare function isAutoWorkEnabled(config: DevPulseConfig, issue: Issue): boolean;
11
+ //# sourceMappingURL=auto-work.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-work.d.ts","sourceRoot":"","sources":["../src/auto-work.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAE,KAAK,EAAC,MAAM,YAAY,CAAC;AAGtD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAc/E"}
@@ -0,0 +1,22 @@
1
+ import { LABELS } from './types.js';
2
+ /**
3
+ * Check whether auto-work mode is enabled for a given issue.
4
+ *
5
+ * Returns true if any of these conditions are met:
6
+ * 1. `config.autoWork` is `true` (global config / CLI flag)
7
+ * 2. The issue has the `whitesmith:auto-work` label
8
+ * 3. The issue body contains the string `whitesmith:auto-work`
9
+ */
10
+ export function isAutoWorkEnabled(config, issue) {
11
+ if (config.autoWork) {
12
+ return true;
13
+ }
14
+ if (issue.labels.includes(LABELS.AUTO_WORK)) {
15
+ return true;
16
+ }
17
+ if (issue.body.includes('whitesmith:auto-work')) {
18
+ return true;
19
+ }
20
+ return false;
21
+ }
22
+ //# sourceMappingURL=auto-work.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-work.js","sourceRoot":"","sources":["../src/auto-work.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,YAAY,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAsB,EAAE,KAAY;IACrE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AA2BlC,wBAAgB,QAAQ,IAAI,OAAO,CA4IlC;AAED,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AA6BlC,wBAAgB,QAAQ,IAAI,OAAO,CA4PlC;AAED,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE"}
package/dist/cli.js CHANGED
@@ -7,6 +7,7 @@ import { Orchestrator } from './orchestrator.js';
7
7
  import { GitHubProvider } from './providers/github.js';
8
8
  import { PiHarness } from './harnesses/pi.js';
9
9
  import { TaskManager } from './task-manager.js';
10
+ import { handlePRComment, handleIssueComment, isPullRequest } from './comment.js';
10
11
  import pkg from '../package.json' with { type: 'json' };
11
12
  const DEFAULT_AGENT_CMD = 'pi';
12
13
  const DEFAULT_MAX_ITERATIONS = 10;
@@ -37,6 +38,8 @@ export function buildCli() {
37
38
  .option('--log-file <path>', 'Log agent output to file')
38
39
  .option('--no-push', 'Skip pushing and PR creation')
39
40
  .option('--no-sleep', 'Skip sleep between iterations')
41
+ .option('--dry-run', 'Print what would be done without executing it')
42
+ .option('--auto-work', 'Enable auto-work mode (auto-approve task PRs)')
40
43
  .action(async (workDir, opts) => {
41
44
  const config = {
42
45
  agentCmd: opts.agentCmd,
@@ -46,6 +49,8 @@ export function buildCli() {
46
49
  workDir: path.resolve(workDir),
47
50
  noPush: opts.push === false,
48
51
  noSleep: opts.sleep === false,
52
+ dryRun: opts.dryRun ?? false,
53
+ autoWork: opts.autoWork ?? false,
49
54
  logFile: opts.logFile,
50
55
  repo: opts.repo,
51
56
  };
@@ -106,6 +111,76 @@ export function buildCli() {
106
111
  console.log('');
107
112
  }
108
113
  });
114
+ // --- comment ---
115
+ program
116
+ .command('comment')
117
+ .description('Handle a comment on an issue or PR (auto-detects which)')
118
+ .argument('[work_dir]', 'Working directory', '.')
119
+ .requiredOption('--number <n>', 'Issue or PR number')
120
+ .option('--body <text>', 'Comment body text (or use --body-file)')
121
+ .option('--body-file <path>', 'Read comment body from file instead of --body')
122
+ .option('--agent-cmd <cmd>', 'Agent harness command', DEFAULT_AGENT_CMD)
123
+ .requiredOption('--provider <name>', 'AI provider (e.g. anthropic, openai)')
124
+ .requiredOption('--model <id>', 'AI model ID (e.g. claude-opus-4-6)')
125
+ .option('--repo <owner/repo>', 'GitHub repo (auto-detected if omitted)')
126
+ .option('--log-file <path>', 'Log agent output to file')
127
+ .option('--post', 'Post the response as a GitHub comment (issue-only, otherwise prints to stdout)')
128
+ .action(async (workDir, opts) => {
129
+ const resolvedDir = path.resolve(workDir);
130
+ if (!fs.existsSync(resolvedDir)) {
131
+ console.error(`ERROR: Directory '${resolvedDir}' does not exist`);
132
+ process.exit(1);
133
+ }
134
+ // Read body from file if --body-file is provided, otherwise use --body
135
+ let commentBody;
136
+ if (opts.bodyFile) {
137
+ const bodyFilePath = path.resolve(opts.bodyFile);
138
+ if (!fs.existsSync(bodyFilePath)) {
139
+ console.error(`ERROR: Body file '${bodyFilePath}' does not exist`);
140
+ process.exit(1);
141
+ }
142
+ commentBody = fs.readFileSync(bodyFilePath, 'utf-8');
143
+ }
144
+ else if (opts.body) {
145
+ commentBody = opts.body;
146
+ }
147
+ else {
148
+ console.error('ERROR: Either --body or --body-file is required');
149
+ process.exit(1);
150
+ }
151
+ process.chdir(resolvedDir);
152
+ const issues = new GitHubProvider(resolvedDir, opts.repo);
153
+ const agent = new PiHarness({
154
+ cmd: opts.agentCmd,
155
+ provider: opts.provider,
156
+ model: opts.model,
157
+ });
158
+ await agent.validate();
159
+ const number = parseInt(opts.number, 10);
160
+ const commentConfig = {
161
+ number,
162
+ commentBody,
163
+ workDir: resolvedDir,
164
+ repo: opts.repo,
165
+ logFile: opts.logFile,
166
+ post: opts.post === true,
167
+ };
168
+ try {
169
+ const isPR = await isPullRequest(issues, number);
170
+ if (isPR) {
171
+ console.log(`Detected PR #${number}`);
172
+ await handlePRComment(commentConfig, issues, agent);
173
+ }
174
+ else {
175
+ console.log(`Detected issue #${number}`);
176
+ await handleIssueComment(commentConfig, issues, agent);
177
+ }
178
+ }
179
+ catch (error) {
180
+ console.error('ERROR:', error instanceof Error ? error.message : error);
181
+ process.exit(1);
182
+ }
183
+ });
109
184
  // --- reconcile ---
110
185
  program
111
186
  .command('reconcile')
@@ -142,6 +217,30 @@ export function buildCli() {
142
217
  }
143
218
  console.log('Reconcile complete.');
144
219
  });
220
+ // --- install-ci ---
221
+ program
222
+ .command('install-ci')
223
+ .description('Set up GitHub Actions workflows for whitesmith CI')
224
+ .argument('[work_dir]', 'Working directory (target repository)', '.')
225
+ .option('--auth-json', 'Use pi auth.json instead of models.json (requires PI_AUTH_JSON and GH_PAT secrets)')
226
+ .option('--repo <owner/repo>', 'GitHub repo (auto-detected if omitted)')
227
+ .option('--fake', 'Write workflows to .fake/workflows/ instead of .github/workflows/ (for testing)')
228
+ .action(async (workDir, opts) => {
229
+ const resolvedDir = path.resolve(workDir);
230
+ if (!fs.existsSync(resolvedDir)) {
231
+ console.error(`ERROR: Directory '${resolvedDir}' does not exist`);
232
+ process.exit(1);
233
+ }
234
+ const authMode = opts.authJson ? 'auth-json' : 'models-json';
235
+ try {
236
+ const provider = new GitHubProvider(resolvedDir, opts.repo);
237
+ await provider.installCI({ authMode, fake: opts.fake ?? false });
238
+ }
239
+ catch (error) {
240
+ console.error('ERROR:', error instanceof Error ? error.message : error);
241
+ process.exit(1);
242
+ }
243
+ });
145
244
  return program;
146
245
  }
147
246
  export async function main(args = process.argv) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { AgentHarness } from './harnesses/agent-harness.js';
2
+ import type { IssueProvider } from './providers/issue-provider.js';
3
+ export interface CommentConfig {
4
+ /** Issue or PR number */
5
+ number: number;
6
+ /** The comment body text */
7
+ commentBody: string;
8
+ /** Working directory (the repo) */
9
+ workDir: string;
10
+ /** GitHub repo in "owner/repo" format (auto-detected if not set) */
11
+ repo?: string;
12
+ /** Log file path */
13
+ logFile?: string;
14
+ /** Whether to post the response as a GitHub comment (issue-only) */
15
+ post: boolean;
16
+ }
17
+ /**
18
+ * Handle a comment on a PR.
19
+ */
20
+ export declare function handlePRComment(config: CommentConfig, issues: IssueProvider, agent: AgentHarness): Promise<void>;
21
+ /**
22
+ * Handle a comment on an issue (not a PR).
23
+ */
24
+ export declare function handleIssueComment(config: CommentConfig, issues: IssueProvider, agent: AgentHarness): Promise<void>;
25
+ /**
26
+ * Detect whether a given number is a PR or an issue.
27
+ */
28
+ export declare function isPullRequest(issues: IssueProvider, number: number): Promise<boolean>;
29
+ //# sourceMappingURL=comment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment.d.ts","sourceRoot":"","sources":["../src/comment.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,+BAA+B,CAAC;AAKjE,MAAM,WAAW,aAAa;IAC7B,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,IAAI,EAAE,OAAO,CAAC;CACd;AA2BD;;GAEG;AACH,wBAAsB,eAAe,CACpC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CA6Ef;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAyDf;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG3F"}
@@ -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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"}