@hagicode/cli 0.1.0-dev.3.1.074a0f9 → 0.1.0-dev.5.1.b85b83a

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 CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/%40hagicode%2Fcli?logo=npm)](https://www.npmjs.com/package/@hagicode/cli)
4
4
 
5
- `repos/cli` contains the npm-based `hagi` command for proposal session management.
5
+ `@hagicode/cli` provides the published `hagi` command for project, proposal, chat, and AutoTask management against a HagiCode backend API.
6
6
 
7
7
  ## Requirements
8
8
 
@@ -12,188 +12,283 @@
12
12
 
13
13
  ## Installation
14
14
 
15
+ Use the published npm package for normal CLI usage. You do not need to clone `repos/cli` to run `hagi`.
16
+
17
+ ### Zero-install usage
18
+
15
19
  ```bash
16
- cd repos/cli
17
- npm install
18
- npm run build
20
+ npx @hagicode/cli --help
21
+ npx @hagicode/cli project list --json
19
22
  ```
20
23
 
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.
24
+ ### Project-local install
23
25
 
24
- Run the built CLI with:
26
+ ```bash
27
+ npm install @hagicode/cli
28
+ npx @hagicode/cli proposal list --json
29
+ ```
30
+
31
+ ### Optional global install
25
32
 
26
33
  ```bash
27
- npx hagi --help
28
- node ./dist/cli.js --help
34
+ npm install -g @hagicode/cli
35
+ hagi --help
29
36
  ```
30
37
 
31
- For local development without building:
38
+ ## Quick Start
39
+
40
+ The examples below use `hagi ...` after the package is available on your `PATH`. For one-off execution, replace `hagi` with `npx @hagicode/cli`.
32
41
 
33
42
  ```bash
34
- cd repos/cli
35
- npm run dev -- proposal list --json
43
+ hagi --help
44
+ hagi project list --json
45
+ hagi proposal list --json
46
+ hagi chat list --json
47
+ hagi autotask create --title "Auto commit" --project-id <project-id> --prompt-id auto-compose-commit.en-US
36
48
  ```
37
49
 
38
- ## Release automation
50
+ ## Shared Runtime Flags
39
51
 
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:
52
+ Every command family supports the same global runtime flags:
42
53
 
43
- - pushes to `main` publish a unique development prerelease under the npm `dev` dist-tag
44
- - only published GitHub Releases for strict `vX.Y.Z` tags publish the stable package under the npm `latest` dist-tag
54
+ - `--base-url <url>`
55
+ - `--token <token>`
56
+ - `--lang <lang>`
57
+ - `--json`
45
58
 
46
- ### Draft release flow
59
+ Example:
47
60
 
48
- 1. Label each PR with one semantic version label: `major`, `minor`, or `patch`.
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.
61
+ ```bash
62
+ hagi --base-url https://api.example.com --token "$HAGI_TOKEN" project list --json
63
+ ```
59
64
 
60
- Release Drafter manages draft release metadata only. Draft review and publish remain native GitHub Release operations.
65
+ ## Command Overview
61
66
 
62
- ### Current label coverage
67
+ ```text
68
+ hagi
69
+ |-- project list | create | update | delete
70
+ |-- proposal list | create | generate-name | optimize-description | generate | annotate | execute | archive | status | complete | send
71
+ |-- chat list | create | archive | delete | send
72
+ `-- autotask create | send
73
+ ```
63
74
 
64
- At implementation time, the public `HagiCode-org/cli` label set already included `bug`, `documentation`, and `enhancement`.
65
- The following planned release labels were still missing and should be created before maintainers rely on the full contract:
75
+ ## Project Commands
66
76
 
67
- - `major`
68
- - `minor`
69
- - `patch`
70
- - `breaking-change`
71
- - `feature`
72
- - `docs`
73
- - `chore`
74
- - `dependencies`
75
- - `skip-changelog`
77
+ List projects through the aggregation endpoint:
76
78
 
77
- ### Trusted Publisher prerequisites
79
+ ```bash
80
+ hagi project list
81
+ hagi project list --json
82
+ ```
78
83
 
79
- Before the first automated release, an npm package owner must bind the package to the repository workflow:
84
+ Create a project:
80
85
 
81
- 1. Open the npm package settings for `@hagicode/cli`.
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.
86
+ ```bash
87
+ hagi project create \
88
+ --name "CLI Demo" \
89
+ --path /workspace/cli-demo \
90
+ --description "Automation sandbox"
91
+ ```
85
92
 
86
- The workflow requests `contents: read` and `id-token: write`. It does not use a long-lived `NPM_TOKEN`.
93
+ Update only part of a project record. The CLI resolves current project data first so omitted fields are preserved:
87
94
 
88
- ### Local release verification
95
+ ```bash
96
+ hagi project update --id <project-id> --description "Updated description"
97
+ hagi project update --id <project-id> --name "Renamed project" --path /workspace/new-path
98
+ ```
89
99
 
90
- Run the same stable release gates locally before publishing a GitHub Release:
100
+ Delete a project:
91
101
 
92
102
  ```bash
93
- cd repos/cli
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
103
+ hagi project delete --id <project-id>
100
104
  ```
101
105
 
102
- `publish:verify-release` validates the strict stable tag format and resolves the stable package version that CI will stamp into `package.json` immediately before build and publish.
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>`.
106
+ ## Proposal Commands
105
107
 
106
- ### Stable release flow
108
+ List proposal sessions:
107
109
 
108
- 1. Make sure the draft release maintained by Release Drafter already reflects the intended tag such as `v0.1.0`.
109
- 2. Run the local verification commands above.
110
- 3. Commit and push the release-ready source tree.
111
- 4. Publish the matching GitHub draft release for the stable tag.
112
- 5. Confirm the GitHub Actions summary shows build, typecheck, test, package inspection, version stamping, and `npm publish --tag latest --provenance --access public`.
110
+ ```bash
111
+ hagi proposal list --project-id <project-id>
112
+ hagi proposal list --include-archived --json
113
+ ```
113
114
 
114
- ## Environment Variables
115
+ Create a proposal session only:
115
116
 
116
- The CLI resolves runtime settings centrally before every command. Explicit flags always override environment variables.
117
+ ```bash
118
+ hagi proposal create \
119
+ --project-id <project-id> \
120
+ --chief-complaint "Add CLI completion for session workflows" \
121
+ --default-title
122
+ ```
117
123
 
118
- | Variable | Purpose |
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. |
124
+ Generate a proposal name explicitly:
123
125
 
124
- Global flags:
126
+ ```bash
127
+ hagi proposal generate-name --session-id <session-id>
128
+ ```
125
129
 
126
- - `--base-url <url>`
127
- - `--token <token>`
128
- - `--lang <lang>`
129
- - `--json`
130
+ Optimize the description explicitly:
130
131
 
131
- ## Generate the API Client
132
+ ```bash
133
+ hagi proposal optimize-description \
134
+ --session-id <session-id> \
135
+ --description "Improve the proposal framing" \
136
+ --optimization-direction "Focus on implementation risk"
137
+ ```
132
138
 
133
- The CLI owns its own OpenAPI configuration in `openapi-ts.config.json`.
139
+ Generate and execute the proposal as separate steps:
134
140
 
135
141
  ```bash
136
- cd repos/cli
137
- npm run generate:api
138
- npm run generate:api:once
142
+ hagi proposal generate --session-id <session-id> --enable-explore-mode
143
+ hagi proposal execute --session-id <session-id>
139
144
  ```
140
145
 
141
- Default Swagger source:
146
+ Submit structured annotation payloads from a file or stdin:
142
147
 
143
- - `http://127.0.0.1:35168/swagger/v1/swagger.json`
148
+ ```bash
149
+ hagi proposal annotate --session-id <session-id> --input annotations.json
150
+ cat annotations.json | hagi proposal annotate --session-id <session-id> --input - --json
151
+ ```
144
152
 
145
- When the backend cannot export Swagger in the current environment, keep `src/generated/api/**` aligned with the same controller contract used by `repos/web`, then regenerate when Swagger becomes available again.
153
+ Archive, update status, complete, or send a follow-up message:
146
154
 
147
- `generate:api:once` matches the frontend workflow: it reuses an existing Swagger host when one is already up, otherwise it starts `repos/hagicode-core/src/PCode.SwaggerHost/PCode.SwaggerHost.csproj`, waits for Swagger readiness, runs the normal generator once, then stops the temporary host.
155
+ ```bash
156
+ hagi proposal archive --session-id <session-id> --hero-id <hero-id>
157
+ hagi proposal status --session-id <session-id> --status Reviewing
158
+ hagi proposal complete --session-id <session-id>
159
+ hagi proposal send --session-id <session-id> --content "Please continue"
160
+ ```
148
161
 
149
- ## Proposal Commands
162
+ ### Explicit Lifecycle Sequence
150
163
 
151
- `proposal list` queries proposal sessions through `GET /api/Sessions` with `type=Proposal`.
164
+ The CLI keeps proposal lifecycle actions explicit and non-interactive:
165
+
166
+ 1. `hagi proposal list`
167
+ 2. `hagi proposal create`
168
+ 3. `hagi proposal generate-name`
169
+ 4. `hagi proposal optimize-description` (optional)
170
+ 5. `hagi proposal generate`
171
+ 6. `hagi proposal annotate` (optional review loop)
172
+ 7. `hagi proposal execute`
173
+ 8. `hagi proposal archive`
174
+ 9. `hagi proposal complete`
175
+
176
+ Each command maps to one backend action. The CLI may suggest a next command, but it never chains later lifecycle APIs automatically.
177
+
178
+ ## Chat Commands
179
+
180
+ List chat sessions:
152
181
 
153
182
  ```bash
154
- hagi proposal list --project-id <project-id>
155
- hagi proposal list --include-archived --json
183
+ hagi chat list --active-only
184
+ hagi chat list --include-archived --json
156
185
  ```
157
186
 
158
- `proposal create` only creates the proposal session. It does not trigger any later lifecycle API.
187
+ Create a chat session:
159
188
 
160
189
  ```bash
161
- hagi proposal create \
190
+ hagi chat create \
191
+ --title "Repository Q&A" \
162
192
  --project-id <project-id> \
163
- --chief-complaint "Add npm commands for proposal APIs" \
164
- --default-title
193
+ --executor-type CodexCli
165
194
  ```
166
195
 
167
- `proposal generate-name` only generates the proposal name for an existing session.
196
+ Archive, delete, or send a message:
168
197
 
169
198
  ```bash
170
- hagi proposal generate-name --session-id <session-id>
199
+ hagi chat archive --session-id <session-id>
200
+ hagi chat delete --session-id <session-id>
201
+ hagi chat send --session-id <session-id> --content "Summarize the current diff"
171
202
  ```
172
203
 
173
- `proposal generate` only starts proposal generation.
204
+ ## AutoTask Commands
205
+
206
+ Create an AutoTask session with package-first automation flags:
174
207
 
175
208
  ```bash
176
- hagi proposal generate --session-id <session-id> --enable-explore-mode
177
- hagi proposal generate --session-id <session-id> --hero-id <hero-id>
209
+ hagi autotask create \
210
+ --title "Auto compose commit" \
211
+ --project-id <project-id> \
212
+ --prompt-id auto-compose-commit.en-US \
213
+ --repository-path repos/cli \
214
+ --need-push \
215
+ --target-branch-mode new-custom \
216
+ --target-branch-name feature/cli-completion \
217
+ --script-key autotask.auto-compose-commit
178
218
  ```
179
219
 
180
- `proposal execute` only starts proposal execution.
220
+ Send a follow-up message to an AutoTask session:
181
221
 
182
222
  ```bash
183
- hagi proposal execute --session-id <session-id>
223
+ hagi autotask send --session-id <session-id> --content "Retry with a smaller diff"
184
224
  ```
185
225
 
186
- ## Explicit Lifecycle Sequence
226
+ ## Maintainer Workflow (`repos/cli` only)
187
227
 
188
- The CLI keeps proposal lifecycle actions explicit and non-interactive:
228
+ Use the commands in this section only when you are editing or validating the CLI source tree inside this repository.
189
229
 
190
- 1. `hagi proposal list`
191
- 2. `hagi proposal create`
192
- 3. `hagi proposal generate-name`
193
- 4. `hagi proposal generate`
194
- 5. `hagi proposal execute`
230
+ Build the local repository output:
231
+
232
+ ```bash
233
+ cd repos/cli
234
+ npm install
235
+ npm run build
236
+ node ./dist/cli.js --help
237
+ ```
238
+
239
+ For local development without building:
240
+
241
+ ```bash
242
+ cd repos/cli
243
+ npm run dev -- proposal list --json
244
+ npm run dev -- chat list --json
245
+ ```
246
+
247
+ ## Release Automation
248
+
249
+ `repos/cli/.github/workflows/release-drafter.yml` maintains the next GitHub draft release for `@hagicode/cli`.
250
+ `repos/cli/.github/workflows/npm-publish.yml` publishes two channels with GitHub Actions OIDC plus provenance:
195
251
 
196
- Each command maps to one backend action. The CLI prints the suggested next command, but it never chains later lifecycle APIs automatically.
252
+ - pushes to `main` publish a unique development prerelease under the npm `dev` dist-tag
253
+ - published GitHub Releases for strict `vX.Y.Z` tags publish the stable package under the npm `latest` dist-tag
254
+
255
+ ### Local Release Verification
256
+
257
+ Run the stable release gates locally before publishing a GitHub Release:
258
+
259
+ ```bash
260
+ cd repos/cli
261
+ version="$(npm run --silent publish:verify-release -- v0.1.0)"
262
+ npm version --no-git-tag-version "$version"
263
+ npm run build
264
+ npm run typecheck
265
+ npm test
266
+ npm run pack:check
267
+ ```
268
+
269
+ ## Environment Variables
270
+
271
+ The CLI resolves runtime settings centrally before every command. Explicit flags always override environment variables.
272
+
273
+ | Variable | Purpose |
274
+ | --- | --- |
275
+ | `HAGI_API_BASE_URL` | Backend base URL. Defaults to `http://127.0.0.1:35168` when unset. |
276
+ | `HAGI_API_TOKEN` | Bearer token attached as `Authorization: Bearer <token>`. |
277
+ | `HAGI_API_LANG` | Shared `Accept-Language` header value. |
278
+
279
+ ## Generate the API Client
280
+
281
+ The CLI owns its own OpenAPI configuration in `openapi-ts.config.json`.
282
+
283
+ ```bash
284
+ cd repos/cli
285
+ npm run generate:api
286
+ npm run generate:api:once
287
+ ```
288
+
289
+ Default Swagger source:
290
+
291
+ - `http://127.0.0.1:35168/swagger/v1/swagger.json`
197
292
 
198
293
  ## Exit Codes
199
294
 
@@ -0,0 +1,75 @@
1
+ var xe=Object.create,le=Object.defineProperty,je=Object.getOwnPropertyDescriptor,$e=Object.getOwnPropertyNames,He=Object.getPrototypeOf,De=Object.prototype.hasOwnProperty,F=(e,o)=>()=>(o||e((o={exports:{}}).exports,o),o.exports),Ne=(e,o,c,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(var i=$e(o),s=0,n=i.length,u;s<n;s++)u=i[s],!De.call(e,u)&&u!==c&&le(e,u,{get:(h=>o[h]).bind(null,u),enumerable:!(a=je(o,u))||a.enumerable});return e},ke=(e,o,c)=>(c=e!=null?xe(He(e)):{},Ne(o||!e||!e.__esModule?le(c,"default",{value:e,enumerable:!0}):c,e));let Ve=require("node:process"),Re=require("node:fs/promises");var J=F((e=>{var o=class extends Error{constructor(a,i,s){super(s),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=i,this.exitCode=a,this.nestedError=void 0}},c=class extends o{constructor(a){super(1,"commander.invalidArgument",a),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};e.CommanderError=o,e.InvalidArgumentError=c})),Z=F((e=>{var{InvalidArgumentError:o}=J(),c=class{constructor(i,s){switch(this.description=s||"",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,s){return s===this.defaultValue||!Array.isArray(s)?[i]:(s.push(i),s)}default(i,s){return this.defaultValue=i,this.defaultValueDescription=s,this}argParser(i){return this.parseArg=i,this}choices(i){return this.argChoices=i.slice(),this.parseArg=(s,n)=>{if(!this.argChoices.includes(s))throw new o(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(s,n):s},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function a(i){const s=i.name()+(i.variadic===!0?"...":"");return i.required?"<"+s+">":"["+s+"]"}e.Argument=c,e.humanReadableArgName=a})),de=F((e=>{var{humanReadableArgName:o}=Z(),c=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 s=i.commands.filter(u=>!u._hidden),n=i._getHelpCommand();return n&&!n._hidden&&s.push(n),this.sortSubcommands&&s.sort((u,h)=>u.name().localeCompare(h.name())),s}compareOptions(i,s){const n=u=>u.short?u.short.replace(/^-/,""):u.long.replace(/^--/,"");return n(i).localeCompare(n(s))}visibleOptions(i){const s=i.options.filter(u=>!u.hidden),n=i._getHelpOption();if(n&&!n.hidden){const u=n.short&&i._findOption(n.short),h=n.long&&i._findOption(n.long);!u&&!h?s.push(n):n.long&&!h?s.push(i.createOption(n.long,n.description)):n.short&&!u&&s.push(i.createOption(n.short,n.description))}return this.sortOptions&&s.sort(this.compareOptions),s}visibleGlobalOptions(i){if(!this.showGlobalOptions)return[];const s=[];for(let n=i.parent;n;n=n.parent){const u=n.options.filter(h=>!h.hidden);s.push(...u)}return this.sortOptions&&s.sort(this.compareOptions),s}visibleArguments(i){return i._argsDescription&&i.registeredArguments.forEach(s=>{s.description=s.description||i._argsDescription[s.name()]||""}),i.registeredArguments.find(s=>s.description)?i.registeredArguments:[]}subcommandTerm(i){const s=i.registeredArguments.map(n=>o(n)).join(" ");return i._name+(i._aliases[0]?"|"+i._aliases[0]:"")+(i.options.length?" [options]":"")+(s?" "+s:"")}optionTerm(i){return i.flags}argumentTerm(i){return i.name()}longestSubcommandTermLength(i,s){return s.visibleCommands(i).reduce((n,u)=>Math.max(n,this.displayWidth(s.styleSubcommandTerm(s.subcommandTerm(u)))),0)}longestOptionTermLength(i,s){return s.visibleOptions(i).reduce((n,u)=>Math.max(n,this.displayWidth(s.styleOptionTerm(s.optionTerm(u)))),0)}longestGlobalOptionTermLength(i,s){return s.visibleGlobalOptions(i).reduce((n,u)=>Math.max(n,this.displayWidth(s.styleOptionTerm(s.optionTerm(u)))),0)}longestArgumentTermLength(i,s){return s.visibleArguments(i).reduce((n,u)=>Math.max(n,this.displayWidth(s.styleArgumentTerm(s.argumentTerm(u)))),0)}commandUsage(i){let s=i._name;i._aliases[0]&&(s=s+"|"+i._aliases[0]);let n="";for(let u=i.parent;u;u=u.parent)n=u.name()+" "+n;return n+s+" "+i.usage()}commandDescription(i){return i.description()}subcommandDescription(i){return i.summary()||i.description()}optionDescription(i){const s=[];if(i.argChoices&&s.push(`choices: ${i.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),i.defaultValue!==void 0&&(i.required||i.optional||i.isBoolean()&&typeof i.defaultValue=="boolean")&&s.push(`default: ${i.defaultValueDescription||JSON.stringify(i.defaultValue)}`),i.presetArg!==void 0&&i.optional&&s.push(`preset: ${JSON.stringify(i.presetArg)}`),i.envVar!==void 0&&s.push(`env: ${i.envVar}`),s.length>0){const n=`(${s.join(", ")})`;return i.description?`${i.description} ${n}`:n}return i.description}argumentDescription(i){const s=[];if(i.argChoices&&s.push(`choices: ${i.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),i.defaultValue!==void 0&&s.push(`default: ${i.defaultValueDescription||JSON.stringify(i.defaultValue)}`),s.length>0){const n=`(${s.join(", ")})`;return i.description?`${i.description} ${n}`:n}return i.description}formatItemList(i,s,n){return s.length===0?[]:[n.styleTitle(i),...s,""]}groupItems(i,s,n){const u=new Map;return i.forEach(h=>{const O=n(h);u.has(O)||u.set(O,[])}),s.forEach(h=>{const O=n(h);u.has(O)||u.set(O,[]),u.get(O).push(h)}),u}formatHelp(i,s){const n=s.padWidth(i,s),u=s.helpWidth??80;function h(S,w){return s.formatItem(S,n,w,s)}let O=[`${s.styleTitle("Usage:")} ${s.styleUsage(s.commandUsage(i))}`,""];const b=s.commandDescription(i);b.length>0&&(O=O.concat([s.boxWrap(s.styleCommandDescription(b),u),""]));const y=s.visibleArguments(i).map(S=>h(s.styleArgumentTerm(s.argumentTerm(S)),s.styleArgumentDescription(s.argumentDescription(S))));if(O=O.concat(this.formatItemList("Arguments:",y,s)),this.groupItems(i.options,s.visibleOptions(i),S=>S.helpGroupHeading??"Options:").forEach((S,w)=>{const V=S.map(N=>h(s.styleOptionTerm(s.optionTerm(N)),s.styleOptionDescription(s.optionDescription(N))));O=O.concat(this.formatItemList(w,V,s))}),s.showGlobalOptions){const S=s.visibleGlobalOptions(i).map(w=>h(s.styleOptionTerm(s.optionTerm(w)),s.styleOptionDescription(s.optionDescription(w))));O=O.concat(this.formatItemList("Global Options:",S,s))}return this.groupItems(i.commands,s.visibleCommands(i),S=>S.helpGroup()||"Commands:").forEach((S,w)=>{const V=S.map(N=>h(s.styleSubcommandTerm(s.subcommandTerm(N)),s.styleSubcommandDescription(s.subcommandDescription(N))));O=O.concat(this.formatItemList(w,V,s))}),O.join(`
2
+ `)}displayWidth(i){return a(i).length}styleTitle(i){return i}styleUsage(i){return i.split(" ").map(s=>s==="[options]"?this.styleOptionText(s):s==="[command]"?this.styleSubcommandText(s):s[0]==="["||s[0]==="<"?this.styleArgumentText(s):this.styleCommandText(s)).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(s=>s==="[options]"?this.styleOptionText(s):s[0]==="["||s[0]==="<"?this.styleArgumentText(s):this.styleSubcommandText(s)).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,s){return Math.max(s.longestOptionTermLength(i,s),s.longestGlobalOptionTermLength(i,s),s.longestSubcommandTermLength(i,s),s.longestArgumentTermLength(i,s))}preformatted(i){return/\n[^\S\r\n]/.test(i)}formatItem(i,s,n,u){const O=" ".repeat(2);if(!n)return O+i;const b=i.padEnd(s+i.length-u.displayWidth(i)),y=2,S=(this.helpWidth??80)-s-y-2;let w;return S<this.minWidthToWrap||u.preformatted(n)?w=n:w=u.boxWrap(n,S).replace(/\n/g,`
3
+ `+" ".repeat(s+y)),O+b+" ".repeat(y)+w.replace(/\n/g,`
4
+ ${O}`)}boxWrap(i,s){if(s<this.minWidthToWrap)return i;const n=i.split(/\r\n|\n/),u=/[\s]*[^\s]+/g,h=[];return n.forEach(O=>{const b=O.match(u);if(b===null){h.push("");return}let y=[b.shift()],S=this.displayWidth(y[0]);b.forEach(w=>{const V=this.displayWidth(w);if(S+V<=s){y.push(w),S+=V;return}h.push(y.join(""));const N=w.trimStart();y=[N],S=this.displayWidth(N)}),h.push(y.join(""))}),h.join(`
5
+ `)}};function a(i){return i.replace(/\x1b\[\d*(;\d*)*m/g,"")}e.Help=c,e.stripColor=a})),pe=F((e=>{var{InvalidArgumentError:o}=J(),c=class{constructor(n,u){this.flags=n,this.description=u||"",this.required=n.includes("<"),this.optional=n.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(n),this.mandatory=!1;const h=s(n);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(n,u){return this.defaultValue=n,this.defaultValueDescription=u,this}preset(n){return this.presetArg=n,this}conflicts(n){return this.conflictsWith=this.conflictsWith.concat(n),this}implies(n){let u=n;return typeof n=="string"&&(u={[n]:!0}),this.implied=Object.assign(this.implied||{},u),this}env(n){return this.envVar=n,this}argParser(n){return this.parseArg=n,this}makeOptionMandatory(n=!0){return this.mandatory=!!n,this}hideHelp(n=!0){return this.hidden=!!n,this}_collectValue(n,u){return u===this.defaultValue||!Array.isArray(u)?[n]:(u.push(n),u)}choices(n){return this.argChoices=n.slice(),this.parseArg=(u,h)=>{if(!this.argChoices.includes(u))throw new o(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(u,h):u},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?i(this.name().replace(/^no-/,"")):i(this.name())}helpGroup(n){return this.helpGroupHeading=n,this}is(n){return this.short===n||this.long===n}isBoolean(){return!this.required&&!this.optional&&!this.negate}},a=class{constructor(n){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,n.forEach(u=>{u.negate?this.negativeOptions.set(u.attributeName(),u):this.positiveOptions.set(u.attributeName(),u)}),this.negativeOptions.forEach((u,h)=>{this.positiveOptions.has(h)&&this.dualOptions.add(h)})}valueFromOption(n,u){const h=u.attributeName();if(!this.dualOptions.has(h))return!0;const O=this.negativeOptions.get(h).presetArg,b=O!==void 0?O:!1;return u.negate===(b===n)}};function i(n){return n.split("-").reduce((u,h)=>u+h[0].toUpperCase()+h.slice(1))}function s(n){let u,h;const O=/^-[^-]$/,b=/^--[^-]/,y=n.split(/[ |,]+/).concat("guard");if(O.test(y[0])&&(u=y.shift()),b.test(y[0])&&(h=y.shift()),!u&&O.test(y[0])&&(u=y.shift()),!u&&b.test(y[0])&&(u=h,h=y.shift()),y[0].startsWith("-")){const S=y[0],w=`option creation failed due to '${S}' in option flags '${n}'`;throw/^-[^-][^-]/.test(S)?new Error(`${w}
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(S)?new Error(`${w}
9
+ - too many short flags`):b.test(S)?new Error(`${w}
10
+ - too many long flags`):new Error(`${w}
11
+ - unrecognised flag format`)}if(u===void 0&&h===void 0)throw new Error(`option creation failed due to no flags found in '${n}'.`);return{shortFlag:u,longFlag:h}}e.Option=c,e.DualOptions=a})),qe=F((e=>{var o=3;function c(i,s){if(Math.abs(i.length-s.length)>o)return Math.max(i.length,s.length);const n=[];for(let u=0;u<=i.length;u++)n[u]=[u];for(let u=0;u<=s.length;u++)n[0][u]=u;for(let u=1;u<=s.length;u++)for(let h=1;h<=i.length;h++){let O=1;i[h-1]===s[u-1]?O=0:O=1,n[h][u]=Math.min(n[h-1][u]+1,n[h][u-1]+1,n[h-1][u-1]+O),h>1&&u>1&&i[h-1]===s[u-2]&&i[h-2]===s[u-1]&&(n[h][u]=Math.min(n[h][u],n[h-2][u-2]+1))}return n[i.length][s.length]}function a(i,s){if(!s||s.length===0)return"";s=Array.from(new Set(s));const n=i.startsWith("--");n&&(i=i.slice(2),s=s.map(b=>b.slice(2)));let u=[],h=o;const O=.4;return s.forEach(b=>{if(b.length<=1)return;const y=c(i,b),S=Math.max(i.length,b.length);(S-y)/S>O&&(y<h?(h=y,u=[b]):y===h&&u.push(b))}),u.sort((b,y)=>b.localeCompare(y)),n&&(u=u.map(b=>`--${b}`)),u.length>1?`
12
+ (Did you mean one of ${u.join(", ")}?)`:u.length===1?`
13
+ (Did you mean ${u[0]}?)`:""}e.suggestSimilar=a})),Fe=F((e=>{var o=require("node:events").EventEmitter,c=require("node:child_process"),a=require("node:path"),i=require("node:fs"),s=require("node:process"),{Argument:n,humanReadableArgName:u}=Z(),{CommanderError:h}=J(),{Help:O,stripColor:b}=de(),{Option:y,DualOptions:S}=pe(),{suggestSimilar:w}=qe(),V=class he extends o{constructor(t){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=t||"",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=>s.stdout.write(r),writeErr:r=>s.stderr.write(r),outputError:(r,l)=>l(r),getOutHelpWidth:()=>s.stdout.isTTY?s.stdout.columns:void 0,getErrHelpWidth:()=>s.stderr.isTTY?s.stderr.columns:void 0,getOutHasColors:()=>K()??(s.stdout.isTTY&&s.stdout.hasColors?.()),getErrHasColors:()=>K()??(s.stderr.isTTY&&s.stderr.hasColors?.()),stripColor:r=>b(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(t){return this._outputConfiguration=t._outputConfiguration,this._helpOption=t._helpOption,this._helpCommand=t._helpCommand,this._helpConfiguration=t._helpConfiguration,this._exitCallback=t._exitCallback,this._storeOptionsAsProperties=t._storeOptionsAsProperties,this._combineFlagAndOptionalValue=t._combineFlagAndOptionalValue,this._allowExcessArguments=t._allowExcessArguments,this._enablePositionalOptions=t._enablePositionalOptions,this._showHelpAfterError=t._showHelpAfterError,this._showSuggestionAfterError=t._showSuggestionAfterError,this}_getCommandAndAncestors(){const t=[];for(let r=this;r;r=r.parent)t.push(r);return t}command(t,r,l){let d=r,p=l;typeof d=="object"&&d!==null&&(p=d,d=null),p=p||{};const[,m,v]=t.match(/([^ ]+) *(.*)/),C=this.createCommand(m);return d&&(C.description(d),C._executableHandler=!0),p.isDefault&&(this._defaultCommandName=C._name),C._hidden=!!(p.noHelp||p.hidden),C._executableFile=p.executableFile||null,v&&C.arguments(v),this._registerCommand(C),C.parent=this,C.copyInheritedSettings(this),d?this:C}createCommand(t){return new he(t)}createHelp(){return Object.assign(new O,this.configureHelp())}configureHelp(t){return t===void 0?this._helpConfiguration:(this._helpConfiguration=t,this)}configureOutput(t){return t===void 0?this._outputConfiguration:(this._outputConfiguration={...this._outputConfiguration,...t},this)}showHelpAfterError(t=!0){return typeof t!="string"&&(t=!!t),this._showHelpAfterError=t,this}showSuggestionAfterError(t=!0){return this._showSuggestionAfterError=!!t,this}addCommand(t,r){if(!t._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=t._name),(r.noHelp||r.hidden)&&(t._hidden=!0),this._registerCommand(t),t.parent=this,t._checkForBrokenPassThrough(),this}createArgument(t,r){return new n(t,r)}argument(t,r,l,d){const p=this.createArgument(t,r);return typeof l=="function"?p.default(d).argParser(l):p.default(l),this.addArgument(p),this}arguments(t){return t.trim().split(/ +/).forEach(r=>{this.argument(r)}),this}addArgument(t){const r=this.registeredArguments.slice(-1)[0];if(r?.variadic)throw new Error(`only the last argument can be variadic '${r.name()}'`);if(t.required&&t.defaultValue!==void 0&&t.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${t.name()}'`);return this.registeredArguments.push(t),this}helpCommand(t,r){if(typeof t=="boolean")return this._addImplicitHelpCommand=t,t&&this._defaultCommandGroup&&this._initCommandGroup(this._getHelpCommand()),this;const[,l,d]=(t??"help [command]").match(/([^ ]+) *(.*)/),p=r??"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,(t||r)&&this._initCommandGroup(m),this}addHelpCommand(t,r){return typeof t!="object"?(this.helpCommand(t,r),this):(this._addImplicitHelpCommand=!0,this._helpCommand=t,this._initCommandGroup(t),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(t,r){const l=["preSubcommand","preAction","postAction"];if(!l.includes(t))throw new Error(`Unexpected value for event passed to hook : '${t}'.
15
+ Expecting one of '${l.join("', '")}'`);return this._lifeCycleHooks[t]?this._lifeCycleHooks[t].push(r):this._lifeCycleHooks[t]=[r],this}exitOverride(t){return t?this._exitCallback=t:this._exitCallback=r=>{if(r.code!=="commander.executeSubCommandAsync")throw r},this}_exit(t,r,l){this._exitCallback&&this._exitCallback(new h(t,r,l)),s.exit(t)}action(t){const r=l=>{const d=this.registeredArguments.length,p=l.slice(0,d);return this._storeOptionsAsProperties?p[d]=this:p[d]=this.opts(),p.push(this),t.apply(this,p)};return this._actionHandler=r,this}createOption(t,r){return new y(t,r)}_callParseArg(t,r,l,d){try{return t.parseArg(r,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(t){const r=t.short&&this._findOption(t.short)||t.long&&this._findOption(t.long);if(r){const l=t.long&&this._findOption(t.long)?t.long:t.short;throw new Error(`Cannot add option '${t.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${l}'
16
+ - already used by option '${r.flags}'`)}this._initOptionGroup(t),this.options.push(t)}_registerCommand(t){const r=d=>[d.name()].concat(d.aliases()),l=r(t).find(d=>this._findCommand(d));if(l){const d=r(this._findCommand(l)).join("|"),p=r(t).join("|");throw new Error(`cannot add command '${p}' as already have command '${d}'`)}this._initCommandGroup(t),this.commands.push(t)}addOption(t){this._registerOption(t);const r=t.name(),l=t.attributeName();if(t.negate){const p=t.long.replace(/^--no-/,"--");this._findOption(p)||this.setOptionValueWithSource(l,t.defaultValue===void 0?!0:t.defaultValue,"default")}else t.defaultValue!==void 0&&this.setOptionValueWithSource(l,t.defaultValue,"default");const d=(p,m,v)=>{p==null&&t.presetArg!==void 0&&(p=t.presetArg);const C=this.getOptionValue(l);p!==null&&t.parseArg?p=this._callParseArg(t,p,C,m):p!==null&&t.variadic&&(p=t._collectValue(p,C)),p==null&&(t.negate?p=!1:t.isBoolean()||t.optional?p=!0:p=""),this.setOptionValueWithSource(l,p,v)};return this.on("option:"+r,p=>{d(p,`error: option '${t.flags}' argument '${p}' is invalid.`,"cli")}),t.envVar&&this.on("optionEnv:"+r,p=>{d(p,`error: option '${t.flags}' value '${p}' from env '${t.envVar}' is invalid.`,"env")}),this}_optionEx(t,r,l,d,p){if(typeof r=="object"&&r instanceof y)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");const m=this.createOption(r,l);if(m.makeOptionMandatory(!!t.mandatory),typeof d=="function")m.default(p).argParser(d);else if(d instanceof RegExp){const v=d;d=(C,I)=>{const f=v.exec(C);return f?f[0]:I},m.default(p).argParser(d)}else m.default(d);return this.addOption(m)}option(t,r,l,d){return this._optionEx({},t,r,l,d)}requiredOption(t,r,l,d){return this._optionEx({mandatory:!0},t,r,l,d)}combineFlagAndOptionalValue(t=!0){return this._combineFlagAndOptionalValue=!!t,this}allowUnknownOption(t=!0){return this._allowUnknownOption=!!t,this}allowExcessArguments(t=!0){return this._allowExcessArguments=!!t,this}enablePositionalOptions(t=!0){return this._enablePositionalOptions=!!t,this}passThroughOptions(t=!0){return this._passThroughOptions=!!t,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(t=!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=!!t,this}getOptionValue(t){return this._storeOptionsAsProperties?this[t]:this._optionValues[t]}setOptionValue(t,r){return this.setOptionValueWithSource(t,r,void 0)}setOptionValueWithSource(t,r,l){return this._storeOptionsAsProperties?this[t]=r:this._optionValues[t]=r,this._optionValueSources[t]=l,this}getOptionValueSource(t){return this._optionValueSources[t]}getOptionValueSourceWithGlobals(t){let r;return this._getCommandAndAncestors().forEach(l=>{l.getOptionValueSource(t)!==void 0&&(r=l.getOptionValueSource(t))}),r}_prepareUserArgs(t,r){if(t!==void 0&&!Array.isArray(t))throw new Error("first parameter to parse must be array or undefined");if(r=r||{},t===void 0&&r.from===void 0){s.versions?.electron&&(r.from="electron");const d=s.execArgv??[];(d.includes("-e")||d.includes("--eval")||d.includes("-p")||d.includes("--print"))&&(r.from="eval")}t===void 0&&(t=s.argv),this.rawArgs=t.slice();let l;switch(r.from){case void 0:case"node":this._scriptPath=t[1],l=t.slice(2);break;case"electron":s.defaultApp?(this._scriptPath=t[1],l=t.slice(2)):l=t.slice(1);break;case"user":l=t.slice(0);break;case"eval":l=t.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",l}parse(t,r){this._prepareForParse();const l=this._prepareUserArgs(t,r);return this._parseCommand([],l),this}async parseAsync(t,r){this._prepareForParse();const l=this._prepareUserArgs(t,r);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(t,r,l){if(i.existsSync(t))return;const d=`'${t}' 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
+ - ${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(d)}_executeSubCommand(t,r){r=r.slice();let l=!1;const d=[".js",".ts",".tsx",".mjs",".cjs"];function p(f,A){const j=a.resolve(f,A);if(i.existsSync(j))return j;if(d.includes(a.extname(A)))return;const ae=d.find(Pe=>i.existsSync(`${j}${Pe}`));if(ae)return`${j}${ae}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let m=t._executableFile||`${this._name}-${t._name}`,v=this._executableDir||"";if(this._scriptPath){let f;try{f=i.realpathSync(this._scriptPath)}catch{f=this._scriptPath}v=a.resolve(a.dirname(f),v)}if(v){let f=p(v,m);if(!f&&!t._executableFile&&this._scriptPath){const A=a.basename(this._scriptPath,a.extname(this._scriptPath));A!==this._name&&(f=p(v,`${A}-${t._name}`))}m=f||m}l=d.includes(a.extname(m));let C;s.platform!=="win32"?l?(r.unshift(m),r=N(s.execArgv).concat(r),C=c.spawn(s.argv[0],r,{stdio:"inherit"})):C=c.spawn(m,r,{stdio:"inherit"}):(this._checkForMissingExecutable(m,v,t._name),r.unshift(m),r=N(s.execArgv).concat(r),C=c.spawn(s.execPath,r,{stdio:"inherit"})),C.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(f=>{s.on(f,()=>{C.killed===!1&&C.exitCode===null&&C.kill(f)})});const I=this._exitCallback;C.on("close",f=>{f=f??1,I?I(new h(f,"commander.executeSubCommandAsync","(close)")):s.exit(f)}),C.on("error",f=>{if(f.code==="ENOENT")this._checkForMissingExecutable(m,v,t._name);else if(f.code==="EACCES")throw new Error(`'${m}' not executable`);if(!I)s.exit(1);else{const A=new h(1,"commander.executeSubCommandAsync","(error)");A.nestedError=f,I(A)}}),this.runningCommand=C}_dispatchSubcommand(t,r,l){const d=this._findCommand(t);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,r.concat(l));else return d._parseCommand(r,l)}),p}_dispatchHelpCommand(t){t||this.help();const r=this._findCommand(t);return r&&!r._executableHandler&&r.help(),this._dispatchSubcommand(t,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((t,r)=>{t.required&&this.args[r]==null&&this.missingArgument(t.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){const t=(l,d,p)=>{let m=d;if(d!==null&&l.parseArg){const v=`error: command-argument value '${d}' is invalid for argument '${l.name()}'.`;m=this._callParseArg(l,d,p,v)}return m};this._checkNumberOfArguments();const r=[];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,v)=>t(l,v,m),l.defaultValue))):p===void 0&&(p=[]):d<this.args.length&&(p=this.args[d],l.parseArg&&(p=t(l,p,l.defaultValue))),r[d]=p}),this.processedArgs=r}_chainOrCall(t,r){return t?.then&&typeof t.then=="function"?t.then(()=>r()):r()}_chainOrCallHooks(t,r){let l=t;const d=[];return this._getCommandAndAncestors().reverse().filter(p=>p._lifeCycleHooks[r]!==void 0).forEach(p=>{p._lifeCycleHooks[r].forEach(m=>{d.push({hookedCommand:p,callback:m})})}),r==="postAction"&&d.reverse(),d.forEach(p=>{l=this._chainOrCall(l,()=>p.callback(p.hookedCommand,this))}),l}_chainOrCallSubCommandHook(t,r,l){let d=t;return this._lifeCycleHooks[l]!==void 0&&this._lifeCycleHooks[l].forEach(p=>{d=this._chainOrCall(d,()=>p(this,r))}),d}_parseCommand(t,r){const l=this.parseOptions(r);if(this._parseOptionsEnv(),this._parseOptionsImplied(),t=t.concat(l.operands),r=l.unknown,this.args=t.concat(r),t&&this._findCommand(t[0]))return this._dispatchSubcommand(t[0],t.slice(1),r);if(this._getHelpCommand()&&t[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(t[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(r),this._dispatchSubcommand(this._defaultCommandName,t,r);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,t,r)})),m=this._chainOrCallHooks(m,"postAction"),m}if(this.parent?.listenerCount(p))d(),this._processArguments(),this.parent.emit(p,t,r);else if(t.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",t,r);this.listenerCount("command:*")?this.emit("command:*",t,r):this.commands.length?this.unknownCommand():(d(),this._processArguments())}else this.commands.length?(d(),this.help({error:!0})):(d(),this._processArguments())}_findCommand(t){if(t)return this.commands.find(r=>r._name===t||r._aliases.includes(t))}_findOption(t){return this.options.find(r=>r.is(t))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(t=>{t.options.forEach(r=>{r.mandatory&&t.getOptionValue(r.attributeName())===void 0&&t.missingMandatoryOptionValue(r)})})}_checkForConflictingLocalOptions(){const t=this.options.filter(r=>{const l=r.attributeName();return this.getOptionValue(l)===void 0?!1:this.getOptionValueSource(l)!=="default"});t.filter(r=>r.conflictsWith.length>0).forEach(r=>{const l=t.find(d=>r.conflictsWith.includes(d.attributeName()));l&&this._conflictingOption(r,l)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(t=>{t._checkForConflictingLocalOptions()})}parseOptions(t){const r=[],l=[];let d=r;function p(f){return f.length>1&&f[0]==="-"}const m=f=>/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(f)?!this._getCommandAndAncestors().some(A=>A.options.map(j=>j.short).some(j=>/^-\d$/.test(j))):!1;let v=null,C=null,I=0;for(;I<t.length||C;){const f=C??t[I++];if(C=null,f==="--"){d===l&&d.push(f),d.push(...t.slice(I));break}if(v&&(!p(f)||m(f))){this.emit(`option:${v.name()}`,f);continue}if(v=null,p(f)){const A=this._findOption(f);if(A){if(A.required){const j=t[I++];j===void 0&&this.optionMissingArgument(A),this.emit(`option:${A.name()}`,j)}else if(A.optional){let j=null;I<t.length&&(!p(t[I])||m(t[I]))&&(j=t[I++]),this.emit(`option:${A.name()}`,j)}else this.emit(`option:${A.name()}`);v=A.variadic?A:null;continue}}if(f.length>2&&f[0]==="-"&&f[1]!=="-"){const A=this._findOption(`-${f[1]}`);if(A){A.required||A.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${A.name()}`,f.slice(2)):(this.emit(`option:${A.name()}`),C=`-${f.slice(2)}`);continue}}if(/^--[^=]+=/.test(f)){const A=f.indexOf("="),j=this._findOption(f.slice(0,A));if(j&&(j.required||j.optional)){this.emit(`option:${j.name()}`,f.slice(A+1));continue}}if(d===r&&p(f)&&!(this.commands.length===0&&m(f))&&(d=l),(this._enablePositionalOptions||this._passThroughOptions)&&r.length===0&&l.length===0){if(this._findCommand(f)){r.push(f),l.push(...t.slice(I));break}else if(this._getHelpCommand()&&f===this._getHelpCommand().name()){r.push(f,...t.slice(I));break}else if(this._defaultCommandName){l.push(f,...t.slice(I));break}}if(this._passThroughOptions){d.push(f,...t.slice(I));break}d.push(f)}return{operands:r,unknown:l}}opts(){if(this._storeOptionsAsProperties){const t={},r=this.options.length;for(let l=0;l<r;l++){const d=this.options[l].attributeName();t[d]=d===this._versionOptionName?this._version:this[d]}return t}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((t,r)=>Object.assign(t,r.opts()),{})}error(t,r){this._outputConfiguration.outputError(`${t}
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=r||{},d=l.exitCode||1,p=l.code||"commander.error";this._exit(d,p,t)}_parseOptionsEnv(){this.options.forEach(t=>{if(t.envVar&&t.envVar in s.env){const r=t.attributeName();(this.getOptionValue(r)===void 0||["default","config","env"].includes(this.getOptionValueSource(r)))&&(t.required||t.optional?this.emit(`optionEnv:${t.name()}`,s.env[t.envVar]):this.emit(`optionEnv:${t.name()}`))}})}_parseOptionsImplied(){const t=new S(this.options),r=l=>this.getOptionValue(l)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(l));this.options.filter(l=>l.implied!==void 0&&r(l.attributeName())&&t.valueFromOption(this.getOptionValue(l.attributeName()),l)).forEach(l=>{Object.keys(l.implied).filter(d=>!r(d)).forEach(d=>{this.setOptionValueWithSource(d,l.implied[d],"implied")})})}missingArgument(t){const r=`error: missing required argument '${t}'`;this.error(r,{code:"commander.missingArgument"})}optionMissingArgument(t){const r=`error: option '${t.flags}' argument missing`;this.error(r,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(t){const r=`error: required option '${t.flags}' not specified`;this.error(r,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(t,r){const l=m=>{const v=m.attributeName(),C=this.getOptionValue(v),I=this.options.find(A=>A.negate&&v===A.attributeName()),f=this.options.find(A=>!A.negate&&v===A.attributeName());return I&&(I.presetArg===void 0&&C===!1||I.presetArg!==void 0&&C===I.presetArg)?I:f||m},d=m=>{const v=l(m),C=v.attributeName();return this.getOptionValueSource(C)==="env"?`environment variable '${v.envVar}'`:`option '${v.flags}'`},p=`error: ${d(t)} cannot be used with ${d(r)}`;this.error(p,{code:"commander.conflictingOption"})}unknownOption(t){if(this._allowUnknownOption)return;let r="";if(t.startsWith("--")&&this._showSuggestionAfterError){let d=[],p=this;do{const m=p.createHelp().visibleOptions(p).filter(v=>v.long).map(v=>v.long);d=d.concat(m),p=p.parent}while(p&&!p._enablePositionalOptions);r=w(t,d)}const l=`error: unknown option '${t}'${r}`;this.error(l,{code:"commander.unknownOption"})}_excessArguments(t){if(this._allowExcessArguments)return;const r=this.registeredArguments.length,l=r===1?"":"s",d=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${r} argument${l} but got ${t.length}.`;this.error(d,{code:"commander.excessArguments"})}unknownCommand(){const t=this.args[0];let r="";if(this._showSuggestionAfterError){const d=[];this.createHelp().visibleCommands(this).forEach(p=>{d.push(p.name()),p.alias()&&d.push(p.alias())}),r=w(t,d)}const l=`error: unknown command '${t}'${r}`;this.error(l,{code:"commander.unknownCommand"})}version(t,r,l){if(t===void 0)return this._version;this._version=t,r=r||"-V, --version",l=l||"output the version number";const d=this.createOption(r,l);return this._versionOptionName=d.attributeName(),this._registerOption(d),this.on("option:"+d.name(),()=>{this._outputConfiguration.writeOut(`${t}
24
+ `),this._exit(0,"commander.version",t)}),this}description(t,r){return t===void 0&&r===void 0?this._description:(this._description=t,r&&(this._argsDescription=r),this)}summary(t){return t===void 0?this._summary:(this._summary=t,this)}alias(t){if(t===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]),t===r._name)throw new Error("Command alias can't be the same as its name");const l=this.parent?._findCommand(t);if(l){const d=[l.name()].concat(l.aliases()).join("|");throw new Error(`cannot add alias '${t}' to command '${this.name()}' as already have command '${d}'`)}return r._aliases.push(t),this}aliases(t){return t===void 0?this._aliases:(t.forEach(r=>this.alias(r)),this)}usage(t){if(t===void 0){if(this._usage)return this._usage;const r=this.registeredArguments.map(l=>u(l));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?r:[]).join(" ")}return this._usage=t,this}name(t){return t===void 0?this._name:(this._name=t,this)}helpGroup(t){return t===void 0?this._helpGroupHeading??"":(this._helpGroupHeading=t,this)}commandsGroup(t){return t===void 0?this._defaultCommandGroup??"":(this._defaultCommandGroup=t,this)}optionsGroup(t){return t===void 0?this._defaultOptionGroup??"":(this._defaultOptionGroup=t,this)}_initOptionGroup(t){this._defaultOptionGroup&&!t.helpGroupHeading&&t.helpGroup(this._defaultOptionGroup)}_initCommandGroup(t){this._defaultCommandGroup&&!t.helpGroup()&&t.helpGroup(this._defaultCommandGroup)}nameFromFilename(t){return this._name=a.basename(t,a.extname(t)),this}executableDir(t){return t===void 0?this._executableDir:(this._executableDir=t,this)}helpInformation(t){const r=this.createHelp(),l=this._getOutputContext(t);r.prepareContext({error:l.error,helpWidth:l.helpWidth,outputHasColors:l.hasColors});const d=r.formatHelp(this,r);return l.hasColors?d:this._outputConfiguration.stripColor(d)}_getOutputContext(t){t=t||{};const r=!!t.error;let l,d,p;return r?(l=v=>this._outputConfiguration.writeErr(v),d=this._outputConfiguration.getErrHasColors(),p=this._outputConfiguration.getErrHelpWidth()):(l=v=>this._outputConfiguration.writeOut(v),d=this._outputConfiguration.getOutHasColors(),p=this._outputConfiguration.getOutHelpWidth()),{error:r,write:v=>(d||(v=this._outputConfiguration.stripColor(v)),l(v)),hasColors:d,helpWidth:p}}outputHelp(t){let r;typeof t=="function"&&(r=t,t=void 0);const l=this._getOutputContext(t),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(r&&(p=r(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(t,r){return typeof t=="boolean"?(t?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(t??"-h, --help",r??"display help for command"),(t||r)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(t){return this._helpOption=t,this._initOptionGroup(t),this}help(t){this.outputHelp(t);let r=Number(s.exitCode??0);r===0&&t&&typeof t!="function"&&t.error&&(r=1),this._exit(r,"commander.help","(outputHelp)")}addHelpText(t,r){const l=["beforeAll","before","after","afterAll"];if(!l.includes(t))throw new Error(`Unexpected value for position to addHelpText.
25
+ Expecting one of '${l.join("', '")}'`);const d=`${t}Help`;return this.on(d,p=>{let m;typeof r=="function"?m=r({error:p.error,command:p.command}):m=r,m&&p.write(`${m}
26
+ `)}),this}_outputHelpIfRequested(t){const r=this._getHelpOption();r&&t.find(l=>r.is(l))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function N(Te){return Te.map(t=>{if(!t.startsWith("--inspect"))return t;let r,l="127.0.0.1",d="9229",p;return(p=t.match(/^(--inspect(-brk)?)$/))!==null?r=p[1]:(p=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(r=p[1],/^\d+$/.test(p[3])?d=p[3]:l=p[3]):(p=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(r=p[1],l=p[3],d=p[4]),r&&d!=="0"?`${r}=${l}:${parseInt(d)+1}`:t})}function K(){if(s.env.NO_COLOR||s.env.FORCE_COLOR==="0"||s.env.FORCE_COLOR==="false")return!1;if(s.env.FORCE_COLOR||s.env.CLICOLOR_FORCE!==void 0)return!0}e.Command=V,e.useColor=K})),Ge=F((e=>{var{Argument:o}=Z(),{Command:c}=Fe(),{CommanderError:a,InvalidArgumentError:i}=J(),{Help:s}=de(),{Option:n}=pe();e.program=new c,e.createCommand=u=>new c(u),e.createOption=(u,h)=>new n(u,h),e.createArgument=(u,h)=>new o(u,h),e.Command=c,e.Option=n,e.Argument=o,e.Help=s,e.CommanderError=a,e.InvalidArgumentError=i,e.InvalidOptionArgumentError=i})),Le=ke(Ge(),1),{program:Qt,createCommand:Yt,createArgument:Xt,createOption:Zt,CommanderError:We,InvalidArgumentError:ei,InvalidOptionArgumentError:ti,Command:Ue,Argument:ii,Option:R,Help:si}=Le.default;function T(e){return`${JSON.stringify(e,null,2)}
27
+ `}var me=(function(e){return e.INIT="Init",e.COMPLETED="Completed",e.ARCHIVED="Archived",e.DRAFTING="Drafting",e.EXECUTION_COMPLETED="ExecutionCompleted",e.OPTIMIZING="Optimizing",e.OPENSPECING="Openspecing",e.REVIEWING="Reviewing",e.EXECUTING="Executing",e.ARCHIVING="Archiving",e})({});function fe(e){return e.replace(/\s+/g," ").trim()}function ge(e,o){const c=o.map(s=>e.map(n=>fe(n.value(s)))),a=e.map((s,n)=>{const u=c.map(h=>h[n].length);return Math.max(s.header.length,...u)}),i=s=>s.map((n,u)=>n.padEnd(a[u])).join(" ").trimEnd();return[i(e.map(s=>s.header)),i(a.map(s=>"-".repeat(s))),...c.map(i)].join(`
28
+ `)}function ee(e){const o=e.filter(([,a])=>a!==void 0&&a!==""),c=Math.max(...o.map(([a])=>a.length));return`${o.map(([a,i])=>`${a.padEnd(c)} ${fe(i??"")}`).join(`
29
+ `)}
30
+ `}function ce(e){return typeof e=="string"?e.trim():e?.value?.trim()??""}function G(e){return{sessionId:ce(e.sessionId),title:e.title,type:e.type,status:e.status,projectId:ce(e.projectId),proposalName:e.proposalName??void 0,archived:e.status===me.ARCHIVED,lastActiveAt:e.lastActiveAt??void 0,enableIndependentWorkspace:e.enableIndependentWorkspace,baseBranch:e.baseBranch??void 0,metadata:e.metadata??void 0,chatExecutorType:e.chatExecutorType??void 0}}function Oe(e){return{sessions:e.sessions.map(G)}}function _e(e,o){return o.length===0?`No ${e.toLowerCase()} found.
31
+ `:`${e} (${o.length})
32
+ ${ge([{header:"Session ID",value:c=>c.sessionId},{header:"Title",value:c=>c.title},{header:"Status",value:c=>c.status},{header:"Project ID",value:c=>c.projectId},{header:"Archived",value:c=>c.archived?"yes":"no"}],o)}
33
+ `}function W(e,o=[]){return ee([["sessionId",e.sessionId],["type",e.type],["title",e.title],["status",e.status],["projectId",e.projectId],["proposalName",e.proposalName],["independentWorkspace",String(e.enableIndependentWorkspace)],["baseBranch",e.baseBranch],["chatExecutorType",e.chatExecutorType],["metadata",e.metadata],...o])}function te(e,o,c,a=[]){return`${e}
34
+ ${ee([["sessionId",o],["message",c.message],...a])}`}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 L(e){const o=e?.trim();return o||void 0}function Me(e={},o=process.env){return{baseUrl:L(e.baseUrl)??L(o.HAGI_API_BASE_URL)??"http://127.0.0.1:35168",token:L(e.token)??L(o.HAGI_API_TOKEN),lang:L(e.lang)??L(o.HAGI_API_LANG)}}function Be(e={},o=process.env){const c=Me(e,o);return g.BASE=c.baseUrl,g.WITH_CREDENTIALS=!1,g.CREDENTIALS="omit",g.TOKEN=c.token,g.HEADERS=c.lang?{"Accept-Language":c.lang}:void 0,c}var X=class extends Error{url;status;statusText;body;request;constructor(e,o,c){super(c),this.name="ApiError",this.url=o.url,this.status=o.status,this.statusText=o.statusText,this.body=o.body,this.request=e}},H={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},D=class extends Error{constructor(e){super(e),this.name="CliUsageError"}},ve=class extends Error{status;details;constructor(e,o,c){super(o),this.name="CliHttpError",this.status=e,this.details=c}};function Je(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return e}function M(e,o){const c=Je(e)?.[o];return typeof c=="string"&&c.trim()?c.trim():void 0}function ze(e){return e.includes("fetch failed")||e.includes("ECONNREFUSED")||e.includes("ENOTFOUND")||e.includes("Failed to parse URL")}function ue(e){switch(e){case 400:return H.HTTP_BAD_REQUEST;case 401:return H.HTTP_UNAUTHORIZED;case 403:return H.HTTP_FORBIDDEN;case 404:return H.HTTP_NOT_FOUND;case 409:return H.HTTP_CONFLICT;default:return e&&e>=400&&e<500?H.HTTP_CLIENT_ERROR:e&&e>=500?H.HTTP_SERVER_ERROR:H.UNKNOWN}}function Ke(e){if(e instanceof D)return{exitCode:H.USAGE,message:e.message};if(e instanceof ve)return{exitCode:ue(e.status),status:e.status,message:e.message,details:e.details};if(e instanceof X){const o=M(e.body,"error")??M(e.body,"message")??e.message;return{exitCode:ue(e.status),status:e.status,message:o,errorCode:M(e.body,"errorCode"),correlationId:M(e.body,"correlationId"),details:e.body}}return e instanceof Error?{exitCode:ze(e.message)?H.TRANSPORT:H.UNKNOWN,message:e.message}:{exitCode:H.UNKNOWN,message:String(e)}}function Ce(e,o={}){if(o.json)return`${JSON.stringify({error:{message:e.message,status:e.status,exitCode:e.exitCode,errorCode:e.errorCode,correlationId:e.correlationId,details:e.details}},null,2)}
35
+ `;const c=[e.status?`status=${e.status}`:void 0,e.errorCode?`errorCode=${e.errorCode}`:void 0,e.correlationId?`correlationId=${e.correlationId}`:void 0].filter(Boolean),a=c.length>0?` (${c.join(", ")})`:"";return`${e.message}${a}
36
+ `}var Qe=class extends Error{constructor(e){super(e),this.name="CancelError"}get isCancelled(){return!0}},Ye=class{#t;#i;#e;#s;#r;#n;#o;constructor(e){this.#t=!1,this.#i=!1,this.#e=!1,this.#s=[],this.#r=new Promise((o,c)=>{this.#n=o,this.#o=c;const a=n=>{this.#t||this.#i||this.#e||(this.#t=!0,this.#n&&this.#n(n))},i=n=>{this.#t||this.#i||this.#e||(this.#i=!0,this.#o&&this.#o(n))},s=n=>{this.#t||this.#i||this.#e||this.#s.push(n)};return Object.defineProperty(s,"isResolved",{get:()=>this.#t}),Object.defineProperty(s,"isRejected",{get:()=>this.#i}),Object.defineProperty(s,"isCancelled",{get:()=>this.#e}),e(a,i,s)})}get[Symbol.toStringTag](){return"Cancellable Promise"}then(e,o){return this.#r.then(e,o)}catch(e){return this.#r.catch(e)}finally(e){return this.#r.finally(e)}cancel(){if(!(this.#t||this.#i||this.#e)){if(this.#e=!0,this.#s.length)try{for(const e of this.#s)e()}catch(e){console.warn("Cancellation threw an error",e);return}this.#s.length=0,this.#o&&this.#o(new Qe("Request aborted"))}}get isCancelled(){return this.#e}},ie=e=>e!=null,U=e=>typeof e=="string",Q=e=>U(e)&&e!=="",se=e=>typeof e=="object"&&typeof e.type=="string"&&typeof e.stream=="function"&&typeof e.arrayBuffer=="function"&&typeof e.constructor=="function"&&typeof e.constructor.name=="string"&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag]),Ae=e=>e instanceof FormData,Xe=e=>{try{return btoa(e)}catch{return Buffer.from(e).toString("base64")}},Ze=e=>{const o=[],c=(i,s)=>{o.push(`${encodeURIComponent(i)}=${encodeURIComponent(String(s))}`)},a=(i,s)=>{ie(s)&&(Array.isArray(s)?s.forEach(n=>{a(i,n)}):typeof s=="object"?Object.entries(s).forEach(([n,u])=>{a(`${i}[${n}]`,u)}):c(i,s))};return Object.entries(e).forEach(([i,s])=>{a(i,s)}),o.length>0?`?${o.join("&")}`:""},et=(e,o)=>{const c=e.ENCODE_PATH||encodeURI,a=o.url.replace("{api-version}",e.VERSION).replace(/{(.*?)}/g,(s,n)=>o.path?.hasOwnProperty(n)?c(String(o.path[n])):s),i=`${e.BASE}${a}`;return o.query?`${i}${Ze(o.query)}`:i},tt=e=>{if(e.formData){const o=new FormData,c=(a,i)=>{U(i)||se(i)?o.append(a,i):o.append(a,JSON.stringify(i))};return Object.entries(e.formData).filter(([a,i])=>ie(i)).forEach(([a,i])=>{Array.isArray(i)?i.forEach(s=>c(a,s)):c(a,i)}),o}},B=async(e,o)=>typeof o=="function"?o(e):o,it=async(e,o)=>{const[c,a,i,s]=await Promise.all([B(o,e.TOKEN),B(o,e.USERNAME),B(o,e.PASSWORD),B(o,e.HEADERS)]),n=Object.entries({Accept:"application/json",...s,...o.headers}).filter(([u,h])=>ie(h)).reduce((u,[h,O])=>({...u,[h]:String(O)}),{});return Q(c)&&(n.Authorization=`Bearer ${c}`),Q(a)&&Q(i)&&(n.Authorization=`Basic ${Xe(`${a}:${i}`)}`),o.body!==void 0&&(o.mediaType?n["Content-Type"]=o.mediaType:se(o.body)?n["Content-Type"]=o.body.type||"application/octet-stream":U(o.body)?n["Content-Type"]="text/plain":Ae(o.body)||(n["Content-Type"]="application/json")),new Headers(n)},st=e=>{if(e.body!==void 0)return e.mediaType?.includes("/json")?JSON.stringify(e.body):U(e.body)||se(e.body)||Ae(e.body)?e.body:JSON.stringify(e.body)},ot=async(e,o,c,a,i,s,n)=>{const u=new AbortController,h={headers:s,body:a??i,method:o.method,signal:u.signal};return e.WITH_CREDENTIALS&&(h.credentials=e.CREDENTIALS),n(()=>u.abort()),await fetch(c,h)},rt=(e,o)=>{if(o){const c=e.headers.get(o);if(U(c))return c}},nt=async e=>{if(e.status!==204)try{const o=e.headers.get("Content-Type");if(o)return["application/json","application/problem+json"].some(c=>o.toLowerCase().startsWith(c))?await e.json():await e.text()}catch(o){console.error(o)}},at=(e,o)=>{const c={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",...e.errors}[o.status];if(c)throw new X(e,o,c);if(!o.ok)throw new X(e,o,`Generic Error: status: ${o.status??"unknown"}; status text: ${o.statusText??"unknown"}; body: ${(()=>{try{return JSON.stringify(o.body,null,2)}catch{return}})()}`)},_=(e,o)=>new Ye(async(c,a,i)=>{try{const s=et(e,o),n=tt(o),u=st(o),h=await it(e,o);if(!i.isCancelled){const O=await ot(e,o,s,u,n,h,i),b=await nt(O),y=rt(O,o.responseHeader),S={url:s,ok:O.ok,status:O.status,statusText:O.statusText,body:y??b};at(o,S),c(S.body)}}catch(s){a(s)}}),ct=class{static getApiDataAggregation(){return _(g,{method:"GET",url:"/api/DataAggregation",errors:{400:"Depth parameter is no longer supported"}})}},Y=class{static postApiProject({requestBody:e}){return _(g,{method:"POST",url:"/api/Project",body:e,mediaType:"application/json"})}static postApiProjectDemo(){return _(g,{method:"POST",url:"/api/Project/demo"})}static putApiProject({id:e,requestBody:o}){return _(g,{method:"PUT",url:"/api/Project/{id}",path:{id:e},body:o,mediaType:"application/json"})}static deleteApiProject({id:e}){return _(g,{method:"DELETE",url:"/api/Project/{id}",path:{id:e}})}static postApiProjectOpenInVscode({id:e,subPath:o}){return _(g,{method:"POST",url:"/api/Project/{id}/open-in-vscode",path:{id:e},query:{subPath:o},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:e}){return _(g,{method:"GET",url:"/api/Project/{id}/monospecs/management",path:{id:e},errors:{400:"Bad Request",404:"Not Found",500:"Internal Server Error"}})}static putApiProjectMonospecsManagement({id:e,requestBody:o}){return _(g,{method:"PUT",url:"/api/Project/{id}/monospecs/management",path:{id:e},body:o,mediaType:"application/json",errors:{400:"Bad Request",404:"Not Found",500:"Internal Server Error"}})}static getApiProjectBranchesValidate({id:e,branchName:o,repositoryPath:c}){return _(g,{method:"GET",url:"/api/Project/{id}/branches/validate",path:{id:e},query:{branchName:o,repositoryPath:c},errors:{400:"Branch name is required",404:"Project not found"}})}static getApiProjectValidatePath({path:e}){return _(g,{method:"GET",url:"/api/Project/validate-path",query:{path:e},errors:{400:"Path parameter is missing or invalid",500:"Internal server error during validation"}})}static postApiProjectScanGitRepos({requestBody:e}){return _(g,{method:"POST",url:"/api/Project/scan-git-repos",body:e,mediaType:"application/json",errors:{400:"Invalid request parameters",500:"Internal server error during scan"}})}static postApiProjectValidateMonospecs({requestBody:e}){return _(g,{method:"POST",url:"/api/Project/validate-monospecs",body:e,mediaType:"application/json",errors:{400:"Invalid request parameters",500:"Internal server error"}})}static getApiProjectKnowledgeOverview({id:e}){return _(g,{method:"GET",url:"/api/Project/{id}/knowledge/overview",path:{id:e},errors:{400:"Bad Request",404:"Not Found",409:"Conflict",500:"Internal Server Error"}})}static getApiProjectKnowledgeGraph({id:e}){return _(g,{method:"GET",url:"/api/Project/{id}/knowledge/graph",path:{id:e},errors:{400:"Bad Request",404:"Not Found",409:"Conflict",500:"Internal Server Error"}})}static postApiProjectKnowledgeMemoriesAccept({id:e,memoryId:o}){return _(g,{method:"POST",url:"/api/Project/{id}/knowledge/memories/{memoryId}/accept",path:{id:e,memoryId:o},errors:{400:"Bad Request",404:"Not Found",409:"Conflict",500:"Internal Server Error"}})}static postApiProjectKnowledgeMemoriesRestoreCandidate({id:e,memoryId:o}){return _(g,{method:"POST",url:"/api/Project/{id}/knowledge/memories/{memoryId}/restore-candidate",path:{id:e,memoryId:o},errors:{400:"Bad Request",404:"Not Found",409:"Conflict",500:"Internal Server Error"}})}static deleteApiProjectKnowledgeMemories({id:e,memoryId:o}){return _(g,{method:"DELETE",url:"/api/Project/{id}/knowledge/memories/{memoryId}",path:{id:e,memoryId:o},errors:{400:"Bad Request",404:"Not Found",409:"Conflict",500:"Internal Server Error"}})}},$=class{static postApiSessionsAutoTask({requestBody:e}){return _(g,{method:"POST",url:"/api/Sessions/auto-task",body:e,mediaType:"application/json",errors:{400:"Missing required fields or invalid prompt ID",404:"Project not found",500:"Internal server error"}})}static postApiSessionsArchiveChat({sessionId:e}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/archive-chat",path:{sessionId:e},errors:{400:"Session is not a chat session",404:"Session not found",500:"Failed to archive chat session"}})}static postApiSessionsChat({requestBody:e}){return _(g,{method:"POST",url:"/api/Sessions/chat",body:e,mediaType:"application/json",errors:{400:"Bad Request"}})}static postApiSessions({requestBody:e}){return _(g,{method:"POST",url:"/api/Sessions",body:e,mediaType:"application/json",errors:{400:"Bad Request"}})}static getApiSessions({type:e,activeOnly:o,includeArchived:c,projectId:a,projectIds:i}){return _(g,{method:"GET",url:"/api/Sessions",query:{type:e,activeOnly:o,includeArchived:c,projectId:a,projectIds:i}})}static getApiSessions1({sessionId:e}){return _(g,{method:"GET",url:"/api/Sessions/{sessionId}",path:{sessionId:e},errors:{400:"Invalid session ID format",404:"Session not found",500:"Internal server error occurred"}})}static putApiSessions({sessionId:e,requestBody:o}){return _(g,{method:"PUT",url:"/api/Sessions/{sessionId}",path:{sessionId:e},body:o,mediaType:"application/json"})}static deleteApiSessions({sessionId:e,deleteFiles:o=!1}){return _(g,{method:"DELETE",url:"/api/Sessions/{sessionId}",path:{sessionId:e},query:{deleteFiles:o},errors:{404:"Session not found",500:"Failed to delete session"}})}static postApiSessionsCancel({sessionId:e}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/cancel",path:{sessionId:e},errors:{404:"Session not found",500:"Failed to cancel session"}})}static getApiSessionsProcessingStatus({sessionId:e}){return _(g,{method:"GET",url:"/api/Sessions/{sessionId}/processing-status",path:{sessionId:e},errors:{404:"Session not found",500:"Failed to get processing status"}})}static deleteApiSessionsQueue({sessionId:e,queueIndex:o}){return _(g,{method:"DELETE",url:"/api/Sessions/{sessionId}/queue/{queueIndex}",path:{sessionId:e,queueIndex:o},errors:{400:"Invalid queue index",404:"Session not found",500:"Failed to cancel message"}})}static postApiSessionsMessages({sessionId:e,requestBody:o}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/messages",path:{sessionId:e},body:o,mediaType:"application/json"})}static postApiSessionsAnnotations({sessionId:e,requestBody:o}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/annotations",path:{sessionId:e},body:o,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:e}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/generate-proposal-name",path:{sessionId:e},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:e,requestBody:o}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/optimize-description",path:{sessionId:e},body:o,mediaType:"application/json",errors:{400:"Invalid request or empty description",404:"Session not found",500:"Failed to start optimization task"}})}static postApiSessionsOptimizeTitle({sessionId:e}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/optimize-title",path:{sessionId:e},errors:{400:"Invalid request or session has no description",404:"Session not found",500:"Failed to optimize title"}})}static postApiSessionsGenerateProposal({sessionId:e,requestBody:o}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/generate-proposal",path:{sessionId:e},body:o,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:e,requestBody:o}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/archive",path:{sessionId:e},body:o,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:e,requestBody:o}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/execute-proposal",path:{sessionId:e},body:o,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:e}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/complete",path:{sessionId:e},errors:{400:"Session is not in ExecutionCompleted status",404:"Session not found",500:"Failed to complete session"}})}static postApiSessionsValidateExecute({sessionId:e}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/validate-execute",path:{sessionId:e},errors:{404:"Session not found",500:"Failed to validate session"}})}static postApiSessionsValidateStart({sessionId:e}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/validate-start",path:{sessionId:e},errors:{404:"Session not found",500:"Failed to validate session"}})}static postApiSessionsValidateArchive({sessionId:e}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/validate-archive",path:{sessionId:e},errors:{404:"Session not found",500:"Failed to validate session"}})}static getApiSessionsOpenspecFile({sessionId:e,relativePath:o}){return _(g,{method:"GET",url:"/api/Sessions/{sessionId}/openspec-file",path:{sessionId:e},query:{relativePath:o},errors:{404:"Session not found or file not found",500:"Failed to read file"}})}static postApiSessionsUpdateCessionId({sessionId:e}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/update-cession-id",path:{sessionId:e},errors:{404:"Session not found",500:"Failed to update CessionId"}})}static postApiSessionsOpenInVscode({sessionId:e,subPath:o}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/open-in-vscode",path:{sessionId:e},query:{subPath:o},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:e,requestBody:o}){return _(g,{method:"POST",url:"/api/Sessions/{sessionId}/correct-proposal-name",path:{sessionId:e},body:o,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:e}){return _(g,{method:"DELETE",url:"/api/Sessions/{sessionId}/workspace",path:{sessionId:e},errors:{400:"Session does not have an independent workspace",404:"Session not found",500:"Failed to delete workspace"}})}};function ut(){return{listSessions:e=>$.getApiSessions(e),getSession:e=>$.getApiSessions1({sessionId:e}),createProposalSession:e=>$.postApiSessions({requestBody:e}),createChatSession:e=>$.postApiSessionsChat({requestBody:e}),createAutoTaskSession:e=>$.postApiSessionsAutoTask({requestBody:e}),updateSession:(e,o)=>$.putApiSessions({sessionId:e,requestBody:o}),deleteSession:(e,o)=>$.deleteApiSessions({sessionId:e,deleteFiles:o}),sendMessage:(e,o)=>$.postApiSessionsMessages({sessionId:e,requestBody:o}),generateProposalName:e=>$.postApiSessionsGenerateProposalName({sessionId:e}),optimizeDescription:(e,o)=>$.postApiSessionsOptimizeDescription({sessionId:e,requestBody:o}),generateProposal:(e,o)=>$.postApiSessionsGenerateProposal({sessionId:e,requestBody:o}),executeProposal:(e,o)=>$.postApiSessionsExecuteProposal({sessionId:e,requestBody:o}),archiveProposal:(e,o)=>$.postApiSessionsArchive({sessionId:e,requestBody:o}),completeProposal:e=>$.postApiSessionsComplete({sessionId:e}),submitAnnotations:(e,o)=>$.postApiSessionsAnnotations({sessionId:e,requestBody:o}),listProjects:()=>ct.getApiDataAggregation(),createProject:e=>Y.postApiProject({requestBody:e}),updateProject:(e,o)=>Y.putApiProject({id:e,requestBody:o}),deleteProject:e=>Y.deleteApiProject({id:e}),archiveChat:e=>$.postApiSessionsArchiveChat({sessionId:e})}}function E(e){const o=e?.trim();return o||void 0}function k(e,o){const c=E(e);if(!c)throw new D(`${o} is required.`);return c}function ye(e){const o=e?.map(c=>E(c)).filter(Boolean);return o&&o.length>0?o:void 0}function Se(e=process.env,o={stdout:c=>{process.stdout.write(c)},stderr:c=>{process.stderr.write(c)}}){return{api:ut(),env:e,io:o}}function lt(e){return e.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(e){return e.option("--json","Emit deterministic JSON instead of human-readable text.")}function x(e,o){const c=e.optsWithGlobals();return{api:o.api,env:o.env,io:o.io,outputJson:c.json===!0,runtime:Be({baseUrl:c.baseUrl,token:c.token,lang:c.lang},o.env)}}function dt(e,o){P(e.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(a){if(a.targetBranchName&&a.targetBranchMode!=="new-custom")throw new D("--target-branch-name requires --target-branch-mode new-custom.");if(a.targetBranchMode==="new-custom"&&!E(a.targetBranchName))throw new D("--target-branch-name is required when --target-branch-mode is new-custom.");const i=x(this,o),s={title:k(a.title,"--title"),projectId:k(a.projectId,"--project-id"),promptId:k(a.promptId,"--prompt-id"),message:E(a.message),presetId:E(a.presetId),repositoryPath:E(a.repositoryPath),projectIds:ye(a.projectIds),needPush:a.needPush?!0:void 0,targetBranchMode:E(a.targetBranchMode),targetBranchName:E(a.targetBranchName),scriptKey:E(a.scriptKey),heroId:E(a.heroId)},n=G(await i.api.createAutoTaskSession(s));if(i.outputJson){i.io.stdout(T({session:n,promptId:s.promptId,requested:s}));return}i.io.stdout(`AutoTask session created
37
+ ${W(n,[["promptId",s.promptId],["repositoryPath",s.repositoryPath],["targetBranchMode",s.targetBranchMode],["targetBranchName",s.targetBranchName],["scriptKey",s.scriptKey],["heroId",s.heroId]])}`)})}var z=(function(e){return e.CLAUDE_CODE_CLI="ClaudeCodeCli",e.CODEX_CLI="CodexCli",e.GIT_HUB_COPILOT="GitHubCopilot",e.CODEBUDDY_CLI="CodebuddyCli",e.OPEN_CODE_CLI="OpenCodeCli",e.IFLOW_CLI="IFlowCli",e.HERMES_CLI="HermesCli",e.QODER_CLI="QoderCli",e.KIRO_CLI="KiroCli",e.KIMI_CLI="KimiCli",e.GEMINI_CLI="GeminiCli",e})({}),oe=(function(e){return e.READONLY="Readonly",e.EDIT="Edit",e})({});function pt(e,o){P(e.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 R("--mode <mode>","Message mode override.").choices(Object.values(oe))).addOption(new R("--executor-type <type>","Executor override for this message.").choices(Object.values(z))).action(async function(a){const i=x(this,o),s=a.sessionId.trim(),n=await i.api.sendMessage(s,{content:k(a.content,"--content"),mode:a.mode,executorType:a.executorType});if(i.outputJson){i.io.stdout(T({sessionId:s,message:n.message,requested:{mode:a.mode,executorType:a.executorType}}));return}i.io.stdout(te("AutoTask message sent",s,n,[["mode",a.mode],["executorType",a.executorType]]))})}function ht(e,o){const c=e.command("autotask").description("Manage AutoTask sessions.");dt(c,o),pt(c,o)}function mt(e,o){P(e.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(a){const i=x(this,o),s=a.sessionId.trim(),n=await i.api.archiveChat(s);if(i.outputJson){i.io.stdout(T({sessionId:s,message:n.message}));return}i.io.stdout(`Chat archived
38
+ sessionId ${s}
39
+ message ${n.message}
40
+ `)})}function ft(e,o){P(e.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 R("--executor-type <type>","Optional executor override.").choices(Object.values(z))).action(async function(a){const i=x(this,o),s=G(await i.api.createChatSession({title:k(a.title,"--title"),projectId:k(a.projectId,"--project-id"),heroId:E(a.heroId),executorType:a.executorType}));if(i.outputJson){i.io.stdout(T({session:s}));return}i.io.stdout(`Chat session created
41
+ ${W(s)}`)})}function gt(e,o){P(e.command("delete").description("Delete a chat session.")).requiredOption("--session-id <id>","Chat session id to delete.").action(async function(a){const i=x(this,o),s=a.sessionId.trim(),n=await i.api.deleteSession(s,!1);if(i.outputJson){i.io.stdout(T({sessionId:s,deleted:!0,message:n.message}));return}i.io.stdout(`Chat deleted
42
+ sessionId ${s}
43
+ message ${n.message}
44
+ `)})}var re=(function(e){return e.CHAT="Chat",e.PROPOSAL="Proposal",e})({});function Ot(e,o){P(e.command("list").description("List normal chat sessions.")).action(async function(a){if(a.projectId&&a.projectIds?.length)throw new D("Use either --project-id or --project-ids, not both.");const i=x(this,o),s=Oe(await i.api.listSessions({type:re.CHAT,projectId:E(a.projectId),projectIds:ye(a.projectIds),activeOnly:a.activeOnly?!0:void 0,includeArchived:a.includeArchived?!0:void 0}));if(i.outputJson){i.io.stdout(T(s));return}i.io.stdout(_e("Chat sessions",s.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 _t(e,o){P(e.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 R("--mode <mode>","Message mode override.").choices(Object.values(oe))).addOption(new R("--executor-type <type>","Executor override for this message.").choices(Object.values(z))).action(async function(a){const i=x(this,o),s=a.sessionId.trim(),n=await i.api.sendMessage(s,{content:k(a.content,"--content"),mode:a.mode,executorType:a.executorType});if(i.outputJson){i.io.stdout(T({sessionId:s,message:n.message,requested:{mode:a.mode,executorType:a.executorType}}));return}i.io.stdout(te("Chat message sent",s,n,[["mode",a.mode],["executorType",a.executorType]]))})}function vt(e,o){const c=e.command("chat").description("Manage normal chat sessions.");Ot(c,o),ft(c,o),mt(c,o),gt(c,o),_t(c,o)}function q(e){const o=e?.trim();return o||void 0}function ne(e){return{id:q(e.id)??"",name:q(e.name)??"",path:q(e.path)??"",description:q(e.description),isMonoSpecs:e.isMonoSpecs===!0,monoSpecsVersion:q(e.monoSpecsVersion),monoSpecsRepoDirectory:q(e.monoSpecsRepoDirectory),monoSpecsCommitWhenArchive:typeof e.monoSpecsCommitWhenArchive=="boolean"?e.monoSpecsCommitWhenArchive:void 0,hasError:"hasError"in e?e.hasError===!0:!1,error:"error"in e?q(e.error):void 0}}function be(e){return{projects:(e??[]).map(ne)}}function Ct(e){return e.length===0?`No projects found.
45
+ `:`Projects (${e.length})
46
+ ${ge([{header:"Project ID",value:o=>o.id},{header:"Name",value:o=>o.name},{header:"Path",value:o=>o.path},{header:"MonoSpecs",value:o=>o.isMonoSpecs?"yes":"no"},{header:"Error",value:o=>o.hasError?"yes":"no"}],e)}
47
+ `}function Ee(e,o=[]){return ee([["id",e.id],["name",e.name],["path",e.path],["description",e.description],["isMonoSpecs",String(e.isMonoSpecs)],["monoSpecsVersion",e.monoSpecsVersion],["monoSpecsRepoDirectory",e.monoSpecsRepoDirectory],["monoSpecsCommitWhenArchive",typeof e.monoSpecsCommitWhenArchive=="boolean"?String(e.monoSpecsCommitWhenArchive):void 0],["hasError",String(e.hasError)],["error",e.error],...o])}function At(e,o){P(e.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(a){const i=x(this,o),s=ne(await i.api.createProject({name:k(a.name,"--name"),path:k(a.path,"--path"),description:E(a.description)}));if(i.outputJson){i.io.stdout(T({project:s}));return}i.io.stdout(`Project created
48
+ ${Ee(s)}`)})}function yt(e,o){P(e.command("delete").description("Delete a project by id.")).requiredOption("--id <id>","Project id to delete.").action(async function(a){const i=x(this,o),s=a.id.trim();if(await i.api.deleteProject(s),i.outputJson){i.io.stdout(T({projectId:s,deleted:!0}));return}i.io.stdout(`Project deleted
49
+ projectId ${s}
50
+ `)})}function St(e,o){P(e.command("list").description("List projects from the aggregation endpoint.")).action(async function(){const a=x(this,o),i=be((await a.api.listProjects()).projects);if(a.outputJson){a.io.stdout(T(i));return}a.io.stdout(Ct(i.projects))})}function bt(e,o){P(e.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(a){if(!a.name&&!a.path&&!a.description&&!a.clearDescription)throw new D("Provide at least one field to update: --name, --path, --description, or --clear-description.");if(a.description&&a.clearDescription)throw new D("Use either --description or --clear-description, not both.");const i=x(this,o),s=a.id.trim(),n=be((await i.api.listProjects()).projects).projects.find(h=>h.id===s);if(!n)throw new ve(404,`Project ${s} was not found in the aggregation snapshot.`);const u=ne(await i.api.updateProject(s,{name:E(a.name)??n.name,path:E(a.path)??n.path,description:a.clearDescription?null:E(a.description)??n.description??null}));if(i.outputJson){i.io.stdout(T({project:u}));return}i.io.stdout(`Project updated
51
+ ${Ee(u)}`)})}function Et(e,o){const c=e.command("project").description("Manage Hagi projects through generated project and aggregation APIs.");St(c,o),At(c,o),bt(c,o),yt(c,o)}async function It(){const e=[];for await(const o of Ve.stdin)e.push(typeof o=="string"?Buffer.from(o):o);return Buffer.concat(e).toString("utf8")}async function wt(e){const o=e.trim();if(!o)throw new D("Provide --input <file> or --input - for stdin.");const c=o==="-"?await It():await(0,Re.readFile)(o,"utf8");try{return JSON.parse(c)}catch(a){throw new D(`Invalid JSON input from ${o}: ${a instanceof Error?a.message:String(a)}`)}}function Tt(e,o){if(!o||typeof o!="object"||Array.isArray(o))throw new D("Annotation input must be a JSON object.");const c=o;if(!Array.isArray(c.files))throw new D("Annotation input must include a files array.");const a=typeof c.totalAnnotations=="number"?c.totalAnnotations:c.files.length,i=typeof c.submittedAt=="string"&&c.submittedAt.trim()?c.submittedAt:new Date().toISOString();return{...c,sessionId:e,totalAnnotations:a,submittedAt:i,files:c.files}}function Pt(e,o){P(e.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(a){const i=x(this,o),s=a.sessionId.trim(),n=Tt(s,await wt(a.input)),u=await i.api.submitAnnotations(s,n);if(i.outputJson){i.io.stdout(T({sessionId:s,message:u.message,annotationCount:u.annotationCount??n.totalAnnotations,fileCount:u.fileCount??n.files.length}));return}i.io.stdout(`Proposal annotations submitted
52
+ sessionId ${s}
53
+ message ${u.message}
54
+ annotationCount ${u.annotationCount??n.totalAnnotations}
55
+ fileCount ${u.fileCount??n.files.length}
56
+ `)})}function xt(e,o){P(e.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(a){const i=x(this,o),s=G(await i.api.archiveProposal(a.sessionId.trim(),{heroId:E(a.heroId)}));if(i.outputJson){i.io.stdout(T({session:s}));return}i.io.stdout(`Proposal archive started
57
+ ${W(s)}`)})}function jt(e,o){P(e.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(a){const i=x(this,o),s=G(await i.api.completeProposal(a.sessionId.trim()));if(i.outputJson){i.io.stdout(T({session:s}));return}i.io.stdout(`Proposal completed
58
+ ${W(s)}`)})}function $t(e){return G(e)}function Ht(e){return Oe(e)}function Dt(e){return _e("Proposal sessions",e)}function Nt(e,o=[]){return W(e,o)}var Ie="New Proposal";function kt(e){const o=E(e.title);if(o)return o;if(e.defaultTitle)return Ie;throw new D("Provide --title or pass --default-title to use the placeholder proposal title.")}function Vt(e,o){P(e.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 (${Ie}).`).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(a){const i=x(this,o),s=kt(a),n=$t(await i.api.createProposalSession({title:s,chiefComplaint:a.chiefComplaint.trim(),originalChiefComplaint:E(a.originalChiefComplaint),type:re.PROPOSAL,projectId:a.projectId.trim(),enableIndependentWorkspace:a.enableIndependentWorkspace?!0:void 0,baseBranch:E(a.baseBranch),isDefaultTitle:!!a.defaultTitle})),u=`hagi proposal generate-name --session-id ${n.sessionId}`;if(i.outputJson){i.io.stdout(T({session:n,nextCommand:u}));return}i.io.stdout(`Proposal session created
59
+ ${Nt(n,[["next",u]])}`)})}function Rt(e,o){P(e.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(a){const i=x(this,o),s=a.sessionId.trim(),n=E(a.heroId),u=await i.api.executeProposal(s,{heroId:n});if(i.outputJson){i.io.stdout(T({sessionId:s,message:u.message,requested:{heroId:n}}));return}i.io.stdout(`Proposal execution started
60
+ sessionId ${s}
61
+ message ${u.message}
62
+ `)})}function qt(e){if(e.enableExploreMode&&e.disableExploreMode)throw new D("Use either --enable-explore-mode or --disable-explore-mode, not both.");if(e.enableExploreMode)return!0;if(e.disableExploreMode)return!1}function Ft(e,o){P(e.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(a){const i=x(this,o),s=a.sessionId.trim(),n=qt(a),u=await i.api.generateProposal(s,{enableExploreMode:n,heroId:E(a.heroId)}),h=`hagi proposal execute --session-id ${s}`;if(i.outputJson){i.io.stdout(T({sessionId:s,message:u.message,requested:{enableExploreMode:n,heroId:E(a.heroId)},nextCommand:h}));return}i.io.stdout(`Proposal generation started
63
+ sessionId ${s}
64
+ message ${u.message}
65
+ next Wait for the session to reach Reviewing, then run ${h}
66
+ `)})}function Gt(e,o){P(e.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(a){const i=x(this,o),s=await i.api.generateProposalName(a.sessionId.trim()),n=`hagi proposal generate --session-id ${a.sessionId.trim()}`;if(i.outputJson){i.io.stdout(T({sessionId:a.sessionId.trim(),proposalName:s.proposalName,nextCommand:n}));return}i.io.stdout(`Proposal name generated
67
+ sessionId ${a.sessionId.trim()}
68
+ proposalName ${s.proposalName}
69
+ next ${n}
70
+ `)})}function Lt(e,o){P(e.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(a){if(a.projectId&&a.projectIds?.length)throw new D("Use either --project-id or --project-ids, not both.");const i=x(this,o),s=Ht(await i.api.listSessions({type:re.PROPOSAL,projectId:E(a.projectId),projectIds:a.projectIds?.map(E).filter(Boolean),activeOnly:a.activeOnly?!0:void 0,includeArchived:a.includeArchived?!0:void 0}));if(i.outputJson){i.io.stdout(T(s));return}i.io.stdout(Dt(s.sessions))})}function Wt(e,o){P(e.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(a){const i=x(this,o),s=a.sessionId.trim(),n=await i.api.optimizeDescription(s,{description:k(a.description,"--description"),optimizationDirection:E(a.optimizationDirection),enableMemoryOptimization:a.disableMemoryOptimization?!1:void 0,isDefaultTitle:a.defaultTitle?!0:void 0});if(i.outputJson){i.io.stdout(T({sessionId:s,taskId:n.taskId,status:n.status}));return}i.io.stdout(`Proposal description optimization started
71
+ sessionId ${s}
72
+ taskId ${n.taskId??""}
73
+ status ${n.status??""}
74
+ `)})}function Ut(e,o){P(e.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 R("--mode <mode>","Message mode override.").choices(Object.values(oe))).addOption(new R("--executor-type <type>","Executor override for this message.").choices(Object.values(z))).action(async function(a){const i=x(this,o),s=a.sessionId.trim(),n=await i.api.sendMessage(s,{content:k(a.content,"--content"),mode:a.mode,executorType:a.executorType});if(i.outputJson){i.io.stdout(T({sessionId:s,message:n.message,requested:{mode:a.mode,executorType:a.executorType}}));return}i.io.stdout(te("Proposal message sent",s,n,[["mode",a.mode],["executorType",a.executorType]]))})}function Mt(e,o){P(e.command("status").description("Update proposal session status through read-before-write merging.")).requiredOption("--session-id <id>","Proposal session id.").addOption(new R("--status <status>","Target session status.").choices(Object.values(me)).makeOptionMandatory()).action(async function(a){const i=x(this,o),s=a.sessionId.trim(),n=await i.api.getSession(s);await i.api.updateSession(s,{title:n.title,description:n.description,status:a.status,metadata:n.metadata});const u=G({...n,status:a.status});if(i.outputJson){i.io.stdout(T({session:u}));return}i.io.stdout(`Proposal status updated
75
+ ${W(u)}`)})}function Bt(e,o){const c=e.command("proposal").description("Manage proposal sessions through backend session APIs.");Lt(c,o),Vt(c,o),Gt(c,o),Wt(c,o),Ft(c,o),Pt(c,o),Rt(c,o),xt(c,o),Mt(c,o),jt(c,o),Ut(c,o)}function Jt(e){return e.includes("--json")}function we(e=Se(),o=!1){const c=new Ue;return c.name("hagi").description("HagiCode CLI for project, proposal, chat, and AutoTask management.").showHelpAfterError().exitOverride(),c.configureOutput({writeOut:a=>{e.io.stdout(a)},writeErr:a=>{o||e.io.stderr(a)},getOutHelpWidth:()=>100,getErrHelpWidth:()=>100}),lt(c),Et(c,e),Bt(c,e),vt(c,e),ht(c,e),c}function zt(e,o,c){return e.exitCode===0||e.code==="commander.helpDisplayed"||e.code==="commander.version"?0:(c&&o.io.stderr(Ce({exitCode:H.USAGE,message:e.message},{json:!0})),H.USAGE)}async function Kt(e=process.argv,o=Se()){const c=Jt(e),a=we(o,c);try{return await a.parseAsync([...e]),0}catch(i){if(i instanceof We)return zt(i,o,c);const s=Ke(i);return o.io.stderr(Ce(s,{json:c})),s.exitCode}}Object.defineProperty(exports,"EXIT_CODES",{enumerable:!0,get:function(){return H}});Object.defineProperty(exports,"createCliApp",{enumerable:!0,get:function(){return we}});Object.defineProperty(exports,"runCli",{enumerable:!0,get:function(){return Kt}});
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-BXoLU5FX.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}
2
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./chunks/main-CUEYUrFk.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-BXoLU5FX.js");exports.createCliApp=e.createCliApp;exports.runCli=e.runCli;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/main-CUEYUrFk.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.3.1.074a0f9",
4
- "description": "HagiCode CLI for proposal session management.",
3
+ "version": "0.1.0-dev.5.1.b85b83a",
4
+ "description": "HagiCode CLI for project, proposal, 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}});