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.
- package/README.md +228 -0
- package/dist/auto-work.d.ts +11 -0
- package/dist/auto-work.d.ts.map +1 -0
- package/dist/auto-work.js +22 -0
- package/dist/auto-work.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +108 -1
- package/dist/cli.js.map +1 -1
- package/dist/comment.d.ts +29 -0
- package/dist/comment.d.ts.map +1 -0
- package/dist/comment.js +390 -0
- package/dist/comment.js.map +1 -0
- package/dist/git.d.ts +12 -0
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +57 -14
- package/dist/git.js.map +1 -1
- package/dist/harnesses/agent-harness.d.ts +13 -0
- package/dist/harnesses/agent-harness.d.ts.map +1 -1
- package/dist/harnesses/index.d.ts +1 -1
- package/dist/harnesses/index.d.ts.map +1 -1
- package/dist/harnesses/pi.d.ts +7 -5
- package/dist/harnesses/pi.d.ts.map +1 -1
- package/dist/harnesses/pi.js +122 -9
- package/dist/harnesses/pi.js.map +1 -1
- package/dist/install-ci.d.ts +7 -0
- package/dist/install-ci.d.ts.map +1 -0
- package/dist/install-ci.js +760 -0
- package/dist/install-ci.js.map +1 -0
- package/dist/orchestrator.d.ts +24 -4
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +254 -63
- package/dist/orchestrator.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +1 -0
- package/dist/prompts.js.map +1 -1
- package/dist/providers/github-ci.d.ts +16 -0
- package/dist/providers/github-ci.d.ts.map +1 -0
- package/dist/providers/github-ci.js +733 -0
- package/dist/providers/github-ci.js.map +1 -0
- package/dist/providers/github.d.ts +21 -0
- package/dist/providers/github.d.ts.map +1 -1
- package/dist/providers/github.js +88 -3
- package/dist/providers/github.js.map +1 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/issue-provider.d.ts +26 -0
- package/dist/providers/issue-provider.d.ts.map +1 -1
- package/dist/task-manager.d.ts +4 -0
- package/dist/task-manager.d.ts.map +1 -1
- package/dist/task-manager.js +6 -0
- package/dist/task-manager.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -1
- package/package.json +3 -1
- package/src/auto-work.ts +26 -0
- package/src/cli.ts +123 -1
- package/src/comment.ts +531 -0
- package/src/git.ts +58 -12
- package/src/harnesses/agent-harness.ts +15 -0
- package/src/harnesses/index.ts +1 -1
- package/src/harnesses/pi.ts +146 -10
- package/src/orchestrator.ts +290 -72
- package/src/prompts.ts +1 -0
- package/src/providers/github-ci.ts +840 -0
- package/src/providers/github.ts +118 -5
- package/src/providers/index.ts +1 -0
- package/src/providers/issue-provider.ts +25 -1
- package/src/task-manager.ts +7 -0
- package/src/types.ts +11 -0
package/README.md
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# whitesmith
|
|
2
|
+
|
|
3
|
+
AI-powered issue-to-PR pipeline. Whitesmith monitors your GitHub issues, breaks them into tasks, and implements them as pull requests — all autonomously.
|
|
4
|
+
|
|
5
|
+
## How It Works
|
|
6
|
+
|
|
7
|
+
Whitesmith runs a loop with three phases:
|
|
8
|
+
|
|
9
|
+
1. **Investigate** — Picks up unlabeled GitHub issues, explores the codebase, and breaks each issue into concrete implementation tasks (stored as markdown files in `tasks/<issue>/`). Opens a PR for human review.
|
|
10
|
+
|
|
11
|
+
2. **Implement** — Once a task PR is merged (tasks accepted), picks up available tasks respecting dependency order, implements the changes, deletes the task file, and opens a PR.
|
|
12
|
+
|
|
13
|
+
3. **Reconcile** — When all tasks for an issue are completed and merged, closes the original issue.
|
|
14
|
+
|
|
15
|
+
### Issue Lifecycle
|
|
16
|
+
|
|
17
|
+
Issues move through labels automatically:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
(new issue, no labels)
|
|
21
|
+
→ whitesmith:investigating — agent is generating tasks
|
|
22
|
+
→ whitesmith:tasks-proposed — task PR opened for review
|
|
23
|
+
→ whitesmith:tasks-accepted — task PR merged, implementation begins
|
|
24
|
+
→ whitesmith:completed — all tasks done, issue closed
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Installation
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install -g whitesmith
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
You also need [pi](https://github.com/nicholasgasior/pi-coding-agent) (the default agent harness):
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm install -g @mariozechner/pi-coding-agent
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Setup
|
|
40
|
+
|
|
41
|
+
### 1. Configure AI Provider
|
|
42
|
+
|
|
43
|
+
Whitesmith uses `pi` as its agent harness. Configure authentication by creating `~/.pi/agent/auth.json`:
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"anthropic": {
|
|
48
|
+
"type": "api_key",
|
|
49
|
+
"key": "sk-ant-..."
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 2. GitHub Authentication
|
|
55
|
+
|
|
56
|
+
Whitesmith uses the `gh` CLI. Make sure you're authenticated:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
gh auth login
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Usage
|
|
63
|
+
|
|
64
|
+
### Run the Loop
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
whitesmith run . --provider anthropic --model claude-opus-4-6
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
#### Options
|
|
71
|
+
|
|
72
|
+
| Option | Description | Default |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| `--provider <name>` | AI provider (e.g. `anthropic`, `openai`) | *required* |
|
|
75
|
+
| `--model <id>` | AI model ID (e.g. `claude-opus-4-6`) | *required* |
|
|
76
|
+
| `--agent-cmd <cmd>` | Agent harness command | `pi` |
|
|
77
|
+
| `--max-iterations <n>` | Max loop iterations | `10` |
|
|
78
|
+
| `--repo <owner/repo>` | GitHub repo (auto-detected if omitted) | — |
|
|
79
|
+
| `--log-file <path>` | Log agent output to file | — |
|
|
80
|
+
| `--no-push` | Skip pushing branches and PR creation | `false` |
|
|
81
|
+
| `--no-sleep` | Skip sleep between iterations | `false` |
|
|
82
|
+
|
|
83
|
+
### Check Status
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
whitesmith status .
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Shows all issues grouped by their whitesmith label and any pending tasks.
|
|
90
|
+
|
|
91
|
+
### Reconcile
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
whitesmith reconcile .
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Checks for completed issues (all tasks merged) and closes them. No AI needed.
|
|
98
|
+
|
|
99
|
+
## GitHub Actions
|
|
100
|
+
|
|
101
|
+
Whitesmith can run on a schedule via GitHub Actions. Add the workflow file at `.github/workflows/whitesmith.yml`:
|
|
102
|
+
|
|
103
|
+
```yaml
|
|
104
|
+
name: whitesmith
|
|
105
|
+
|
|
106
|
+
on:
|
|
107
|
+
schedule:
|
|
108
|
+
- cron: '*/15 * * * *'
|
|
109
|
+
workflow_dispatch:
|
|
110
|
+
inputs:
|
|
111
|
+
max_iterations:
|
|
112
|
+
description: 'Maximum iterations'
|
|
113
|
+
default: '3'
|
|
114
|
+
type: string
|
|
115
|
+
provider:
|
|
116
|
+
description: 'AI provider'
|
|
117
|
+
required: true
|
|
118
|
+
type: string
|
|
119
|
+
model:
|
|
120
|
+
description: 'AI model ID'
|
|
121
|
+
required: true
|
|
122
|
+
type: string
|
|
123
|
+
|
|
124
|
+
concurrency:
|
|
125
|
+
group: whitesmith-loop
|
|
126
|
+
cancel-in-progress: false
|
|
127
|
+
|
|
128
|
+
permissions:
|
|
129
|
+
contents: write
|
|
130
|
+
issues: write
|
|
131
|
+
pull-requests: write
|
|
132
|
+
|
|
133
|
+
jobs:
|
|
134
|
+
run:
|
|
135
|
+
runs-on: ubuntu-latest
|
|
136
|
+
steps:
|
|
137
|
+
- uses: actions/checkout@v4
|
|
138
|
+
with:
|
|
139
|
+
fetch-depth: 0
|
|
140
|
+
|
|
141
|
+
- uses: actions/setup-node@v4
|
|
142
|
+
with:
|
|
143
|
+
node-version: '22'
|
|
144
|
+
|
|
145
|
+
- name: Configure git
|
|
146
|
+
run: |
|
|
147
|
+
git config user.name "whitesmith[bot]"
|
|
148
|
+
git config user.email "whitesmith[bot]@users.noreply.github.com"
|
|
149
|
+
|
|
150
|
+
- name: Install whitesmith & pi
|
|
151
|
+
run: |
|
|
152
|
+
npm install -g whitesmith
|
|
153
|
+
npm install -g @mariozechner/pi-coding-agent
|
|
154
|
+
|
|
155
|
+
- name: Configure pi auth
|
|
156
|
+
run: |
|
|
157
|
+
mkdir -p ~/.pi/agent
|
|
158
|
+
echo '${{ secrets.PI_AUTH_JSON }}' > ~/.pi/agent/auth.json
|
|
159
|
+
chmod 600 ~/.pi/agent/auth.json
|
|
160
|
+
|
|
161
|
+
- name: Run whitesmith
|
|
162
|
+
env:
|
|
163
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
164
|
+
run: |
|
|
165
|
+
whitesmith run . \
|
|
166
|
+
--agent-cmd "pi" \
|
|
167
|
+
--provider "${{ inputs.provider || vars.WHITESMITH_PROVIDER }}" \
|
|
168
|
+
--model "${{ inputs.model || vars.WHITESMITH_MODEL }}" \
|
|
169
|
+
--max-iterations ${{ inputs.max_iterations || '3' }}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Required Configuration
|
|
173
|
+
|
|
174
|
+
| Secret/Variable | Description |
|
|
175
|
+
|---|---|
|
|
176
|
+
| `PI_AUTH_JSON` (secret) | Contents of `~/.pi/agent/auth.json` — AI provider credentials |
|
|
177
|
+
| `WHITESMITH_PROVIDER` (variable) | Default AI provider for scheduled runs |
|
|
178
|
+
| `WHITESMITH_MODEL` (variable) | Default AI model for scheduled runs |
|
|
179
|
+
|
|
180
|
+
## Task File Format
|
|
181
|
+
|
|
182
|
+
Tasks are stored as markdown files with YAML frontmatter in `tasks/<issue-number>/`:
|
|
183
|
+
|
|
184
|
+
```markdown
|
|
185
|
+
---
|
|
186
|
+
id: "42-001"
|
|
187
|
+
issue: 42
|
|
188
|
+
title: "Add input validation"
|
|
189
|
+
depends_on: []
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Description
|
|
193
|
+
Add validation for user input...
|
|
194
|
+
|
|
195
|
+
## Acceptance Criteria
|
|
196
|
+
- Input is validated before processing
|
|
197
|
+
- Error messages are clear
|
|
198
|
+
|
|
199
|
+
## Implementation Notes
|
|
200
|
+
Modify `src/handler.ts`...
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
- **id**: `<issue>-<seq>` format (e.g. `42-001`)
|
|
204
|
+
- **depends_on**: List of task IDs that must be completed first
|
|
205
|
+
- Tasks are deleted when implemented (marking them as complete)
|
|
206
|
+
|
|
207
|
+
## Development
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Install dependencies
|
|
211
|
+
pnpm install
|
|
212
|
+
|
|
213
|
+
# Build
|
|
214
|
+
pnpm build
|
|
215
|
+
|
|
216
|
+
# Watch mode
|
|
217
|
+
pnpm dev
|
|
218
|
+
|
|
219
|
+
# Run tests
|
|
220
|
+
pnpm test
|
|
221
|
+
|
|
222
|
+
# Format
|
|
223
|
+
pnpm format
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## License
|
|
227
|
+
|
|
228
|
+
MIT
|
|
@@ -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;
|
|
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,12 +7,17 @@ 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;
|
|
13
14
|
function createOrchestrator(config) {
|
|
14
15
|
const issues = new GitHubProvider(config.workDir, config.repo);
|
|
15
|
-
const agent = new PiHarness(
|
|
16
|
+
const agent = new PiHarness({
|
|
17
|
+
cmd: config.agentCmd,
|
|
18
|
+
provider: config.provider,
|
|
19
|
+
model: config.model,
|
|
20
|
+
});
|
|
16
21
|
return new Orchestrator(config, issues, agent);
|
|
17
22
|
}
|
|
18
23
|
const packageName = pkg.name;
|
|
@@ -26,18 +31,26 @@ export function buildCli() {
|
|
|
26
31
|
.description('Run the main whitesmith loop: investigate issues, implement tasks')
|
|
27
32
|
.argument('[work_dir]', 'Working directory', '.')
|
|
28
33
|
.option('--agent-cmd <cmd>', 'Agent harness command', DEFAULT_AGENT_CMD)
|
|
34
|
+
.requiredOption('--provider <name>', 'AI provider (e.g. anthropic, openai)')
|
|
35
|
+
.requiredOption('--model <id>', 'AI model ID (e.g. claude-opus-4-6)')
|
|
29
36
|
.option('--max-iterations <n>', 'Max iterations', String(DEFAULT_MAX_ITERATIONS))
|
|
30
37
|
.option('--repo <owner/repo>', 'GitHub repo (auto-detected if omitted)')
|
|
31
38
|
.option('--log-file <path>', 'Log agent output to file')
|
|
32
39
|
.option('--no-push', 'Skip pushing and PR creation')
|
|
33
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)')
|
|
34
43
|
.action(async (workDir, opts) => {
|
|
35
44
|
const config = {
|
|
36
45
|
agentCmd: opts.agentCmd,
|
|
46
|
+
provider: opts.provider,
|
|
47
|
+
model: opts.model,
|
|
37
48
|
maxIterations: parseInt(opts.maxIterations, 10),
|
|
38
49
|
workDir: path.resolve(workDir),
|
|
39
50
|
noPush: opts.push === false,
|
|
40
51
|
noSleep: opts.sleep === false,
|
|
52
|
+
dryRun: opts.dryRun ?? false,
|
|
53
|
+
autoWork: opts.autoWork ?? false,
|
|
41
54
|
logFile: opts.logFile,
|
|
42
55
|
repo: opts.repo,
|
|
43
56
|
};
|
|
@@ -98,6 +111,76 @@ export function buildCli() {
|
|
|
98
111
|
console.log('');
|
|
99
112
|
}
|
|
100
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
|
+
});
|
|
101
184
|
// --- reconcile ---
|
|
102
185
|
program
|
|
103
186
|
.command('reconcile')
|
|
@@ -134,6 +217,30 @@ export function buildCli() {
|
|
|
134
217
|
}
|
|
135
218
|
console.log('Reconcile complete.');
|
|
136
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
|
+
});
|
|
137
244
|
return program;
|
|
138
245
|
}
|
|
139
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"}
|