@trydecember/cli 0.4.16 → 0.4.17
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/dist/chunk-1w0ffpnp.js +1 -0
- package/dist/{chunk-jjfhy2x1.js → chunk-2kmt1zgn.js} +1 -1
- package/dist/{chunk-0x66zzs3.js → chunk-2v3whmk6.js} +2 -2
- package/dist/{chunk-qpm7em0z.js → chunk-30rph1jz.js} +1 -1
- package/dist/{chunk-yqe790kh.js → chunk-45h3ghy9.js} +1 -1
- package/dist/{chunk-16j5ajd9.js → chunk-6k0j49z8.js} +1 -1
- package/dist/{chunk-j77wv5z8.js → chunk-838g1q94.js} +1 -1
- package/dist/{chunk-b9mkrg3w.js → chunk-91d1p189.js} +2 -2
- package/dist/{chunk-p1bpqzpr.js → chunk-a9f9akac.js} +1 -1
- package/dist/{chunk-zdg7ye4q.js → chunk-eghr4f7v.js} +1 -1
- package/dist/{chunk-06m9rkf5.js → chunk-gh8x9zrw.js} +1 -1
- package/dist/chunk-hce06q17.js +1 -0
- package/dist/{chunk-6agwsmkh.js → chunk-jv16a9em.js} +1 -1
- package/dist/{chunk-v9qfg9qs.js → chunk-na0teb8x.js} +1 -1
- package/dist/{chunk-f7mf3a1w.js → chunk-nnsdn2kx.js} +2 -2
- package/dist/{chunk-zp7qwwbs.js → chunk-p7ypw1ek.js} +1 -1
- package/dist/{chunk-f0bms32h.js → chunk-r3xqtcj0.js} +2 -2
- package/dist/chunk-r9cwadte.js +1 -0
- package/dist/{chunk-a2ktpvbd.js → chunk-s6qwb256.js} +1 -1
- package/dist/{chunk-nzfg7x7p.js → chunk-s8xnygcc.js} +1 -1
- package/dist/chunk-tfm9hw72.js +1 -0
- package/dist/{chunk-9eqjzxmq.js → chunk-thj1c82c.js} +11 -11
- package/dist/{chunk-dzg63jm4.js → chunk-vw0a344g.js} +1 -1
- package/dist/{chunk-c1abe60q.js → chunk-w6v3r8wn.js} +1 -1
- package/dist/{chunk-f1htnt08.js → chunk-x72hwsq5.js} +1 -1
- package/dist/{chunk-hx3vcz8k.js → chunk-xmvf453q.js} +1 -1
- package/dist/{chunk-g0hrnzak.js → chunk-xy30xdh4.js} +1 -1
- package/dist/{chunk-fw9zbdny.js → chunk-y4exfe42.js} +1 -1
- package/dist/{chunk-8hrcfehw.js → chunk-z9q20rdk.js} +1 -1
- package/dist/december.js +8 -8
- package/package.json +1 -1
- package/dist/chunk-2d7a3axf.js +0 -1
- package/dist/chunk-8fp4jhg4.js +0 -1
- package/dist/chunk-jw9ezcf3.js +0 -1
- package/dist/chunk-ngdy60dw.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{lt,re,ne}from"./chunk-na0teb8x.js";import"./chunk-2v3whmk6.js";import"./chunk-xmvf453q.js";import"./chunk-r3xqtcj0.js";import"./chunk-f29e6jpz.js";export{lt as checkForLatestVersion,ne as clearVersionCheckCache,re as fetchLatestFromNpm};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_,B,tt,g,R,p,S,_e,Se,xe,oe,Te,ae}from"./chunk-
|
|
1
|
+
import{_,B,tt,g,R,p,S,_e,Se,xe,oe,Te,ae}from"./chunk-r3xqtcj0.js";import"./chunk-f29e6jpz.js";export{_ as MODEL_CATALOG,B as MODEL_CONTEXT_WINDOWS,S as anthropicProvider,oe as antigravityProvider,Te as codexResponsesProvider,xe as copilotProvider,_e as geminiProvider,ae as getDynamicEndpoint,tt as getModelContextWindow,R as getReasoningSupportType,p as openaiProvider,Se as openrouterProvider,g as supportsModelThinking};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"./chunk-f29e6jpz.js";import"./chunk-pm6vrdbq.js";import"./chunk-
|
|
1
|
+
import"./chunk-f29e6jpz.js";import"./chunk-pm6vrdbq.js";import"./chunk-r3xqtcj0.js";import{C}from"./chunk-vw0a344g.js";import{x}from"./chunk-a9f9akac.js";import P from"readline";var b={log:console.log,warn:console.warn,error:console.error,info:console.info};function J(){console.warn=()=>{},console.error=()=>{},console.log=()=>{},console.info=()=>{}}function A(){console.log=b.log,console.warn=b.warn,console.error=b.error,console.info=b.info}async function U(m,u){A();let{agent:o,stdin:h=process.stdin,stdout:y=process.stdout,stderr:d=process.stderr}=u;x(u.cwd);let s=Boolean(u.print),i=u.rpc!==void 0?Boolean(u.rpc):!s,l=Boolean(u.json)||i&&!s,a=(f)=>{if(y&&y.write)y.write(f)},p=(f)=>{if(d&&d.write)d.write(f)},r=(f)=>{a(JSON.stringify(f)+`
|
|
2
2
|
`)},g=!1,T,k;try{if(s){let e=(...t)=>{if(d&&d.write){let n=t.map((c)=>typeof c==="string"?c:JSON.stringify(c)).join(" ");d.write(n+`
|
|
3
3
|
`)}};console.log=e,console.info=e,console.warn=e,console.error=e}if(u.isAuthenticated===!1){if(l)r({type:"error",error:"Not authenticated"});else p("Error: Not authenticated. Please run `december login` or configure an API key (e.g. OPENAI_API_KEY, ANTHROPIC_API_KEY).\n");return{success:!1,error:"Not authenticated"}}let f=u.nonInteractive??Boolean(s||process.env.NON_INTERACTIVE||h===process.stdin&&!process.stdin.isTTY);k=P.createInterface({input:h,output:i||l||s?void 0:y,terminal:!1});let _=!1,I=(e)=>(_=!0,new Promise((t)=>{k.question(e,(n)=>{queueMicrotask(()=>{_=!1}),t(n)})}));if(!o.operations)o.operations={};if(!o.operations.ui)o.operations.ui={};o.operations.ui.askQuestion=(e)=>{let t=e[0];if(!s&&!i&&!l){if(a(`
|
|
4
4
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C,$e,X,st}from"./chunk-vw0a344g.js";import"./chunk-r3xqtcj0.js";import"./chunk-pm6vrdbq.js";import"./chunk-f29e6jpz.js";export{$e as AgentHarness,X as LspClient,C as runAgentLoop,st as runSideQuestion};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import"./chunk-f29e6jpz.js";import"./chunk-
|
|
1
|
+
import"./chunk-f29e6jpz.js";import"./chunk-r3xqtcj0.js";import"./chunk-xmvf453q.js";import{l,d,q,be,Ie,we}from"./chunk-2v3whmk6.js";import{A}from"./chunk-a9f9akac.js";async function I(p){let o=await l(),c=p?.provider?.toLowerCase().trim();if(c){let e=!1;if(o.subscriptions&&o.subscriptions[c])delete o.subscriptions[c],e=!0;if(o.providers&&o.providers[c])delete o.providers[c],e=!0;if(c==="december"&&o.decemberToken)delete o.decemberToken,delete o.email,e=!0;if(o.activeProvider===c)delete o.activeProvider,delete o.activeModel;if(await d(o),e)console.log(`Logged out of ${c} successfully. Stored credentials removed.`);else console.log(`No active credentials found for ${c}.`);return}delete o.decemberToken,delete o.email,o.providers={},o.subscriptions={},delete o.activeProvider,delete o.activeModel,await d(o),console.log("Logged out successfully. Stored credentials removed.")}async function D(p){let m=p?.provider?.toLowerCase().trim(),i=await l();if(m){let s=Ie(i,m);if(!s){console.error(`
|
|
2
2
|
\x1B[38;2;252;165;165mError:\x1B[0m Provider "${m}" is not configured.`),console.error(`Run \x1B[38;2;244;244;245mdecember login\x1B[0m, \x1B[38;2;244;244;245mdecember link <provider>\x1B[0m, or \x1B[38;2;244;244;245mdecember key <provider>\x1B[0m to configure it.
|
|
3
|
-
`),process.exitCode=1;return}let{config:u,model:g}=we(i,s);await d(u);let{fetchLiveProviderModels:n}=await import("./chunk-
|
|
3
|
+
`),process.exitCode=1;return}let{config:u,model:g}=we(i,s);await d(u);let{fetchLiveProviderModels:n}=await import("./chunk-y4exfe42.js");if(s.authPriority==="subscription"&&u.subscriptions?.[s.provider]){let h=u.subscriptions[s.provider];n(s.provider,h.accessToken,h.endpoint).catch(()=>{})}else if(s.authPriority==="byok"&&u.providers?.[s.provider])n(s.provider,u.providers[s.provider]).catch(()=>{});let f=q(s.provider);console.log(`
|
|
4
4
|
\x1B[38;2;110;231;183mSuccessfully switched active provider to ${f} (${s.authPriority}) with model: \x1B[38;2;244;244;245m${g}\x1B[0m!
|
|
5
5
|
`);return}let E=be(i);if(console.log(`
|
|
6
6
|
${"\x1B[38;2;135;178;244m"}✱${"\x1B[0m"} \x1B[38;2;244;244;245mDecember CLI Configured Providers\x1B[0m
|
|
@@ -9,11 +9,11 @@ ${"\x1B[38;2;135;178;244m"}✱${"\x1B[0m"} \x1B[38;2;244;244;245mDecember CLI C
|
|
|
9
9
|
\x1B[38;2;161;161;170mSwitch provider:\x1B[0m \x1B[38;2;110;231;183mdecember switch <provider>\x1B[0m
|
|
10
10
|
`)}async function W(p){if((p?.action||"status").toLowerCase().trim()==="import"){console.log(`
|
|
11
11
|
${"\x1B[38;2;135;178;244m"}✱${"\x1B[0m"} \x1B[38;2;244;244;245mScanning local environment for subscription credentials...\x1B[0m
|
|
12
|
-
`);let{importLocalSubscriptions:g}=await import("./chunk-
|
|
12
|
+
`);let{importLocalSubscriptions:g}=await import("./chunk-jv16a9em.js"),n=await g();if(n.imported.length===0){console.log(` ${"\x1B[38;2;253;224;71m"}ℹ No local subscription credentials found in standard CLI directories (~/.claude, ~/.codex, ~/.config/github-copilot, Google ADC).${"\x1B[0m"}`),console.log(` \x1B[38;2;161;161;170mRun \x1B[38;2;244;244;245mdecember login <provider>\x1B[38;2;161;161;170m to authenticate directly via OAuth.\x1B[0m
|
|
13
13
|
`);return}console.log(` \x1B[38;2;110;231;183mSuccessfully detected and imported ${n.imported.length} subscription credential(s):\x1B[0m
|
|
14
14
|
`);for(let[f,h]of Object.entries(n.bundles)){let R=h.subscriptionType?` (${h.subscriptionType})`:"",S=h.email||h.accountName?` - ${h.email||h.accountName}`:"";if(console.log(` • ${"\x1B[38;2;244;244;245m"}${f.toUpperCase()}${"\x1B[0m"}${R}${"\x1B[38;2;161;161;170m"}${S}${"\x1B[0m"}`),h.expiresAt){let v=new Date(h.expiresAt).toLocaleDateString();console.log(` ${"\x1B[38;2;161;161;170m"}↳ Expires: ${v}\x1B[0m`)}}console.log(`
|
|
15
15
|
\x1B[38;2;110;231;183mActive subscriptions are now available for agent execution!\x1B[0m
|
|
16
|
-
`);return}let m=await l(),{getAuthStatus:i}=await import("./chunk-
|
|
16
|
+
`);return}let m=await l(),{getAuthStatus:i}=await import("./chunk-30rph1jz.js"),E=await i();console.log(`
|
|
17
17
|
${"\x1B[38;2;135;178;244m"}✱${"\x1B[0m"} \x1B[38;2;244;244;245mDecember CLI Authentication & Subscription Status\x1B[0m
|
|
18
18
|
`);let s=m.subscriptions?Object.keys(m.subscriptions):[];if(console.log("\x1B[38;2;244;244;245mSubscriptions:\x1B[0m"),s.length>0)for(let g of s){let n=m.subscriptions[g],f=n.subscriptionType?` [${n.subscriptionType}]`:"",h=n.email||n.accountName?` (${n.email||n.accountName})`:"",R=n.expiresAt?n.expiresAt>Date.now()?"\x1B[38;2;110;231;183mValid\x1B[0m":"\x1B[38;2;253;224;71mExpired (will auto-refresh)\x1B[0m":"\x1B[38;2;110;231;183mActive\x1B[0m";console.log(` • ${"\x1B[38;2;244;244;245m"}${g.toUpperCase()}${"\x1B[0m"}${f}${h}: ${R}`)}else console.log(" \x1B[38;2;161;161;170mNo subscriptions configured.\x1B[0m (Run \x1B[38;2;244;244;245mdecember auth import\x1B[0m or \x1B[38;2;244;244;245mdecember login <provider>\x1B[0m)");console.log("");let u=m.providers?Object.keys(m.providers):[];if(console.log("\x1B[38;2;244;244;245mBYOK API Keys:\x1B[0m"),u.length>0)for(let g of u)console.log(` • ${"\x1B[38;2;244;244;245m"}${g.toUpperCase()}${"\x1B[0m"}`);else console.log(" \x1B[38;2;161;161;170mNo BYOK API keys saved in config.\x1B[0m");if(console.log(""),console.log("\x1B[38;2;244;244;245mDecember Cloud Wallet:\x1B[0m"),m.decemberToken)console.log(` • ${"\x1B[38;2;110;231;183m"}Connected${"\x1B[0m"} ${m.email?`(${m.email})`:""}`);else console.log(" \x1B[38;2;161;161;170mNot connected.\x1B[0m");console.log(""),console.log(`\x1B[38;2;244;244;245mActive Auth Priority:\x1B[0m \x1B[38;2;110;231;183m${m.authPriority||E.authPriority}\x1B[0m`),console.log(`\x1B[38;2;244;244;245mActive Provider:\x1B[0m \x1B[38;2;110;231;183m${m.activeProvider||"none"}\x1B[0m (Model: ${m.activeModel||"default"})
|
|
19
19
|
`)}async function N(p){let o=(p?.provider||"").toLowerCase().trim(),c="\x1B[38;2;135;178;244m",e="\x1B[38;2;110;231;183m",t="\x1B[38;2;244;244;245m",r="\x1B[0m";if(!o){console.log(`
|
|
@@ -24,34 +24,34 @@ Supported Providers:`),console.log(` • ${"\x1B[38;2;244;244;245m"}claude${"\x
|
|
|
24
24
|
${"\x1B[38;2;135;178;244m"}✱${"\x1B[0m"} \x1B[38;2;244;244;245mSave a BYOK (Bring Your Own Key) API Provider\x1B[0m`),console.log(`
|
|
25
25
|
Usage: \x1B[38;2;110;231;183mdecember key <provider> [api-key]\x1B[0m`),console.log(`
|
|
26
26
|
Examples:`),console.log(" december key openai sk-..."),console.log(" december key anthropic sk-ant-..."),console.log(" december key openrouter sk-or-..."),console.log(" december key deepseek sk-..."),console.log(" december key groq gsk_..."),console.log(" december key cerebras csk_..."),console.log(` december key sakana sk_...
|
|
27
|
-
`);return}let a=c;if(!a){let E=await import("node:readline/promises"),s=E.createInterface({input:process.stdin,output:process.stdout});a=(await s.question(`Enter API key for ${o.toUpperCase()}: `)).trim(),s.close()}if(!a){console.log("No API key provided. Operation cancelled.");return}let m=o.toLowerCase()==="deepgram",i=await l();if(i.providers=i.providers||{},i.providers[o]=a,!m){let{getDefaultModelForProvider:E}=await import("./chunk-
|
|
27
|
+
`);return}let a=c;if(!a){let E=await import("node:readline/promises"),s=E.createInterface({input:process.stdin,output:process.stdout});a=(await s.question(`Enter API key for ${o.toUpperCase()}: `)).trim(),s.close()}if(!a){console.log("No API key provided. Operation cancelled.");return}let m=o.toLowerCase()==="deepgram",i=await l();if(i.providers=i.providers||{},i.providers[o]=a,!m){let{getDefaultModelForProvider:E}=await import("./chunk-y4exfe42.js"),s=E(o);i.activeProvider=o,i.activeModel=s,i.authPriority="byok",await d(i);let{fetchLiveProviderModels:u}=await import("./chunk-y4exfe42.js");u(o,a).catch(()=>{}),console.log(`
|
|
28
28
|
\x1B[38;2;110;231;183mSuccessfully saved API key for ${o.toUpperCase()} (Model: ${s})!\x1B[0m
|
|
29
29
|
`)}else await d(i),console.log(`
|
|
30
30
|
\x1B[38;2;110;231;183mSuccessfully saved API key for DEEPGRAM (Live Voice Dictation)!\x1B[0m
|
|
31
|
-
`)}async function C(p){let{loadConfig:o,saveConfig:c}=await import("./chunk-
|
|
31
|
+
`)}async function C(p){let{loadConfig:o,saveConfig:c}=await import("./chunk-30rph1jz.js");if(p?.token){let i=p.token.trim();console.log(`
|
|
32
32
|
Validating December session token...`);let E=process.env.SERVER_URL||"https://api.trydecember.com";try{let u=await fetch(`${E}/api/v1/billing/overview`,{headers:{Authorization:`Bearer ${i}`},signal:AbortSignal.timeout(5000)});if(!u.ok&&u.status===401){console.error(`\x1B[31mError: Provided session token is invalid or expired.\x1B[0m
|
|
33
33
|
`);return}}catch{}let s=await o();s.decemberToken=i,s.authPriority="december",s.activeModel="december-auto",await c(s),console.log(`\x1B[32mSuccessfully logged in via December session token!\x1B[0m
|
|
34
|
-
`);return}let e=(p?.provider||"december").toLowerCase().trim();if(e==="copilot"||e==="github"||e==="claude"||e==="codex"||e==="chatgpt"||e==="openai"||e==="gemini"||e==="google"||e==="antigravity"){let{loginSubscription:i,formatSubscriptionDisplayName:E,formatSubscriptionSuccessMessage:s,formatSubscriptionCard:u}=await import("./chunk-
|
|
34
|
+
`);return}let e=(p?.provider||"december").toLowerCase().trim();if(e==="copilot"||e==="github"||e==="claude"||e==="codex"||e==="chatgpt"||e==="openai"||e==="gemini"||e==="google"||e==="antigravity"){let{loginSubscription:i,formatSubscriptionDisplayName:E,formatSubscriptionSuccessMessage:s,formatSubscriptionCard:u}=await import("./chunk-45h3ghy9.js"),g=E(e);console.log(`
|
|
35
35
|
Initiating subscription login for ${g}...`);let n=await i(e,(v,T)=>{if(console.log(`
|
|
36
36
|
Please open ${T} in your browser and enter code: ${v}
|
|
37
|
-
Waiting for authorization...`),e==="copilot"||e==="github")console.log("*(Note: Ensure your browser is signed into the GitHub account that owns your active Copilot subscription)*")}),f=await o();f.subscriptions=f.subscriptions||{},f.subscriptions[n.provider]=n,f.activeProvider=n.provider,f.authPriority="subscription",await c(f);let{fetchLiveProviderModels:h}=await import("./chunk-
|
|
37
|
+
Waiting for authorization...`),e==="copilot"||e==="github")console.log("*(Note: Ensure your browser is signed into the GitHub account that owns your active Copilot subscription)*")}),f=await o();f.subscriptions=f.subscriptions||{},f.subscriptions[n.provider]=n,f.activeProvider=n.provider,f.authPriority="subscription",await c(f);let{fetchLiveProviderModels:h}=await import("./chunk-y4exfe42.js");h(n.provider,n.accessToken,n.endpoint).catch(()=>{});let R="\x1B[38;2;110;231;183m",S="\x1B[0m";console.log(`
|
|
38
38
|
${R}${s(n.provider)}${S}`),console.log(u(n)),console.log();return}let t=await o();if(t.decemberToken){let i=t.email||"December user";if(process.stdin.isTTY){let E=await import("node:readline/promises"),s=E.createInterface({input:process.stdin,output:process.stdout}),u=(await s.question(`
|
|
39
39
|
You are already logged in as ${i}.
|
|
40
40
|
Do you want to switch to a different account? (y/n): `)).trim().toLowerCase();if(s.close(),u!=="y"&&u!=="yes"){console.log(`
|
|
41
41
|
Already logged in as ${i}. Keeping current session.
|
|
42
|
-
`);return}}}let{loginViaDeviceCode:r}=await import("./chunk-
|
|
42
|
+
`);return}}}let{loginViaDeviceCode:r}=await import("./chunk-w6v3r8wn.js"),{openUrl:b}=await import("./chunk-y11aydfy.js");console.log(`
|
|
43
43
|
Generating device code for December login...`);let a=null,m=()=>{if(a&&process.stdin.isTTY){process.stdin.removeListener("data",a),a=null;try{process.stdin.setRawMode(!1),process.stdin.pause()}catch{}}};try{let{token:i,email:E}=await r(void 0,(u,g)=>{let n=g.includes("?")?`${g}&code=${encodeURIComponent(u)}`:`${g}?code=${encodeURIComponent(u)}`;if(console.log(`
|
|
44
44
|
Confirm code: ${u}
|
|
45
45
|
Open URL: ${n}
|
|
46
46
|
|
|
47
47
|
Waiting for approval...`),process.stdin.isTTY)try{process.stdin.setRawMode(!0),process.stdin.resume(),a=(f)=>{let h=f.toString();if(h==="o"||h==="O")b(n).catch(()=>{});else if(h==="\x03")m(),process.exit(0)},process.stdin.on("data",a)}catch{}});m();let s=await o();if(s.decemberToken=i,E)s.email=E;s.authPriority="december",s.activeModel="december-auto",await c(s),console.log(`\x1B[32mSuccessfully logged in via device code!\x1B[0m
|
|
48
|
-
`)}catch(i){throw m(),i}}async function U(p){let{performCliUpdate:o}=await import("./chunk-
|
|
48
|
+
`)}catch(i){throw m(),i}}async function U(p){let{performCliUpdate:o}=await import("./chunk-z9q20rdk.js"),{TreeReporter:c}=await import("./chunk-szmhnbg9.js"),e=new c;console.log(""),e.step("checking December CLI for updates..."),e.space(),e.startSpinner("fetching latest release information...");let t=await o({currentVersion:A.version,force:p?.force,onResolvedVersion:(r)=>{if(e.stopSpinner(),e.item("current version",`v${r.currentVersion}`),r.targetVersion)e.item("latest version",`v${r.targetVersion}`);if(r.activeBinaryPath)e.item("active binary",r.activeBinaryPath);e.space()},onProgress:(r)=>{e.startSpinner(r)}});if(e.stopSpinner(),t.method==="source"){e.step("December CLI development build"),e.space(),e.tree("detected local source development repository."),e.tree("to rebuild or update your local dev build, run:"),e.tree("git pull && bun install && bun --cwd apps/cli run build"),e.space(),e.step("ready"),console.log("");return}if(t.method==="npx"){e.step("December CLI ephemeral build"),e.space(),e.tree("running via npx/bunx ephemeral execution."),e.tree("each invocation automatically pulls the latest version."),e.space(),e.step("ready"),console.log("");return}if(t.alreadyUpToDate){e.tree(`you are already using the latest version of December CLI (v${t.installedVersion||t.targetVersion}).`),e.tree("use december update --force to reinstall."),e.space(),e.step("nothing to update"),console.log("");return}if(t.success&&t.verified){if(e.step("updating December CLI..."),e.space(),t.targetVersion)e.item("updated to",`v${t.installedVersion||t.targetVersion}`);if(e.item("method",t.method),e.space(),e.success(`package successfully updated via ${t.method}`),t.collisionFixed&&t.cleanedBinaries&&t.cleanedBinaries.length>0){e.success(`aligned ${t.cleanedBinaries.length} older conflicting binary location(s)`);for(let r of t.cleanedBinaries)e.tree(`• cleaned: ${r}`)}if(t.shellHashNotice)e.space(),e.warn("shell cached previous binary path."),e.tree('run "hash -r" (bash) or "rehash" (zsh) or restart terminal.');e.space(),e.step("update complete"),e.space(),e.tree("run december to start your session"),e.space(),e.step("ready"),console.log("")}else{if(e.step("update attention needed"),e.space(),!t.verified&&t.shadowingBinary){if(e.warn("update completed, but active terminal still starts an older version!"),e.space(),e.item("installed version",`v${t.installedVersion||t.targetVersion} (${t.method})`),e.item("active in $path",`v${t.activeVersion||"older"} (${t.activeBinaryPath||t.shadowingBinary.path})`),e.space(),e.tree("reason: your shell resolves the older path before the newly updated location."),t.failedBinaries&&t.failedBinaries.some((r)=>r.needsSudo)){e.space(),e.warn("elevated permissions required to clean older binary:");for(let r of t.failedBinaries)if(r.needsSudo)e.tree(`sudo rm "${r.path}"`)}else e.space(),e.tree("to ensure your terminal uses the latest version:"),e.tree(`1. remove older binary: rm "${t.shadowingBinary.path}"`),e.tree("2. or rehash shell cache: hash -r (bash) or rehash (zsh)");e.space(),e.step("action required")}else if(t.isPermissionError)e.error("permission denied while installing global package"),e.space(),e.tree("try running with elevated permissions:"),e.tree(t.sudoCmd||t.manualCmd),e.space(),e.step("update failed");else e.error(`update failed via ${t.method}: ${t.error||"Unknown error"}`),e.space(),e.tree("try running manually:"),e.tree(t.manualCmd),e.space(),e.step("update failed");console.log(""),process.exitCode=1}}async function j(p){let{diagnoseBinaryCollisions:o,resolveAndCleanStaleBinaries:c}=await import("./chunk-x852gev0.js"),{getAuthStatus:e,loadConfig:t}=await import("./chunk-30rph1jz.js"),r="\x1B[38;2;135;178;244m",b="\x1B[38;2;110;231;183m",a="\x1B[38;2;253;224;71m",m="\x1B[38;2;252;165;165m",i="\x1B[38;2;244;244;245m",E="\x1B[38;2;161;161;170m",s="\x1B[0m";console.log(`
|
|
49
49
|
${"\x1B[38;2;135;178;244m"}✱${"\x1B[0m"} \x1B[38;2;244;244;245mDecember CLI Health & Environment Doctor\x1B[0m
|
|
50
50
|
`);let u=typeof process.isBun<"u"||process.versions.bun?"Bun":"Node.js",g=process.versions.bun||process.versions.node;console.log("\x1B[38;2;244;244;245mEnvironment & Runtime:\x1B[0m"),console.log(` • CLI Package Version: ${"\x1B[38;2;110;231;183m"}v${A.version}${"\x1B[0m"}`),console.log(` • Runtime: ${"\x1B[38;2;161;161;170m"}${u} v${g} (${process.platform}-${process.arch})${"\x1B[0m"}`),console.log(` • Process Executable: ${"\x1B[38;2;161;161;170m"}${process.execPath}${"\x1B[0m"}`),console.log(` • Executing Script: ${"\x1B[38;2;161;161;170m"}${process.argv[1]||"unknown"}${"\x1B[0m"}`),console.log(""),console.log("\x1B[38;2;244;244;245mInstalled Binaries & $PATH Precedence:\x1B[0m");let n=await o({argv1:process.argv[1]});if(n.allBinaries.length===0)console.log(` ${"\x1B[38;2;253;224;71m"}⚠ No standalone binaries found in standard PATH entries.${"\x1B[0m"}`);else for(let v of n.allBinaries){let T=v.isActive?"\x1B[38;2;110;231;183m[ACTIVE]\x1B[0m":"\x1B[38;2;253;224;71m[SHADOWED]\x1B[0m",x=v.version?`v${v.version}`:"unknown";if(console.log(` • ${T} ${"\x1B[38;2;244;244;245m"}${x}${"\x1B[0m"} (${v.manager}) -> ${"\x1B[38;2;161;161;170m"}${v.path}${"\x1B[0m"}`),v.isSymlink)console.log(` ${"\x1B[38;2;161;161;170m"}↳ points to: ${v.realPath}\x1B[0m`)}if(console.log(""),n.hasCollision)if(p?.fix){console.log(`${"\x1B[38;2;135;178;244m"}✱${"\x1B[0m"} \x1B[38;2;244;244;245mResolving binary collisions (--fix)...\x1B[0m`);let v=n.activeBinary||n.allBinaries[0];if(v){let{cleanedOrForwarded:T,failedBinaries:x}=await c(v,n.allBinaries);if(T.length>0)console.log(` \x1B[38;2;110;231;183mForwarded ${T.length} shadowed binary path(s) to primary active binary (${v.path}).\x1B[0m`),console.log(` ${"\x1B[38;2;253;224;71m"}ℹ Run "hash -r" (bash) or restart your terminal to apply.${"\x1B[0m"}
|
|
51
51
|
`);else if(x.length===0)console.log(` \x1B[38;2;110;231;183mAll binary links are already aligned.\x1B[0m
|
|
52
52
|
`);if(x.length>0){console.log(` \x1B[38;2;252;165;165mFailed to forward ${x.length} binary path(s) due to permissions:\x1B[0m`);for(let w of x)if(w.needsSudo)console.log(` ${"\x1B[38;2;253;224;71m"}• ${w.path} -> Run: sudo rm "${w.path}" (or sudo ln -sf "${v.path}" "${w.path}")\x1B[0m`);else console.log(` ${"\x1B[38;2;253;224;71m"}• ${w.path}: ${w.error}\x1B[0m`);console.log("")}}}else console.log(` ${"\x1B[38;2;253;224;71m"}⚠ Multiple installations detected!${"\x1B[0m"} \x1B[38;2;161;161;170mRun \x1B[38;2;244;244;245mdecember doctor --fix\x1B[38;2;161;161;170m to auto-align stale paths.\x1B[0m
|
|
53
53
|
`);else console.log(` \x1B[38;2;110;231;183mNo binary collisions detected. Clean single installation.\x1B[0m
|
|
54
|
-
`);let f=await t(),h=await e();console.log("\x1B[38;2;244;244;245mConfiguration & Authentication:\x1B[0m");let R=f.subscriptions?Object.keys(f.subscriptions).length:0;if(R>0){let v=Object.keys(f.subscriptions).join(", ");console.log(` • Subscriptions: ${"\x1B[38;2;110;231;183m"}${R} active${"\x1B[0m"} (${v})`)}else console.log(` • Subscriptions: ${"\x1B[38;2;161;161;170m"}None detected${"\x1B[0m"} (Run "december auth import")`);if(h.hasDecember)console.log(` • December Cloud: ${"\x1B[38;2;110;231;183m"}Connected${"\x1B[0m"} ${f.email?`(${f.email})`:""}`);else console.log(` • December Cloud: ${"\x1B[38;2;161;161;170m"}Not logged in${"\x1B[0m"} (Run "december login")`);let S=f.providers?Object.keys(f.providers).length:0;if(S>0)console.log(` • BYOK Providers: ${"\x1B[38;2;110;231;183m"}${S} configured${"\x1B[0m"} (Active: ${f.activeProvider||"none"}, Model: ${f.activeModel||"default"})`);else console.log(` • BYOK Providers: ${"\x1B[38;2;161;161;170m"}None configured${"\x1B[0m"}`);console.log(` • Auth Priority: ${"\x1B[38;2;161;161;170m"}${f.authPriority||h.authPriority}${"\x1B[0m"}`),console.log("")}function P(p){if(!p)return"";let o=p.replace(/^\/+/,"").toLowerCase().trim(),c={intro:"",introduction:"",overview:"",quickstart:"/quickstart","quick-start":"/quickstart",start:"/quickstart",guide:"/quickstart",arch:"/architecture",architecture:"/architecture",cli:"/cli",commands:"/cli",terminal:"/cli",privacy:"/privacy",terms:"/terms",changelog:"/changelog/"};return c[o]!==void 0?c[o]:`/${o}`}async function F(){let o=`${(process.env.WEB_URL||"https://trydecember.com").replace(/\/$/,"")}/docs/changelog/`;console.log("Opening December changelog in your default browser..."),console.log(`\x1B[38;2;135;178;244m${o}\x1B[0m`);try{let{openUrl:c}=await import("./chunk-y11aydfy.js");await c(o)}catch{}}async function K(p){let o=p?.section?.toLowerCase().trim(),c=P(o),t=`${(process.env.WEB_URL||"https://trydecember.com").replace(/\/$/,"")}/docs${c}`;console.log("Opening December documentation in your default browser..."),console.log(`\x1B[38;2;135;178;244m${t}\x1B[0m`);try{let{openUrl:r}=await import("./chunk-y11aydfy.js");await r(t)}catch{}}import y from"node:fs";import L from"node:os";import k from"node:path";async function Q(p){let o=p?.path?.trim(),c=o||".",e=k.resolve(process.cwd(),c);if(c!=="."&&!y.existsSync(e)){console.error(`\x1B[38;2;252;165;165mError:\x1B[0m File not found: ${o}`),process.exitCode=1;return}let t=c==="."?"workspace":c;console.log(`Opening ${t} in your default editor...`);try{let{openPath:r}=await import("./chunk-y11aydfy.js");await r(e)}catch(r){console.error(`\x1B[38;2;252;165;165mFailed to open ${t}:\x1B[0m ${r?.message||"Unknown error"}`)}}async function X(p){let o=p?.query?.trim();if(!o){console.error("\x1B[38;2;252;165;165mError:\x1B[0m Please provide a search query. (e.g. december codesearch <query>)"),process.exitCode=1;return}try{let{localOperations:c}=await import("./chunk-
|
|
54
|
+
`);let f=await t(),h=await e();console.log("\x1B[38;2;244;244;245mConfiguration & Authentication:\x1B[0m");let R=f.subscriptions?Object.keys(f.subscriptions).length:0;if(R>0){let v=Object.keys(f.subscriptions).join(", ");console.log(` • Subscriptions: ${"\x1B[38;2;110;231;183m"}${R} active${"\x1B[0m"} (${v})`)}else console.log(` • Subscriptions: ${"\x1B[38;2;161;161;170m"}None detected${"\x1B[0m"} (Run "december auth import")`);if(h.hasDecember)console.log(` • December Cloud: ${"\x1B[38;2;110;231;183m"}Connected${"\x1B[0m"} ${f.email?`(${f.email})`:""}`);else console.log(` • December Cloud: ${"\x1B[38;2;161;161;170m"}Not logged in${"\x1B[0m"} (Run "december login")`);let S=f.providers?Object.keys(f.providers).length:0;if(S>0)console.log(` • BYOK Providers: ${"\x1B[38;2;110;231;183m"}${S} configured${"\x1B[0m"} (Active: ${f.activeProvider||"none"}, Model: ${f.activeModel||"default"})`);else console.log(` • BYOK Providers: ${"\x1B[38;2;161;161;170m"}None configured${"\x1B[0m"}`);console.log(` • Auth Priority: ${"\x1B[38;2;161;161;170m"}${f.authPriority||h.authPriority}${"\x1B[0m"}`),console.log("")}function P(p){if(!p)return"";let o=p.replace(/^\/+/,"").toLowerCase().trim(),c={intro:"",introduction:"",overview:"",quickstart:"/quickstart","quick-start":"/quickstart",start:"/quickstart",guide:"/quickstart",arch:"/architecture",architecture:"/architecture",cli:"/cli",commands:"/cli",terminal:"/cli",privacy:"/privacy",terms:"/terms",changelog:"/changelog/"};return c[o]!==void 0?c[o]:`/${o}`}async function F(){let o=`${(process.env.WEB_URL||"https://trydecember.com").replace(/\/$/,"")}/docs/changelog/`;console.log("Opening December changelog in your default browser..."),console.log(`\x1B[38;2;135;178;244m${o}\x1B[0m`);try{let{openUrl:c}=await import("./chunk-y11aydfy.js");await c(o)}catch{}}async function K(p){let o=p?.section?.toLowerCase().trim(),c=P(o),t=`${(process.env.WEB_URL||"https://trydecember.com").replace(/\/$/,"")}/docs${c}`;console.log("Opening December documentation in your default browser..."),console.log(`\x1B[38;2;135;178;244m${t}\x1B[0m`);try{let{openUrl:r}=await import("./chunk-y11aydfy.js");await r(t)}catch{}}import y from"node:fs";import L from"node:os";import k from"node:path";async function Q(p){let o=p?.path?.trim(),c=o||".",e=k.resolve(process.cwd(),c);if(c!=="."&&!y.existsSync(e)){console.error(`\x1B[38;2;252;165;165mError:\x1B[0m File not found: ${o}`),process.exitCode=1;return}let t=c==="."?"workspace":c;console.log(`Opening ${t} in your default editor...`);try{let{openPath:r}=await import("./chunk-y11aydfy.js");await r(e)}catch(r){console.error(`\x1B[38;2;252;165;165mFailed to open ${t}:\x1B[0m ${r?.message||"Unknown error"}`)}}async function X(p){let o=p?.query?.trim();if(!o){console.error("\x1B[38;2;252;165;165mError:\x1B[0m Please provide a search query. (e.g. december codesearch <query>)"),process.exitCode=1;return}try{let{localOperations:c}=await import("./chunk-hce06q17.js"),e=await c.search.grep(".",o);if(!e||!e.trim()){console.log(`No matches found for "${o}".`);return}let t=e.split(`
|
|
55
55
|
`).filter((r)=>Boolean(r.trim()));console.log(`
|
|
56
56
|
\x1B[1mCode Search Results (${t.length}):\x1B[0m
|
|
57
57
|
`);for(let r of t.slice(0,50)){let b=r.indexOf(":"),a=r.indexOf(":",b+1);if(b!==-1&&a!==-1){let m=r.slice(0,b),i=r.slice(b+1,a),E=r.slice(a+1).trim();console.log(` \x1B[38;2;135;178;244m${m}:${i}\x1B[0m ${E}`)}else console.log(` ${r}`)}if(t.length>50)console.log(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{m,Re,De,Pe,Me,Qe,Le,z,y,fe,Oe,Fe}from"./chunk-f29e6jpz.js";import{n,W,O,F,E,U}from"./chunk-pm6vrdbq.js";import{B,g}from"./chunk-
|
|
1
|
+
import{m,Re,De,Pe,Me,Qe,Le,z,y,fe,Oe,Fe}from"./chunk-f29e6jpz.js";import{n,W,O,F,E,U}from"./chunk-pm6vrdbq.js";import{B,g}from"./chunk-r3xqtcj0.js";import de from"node:fs";import ne from"node:path";var _s=new Uint8Array(16);function rt(){return crypto.getRandomValues(_s)}var q=[];for(let e=0;e<256;++e)q.push((e+256).toString(16).slice(1));function Pt(e,t=0){return(q[e[t+0]]+q[e[t+1]]+q[e[t+2]]+q[e[t+3]]+"-"+q[e[t+4]]+q[e[t+5]]+"-"+q[e[t+6]]+q[e[t+7]]+"-"+q[e[t+8]]+q[e[t+9]]+"-"+q[e[t+10]]+q[e[t+11]]+q[e[t+12]]+q[e[t+13]]+q[e[t+14]]+q[e[t+15]]).toLowerCase()}function As(e,t,s){if(!t&&!e&&crypto.randomUUID)return crypto.randomUUID();return Is(e,t,s)}function Is(e,t,s){e=e||{};let r=e.random??e.rng?.()??rt();if(r.length<16)throw Error("Random bytes length must be >= 16");if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,t){if(s=s||0,s<0||s+16>t.length)throw RangeError(`UUID byte range ${s}:${s+15} is out of buffer bounds`);for(let o=0;o<16;++o)t[s+o]=r[o];return t}return Pt(r)}var Ue=As;var Ps=32000;var Ms=40000,Rs=15000,Ls=3,Ds=new Set(["skill"]);function Mt(e,t){let s=t?.protectTokens??Ms,r=t?.minSavings??Rs,o=t?.protectedTools??Ds,i=t?.protectSteps??Ls,a=new Map;for(let f of e)if(f.toolCalls){for(let S of f.toolCalls)if(S.id&&S.name)a.set(S.id,S.name)}let l=0,c=0,u=[],d=0,p=0;for(let f=e.length-1;f>=0;f--){let S=e[f];if(!S)continue;if(S.role==="user")d++;if(S.role==="assistant"&&(S.toolCalls?.length||0)>0)p++;if(d<2&&p<i)continue;if(S.role==="tool"){let k=(S.toolCallId?a.get(S.toolCallId):void 0)||S.name||"";if(o.has(k))continue;if(S.content==="[Old tool result content cleared]")continue;let h=typeof S.content==="string"?S.content:JSON.stringify(S.content),b=Math.ceil(h.length/4);if(l+=b,l>s)c+=b,u.push(f)}}if(c<r)return{pruned:!1,tokensSaved:0};for(let f of u){let S=e[f];if(S)S.content="[Old tool result content cleared]"}return{pruned:!0,tokensSaved:c}}function Cs(e,t){let s=new Set,r=new Set;if(t){let o=t.match(/<read-files>([\s\S]*?)<\/read-files>/);if(o&&o[1])o[1].split(`
|
|
2
2
|
`).map((a)=>a.trim()).filter(Boolean).forEach((a)=>s.add(a));let i=t.match(/<modified-files>([\s\S]*?)<\/modified-files>/);if(i&&i[1])i[1].split(`
|
|
3
3
|
`).map((a)=>a.trim()).filter(Boolean).forEach((a)=>r.add(a))}for(let o of e){if(!o.toolCalls)continue;for(let i of o.toolCalls){let a={};if(typeof i.input==="string")try{a=JSON.parse(i.input)}catch{}else if(i.input&&typeof i.input==="object")a=i.input;let l=a.path||a.filePath||a.TargetFile||a.AbsolutePath||a.file;if(typeof l==="string"&&l.trim().length>0){let c=l.trim(),u=i.name.toLowerCase();if(["write_file","write","write_to_file","edit_file","edit","edit_diff","replace_file_content"].includes(u))r.add(c);else if(["read_file","read","view_file"].includes(u))s.add(c)}}}for(let o of r)s.delete(o);return{readFiles:Array.from(s).sort(),modifiedFiles:Array.from(r).sort()}}function Os(e){let t=[];if(e.readFiles.length>0)t.push(`<read-files>
|
|
4
4
|
${e.readFiles.join(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-f29e6jpz.js";import"./chunk-
|
|
1
|
+
import"./chunk-f29e6jpz.js";import"./chunk-r3xqtcj0.js";import"./chunk-xmvf453q.js";import"./chunk-2v3whmk6.js";import"./chunk-91d1p189.js";import"./chunk-w8v2c87g.js";import"./chunk-5ax9zqhw.js";async function E(u=process.env.SERVER_URL||"https://api.trydecember.com",f,e){if(e?.aborted)throw Error("Login cancelled");try{let t=await fetch(`${u}/api/v1/auth/device/code`,{method:"POST",headers:{"Content-Type":"application/json"},signal:e}),o={};try{o=await t.json()}catch{}if(!t.ok||!o.success)throw Error(o.message||`Failed to generate device code (${t.status})`);let{deviceCode:m,userCode:l,verificationUri:h,expiresIn:p,interval:v}=o.data;f(l,h);let w=Date.now(),c=v*1000||5000;return await new Promise((b,s)=>{let n=null,r=()=>{if(n)clearTimeout(n);s(Error("Login cancelled"))};if(e){if(e.aborted){r();return}e.addEventListener("abort",r,{once:!0})}let d=async()=>{if(e?.aborted){r();return}if(Date.now()-w>p*1000){if(e)e.removeEventListener("abort",r);s(Error("Device code expired"));return}try{let a=await fetch(`${u}/api/v1/auth/device/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:m}),signal:e}),i=await a.json();if(a.ok&&i.success){if(e)e.removeEventListener("abort",r);b({token:i.data.token,email:i.data.email});return}if(i.message==="authorization_pending"){if(!e?.aborted)n=setTimeout(d,c)}else{if(e)e.removeEventListener("abort",r);s(Error(i.message||"Polling failed"))}}catch(a){if(e?.aborted||a?.name==="AbortError"){r();return}if(!e?.aborted)n=setTimeout(d,c)}};n=setTimeout(d,c)})}catch(t){if(e?.aborted||t?.name==="AbortError"||t?.message?.includes("cancelled"))throw Error("Login cancelled");let o=t?.message||String(t);if(o.includes("fetch failed")||o.includes("ECONNREFUSED")||o.includes("ENOTFOUND")||o.includes("Failed to fetch")||o.includes("connect"))throw Error("Unable to connect. Is the computer able to access the url?",{cause:t});else throw t}}export{E as loginViaDeviceCode};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{s,t,i,c,o,L}from"./chunk-
|
|
1
|
+
import{s,t,i,c,o,L}from"./chunk-r3xqtcj0.js";import*as y from"node:fs/promises";import*as D from"node:fs";import*as w from"node:path";import*as G from"node:child_process";import*as V from"node:crypto";import*as Y from"node:readline";function T(n){if(n.inputSchema.type!=="object")throw Error(`JSON schema for tool "${n.name}" must be an object, but got ${n.inputSchema.type}`);return{type:"custom",name:n.name,input_schema:n.inputSchema,description:n.description,run:n.run,parse:(e)=>e,...n.close?{close:n.close}:{}}}import*as O from"node:fs/promises";import*as _ from"node:path";import{randomUUID as nt}from"node:crypto";var A=493,st=420;async function ot(n){try{return await O.realpath(n)}catch{return n}}async function at(n){let e=[],r=n,a=0;for(;;){let l;try{l=await O.realpath(r)}catch{let d=!1;try{d=(await O.lstat(r)).isSymbolicLink()}catch{}if(d){if(++a>40)throw new o(`path ${JSON.stringify(n)} has too many levels of symbolic links`);r=_.resolve(_.dirname(r),await O.readlink(r));continue}let f=_.dirname(r);if(f===r)return n;e.push(_.basename(r)),r=f;continue}return e.length?_.join(l,...e.reverse()):l}}async function j(n,e,r){let a=r?.allowOutside??!1,l=await ot(_.resolve(n)),d=_.resolve(l,e);if(a)return d;let f=await at(d);if(f!==l&&!f.startsWith(l+_.sep))throw new o(`path ${JSON.stringify(e)} escapes workdir`);return f}async function U(n,e){let r=_.dirname(n),a=_.join(r,`.tmp-${process.pid}-${nt()}`),l;try{l=await O.open(a,"wx",st),await l.writeFile(e,"utf-8"),await l.sync(),await l.close(),l=void 0,await O.rename(a,n)}catch(d){if(l)await l.close().catch(()=>{});throw await O.unlink(a).catch(()=>{}),d}}function I(n,e){switch(n?.code){case"ENOENT":return`${e}: no such file or directory`;case"EACCES":case"EPERM":return`${e}: permission denied`;case"ENOTDIR":return`${e}: not a directory`;case"EISDIR":return`${e}: is a directory`;case"ELOOP":return`${e}: too many levels of symbolic links`;case"ENAMETOOLONG":return`${e}: file name too long`;case"ENOSPC":return`${e}: no space left on device`;case"EMFILE":case"ENFILE":return`${e}: too many open files`;default:return`${e}: ${n instanceof Error?n.message:String(n)}`}}import*as k from"node:fs/promises";import*as H from"node:fs";import*as g from"node:path";import{execFile as ct}from"node:child_process";import{promisify as lt}from"node:util";import{Readable as ft}from"node:stream";import{pipeline as ut}from"node:stream/promises";var dt=lt(ct);async function pt(n){let{client:e,sessionId:r}=n;if(!e||!r)return async()=>{};let a=c(e),l=await e.beta.sessions.retrieve(r),d=g.resolve(n.workdir,"skills"),f=[];for(let u of l.agent.skills)try{let p=await z(e,u.skill_id,u.version),h=await e.beta.skills.versions.retrieve(p,{skill_id:u.skill_id}),m=g.basename(h.name.trim());if(m===""||m==="."||m==="..")m=u.skill_id;let b=g.resolve(d,m);if(b!==d&&!b.startsWith(d+g.sep)){a.warn("skill name escapes the skills dir; skipping",{component:"agent-tool-context",name:h.name});continue}let W=await e.beta.skills.versions.download(p,{skill_id:u.skill_id});await k.rm(b,{recursive:!0,force:!0}),await k.mkdir(b,{recursive:!0,mode:A}),f.push(b),await K(W,b),a.info("downloaded skill",{component:"agent-tool-context",skill_id:u.skill_id,version:p,dest:b})}catch(p){a.warn("failed to download skill",{component:"agent-tool-context",skill_id:u.skill_id,error:String(p)})}return async()=>{for(let u of f)await k.rm(u,{recursive:!0,force:!0}).catch((p)=>{a.warn("failed to clean up skill",{component:"agent-tool-context",dest:u,error:String(p)})})}}async function z(n,e,r){if(/^\d+$/.test(r))return r;let a;for await(let l of n.beta.skills.versions.list(e))if(/^\d+$/.test(l.version)&&(a===void 0||BigInt(l.version)>BigInt(a)))a=l.version;if(a===void 0)throw new i(`skill ${JSON.stringify(e)} has no concrete version to resolve ${JSON.stringify(r)} against`);return a}function ht(n){for(let e of n.split(`
|
|
2
2
|
`)){let r=e.trim();if(!r)continue;if(g.isAbsolute(r)||r.split(/[\\/]/).includes(".."))throw new i(`refusing to extract unsafe archive member: ${r}`)}}function mt(n){for(let e of n.split(`
|
|
3
3
|
`)){let r=e.trimStart()[0];if(r==="l"||r==="h"||r==="b"||r==="c"||r==="p"||r==="s")throw new i("refusing to extract archive with symlink/hardlink/device member")}}async function C(n,e){try{let{stdout:r}=await dt(n,e);return r}catch(r){if(r!=null&&typeof r==="object"&&r.code==="ENOENT")throw new i(`skill extraction requires the \`${n}\` command, but it was not found on PATH`);throw r}}function wt(n){let e,r=!1;for(let a of n.split(`
|
|
4
4
|
`)){let l=a.trim().split("/").filter((f)=>f!==""&&f!==".");if(l.length===0)continue;let d=l[0];if(e===void 0)e=d;else if(d!==e)return"";if(l.length>1)r=!0}return e!==void 0&&r?e:""}async function K(n,e){let r=g.join(e,`.skill-archive-${process.pid}-${Date.now()}`);if(!n.body)throw new i("skill download response had no body");await ut(ft.fromWeb(n.body),H.createWriteStream(r));let a=g.join(g.dirname(e),`.skill-stage-${process.pid}-${Date.now()}`);try{let l=await yt(r,4),d=l.length>=4&&l[0]===80&&l[1]===75&&l[2]===3&&l[3]===4,f=d?"unzip":"tar",u=await C(f,d?["-Z1",r]:["-tf",r]);ht(u),mt(await C(f,d?["-Z",r]:["-tvf",r]));let p=wt(u);await k.mkdir(a,{recursive:!0,mode:A}),await C(f,d?["-oq",r,"-d",a]:["-xf",r,"-C",a]);let h=p?g.join(a,p):a;for(let m of await k.readdir(h))await k.rename(g.join(h,m),g.join(e,m))}finally{await k.rm(r,{force:!0}),await k.rm(a,{recursive:!0,force:!0})}}async function yt(n,e){let r=await k.open(n,"r");try{let a=Buffer.alloc(e),{bytesRead:l}=await r.read(a,0,e,0);return a.subarray(0,l)}finally{await r.close()}}var F,v,E,R,x,S,J,X=102400,Q=120000,gt=262144,M=102400,bt=2000,_t=200,vt=/\x1b\[[0-9;?]*[ -/]*[@-~]/g,$t=y.glob;function tt(n){return n===void 0?gt:n}function ae(n){return[Et(n),Ot(n),St(n),Tt(n),xt(n),At(n)]}function N(n,e){return j(n.workdir,e,{allowOutside:n.unrestrictedPaths??!1})}function kt(){let n={};for(let[e,r]of Object.entries(process.env)){if(e.startsWith("ANTHROPIC_"))continue;n[e]=r}return n}class et{constructor(n,e=kt()){F.add(this),v.set(this,void 0),E.set(this,""),R.set(this,!1),x.set(this,!1),S.set(this,null),s(this,v,G.spawn("/bin/bash",["--noprofile","--norc"],{cwd:n,env:{...e,PS1:"",PS2:"",TERM:"dumb"},stdio:["pipe","pipe","pipe"],detached:!0}),"f"),t(this,v,"f").stdout.setEncoding("utf8"),t(this,v,"f").stderr.setEncoding("utf8"),t(this,v,"f").stdout.on("data",(r)=>t(this,F,"m",J).call(this,r)),t(this,v,"f").stderr.on("data",(r)=>t(this,F,"m",J).call(this,r)),t(this,v,"f").once("close",()=>{s(this,x,!0,"f");let r=t(this,S,"f");s(this,S,null,"f"),r?.resolve()})}get closed(){return t(this,x,"f")}async exec(n,e={}){if(t(this,x,"f"))throw new i("bash session terminated");let r=e.timeoutMs??Q,a=e.signal;if(a?.aborted)throw new i("bash command aborted");s(this,E,"","f"),s(this,R,!1,"f");let l=`__ANT_CMD_${V.randomUUID()}_DONE__`,d=`${l.slice(0,8)}''${l.slice(8)}`,f=`{ ${n}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_}from"./chunk-f0bms32h.js";import{existsSync as x,readFileSync as D,unlinkSync as P}from"node:fs";import y from"node:fs/promises";import O from"node:os";import W from"node:path";var d=172800000,p=new Map,C=!1;function L(){if(process.env.DECEMBER_CONFIG_DIR)return W.join(process.env.DECEMBER_CONFIG_DIR,"models-cache.json");let i=process.env.HOME||process.env.USERPROFILE||O.homedir(),e=W.join(i,".december","models-cache.json"),t=W.join(i,".config","december","models-cache.json");if(x(e)||!x(t))return e;return t}function R(){if(C)return;if(C=!0,(!!process.env.BUN_TEST||!!process.env.VITEST)&&!process.env.DECEMBER_TEST_LOAD_CACHE)return;try{let e=L();if(x(e)){let t=D(e,"utf-8"),r=JSON.parse(t),a=Date.now();for(let[c,u]of Object.entries(r))if(u&&typeof u.timestamp==="number"&&Array.isArray(u.models)&&a-u.timestamp<d)p.set(c,u)}}catch{}}async function E(){try{let i=L(),e=W.dirname(i);await y.mkdir(e,{recursive:!0}).catch(()=>{});let t={},r=Date.now();for(let[a,c]of p.entries())if(r-c.timestamp<d)t[a]=c;await y.writeFile(i,JSON.stringify(t,null,2),"utf-8")}catch{}}var z=(i)=>{let e=(i||"").toLowerCase().trim(),t=_.aliases[e]||e,r=_.providers[t];if(r&&Array.isArray(r.models)&&r.models.length>0)return r.models.map((a)=>({label:a.label,value:a.id}));return[{label:"Default",value:"default"}]},Ce=(i)=>{let e=(i||"").toLowerCase().trim();R();let t=Date.now();for(let[r,a]of p.entries()){if(r.includes(":test-token:"))continue;if(r.startsWith(`${e}:`)&&t-a.timestamp<d)return a.models}return z(e)};function b(i){if(!i)return"";let e=i.split(/[/:]/);return e[e.length-1].split(/[-_]/).map((r)=>r.charAt(0).toUpperCase()+r.slice(1)).join(" ")}function A(i){if(!i||typeof i!=="string")return!1;let e=i.toLowerCase();if(e.includes("embedding"))return!1;if(e.startsWith("copilot-search")||e.startsWith("exec-agent"))return!1;if(e.includes("compaction"))return!1;return!0}async function ft(i,e,t,r=fetch){let a=(i||"").toLowerCase().trim(),c=z(a);if(a==="december"||a==="december_proxy")return c;if(a==="openrouter"){let s=`openrouter:${e||"none"}:${t||"default"}`,l=p.get(s);if(l&&Date.now()-l.timestamp<d)return l.models;let{fetchOpenRouterModels:k}=await import("./chunk-b9qpmv72.js"),h=await k(e,!1,r);if(h&&h.length>0)p.set(s,{timestamp:Date.now(),models:h}),E().catch(()=>{});return h}if(!e)return c;let u=`${a}:${e}:${t||"default"}`,f=p.get(u);if(f&&Date.now()-f.timestamp<d)return f.models;try{let s="",l={Accept:"application/json"};if(a==="google"||a==="gemini")if((e.startsWith("ya29.")||e.startsWith("Bearer ")||e.includes(".")||a==="gemini")&&!e.startsWith("AIza"))s="https://generativelanguage.googleapis.com/v1beta/models",l.Authorization=e.startsWith("Bearer ")?e:`Bearer ${e}`;else s=`https://generativelanguage.googleapis.com/v1beta/models?key=${e}`;else if(a==="anthropic"||a==="claude")if(s="https://api.anthropic.com/v1/models",l["anthropic-version"]="2023-06-01",a==="claude"||e.startsWith("sk-ant-oat")||e.startsWith("Bearer "))l.Authorization=e.startsWith("Bearer ")?e:`Bearer ${e}`,l["anthropic-beta"]="claude-code-20250219,oauth-2024-06-20";else l["x-api-key"]=e;else switch(l.Authorization=`Bearer ${e}`,a){case"openai":case"codex":case"chatgpt":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.openai.com/v1/models";break;case"deepseek":s="https://api.deepseek.com/models";break;case"groq":s="https://api.groq.com/openai/v1/models";break;case"mistral":case"mistralai":case"mistral-ai":s="https://api.mistral.ai/v1/models";break;case"xai":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.x.ai/v1/models";break;case"xiaomi":case"mimo":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.xiaomimimo.com/v1/models";break;case"zai":case"zhipu":case"zhipuai":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.z.ai/api/coding/paas/v4/models";break;case"together":case"togetherai":s="https://api.together.xyz/v1/models";break;case"fireworks":case"fireworksai":s="https://api.fireworks.ai/inference/v1/models";break;case"siliconflow":case"siliconcloud":s="https://api.siliconflow.cn/v1/models";break;case"dashscope":case"qwen":s="https://dashscope.aliyuncs.com/compatible-mode/v1/models";break;case"minimax":case"minimaxai":case"minimax-ai":s="https://api.minimax.io/v1/models";break;case"cerebras":s="https://api.cerebras.ai/v1/models";break;case"sambanova":s="https://api.sambanova.ai/v1/models";break;case"nvidia":case"nim":s="https://integrate.api.nvidia.com/v1/models";break;case"cohere":s="https://api.cohere.com/v2/models";break;case"kimi":case"moonshot":case"moonshoot":case"moonshotai":case"moonshot-ai":s="https://api.moonshot.ai/v1/models";break;case"agentrouter":case"agentrouter.org":s="https://agentrouter.org/v1/models",l["User-Agent"]="claude-cli/2.1.0 (external, sdk-cli)";break;case"huggingface":s="https://router.huggingface.co/v1/models";break;case"hyperbolic":s="https://api.hyperbolic.xyz/v1/models";break;case"arcee":case"arceeai":case"arcee-ai":s="https://api.arcee.ai/api/v1/models";break;case"meta":case"metaai":case"meta-ai":s="https://api.meta.ai/v1/models";break;case"sakana":case"sakanaai":case"sakana-ai":s="https://api.sakana.ai/v1/models";break;case"sarvam":case"sarvamai":case"sarvam-ai":s="https://api.sarvam.ai/v1/models";break;case"stepfun":case"stepfunai":case"stepfun-ai":s="https://api.stepfun.ai/v1/models";break;case"upstage":case"upstageai":case"solar":s="https://api.upstage.ai/v1/solar/models";break;case"abliteration":case"abliterationai":case"abliteration-ai":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.abliteration.ai/v1/models";break;case"agnes":case"agnesai":case"agnes-ai":s=t?`${t.replace(/\/+$/,"")}/models`:"https://apihub.agnes-ai.com/v1/models";break;case"aiand":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.aiand.com/v1/models";break;case"aki":case"aki-io":case"akiio":s=t?`${t.replace(/\/+$/,"")}/models`:"https://aki.io/v1/models";break;case"ambient":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.ambient.xyz/v1/models";break;case"auriko":case"aurikoai":case"auriko-ai":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.auriko.ai/v1/models";break;case"baseten":case"basetenco":case"baseten-co":s=t?`${t.replace(/\/+$/,"")}/models`:"https://inference.baseten.co/v1/models";break;case"december":case"december_proxy":{s=`${(process.env.SERVER_URL||"https://api.trydecember.com").replace(/\/+$/,"")}/api/v1/cli/models`;break}case"copilot":case"github_copilot":case"github":s="https://api.individual.githubcopilot.com/models",l["Editor-Version"]="vscode/1.95.0",l["Editor-Plugin-Version"]="copilot/1.240.0",l["User-Agent"]="GithubCopilot/1.240.0";break;default:if(t){let n=t.replace(/\/+$/,"");s=n.endsWith("/v1")?`${n}/models`:`${n}/v1/models`}break}if(!s)return c;let k=await r(s,{headers:l,signal:AbortSignal.timeout(3500)});if(!k.ok)return c;let h=await k.json(),m=[];if(a==="google"||a==="gemini"){let n=h.models||[];for(let o of n){let g=(o.name||"").replace(/^models\//,"");if(g&&(g.includes("gemini")||g.includes("gemma")))m.push({label:o.displayName||b(g),value:g})}}else if(a==="anthropic"||a==="claude"){let n=h.data||[];for(let o of n)if(o.id)m.push({label:o.display_name||b(o.id),value:o.id})}else if(Array.isArray(h.data))for(let n of h.data){let o=n.id||n.name;if(o&&typeof o==="string"&&A(o))m.push({label:b(o),value:o})}else if(Array.isArray(h.models))for(let n of h.models){let o=typeof n==="string"?n:n.name||n.id;if(o&&typeof o==="string"&&A(o))m.push({label:b(o),value:o})}if(m.length===0)return c;let w=new Set,v=[];for(let n of c)w.add(n.value),v.push(n);for(let n of m)if(!w.has(n.value))w.add(n.value),v.push(n);return p.set(u,{timestamp:Date.now(),models:v}),E().catch(()=>{}),v}catch{return c}}var ht=(i)=>{let e=["anthropic","google","openai","openrouter","deepseek","groq","huggingface","kimi","moonshot","mistral","xai","xiaomi","zai","nvidia","sambanova","cerebras","siliconflow","together","hyperbolic","fireworks","perplexity","cohere","agentrouter","copilot","claude","codex","minimax","dashscope","arcee","meta","sakana","sarvam","stepfun","upstage","thinkingmachines","abliteration","agnes","aiand","aki","ambient","auriko","baseten","december_proxy"];for(let t of e){let a=Ce(t).find((c)=>c.value===i);if(a)return a.label}return i},M=(i,e)=>{if(!e)return!1;let t=(i||"").toLowerCase().trim();if(t==="openrouter"&&(e.includes("/")||e.includes(":")))return!0;if(t==="agentrouter"&&(e.includes("/")||e.includes(":")))return!0;if(t==="arcee"&&(e.includes("/")||e.includes(":")))return!0;if(t==="meta"&&(e.includes("/")||e.includes(":")))return!0;if((t==="xiaomi"||t==="mimo")&&(e.includes("/")||e.startsWith("mimo")))return!0;if((t==="zai"||t==="zhipu"||t==="zhipuai")&&(e.includes("/")||e.startsWith("glm")))return!0;if((t==="abliteration"||t==="abliterationai"||t==="abliteration-ai")&&(e.includes("/")||e.startsWith("abliterated")))return!0;if((t==="agnes"||t==="agnesai"||t==="agnes-ai")&&(e.includes("/")||e.startsWith("agnes")))return!0;if(t==="aiand"&&(e.includes("/")||e.startsWith("deepseek")||e.startsWith("glm")||e.startsWith("kimi")||e.startsWith("gemma")||e.startsWith("gpt")||e.startsWith("motif")||e.startsWith("qwen")))return!0;if((t==="aki"||t==="aki-io"||t==="akiio")&&(e.includes("/")||e.startsWith("deepseek")||e.startsWith("glm")||e.startsWith("gemma")||e.startsWith("gpt")||e.startsWith("mistral")||e.startsWith("qwen")))return!0;if(t==="ambient"&&(e.includes("/")||e.startsWith("ambient")||e.startsWith("glm")||e.startsWith("qwen")||e.startsWith("z-ai")))return!0;if((t==="auriko"||t==="aurikoai"||t==="auriko-ai")&&(e.includes("/")||e.startsWith("claude")||e.startsWith("deepseek")||e.startsWith("gemini")||e.startsWith("glm")||e.startsWith("grok")||e.startsWith("kimi")||e.startsWith("minimax")||e.startsWith("qwen")))return!0;if((t==="baseten"||t==="basetenco"||t==="baseten-co")&&(e.includes("/")||e.startsWith("deepseek")||e.startsWith("zai")||e.startsWith("glm")||e.startsWith("moonshot")||e.startsWith("kimi")||e.startsWith("thinkingmachines")||e.startsWith("inkling")||e.startsWith("nvidia")||e.startsWith("nemotron")||e.startsWith("gpt")))return!0;if(t==="sakana"&&(e.includes("/")||e.startsWith("fugu")||e.startsWith("sakana")))return!0;if((t==="thinkingmachines"||t==="tinker"||t==="inkling")&&(e.includes("/")||e.startsWith("inkling")))return!0;if(t==="december"||t==="december_proxy")return e.toLowerCase()==="december-auto";if(Ce(t).some((c)=>c.value===e))return!0;let a=Date.now();for(let[c,u]of p.entries())if(c.startsWith(`${t}:`)&&a-u.timestamp<d){if(u.models.some((f)=>f.value===e))return!0}return!1},ie=(i)=>{let e=(i||"").toLowerCase().trim();if(e==="december"||e==="december_proxy")return"december-auto";let t=_.aliases[e]||e,r=_.providers[t];if(r&&r.defaultModel)return r.defaultModel;let a=Ce(i);if(a&&a.length>0)return a[0].value;return"gemini-3.8-flash"},Q=(i,e)=>{let t=(i||"").toLowerCase().trim();if(t==="december"||t==="december_proxy")return"december-auto";if((t==="thinkingmachines"||t==="tinker"||t==="inkling")&&e){let r=e.toLowerCase().trim();if(r==="inkling")return"thinkingmachines/Inkling";if(r==="inkling:peft:262144")return"thinkingmachines/Inkling:peft:262144"}if(e&&M(i,e))return e;return ie(i)};export{Ce,ft,ht,M,ie,Q};
|
|
1
|
+
import{_}from"./chunk-r3xqtcj0.js";import{existsSync as x,readFileSync as D,unlinkSync as P}from"node:fs";import y from"node:fs/promises";import O from"node:os";import W from"node:path";var d=172800000,p=new Map,C=!1;function L(){if(process.env.DECEMBER_CONFIG_DIR)return W.join(process.env.DECEMBER_CONFIG_DIR,"models-cache.json");let i=process.env.HOME||process.env.USERPROFILE||O.homedir(),e=W.join(i,".december","models-cache.json"),t=W.join(i,".config","december","models-cache.json");if(x(e)||!x(t))return e;return t}function R(){if(C)return;if(C=!0,(!!process.env.BUN_TEST||!!process.env.VITEST)&&!process.env.DECEMBER_TEST_LOAD_CACHE)return;try{let e=L();if(x(e)){let t=D(e,"utf-8"),r=JSON.parse(t),a=Date.now();for(let[c,u]of Object.entries(r))if(u&&typeof u.timestamp==="number"&&Array.isArray(u.models)&&a-u.timestamp<d)p.set(c,u)}}catch{}}async function E(){try{let i=L(),e=W.dirname(i);await y.mkdir(e,{recursive:!0}).catch(()=>{});let t={},r=Date.now();for(let[a,c]of p.entries())if(r-c.timestamp<d)t[a]=c;await y.writeFile(i,JSON.stringify(t,null,2),"utf-8")}catch{}}var z=(i)=>{let e=(i||"").toLowerCase().trim(),t=_.aliases[e]||e,r=_.providers[t];if(r&&Array.isArray(r.models)&&r.models.length>0)return r.models.map((a)=>({label:a.label,value:a.id}));return[{label:"Default",value:"default"}]},Ce=(i)=>{let e=(i||"").toLowerCase().trim();R();let t=Date.now();for(let[r,a]of p.entries()){if(r.includes(":test-token:"))continue;if(r.startsWith(`${e}:`)&&t-a.timestamp<d)return a.models}return z(e)};function b(i){if(!i)return"";let e=i.split(/[/:]/);return e[e.length-1].split(/[-_]/).map((r)=>r.charAt(0).toUpperCase()+r.slice(1)).join(" ")}function A(i){if(!i||typeof i!=="string")return!1;let e=i.toLowerCase();if(e.includes("embedding"))return!1;if(e.startsWith("copilot-search")||e.startsWith("exec-agent"))return!1;if(e.includes("compaction"))return!1;return!0}async function ft(i,e,t,r=fetch){let a=(i||"").toLowerCase().trim(),c=z(a);if(a==="december"||a==="december_proxy")return c;if(a==="openrouter"){let s=`openrouter:${e||"none"}:${t||"default"}`,l=p.get(s);if(l&&Date.now()-l.timestamp<d)return l.models;let{fetchOpenRouterModels:k}=await import("./chunk-b9qpmv72.js"),h=await k(e,!1,r);if(h&&h.length>0)p.set(s,{timestamp:Date.now(),models:h}),E().catch(()=>{});return h}if(!e)return c;let u=`${a}:${e}:${t||"default"}`,f=p.get(u);if(f&&Date.now()-f.timestamp<d)return f.models;try{let s="",l={Accept:"application/json"};if(a==="google"||a==="gemini")if((e.startsWith("ya29.")||e.startsWith("Bearer ")||e.includes(".")||a==="gemini")&&!e.startsWith("AIza"))s="https://generativelanguage.googleapis.com/v1beta/models",l.Authorization=e.startsWith("Bearer ")?e:`Bearer ${e}`;else s=`https://generativelanguage.googleapis.com/v1beta/models?key=${e}`;else if(a==="anthropic"||a==="claude")if(s="https://api.anthropic.com/v1/models",l["anthropic-version"]="2023-06-01",a==="claude"||e.startsWith("sk-ant-oat")||e.startsWith("Bearer "))l.Authorization=e.startsWith("Bearer ")?e:`Bearer ${e}`,l["anthropic-beta"]="claude-code-20250219,oauth-2024-06-20";else l["x-api-key"]=e;else switch(l.Authorization=`Bearer ${e}`,a){case"openai":case"codex":case"chatgpt":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.openai.com/v1/models";break;case"deepseek":s="https://api.deepseek.com/models";break;case"groq":s="https://api.groq.com/openai/v1/models";break;case"mistral":case"mistralai":case"mistral-ai":s="https://api.mistral.ai/v1/models";break;case"xai":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.x.ai/v1/models";break;case"xiaomi":case"mimo":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.xiaomimimo.com/v1/models";break;case"zai":case"zhipu":case"zhipuai":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.z.ai/api/coding/paas/v4/models";break;case"together":case"togetherai":s="https://api.together.xyz/v1/models";break;case"fireworks":case"fireworksai":s="https://api.fireworks.ai/inference/v1/models";break;case"siliconflow":case"siliconcloud":s="https://api.siliconflow.cn/v1/models";break;case"dashscope":case"qwen":s="https://dashscope.aliyuncs.com/compatible-mode/v1/models";break;case"minimax":case"minimaxai":case"minimax-ai":s="https://api.minimax.io/v1/models";break;case"cerebras":s="https://api.cerebras.ai/v1/models";break;case"sambanova":s="https://api.sambanova.ai/v1/models";break;case"nvidia":case"nim":s="https://integrate.api.nvidia.com/v1/models";break;case"cohere":s="https://api.cohere.com/v2/models";break;case"kimi":case"moonshot":case"moonshoot":case"moonshotai":case"moonshot-ai":s="https://api.moonshot.ai/v1/models";break;case"agentrouter":case"agentrouter.org":s="https://agentrouter.org/v1/models",l["User-Agent"]="claude-cli/2.1.0 (external, sdk-cli)";break;case"huggingface":s="https://router.huggingface.co/v1/models";break;case"hyperbolic":s="https://api.hyperbolic.xyz/v1/models";break;case"arcee":case"arceeai":case"arcee-ai":s="https://api.arcee.ai/api/v1/models";break;case"meta":case"metaai":case"meta-ai":s="https://api.meta.ai/v1/models";break;case"sakana":case"sakanaai":case"sakana-ai":s="https://api.sakana.ai/v1/models";break;case"sarvam":case"sarvamai":case"sarvam-ai":s="https://api.sarvam.ai/v1/models";break;case"stepfun":case"stepfunai":case"stepfun-ai":s="https://api.stepfun.ai/v1/models";break;case"upstage":case"upstageai":case"solar":s="https://api.upstage.ai/v1/solar/models";break;case"abliteration":case"abliterationai":case"abliteration-ai":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.abliteration.ai/v1/models";break;case"agnes":case"agnesai":case"agnes-ai":s=t?`${t.replace(/\/+$/,"")}/models`:"https://apihub.agnes-ai.com/v1/models";break;case"aiand":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.aiand.com/v1/models";break;case"aki":case"aki-io":case"akiio":s=t?`${t.replace(/\/+$/,"")}/models`:"https://aki.io/v1/models";break;case"ambient":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.ambient.xyz/v1/models";break;case"auriko":case"aurikoai":case"auriko-ai":s=t?`${t.replace(/\/+$/,"")}/models`:"https://api.auriko.ai/v1/models";break;case"baseten":case"basetenco":case"baseten-co":s=t?`${t.replace(/\/+$/,"")}/models`:"https://inference.baseten.co/v1/models";break;case"december":case"december_proxy":{s=`${(process.env.SERVER_URL||"https://api.trydecember.com").replace(/\/+$/,"")}/api/v1/cli/models`;break}case"copilot":case"github_copilot":case"github":s="https://api.individual.githubcopilot.com/models",l["Editor-Version"]="vscode/1.95.0",l["Editor-Plugin-Version"]="copilot/1.240.0",l["User-Agent"]="GithubCopilot/1.240.0";break;default:if(t){let n=t.replace(/\/+$/,"");s=n.endsWith("/v1")?`${n}/models`:`${n}/v1/models`}break}if(!s)return c;let k=await r(s,{headers:l,signal:AbortSignal.timeout(3500)});if(!k.ok)return c;let h=await k.json(),m=[];if(a==="google"||a==="gemini"){let n=h.models||[];for(let o of n){let g=(o.name||"").replace(/^models\//,"");if(g&&(g.includes("gemini")||g.includes("gemma")))m.push({label:o.displayName||b(g),value:g})}}else if(a==="anthropic"||a==="claude"){let n=h.data||[];for(let o of n)if(o.id)m.push({label:o.display_name||b(o.id),value:o.id})}else if(Array.isArray(h.data))for(let n of h.data){let o=n.id||n.name;if(o&&typeof o==="string"&&A(o))m.push({label:b(o),value:o})}else if(Array.isArray(h.models))for(let n of h.models){let o=typeof n==="string"?n:n.name||n.id;if(o&&typeof o==="string"&&A(o))m.push({label:b(o),value:o})}if(m.length===0)return c;let w=new Set,v=[];for(let n of c)w.add(n.value),v.push(n);for(let n of m)if(!w.has(n.value))w.add(n.value),v.push(n);return p.set(u,{timestamp:Date.now(),models:v}),E().catch(()=>{}),v}catch{return c}}var ht=(i)=>{let e=["anthropic","google","openai","openrouter","deepseek","groq","huggingface","kimi","moonshot","mistral","xai","xiaomi","zai","nvidia","sambanova","cerebras","siliconflow","together","hyperbolic","fireworks","perplexity","cohere","agentrouter","copilot","claude","codex","minimax","dashscope","arcee","meta","sakana","sarvam","stepfun","upstage","thinkingmachines","abliteration","agnes","aiand","aki","ambient","auriko","baseten","december_proxy"];for(let t of e){let a=Ce(t).find((c)=>c.value===i);if(a)return a.label}return i},M=(i,e)=>{if(!e)return!1;let t=(i||"").toLowerCase().trim();if(t==="openrouter"&&(e.includes("/")||e.includes(":")))return!0;if(t==="agentrouter"&&(e.includes("/")||e.includes(":")))return!0;if(t==="arcee"&&(e.includes("/")||e.includes(":")))return!0;if(t==="meta"&&(e.includes("/")||e.includes(":")))return!0;if((t==="xiaomi"||t==="mimo")&&(e.includes("/")||e.startsWith("mimo")))return!0;if((t==="zai"||t==="zhipu"||t==="zhipuai")&&(e.includes("/")||e.startsWith("glm")))return!0;if((t==="abliteration"||t==="abliterationai"||t==="abliteration-ai")&&(e.includes("/")||e.startsWith("abliterated")))return!0;if((t==="agnes"||t==="agnesai"||t==="agnes-ai")&&(e.includes("/")||e.startsWith("agnes")))return!0;if(t==="aiand"&&(e.includes("/")||e.startsWith("deepseek")||e.startsWith("glm")||e.startsWith("kimi")||e.startsWith("gemma")||e.startsWith("gpt")||e.startsWith("motif")||e.startsWith("qwen")))return!0;if((t==="aki"||t==="aki-io"||t==="akiio")&&(e.includes("/")||e.startsWith("deepseek")||e.startsWith("glm")||e.startsWith("gemma")||e.startsWith("gpt")||e.startsWith("mistral")||e.startsWith("qwen")))return!0;if(t==="ambient"&&(e.includes("/")||e.startsWith("ambient")||e.startsWith("glm")||e.startsWith("qwen")||e.startsWith("z-ai")))return!0;if((t==="auriko"||t==="aurikoai"||t==="auriko-ai")&&(e.includes("/")||e.startsWith("claude")||e.startsWith("deepseek")||e.startsWith("gemini")||e.startsWith("glm")||e.startsWith("grok")||e.startsWith("kimi")||e.startsWith("minimax")||e.startsWith("qwen")))return!0;if((t==="baseten"||t==="basetenco"||t==="baseten-co")&&(e.includes("/")||e.startsWith("deepseek")||e.startsWith("zai")||e.startsWith("glm")||e.startsWith("moonshot")||e.startsWith("kimi")||e.startsWith("thinkingmachines")||e.startsWith("inkling")||e.startsWith("nvidia")||e.startsWith("nemotron")||e.startsWith("gpt")))return!0;if(t==="sakana"&&(e.includes("/")||e.startsWith("fugu")||e.startsWith("sakana")))return!0;if((t==="thinkingmachines"||t==="tinker"||t==="inkling")&&(e.includes("/")||e.startsWith("inkling")))return!0;if(t==="december"||t==="december_proxy")return e.toLowerCase()==="december-auto";if(Ce(t).some((c)=>c.value===e))return!0;let a=Date.now();for(let[c,u]of p.entries())if(c.startsWith(`${t}:`)&&a-u.timestamp<d){if(u.models.some((f)=>f.value===e))return!0}return!1},ie=(i)=>{let e=(i||"").toLowerCase().trim();if(e==="december"||e==="december_proxy")return"december-auto";let t=_.aliases[e]||e,r=_.providers[t];if(r&&r.defaultModel)return r.defaultModel;let a=Ce(i);if(a&&a.length>0)return a[0].value;return"gemini-3.8-flash"},Q=(i,e)=>{let t=(i||"").toLowerCase().trim();if(t==="december"||t==="december_proxy")return"december-auto";if((t==="thinkingmachines"||t==="tinker"||t==="inkling")&&e){let r=e.toLowerCase().trim();if(r==="inkling")return"thinkingmachines/Inkling";if(r==="inkling:peft:262144")return"thinkingmachines/Inkling:peft:262144"}if(e&&M(i,e))return e;return ie(i)};export{Ce,ft,ht,M,ie,Q};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{le,ue,D,Be,de}from"./chunk-f29e6jpz.js";import{V}from"./chunk-pm6vrdbq.js";import"./chunk-
|
|
1
|
+
import{le,ue,D,Be,de}from"./chunk-f29e6jpz.js";import{V}from"./chunk-pm6vrdbq.js";import"./chunk-r3xqtcj0.js";import"./chunk-xmvf453q.js";import{l,d}from"./chunk-2v3whmk6.js";import{execSync as y}from"node:child_process";import v from"node:fs/promises";import f from"node:path";var h=new de;async function k(n){if(n.input?.diff)return n.input.diff;let c=n.input?.TargetFile||n.input?.AbsolutePath||n.input?.filePath||n.input?.path;if(!c)return;let e=process.cwd(),s=f.resolve(e,c),p=f.relative(e,s),a="";try{a=await v.readFile(s,"utf-8")}catch{}if(n.name==="write_to_file"||n.name==="write"){let t=n.input?.CodeContent??n.input?.content??"";return V(p,a,t)}if(n.name==="replace_file_content"||n.name==="edit"){let t=n.input?.TargetContent,r=n.input?.ReplacementContent??"";if(t&&a.includes(t)){let i=n.input?.AllowMultiple?a.replaceAll(t,r):a.replace(t,r);return V(p,a,i)}}if(n.name==="multi_replace_file_content"){let t=n.input?.Replacements;if(Array.isArray(t)){let r=a;for(let i of t)if(i.TargetContent)r=i.AllowMultiple?r.replaceAll(i.TargetContent,i.ReplacementContent??""):r.replace(i.TargetContent,i.ReplacementContent??"");return V(p,a,r)}}return}function q(n,c){if(!n.operations.ui)n.operations.ui={};if(c&&typeof c.askQuestion==="function")n.operations.ui.askQuestion=(e)=>c.askQuestion(e);else if(c&&typeof c.requestQuestions==="function")n.operations.ui.askQuestion=(e)=>c.requestQuestions(e);else n.operations.ui.askQuestion=(e)=>new Promise((s)=>{c?.setAuthMode?.("ask_question"),c?.setPendingQuestions?.({questions:e,resolve:s})});n.operations.ui.requestPermission=async(e)=>{let s=await l(),p=le(e);for(let i of p){if(s.pathGuard!==!1){let o=ue(i);if(o.isSystemBlocked)return{block:!0,error:"Access denied: PathGuard restricted system or credential path"};if(o.isSecretAccess)e.isSecretAccess=!0}if(["view_file","write_to_file","replace_file_content","multi_replace_file_content","read_file","edit_file","edit_diff"].includes(e.name)){let o=process.cwd(),m=f.resolve(o,i),g=f.relative(o,m),w=g.startsWith("..")||f.isAbsolute(g);if(!s.nonWorkspaceAccess&&w)return{block:!0,error:"Access denied: Non-workspace access is disabled in settings"}}}let a=Be(e);if(a.tier==="safe"&&!e.isSecretAccess)return{block:!1};let t=e.name;if(e.name==="run_command"||e.name==="bash")t=(e.input?.CommandLine||e.input?.command||e.name).toString().trim();else if(e.input?.TargetFile||e.input?.path||e.input?.filePath||e.input?.AbsolutePath){let i=e.input?.TargetFile||e.input?.path||e.input?.filePath||e.input?.AbsolutePath;t=`${e.name}: ${i}`}if(a.tier==="modifying"&&!e.isSecretAccess){if((s.toolPermission??"always-proceed")==="always-proceed")return{block:!1};if(h.isApproved(t)||h.isApproved(e.name)||s.approvedTools?.includes(t)||s.approvedTools?.includes(e.name)||s.approvedTools?.some((i)=>{if(i.endsWith("*")&&t.startsWith(i.slice(0,-1)))return!0;return!1}))return{block:!1}}try{let i=await k(e);if(i)e.diff=i}catch{}let r="approve";if(c&&typeof c.requestToolPermission==="function"){let i=e.diff?e.diff.split(`
|
|
2
2
|
`):void 0;r=await c.requestToolPermission({toolName:e.name,commandOrTarget:t,diffLines:i})}else{let i=await new Promise((u)=>{c?.setAuthMode?.("tool_permission"),c?.setPendingToolCall?.({toolCall:e,resolve:u})});if(i?.block)r="deny";else if(i?.allowAlways)r="always";else if(i?.gitTrackedOnly)r="git_tracked";else r="approve"}if(r==="deny")return{block:!0,error:"User denied permission"};if(r==="always"){if(!D(t)){if(h.add(t),!s.approvedTools)s.approvedTools=[];if(!s.approvedTools.includes(t))s.approvedTools.push(t);if(!s.approvedTools.includes(e.name))s.approvedTools.push(e.name);await d(s)}return{block:!1}}if(r==="git_tracked"||r==="git-tracked"){let i=e.input?.TargetFile||e.input?.AbsolutePath||e.input?.filePath||e.input?.path;if(i){let u=process.cwd(),o=f.resolve(u,i),m=f.relative(u,o);try{return y(`git ls-files --error-unmatch "${m}"`,{cwd:u,stdio:"pipe"}),{block:!1}}catch{return{block:!0,error:`Permission denied: ${m} is not a git-tracked file.`}}}}return{block:!1}}}export{q as setupAgentInterceptors};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Ce,ft,ht,M,ie,Q}from"./chunk-
|
|
1
|
+
import{Ce,ft,ht,M,ie,Q}from"./chunk-xmvf453q.js";import"./chunk-r3xqtcj0.js";import"./chunk-f29e6jpz.js";export{Q as ensureValidModelForProvider,ft as fetchLiveProviderModels,ie as getDefaultModelForProvider,ht as getModelLabel,Ce as getProviderModels,M as isValidModelForProvider};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-f29e6jpz.js";import"./chunk-
|
|
1
|
+
import"./chunk-f29e6jpz.js";import"./chunk-r3xqtcj0.js";import"./chunk-xmvf453q.js";import{l}from"./chunk-2v3whmk6.js";import{k,ye,Ee}from"./chunk-zvdgqvnr.js";import{re,ne}from"./chunk-na0teb8x.js";import{A}from"./chunk-a9f9akac.js";import{exec as H}from"node:child_process";import L from"node:fs";function T(e){let t=e.toLowerCase();return t.includes("eacces")||t.includes("eperm")||t.includes("permission denied")||t.includes("missing write access")||t.includes("operation not permitted")}function W(e){let t=e?.configInstallMethod;if(t&&["npm","bun","pnpm","npx","curl","source"].includes(t))return t;let r=(e?.execPath??process.execPath??"").replace(/\\/g,"/"),u=e?.argv1??(process.argv.length>1?process.argv[1]:"")??"",m=u;try{if(u&&L.existsSync(u))m=L.realpathSync(u)}catch{}let y=u.replace(/\\/g,"/"),s=m.replace(/\\/g,"/"),n=`${y} ${s}`.toLowerCase(),o=e?.env??process.env;if(n.includes("/apps/cli/src")||n.includes("/apps/cli/dist")||n.includes("december/apps/cli"))return"source";if(n.includes("/_npx/")||n.includes("\\_npx\\")||n.includes("/.bunx/")||o.npm_config_user_agent?.includes("npx"))return"npx";if(r.includes(".december/bin")||n.includes(".december/bin")||r.includes(".local/bin/december")||n.includes(".local/bin/december")||r.endsWith("/december")&&!r.includes("node_modules")&&!r.includes(".bun")&&!r.includes("/node")||r.endsWith("/december.exe")||n.includes("december.exe"))return"curl";if(n.includes(".bun/bin")||n.includes("/.bun/")||r.includes("/bun")&&!r.endsWith("/node"))return"bun";if(n.includes("pnpm")||n.includes(".pnpm")||o.PNPM_HOME&&n.includes(o.PNPM_HOME.replace(/\\/g,"/").toLowerCase()))return"pnpm";return"npm"}function j(e,t=process.platform){switch(e){case"curl":{let v=t==="win32"||process.platform==="win32",r=v?'powershell -c "irm https://trydecember.com/install.ps1 | iex"':"curl -fsSL https://trydecember.com/install.sh | bash";return{command:r,manualCmd:r,description:v?"Standalone binary via PowerShell installer":"Standalone binary via curl installer"}}case"bun":return{command:"bun add -g @trydecember/cli@latest",manualCmd:"bun add -g @trydecember/cli@latest",description:"Bun global package"};case"pnpm":return{command:"pnpm add -g @trydecember/cli@latest",manualCmd:"pnpm add -g @trydecember/cli@latest",description:"PNPM global package"};case"npx":return{command:"npx @trydecember/cli@latest",manualCmd:"npx @trydecember/cli@latest",description:"NPX execution (always latest)"};case"source":return{command:"git pull && bun install && bun --cwd apps/cli run build",manualCmd:"git pull && bun install && bun --cwd apps/cli run build",description:"Local source repository"};case"npm":default:return{command:"npm install -g @trydecember/cli@latest",manualCmd:"npm install -g @trydecember/cli@latest",description:"NPM global package"}}}async function Q(e){let t=e?.configInstallMethod;if(!t)try{t=(await l()).installMethod}catch{}let v=e?.platform??process.platform,r=e?.diagnoseFn??ye,u=e?.cleanFn??Ee,m=null;try{m=await r({argv1:e?.argv1??(process.argv.length>1?process.argv[1]:void 0)})}catch{}let y=W({configInstallMethod:t,argv1:e?.argv1});if(!e?.configInstallMethod&&m?.activeBinary?.manager){let i=m.activeBinary.manager;if(i==="bun"||i==="npm"||i==="pnpm"||i==="curl"||i==="standalone"||i==="source")y=i==="standalone"?"curl":i}let s=y,{command:n,manualCmd:o,description:w}=j(s,v);if(s==="source")return e?.onProgress?.("Running December CLI from local source development directory."),{success:!0,method:"source",command:n,manualCmd:o,verified:!0,output:"Running December CLI from local source development directory."};if(s==="npx")return e?.onProgress?.("Running December CLI via npx/bunx. Each invocation automatically uses the latest version."),{success:!0,method:"npx",command:n,manualCmd:o,verified:!0,output:"Running December CLI via npx/bunx. Each invocation automatically uses the latest version."};let a;try{await ne();let h=await(e?.fetchLatestFn??re)();if(h)a=h}catch{}let g=e?.currentVersion??A.version,M=m?.activeBinary?.path;if(e?.onResolvedVersion?.({currentVersion:g,targetVersion:a,method:s,description:w,activeBinaryPath:M}),!e?.force&&a&&g&&k(g,a)>=0)return{success:!0,alreadyUpToDate:!0,method:s,command:n,manualCmd:o,targetVersion:a,installedVersion:g,activeVersion:g,activeBinaryPath:M,verified:!0,output:`December CLI is already up to date (v${g}).`};e?.onProgress?.(`Updating December CLI${a?` to v${a}`:""} via ${w}...`);let _=e?.execFn??H,E=s==="curl"?600000:180000;return new Promise((i)=>{_(n,{timeout:E},async(h,N,O)=>{if(h){let b=(O||h.message||"Unknown update failure").trim(),p=T(b),c=p&&(s==="npm"||s==="bun"||s==="pnpm")?`sudo ${o}`:void 0;e?.onError?.(b,c||o),i({success:!1,method:s,command:n,manualCmd:o,targetVersion:a,verified:!1,isPermissionError:p,sudoCmd:c,error:b});return}try{await ne()}catch{}let B=!0,x=a,I=a,V,D=!1,P=[],C=[],F,S=!1,R;if(!e?.skipVerification)try{e?.onProgress?.("Verifying updated binary and PATH resolution...");let p=(await r()).allBinaries,c=p[0];for(let f of p)if(f.version&&(!c?.version||k(f.version,c.version)>0))c=f;if(c?.version)x=c.version;if(p.length>1&&c){e?.onProgress?.("Resolving multiple installation paths to ensure active terminal uses latest version...");let f=await u(c,p);if(P=f.cleanedOrForwarded,C=f.failedBinaries,P.length>0)D=!0,S=!0}let d=await r();if(d.activeBinary)I=d.activeBinary.version,V=d.activeBinary.path;if(a&&d.activeBinary?.version&&k(d.activeBinary.version,a)<0)B=!1,F=d.activeBinary,R=`December CLI was updated to v${x}, but your active terminal still starts an older version (runs v${d.activeBinary.version} from ${d.activeBinary.path}).`}catch{}let U=B;if(U&&e?.onSuccess)try{await e.onSuccess()}catch{}i({success:U,method:s,command:n,manualCmd:o,targetVersion:a,installedVersion:x,activeVersion:I,activeBinaryPath:V,verified:B,collisionFixed:D,cleanedBinaries:P,failedBinaries:C.length>0?C:void 0,shadowingBinary:F,shellHashNotice:S,error:R,output:(N||"Update completed successfully.").trim()})})})}export{Q as performCliUpdate};
|
package/dist/december.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{A,x}from"./chunk-
|
|
2
|
+
import{A,x}from"./chunk-a9f9akac.js";import Ie from"node:path";import{parseArgs as Ye}from"node:util";function ge(T){try{let{values:s,positionals:f}=Ye({args:T,options:{help:{type:"boolean",short:"h"},version:{type:"boolean",short:"v"},yes:{type:"boolean",short:"y"},json:{type:"boolean"},rpc:{type:"boolean"},print:{type:"boolean"},fix:{type:"boolean"},force:{type:"boolean",short:"f"},global:{type:"boolean",short:"g"},local:{type:"boolean",short:"l"},resume:{type:"boolean",short:"r"},model:{type:"string",short:"m"},provider:{type:"string",short:"p"},"session-id":{type:"string"},scope:{type:"string"},cwd:{type:"string"},turn:{type:"string",short:"t"},list:{type:"boolean"},token:{type:"string"}},allowPositionals:!0,strict:!1}),h=Boolean(s.help),_=Boolean(s.version),U=Boolean(s.yes),g=Boolean(s.json),F=Boolean(s.rpc),N=Boolean(s.print),D=Boolean(s.fix),y=Boolean(s.force),Y=Boolean(s.global),J=Boolean(s.local),X=Boolean(s.resume),b=!1,{model:w,provider:z}=s,M=s["session-id"],{scope:Z,cwd:V}=s,ee=s.turn?parseInt(s.turn,10):void 0,te=Boolean(s.list),oe=s.token,P=["login","logout","switch","update","doctor","auth","link","key","resume","changelog","docs","ask","skill","skills","mcp","open","codesearch","rewind","undo"],R,v;if(f.length>0){let E=f[0];if(P.includes(E))R=E;else v=f.join(" ")}return{command:R,prompt:v,isHelp:h,isVersion:_,yes:U,json:g,rpc:F,print:N,fix:D,force:y,isGlobal:Y,isLocal:J,resume:X||R==="resume",isInline:!1,model:w,provider:z,sessionId:M,scope:Z,cwd:V,turn:ee,list:te,token:oe,positionals:f}}catch{return{isHelp:!1,isVersion:!1,yes:!1,json:!1,rpc:!1,print:!1,fix:!1,force:!1,isGlobal:!1,isLocal:!1,resume:!1,isInline:!1,turn:void 0,list:!1,positionals:[]}}}function fe(T="0.0.0",s){let f="",h=s?.mcpServers;if(h&&Object.keys(h).length>0)f=`
|
|
3
3
|
Configured MCP Servers:
|
|
4
4
|
${Object.entries(h).map(([U,g])=>{let F=g.command?"stdio":"sse",N=g.command?`${g.command}${g.args?" "+g.args.join(" "):""}`:g.url||g.endpoint||g.sse||"",D=g.disabled?" (disabled)":"";return` • ${U} (${F})${D}: ${N}`}).join(`
|
|
5
5
|
`)}
|
|
@@ -43,19 +43,19 @@ Options:
|
|
|
43
43
|
Please run \`/login\` to:
|
|
44
44
|
- Link an AI Subscription (Copilot, Claude, ChatGPT, Gemini), or
|
|
45
45
|
- Sign in with your December account (Cloud Wallet), or
|
|
46
|
-
- Configure Bring Your Own Key (BYOK) for providers like OpenAI, Anthropic, Gemini, OpenRouter, etc.`;var Re={version:"0.4.
|
|
46
|
+
- Configure Bring Your Own Key (BYOK) for providers like OpenAI, Anthropic, Gemini, OpenRouter, etc.`;var Re={version:"0.4.17",title:"What's New in v0.4.17",bullets:["Add intelligence section to landing page","Add parallel workflows and comparison sections"],url:"https://trydecember.com/docs/changelog"};var we=process.argv.slice(2);if(we.length===1&&(we[0]==="-v"||we[0]==="--version"))console.log(A.version),process.exit(0);x();async function Xe(){if(process.stdin.isTTY)return null;return new Promise((T)=>{let s="";process.stdin.setEncoding("utf8"),process.stdin.on("data",(f)=>{s+=f}),process.stdin.on("end",()=>{T(s.trim()?s:null)}),process.stdin.on("error",()=>{T(null)})})}async function ze(){process.title="december";let T=process.argv.includes("--print");if(process.stdout.isTTY&&!T)process.stdout.write("\x1B]0;december\x07");let s=ge(process.argv.slice(2));if(s.isHelp){let{loadMcpConfigSync:e}=await import("./chunk-9fzhnky1.js"),t=e({workspaceDir:s.cwd||process.cwd()});console.log(fe(A.version,{mcpServers:t})),process.exit(0)}if(s.isVersion)console.log(A.version),process.exit(0);if(s.cwd)process.chdir(s.cwd),x(s.cwd);let f=await Xe();if(f){let e=`<piped_stdin>
|
|
47
47
|
${f}
|
|
48
48
|
</piped_stdin>`;if(s.prompt)s.prompt=`${s.prompt}
|
|
49
49
|
|
|
50
|
-
${e}`;else s.prompt=e}if(s.command==="auth"){let e=s.positionals[1]||"status",{handleAuthCommand:t}=await import("./chunk-
|
|
50
|
+
${e}`;else s.prompt=e}if(s.command==="auth"){let e=s.positionals[1]||"status",{handleAuthCommand:t}=await import("./chunk-thj1c82c.js");await t({action:e}),process.exit(0)}if(s.command==="mcp"){let e=s.positionals[1]||"status",{handleMcpCommand:t}=await import("./chunk-thj1c82c.js");await t({action:e}),process.exit(0)}if(s.command==="link"){let e=s.positionals[1],{handleLinkCommand:t}=await import("./chunk-thj1c82c.js");await t({provider:e}),process.exit(0)}if(s.command==="key"){let e=s.positionals[1],t=s.positionals[2],{handleKeyCommand:n}=await import("./chunk-thj1c82c.js");await n({provider:e,key:t}),process.exit(0)}if(s.command==="logout"){let e=s.positionals[1],{handleLogoutCommand:t}=await import("./chunk-thj1c82c.js");await t({provider:e}),process.exit(0)}if(s.command==="switch"){let e=s.positionals[1],{handleSwitchCommand:t}=await import("./chunk-thj1c82c.js");await t({provider:e}),process.exit(process.exitCode||0)}if(s.command==="login"){let e=s.positionals[1],t=e&&(e.startsWith("ey")||e.length>50),n=t?void 0:e,a=s.token||(t?e:void 0),{handleLoginCommand:c}=await import("./chunk-thj1c82c.js");await c({provider:n,token:a}),process.exit(0)}if(s.command==="init"||s.positionals[0]==="init")console.log(`
|
|
51
51
|
The "init" command has been removed. December does not scaffold a .december directory in project roots.
|
|
52
52
|
To define project-specific instructions, create an AGENTS.md file in your project root.
|
|
53
|
-
`),process.exit(0);if(s.command==="update"){let{handleUpdateCommand:e}=await import("./chunk-
|
|
54
|
-
`),process.exit(1);s.prompt=e}let _=Boolean(s.prompt||s.rpc||s.print),{ensureWorkspaceTrust:U}=await import("./chunk-
|
|
55
|
-
`),process.exit(1);let[{AgentHarness:e},{openaiProvider:t},n,{FileSessionRepository:a},{getProviderConfig:c,loadConfig:i},{runHeadlessTask:l},{localOperations:m,setActiveScopeDir:p},{instantiateProvider:K},{ensureValidModelForProvider:q},{getAskPrompt:je}]=await Promise.all([import("./chunk-
|
|
53
|
+
`),process.exit(0);if(s.command==="update"){let{handleUpdateCommand:e}=await import("./chunk-thj1c82c.js");await e({force:s.force}),process.exit(process.exitCode||0)}if(s.command==="doctor"){let{handleDoctorCommand:e}=await import("./chunk-thj1c82c.js");await e({fix:s.fix}),process.exit(0)}if(s.command==="changelog"){let{handleChangelogCommand:e}=await import("./chunk-thj1c82c.js");await e(),process.exit(0)}if(s.command==="docs"){let e=s.positionals[1],{handleDocsCommand:t}=await import("./chunk-thj1c82c.js");await t({section:e}),process.exit(0)}if(s.command==="open"){let e=s.positionals[1],{handleOpenCommand:t}=await import("./chunk-thj1c82c.js");await t({path:e}),process.exit(process.exitCode||0)}if(s.command==="codesearch"){let e=s.positionals.slice(1).join(" "),{handleCodeSearchCommand:t}=await import("./chunk-thj1c82c.js");await t({query:e}),process.exit(process.exitCode||0)}if(s.command==="rewind"||s.command==="undo"){let e=s.positionals[1],t=e&&!isNaN(parseInt(e,10))?parseInt(e,10):s.turn,n=s.positionals[1]==="list"||s.list,{handleRewindCommand:a}=await import("./chunk-thj1c82c.js");await a({turn:t,list:n}),process.exit(0)}if(s.command==="skill"||s.command==="skills"){let{handleSkillCommand:e}=await import("./chunk-thj1c82c.js");await e({action:s.positionals[1],target:s.positionals[2],isGlobal:s.isGlobal}),process.exit(process.exitCode||0)}let h=s.command==="ask";if(h){let e=s.positionals.slice(1).join(" ").trim()||s.prompt;if(!e)console.error("Error: Please provide a question to ask."),console.error(`Usage: december ask "<question>"
|
|
54
|
+
`),process.exit(1);s.prompt=e}let _=Boolean(s.prompt||s.rpc||s.print),{ensureWorkspaceTrust:U}=await import("./chunk-p7ypw1ek.js");if(await U({targetDir:s.scope,isHeadless:_}),_){if(s.print&&!s.prompt)console.error(`Error: Please provide a prompt or pipe input when using --print.
|
|
55
|
+
`),process.exit(1);let[{AgentHarness:e},{openaiProvider:t},n,{FileSessionRepository:a},{getProviderConfig:c,loadConfig:i},{runHeadlessTask:l},{localOperations:m,setActiveScopeDir:p},{instantiateProvider:K},{ensureValidModelForProvider:q},{getAskPrompt:je}]=await Promise.all([import("./chunk-tfm9hw72.js"),import("./chunk-s6qwb256.js"),import("./chunk-9fzhnky1.js"),import("./chunk-6k0j49z8.js"),import("./chunk-30rph1jz.js"),import("./chunk-s8xnygcc.js"),import("./chunk-hce06q17.js"),import("./chunk-gh8x9zrw.js"),import("./chunk-y4exfe42.js"),import("./chunk-ptytc7pd.js")]);if(s.scope)p(s.scope),x(s.scope);let k=await c(),le;if(k)le=K(k.provider,k.apiKey,{authMethod:k.authMethod,subscription:k.subscription,headers:k.headers,baseURL:k.baseURL});else le=t(void 0,"dummy-key");let Ae=new a,de=s.sessionId;if(s.resume&&!de){let De=await Ae.listSessions();if(De.length>0)de=De[0].id}let Be=de||`session-${Date.now()}`,O=await i(),Ge=k?.provider||O.activeProvider||"gemini",We=k?.authMethod==="december"?"december-auto":s.model||k?.model||q(Ge,O.activeModel),He=h?[n.ReadFileTool,n.LsTool,n.FindFilesTool,n.GrepSearchTool,n.AskQuestionTool,n.SearchToolsTool]:n.CORE_TOOLS,Qe=h?[]:n.DEFERRED_TOOLS,pe=s.scope?Ie.resolve(process.cwd(),s.scope):process.cwd(),me=new n.McpClientManager({workspaceDir:pe}),xe=await n.loadMcpConfig({workspaceDir:pe});if(Object.keys(xe).length>0)await me.connectAll(xe).catch(()=>{});let Ee=new e({llm:le,tools:He,deferredTools:Qe,mcpClientManager:me,operations:m,modelOptions:{model:We,thinkingLevel:O.thinkingLevel||"auto"},sessionRepository:Ae,sessionId:Be,runtime:"cli",workspaceDir:pe,thinkingLevel:O.thinkingLevel||"auto",steeringMode:O.steeringMode||"all",followUpMode:O.followUpMode||"all",lean:!0}).getAgent();await Ee.loadContext();let ue=Boolean(s.print),Ke=s.rpc||!ue&&!s.json,Le=s.prompt||"",qe=h?je(Le):Le,Ve=await l(qe,{agent:Ee,nonInteractive:s.yes||ue,json:s.json,rpc:Ke,print:ue,readOnly:h});await me.disconnectAll().catch(()=>{}),process.exit(Ve.success?0:1)}let[{AgentHarness:g,runAgentLoop:F},{openaiProvider:N,getModelContextWindow:D},y,{DifferentialApp:Y},{FileSessionRepository:J},{getProviderConfig:X,loadConfig:b,saveConfig:w,getAuthStatus:z,getConfiguredProviders:M},{suppressConsole:Z},{localOperations:V,setActiveScopeDir:ee},{instantiateProvider:te},{ensureValidModelForProvider:oe,getModelLabel:P,getProviderModels:R},{useCliStore:v},{convertAgentMessagesToDifferentialMessages:E}]=await Promise.all([import("./chunk-tfm9hw72.js"),import("./chunk-s6qwb256.js"),import("./chunk-9fzhnky1.js"),import("./chunk-838g1q94.js"),import("./chunk-6k0j49z8.js"),import("./chunk-30rph1jz.js"),import("./chunk-s8xnygcc.js"),import("./chunk-hce06q17.js"),import("./chunk-gh8x9zrw.js"),import("./chunk-y4exfe42.js"),import("./chunk-pfs2w82h.js"),import("./chunk-qnkabdb4.js")]);if(s.scope)ee(s.scope);Z();let u=await X(),ve=await z(),se;if(u)se=te(u.provider,u.apiKey,{authMethod:u.authMethod,subscription:u.subscription,headers:u.headers,baseURL:u.baseURL});else se=N(void 0,"dummy-key");let ne=!!u,j=new J,B=await j.listSessions(),L=s.sessionId,ie=s.command==="resume",ye=Boolean(s.resume),be=!1;if(ie||ye){if(!L&&s.positionals[1])L=s.positionals[1];if(!L){if(ye&&!ie){if(B.length>0)L=B[0].id}else if(ie){if(be=!0,B.length>0)L=B[0].id}}}let ke=L||`session-${Date.now()}`,d=await b(),G=u?.provider||d.activeProvider||"gemini",I=u?.authMethod==="december"?"december-auto":s.model||u?.model||oe(G,d.activeModel);if(v.getState().setActiveModel(I),v.getState().setSelectedProvider(G),v.getState().setIsAuthenticated(ne),v.getState().setHasDecember(ve.hasDecember),d.decemberToken&&d.email)v.getState().setDecemberEmail(d.email);if(u?.authMethod)v.getState().setAuthMethod(u.authMethod);if(!ne)if(!d.email&&!d.decemberToken)v.getState().setAuthMode("none");else v.getState().setAuthMode("menu");let re=s.scope?Ie.resolve(process.cwd(),s.scope):process.cwd(),ae=new y.McpClientManager({workspaceDir:re}),Se=await y.loadMcpConfig({workspaceDir:re});if(Object.keys(Se).length>0)await ae.connectAll(Se).catch(()=>{});let W=new g({llm:se,tools:y.CORE_TOOLS,deferredTools:y.DEFERRED_TOOLS,mcpClientManager:ae,operations:V,modelOptions:{model:I,thinkingLevel:d.thinkingLevel||"auto"},sessionRepository:j,sessionId:ke,runtime:"cli",workspaceDir:re,thinkingLevel:d.thinkingLevel||"auto",steeringMode:d.steeringMode||"all",followUpMode:d.followUpMode||"all"}),r=W.getAgent(),Oe=d.decemberToken?d.email:u?.subscription?.email||d.email||void 0,o,S=null,C=null,H=async(e)=>{let t="";o.state.isStreaming=!0,o.startSpinner(),o.render();try{let n=e;if(n.includes("@")&&!n.includes("<context_file"))try{let{resolveContextMentions:i}=await import("./chunk-e0n8qqj3.js");n=(await i(n,process.cwd())).expandedPrompt}catch{}let{getToolSummary:a}=await import("./chunk-r15jzbyw.js"),c=F(r,n);for await(let i of c)if(i.type==="StreamChunk")o.clearStatusMessage(),o.appendStreamDelta(i.content),t+=i.content;else if(i.type==="ThinkingChunk")o.appendThinkingChunk(i.content);else if(i.type==="AgentStatus")if(i.message&&i.message.trim().length>0)o.setStatusMessage(i.message.trim());else o.clearStatusMessage();else if(i.type==="AgentError")o.clearStatusMessage(),o.state.messages.push({role:"error",content:i.error}),o.render();else if(i.type==="AgentInterrupt")o.clearStatusMessage(),o.appendStreamDelta(`
|
|
56
56
|
|
|
57
|
-
Interrupted · What should December do instead?`);else if(i.type==="ToolCallStart"){o.flushStream(),o.clearStatusMessage();let l=typeof i.toolCall.input==="string"?i.toolCall.input:JSON.stringify(i.toolCall.input||{});o.appendToolCall({id:i.toolCall.id,name:i.toolCall.name,input:i.toolCall.input,command:a(i.toolCall.name,l)})}else if(i.type==="ToolExecutionUpdate")o.updateToolExecution(i.toolCallId,i.chunk);else if(i.type==="ToolCallResult")o.updateToolResult(i.result.toolCallId,{output:i.result.error||i.result.result,isError:Boolean(i.result.error)});else if(i.type==="AgentUsage")o.state.contextTokens=i.promptTokens+i.completionTokens,o.render()}catch(n){o.state.messages.push({role:"error",content:n.message||"Execution error"})}finally{o.finishStream(),o.refreshWorkspaceFiles().catch(()=>{}),setTimeout(()=>{o.drainPromptQueue()},0)}return t},Ce=async(e,t)=>{let n=await o.requestPlanApproval({summary:e,fullPlan:t});if(n==="approve"){o.showToast("Plan approved. Launching autonomous execution...","success");let{getPlanExecutionPrompt:a}=await import("./chunk-ptytc7pd.js"),c=a(e,t);S=null,C=null,await H(c)}else if(n==="refine")o.setInput("/plan refine: "),o.showToast("Enter feedback to refine the plan","info");else if(n==="view");else if(n==="reject")S=null,C=null,o.showToast("Plan discarded.","info")},_e=(e,t,n)=>[{id:"provider",title:"Active Provider",value:t||e.activeProvider||"Claude"},{id:"model",title:"Active Model",value:n?P(n):e.activeModel?P(e.activeModel):"Claude 3.5 Sonnet"},{id:"tool_permission",title:"Tool Permission",value:e.toolPermission||"always-proceed"},{id:"pathguard",title:"PathGuard Protection",value:e.pathGuard===!1?"off":"on"},{id:"non_workspace",title:"Non-Workspace Access",value:e.nonWorkspaceAccess?"on":"off"},{id:"thinking_level",title:"Thinking Level",value:e.thinkingLevel||"auto"},{id:"steering_mode",title:"Steering Mode",value:e.steeringMode||"all"},{id:"follow_up_mode",title:"Follow-Up Mode",value:e.followUpMode||"all"},{id:"browser_visible",title:"Browser Visible",value:e.browserVisible?"on":"off"}],{taskManager:Q}=await import("./chunk-fyg38ery.js"),Te=(e)=>e.map((t)=>{let n,a=t.completedAt?t.completedAt.getTime():Date.now(),c=Math.max(0,a-t.createdAt.getTime()),i=Math.floor(c/1000);if(i<60)n=`${i}s`;else n=`${Math.floor(i/60)}m ${i%60}s`;return{id:t.id,command:t.command,status:t.status==="running"?"running":t.status==="completed"?"completed":"failed",duration:n,exitCode:t.exitCode??void 0,output:t.output}});o=new Y({settings:_e(d,G,I),tasks:Te(Q.getTasks()),onKillTask:(e)=>{Q.killTask(e)},cliVersion:A.version,userEmail:Oe,decemberEmail:d.decemberToken?d.email:void 0,hasDecember:ve.hasDecember,isAuthenticated:ne,authRequiredNotice:he,modelLabel:P(I),activeModel:I,authMethod:u?.authMethod,selectedProvider:G,models:R(G),getProviderModels:(e)=>R(e),contextTokens:0,maxContextTokens:D(I),sessionId:ke,thinkingLevel:d.thinkingLevel||"auto",onAbort:()=>{if(r?.activeAbortController)r.activeAbortController.abort()},sessions:B.map((e)=>({id:e.id,preview:e.preview||e.id,updatedAt:e.updatedAt||Date.now(),messageCount:e.messageCount})),sessionRepository:j,onSessionSelect:async(e)=>{try{await r.loadContext(e),o.state.messages=E(r.messages||[]),o.state.sessionId=e,o.state.scrollOffset=void 0,o.render()}catch(t){o.showToast(`Failed to resume session: ${t.message}`,"error")}},onSessionDelete:async(e)=>{try{await j.deleteSession(e)}catch{}},onSessionRename:async(e,t)=>{try{await j.renameSession(e,t)}catch{}},onEffortSelect:async(e)=>{if(r){if(r.thinkingLevel=e,r.modelOptions)r.modelOptions.thinkingLevel=e}if(W)W.updateThinkingLevel(e);try{let t=await b();await w({...t,thinkingLevel:e})}catch{}},onSettingChange:async(e,t)=>{try{let n=await b();if(e==="pathguard")n.pathGuard=t==="on";else if(e==="non_workspace")n.nonWorkspaceAccess=t==="on";else if(e==="tool_permission")n.toolPermission=t;else if(e==="thinking_level"){if(n.thinkingLevel=t,r){if(r.thinkingLevel=t,r.modelOptions)r.modelOptions.thinkingLevel=t}if(W)W.updateThinkingLevel(t)}else if(e==="steering_mode"){if(n.steeringMode=t,r&&r.steeringQueue)r.steeringQueue.mode=t}else if(e==="follow_up_mode"){if(n.followUpMode=t,r&&r.followUpQueue)r.followUpQueue.mode=t}else if(e==="browser_visible")n.browserVisible=t==="on";await w(n)}catch{}},onModelSelect:async(e)=>{try{let t=await b();if(t.activeModel=e.value,await w(t),r&&r.modelOptions)r.modelOptions.model=e.value;o.state.activeModel=e.value,o.state.modelLabel=e.label,o.state.maxContextTokens=D(e.value),o.render()}catch{}},onLogin:async(e,t)=>{let{loginViaDeviceCode:n}=await import("./chunk-
|
|
57
|
+
Interrupted · What should December do instead?`);else if(i.type==="ToolCallStart"){o.flushStream(),o.clearStatusMessage();let l=typeof i.toolCall.input==="string"?i.toolCall.input:JSON.stringify(i.toolCall.input||{});o.appendToolCall({id:i.toolCall.id,name:i.toolCall.name,input:i.toolCall.input,command:a(i.toolCall.name,l)})}else if(i.type==="ToolExecutionUpdate")o.updateToolExecution(i.toolCallId,i.chunk);else if(i.type==="ToolCallResult")o.updateToolResult(i.result.toolCallId,{output:i.result.error||i.result.result,isError:Boolean(i.result.error)});else if(i.type==="AgentUsage")o.state.contextTokens=i.promptTokens+i.completionTokens,o.render()}catch(n){o.state.messages.push({role:"error",content:n.message||"Execution error"})}finally{o.finishStream(),o.refreshWorkspaceFiles().catch(()=>{}),setTimeout(()=>{o.drainPromptQueue()},0)}return t},Ce=async(e,t)=>{let n=await o.requestPlanApproval({summary:e,fullPlan:t});if(n==="approve"){o.showToast("Plan approved. Launching autonomous execution...","success");let{getPlanExecutionPrompt:a}=await import("./chunk-ptytc7pd.js"),c=a(e,t);S=null,C=null,await H(c)}else if(n==="refine")o.setInput("/plan refine: "),o.showToast("Enter feedback to refine the plan","info");else if(n==="view");else if(n==="reject")S=null,C=null,o.showToast("Plan discarded.","info")},_e=(e,t,n)=>[{id:"provider",title:"Active Provider",value:t||e.activeProvider||"Claude"},{id:"model",title:"Active Model",value:n?P(n):e.activeModel?P(e.activeModel):"Claude 3.5 Sonnet"},{id:"tool_permission",title:"Tool Permission",value:e.toolPermission||"always-proceed"},{id:"pathguard",title:"PathGuard Protection",value:e.pathGuard===!1?"off":"on"},{id:"non_workspace",title:"Non-Workspace Access",value:e.nonWorkspaceAccess?"on":"off"},{id:"thinking_level",title:"Thinking Level",value:e.thinkingLevel||"auto"},{id:"steering_mode",title:"Steering Mode",value:e.steeringMode||"all"},{id:"follow_up_mode",title:"Follow-Up Mode",value:e.followUpMode||"all"},{id:"browser_visible",title:"Browser Visible",value:e.browserVisible?"on":"off"}],{taskManager:Q}=await import("./chunk-fyg38ery.js"),Te=(e)=>e.map((t)=>{let n,a=t.completedAt?t.completedAt.getTime():Date.now(),c=Math.max(0,a-t.createdAt.getTime()),i=Math.floor(c/1000);if(i<60)n=`${i}s`;else n=`${Math.floor(i/60)}m ${i%60}s`;return{id:t.id,command:t.command,status:t.status==="running"?"running":t.status==="completed"?"completed":"failed",duration:n,exitCode:t.exitCode??void 0,output:t.output}});o=new Y({settings:_e(d,G,I),tasks:Te(Q.getTasks()),onKillTask:(e)=>{Q.killTask(e)},cliVersion:A.version,userEmail:Oe,decemberEmail:d.decemberToken?d.email:void 0,hasDecember:ve.hasDecember,isAuthenticated:ne,authRequiredNotice:he,modelLabel:P(I),activeModel:I,authMethod:u?.authMethod,selectedProvider:G,models:R(G),getProviderModels:(e)=>R(e),contextTokens:0,maxContextTokens:D(I),sessionId:ke,thinkingLevel:d.thinkingLevel||"auto",onAbort:()=>{if(r?.activeAbortController)r.activeAbortController.abort()},sessions:B.map((e)=>({id:e.id,preview:e.preview||e.id,updatedAt:e.updatedAt||Date.now(),messageCount:e.messageCount})),sessionRepository:j,onSessionSelect:async(e)=>{try{await r.loadContext(e),o.state.messages=E(r.messages||[]),o.state.sessionId=e,o.state.scrollOffset=void 0,o.render()}catch(t){o.showToast(`Failed to resume session: ${t.message}`,"error")}},onSessionDelete:async(e)=>{try{await j.deleteSession(e)}catch{}},onSessionRename:async(e,t)=>{try{await j.renameSession(e,t)}catch{}},onEffortSelect:async(e)=>{if(r){if(r.thinkingLevel=e,r.modelOptions)r.modelOptions.thinkingLevel=e}if(W)W.updateThinkingLevel(e);try{let t=await b();await w({...t,thinkingLevel:e})}catch{}},onSettingChange:async(e,t)=>{try{let n=await b();if(e==="pathguard")n.pathGuard=t==="on";else if(e==="non_workspace")n.nonWorkspaceAccess=t==="on";else if(e==="tool_permission")n.toolPermission=t;else if(e==="thinking_level"){if(n.thinkingLevel=t,r){if(r.thinkingLevel=t,r.modelOptions)r.modelOptions.thinkingLevel=t}if(W)W.updateThinkingLevel(t)}else if(e==="steering_mode"){if(n.steeringMode=t,r&&r.steeringQueue)r.steeringQueue.mode=t}else if(e==="follow_up_mode"){if(n.followUpMode=t,r&&r.followUpQueue)r.followUpQueue.mode=t}else if(e==="browser_visible")n.browserVisible=t==="on";await w(n)}catch{}},onModelSelect:async(e)=>{try{let t=await b();if(t.activeModel=e.value,await w(t),r&&r.modelOptions)r.modelOptions.model=e.value;o.state.activeModel=e.value,o.state.modelLabel=e.label,o.state.maxContextTokens=D(e.value),o.render()}catch{}},onLogin:async(e,t)=>{let{loginViaDeviceCode:n}=await import("./chunk-w6v3r8wn.js"),a=await n(void 0,e,t);try{let c=await b();await w({...c,decemberToken:a.token,email:a.email||void 0,authPriority:"december",activeModel:"december-auto"})}catch{}return a},onSubscriptionLogin:async(e,t)=>{let{loginSubscription:n}=await import("./chunk-jv16a9em.js"),a=await n(e,(c,i)=>{if(t)t(c,i)});try{let{getDefaultModelForProvider:c,fetchLiveProviderModels:i}=await import("./chunk-y4exfe42.js"),l=c(a.provider||e),m=await b();m.subscriptions=m.subscriptions||{},m.subscriptions[a.provider||e]=a;let p=a.provider||e;if(m.activeProvider=p,m.activeModel=l,m.authPriority="subscription",await w(m),o.state.selectedProvider=p,o.state.authMethod="subscription",o.state.activeModel=l,o.state.modelLabel=P(l),o.state.switchItems=M(m),o.refreshModelsForProvider(p),r){let{instantiateProvider:K}=await import("./chunk-gh8x9zrw.js"),q=K(a.provider,a.accessToken,{authMethod:"subscription",subscription:a,baseURL:a.endpoint});if(r.setLLM(q),r.modelOptions)r.modelOptions.model=l}i(a.provider||e,a.accessToken,a.endpoint).catch(()=>{})}catch{}return a},onSaveApiKey:async(e,t)=>{try{let n=await b();n.providers=n.providers||{},n.providers[e]=t,n.activeProvider=e,n.authPriority="byok";let{getDefaultModelForProvider:a,fetchLiveProviderModels:c}=await import("./chunk-y4exfe42.js"),i=a(e);n.activeModel=i,await w(n),o.state.selectedProvider=e,o.state.authMethod="byok",o.state.activeModel=i,o.state.modelLabel=P(i),o.state.switchItems=M(n),o.refreshModelsForProvider(e),c(e,t).catch(()=>{})}catch{}},switchItems:M(d),onSwitchSelect:async(e)=>{let{resolveSwitchTarget:t,applyProviderSwitch:n,getProviderConfig:a}=await import("./chunk-30rph1jz.js"),c=await b(),i=t(c,e);if(!i)return;let{config:l,model:m}=n(c,i);await w(l);let p=await a();if(p&&r){let{instantiateProvider:K}=await import("./chunk-gh8x9zrw.js"),q=K(p.provider,p.apiKey,{authMethod:p.authMethod,subscription:p.subscription,headers:p.headers,baseURL:p.baseURL});if(r.setLLM(q),r.modelOptions)r.modelOptions.model=m}o.state.activeModel=m,o.state.modelLabel=P(m),o.state.selectedProvider=i.provider,o.state.authMethod=i.authPriority,o.state.switchItems=M(l),o.refreshModelsForProvider(i.provider),o.render()},onDeleteProvider:async(e)=>{let t=await b();if(e==="decemberToken")t.decemberToken=void 0,t.email=void 0;else if(e.startsWith("subscription:")){let n=e.split(":")[1];if(n&&t.subscriptions)delete t.subscriptions[n]}else if(e.startsWith("provider:")||e.startsWith("byok:")){let n=e.replace(/^(provider|byok):/,"");if(n&&t.providers)delete t.providers[n]}await w(t),o.state.switchItems=M(t),o.render()},onCodeSearch:async(e)=>{try{let t=await V.search.grep(".",e),{parseGrepOutput:n}=await import("./chunk-838g1q94.js");return n(t,process.cwd())}catch{return[]}},onSideQuestion:async(e,t)=>{try{let{runSideQuestion:n}=await import("./chunk-tfm9hw72.js");await n(r,e,{signal:t.signal,onChunk:t.onChunk}),t.onComplete()}catch(n){t.onError(n)}},onExecuteDirectCommand:async(e)=>{let t=`shell_${Date.now()}`;o.appendToolCall({id:t,name:"execute_command",command:e}),o.state.isStreaming=!0,o.render();try{let{startDirectCommand:n}=await import("./chunk-eghr4f7v.js"),{promise:a}=n(e,{timeoutMs:30000,onData:(l)=>{o.updateToolExecution(t,l)},onBackground:(l)=>{o.updateToolExecution(t,`
|
|
58
58
|
[Moved to background task: ${l}. Use /tasks to inspect.]
|
|
59
59
|
`),o.updateToolResult(t,{output:`[Moved to background task: ${l}. Use /tasks to inspect.]`,isError:!1}),o.showToast(`Command moved to background (${l}). Use /tasks to view logs.`,"info")}}),c=await a,i=c.isBackground?(c.output?c.output.trim()+`
|
|
60
60
|
`:"")+`[Moved to background task: ${c.taskId}. Use /tasks to inspect.]`:c.output;if(o.updateToolResult(t,{output:i,isError:c.exitCode!==0}),r&&r.messages)r.messages.push({role:"user",content:`!${e}`}),r.messages.push({role:"assistant",content:`[Direct Shell Output: ${e}]
|
|
61
|
-
${c.output}`})}catch(n){o.updateToolResult(t,{output:n.message||"Execution failed",isError:!0})}finally{o.state.isStreaming=!1,o.render(),setTimeout(()=>{o.drainPromptQueue()},0)}},onUndo:async()=>{try{if(r){let i=await r.rollbackLastTurn();o.state.messages=E(r.messages||[]);let l=(i.restoredFiles?.length||0)+(i.deletedFiles?.length||0);o.showToast(`Undid Turn ${i.targetTurn}. (${l} file${l===1?"":"s"} affected)`,"success"),o.render();return}let{getSnapshotManager:e}=await import("./chunk-9fzhnky1.js"),t=e(process.cwd());if(await t.init(),t.getSnapshots().length===0){o.showToast("No turn snapshots recorded in this session.","info");return}o.showToast("Reverting last agent turn...","info");let a=await t.rollbackLastTurn(),c=(a.restoredFiles?.length||0)+(a.deletedFiles?.length||0);o.showToast(`Undid Turn ${a.targetTurn}. (${c} file${c===1?"":"s"} affected)`,"success")}catch(e){o.showToast(`Failed to undo: ${e.message}`,"error")}},onRewindTurn:async(e)=>{try{if(r){let i=await r.rollbackToTurn(e);o.state.messages=E(r.messages||[]);let l=(i.restoredFiles?.length||0)+(i.deletedFiles?.length||0);o.showToast(`Rewound to Turn ${e}. (${l} file${l===1?"":"s"} affected)`,"success"),o.render();return}let{getSnapshotManager:t}=await import("./chunk-9fzhnky1.js"),n=t(process.cwd());await n.init();let a=await n.rollbackToTurn(e),c=(a.restoredFiles?.length||0)+(a.deletedFiles?.length||0);o.showToast(`Rewound to Turn ${e}. (${c} file${c===1?"":"s"} affected)`,"success"),o.render()}catch(t){o.showToast(`Failed to rewind: ${t.message}`,"error")}},onLoadRewindTurns:async()=>{try{let{getSnapshotManager:e}=await import("./chunk-9fzhnky1.js"),t=e(process.cwd());return await t.init(),[...t.getSnapshots()].sort((a,c)=>c.turnIndex-a.turnIndex).map((a)=>({turnIndex:a.turnIndex,commitHash:a.commitHash,prompt:a.prompt,timestamp:a.timestamp,touchedFiles:a.touchedFiles}))}catch{return[]}},onClearContext:async()=>{if(r)await r.clearContext(),o.state.messages=[],o.state.contextTokens=0,o.render()},onNewContext:async()=>{if(r)return await r.newContext(),o.state.messages=[],o.state.contextTokens=0,o.state.sessionId=r.sessionId,o.render(),r.sessionId},onForkContext:async(e)=>{if(r){let t=await r.forkContext(e);return o.state.sessionId=t,o.render(),t}},onSubmit:async(e)=>{if(o.state.isStreaming){o.state.promptQueue.push(e),o.showToast(`Prompt queued (#${o.state.promptQueue.length}). Will run after turn finishes.`,"info"),o.render();return}if(!o.state.isAuthenticated){o.state.messages.push({role:"assistant",content:he}),o.state.isStreaming=!1,o.render();return}let t=e.startsWith("/plan refine"),n=e==="/plan approve"||e.startsWith("/plan approve"),a=e==="/plan reject"||e.startsWith("/plan reject"),c=(e.startsWith("/plan ")||e==="/plan")&&!t&&!n&&!a;if(a){S=null,C=null,o.showToast("Plan discarded.","info");return}if(n){if(!S||!C){o.showToast("No active plan to approve.","info");return}o.showToast("Plan approved. Launching autonomous execution...","success");let{getPlanExecutionPrompt:i}=await import("./chunk-ptytc7pd.js"),l=i(S,C);S=null,C=null,await H(l);return}if(c){let i=e.replace(/^\/plan\s*/,"").trim();if(i){S=i;let{getPlanPrompt:l}=await import("./chunk-ptytc7pd.js"),m=l(i,[]),p=await H(m);C=p,await Ce(i,p)}return}if(t){let i=e.replace(/^\/plan\s+refine:?\s*/i,"").trim(),{getPlanRefinePrompt:l}=await import("./chunk-ptytc7pd.js"),m=l(S||"implementation plan",C||"",i),p=await H(m);C=p,await Ce(S||"implementation plan",p);return}await H(e)},onExit:()=>{ce()},onLoadMemoryDetails:async()=>{let{getWorkspaceMemoryDetails:e}=await import("./chunk-9fzhnky1.js");return e(process.cwd())},onLoadProjectRules:async()=>{let{discoverProjectRules:e}=await import("./chunk-e0n8qqj3.js");return e(process.cwd())},onRecordMemory:async(e,t)=>{let{recordMemoryDirect:n}=await import("./chunk-9fzhnky1.js"),a=await n(process.cwd(),e,t);if(a.success&&r?.conversation?.initSession)try{r.conversation.initSession({workspaceRoot:process.cwd(),systemPrompt:r.systemPrompt})}catch{}return a},onForgetMemory:async(e)=>{let{forgetMemoryDirect:t}=await import("./chunk-9fzhnky1.js"),n=await t(process.cwd(),e);if(n.success&&r?.conversation?.initSession)try{r.conversation.initSession({workspaceRoot:process.cwd(),systemPrompt:r.systemPrompt})}catch{}return n},onScaffoldRules:async()=>{let e=await import("node:fs/promises"),t=await import("node:path"),{DEFAULT_AGENTS_MD_TEMPLATE:n}=await import("./chunk-9fzhnky1.js"),a=t.join(process.cwd(),"AGENTS.md");if(await e.writeFile(a,n,"utf8"),r?.conversation?.initSession)try{r.conversation.initSession({workspaceRoot:process.cwd(),systemPrompt:r.systemPrompt})}catch{}return{success:!0,message:"Created AGENTS.md"}},onOpenEditor:async(e)=>{let{openPath:t}=await import("./chunk-y11aydfy.js");await t(e)}});let{setupAgentInterceptors:$e}=await import("./chunk-
|
|
61
|
+
${c.output}`})}catch(n){o.updateToolResult(t,{output:n.message||"Execution failed",isError:!0})}finally{o.state.isStreaming=!1,o.render(),setTimeout(()=>{o.drainPromptQueue()},0)}},onUndo:async()=>{try{if(r){let i=await r.rollbackLastTurn();o.state.messages=E(r.messages||[]);let l=(i.restoredFiles?.length||0)+(i.deletedFiles?.length||0);o.showToast(`Undid Turn ${i.targetTurn}. (${l} file${l===1?"":"s"} affected)`,"success"),o.render();return}let{getSnapshotManager:e}=await import("./chunk-9fzhnky1.js"),t=e(process.cwd());if(await t.init(),t.getSnapshots().length===0){o.showToast("No turn snapshots recorded in this session.","info");return}o.showToast("Reverting last agent turn...","info");let a=await t.rollbackLastTurn(),c=(a.restoredFiles?.length||0)+(a.deletedFiles?.length||0);o.showToast(`Undid Turn ${a.targetTurn}. (${c} file${c===1?"":"s"} affected)`,"success")}catch(e){o.showToast(`Failed to undo: ${e.message}`,"error")}},onRewindTurn:async(e)=>{try{if(r){let i=await r.rollbackToTurn(e);o.state.messages=E(r.messages||[]);let l=(i.restoredFiles?.length||0)+(i.deletedFiles?.length||0);o.showToast(`Rewound to Turn ${e}. (${l} file${l===1?"":"s"} affected)`,"success"),o.render();return}let{getSnapshotManager:t}=await import("./chunk-9fzhnky1.js"),n=t(process.cwd());await n.init();let a=await n.rollbackToTurn(e),c=(a.restoredFiles?.length||0)+(a.deletedFiles?.length||0);o.showToast(`Rewound to Turn ${e}. (${c} file${c===1?"":"s"} affected)`,"success"),o.render()}catch(t){o.showToast(`Failed to rewind: ${t.message}`,"error")}},onLoadRewindTurns:async()=>{try{let{getSnapshotManager:e}=await import("./chunk-9fzhnky1.js"),t=e(process.cwd());return await t.init(),[...t.getSnapshots()].sort((a,c)=>c.turnIndex-a.turnIndex).map((a)=>({turnIndex:a.turnIndex,commitHash:a.commitHash,prompt:a.prompt,timestamp:a.timestamp,touchedFiles:a.touchedFiles}))}catch{return[]}},onClearContext:async()=>{if(r)await r.clearContext(),o.state.messages=[],o.state.contextTokens=0,o.render()},onNewContext:async()=>{if(r)return await r.newContext(),o.state.messages=[],o.state.contextTokens=0,o.state.sessionId=r.sessionId,o.render(),r.sessionId},onForkContext:async(e)=>{if(r){let t=await r.forkContext(e);return o.state.sessionId=t,o.render(),t}},onSubmit:async(e)=>{if(o.state.isStreaming){o.state.promptQueue.push(e),o.showToast(`Prompt queued (#${o.state.promptQueue.length}). Will run after turn finishes.`,"info"),o.render();return}if(!o.state.isAuthenticated){o.state.messages.push({role:"assistant",content:he}),o.state.isStreaming=!1,o.render();return}let t=e.startsWith("/plan refine"),n=e==="/plan approve"||e.startsWith("/plan approve"),a=e==="/plan reject"||e.startsWith("/plan reject"),c=(e.startsWith("/plan ")||e==="/plan")&&!t&&!n&&!a;if(a){S=null,C=null,o.showToast("Plan discarded.","info");return}if(n){if(!S||!C){o.showToast("No active plan to approve.","info");return}o.showToast("Plan approved. Launching autonomous execution...","success");let{getPlanExecutionPrompt:i}=await import("./chunk-ptytc7pd.js"),l=i(S,C);S=null,C=null,await H(l);return}if(c){let i=e.replace(/^\/plan\s*/,"").trim();if(i){S=i;let{getPlanPrompt:l}=await import("./chunk-ptytc7pd.js"),m=l(i,[]),p=await H(m);C=p,await Ce(i,p)}return}if(t){let i=e.replace(/^\/plan\s+refine:?\s*/i,"").trim(),{getPlanRefinePrompt:l}=await import("./chunk-ptytc7pd.js"),m=l(S||"implementation plan",C||"",i),p=await H(m);C=p,await Ce(S||"implementation plan",p);return}await H(e)},onExit:()=>{ce()},onLoadMemoryDetails:async()=>{let{getWorkspaceMemoryDetails:e}=await import("./chunk-9fzhnky1.js");return e(process.cwd())},onLoadProjectRules:async()=>{let{discoverProjectRules:e}=await import("./chunk-e0n8qqj3.js");return e(process.cwd())},onRecordMemory:async(e,t)=>{let{recordMemoryDirect:n}=await import("./chunk-9fzhnky1.js"),a=await n(process.cwd(),e,t);if(a.success&&r?.conversation?.initSession)try{r.conversation.initSession({workspaceRoot:process.cwd(),systemPrompt:r.systemPrompt})}catch{}return a},onForgetMemory:async(e)=>{let{forgetMemoryDirect:t}=await import("./chunk-9fzhnky1.js"),n=await t(process.cwd(),e);if(n.success&&r?.conversation?.initSession)try{r.conversation.initSession({workspaceRoot:process.cwd(),systemPrompt:r.systemPrompt})}catch{}return n},onScaffoldRules:async()=>{let e=await import("node:fs/promises"),t=await import("node:path"),{DEFAULT_AGENTS_MD_TEMPLATE:n}=await import("./chunk-9fzhnky1.js"),a=t.join(process.cwd(),"AGENTS.md");if(await e.writeFile(a,n,"utf8"),r?.conversation?.initSession)try{r.conversation.initSession({workspaceRoot:process.cwd(),systemPrompt:r.systemPrompt})}catch{}return{success:!0,message:"Created AGENTS.md"}},onOpenEditor:async(e)=>{let{openPath:t}=await import("./chunk-y11aydfy.js");await t(e)}});let{setupAgentInterceptors:$e}=await import("./chunk-xy30xdh4.js");$e(r,o);let Pe=()=>{o.updateTasks(Te(Q.getTasks()))};Q.on("change",Pe),o.refreshWorkspaceFiles().catch(()=>{}),import("./chunk-r9cwadte.js").then(({checkForLatestVersion:e})=>{e(A.version).then((t)=>{if(t)o.state.latestVersion=t,o.render()})}).catch(()=>{});let ce=()=>{Q.off("change",Pe),ae.disconnectAll().catch(()=>{}),o.stop(),process.exit(0)};if(process.stdout.isTTY)process.on("SIGINT",ce),process.on("SIGTERM",ce);if(L)await r.loadContext().catch(()=>{}),o.state.messages=E(r.messages||[]);else r.loadContext().catch(()=>{});if(be)o.state.activeOverlay="session",o.state.sessionSelectedIndex=0,o.state.sessionWindowStart=0;let{compareVersions:Ue}=await import("./chunk-x852gev0.js"),Me=!d.lastSeenVersion||Ue(A.version,d.lastSeenVersion)>0;if(Me)d.lastSeenVersion=A.version,w(d).catch(()=>{});let{resolveAnnouncement:Fe}=await import("./chunk-jxc475jz.js"),Ne=Fe({config:d,isNewVersion:Me,releaseHighlights:Re});o.state.announcement=Ne,o.start()}ze().catch(console.error);export{fe as getHelpText,ge as parseCliArgs,x as purgeProjectEnvApiKeys,Xe as readPipedStdin};
|
package/package.json
CHANGED
package/dist/chunk-2d7a3axf.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{lt,re,ne}from"./chunk-v9qfg9qs.js";import"./chunk-0x66zzs3.js";import"./chunk-hx3vcz8k.js";import"./chunk-f0bms32h.js";import"./chunk-f29e6jpz.js";export{lt as checkForLatestVersion,ne as clearVersionCheckCache,re as fetchLatestFromNpm};
|
package/dist/chunk-8fp4jhg4.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C,$e,X,st}from"./chunk-dzg63jm4.js";import"./chunk-f0bms32h.js";import"./chunk-pm6vrdbq.js";import"./chunk-f29e6jpz.js";export{$e as AgentHarness,X as LspClient,C as runAgentLoop,st as runSideQuestion};
|
package/dist/chunk-jw9ezcf3.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{We,Ve}from"./chunk-b9mkrg3w.js";export{We as generatePKCE,Ve as startLocalOAuthServer};
|
package/dist/chunk-ngdy60dw.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ue,Z,nt}from"./chunk-f7mf3a1w.js";import"./chunk-rzb7f538.js";import"./chunk-z6n9adth.js";import"./chunk-dzg63jm4.js";import"./chunk-f0bms32h.js";import"./chunk-pm6vrdbq.js";import"./chunk-f29e6jpz.js";export{Z as SERVER_READY_REGEX,nt as localOperations,Ue as setActiveScopeDir};
|