@hagicode/cli 0.1.0-dev.3.1.074a0f9 → 0.1.0-dev.7.1.8b40188
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 +262 -108
- package/dist/chunks/main-CILDKeJ3.js +91 -0
- package/dist/cli.js +1 -1
- package/dist/main.js +1 -1
- package/package.json +2 -2
- package/dist/chunks/main-BXoLU5FX.js +0 -47
package/README.md
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@hagicode/cli)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
`@hagicode/cli` provides the published `hagi` command for project, proposal, vault, chat, and AutoTask management against a HagiCode backend API.
|
|
6
|
+
The same repository also carries the canonical embedded Hagi skill under [`skills/`](skills/), so package usage and AI-oriented guidance live in one writable source.
|
|
6
7
|
|
|
7
8
|
## Requirements
|
|
8
9
|
|
|
@@ -12,188 +13,341 @@
|
|
|
12
13
|
|
|
13
14
|
## Installation
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
cd repos/cli
|
|
17
|
-
npm install
|
|
18
|
-
npm run build
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
`npm run build` now performs a Vite 8 production bundle for Node 20+ and emits the publish contract at `dist/cli.js`, `dist/main.js`, plus any runtime-required shared chunks under `dist/chunks/`.
|
|
22
|
-
Release builds are minified, tree-shaken, and exclude `.map` files.
|
|
16
|
+
Use the published npm package for normal CLI usage. You do not need to clone `repos/cli` to run `hagi`.
|
|
23
17
|
|
|
24
|
-
|
|
18
|
+
### Zero-install usage
|
|
25
19
|
|
|
26
20
|
```bash
|
|
27
|
-
npx
|
|
28
|
-
|
|
21
|
+
npx @hagicode/cli --help
|
|
22
|
+
npx @hagicode/cli project list --json
|
|
29
23
|
```
|
|
30
24
|
|
|
31
|
-
|
|
25
|
+
### Project-local install
|
|
32
26
|
|
|
33
27
|
```bash
|
|
34
|
-
|
|
35
|
-
|
|
28
|
+
npm install @hagicode/cli
|
|
29
|
+
npx @hagicode/cli proposal list --json
|
|
36
30
|
```
|
|
37
31
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
`repos/cli/.github/workflows/release-drafter.yml` maintains the next GitHub draft release for `@hagicode/cli`.
|
|
41
|
-
`repos/cli/.github/workflows/npm-publish.yml` now publishes two channels with GitHub Actions OIDC plus provenance:
|
|
32
|
+
### Optional global install
|
|
42
33
|
|
|
43
|
-
|
|
44
|
-
|
|
34
|
+
```bash
|
|
35
|
+
npm install -g @hagicode/cli
|
|
36
|
+
hagi --help
|
|
37
|
+
```
|
|
45
38
|
|
|
46
|
-
|
|
39
|
+
## Quick Start
|
|
47
40
|
|
|
48
|
-
|
|
49
|
-
2. Add at least one release note category label:
|
|
50
|
-
- `breaking-change` for breaking release note callouts
|
|
51
|
-
- `feature` or `enhancement` for the `Features` section
|
|
52
|
-
- `bug` for the `Fixes` section
|
|
53
|
-
- `docs` or `documentation` for the `Documentation` section
|
|
54
|
-
- `chore` or `dependencies` for the `Maintenance` section
|
|
55
|
-
3. Add `skip-changelog` only when the PR should stay out of the draft notes entirely, such as pure CI noise or internal housekeeping.
|
|
56
|
-
4. Merge the labeled PR into `main`, or update the PR while it is open.
|
|
57
|
-
5. Let Release Drafter refresh the GitHub draft release name, tag, and categorized notes.
|
|
58
|
-
6. Review the draft release in GitHub before creating the next stable tag.
|
|
41
|
+
The examples below use `hagi ...` after the package is available on your `PATH`. For one-off execution, replace `hagi` with `npx @hagicode/cli`.
|
|
59
42
|
|
|
60
|
-
|
|
43
|
+
```bash
|
|
44
|
+
hagi --help
|
|
45
|
+
hagi project list --json
|
|
46
|
+
hagi proposal list --json
|
|
47
|
+
hagi vault list --json
|
|
48
|
+
hagi chat list --json
|
|
49
|
+
hagi autotask create --title "Auto commit" --project-id <project-id> --prompt-id auto-compose-commit.en-US
|
|
50
|
+
```
|
|
61
51
|
|
|
62
|
-
|
|
52
|
+
## Embedded Skills
|
|
63
53
|
|
|
64
|
-
|
|
65
|
-
The following planned release labels were still missing and should be created before maintainers rely on the full contract:
|
|
54
|
+
If you are integrating Hagi CLI into an agent workflow, start from the embedded skill package in this repository:
|
|
66
55
|
|
|
67
|
-
- `
|
|
68
|
-
- `
|
|
69
|
-
- `
|
|
70
|
-
- `breaking-change`
|
|
71
|
-
- `feature`
|
|
72
|
-
- `docs`
|
|
73
|
-
- `chore`
|
|
74
|
-
- `dependencies`
|
|
75
|
-
- `skip-changelog`
|
|
56
|
+
- [`skills/README.md`](skills/README.md) - repository-level discovery entrypoint
|
|
57
|
+
- [`skills/hagi/SKILL.md`](skills/hagi/SKILL.md) - canonical Hagi skill contract
|
|
58
|
+
- [`skills/hagi/references/`](skills/hagi/references/) - focused package usage, proposal flow, maintainer, and validation guidance
|
|
76
59
|
|
|
77
|
-
|
|
60
|
+
`repos/cli/skills/**` is the canonical writable source for future Hagi skill updates.
|
|
61
|
+
`repos/skills/**` remains a historical/reference-only mirror during this consolidation.
|
|
78
62
|
|
|
79
|
-
|
|
63
|
+
Repository-local `npm run dev -- ...` and `node ./dist/cli.js ...` commands stay in the maintainer section below.
|
|
80
64
|
|
|
81
|
-
|
|
82
|
-
2. Add a Trusted Publisher for the GitHub repository `HagiCode-org/cli`.
|
|
83
|
-
3. Set the workflow file to `.github/workflows/npm-publish.yml`.
|
|
84
|
-
4. Keep the package access level public so `npm publish --access public` can succeed.
|
|
65
|
+
## Shared Runtime Flags
|
|
85
66
|
|
|
86
|
-
|
|
67
|
+
Every command family supports the same global runtime flags:
|
|
87
68
|
|
|
88
|
-
|
|
69
|
+
- `--base-url <url>`
|
|
70
|
+
- `--token <token>`
|
|
71
|
+
- `--lang <lang>`
|
|
72
|
+
- `--json`
|
|
89
73
|
|
|
90
|
-
|
|
74
|
+
Example:
|
|
91
75
|
|
|
92
76
|
```bash
|
|
93
|
-
|
|
94
|
-
version="$(npm run --silent publish:verify-release -- v0.1.0)"
|
|
95
|
-
npm version --no-git-tag-version "$version"
|
|
96
|
-
npm run build
|
|
97
|
-
npm run typecheck
|
|
98
|
-
npm test
|
|
99
|
-
npm run pack:check
|
|
77
|
+
hagi --base-url https://api.example.com --token "$HAGI_TOKEN" project list --json
|
|
100
78
|
```
|
|
101
79
|
|
|
102
|
-
|
|
103
|
-
`pack:check` runs `npm pack --dry-run --json` and rejects missing bundled entrypoints, `.map` files, and legacy source-mirrored output such as `dist/runtime/**` or `dist/generated/api/models/**`.
|
|
104
|
-
`publish:resolve-dev-version` derives the CI-only prerelease version used for `main` branch publishes, for example `0.1.0-dev.<run>.<attempt>.<sha>`.
|
|
80
|
+
## Command Overview
|
|
105
81
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
The CLI resolves runtime settings centrally before every command. Explicit flags always override environment variables.
|
|
82
|
+
```text
|
|
83
|
+
hagi
|
|
84
|
+
|-- project list | create | update | delete
|
|
85
|
+
|-- proposal list | create | generate-name | optimize-description | generate | annotate | execute | archive | status | complete | send
|
|
86
|
+
|-- vault list | create | update | delete
|
|
87
|
+
| `-- files list | preview
|
|
88
|
+
|-- chat list | create | archive | delete | send
|
|
89
|
+
`-- autotask create | send
|
|
90
|
+
```
|
|
117
91
|
|
|
118
|
-
|
|
119
|
-
| --- | --- |
|
|
120
|
-
| `HAGI_API_BASE_URL` | Backend base URL. Defaults to `http://127.0.0.1:35168` when unset. |
|
|
121
|
-
| `HAGI_API_TOKEN` | Bearer token attached as `Authorization: Bearer <token>`. |
|
|
122
|
-
| `HAGI_API_LANG` | Shared `Accept-Language` header value. |
|
|
92
|
+
## Project Commands
|
|
123
93
|
|
|
124
|
-
|
|
94
|
+
List projects through the aggregation endpoint:
|
|
125
95
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
## Generate the API Client
|
|
96
|
+
```bash
|
|
97
|
+
hagi project list
|
|
98
|
+
hagi project list --json
|
|
99
|
+
```
|
|
132
100
|
|
|
133
|
-
|
|
101
|
+
Create a project:
|
|
134
102
|
|
|
135
103
|
```bash
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
104
|
+
hagi project create \
|
|
105
|
+
--name "CLI Demo" \
|
|
106
|
+
--path /workspace/cli-demo \
|
|
107
|
+
--description "Automation sandbox"
|
|
139
108
|
```
|
|
140
109
|
|
|
141
|
-
|
|
110
|
+
Update only part of a project record. The CLI resolves current project data first so omitted fields are preserved:
|
|
142
111
|
|
|
143
|
-
|
|
112
|
+
```bash
|
|
113
|
+
hagi project update --id <project-id> --description "Updated description"
|
|
114
|
+
hagi project update --id <project-id> --name "Renamed project" --path /workspace/new-path
|
|
115
|
+
```
|
|
144
116
|
|
|
145
|
-
|
|
117
|
+
Delete a project:
|
|
146
118
|
|
|
147
|
-
|
|
119
|
+
```bash
|
|
120
|
+
hagi project delete --id <project-id>
|
|
121
|
+
```
|
|
148
122
|
|
|
149
123
|
## Proposal Commands
|
|
150
124
|
|
|
151
|
-
|
|
125
|
+
List proposal sessions:
|
|
152
126
|
|
|
153
127
|
```bash
|
|
154
128
|
hagi proposal list --project-id <project-id>
|
|
155
129
|
hagi proposal list --include-archived --json
|
|
156
130
|
```
|
|
157
131
|
|
|
158
|
-
|
|
132
|
+
Create a proposal session only:
|
|
159
133
|
|
|
160
134
|
```bash
|
|
161
135
|
hagi proposal create \
|
|
162
136
|
--project-id <project-id> \
|
|
163
|
-
--chief-complaint "Add
|
|
137
|
+
--chief-complaint "Add CLI completion for session workflows" \
|
|
164
138
|
--default-title
|
|
165
139
|
```
|
|
166
140
|
|
|
167
|
-
|
|
141
|
+
Generate a proposal name explicitly:
|
|
168
142
|
|
|
169
143
|
```bash
|
|
170
144
|
hagi proposal generate-name --session-id <session-id>
|
|
171
145
|
```
|
|
172
146
|
|
|
173
|
-
|
|
147
|
+
Optimize the description explicitly:
|
|
174
148
|
|
|
175
149
|
```bash
|
|
176
|
-
hagi proposal
|
|
177
|
-
|
|
150
|
+
hagi proposal optimize-description \
|
|
151
|
+
--session-id <session-id> \
|
|
152
|
+
--description "Improve the proposal framing" \
|
|
153
|
+
--optimization-direction "Focus on implementation risk"
|
|
178
154
|
```
|
|
179
155
|
|
|
180
|
-
|
|
156
|
+
Generate and execute the proposal as separate steps:
|
|
181
157
|
|
|
182
158
|
```bash
|
|
159
|
+
hagi proposal generate --session-id <session-id> --enable-explore-mode
|
|
183
160
|
hagi proposal execute --session-id <session-id>
|
|
184
161
|
```
|
|
185
162
|
|
|
186
|
-
|
|
163
|
+
Submit structured annotation payloads from a file or stdin:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
hagi proposal annotate --session-id <session-id> --input annotations.json
|
|
167
|
+
cat annotations.json | hagi proposal annotate --session-id <session-id> --input - --json
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Archive, update status, complete, or send a follow-up message:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
hagi proposal archive --session-id <session-id> --hero-id <hero-id>
|
|
174
|
+
hagi proposal status --session-id <session-id> --status Reviewing
|
|
175
|
+
hagi proposal complete --session-id <session-id>
|
|
176
|
+
hagi proposal send --session-id <session-id> --content "Please continue"
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Explicit Lifecycle Sequence
|
|
187
180
|
|
|
188
181
|
The CLI keeps proposal lifecycle actions explicit and non-interactive:
|
|
189
182
|
|
|
190
183
|
1. `hagi proposal list`
|
|
191
184
|
2. `hagi proposal create`
|
|
192
185
|
3. `hagi proposal generate-name`
|
|
193
|
-
4. `hagi proposal
|
|
194
|
-
5. `hagi proposal
|
|
186
|
+
4. `hagi proposal optimize-description` (optional)
|
|
187
|
+
5. `hagi proposal generate`
|
|
188
|
+
6. `hagi proposal annotate` (optional review loop)
|
|
189
|
+
7. `hagi proposal execute`
|
|
190
|
+
8. `hagi proposal archive`
|
|
191
|
+
9. `hagi proposal complete`
|
|
192
|
+
|
|
193
|
+
Each command maps to one backend action. The CLI may suggest a next command, but it never chains later lifecycle APIs automatically.
|
|
194
|
+
|
|
195
|
+
## Vault Commands
|
|
196
|
+
|
|
197
|
+
List registered vaults:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
hagi vault list
|
|
201
|
+
hagi vault list --json
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Create a vault with typed options:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
hagi vault create \
|
|
208
|
+
--name "Main Notes" \
|
|
209
|
+
--type obsidian \
|
|
210
|
+
--physical-path /vaults/main \
|
|
211
|
+
--git-url https://github.com/acme/notes.git
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Update only part of a vault record. The CLI resolves the current vault snapshot first so omitted fields are preserved:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
hagi vault update --id <vault-id> --name "Renamed Vault"
|
|
218
|
+
hagi vault update --id <vault-id> --physical-path /vaults/new-home --git-url https://github.com/acme/notes.git
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Delete a vault and optionally request backend cleanup of local files:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
hagi vault delete --id <vault-id>
|
|
225
|
+
hagi vault delete --id <vault-id> --delete-local-files --json
|
|
226
|
+
```
|
|
195
227
|
|
|
196
|
-
|
|
228
|
+
Browse vault files and preview supported content:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
hagi vault files list --id <vault-id>
|
|
232
|
+
hagi vault files list --id <vault-id> --path docs --json
|
|
233
|
+
hagi vault files preview --id <vault-id> --path docs/readme.md
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Chat Commands
|
|
237
|
+
|
|
238
|
+
List chat sessions:
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
hagi chat list --active-only
|
|
242
|
+
hagi chat list --include-archived --json
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Create a chat session:
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
hagi chat create \
|
|
249
|
+
--title "Repository Q&A" \
|
|
250
|
+
--project-id <project-id> \
|
|
251
|
+
--executor-type CodexCli
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Archive, delete, or send a message:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
hagi chat archive --session-id <session-id>
|
|
258
|
+
hagi chat delete --session-id <session-id>
|
|
259
|
+
hagi chat send --session-id <session-id> --content "Summarize the current diff"
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
## AutoTask Commands
|
|
263
|
+
|
|
264
|
+
Create an AutoTask session with package-first automation flags:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
hagi autotask create \
|
|
268
|
+
--title "Auto compose commit" \
|
|
269
|
+
--project-id <project-id> \
|
|
270
|
+
--prompt-id auto-compose-commit.en-US \
|
|
271
|
+
--repository-path repos/cli \
|
|
272
|
+
--need-push \
|
|
273
|
+
--target-branch-mode new-custom \
|
|
274
|
+
--target-branch-name feature/cli-completion \
|
|
275
|
+
--script-key autotask.auto-compose-commit
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Send a follow-up message to an AutoTask session:
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
hagi autotask send --session-id <session-id> --content "Retry with a smaller diff"
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## Maintainer Workflow (`repos/cli` only)
|
|
285
|
+
|
|
286
|
+
Use the commands in this section only when you are editing or validating the CLI source tree inside this repository.
|
|
287
|
+
Package consumers and automation should stay on `npx @hagicode/cli ...` or an installed `hagi ...` unless they are working on `repos/cli` itself.
|
|
288
|
+
|
|
289
|
+
Build the local repository output:
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
cd repos/cli
|
|
293
|
+
npm install
|
|
294
|
+
npm run build
|
|
295
|
+
node ./dist/cli.js --help
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
For local development without building:
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
cd repos/cli
|
|
302
|
+
npm run dev -- proposal list --json
|
|
303
|
+
npm run dev -- chat list --json
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## Release Automation
|
|
307
|
+
|
|
308
|
+
`repos/cli/.github/workflows/release-drafter.yml` maintains the next GitHub draft release for `@hagicode/cli`.
|
|
309
|
+
`repos/cli/.github/workflows/npm-publish.yml` publishes two channels with GitHub Actions OIDC plus provenance:
|
|
310
|
+
|
|
311
|
+
- pushes to `main` publish a unique development prerelease under the npm `dev` dist-tag
|
|
312
|
+
- published GitHub Releases for strict `vX.Y.Z` tags publish the stable package under the npm `latest` dist-tag
|
|
313
|
+
|
|
314
|
+
### Local Release Verification
|
|
315
|
+
|
|
316
|
+
Run the stable release gates locally before publishing a GitHub Release:
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
cd repos/cli
|
|
320
|
+
version="$(npm run --silent publish:verify-release -- v0.1.0)"
|
|
321
|
+
npm version --no-git-tag-version "$version"
|
|
322
|
+
npm run build
|
|
323
|
+
npm run typecheck
|
|
324
|
+
npm test
|
|
325
|
+
npm run pack:check
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
## Environment Variables
|
|
329
|
+
|
|
330
|
+
The CLI resolves runtime settings centrally before every command. Explicit flags always override environment variables.
|
|
331
|
+
|
|
332
|
+
| Variable | Purpose |
|
|
333
|
+
| --- | --- |
|
|
334
|
+
| `HAGI_API_BASE_URL` | Backend base URL. Defaults to `http://127.0.0.1:35168` when unset. |
|
|
335
|
+
| `HAGI_API_TOKEN` | Bearer token attached as `Authorization: Bearer <token>`. |
|
|
336
|
+
| `HAGI_API_LANG` | Shared `Accept-Language` header value. |
|
|
337
|
+
|
|
338
|
+
## Generate the API Client
|
|
339
|
+
|
|
340
|
+
The CLI owns its own OpenAPI configuration in `openapi-ts.config.json`.
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
cd repos/cli
|
|
344
|
+
npm run generate:api
|
|
345
|
+
npm run generate:api:once
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
Default Swagger source:
|
|
349
|
+
|
|
350
|
+
- `http://127.0.0.1:35168/swagger/v1/swagger.json`
|
|
197
351
|
|
|
198
352
|
## Exit Codes
|
|
199
353
|
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
var Ht=Object.create,gt=Object.defineProperty,Ft=Object.getOwnPropertyDescriptor,qt=Object.getOwnPropertyNames,kt=Object.getPrototypeOf,Rt=Object.prototype.hasOwnProperty,U=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Ut=(t,e,u,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(var i=qt(e),r=0,a=i.length,c;r<a;r++)c=i[r],!Rt.call(t,c)&&c!==u&>(t,c,{get:(h=>e[h]).bind(null,c),enumerable:!(o=Ft(e,c))||o.enumerable});return t},Lt=(t,e,u)=>(u=t!=null?Ht(kt(t)):{},Ut(e||!t||!t.__esModule?gt(u,"default",{value:t,enumerable:!0}):u,t));let Gt=require("node:process"),Bt=require("node:fs/promises");var Q=U((t=>{var e=class extends Error{constructor(o,i,r){super(r),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=i,this.exitCode=o,this.nestedError=void 0}},u=class extends e{constructor(o){super(1,"commander.invalidArgument",o),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};t.CommanderError=e,t.InvalidArgumentError=u})),st=U((t=>{var{InvalidArgumentError:e}=Q(),u=class{constructor(i,r){switch(this.description=r||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,i[0]){case"<":this.required=!0,this._name=i.slice(1,-1);break;case"[":this.required=!1,this._name=i.slice(1,-1);break;default:this.required=!0,this._name=i;break}this._name.endsWith("...")&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_collectValue(i,r){return r===this.defaultValue||!Array.isArray(r)?[i]:(r.push(i),r)}default(i,r){return this.defaultValue=i,this.defaultValueDescription=r,this}argParser(i){return this.parseArg=i,this}choices(i){return this.argChoices=i.slice(),this.parseArg=(r,a)=>{if(!this.argChoices.includes(r))throw new e(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(r,a):r},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function o(i){const r=i.name()+(i.variadic===!0?"...":"");return i.required?"<"+r+">":"["+r+"]"}t.Argument=u,t.humanReadableArgName=o})),vt=U((t=>{var{humanReadableArgName:e}=st(),u=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(i){this.helpWidth=this.helpWidth??i.helpWidth??80}visibleCommands(i){const r=i.commands.filter(c=>!c._hidden),a=i._getHelpCommand();return a&&!a._hidden&&r.push(a),this.sortSubcommands&&r.sort((c,h)=>c.name().localeCompare(h.name())),r}compareOptions(i,r){const a=c=>c.short?c.short.replace(/^-/,""):c.long.replace(/^--/,"");return a(i).localeCompare(a(r))}visibleOptions(i){const r=i.options.filter(c=>!c.hidden),a=i._getHelpOption();if(a&&!a.hidden){const c=a.short&&i._findOption(a.short),h=a.long&&i._findOption(a.long);!c&&!h?r.push(a):a.long&&!h?r.push(i.createOption(a.long,a.description)):a.short&&!c&&r.push(i.createOption(a.short,a.description))}return this.sortOptions&&r.sort(this.compareOptions),r}visibleGlobalOptions(i){if(!this.showGlobalOptions)return[];const r=[];for(let a=i.parent;a;a=a.parent){const c=a.options.filter(h=>!h.hidden);r.push(...c)}return this.sortOptions&&r.sort(this.compareOptions),r}visibleArguments(i){return i._argsDescription&&i.registeredArguments.forEach(r=>{r.description=r.description||i._argsDescription[r.name()]||""}),i.registeredArguments.find(r=>r.description)?i.registeredArguments:[]}subcommandTerm(i){const r=i.registeredArguments.map(a=>e(a)).join(" ");return i._name+(i._aliases[0]?"|"+i._aliases[0]:"")+(i.options.length?" [options]":"")+(r?" "+r:"")}optionTerm(i){return i.flags}argumentTerm(i){return i.name()}longestSubcommandTermLength(i,r){return r.visibleCommands(i).reduce((a,c)=>Math.max(a,this.displayWidth(r.styleSubcommandTerm(r.subcommandTerm(c)))),0)}longestOptionTermLength(i,r){return r.visibleOptions(i).reduce((a,c)=>Math.max(a,this.displayWidth(r.styleOptionTerm(r.optionTerm(c)))),0)}longestGlobalOptionTermLength(i,r){return r.visibleGlobalOptions(i).reduce((a,c)=>Math.max(a,this.displayWidth(r.styleOptionTerm(r.optionTerm(c)))),0)}longestArgumentTermLength(i,r){return r.visibleArguments(i).reduce((a,c)=>Math.max(a,this.displayWidth(r.styleArgumentTerm(r.argumentTerm(c)))),0)}commandUsage(i){let r=i._name;i._aliases[0]&&(r=r+"|"+i._aliases[0]);let a="";for(let c=i.parent;c;c=c.parent)a=c.name()+" "+a;return a+r+" "+i.usage()}commandDescription(i){return i.description()}subcommandDescription(i){return i.summary()||i.description()}optionDescription(i){const r=[];if(i.argChoices&&r.push(`choices: ${i.argChoices.map(a=>JSON.stringify(a)).join(", ")}`),i.defaultValue!==void 0&&(i.required||i.optional||i.isBoolean()&&typeof i.defaultValue=="boolean")&&r.push(`default: ${i.defaultValueDescription||JSON.stringify(i.defaultValue)}`),i.presetArg!==void 0&&i.optional&&r.push(`preset: ${JSON.stringify(i.presetArg)}`),i.envVar!==void 0&&r.push(`env: ${i.envVar}`),r.length>0){const a=`(${r.join(", ")})`;return i.description?`${i.description} ${a}`:a}return i.description}argumentDescription(i){const r=[];if(i.argChoices&&r.push(`choices: ${i.argChoices.map(a=>JSON.stringify(a)).join(", ")}`),i.defaultValue!==void 0&&r.push(`default: ${i.defaultValueDescription||JSON.stringify(i.defaultValue)}`),r.length>0){const a=`(${r.join(", ")})`;return i.description?`${i.description} ${a}`:a}return i.description}formatItemList(i,r,a){return r.length===0?[]:[a.styleTitle(i),...r,""]}groupItems(i,r,a){const c=new Map;return i.forEach(h=>{const O=a(h);c.has(O)||c.set(O,[])}),r.forEach(h=>{const O=a(h);c.has(O)||c.set(O,[]),c.get(O).push(h)}),c}formatHelp(i,r){const a=r.padWidth(i,r),c=r.helpWidth??80;function h(_,j){return r.formatItem(_,a,j,r)}let O=[`${r.styleTitle("Usage:")} ${r.styleUsage(r.commandUsage(i))}`,""];const A=r.commandDescription(i);A.length>0&&(O=O.concat([r.boxWrap(r.styleCommandDescription(A),c),""]));const C=r.visibleArguments(i).map(_=>h(r.styleArgumentTerm(r.argumentTerm(_)),r.styleArgumentDescription(r.argumentDescription(_))));if(O=O.concat(this.formatItemList("Arguments:",C,r)),this.groupItems(i.options,r.visibleOptions(i),_=>_.helpGroupHeading??"Options:").forEach((_,j)=>{const q=_.map(F=>h(r.styleOptionTerm(r.optionTerm(F)),r.styleOptionDescription(r.optionDescription(F))));O=O.concat(this.formatItemList(j,q,r))}),r.showGlobalOptions){const _=r.visibleGlobalOptions(i).map(j=>h(r.styleOptionTerm(r.optionTerm(j)),r.styleOptionDescription(r.optionDescription(j))));O=O.concat(this.formatItemList("Global Options:",_,r))}return this.groupItems(i.commands,r.visibleCommands(i),_=>_.helpGroup()||"Commands:").forEach((_,j)=>{const q=_.map(F=>h(r.styleSubcommandTerm(r.subcommandTerm(F)),r.styleSubcommandDescription(r.subcommandDescription(F))));O=O.concat(this.formatItemList(j,q,r))}),O.join(`
|
|
2
|
+
`)}displayWidth(i){return o(i).length}styleTitle(i){return i}styleUsage(i){return i.split(" ").map(r=>r==="[options]"?this.styleOptionText(r):r==="[command]"?this.styleSubcommandText(r):r[0]==="["||r[0]==="<"?this.styleArgumentText(r):this.styleCommandText(r)).join(" ")}styleCommandDescription(i){return this.styleDescriptionText(i)}styleOptionDescription(i){return this.styleDescriptionText(i)}styleSubcommandDescription(i){return this.styleDescriptionText(i)}styleArgumentDescription(i){return this.styleDescriptionText(i)}styleDescriptionText(i){return i}styleOptionTerm(i){return this.styleOptionText(i)}styleSubcommandTerm(i){return i.split(" ").map(r=>r==="[options]"?this.styleOptionText(r):r[0]==="["||r[0]==="<"?this.styleArgumentText(r):this.styleSubcommandText(r)).join(" ")}styleArgumentTerm(i){return this.styleArgumentText(i)}styleOptionText(i){return i}styleArgumentText(i){return i}styleSubcommandText(i){return i}styleCommandText(i){return i}padWidth(i,r){return Math.max(r.longestOptionTermLength(i,r),r.longestGlobalOptionTermLength(i,r),r.longestSubcommandTermLength(i,r),r.longestArgumentTermLength(i,r))}preformatted(i){return/\n[^\S\r\n]/.test(i)}formatItem(i,r,a,c){const O=" ".repeat(2);if(!a)return O+i;const A=i.padEnd(r+i.length-c.displayWidth(i)),C=2,_=(this.helpWidth??80)-r-C-2;let j;return _<this.minWidthToWrap||c.preformatted(a)?j=a:j=c.boxWrap(a,_).replace(/\n/g,`
|
|
3
|
+
`+" ".repeat(r+C)),O+A+" ".repeat(C)+j.replace(/\n/g,`
|
|
4
|
+
${O}`)}boxWrap(i,r){if(r<this.minWidthToWrap)return i;const a=i.split(/\r\n|\n/),c=/[\s]*[^\s]+/g,h=[];return a.forEach(O=>{const A=O.match(c);if(A===null){h.push("");return}let C=[A.shift()],_=this.displayWidth(C[0]);A.forEach(j=>{const q=this.displayWidth(j);if(_+q<=r){C.push(j),_+=q;return}h.push(C.join(""));const F=j.trimStart();C=[F],_=this.displayWidth(F)}),h.push(C.join(""))}),h.join(`
|
|
5
|
+
`)}};function o(i){return i.replace(/\x1b\[\d*(;\d*)*m/g,"")}t.Help=u,t.stripColor=o})),Ot=U((t=>{var{InvalidArgumentError:e}=Q(),u=class{constructor(a,c){this.flags=a,this.description=c||"",this.required=a.includes("<"),this.optional=a.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(a),this.mandatory=!1;const h=r(a);this.short=h.shortFlag,this.long=h.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(a,c){return this.defaultValue=a,this.defaultValueDescription=c,this}preset(a){return this.presetArg=a,this}conflicts(a){return this.conflictsWith=this.conflictsWith.concat(a),this}implies(a){let c=a;return typeof a=="string"&&(c={[a]:!0}),this.implied=Object.assign(this.implied||{},c),this}env(a){return this.envVar=a,this}argParser(a){return this.parseArg=a,this}makeOptionMandatory(a=!0){return this.mandatory=!!a,this}hideHelp(a=!0){return this.hidden=!!a,this}_collectValue(a,c){return c===this.defaultValue||!Array.isArray(c)?[a]:(c.push(a),c)}choices(a){return this.argChoices=a.slice(),this.parseArg=(c,h)=>{if(!this.argChoices.includes(c))throw new e(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(c,h):c},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?i(this.name().replace(/^no-/,"")):i(this.name())}helpGroup(a){return this.helpGroupHeading=a,this}is(a){return this.short===a||this.long===a}isBoolean(){return!this.required&&!this.optional&&!this.negate}},o=class{constructor(a){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,a.forEach(c=>{c.negate?this.negativeOptions.set(c.attributeName(),c):this.positiveOptions.set(c.attributeName(),c)}),this.negativeOptions.forEach((c,h)=>{this.positiveOptions.has(h)&&this.dualOptions.add(h)})}valueFromOption(a,c){const h=c.attributeName();if(!this.dualOptions.has(h))return!0;const O=this.negativeOptions.get(h).presetArg,A=O!==void 0?O:!1;return c.negate===(A===a)}};function i(a){return a.split("-").reduce((c,h)=>c+h[0].toUpperCase()+h.slice(1))}function r(a){let c,h;const O=/^-[^-]$/,A=/^--[^-]/,C=a.split(/[ |,]+/).concat("guard");if(O.test(C[0])&&(c=C.shift()),A.test(C[0])&&(h=C.shift()),!c&&O.test(C[0])&&(c=C.shift()),!c&&A.test(C[0])&&(c=h,h=C.shift()),C[0].startsWith("-")){const _=C[0],j=`option creation failed due to '${_}' in option flags '${a}'`;throw/^-[^-][^-]/.test(_)?new Error(`${j}
|
|
6
|
+
- a short flag is a single dash and a single character
|
|
7
|
+
- either use a single dash and a single character (for a short flag)
|
|
8
|
+
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`):O.test(_)?new Error(`${j}
|
|
9
|
+
- too many short flags`):A.test(_)?new Error(`${j}
|
|
10
|
+
- too many long flags`):new Error(`${j}
|
|
11
|
+
- unrecognised flag format`)}if(c===void 0&&h===void 0)throw new Error(`option creation failed due to no flags found in '${a}'.`);return{shortFlag:c,longFlag:h}}t.Option=u,t.DualOptions=o})),Wt=U((t=>{var e=3;function u(i,r){if(Math.abs(i.length-r.length)>e)return Math.max(i.length,r.length);const a=[];for(let c=0;c<=i.length;c++)a[c]=[c];for(let c=0;c<=r.length;c++)a[0][c]=c;for(let c=1;c<=r.length;c++)for(let h=1;h<=i.length;h++){let O=1;i[h-1]===r[c-1]?O=0:O=1,a[h][c]=Math.min(a[h-1][c]+1,a[h][c-1]+1,a[h-1][c-1]+O),h>1&&c>1&&i[h-1]===r[c-2]&&i[h-2]===r[c-1]&&(a[h][c]=Math.min(a[h][c],a[h-2][c-2]+1))}return a[i.length][r.length]}function o(i,r){if(!r||r.length===0)return"";r=Array.from(new Set(r));const a=i.startsWith("--");a&&(i=i.slice(2),r=r.map(A=>A.slice(2)));let c=[],h=e;const O=.4;return r.forEach(A=>{if(A.length<=1)return;const C=u(i,A),_=Math.max(i.length,A.length);(_-C)/_>O&&(C<h?(h=C,c=[A]):C===h&&c.push(A))}),c.sort((A,C)=>A.localeCompare(C)),a&&(c=c.map(A=>`--${A}`)),c.length>1?`
|
|
12
|
+
(Did you mean one of ${c.join(", ")}?)`:c.length===1?`
|
|
13
|
+
(Did you mean ${c[0]}?)`:""}t.suggestSimilar=o})),Mt=U((t=>{var e=require("node:events").EventEmitter,u=require("node:child_process"),o=require("node:path"),i=require("node:fs"),r=require("node:process"),{Argument:a,humanReadableArgName:c}=st(),{CommanderError:h}=Q(),{Help:O,stripColor:A}=vt(),{Option:C,DualOptions:_}=Ot(),{suggestSimilar:j}=Wt(),q=class yt extends e{constructor(s){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=s||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:n=>r.stdout.write(n),writeErr:n=>r.stderr.write(n),outputError:(n,l)=>l(n),getOutHelpWidth:()=>r.stdout.isTTY?r.stdout.columns:void 0,getErrHelpWidth:()=>r.stderr.isTTY?r.stderr.columns:void 0,getOutHasColors:()=>Z()??(r.stdout.isTTY&&r.stdout.hasColors?.()),getErrHasColors:()=>Z()??(r.stderr.isTTY&&r.stderr.hasColors?.()),stripColor:n=>A(n)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(s){return this._outputConfiguration=s._outputConfiguration,this._helpOption=s._helpOption,this._helpCommand=s._helpCommand,this._helpConfiguration=s._helpConfiguration,this._exitCallback=s._exitCallback,this._storeOptionsAsProperties=s._storeOptionsAsProperties,this._combineFlagAndOptionalValue=s._combineFlagAndOptionalValue,this._allowExcessArguments=s._allowExcessArguments,this._enablePositionalOptions=s._enablePositionalOptions,this._showHelpAfterError=s._showHelpAfterError,this._showSuggestionAfterError=s._showSuggestionAfterError,this}_getCommandAndAncestors(){const s=[];for(let n=this;n;n=n.parent)s.push(n);return s}command(s,n,l){let d=n,p=l;typeof d=="object"&&d!==null&&(p=d,d=null),p=p||{};const[,m,y]=s.match(/([^ ]+) *(.*)/),S=this.createCommand(m);return d&&(S.description(d),S._executableHandler=!0),p.isDefault&&(this._defaultCommandName=S._name),S._hidden=!!(p.noHelp||p.hidden),S._executableFile=p.executableFile||null,y&&S.arguments(y),this._registerCommand(S),S.parent=this,S.copyInheritedSettings(this),d?this:S}createCommand(s){return new yt(s)}createHelp(){return Object.assign(new O,this.configureHelp())}configureHelp(s){return s===void 0?this._helpConfiguration:(this._helpConfiguration=s,this)}configureOutput(s){return s===void 0?this._outputConfiguration:(this._outputConfiguration={...this._outputConfiguration,...s},this)}showHelpAfterError(s=!0){return typeof s!="string"&&(s=!!s),this._showHelpAfterError=s,this}showSuggestionAfterError(s=!0){return this._showSuggestionAfterError=!!s,this}addCommand(s,n){if(!s._name)throw new Error(`Command passed to .addCommand() must have a name
|
|
14
|
+
- specify the name in Command constructor or using .name()`);return n=n||{},n.isDefault&&(this._defaultCommandName=s._name),(n.noHelp||n.hidden)&&(s._hidden=!0),this._registerCommand(s),s.parent=this,s._checkForBrokenPassThrough(),this}createArgument(s,n){return new a(s,n)}argument(s,n,l,d){const p=this.createArgument(s,n);return typeof l=="function"?p.default(d).argParser(l):p.default(l),this.addArgument(p),this}arguments(s){return s.trim().split(/ +/).forEach(n=>{this.argument(n)}),this}addArgument(s){const n=this.registeredArguments.slice(-1)[0];if(n?.variadic)throw new Error(`only the last argument can be variadic '${n.name()}'`);if(s.required&&s.defaultValue!==void 0&&s.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${s.name()}'`);return this.registeredArguments.push(s),this}helpCommand(s,n){if(typeof s=="boolean")return this._addImplicitHelpCommand=s,s&&this._defaultCommandGroup&&this._initCommandGroup(this._getHelpCommand()),this;const[,l,d]=(s??"help [command]").match(/([^ ]+) *(.*)/),p=n??"display help for command",m=this.createCommand(l);return m.helpOption(!1),d&&m.arguments(d),p&&m.description(p),this._addImplicitHelpCommand=!0,this._helpCommand=m,(s||n)&&this._initCommandGroup(m),this}addHelpCommand(s,n){return typeof s!="object"?(this.helpCommand(s,n),this):(this._addImplicitHelpCommand=!0,this._helpCommand=s,this._initCommandGroup(s),this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(s,n){const l=["preSubcommand","preAction","postAction"];if(!l.includes(s))throw new Error(`Unexpected value for event passed to hook : '${s}'.
|
|
15
|
+
Expecting one of '${l.join("', '")}'`);return this._lifeCycleHooks[s]?this._lifeCycleHooks[s].push(n):this._lifeCycleHooks[s]=[n],this}exitOverride(s){return s?this._exitCallback=s:this._exitCallback=n=>{if(n.code!=="commander.executeSubCommandAsync")throw n},this}_exit(s,n,l){this._exitCallback&&this._exitCallback(new h(s,n,l)),r.exit(s)}action(s){const n=l=>{const d=this.registeredArguments.length,p=l.slice(0,d);return this._storeOptionsAsProperties?p[d]=this:p[d]=this.opts(),p.push(this),s.apply(this,p)};return this._actionHandler=n,this}createOption(s,n){return new C(s,n)}_callParseArg(s,n,l,d){try{return s.parseArg(n,l)}catch(p){if(p.code==="commander.invalidArgument"){const m=`${d} ${p.message}`;this.error(m,{exitCode:p.exitCode,code:p.code})}throw p}}_registerOption(s){const n=s.short&&this._findOption(s.short)||s.long&&this._findOption(s.long);if(n){const l=s.long&&this._findOption(s.long)?s.long:s.short;throw new Error(`Cannot add option '${s.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${l}'
|
|
16
|
+
- already used by option '${n.flags}'`)}this._initOptionGroup(s),this.options.push(s)}_registerCommand(s){const n=d=>[d.name()].concat(d.aliases()),l=n(s).find(d=>this._findCommand(d));if(l){const d=n(this._findCommand(l)).join("|"),p=n(s).join("|");throw new Error(`cannot add command '${p}' as already have command '${d}'`)}this._initCommandGroup(s),this.commands.push(s)}addOption(s){this._registerOption(s);const n=s.name(),l=s.attributeName();if(s.negate){const p=s.long.replace(/^--no-/,"--");this._findOption(p)||this.setOptionValueWithSource(l,s.defaultValue===void 0?!0:s.defaultValue,"default")}else s.defaultValue!==void 0&&this.setOptionValueWithSource(l,s.defaultValue,"default");const d=(p,m,y)=>{p==null&&s.presetArg!==void 0&&(p=s.presetArg);const S=this.getOptionValue(l);p!==null&&s.parseArg?p=this._callParseArg(s,p,S,m):p!==null&&s.variadic&&(p=s._collectValue(p,S)),p==null&&(s.negate?p=!1:s.isBoolean()||s.optional?p=!0:p=""),this.setOptionValueWithSource(l,p,y)};return this.on("option:"+n,p=>{d(p,`error: option '${s.flags}' argument '${p}' is invalid.`,"cli")}),s.envVar&&this.on("optionEnv:"+n,p=>{d(p,`error: option '${s.flags}' value '${p}' from env '${s.envVar}' is invalid.`,"env")}),this}_optionEx(s,n,l,d,p){if(typeof n=="object"&&n instanceof C)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");const m=this.createOption(n,l);if(m.makeOptionMandatory(!!s.mandatory),typeof d=="function")m.default(p).argParser(d);else if(d instanceof RegExp){const y=d;d=(S,x)=>{const f=y.exec(S);return f?f[0]:x},m.default(p).argParser(d)}else m.default(d);return this.addOption(m)}option(s,n,l,d){return this._optionEx({},s,n,l,d)}requiredOption(s,n,l,d){return this._optionEx({mandatory:!0},s,n,l,d)}combineFlagAndOptionalValue(s=!0){return this._combineFlagAndOptionalValue=!!s,this}allowUnknownOption(s=!0){return this._allowUnknownOption=!!s,this}allowExcessArguments(s=!0){return this._allowExcessArguments=!!s,this}enablePositionalOptions(s=!0){return this._enablePositionalOptions=!!s,this}passThroughOptions(s=!0){return this._passThroughOptions=!!s,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(s=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!s,this}getOptionValue(s){return this._storeOptionsAsProperties?this[s]:this._optionValues[s]}setOptionValue(s,n){return this.setOptionValueWithSource(s,n,void 0)}setOptionValueWithSource(s,n,l){return this._storeOptionsAsProperties?this[s]=n:this._optionValues[s]=n,this._optionValueSources[s]=l,this}getOptionValueSource(s){return this._optionValueSources[s]}getOptionValueSourceWithGlobals(s){let n;return this._getCommandAndAncestors().forEach(l=>{l.getOptionValueSource(s)!==void 0&&(n=l.getOptionValueSource(s))}),n}_prepareUserArgs(s,n){if(s!==void 0&&!Array.isArray(s))throw new Error("first parameter to parse must be array or undefined");if(n=n||{},s===void 0&&n.from===void 0){r.versions?.electron&&(n.from="electron");const d=r.execArgv??[];(d.includes("-e")||d.includes("--eval")||d.includes("-p")||d.includes("--print"))&&(n.from="eval")}s===void 0&&(s=r.argv),this.rawArgs=s.slice();let l;switch(n.from){case void 0:case"node":this._scriptPath=s[1],l=s.slice(2);break;case"electron":r.defaultApp?(this._scriptPath=s[1],l=s.slice(2)):l=s.slice(1);break;case"user":l=s.slice(0);break;case"eval":l=s.slice(1);break;default:throw new Error(`unexpected parse option { from: '${n.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",l}parse(s,n){this._prepareForParse();const l=this._prepareUserArgs(s,n);return this._parseCommand([],l),this}async parseAsync(s,n){this._prepareForParse();const l=this._prepareUserArgs(s,n);return await this._parseCommand([],l),this}_prepareForParse(){this._savedState===null?this.saveStateBeforeParse():this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw new Error(`Can not call parse again when storeOptionsAsProperties is true.
|
|
17
|
+
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(s,n,l){if(i.existsSync(s))return;const d=`'${s}' does not exist
|
|
18
|
+
- if '${l}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
19
|
+
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
20
|
+
- ${n?`searched for local subcommand relative to directory '${n}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory"}`;throw new Error(d)}_executeSubCommand(s,n){n=n.slice();let l=!1;const d=[".js",".ts",".tsx",".mjs",".cjs"];function p(f,b){const $=o.resolve(f,b);if(i.existsSync($))return $;if(d.includes(o.extname(b)))return;const pt=d.find(Nt=>i.existsSync(`${$}${Nt}`));if(pt)return`${$}${pt}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let m=s._executableFile||`${this._name}-${s._name}`,y=this._executableDir||"";if(this._scriptPath){let f;try{f=i.realpathSync(this._scriptPath)}catch{f=this._scriptPath}y=o.resolve(o.dirname(f),y)}if(y){let f=p(y,m);if(!f&&!s._executableFile&&this._scriptPath){const b=o.basename(this._scriptPath,o.extname(this._scriptPath));b!==this._name&&(f=p(y,`${b}-${s._name}`))}m=f||m}l=d.includes(o.extname(m));let S;r.platform!=="win32"?l?(n.unshift(m),n=F(r.execArgv).concat(n),S=u.spawn(r.argv[0],n,{stdio:"inherit"})):S=u.spawn(m,n,{stdio:"inherit"}):(this._checkForMissingExecutable(m,y,s._name),n.unshift(m),n=F(r.execArgv).concat(n),S=u.spawn(r.execPath,n,{stdio:"inherit"})),S.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(f=>{r.on(f,()=>{S.killed===!1&&S.exitCode===null&&S.kill(f)})});const x=this._exitCallback;S.on("close",f=>{f=f??1,x?x(new h(f,"commander.executeSubCommandAsync","(close)")):r.exit(f)}),S.on("error",f=>{if(f.code==="ENOENT")this._checkForMissingExecutable(m,y,s._name);else if(f.code==="EACCES")throw new Error(`'${m}' not executable`);if(!x)r.exit(1);else{const b=new h(1,"commander.executeSubCommandAsync","(error)");b.nestedError=f,x(b)}}),this.runningCommand=S}_dispatchSubcommand(s,n,l){const d=this._findCommand(s);d||this.help({error:!0}),d._prepareForParse();let p;return p=this._chainOrCallSubCommandHook(p,d,"preSubcommand"),p=this._chainOrCall(p,()=>{if(d._executableHandler)this._executeSubCommand(d,n.concat(l));else return d._parseCommand(n,l)}),p}_dispatchHelpCommand(s){s||this.help();const n=this._findCommand(s);return n&&!n._executableHandler&&n.help(),this._dispatchSubcommand(s,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((s,n)=>{s.required&&this.args[n]==null&&this.missingArgument(s.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){const s=(l,d,p)=>{let m=d;if(d!==null&&l.parseArg){const y=`error: command-argument value '${d}' is invalid for argument '${l.name()}'.`;m=this._callParseArg(l,d,p,y)}return m};this._checkNumberOfArguments();const n=[];this.registeredArguments.forEach((l,d)=>{let p=l.defaultValue;l.variadic?d<this.args.length?(p=this.args.slice(d),l.parseArg&&(p=p.reduce((m,y)=>s(l,y,m),l.defaultValue))):p===void 0&&(p=[]):d<this.args.length&&(p=this.args[d],l.parseArg&&(p=s(l,p,l.defaultValue))),n[d]=p}),this.processedArgs=n}_chainOrCall(s,n){return s?.then&&typeof s.then=="function"?s.then(()=>n()):n()}_chainOrCallHooks(s,n){let l=s;const d=[];return this._getCommandAndAncestors().reverse().filter(p=>p._lifeCycleHooks[n]!==void 0).forEach(p=>{p._lifeCycleHooks[n].forEach(m=>{d.push({hookedCommand:p,callback:m})})}),n==="postAction"&&d.reverse(),d.forEach(p=>{l=this._chainOrCall(l,()=>p.callback(p.hookedCommand,this))}),l}_chainOrCallSubCommandHook(s,n,l){let d=s;return this._lifeCycleHooks[l]!==void 0&&this._lifeCycleHooks[l].forEach(p=>{d=this._chainOrCall(d,()=>p(this,n))}),d}_parseCommand(s,n){const l=this.parseOptions(n);if(this._parseOptionsEnv(),this._parseOptionsImplied(),s=s.concat(l.operands),n=l.unknown,this.args=s.concat(n),s&&this._findCommand(s[0]))return this._dispatchSubcommand(s[0],s.slice(1),n);if(this._getHelpCommand()&&s[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(s[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(n),this._dispatchSubcommand(this._defaultCommandName,s,n);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(l.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();const d=()=>{l.unknown.length>0&&this.unknownOption(l.unknown[0])},p=`command:${this.name()}`;if(this._actionHandler){d(),this._processArguments();let m;return m=this._chainOrCallHooks(m,"preAction"),m=this._chainOrCall(m,()=>this._actionHandler(this.processedArgs)),this.parent&&(m=this._chainOrCall(m,()=>{this.parent.emit(p,s,n)})),m=this._chainOrCallHooks(m,"postAction"),m}if(this.parent?.listenerCount(p))d(),this._processArguments(),this.parent.emit(p,s,n);else if(s.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",s,n);this.listenerCount("command:*")?this.emit("command:*",s,n):this.commands.length?this.unknownCommand():(d(),this._processArguments())}else this.commands.length?(d(),this.help({error:!0})):(d(),this._processArguments())}_findCommand(s){if(s)return this.commands.find(n=>n._name===s||n._aliases.includes(s))}_findOption(s){return this.options.find(n=>n.is(s))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(s=>{s.options.forEach(n=>{n.mandatory&&s.getOptionValue(n.attributeName())===void 0&&s.missingMandatoryOptionValue(n)})})}_checkForConflictingLocalOptions(){const s=this.options.filter(n=>{const l=n.attributeName();return this.getOptionValue(l)===void 0?!1:this.getOptionValueSource(l)!=="default"});s.filter(n=>n.conflictsWith.length>0).forEach(n=>{const l=s.find(d=>n.conflictsWith.includes(d.attributeName()));l&&this._conflictingOption(n,l)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(s=>{s._checkForConflictingLocalOptions()})}parseOptions(s){const n=[],l=[];let d=n;function p(f){return f.length>1&&f[0]==="-"}const m=f=>/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(f)?!this._getCommandAndAncestors().some(b=>b.options.map($=>$.short).some($=>/^-\d$/.test($))):!1;let y=null,S=null,x=0;for(;x<s.length||S;){const f=S??s[x++];if(S=null,f==="--"){d===l&&d.push(f),d.push(...s.slice(x));break}if(y&&(!p(f)||m(f))){this.emit(`option:${y.name()}`,f);continue}if(y=null,p(f)){const b=this._findOption(f);if(b){if(b.required){const $=s[x++];$===void 0&&this.optionMissingArgument(b),this.emit(`option:${b.name()}`,$)}else if(b.optional){let $=null;x<s.length&&(!p(s[x])||m(s[x]))&&($=s[x++]),this.emit(`option:${b.name()}`,$)}else this.emit(`option:${b.name()}`);y=b.variadic?b:null;continue}}if(f.length>2&&f[0]==="-"&&f[1]!=="-"){const b=this._findOption(`-${f[1]}`);if(b){b.required||b.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${b.name()}`,f.slice(2)):(this.emit(`option:${b.name()}`),S=`-${f.slice(2)}`);continue}}if(/^--[^=]+=/.test(f)){const b=f.indexOf("="),$=this._findOption(f.slice(0,b));if($&&($.required||$.optional)){this.emit(`option:${$.name()}`,f.slice(b+1));continue}}if(d===n&&p(f)&&!(this.commands.length===0&&m(f))&&(d=l),(this._enablePositionalOptions||this._passThroughOptions)&&n.length===0&&l.length===0){if(this._findCommand(f)){n.push(f),l.push(...s.slice(x));break}else if(this._getHelpCommand()&&f===this._getHelpCommand().name()){n.push(f,...s.slice(x));break}else if(this._defaultCommandName){l.push(f,...s.slice(x));break}}if(this._passThroughOptions){d.push(f,...s.slice(x));break}d.push(f)}return{operands:n,unknown:l}}opts(){if(this._storeOptionsAsProperties){const s={},n=this.options.length;for(let l=0;l<n;l++){const d=this.options[l].attributeName();s[d]=d===this._versionOptionName?this._version:this[d]}return s}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((s,n)=>Object.assign(s,n.opts()),{})}error(s,n){this._outputConfiguration.outputError(`${s}
|
|
21
|
+
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
22
|
+
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
23
|
+
`),this.outputHelp({error:!0}));const l=n||{},d=l.exitCode||1,p=l.code||"commander.error";this._exit(d,p,s)}_parseOptionsEnv(){this.options.forEach(s=>{if(s.envVar&&s.envVar in r.env){const n=s.attributeName();(this.getOptionValue(n)===void 0||["default","config","env"].includes(this.getOptionValueSource(n)))&&(s.required||s.optional?this.emit(`optionEnv:${s.name()}`,r.env[s.envVar]):this.emit(`optionEnv:${s.name()}`))}})}_parseOptionsImplied(){const s=new _(this.options),n=l=>this.getOptionValue(l)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(l));this.options.filter(l=>l.implied!==void 0&&n(l.attributeName())&&s.valueFromOption(this.getOptionValue(l.attributeName()),l)).forEach(l=>{Object.keys(l.implied).filter(d=>!n(d)).forEach(d=>{this.setOptionValueWithSource(d,l.implied[d],"implied")})})}missingArgument(s){const n=`error: missing required argument '${s}'`;this.error(n,{code:"commander.missingArgument"})}optionMissingArgument(s){const n=`error: option '${s.flags}' argument missing`;this.error(n,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(s){const n=`error: required option '${s.flags}' not specified`;this.error(n,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(s,n){const l=m=>{const y=m.attributeName(),S=this.getOptionValue(y),x=this.options.find(b=>b.negate&&y===b.attributeName()),f=this.options.find(b=>!b.negate&&y===b.attributeName());return x&&(x.presetArg===void 0&&S===!1||x.presetArg!==void 0&&S===x.presetArg)?x:f||m},d=m=>{const y=l(m),S=y.attributeName();return this.getOptionValueSource(S)==="env"?`environment variable '${y.envVar}'`:`option '${y.flags}'`},p=`error: ${d(s)} cannot be used with ${d(n)}`;this.error(p,{code:"commander.conflictingOption"})}unknownOption(s){if(this._allowUnknownOption)return;let n="";if(s.startsWith("--")&&this._showSuggestionAfterError){let d=[],p=this;do{const m=p.createHelp().visibleOptions(p).filter(y=>y.long).map(y=>y.long);d=d.concat(m),p=p.parent}while(p&&!p._enablePositionalOptions);n=j(s,d)}const l=`error: unknown option '${s}'${n}`;this.error(l,{code:"commander.unknownOption"})}_excessArguments(s){if(this._allowExcessArguments)return;const n=this.registeredArguments.length,l=n===1?"":"s",d=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${n} argument${l} but got ${s.length}.`;this.error(d,{code:"commander.excessArguments"})}unknownCommand(){const s=this.args[0];let n="";if(this._showSuggestionAfterError){const d=[];this.createHelp().visibleCommands(this).forEach(p=>{d.push(p.name()),p.alias()&&d.push(p.alias())}),n=j(s,d)}const l=`error: unknown command '${s}'${n}`;this.error(l,{code:"commander.unknownCommand"})}version(s,n,l){if(s===void 0)return this._version;this._version=s,n=n||"-V, --version",l=l||"output the version number";const d=this.createOption(n,l);return this._versionOptionName=d.attributeName(),this._registerOption(d),this.on("option:"+d.name(),()=>{this._outputConfiguration.writeOut(`${s}
|
|
24
|
+
`),this._exit(0,"commander.version",s)}),this}description(s,n){return s===void 0&&n===void 0?this._description:(this._description=s,n&&(this._argsDescription=n),this)}summary(s){return s===void 0?this._summary:(this._summary=s,this)}alias(s){if(s===void 0)return this._aliases[0];let n=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(n=this.commands[this.commands.length-1]),s===n._name)throw new Error("Command alias can't be the same as its name");const l=this.parent?._findCommand(s);if(l){const d=[l.name()].concat(l.aliases()).join("|");throw new Error(`cannot add alias '${s}' to command '${this.name()}' as already have command '${d}'`)}return n._aliases.push(s),this}aliases(s){return s===void 0?this._aliases:(s.forEach(n=>this.alias(n)),this)}usage(s){if(s===void 0){if(this._usage)return this._usage;const n=this.registeredArguments.map(l=>c(l));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?n:[]).join(" ")}return this._usage=s,this}name(s){return s===void 0?this._name:(this._name=s,this)}helpGroup(s){return s===void 0?this._helpGroupHeading??"":(this._helpGroupHeading=s,this)}commandsGroup(s){return s===void 0?this._defaultCommandGroup??"":(this._defaultCommandGroup=s,this)}optionsGroup(s){return s===void 0?this._defaultOptionGroup??"":(this._defaultOptionGroup=s,this)}_initOptionGroup(s){this._defaultOptionGroup&&!s.helpGroupHeading&&s.helpGroup(this._defaultOptionGroup)}_initCommandGroup(s){this._defaultCommandGroup&&!s.helpGroup()&&s.helpGroup(this._defaultCommandGroup)}nameFromFilename(s){return this._name=o.basename(s,o.extname(s)),this}executableDir(s){return s===void 0?this._executableDir:(this._executableDir=s,this)}helpInformation(s){const n=this.createHelp(),l=this._getOutputContext(s);n.prepareContext({error:l.error,helpWidth:l.helpWidth,outputHasColors:l.hasColors});const d=n.formatHelp(this,n);return l.hasColors?d:this._outputConfiguration.stripColor(d)}_getOutputContext(s){s=s||{};const n=!!s.error;let l,d,p;return n?(l=y=>this._outputConfiguration.writeErr(y),d=this._outputConfiguration.getErrHasColors(),p=this._outputConfiguration.getErrHelpWidth()):(l=y=>this._outputConfiguration.writeOut(y),d=this._outputConfiguration.getOutHasColors(),p=this._outputConfiguration.getOutHelpWidth()),{error:n,write:y=>(d||(y=this._outputConfiguration.stripColor(y)),l(y)),hasColors:d,helpWidth:p}}outputHelp(s){let n;typeof s=="function"&&(n=s,s=void 0);const l=this._getOutputContext(s),d={error:l.error,write:l.write,command:this};this._getCommandAndAncestors().reverse().forEach(m=>m.emit("beforeAllHelp",d)),this.emit("beforeHelp",d);let p=this.helpInformation({error:l.error});if(n&&(p=n(p),typeof p!="string"&&!Buffer.isBuffer(p)))throw new Error("outputHelp callback must return a string or a Buffer");l.write(p),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",d),this._getCommandAndAncestors().forEach(m=>m.emit("afterAllHelp",d))}helpOption(s,n){return typeof s=="boolean"?(s?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(s??"-h, --help",n??"display help for command"),(s||n)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(s){return this._helpOption=s,this._initOptionGroup(s),this}help(s){this.outputHelp(s);let n=Number(r.exitCode??0);n===0&&s&&typeof s!="function"&&s.error&&(n=1),this._exit(n,"commander.help","(outputHelp)")}addHelpText(s,n){const l=["beforeAll","before","after","afterAll"];if(!l.includes(s))throw new Error(`Unexpected value for position to addHelpText.
|
|
25
|
+
Expecting one of '${l.join("', '")}'`);const d=`${s}Help`;return this.on(d,p=>{let m;typeof n=="function"?m=n({error:p.error,command:p.command}):m=n,m&&p.write(`${m}
|
|
26
|
+
`)}),this}_outputHelpIfRequested(s){const n=this._getHelpOption();n&&s.find(l=>n.is(l))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function F(Dt){return Dt.map(s=>{if(!s.startsWith("--inspect"))return s;let n,l="127.0.0.1",d="9229",p;return(p=s.match(/^(--inspect(-brk)?)$/))!==null?n=p[1]:(p=s.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(n=p[1],/^\d+$/.test(p[3])?d=p[3]:l=p[3]):(p=s.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(n=p[1],l=p[3],d=p[4]),n&&d!=="0"?`${n}=${l}:${parseInt(d)+1}`:s})}function Z(){if(r.env.NO_COLOR||r.env.FORCE_COLOR==="0"||r.env.FORCE_COLOR==="false")return!1;if(r.env.FORCE_COLOR||r.env.CLICOLOR_FORCE!==void 0)return!0}t.Command=q,t.useColor=Z})),Jt=U((t=>{var{Argument:e}=st(),{Command:u}=Mt(),{CommanderError:o,InvalidArgumentError:i}=Q(),{Help:r}=vt(),{Option:a}=Ot();t.program=new u,t.createCommand=c=>new u(c),t.createOption=(c,h)=>new a(c,h),t.createArgument=(c,h)=>new e(c,h),t.Command=u,t.Option=a,t.Argument=e,t.Help=r,t.CommanderError=o,t.InvalidArgumentError=i,t.InvalidOptionArgumentError=i})),zt=Lt(Jt(),1),{program:Oi,createCommand:yi,createArgument:Ci,createOption:Ai,CommanderError:Kt,InvalidArgumentError:_i,InvalidOptionArgumentError:Si,Command:Qt,Argument:bi,Option:k,Help:Ei}=zt.default;function w(t){return`${JSON.stringify(t,null,2)}
|
|
27
|
+
`}var Ct=(function(t){return t.INIT="Init",t.COMPLETED="Completed",t.ARCHIVED="Archived",t.DRAFTING="Drafting",t.EXECUTION_COMPLETED="ExecutionCompleted",t.OPTIMIZING="Optimizing",t.OPENSPECING="Openspecing",t.REVIEWING="Reviewing",t.EXECUTING="Executing",t.ARCHIVING="Archiving",t})({});function At(t){return t.replace(/\s+/g," ").trim()}function Y(t,e){const u=e.map(r=>t.map(a=>At(a.value(r)))),o=t.map((r,a)=>{const c=u.map(h=>h[a].length);return Math.max(r.header.length,...c)}),i=r=>r.map((a,c)=>a.padEnd(o[c])).join(" ").trimEnd();return[i(t.map(r=>r.header)),i(o.map(r=>"-".repeat(r))),...u.map(i)].join(`
|
|
28
|
+
`)}function L(t){const e=t.filter(([,o])=>o!==void 0&&o!==""),u=Math.max(...e.map(([o])=>o.length));return`${e.map(([o,i])=>`${o.padEnd(u)} ${At(i??"")}`).join(`
|
|
29
|
+
`)}
|
|
30
|
+
`}function ht(t){return typeof t=="string"?t.trim():t?.value?.trim()??""}function G(t){return{sessionId:ht(t.sessionId),title:t.title,type:t.type,status:t.status,projectId:ht(t.projectId),proposalName:t.proposalName??void 0,archived:t.status===Ct.ARCHIVED,lastActiveAt:t.lastActiveAt??void 0,enableIndependentWorkspace:t.enableIndependentWorkspace,baseBranch:t.baseBranch??void 0,metadata:t.metadata??void 0,chatExecutorType:t.chatExecutorType??void 0}}function _t(t){return{sessions:t.sessions.map(G)}}function St(t,e){return e.length===0?`No ${t.toLowerCase()} found.
|
|
31
|
+
`:`${t} (${e.length})
|
|
32
|
+
${Y([{header:"Session ID",value:u=>u.sessionId},{header:"Title",value:u=>u.title},{header:"Status",value:u=>u.status},{header:"Project ID",value:u=>u.projectId},{header:"Archived",value:u=>u.archived?"yes":"no"}],e)}
|
|
33
|
+
`}function M(t,e=[]){return L([["sessionId",t.sessionId],["type",t.type],["title",t.title],["status",t.status],["projectId",t.projectId],["proposalName",t.proposalName],["independentWorkspace",String(t.enableIndependentWorkspace)],["baseBranch",t.baseBranch],["chatExecutorType",t.chatExecutorType],["metadata",t.metadata],...e])}function rt(t,e,u,o=[]){return`${t}
|
|
34
|
+
${L([["sessionId",e],["message",u.message],...o])}`}var g={BASE:"",VERSION:"1",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:void 0,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0};function B(t){const e=t?.trim();return e||void 0}function Yt(t={},e=process.env){return{baseUrl:B(t.baseUrl)??B(e.HAGI_API_BASE_URL)??"http://127.0.0.1:35168",token:B(t.token)??B(e.HAGI_API_TOKEN),lang:B(t.lang)??B(e.HAGI_API_LANG)}}function Xt(t={},e=process.env){const u=Yt(t,e);return g.BASE=u.baseUrl,g.WITH_CREDENTIALS=!1,g.CREDENTIALS="omit",g.TOKEN=u.token,g.HEADERS=u.lang?{"Accept-Language":u.lang}:void 0,u}var it=class extends Error{url;status;statusText;body;request;constructor(t,e,u){super(u),this.name="ApiError",this.url=e.url,this.status=e.status,this.statusText=e.statusText,this.body=e.body,this.request=t}},D={USAGE:2,HTTP_BAD_REQUEST:20,HTTP_UNAUTHORIZED:21,HTTP_FORBIDDEN:23,HTTP_NOT_FOUND:24,HTTP_CONFLICT:29,HTTP_CLIENT_ERROR:40,HTTP_SERVER_ERROR:50,TRANSPORT:60,UNKNOWN:70},N=class extends Error{constructor(t){super(t),this.name="CliUsageError"}},ot=class extends Error{status;details;constructor(t,e,u){super(e),this.name="CliHttpError",this.status=t,this.details=u}};function Zt(t){if(!(!t||typeof t!="object"||Array.isArray(t)))return t}function z(t,e){const u=Zt(t)?.[e];return typeof u=="string"&&u.trim()?u.trim():void 0}function te(t){return t.includes("fetch failed")||t.includes("ECONNREFUSED")||t.includes("ENOTFOUND")||t.includes("Failed to parse URL")}function mt(t){switch(t){case 400:return D.HTTP_BAD_REQUEST;case 401:return D.HTTP_UNAUTHORIZED;case 403:return D.HTTP_FORBIDDEN;case 404:return D.HTTP_NOT_FOUND;case 409:return D.HTTP_CONFLICT;default:return t&&t>=400&&t<500?D.HTTP_CLIENT_ERROR:t&&t>=500?D.HTTP_SERVER_ERROR:D.UNKNOWN}}function ee(t){if(t instanceof N)return{exitCode:D.USAGE,message:t.message};if(t instanceof ot)return{exitCode:mt(t.status),status:t.status,message:t.message,details:t.details};if(t instanceof it){const e=z(t.body,"error")??z(t.body,"message")??t.message;return{exitCode:mt(t.status),status:t.status,message:e,errorCode:z(t.body,"errorCode"),correlationId:z(t.body,"correlationId"),details:t.body}}return t instanceof Error?{exitCode:te(t.message)?D.TRANSPORT:D.UNKNOWN,message:t.message}:{exitCode:D.UNKNOWN,message:String(t)}}function bt(t,e={}){if(e.json)return`${JSON.stringify({error:{message:t.message,status:t.status,exitCode:t.exitCode,errorCode:t.errorCode,correlationId:t.correlationId,details:t.details}},null,2)}
|
|
35
|
+
`;const u=[t.status?`status=${t.status}`:void 0,t.errorCode?`errorCode=${t.errorCode}`:void 0,t.correlationId?`correlationId=${t.correlationId}`:void 0].filter(Boolean),o=u.length>0?` (${u.join(", ")})`:"";return`${t.message}${o}
|
|
36
|
+
`}var ie=class extends Error{constructor(t){super(t),this.name="CancelError"}get isCancelled(){return!0}},se=class{#e;#i;#t;#s;#o;#n;#r;constructor(t){this.#e=!1,this.#i=!1,this.#t=!1,this.#s=[],this.#o=new Promise((e,u)=>{this.#n=e,this.#r=u;const o=a=>{this.#e||this.#i||this.#t||(this.#e=!0,this.#n&&this.#n(a))},i=a=>{this.#e||this.#i||this.#t||(this.#i=!0,this.#r&&this.#r(a))},r=a=>{this.#e||this.#i||this.#t||this.#s.push(a)};return Object.defineProperty(r,"isResolved",{get:()=>this.#e}),Object.defineProperty(r,"isRejected",{get:()=>this.#i}),Object.defineProperty(r,"isCancelled",{get:()=>this.#t}),t(o,i,r)})}get[Symbol.toStringTag](){return"Cancellable Promise"}then(t,e){return this.#o.then(t,e)}catch(t){return this.#o.catch(t)}finally(t){return this.#o.finally(t)}cancel(){if(!(this.#e||this.#i||this.#t)){if(this.#t=!0,this.#s.length)try{for(const t of this.#s)t()}catch(t){console.warn("Cancellation threw an error",t);return}this.#s.length=0,this.#r&&this.#r(new ie("Request aborted"))}}get isCancelled(){return this.#t}},nt=t=>t!=null,J=t=>typeof t=="string",tt=t=>J(t)&&t!=="",at=t=>typeof t=="object"&&typeof t.type=="string"&&typeof t.stream=="function"&&typeof t.arrayBuffer=="function"&&typeof t.constructor=="function"&&typeof t.constructor.name=="string"&&/^(Blob|File)$/.test(t.constructor.name)&&/^(Blob|File)$/.test(t[Symbol.toStringTag]),Et=t=>t instanceof FormData,re=t=>{try{return btoa(t)}catch{return Buffer.from(t).toString("base64")}},oe=t=>{const e=[],u=(i,r)=>{e.push(`${encodeURIComponent(i)}=${encodeURIComponent(String(r))}`)},o=(i,r)=>{nt(r)&&(Array.isArray(r)?r.forEach(a=>{o(i,a)}):typeof r=="object"?Object.entries(r).forEach(([a,c])=>{o(`${i}[${a}]`,c)}):u(i,r))};return Object.entries(t).forEach(([i,r])=>{o(i,r)}),e.length>0?`?${e.join("&")}`:""},ne=(t,e)=>{const u=t.ENCODE_PATH||encodeURI,o=e.url.replace("{api-version}",t.VERSION).replace(/{(.*?)}/g,(r,a)=>e.path?.hasOwnProperty(a)?u(String(e.path[a])):r),i=`${t.BASE}${o}`;return e.query?`${i}${oe(e.query)}`:i},ae=t=>{if(t.formData){const e=new FormData,u=(o,i)=>{J(i)||at(i)?e.append(o,i):e.append(o,JSON.stringify(i))};return Object.entries(t.formData).filter(([o,i])=>nt(i)).forEach(([o,i])=>{Array.isArray(i)?i.forEach(r=>u(o,r)):u(o,i)}),e}},K=async(t,e)=>typeof e=="function"?e(t):e,ue=async(t,e)=>{const[u,o,i,r]=await Promise.all([K(e,t.TOKEN),K(e,t.USERNAME),K(e,t.PASSWORD),K(e,t.HEADERS)]),a=Object.entries({Accept:"application/json",...r,...e.headers}).filter(([c,h])=>nt(h)).reduce((c,[h,O])=>({...c,[h]:String(O)}),{});return tt(u)&&(a.Authorization=`Bearer ${u}`),tt(o)&&tt(i)&&(a.Authorization=`Basic ${re(`${o}:${i}`)}`),e.body!==void 0&&(e.mediaType?a["Content-Type"]=e.mediaType:at(e.body)?a["Content-Type"]=e.body.type||"application/octet-stream":J(e.body)?a["Content-Type"]="text/plain":Et(e.body)||(a["Content-Type"]="application/json")),new Headers(a)},ce=t=>{if(t.body!==void 0)return t.mediaType?.includes("/json")?JSON.stringify(t.body):J(t.body)||at(t.body)||Et(t.body)?t.body:JSON.stringify(t.body)},le=async(t,e,u,o,i,r,a)=>{const c=new AbortController,h={headers:r,body:o??i,method:e.method,signal:c.signal};return t.WITH_CREDENTIALS&&(h.credentials=t.CREDENTIALS),a(()=>c.abort()),await fetch(u,h)},de=(t,e)=>{if(e){const u=t.headers.get(e);if(J(u))return u}},pe=async t=>{if(t.status!==204)try{const e=t.headers.get("Content-Type");if(e)return["application/json","application/problem+json"].some(u=>e.toLowerCase().startsWith(u))?await t.json():await t.text()}catch(e){console.error(e)}},he=(t,e)=>{const u={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",...t.errors}[e.status];if(u)throw new it(t,e,u);if(!e.ok)throw new it(t,e,`Generic Error: status: ${e.status??"unknown"}; status text: ${e.statusText??"unknown"}; body: ${(()=>{try{return JSON.stringify(e.body,null,2)}catch{return}})()}`)},v=(t,e)=>new se(async(u,o,i)=>{try{const r=ne(t,e),a=ae(e),c=ce(e),h=await ue(t,e);if(!i.isCancelled){const O=await le(t,e,r,c,a,h,i),A=await pe(O),C=de(O,e.responseHeader),_={url:r,ok:O.ok,status:O.status,statusText:O.statusText,body:C??A};he(e,_),u(_.body)}}catch(r){o(r)}}),me=class{static getApiDataAggregation(){return v(g,{method:"GET",url:"/api/DataAggregation",errors:{400:"Depth parameter is no longer supported"}})}},et=class{static postApiProject({requestBody:t}){return v(g,{method:"POST",url:"/api/Project",body:t,mediaType:"application/json"})}static postApiProjectDemo(){return v(g,{method:"POST",url:"/api/Project/demo"})}static putApiProject({id:t,requestBody:e}){return v(g,{method:"PUT",url:"/api/Project/{id}",path:{id:t},body:e,mediaType:"application/json"})}static deleteApiProject({id:t}){return v(g,{method:"DELETE",url:"/api/Project/{id}",path:{id:t}})}static postApiProjectOpenInVscode({id:t,subPath:e}){return v(g,{method:"POST",url:"/api/Project/{id}/open-in-vscode",path:{id:t},query:{subPath:e},errors:{400:"Invalid project path or sub-path",403:"Sub-path is outside project directory",404:"Project not found",500:"Failed to launch VS Code"}})}static getApiProjectMonospecsManagement({id:t}){return v(g,{method:"GET",url:"/api/Project/{id}/monospecs/management",path:{id:t},errors:{400:"Bad Request",404:"Not Found",500:"Internal Server Error"}})}static putApiProjectMonospecsManagement({id:t,requestBody:e}){return v(g,{method:"PUT",url:"/api/Project/{id}/monospecs/management",path:{id:t},body:e,mediaType:"application/json",errors:{400:"Bad Request",404:"Not Found",500:"Internal Server Error"}})}static postApiProjectMonospecsInitialize({id:t}){return v(g,{method:"POST",url:"/api/Project/{id}/monospecs/initialize",path:{id:t},errors:{400:"Bad Request",404:"Not Found",500:"Internal Server Error"}})}static getApiProjectDesignMd({id:t,repositoryPath:e}){return v(g,{method:"GET",url:"/api/Project/{id}/design-md",path:{id:t},query:{repositoryPath:e},errors:{400:"Bad Request",404:"Not Found",500:"Internal Server Error"}})}static putApiProjectDesignMd({id:t,requestBody:e}){return v(g,{method:"PUT",url:"/api/Project/{id}/design-md",path:{id:t},body:e,mediaType:"application/json",errors:{400:"Bad Request",404:"Not Found",409:"Conflict",500:"Internal Server Error"}})}static getApiProjectDesignMdSiteIndex({id:t}){return v(g,{method:"GET",url:"/api/Project/{id}/design-md/site-index",path:{id:t},errors:{400:"Bad Request",404:"Not Found",502:"Bad Gateway",504:"Gateway Timeout"}})}static getApiProjectDesignMdSiteIndexPreview({id:t,slug:e,theme:u="light"}){return v(g,{method:"GET",url:"/api/Project/{id}/design-md/site-index/{slug}/preview",path:{id:t,slug:e},query:{theme:u},errors:{400:"Bad Request",404:"Not Found",502:"Bad Gateway",504:"Gateway Timeout"}})}static getApiProjectDesignMdSiteIndex1({id:t,slug:e}){return v(g,{method:"GET",url:"/api/Project/{id}/design-md/site-index/{slug}",path:{id:t,slug:e},errors:{400:"Bad Request",404:"Not Found",502:"Bad Gateway",504:"Gateway Timeout"}})}static getApiProjectBranchesValidate({id:t,branchName:e,repositoryPath:u}){return v(g,{method:"GET",url:"/api/Project/{id}/branches/validate",path:{id:t},query:{branchName:e,repositoryPath:u},errors:{400:"Branch name is required",404:"Project not found"}})}static getApiProjectValidatePath({path:t}){return v(g,{method:"GET",url:"/api/Project/validate-path",query:{path:t},errors:{400:"Path parameter is missing or invalid",500:"Internal server error during validation"}})}static postApiProjectScanGitRepos({requestBody:t}){return v(g,{method:"POST",url:"/api/Project/scan-git-repos",body:t,mediaType:"application/json",errors:{400:"Invalid request parameters",500:"Internal server error during scan"}})}static postApiProjectValidateMonospecs({requestBody:t}){return v(g,{method:"POST",url:"/api/Project/validate-monospecs",body:t,mediaType:"application/json",errors:{400:"Invalid request parameters",500:"Internal server error"}})}},H=class{static postApiSessionsAutoTask({requestBody:t}){return v(g,{method:"POST",url:"/api/Sessions/auto-task",body:t,mediaType:"application/json",errors:{400:"Missing required fields or invalid prompt ID",404:"Project not found",500:"Internal server error"}})}static postApiSessionsArchiveChat({sessionId:t}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/archive-chat",path:{sessionId:t},errors:{400:"Session is not a chat session",404:"Session not found",500:"Failed to archive chat session"}})}static postApiSessionsChat({requestBody:t}){return v(g,{method:"POST",url:"/api/Sessions/chat",body:t,mediaType:"application/json",errors:{400:"Bad Request"}})}static postApiSessions({requestBody:t}){return v(g,{method:"POST",url:"/api/Sessions",body:t,mediaType:"application/json",errors:{400:"Bad Request"}})}static getApiSessions({type:t,activeOnly:e,includeArchived:u,projectId:o,projectIds:i}){return v(g,{method:"GET",url:"/api/Sessions",query:{type:t,activeOnly:e,includeArchived:u,projectId:o,projectIds:i}})}static getApiSessions1({sessionId:t}){return v(g,{method:"GET",url:"/api/Sessions/{sessionId}",path:{sessionId:t},errors:{400:"Invalid session ID format",404:"Session not found",500:"Internal server error occurred"}})}static putApiSessions({sessionId:t,requestBody:e}){return v(g,{method:"PUT",url:"/api/Sessions/{sessionId}",path:{sessionId:t},body:e,mediaType:"application/json"})}static deleteApiSessions({sessionId:t,deleteFiles:e=!1}){return v(g,{method:"DELETE",url:"/api/Sessions/{sessionId}",path:{sessionId:t},query:{deleteFiles:e},errors:{404:"Session not found",500:"Failed to delete session"}})}static getApiSessionsMessages({sessionId:t,page:e=1,pageSize:u=50,historyScope:o,order:i="desc"}){return v(g,{method:"GET",url:"/api/Sessions/{sessionId}/messages",path:{sessionId:t},query:{page:e,pageSize:u,historyScope:o,order:i},errors:{404:"Not Found",500:"Internal Server Error"}})}static postApiSessionsMessages({sessionId:t,requestBody:e}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/messages",path:{sessionId:t},body:e,mediaType:"application/json"})}static postApiSessionsCancel({sessionId:t}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/cancel",path:{sessionId:t},errors:{404:"Session not found",500:"Failed to cancel session"}})}static getApiSessionsProcessingStatus({sessionId:t}){return v(g,{method:"GET",url:"/api/Sessions/{sessionId}/processing-status",path:{sessionId:t},errors:{404:"Session not found",500:"Failed to get processing status"}})}static deleteApiSessionsQueue({sessionId:t,queueIndex:e}){return v(g,{method:"DELETE",url:"/api/Sessions/{sessionId}/queue/{queueIndex}",path:{sessionId:t,queueIndex:e},errors:{400:"Invalid queue index",404:"Session not found",500:"Failed to cancel message"}})}static postApiSessionsAnnotations({sessionId:t,requestBody:e}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/annotations",path:{sessionId:t},body:e,mediaType:"application/json",errors:{400:"Invalid request or session is not a proposal session",404:"Session not found",500:"Failed to process annotations"}})}static postApiSessionsOptimizeProposal({sessionId:t,requestBody:e}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/optimize-proposal",path:{sessionId:t},body:e,mediaType:"application/json",errors:{400:"Bad Request",404:"Not Found",500:"Internal Server Error"}})}static postApiSessionsGenerateProposal({sessionId:t,requestBody:e}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/generate-proposal",path:{sessionId:t},body:e,mediaType:"application/json",errors:{400:"Session is not a proposal session or proposal name not generated",404:"Session not found",500:"Failed to generate proposal"}})}static postApiSessionsArchive({sessionId:t,requestBody:e}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/archive",path:{sessionId:t},body:e,mediaType:"application/json",errors:{400:"Session is not a proposal session or proposal name missing",404:"Session not found",500:"Failed to archive session"}})}static postApiSessionsExecuteProposal({sessionId:t,requestBody:e}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/execute-proposal",path:{sessionId:t},body:e,mediaType:"application/json",errors:{400:"Session is not a proposal session, not in valid status, or proposal name missing",404:"Session not found",500:"Failed to execute proposal"}})}static postApiSessionsComplete({sessionId:t}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/complete",path:{sessionId:t},errors:{400:"Session is not in ExecutionCompleted status",404:"Session not found",500:"Failed to complete session"}})}static postApiSessionsValidateExecute({sessionId:t}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/validate-execute",path:{sessionId:t},errors:{404:"Session not found",500:"Failed to validate session"}})}static postApiSessionsValidateStart({sessionId:t}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/validate-start",path:{sessionId:t},errors:{404:"Session not found",500:"Failed to validate session"}})}static postApiSessionsValidateArchive({sessionId:t}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/validate-archive",path:{sessionId:t},errors:{404:"Session not found",500:"Failed to validate session"}})}static getApiSessionsOpenspecFile({sessionId:t,relativePath:e}){return v(g,{method:"GET",url:"/api/Sessions/{sessionId}/openspec-file",path:{sessionId:t},query:{relativePath:e},errors:{404:"Session not found or file not found",500:"Failed to read file"}})}static postApiSessionsUpdateCessionId({sessionId:t}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/update-cession-id",path:{sessionId:t},errors:{404:"Session not found",500:"Failed to update CessionId"}})}static postApiSessionsOpenInVscode({sessionId:t,subPath:e}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/open-in-vscode",path:{sessionId:t},query:{subPath:e},errors:{400:"Invalid project path or sub-path",403:"Sub-path is outside project directory",404:"Session not found",500:"Failed to launch VS Code"}})}static postApiSessionsCorrectProposalName({sessionId:t,requestBody:e}){return v(g,{method:"POST",url:"/api/Sessions/{sessionId}/correct-proposal-name",path:{sessionId:t},body:e,mediaType:"application/json",errors:{400:"Invalid name format or validation failed",404:"Session not found",409:"Name already in use by another session",500:"Internal server error"}})}static deleteApiSessionsWorkspace({sessionId:t}){return v(g,{method:"DELETE",url:"/api/Sessions/{sessionId}/workspace",path:{sessionId:t},errors:{400:"Session does not have an independent workspace",404:"Session not found",500:"Failed to delete workspace"}})}},W=class{static getApiVaults(){return v(g,{method:"GET",url:"/api/vaults"})}static postApiVaults({requestBody:t}){return v(g,{method:"POST",url:"/api/vaults",body:t,mediaType:"application/json",errors:{400:"Bad Request",500:"Internal Server Error"}})}static putApiVaults({id:t,requestBody:e}){return v(g,{method:"PUT",url:"/api/vaults/{id}",path:{id:t},body:e,mediaType:"application/json",errors:{400:"Bad Request",404:"Not Found",500:"Internal Server Error"}})}static deleteApiVaults({id:t,deleteLocalFiles:e=!1}){return v(g,{method:"DELETE",url:"/api/vaults/{id}",path:{id:t},query:{deleteLocalFiles:e},errors:{400:"Bad Request",404:"Not Found",500:"Internal Server Error"}})}static getApiVaultsFiles({id:t,path:e}){return v(g,{method:"GET",url:"/api/vaults/{id}/files",path:{id:t},query:{path:e},errors:{400:"Bad Request",404:"Not Found",500:"Internal Server Error"}})}static getApiVaultsFilesContent({id:t,path:e}){return v(g,{method:"GET",url:"/api/vaults/{id}/files/content",path:{id:t},query:{path:e},errors:{400:"Bad Request",404:"Not Found",500:"Internal Server Error"}})}};function ft(t,e,u){return v(g,{method:"POST",url:`/api/Sessions/{sessionId}/${e}`,path:{sessionId:t},body:u,mediaType:"application/json",errors:{400:"Bad Request",404:"Not Found",409:"Conflict",500:"Internal Server Error"}})}function fe(){return{listSessions:t=>H.getApiSessions(t),getSession:t=>H.getApiSessions1({sessionId:t}),createProposalSession:t=>H.postApiSessions({requestBody:t}),createChatSession:t=>H.postApiSessionsChat({requestBody:t}),createAutoTaskSession:t=>H.postApiSessionsAutoTask({requestBody:t}),updateSession:(t,e)=>H.putApiSessions({sessionId:t,requestBody:e}),deleteSession:(t,e)=>H.deleteApiSessions({sessionId:t,deleteFiles:e}),sendMessage:(t,e)=>H.postApiSessionsMessages({sessionId:t,requestBody:e}),generateProposalName:t=>ft(t,"generate-proposal-name"),optimizeDescription:(t,e)=>ft(t,"optimize-description",e),generateProposal:(t,e)=>H.postApiSessionsGenerateProposal({sessionId:t,requestBody:e}),executeProposal:(t,e)=>H.postApiSessionsExecuteProposal({sessionId:t,requestBody:e}),archiveProposal:(t,e)=>H.postApiSessionsArchive({sessionId:t,requestBody:e}),completeProposal:t=>H.postApiSessionsComplete({sessionId:t}),submitAnnotations:(t,e)=>H.postApiSessionsAnnotations({sessionId:t,requestBody:e}),listProjects:()=>me.getApiDataAggregation(),createProject:t=>et.postApiProject({requestBody:t}),updateProject:(t,e)=>et.putApiProject({id:t,requestBody:e}),deleteProject:t=>et.deleteApiProject({id:t}),listVaults:()=>W.getApiVaults(),createVault:t=>W.postApiVaults({requestBody:t}),updateVault:(t,e)=>W.putApiVaults({id:t,requestBody:e}),deleteVault:(t,e)=>W.deleteApiVaults({id:t,deleteLocalFiles:e}),listVaultFiles:(t,e)=>W.getApiVaultsFiles({id:t,path:e}),previewVaultFile:(t,e)=>W.getApiVaultsFilesContent({id:t,path:e}),archiveChat:t=>H.postApiSessionsArchiveChat({sessionId:t})}}function I(t){const e=t?.trim();return e||void 0}function V(t,e){const u=I(t);if(!u)throw new N(`${e} is required.`);return u}function It(t){const e=t?.map(u=>I(u)).filter(Boolean);return e&&e.length>0?e:void 0}function wt(t=process.env,e={stdout:u=>{process.stdout.write(u)},stderr:u=>{process.stderr.write(u)}}){return{api:fe(),env:t,io:e}}function ge(t){return t.option("--base-url <url>","Backend API base URL. Defaults to HAGI_API_BASE_URL or the local dev URL.").option("--token <token>","Bearer token for backend API calls. Overrides HAGI_API_TOKEN.").option("--lang <lang>","Accept-Language value for backend API calls. Overrides HAGI_API_LANG.")}function P(t){return t.option("--json","Emit deterministic JSON instead of human-readable text.")}function T(t,e){const u=t.optsWithGlobals();return{api:e.api,env:e.env,io:e.io,outputJson:u.json===!0,runtime:Xt({baseUrl:u.baseUrl,token:u.token,lang:u.lang},e.env)}}function ve(t,e){P(t.command("create").description("Create an AutoTask session through the dedicated generated endpoint.")).requiredOption("--title <title>","AutoTask session title.").requiredOption("--project-id <id>","Owning project id.").requiredOption("--prompt-id <id>","Prompt template id.").option("--message <text>","Optional custom message override.").option("--preset-id <id>","Optional preset id.").option("--repository-path <path>","Optional MonoSpecs repository path.").option("--project-ids <ids...>","Optional extra project ids for multi-project flows.").option("--need-push","Request push after commit creation when supported.").option("--target-branch-mode <mode>","Optional target branch mode.").option("--target-branch-name <name>","Optional custom target branch name.").option("--script-key <key>","Optional stable dungeon script key.").option("--hero-id <id>","Optional preferred hero id.").action(async function(o){if(o.targetBranchName&&o.targetBranchMode!=="new-custom")throw new N("--target-branch-name requires --target-branch-mode new-custom.");if(o.targetBranchMode==="new-custom"&&!I(o.targetBranchName))throw new N("--target-branch-name is required when --target-branch-mode is new-custom.");const i=T(this,e),r={title:V(o.title,"--title"),projectId:V(o.projectId,"--project-id"),promptId:V(o.promptId,"--prompt-id"),message:I(o.message),presetId:I(o.presetId),repositoryPath:I(o.repositoryPath),projectIds:It(o.projectIds),needPush:o.needPush?!0:void 0,targetBranchMode:I(o.targetBranchMode),targetBranchName:I(o.targetBranchName),scriptKey:I(o.scriptKey),heroId:I(o.heroId)},a=G(await i.api.createAutoTaskSession(r));if(i.outputJson){i.io.stdout(w({session:a,promptId:r.promptId,requested:r}));return}i.io.stdout(`AutoTask session created
|
|
37
|
+
${M(a,[["promptId",r.promptId],["repositoryPath",r.repositoryPath],["targetBranchMode",r.targetBranchMode],["targetBranchName",r.targetBranchName],["scriptKey",r.scriptKey],["heroId",r.heroId]])}`)})}var X=(function(t){return t.CLAUDE_CODE_CLI="ClaudeCodeCli",t.CODEX_CLI="CodexCli",t.GIT_HUB_COPILOT="GitHubCopilot",t.CODEBUDDY_CLI="CodebuddyCli",t.OPEN_CODE_CLI="OpenCodeCli",t.IFLOW_CLI="IFlowCli",t.HERMES_CLI="HermesCli",t.QODER_CLI="QoderCli",t.KIRO_CLI="KiroCli",t.KIMI_CLI="KimiCli",t.GEMINI_CLI="GeminiCli",t.DEEP_AGENTS_CLI="DeepAgentsCli",t})({}),ut=(function(t){return t.READONLY="Readonly",t.EDIT="Edit",t})({});function Oe(t,e){P(t.command("send").description("Send a follow-up message to an AutoTask session.")).requiredOption("--session-id <id>","AutoTask session id.").requiredOption("--content <text>","Message content.").addOption(new k("--mode <mode>","Message mode override.").choices(Object.values(ut))).addOption(new k("--executor-type <type>","Executor override for this message.").choices(Object.values(X))).action(async function(o){const i=T(this,e),r=o.sessionId.trim(),a=await i.api.sendMessage(r,{content:V(o.content,"--content"),mode:o.mode,executorType:o.executorType});if(i.outputJson){i.io.stdout(w({sessionId:r,message:a.message,requested:{mode:o.mode,executorType:o.executorType}}));return}i.io.stdout(rt("AutoTask message sent",r,a,[["mode",o.mode],["executorType",o.executorType]]))})}function ye(t,e){const u=t.command("autotask").description("Manage AutoTask sessions.");ve(u,e),Oe(u,e)}function Ce(t,e){P(t.command("archive").description("Archive a chat session through the dedicated chat archive endpoint.")).requiredOption("--session-id <id>","Chat session id to archive.").action(async function(o){const i=T(this,e),r=o.sessionId.trim(),a=await i.api.archiveChat(r);if(i.outputJson){i.io.stdout(w({sessionId:r,message:a.message}));return}i.io.stdout(`Chat archived
|
|
38
|
+
sessionId ${r}
|
|
39
|
+
message ${a.message}
|
|
40
|
+
`)})}function Ae(t,e){P(t.command("create").description("Create a normal chat session.")).requiredOption("--title <title>","Chat session title.").requiredOption("--project-id <id>","Owning project id.").option("--hero-id <id>","Optional bound hero id.").addOption(new k("--executor-type <type>","Optional executor override.").choices(Object.values(X))).action(async function(o){const i=T(this,e),r=G(await i.api.createChatSession({title:V(o.title,"--title"),projectId:V(o.projectId,"--project-id"),heroId:I(o.heroId),executorType:o.executorType}));if(i.outputJson){i.io.stdout(w({session:r}));return}i.io.stdout(`Chat session created
|
|
41
|
+
${M(r)}`)})}function _e(t,e){P(t.command("delete").description("Delete a chat session.")).requiredOption("--session-id <id>","Chat session id to delete.").action(async function(o){const i=T(this,e),r=o.sessionId.trim(),a=await i.api.deleteSession(r,!1);if(i.outputJson){i.io.stdout(w({sessionId:r,deleted:!0,message:a.message}));return}i.io.stdout(`Chat deleted
|
|
42
|
+
sessionId ${r}
|
|
43
|
+
message ${a.message}
|
|
44
|
+
`)})}var ct=(function(t){return t.CHAT="Chat",t.PROPOSAL="Proposal",t})({});function Se(t,e){P(t.command("list").description("List normal chat sessions.")).action(async function(o){if(o.projectId&&o.projectIds?.length)throw new N("Use either --project-id or --project-ids, not both.");const i=T(this,e),r=_t(await i.api.listSessions({type:ct.CHAT,projectId:I(o.projectId),projectIds:It(o.projectIds),activeOnly:o.activeOnly?!0:void 0,includeArchived:o.includeArchived?!0:void 0}));if(i.outputJson){i.io.stdout(w(r));return}i.io.stdout(St("Chat sessions",r.sessions))}).option("--project-id <id>","Filter chat sessions by a single project id.").option("--project-ids <ids...>","Filter chat sessions by multiple project ids.").option("--active-only","Only return non-archived chat sessions.").option("--include-archived","Include archived chat sessions.")}function be(t,e){P(t.command("send").description("Send a follow-up message to a chat session.")).requiredOption("--session-id <id>","Chat session id.").requiredOption("--content <text>","Message content.").addOption(new k("--mode <mode>","Message mode override.").choices(Object.values(ut))).addOption(new k("--executor-type <type>","Executor override for this message.").choices(Object.values(X))).action(async function(o){const i=T(this,e),r=o.sessionId.trim(),a=await i.api.sendMessage(r,{content:V(o.content,"--content"),mode:o.mode,executorType:o.executorType});if(i.outputJson){i.io.stdout(w({sessionId:r,message:a.message,requested:{mode:o.mode,executorType:o.executorType}}));return}i.io.stdout(rt("Chat message sent",r,a,[["mode",o.mode],["executorType",o.executorType]]))})}function Ee(t,e){const u=t.command("chat").description("Manage normal chat sessions.");Se(u,e),Ae(u,e),Ce(u,e),_e(u,e),be(u,e)}function R(t){const e=t?.trim();return e||void 0}function lt(t){return{id:R(t.id)??"",name:R(t.name)??"",path:R(t.path)??"",description:R(t.description),isMonoSpecs:t.isMonoSpecs===!0,monoSpecsVersion:R(t.monoSpecsVersion),monoSpecsRepoDirectory:R(t.monoSpecsRepoDirectory),monoSpecsCommitWhenArchive:typeof t.monoSpecsCommitWhenArchive=="boolean"?t.monoSpecsCommitWhenArchive:void 0,hasError:"hasError"in t?t.hasError===!0:!1,error:"error"in t?R(t.error):void 0}}function Pt(t){return{projects:(t??[]).map(lt)}}function Ie(t){return t.length===0?`No projects found.
|
|
45
|
+
`:`Projects (${t.length})
|
|
46
|
+
${Y([{header:"Project ID",value:e=>e.id},{header:"Name",value:e=>e.name},{header:"Path",value:e=>e.path},{header:"MonoSpecs",value:e=>e.isMonoSpecs?"yes":"no"},{header:"Error",value:e=>e.hasError?"yes":"no"}],t)}
|
|
47
|
+
`}function Tt(t,e=[]){return L([["id",t.id],["name",t.name],["path",t.path],["description",t.description],["isMonoSpecs",String(t.isMonoSpecs)],["monoSpecsVersion",t.monoSpecsVersion],["monoSpecsRepoDirectory",t.monoSpecsRepoDirectory],["monoSpecsCommitWhenArchive",typeof t.monoSpecsCommitWhenArchive=="boolean"?String(t.monoSpecsCommitWhenArchive):void 0],["hasError",String(t.hasError)],["error",t.error],...e])}function we(t,e){P(t.command("create").description("Create a project through the generated project client.")).requiredOption("--name <name>","Project display name.").requiredOption("--path <path>","Project root path.").option("--description <text>","Optional project description.").action(async function(o){const i=T(this,e),r=lt(await i.api.createProject({name:V(o.name,"--name"),path:V(o.path,"--path"),description:I(o.description)}));if(i.outputJson){i.io.stdout(w({project:r}));return}i.io.stdout(`Project created
|
|
48
|
+
${Tt(r)}`)})}function Pe(t,e){P(t.command("delete").description("Delete a project by id.")).requiredOption("--id <id>","Project id to delete.").action(async function(o){const i=T(this,e),r=o.id.trim();if(await i.api.deleteProject(r),i.outputJson){i.io.stdout(w({projectId:r,deleted:!0}));return}i.io.stdout(`Project deleted
|
|
49
|
+
projectId ${r}
|
|
50
|
+
`)})}function Te(t,e){P(t.command("list").description("List projects from the aggregation endpoint.")).action(async function(){const o=T(this,e),i=Pt((await o.api.listProjects()).projects);if(o.outputJson){o.io.stdout(w(i));return}o.io.stdout(Ie(i.projects))})}function xe(t,e){P(t.command("update").description("Update a project by merging provided fields into the aggregation snapshot.")).requiredOption("--id <id>","Project id to update.").option("--name <name>","Updated project name.").option("--path <path>","Updated project path.").option("--description <text>","Updated project description.").option("--clear-description","Clear the stored description.").action(async function(o){if(!o.name&&!o.path&&!o.description&&!o.clearDescription)throw new N("Provide at least one field to update: --name, --path, --description, or --clear-description.");if(o.description&&o.clearDescription)throw new N("Use either --description or --clear-description, not both.");const i=T(this,e),r=o.id.trim(),a=Pt((await i.api.listProjects()).projects).projects.find(h=>h.id===r);if(!a)throw new ot(404,`Project ${r} was not found in the aggregation snapshot.`);const c=lt(await i.api.updateProject(r,{name:I(o.name)??a.name,path:I(o.path)??a.path,description:o.clearDescription?null:I(o.description)??a.description??null}));if(i.outputJson){i.io.stdout(w({project:c}));return}i.io.stdout(`Project updated
|
|
51
|
+
${Tt(c)}`)})}function je(t,e){const u=t.command("project").description("Manage Hagi projects through generated project and aggregation APIs.");Te(u,e),we(u,e),xe(u,e),Pe(u,e)}async function $e(){const t=[];for await(const e of Gt.stdin)t.push(typeof e=="string"?Buffer.from(e):e);return Buffer.concat(t).toString("utf8")}async function Ve(t){const e=t.trim();if(!e)throw new N("Provide --input <file> or --input - for stdin.");const u=e==="-"?await $e():await(0,Bt.readFile)(e,"utf8");try{return JSON.parse(u)}catch(o){throw new N(`Invalid JSON input from ${e}: ${o instanceof Error?o.message:String(o)}`)}}function De(t,e){if(!e||typeof e!="object"||Array.isArray(e))throw new N("Annotation input must be a JSON object.");const u=e;if(!Array.isArray(u.files))throw new N("Annotation input must include a files array.");const o=typeof u.totalAnnotations=="number"?u.totalAnnotations:u.files.length,i=typeof u.submittedAt=="string"&&u.submittedAt.trim()?u.submittedAt:new Date().toISOString();return{...u,sessionId:t,totalAnnotations:o,submittedAt:i,files:u.files}}function Ne(t,e){P(t.command("annotate").description("Submit proposal annotations from structured JSON input.")).requiredOption("--session-id <id>","Proposal session id.").requiredOption("--input <file>","JSON file path, or - to read from stdin.").action(async function(o){const i=T(this,e),r=o.sessionId.trim(),a=De(r,await Ve(o.input)),c=await i.api.submitAnnotations(r,a);if(i.outputJson){i.io.stdout(w({sessionId:r,message:c.message,annotationCount:c.annotationCount??a.totalAnnotations,fileCount:c.fileCount??a.files.length}));return}i.io.stdout(`Proposal annotations submitted
|
|
52
|
+
sessionId ${r}
|
|
53
|
+
message ${c.message}
|
|
54
|
+
annotationCount ${c.annotationCount??a.totalAnnotations}
|
|
55
|
+
fileCount ${c.fileCount??a.files.length}
|
|
56
|
+
`)})}function He(t,e){P(t.command("archive").description("Archive a proposal session through the explicit archive endpoint.")).requiredOption("--session-id <id>","Proposal session id to archive.").option("--hero-id <id>","Optional hero override for archiving.").action(async function(o){const i=T(this,e),r=G(await i.api.archiveProposal(o.sessionId.trim(),{heroId:I(o.heroId)}));if(i.outputJson){i.io.stdout(w({session:r}));return}i.io.stdout(`Proposal archive started
|
|
57
|
+
${M(r)}`)})}function Fe(t,e){P(t.command("complete").description("Mark a proposal session as completed through the dedicated completion endpoint.")).requiredOption("--session-id <id>","Proposal session id to complete.").action(async function(o){const i=T(this,e),r=G(await i.api.completeProposal(o.sessionId.trim()));if(i.outputJson){i.io.stdout(w({session:r}));return}i.io.stdout(`Proposal completed
|
|
58
|
+
${M(r)}`)})}function qe(t){return G(t)}function ke(t){return _t(t)}function Re(t){return St("Proposal sessions",t)}function Ue(t,e=[]){return M(t,e)}var xt="New Proposal";function Le(t){const e=I(t.title);if(e)return e;if(t.defaultTitle)return xt;throw new N("Provide --title or pass --default-title to use the placeholder proposal title.")}function Ge(t,e){P(t.command("create").description("Create a proposal session only. This command does not trigger later lifecycle APIs.")).requiredOption("--project-id <id>","Project id that owns the new proposal session.").requiredOption("--chief-complaint <text>","Proposal chief complaint to store on the new session.").option("--original-chief-complaint <text>","Optional raw chief complaint text to keep alongside the stitched content.").option("--title <title>","Explicit proposal session title.").option("--default-title",`Mark the title as the placeholder title (${xt}).`).option("--enable-independent-workspace","Request an independent workspace for the proposal session.").option("--base-branch <branch>","Optional base branch for the independent workspace.").action(async function(o){const i=T(this,e),r=Le(o),a=qe(await i.api.createProposalSession({title:r,chiefComplaint:o.chiefComplaint.trim(),originalChiefComplaint:I(o.originalChiefComplaint),type:ct.PROPOSAL,projectId:o.projectId.trim(),enableIndependentWorkspace:o.enableIndependentWorkspace?!0:void 0,baseBranch:I(o.baseBranch),isDefaultTitle:!!o.defaultTitle})),c=`hagi proposal generate-name --session-id ${a.sessionId}`;if(i.outputJson){i.io.stdout(w({session:a,nextCommand:c}));return}i.io.stdout(`Proposal session created
|
|
59
|
+
${Ue(a,[["next",c]])}`)})}function Be(t,e){P(t.command("execute").description("Start proposal execution only. This command maps to the execute-proposal backend action.")).requiredOption("--session-id <id>","Proposal session id to execute.").option("--hero-id <id>","Optional hero override for the execute stage.").action(async function(o){const i=T(this,e),r=o.sessionId.trim(),a=I(o.heroId),c=await i.api.executeProposal(r,{heroId:a});if(i.outputJson){i.io.stdout(w({sessionId:r,message:c.message,requested:{heroId:a}}));return}i.io.stdout(`Proposal execution started
|
|
60
|
+
sessionId ${r}
|
|
61
|
+
message ${c.message}
|
|
62
|
+
`)})}function We(t){if(t.enableExploreMode&&t.disableExploreMode)throw new N("Use either --enable-explore-mode or --disable-explore-mode, not both.");if(t.enableExploreMode)return!0;if(t.disableExploreMode)return!1}function Me(t,e){P(t.command("generate").description("Start proposal generation only. This command does not execute the proposal.")).requiredOption("--session-id <id>","Proposal session id to generate.").option("--enable-explore-mode","Explicitly enable explore mode for proposal generation.").option("--disable-explore-mode","Explicitly disable explore mode for proposal generation.").option("--hero-id <id>","Optional hero override for the generate stage.").action(async function(o){const i=T(this,e),r=o.sessionId.trim(),a=We(o),c=await i.api.generateProposal(r,{enableExploreMode:a,heroId:I(o.heroId)}),h=`hagi proposal execute --session-id ${r}`;if(i.outputJson){i.io.stdout(w({sessionId:r,message:c.message,requested:{enableExploreMode:a,heroId:I(o.heroId)},nextCommand:h}));return}i.io.stdout(`Proposal generation started
|
|
63
|
+
sessionId ${r}
|
|
64
|
+
message ${c.message}
|
|
65
|
+
next Wait for the session to reach Reviewing, then run ${h}
|
|
66
|
+
`)})}function Je(t,e){P(t.command("generate-name").description("Generate a proposal name only. This command maps to the generate-proposal-name backend action.")).requiredOption("--session-id <id>","Proposal session id to update.").action(async function(o){const i=T(this,e),r=await i.api.generateProposalName(o.sessionId.trim()),a=`hagi proposal generate --session-id ${o.sessionId.trim()}`;if(i.outputJson){i.io.stdout(w({sessionId:o.sessionId.trim(),proposalName:r.proposalName,nextCommand:a}));return}i.io.stdout(`Proposal name generated
|
|
67
|
+
sessionId ${o.sessionId.trim()}
|
|
68
|
+
proposalName ${r.proposalName}
|
|
69
|
+
next ${a}
|
|
70
|
+
`)})}function ze(t,e){P(t.command("list").description("List proposal sessions from the backend Sessions API.")).option("--project-id <id>","Filter proposal sessions by a single project id.").option("--project-ids <ids...>","Filter proposal sessions by multiple project ids.").option("--active-only","Only return non-archived proposal sessions.").option("--include-archived","Include archived proposal sessions in the result set.").action(async function(o){if(o.projectId&&o.projectIds?.length)throw new N("Use either --project-id or --project-ids, not both.");const i=T(this,e),r=ke(await i.api.listSessions({type:ct.PROPOSAL,projectId:I(o.projectId),projectIds:o.projectIds?.map(I).filter(Boolean),activeOnly:o.activeOnly?!0:void 0,includeArchived:o.includeArchived?!0:void 0}));if(i.outputJson){i.io.stdout(w(r));return}i.io.stdout(Re(r.sessions))})}function Ke(t,e){P(t.command("optimize-description").description("Start asynchronous proposal description optimization only.")).requiredOption("--session-id <id>","Proposal session id to optimize.").requiredOption("--description <text>","Description text to optimize.").option("--optimization-direction <text>","Optional optimization direction for AI guidance.").option("--disable-memory-optimization","Disable long-term memory during optimization.").option("--default-title","Treat the current title as a placeholder title.").action(async function(o){const i=T(this,e),r=o.sessionId.trim(),a=await i.api.optimizeDescription(r,{description:V(o.description,"--description"),optimizationDirection:I(o.optimizationDirection),enableMemoryOptimization:o.disableMemoryOptimization?!1:void 0,isDefaultTitle:o.defaultTitle?!0:void 0});if(i.outputJson){i.io.stdout(w({sessionId:r,taskId:a.taskId,status:a.status}));return}i.io.stdout(`Proposal description optimization started
|
|
71
|
+
sessionId ${r}
|
|
72
|
+
taskId ${a.taskId??""}
|
|
73
|
+
status ${a.status??""}
|
|
74
|
+
`)})}function Qe(t,e){P(t.command("send").description("Send a follow-up message to a proposal session.")).requiredOption("--session-id <id>","Proposal session id.").requiredOption("--content <text>","Message content.").addOption(new k("--mode <mode>","Message mode override.").choices(Object.values(ut))).addOption(new k("--executor-type <type>","Executor override for this message.").choices(Object.values(X))).action(async function(o){const i=T(this,e),r=o.sessionId.trim(),a=await i.api.sendMessage(r,{content:V(o.content,"--content"),mode:o.mode,executorType:o.executorType});if(i.outputJson){i.io.stdout(w({sessionId:r,message:a.message,requested:{mode:o.mode,executorType:o.executorType}}));return}i.io.stdout(rt("Proposal message sent",r,a,[["mode",o.mode],["executorType",o.executorType]]))})}function Ye(t,e){P(t.command("status").description("Update proposal session status through read-before-write merging.")).requiredOption("--session-id <id>","Proposal session id.").addOption(new k("--status <status>","Target session status.").choices(Object.values(Ct)).makeOptionMandatory()).action(async function(o){const i=T(this,e),r=o.sessionId.trim(),a=await i.api.getSession(r);await i.api.updateSession(r,{title:a.title,description:a.description,status:o.status,metadata:a.metadata});const c=G({...a,status:o.status});if(i.outputJson){i.io.stdout(w({session:c}));return}i.io.stdout(`Proposal status updated
|
|
75
|
+
${M(c)}`)})}function Xe(t,e){const u=t.command("proposal").description("Manage proposal sessions through backend session APIs.");ze(u,e),Ge(u,e),Je(u,e),Ke(u,e),Me(u,e),Ne(u,e),Be(u,e),He(u,e),Ye(u,e),Fe(u,e),Qe(u,e)}function E(t){const e=t?.trim();return e||void 0}function Ze(t){return{severity:E(t.severity)??"",code:E(t.code)??"",message:E(t.message)??"",relativePath:E(t.relativePath)}}function dt(t){return{id:E(t.id)??"",name:E(t.name)??"",type:E(t.type)??"",physicalPath:E(t.physicalPath)??"",gitUrl:E(t.gitUrl),createdAtUtc:E(t.createdAtUtc),updatedAtUtc:E(t.updatedAtUtc),bootstrapDiagnostics:(t.bootstrapDiagnostics??[]).map(Ze)}}function jt(t){return{generatedAtUtc:E(t.generatedAtUtc),vaults:(t.items??[]).map(dt)}}function ti(t){return t.length===0?`No vaults found.
|
|
76
|
+
`:`Vaults (${t.length})
|
|
77
|
+
${Y([{header:"Vault ID",value:e=>e.id},{header:"Type",value:e=>e.type},{header:"Name",value:e=>e.name},{header:"Path",value:e=>e.physicalPath}],t)}
|
|
78
|
+
`}function $t(t,e=[]){return L([["id",t.id],["name",t.name],["type",t.type],["physicalPath",t.physicalPath],["gitUrl",t.gitUrl],["createdAtUtc",t.createdAtUtc],["updatedAtUtc",t.updatedAtUtc],["bootstrapDiagnostics",String(t.bootstrapDiagnostics.length)],...e])}function ei(t){return{relativePath:E(t.relativePath)??"",fileName:E(t.fileName)??"",isDirectory:t.isDirectory===!0,extension:E(t.extension)??"",sizeBytes:typeof t.sizeBytes=="number"?t.sizeBytes:0,lastModifiedUtc:E(t.lastModifiedUtc),previewSupported:t.previewSupported===!0}}function ii(t){return{vaultId:E(t.id)??"",deleted:t.deleted===!0,deleteLocalFilesRequested:t.deleteLocalFilesRequested===!0,localFilesDeletionStatus:E(t.localFilesDeletionStatus),localFilesDeleted:t.localFilesDeleted===!0}}function si(t){return`Vault deleted
|
|
79
|
+
${L([["vaultId",t.vaultId],["deleted",String(t.deleted)],["deleteLocalFilesRequested",String(t.deleteLocalFilesRequested)],["localFilesDeletionStatus",t.localFilesDeletionStatus],["localFilesDeleted",String(t.localFilesDeleted)]])}`}function ri(t){return{vaultId:E(t.vaultId)??"",vaultName:E(t.vaultName)??"",physicalPath:E(t.physicalPath)??"",status:E(t.status)??"",errorCode:E(t.errorCode),message:E(t.message),isTruncated:t.isTruncated===!0,totalFileCount:typeof t.totalFileCount=="number"?t.totalFileCount:0,items:(t.items??[]).map(ei)}}function oi(t){const e=L([["vaultId",t.vaultId],["vaultName",t.vaultName],["physicalPath",t.physicalPath],["status",t.status],["errorCode",t.errorCode],["message",t.message],["isTruncated",String(t.isTruncated)],["totalFileCount",String(t.totalFileCount)]]);return t.items.length===0?`Vault files
|
|
80
|
+
${e}No files found.
|
|
81
|
+
`:`Vault files
|
|
82
|
+
${e}${Y([{header:"Relative Path",value:u=>u.relativePath},{header:"Directory",value:u=>u.isDirectory?"yes":"no"},{header:"Extension",value:u=>u.extension},{header:"Size",value:u=>String(u.sizeBytes)},{header:"Preview",value:u=>u.previewSupported?"yes":"no"}],t.items)}
|
|
83
|
+
`}function ni(t){return{vaultId:E(t.vaultId)??"",vaultName:E(t.vaultName)??"",physicalPath:E(t.physicalPath)??"",relativePath:E(t.relativePath)??"",fileName:E(t.fileName)??"",extension:E(t.extension)??"",sizeBytes:typeof t.sizeBytes=="number"?t.sizeBytes:0,lastModifiedUtc:E(t.lastModifiedUtc),status:E(t.status)??"",errorCode:E(t.errorCode),message:E(t.message),previewSupported:t.previewSupported===!0,contentTruncated:t.contentTruncated===!0,content:E(t.content)}}function ai(t){const e=L([["vaultId",t.vaultId],["vaultName",t.vaultName],["physicalPath",t.physicalPath],["relativePath",t.relativePath],["fileName",t.fileName],["extension",t.extension],["sizeBytes",String(t.sizeBytes)],["lastModifiedUtc",t.lastModifiedUtc],["status",t.status],["errorCode",t.errorCode],["message",t.message],["previewSupported",String(t.previewSupported)],["contentTruncated",String(t.contentTruncated)]]);if(!t.content)return`Vault file preview
|
|
84
|
+
${e}`;const u=t.content.endsWith(`
|
|
85
|
+
`)?"":`
|
|
86
|
+
`;return`Vault file preview
|
|
87
|
+
${e}content
|
|
88
|
+
-------
|
|
89
|
+
${t.content}${u}`}function ui(t,e){P(t.command("create").description("Create a vault through the generated vault client.")).requiredOption("--name <name>","Vault display name.").requiredOption("--type <type>","Vault type, such as folder, obsidian, or coderef.").requiredOption("--physical-path <path>","Vault physical path.").option("--git-url <url>","Optional git remote URL for git-backed vaults.").action(async function(o){const i=T(this,e),r=dt(await i.api.createVault({name:V(o.name,"--name"),type:V(o.type,"--type"),physicalPath:V(o.physicalPath,"--physical-path"),gitUrl:I(o.gitUrl)}));if(i.outputJson){i.io.stdout(w({vault:r}));return}i.io.stdout(`Vault created
|
|
90
|
+
${$t(r)}`)})}function ci(t,e){P(t.command("delete").description("Delete a vault by id and optionally request local file cleanup.")).requiredOption("--id <id>","Vault id to delete.").option("--delete-local-files","Request backend deletion of local vault files.").action(async function(o){const i=T(this,e),r=ii(await i.api.deleteVault(V(o.id,"--id"),o.deleteLocalFiles===!0));if(i.outputJson){i.io.stdout(w(r));return}i.io.stdout(si(r))})}function li(t,e){P(t.command("list").description("List files under a registered vault path.")).requiredOption("--id <id>","Vault id to browse.").option("--path <path>","Optional relative path under the vault root.").action(async function(o){const i=T(this,e),r=ri(await i.api.listVaultFiles(V(o.id,"--id"),I(o.path)));if(i.outputJson){i.io.stdout(w(r));return}i.io.stdout(oi(r))})}function di(t,e){P(t.command("preview").description("Preview supported file content from a registered vault.")).requiredOption("--id <id>","Vault id to browse.").requiredOption("--path <path>","Relative file path to preview.").action(async function(o){const i=T(this,e),r=ni(await i.api.previewVaultFile(V(o.id,"--id"),V(o.path,"--path")));if(i.outputJson){i.io.stdout(w(r));return}i.io.stdout(ai(r))})}function pi(t,e){P(t.command("list").description("List registered vaults through the generated vault client.")).action(async function(){const o=T(this,e),i=jt(await o.api.listVaults());if(o.outputJson){o.io.stdout(w(i));return}o.io.stdout(ti(i.vaults))})}function hi(t,e){P(t.command("update").description("Update a vault by merging provided fields into the current vault snapshot.")).requiredOption("--id <id>","Vault id to update.").option("--name <name>","Updated vault display name.").option("--type <type>","Updated vault type.").option("--physical-path <path>","Updated vault physical path.").option("--git-url <url>","Updated git remote URL.").action(async function(o){const i=I(o.name),r=I(o.type),a=I(o.physicalPath),c=I(o.gitUrl);if(!i&&!r&&!a&&!c)throw new N("Provide at least one field to update: --name, --type, --physical-path, or --git-url.");const h=T(this,e),O=V(o.id,"--id"),A=jt(await h.api.listVaults()).vaults.find(_=>_.id===O);if(!A)throw new ot(404,`Vault ${O} was not found in the latest vault snapshot.`);const C=dt(await h.api.updateVault(O,{name:i??A.name,type:r??A.type,physicalPath:a??A.physicalPath,gitUrl:c??A.gitUrl??null}));if(h.outputJson){h.io.stdout(w({vault:C}));return}h.io.stdout(`Vault updated
|
|
91
|
+
${$t(C)}`)})}function mi(t,e){const u=t.command("vault").description("Manage Hagi vaults and vault file browsing through generated backend APIs.");pi(u,e),ui(u,e),hi(u,e),ci(u,e);const o=u.command("files").description("Browse registered vault files and preview supported content.");li(o,e),di(o,e)}function fi(t){return t.includes("--json")}function Vt(t=wt(),e=!1){const u=new Qt;return u.name("hagi").description("HagiCode CLI for project, proposal, vault, chat, and AutoTask management.").showHelpAfterError().exitOverride(),u.configureOutput({writeOut:o=>{t.io.stdout(o)},writeErr:o=>{e||t.io.stderr(o)},getOutHelpWidth:()=>100,getErrHelpWidth:()=>100}),ge(u),je(u,t),Xe(u,t),mi(u,t),Ee(u,t),ye(u,t),u}function gi(t,e,u){return t.exitCode===0||t.code==="commander.helpDisplayed"||t.code==="commander.version"?0:(u&&e.io.stderr(bt({exitCode:D.USAGE,message:t.message},{json:!0})),D.USAGE)}async function vi(t=process.argv,e=wt()){const u=fi(t),o=Vt(e,u);try{return await o.parseAsync([...t]),0}catch(i){if(i instanceof Kt)return gi(i,e,u);const r=ee(i);return e.io.stderr(bt(r,{json:u})),r.exitCode}}Object.defineProperty(exports,"EXIT_CODES",{enumerable:!0,get:function(){return D}});Object.defineProperty(exports,"createCliApp",{enumerable:!0,get:function(){return Vt}});Object.defineProperty(exports,"runCli",{enumerable:!0,get:function(){return vi}});
|
package/dist/cli.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./chunks/main-
|
|
2
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./chunks/main-CILDKeJ3.js");s.runCli().then(e=>{e!==0&&(process.exitCode=e)}).catch(e=>{const n=e instanceof Error?e.stack??e.message:String(e);process.stderr.write(`${n}
|
|
3
3
|
`),process.exitCode=s.EXIT_CODES.UNKNOWN});
|
package/dist/main.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/main-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/main-CILDKeJ3.js");exports.createCliApp=e.createCliApp;exports.runCli=e.runCli;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hagicode/cli",
|
|
3
|
-
"version": "0.1.0-dev.
|
|
4
|
-
"description": "HagiCode CLI for proposal
|
|
3
|
+
"version": "0.1.0-dev.7.1.8b40188",
|
|
4
|
+
"description": "HagiCode CLI for project, proposal, vault, chat, and AutoTask management.",
|
|
5
5
|
"homepage": "https://github.com/HagiCode-org/cli#readme",
|
|
6
6
|
"bugs": {
|
|
7
7
|
"url": "https://github.com/HagiCode-org/cli/issues"
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
var ce=Object.create,X=Object.defineProperty,pe=Object.getOwnPropertyDescriptor,de=Object.getOwnPropertyNames,me=Object.getPrototypeOf,fe=Object.prototype.hasOwnProperty,H=(t,n)=>()=>(n||t((n={exports:{}}).exports,n),n.exports),ge=(t,n,c,p)=>{if(n&&typeof n=="object"||typeof n=="function")for(var s=de(n),i=0,o=s.length,l;i<o;i++)l=s[i],!fe.call(t,l)&&l!==c&&X(t,l,{get:(d=>n[d]).bind(null,l),enumerable:!(p=pe(n,l))||p.enumerable});return t},_e=(t,n,c)=>(c=t!=null?ce(me(t)):{},ge(n||!t||!t.__esModule?X(c,"default",{value:t,enumerable:!0}):c,t)),W=H((t=>{var n=class extends Error{constructor(p,s,i){super(i),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=s,this.exitCode=p,this.nestedError=void 0}},c=class extends n{constructor(p){super(1,"commander.invalidArgument",p),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};t.CommanderError=n,t.InvalidArgumentError=c})),M=H((t=>{var{InvalidArgumentError:n}=W(),c=class{constructor(s,i){switch(this.description=i||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,s[0]){case"<":this.required=!0,this._name=s.slice(1,-1);break;case"[":this.required=!1,this._name=s.slice(1,-1);break;default:this.required=!0,this._name=s;break}this._name.endsWith("...")&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_collectValue(s,i){return i===this.defaultValue||!Array.isArray(i)?[s]:(i.push(s),i)}default(s,i){return this.defaultValue=s,this.defaultValueDescription=i,this}argParser(s){return this.parseArg=s,this}choices(s){return this.argChoices=s.slice(),this.parseArg=(i,o)=>{if(!this.argChoices.includes(i))throw new n(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(i,o):i},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function p(s){const i=s.name()+(s.variadic===!0?"...":"");return s.required?"<"+i+">":"["+i+"]"}t.Argument=c,t.humanReadableArgName=p})),Y=H((t=>{var{humanReadableArgName:n}=M(),c=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(s){this.helpWidth=this.helpWidth??s.helpWidth??80}visibleCommands(s){const i=s.commands.filter(l=>!l._hidden),o=s._getHelpCommand();return o&&!o._hidden&&i.push(o),this.sortSubcommands&&i.sort((l,d)=>l.name().localeCompare(d.name())),i}compareOptions(s,i){const o=l=>l.short?l.short.replace(/^-/,""):l.long.replace(/^--/,"");return o(s).localeCompare(o(i))}visibleOptions(s){const i=s.options.filter(l=>!l.hidden),o=s._getHelpOption();if(o&&!o.hidden){const l=o.short&&s._findOption(o.short),d=o.long&&s._findOption(o.long);!l&&!d?i.push(o):o.long&&!d?i.push(s.createOption(o.long,o.description)):o.short&&!l&&i.push(s.createOption(o.short,o.description))}return this.sortOptions&&i.sort(this.compareOptions),i}visibleGlobalOptions(s){if(!this.showGlobalOptions)return[];const i=[];for(let o=s.parent;o;o=o.parent){const l=o.options.filter(d=>!d.hidden);i.push(...l)}return this.sortOptions&&i.sort(this.compareOptions),i}visibleArguments(s){return s._argsDescription&&s.registeredArguments.forEach(i=>{i.description=i.description||s._argsDescription[i.name()]||""}),s.registeredArguments.find(i=>i.description)?s.registeredArguments:[]}subcommandTerm(s){const i=s.registeredArguments.map(o=>n(o)).join(" ");return s._name+(s._aliases[0]?"|"+s._aliases[0]:"")+(s.options.length?" [options]":"")+(i?" "+i:"")}optionTerm(s){return s.flags}argumentTerm(s){return s.name()}longestSubcommandTermLength(s,i){return i.visibleCommands(s).reduce((o,l)=>Math.max(o,this.displayWidth(i.styleSubcommandTerm(i.subcommandTerm(l)))),0)}longestOptionTermLength(s,i){return i.visibleOptions(s).reduce((o,l)=>Math.max(o,this.displayWidth(i.styleOptionTerm(i.optionTerm(l)))),0)}longestGlobalOptionTermLength(s,i){return i.visibleGlobalOptions(s).reduce((o,l)=>Math.max(o,this.displayWidth(i.styleOptionTerm(i.optionTerm(l)))),0)}longestArgumentTermLength(s,i){return i.visibleArguments(s).reduce((o,l)=>Math.max(o,this.displayWidth(i.styleArgumentTerm(i.argumentTerm(l)))),0)}commandUsage(s){let i=s._name;s._aliases[0]&&(i=i+"|"+s._aliases[0]);let o="";for(let l=s.parent;l;l=l.parent)o=l.name()+" "+o;return o+i+" "+s.usage()}commandDescription(s){return s.description()}subcommandDescription(s){return s.summary()||s.description()}optionDescription(s){const i=[];if(s.argChoices&&i.push(`choices: ${s.argChoices.map(o=>JSON.stringify(o)).join(", ")}`),s.defaultValue!==void 0&&(s.required||s.optional||s.isBoolean()&&typeof s.defaultValue=="boolean")&&i.push(`default: ${s.defaultValueDescription||JSON.stringify(s.defaultValue)}`),s.presetArg!==void 0&&s.optional&&i.push(`preset: ${JSON.stringify(s.presetArg)}`),s.envVar!==void 0&&i.push(`env: ${s.envVar}`),i.length>0){const o=`(${i.join(", ")})`;return s.description?`${s.description} ${o}`:o}return s.description}argumentDescription(s){const i=[];if(s.argChoices&&i.push(`choices: ${s.argChoices.map(o=>JSON.stringify(o)).join(", ")}`),s.defaultValue!==void 0&&i.push(`default: ${s.defaultValueDescription||JSON.stringify(s.defaultValue)}`),i.length>0){const o=`(${i.join(", ")})`;return s.description?`${s.description} ${o}`:o}return s.description}formatItemList(s,i,o){return i.length===0?[]:[o.styleTitle(s),...i,""]}groupItems(s,i,o){const l=new Map;return s.forEach(d=>{const g=o(d);l.has(g)||l.set(g,[])}),i.forEach(d=>{const g=o(d);l.has(g)||l.set(g,[]),l.get(g).push(d)}),l}formatHelp(s,i){const o=i.padWidth(s,i),l=i.helpWidth??80;function d(A,I){return i.formatItem(A,o,I,i)}let g=[`${i.styleTitle("Usage:")} ${i.styleUsage(i.commandUsage(s))}`,""];const E=i.commandDescription(s);E.length>0&&(g=g.concat([i.boxWrap(i.styleCommandDescription(E),l),""]));const C=i.visibleArguments(s).map(A=>d(i.styleArgumentTerm(i.argumentTerm(A)),i.styleArgumentDescription(i.argumentDescription(A))));if(g=g.concat(this.formatItemList("Arguments:",C,i)),this.groupItems(s.options,i.visibleOptions(s),A=>A.helpGroupHeading??"Options:").forEach((A,I)=>{const P=A.map(x=>d(i.styleOptionTerm(i.optionTerm(x)),i.styleOptionDescription(i.optionDescription(x))));g=g.concat(this.formatItemList(I,P,i))}),i.showGlobalOptions){const A=i.visibleGlobalOptions(s).map(I=>d(i.styleOptionTerm(i.optionTerm(I)),i.styleOptionDescription(i.optionDescription(I))));g=g.concat(this.formatItemList("Global Options:",A,i))}return this.groupItems(s.commands,i.visibleCommands(s),A=>A.helpGroup()||"Commands:").forEach((A,I)=>{const P=A.map(x=>d(i.styleSubcommandTerm(i.subcommandTerm(x)),i.styleSubcommandDescription(i.subcommandDescription(x))));g=g.concat(this.formatItemList(I,P,i))}),g.join(`
|
|
2
|
-
`)}displayWidth(s){return p(s).length}styleTitle(s){return s}styleUsage(s){return s.split(" ").map(i=>i==="[options]"?this.styleOptionText(i):i==="[command]"?this.styleSubcommandText(i):i[0]==="["||i[0]==="<"?this.styleArgumentText(i):this.styleCommandText(i)).join(" ")}styleCommandDescription(s){return this.styleDescriptionText(s)}styleOptionDescription(s){return this.styleDescriptionText(s)}styleSubcommandDescription(s){return this.styleDescriptionText(s)}styleArgumentDescription(s){return this.styleDescriptionText(s)}styleDescriptionText(s){return s}styleOptionTerm(s){return this.styleOptionText(s)}styleSubcommandTerm(s){return s.split(" ").map(i=>i==="[options]"?this.styleOptionText(i):i[0]==="["||i[0]==="<"?this.styleArgumentText(i):this.styleSubcommandText(i)).join(" ")}styleArgumentTerm(s){return this.styleArgumentText(s)}styleOptionText(s){return s}styleArgumentText(s){return s}styleSubcommandText(s){return s}styleCommandText(s){return s}padWidth(s,i){return Math.max(i.longestOptionTermLength(s,i),i.longestGlobalOptionTermLength(s,i),i.longestSubcommandTermLength(s,i),i.longestArgumentTermLength(s,i))}preformatted(s){return/\n[^\S\r\n]/.test(s)}formatItem(s,i,o,l){const g=" ".repeat(2);if(!o)return g+s;const E=s.padEnd(i+s.length-l.displayWidth(s)),C=2,A=(this.helpWidth??80)-i-C-2;let I;return A<this.minWidthToWrap||l.preformatted(o)?I=o:I=l.boxWrap(o,A).replace(/\n/g,`
|
|
3
|
-
`+" ".repeat(i+C)),g+E+" ".repeat(C)+I.replace(/\n/g,`
|
|
4
|
-
${g}`)}boxWrap(s,i){if(i<this.minWidthToWrap)return s;const o=s.split(/\r\n|\n/),l=/[\s]*[^\s]+/g,d=[];return o.forEach(g=>{const E=g.match(l);if(E===null){d.push("");return}let C=[E.shift()],A=this.displayWidth(C[0]);E.forEach(I=>{const P=this.displayWidth(I);if(A+P<=i){C.push(I),A+=P;return}d.push(C.join(""));const x=I.trimStart();C=[x],A=this.displayWidth(x)}),d.push(C.join(""))}),d.join(`
|
|
5
|
-
`)}};function p(s){return s.replace(/\x1b\[\d*(;\d*)*m/g,"")}t.Help=c,t.stripColor=p})),Z=H((t=>{var{InvalidArgumentError:n}=W(),c=class{constructor(o,l){this.flags=o,this.description=l||"",this.required=o.includes("<"),this.optional=o.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(o),this.mandatory=!1;const d=i(o);this.short=d.shortFlag,this.long=d.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(o,l){return this.defaultValue=o,this.defaultValueDescription=l,this}preset(o){return this.presetArg=o,this}conflicts(o){return this.conflictsWith=this.conflictsWith.concat(o),this}implies(o){let l=o;return typeof o=="string"&&(l={[o]:!0}),this.implied=Object.assign(this.implied||{},l),this}env(o){return this.envVar=o,this}argParser(o){return this.parseArg=o,this}makeOptionMandatory(o=!0){return this.mandatory=!!o,this}hideHelp(o=!0){return this.hidden=!!o,this}_collectValue(o,l){return l===this.defaultValue||!Array.isArray(l)?[o]:(l.push(o),l)}choices(o){return this.argChoices=o.slice(),this.parseArg=(l,d)=>{if(!this.argChoices.includes(l))throw new n(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(l,d):l},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?s(this.name().replace(/^no-/,"")):s(this.name())}helpGroup(o){return this.helpGroupHeading=o,this}is(o){return this.short===o||this.long===o}isBoolean(){return!this.required&&!this.optional&&!this.negate}},p=class{constructor(o){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,o.forEach(l=>{l.negate?this.negativeOptions.set(l.attributeName(),l):this.positiveOptions.set(l.attributeName(),l)}),this.negativeOptions.forEach((l,d)=>{this.positiveOptions.has(d)&&this.dualOptions.add(d)})}valueFromOption(o,l){const d=l.attributeName();if(!this.dualOptions.has(d))return!0;const g=this.negativeOptions.get(d).presetArg,E=g!==void 0?g:!1;return l.negate===(E===o)}};function s(o){return o.split("-").reduce((l,d)=>l+d[0].toUpperCase()+d.slice(1))}function i(o){let l,d;const g=/^-[^-]$/,E=/^--[^-]/,C=o.split(/[ |,]+/).concat("guard");if(g.test(C[0])&&(l=C.shift()),E.test(C[0])&&(d=C.shift()),!l&&g.test(C[0])&&(l=C.shift()),!l&&E.test(C[0])&&(l=d,d=C.shift()),C[0].startsWith("-")){const A=C[0],I=`option creation failed due to '${A}' in option flags '${o}'`;throw/^-[^-][^-]/.test(A)?new Error(`${I}
|
|
6
|
-
- a short flag is a single dash and a single character
|
|
7
|
-
- either use a single dash and a single character (for a short flag)
|
|
8
|
-
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`):g.test(A)?new Error(`${I}
|
|
9
|
-
- too many short flags`):E.test(A)?new Error(`${I}
|
|
10
|
-
- too many long flags`):new Error(`${I}
|
|
11
|
-
- unrecognised flag format`)}if(l===void 0&&d===void 0)throw new Error(`option creation failed due to no flags found in '${o}'.`);return{shortFlag:l,longFlag:d}}t.Option=c,t.DualOptions=p})),Oe=H((t=>{var n=3;function c(s,i){if(Math.abs(s.length-i.length)>n)return Math.max(s.length,i.length);const o=[];for(let l=0;l<=s.length;l++)o[l]=[l];for(let l=0;l<=i.length;l++)o[0][l]=l;for(let l=1;l<=i.length;l++)for(let d=1;d<=s.length;d++){let g=1;s[d-1]===i[l-1]?g=0:g=1,o[d][l]=Math.min(o[d-1][l]+1,o[d][l-1]+1,o[d-1][l-1]+g),d>1&&l>1&&s[d-1]===i[l-2]&&s[d-2]===i[l-1]&&(o[d][l]=Math.min(o[d][l],o[d-2][l-2]+1))}return o[s.length][i.length]}function p(s,i){if(!i||i.length===0)return"";i=Array.from(new Set(i));const o=s.startsWith("--");o&&(s=s.slice(2),i=i.map(E=>E.slice(2)));let l=[],d=n;const g=.4;return i.forEach(E=>{if(E.length<=1)return;const C=c(s,E),A=Math.max(s.length,E.length);(A-C)/A>g&&(C<d?(d=C,l=[E]):C===d&&l.push(E))}),l.sort((E,C)=>E.localeCompare(C)),o&&(l=l.map(E=>`--${E}`)),l.length>1?`
|
|
12
|
-
(Did you mean one of ${l.join(", ")}?)`:l.length===1?`
|
|
13
|
-
(Did you mean ${l[0]}?)`:""}t.suggestSimilar=p})),ve=H((t=>{var n=require("node:events").EventEmitter,c=require("node:child_process"),p=require("node:path"),s=require("node:fs"),i=require("node:process"),{Argument:o,humanReadableArgName:l}=M(),{CommanderError:d}=W(),{Help:g,stripColor:E}=Y(),{Option:C,DualOptions:A}=Z(),{suggestSimilar:I}=Oe(),P=class ee extends n{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:r=>i.stdout.write(r),writeErr:r=>i.stderr.write(r),outputError:(r,a)=>a(r),getOutHelpWidth:()=>i.stdout.isTTY?i.stdout.columns:void 0,getErrHelpWidth:()=>i.stderr.isTTY?i.stderr.columns:void 0,getOutHasColors:()=>L()??(i.stdout.isTTY&&i.stdout.hasColors?.()),getErrHasColors:()=>L()??(i.stderr.isTTY&&i.stderr.hasColors?.()),stripColor:r=>E(r)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){const e=[];for(let r=this;r;r=r.parent)e.push(r);return e}command(e,r,a){let u=r,h=a;typeof u=="object"&&u!==null&&(h=u,u=null),h=h||{};const[,m,_]=e.match(/([^ ]+) *(.*)/),O=this.createCommand(m);return u&&(O.description(u),O._executableHandler=!0),h.isDefault&&(this._defaultCommandName=O._name),O._hidden=!!(h.noHelp||h.hidden),O._executableFile=h.executableFile||null,_&&O.arguments(_),this._registerCommand(O),O.parent=this,O.copyInheritedSettings(this),u?this:O}createCommand(e){return new ee(e)}createHelp(){return Object.assign(new g,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(this._outputConfiguration={...this._outputConfiguration,...e},this)}showHelpAfterError(e=!0){return typeof e!="string"&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,r){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
|
|
14
|
-
- specify the name in Command constructor or using .name()`);return r=r||{},r.isDefault&&(this._defaultCommandName=e._name),(r.noHelp||r.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,r){return new o(e,r)}argument(e,r,a,u){const h=this.createArgument(e,r);return typeof a=="function"?h.default(u).argParser(a):h.default(a),this.addArgument(h),this}arguments(e){return e.trim().split(/ +/).forEach(r=>{this.argument(r)}),this}addArgument(e){const r=this.registeredArguments.slice(-1)[0];if(r?.variadic)throw new Error(`only the last argument can be variadic '${r.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,r){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,e&&this._defaultCommandGroup&&this._initCommandGroup(this._getHelpCommand()),this;const[,a,u]=(e??"help [command]").match(/([^ ]+) *(.*)/),h=r??"display help for command",m=this.createCommand(a);return m.helpOption(!1),u&&m.arguments(u),h&&m.description(h),this._addImplicitHelpCommand=!0,this._helpCommand=m,(e||r)&&this._initCommandGroup(m),this}addHelpCommand(e,r){return typeof e!="object"?(this.helpCommand(e,r),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this._initCommandGroup(e),this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,r){const a=["preSubcommand","preAction","postAction"];if(!a.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
|
|
15
|
-
Expecting one of '${a.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(r):this._lifeCycleHooks[e]=[r],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=r=>{if(r.code!=="commander.executeSubCommandAsync")throw r},this}_exit(e,r,a){this._exitCallback&&this._exitCallback(new d(e,r,a)),i.exit(e)}action(e){const r=a=>{const u=this.registeredArguments.length,h=a.slice(0,u);return this._storeOptionsAsProperties?h[u]=this:h[u]=this.opts(),h.push(this),e.apply(this,h)};return this._actionHandler=r,this}createOption(e,r){return new C(e,r)}_callParseArg(e,r,a,u){try{return e.parseArg(r,a)}catch(h){if(h.code==="commander.invalidArgument"){const m=`${u} ${h.message}`;this.error(m,{exitCode:h.exitCode,code:h.code})}throw h}}_registerOption(e){const r=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(r){const a=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${a}'
|
|
16
|
-
- already used by option '${r.flags}'`)}this._initOptionGroup(e),this.options.push(e)}_registerCommand(e){const r=u=>[u.name()].concat(u.aliases()),a=r(e).find(u=>this._findCommand(u));if(a){const u=r(this._findCommand(a)).join("|"),h=r(e).join("|");throw new Error(`cannot add command '${h}' as already have command '${u}'`)}this._initCommandGroup(e),this.commands.push(e)}addOption(e){this._registerOption(e);const r=e.name(),a=e.attributeName();if(e.negate){const h=e.long.replace(/^--no-/,"--");this._findOption(h)||this.setOptionValueWithSource(a,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(a,e.defaultValue,"default");const u=(h,m,_)=>{h==null&&e.presetArg!==void 0&&(h=e.presetArg);const O=this.getOptionValue(a);h!==null&&e.parseArg?h=this._callParseArg(e,h,O,m):h!==null&&e.variadic&&(h=e._collectValue(h,O)),h==null&&(e.negate?h=!1:e.isBoolean()||e.optional?h=!0:h=""),this.setOptionValueWithSource(a,h,_)};return this.on("option:"+r,h=>{u(h,`error: option '${e.flags}' argument '${h}' is invalid.`,"cli")}),e.envVar&&this.on("optionEnv:"+r,h=>{u(h,`error: option '${e.flags}' value '${h}' from env '${e.envVar}' is invalid.`,"env")}),this}_optionEx(e,r,a,u,h){if(typeof r=="object"&&r instanceof C)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");const m=this.createOption(r,a);if(m.makeOptionMandatory(!!e.mandatory),typeof u=="function")m.default(h).argParser(u);else if(u instanceof RegExp){const _=u;u=(O,S)=>{const f=_.exec(O);return f?f[0]:S},m.default(h).argParser(u)}else m.default(u);return this.addOption(m)}option(e,r,a,u){return this._optionEx({},e,r,a,u)}requiredOption(e,r,a,u){return this._optionEx({mandatory:!0},e,r,a,u)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,r){return this.setOptionValueWithSource(e,r,void 0)}setOptionValueWithSource(e,r,a){return this._storeOptionsAsProperties?this[e]=r:this._optionValues[e]=r,this._optionValueSources[e]=a,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let r;return this._getCommandAndAncestors().forEach(a=>{a.getOptionValueSource(e)!==void 0&&(r=a.getOptionValueSource(e))}),r}_prepareUserArgs(e,r){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(r=r||{},e===void 0&&r.from===void 0){i.versions?.electron&&(r.from="electron");const u=i.execArgv??[];(u.includes("-e")||u.includes("--eval")||u.includes("-p")||u.includes("--print"))&&(r.from="eval")}e===void 0&&(e=i.argv),this.rawArgs=e.slice();let a;switch(r.from){case void 0:case"node":this._scriptPath=e[1],a=e.slice(2);break;case"electron":i.defaultApp?(this._scriptPath=e[1],a=e.slice(2)):a=e.slice(1);break;case"user":a=e.slice(0);break;case"eval":a=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${r.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",a}parse(e,r){this._prepareForParse();const a=this._prepareUserArgs(e,r);return this._parseCommand([],a),this}async parseAsync(e,r){this._prepareForParse();const a=this._prepareUserArgs(e,r);return await this._parseCommand([],a),this}_prepareForParse(){this._savedState===null?this.saveStateBeforeParse():this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw new Error(`Can not call parse again when storeOptionsAsProperties is true.
|
|
17
|
-
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(e,r,a){if(s.existsSync(e))return;const u=`'${e}' does not exist
|
|
18
|
-
- if '${a}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
19
|
-
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
20
|
-
- ${r?`searched for local subcommand relative to directory '${r}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory"}`;throw new Error(u)}_executeSubCommand(e,r){r=r.slice();let a=!1;const u=[".js",".ts",".tsx",".mjs",".cjs"];function h(f,v){const T=p.resolve(f,v);if(s.existsSync(T))return T;if(u.includes(p.extname(v)))return;const K=u.find(he=>s.existsSync(`${T}${he}`));if(K)return`${T}${K}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let m=e._executableFile||`${this._name}-${e._name}`,_=this._executableDir||"";if(this._scriptPath){let f;try{f=s.realpathSync(this._scriptPath)}catch{f=this._scriptPath}_=p.resolve(p.dirname(f),_)}if(_){let f=h(_,m);if(!f&&!e._executableFile&&this._scriptPath){const v=p.basename(this._scriptPath,p.extname(this._scriptPath));v!==this._name&&(f=h(_,`${v}-${e._name}`))}m=f||m}a=u.includes(p.extname(m));let O;i.platform!=="win32"?a?(r.unshift(m),r=x(i.execArgv).concat(r),O=c.spawn(i.argv[0],r,{stdio:"inherit"})):O=c.spawn(m,r,{stdio:"inherit"}):(this._checkForMissingExecutable(m,_,e._name),r.unshift(m),r=x(i.execArgv).concat(r),O=c.spawn(i.execPath,r,{stdio:"inherit"})),O.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(f=>{i.on(f,()=>{O.killed===!1&&O.exitCode===null&&O.kill(f)})});const S=this._exitCallback;O.on("close",f=>{f=f??1,S?S(new d(f,"commander.executeSubCommandAsync","(close)")):i.exit(f)}),O.on("error",f=>{if(f.code==="ENOENT")this._checkForMissingExecutable(m,_,e._name);else if(f.code==="EACCES")throw new Error(`'${m}' not executable`);if(!S)i.exit(1);else{const v=new d(1,"commander.executeSubCommandAsync","(error)");v.nestedError=f,S(v)}}),this.runningCommand=O}_dispatchSubcommand(e,r,a){const u=this._findCommand(e);u||this.help({error:!0}),u._prepareForParse();let h;return h=this._chainOrCallSubCommandHook(h,u,"preSubcommand"),h=this._chainOrCall(h,()=>{if(u._executableHandler)this._executeSubCommand(u,r.concat(a));else return u._parseCommand(r,a)}),h}_dispatchHelpCommand(e){e||this.help();const r=this._findCommand(e);return r&&!r._executableHandler&&r.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,r)=>{e.required&&this.args[r]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){const e=(a,u,h)=>{let m=u;if(u!==null&&a.parseArg){const _=`error: command-argument value '${u}' is invalid for argument '${a.name()}'.`;m=this._callParseArg(a,u,h,_)}return m};this._checkNumberOfArguments();const r=[];this.registeredArguments.forEach((a,u)=>{let h=a.defaultValue;a.variadic?u<this.args.length?(h=this.args.slice(u),a.parseArg&&(h=h.reduce((m,_)=>e(a,_,m),a.defaultValue))):h===void 0&&(h=[]):u<this.args.length&&(h=this.args[u],a.parseArg&&(h=e(a,h,a.defaultValue))),r[u]=h}),this.processedArgs=r}_chainOrCall(e,r){return e?.then&&typeof e.then=="function"?e.then(()=>r()):r()}_chainOrCallHooks(e,r){let a=e;const u=[];return this._getCommandAndAncestors().reverse().filter(h=>h._lifeCycleHooks[r]!==void 0).forEach(h=>{h._lifeCycleHooks[r].forEach(m=>{u.push({hookedCommand:h,callback:m})})}),r==="postAction"&&u.reverse(),u.forEach(h=>{a=this._chainOrCall(a,()=>h.callback(h.hookedCommand,this))}),a}_chainOrCallSubCommandHook(e,r,a){let u=e;return this._lifeCycleHooks[a]!==void 0&&this._lifeCycleHooks[a].forEach(h=>{u=this._chainOrCall(u,()=>h(this,r))}),u}_parseCommand(e,r){const a=this.parseOptions(r);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(a.operands),r=a.unknown,this.args=e.concat(r),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),r);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(r),this._dispatchSubcommand(this._defaultCommandName,e,r);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(a.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();const u=()=>{a.unknown.length>0&&this.unknownOption(a.unknown[0])},h=`command:${this.name()}`;if(this._actionHandler){u(),this._processArguments();let m;return m=this._chainOrCallHooks(m,"preAction"),m=this._chainOrCall(m,()=>this._actionHandler(this.processedArgs)),this.parent&&(m=this._chainOrCall(m,()=>{this.parent.emit(h,e,r)})),m=this._chainOrCallHooks(m,"postAction"),m}if(this.parent?.listenerCount(h))u(),this._processArguments(),this.parent.emit(h,e,r);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,r);this.listenerCount("command:*")?this.emit("command:*",e,r):this.commands.length?this.unknownCommand():(u(),this._processArguments())}else this.commands.length?(u(),this.help({error:!0})):(u(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(r=>r._name===e||r._aliases.includes(e))}_findOption(e){return this.options.find(r=>r.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(r=>{r.mandatory&&e.getOptionValue(r.attributeName())===void 0&&e.missingMandatoryOptionValue(r)})})}_checkForConflictingLocalOptions(){const e=this.options.filter(r=>{const a=r.attributeName();return this.getOptionValue(a)===void 0?!1:this.getOptionValueSource(a)!=="default"});e.filter(r=>r.conflictsWith.length>0).forEach(r=>{const a=e.find(u=>r.conflictsWith.includes(u.attributeName()));a&&this._conflictingOption(r,a)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){const r=[],a=[];let u=r;function h(f){return f.length>1&&f[0]==="-"}const m=f=>/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(f)?!this._getCommandAndAncestors().some(v=>v.options.map(T=>T.short).some(T=>/^-\d$/.test(T))):!1;let _=null,O=null,S=0;for(;S<e.length||O;){const f=O??e[S++];if(O=null,f==="--"){u===a&&u.push(f),u.push(...e.slice(S));break}if(_&&(!h(f)||m(f))){this.emit(`option:${_.name()}`,f);continue}if(_=null,h(f)){const v=this._findOption(f);if(v){if(v.required){const T=e[S++];T===void 0&&this.optionMissingArgument(v),this.emit(`option:${v.name()}`,T)}else if(v.optional){let T=null;S<e.length&&(!h(e[S])||m(e[S]))&&(T=e[S++]),this.emit(`option:${v.name()}`,T)}else this.emit(`option:${v.name()}`);_=v.variadic?v:null;continue}}if(f.length>2&&f[0]==="-"&&f[1]!=="-"){const v=this._findOption(`-${f[1]}`);if(v){v.required||v.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${v.name()}`,f.slice(2)):(this.emit(`option:${v.name()}`),O=`-${f.slice(2)}`);continue}}if(/^--[^=]+=/.test(f)){const v=f.indexOf("="),T=this._findOption(f.slice(0,v));if(T&&(T.required||T.optional)){this.emit(`option:${T.name()}`,f.slice(v+1));continue}}if(u===r&&h(f)&&!(this.commands.length===0&&m(f))&&(u=a),(this._enablePositionalOptions||this._passThroughOptions)&&r.length===0&&a.length===0){if(this._findCommand(f)){r.push(f),a.push(...e.slice(S));break}else if(this._getHelpCommand()&&f===this._getHelpCommand().name()){r.push(f,...e.slice(S));break}else if(this._defaultCommandName){a.push(f,...e.slice(S));break}}if(this._passThroughOptions){u.push(f,...e.slice(S));break}u.push(f)}return{operands:r,unknown:a}}opts(){if(this._storeOptionsAsProperties){const e={},r=this.options.length;for(let a=0;a<r;a++){const u=this.options[a].attributeName();e[u]=u===this._versionOptionName?this._version:this[u]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,r)=>Object.assign(e,r.opts()),{})}error(e,r){this._outputConfiguration.outputError(`${e}
|
|
21
|
-
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
22
|
-
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
23
|
-
`),this.outputHelp({error:!0}));const a=r||{},u=a.exitCode||1,h=a.code||"commander.error";this._exit(u,h,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in i.env){const r=e.attributeName();(this.getOptionValue(r)===void 0||["default","config","env"].includes(this.getOptionValueSource(r)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,i.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){const e=new A(this.options),r=a=>this.getOptionValue(a)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(a));this.options.filter(a=>a.implied!==void 0&&r(a.attributeName())&&e.valueFromOption(this.getOptionValue(a.attributeName()),a)).forEach(a=>{Object.keys(a.implied).filter(u=>!r(u)).forEach(u=>{this.setOptionValueWithSource(u,a.implied[u],"implied")})})}missingArgument(e){const r=`error: missing required argument '${e}'`;this.error(r,{code:"commander.missingArgument"})}optionMissingArgument(e){const r=`error: option '${e.flags}' argument missing`;this.error(r,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){const r=`error: required option '${e.flags}' not specified`;this.error(r,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,r){const a=m=>{const _=m.attributeName(),O=this.getOptionValue(_),S=this.options.find(v=>v.negate&&_===v.attributeName()),f=this.options.find(v=>!v.negate&&_===v.attributeName());return S&&(S.presetArg===void 0&&O===!1||S.presetArg!==void 0&&O===S.presetArg)?S:f||m},u=m=>{const _=a(m),O=_.attributeName();return this.getOptionValueSource(O)==="env"?`environment variable '${_.envVar}'`:`option '${_.flags}'`},h=`error: ${u(e)} cannot be used with ${u(r)}`;this.error(h,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let r="";if(e.startsWith("--")&&this._showSuggestionAfterError){let u=[],h=this;do{const m=h.createHelp().visibleOptions(h).filter(_=>_.long).map(_=>_.long);u=u.concat(m),h=h.parent}while(h&&!h._enablePositionalOptions);r=I(e,u)}const a=`error: unknown option '${e}'${r}`;this.error(a,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;const r=this.registeredArguments.length,a=r===1?"":"s",u=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${r} argument${a} but got ${e.length}.`;this.error(u,{code:"commander.excessArguments"})}unknownCommand(){const e=this.args[0];let r="";if(this._showSuggestionAfterError){const u=[];this.createHelp().visibleCommands(this).forEach(h=>{u.push(h.name()),h.alias()&&u.push(h.alias())}),r=I(e,u)}const a=`error: unknown command '${e}'${r}`;this.error(a,{code:"commander.unknownCommand"})}version(e,r,a){if(e===void 0)return this._version;this._version=e,r=r||"-V, --version",a=a||"output the version number";const u=this.createOption(r,a);return this._versionOptionName=u.attributeName(),this._registerOption(u),this.on("option:"+u.name(),()=>{this._outputConfiguration.writeOut(`${e}
|
|
24
|
-
`),this._exit(0,"commander.version",e)}),this}description(e,r){return e===void 0&&r===void 0?this._description:(this._description=e,r&&(this._argsDescription=r),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let r=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(r=this.commands[this.commands.length-1]),e===r._name)throw new Error("Command alias can't be the same as its name");const a=this.parent?._findCommand(e);if(a){const u=[a.name()].concat(a.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${u}'`)}return r._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(r=>this.alias(r)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;const r=this.registeredArguments.map(a=>l(a));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?r:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}helpGroup(e){return e===void 0?this._helpGroupHeading??"":(this._helpGroupHeading=e,this)}commandsGroup(e){return e===void 0?this._defaultCommandGroup??"":(this._defaultCommandGroup=e,this)}optionsGroup(e){return e===void 0?this._defaultOptionGroup??"":(this._defaultOptionGroup=e,this)}_initOptionGroup(e){this._defaultOptionGroup&&!e.helpGroupHeading&&e.helpGroup(this._defaultOptionGroup)}_initCommandGroup(e){this._defaultCommandGroup&&!e.helpGroup()&&e.helpGroup(this._defaultCommandGroup)}nameFromFilename(e){return this._name=p.basename(e,p.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){const r=this.createHelp(),a=this._getOutputContext(e);r.prepareContext({error:a.error,helpWidth:a.helpWidth,outputHasColors:a.hasColors});const u=r.formatHelp(this,r);return a.hasColors?u:this._outputConfiguration.stripColor(u)}_getOutputContext(e){e=e||{};const r=!!e.error;let a,u,h;return r?(a=_=>this._outputConfiguration.writeErr(_),u=this._outputConfiguration.getErrHasColors(),h=this._outputConfiguration.getErrHelpWidth()):(a=_=>this._outputConfiguration.writeOut(_),u=this._outputConfiguration.getOutHasColors(),h=this._outputConfiguration.getOutHelpWidth()),{error:r,write:_=>(u||(_=this._outputConfiguration.stripColor(_)),a(_)),hasColors:u,helpWidth:h}}outputHelp(e){let r;typeof e=="function"&&(r=e,e=void 0);const a=this._getOutputContext(e),u={error:a.error,write:a.write,command:this};this._getCommandAndAncestors().reverse().forEach(m=>m.emit("beforeAllHelp",u)),this.emit("beforeHelp",u);let h=this.helpInformation({error:a.error});if(r&&(h=r(h),typeof h!="string"&&!Buffer.isBuffer(h)))throw new Error("outputHelp callback must return a string or a Buffer");a.write(h),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",u),this._getCommandAndAncestors().forEach(m=>m.emit("afterAllHelp",u))}helpOption(e,r){return typeof e=="boolean"?(e?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(e??"-h, --help",r??"display help for command"),(e||r)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this._initOptionGroup(e),this}help(e){this.outputHelp(e);let r=Number(i.exitCode??0);r===0&&e&&typeof e!="function"&&e.error&&(r=1),this._exit(r,"commander.help","(outputHelp)")}addHelpText(e,r){const a=["beforeAll","before","after","afterAll"];if(!a.includes(e))throw new Error(`Unexpected value for position to addHelpText.
|
|
25
|
-
Expecting one of '${a.join("', '")}'`);const u=`${e}Help`;return this.on(u,h=>{let m;typeof r=="function"?m=r({error:h.error,command:h.command}):m=r,m&&h.write(`${m}
|
|
26
|
-
`)}),this}_outputHelpIfRequested(e){const r=this._getHelpOption();r&&e.find(a=>r.is(a))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function x(ue){return ue.map(e=>{if(!e.startsWith("--inspect"))return e;let r,a="127.0.0.1",u="9229",h;return(h=e.match(/^(--inspect(-brk)?)$/))!==null?r=h[1]:(h=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(r=h[1],/^\d+$/.test(h[3])?u=h[3]:a=h[3]):(h=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(r=h[1],a=h[3],u=h[4]),r&&u!=="0"?`${r}=${a}:${parseInt(u)+1}`:e})}function L(){if(i.env.NO_COLOR||i.env.FORCE_COLOR==="0"||i.env.FORCE_COLOR==="false")return!1;if(i.env.FORCE_COLOR||i.env.CLICOLOR_FORCE!==void 0)return!0}t.Command=P,t.useColor=L})),Ce=H((t=>{var{Argument:n}=M(),{Command:c}=ve(),{CommanderError:p,InvalidArgumentError:s}=W(),{Help:i}=Y(),{Option:o}=Z();t.program=new c,t.createCommand=l=>new c(l),t.createOption=(l,d)=>new o(l,d),t.createArgument=(l,d)=>new n(l,d),t.Command=c,t.Option=o,t.Argument=n,t.Help=i,t.CommanderError=p,t.InvalidArgumentError=s,t.InvalidOptionArgumentError=s})),Ae=_e(Ce(),1),{program:at,createCommand:lt,createArgument:ut,createOption:ht,CommanderError:be,InvalidArgumentError:ct,InvalidOptionArgumentError:pt,Command:Ee,Argument:dt,Option:mt,Help:ft}=Ae.default;function V(t){return`${JSON.stringify(t,null,2)}
|
|
27
|
-
`}var ye=(function(t){return t.INIT="Init",t.COMPLETED="Completed",t.ARCHIVED="Archived",t.DRAFTING="Drafting",t.EXECUTION_COMPLETED="ExecutionCompleted",t.OPTIMIZING="Optimizing",t.OPENSPECING="Openspecing",t.REVIEWING="Reviewing",t.EXECUTING="Executing",t.ARCHIVING="Archiving",t})({});function te(t){return t.replace(/\s+/g," ").trim()}function Se(t,n){const c=n.map(i=>t.map(o=>te(o.value(i)))),p=t.map((i,o)=>{const l=c.map(d=>d[o].length);return Math.max(i.header.length,...l)}),s=i=>i.map((o,l)=>o.padEnd(p[l])).join(" ").trimEnd();return[s(t.map(i=>i.header)),s(p.map(i=>"-".repeat(i))),...c.map(s)].join(`
|
|
28
|
-
`)}function Ie(t){const n=t.filter(([,p])=>p!==void 0&&p!==""),c=Math.max(...n.map(([p])=>p.length));return`${n.map(([p,s])=>`${p.padEnd(c)} ${te(s??"")}`).join(`
|
|
29
|
-
`)}
|
|
30
|
-
`}function Q(t){return t?.value?.trim()??""}function ie(t){return{sessionId:Q(t.sessionId),title:t.title,type:t.type,status:t.status,projectId:Q(t.projectId),proposalName:t.proposalName??void 0,archived:t.status===ye.ARCHIVED,lastActiveAt:t.lastActiveAt??void 0,enableIndependentWorkspace:t.enableIndependentWorkspace,baseBranch:t.baseBranch??void 0}}function Te(t){return{sessions:t.sessions.map(ie)}}function we(t){return t.length===0?`No proposal sessions found.
|
|
31
|
-
`:`Proposal sessions (${t.length})
|
|
32
|
-
${Se([{header:"Session ID",value:n=>n.sessionId},{header:"Title",value:n=>n.title},{header:"Status",value:n=>n.status},{header:"Project ID",value:n=>n.projectId},{header:"Archived",value:n=>n.archived?"yes":"no"}],t)}
|
|
33
|
-
`}function xe(t,n=[]){return Ie([["sessionId",t.sessionId],["type",t.type],["title",t.title],["status",t.status],["projectId",t.projectId],["proposalName",t.proposalName],["independentWorkspace",String(t.enableIndependentWorkspace)],["baseBranch",t.baseBranch],...n])}var b={BASE:"",VERSION:"1",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:void 0,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0};function N(t){const n=t?.trim();return n||void 0}function Pe(t={},n=process.env){return{baseUrl:N(t.baseUrl)??N(n.HAGI_API_BASE_URL)??"http://127.0.0.1:35168",token:N(t.token)??N(n.HAGI_API_TOKEN),lang:N(t.lang)??N(n.HAGI_API_LANG)}}function $e(t={},n=process.env){const c=Pe(t,n);return b.BASE=c.baseUrl,b.WITH_CREDENTIALS=!1,b.CREDENTIALS="omit",b.TOKEN=c.token,b.HEADERS=c.lang?{"Accept-Language":c.lang}:void 0,c}var B=class extends Error{url;status;statusText;body;request;constructor(t,n,c){super(c),this.name="ApiError",this.url=n.url,this.status=n.status,this.statusText=n.statusText,this.body=n.body,this.request=t}},He=class extends Error{constructor(t){super(t),this.name="CancelError"}get isCancelled(){return!0}},Ne=class{#t;#i;#e;#s;#n;#o;#r;constructor(t){this.#t=!1,this.#i=!1,this.#e=!1,this.#s=[],this.#n=new Promise((n,c)=>{this.#o=n,this.#r=c;const p=o=>{this.#t||this.#i||this.#e||(this.#t=!0,this.#o&&this.#o(o))},s=o=>{this.#t||this.#i||this.#e||(this.#i=!0,this.#r&&this.#r(o))},i=o=>{this.#t||this.#i||this.#e||this.#s.push(o)};return Object.defineProperty(i,"isResolved",{get:()=>this.#t}),Object.defineProperty(i,"isRejected",{get:()=>this.#i}),Object.defineProperty(i,"isCancelled",{get:()=>this.#e}),t(p,s,i)})}get[Symbol.toStringTag](){return"Cancellable Promise"}then(t,n){return this.#n.then(t,n)}catch(t){return this.#n.catch(t)}finally(t){return this.#n.finally(t)}cancel(){if(!(this.#t||this.#i||this.#e)){if(this.#e=!0,this.#s.length)try{for(const t of this.#s)t()}catch(t){console.warn("Cancellation threw an error",t);return}this.#s.length=0,this.#r&&this.#r(new He("Request aborted"))}}get isCancelled(){return this.#e}},J=t=>t!=null,k=t=>typeof t=="string",U=t=>k(t)&&t!=="",z=t=>typeof t=="object"&&typeof t.type=="string"&&typeof t.stream=="function"&&typeof t.arrayBuffer=="function"&&typeof t.constructor=="function"&&typeof t.constructor.name=="string"&&/^(Blob|File)$/.test(t.constructor.name)&&/^(Blob|File)$/.test(t[Symbol.toStringTag]),se=t=>t instanceof FormData,je=t=>{try{return btoa(t)}catch{return Buffer.from(t).toString("base64")}},Ve=t=>{const n=[],c=(s,i)=>{n.push(`${encodeURIComponent(s)}=${encodeURIComponent(String(i))}`)},p=(s,i)=>{J(i)&&(Array.isArray(i)?i.forEach(o=>{p(s,o)}):typeof i=="object"?Object.entries(i).forEach(([o,l])=>{p(`${s}[${o}]`,l)}):c(s,i))};return Object.entries(t).forEach(([s,i])=>{p(s,i)}),n.length>0?`?${n.join("&")}`:""},ke=(t,n)=>{const c=t.ENCODE_PATH||encodeURI,p=n.url.replace("{api-version}",t.VERSION).replace(/{(.*?)}/g,(i,o)=>n.path?.hasOwnProperty(o)?c(String(n.path[o])):i),s=`${t.BASE}${p}`;return n.query?`${s}${Ve(n.query)}`:s},De=t=>{if(t.formData){const n=new FormData,c=(p,s)=>{k(s)||z(s)?n.append(p,s):n.append(p,JSON.stringify(s))};return Object.entries(t.formData).filter(([p,s])=>J(s)).forEach(([p,s])=>{Array.isArray(s)?s.forEach(i=>c(p,i)):c(p,s)}),n}},R=async(t,n)=>typeof n=="function"?n(t):n,Fe=async(t,n)=>{const[c,p,s,i]=await Promise.all([R(n,t.TOKEN),R(n,t.USERNAME),R(n,t.PASSWORD),R(n,t.HEADERS)]),o=Object.entries({Accept:"application/json",...i,...n.headers}).filter(([l,d])=>J(d)).reduce((l,[d,g])=>({...l,[d]:String(g)}),{});return U(c)&&(o.Authorization=`Bearer ${c}`),U(p)&&U(s)&&(o.Authorization=`Basic ${je(`${p}:${s}`)}`),n.body!==void 0&&(n.mediaType?o["Content-Type"]=n.mediaType:z(n.body)?o["Content-Type"]=n.body.type||"application/octet-stream":k(n.body)?o["Content-Type"]="text/plain":se(n.body)||(o["Content-Type"]="application/json")),new Headers(o)},Re=t=>{if(t.body!==void 0)return t.mediaType?.includes("/json")?JSON.stringify(t.body):k(t.body)||z(t.body)||se(t.body)?t.body:JSON.stringify(t.body)},Ge=async(t,n,c,p,s,i,o)=>{const l=new AbortController,d={headers:i,body:p??s,method:n.method,signal:l.signal};return t.WITH_CREDENTIALS&&(d.credentials=t.CREDENTIALS),o(()=>l.abort()),await fetch(c,d)},We=(t,n)=>{if(n){const c=t.headers.get(n);if(k(c))return c}},qe=async t=>{if(t.status!==204)try{const n=t.headers.get("Content-Type");if(n)return["application/json","application/problem+json"].some(c=>n.toLowerCase().startsWith(c))?await t.json():await t.text()}catch(n){console.error(n)}},Le=(t,n)=>{const c={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",...t.errors}[n.status];if(c)throw new B(t,n,c);if(!n.ok)throw new B(t,n,`Generic Error: status: ${n.status??"unknown"}; status text: ${n.statusText??"unknown"}; body: ${(()=>{try{return JSON.stringify(n.body,null,2)}catch{return}})()}`)},y=(t,n)=>new Ne(async(c,p,s)=>{try{const i=ke(t,n),o=De(n),l=Re(n),d=await Fe(t,n);if(!s.isCancelled){const g=await Ge(t,n,i,l,o,d,s),E=await qe(g),C=We(g,n.responseHeader),A={url:i,ok:g.ok,status:g.status,statusText:g.statusText,body:C??E};Le(n,A),c(A.body)}}catch(i){p(i)}}),j=class{static postApiSessionsAutoTask({requestBody:t}){return y(b,{method:"POST",url:"/api/Sessions/auto-task",body:t,mediaType:"application/json",errors:{400:"Missing required fields or invalid prompt ID",404:"Project not found",500:"Internal server error"}})}static postApiSessionsArchiveChat({sessionId:t}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/archive-chat",path:{sessionId:t},errors:{400:"Session is not a chat session",404:"Session not found",500:"Failed to archive chat session"}})}static postApiSessionsChat({requestBody:t}){return y(b,{method:"POST",url:"/api/Sessions/chat",body:t,mediaType:"application/json",errors:{400:"Bad Request"}})}static postApiSessions({requestBody:t}){return y(b,{method:"POST",url:"/api/Sessions",body:t,mediaType:"application/json",errors:{400:"Bad Request"}})}static getApiSessions({type:t,activeOnly:n,includeArchived:c,projectId:p,projectIds:s}){return y(b,{method:"GET",url:"/api/Sessions",query:{type:t,activeOnly:n,includeArchived:c,projectId:p,projectIds:s}})}static getApiSessions1({sessionId:t}){return y(b,{method:"GET",url:"/api/Sessions/{sessionId}",path:{sessionId:t},errors:{400:"Invalid session ID format",404:"Session not found",500:"Internal server error occurred"}})}static putApiSessions({sessionId:t,requestBody:n}){return y(b,{method:"PUT",url:"/api/Sessions/{sessionId}",path:{sessionId:t},body:n,mediaType:"application/json"})}static deleteApiSessions({sessionId:t,deleteFiles:n=!1}){return y(b,{method:"DELETE",url:"/api/Sessions/{sessionId}",path:{sessionId:t},query:{deleteFiles:n},errors:{404:"Session not found",500:"Failed to delete session"}})}static postApiSessionsCancel({sessionId:t}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/cancel",path:{sessionId:t},errors:{404:"Session not found",500:"Failed to cancel session"}})}static getApiSessionsProcessingStatus({sessionId:t}){return y(b,{method:"GET",url:"/api/Sessions/{sessionId}/processing-status",path:{sessionId:t},errors:{404:"Session not found",500:"Failed to get processing status"}})}static deleteApiSessionsQueue({sessionId:t,queueIndex:n}){return y(b,{method:"DELETE",url:"/api/Sessions/{sessionId}/queue/{queueIndex}",path:{sessionId:t,queueIndex:n},errors:{400:"Invalid queue index",404:"Session not found",500:"Failed to cancel message"}})}static postApiSessionsMessages({sessionId:t,requestBody:n}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/messages",path:{sessionId:t},body:n,mediaType:"application/json"})}static postApiSessionsAnnotations({sessionId:t,requestBody:n}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/annotations",path:{sessionId:t},body:n,mediaType:"application/json",errors:{400:"Invalid request or session is not a proposal session",404:"Session not found",500:"Failed to process annotations"}})}static postApiSessionsGenerateProposalName({sessionId:t}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/generate-proposal-name",path:{sessionId:t},errors:{400:"Session is not a proposal session or proposal name already exists",404:"Session not found",409:"Proposal name already exists for this session",500:"Failed to generate proposal name"}})}static postApiSessionsOptimizeDescription({sessionId:t,requestBody:n}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/optimize-description",path:{sessionId:t},body:n,mediaType:"application/json",errors:{400:"Invalid request or empty description",404:"Session not found",500:"Failed to start optimization task"}})}static postApiSessionsOptimizeTitle({sessionId:t}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/optimize-title",path:{sessionId:t},errors:{400:"Invalid request or session has no description",404:"Session not found",500:"Failed to optimize title"}})}static postApiSessionsGenerateProposal({sessionId:t,requestBody:n}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/generate-proposal",path:{sessionId:t},body:n,mediaType:"application/json",errors:{400:"Session is not a proposal session or proposal name not generated",404:"Session not found",500:"Failed to generate proposal"}})}static postApiSessionsArchive({sessionId:t,requestBody:n}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/archive",path:{sessionId:t},body:n,mediaType:"application/json",errors:{400:"Session is not a proposal session or proposal name missing",404:"Session not found",500:"Failed to archive session"}})}static postApiSessionsExecuteProposal({sessionId:t,requestBody:n}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/execute-proposal",path:{sessionId:t},body:n,mediaType:"application/json",errors:{400:"Session is not a proposal session, not in valid status, or proposal name missing",404:"Session not found",500:"Failed to execute proposal"}})}static postApiSessionsComplete({sessionId:t}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/complete",path:{sessionId:t},errors:{400:"Session is not in ExecutionCompleted status",404:"Session not found",500:"Failed to complete session"}})}static postApiSessionsValidateExecute({sessionId:t}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/validate-execute",path:{sessionId:t},errors:{404:"Session not found",500:"Failed to validate session"}})}static postApiSessionsValidateStart({sessionId:t}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/validate-start",path:{sessionId:t},errors:{404:"Session not found",500:"Failed to validate session"}})}static postApiSessionsValidateArchive({sessionId:t}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/validate-archive",path:{sessionId:t},errors:{404:"Session not found",500:"Failed to validate session"}})}static getApiSessionsOpenspecFile({sessionId:t,relativePath:n}){return y(b,{method:"GET",url:"/api/Sessions/{sessionId}/openspec-file",path:{sessionId:t},query:{relativePath:n},errors:{404:"Session not found or file not found",500:"Failed to read file"}})}static postApiSessionsUpdateCessionId({sessionId:t}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/update-cession-id",path:{sessionId:t},errors:{404:"Session not found",500:"Failed to update CessionId"}})}static postApiSessionsOpenInVscode({sessionId:t,subPath:n}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/open-in-vscode",path:{sessionId:t},query:{subPath:n},errors:{400:"Invalid project path or sub-path",403:"Sub-path is outside project directory",404:"Session not found",500:"Failed to launch VS Code"}})}static postApiSessionsCorrectProposalName({sessionId:t,requestBody:n}){return y(b,{method:"POST",url:"/api/Sessions/{sessionId}/correct-proposal-name",path:{sessionId:t},body:n,mediaType:"application/json",errors:{400:"Invalid name format or validation failed",404:"Session not found",409:"Name already in use by another session",500:"Internal server error"}})}static deleteApiSessionsWorkspace({sessionId:t}){return y(b,{method:"DELETE",url:"/api/Sessions/{sessionId}/workspace",path:{sessionId:t},errors:{400:"Session does not have an independent workspace",404:"Session not found",500:"Failed to delete workspace"}})}};function Ue(){return{listSessions:t=>j.getApiSessions(t),createSession:t=>j.postApiSessions({requestBody:t}),generateProposalName:t=>j.postApiSessionsGenerateProposalName({sessionId:t}),generateProposal:(t,n)=>j.postApiSessionsGenerateProposal({sessionId:t,requestBody:n}),executeProposal:(t,n)=>j.postApiSessionsExecuteProposal({sessionId:t,requestBody:n})}}function $(t){const n=t?.trim();return n||void 0}function re(t=process.env,n={stdout:c=>{process.stdout.write(c)},stderr:c=>{process.stderr.write(c)}}){return{api:Ue(),env:t,io:n}}function Be(t){return t.option("--base-url <url>","Backend API base URL. Defaults to HAGI_API_BASE_URL or the local dev URL.").option("--token <token>","Bearer token for backend API calls. Overrides HAGI_API_TOKEN.").option("--lang <lang>","Accept-Language value for backend API calls. Overrides HAGI_API_LANG.")}function D(t){return t.option("--json","Emit deterministic JSON instead of human-readable text.")}function F(t,n){const c=t.optsWithGlobals();return{api:n.api,env:n.env,io:n.io,outputJson:c.json===!0,runtime:$e({baseUrl:c.baseUrl,token:c.token,lang:c.lang},n.env)}}var w={USAGE:2,HTTP_BAD_REQUEST:20,HTTP_UNAUTHORIZED:21,HTTP_FORBIDDEN:23,HTTP_NOT_FOUND:24,HTTP_CONFLICT:29,HTTP_CLIENT_ERROR:40,HTTP_SERVER_ERROR:50,TRANSPORT:60,UNKNOWN:70},q=class extends Error{constructor(t){super(t),this.name="CliUsageError"}};function Me(t){if(!(!t||typeof t!="object"||Array.isArray(t)))return t}function G(t,n){const c=Me(t)?.[n];return typeof c=="string"&&c.trim()?c.trim():void 0}function Je(t){return t.includes("fetch failed")||t.includes("ECONNREFUSED")||t.includes("ENOTFOUND")||t.includes("Failed to parse URL")}function ze(t){switch(t){case 400:return w.HTTP_BAD_REQUEST;case 401:return w.HTTP_UNAUTHORIZED;case 403:return w.HTTP_FORBIDDEN;case 404:return w.HTTP_NOT_FOUND;case 409:return w.HTTP_CONFLICT;default:return t&&t>=400&&t<500?w.HTTP_CLIENT_ERROR:t&&t>=500?w.HTTP_SERVER_ERROR:w.UNKNOWN}}function Ke(t){if(t instanceof q)return{exitCode:w.USAGE,message:t.message};if(t instanceof B){const n=G(t.body,"error")??G(t.body,"message")??t.message;return{exitCode:ze(t.status),status:t.status,message:n,errorCode:G(t.body,"errorCode"),correlationId:G(t.body,"correlationId"),details:t.body}}return t instanceof Error?{exitCode:Je(t.message)?w.TRANSPORT:w.UNKNOWN,message:t.message}:{exitCode:w.UNKNOWN,message:String(t)}}function ne(t,n={}){if(n.json)return`${JSON.stringify({error:{message:t.message,status:t.status,exitCode:t.exitCode,errorCode:t.errorCode,correlationId:t.correlationId,details:t.details}},null,2)}
|
|
34
|
-
`;const c=[t.status?`status=${t.status}`:void 0,t.errorCode?`errorCode=${t.errorCode}`:void 0,t.correlationId?`correlationId=${t.correlationId}`:void 0].filter(Boolean),p=c.length>0?` (${c.join(", ")})`:"";return`${t.message}${p}
|
|
35
|
-
`}var oe=(function(t){return t.CHAT="Chat",t.PROPOSAL="Proposal",t})({}),ae="New Proposal";function Qe(t){const n=$(t.title);if(n)return n;if(t.defaultTitle)return ae;throw new q("Provide --title or pass --default-title to use the placeholder proposal title.")}function Xe(t,n){D(t.command("create").description("Create a proposal session only. This command does not trigger later lifecycle APIs.")).requiredOption("--project-id <id>","Project id that owns the new proposal session.").requiredOption("--chief-complaint <text>","Proposal chief complaint to store on the new session.").option("--original-chief-complaint <text>","Optional raw chief complaint text to keep alongside the stitched content.").option("--title <title>","Explicit proposal session title.").option("--default-title",`Mark the title as the placeholder title (${ae}).`).option("--enable-independent-workspace","Request an independent workspace for the proposal session.").option("--base-branch <branch>","Optional base branch for the independent workspace.").action(async function(p){const s=F(this,n),i=Qe(p),o=ie(await s.api.createSession({title:i,chiefComplaint:p.chiefComplaint.trim(),originalChiefComplaint:$(p.originalChiefComplaint),type:oe.PROPOSAL,projectId:p.projectId.trim(),enableIndependentWorkspace:p.enableIndependentWorkspace?!0:void 0,baseBranch:$(p.baseBranch),isDefaultTitle:!!p.defaultTitle})),l=`hagi proposal generate-name --session-id ${o.sessionId}`;if(s.outputJson){s.io.stdout(V({session:o,nextCommand:l}));return}s.io.stdout(`Proposal session created
|
|
36
|
-
${xe(o,[["next",l]])}`)})}function Ye(t,n){D(t.command("execute").description("Start proposal execution only. This command maps to the execute-proposal backend action.")).requiredOption("--session-id <id>","Proposal session id to execute.").option("--hero-id <id>","Optional hero override for the execute stage.").action(async function(p){const s=F(this,n),i=p.sessionId.trim(),o=$(p.heroId),l=await s.api.executeProposal(i,{heroId:o});if(s.outputJson){s.io.stdout(V({sessionId:i,message:l.message,requested:{heroId:o}}));return}s.io.stdout(`Proposal execution started
|
|
37
|
-
sessionId ${i}
|
|
38
|
-
message ${l.message}
|
|
39
|
-
`)})}function Ze(t){if(t.enableExploreMode&&t.disableExploreMode)throw new q("Use either --enable-explore-mode or --disable-explore-mode, not both.");if(t.enableExploreMode)return!0;if(t.disableExploreMode)return!1}function et(t,n){D(t.command("generate").description("Start proposal generation only. This command does not execute the proposal.")).requiredOption("--session-id <id>","Proposal session id to generate.").option("--enable-explore-mode","Explicitly enable explore mode for proposal generation.").option("--disable-explore-mode","Explicitly disable explore mode for proposal generation.").option("--hero-id <id>","Optional hero override for the generate stage.").action(async function(p){const s=F(this,n),i=p.sessionId.trim(),o=Ze(p),l=await s.api.generateProposal(i,{enableExploreMode:o,heroId:$(p.heroId)}),d=`hagi proposal execute --session-id ${i}`;if(s.outputJson){s.io.stdout(V({sessionId:i,message:l.message,requested:{enableExploreMode:o,heroId:$(p.heroId)},nextCommand:d}));return}s.io.stdout(`Proposal generation started
|
|
40
|
-
sessionId ${i}
|
|
41
|
-
message ${l.message}
|
|
42
|
-
next Wait for the session to reach Reviewing, then run ${d}
|
|
43
|
-
`)})}function tt(t,n){D(t.command("generate-name").description("Generate a proposal name only. This command maps to the generate-proposal-name backend action.")).requiredOption("--session-id <id>","Proposal session id to update.").action(async function(p){const s=F(this,n),i=await s.api.generateProposalName(p.sessionId.trim()),o=`hagi proposal generate --session-id ${p.sessionId.trim()}`;if(s.outputJson){s.io.stdout(V({sessionId:p.sessionId.trim(),proposalName:i.proposalName,nextCommand:o}));return}s.io.stdout(`Proposal name generated
|
|
44
|
-
sessionId ${p.sessionId.trim()}
|
|
45
|
-
proposalName ${i.proposalName}
|
|
46
|
-
next ${o}
|
|
47
|
-
`)})}function it(t,n){D(t.command("list").description("List proposal sessions from the backend Sessions API.")).option("--project-id <id>","Filter proposal sessions by a single project id.").option("--project-ids <ids...>","Filter proposal sessions by multiple project ids.").option("--active-only","Only return non-archived proposal sessions.").option("--include-archived","Include archived proposal sessions in the result set.").action(async function(p){if(p.projectId&&p.projectIds?.length)throw new q("Use either --project-id or --project-ids, not both.");const s=F(this,n),i=Te(await s.api.listSessions({type:oe.PROPOSAL,projectId:$(p.projectId),projectIds:p.projectIds?.map($).filter(Boolean),activeOnly:p.activeOnly?!0:void 0,includeArchived:p.includeArchived?!0:void 0}));if(s.outputJson){s.io.stdout(V(i));return}s.io.stdout(we(i.sessions))})}function st(t,n){const c=t.command("proposal").description("Manage proposal sessions through backend session APIs.");it(c,n),Xe(c,n),tt(c,n),et(c,n),Ye(c,n)}function rt(t){return t.includes("--json")}function le(t=re(),n=!1){const c=new Ee;return c.name("hagi").description("HagiCode CLI for proposal session management.").showHelpAfterError().exitOverride(),c.configureOutput({writeOut:p=>{t.io.stdout(p)},writeErr:p=>{n||t.io.stderr(p)},getOutHelpWidth:()=>100,getErrHelpWidth:()=>100}),Be(c),st(c,t),c}function nt(t,n,c){return t.exitCode===0||t.code==="commander.helpDisplayed"||t.code==="commander.version"?0:(c&&n.io.stderr(ne({exitCode:w.USAGE,message:t.message},{json:!0})),w.USAGE)}async function ot(t=process.argv,n=re()){const c=rt(t),p=le(n,c);try{return await p.parseAsync([...t]),0}catch(s){if(s instanceof be)return nt(s,n,c);const i=Ke(s);return n.io.stderr(ne(i,{json:c})),i.exitCode}}Object.defineProperty(exports,"EXIT_CODES",{enumerable:!0,get:function(){return w}});Object.defineProperty(exports,"createCliApp",{enumerable:!0,get:function(){return le}});Object.defineProperty(exports,"runCli",{enumerable:!0,get:function(){return ot}});
|