noskills 4.1.48 → 4.1.50
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 +98 -0
- package/chunks/{anthropic-UTLWCK66.js → anthropic-LDUWIUPL.js} +1 -1
- package/chunks/approve-LYDFDSXE.js +1 -0
- package/chunks/{ask-KPIHJIJZ.js → ask-IZXOXJHB.js} +1 -1
- package/chunks/block-4IUG6QYT.js +1 -0
- package/chunks/cancel-STVRTPSC.js +1 -0
- package/chunks/chunk-4N7N37OY.js +1 -0
- package/chunks/{chunk-4DHIEOZS.js → chunk-6OQNXZAN.js} +8 -8
- package/chunks/{chunk-PL7WF7NC.js → chunk-AQWB2PVR.js} +76 -76
- package/chunks/chunk-E7UED6DA.js +3 -0
- package/chunks/{chunk-XQJ6LR2O.js → chunk-ESTTTPON.js} +1 -1
- package/chunks/{chunk-U3JLX6DY.js → chunk-GOLHD4DZ.js} +1 -1
- package/chunks/chunk-IZMNMJYU.js +16 -0
- package/chunks/chunk-JKKCV4KM.js +3 -0
- package/chunks/chunk-JNVM2KAE.js +1 -0
- package/chunks/chunk-OCDUS26F.js +1 -0
- package/chunks/chunk-TI4CLT2V.js +2 -0
- package/chunks/chunk-WWPJMOT3.js +3 -0
- package/chunks/claude-code-F64HRHHR.js +1 -0
- package/chunks/{concern-BFL64SWF.js → concern-NQODAEHU.js} +1 -1
- package/chunks/config-EPT7NOOO.js +1 -0
- package/chunks/done-TLRZYAUZ.js +1 -0
- package/chunks/free-5HORD4VB.js +1 -0
- package/chunks/{init-4ULYNWEU.js → init-A3VTACZC.js} +1 -1
- package/chunks/invoke-hook-Y2YREMYB.js +11 -0
- package/chunks/kiro-XJ6XH4Q4.js +3 -0
- package/chunks/{list-FWRKOILC.js → list-SG2MZH7M.js} +1 -1
- package/chunks/manager-5AJ7QWMG.js +6 -0
- package/chunks/{mod-LORCBZWH.js → mod-AU5SVHO5.js} +1 -1
- package/chunks/next-GSQE7GYI.js +8 -0
- package/chunks/{ollama-VSBCL6RB.js → ollama-IVHLR7VV.js} +1 -1
- package/chunks/opencode-MTSBCZYY.js +1 -0
- package/chunks/{pack-QZSOS3EC.js → pack-KWRZVNBH.js} +1 -1
- package/chunks/{purge-AJ3FYIZU.js → purge-573OIQZI.js} +1 -1
- package/chunks/reopen-G7ZMJSB7.js +1 -0
- package/chunks/reset-WRG3L4QP.js +1 -0
- package/chunks/{rule-SSF5KGII.js → rule-HMBAP5LJ.js} +1 -1
- package/chunks/run-CC6MLCNO.js +3 -0
- package/chunks/{sdk-LHBUQS75.js → sdk-6IMATOQ3.js} +8 -8
- package/chunks/session-TYOM74BQ.js +1 -0
- package/chunks/spec-LVJCLNRO.js +1 -0
- package/chunks/status-YALP7W5Y.js +1 -0
- package/chunks/{sync-EDTFSXLO.js → sync-L7E5Y3OG.js} +1 -1
- package/chunks/{watch-HFPGREOU.js → watch-ELIW23EO.js} +6 -6
- package/chunks/wontfix-4L3IAWLG.js +1 -0
- package/noskills.js +1 -1
- package/package.json +1 -1
- package/chunks/approve-JDCG5RTO.js +0 -1
- package/chunks/block-WDK4VFDU.js +0 -1
- package/chunks/cancel-RNUAFYI2.js +0 -1
- package/chunks/chunk-JI5AH4G4.js +0 -3
- package/chunks/chunk-MRZT23BL.js +0 -1
- package/chunks/chunk-NRCHLNQA.js +0 -3
- package/chunks/chunk-ON7NJA2P.js +0 -3
- package/chunks/chunk-VHP7GMUP.js +0 -1
- package/chunks/chunk-WFOXOZWW.js +0 -16
- package/chunks/chunk-ZAOVTFWH.js +0 -1
- package/chunks/claude-code-R7PCCNRZ.js +0 -1
- package/chunks/done-ABJB7WCJ.js +0 -1
- package/chunks/free-K7J7X57R.js +0 -1
- package/chunks/invoke-hook-F5SNDW2N.js +0 -11
- package/chunks/kiro-3VFHKARM.js +0 -3
- package/chunks/manager-J5QJQK4T.js +0 -6
- package/chunks/next-KPZN56DW.js +0 -8
- package/chunks/opencode-YE3RKOY7.js +0 -1
- package/chunks/reopen-XQ6QSX33.js +0 -1
- package/chunks/reset-B7JO5N4M.js +0 -1
- package/chunks/run-NCUAJFRJ.js +0 -3
- package/chunks/session-TJJDZ3VF.js +0 -1
- package/chunks/spec-BYCG4S2R.js +0 -1
- package/chunks/status-FJCCVQQU.js +0 -1
- package/chunks/wontfix-342QFPKY.js +0 -1
package/README.md
CHANGED
|
@@ -119,6 +119,45 @@ Discovery questions -> you answer. Spec approval -> you decide. Architectural
|
|
|
119
119
|
choices -> you pick. Concern tensions -> you resolve. The agent executes, you
|
|
120
120
|
decide. Explicit > Clever.
|
|
121
121
|
|
|
122
|
+
### Discovery Modes
|
|
123
|
+
|
|
124
|
+
Before the six questions, noskills asks which discovery mode to use:
|
|
125
|
+
|
|
126
|
+
| Mode | Focus | Best for |
|
|
127
|
+
| --------------- | -------------------------------- | --------------------------------- |
|
|
128
|
+
| full | Standard 6 questions | New features (default) |
|
|
129
|
+
| validate | Challenge assumptions | Detailed plans, long descriptions |
|
|
130
|
+
| technical-depth | Architecture, data flow | Infrastructure, integration |
|
|
131
|
+
| ship-fast | Minimum viable scope | Bug fixes, quick iterations |
|
|
132
|
+
| explore | Think bigger, find opportunities | Brainstorming, scope expansion |
|
|
133
|
+
|
|
134
|
+
The mode shapes how questions are asked and which concern extras appear.
|
|
135
|
+
|
|
136
|
+
### Premise Challenge
|
|
137
|
+
|
|
138
|
+
Before Q1, noskills challenges the spec's premises:
|
|
139
|
+
|
|
140
|
+
- Is this the right problem to solve?
|
|
141
|
+
- What happens if we do nothing?
|
|
142
|
+
- What existing code already partially solves this?
|
|
143
|
+
|
|
144
|
+
Premises are stored in the spec. Disagreements are recorded with the user's
|
|
145
|
+
revision. All subsequent questions reference agreed premises.
|
|
146
|
+
|
|
147
|
+
### Alternatives Generation
|
|
148
|
+
|
|
149
|
+
After discovery is approved, noskills prompts for 2-3 implementation approaches
|
|
150
|
+
before generating the spec draft. The user picks one (or skips). The chosen
|
|
151
|
+
approach shapes the spec's tasks and architecture.
|
|
152
|
+
|
|
153
|
+
### Plans That Get Pre-Filled
|
|
154
|
+
|
|
155
|
+
When you provide a detailed description (>500 chars) or a plan file
|
|
156
|
+
(`--from-plan`), noskills tells the agent to extract answers from your input and
|
|
157
|
+
present them for confirmation — not ask from scratch. Each extraction is marked
|
|
158
|
+
as [STATED] (your words) or [INFERRED] (agent's interpretation) so you can catch
|
|
159
|
+
misunderstandings.
|
|
160
|
+
|
|
122
161
|
## Who Is This For
|
|
123
162
|
|
|
124
163
|
noskills is for builders who use AI coding agents daily and are tired of
|
|
@@ -154,6 +193,17 @@ noskills. The distinction is that noskills owns the workflow — who does what,
|
|
|
154
193
|
when, and whether the result was verified — while the others own the thinking or
|
|
155
194
|
the persona.
|
|
156
195
|
|
|
196
|
+
**noskills vs gstack in depth:** gstack is a collection of behavioral skills —
|
|
197
|
+
each skill is a 2000+ line prompt that tells the agent how to behave. Office
|
|
198
|
+
hours asks 6 questions (noskills: discovery). CEO review selects a scope mode
|
|
199
|
+
(noskills: discovery modes). Eng review checks architecture and tests (noskills:
|
|
200
|
+
verifier pipeline + mandatory ACs). The key difference: gstack skills are
|
|
201
|
+
behavioral instructions the agent may or may not follow. noskills pushes exactly
|
|
202
|
+
the right instruction at the right time via a state machine, and enforces
|
|
203
|
+
compliance via hooks. gstack's /office-hours produces a design doc. noskills'
|
|
204
|
+
discovery produces a spec with tasks, ACs, and a state machine that tracks
|
|
205
|
+
execution. Both are valuable — gstack for thinking, noskills for doing.
|
|
206
|
+
|
|
157
207
|
## The Mental Model
|
|
158
208
|
|
|
159
209
|
```
|
|
@@ -269,6 +319,54 @@ for human teams apply directly to AI agents — because the underlying problem i
|
|
|
269
319
|
the same: finite attention, drifting focus, and the need for structure to keep
|
|
270
320
|
work on track.
|
|
271
321
|
|
|
322
|
+
## Multi-User
|
|
323
|
+
|
|
324
|
+
noskills tracks who did what. Every discovery answer, phase transition, custom
|
|
325
|
+
AC, and note is attributed to the user who made it.
|
|
326
|
+
|
|
327
|
+
```bash
|
|
328
|
+
noskills config set-user --name="Eser Özvataf" --email="eser@example.com"
|
|
329
|
+
noskills config set-user --from-git # read from git config
|
|
330
|
+
noskills config get-user # show current identity
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Multiple people can contribute to the same spec:
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
# Eser creates the spec and answers discovery
|
|
337
|
+
noskills spec new upload "photo upload"
|
|
338
|
+
|
|
339
|
+
# Ahmet revisits and adds mobile concerns
|
|
340
|
+
noskills spec upload revisit "mobile concerns"
|
|
341
|
+
noskills spec upload ac add "Mobile upload < 3s on 4G"
|
|
342
|
+
noskills spec upload note add "Mobile users are 60% of traffic"
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
The spec tracks everything:
|
|
346
|
+
|
|
347
|
+
- Discovery answers with attribution (who said what)
|
|
348
|
+
- Phase transitions (who approved, who started execution)
|
|
349
|
+
- Custom ACs (who added which requirement)
|
|
350
|
+
- Notes (who provided which context)
|
|
351
|
+
|
|
352
|
+
No user configured? noskills still works — attribution shows "Unknown User". Set
|
|
353
|
+
identity anytime with `noskills config set-user`.
|
|
354
|
+
|
|
355
|
+
## Packs
|
|
356
|
+
|
|
357
|
+
Installable bundles of rules, concerns, and folder-rules:
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
noskills pack list # show available packs
|
|
361
|
+
noskills pack inspect typescript # preview without installing
|
|
362
|
+
noskills pack install typescript # install rules + concerns
|
|
363
|
+
noskills pack install security # security audit rules
|
|
364
|
+
noskills pack uninstall typescript # remove
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
Built-in packs: `typescript` (3 rules, 1 concern), `react` (3 rules), `security`
|
|
368
|
+
(3 rules, 1 concern). Remote packs via `github:owner/repo#name`.
|
|
369
|
+
|
|
272
370
|
## Getting Started
|
|
273
371
|
|
|
274
372
|
noskills supports multiple AI coding platforms. Pick yours:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as y,c as f}from"./chunk-5MN3MWQN.js";import{a as _,e as b}from"./chunk-OLM5RTFK.js";import"./chunk-OTRBRRIO.js";var h=class{capabilities=["text_generation","streaming","tool_calling","vision","batch_processing"];provider="anthropic";modelId;client;config;constructor(t,n){this.client=t,this.config=n,this.modelId=n.model}async generateText(t,n){let o=p(this.config,t);try{let a=await this.client.messages.create(o,{signal:n,timeout:this.config.requestTimeoutMs});return k(a,this.modelId)}catch(a){throw i(a)}}async*streamText(t,n){let o=p(this.config,t);try{let a=await this.client.messages.create({...o,stream:!0},{signal:n,timeout:this.config.requestTimeoutMs}),r=null,l=null,c="",d=0,u=0;for await(let s of a)if(s.type==="message_start")d=s.message?.usage?.input_tokens??0;else if(s.type==="content_block_start")s.content_block?.type==="tool_use"&&(r=s.content_block.id??null,l=s.content_block.name??null,c="");else if(s.type==="content_block_delta")s.delta?.type==="text_delta"?yield{kind:"content_delta",textDelta:s.delta.text}:s.delta?.type==="input_json_delta"&&(c+=s.delta.partial_json??"",yield{kind:"tool_call_delta",textDelta:s.delta.partial_json});else if(s.type==="content_block_stop"){if(r!==null&&l!==null){let m={};try{m=JSON.parse(c||"{}")}catch{}yield{kind:"tool_call_delta",toolCall:{id:r,name:l,arguments:m}},r=null,l=null,c=""}}else s.type==="message_delta"&&(u=s.usage?.output_tokens??u,yield{kind:"message_done",stopReason:x(s.delta?.stop_reason),usage:{inputTokens:d,outputTokens:u,totalTokens:d+u}})}catch(a){yield{kind:"error",error:i(a)}}}async submitBatch(t,n){let o=t.items.map(a=>({custom_id:a.customId,params:p(this.config,a.options)}));try{let a=await this.client.beta.messages.batches.create({requests:o},{signal:n});return g(a)}catch(a){throw i(a)}}async getBatchJob(t,n){try{let o=await this.client.beta.messages.batches.retrieve(t,{signal:n});return g(o)}catch(o){throw i(o)}}async listBatchJobs(t,n){try{let o=await this.client.beta.messages.batches.list({limit:t?.limit,after_id:t?.after},{signal:n}),a=[];for(let r of o.data??[])a.push(g(r));return a}catch(o){throw i(o)}}async downloadBatchResults(t,n){try{let o=await this.client.beta.messages.batches.results(t.id,{signal:n}),a=[];for await(let r of o)r.result?.type==="succeeded"?a.push({customId:r.custom_id,result:k(r.result.message,this.modelId)}):a.push({customId:r.custom_id,error:r.result?.error?.message??"Unknown error"});return a}catch(o){throw i(o)}}async cancelBatchJob(t,n){try{await this.client.beta.messages.batches.cancel(t,{signal:n})}catch(o){throw i(o)}}async close(){}getRawClient(){return this.client}},A={provider:"anthropic",async createModel(e){let{default:t}=await import("./sdk-
|
|
1
|
+
import{b as y,c as f}from"./chunk-5MN3MWQN.js";import{a as _,e as b}from"./chunk-OLM5RTFK.js";import"./chunk-OTRBRRIO.js";var h=class{capabilities=["text_generation","streaming","tool_calling","vision","batch_processing"];provider="anthropic";modelId;client;config;constructor(t,n){this.client=t,this.config=n,this.modelId=n.model}async generateText(t,n){let o=p(this.config,t);try{let a=await this.client.messages.create(o,{signal:n,timeout:this.config.requestTimeoutMs});return k(a,this.modelId)}catch(a){throw i(a)}}async*streamText(t,n){let o=p(this.config,t);try{let a=await this.client.messages.create({...o,stream:!0},{signal:n,timeout:this.config.requestTimeoutMs}),r=null,l=null,c="",d=0,u=0;for await(let s of a)if(s.type==="message_start")d=s.message?.usage?.input_tokens??0;else if(s.type==="content_block_start")s.content_block?.type==="tool_use"&&(r=s.content_block.id??null,l=s.content_block.name??null,c="");else if(s.type==="content_block_delta")s.delta?.type==="text_delta"?yield{kind:"content_delta",textDelta:s.delta.text}:s.delta?.type==="input_json_delta"&&(c+=s.delta.partial_json??"",yield{kind:"tool_call_delta",textDelta:s.delta.partial_json});else if(s.type==="content_block_stop"){if(r!==null&&l!==null){let m={};try{m=JSON.parse(c||"{}")}catch{}yield{kind:"tool_call_delta",toolCall:{id:r,name:l,arguments:m}},r=null,l=null,c=""}}else s.type==="message_delta"&&(u=s.usage?.output_tokens??u,yield{kind:"message_done",stopReason:x(s.delta?.stop_reason),usage:{inputTokens:d,outputTokens:u,totalTokens:d+u}})}catch(a){yield{kind:"error",error:i(a)}}}async submitBatch(t,n){let o=t.items.map(a=>({custom_id:a.customId,params:p(this.config,a.options)}));try{let a=await this.client.beta.messages.batches.create({requests:o},{signal:n});return g(a)}catch(a){throw i(a)}}async getBatchJob(t,n){try{let o=await this.client.beta.messages.batches.retrieve(t,{signal:n});return g(o)}catch(o){throw i(o)}}async listBatchJobs(t,n){try{let o=await this.client.beta.messages.batches.list({limit:t?.limit,after_id:t?.after},{signal:n}),a=[];for(let r of o.data??[])a.push(g(r));return a}catch(o){throw i(o)}}async downloadBatchResults(t,n){try{let o=await this.client.beta.messages.batches.results(t.id,{signal:n}),a=[];for await(let r of o)r.result?.type==="succeeded"?a.push({customId:r.custom_id,result:k(r.result.message,this.modelId)}):a.push({customId:r.custom_id,error:r.result?.error?.message??"Unknown error"});return a}catch(o){throw i(o)}}async cancelBatchJob(t,n){try{await this.client.beta.messages.batches.cancel(t,{signal:n})}catch(o){throw i(o)}}async close(){}getRawClient(){return this.client}},A={provider:"anthropic",async createModel(e){let{default:t}=await import("./sdk-6IMATOQ3.js"),n={};e.apiKey!==void 0&&(n.apiKey=e.apiKey),e.baseUrl!==void 0&&(n.baseURL=e.baseUrl);let o=new t(n);return new h(o,e)}},p=(e,t)=>{let n={model:e.model,max_tokens:t.maxTokens??e.maxTokens,messages:R(t.messages)};return t.system!==void 0&&(n.system=t.system),t.temperature!==void 0&&(n.temperature=t.temperature),t.topP!==void 0&&(n.top_p=t.topP),t.stopWords!==void 0&&(n.stop_sequences=t.stopWords),t.tools!==void 0&&(n.tools=t.tools.map(o=>({name:o.name,description:o.description,input_schema:o.parameters??{type:"object",properties:{}}}))),t.toolChoice!==void 0&&(n.tool_choice={type:t.toolChoice}),t.thinkingBudget!==void 0&&(n.thinking={type:"enabled",budget_tokens:t.thinkingBudget}),n},R=e=>{let t=[];for(let n of e){if(n.role==="system")continue;let o=n.content.map(C);t.push({role:n.role==="tool"?"user":n.role,content:o})}return t},C=e=>{switch(e.kind){case"text":return{type:"text",text:e.text};case"image":{if(e.image.data!==void 0)return{type:"image",source:{type:"base64",media_type:e.image.mimeType??"image/png",data:w(e.image.data)}};if(e.image.url!==void 0){if(y(e.image.url)){let t=f(e.image.url);if(t!==null)return{type:"image",source:{type:"base64",media_type:t.mimeType,data:w(t.data)}}}return{type:"image",source:{type:"url",url:e.image.url}}}return{type:"text",text:"[unsupported image]"}}case"tool_call":return{type:"tool_use",id:e.toolCall.id,name:e.toolCall.name,input:e.toolCall.arguments};case"tool_result":return{type:"tool_result",tool_use_id:e.toolResult.toolCallId,content:e.toolResult.content,is_error:e.toolResult.isError};default:return{type:"text",text:`[unsupported content: ${e.kind}]`}}},k=(e,t)=>{let n=[];for(let o of e.content??[])o.type==="text"?n.push({kind:"text",text:o.text}):o.type==="thinking"?n.push({kind:"text",text:`[thinking] ${o.thinking}`}):o.type==="tool_use"&&n.push({kind:"tool_call",toolCall:{id:o.id,name:o.name,arguments:o.input??{}}});return{content:n,stopReason:x(e.stop_reason),usage:{inputTokens:e.usage?.input_tokens??0,outputTokens:e.usage?.output_tokens??0,totalTokens:(e.usage?.input_tokens??0)+(e.usage?.output_tokens??0)},modelId:t,rawResponse:e}},x=e=>e==="end_turn"?"end_turn":e==="max_tokens"?"max_tokens":e==="tool_use"?"tool_use":e==="stop_sequence"?"stop":"end_turn",g=e=>({id:e.id,status:B(e.processing_status),createdAt:new Date(e.created_at),completedAt:e.ended_at!==void 0?new Date(e.ended_at):void 0,totalCount:e.request_counts?.total??0,doneCount:e.request_counts?.succeeded??0,failedCount:e.request_counts?.errored??0}),B=e=>e==="in_progress"?"processing":e==="ended"?"completed":e==="canceling"||e==="canceled"?"cancelled":"pending",i=e=>{if(e instanceof _)return e;let t=e instanceof Error?e:new Error(String(e)),n=e?.status??e?.statusCode??500;return b("anthropic",n,t)},w=e=>{let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)};export{h as AnthropicModel,A as anthropicFactory};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as T}from"./chunk-WWPJMOT3.js";import"./chunk-RTD42HPS.js";import{a as V,d as k}from"./chunk-ESTTTPON.js";import{h}from"./chunk-TI4CLT2V.js";import{c as o}from"./chunk-2X2U2VC5.js";import{i as _,l as F,s as S}from"./chunk-JNVM2KAE.js";import{d as g,f as E,h as D,i as u,j as f,l as P,p as A}from"./chunk-AQWB2PVR.js";import{c as p,d,f as n,g as m,k as w,o as y,q as C,r as R}from"./chunk-K223KAUB.js";import{a as v,b as i}from"./chunk-2N4GTHXQ.js";import{b as l}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var J=async x=>{let s=y({renderer:R.ansi(),sink:C.stdout()}),r=l.process.cwd(),c=D(x);if(!c.ok)return s.writeln(n(c.error)),await s.close(),i({exitCode:1});let t;try{t=await E(r,c.spec)}catch(a){let e=a instanceof Error?a.message:String(a);return s.writeln(n(e)),await s.close(),i({exitCode:1})}let I=await P(r);if(t.spec!==null){let a=`${r}/${g.specDir(t.spec)}`;try{await l.fs.stat(a)}catch{return s.writeln(n(`Active spec '${t.spec}' directory not found.`)),s.writeln(d("Run `noskills reset` to return to idle.")),await s.close(),i({exitCode:1})}}if(t.phase==="SPEC_DRAFT"){if(t.classification===null&&t.spec!==null){let O=(await A(r)).filter(U=>I?.concerns.includes(U.id)??!1);try{await T(r,t,O)}catch{}}let a=await h(r),e=F(t);e=S(e,"SPEC_DRAFT","SPEC_APPROVED",a),await u(r,e),e.spec!==null&&await f(r,e.spec,e),e.spec!==null&&(await V(r,e.spec,"approved"),await k(r,e.spec,"approved")),s.writeln(m("\u2714")," Spec approved. Phase: ",w("SPEC_APPROVED")),s.writeln("When ready, run ",p(`${o('next --answer="start"')}`)," to begin execution.")}else if(t.phase==="DISCOVERY_REVIEW"){let a=await h(r),e=_(t);e=S(e,"DISCOVERY_REVIEW","SPEC_DRAFT",a),await u(r,e),e.spec!==null&&await f(r,e.spec,e),s.writeln(m("\u2714")," Discovery answers approved. Phase: ",w("SPEC_DRAFT")),s.writeln("Review the spec and run ",p(o("approve"))," again to approve.")}else t.phase==="DISCOVERY"&&t.discovery.completed?(s.writeln(d("Discovery complete. Spec draft already generated.")),s.writeln("Review the spec and run ",p(o("approve"))," again when in SPEC_DRAFT phase.")):s.writeln(n(`Cannot approve in phase: ${t.phase}`));return await s.close(),v(void 0)};export{J as main};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as Ee,b as Ie}from"./chunk-AGPCY6XP.js";import{a as te,b as C,c as M,d as G,f as L,g as Ae,h as be,j as ke,k as re,l as Pe,o as ne,p as Re,q as oe,r as _e}from"./chunk-K223KAUB.js";import{a as Fe}from"./chunk-5MN3MWQN.js";import"./chunk-OLM5RTFK.js";import{a as Le,b as D}from"./chunk-2N4GTHXQ.js";import{d as ie}from"./chunk-ON7NJA2P.js";import{b as T}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import{d as ee}from"./chunk-OTRBRRIO.js";var Ne=e=>({rawMessage:e.rawMessage??e.message,args:e.args??[],datetime:e.datetime??new Date,properties:e.properties??{},context:e.context??{},...e});var d=e=>typeof e=="string"?e.split(".").filter(Boolean):e,V=(e,t=".")=>e.join(t),w=e=>e.join("\0");var Oe=(e,t)=>e.length<t.length?!1:t.every((r,n)=>e[n]===r);var De=(e,t)=>{let r=[];for(let n of t.values()){let i=d(n.category);Oe(e,i)&&r.push(n)}return r.sort((n,i)=>{let o=d(n.category).length;return d(i.category).length-o}),r};var j=(e,t)=>{let r=typeof t=="string"?[t]:t;return[...e,...r]};var K={};ee(K,{configure:()=>Tt,configureSync:()=>Ct,getEffectiveConfig:()=>ue,getFilterNames:()=>Rt,getLoggerCategories:()=>_t,getRegistryState:()=>St,getSinkNames:()=>Pt,isConfigured:()=>ht,registerFilter:()=>At,registerLogger:()=>kt,registerLoggerCacheClear:()=>le,registerSink:()=>wt,reset:()=>ze,resetSync:()=>Ke,unregisterFilter:()=>bt,unregisterSink:()=>Lt});var g={Trace:1,Debug:5,Info:9,Notice:10,Warning:13,Error:17,Critical:21,Alert:22,Emergency:23},Me={[g.Trace]:"Trace",[g.Debug]:"Debug",[g.Info]:"Info",[g.Notice]:"Notice",[g.Warning]:"Warning",[g.Error]:"Error",[g.Critical]:"Critical",[g.Alert]:"Alert",[g.Emergency]:"Emergency"};var $,z,pt=()=>{if($===void 0)try{let e=globalThis.AsyncLocalStorage??globalThis.require?.("async_hooks")?.AsyncLocalStorage;e&&($=new e)}catch{}return $},mt=()=>{if(z===void 0)try{let e=globalThis.AsyncLocalStorage??globalThis.require?.("async_hooks")?.AsyncLocalStorage;e&&(z=new e)}catch{}return z},Ge,Ve,R=e=>{Ge=e},se=e=>{Ve=e},ge=()=>{$=void 0,z=void 0},dt=()=>Ge??pt(),yt=()=>Ve??mt();var je=()=>{let e=dt();return e?e.getStore()??{}:{}};var xt=()=>{let e=yt();return e?e.getStore()??[]:[]},$e=e=>{let t=xt();return t.length===0?e:j(t,e)};var ce=null,le=e=>{ce=e},u=null,y=new Map,St=()=>u,ht=()=>u!==null,Tt=async e=>{(e.reset||u===null)&&await ze(),u={sinks:new Map(Object.entries(e.sinks)),filters:new Map(Object.entries(e.filters??{})),loggers:new Map,contextLocalStorage:e.contextLocalStorage};for(let t of e.loggers){let r=d(t.category),n=w(r);u.loggers.set(n,{...t,category:r})}e.contextLocalStorage&&R(e.contextLocalStorage),y.clear()},Ct=e=>{(e.reset||u===null)&&Ke(),u={sinks:new Map(Object.entries(e.sinks)),filters:new Map(Object.entries(e.filters??{})),loggers:new Map,contextLocalStorage:e.contextLocalStorage};for(let t of e.loggers){let r=d(t.category),n=w(r);u.loggers.set(n,{...t,category:r})}e.contextLocalStorage&&R(e.contextLocalStorage),y.clear()},ze=async()=>{if(u)for(let e of u.sinks.values()){let t=e;typeof t.dispose=="function"?await t.dispose():typeof t[Symbol.asyncDispose]=="function"&&await t[Symbol.asyncDispose]()}u=null,y.clear(),ce?.(),R(void 0),se(void 0),ge()},Ke=()=>{if(u)for(let e of u.sinks.values()){let t=e;typeof t.disposeSync=="function"?t.disposeSync():typeof t[Symbol.dispose]=="function"&&t[Symbol.dispose]()}u=null,y.clear(),ce?.(),R(void 0),se(void 0),ge()},ue=e=>{let t=w(e),r=y.get(t);if(r)return r;let n={sinks:[],filters:[],lowestLevel:g.Info};if(!u)return n;let i=De(e,u.loggers),o=new Set,a=new Set,l=!1;for(let s of i){if(s.sinks&&s.sinks.length>0){s.parentSinks==="override"&&o.clear();for(let c of s.sinks)o.add(c)}if(s.filters)for(let c of s.filters)a.add(c);!l&&s.lowestLevel!==void 0&&(n.lowestLevel=s.lowestLevel,l=!0)}for(let s of o){let c=u.sinks.get(s);c&&n.sinks.push(c)}for(let s of a){let c=u.filters.get(s);c&&n.filters.push(c)}return y.set(t,n),n},wt=(e,t)=>{if(!u)throw new Error("Logging not configured. Call configure() first.");u.sinks.set(e,t),y.clear()},Lt=e=>{u&&(u.sinks.delete(e),y.clear())},At=(e,t)=>{if(!u)throw new Error("Logging not configured. Call configure() first.");u.filters.set(e,t),y.clear()},bt=e=>{u&&(u.filters.delete(e),y.clear())},kt=e=>{if(!u)throw new Error("Logging not configured. Call configure() first.");let t=d(e.category),r=w(t);u.loggers.set(r,{...e,category:t}),y.clear()},Pt=()=>u?Array.from(u.sinks.keys()):[],Rt=()=>u?Array.from(u.filters.keys()):[],_t=()=>u?Array.from(u.loggers.values()).map(e=>d(e.category)):[];var W={};ee(W,{DEFAULT_LEVEL:()=>Ft,Logger:()=>_,clearLoggerCache:()=>We,current:()=>It,getLogger:()=>Et});var Ft=g.Info,_=class e{category;parent;#e;#t=null;constructor(t,r=null,n={}){this.category=d(t),this.parent=r,this.#e=n}#r(){return this.#t===null&&(this.#t=ue(this.category)),this.#t}getChild(t){let r=j(this.category,d(t));return new e(r,this,this.#e)}with(t){return new e(this.category,this.parent,{...this.#e,...t})}get loggerName(){return V(this.category)}asString(t,r=!1){return typeof t=="string"?r?`"${t}"`:t:t===null||typeof t=="number"||typeof t=="bigint"||typeof t=="boolean"||typeof t>"u"||typeof t=="symbol"?String(t):t instanceof Error?t.stack:t!==null&&typeof t=="object"?Array.isArray(t)?JSON.stringify(t):`{${Object.entries(t).map(([n,i])=>`"${n}":${this.asString(i,!0)}`).join(",")}}`:"undefined"}async log(t,r,...n){let i=this.#r();if(t<i.lowestLevel)return r instanceof Function?void 0:r;let o,a;r instanceof Function?(o=r(),a=this.asString(o)):a=this.asString(r);let l=je(),s=Ne({message:a,rawMessage:a,args:n,datetime:new Date,severity:t,category:this.category,properties:this.#e,context:l});for(let c of i.filters)if(!c(s))return r instanceof Function?o:r;return i.sinks.length>0&&await Promise.all(i.sinks.map(c=>c(s))),r instanceof Function?o:r}debug(t,...r){return this.log(g.Debug,t,...r)}info(t,...r){return this.log(g.Info,t,...r)}warn(t,...r){return this.log(g.Warning,t,...r)}error(t,...r){return this.log(g.Error,t,...r)}critical(t,...r){return this.log(g.Critical,t,...r)}emergency(t,...r){return this.log(g.Emergency,t,...r)}alert(t,...r){return this.log(g.Alert,t,...r)}notice(t,...r){return this.log(g.Notice,t,...r)}trace(t,...r){return this.log(g.Trace,t,...r)}},fe=new Map,Et=e=>{let t=$e(d(e)),r=w(t),n=fe.get(r);return n||(n=new _(t),fe.set(r,n)),n},We=()=>{fe.clear()};le(We);var It=new _(["default"]);var B={};ee(B,{fingersCrossedSink:()=>Kt,getBufferedSink:()=>zt,getOutputSink:()=>jt,getRecordCollectorSink:()=>Ue,getTestSink:()=>Wt,withFilter:()=>$t});var Nt={[g.Trace]:"TRCE",[g.Debug]:"DBUG",[g.Info]:"INFO",[g.Notice]:"NOTC",[g.Warning]:"WARN",[g.Error]:"ERRO",[g.Critical]:"CRIT",[g.Alert]:"ALRT",[g.Emergency]:"EMRG"};var Ot=(e,t)=>{if(t==="none")return"";if(typeof t=="function")return t(e);let r=e.toISOString(),n=r.slice(0,10),i=r.slice(11,19),o=r.slice(19);switch(t){case"rfc3339":return r;case"date-time-timezone":case void 0:return`${n} ${i}${o}`;case"date-time":return`${n} ${i}`;case"time-timezone":return`${i}${o}`;case"time":return i;case"date":return n}},Dt=e=>{try{return JSON.stringify(e)}catch{return String(e)}},Mt=(e,t)=>{let r={...t,...e},n=Object.entries(r);return n.length===0?"":" "+n.map(([i,o])=>{let a=typeof o=="string"?o:Dt(o);return`${i}=${a}`}).join(" ")};var Gt=(e,t)=>{switch(e){case g.Trace:return G(ke(t));case g.Debug:return Pe(t);case g.Info:return Ae(t);case g.Notice:return re(t);case g.Warning:return be(t);case g.Error:return L(t);case g.Critical:return M(L(t));case g.Alert:return M(L(t));case g.Emergency:return M(L(t));default:return C(t)}},Be=e=>{let t=Ot(e.datetime,"date-time-timezone"),r=Nt[e.severity]??"????",n=e.category.length>0?V(e.category):"",i=Mt(e.properties,e.context),o=[];return t&&o.push(G(t),C(" ")),o.push(Gt(e.severity,r),C(" ")),n&&o.push(re(`[${n}]`),C(" ")),e.severity>=g.Error?o.push(L(e.message)):o.push(C(e.message)),i.trim()&&o.push(C(" "),G(i.trim())),o};var jt=(e,t)=>{let r=t?.formatter??Be;return n=>{let i=r(n);e.writeln(...i)}},$t=(e,t)=>r=>{if(t(r))return e(r)},zt=(e,t={})=>{let{maxSize:r=100,flushIntervalMs:n=5e3}=t,i=[],o=null,a=async()=>{if(i.length===0)return;let c=i;i=[],o&&(clearTimeout(o),o=null),await Promise.all(c.map(p=>e(p)))},l=()=>{o===null&&(o=setTimeout(()=>{o=null,a().catch(()=>{})},n))},s=async c=>{i.push(c),i.length>=r?await a():l()};return s.flush=a,s},Kt=(e,t={})=>{let{triggerLevel:r=17,maxBufferSize:n=1e3}=t,i=[],o=!1,a=async()=>{let c=i;i=[],o=!0,await Promise.all(c.map(p=>e(p)))},l=()=>{i=[],o=!1},s=async c=>{if(o){await e(c);return}if(c.severity>=r){i.push(c),await a();return}i.push(c),i.length>n&&i.shift()};return s.flush=a,s.clear=l,s},Ue=()=>{let e=[];return{sink:r=>{e.push(r)},records:e}},Wt=Ue;var Ye=typeof globalThis=="object"?globalThis:global;var v="1.9.0";var Xe=/^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;function Ut(e){var t=new Set([e]),r=new Set,n=e.match(Xe);if(!n)return function(){return!1};var i={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(i.prerelease!=null)return function(s){return s===e};function o(l){return r.add(l),!1}function a(l){return t.add(l),!0}return function(s){if(t.has(s))return!0;if(r.has(s))return!1;var c=s.match(Xe);if(!c)return o(s);var p={major:+c[1],minor:+c[2],patch:+c[3],prerelease:c[4]};return p.prerelease!=null||i.major!==p.major?o(s):i.major===0?i.minor===p.minor&&i.patch<=p.patch?a(s):o(s):i.minor<=p.minor?a(s):o(s)}}var qe=Ut(v);var Yt=v.split(".")[0],F=Symbol.for("opentelemetry.js.api."+Yt),E=Ye;function A(e,t,r,n){var i;n===void 0&&(n=!1);var o=E[F]=(i=E[F])!==null&&i!==void 0?i:{version:v};if(!n&&o[e]){var a=new Error("@opentelemetry/api: Attempted duplicate registration of API: "+e);return r.error(a.stack||a.message),!1}if(o.version!==v){var a=new Error("@opentelemetry/api: Registration of version v"+o.version+" for "+e+" does not match previously registered API v"+v);return r.error(a.stack||a.message),!1}return o[e]=t,r.debug("@opentelemetry/api: Registered a global for "+e+" v"+v+"."),!0}function S(e){var t,r,n=(t=E[F])===null||t===void 0?void 0:t.version;if(!(!n||!qe(n)))return(r=E[F])===null||r===void 0?void 0:r[e]}function b(e,t){t.debug("@opentelemetry/api: Unregistering a global for "+e+" v"+v+".");var r=E[F];r&&delete r[e]}var Xt=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){a={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return o},qt=function(e,t,r){if(r||arguments.length===2)for(var n=0,i=t.length,o;n<i;n++)(o||!(n in t))&&(o||(o=Array.prototype.slice.call(t,0,n)),o[n]=t[n]);return e.concat(o||Array.prototype.slice.call(t))},He=function(){function e(t){this._namespace=t.namespace||"DiagComponentLogger"}return e.prototype.debug=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return I("debug",this._namespace,t)},e.prototype.error=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return I("error",this._namespace,t)},e.prototype.info=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return I("info",this._namespace,t)},e.prototype.warn=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return I("warn",this._namespace,t)},e.prototype.verbose=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return I("verbose",this._namespace,t)},e}();function I(e,t,r){var n=S("diag");if(n)return r.unshift(t),n[e].apply(n,qt([],Xt(r),!1))}var m;(function(e){e[e.NONE=0]="NONE",e[e.ERROR=30]="ERROR",e[e.WARN=50]="WARN",e[e.INFO=60]="INFO",e[e.DEBUG=70]="DEBUG",e[e.VERBOSE=80]="VERBOSE",e[e.ALL=9999]="ALL"})(m||(m={}));function Je(e,t){e<m.NONE?e=m.NONE:e>m.ALL&&(e=m.ALL),t=t||{};function r(n,i){var o=t[n];return typeof o=="function"&&e>=i?o.bind(t):function(){}}return{error:r("error",m.ERROR),warn:r("warn",m.WARN),info:r("info",m.INFO),debug:r("debug",m.DEBUG),verbose:r("verbose",m.VERBOSE)}}var Ht=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){a={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return o},Jt=function(e,t,r){if(r||arguments.length===2)for(var n=0,i=t.length,o;n<i;n++)(o||!(n in t))&&(o||(o=Array.prototype.slice.call(t,0,n)),o[n]=t[n]);return e.concat(o||Array.prototype.slice.call(t))},Qt="diag",k=function(){function e(){function t(i){return function(){for(var o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var l=S("diag");if(l)return l[i].apply(l,Jt([],Ht(o),!1))}}var r=this,n=function(i,o){var a,l,s;if(o===void 0&&(o={logLevel:m.INFO}),i===r){var c=new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");return r.error((a=c.stack)!==null&&a!==void 0?a:c.message),!1}typeof o=="number"&&(o={logLevel:o});var p=S("diag"),f=Je((l=o.logLevel)!==null&&l!==void 0?l:m.INFO,i);if(p&&!o.suppressOverrideMessage){var x=(s=new Error().stack)!==null&&s!==void 0?s:"<failed to generate stacktrace>";p.warn("Current logger will be overwritten from "+x),f.warn("Current logger will overwrite one already registered from "+x)}return A("diag",f,r,!0)};r.setLogger=n,r.disable=function(){b(Qt,r)},r.createComponentLogger=function(i){return new He(i)},r.verbose=t("verbose"),r.debug=t("debug"),r.info=t("info"),r.warn=t("warn"),r.error=t("error")}return e.instance=function(){return this._instance||(this._instance=new e),this._instance},e}();function Qe(e){return Symbol.for(e)}var Zt=function(){function e(t){var r=this;r._currentContext=t?new Map(t):new Map,r.getValue=function(n){return r._currentContext.get(n)},r.setValue=function(n,i){var o=new e(r._currentContext);return o._currentContext.set(n,i),o},r.deleteValue=function(n){var i=new e(r._currentContext);return i._currentContext.delete(n),i}}return e}(),Ze=new Zt;var er=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){a={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return o},tr=function(e,t,r){if(r||arguments.length===2)for(var n=0,i=t.length,o;n<i;n++)(o||!(n in t))&&(o||(o=Array.prototype.slice.call(t,0,n)),o[n]=t[n]);return e.concat(o||Array.prototype.slice.call(t))},et=function(){function e(){}return e.prototype.active=function(){return Ze},e.prototype.with=function(t,r,n){for(var i=[],o=3;o<arguments.length;o++)i[o-3]=arguments[o];return r.call.apply(r,tr([n],er(i),!1))},e.prototype.bind=function(t,r){return r},e.prototype.enable=function(){return this},e.prototype.disable=function(){return this},e}();var rr=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){a={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return o},nr=function(e,t,r){if(r||arguments.length===2)for(var n=0,i=t.length,o;n<i;n++)(o||!(n in t))&&(o||(o=Array.prototype.slice.call(t,0,n)),o[n]=t[n]);return e.concat(o||Array.prototype.slice.call(t))},pe="context",or=new et,U=function(){function e(){}return e.getInstance=function(){return this._instance||(this._instance=new e),this._instance},e.prototype.setGlobalContextManager=function(t){return A(pe,t,k.instance())},e.prototype.active=function(){return this._getContextManager().active()},e.prototype.with=function(t,r,n){for(var i,o=[],a=3;a<arguments.length;a++)o[a-3]=arguments[a];return(i=this._getContextManager()).with.apply(i,nr([t,r,n],rr(o),!1))},e.prototype.bind=function(t,r){return this._getContextManager().bind(t,r)},e.prototype._getContextManager=function(){return S(pe)||or},e.prototype.disable=function(){this._getContextManager().disable(),b(pe,k.instance())},e}();var Y;(function(e){e[e.NONE=0]="NONE",e[e.SAMPLED=1]="SAMPLED"})(Y||(Y={}));var me="0000000000000000",de="00000000000000000000000000000000",tt={traceId:de,spanId:me,traceFlags:Y.NONE};var h=function(){function e(t){t===void 0&&(t=tt),this._spanContext=t}return e.prototype.spanContext=function(){return this._spanContext},e.prototype.setAttribute=function(t,r){return this},e.prototype.setAttributes=function(t){return this},e.prototype.addEvent=function(t,r){return this},e.prototype.addLink=function(t){return this},e.prototype.addLinks=function(t){return this},e.prototype.setStatus=function(t){return this},e.prototype.updateName=function(t){return this},e.prototype.end=function(t){},e.prototype.isRecording=function(){return!1},e.prototype.recordException=function(t,r){},e}();var ye=Qe("OpenTelemetry Context Key SPAN");function X(e){return e.getValue(ye)||void 0}function rt(){return X(U.getInstance().active())}function N(e,t){return e.setValue(ye,t)}function nt(e){return e.deleteValue(ye)}function ot(e,t){return N(e,new h(t))}function q(e){var t;return(t=X(e))===null||t===void 0?void 0:t.spanContext()}var ir=/^([0-9a-f]{32})$/i,ar=/^[0-9a-f]{16}$/i;function sr(e){return ir.test(e)&&e!==de}function gr(e){return ar.test(e)&&e!==me}function H(e){return sr(e.traceId)&&gr(e.spanId)}function it(e){return new h(e)}var xe=U.getInstance(),J=function(){function e(){}return e.prototype.startSpan=function(t,r,n){n===void 0&&(n=xe.active());var i=!!r?.root;if(i)return new h;var o=n&&q(n);return cr(o)&&H(o)?new h(o):new h},e.prototype.startActiveSpan=function(t,r,n,i){var o,a,l;if(!(arguments.length<2)){arguments.length===2?l=r:arguments.length===3?(o=r,l=n):(o=r,a=n,l=i);var s=a??xe.active(),c=this.startSpan(t,o,s),p=N(s,c);return xe.with(p,l,void 0,c)}},e}();function cr(e){return typeof e=="object"&&typeof e.spanId=="string"&&typeof e.traceId=="string"&&typeof e.traceFlags=="number"}var lr=new J,at=function(){function e(t,r,n,i){this._provider=t,this.name=r,this.version=n,this.options=i}return e.prototype.startSpan=function(t,r,n){return this._getTracer().startSpan(t,r,n)},e.prototype.startActiveSpan=function(t,r,n,i){var o=this._getTracer();return Reflect.apply(o.startActiveSpan,o,arguments)},e.prototype._getTracer=function(){if(this._delegate)return this._delegate;var t=this._provider.getDelegateTracer(this.name,this.version,this.options);return t?(this._delegate=t,this._delegate):lr},e}();var st=function(){function e(){}return e.prototype.getTracer=function(t,r,n){return new J},e}();var ur=new st,ve=function(){function e(){}return e.prototype.getTracer=function(t,r,n){var i;return(i=this.getDelegateTracer(t,r,n))!==null&&i!==void 0?i:new at(this,t,r,n)},e.prototype.getDelegate=function(){var t;return(t=this._delegate)!==null&&t!==void 0?t:ur},e.prototype.setDelegate=function(t){this._delegate=t},e.prototype.getDelegateTracer=function(t,r,n){var i;return(i=this._delegate)===null||i===void 0?void 0:i.getTracer(t,r,n)},e}();var Se="trace",gt=function(){function e(){this._proxyTracerProvider=new ve,this.wrapSpanContext=it,this.isSpanContextValid=H,this.deleteSpan=nt,this.getSpan=X,this.getActiveSpan=rt,this.getSpanContext=q,this.setSpan=N,this.setSpanContext=ot}return e.getInstance=function(){return this._instance||(this._instance=new e),this._instance},e.prototype.setGlobalTracerProvider=function(t){var r=A(Se,this._proxyTracerProvider,k.instance());return r&&this._proxyTracerProvider.setDelegate(t),r},e.prototype.getTracerProvider=function(){return S(Se)||this._proxyTracerProvider},e.prototype.getTracer=function(t,r){return this.getTracerProvider().getTracer(t,r)},e.prototype.disable=function(){b(Se,k.instance()),this._proxyTracerProvider=new ve},e}();var he=gt.getInstance();var Yn=he.getTracer("@eser/logging");var Te=(e,t,r)=>{let n=e.streamText(t,r);return{name:`ai-text/${e.provider}/${e.modelId}`,readable:new ReadableStream({async start(i){try{for await(let o of n)o.kind==="content_delta"&&i.enqueue(te(o.textDelta));i.close()}catch(o){i.error(o)}}})}};var dr={cc:"claude-code",ol:"ollama",oc:"opencode",oai:"openai",ant:"anthropic",gem:"gemini",vtx:"vertexai"},yr={"claude-code":"Claude Code",ollama:"Ollama",opencode:"OpenCode",kiro:"Kiro",anthropic:"Anthropic API",openai:"OpenAI API",gemini:"Gemini API",vertexai:"Vertex AI"},xr=e=>dr[e]??e,vr=async e=>{if(e){let t=T.process.stderr.getWriter(),r=ne({renderer:_e.ansi(),sink:oe.writable(new WritableStream({async write(n){await t.write(new TextEncoder().encode(String(n.data)))},close(){t.releaseLock()}}))});await K.configure({sinks:{stderr:B.getOutputSink(r)},loggers:[{category:["ai"],lowestLevel:g.Debug,sinks:["stderr"]}]})}return W.getLogger(["ai","ask"])},Sr=async e=>{await e.info("Auto-detecting AI provider...");try{if(await ie`which claude`.noThrow().code()===0)return await e.info("Claude Code detected."),"claude-code"}catch{}try{if((await fetch("http://localhost:11434/api/version",{signal:AbortSignal.timeout(1e3)})).ok)return await e.info("Ollama detected at localhost:11434."),"ollama"}catch{}try{if(await ie`which opencode`.noThrow().code()===0)return await e.info("OpenCode detected."),"opencode"}catch{}if(T.capabilities.env){if(T.env.has("ANTHROPIC_API_KEY"))return await e.info("Anthropic API key detected."),"anthropic";if(T.env.has("OPENAI_API_KEY"))return await e.info("OpenAI API key detected."),"openai"}throw new Error("No AI provider detected. Install claude, ollama, or set ANTHROPIC_API_KEY / OPENAI_API_KEY.")},hr=async e=>{switch(e){case"claude-code":return(await import("./claude-code-R7PCCNRZ.js")).claudeCodeFactory;case"ollama":return(await import("./ollama-VSBCL6RB.js")).ollamaFactory;case"opencode":return(await import("./opencode-YE3RKOY7.js")).openCodeFactory;case"kiro":return(await import("./kiro-3VFHKARM.js")).kiroFactory;case"anthropic":return(await import("./anthropic-UTLWCK66.js")).anthropicFactory;case"openai":return(await import("./openai-QGEN33SU.js")).openaiFactory;case"gemini":return(await import("./gemini-YR5KT32S.js")).geminiFactory;case"vertexai":return(await import("./vertexai-RUXZ24C2.js")).vertexaiFactory;default:throw new Error(`Unknown provider: ${e}`)}},lo=async e=>{let t=e??[],r=null,n=null,i=null,o=!1,a=!1,l=[],s=0;for(;s<t.length;){let f=t[s];if(f==="-p"||f==="--provider"){r=t[s+1]??null,s+=2;continue}if(f==="-m"||f==="--model"){n=t[s+1]??null,s+=2;continue}if(f==="--max-tokens"){let x=t[s+1];x!==void 0&&(i=Number(x)),s+=2;continue}if(f==="--json"){o=!0,s+=1;continue}if(f==="-v"||f==="--verbose"){a=!0,s+=1;continue}f.startsWith("-")||l.push(f),s+=1}let c=l.join(" ");if(c.length===0)return D({message:'Usage: ai ask "your prompt" [-p provider] [-m model] [--verbose]',exitCode:1});let p=await vr(a);try{let f=r!==null?xr(r):await Sr(p),x=yr[f]??f,Ce=n??Lr(f);await p.info(`Using ${x} (${Ce})`);let lt=await hr(f),Q=new Ie({factories:[lt]});await Q.addModel("default",{provider:f,model:Ce});let Z=Q.getDefault();if(Z===null)return D({message:"Failed to initialize model",exitCode:1});let we=[Fe("user",c)];if(await p.info(`Sending prompt (${c.length} chars)...`),o){let O=await Z.generateText({messages:we,maxTokens:i??void 0});await p.info(`Response received (${Ee(O).length} chars)`);let P=ne({sink:oe.stdout()});P.writeln(JSON.stringify(O,null,2)),await P.close()}else{let O=Te(Z,{messages:we,maxTokens:i??void 0});await Re().from(O).to(wr()).run();let P=T.process.stdout.getWriter();await P.write(new TextEncoder().encode(`
|
|
1
|
+
import{a as Ee,b as Ie}from"./chunk-AGPCY6XP.js";import{a as te,b as C,c as M,d as G,f as L,g as Ae,h as be,j as ke,k as re,l as Pe,o as ne,p as Re,q as oe,r as _e}from"./chunk-K223KAUB.js";import{a as Fe}from"./chunk-5MN3MWQN.js";import"./chunk-OLM5RTFK.js";import{a as Le,b as D}from"./chunk-2N4GTHXQ.js";import{d as ie}from"./chunk-E7UED6DA.js";import{b as T}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import{d as ee}from"./chunk-OTRBRRIO.js";var Ne=e=>({rawMessage:e.rawMessage??e.message,args:e.args??[],datetime:e.datetime??new Date,properties:e.properties??{},context:e.context??{},...e});var d=e=>typeof e=="string"?e.split(".").filter(Boolean):e,V=(e,t=".")=>e.join(t),w=e=>e.join("\0");var Oe=(e,t)=>e.length<t.length?!1:t.every((r,n)=>e[n]===r);var De=(e,t)=>{let r=[];for(let n of t.values()){let i=d(n.category);Oe(e,i)&&r.push(n)}return r.sort((n,i)=>{let o=d(n.category).length;return d(i.category).length-o}),r};var j=(e,t)=>{let r=typeof t=="string"?[t]:t;return[...e,...r]};var K={};ee(K,{configure:()=>Tt,configureSync:()=>Ct,getEffectiveConfig:()=>ue,getFilterNames:()=>Rt,getLoggerCategories:()=>_t,getRegistryState:()=>St,getSinkNames:()=>Pt,isConfigured:()=>ht,registerFilter:()=>At,registerLogger:()=>kt,registerLoggerCacheClear:()=>le,registerSink:()=>wt,reset:()=>ze,resetSync:()=>Ke,unregisterFilter:()=>bt,unregisterSink:()=>Lt});var g={Trace:1,Debug:5,Info:9,Notice:10,Warning:13,Error:17,Critical:21,Alert:22,Emergency:23},Me={[g.Trace]:"Trace",[g.Debug]:"Debug",[g.Info]:"Info",[g.Notice]:"Notice",[g.Warning]:"Warning",[g.Error]:"Error",[g.Critical]:"Critical",[g.Alert]:"Alert",[g.Emergency]:"Emergency"};var $,z,pt=()=>{if($===void 0)try{let e=globalThis.AsyncLocalStorage??globalThis.require?.("async_hooks")?.AsyncLocalStorage;e&&($=new e)}catch{}return $},mt=()=>{if(z===void 0)try{let e=globalThis.AsyncLocalStorage??globalThis.require?.("async_hooks")?.AsyncLocalStorage;e&&(z=new e)}catch{}return z},Ge,Ve,R=e=>{Ge=e},se=e=>{Ve=e},ge=()=>{$=void 0,z=void 0},dt=()=>Ge??pt(),yt=()=>Ve??mt();var je=()=>{let e=dt();return e?e.getStore()??{}:{}};var xt=()=>{let e=yt();return e?e.getStore()??[]:[]},$e=e=>{let t=xt();return t.length===0?e:j(t,e)};var ce=null,le=e=>{ce=e},u=null,y=new Map,St=()=>u,ht=()=>u!==null,Tt=async e=>{(e.reset||u===null)&&await ze(),u={sinks:new Map(Object.entries(e.sinks)),filters:new Map(Object.entries(e.filters??{})),loggers:new Map,contextLocalStorage:e.contextLocalStorage};for(let t of e.loggers){let r=d(t.category),n=w(r);u.loggers.set(n,{...t,category:r})}e.contextLocalStorage&&R(e.contextLocalStorage),y.clear()},Ct=e=>{(e.reset||u===null)&&Ke(),u={sinks:new Map(Object.entries(e.sinks)),filters:new Map(Object.entries(e.filters??{})),loggers:new Map,contextLocalStorage:e.contextLocalStorage};for(let t of e.loggers){let r=d(t.category),n=w(r);u.loggers.set(n,{...t,category:r})}e.contextLocalStorage&&R(e.contextLocalStorage),y.clear()},ze=async()=>{if(u)for(let e of u.sinks.values()){let t=e;typeof t.dispose=="function"?await t.dispose():typeof t[Symbol.asyncDispose]=="function"&&await t[Symbol.asyncDispose]()}u=null,y.clear(),ce?.(),R(void 0),se(void 0),ge()},Ke=()=>{if(u)for(let e of u.sinks.values()){let t=e;typeof t.disposeSync=="function"?t.disposeSync():typeof t[Symbol.dispose]=="function"&&t[Symbol.dispose]()}u=null,y.clear(),ce?.(),R(void 0),se(void 0),ge()},ue=e=>{let t=w(e),r=y.get(t);if(r)return r;let n={sinks:[],filters:[],lowestLevel:g.Info};if(!u)return n;let i=De(e,u.loggers),o=new Set,a=new Set,l=!1;for(let s of i){if(s.sinks&&s.sinks.length>0){s.parentSinks==="override"&&o.clear();for(let c of s.sinks)o.add(c)}if(s.filters)for(let c of s.filters)a.add(c);!l&&s.lowestLevel!==void 0&&(n.lowestLevel=s.lowestLevel,l=!0)}for(let s of o){let c=u.sinks.get(s);c&&n.sinks.push(c)}for(let s of a){let c=u.filters.get(s);c&&n.filters.push(c)}return y.set(t,n),n},wt=(e,t)=>{if(!u)throw new Error("Logging not configured. Call configure() first.");u.sinks.set(e,t),y.clear()},Lt=e=>{u&&(u.sinks.delete(e),y.clear())},At=(e,t)=>{if(!u)throw new Error("Logging not configured. Call configure() first.");u.filters.set(e,t),y.clear()},bt=e=>{u&&(u.filters.delete(e),y.clear())},kt=e=>{if(!u)throw new Error("Logging not configured. Call configure() first.");let t=d(e.category),r=w(t);u.loggers.set(r,{...e,category:t}),y.clear()},Pt=()=>u?Array.from(u.sinks.keys()):[],Rt=()=>u?Array.from(u.filters.keys()):[],_t=()=>u?Array.from(u.loggers.values()).map(e=>d(e.category)):[];var W={};ee(W,{DEFAULT_LEVEL:()=>Ft,Logger:()=>_,clearLoggerCache:()=>We,current:()=>It,getLogger:()=>Et});var Ft=g.Info,_=class e{category;parent;#e;#t=null;constructor(t,r=null,n={}){this.category=d(t),this.parent=r,this.#e=n}#r(){return this.#t===null&&(this.#t=ue(this.category)),this.#t}getChild(t){let r=j(this.category,d(t));return new e(r,this,this.#e)}with(t){return new e(this.category,this.parent,{...this.#e,...t})}get loggerName(){return V(this.category)}asString(t,r=!1){return typeof t=="string"?r?`"${t}"`:t:t===null||typeof t=="number"||typeof t=="bigint"||typeof t=="boolean"||typeof t>"u"||typeof t=="symbol"?String(t):t instanceof Error?t.stack:t!==null&&typeof t=="object"?Array.isArray(t)?JSON.stringify(t):`{${Object.entries(t).map(([n,i])=>`"${n}":${this.asString(i,!0)}`).join(",")}}`:"undefined"}async log(t,r,...n){let i=this.#r();if(t<i.lowestLevel)return r instanceof Function?void 0:r;let o,a;r instanceof Function?(o=r(),a=this.asString(o)):a=this.asString(r);let l=je(),s=Ne({message:a,rawMessage:a,args:n,datetime:new Date,severity:t,category:this.category,properties:this.#e,context:l});for(let c of i.filters)if(!c(s))return r instanceof Function?o:r;return i.sinks.length>0&&await Promise.all(i.sinks.map(c=>c(s))),r instanceof Function?o:r}debug(t,...r){return this.log(g.Debug,t,...r)}info(t,...r){return this.log(g.Info,t,...r)}warn(t,...r){return this.log(g.Warning,t,...r)}error(t,...r){return this.log(g.Error,t,...r)}critical(t,...r){return this.log(g.Critical,t,...r)}emergency(t,...r){return this.log(g.Emergency,t,...r)}alert(t,...r){return this.log(g.Alert,t,...r)}notice(t,...r){return this.log(g.Notice,t,...r)}trace(t,...r){return this.log(g.Trace,t,...r)}},fe=new Map,Et=e=>{let t=$e(d(e)),r=w(t),n=fe.get(r);return n||(n=new _(t),fe.set(r,n)),n},We=()=>{fe.clear()};le(We);var It=new _(["default"]);var B={};ee(B,{fingersCrossedSink:()=>Kt,getBufferedSink:()=>zt,getOutputSink:()=>jt,getRecordCollectorSink:()=>Ue,getTestSink:()=>Wt,withFilter:()=>$t});var Nt={[g.Trace]:"TRCE",[g.Debug]:"DBUG",[g.Info]:"INFO",[g.Notice]:"NOTC",[g.Warning]:"WARN",[g.Error]:"ERRO",[g.Critical]:"CRIT",[g.Alert]:"ALRT",[g.Emergency]:"EMRG"};var Ot=(e,t)=>{if(t==="none")return"";if(typeof t=="function")return t(e);let r=e.toISOString(),n=r.slice(0,10),i=r.slice(11,19),o=r.slice(19);switch(t){case"rfc3339":return r;case"date-time-timezone":case void 0:return`${n} ${i}${o}`;case"date-time":return`${n} ${i}`;case"time-timezone":return`${i}${o}`;case"time":return i;case"date":return n}},Dt=e=>{try{return JSON.stringify(e)}catch{return String(e)}},Mt=(e,t)=>{let r={...t,...e},n=Object.entries(r);return n.length===0?"":" "+n.map(([i,o])=>{let a=typeof o=="string"?o:Dt(o);return`${i}=${a}`}).join(" ")};var Gt=(e,t)=>{switch(e){case g.Trace:return G(ke(t));case g.Debug:return Pe(t);case g.Info:return Ae(t);case g.Notice:return re(t);case g.Warning:return be(t);case g.Error:return L(t);case g.Critical:return M(L(t));case g.Alert:return M(L(t));case g.Emergency:return M(L(t));default:return C(t)}},Be=e=>{let t=Ot(e.datetime,"date-time-timezone"),r=Nt[e.severity]??"????",n=e.category.length>0?V(e.category):"",i=Mt(e.properties,e.context),o=[];return t&&o.push(G(t),C(" ")),o.push(Gt(e.severity,r),C(" ")),n&&o.push(re(`[${n}]`),C(" ")),e.severity>=g.Error?o.push(L(e.message)):o.push(C(e.message)),i.trim()&&o.push(C(" "),G(i.trim())),o};var jt=(e,t)=>{let r=t?.formatter??Be;return n=>{let i=r(n);e.writeln(...i)}},$t=(e,t)=>r=>{if(t(r))return e(r)},zt=(e,t={})=>{let{maxSize:r=100,flushIntervalMs:n=5e3}=t,i=[],o=null,a=async()=>{if(i.length===0)return;let c=i;i=[],o&&(clearTimeout(o),o=null),await Promise.all(c.map(p=>e(p)))},l=()=>{o===null&&(o=setTimeout(()=>{o=null,a().catch(()=>{})},n))},s=async c=>{i.push(c),i.length>=r?await a():l()};return s.flush=a,s},Kt=(e,t={})=>{let{triggerLevel:r=17,maxBufferSize:n=1e3}=t,i=[],o=!1,a=async()=>{let c=i;i=[],o=!0,await Promise.all(c.map(p=>e(p)))},l=()=>{i=[],o=!1},s=async c=>{if(o){await e(c);return}if(c.severity>=r){i.push(c),await a();return}i.push(c),i.length>n&&i.shift()};return s.flush=a,s.clear=l,s},Ue=()=>{let e=[];return{sink:r=>{e.push(r)},records:e}},Wt=Ue;var Ye=typeof globalThis=="object"?globalThis:global;var v="1.9.0";var Xe=/^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;function Ut(e){var t=new Set([e]),r=new Set,n=e.match(Xe);if(!n)return function(){return!1};var i={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(i.prerelease!=null)return function(s){return s===e};function o(l){return r.add(l),!1}function a(l){return t.add(l),!0}return function(s){if(t.has(s))return!0;if(r.has(s))return!1;var c=s.match(Xe);if(!c)return o(s);var p={major:+c[1],minor:+c[2],patch:+c[3],prerelease:c[4]};return p.prerelease!=null||i.major!==p.major?o(s):i.major===0?i.minor===p.minor&&i.patch<=p.patch?a(s):o(s):i.minor<=p.minor?a(s):o(s)}}var qe=Ut(v);var Yt=v.split(".")[0],F=Symbol.for("opentelemetry.js.api."+Yt),E=Ye;function A(e,t,r,n){var i;n===void 0&&(n=!1);var o=E[F]=(i=E[F])!==null&&i!==void 0?i:{version:v};if(!n&&o[e]){var a=new Error("@opentelemetry/api: Attempted duplicate registration of API: "+e);return r.error(a.stack||a.message),!1}if(o.version!==v){var a=new Error("@opentelemetry/api: Registration of version v"+o.version+" for "+e+" does not match previously registered API v"+v);return r.error(a.stack||a.message),!1}return o[e]=t,r.debug("@opentelemetry/api: Registered a global for "+e+" v"+v+"."),!0}function S(e){var t,r,n=(t=E[F])===null||t===void 0?void 0:t.version;if(!(!n||!qe(n)))return(r=E[F])===null||r===void 0?void 0:r[e]}function b(e,t){t.debug("@opentelemetry/api: Unregistering a global for "+e+" v"+v+".");var r=E[F];r&&delete r[e]}var Xt=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){a={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return o},qt=function(e,t,r){if(r||arguments.length===2)for(var n=0,i=t.length,o;n<i;n++)(o||!(n in t))&&(o||(o=Array.prototype.slice.call(t,0,n)),o[n]=t[n]);return e.concat(o||Array.prototype.slice.call(t))},He=function(){function e(t){this._namespace=t.namespace||"DiagComponentLogger"}return e.prototype.debug=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return I("debug",this._namespace,t)},e.prototype.error=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return I("error",this._namespace,t)},e.prototype.info=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return I("info",this._namespace,t)},e.prototype.warn=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return I("warn",this._namespace,t)},e.prototype.verbose=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return I("verbose",this._namespace,t)},e}();function I(e,t,r){var n=S("diag");if(n)return r.unshift(t),n[e].apply(n,qt([],Xt(r),!1))}var m;(function(e){e[e.NONE=0]="NONE",e[e.ERROR=30]="ERROR",e[e.WARN=50]="WARN",e[e.INFO=60]="INFO",e[e.DEBUG=70]="DEBUG",e[e.VERBOSE=80]="VERBOSE",e[e.ALL=9999]="ALL"})(m||(m={}));function Je(e,t){e<m.NONE?e=m.NONE:e>m.ALL&&(e=m.ALL),t=t||{};function r(n,i){var o=t[n];return typeof o=="function"&&e>=i?o.bind(t):function(){}}return{error:r("error",m.ERROR),warn:r("warn",m.WARN),info:r("info",m.INFO),debug:r("debug",m.DEBUG),verbose:r("verbose",m.VERBOSE)}}var Ht=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){a={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return o},Jt=function(e,t,r){if(r||arguments.length===2)for(var n=0,i=t.length,o;n<i;n++)(o||!(n in t))&&(o||(o=Array.prototype.slice.call(t,0,n)),o[n]=t[n]);return e.concat(o||Array.prototype.slice.call(t))},Qt="diag",k=function(){function e(){function t(i){return function(){for(var o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var l=S("diag");if(l)return l[i].apply(l,Jt([],Ht(o),!1))}}var r=this,n=function(i,o){var a,l,s;if(o===void 0&&(o={logLevel:m.INFO}),i===r){var c=new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");return r.error((a=c.stack)!==null&&a!==void 0?a:c.message),!1}typeof o=="number"&&(o={logLevel:o});var p=S("diag"),f=Je((l=o.logLevel)!==null&&l!==void 0?l:m.INFO,i);if(p&&!o.suppressOverrideMessage){var x=(s=new Error().stack)!==null&&s!==void 0?s:"<failed to generate stacktrace>";p.warn("Current logger will be overwritten from "+x),f.warn("Current logger will overwrite one already registered from "+x)}return A("diag",f,r,!0)};r.setLogger=n,r.disable=function(){b(Qt,r)},r.createComponentLogger=function(i){return new He(i)},r.verbose=t("verbose"),r.debug=t("debug"),r.info=t("info"),r.warn=t("warn"),r.error=t("error")}return e.instance=function(){return this._instance||(this._instance=new e),this._instance},e}();function Qe(e){return Symbol.for(e)}var Zt=function(){function e(t){var r=this;r._currentContext=t?new Map(t):new Map,r.getValue=function(n){return r._currentContext.get(n)},r.setValue=function(n,i){var o=new e(r._currentContext);return o._currentContext.set(n,i),o},r.deleteValue=function(n){var i=new e(r._currentContext);return i._currentContext.delete(n),i}}return e}(),Ze=new Zt;var er=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){a={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return o},tr=function(e,t,r){if(r||arguments.length===2)for(var n=0,i=t.length,o;n<i;n++)(o||!(n in t))&&(o||(o=Array.prototype.slice.call(t,0,n)),o[n]=t[n]);return e.concat(o||Array.prototype.slice.call(t))},et=function(){function e(){}return e.prototype.active=function(){return Ze},e.prototype.with=function(t,r,n){for(var i=[],o=3;o<arguments.length;o++)i[o-3]=arguments[o];return r.call.apply(r,tr([n],er(i),!1))},e.prototype.bind=function(t,r){return r},e.prototype.enable=function(){return this},e.prototype.disable=function(){return this},e}();var rr=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){a={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return o},nr=function(e,t,r){if(r||arguments.length===2)for(var n=0,i=t.length,o;n<i;n++)(o||!(n in t))&&(o||(o=Array.prototype.slice.call(t,0,n)),o[n]=t[n]);return e.concat(o||Array.prototype.slice.call(t))},pe="context",or=new et,U=function(){function e(){}return e.getInstance=function(){return this._instance||(this._instance=new e),this._instance},e.prototype.setGlobalContextManager=function(t){return A(pe,t,k.instance())},e.prototype.active=function(){return this._getContextManager().active()},e.prototype.with=function(t,r,n){for(var i,o=[],a=3;a<arguments.length;a++)o[a-3]=arguments[a];return(i=this._getContextManager()).with.apply(i,nr([t,r,n],rr(o),!1))},e.prototype.bind=function(t,r){return this._getContextManager().bind(t,r)},e.prototype._getContextManager=function(){return S(pe)||or},e.prototype.disable=function(){this._getContextManager().disable(),b(pe,k.instance())},e}();var Y;(function(e){e[e.NONE=0]="NONE",e[e.SAMPLED=1]="SAMPLED"})(Y||(Y={}));var me="0000000000000000",de="00000000000000000000000000000000",tt={traceId:de,spanId:me,traceFlags:Y.NONE};var h=function(){function e(t){t===void 0&&(t=tt),this._spanContext=t}return e.prototype.spanContext=function(){return this._spanContext},e.prototype.setAttribute=function(t,r){return this},e.prototype.setAttributes=function(t){return this},e.prototype.addEvent=function(t,r){return this},e.prototype.addLink=function(t){return this},e.prototype.addLinks=function(t){return this},e.prototype.setStatus=function(t){return this},e.prototype.updateName=function(t){return this},e.prototype.end=function(t){},e.prototype.isRecording=function(){return!1},e.prototype.recordException=function(t,r){},e}();var ye=Qe("OpenTelemetry Context Key SPAN");function X(e){return e.getValue(ye)||void 0}function rt(){return X(U.getInstance().active())}function N(e,t){return e.setValue(ye,t)}function nt(e){return e.deleteValue(ye)}function ot(e,t){return N(e,new h(t))}function q(e){var t;return(t=X(e))===null||t===void 0?void 0:t.spanContext()}var ir=/^([0-9a-f]{32})$/i,ar=/^[0-9a-f]{16}$/i;function sr(e){return ir.test(e)&&e!==de}function gr(e){return ar.test(e)&&e!==me}function H(e){return sr(e.traceId)&&gr(e.spanId)}function it(e){return new h(e)}var xe=U.getInstance(),J=function(){function e(){}return e.prototype.startSpan=function(t,r,n){n===void 0&&(n=xe.active());var i=!!r?.root;if(i)return new h;var o=n&&q(n);return cr(o)&&H(o)?new h(o):new h},e.prototype.startActiveSpan=function(t,r,n,i){var o,a,l;if(!(arguments.length<2)){arguments.length===2?l=r:arguments.length===3?(o=r,l=n):(o=r,a=n,l=i);var s=a??xe.active(),c=this.startSpan(t,o,s),p=N(s,c);return xe.with(p,l,void 0,c)}},e}();function cr(e){return typeof e=="object"&&typeof e.spanId=="string"&&typeof e.traceId=="string"&&typeof e.traceFlags=="number"}var lr=new J,at=function(){function e(t,r,n,i){this._provider=t,this.name=r,this.version=n,this.options=i}return e.prototype.startSpan=function(t,r,n){return this._getTracer().startSpan(t,r,n)},e.prototype.startActiveSpan=function(t,r,n,i){var o=this._getTracer();return Reflect.apply(o.startActiveSpan,o,arguments)},e.prototype._getTracer=function(){if(this._delegate)return this._delegate;var t=this._provider.getDelegateTracer(this.name,this.version,this.options);return t?(this._delegate=t,this._delegate):lr},e}();var st=function(){function e(){}return e.prototype.getTracer=function(t,r,n){return new J},e}();var ur=new st,ve=function(){function e(){}return e.prototype.getTracer=function(t,r,n){var i;return(i=this.getDelegateTracer(t,r,n))!==null&&i!==void 0?i:new at(this,t,r,n)},e.prototype.getDelegate=function(){var t;return(t=this._delegate)!==null&&t!==void 0?t:ur},e.prototype.setDelegate=function(t){this._delegate=t},e.prototype.getDelegateTracer=function(t,r,n){var i;return(i=this._delegate)===null||i===void 0?void 0:i.getTracer(t,r,n)},e}();var Se="trace",gt=function(){function e(){this._proxyTracerProvider=new ve,this.wrapSpanContext=it,this.isSpanContextValid=H,this.deleteSpan=nt,this.getSpan=X,this.getActiveSpan=rt,this.getSpanContext=q,this.setSpan=N,this.setSpanContext=ot}return e.getInstance=function(){return this._instance||(this._instance=new e),this._instance},e.prototype.setGlobalTracerProvider=function(t){var r=A(Se,this._proxyTracerProvider,k.instance());return r&&this._proxyTracerProvider.setDelegate(t),r},e.prototype.getTracerProvider=function(){return S(Se)||this._proxyTracerProvider},e.prototype.getTracer=function(t,r){return this.getTracerProvider().getTracer(t,r)},e.prototype.disable=function(){b(Se,k.instance()),this._proxyTracerProvider=new ve},e}();var he=gt.getInstance();var Yn=he.getTracer("@eser/logging");var Te=(e,t,r)=>{let n=e.streamText(t,r);return{name:`ai-text/${e.provider}/${e.modelId}`,readable:new ReadableStream({async start(i){try{for await(let o of n)o.kind==="content_delta"&&i.enqueue(te(o.textDelta));i.close()}catch(o){i.error(o)}}})}};var dr={cc:"claude-code",ol:"ollama",oc:"opencode",oai:"openai",ant:"anthropic",gem:"gemini",vtx:"vertexai"},yr={"claude-code":"Claude Code",ollama:"Ollama",opencode:"OpenCode",kiro:"Kiro",anthropic:"Anthropic API",openai:"OpenAI API",gemini:"Gemini API",vertexai:"Vertex AI"},xr=e=>dr[e]??e,vr=async e=>{if(e){let t=T.process.stderr.getWriter(),r=ne({renderer:_e.ansi(),sink:oe.writable(new WritableStream({async write(n){await t.write(new TextEncoder().encode(String(n.data)))},close(){t.releaseLock()}}))});await K.configure({sinks:{stderr:B.getOutputSink(r)},loggers:[{category:["ai"],lowestLevel:g.Debug,sinks:["stderr"]}]})}return W.getLogger(["ai","ask"])},Sr=async e=>{await e.info("Auto-detecting AI provider...");try{if(await ie`which claude`.noThrow().code()===0)return await e.info("Claude Code detected."),"claude-code"}catch{}try{if((await fetch("http://localhost:11434/api/version",{signal:AbortSignal.timeout(1e3)})).ok)return await e.info("Ollama detected at localhost:11434."),"ollama"}catch{}try{if(await ie`which opencode`.noThrow().code()===0)return await e.info("OpenCode detected."),"opencode"}catch{}if(T.capabilities.env){if(T.env.has("ANTHROPIC_API_KEY"))return await e.info("Anthropic API key detected."),"anthropic";if(T.env.has("OPENAI_API_KEY"))return await e.info("OpenAI API key detected."),"openai"}throw new Error("No AI provider detected. Install claude, ollama, or set ANTHROPIC_API_KEY / OPENAI_API_KEY.")},hr=async e=>{switch(e){case"claude-code":return(await import("./claude-code-F64HRHHR.js")).claudeCodeFactory;case"ollama":return(await import("./ollama-IVHLR7VV.js")).ollamaFactory;case"opencode":return(await import("./opencode-MTSBCZYY.js")).openCodeFactory;case"kiro":return(await import("./kiro-XJ6XH4Q4.js")).kiroFactory;case"anthropic":return(await import("./anthropic-LDUWIUPL.js")).anthropicFactory;case"openai":return(await import("./openai-QGEN33SU.js")).openaiFactory;case"gemini":return(await import("./gemini-YR5KT32S.js")).geminiFactory;case"vertexai":return(await import("./vertexai-RUXZ24C2.js")).vertexaiFactory;default:throw new Error(`Unknown provider: ${e}`)}},lo=async e=>{let t=e??[],r=null,n=null,i=null,o=!1,a=!1,l=[],s=0;for(;s<t.length;){let f=t[s];if(f==="-p"||f==="--provider"){r=t[s+1]??null,s+=2;continue}if(f==="-m"||f==="--model"){n=t[s+1]??null,s+=2;continue}if(f==="--max-tokens"){let x=t[s+1];x!==void 0&&(i=Number(x)),s+=2;continue}if(f==="--json"){o=!0,s+=1;continue}if(f==="-v"||f==="--verbose"){a=!0,s+=1;continue}f.startsWith("-")||l.push(f),s+=1}let c=l.join(" ");if(c.length===0)return D({message:'Usage: ai ask "your prompt" [-p provider] [-m model] [--verbose]',exitCode:1});let p=await vr(a);try{let f=r!==null?xr(r):await Sr(p),x=yr[f]??f,Ce=n??Lr(f);await p.info(`Using ${x} (${Ce})`);let lt=await hr(f),Q=new Ie({factories:[lt]});await Q.addModel("default",{provider:f,model:Ce});let Z=Q.getDefault();if(Z===null)return D({message:"Failed to initialize model",exitCode:1});let we=[Fe("user",c)];if(await p.info(`Sending prompt (${c.length} chars)...`),o){let O=await Z.generateText({messages:we,maxTokens:i??void 0});await p.info(`Response received (${Ee(O).length} chars)`);let P=ne({sink:oe.stdout()});P.writeln(JSON.stringify(O,null,2)),await P.close()}else{let O=Te(Z,{messages:we,maxTokens:i??void 0});await Re().from(O).to(wr()).run();let P=T.process.stdout.getWriter();await P.write(new TextEncoder().encode(`
|
|
2
2
|
`)),P.releaseLock()}return await Q.close(),Le(void 0)}catch(f){let x=f instanceof Error?f.message:String(f);return await p.error(x),a&&f instanceof Error&&f.cause!==void 0&&await p.debug(`Cause: ${String(f.cause)}`),D({message:x,exitCode:1})}},Tr=12,Cr=e=>new Promise(t=>setTimeout(t,e)),wr=(e=Tr)=>{let t=new TextEncoder;return{name:"typewriter",writable:new WritableStream({async write(r){let n=String(r.data),i=T.process.stdout.getWriter();for(let o of n)await i.write(t.encode(o)),await Cr(e);i.releaseLock()}})}},Lr=e=>{switch(e){case"claude-code":return"claude-sonnet-4-20250514";case"ollama":return"llama3";case"opencode":return"default";case"kiro":return"default";case"anthropic":return"claude-sonnet-4-20250514";case"openai":return"gpt-4o";case"gemini":return"gemini-2.0-flash";case"vertexai":return"gemini-2.0-flash";default:return"default"}};export{lo as main};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as $}from"./chunk-TI4CLT2V.js";import{c as E}from"./chunk-2X2U2VC5.js";import{n as v,s as A}from"./chunk-JNVM2KAE.js";import{d as y,f as k,h as C,i as S,j as x}from"./chunk-AQWB2PVR.js";import{c as u,d as p,f as a,h as f,o as w,q as h,r as g}from"./chunk-K223KAUB.js";import{a as d,b as n}from"./chunk-2N4GTHXQ.js";import{b as l}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var q=async m=>{let e=w({renderer:g.ansi(),sink:h.stdout()}),i=l.process.cwd(),o=C(m);if(!o.ok)return e.writeln(a(o.error)),await e.close(),n({exitCode:1});let c=(m??[]).filter(t=>!t.startsWith("--spec=")).join(" ")||"No reason given",s;try{s=await k(i,o.spec)}catch(t){let R=t instanceof Error?t.message:String(t);return e.writeln(a(R)),await e.close(),n({exitCode:1})}if(s.spec!==null){let t=`${i}/${y.specDir(s.spec)}`;try{await l.fs.stat(t)}catch{return e.writeln(a(`Active spec '${s.spec}' directory not found.`)),e.writeln(p("Run `noskills reset` to return to idle.")),await e.close(),n({exitCode:1})}}if(s.phase!=="EXECUTING")return e.writeln(a(`Cannot block in phase: ${s.phase}`)),await e.close(),n({exitCode:1});let b=await $(i),r=v(s,c);return r=A(r,"EXECUTING","BLOCKED",b,c),await S(i,r),r.spec!==null&&await x(i,r.spec,r),e.writeln(f("\u26A0")," Spec blocked: ",p(c)),e.writeln("Resolve with: ",u(`${E('next --answer="resolution"')}`)),await e.close(),d(void 0)};export{q as main};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as I,d as x}from"./chunk-ESTTTPON.js";import{h as D}from"./chunk-TI4CLT2V.js";import{p as C,s as E,v as k}from"./chunk-JNVM2KAE.js";import{d as w,f as h,h as S,i as g,j as y}from"./chunk-AQWB2PVR.js";import{d as l,f as n,g as m,o as d,q as u,r as f}from"./chunk-K223KAUB.js";import{a as p,b as i}from"./chunk-2N4GTHXQ.js";import{b as o}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var q=async T=>{let e=d({renderer:f.ansi(),sink:u.stdout()}),r=o.process.cwd(),c=S(T);if(!c.ok)return e.writeln(n(c.error)),await e.close(),i({exitCode:1});let s;try{s=await h(r,c.spec)}catch(a){let A=a instanceof Error?a.message:String(a);return e.writeln(n(A)),await e.close(),i({exitCode:1})}if(s.phase==="IDLE"||s.phase==="UNINITIALIZED"||s.phase==="COMPLETED")return e.writeln(n(`Cannot cancel in phase: ${s.phase}`)),await e.close(),i({exitCode:1});if(s.spec!==null){let a=`${r}/${w.specDir(s.spec)}`;try{await o.fs.stat(a)}catch{return e.writeln(n(`Active spec '${s.spec}' directory not found.`)),e.writeln(l("Run `noskills reset` to return to idle.")),await e.close(),i({exitCode:1})}}let U=await D(r),t=C(s,"cancelled");t=E(t,s.phase,"COMPLETED",U,"cancelled"),t.spec!==null&&await y(r,t.spec,t);let v=k(t);return await g(r,v),t.spec!==null&&(await I(r,t.spec,"cancelled"),await x(r,t.spec,"cancelled")),e.writeln(m("\u2714")," Spec cancelled."),await e.close(),p(void 0)};export{q as main};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as u,c as Ae,d,e as U,f as R,g as x,h as E,i as Oe,k,l as _,n as V,o as he,q as re,r as se}from"./chunk-K223KAUB.js";import{b}from"./chunk-RMCTOOQL.js";import{d as D}from"./chunk-OTRBRRIO.js";var h=Symbol("tui.cancel"),Ke=e=>e===h,Ee={ctrlC:"exit",escape:"cancel"},He=()=>{try{return b.process.stdin}catch{return new ReadableStream}},Fe=e=>{let t=e?.interaction??(e?.target==="non-interactive"?"non-interactive":"interactive"),r=e?.audience??"human",s=t==="non-interactive"?"non-interactive":"interactive",n=t==="interactive";return{output:e?.output??he({renderer:n?se.ansi():se.plain(),sink:n?re.stdout():re.stderr()}),input:e?.input??He(),target:s,interaction:t,audience:r,signals:{...Ee,...e?.signals},stderr:e?.stderr??he({renderer:se.plain(),sink:re.stderr()})}};var Pe={};D(Pe,{disableMouse:()=>We,enableMouse:()=>qe,isSGRMouseSequence:()=>ye,parseMouseEvent:()=>fe});var qe=()=>"\x1B[?1000h\x1B[?1002h\x1B[?1006h",We=()=>"\x1B[?1006l\x1B[?1002l\x1B[?1000l",je=/^\x1b\[<(\d+);(\d+);(\d+)([Mm])$/,fe=e=>{let t=e.match(je);if(t===null)return null;let r=parseInt(t[1],10),s=parseInt(t[2],10)-1,n=parseInt(t[3],10)-1,i=t[4]==="m",o=r&3,a=(r&4)!==0,p=(r&16)!==0,c=(r&32)!==0;return(r&64)!==0?{type:"wheel",button:0,x:s,y:n,shift:a,ctrl:p,direction:r&1?"down":"up"}:c?{type:"mousemove",button:o,x:s,y:n,shift:a,ctrl:p}:{type:i?"mouseup":"mousedown",button:o,x:s,y:n,shift:a,ctrl:p}},ye=e=>e.length>=4&&e[0]===27&&e[1]===91&&e[2]===60;var P=async e=>{let t=!1;if(b.capabilities.stdin&&b.process.isTerminal("stdin"))try{b.process.setStdinRaw(!0),t=!0}catch{}try{return await e()}finally{if(t)try{b.process.setStdinRaw(!1)}catch{}}},L=e=>{e.write(u("\x1B[?25l"))},A=e=>{e.write(u("\x1B[?25h"))},f=(e,t)=>{t>0&&e.write(u(`\x1B[${t}A\x1B[J`))};var Le=e=>{let t=new Uint8Array(e);if(e.length===1&&e[0]===3)return{name:"c",ctrl:!0,meta:!1,shift:!1,raw:t};if(e.length===1&&e[0]===27)return{name:"escape",ctrl:!1,meta:!1,shift:!1,raw:t};if(e.length===1&&(e[0]===13||e[0]===10))return{name:"return",ctrl:!1,meta:!1,shift:!1,raw:t};if(e.length===1&&e[0]===9)return{name:"tab",ctrl:!1,meta:!1,shift:!1,raw:t};if(e.length===1&&e[0]===127)return{name:"backspace",ctrl:!1,meta:!1,shift:!1,raw:t};if(e.length>=3&&e[0]===27&&e[1]===91)switch(e[2]){case 65:return{name:"up",ctrl:!1,meta:!1,shift:!1,raw:t};case 66:return{name:"down",ctrl:!1,meta:!1,shift:!1,raw:t};case 67:return{name:"right",ctrl:!1,meta:!1,shift:!1,raw:t};case 68:return{name:"left",ctrl:!1,meta:!1,shift:!1,raw:t};case 72:return{name:"home",ctrl:!1,meta:!1,shift:!1,raw:t};case 70:return{name:"end",ctrl:!1,meta:!1,shift:!1,raw:t}}if(e.length===1&&e[0]>=1&&e[0]<=26)return{name:String.fromCharCode(e[0]+96),ctrl:!0,meta:!1,shift:!1,raw:t};if(e.length===1&&e[0]===32)return{name:"space",char:" ",ctrl:!1,meta:!1,shift:!1,raw:t};if(e.length===1&&e[0]>=33&&e[0]<=126){let r=String.fromCharCode(e[0]);return{name:r,char:r,ctrl:!1,meta:!1,shift:!1,raw:t}}if(e.length>0&&e[0]>=192){let r=new TextDecoder().decode(e);return{name:r,char:r,ctrl:!1,meta:!1,shift:!1,raw:t}}return{name:"unknown",ctrl:!1,meta:!1,shift:!1,raw:t}};async function*B(e,t){let r=e.getReader();try{for(;!t?.aborted;){let{done:s,value:n}=await r.read();if(s||n===void 0)break;yield Le(n)}}finally{r.releaseLock()}}async function*ze(e,t){let r=e.getReader(),s=new TextDecoder;try{for(;!t?.aborted;){let{done:n,value:i}=await r.read();if(n||i===void 0)break;if(ye(i)){let o=s.decode(i),a=fe(o);if(a!==null){yield{kind:"mouse",event:a};continue}}yield{kind:"key",event:Le(i)}}}finally{r.releaseLock()}}var T=(e,t)=>{if(e==="exit"){A(t.output);try{b.process.setStdinRaw(!1)}catch{}b.process.exit(130)}return e==="cancel"?"cancel":"continue"};var g="\u2502",Be="\u250C",C="\u2514";var ne="\u25CF",ie="\u25CB",Me="\u25FC",Ie="\u25FB",N="\u25C6",S="\u25C7",O="\u25A0",Ne="\u25CF";var G="\u25B2";var De="\u25C7";var oe=(e,t,r,s)=>{if(s==="done"){let o=r?"Yes":"No";return e.output.writeln(x(S),u(` ${t}`),d(` \xB7 ${o}`)),1}if(s==="cancel")return e.output.writeln(R(O),u(` ${t}`)),1;let n=r?U(x(ne),u(" Yes")):U(d(ie),d(" Yes")),i=r?U(d(ie),d(" No")):U(x(ne),u(" No"));return e.output.writeln(k(N),u(` ${t}`)),e.output.writeln(d(g),u(" "),n,d(" / "),i),e.output.writeln(d(C)),3},Xe=async(e,t)=>{let r=t.initialValue??!0,s=0;L(e.output);try{return await P(async()=>{s=oe(e,t.message,r,"active"),await e.output.flush();let n=()=>{f(e.output,s),oe(e,t.message,r,"cancel")};for await(let i of B(e.input)){if(i.name==="c"&&i.ctrl){if(T(e.signals.ctrlC,e)==="cancel")return n(),await e.output.flush(),h;continue}if(i.name==="escape"){if(T(e.signals.escape,e)==="cancel")return n(),await e.output.flush(),h;continue}if(i.name==="return")return f(e.output,s),oe(e,t.message,r,"done"),await e.output.flush(),r;let o=!1;(i.name==="left"||i.name==="right")&&(r=!r,o=!0),(i.name==="y"||i.name==="Y")&&(r=!0,o=!0),(i.name==="n"||i.name==="N")&&(r=!1,o=!0),o&&(f(e.output,s),s=oe(e,t.message,r,"active"),await e.output.flush())}return h})}finally{A(e.output),await e.output.flush()}};var F=(e,t,r,s,n,i)=>{if(i==="done")return e.output.writeln(x(S),u(` ${t}`),d(` \xB7 ${r}`)),1;if(i==="cancel")return e.output.writeln(R(O),u(` ${t}`)),1;let o=r.length>0?u(r):s!==void 0?d(s):u(""),a=n!==void 0?E(G):k(N);e.output.writeln(a,u(` ${t}`)),e.output.writeln(d(g),u(" "),o);let p=2;return n!==void 0?(e.output.writeln(d(C),u(" "),E(n)),p=3):(e.output.writeln(d(C)),p=3),p},Ye=async(e,t)=>{let r=t.initialValue??"",s=r.length,n,i=0;L(e.output);try{return await P(async()=>{i=F(e,t.message,r,t.placeholder,n,"active"),await e.output.flush();let o=()=>{f(e.output,i),F(e,t.message,r,t.placeholder,void 0,"cancel")};for await(let a of B(e.input)){if(a.name==="c"&&a.ctrl){if(T(e.signals.ctrlC,e)==="cancel")return o(),await e.output.flush(),h;continue}if(a.name==="escape"){if(T(e.signals.escape,e)==="cancel")return o(),await e.output.flush(),h;continue}if(a.name==="return"){if(t.validate!==void 0){let p=t.validate(r);if(p!==void 0){n=p,f(e.output,i),i=F(e,t.message,r,t.placeholder,n,"active"),await e.output.flush();continue}}return f(e.output,i),F(e,t.message,r,t.placeholder,void 0,"done"),await e.output.flush(),r}if(n=void 0,a.name==="backspace")s>0&&(r=r.slice(0,s-1)+r.slice(s),s--);else if(a.name==="left")s>0&&s--;else if(a.name==="right")s<r.length&&s++;else if(a.name==="home")s=0;else if(a.name==="end")s=r.length;else if(a.char!==void 0)r=r.slice(0,s)+a.char+r.slice(s),s++;else continue;f(e.output,i),i=F(e,t.message,r,t.placeholder,n,"active"),await e.output.flush()}return h})}finally{A(e.output),await e.output.flush()}};var q=(e,t,r,s,n,i,o)=>{if(o==="done"){let c=[...n].sort((l,m)=>l-m).map(l=>r[l]?.label??"").join(", ");return e.output.writeln(x(S),u(` ${t}`),d(` \xB7 ${c}`)),1}if(o==="cancel")return e.output.writeln(R(O),u(` ${t}`)),1;let a=i!==void 0?E(G):k(N);e.output.writeln(a,u(` ${t}`));for(let c=0;c<r.length;c++){let l=r[c],m=c===s,y=n.has(c),v=l.disabled===!0,te=y?x(Me):d(Ie),$=v?d(` ${l.label}`):m?u(` ${l.label}`):d(` ${l.label}`),de=l.hint!==void 0?d(` (${l.hint})`):u("");e.output.writeln(d(g),u(" "),te,$,de)}let p=r.length+2;return i!==void 0?e.output.writeln(d(C),u(" "),E(i)):e.output.writeln(d(C)),p},ge=(e,t,r)=>{let s=e.length,n=t;for(let i=0;i<s;i++)if(n=(n+r+s)%s,e[n]?.disabled!==!0)return n;return t},Je=async(e,t)=>{let r=0,s=new Set;if(t.initialValues!==void 0)for(let o of t.initialValues){let a=t.options.findIndex(p=>p.value===o);a>=0&&s.add(a)}t.options[r]?.disabled===!0&&(r=ge(t.options,r,1));let n=0,i;L(e.output);try{return await P(async()=>{n=q(e,t.message,t.options,r,s,i,"active"),await e.output.flush();let o=()=>{f(e.output,n),q(e,t.message,t.options,r,s,void 0,"cancel")};for await(let a of B(e.input)){if(a.name==="c"&&a.ctrl){if(T(e.signals.ctrlC,e)==="cancel")return o(),await e.output.flush(),h;continue}if(a.name==="escape"){if(T(e.signals.escape,e)==="cancel")return o(),await e.output.flush(),h;continue}if(a.name==="return"){if(t.required!==!1&&s.size===0){i="Please select at least one option.",f(e.output,n),n=q(e,t.message,t.options,r,s,i,"active"),await e.output.flush();continue}return f(e.output,n),q(e,t.message,t.options,r,s,void 0,"done"),await e.output.flush(),[...s].sort((c,l)=>c-l).map(c=>t.options[c].value)}i=void 0;let p=!1;if((a.name==="up"||a.name==="k")&&(r=ge(t.options,r,-1),p=!0),(a.name==="down"||a.name==="j")&&(r=ge(t.options,r,1),p=!0),a.name==="space"&&t.options[r]?.disabled!==!0&&(s.has(r)?s.delete(r):s.add(r),p=!0),a.name==="a"){let c=t.options.every((l,m)=>l.disabled===!0||s.has(m));for(let l=0;l<t.options.length;l++)t.options[l]?.disabled!==!0&&(c?s.delete(l):s.add(l));p=!0}p&&(f(e.output,n),n=q(e,t.message,t.options,r,s,i,"active"),await e.output.flush())}return h})}finally{A(e.output),await e.output.flush()}};var Ze=(e,t)=>{e.output.writeln(_(Be),u(" "),Ae(t)),e.output.writeln(_(g))},Qe=(e,t)=>{e.output.writeln(_(g)),e.output.writeln(_(C),u(" "),u(t))},et=e=>{e.output.writeln(u(""))},tt=(e,t)=>{e.output.writeln(u(" "),d(t))},rt=e=>{e.output.writeln(_(g))},st={info:(e,t)=>{e.output.writeln(V("info",t))},success:(e,t)=>{e.output.writeln(V("success",t))},warn:(e,t)=>{e.output.writeln(V("warning",t))},error:(e,t)=>{e.output.writeln(V("error",t))},step:(e,t)=>{e.output.writeln(d(De),u(" "),d(t))},message:(e,t,r)=>{e.output.writeln(d(r??g),u(" "),u(t))}};var nt=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],it=80,ot=(e,t,r)=>{let s=r?.frames??nt,n=r?.interval??it,i=t,o=0,a,p=()=>{e.output.write(u(`\r${" ".repeat(i.length+4)}\r`))},c=()=>{a!==void 0&&(clearInterval(a),a=void 0,p())};return{start:l=>{l!==void 0&&(i=l),a=setInterval(()=>{let m=s[o%s.length];e.output.write(u("\r"),k(m??""),u(` ${i}`)),o++},n)},stop:l=>{c(),l!==void 0&&(i=l)},update:l=>{i=l},succeed:l=>{c(),e.output.writeln(x(S),u(` ${l??i}`))},fail:l=>{c(),e.output.writeln(R(O),u(` ${l??i}`))},warn:l=>{c(),e.output.writeln(E(G),u(` ${l??i}`))},info:l=>{c(),e.output.writeln(Oe(Ne),u(` ${l??i}`))}}};var _e={};D(_e,{clearScreenSeq:()=>pt,enterAlternateScreen:()=>at,exitAlternateScreen:()=>lt,getTerminalSize:()=>dt,hideCursorSeq:()=>ut,showCursorSeq:()=>ct});var at=()=>"\x1B[?1049h",lt=()=>"\x1B[?1049l",ut=()=>"\x1B[?25l",ct=()=>"\x1B[?25h",pt=()=>"\x1B[2J\x1B[H",dt=()=>{try{let{columns:e,rows:t}=b.process.consoleSize();return{cols:e,rows:t}}catch{return{cols:80,rows:24}}};var ce={};D(ce,{bgBlue:()=>yt,bgGreen:()=>ft,bold:()=>mt,cyan:()=>we,dim:()=>ae,green:()=>le,inverse:()=>Ce,moveTo:()=>w,red:()=>xe,reset:()=>ue,stripAnsi:()=>ve,truncate:()=>j,visibleLength:()=>W,white:()=>ht,yellow:()=>be});var w=(e,t)=>`\x1B[${e};${t}H`,mt=e=>`\x1B[1m${e}\x1B[22m`,ae=e=>`\x1B[2m${e}\x1B[22m`,le=e=>`\x1B[32m${e}\x1B[39m`,be=e=>`\x1B[33m${e}\x1B[39m`,xe=e=>`\x1B[31m${e}\x1B[39m`,we=e=>`\x1B[36m${e}\x1B[39m`,ht=e=>`\x1B[37m${e}\x1B[39m`,ft=e=>`\x1B[42m${e}\x1B[49m`,yt=e=>`\x1B[44m${e}\x1B[49m`,Ce=e=>`\x1B[7m${e}\x1B[27m`,ue=()=>"\x1B[0m",gt=/\x1b\[[0-9;]*[a-zA-Z]/g,ve=e=>e.replace(gt,""),W=e=>ve(e).length,j=(e,t)=>{if(ve(e).length<=t)return e;let s=0,n=0,i=e;for(;n<i.length&&s<t-1;){if(i[n]==="\x1B"){let o=i.indexOf("m",n);if(o!==-1){n=o+1;continue}}s++,n++}return i.slice(0,n)+"\u2026"+ue()};var Ge={};D(Ge,{calculateLayout:()=>bt});var bt=(e,t,r)=>{let s=r.leftWidth<=1?Math.floor(e*r.leftWidth):Math.min(Math.floor(r.leftWidth),e),n=e-s,i=t-1,o=r.rightTopHeight<=1?Math.floor(i*r.rightTopHeight):Math.min(Math.floor(r.rightTopHeight),i),a=i-o;return{left:{id:"left",x:1,y:1,width:s,height:i},rightTop:{id:"rightTop",x:s+1,y:1,width:n,height:o},rightBottom:{id:"rightBottom",x:s+1,y:o+1,width:n,height:a},statusBar:{id:"statusBar",x:1,y:t,width:e,height:1}}};var $e={};D($e,{nextSelectableIndex:()=>wt,renderList:()=>Ct});var xt=(e,t)=>{switch(t){case"green":return le(e);case"yellow":return be(e);case"red":return xe(e);case"cyan":return we(e);case"dim":return ae(e);default:return e}},wt=(e,t,r)=>{let s=r==="up"?-1:1,n=t+s;for(;n>=0&&n<e.length;){if(e[n].selectable!==!1)return n;n+=s}return t},Ct=(e,t,r)=>{let s=[],n=r.width-2,i=r.height-2,o=0;t>=i&&(o=t-i+1);for(let a=0;a<i;a++){let p=o+a,c=r.y+1+a;if(p>=e.length){s.push(w(c,r.x+1)+" ".repeat(n));continue}let l=e[p],m=l.selectable!==!1,y=p===t&&m,v=l.active?le("\u25CF"):y?"\u25B8":" ",te=l.badge!==void 0?" "+xt(`[${l.badge}]`,l.badgeColor??"dim"):"",$=l.dimmed?ae(l.label):l.label,de=` ${v} ${$}${te}`,me=j(de,n),ke=Math.max(0,n-W(me));y?s.push(w(c,r.x+1)+Ce(me+" ".repeat(ke))):s.push(w(c,r.x+1)+me+" ".repeat(ke))}return s.join("")};var X=()=>({char:" ",fg:-1,bg:-1,fgRGB:null,bgRGB:null,bold:!1,dim:!1,italic:!1,underline:!1,inverse:!1}),pe=(e,t)=>{let r=[];for(let s=0;s<e;s++){let n=[];for(let i=0;i<t;i++)n.push(X());r.push(n)}return r},z=e=>{let t=[];for(let r=0;r<e;r++)t.push(X());return t},Y=class{#e;#t;#r;#i=null;#o=0;#n;#s=new Set;constructor(t,r){this.#e=t,this.#t=r,this.#r=pe(t,r),this.#n=t-1}get rows(){return this.#e}get cols(){return this.#t}getCell(t,r){return t<0||t>=this.#e||r<0||r>=this.#t?X():this.#r[t][r]}setCell(t,r,s,n){t<0||t>=this.#e||r<0||r>=this.#t||(this.#r[t][r]={char:n,fg:s.fg,bg:s.bg,fgRGB:s.fgRGB,bgRGB:s.bgRGB,bold:s.bold,dim:s.dim,italic:s.italic,underline:s.underline,inverse:s.inverse},this.#s.add(t))}scrollUp(t=1){for(let r=0;r<t;r++)this.#r.splice(this.#o,1),this.#r.splice(this.#n,0,z(this.#t));for(let r=this.#o;r<=this.#n;r++)this.#s.add(r)}scrollDown(t=1){for(let r=0;r<t;r++)this.#r.splice(this.#n,1),this.#r.splice(this.#o,0,z(this.#t));for(let r=this.#o;r<=this.#n;r++)this.#s.add(r)}setScrollRegion(t,r){this.#o=Math.max(0,t),this.#n=Math.min(this.#e-1,r)}insertLines(t,r){for(let s=0;s<t;s++)this.#r.splice(this.#n,1),this.#r.splice(r,0,z(this.#t));for(let s=r;s<=this.#n;s++)this.#s.add(s)}deleteLines(t,r){for(let s=0;s<t;s++)this.#r.splice(r,1),this.#r.splice(this.#n,0,z(this.#t));for(let s=r;s<=this.#n;s++)this.#s.add(s)}clearLine(t,r){if(t<0||t>=this.#e)return;let s=this.#r[t];if(r===2)for(let n=0;n<this.#t;n++)s[n]=X();this.#s.add(t)}clearLineRange(t,r,s){if(t<0||t>=this.#e)return;let n=this.#r[t];for(let i=r;i<=Math.min(s,this.#t-1);i++)n[i]=X();this.#s.add(t)}clearDisplay(t,r,s){if(t===0){this.clearLineRange(r,s,this.#t-1);for(let n=r+1;n<this.#e;n++)this.clearLine(n,2)}else if(t===1){for(let n=0;n<r;n++)this.clearLine(n,2);this.clearLineRange(r,0,s)}else{this.#r=pe(this.#e,this.#t);for(let n=0;n<this.#e;n++)this.#s.add(n)}}enterAlternateScreen(){this.#i=this.#r,this.#r=pe(this.#e,this.#t);for(let t=0;t<this.#e;t++)this.#s.add(t)}exitAlternateScreen(){if(this.#i!==null){this.#r=this.#i,this.#i=null;for(let t=0;t<this.#e;t++)this.#s.add(t)}}resize(t,r){let s=pe(t,r),n=Math.min(t,this.#e),i=Math.min(r,this.#t);for(let o=0;o<n;o++)for(let a=0;a<i;a++)s[o][a]=this.#r[o][a];this.#e=t,this.#t=r,this.#r=s,this.#n=t-1;for(let o=0;o<t;o++)this.#s.add(o)}getLine(t){return t<0||t>=this.#e?z(this.#t):this.#r[t]}getGrid(){return this.#r}getDirtyLines(){return this.#s}clearDirty(){this.#s.clear()}markAllDirty(){for(let t=0;t<this.#e;t++)this.#s.add(t)}markLineDirty(t){t>=0&&t<this.#e&&this.#s.add(t)}};var J=class{row=0;col=0;visible=!0;#e=0;#t=0;moveTo(t,r){this.row=t,this.col=r}moveUp(t=1){this.row=Math.max(0,this.row-t)}moveDown(t=1){this.row+=t}moveForward(t=1){this.col+=t}moveBack(t=1){this.col=Math.max(0,this.col-t)}moveToColumn(t){this.col=t}save(){this.#e=this.row,this.#t=this.col}restore(){this.row=this.#e,this.col=this.#t}clamp(t,r){this.row=Math.max(0,Math.min(this.row,t-1)),this.col=Math.max(0,Math.min(this.col,r-1))}};var Z=()=>({fg:-1,bg:-1,fgRGB:null,bgRGB:null,bold:!1,dim:!1,italic:!1,underline:!1,inverse:!1}),Te=(e,t)=>{let r={...t},s=0;for(;s<e.length;){let n=e[s];switch(n){case 0:Object.assign(r,Z());break;case 1:r.bold=!0;break;case 2:r.dim=!0;break;case 3:r.italic=!0;break;case 4:r.underline=!0;break;case 7:r.inverse=!0;break;case 22:r.bold=!1,r.dim=!1;break;case 23:r.italic=!1;break;case 24:r.underline=!1;break;case 27:r.inverse=!1;break;case 30:case 31:case 32:case 33:case 34:case 35:case 36:case 37:r.fg=n-30;break;case 39:r.fg=-1;break;case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:r.bg=n-40;break;case 49:r.bg=-1;break;case 90:case 91:case 92:case 93:case 94:case 95:case 96:case 97:r.fg=n-90+8;break;case 100:case 101:case 102:case 103:case 104:case 105:case 106:case 107:r.bg=n-100+8;break;case 38:s+1<e.length&&e[s+1]===5&&s+2<e.length?(r.fg=e[s+2],r.fgRGB=null,s+=2):s+1<e.length&&e[s+1]===2&&s+4<e.length&&(r.fgRGB={r:e[s+2],g:e[s+3],b:e[s+4]},r.fg=-1,s+=4);break;case 48:s+1<e.length&&e[s+1]===5&&s+2<e.length?(r.bg=e[s+2],r.bgRGB=null,s+=2):s+1<e.length&&e[s+1]===2&&s+4<e.length&&(r.bgRGB={r:e[s+2],g:e[s+3],b:e[s+4]},r.bg=-1,s+=4);break}s++}return r};var Q=class{#e="GROUND";#t="";#r="";#i="";feed(t){let r=[],s=()=>{this.#i.length>0&&(r.push({type:"text",text:this.#i}),this.#i="")};for(let n=0;n<t.length;n++){let i=t[n],o=i.charCodeAt(0);switch(this.#e){case"GROUND":i==="\x1B"?(s(),this.#e="ESC"):o<32&&o!==27?(s(),r.push({type:"control",code:o})):this.#i+=i;break;case"ESC":i==="["?(this.#e="CSI_PARAM",this.#t=""):i==="]"?(this.#e="OSC",this.#r=""):(r.push({type:"esc",command:i}),this.#e="GROUND");break;case"CSI_PARAM":if(o>=48&&o<=63||i===";"||i==="?")this.#t+=i;else if(o>=64&&o<=126){let a=this.#t.replace(/^\?/,""),p=this.#t.startsWith("?"),c=a.length>0?a.split(";").map(m=>{let y=parseInt(m,10);return isNaN(y)?0:y}):[],l=(p?"?":"")+i;r.push({type:"csi",command:l,params:c}),this.#e="GROUND"}else this.#t+=i;break;case"OSC":if(i==="\x07"||i==="\\"&&this.#r.endsWith("\x1B")){let a=i==="\\"?this.#r.slice(0,-1):this.#r,p=a.indexOf(";"),c=p>=0?parseInt(a.slice(0,p),10):0,l=p>=0?a.slice(p+1):a;r.push({type:"osc",command:isNaN(c)?0:c,data:l}),this.#e="GROUND"}else this.#r+=i;break}}return s(),r}};var ee=class{screen;cursor;#e;#t;constructor(t,r){this.screen=new Y(t,r),this.cursor=new J,this.#e=new Q,this.#t=Z()}write(t){let r=this.#e.feed(t);for(let s of r)switch(s.type){case"text":this.#r(s.text);break;case"csi":this.#o(s.command,s.params);break;case"esc":this.#n(s.command);break;case"control":this.#i(s.code);break;case"osc":break}}resize(t,r){this.screen.resize(t,r),this.cursor.clamp(t,r)}getScreen(){return this.screen}getCursor(){return this.cursor}#r(t){for(let r of t)this.cursor.col>=this.screen.cols&&(this.cursor.col=0,this.cursor.row++,this.cursor.row>=this.screen.rows&&(this.screen.scrollUp(),this.cursor.row=this.screen.rows-1)),this.screen.setCell(this.cursor.row,this.cursor.col,this.#t,r),this.cursor.col++}#i(t){switch(t){case 13:this.cursor.col=0;break;case 10:this.cursor.row++,this.cursor.row>=this.screen.rows&&(this.screen.scrollUp(),this.cursor.row=this.screen.rows-1);break;case 9:this.cursor.col=Math.min(this.screen.cols-1,(Math.floor(this.cursor.col/8)+1)*8);break;case 8:this.cursor.moveBack();break;case 7:break}}#o(t,r){let s=r[0]??0,n=r[1]??0,i=s||1;switch(t){case"A":this.cursor.moveUp(i);break;case"B":this.cursor.moveDown(i);break;case"C":this.cursor.moveForward(i);break;case"D":this.cursor.moveBack(i);break;case"H":case"f":this.cursor.moveTo((s||1)-1,(n||1)-1);break;case"G":this.cursor.moveToColumn((s||1)-1);break;case"d":this.cursor.moveTo((s||1)-1,this.cursor.col);break;case"J":this.screen.clearDisplay(s,this.cursor.row,this.cursor.col);break;case"K":s===0?this.screen.clearLineRange(this.cursor.row,this.cursor.col,this.screen.cols-1):s===1?this.screen.clearLineRange(this.cursor.row,0,this.cursor.col):this.screen.clearLine(this.cursor.row,2);break;case"m":this.#t=Te(r.length>0?r:[0],this.#t);break;case"S":this.screen.scrollUp(i);break;case"T":this.screen.scrollDown(i);break;case"L":this.screen.insertLines(i,this.cursor.row);break;case"M":this.screen.deleteLines(i,this.cursor.row);break;case"s":this.cursor.save();break;case"u":this.cursor.restore();break;case"r":this.screen.setScrollRegion((s||1)-1,(n||this.screen.rows)-1);break;case"?h":s===25&&(this.cursor.visible=!0),s===1049&&this.screen.enterAlternateScreen();break;case"?l":s===25&&(this.cursor.visible=!1),s===1049&&this.screen.exitAlternateScreen();break}this.cursor.clamp(this.screen.rows,this.screen.cols)}#n(t){switch(t){case"7":this.cursor.save();break;case"8":this.cursor.restore();break;case"M":this.cursor.row===0?this.screen.scrollDown():this.cursor.moveUp();break;case"c":this.screen.clearDisplay(2,0,0),this.cursor.moveTo(0,0),this.#t=Z();break}}};var kt=e=>{let t=[];return e.bold&&t.push(1),e.dim&&t.push(2),e.italic&&t.push(3),e.underline&&t.push(4),e.fgRGB!==null?t.push(38,2,e.fgRGB.r,e.fgRGB.g,e.fgRGB.b):e.fg>=0&&e.fg<8?t.push(30+e.fg):e.fg>=8&&e.fg<16?t.push(90+(e.fg-8)):e.fg>=16&&t.push(38,5,e.fg),t.length===0?"":`\x1B[${t.join(";")}m`},At=e=>e.fg===-1&&e.fgRGB===null&&!e.bold&&!e.dim&&!e.italic&&!e.underline,Se=(e,t,r,s)=>{s!==void 0&&s.prevCursorRow>=0&&s.prevCursorRow<e.rows&&e.markLineDirty(s.prevCursorRow),t.visible&&t.row>=0&&t.row<e.rows&&e.markLineDirty(t.row);let n=[],i=e.getDirtyLines(),o=r.fullRedraw===!0||i.size>=r.height,a=Math.min(r.height,e.rows),p=Math.min(r.width,e.cols);for(let c=0;c<a;c++){if(!o&&!i.has(c))continue;n.push(`\x1B[${r.offsetRow+c};${r.offsetCol}H`);let l=e.getLine(c),m=!1,y=0;for(;y<p;y++){let v=y<l.length?l[y]:void 0;if(t.visible&&c===t.row&&y===t.col)m&&(n.push("\x1B[0m"),m=!1),n.push("\x1B[7m"),n.push(v?.char??" "),n.push("\x1B[27m");else if(v===void 0||At(v))m&&(n.push("\x1B[0m"),m=!1),n.push(v?.char??" ");else{let $=kt(v);n.push($),m=!0,n.push(v.char)}}m&&n.push("\x1B[0m")}return s!==void 0&&(s.prevCursorRow=t.row,s.prevCursorCol=t.col),e.clearDirty(),n.join("")};var Re=class{#e;#t=!1;constructor(t,r){this.#e=new ee(t,r)}write(t){this.#e.write(t),this.#t=!0}render(t,r=!1){let s={offsetRow:t.y+1,offsetCol:t.x+1,width:t.width-2,height:t.height-2,fullRedraw:r};return this.#t=!1,Se(this.#e.getScreen(),this.#e.getCursor(),s)}resize(t,r){this.#e.resize(t,r),this.#t=!0}get dirty(){return this.#t}clearDirty(){this.#t=!1}get terminal(){return this.#e}};var Ve={};D(Ve,{drawBox:()=>Ue,fillBox:()=>Pt});var Et={single:{tl:"\u250C",tr:"\u2510",bl:"\u2514",br:"\u2518",h:"\u2500",v:"\u2502"},double:{tl:"\u2554",tr:"\u2557",bl:"\u255A",br:"\u255D",h:"\u2550",v:"\u2551"},rounded:{tl:"\u256D",tr:"\u256E",bl:"\u2570",br:"\u256F",h:"\u2500",v:"\u2502"}},Ue=e=>{let t=e.borderStyle??"single",r=Et[t],s=e.width-2,n=[],i=r.tl;if(e.title!==void 0){let o=` ${e.title} `;i+=o+r.h.repeat(Math.max(0,s-o.length))}else i+=r.h.repeat(s);if(i+=r.tr,n.push(w(e.y,e.x)+i),e.skipInterior===!0)for(let o=1;o<e.height-1;o++)n.push(w(e.y+o,e.x)+r.v+w(e.y+o,e.x+e.width-1)+r.v);else for(let o=1;o<e.height-1;o++)n.push(w(e.y+o,e.x)+r.v+ue()+" ".repeat(s)+r.v);return n.push(w(e.y+e.height-1,e.x)+r.bl+r.h.repeat(s)+r.br),n.join("")},Pt=(e,t)=>{let r=Ue(e),s=e.width-2,n=e.height-2,i=[];for(let o=0;o<n;o++){let a=o<t.length?t[o]:"",p=j(a??"",s),c=Math.max(0,s-W(p));i.push(w(e.y+1+o,e.x+1)+p+" ".repeat(c))}return r+i.join("")};export{Ke as a,Fe as b,Pe as c,P as d,ze as e,Xe as f,Ye as g,Je as h,Ze as i,Qe as j,et as k,tt as l,rt as m,st as n,ot as o,_e as p,ce as q,Ve as r,Ge as s,$e as t,Re as u};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import{a as b}from"./chunk-2X2U2VC5.js";import{d as y}from"./chunk-
|
|
1
|
+
import{a as b}from"./chunk-2X2U2VC5.js";import{d as y}from"./chunk-AQWB2PVR.js";import{b as n}from"./chunk-RMCTOOQL.js";var S="<!-- noskills:start -->",g="<!-- noskills:end -->",Y=(e,t,s="npx eser noskills")=>{let o=[S,"## noskills orchestrator","","This project uses noskills for state-driven orchestration.","Do NOT read `.eser/rules/`, `.eser/specs/`, or concern files directly.","noskills gives you exactly what you need via JSON output.","","### Protocol","",` ${s} spec <name> next # get current instruction`,` ${s} spec <name> next --answer="your response" # submit result and advance`,"","Every noskills command that operates on a spec MUST include `spec <name>`.","Never omit it. Use `"+s+" spec list` to see available specs.","","### Why noskills calls matter","","noskills is not a form to fill out. It is a live state machine that the user","watches in real-time. Every `"+s+" spec <name> next --answer` call:","","- Updates the spec file on disk (the user sees it change)","- Updates the terminal dashboard if `noskills watch` is running","- Advances the state machine to the next phase","- Records the decision permanently in the project history","","When you batch-submit answers or backfill discovery responses yourself,","the user sees nothing happening \u2014 then suddenly everything jumps forward.","This defeats the purpose.","","Call noskills ONCE per interaction. Ask the user ONE question. Wait for","their answer. Submit it. Ask the next. The user is watching every step.","Do NOT pre-fill answers. Do NOT batch multiple answers. Do NOT answer","discovery questions yourself \u2014 the user's input is the data.","","### When to call noskills next","",`You MUST call \`${s} next\` in these situations:`,"","1. At the **START** of every conversation (first thing you do)","2. **BEFORE** creating or modifying any file (to verify you have an active task)","3. **AFTER** completing a logical unit of work (to report progress)","4. When you encounter a **DECISION** that affects architecture or scope","5. When you are **UNSURE** what to do next","","NEVER proceed with implementation without checking noskills first.","NEVER make architectural decisions independently \u2014 noskills routes them to the user."];if((t?.allowGit??!1)||o.push("","### Git is read-only","","You MUST NOT run git write commands: commit, add, push, checkout, stash,","reset, merge, rebase, cherry-pick. The user controls git. You control files.","You MAY read from git: log, diff, status, show, blame."),o.push("","### Interactive choices","","When noskills output contains `interactiveOptions`, you MUST present them","using the AskUserQuestion tool. NEVER present options in prose.","","This is not optional. If you ask a question without AskUserQuestion when","interactiveOptions are present, you are violating protocol.","","Pass interactiveOptions as the `options` array in AskUserQuestion.","Use the `commandMap` to resolve the user's selection to a CLI command.","","### Convention discovery","","When you notice a recurring pattern, receive a correction, or discover","a project quirk during any phase:","",'1. Ask: "Should this be a permanent rule?"',`2. If yes: \`${s} rule add "description" --phases=EXECUTING\``,"3. If just this spec: note it and move on","","Corrections are learnings. Capture them as rules so they compound.","Every session should leave the project's rule set slightly better.","Never write to `.eser/rules/` directly.","","### Creating specs","","When the user describes what they want to build, create a spec immediately:",`\`${s} spec new "user's description here"\``,"","The name is auto-generated from the description. Encourage the user to share","as much context as possible \u2014 detailed requirements produce better discovery.","Do NOT ask for a 'short slug' \u2014 just take what the user gives you and create","the spec. A one-liner, meeting notes, task list, or full requirements doc all work.","","### Pre-discovery research","","When starting a new spec, noskills may flag technologies that need","research. Before asking discovery questions, search for current versions","and API status of flagged technologies. Report findings to the user.","Your training data may be outdated \u2014 always verify.","","### Plan-based discovery","","When a spec is created with --from-plan, the first discovery output includes","the plan content. Read it, extract answers for all 6 questions, present them","for user confirmation. The plan is a starting point, not the final answer.","","### Discovery modes","","noskills offers 5 discovery modes selected at the start of each spec:","- full: Standard 6 questions (default)","- validate: Challenge the user's existing plan","- technical-depth: Focus on architecture and integration","- ship-fast: Minimum viable scope","- explore: Think bigger, find opportunities","","### Premise challenge","","After mode selection, challenge 2-4 premises from the spec description.","Present each premise for the user to agree/disagree. Submit as JSON.","","### Alternatives generation","","Before spec draft, propose 2-3 implementation approaches.","User picks one or skips. The selected approach shapes the spec.","","### AI slop prevention","","When implementing UI, avoid these generic AI-generated patterns:","- 3-column grids with icon circles (the most recognizable AI layout)","- Purple gradients, decorative blobs, wavy dividers","- Everything centered, uniform border-radius everywhere",'- Generic hero copy ("Welcome to...", "Unlock the power of...")',"- Cookie-cutter section rhythm","","Every UI element must feel intentional, not generated. If it looks like","every other AI-built site, iterate until it doesn't.","","### Spec splitting","","When noskills suggests splitting a spec, present the options and wait for the","user's decision. Never split a spec without explicit user approval.","","### Decision principle: Explicit > Clever","","You NEVER skip steps, bypass questions, or make assumptions on behalf of the user.","- Discovery questions \u2192 ask the user, don't answer yourself","- Classification \u2192 ask the user, don't infer","- Spec approval \u2192 ask the user, don't auto-approve","- Task refinement \u2192 ask the user, don't self-assign","- Rule promotion \u2192 ask the user, don't decide",`If you think something can be skipped, ASK "would you like to skip this?" \u2014 don't skip it.`,"","### Command execution","","When told to run a noskills command, execute it IMMEDIATELY. Do not explore,","research, read source code, or plan first. The command output contains all the","context you need. Exploring noskills internals wastes tokens and delays the user.","","### JSON output","","noskills returns JSON with a `phase` field and phase-specific instructions.","The `meta` block contains resume context - use it to orient yourself,","especially after compaction or at the start of a new session.","Follow the `instruction` field. Use `transition` commands to advance state.","","### Phase progress","","Every noskills output includes a roadmap showing the current phase.","Display it to the user. At critical transitions (approve, start execution),","noskills shows a gate with an explicit action. Present these prominently.","","### Code quality rules","","These rules apply during spec execution:","- After every file edit, run type-check and lint before reporting success","- Files over 500 LOC: read in chunks, never assume single read = full file","- If search returns few results, re-run narrower \u2014 assume truncation","- Re-read every file before and after editing","- Before refactoring large files, clean dead code first (separate commit)","","### Execution commitment","","Once a spec enters EXECUTING, complete it. Do not suggest mid-execution",'checkpoints, pauses, or "should we stop here?" questions.',"","noskills encourages small, meaningful specs defined during discovery.","If a spec is well-scoped, there is no reason to stop halfway \u2014 half-done","delivers nothing. If it feels too large mid-execution, that means","discovery should have split it. Finish this one, improve the next."),e.length>0){o.push("","### Active Rules","");for(let i of e)o.push(`- ${i}`)}return o.push(g),o.join(`
|
|
2
2
|
`)},x=async(e,t,s,o="npx eser noskills")=>{let i=`${e}/CLAUDE.md`,r=Y(t,s,o),a;try{a=await n.fs.readTextFile(i);let c=a.indexOf(S),l=a.indexOf(g);c!==-1&&l!==-1?a=a.slice(0,c)+r+a.slice(l+g.length):a=a.trimEnd()+`
|
|
3
3
|
|
|
4
4
|
`+r+`
|
|
5
5
|
`}catch{a=r+`
|
|
6
6
|
`}await n.fs.writeTextFile(i,a)};var J=e=>({hooks:{PreToolUse:[{matcher:"Write|Edit|MultiEdit|Bash",hooks:[{type:"command",command:`${e} invoke-hook pre-tool-use`,timeout:5}]}],PostToolUse:[{matcher:"Write|Edit|MultiEdit",hooks:[{type:"command",command:`${e} invoke-hook post-file-write`,timeout:3}]},{matcher:"Bash",hooks:[{type:"command",command:`${e} invoke-hook post-bash`,timeout:3}]}],Stop:[{hooks:[{type:"command",command:`${e} invoke-hook stop`,timeout:10}]}],SessionStart:[{hooks:[{type:"command",command:`${e} invoke-hook session-start`,timeout:5}]}]}}),R=async(e,t="npx eser@latest noskills")=>{let s=`${e}/.claude/settings.json`,o={};try{let a=await n.fs.readTextFile(s);o=JSON.parse(a)}catch{}let i=J(t),r={...o,...i};await n.fs.mkdir(`${e}/.claude`,{recursive:!0}),await n.fs.writeTextFile(s,JSON.stringify(r,null,2)+`
|
|
7
|
-
`)};var
|
|
7
|
+
`)};var V=async(e,t)=>{let s=`${e}/.claude/agents`;await n.fs.mkdir(s,{recursive:!0});let o=`---
|
|
8
8
|
name: noskills-executor
|
|
9
9
|
description: "Executes a single noskills task."
|
|
10
10
|
tools: Read, Edit, MultiEdit, Write, Bash, Grep, Glob, LS
|
|
@@ -59,7 +59,7 @@ When finished, provide a structured JSON summary:
|
|
|
59
59
|
\\\`\\\`\\\`
|
|
60
60
|
|
|
61
61
|
The orchestrator will use this report for the noskills status report.
|
|
62
|
-
`)},A={id:"claude-code",capabilities:{rules:!0,hooks:!0,agents:!0,specs:!1,mcp:!1,interaction:{hasAskUserTool:!0,optionPresentation:"tool",hasSubAgentDelegation:!0,subAgentMethod:"task"}},async syncRules(e,t){await x(e.root,e.rules,t,e.commandPrefix)},async syncHooks(e,t){await R(e.root,e.commandPrefix)},async syncAgents(e,t){await
|
|
62
|
+
`)},A={id:"claude-code",capabilities:{rules:!0,hooks:!0,agents:!0,specs:!1,mcp:!1,interaction:{hasAskUserTool:!0,optionPresentation:"tool",hasSubAgentDelegation:!0,subAgentMethod:"task"}},async syncRules(e,t){await x(e.root,e.rules,t,e.commandPrefix)},async syncHooks(e,t){await R(e.root,e.commandPrefix)},async syncAgents(e,t){await V(e.root,e.commandPrefix),await K(e.root,e.commandPrefix)}};var T=async(e,t,s="npx eser noskills")=>{let o=["# Generated by noskills \u2014 do not edit manually","","## noskills orchestrator","","This project uses noskills for state-driven orchestration.","Do NOT read `.eser/specs/` or `.eser/rules/` directly. noskills gives you what you need.","",`Run \`${s} next\` to get your current instruction.`,`Submit results with \`${s} next --answer="..."\``,"","## Why noskills calls matter","","noskills is not a form to fill out. It is a live state machine that the user","watches in real-time. Every `"+s+" next --answer` call:","","- Updates the spec file on disk (the user sees it change)","- Updates the terminal dashboard if `noskills watch` is running","- Advances the state machine to the next phase","- Records the decision permanently in the project history","","When you batch-submit answers or backfill discovery responses yourself,","the user sees nothing happening \u2014 then suddenly everything jumps forward.","This defeats the purpose.","","Call noskills ONCE per interaction. Ask the user ONE question. Wait for","their answer. Submit it. Ask the next. The user is watching every step.","Do NOT pre-fill answers. Do NOT batch multiple answers. Do NOT answer","discovery questions yourself \u2014 the user's input is the data.","","## When to call noskills next","","1. At the START of every conversation","2. BEFORE creating or modifying any file","3. AFTER completing a logical unit of work","4. When you encounter a DECISION that affects architecture","5. When you are UNSURE what to do next","","NEVER proceed with implementation without checking noskills first.","","## Interactive choices","","Present choices as numbered lists. Users select by number.","When interactiveOptions are present in noskills output, present each as a","numbered item with its label and description. Ask the user to pick a number.","","## Execution model","","Execute tasks sequentially in this context. Do not attempt to spawn sub-agents.",""];if(t.length>0){o.push("## Rules","");for(let i of t)o.push(`- ${i}`);o.push("")}await n.fs.writeTextFile(`${e}/.cursorrules`,o.join(`
|
|
63
63
|
`))};var C={id:"cursor",capabilities:{rules:!0,hooks:!1,agents:!1,specs:!1,mcp:!1,interaction:{hasAskUserTool:!1,optionPresentation:"prose",hasSubAgentDelegation:!1,subAgentMethod:"none"}},async syncRules(e){await T(e.root,e.rules,e.commandPrefix)}};var X=".kiro/steering",O=".kiro/settings",Z=".kiro/agents",ee=".kiro/specs",te="hooks.json",se="mcp.json",oe="noskills-protocol.md",ne="noskills-coaching.md",k="noskills-rules.md",N="conventions.md",ie="noskills-executor.json",re="noskills-verifier.json",ae=(e,t)=>{let s=["---","inclusion: always","---","","# noskills Protocol","","# Generated by noskills \u2014 do not edit manually","","## What is noskills","","This project uses noskills for state-driven orchestration.","Do NOT read `.eser/rules/`, `.eser/specs/`, or concern files directly.","noskills gives you exactly what you need via JSON output.","","## Protocol","",` ${e} spec <name> next # get current instruction`,` ${e} spec <name> next --answer="your response" # submit result and advance`,"","Every noskills command that operates on a spec MUST include `spec <name>`.",`Never omit it. Use \`${e} spec list\` to see available specs.`,"","## Why noskills calls matter","","noskills is not a form to fill out. It is a live state machine that the user","watches in real-time. Every `"+e+" next --answer` call:","","- Updates the spec file on disk (the user sees it change)","- Updates the terminal dashboard if `noskills watch` is running","- Advances the state machine to the next phase","- Records the decision permanently in the project history","","When you batch-submit answers or backfill discovery responses yourself,","the user sees nothing happening \u2014 then suddenly everything jumps forward.","This defeats the purpose.","","Call noskills ONCE per interaction. Ask the user ONE question. Wait for","their answer. Submit it. Ask the next. The user is watching every step.","Do NOT pre-fill answers. Do NOT batch multiple answers. Do NOT answer","discovery questions yourself \u2014 the user's input is the data.","","## When to call noskills next","",`You MUST call \`${e} next\` in these situations:`,"","1. At the **START** of every conversation (first thing you do)","2. **BEFORE** creating or modifying any file (to verify you have an active task)","3. **AFTER** completing a logical unit of work (to report progress)","4. When you encounter a **DECISION** that affects architecture or scope","5. When you are **UNSURE** what to do next","","NEVER proceed with implementation without checking noskills first.","NEVER make architectural decisions independently \u2014 noskills routes them to the user."];return(t?.allowGit??!1)||s.push("","## Git is read-only","","You MUST NOT run git write commands: commit, add, push, checkout, stash,","reset, merge, rebase, cherry-pick. The user controls git. You control files.","You MAY read from git: log, diff, status, show, blame."),s.push("","## Interactive choices","","Present choices as numbered lists. Users select by number.","When interactiveOptions are present in noskills output, present each as a","numbered item with its label and description. Ask the user to pick a number.","Use the `commandMap` to resolve the user's selection to a CLI command.","","## Decision principle: Explicit > Clever","","You NEVER skip steps, bypass questions, or make assumptions on behalf of the user.","- Discovery questions \u2192 ask the user, don't answer yourself","- Classification \u2192 ask the user, don't infer","- Spec approval \u2192 ask the user, don't auto-approve","- Task refinement \u2192 ask the user, don't self-assign","- Rule promotion \u2192 ask the user, don't decide",`If you think something can be skipped, ASK "would you like to skip this?" \u2014 don't skip it.`,"","## Command execution","","When told to run a noskills command, execute it IMMEDIATELY. Do not explore,","research, read source code, or plan first. The command output contains all the","context you need. Exploring noskills internals wastes tokens and delays the user.","","## JSON output","","noskills returns JSON with a `phase` field and phase-specific instructions.","The `meta` block contains resume context - use it to orient yourself,","especially after compaction or at the start of a new session.","Follow the `instruction` field. Use `transition` commands to advance state.",""),s.join(`
|
|
64
64
|
`)},ce=e=>["---","inclusion: auto","name: noskills-coaching",'description: "Guidance for noskills spec-driven development workflow, including convention discovery and rule promotion"',"---","","# noskills Coaching","","# Generated by noskills \u2014 do not edit manually","","## Convention discovery","","When you discover a pattern, receive a correction, or identify a recurring",'preference from the user, ask: "Should this be a permanent rule for this',`project, or just for this task?" If permanent, run: \`${e} rule add`,'"<description>"`. If just this task, note it and move on.',"Never write to `.eser/rules/` directly.","","## How to promote rules","","When a convention should be permanent, use the noskills CLI to register it:","",` ${e} rule add "<description of the rule>"`,"","This stores the rule in `.eser/rules/` and ensures it is synced to all","coding tools on the next `noskills sync`. Never edit `.eser/rules/` directly.",""].join(`
|
|
65
65
|
`),le=e=>{let t=["---","inclusion: always","---","","# noskills Rules","","# Generated by noskills \u2014 do not edit manually","","## Active Rules",""];for(let s of e)t.push(`- ${s}`);return t.push(""),t.join(`
|
|
@@ -91,20 +91,20 @@ The orchestrator will use this report for the noskills status report.
|
|
|
91
91
|
`),Me=e=>{let s=e.match(/^# Spec:\s*(.+)$/m)?.[1]?.trim()??"Untitled",o=new Map,i=e.split(/^## /m);for(let a of i){let c=a.indexOf(`
|
|
92
92
|
`);if(c===-1)continue;let l=a.slice(0,c).trim().toLowerCase(),u=a.slice(c+1).trim();o.set(l,u)}let r=a=>{for(let[c,l]of o)if(c.startsWith(a.toLowerCase()))return l;return""};return{title:s,concerns:r("concerns"),discoveryAnswers:r("discovery answers"),contributorGuide:r("contributor guide"),publicApi:r("public api"),outOfScope:r("out of scope"),tasks:r("tasks"),verification:r("verification")}},Fe=e=>{let t=["---",`name: ${e.title}`,`description: "noskills spec: ${e.title}"`,"---","",`# ${e.title}`,""];return e.discoveryAnswers&&t.push("## Overview","",e.discoveryAnswers,""),e.concerns&&t.push("## Concerns","",e.concerns,""),e.contributorGuide&&t.push("## Contributor Guide","",e.contributorGuide,""),e.publicApi&&t.push("## Public API","",e.publicApi,""),e.outOfScope&&t.push("## Out of Scope","",e.outOfScope,""),e.tasks&&t.push("## Tasks","",e.tasks,""),e.verification&&t.push("## Verification","",e.verification,""),t.join(`
|
|
93
93
|
`)},Pe=async e=>{try{return await n.fs.stat(e),!0}catch{return!1}},U={id:"opencode",capabilities:{rules:!0,hooks:!0,agents:!0,specs:!0,mcp:!0,interaction:{hasAskUserTool:!1,optionPresentation:"prose",hasSubAgentDelegation:!0,subAgentMethod:"delegation"}},async syncRules(e,t){await m(e,t)},async syncHooks(e,t){let s=`${e.root}/${Ce}`;await n.fs.mkdir(s,{recursive:!0}),await n.fs.writeTextFile(`${s}/noskills.ts`,$e(e.commandPrefix))},async syncAgents(e,t){let s=`${e.root}/${Oe}`;await n.fs.mkdir(s,{recursive:!0}),await n.fs.writeTextFile(`${s}/noskills-executor.md`,Ie(e.commandPrefix)),await n.fs.writeTextFile(`${s}/noskills-verifier.md`,De())},async syncSpecs(e,t){let s;try{s=await n.fs.readTextFile(t)}catch{return}if(s.trim()==="")return;let o=t.split("/"),i=o[o.length-2]??"unknown",r=Me(s),a=`${e.root}/${Ne}`;await n.fs.mkdir(a,{recursive:!0}),await n.fs.writeTextFile(`${a}/${i}.md`,Fe(r))},async syncMcp(e){let t=`${e.root}/${Ee}`,s={};if(await Pe(t))try{let c=await n.fs.readTextFile(t);s=JSON.parse(c)}catch{}let o=e.commandPrefix.split(/\s+/),i=o[0]??"npx",r=[...o.slice(1),"mcp-serve"],a={...s,mcp:{...s.mcp,noskills:{type:"local",command:i,args:r}}};await n.fs.writeTextFile(t,JSON.stringify(a,null,2)+`
|
|
94
|
-
`)}};var
|
|
94
|
+
`)}};var We=".codex",je="hooks.json",_e=".codex/agents",He=".codex/config.toml",Le=e=>({hooks:[{_noskills:!0,event:"SessionStart",command:`${e} invoke-hook session-start`,timeout:5e3},{_noskills:!0,event:"PreToolUse",command:`${e} invoke-hook pre-tool-use`,timeout:5e3},{_noskills:!0,event:"PostToolUse",command:`${e} invoke-hook post-file-write`,timeout:3e3},{_noskills:!0,event:"Stop",command:`${e} invoke-hook stop`,timeout:1e4}]}),Ye=e=>['name = "noskills-executor"','description = "Executes a single noskills task. Follows spec behavioral rules and reports structured results."','developer_instructions = """',["You are executing a single task from a noskills spec.","Your ONLY job is to complete the task described in the prompt.","Follow all behavioral rules provided in the prompt.","Do NOT start new tasks, explore unrelated code, or make architectural decisions.","If the task is too vague to execute, say so immediately.","","## Self-Verification","After completing the task, you MUST verify your own work before reporting:","1. Run type check: `deno check` on all modified files","2. Run test suite: `deno test` on the relevant test files","3. If type check or tests fail, fix the issues before reporting","","## Reporting","When finished, provide a structured JSON summary:",'{"completed": ["<item IDs done>"], "remaining": ["<item IDs not done>"],',' "blocked": ["<item IDs needing decisions>"], "filesModified": ["<paths>"],',' "verification": {"typeCheck": "pass|fail", "tests": "pass|fail"}}',"","Do NOT return raw test output \u2014 summarize it in the verification field.",`The orchestrator will submit this to \`${e} next --answer\` on your behalf.`].join(`
|
|
95
95
|
`),'"""',""].join(`
|
|
96
96
|
`),Ge=()=>['name = "noskills-verifier"',`description = "Independently verifies completed task work. Read-only. Never sees the executor's context."`,'developer_instructions = """',["You are verifying another agent's work. You have NO context about how it was done.","Read the changed files. Run the test suite. Check each acceptance criterion independently.","","For each acceptance criterion:","- PASS: with evidence \u2014 show the grep result, the test output, or the file content that proves it","- FAIL: with specific reason \u2014 what's missing, what's wrong, what doesn't match","","Be skeptical. Don't assume anything works \u2014 verify it yourself.","You CANNOT edit files. Read-only access only.","","## Verification Steps","1. Read each modified file and verify the changes are correct","2. Run type check: `deno check` on modified files","3. Run tests: `deno test` on relevant test files","4. Check each acceptance criterion against actual file contents","","## Report Format","When finished, provide a structured JSON summary:",'{"results": [{"id": "ac-1", "status": "PASS", "evidence": "..."},',' {"id": "ac-2", "status": "FAIL", "reason": "..."}]}',"","The orchestrator will use this report for the noskills status report."].join(`
|
|
97
97
|
`),'"""',""].join(`
|
|
98
98
|
`),Je=e=>{let t=e.split(/\s+/),s=t[0]??"npx",o=[...t.slice(1),"mcp-serve"].map(i=>`"${i}"`).join(", ");return`[mcp_servers.noskills]
|
|
99
99
|
command = "${s}"
|
|
100
100
|
args = [${o}]
|
|
101
|
-
`},
|
|
102
|
-
`)},async syncAgents(e,t){let s=`${e.root}/${_e}`;await n.fs.mkdir(s,{recursive:!0}),await n.fs.writeTextFile(`${s}/noskills-executor.toml`,Ye(e.commandPrefix)),await n.fs.writeTextFile(`${s}/noskills-verifier.toml`,Ge())},async syncMcp(e){let t=`${e.root}/${He}`;await n.fs.mkdir(`${e.root}/.codex`,{recursive:!0});let s="";if(await
|
|
101
|
+
`},qe=async e=>{try{return await n.fs.stat(e),!0}catch{return!1}},W={id:"codex",capabilities:{rules:!0,hooks:!0,agents:!0,specs:!1,mcp:!0,interaction:{hasAskUserTool:!1,optionPresentation:"prose",hasSubAgentDelegation:!0,subAgentMethod:"spawn"}},async syncRules(e,t){await m(e,t)},async syncHooks(e,t){let s=`${e.root}/${We}`,o=`${s}/${je}`;await n.fs.mkdir(s,{recursive:!0});let i=[];try{let l=await n.fs.readTextFile(o),u=JSON.parse(l);Array.isArray(u.hooks)&&(i=u.hooks)}catch{}let r=i.filter(l=>!l._noskills),a=Le(e.commandPrefix),c={hooks:[...r,...a.hooks]};await n.fs.writeTextFile(o,JSON.stringify(c,null,2)+`
|
|
102
|
+
`)},async syncAgents(e,t){let s=`${e.root}/${_e}`;await n.fs.mkdir(s,{recursive:!0}),await n.fs.writeTextFile(`${s}/noskills-executor.toml`,Ye(e.commandPrefix)),await n.fs.writeTextFile(`${s}/noskills-verifier.toml`,Ge())},async syncMcp(e){let t=`${e.root}/${He}`;await n.fs.mkdir(`${e.root}/.codex`,{recursive:!0});let s="";if(await qe(t))try{s=await n.fs.readTextFile(t)}catch{}let o=s.replace(/\[mcp_servers\.noskills\][\s\S]*?(?=\[|$)/,"").trimEnd(),i=Je(e.commandPrefix),r=o+(o.length>0?`
|
|
103
103
|
|
|
104
104
|
`:"")+i;await n.fs.writeTextFile(t,r)}};var Ke=".github/hooks",Be="noskills.json",ze=".github/agents",Qe=".copilot",Xe="mcp.json",Ze=e=>({version:1,hooks:{"noskills:sessionStart":{_noskills:!0,command:["bash","-c",`${e} invoke-hook session-start`],timeoutSec:5},"noskills:preToolUse":{_noskills:!0,command:["bash","-c",`${e} invoke-hook pre-tool-use`],timeoutSec:5},"noskills:postToolUse":{_noskills:!0,command:["bash","-c",`${e} invoke-hook post-file-write`],timeoutSec:3},"noskills:agentStop":{_noskills:!0,command:["bash","-c",`${e} invoke-hook stop`],timeoutSec:10}}}),et=e=>["---","name: noskills-executor",'description: "Executes a single noskills task. Follows spec behavioral rules and reports structured results."',"tools:"," - read"," - write"," - glob"," - grep"," - shell","---","","You are executing a single task from a noskills spec.","Your ONLY job is to complete the task described in the prompt.","Follow all behavioral rules provided in the prompt.","Do NOT start new tasks, explore unrelated code, or make architectural decisions.","If the task is too vague to execute, say so immediately.","","## Self-Verification","After completing the task, you MUST verify your own work before reporting:","1. Run type check: `deno check` on all modified files","2. Run test suite: `deno test` on the relevant test files","3. If type check or tests fail, fix the issues before reporting","","## Reporting","When finished, provide a structured JSON summary:","```json",'{"completed": ["<item IDs done>"], "remaining": ["<item IDs not done>"], "blocked": ["<item IDs needing decisions>"], "filesModified": ["<paths>"], "verification": {"typeCheck": "pass|fail", "tests": "pass|fail (N passed, M failed)"}}',"```","","Do NOT return raw test output \u2014 summarize it in the verification field.",`The orchestrator will submit this to \`${e} next --answer\` on your behalf.`,""].join(`
|
|
105
105
|
`),tt=()=>["---","name: noskills-verifier",`description: "Independently verifies completed task work. Read-only. Never sees the executor's context."`,"tools:"," - read"," - glob"," - grep"," - shell","---","","You are verifying another agent's work. You have NO context about how it was done.","Read the changed files. Run the test suite. Check each acceptance criterion independently.","","For each acceptance criterion:","- PASS: with evidence \u2014 show the grep result, the test output, or the file content that proves it","- FAIL: with specific reason \u2014 what's missing, what's wrong, what doesn't match","","Be skeptical. Don't assume anything works \u2014 verify it yourself.","You CANNOT edit files. Read-only access only.","","## Verification Steps","1. Read each modified file and verify the changes are correct","2. Run type check: `deno check` on modified files","3. Run tests: `deno test` on relevant test files","4. Check each acceptance criterion against actual file contents","","## Report Format","When finished, provide a structured JSON summary:","```json",'{"results": [{"id": "ac-1", "status": "PASS", "evidence": "..."}, {"id": "ac-2", "status": "FAIL", "reason": "..."}]}',"```","","The orchestrator will use this report for the noskills status report.",""].join(`
|
|
106
|
-
`),st=e=>{let t=e.split(/\s+/),s=t[0]??"npx",o=[...t.slice(1),"mcp-serve"];return{mcpServers:{noskills:{type:"local",command:s,args:o,tools:["*"]}}}},ot=async e=>{try{return await n.fs.stat(e),!0}catch{return!1}},
|
|
106
|
+
`),st=e=>{let t=e.split(/\s+/),s=t[0]??"npx",o=[...t.slice(1),"mcp-serve"];return{mcpServers:{noskills:{type:"local",command:s,args:o,tools:["*"]}}}},ot=async e=>{try{return await n.fs.stat(e),!0}catch{return!1}},j={id:"copilot-cli",capabilities:{rules:!0,hooks:!0,agents:!0,specs:!1,mcp:!0,interaction:{hasAskUserTool:!1,optionPresentation:"prose",hasSubAgentDelegation:!0,subAgentMethod:"fleet"}},async syncRules(e,t){await m(e,t),await f(e.root,e.rules,e.commandPrefix)},async syncHooks(e,t){let s=`${e.root}/${Ke}`,o=`${s}/${Be}`;await n.fs.mkdir(s,{recursive:!0});let i={};try{let l=await n.fs.readTextFile(o),u=JSON.parse(l);u.hooks!==void 0&&u.hooks!==null&&(i=u.hooks)}catch{}let r={};for(let[l,u]of Object.entries(i))u._noskills||(r[l]=u);let a=Ze(e.commandPrefix),c={version:1,hooks:{...r,...a.hooks}};await n.fs.writeTextFile(o,JSON.stringify(c,null,2)+`
|
|
107
107
|
`)},async syncAgents(e,t){let s=`${e.root}/${ze}`;await n.fs.mkdir(s,{recursive:!0}),await n.fs.writeTextFile(`${s}/noskills-executor.agent.md`,et(e.commandPrefix)),await n.fs.writeTextFile(`${s}/noskills-verifier.agent.md`,tt())},async syncMcp(e){let t=`${e.root}/${Qe}`,s=`${t}/${Xe}`;await n.fs.mkdir(t,{recursive:!0});let o={mcpServers:{}};if(await ot(s))try{let a=await n.fs.readTextFile(s),c=JSON.parse(a);c.mcpServers!==void 0&&c.mcpServers!==null&&(o=c)}catch{}let i=st(e.commandPrefix),r={...o,mcpServers:{...o.mcpServers,...i.mcpServers}};await n.fs.writeTextFile(s,JSON.stringify(r,null,2)+`
|
|
108
108
|
`)}};var it=e=>{let t=e.trim();if(!t.startsWith("---"))return{meta:{},body:t};let s=t.indexOf("---",3);if(s===-1)return{meta:{},body:t};let o=t.slice(3,s).trim(),i=t.slice(s+3).trim(),r={};for(let a of o.split(`
|
|
109
109
|
`)){let c=a.indexOf(":");if(c===-1)continue;let l=a.slice(0,c).trim(),u=a.slice(c+1).trim();if(u.startsWith("[")&&u.endsWith("]")){let d=u.slice(1,-1).split(",").map(p=>p.trim().replace(/^["']|["']$/g,"")).filter(p=>p.length>0);r[l]=d}else r[l]=u.replace(/^["']|["']$/g,"")}return{meta:r,body:i}},rt=async e=>{let t=`${e}/${y.rulesDir}`,s=[];try{for await(let o of n.fs.readDir(t))if(o.isFile&&(o.name.endsWith(".md")||o.name.endsWith(".txt"))){let i=await n.fs.readTextFile(`${t}/${o.name}`),{meta:r,body:a}=it(i),c=a.split(`
|
|
110
|
-
`)[0]??a;s.push({text:c,phases:Array.isArray(r.phases)?r.phases:void 0,appliesTo:Array.isArray(r.applies_to)?r.applies_to:void 0})}}catch{}return s},ft=(e,t,s)=>e.filter(o=>!(o.phases!==void 0&&o.phases.length>0&&!o.phases.includes(t)||o.appliesTo!==void 0&&o.appliesTo.length>0&&s!==void 0&&s.length>0&&!o.appliesTo.some(r=>{let a=r.startsWith("*.")?r.slice(1):null;return a!==null?s.some(c=>c.endsWith(a)):s.some(c=>c.includes(r.replace(/\*/g,"")))}))).map(o=>o.text),at=async e=>(await rt(e)).map(s=>s.text),H=[A,C,$,D,F,U,j
|
|
110
|
+
`)[0]??a;s.push({text:c,phases:Array.isArray(r.phases)?r.phases:void 0,appliesTo:Array.isArray(r.applies_to)?r.applies_to:void 0})}}catch{}return s},ft=(e,t,s)=>e.filter(o=>!(o.phases!==void 0&&o.phases.length>0&&!o.phases.includes(t)||o.appliesTo!==void 0&&o.appliesTo.length>0&&s!==void 0&&s.length>0&&!o.appliesTo.some(r=>{let a=r.startsWith("*.")?r.slice(1):null;return a!==null?s.some(c=>c.endsWith(a)):s.some(c=>c.includes(r.replace(/\*/g,"")))}))).map(o=>o.text),at=async e=>(await rt(e)).map(s=>s.text),H=[A,C,$,D,F,U,W,j],_={hasAskUserTool:!0,optionPresentation:"tool",hasSubAgentDelegation:!0,subAgentMethod:"task"},yt=e=>{let t=e[0];return t===void 0?_:H.find(o=>o.id===t)?.capabilities.interaction??_},gt=async(e,t,s)=>{let o=await at(e),i=[],r={allowGit:s?.allowGit??!1},a=s?.command??"npx eser@latest noskills";b(a);for(let c of t){let l=H.find(d=>d.id===c);if(l===void 0)continue;let u={root:e,rules:o,commandPrefix:a};if(await l.syncRules(u,r),l.capabilities.hooks&&l.syncHooks!==void 0&&await l.syncHooks(u,r),l.capabilities.agents&&l.syncAgents!==void 0&&await l.syncAgents(u,r),l.capabilities.specs&&l.syncSpecs!==void 0){let d=`${e}/${y.specsDir}`;try{for await(let p of n.fs.readDir(d))if(p.isDirectory){let L=`${d}/${p.name}/spec.md`;await l.syncSpecs(u,L)}}catch{}}l.capabilities.mcp&&l.syncMcp!==void 0&&await l.syncMcp(u),i.push(c)}return t.includes("claude-code")&&i.push("hooks"),i};export{rt as a,ft as b,at as c,yt as d,gt as e};
|