@pithosai/pithosai 1.0.32 → 1.0.33
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/heartbeat.mjs +19 -18
- package/dist/pithosai-git-ai-adapter.mjs +1 -1
- package/dist/pithosai.mjs +16 -15
- package/package.json +1 -1
package/dist/heartbeat.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createRequire as e}from"node:module";let t=e(import.meta.url);var a,i,r,o,n,s,l,d,c,u,p,m={1092(e){e.exports=import("@earendil-works/pi-agent-core").then(function(e){return e})},2425(e){e.exports=import("@earendil-works/pi-ai").then(function(e){return e})},6623(e){e.exports=import("@earendil-works/pi-ai/api/openai-completions").then(function(e){return e})},9868(e){e.exports=import("@earendil-works/pi-ai/compat").then(function(e){return e})},3565(e){e.exports=import("@earendil-works/pi-coding-agent").then(function(e){return e})},2615(e){e.exports=import("@earendil-works/pi-tui").then(function(e){return e})},2478(e){e.exports=import("@earendil-works/pi-tui/dist/native-modifiers.js").then(function(e){return e})},4204(e){e.exports=import("@sinclair/typebox").then(function(e){return e})},11(e){e.exports=import("adm-zip").then(function(e){return e})},3529(e){e.exports=import("better-sqlite3").then(function(e){return e})},5590(e){e.exports=import("chalk").then(function(e){return e})},9748(e){e.exports=import("chokidar").then(function(e){return e})},1351(e){e.exports=import("cli-table3").then(function(e){return e})},5347(e){e.exports=import("commander").then(function(e){return e})},3317(e){e.exports=import("cron-parser").then(function(e){return e})},35(e){e.exports=import("handlebars").then(function(e){return e})},2022(e){e.exports=import("i18next").then(function(e){return e})},9155(e){e.exports=import("isomorphic-git").then(function(e){return e})},8684(e){e.exports=import("json5").then(function(e){return e})},4082(e){e.exports=import("log4js").then(function(e){return e})},8703(e){e.exports=import("marked").then(function(e){return e})},9658(e){e.exports=import("node-cron").then(function(e){return e})},9493(e){e.exports=import("ollama").then(function(e){return e})},9392(e){e.exports=import("playwright").then(function(e){return e})},2641(e){e.exports=import("proper-lockfile").then(function(e){return e})},7522(e){e.exports=import("readdirp").then(function(e){return e})},4132(e){e.exports=import("uuid").then(function(e){return e})},1943(e){e.exports=t("fs/promises")},6698(e){e.exports=t("node:async_hooks")},1421(e){e.exports=t("node:child_process")},7598(e){e.exports=t("node:crypto")},8474(e){e.exports=t("node:events")},3024(e){e.exports=t("node:fs")},1455(e){e.exports=t("node:fs/promises")},8995(e){e.exports=t("node:module")},8161(e){e.exports=t("node:os")},6760(e){e.exports=t("node:path")},481(e){e.exports=t("node:readline")},3136(e){e.exports=t("node:url")},7975(e){e.exports=t("node:util")},6928(e){e.exports=t("path")},272(e,t,a){a.a(e,async function(e,t){try{var i=a(8376),r=a(5012),o=a(4071),n=e([i,o]);[i,o]=n.then?(await n)():n,(async function(){let e=await (0,i.T)(),t=[process.argv[0],"email-monitor","heartbeat",...process.argv.slice(2)];await e.parseAsync(t),await (0,o.dz)()})().catch(async e=>{(0,o.vV)(e.message||String(e)),await (0,o.dz)(),process.exit(r.dc.RUNTIME)}),t()}catch(e){t(e)}})},4239(e,t,a){a.a(e,async function(e,i){try{a.d(t,{i:()=>s,w:()=>l});var r=a(8474),o=a(2568),n=e([o]);o=(n.then?(await n)():n)[0];let s={IDLE:"idle",RUNNING:"running",PAUSED:"paused",STOPPED:"stopped"};class l extends r.EventEmitter{constructor(){super(),this._agent=null,this._status=s.IDLE,this._currentRequest=null,this._currentTask=null}get status(){return this._status}get agent(){return this._agent}get currentRequest(){return this._currentRequest}get currentTask(){return this._currentTask}attach(e,t,a){this._agent=e,this._status=s.RUNNING,this._currentRequest=t,this._currentTask=a??null}detach(){this._agent=null,this._status===s.RUNNING&&(this._status=s.IDLE)}stop(){this._agent&&this._status===s.RUNNING&&(this._agent.abort(),this._status=s.STOPPED,this.emit("stopped"))}pause(){this._agent&&this._status===s.RUNNING&&(this._agent.abort(),this._status=s.PAUSED,this.emit("paused"))}resume(){this._status=s.IDLE,this.emit("resumed")}updateRequest(e){this._currentRequest=e}attachImage(e,t){return this._status!==s.RUNNING&&!!t&&(t.attachImage(e),!0)}steerNote(e){return!!this._agent&&this._status===s.RUNNING&&(0,o.EP)(this._agent,e)}queueFollowUp(e){return!!this._agent&&this._status===s.RUNNING&&(0,o.NI)(this._agent,e)}reset(){this._agent=null,this._status=s.IDLE,this._currentRequest=null,this._currentTask=null}}i()}catch(e){i(e)}})},1165(e,t,a){a.d(t,{D0:()=>s,VL:()=>n,gc:()=>l,o4:()=>o});let i=null;function r(){return i||(i={write(e,t={}){("stderr"===t.stream?process.stderr:process.stdout).write(e)}}),i}function o(e){return e??r()}function n(){return{silent:!0,write(e,t){}}}function s(e){return null!=e&&!0===e.silent}function l(e){return"1"===process.env.PITHOSAI_SUBAGENT_VERBOSE||"true"===process.env.PITHOSAI_SUBAGENT_VERBOSE?e??r():n()}},6275(e,t,a){a.a(e,async function(e,i){try{a.d(t,{F:()=>c});var r=a(8641),o=a(9949),n=a(4071),s=a(1165),l=a(2306),d=e([l,n,r,o]);[l,n,r,o]=d.then?(await d)():d;let u=!1,p="",m=(0,o.fD)(),g=(0,l.E8)();function c(e={}){let t=!0===e.markdown,a=(0,s.o4)(e.outputSink);return e=>{switch("agent_start"===e.type&&(u=!1,p="",(0,o.Cl)(m),g.reset(),a.resetAssistantBody?.()),e.type){case"tool_execution_start":(0,r.Rp)(e,a);break;case"tool_execution_update":(0,r.sJ)(e);break;case"tool_execution_end":(0,r.g4)(e,a);break;case"turn_end":{let t=e.message,a={messageRole:t?.role,stopReason:t?.stopReason,contentBlocks:t?.content?.length??0,toolResultsCount:e.toolResults?.length??0,toolResults:e.toolResults?.map(e=>({toolName:e.toolName,isError:e.isError}))};(0,n.IW)(`[turn_end] ${JSON.stringify(a)}`);break}case"message_update":if(e.assistantMessageEvent?.type==="text_delta"){let i=e.assistantMessageEvent.delta??"",n=g.push(i);if(n){let e=!u;if(u=!0,p+=n,t){if(e&&a.beginAssistantBody?.(),(0,o.sO)(m,n),(0,o.NG)(m)){let e=(0,r.R$)((0,o.DP)(m),{markdown:!0});e&&a.write(e,{kind:"assistant"})}}else(0,r.ld)(n,{withNewlineHeuristics:!0,outputSink:a})}else t||""!==i||(0,r.ld)(n,{withNewlineHeuristics:!0,outputSink:a})}break;case"message_end":if(e.message?.role==="assistant"){let i=g.flush();if(i)if(u=!0,p+=i,t){(0,o.sO)(m,i);let e=(0,r.R$)((0,o.DP)(m),{markdown:!0});e&&a.write(e,{kind:"assistant"})}else(0,r.ld)(i,{withNewlineHeuristics:!0,outputSink:a});let s=(0,l.w$)((0,r.JZ)(e.message)).text;if(e.message.errorMessage||e.message.error)"aborted"!==e.message.stopReason&&(0,r.cU)(e.message,a);else if(u){if(t&&m.pendingBuffer){let e=(0,r.R$)((0,o.DP)(m),{markdown:!0});e&&a.write(e,{kind:"assistant"})}if(t&&s){let e=(0,r.R$)(s,{markdown:!0});a.finalizeAssistantBody?.(e)}s?(0,n.IW)(s):p&&(0,n.IW)(p)}else if(!u&&s){let e=(0,r.R$)(s,{markdown:t});a.write(e,{kind:"assistant"}),(0,n.IW)(s)}(0,r.cD)(e.message)}p="",(0,o.Cl)(m),g.reset(),u=!1,a.resetAssistantBody?.()}}}i()}catch(e){i(e)}})},546(e,t,a){a.a(e,async function(e,i){try{a.d(t,{FX:()=>r.F,gY:()=>o.g});var r=a(6275),o=a(8302),n=a(8641),s=e([r,o,n]);[r,o,n]=s.then?(await s)():s,i()}catch(e){i(e)}})},9949(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Cl:()=>s,DP:()=>c,NG:()=>d,fD:()=>n,sO:()=>l});var r=a(161),o=e([r]);function n(){return{pendingBuffer:"",inFencedCodeBlock:!1}}function s(e){e.pendingBuffer="",e.inFencedCodeBlock=!1}function l(e,t){t&&(function(e){if(!e)return 0;let t=e.match(/```/g);return t?t.length:0}(t)%2==1&&(e.inFencedCodeBlock=!e.inFencedCodeBlock),e.pendingBuffer+=t)}r=(o.then?(await o)():o)[0];let u=/^\s*\d+\.(?:\s+|$)/;function d(e){let t;if(!e.pendingBuffer||e.inFencedCodeBlock||!e.pendingBuffer.includes("\n\n")||(0,r.i8)(e.pendingBuffer))return!1;let a=function(e){let t=String(e??"").match(/^(.*)\n\n+/s);if(!t)return null;let a=t[1].split(/\n\n+/);for(let e=a.length-1;e>=0;e--)if(""!==a[e].trim())return a[e];return null}(e.pendingBuffer);return!(null!=a&&(t=String(a??"").split(/\r?\n/).filter(e=>""!==e.trim()),0!==t.length&&u.test(t[0])))}function c(e){let t=e.pendingBuffer;return e.pendingBuffer="",t}i()}catch(e){i(e)}})},8641(e,t,a){a.a(e,async function(e,i){try{a.d(t,{JZ:()=>w,Lf:()=>u,Mr:()=>A,R$:()=>b,Rp:()=>f,_Y:()=>R,bE:()=>h,cD:()=>C,cU:()=>I,d7:()=>p,g4:()=>v,ld:()=>E,rT:()=>D,sJ:()=>k,u$:()=>T,u7:()=>P});var r=a(4071),o=a(161),n=a(5460),s=a(1165),l=a(6498),d=e([o,r]);[o,r]=d.then?(await d)():d;let L="\x1b[32m",x="\x1b[31m",j="\x1b[0m",M="\x1b[48;2;30;41;59m",O="\x1b[38;2;236;242;255m";function c(e){return String(e??"").replace(/\r/g,"").split("\n").map(e=>`${M}${O} ${e} ${j}`).join("\n")}function u(e){return null==e?"":"string"==typeof e?e:"object"==typeof e?JSON.stringify(e):String(e)}function p(e){return(0,n.cs)(e)}let N=new Set(["task",l.Q4]);function m(e){if(null==e)return"";if("string"==typeof e)return""===e.trim()?"":e;try{return JSON.stringify(e,null,2)}catch(t){return console.error("[message-utils] failed to stringify subagent summary field",t),String(e)}}function g(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return"";if(t===l.Q4){let t=m(e.findings);return t||m(e.error)}if("task"===t){let t=m(e.result);return t||m(e.error)}return""}function h(e){if(!e?.content||!Array.isArray(e.content))return"";let t=e.content.filter(e=>e?.type==="text"&&e?.text!=null).map(e=>e.text).join("");return(t=function(e){if("string"!=typeof e||!e.trim())return e;let t=e.trim();if(!1===(t.startsWith("{")&&t.endsWith("}")))return e;try{let a=JSON.parse(t);if(!a||"object"!=typeof a||!Array.isArray(a.content))return e;return a.content.filter(e=>e?.type==="text"&&e?.text!=null).map(e=>e.text).join("")}catch{return e}}(t)).length<=8e3?t:t.slice(0,8e3)+"\n... (truncated)"}function f(e,t){let a=(0,s.o4)(t),i=`${e.toolName} ${u(e.args)}`.trim();a.write(c(i)+"\n",{kind:"tool"}),(0,r.IW)(`[tool] ${e.toolName} ${u(e.args)}`)}function k(e){let t="string"==typeof e.partialResult?e.partialResult:JSON.stringify(e.partialResult??"");(0,r.IW)(`[tool] ${e.toolName} partial result => ${t}`)}function v(e,t){let a=(0,s.o4)(t),i=e.isError?x+"✗"+j:L+"✓"+j,o=e.isError?e.result&&h(e.result)||e.errorMessage||"error":h(e.result),l=e.isError?"✗":"✓";if(o){var d;let t,s,u=(d={toolName:e.toolName,resultText:o,details:e.result?.details},t=(0,n.cs)(d.resultText),!(s=function(e){let t=String(e?.toolName??"").trim();if(!N.has(t))return"";let a=g(e?.details,t);return a||g(function(e){if("string"!=typeof e||""===e.trim())return null;let t=e.trim();if(!1===(t.startsWith("{")&&t.endsWith("}")))return null;try{return JSON.parse(t)}catch(e){return console.error("[message-utils] failed to parse subagent tool result JSON",e),null}}(e?.resultText),t)}(d))||"string"==typeof t&&t.includes(s)?t:`${t}
|
|
3
|
-
${s}`),p=b(u,{markdown:!0}).split("\n").map(e=>e.trimEnd()).filter(e=>""!==e.trim());if(p.length>0){let t=e.isError?x
|
|
2
|
+
import{createRequire as e}from"node:module";let t=e(import.meta.url);var a,i,r,o,n,s,l,d,c,u,p,m={1092(e){e.exports=import("@earendil-works/pi-agent-core").then(function(e){return e})},2425(e){e.exports=import("@earendil-works/pi-ai").then(function(e){return e})},6623(e){e.exports=import("@earendil-works/pi-ai/api/openai-completions").then(function(e){return e})},9868(e){e.exports=import("@earendil-works/pi-ai/compat").then(function(e){return e})},3565(e){e.exports=import("@earendil-works/pi-coding-agent").then(function(e){return e})},2615(e){e.exports=import("@earendil-works/pi-tui").then(function(e){return e})},2478(e){e.exports=import("@earendil-works/pi-tui/dist/native-modifiers.js").then(function(e){return e})},4204(e){e.exports=import("@sinclair/typebox").then(function(e){return e})},11(e){e.exports=import("adm-zip").then(function(e){return e})},3529(e){e.exports=import("better-sqlite3").then(function(e){return e})},5590(e){e.exports=import("chalk").then(function(e){return e})},9748(e){e.exports=import("chokidar").then(function(e){return e})},1351(e){e.exports=import("cli-table3").then(function(e){return e})},5347(e){e.exports=import("commander").then(function(e){return e})},3317(e){e.exports=import("cron-parser").then(function(e){return e})},35(e){e.exports=import("handlebars").then(function(e){return e})},2022(e){e.exports=import("i18next").then(function(e){return e})},9155(e){e.exports=import("isomorphic-git").then(function(e){return e})},8684(e){e.exports=import("json5").then(function(e){return e})},4082(e){e.exports=import("log4js").then(function(e){return e})},8703(e){e.exports=import("marked").then(function(e){return e})},9658(e){e.exports=import("node-cron").then(function(e){return e})},9493(e){e.exports=import("ollama").then(function(e){return e})},9392(e){e.exports=import("playwright").then(function(e){return e})},2641(e){e.exports=import("proper-lockfile").then(function(e){return e})},7522(e){e.exports=import("readdirp").then(function(e){return e})},4132(e){e.exports=import("uuid").then(function(e){return e})},1943(e){e.exports=t("fs/promises")},6698(e){e.exports=t("node:async_hooks")},1421(e){e.exports=t("node:child_process")},7598(e){e.exports=t("node:crypto")},8474(e){e.exports=t("node:events")},3024(e){e.exports=t("node:fs")},1455(e){e.exports=t("node:fs/promises")},8995(e){e.exports=t("node:module")},8161(e){e.exports=t("node:os")},6760(e){e.exports=t("node:path")},481(e){e.exports=t("node:readline")},3136(e){e.exports=t("node:url")},7975(e){e.exports=t("node:util")},6928(e){e.exports=t("path")},272(e,t,a){a.a(e,async function(e,t){try{var i=a(8376),r=a(5012),o=a(4071),n=e([i,o]);[i,o]=n.then?(await n)():n,(async function(){let e=await (0,i.T)(),t=[process.argv[0],"email-monitor","heartbeat",...process.argv.slice(2)];await e.parseAsync(t),await (0,o.dz)()})().catch(async e=>{(0,o.vV)(e.message||String(e)),await (0,o.dz)(),process.exit(r.dc.RUNTIME)}),t()}catch(e){t(e)}})},4239(e,t,a){a.a(e,async function(e,i){try{a.d(t,{i:()=>s,w:()=>l});var r=a(8474),o=a(2568),n=e([o]);o=(n.then?(await n)():n)[0];let s={IDLE:"idle",RUNNING:"running",PAUSED:"paused",STOPPED:"stopped"};class l extends r.EventEmitter{constructor(){super(),this._agent=null,this._status=s.IDLE,this._currentRequest=null,this._currentTask=null}get status(){return this._status}get agent(){return this._agent}get currentRequest(){return this._currentRequest}get currentTask(){return this._currentTask}attach(e,t,a){this._agent=e,this._status=s.RUNNING,this._currentRequest=t,this._currentTask=a??null}detach(){this._agent=null,this._status===s.RUNNING&&(this._status=s.IDLE)}stop(){this._agent&&this._status===s.RUNNING&&(this._agent.abort(),this._status=s.STOPPED,this.emit("stopped"))}pause(){this._agent&&this._status===s.RUNNING&&(this._agent.abort(),this._status=s.PAUSED,this.emit("paused"))}resume(){this._status=s.IDLE,this.emit("resumed")}updateRequest(e){this._currentRequest=e}attachImage(e,t){return this._status!==s.RUNNING&&!!t&&(t.attachImage(e),!0)}steerNote(e){return!!this._agent&&this._status===s.RUNNING&&(0,o.EP)(this._agent,e)}queueFollowUp(e){return!!this._agent&&this._status===s.RUNNING&&(0,o.NI)(this._agent,e)}reset(){this._agent=null,this._status=s.IDLE,this._currentRequest=null,this._currentTask=null}}i()}catch(e){i(e)}})},1165(e,t,a){a.d(t,{D0:()=>s,VL:()=>n,gc:()=>l,o4:()=>o});let i=null;function r(){return i||(i={write(e,t={}){("stderr"===t.stream?process.stderr:process.stdout).write(e)}}),i}function o(e){return e??r()}function n(){return{silent:!0,write(e,t){}}}function s(e){return null!=e&&!0===e.silent}function l(e){return"1"===process.env.PITHOSAI_SUBAGENT_VERBOSE||"true"===process.env.PITHOSAI_SUBAGENT_VERBOSE?e??r():n()}},6275(e,t,a){a.a(e,async function(e,i){try{a.d(t,{F:()=>c});var r=a(8641),o=a(9949),n=a(4071),s=a(1165),l=a(2306),d=e([l,n,r,o]);[l,n,r,o]=d.then?(await d)():d;let u=!1,p="",m=(0,o.fD)(),g=(0,l.E8)();function c(e={}){let t=!0===e.markdown,a=(0,s.o4)(e.outputSink);return e=>{switch("agent_start"===e.type&&(u=!1,p="",(0,o.Cl)(m),g.reset(),a.resetAssistantBody?.()),e.type){case"tool_execution_start":(0,r.Rp)(e,a);break;case"tool_execution_update":(0,r.sJ)(e);break;case"tool_execution_end":(0,r.g4)(e,a);break;case"turn_end":{let t=e.message,a={messageRole:t?.role,stopReason:t?.stopReason,contentBlocks:t?.content?.length??0,toolResultsCount:e.toolResults?.length??0,toolResults:e.toolResults?.map(e=>({toolName:e.toolName,isError:e.isError}))};(0,n.IW)(`[turn_end] ${JSON.stringify(a)}`);break}case"message_update":if(e.assistantMessageEvent?.type==="text_delta"){let i=e.assistantMessageEvent.delta??"",n=g.push(i);if(n){let e=!u;if(u=!0,p+=n,t){if(e&&a.beginAssistantBody?.(),(0,o.sO)(m,n),(0,o.NG)(m)){let e=(0,r.R$)((0,o.DP)(m),{markdown:!0});e&&a.write(e,{kind:"assistant"})}}else(0,r.ld)(n,{withNewlineHeuristics:!0,outputSink:a})}else t||""!==i||(0,r.ld)(n,{withNewlineHeuristics:!0,outputSink:a})}break;case"message_end":if(e.message?.role==="assistant"){let i=g.flush();if(i)if(u=!0,p+=i,t){(0,o.sO)(m,i);let e=(0,r.R$)((0,o.DP)(m),{markdown:!0});e&&a.write(e,{kind:"assistant"})}else(0,r.ld)(i,{withNewlineHeuristics:!0,outputSink:a});let s=(0,l.w$)((0,r.JZ)(e.message)).text;if(e.message.errorMessage||e.message.error)"aborted"!==e.message.stopReason&&(0,r.cU)(e.message,a);else if(u){if(t&&m.pendingBuffer){let e=(0,r.R$)((0,o.DP)(m),{markdown:!0});e&&a.write(e,{kind:"assistant"})}if(t&&s){let e=(0,r.R$)(s,{markdown:!0});a.finalizeAssistantBody?.(e)}s?(0,n.IW)(s):p&&(0,n.IW)(p)}else if(!u&&s){let e=(0,r.R$)(s,{markdown:t});a.write(e,{kind:"assistant"}),(0,n.IW)(s)}(0,r.cD)(e.message)}p="",(0,o.Cl)(m),g.reset(),u=!1,a.resetAssistantBody?.()}}}i()}catch(e){i(e)}})},546(e,t,a){a.a(e,async function(e,i){try{a.d(t,{FX:()=>r.F,gY:()=>o.g});var r=a(6275),o=a(8302),n=a(8641),s=e([r,o,n]);[r,o,n]=s.then?(await s)():s,i()}catch(e){i(e)}})},9949(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Cl:()=>s,DP:()=>c,NG:()=>d,fD:()=>n,sO:()=>l});var r=a(161),o=e([r]);function n(){return{pendingBuffer:"",inFencedCodeBlock:!1}}function s(e){e.pendingBuffer="",e.inFencedCodeBlock=!1}function l(e,t){t&&(function(e){if(!e)return 0;let t=e.match(/```/g);return t?t.length:0}(t)%2==1&&(e.inFencedCodeBlock=!e.inFencedCodeBlock),e.pendingBuffer+=t)}r=(o.then?(await o)():o)[0];let u=/^\s*\d+\.(?:\s+|$)/;function d(e){let t;if(!e.pendingBuffer||e.inFencedCodeBlock||!e.pendingBuffer.includes("\n\n")||(0,r.i8)(e.pendingBuffer))return!1;let a=function(e){let t=String(e??"").match(/^(.*)\n\n+/s);if(!t)return null;let a=t[1].split(/\n\n+/);for(let e=a.length-1;e>=0;e--)if(""!==a[e].trim())return a[e];return null}(e.pendingBuffer);return!(null!=a&&(t=String(a??"").split(/\r?\n/).filter(e=>""!==e.trim()),0!==t.length&&u.test(t[0])))}function c(e){let t=e.pendingBuffer;return e.pendingBuffer="",t}i()}catch(e){i(e)}})},8641(e,t,a){a.a(e,async function(e,i){try{a.d(t,{JZ:()=>w,Lf:()=>u,Mr:()=>A,R$:()=>b,Rp:()=>f,_Y:()=>R,bE:()=>h,cD:()=>C,cU:()=>I,d7:()=>p,g4:()=>v,ld:()=>E,rT:()=>D,sJ:()=>k,u$:()=>T,u7:()=>P});var r=a(4071),o=a(161),n=a(5460),s=a(1165),l=a(6498),d=e([o,r]);[o,r]=d.then?(await d)():d;let x="\x1b[32m",L="\x1b[31m",j="\x1b[0m",O="\x1b[48;2;30;41;59m",M="\x1b[38;2;236;242;255m";function c(e){return String(e??"").replace(/\r/g,"").split("\n").map(e=>`${O}${M} ${e} ${j}`).join("\n")}function u(e){return null==e?"":"string"==typeof e?e:"object"==typeof e?JSON.stringify(e):String(e)}function p(e){return(0,n.cs)(e)}let N=new Set(["task",l.Q4]);function m(e){if(null==e)return"";if("string"==typeof e)return""===e.trim()?"":e;try{return JSON.stringify(e,null,2)}catch(t){return console.error("[message-utils] failed to stringify subagent summary field",t),String(e)}}function g(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return"";if(t===l.Q4){let t=m(e.findings);return t||m(e.error)}if("task"===t){let t=m(e.result);return t||m(e.error)}return""}function h(e){if(!e?.content||!Array.isArray(e.content))return"";let t=e.content.filter(e=>e?.type==="text"&&e?.text!=null).map(e=>e.text).join("");return(t=function(e){if("string"!=typeof e||!e.trim())return e;let t=e.trim();if(!1===(t.startsWith("{")&&t.endsWith("}")))return e;try{let a=JSON.parse(t);if(!a||"object"!=typeof a||!Array.isArray(a.content))return e;return a.content.filter(e=>e?.type==="text"&&e?.text!=null).map(e=>e.text).join("")}catch{return e}}(t)).length<=8e3?t:t.slice(0,8e3)+"\n... (truncated)"}function f(e,t){let a=(0,s.o4)(t),i=`${e.toolName} ${u(e.args)}`.trim();a.write(c(i)+"\n",{kind:"tool"}),(0,r.IW)(`[tool] ${e.toolName} ${u(e.args)}`)}function k(e){let t="string"==typeof e.partialResult?e.partialResult:JSON.stringify(e.partialResult??"");(0,r.IW)(`[tool] ${e.toolName} partial result => ${t}`)}function v(e,t){let a=(0,s.o4)(t),i=e.isError?L+"✗"+j:x+"✓"+j,o=e.isError?e.result&&h(e.result)||e.errorMessage||"error":h(e.result),l=e.isError?"✗":"✓";if(o){var d;let t,s,u=(d={toolName:e.toolName,resultText:o,details:e.result?.details},t=(0,n.cs)(d.resultText),!(s=function(e){let t=String(e?.toolName??"").trim();if(!N.has(t))return"";let a=g(e?.details,t);return a||g(function(e){if("string"!=typeof e||""===e.trim())return null;let t=e.trim();if(!1===(t.startsWith("{")&&t.endsWith("}")))return null;try{return JSON.parse(t)}catch(e){return console.error("[message-utils] failed to parse subagent tool result JSON",e),null}}(e?.resultText),t)}(d))||"string"==typeof t&&t.includes(s)?t:`${t}
|
|
3
|
+
${s}`),p=b(u,{markdown:!0}).split("\n").map(e=>e.trimEnd()).filter(e=>""!==e.trim());if(p.length>0){let t=e.isError?L:x,i=[`${O}${t}${l}${M} ${p[0]} ${j}`,...p.slice(1).map(e=>c(` ${e}`))].join("\n");a.write(i+"\n\n",{kind:"tool"})}else a.write(c(i)+"\n\n",{kind:"tool"});(0,r.IW)(`${l} ${o}`)}else a.write(c(i)+"\n\n",{kind:"tool"}),(0,r.IW)(`${l}`);(0,r.IW)(`[tool] ${e.toolName} => ${e.isError?"error":"ok"}`)}function b(e,t={}){return e&&"string"==typeof e?!0===t.markdown?(0,o.oq)(e):e:e??""}function w(e){return e?.content?e.content.filter(e=>"text"===e.type&&e.text).map(e=>e.text).join(""):""}function y(e,t){if(t&&!0===t.isError||!0===e.isError)return!0;let a=e.result;return!(!a||"object"!=typeof a||Array.isArray(a))&&(!0===a.isError||"error"in a&&null!=a.error)||!1}function S(e,t){return"string"==typeof e.name&&""!==e.name.trim()?e.name.trim():"string"==typeof e.toolName&&""!==e.toolName.trim()?e.toolName.trim():t?.role==="toolResult"&&"string"==typeof t.toolName&&""!==t.toolName.trim()?t.toolName.trim():"tool"}function P(e){if(!e?.content||!Array.isArray(e.content))return"";let t=e.role,a=[];for(let i of e.content){let r=function(e,t,a){if(!e||"object"!=typeof e)return"";let i=e.type;if("text"===i&&"string"==typeof e.text&&e.text)return"toolResult"===t?"":`${"user"===t?"user":"toolResult"===t||"tool"===t?"tool":"assist"}: ${e.text}`;if("thinking"===i&&"string"==typeof e.thinking&&e.thinking)return`assist: ${e.thinking}`;if("toolCall"===i){let t=S(e,a);return`tool: ${t}`}if("toolResult"===i){let t=S(e,a),i=y(e,a)?"failure":"success";return`tool: ${t} ${i}`}return""}(i,t,e);r&&a.push(r)}if(0===a.length&&"toolResult"===t){let t=S({},e),a=y({},e)?"failure":"success";return`tool: ${t} ${a}`}return a.join("\n")}function T(e){return e?.content?e.content.filter(e=>"thinking"===e.type&&e.thinking).map(e=>e.thinking).join(""):""}function A(e){if(!e)return"";if("string"==typeof e.errorMessage&&""!==e.errorMessage.trim())return e.errorMessage;let t=e.error;return"string"==typeof t?t:t&&"object"==typeof t&&"string"==typeof t.message?t.message:null!=t?String(t):""}function I(e,t){if(!e?.errorMessage&&!e?.error)return;let a=(0,s.o4)(t),i=e.error,o=A(e)||"Unknown error",n=e.errorStack??(i&&"object"==typeof i&&null!==i&&"stack"in i?i.stack:void 0),l=["\n--- API error ---\n",o+"\n"];n&&String(n)!==o&&l.push("\nStack:\n"+n+"\n"),null!=e.errorCode&&l.push("Code: "+e.errorCode+"\n"),null!=e.errorStatus&&l.push("Status: "+e.errorStatus+"\n"),e.errorBody&&l.push("Response: "+("string"==typeof e.errorBody?e.errorBody:JSON.stringify(e.errorBody))+"\n"),l.push("-----------------\n");let d=l.join("");a.write(d,{stream:"stderr",kind:"error"}),(0,r.vV)(d.trim())}function E(e,t={}){let{withNewlineHeuristics:a=!1,outputSink:i}=t,r=(0,s.o4)(i),o=e??"";o&&(r.write(o,{kind:"assistant"}),a&&(o.endsWith("。")||o.endsWith("!")||o.endsWith("!")||o.endsWith("?")||o.endsWith("?"))&&r.write("\n",{kind:"assistant"}))}function C(e){e&&(0,r.KH)("[llm_response] "+JSON.stringify(e))}let D=2;function R(e,t=D){if(!Array.isArray(e)||0===e.length||!Number.isFinite(t)||t<=0)return[];let a=[];for(let t=0;t<e.length;t+=1)e[t]?.role==="user"&&a.push(t);if(0===a.length)return[];let i=function(e,t){let a=[];for(let i=0;i<t.length;i+=1){let r=t[i],o=t[i+1]??e.length;a.push([r,o])}return a}(e,a),r=[i[0]],o=Math.max(0,i.length-t);for(let e=o;e<i.length;e+=1)r.push(i[e]);if(!r.length)return[];let n=r.slice().sort((e,t)=>e[0]-t[0]),s=[];for(let[e,t]of n){let a=s[s.length-1];if(a&&e<=a[1]){a[1]=Math.max(a[1],t);continue}s.push([e,t])}return s.flatMap(([t,a])=>e.slice(t,a))}i()}catch(e){i(e)}})},8302(e,t,a){a.a(e,async function(e,i){try{a.d(t,{g:()=>u});var r=a(8641),o=a(9949),n=a(4071),s=a(8362),l=a(1165),d=a(2306),c=e([s,d,n,r,o]);[s,d,n,r,o]=c.then?(await c)():c;let p=!1,m=!1,g="",h=(0,o.fD)();function u(e={}){let t=!0===e.markdown,a=(0,l.o4)(e.outputSink),i="function"==typeof e.getShowThinking?e.getShowThinking:()=>!0,c="function"==typeof e.t?e.t:(0,s.lW)("string"==typeof e.lang&&""!==e.lang.trim()?e.lang:(0,s.ao)());return e=>{"agent_start"===e.type&&(p=!1,m=!1,g="",(0,o.Cl)(h),a.resetAssistantBody?.());let s=i();if("tool_execution_start"===e.type)return void(0,r.Rp)(e,a);if("tool_execution_update"===e.type)return void(0,r.sJ)(e);if("tool_execution_end"===e.type)return void(0,r.g4)(e,a);if("turn_end"===e.type){let t=e.message,a={messageRole:t?.role,stopReason:t?.stopReason,contentBlocks:t?.content?.length??0,toolResultsCount:e.toolResults?.length??0,toolResults:e.toolResults?.map(e=>({toolName:e.toolName,isError:e.isError}))};(0,n.IW)(`
|
|
4
4
|
[turn_end] ${JSON.stringify(a,null,2)}
|
|
5
|
-
`);return}if("message_update"===e.type&&e.assistantMessageEvent){let i=e.assistantMessageEvent;if(s&&"thinking_delta"===i.type){let e=i.delta??"";if(String(e).trim().length>0){if(!p){p=!0;let e=c("reasoner.thinkingHeader");a.write(e,{kind:"thinking"}),(0,n.IW)(e)}a.write(e,{kind:"thinking"}),(0,n.IW)(e)}}if("text_delta"===i.type){let e=i.delta??"";if(e){if(!m&&s&&p){let e=c("reasoner.replyHeader");(0,n.IW)(e),a.write(e,{kind:"assistant"})}let i=!m;if(m=!0,g+=e,t){if(i&&a.beginAssistantBody?.(),(0,o.sO)(h,e),(0,o.NG)(h)){let e=(0,r.R$)((0,o.DP)(h),{markdown:!0});e&&a.write(e,{kind:"assistant"})}}else(0,r.ld)(e,{withNewlineHeuristics:!0,outputSink:a})}else t||(0,r.ld)(i.delta,{withNewlineHeuristics:!0,outputSink:a})}}if("message_end"===e.type&&e.message?.role==="assistant"){if(e.message.errorMessage||e.message.error)"aborted"!==e.message.stopReason&&(0,r.cU)(e.message,a);else{let i=(0,r.u$)(e.message),l=(0,d.w$)((0,r.JZ)(e.message)).text,u=p||s&&!!i,f=s&&i&&!p;if(m){if(t&&h.pendingBuffer){let e=(0,r.R$)((0,o.DP)(h),{markdown:!0});e&&a.write(e,{kind:"assistant"})}if(t&&l){let e=(0,r.R$)(l,{markdown:!0});a.finalizeAssistantBody?.(e)}if(l?(0,n.IW)(l):g&&(0,n.IW)(g),f){let e=c("reasoner.thinkingHeader");a.write(e,{kind:"thinking"}),a.write(i,{kind:"thinking"}),(0,n.IW)(e),(0,n.IW)(i)}}else if(l){if(f){let e=c("reasoner.thinkingHeader");a.write(e,{kind:"thinking"}),a.write(i,{kind:"thinking"}),(0,n.IW)(e),(0,n.IW)(i)}if(u){let e=c("reasoner.replyHeader");(0,n.IW)(e),a.write(e,{kind:"assistant"})}let e=(0,r.R$)(l,{markdown:t});a.write(e,{kind:"assistant"}),(0,n.IW)(l)}else if(f){let e=c("reasoner.thinkingHeader");a.write(e,{kind:"thinking"}),a.write(i,{kind:"thinking"}),(0,n.IW)(e),(0,n.IW)(i)}}(0,r.cD)(e.message),g="",(0,o.Cl)(h),p=!1,m=!1,a.resetAssistantBody?.()}}}i()}catch(e){i(e)}})},2568(e,t,a){a.a(e,async function(e,i){try{a.d(t,{EP:()=>l,NI:()=>d,Tj:()=>s});var r=a(4071),o=e([r]);function n(e){return{role:"user",content:[{type:"text",text:String(e??"").trim()}],timestamp:Date.now()}}r=(o.then?(await o)():o)[0];class c{constructor(){this._steer=[],this._followUp=[],this._pendingImages=[]}recordSteer(e){let t=this.#e(e);return this._steer.push(t),(0,r.JX)("AgentRuntimeMessageLog.recordSteer",{text:t.text}),t}recordFollowUp(e){let t=this.#e(e);return this._followUp.push(t),(0,r.JX)("AgentRuntimeMessageLog.recordFollowUp",{text:t.text}),t}visitSteer(){return this._steer.slice()}visitFollowUp(){return this._followUp.slice()}consumeFollowUpIfHead(e){let t=String(e??"").trim();if(!t||0===this._followUp.length)return!1;if(this._followUp[0].text!==t)return console.debug("[AgentRuntimeMessageLog] consumeFollowUpIfHead: head mismatch",{expected:t,head:this._followUp[0].text}),!1;let[a]=this._followUp.splice(0,1);return(0,r.JX)("AgentRuntimeMessageLog.consumeFollowUpIfHead",{text:a?.text,remaining:this._followUp.length}),!0}clearSteer(e){e?.clearSteeringQueue?.(),(0,r.JX)("AgentRuntimeMessageLog.clearSteer"),this._steer=[]}clearFollowUp(e){e?.clearFollowUpQueue?.(),(0,r.JX)("AgentRuntimeMessageLog.clearFollowUp"),this._followUp=[]}clearAll(e){e?.clearAllQueues?.(),(0,r.JX)("AgentRuntimeMessageLog.clearAll"),this._steer=[],this._followUp=[]}attachImage(e){this._pendingImages.push(e),(0,r.JX)("AgentRuntimeMessageLog.attachImage",{mimeType:e.mimeType,dataLen:e.data?.length??0,pendingCount:this._pendingImages.length})}visitImages(){return this._pendingImages.slice()}hasImages(){return this._pendingImages.length>0}consumeImages(){let e=this._pendingImages.slice();return this._pendingImages=[],(0,r.JX)("AgentRuntimeMessageLog.consumeImages",{consumed:e.length}),e}#e(e){return{text:String(e??"").trim(),enqueuedAt:new Date().toISOString()}}}function s(){return new c}function l(e,t){if(!e||"function"!=typeof e.steer)return!1;let a=String(t??"").trim();return""!==a&&(e.steer(n(a)),!0)}function d(e,t){if(!e||"function"!=typeof e.followUp)return!1;let a=String(t??"").trim();return""!==a&&(e.followUp(n(a)),!0)}i()}catch(e){i(e)}})},83(e,t,a){a.a(e,async function(e,i){try{a.d(t,{$6:()=>c,Oi:()=>p,mb:()=>u});var r=a(4757),o=a(4820),n=a(4071),s=a(7598),l=a(7096),d=e([o,l,n,r]);function c(){return{entry:null}}function u(e){e&&((0,n.JX)("clearAgentSessionRef"),e.entry=null)}async function p(e,t){let a=t.agentSessionRef,i=function(e){if(!e.agentSessionRef)return!1;let t=e.subagent;return t?.isolated!==!0}(t),d=function(e,t){var a;let i,r="string"==typeof e?.id?e.id.trim():"";if(!r)return"";let n=function(e){let t="string"==typeof e?.model&&""!==e.model.trim()?e.model.trim():void 0,a="string"==typeof e?.apiKey&&""!==e.apiKey.trim();if(t&&!a)return t;let i=e?.cursor,r=!0===i||"string"==typeof i&&""!==i.trim()?i:void 0,n=(0,o.Al)({model:t,reasoner:e?.reasoner===!0,chat:e?.chat===!0,pro:e?.pro===!0,cursor:r,apiKey:"string"==typeof e?.apiKey?e.apiKey:void 0}),s=String(n?.model?.provider??"").trim(),l=String(n?.model?.id??"").trim();return s&&l?`resolved:${s}:${l}`:t?t:e?.reasoner===!0?"__reasoner__":e?.pro===!0?"__pro__":e?.chat===!0?"__chat__":"string"==typeof e?.cursor&&""!==e.cursor.trim()?`cursor:${e.cursor.trim()}`:e?.cursor===!0?"__cursor__":"__default__"}(t),l="string"==typeof t?.role?t.role.trim():"",d="string"==typeof t?.mode?t.mode.trim():"",c=t?.onceRun===!0?"once":"interactive",u=(a=t?.apiKey,(i="string"==typeof a?a.trim():"")?(0,s.createHash)("sha256").update(i).digest("hex").slice(0,12):""),p=`${r}|model=${n}|role=${l}|mode=${d}|run=${c}`;return u?`${p}|apiKey=${u}`:p}(e,t);if(i&&a?.entry&&!0!==t.newSession&&a.entry.cacheKey===d){(0,n.JX)("resolveAgentForRun: reuse cached agent",{taskId:e?.id,cacheKey:d});try{await l.sX.trigger(l.WD.BEFORE_CACHED_AGENT_REUSE,{runState:a.entry.runState,agent:a.entry.agent,task:e,opts:t})}catch(t){console.error("Error in BEFORE_CACHED_AGENT_REUSE hook:",t),(0,n.JX)("BEFORE_CACHED_AGENT_REUSE hook failed",{error:t?.message,taskId:e?.id})}return a.entry}(0,n.JX)("resolveAgentForRun: bootstrap new agent",{taskId:e?.id,cacheKey:d,model:t?.model,newSession:!0===t.newSession});let c={...await (0,r.N)(e,t),cacheKey:d,activeSkillNames:[]};return i&&a&&(a.entry=c),c}[o,l,n,r]=d.then?(await d)():d,i()}catch(e){i(e)}})},4757(e,t,a){a.a(e,async function(e,i){try{a.d(t,{N:()=>x});var r=a(6760),o=a(4768),n=a(9868),s=a(1092),l=a(9243),d=a(9522),c=a(6048),u=a(4820),p=a(7382),m=a(546),g=a(1165),h=a(4071),f=a(6551),k=a(8641),v=a(8362),b=a(4224),w=a(6669),y=a(3375),S=a(7790),P=a(6865),T=a(2369),A=a(8359),I=a(4427),E=a(5899),C=a(9434),R=a(2306),L=e([T,o,v,u,c,l,d,C,E,I,w,n,P,s,p,y,f,m,R,A,k,h]);[T,o,v,u,c,l,d,C,E,I,w,n,P,s,p,y,f,m,R,A,k,h]=L.then?(await L)():L;let j=new Set(["read","read_file","list_files","read_pdf","web_fetch","web_search","proxy_downloader","read_email","notify_npc"]);async function x(e,t){var a;(0,h.KH)("bootstrap",JSON.stringify(e),JSON.stringify(t));let i=t.mode??"agent",L=(0,g.o4)(t.outputSink),x=await (0,T.Lf)(),M=(0,r.resolve)(t.cwd??process.cwd()),O=await (0,o.s)(M),N=t.lang,D=t.role,_=(0,v.lW)(N);(0,h.JX)("bootstrap lang:",N);let F=(0,y.bf)(O);if(F.loaded&&(0,h.KH)(`Hook system initialized (${F.sources.join(", ")})`),t.securityRules){let e=(0,y.Uh)({rules:t.securityRules,requestApproval:t.toolApproval?.requestApproval,npcId:t.npcId,taskId:t.taskId});e.loaded&&(0,h.KH)(`Hook system initialized (${e.sources.join(", ")})`)}(void 0===N||void 0===D)&&O&&(void 0===N&&null!=O.lang&&(N=O.lang),void 0===D&&O.supportedRoles?.length&&(D=O.supportedRoles[0])),N=N||"en",D=D??"RD";let z=(0,u.Al)(t),q=z?{...z,model:(0,p.CO)(z.model)}:null;if(!q)throw new b.VP(_("errors.noApiKey"));e.model=q.model.id,e.projectPath=e.projectPath??M;let H="agent"===i?await (0,c.NE)(M,N,D):null,U=await (0,l.G)(O,D,M,{allowNames:H}),$=(0,d.Ed)(M,H),B=[...U,...$];if("agent"===i){let{skills:e}=(0,C.nn)({cwd:M,skillsDir:t.skillsDir});e.length>0&&B.push((0,C.yW)(e,M))}let K=t.subagent,W=K?.isolated===!0,G=(0,E.K)({tools:B,runMode:i,isSubagentRun:W,subagentOpts:K,toolAllowlist:H,parentContext:{cwd:M,lang:N,role:D,skillsDir:t.skillsDir,mode:i,outputSink:L}});B=G.tools;let V=G.subagentRegistry;B=(0,y.sD)(B,{cwd:M,role:D,lang:N});let J=W?{systemPrompt:K?.systemPromptOverride??"",systemPromptRaw:K?.systemPromptOverride??"",systemPromptTruncated:K?.systemPromptOverride??"",initialMessages:[]}:await (0,I.E)({cwd:M,lang:N,role:D,mode:i,task:e,skillsDir:t.skillsDir,modelConfig:q,onceRun:!0===t.onceRun});t.newSession&&(0,h.KH)(_("run.newSessionNoHistory"));let{systemPrompt:Y,initialMessages:Q}=J,X="1"===process.env.PITHOSAI_DEBUG_STREAM||"true"===process.env.PITHOSAI_DEBUG_STREAM?(0,w.M)():n.streamSimple,Z=q.model?.supportsTools===!1?[]:(a=B,"agent"===i?a:(a??[]).filter(e=>j.has(String(e?.name??"")))),ee=new s.Agent({initialState:{systemPrompt:Y,model:q.model,thinkingLevel:(0,p.Dz)(q.model),tools:Z,messages:Q},sessionId:e?.id,convertToLlm:function(e){return(0,f.C4)(e,q.model)},getApiKey:q.getApiKey,streamFn:(e,t,a)=>{let i=(0,p.jd)(e,a?.reasoning),r={...a,cacheRetention:"long",...e?.contextWindow!=null&&{contextWindow:e.contextWindow},...null!=i&&{reasoning:i}};if(e?.provider==="deepseek"&&!1===e.reasoning){let e=r.onPayload;r.onPayload=(t,a)=>{"function"==typeof e&&e(t,a),t&&"object"==typeof t&&(t.thinking={type:"disabled"})}}let o=()=>(0,S.z)(X(e,t,r),e);return(0,P.k)(o(),{createRetryStream:o})},steeringMode:"one-at-a-time",followUpMode:"one-at-a-time"});ee=(0,y.ux)(ee,{cwd:M,role:D,lang:N,taskId:"string"==typeof e?.id?e.id:void 0,model:q.model}),(0,f.Lp)(q.model)?ee.subscribe((0,m.gY)({lang:N,getShowThinking:()=>!0,markdown:t.markdown,t:_,outputSink:L})):ee.subscribe((0,m.FX)({lang:N,markdown:t.markdown,outputSink:L}));let et={apiError:!1,apiErrorMessage:void 0,failoverReason:null},ea=K?.persistMessages??!W;return ee.subscribe(a=>{if("message_end"!==a.type||!a.message)return;let r=a.message;if("assistant"===r.role&&(0,R.TD)({message:r,entry:t.agentSessionRef?.entry??null,lang:N}),e&&e.id&&ea){let t={id:e.id,title:e.title,description:e.description,model:e.model??"deepSeekChat",status:e.status,projectPath:e.projectPath??M,createdAt:e.createdAt};Promise.resolve((0,A.$R)(x,t)).then(()=>(0,A.kF)(x,{taskId:e.id,message:r,role:D,lang:N,mode:i,model:e.model??"deepSeekChat"})).catch(t=>{(0,h.CN)(`Failed to insert task message for task ${e.id}: ${t&&"object"==typeof t&&"message"in t?t.message:String(t)}`)})}if("assistant"===r.role){let e=(0,k.Mr)(r);if(e&&(et.apiError=!0,et.apiErrorMessage=e||void 0,et.failoverReason=e?(0,b.bn)(e):null,"string"==typeof e&&e.toLowerCase().includes("terminated")))try{ee.abort()}catch(e){(0,h.CN)(`Failed to abort agent after stream termination error: ${e&&"object"==typeof e&&"message"in e?e.message:String(e)}`)}}}),{agent:ee,cwd:M,runState:et,subagentRegistry:V}}i()}catch(e){i(e)}})},6669(e,t,a){a.a(e,async function(e,i){try{a.d(t,{M:()=>s});var r=a(9868),o=a(4071),n=e([r,o]);function s(){return(e,t,a)=>{let i=(0,r.streamSimple)(e,t,a),n=i[Symbol.asyncIterator].bind(i),s=!1;return i[Symbol.asyncIterator]=function(){let e=n();return{async next(){let t=await e.next();return t.done?(0,o.IW)(`[pi-agent stream] iterator finished (saw done/error: ${s})
|
|
5
|
+
`);return}if("message_update"===e.type&&e.assistantMessageEvent){let i=e.assistantMessageEvent;if(s&&"thinking_delta"===i.type){let e=i.delta??"";if(String(e).trim().length>0){if(!p){p=!0;let e=c("reasoner.thinkingHeader");a.write(e,{kind:"thinking"}),(0,n.IW)(e)}a.write(e,{kind:"thinking"}),(0,n.IW)(e)}}if("text_delta"===i.type){let e=i.delta??"";if(e){if(!m&&s&&p){let e=c("reasoner.replyHeader");(0,n.IW)(e),a.write(e,{kind:"assistant"})}let i=!m;if(m=!0,g+=e,t){if(i&&a.beginAssistantBody?.(),(0,o.sO)(h,e),(0,o.NG)(h)){let e=(0,r.R$)((0,o.DP)(h),{markdown:!0});e&&a.write(e,{kind:"assistant"})}}else(0,r.ld)(e,{withNewlineHeuristics:!0,outputSink:a})}else t||(0,r.ld)(i.delta,{withNewlineHeuristics:!0,outputSink:a})}}if("message_end"===e.type&&e.message?.role==="assistant"){if(e.message.errorMessage||e.message.error)"aborted"!==e.message.stopReason&&(0,r.cU)(e.message,a);else{let i=(0,r.u$)(e.message),l=(0,d.w$)((0,r.JZ)(e.message)).text,u=p||s&&!!i,f=s&&i&&!p;if(m){if(t&&h.pendingBuffer){let e=(0,r.R$)((0,o.DP)(h),{markdown:!0});e&&a.write(e,{kind:"assistant"})}if(t&&l){let e=(0,r.R$)(l,{markdown:!0});a.finalizeAssistantBody?.(e)}if(l?(0,n.IW)(l):g&&(0,n.IW)(g),f){let e=c("reasoner.thinkingHeader");a.write(e,{kind:"thinking"}),a.write(i,{kind:"thinking"}),(0,n.IW)(e),(0,n.IW)(i)}}else if(l){if(f){let e=c("reasoner.thinkingHeader");a.write(e,{kind:"thinking"}),a.write(i,{kind:"thinking"}),(0,n.IW)(e),(0,n.IW)(i)}if(u){let e=c("reasoner.replyHeader");(0,n.IW)(e),a.write(e,{kind:"assistant"})}let e=(0,r.R$)(l,{markdown:t});a.write(e,{kind:"assistant"}),(0,n.IW)(l)}else if(f){let e=c("reasoner.thinkingHeader");a.write(e,{kind:"thinking"}),a.write(i,{kind:"thinking"}),(0,n.IW)(e),(0,n.IW)(i)}}(0,r.cD)(e.message),g="",(0,o.Cl)(h),p=!1,m=!1,a.resetAssistantBody?.()}}}i()}catch(e){i(e)}})},2568(e,t,a){a.a(e,async function(e,i){try{a.d(t,{EP:()=>l,NI:()=>d,Tj:()=>s});var r=a(4071),o=e([r]);function n(e){return{role:"user",content:[{type:"text",text:String(e??"").trim()}],timestamp:Date.now()}}r=(o.then?(await o)():o)[0];class c{constructor(){this._steer=[],this._followUp=[],this._pendingImages=[]}recordSteer(e){let t=this.#e(e);return this._steer.push(t),(0,r.JX)("AgentRuntimeMessageLog.recordSteer",{text:t.text}),t}recordFollowUp(e){let t=this.#e(e);return this._followUp.push(t),(0,r.JX)("AgentRuntimeMessageLog.recordFollowUp",{text:t.text}),t}visitSteer(){return this._steer.slice()}visitFollowUp(){return this._followUp.slice()}consumeFollowUpIfHead(e){let t=String(e??"").trim();if(!t||0===this._followUp.length)return!1;if(this._followUp[0].text!==t)return console.debug("[AgentRuntimeMessageLog] consumeFollowUpIfHead: head mismatch",{expected:t,head:this._followUp[0].text}),!1;let[a]=this._followUp.splice(0,1);return(0,r.JX)("AgentRuntimeMessageLog.consumeFollowUpIfHead",{text:a?.text,remaining:this._followUp.length}),!0}clearSteer(e){e?.clearSteeringQueue?.(),(0,r.JX)("AgentRuntimeMessageLog.clearSteer"),this._steer=[]}clearFollowUp(e){e?.clearFollowUpQueue?.(),(0,r.JX)("AgentRuntimeMessageLog.clearFollowUp"),this._followUp=[]}clearAll(e){e?.clearAllQueues?.(),(0,r.JX)("AgentRuntimeMessageLog.clearAll"),this._steer=[],this._followUp=[]}attachImage(e){this._pendingImages.push(e),(0,r.JX)("AgentRuntimeMessageLog.attachImage",{mimeType:e.mimeType,dataLen:e.data?.length??0,pendingCount:this._pendingImages.length})}visitImages(){return this._pendingImages.slice()}hasImages(){return this._pendingImages.length>0}consumeImages(){let e=this._pendingImages.slice();return this._pendingImages=[],(0,r.JX)("AgentRuntimeMessageLog.consumeImages",{consumed:e.length}),e}#e(e){return{text:String(e??"").trim(),enqueuedAt:new Date().toISOString()}}}function s(){return new c}function l(e,t){if(!e||"function"!=typeof e.steer)return!1;let a=String(t??"").trim();return""!==a&&(e.steer(n(a)),!0)}function d(e,t){if(!e||"function"!=typeof e.followUp)return!1;let a=String(t??"").trim();return""!==a&&(e.followUp(n(a)),!0)}i()}catch(e){i(e)}})},83(e,t,a){a.a(e,async function(e,i){try{a.d(t,{$6:()=>c,Oi:()=>p,mb:()=>u});var r=a(4757),o=a(4820),n=a(4071),s=a(7598),l=a(7096),d=e([o,l,n,r]);function c(){return{entry:null}}function u(e){e&&((0,n.JX)("clearAgentSessionRef"),e.entry=null)}async function p(e,t){let a=t.agentSessionRef,i=function(e){if(!e.agentSessionRef)return!1;let t=e.subagent;return t?.isolated!==!0}(t),d=function(e,t){var a;let i,r="string"==typeof e?.id?e.id.trim():"";if(!r)return"";let n=function(e){let t="string"==typeof e?.model&&""!==e.model.trim()?e.model.trim():void 0,a="string"==typeof e?.apiKey&&""!==e.apiKey.trim();if(t&&!a)return t;let i=e?.cursor,r=!0===i||"string"==typeof i&&""!==i.trim()?i:void 0,n=(0,o.Al)({model:t,reasoner:e?.reasoner===!0,chat:e?.chat===!0,pro:e?.pro===!0,cursor:r,apiKey:"string"==typeof e?.apiKey?e.apiKey:void 0}),s=String(n?.model?.provider??"").trim(),l=String(n?.model?.id??"").trim();return s&&l?`resolved:${s}:${l}`:t?t:e?.reasoner===!0?"__reasoner__":e?.pro===!0?"__pro__":e?.chat===!0?"__chat__":"string"==typeof e?.cursor&&""!==e.cursor.trim()?`cursor:${e.cursor.trim()}`:e?.cursor===!0?"__cursor__":"__default__"}(t),l="string"==typeof t?.role?t.role.trim():"",d="string"==typeof t?.mode?t.mode.trim():"",c=t?.onceRun===!0?"once":"interactive",u=(a=t?.apiKey,(i="string"==typeof a?a.trim():"")?(0,s.createHash)("sha256").update(i).digest("hex").slice(0,12):""),p=`${r}|model=${n}|role=${l}|mode=${d}|run=${c}`;return u?`${p}|apiKey=${u}`:p}(e,t);if(i&&a?.entry&&!0!==t.newSession&&a.entry.cacheKey===d){(0,n.JX)("resolveAgentForRun: reuse cached agent",{taskId:e?.id,cacheKey:d});try{await l.sX.trigger(l.WD.BEFORE_CACHED_AGENT_REUSE,{runState:a.entry.runState,agent:a.entry.agent,task:e,opts:t})}catch(t){console.error("Error in BEFORE_CACHED_AGENT_REUSE hook:",t),(0,n.JX)("BEFORE_CACHED_AGENT_REUSE hook failed",{error:t?.message,taskId:e?.id})}return a.entry}(0,n.JX)("resolveAgentForRun: bootstrap new agent",{taskId:e?.id,cacheKey:d,model:t?.model,newSession:!0===t.newSession});let c={...await (0,r.N)(e,t),cacheKey:d,activeSkillNames:[]};return i&&a&&(a.entry=c),c}[o,l,n,r]=d.then?(await d)():d,i()}catch(e){i(e)}})},4757(e,t,a){a.a(e,async function(e,i){try{a.d(t,{N:()=>L});var r=a(6760),o=a(4768),n=a(9868),s=a(1092),l=a(9243),d=a(9522),c=a(6048),u=a(4820),p=a(7382),m=a(546),g=a(1165),h=a(4071),f=a(6551),k=a(8641),v=a(8362),b=a(4224),w=a(6669),y=a(3375),S=a(7790),P=a(6865),T=a(2369),A=a(8359),I=a(4427),E=a(5899),C=a(9434),R=a(2306),x=e([T,o,v,u,c,l,d,C,E,I,w,n,P,s,p,y,f,m,R,A,k,h]);[T,o,v,u,c,l,d,C,E,I,w,n,P,s,p,y,f,m,R,A,k,h]=x.then?(await x)():x;let j=new Set(["read","read_file","list_files","read_pdf","web_fetch","web_search","proxy_downloader","read_email","notify_npc"]);async function L(e,t){var a;(0,h.KH)("bootstrap",JSON.stringify(e),JSON.stringify(t));let i=t.mode??"agent",x=(0,g.o4)(t.outputSink),L=await (0,T.Lf)(),O=(0,r.resolve)(t.cwd??process.cwd()),M=await (0,o.s)(O),N=t.lang,D=t.role,_=(0,v.lW)(N);(0,h.JX)("bootstrap lang:",N);let F=(0,y.bf)(M);if(F.loaded&&(0,h.KH)(`Hook system initialized (${F.sources.join(", ")})`),t.securityRules){let e=(0,y.Uh)({rules:t.securityRules,requestApproval:t.toolApproval?.requestApproval,npcId:t.npcId,taskId:t.taskId});e.loaded&&(0,h.KH)(`Hook system initialized (${e.sources.join(", ")})`)}(void 0===N||void 0===D)&&M&&(void 0===N&&null!=M.lang&&(N=M.lang),void 0===D&&M.supportedRoles?.length&&(D=M.supportedRoles[0])),N=N||"en",D=D??"RD";let z=(0,u.Al)(t),q=z?{...z,model:(0,p.CO)(z.model)}:null;if(!q)throw new b.VP(_("errors.noApiKey"));e.model=q.model.id,e.projectPath=e.projectPath??O;let H="agent"===i?await (0,c.NE)(O,N,D):null,U=await (0,l.G)(M,D,O,{allowNames:H}),$=(0,d.Ed)(O,H),B=[...U,...$];if("agent"===i){let{skills:e}=(0,C.nn)({cwd:O,skillsDir:t.skillsDir});e.length>0&&B.push((0,C.yW)(e,O))}let K=t.subagent,W=K?.isolated===!0,G=(0,E.K)({tools:B,runMode:i,isSubagentRun:W,subagentOpts:K,toolAllowlist:H,parentContext:{cwd:O,lang:N,role:D,skillsDir:t.skillsDir,mode:i,outputSink:x}});B=G.tools;let V=G.subagentRegistry;B=(0,y.sD)(B,{cwd:O,role:D,lang:N});let J=W?{systemPrompt:K?.systemPromptOverride??"",systemPromptRaw:K?.systemPromptOverride??"",systemPromptTruncated:K?.systemPromptOverride??"",initialMessages:[]}:await (0,I.E)({cwd:O,lang:N,role:D,mode:i,task:e,skillsDir:t.skillsDir,modelConfig:q,onceRun:!0===t.onceRun});t.newSession&&(0,h.KH)(_("run.newSessionNoHistory"));let{systemPrompt:Y,initialMessages:Q}=J,X="1"===process.env.PITHOSAI_DEBUG_STREAM||"true"===process.env.PITHOSAI_DEBUG_STREAM?(0,w.M)():n.streamSimple,Z=q.model?.supportsTools===!1?[]:(a=B,"agent"===i?a:(a??[]).filter(e=>j.has(String(e?.name??"")))),ee=new s.Agent({initialState:{systemPrompt:Y,model:q.model,thinkingLevel:(0,p.Dz)(q.model),tools:Z,messages:Q},sessionId:e?.id,convertToLlm:function(e){return(0,f.C4)(e,q.model)},getApiKey:q.getApiKey,streamFn:(e,t,a)=>{let i=(0,p.jd)(e,a?.reasoning),r={...a,cacheRetention:"long",...e?.contextWindow!=null&&{contextWindow:e.contextWindow},...null!=i&&{reasoning:i}};if(e?.provider==="deepseek"&&!1===e.reasoning){let e=r.onPayload;r.onPayload=(t,a)=>{"function"==typeof e&&e(t,a),t&&"object"==typeof t&&(t.thinking={type:"disabled"})}}let o=()=>(0,S.z)(X(e,t,r),e);return(0,P.k)(o(),{createRetryStream:o})},steeringMode:"one-at-a-time",followUpMode:"one-at-a-time"});ee=(0,y.ux)(ee,{cwd:O,role:D,lang:N,taskId:"string"==typeof e?.id?e.id:void 0,model:q.model}),(0,f.Lp)(q.model)?ee.subscribe((0,m.gY)({lang:N,getShowThinking:()=>!0,markdown:t.markdown,t:_,outputSink:x})):ee.subscribe((0,m.FX)({lang:N,markdown:t.markdown,outputSink:x}));let et={apiError:!1,apiErrorMessage:void 0,failoverReason:null},ea=K?.persistMessages??!W;return ee.subscribe(a=>{if("message_end"!==a.type||!a.message)return;let r=a.message;if("assistant"===r.role&&(0,R.TD)({message:r,entry:t.agentSessionRef?.entry??null,lang:N}),e&&e.id&&ea){let t={id:e.id,title:e.title,description:e.description,model:e.model??"deepSeekChat",status:e.status,projectPath:e.projectPath??O,createdAt:e.createdAt};Promise.resolve((0,A.$R)(L,t)).then(()=>(0,A.kF)(L,{taskId:e.id,message:r,role:D,lang:N,mode:i,model:e.model??"deepSeekChat"})).catch(t=>{(0,h.CN)(`Failed to insert task message for task ${e.id}: ${t&&"object"==typeof t&&"message"in t?t.message:String(t)}`)})}if("assistant"===r.role){let e=(0,k.Mr)(r);if(e&&(et.apiError=!0,et.apiErrorMessage=e||void 0,et.failoverReason=e?(0,b.bn)(e):null,"string"==typeof e&&e.toLowerCase().includes("terminated")))try{ee.abort()}catch(e){(0,h.CN)(`Failed to abort agent after stream termination error: ${e&&"object"==typeof e&&"message"in e?e.message:String(e)}`)}}}),{agent:ee,cwd:O,runState:et,subagentRegistry:V}}i()}catch(e){i(e)}})},6669(e,t,a){a.a(e,async function(e,i){try{a.d(t,{M:()=>s});var r=a(9868),o=a(4071),n=e([r,o]);function s(){return(e,t,a)=>{let i=(0,r.streamSimple)(e,t,a),n=i[Symbol.asyncIterator].bind(i),s=!1;return i[Symbol.asyncIterator]=function(){let e=n();return{async next(){let t=await e.next();return t.done?(0,o.IW)(`[pi-agent stream] iterator finished (saw done/error: ${s})
|
|
6
6
|
`):(t.value?.type==="done"||t.value?.type==="error")&&(s=!0,(0,o.IW)(`[pi-agent stream] event: ${t.value.type}
|
|
7
|
-
`)),t}}},i}}[r,o]=n.then?(await n)():n,i()}catch(e){i(e)}})},4224(e,t,a){a.d(t,{Ag:()=>p,VP:()=>i,bn:()=>m});class i extends Error{code;i18nKey;constructor(e="No model provider found",t){super(e),this.name="NoModelError",this.code="NO_MODEL",this.i18nKey=t?.i18nKey??"errors.noApiKey"}}let r=[/rate[_ ]limit|too many requests|429/i,"exceeded your current quota","resource has been exhausted","quota exceeded","resource_exhausted","usage limit"],o=[/overloaded_error|"type"\s*:\s*"overloaded_error"/i,"overloaded"],n=[/timeout|timed out|deadline exceeded|context deadline exceeded/i],s=[/network connection lost/i],l=[/\b402\b/,"payment required","insufficient credits","credit balance","plans & billing"],d=[/invalid[_ ]?api[_ ]?key/i,"incorrect api key","invalid token","authentication","re-authenticate","oauth token refresh failed","unauthorized","forbidden","access denied","expired","token has expired",/\b401\b/,/\b403\b/,"no credentials found","no api key found"],c=["string should match pattern","tool_use.id","tool_use_id","messages.1.content.1.tool_use.id","invalid request format","request_body_invalid","improperly formed request"];function u(e,t){if(!e)return!1;let a=e.toLowerCase();return t.some(e=>e instanceof RegExp?e.test(a):a.includes(e))}function p(e){return!!e&&/stream ended without finish_reason|missing finish_reason/i.test(String(e))}function m(e){return e?u(e,r)||u(e,o)?"rate_limit":u(e,c)?"format":function(e){if(!e)return!1;let t=e.toLowerCase();return!!t&&(!!u(t,l)||t.includes("billing")&&(t.includes("upgrade")||t.includes("credits")||t.includes("payment")||t.includes("plan")))}(e)?"billing":u(e,n)||u(e,s)||p(e)?"timeout":u(e,d)?"auth":null:null}},2711(e,t,a){a.d(t,{Y4:()=>s,Ye:()=>r,f4:()=>o,zx:()=>n});let i=new(a(6698)).AsyncLocalStorage;function r(e={}){return{cwd:e.cwd,role:e.role,lang:e.lang,taskId:"string"==typeof e.taskId?e.taskId:"",model:e.model,messages:[]}}function o(e,t){return i.run(e,t)}function n(e,t){if(!e)return;let a=null==t||"object"!=typeof t?{}:{messages:t.messages,model:t.model};Array.isArray(a.messages)&&(e.messages=a.messages),null!=a.model&&(e.model=a.model)}function s(e){let t=i.getStore();return t?{...e,taskId:e.taskId||t.taskId||"",model:e.model??t.model,messages:Array.isArray(e.messages)?e.messages:t.messages??[]}:e}},3375(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Uh:()=>m,bf:()=>p,sD:()=>f,ux:()=>g});var r=a(7096),o=a(4071),n=a(3586),s=a(1045),l=a(3122),d=a(7318),c=a(2711),u=e([d,n,s,o,r]);function p(e){r.sX.clear();let t=(0,d.A)({cwd:e?.project?.cwd});if(e?.hooks?.active){let a=e.hooks.active;if("debug"===a.type){let e=(0,n._3)({logData:a.options?.data||!1});if(r.sX.registerAll(e),a.options?.performance){let e=(0,n.TA)();r.sX.registerAll(e)}if(a.options?.stats){let e=(0,n.sD)();r.sX.registerAll(e)}t.push("settings:debug")}else if("debug-basic"===a.type){let e=(0,n._3)({logData:a.options?.data||!1});r.sX.registerAll(e),t.push("settings:debug-basic")}else if("security"===a.type){let e=(0,n.n$)(a.options||{});r.sX.registerAll(e),t.push("settings:security")}}else{let e="1"===process.env.PITHOSAI_DEBUG_HOOKS||"true"===process.env.PITHOSAI_DEBUG_HOOKS,a="1"===process.env.PITHOSAI_SECURITY_HOOKS||"true"===process.env.PITHOSAI_SECURITY_HOOKS;if(e){let e=(0,n._3)({logData:"1"===process.env.PITHOSAI_DEBUG_HOOKS_DATA});r.sX.registerAll(e);let a=(0,n.TA)();r.sX.registerAll(a);let i=(0,n.sD)();r.sX.registerAll(i),t.push("env:debug")}if(a){let e=process.env.PITHOSAI_BLOCKED_TOOLS?process.env.PITHOSAI_BLOCKED_TOOLS.split(",").map(e=>e.trim()):[],a=(0,n.n$)({blockedTools:e,maxPromptLength:parseInt(process.env.PITHOSAI_MAX_PROMPT_LENGTH||"10000",10)});r.sX.registerAll(a),t.push("env:security")}}return{loaded:t.length>0,sources:t}}function m(e){let t=(0,s.J)(e);return r.sX.registerAll(t),{loaded:!0,sources:["npc-platform:security-rules"]}}function g(e,t={}){let{cwd:a,role:i,lang:n,taskId:s,model:l}=t;if(!e||"function"!=typeof e.prompt)return(0,o.JX)("Agent does not have prompt method, skipping hook wrapping"),e;let d=(0,c.Ye)({cwd:a,role:i,lang:n,taskId:s,model:l}),u=e.prompt.bind(e);return e.prompt=async function(e,t){return(0,c.f4)(d,async()=>{let o={request:e,images:t,cwd:a,role:i,lang:n,timestamp:Date.now()};await r.sX.trigger(r.WD.BEFORE_AGENT_RUN,o);try{let o="string"==typeof e?await u(e,t):await u(e),s={request:e,images:t,result:o,cwd:a,role:i,lang:n,timestamp:Date.now()};return await r.sX.trigger(r.WD.AFTER_AGENT_RUN,s),o}catch(s){let o={request:e,images:t,error:s,cwd:a,role:i,lang:n,timestamp:Date.now()};throw await r.sX.trigger(r.WD.AFTER_AGENT_RUN,o),s}})},"function"==typeof e.subscribe&&e.subscribe(e=>{try{(0,c.zx)(d,e),h(e,t)}catch(t){(0,o.JX)(`Hook handler error for ${e?.type}: ${t?.message??t}`)}}),e}async function h(e,t){let{cwd:a,role:i,lang:o}=t;switch(e.type){case"message_start":if(e.message?.role==="assistant"){let t={messages:e.messages||[],model:e.model,cwd:a,role:i,lang:o,timestamp:Date.now()};await r.sX.trigger(r.WD.BEFORE_MODEL_CALL,t)}break;case"message_update":{let t={message:e.message,assistantMessageEvent:e.assistantMessageEvent,messages:e.messages||[],model:e.model,cwd:a,role:i,lang:o,timestamp:Date.now()};r.sX.trigger(r.WD.MESSAGE_UPDATE,t).catch(()=>{});break}case"message_end":if(e.message?.role==="assistant"){let t={messages:e.messages||[],message:e.message,model:e.model,cwd:a,role:i,lang:o,timestamp:Date.now()};await r.sX.trigger(r.WD.AFTER_MODEL_CALL,t)}break;case"tool_call":{let t={toolCall:e.toolCall,messages:e.messages||[],cwd:a,role:i,lang:o,timestamp:Date.now()};await r.sX.trigger(r.WD.BEFORE_TOOL_CALL,t);break}case"tool_result":{let t={toolCall:e.toolCall,result:e.result,messages:e.messages||[],cwd:a,role:i,lang:o,timestamp:Date.now()};await r.sX.trigger(r.WD.AFTER_TOOL_CALL,t)}}}function f(e,t={}){return e.map(e=>(function(e,t={}){let{cwd:a,role:i,lang:n}=t;if("function"!=typeof e.execute)return e;let s=e.execute,d=async function(t,d,u,p){let m,g=d||{},h=(0,c.Y4)({name:e.name,description:e.description,params:g,toolCallId:t,cwd:a,role:i,lang:n,timestamp:Date.now()});try{m=await r.sX.trigger(r.WD.BEFORE_TOOL_EXECUTE,h,{abortOnError:!0})}catch(a){let t=a instanceof Error?a.message:String(a);return(0,o.CN)(`Tool "${e.name}" blocked before execute:`,t),(0,l.Ao)({ok:!1,error:t})}let f=null!=m&&void 0!==m.params?m.params:g;try{let o=await s(t,f,u,p),l=(0,c.Y4)({name:e.name,description:e.description,params:f,result:o,toolCallId:t,cwd:a,role:i,lang:n,timestamp:Date.now()});return await r.sX.trigger(r.WD.AFTER_TOOL_EXECUTE,l),o}catch(s){let o=(0,c.Y4)({name:e.name,description:e.description,params:f,error:s,toolCallId:t,cwd:a,role:i,lang:n,timestamp:Date.now()});throw await r.sX.trigger(r.WD.AFTER_TOOL_EXECUTE,o),s}};return{...e,execute:d}})(e,t))}[d,n,s,o,r]=u.then?(await u)():u,i()}catch(e){i(e)}})},7318(e,t,a){a.a(e,async function(e,i){try{a.d(t,{A:()=>s});var r=a(7126),o=a(7805),n=e([r,o]);function s(e={}){let t=[];(0,r.l)(),t.push("system-prompt-rebuild");let a=(0,o.bx)({cwd:e.cwd,adapters:o.n8});return a.loaded&&t.push(a.source),t}[r,o]=n.then?(await n)():n,i()}catch(e){i(e)}})},9892(e,t,a){a.a(e,async function(e,i){try{a.d(t,{VB:()=>s,l3:()=>n});var r=a(4071),o=e([r]);r=(o.then?(await o)():o)[0];let l=Object.freeze(["beforeSystemPromptBuild","afterSystemPromptBuild","beforeModelCall","afterModelCall","messageUpdate","beforeToolCall","afterToolCall","beforeToolExecute","afterToolExecute","beforeAgentRun","afterAgentRun","beforeCachedAgentReuse"]),d=new Set(l),c={posttoolexecute:"afterToolExecute",pretoolexecute:"beforeToolExecute"};function n(e,t={}){let a="string"==typeof t.source&&""!==t.source.trim()?t.source.trim():"hooks.json",i=[];if(null==e||"object"!=typeof e||Array.isArray(e))return i.push(`${a}: hook document must be an object`),{hooks:[],errors:i};if(!Array.isArray(e.hooks))return i.push(`${a}: hooks must be an array`),{hooks:[],errors:i};let r=[];for(let t of e.hooks){let e=function(e,t){var a;if(null==e||"object"!=typeof e||Array.isArray(e)||!1===e.enabled)return null;let i=function(e){if("string"!=typeof e||""===e.trim())return null;let t=e.trim();if(d.has(t))return t;let a=t.toLowerCase(),i=l.find(e=>e.toLowerCase()===a);return i||(c[a]??null)}(e.hookType??e.trigger);if(!i)return null;let r=function(e){if("string"==typeof e.command&&""!==e.command.trim())return e.command.trim();let t=e.action;if(null!=t&&"object"==typeof t&&!Array.isArray(t)){let e=t.command;if("string"==typeof e)return e.trim()}return""}(e);if(!r)return null;let o="string"==typeof e.name&&""!==e.name.trim()?e.name.trim():"unnamed-hook",n="string"==typeof e.matcher&&""!==e.matcher.trim()?e.matcher.trim():null;return{name:o,description:"string"==typeof e.description?e.description:"",enabled:!0,hookType:i,matcher:n,timeoutMs:(a=e.timeout,0===a?0:"number"==typeof a&&Number.isFinite(a)&&a>0?Math.floor(1e3*a):6e4),command:r,source:t}}(t,a);e&&r.push(e)}return{hooks:r,errors:i}}function s(e,t){let a=e?.matcher;if(null==a||""===a)return!0;try{return new RegExp(a).test("string"==typeof t?t:"")}catch(e){return(0,r.CN)("[command-hooks] invalid matcher regex:",a,e),!1}}i()}catch(e){i(e)}})},6997(e,t,a){a.a(e,async function(e,i){try{a.d(t,{p4:()=>u});var r=a(3024),o=a(6760),n=a(4071),s=a(5012),l=a(9892),d=e([l,n]);[l,n]=d.then?(await d)():d;let p=(0,o.join)(s.qu,"hooks");function c(e){let t=new Map;if(!e||!(0,r.existsSync)(e))return t;let a=[];try{a=(0,r.readdirSync)(e)}catch(a){return(0,n.CN)("[command-hooks] failed to read hook dir:",e,a),t}for(let i of a){if(!i.toLowerCase().endsWith(".json"))continue;let a=(0,o.join)(e,i);try{let e=(0,r.readFileSync)(a,"utf8");t.set(i,JSON.parse(e))}catch(e){(0,n.CN)("[command-hooks] failed to parse hook file:",a,e)}}return t}function u(e={}){let t="string"==typeof e.cwd&&""!==e.cwd.trim()?e.cwd:process.cwd(),a=e.userDir??p,i=e.projectDir??(0,o.join)(t,".pithosai","hooks"),r=e.bundledFiles??{},s=function(e){let t=new Map;for(let a of e)for(let[e,i]of a instanceof Map?a.entries():Object.entries(a??{}))t.set(e,i);return t}([r,c(a),c(i)]),d=[];for(let[e,t]of s){let a=(0,l.l3)(t,{source:e});for(let e of a.errors)(0,n.CN)("[command-hooks]",e);d.push(...a.hooks)}return(0,n.JX)("[command-hooks] loaded",d.length,"hooks from",s.size,"files"),d}i()}catch(e){i(e)}})},7805(e,t,a){a.a(e,async function(e,i){try{a.d(t,{bx:()=>m,n8:()=>h});var r=a(4071),o=a(9522),n=a(7096),s=a(9892),l=a(6997),d=a(5632),c=a(2939),u=e([o,s,d,l,n,r]);[o,s,d,l,n,r]=u.then?(await u)():u;let g={"git-ai.json":c},h={},f=new Set(["beforeToolExecute"]);async function p(e){let{hooks:t,hookType:a,data:i,runAction:n=d.WR,adapters:l}=e,c="string"==typeof i?.name?i.name:"",u=function(e,t){let a=null!=e&&"object"==typeof e?e:{},i={hookType:t,cwd:"string"==typeof a.cwd?a.cwd:"",taskId:"string"==typeof a.taskId?a.taskId:"",name:"string"==typeof a.name?a.name:"",params:null!=a.params&&"object"==typeof a.params?a.params:{},model:a.model,messages:Array.isArray(a.messages)?a.messages:[],timestamp:a.timestamp};if(null!=a.error){let e=a.error;i.error=e instanceof Error?e.message:String(e)}return void 0!==a.result&&(i.result=a.result),i}(i,a),p=u.cwd,m=(0,o.Rg)(i?.params);for(let e of t){let t;if(e.hookType===a&&(!c||!e.matcher||(0,s.VB)(e,c))&&(c||!e.matcher)){(0,r.JX)("[git-ai][command-hooks] matched",{toolName:c,filePath:m,hookName:e.name,hookType:a,matcher:e.matcher,action:e.command});try{t=await n({command:e.command,event:u,cwd:p,timeoutMs:e.timeoutMs,adapters:l})}catch(t){(0,r.CN)("[git-ai][command-hooks] hook action error:",e.name,t);continue}if(f.has(a)&&t?.exitCode===2){let t=`Hook "${e.name}" blocked tool "${c}"`;throw(0,r.CN)("[git-ai][command-hooks]",t,{toolName:c,filePath:m,action:e.command}),Error(t)}}}}function m(e={}){let t=e.hooks??(0,l.p4)({cwd:e.cwd,bundledFiles:e.bundledFiles??g});return 0===t.length?((0,r.JX)("[command-hooks] no command hooks loaded"),{loaded:!1,source:"command-hooks"}):(n.sX.registerAll(function(e={}){let t=e.hooks??[],a=e.runAction??d.WR,i=e.adapters??h,r={};for(let e of[...new Set(t.map(e=>e.hookType))])r[e]=async r=>{let o=r.data;return await p({hooks:t,hookType:e,data:o,runAction:a,adapters:i}),o};return r}({hooks:t,runAction:e.runAction,adapters:e.adapters??h})),(0,r.JX)("[command-hooks] registered",t.length,"command hooks"),{loaded:!0,source:"command-hooks"})}i()}catch(e){i(e)}})},5632(e,t,a){a.a(e,async function(e,i){try{a.d(t,{WR:()=>u});var r=a(1421),o=a(3024),n=a(6760),s=a(3136),l=a(4071),d=e([l]);function c(e){return JSON.stringify(String(e))}async function u(e){let t="string"==typeof e?.command?e.command:"",a=e?.event??{},i=function(e,t={}){let a=t.nodeBin??process.execPath;return String(e??"").replace(/\{pithosaiCli:([^}]+)\}/g,(e,i)=>{let r=String(i).trim(),l=function(e,t={}){let a=String(e??"").trim();if(!a||/[\\/]/.test(a)||a.includes(".."))return null;let i=t.fromMetaUrl??"file:///Users/lidh04/Projects/scripts/pithosai/src/agent/hooks/command-hook-runner.js",r=(0,n.dirname)((0,s.fileURLToPath)(i));for(let e of[(0,n.join)(r,`${a}.mjs`),(0,n.join)(r,`${a}.js`),(0,n.join)(r,"../../../scripts",`${a}.js`)])if((0,o.existsSync)(e))return e;return null}(r,t);return l?`${c(a)} ${c(l)}`:`{pithosaiCli:${r}}`})}(t,{fromMetaUrl:e.fromMetaUrl,nodeBin:e.nodeBin}),r=function(e,t={}){let a="string"==typeof e?e.trim():"",i=function(e){let t,a=[],i=/"([^"]*)"|'([^']*)'|(\S+)/g,r=String(e??"").trim();for(;null!==(t=i.exec(r));)a.push(t[1]??t[2]??t[3]);return a}(a),r=i[0];return r&&"function"==typeof t[r]?{kind:"builtin",name:r,args:i.slice(1)}:{kind:"shell",command:a}}(i,e.adapters??{});if("builtin"===r.kind){let t=e.adapters?.[r.name];if("function"!=typeof t)return(0,l.CN)("[command-hooks] missing builtin adapter:",r.name),{ok:!1,exitCode:1,skipped:!0};try{let e=await t(r.args,a);if(e&&"object"==typeof e)return{ok:!1!==e.ok,exitCode:"number"==typeof e.exitCode?e.exitCode:+(!1===e.ok),skipped:!!e.skipped};return{ok:!0,exitCode:0,skipped:!1}}catch(e){return(0,l.CN)("[command-hooks] builtin adapter error:",r.name,e),{ok:!1,exitCode:1,skipped:!1}}}return p({command:r.command,event:a,cwd:e.cwd,timeoutMs:e.timeoutMs,spawnFn:e.spawnFn})}async function p(e){let t=e.spawnFn??r.spawn,a="number"==typeof e.timeoutMs&&e.timeoutMs>=0?e.timeoutMs:6e4,i="string"==typeof e.cwd&&""!==e.cwd.trim()?e.cwd.trim():"string"==typeof e.event?.cwd&&""!==e.event.cwd.trim()?e.event.cwd.trim():void 0;return e.command?new Promise(r=>{let o,n,s=!1,d=e=>{s||(s=!0,o&&clearTimeout(o),r(e))};try{n=t(e.command,{shell:!0,stdio:["pipe","pipe","pipe"],windowsHide:!0,cwd:i})}catch(t){(0,l.CN)("[command-hooks] failed to spawn:",e.command,t),d({ok:!1,exitCode:1,skipped:!1});return}let c="";n.stderr?.on("data",e=>{c+=String(e)}),n.stdout?.on("data",()=>{}),n.on("error",e=>{(0,l.CN)("[command-hooks] command process error:",e),d({ok:!1,exitCode:1,skipped:!1})}),n.on("close",t=>{let a="number"==typeof t?t:1,i="string"==typeof e.event?.name?e.event.name:"";if(0===a){(0,l.JX)("[git-ai][command-hooks] command ok",{toolName:i,action:e.command}),d({ok:!0,exitCode:0,skipped:!1});return}let r=c.trim()||`exit ${a}`;(0,l.CN)("[git-ai][command-hooks] command failed:",e.command,r,{toolName:i}),d({ok:!1,exitCode:a,skipped:!1})}),a>0&&(o=setTimeout(()=>{(0,l.CN)("[command-hooks] command timed out:",e.command);try{n.kill()}catch(e){(0,l.CN)("[command-hooks] failed to kill timed-out command:",e)}d({ok:!1,exitCode:1,skipped:!1})},a));try{n.stdin.write(JSON.stringify(e.event??{})),n.stdin.end()}catch(e){(0,l.CN)("[command-hooks] failed to write hook stdin:",e);try{n.kill()}catch(e){(0,l.CN)("[command-hooks] failed to kill after stdin error:",e)}d({ok:!1,exitCode:1,skipped:!1})}}):{ok:!1,exitCode:1,skipped:!0}}l=(d.then?(await d)():d)[0],i()}catch(e){i(e)}})},3586(e,t,a){a.a(e,async function(e,i){try{a.d(t,{TA:()=>l,_3:()=>s,n$:()=>d,sD:()=>c});var r=a(7096),o=a(4071),n=e([r,o]);function s(e={}){let{logData:t=!1,includeHooks:a=Object.values(r.WD),excludeHooks:i=[r.WD.MESSAGE_UPDATE]}=e,n={};return Object.values(r.WD).forEach(e=>{!a.includes(e)||i.includes(e)||(n[e]=async e=>{let{hookType:a,data:i,result:r,error:n,timestamp:s}=e,l=n?"error":"info",d=n?"❌":"✅",c=n?` (error: ${n.message})`:"",u=`${d} Hook: ${a}${c}`;if(t){let e=JSON.stringify(i,null,2),t=void 0!==r?JSON.stringify(r,null,2):"";u+=`
|
|
7
|
+
`)),t}}},i}}[r,o]=n.then?(await n)():n,i()}catch(e){i(e)}})},4224(e,t,a){a.d(t,{Ag:()=>p,VP:()=>i,bn:()=>m});class i extends Error{code;i18nKey;constructor(e="No model provider found",t){super(e),this.name="NoModelError",this.code="NO_MODEL",this.i18nKey=t?.i18nKey??"errors.noApiKey"}}let r=[/rate[_ ]limit|too many requests|429/i,"exceeded your current quota","resource has been exhausted","quota exceeded","resource_exhausted","usage limit"],o=[/overloaded_error|"type"\s*:\s*"overloaded_error"/i,"overloaded"],n=[/timeout|timed out|deadline exceeded|context deadline exceeded/i],s=[/network connection lost/i],l=[/\b402\b/,"payment required","insufficient credits","credit balance","plans & billing"],d=[/invalid[_ ]?api[_ ]?key/i,"incorrect api key","invalid token","authentication","re-authenticate","oauth token refresh failed","unauthorized","forbidden","access denied","expired","token has expired",/\b401\b/,/\b403\b/,"no credentials found","no api key found"],c=["string should match pattern","tool_use.id","tool_use_id","messages.1.content.1.tool_use.id","invalid request format","request_body_invalid","improperly formed request"];function u(e,t){if(!e)return!1;let a=e.toLowerCase();return t.some(e=>e instanceof RegExp?e.test(a):a.includes(e))}function p(e){return!!e&&/stream ended without finish_reason|missing finish_reason/i.test(String(e))}function m(e){return e?u(e,r)||u(e,o)?"rate_limit":u(e,c)?"format":function(e){if(!e)return!1;let t=e.toLowerCase();return!!t&&(!!u(t,l)||t.includes("billing")&&(t.includes("upgrade")||t.includes("credits")||t.includes("payment")||t.includes("plan")))}(e)?"billing":u(e,n)||u(e,s)||p(e)?"timeout":u(e,d)?"auth":null:null}},2711(e,t,a){a.d(t,{Y4:()=>s,Ye:()=>r,f4:()=>o,zx:()=>n});let i=new(a(6698)).AsyncLocalStorage;function r(e={}){return{cwd:e.cwd,role:e.role,lang:e.lang,taskId:"string"==typeof e.taskId?e.taskId:"",model:e.model,messages:[]}}function o(e,t){return i.run(e,t)}function n(e,t){if(!e)return;let a=null==t||"object"!=typeof t?{}:{messages:t.messages,model:t.model};Array.isArray(a.messages)&&(e.messages=a.messages),null!=a.model&&(e.model=a.model)}function s(e){let t=i.getStore();return t?{...e,taskId:e.taskId||t.taskId||"",model:e.model??t.model,messages:Array.isArray(e.messages)?e.messages:t.messages??[]}:e}},3375(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Uh:()=>m,bf:()=>p,sD:()=>f,ux:()=>g});var r=a(7096),o=a(4071),n=a(3586),s=a(1045),l=a(3122),d=a(7318),c=a(2711),u=e([d,n,s,o,r]);function p(e){r.sX.clear();let t=(0,d.A)({cwd:e?.project?.cwd});if(e?.hooks?.active){let a=e.hooks.active;if("debug"===a.type){let e=(0,n._3)({logData:a.options?.data||!1});if(r.sX.registerAll(e),a.options?.performance){let e=(0,n.TA)();r.sX.registerAll(e)}if(a.options?.stats){let e=(0,n.sD)();r.sX.registerAll(e)}t.push("settings:debug")}else if("debug-basic"===a.type){let e=(0,n._3)({logData:a.options?.data||!1});r.sX.registerAll(e),t.push("settings:debug-basic")}else if("security"===a.type){let e=(0,n.n$)(a.options||{});r.sX.registerAll(e),t.push("settings:security")}}else{let e="1"===process.env.PITHOSAI_DEBUG_HOOKS||"true"===process.env.PITHOSAI_DEBUG_HOOKS,a="1"===process.env.PITHOSAI_SECURITY_HOOKS||"true"===process.env.PITHOSAI_SECURITY_HOOKS;if(e){let e=(0,n._3)({logData:"1"===process.env.PITHOSAI_DEBUG_HOOKS_DATA});r.sX.registerAll(e);let a=(0,n.TA)();r.sX.registerAll(a);let i=(0,n.sD)();r.sX.registerAll(i),t.push("env:debug")}if(a){let e=process.env.PITHOSAI_BLOCKED_TOOLS?process.env.PITHOSAI_BLOCKED_TOOLS.split(",").map(e=>e.trim()):[],a=(0,n.n$)({blockedTools:e,maxPromptLength:parseInt(process.env.PITHOSAI_MAX_PROMPT_LENGTH||"10000",10)});r.sX.registerAll(a),t.push("env:security")}}return{loaded:t.length>0,sources:t}}function m(e){let t=(0,s.J)(e);return r.sX.registerAll(t),{loaded:!0,sources:["npc-platform:security-rules"]}}function g(e,t={}){let{cwd:a,role:i,lang:n,taskId:s,model:l}=t;if(!e||"function"!=typeof e.prompt)return(0,o.JX)("Agent does not have prompt method, skipping hook wrapping"),e;let d=(0,c.Ye)({cwd:a,role:i,lang:n,taskId:s,model:l}),u=e.prompt.bind(e);return e.prompt=async function(e,t){return(0,c.f4)(d,async()=>{let o={request:e,images:t,cwd:a,role:i,lang:n,timestamp:Date.now()};await r.sX.trigger(r.WD.BEFORE_AGENT_RUN,o);try{let o="string"==typeof e?await u(e,t):await u(e),s={request:e,images:t,result:o,cwd:a,role:i,lang:n,timestamp:Date.now()};return await r.sX.trigger(r.WD.AFTER_AGENT_RUN,s),o}catch(s){let o={request:e,images:t,error:s,cwd:a,role:i,lang:n,timestamp:Date.now()};throw await r.sX.trigger(r.WD.AFTER_AGENT_RUN,o),s}})},"function"==typeof e.subscribe&&e.subscribe(e=>{try{(0,c.zx)(d,e),h(e,t)}catch(t){(0,o.JX)(`Hook handler error for ${e?.type}: ${t?.message??t}`)}}),e}async function h(e,t){let{cwd:a,role:i,lang:o}=t;switch(e.type){case"message_start":if(e.message?.role==="assistant"){let t={messages:e.messages||[],model:e.model,cwd:a,role:i,lang:o,timestamp:Date.now()};await r.sX.trigger(r.WD.BEFORE_MODEL_CALL,t)}break;case"message_update":{let t={message:e.message,assistantMessageEvent:e.assistantMessageEvent,messages:e.messages||[],model:e.model,cwd:a,role:i,lang:o,timestamp:Date.now()};r.sX.trigger(r.WD.MESSAGE_UPDATE,t).catch(()=>{});break}case"message_end":if(e.message?.role==="assistant"){let t={messages:e.messages||[],message:e.message,model:e.model,cwd:a,role:i,lang:o,timestamp:Date.now()};await r.sX.trigger(r.WD.AFTER_MODEL_CALL,t)}break;case"tool_call":{let t={toolCall:e.toolCall,messages:e.messages||[],cwd:a,role:i,lang:o,timestamp:Date.now()};await r.sX.trigger(r.WD.BEFORE_TOOL_CALL,t);break}case"tool_result":{let t={toolCall:e.toolCall,result:e.result,messages:e.messages||[],cwd:a,role:i,lang:o,timestamp:Date.now()};await r.sX.trigger(r.WD.AFTER_TOOL_CALL,t)}}}function f(e,t={}){return e.map(e=>(function(e,t={}){let{cwd:a,role:i,lang:n}=t;if("function"!=typeof e.execute)return e;let s=e.execute,d=async function(t,d,u,p){let m,g=d||{},h=(0,c.Y4)({name:e.name,description:e.description,params:g,toolCallId:t,cwd:a,role:i,lang:n,timestamp:Date.now()});try{m=await r.sX.trigger(r.WD.BEFORE_TOOL_EXECUTE,h,{abortOnError:!0})}catch(a){let t=a instanceof Error?a.message:String(a);return(0,o.CN)(`Tool "${e.name}" blocked before execute:`,t),(0,l.Ao)({ok:!1,error:t})}let f=null!=m&&void 0!==m.params?m.params:g;try{let o=await s(t,f,u,p),l=(0,c.Y4)({name:e.name,description:e.description,params:f,result:o,toolCallId:t,cwd:a,role:i,lang:n,timestamp:Date.now()});return await r.sX.trigger(r.WD.AFTER_TOOL_EXECUTE,l),o}catch(s){let o=(0,c.Y4)({name:e.name,description:e.description,params:f,error:s,toolCallId:t,cwd:a,role:i,lang:n,timestamp:Date.now()});throw await r.sX.trigger(r.WD.AFTER_TOOL_EXECUTE,o),s}};return{...e,execute:d}})(e,t))}[d,n,s,o,r]=u.then?(await u)():u,i()}catch(e){i(e)}})},7318(e,t,a){a.a(e,async function(e,i){try{a.d(t,{A:()=>s});var r=a(7126),o=a(7805),n=e([r,o]);function s(e={}){let t=[];(0,r.l)(),t.push("system-prompt-rebuild");let a=(0,o.bx)({cwd:e.cwd,adapters:o.n8});return a.loaded&&t.push(a.source),t}[r,o]=n.then?(await n)():n,i()}catch(e){i(e)}})},9892(e,t,a){a.a(e,async function(e,i){try{a.d(t,{VB:()=>s,l3:()=>n});var r=a(4071),o=e([r]);r=(o.then?(await o)():o)[0];let l=Object.freeze(["beforeSystemPromptBuild","afterSystemPromptBuild","beforeModelCall","afterModelCall","messageUpdate","beforeToolCall","afterToolCall","beforeToolExecute","afterToolExecute","beforeAgentRun","afterAgentRun","beforeCachedAgentReuse"]),d=new Set(l),c={posttoolexecute:"afterToolExecute",pretoolexecute:"beforeToolExecute"};function n(e,t={}){let a="string"==typeof t.source&&""!==t.source.trim()?t.source.trim():"hooks.json",i=[];if(null==e||"object"!=typeof e||Array.isArray(e))return i.push(`${a}: hook document must be an object`),{hooks:[],errors:i};if(!Array.isArray(e.hooks))return i.push(`${a}: hooks must be an array`),{hooks:[],errors:i};let r=[];for(let t of e.hooks){let e=function(e,t){var a;if(null==e||"object"!=typeof e||Array.isArray(e)||!1===e.enabled)return null;let i=function(e){if("string"!=typeof e||""===e.trim())return null;let t=e.trim();if(d.has(t))return t;let a=t.toLowerCase(),i=l.find(e=>e.toLowerCase()===a);return i||(c[a]??null)}(e.hookType??e.trigger);if(!i)return null;let r=function(e){if("string"==typeof e.command&&""!==e.command.trim())return e.command.trim();let t=e.action;if(null!=t&&"object"==typeof t&&!Array.isArray(t)){let e=t.command;if("string"==typeof e)return e.trim()}return""}(e);if(!r)return null;let o="string"==typeof e.name&&""!==e.name.trim()?e.name.trim():"unnamed-hook",n="string"==typeof e.matcher&&""!==e.matcher.trim()?e.matcher.trim():null;return{name:o,description:"string"==typeof e.description?e.description:"",enabled:!0,hookType:i,matcher:n,timeoutMs:(a=e.timeout,0===a?0:"number"==typeof a&&Number.isFinite(a)&&a>0?Math.floor(1e3*a):6e4),command:r,source:t}}(t,a);e&&r.push(e)}return{hooks:r,errors:i}}function s(e,t){let a=e?.matcher;if(null==a||""===a)return!0;try{return new RegExp(a).test("string"==typeof t?t:"")}catch(e){return(0,r.CN)("[command-hooks] invalid matcher regex:",a,e),!1}}i()}catch(e){i(e)}})},6997(e,t,a){a.a(e,async function(e,i){try{a.d(t,{p4:()=>u});var r=a(3024),o=a(6760),n=a(4071),s=a(5012),l=a(9892),d=e([l,n]);[l,n]=d.then?(await d)():d;let p=(0,o.join)(s.qu,"hooks");function c(e){let t=new Map;if(!e||!(0,r.existsSync)(e))return t;let a=[];try{a=(0,r.readdirSync)(e)}catch(a){return(0,n.CN)("[command-hooks] failed to read hook dir:",e,a),t}for(let i of a){if(!i.toLowerCase().endsWith(".json"))continue;let a=(0,o.join)(e,i);try{let e=(0,r.readFileSync)(a,"utf8");t.set(i,JSON.parse(e))}catch(e){(0,n.CN)("[command-hooks] failed to parse hook file:",a,e)}}return t}function u(e={}){let t="string"==typeof e.cwd&&""!==e.cwd.trim()?e.cwd:process.cwd(),a=e.userDir??p,i=e.projectDir??(0,o.join)(t,".pithosai","hooks"),r=e.bundledFiles??{},s=function(e){let t=new Map;for(let a of e)for(let[e,i]of a instanceof Map?a.entries():Object.entries(a??{}))t.set(e,i);return t}([r,c(a),c(i)]),d=[];for(let[e,t]of s){let a=(0,l.l3)(t,{source:e});for(let e of a.errors)(0,n.CN)("[command-hooks]",e);d.push(...a.hooks)}return(0,n.JX)("[command-hooks] loaded",d.length,"hooks from",s.size,"files"),d}i()}catch(e){i(e)}})},7805(e,t,a){a.a(e,async function(e,i){try{a.d(t,{bx:()=>m,n8:()=>h});var r=a(4071),o=a(9522),n=a(7096),s=a(9892),l=a(6997),d=a(5632),c=a(2939),u=e([o,s,d,l,n,r]);[o,s,d,l,n,r]=u.then?(await u)():u;let g={"git-ai.json":c},h={},f=new Set(["beforeToolExecute"]);async function p(e){let{hooks:t,hookType:a,data:i,runAction:n=d.WR,adapters:l}=e,c="string"==typeof i?.name?i.name:"",u=function(e,t){let a=null!=e&&"object"==typeof e?e:{},i={hookType:t,cwd:"string"==typeof a.cwd?a.cwd:"",taskId:"string"==typeof a.taskId?a.taskId:"",name:"string"==typeof a.name?a.name:"",params:null!=a.params&&"object"==typeof a.params?a.params:{},model:a.model,messages:Array.isArray(a.messages)?a.messages:[],timestamp:a.timestamp};if(null!=a.error){let e=a.error;i.error=e instanceof Error?e.message:String(e)}return void 0!==a.result&&(i.result=a.result),i}(i,a),p=u.cwd,m=(0,o.Rg)(i?.params);for(let e of t){let t;if(e.hookType===a&&(!c||!e.matcher||(0,s.VB)(e,c))&&(c||!e.matcher)){(0,r.JX)("[git-ai][command-hooks] matched",{toolName:c,filePath:m,hookName:e.name,hookType:a,matcher:e.matcher,action:e.command});try{t=await n({command:e.command,event:u,cwd:p,timeoutMs:e.timeoutMs,adapters:l})}catch(t){(0,r.CN)("[git-ai][command-hooks] hook action error:",e.name,t);continue}if(f.has(a)&&t?.exitCode===2){let t=`Hook "${e.name}" blocked tool "${c}"`;throw(0,r.CN)("[git-ai][command-hooks]",t,{toolName:c,filePath:m,action:e.command}),Error(t)}}}}function m(e={}){let t=e.hooks??(0,l.p4)({cwd:e.cwd,bundledFiles:e.bundledFiles??g});return 0===t.length?((0,r.JX)("[command-hooks] no command hooks loaded"),{loaded:!1,source:"command-hooks"}):(n.sX.registerAll(function(e={}){let t=e.hooks??[],a=e.runAction??d.WR,i=e.adapters??h,r={};for(let e of[...new Set(t.map(e=>e.hookType))])r[e]=async r=>{let o=r.data;return await p({hooks:t,hookType:e,data:o,runAction:a,adapters:i}),o};return r}({hooks:t,runAction:e.runAction,adapters:e.adapters??h})),(0,r.JX)("[command-hooks] registered",t.length,"command hooks"),{loaded:!0,source:"command-hooks"})}i()}catch(e){i(e)}})},5632(e,t,a){a.a(e,async function(e,i){try{a.d(t,{WR:()=>p});var r=a(1421),o=a(3024),n=a(6760),s=a(3136),l=a(3458),d=a(4071),c=e([d]);function u(e){return JSON.stringify(String(e))}async function p(e){let t="string"==typeof e?.command?e.command:"",a=e?.event??{},i=function(e,t={}){let a=t.nodeBin??process.execPath;return String(e??"").replace(/\{pithosaiCli:([^}]+)\}/g,(e,i)=>{let r=String(i).trim(),c=function(e,t={}){let a=String(e??"").trim();if(!a||/[\\/]/.test(a)||a.includes(".."))return null;let i=function(e){for(let t of[e,function(){let e="file:///Users/lidh04/Projects/scripts/pithosai/src/agent/hooks/command-hook-runner.js";if("string"==typeof e&&e.startsWith("file:"))try{if((0,o.existsSync)((0,s.fileURLToPath)(e)))return e}catch(e){(0,d.JX)("[command-hooks] bundled import.meta.url unusable:",e?.code??e)}let t=(0,l.O)();return t?(0,s.pathToFileURL)(t).href:(0,s.pathToFileURL)(process.execPath).href}()])if("string"==typeof t&&t.startsWith("file:"))try{let e=(0,n.dirname)((0,s.fileURLToPath)(t));if((0,o.existsSync)(e))return e}catch(e){(0,d.JX)("[command-hooks] unusable CLI anchor:",t,e?.code??e)}return process.cwd()}(t.fromMetaUrl);for(let e of[(0,n.join)(i,`${a}.mjs`),(0,n.join)(i,`${a}.js`),(0,n.join)(i,"../../../scripts",`${a}.js`)])if((0,o.existsSync)(e))return e;return null}(r,t);return c?`${u(a)} ${u(c)}`:`{pithosaiCli:${r}}`})}(t,{fromMetaUrl:e.fromMetaUrl,nodeBin:e.nodeBin}),r=function(e,t={}){let a="string"==typeof e?e.trim():"",i=function(e){let t,a=[],i=/"([^"]*)"|'([^']*)'|(\S+)/g,r=String(e??"").trim();for(;null!==(t=i.exec(r));)a.push(t[1]??t[2]??t[3]);return a}(a),r=i[0];return r&&"function"==typeof t[r]?{kind:"builtin",name:r,args:i.slice(1)}:{kind:"shell",command:a}}(i,e.adapters??{});if("builtin"===r.kind){let t=e.adapters?.[r.name];if("function"!=typeof t)return(0,d.CN)("[command-hooks] missing builtin adapter:",r.name),{ok:!1,exitCode:1,skipped:!0};try{let e=await t(r.args,a);if(e&&"object"==typeof e)return{ok:!1!==e.ok,exitCode:"number"==typeof e.exitCode?e.exitCode:+(!1===e.ok),skipped:!!e.skipped};return{ok:!0,exitCode:0,skipped:!1}}catch(e){return(0,d.CN)("[command-hooks] builtin adapter error:",r.name,e),{ok:!1,exitCode:1,skipped:!1}}}return m({command:r.command,event:a,cwd:e.cwd,timeoutMs:e.timeoutMs,spawnFn:e.spawnFn})}async function m(e){let t=e.spawnFn??r.spawn,a="number"==typeof e.timeoutMs&&e.timeoutMs>=0?e.timeoutMs:6e4,i="string"==typeof e.cwd&&""!==e.cwd.trim()?e.cwd.trim():"string"==typeof e.event?.cwd&&""!==e.event.cwd.trim()?e.event.cwd.trim():void 0;return e.command?new Promise(r=>{let o,n,s=!1,l=e=>{s||(s=!0,o&&clearTimeout(o),r(e))};try{n=t(e.command,{shell:!0,stdio:["pipe","pipe","pipe"],windowsHide:!0,cwd:i})}catch(t){(0,d.CN)("[command-hooks] failed to spawn:",e.command,t),l({ok:!1,exitCode:1,skipped:!1});return}let c="";n.stderr?.on("data",e=>{c+=String(e)}),n.stdout?.on("data",()=>{}),n.on("error",e=>{(0,d.CN)("[command-hooks] command process error:",e),l({ok:!1,exitCode:1,skipped:!1})}),n.on("close",t=>{let a="number"==typeof t?t:1,i="string"==typeof e.event?.name?e.event.name:"";if(0===a){(0,d.JX)("[git-ai][command-hooks] command ok",{toolName:i,action:e.command}),l({ok:!0,exitCode:0,skipped:!1});return}let r=c.trim()||`exit ${a}`;(0,d.CN)("[git-ai][command-hooks] command failed:",e.command,r,{toolName:i}),l({ok:!1,exitCode:a,skipped:!1})}),a>0&&(o=setTimeout(()=>{(0,d.CN)("[command-hooks] command timed out:",e.command);try{n.kill()}catch(e){(0,d.CN)("[command-hooks] failed to kill timed-out command:",e)}l({ok:!1,exitCode:1,skipped:!1})},a));try{n.stdin.write(JSON.stringify(e.event??{})),n.stdin.end()}catch(e){(0,d.CN)("[command-hooks] failed to write hook stdin:",e);try{n.kill()}catch(e){(0,d.CN)("[command-hooks] failed to kill after stdin error:",e)}l({ok:!1,exitCode:1,skipped:!1})}}):{ok:!1,exitCode:1,skipped:!0}}d=(c.then?(await c)():c)[0],i()}catch(e){i(e)}})},3586(e,t,a){a.a(e,async function(e,i){try{a.d(t,{TA:()=>l,_3:()=>s,n$:()=>d,sD:()=>c});var r=a(7096),o=a(4071),n=e([r,o]);function s(e={}){let{logData:t=!1,includeHooks:a=Object.values(r.WD),excludeHooks:i=[r.WD.MESSAGE_UPDATE]}=e,n={};return Object.values(r.WD).forEach(e=>{!a.includes(e)||i.includes(e)||(n[e]=async e=>{let{hookType:a,data:i,result:r,error:n,timestamp:s}=e,l=n?"error":"info",d=n?"❌":"✅",c=n?` (error: ${n.message})`:"",u=`${d} Hook: ${a}${c}`;if(t){let e=JSON.stringify(i,null,2),t=void 0!==r?JSON.stringify(r,null,2):"";u+=`
|
|
8
8
|
Data: ${e}`,t&&(u+=`
|
|
9
|
-
Result: ${t}`)}switch(l){case"error":(0,o.vV)(u);break;case"warn":(0,o.JE)(u);break;case"debug":(0,o.MD)(u);break;default:(0,o.fH)(u)}return i})}),n}function l(){let e=new Map;return{[r.WD.BEFORE_MODEL_CALL]:t=>{let{data:a}=t,i=`model_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;return e.set(i,{startTime:Date.now(),messages:a.messages?.length||0,model:a.model}),t.data._timingKey=i,a},[r.WD.AFTER_MODEL_CALL]:t=>{let{data:a,result:i}=t,r=a._timingKey;if(r&&e.has(r)){let t=e.get(r),a=Date.now()-t.startTime;(0,o.fH)(`⏱️ Model call performance: ${a}ms for ${t.messages} messages (${t.model})`),e.delete(r)}return a},[r.WD.BEFORE_TOOL_EXECUTE]:t=>{let{data:a}=t,i=`tool_${a.name}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;return e.set(i,{startTime:Date.now(),toolName:a.name,params:a.params}),t.data._timingKey=i,a},[r.WD.AFTER_TOOL_EXECUTE]:t=>{let{data:a,result:i}=t,r=a._timingKey;if(r&&e.has(r)){let t=e.get(r),a=Date.now()-t.startTime;(0,o.fH)(`⏱️ Tool execution: ${t.toolName} took ${a}ms`),e.delete(r)}return a}}}function d(e={}){let{blockedTools:t=[],maxPromptLength:a=1e4}=e;return{[r.WD.BEFORE_SYSTEM_PROMPT_BUILD]:e=>{let{data:t}=e;return t.systemPrompt&&t.systemPrompt.length>a&&(0,o.JE)(`⚠️ System prompt is too long: ${t.systemPrompt.length} characters (max: ${a})`),t},[r.WD.BEFORE_TOOL_EXECUTE]:e=>{let{data:a}=e;if(t.includes(a.name))throw Error(`Tool "${a.name}" is blocked by security policy`);let i=JSON.stringify(a.params||{});for(let e of[/password/i,/secret/i,/api[_-]?key/i,/token/i,/credential/i])if(e.test(i)){(0,o.JE)(`⚠️ Potential sensitive information in tool "${a.name}" parameters`);break}return a},[r.WD.BEFORE_MODEL_CALL]:e=>{let{data:t}=e,a=JSON.stringify(t.messages||[]);for(let e of[/password\s*[:=]/i,/secret\s*[:=]/i,/api[_-]?key\s*[:=]/i,/token\s*[:=]/i])if(e.test(a)){(0,o.JE)("⚠️ Potential sensitive information in model call messages");break}return t}}}function c(){let e={modelCalls:0,toolCalls:0,totalTokens:0,errors:0,startTime:Date.now()};return{[r.WD.BEFORE_MODEL_CALL]:t=>(e.modelCalls++,t?.data),[r.WD.BEFORE_TOOL_EXECUTE]:t=>(e.toolCalls++,t?.data),[r.WD.AFTER_MODEL_CALL]:t=>(t?.result?.usage&&(e.totalTokens+=t.result.usage.total_tokens||0),t?.data),[r.WD.AFTER_TOOL_EXECUTE]:t=>(t?.error&&e.errors++,t?.data),[r.WD.AFTER_AGENT_RUN]:t=>{let a=Date.now()-e.startTime;return(0,o.fH)("\uD83D\uDCCA Agent run stats:"),(0,o.fH)(` Model calls: ${e.modelCalls}`),(0,o.fH)(` Tool calls: ${e.toolCalls}`),(0,o.fH)(` Total tokens: ${e.totalTokens}`),(0,o.fH)(` Errors: ${e.errors}`),(0,o.fH)(` Duration: ${a}ms`),t?.data??null}}}[r,o]=n.then?(await n)():n,i()}catch(e){i(e)}})},7096(e,t,a){a.a(e,async function(e,i){try{a.d(t,{WD:()=>n,sX:()=>s});var r=a(7126),o=e([r]);r=(o.then?(await o)():o)[0];let n={BEFORE_SYSTEM_PROMPT_BUILD:"beforeSystemPromptBuild",AFTER_SYSTEM_PROMPT_BUILD:"afterSystemPromptBuild",BEFORE_MODEL_CALL:"beforeModelCall",AFTER_MODEL_CALL:"afterModelCall",MESSAGE_UPDATE:"messageUpdate",BEFORE_TOOL_CALL:"beforeToolCall",AFTER_TOOL_CALL:"afterToolCall",BEFORE_TOOL_EXECUTE:"beforeToolExecute",AFTER_TOOL_EXECUTE:"afterToolExecute",BEFORE_AGENT_RUN:"beforeAgentRun",AFTER_AGENT_RUN:"afterAgentRun",BEFORE_CACHED_AGENT_REUSE:"beforeCachedAgentReuse"},s=new class{constructor(){this.hooks=new Map,Object.values(n).forEach(e=>{this.hooks.set(e,[])})}register(e,t){if(!this.hooks.has(e))throw Error(`Unknown hook type: ${e}`);let a=this.hooks.get(e);return a.push(t),()=>{let e=a.indexOf(t);e>-1&&a.splice(e,1)}}registerAll(e){let t=Object.entries(e).map(([e,t])=>this.register(e,t));return()=>{t.forEach(e=>e())}}async trigger(e,t,a={}){let{mutateData:i=!0,abortOnError:r=!1}=a;if(!this.hooks.has(e))throw Error(`Unknown hook type: ${e}`);let o=this.hooks.get(e);if(0===o.length)return t;let n=t;for(let t of o)try{let a={hookType:e,data:n,timestamp:Date.now()},r=await t(a);i&&void 0!==r&&(n=r)}catch(t){if(console.error(`Error in hook handler for ${e}:`,t),r)throw t}return n}async triggerWithAction(e,t,a,i){let r,o=await this.trigger(e,a);try{r=await i(o);let e={hookType:t,data:o,result:r,timestamp:Date.now()};await this.trigger(t,e,{mutateData:!1})}catch(a){let e={hookType:t,data:o,error:a,timestamp:Date.now()};throw await this.trigger(t,e,{mutateData:!1}),a}return r}clear(){this.hooks.forEach((e,t)=>{this.hooks.set(t,[])})}getStats(){let e={};return this.hooks.forEach((t,a)=>{e[a]=t.length}),e}};i()}catch(e){i(e)}})},1045(e,t,a){a.a(e,async function(e,i){try{a.d(t,{J:()=>l});var r=a(7096),o=a(4071),n=a(6849),s=e([r,o]);function l(e){let{rules:t,requestApproval:a,npcId:i,taskId:s}=e;return{[r.WD.BEFORE_TOOL_EXECUTE]:async e=>{let{data:r}=e,l=String(r?.name??""),d=r?.params??{},c="string"==typeof r?.cwd?r.cwd:process.cwd(),u="string"==typeof r?.role?r.role:"",p="string"==typeof r?.toolCallId?r.toolCallId:"",m=(0,n.WE)({toolName:l,params:d,agentCwd:c,rules:t});if((0,o.JX)("[npc-security] beforeToolExecute",JSON.stringify({toolName:l,command:m.command,cwd:m.cwd,decision:m.decision})),"scope"===m.decision||"forbidden"===m.decision){let e=m.message??"Shell command blocked by security policy";throw(0,o.CN)(`[npc-security] blocked: ${e}`),Error(e)}if("approval"===m.decision){if("function"!=typeof a){let e=m.message??"Shell command requires approval";throw(0,o.CN)(`[npc-security] approval required but no handler: ${e}`),Error(e)}if(!await a({toolCallId:p,toolName:l,command:m.command,cwd:m.cwd,role:u,npcId:i,taskId:s})){let e=`Shell command "${m.command}" was denied by user`;throw(0,o.CN)(`[npc-security] denied: ${e}`),Error(e)}}return r}}}[r,o]=s.then?(await s)():s,i()}catch(e){i(e)}})},6849(e,t,a){a.d(t,{WE:()=>s});var i=a(6760);let r=new Set(["exec","queue_exec","bash"]);function o(e){let t=String(e??"").trim().toLowerCase();return t?(t.includes("/")?(0,i.basename)(t):t).trim():""}function n(e,t){let a=o(t);return!!a&&e.some(e=>o(e)===a)}function s(e){var t;let a,s,l,d,c,{toolName:u,params:p,agentCwd:m,rules:g}=e;if(!r.has(String(u??"").toLowerCase()))return{decision:"ok",command:"",cwd:m};let h=(a=String(u??"").toLowerCase(),(s=p?.command!=null?String(p.command).trim():"")?"exec"===a||"queue_exec"===a?o(s):"bash"===a?o(s.split(/\s+/)[0]??""):"":""),f=(l=(t={params:p,agentCwd:m}).params??{},d="string"==typeof t.agentCwd?t.agentCwd:process.cwd(),c=null!=l.cwd?String(l.cwd).trim():"",(0,i.resolve)(c||d));return g.scopes.length>0&&!function(e,t){if(!Array.isArray(t)||0===t.length)return!0;let a=(0,i.resolve)(e);for(let e of t){if("string"!=typeof e||""===e.trim())continue;let t=(0,i.resolve)(e.trim());if(a===t)return!0;let r=t.endsWith("/")?t:`${t}/`;if(a.startsWith(r))return!0}return!1}(f,g.scopes)?{decision:"scope",command:h,cwd:f,message:`Shell command cwd "${f}" is outside allowed scopes`}:h&&n(g.forbiddenShellCommands,h)?{decision:"forbidden",command:h,cwd:f,message:`Shell command "${h}" is forbidden by security policy`}:h&&n(g.allowedShellCommands,h)?{decision:"ok",command:h,cwd:f}:(h&&n(g.approvalShellCommands,h),{decision:"approval",command:h,cwd:f,message:`Shell command "${h}" requires approval`})}},7126(e,t,a){a.a(e,async function(e,i){try{let c;a.d(t,{l:()=>d});var r=a(4427),o=a(4071),n=a(7096),s=e([r,n,o]);[r,n,o]=s.then?(await s)():s;let u=!0,p=!0;async function l(e){if(!u)return e.data;let{runState:t,agent:a,task:i,opts:n}=e.data;if(!t||!n||!a)return e.data;try{(0,o.JX)("handleBeforeCachedAgentReuse: rebuilding system prompt",{taskId:i?.id,role:n.role,mode:n.mode});let{systemPrompt:t,systemPromptRaw:s,initialMessages:l}=await (0,r.E)({cwd:n.cwd,lang:n.lang,role:n.role,mode:n.mode||"agent",task:i,skillsDir:n.skillsDir,modelConfig:n.modelConfig,onceRun:n.onceRun});return a.state.systemPrompt=t,l&&l.length>0&&((0,o.JX)("handleBeforeCachedAgentReuse: updating initial messages",{taskId:i?.id,messages:l.length}),a.state.messages=l),p&&(0,o.KH)("handleBeforeCachedAgentReuse: System prompt rebuilt for cached agent",{taskId:i?.id,messages:l?.length??0,promptLength:t.length,rawLength:s?.length??0}),e.data}catch(t){return(0,o.CN)("Error in handleBeforeCachedAgentReuse:",t),(0,o.JX)("handleBeforeCachedAgentReuse failed",{error:t?.message,taskId:i?.id}),e.data}}function d(){return c&&c(),c=n.sX.register(n.WD.BEFORE_CACHED_AGENT_REUSE,l),(0,o.JX)("registerSystemPromptRebuildHook: hook registered"),c}i()}catch(e){i(e)}})},1224(e,t,a){a.d(t,{c:()=>o});var i=a(481);let r=!1;function o(e){if(!process.stdin.isTTY)return()=>{};!r&&process.stdin.isTTY&&((0,i.emitKeypressEvents)(process.stdin),r=!0);let t=process.stdin.isRaw;process.stdin.setRawMode(!0),process.stdin.resume();let a=(t,a)=>{a&&(a.ctrl&&"s"===a.name?(process.stdout.write("\n[Ctrl+S] Stopping agent...\n"),e.stop()):a.ctrl&&"p"===a.name?(process.stdout.write("\n[Ctrl+P] Pausing agent...\n"),e.pause()):a.ctrl&&"c"===a.name&&(process.stdout.write("\n"),process.exit(0)))};return process.stdin.on("keypress",a),()=>{process.stdin.removeListener("keypress",a),process.stdin.isTTY&&process.stdin.setRawMode(t??!1);try{process.stdin.pause()}catch{}}}},4765(e,t,a){a.a(e,async function(e,i){try{a.d(t,{C:()=>n});var r=a(7382),o=e([r]);function n(e){let t,a,i,o,n,s,l,d,c,u,p,m,g,h,f,k,v,b,w=(t=e?.provider??"",a=e?.baseUrl??"",i="zai"===t||"zai-coding-cn"===t||a.includes("api.z.ai")||a.includes("open.bigmodel.cn"),o="together"===t||a.includes("api.together.ai")||a.includes("api.together.xyz"),n="moonshotai"===t||"moonshotai-cn"===t||a.includes("api.moonshot."),s="openrouter"===t||a.includes("openrouter.ai"),l="cloudflare-workers-ai"===t||a.includes("api.cloudflare.com"),d="cloudflare-ai-gateway"===t||a.includes("gateway.ai.cloudflare.com"),c="nvidia"===t||a.includes("integrate.api.nvidia.com"),u="ant-ling"===t||a.includes("api.ant-ling.com"),p="deepseek"===t||a.toLowerCase().includes("deepseek.com"),m=c||"cerebras"===t||a.includes("cerebras.ai")||"xai"===t||a.includes("api.x.ai")||o||a.includes("chutes.ai")||p||i||n||"opencode"===t||a.includes("opencode.ai")||l||d||u,g=a.includes("chutes.ai")||p||n||d||o||c||u||i,h="xai"===t||a.includes("api.x.ai"),f=String(e?.id??""),k=s&&(f.startsWith("anthropic/")||f.startsWith("openai/")),v="openrouter"===t&&f.startsWith("anthropic/")?"anthropic":void 0,b=(0,r.tq)(e),{supportsStore:!m,supportsDeveloperRole:(k||!m&&!s)&&!b,supportsReasoningEffort:!h&&!i&&!n&&!o&&!d&&!c&&!u,supportsUsageInStreaming:!0,supportsFinishReason:!0,maxTokensField:g?"max_tokens":"max_completion_tokens",requiresToolResultName:!1,requiresAssistantAfterToolResult:!1,requiresThinkingAsText:!1,requiresReasoningContentOnAssistantMessages:p,thinkingFormat:p?"deepseek":i?"zai":o?"together":u?"ant-ling":s?"openrouter":"openai",openRouterRouting:{},vercelGatewayRouting:{},chatTemplateKwargs:{},chatTemplateArgs:{},zaiToolStream:!1,supportsThinkingTokenBudget:!1,thinkingTokenBudgetField:void 0,supportsStrictMode:!n&&!o&&!d&&!c,supportsOpenAIGrammarTools:!1,cacheControlFormat:v,sendSessionAffinityHeaders:!1,deferredToolsMode:void 0,sessionAffinityFormat:s?"openrouter":"openai",supportsLongCacheRetention:!(o||l||d||c||u)}),y=e?.compat;return y?{supportsStore:y.supportsStore??w.supportsStore,supportsDeveloperRole:y.supportsDeveloperRole??w.supportsDeveloperRole,supportsReasoningEffort:y.supportsReasoningEffort??w.supportsReasoningEffort,supportsUsageInStreaming:y.supportsUsageInStreaming??w.supportsUsageInStreaming,supportsFinishReason:y.supportsFinishReason??w.supportsFinishReason,maxTokensField:y.maxTokensField??w.maxTokensField,requiresToolResultName:y.requiresToolResultName??w.requiresToolResultName,requiresAssistantAfterToolResult:y.requiresAssistantAfterToolResult??w.requiresAssistantAfterToolResult,requiresThinkingAsText:y.requiresThinkingAsText??w.requiresThinkingAsText,requiresReasoningContentOnAssistantMessages:y.requiresReasoningContentOnAssistantMessages??w.requiresReasoningContentOnAssistantMessages,thinkingFormat:y.thinkingFormat??w.thinkingFormat,openRouterRouting:y.openRouterRouting??{},vercelGatewayRouting:y.vercelGatewayRouting??w.vercelGatewayRouting,chatTemplateKwargs:y.chatTemplateKwargs??w.chatTemplateKwargs,chatTemplateArgs:y.chatTemplateArgs??w.chatTemplateArgs,zaiToolStream:y.zaiToolStream??w.zaiToolStream,supportsThinkingTokenBudget:y.supportsThinkingTokenBudget??w.supportsThinkingTokenBudget,thinkingTokenBudgetField:y.thinkingTokenBudgetField??w.thinkingTokenBudgetField,supportsStrictMode:y.supportsStrictMode??w.supportsStrictMode,supportsOpenAIGrammarTools:y.supportsOpenAIGrammarTools??w.supportsOpenAIGrammarTools,cacheControlFormat:y.cacheControlFormat??w.cacheControlFormat,sendSessionAffinityHeaders:y.sendSessionAffinityHeaders??w.sendSessionAffinityHeaders,deferredToolsMode:y.deferredToolsMode??w.deferredToolsMode,sessionAffinityFormat:y.sessionAffinityFormat??w.sessionAffinityFormat,supportsLongCacheRetention:y.supportsLongCacheRetention??w.supportsLongCacheRetention,vllmPriority:y.vllmPriority}:w}r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},6551(e,t,a){a.a(e,async function(e,i){try{a.d(t,{C4:()=>m,Lp:()=>c});var r=a(6623),o=a(4071),n=a(4765),s=a(178),l=e([n,r,s,o]);[n,r,s,o]=l.then?(await l)():l;let g=/^[a-zA-Z0-9_-]{1,64}$/;function d(e){if(e){if(null!=e.id)return String(e.id);if(null!=e.callId)return String(e.callId)}}function c(e){return e?.reasoning===!0}function u(e){if(e?.toolCallId!=null&&""!==String(e.toolCallId).trim())return String(e.toolCallId);if(!Array.isArray(e?.content))return"";for(let t of e.content)if(t?.type==="toolResult"){let e=d(t);if(null!=e)return e}return""}function p(e,t=null){let a=(e||[]).filter(e=>null!=e&&["user","assistant","toolResult"].includes(e.role)),i=new Set,o=[];for(let e of a){if("assistant"===e.role){o.push(e);let t=function(e){if(!e||"assistant"!==e.role||!Array.isArray(e.content))return[];let t=[];for(let a of e.content)if(a&&"toolCall"===a.type){let e=d(a);null!=e&&t.push(e)}return t}(e);i=new Set(t);continue}if("user"===e.role){o.push(e),i=new Set;continue}let a=u(e);if(!a||0===i.size||!i.has(a))continue;let s=o.length>0?o[o.length-1]:void 0;(!(t&&s&&s&&"assistant"===s.role&&Array.isArray(s.content)&&"error"!==s.stopReason&&s.content.some(e=>e&&"toolCall"===e.type))||function(e,t,a){let i=(0,n.C)(e),o=e&&(Array.isArray(e.input)&&0!==e.input.length?e:{...e,input:["text"]}),s=(0,r.convertMessages)(o,{messages:[t,a],systemPrompt:""},i).filter(e=>"system"!==e.role&&"developer"!==e.role);if(s.length<2)return!1;let l=s[0],d=s[1];return"assistant"===l.role&&Array.isArray(l.tool_calls)&&l.tool_calls.length>0&&"tool"===d.role}(t,s,e))&&(i.delete(a),o.push(e))}return o}function m(e,t=null){let a=(e||[]).map(e=>{if(e?.role!=="assistant"||!Array.isArray(e.content))return e;let t=e.content.filter(e=>{var t;return!e||"toolCall"!==e.type||(t=e.name,!!("string"==typeof t&&g.test(t))||((0,o.JX)("stripInvalidNamedToolCalls: dropped invalid tool name",{name:e.name,id:d(e)}),!1))});return t.length===e.content.length?e:{...e,content:t}});a=((a=function(e,t=null){let a,i=(e||[]).filter(e=>null!=e&&["user","assistant","toolResult"].includes(e.role)),r=function(e){if(!e)return!1;if(e.compat?.requiresThinkingAsText!=null)return!!e.compat.requiresThinkingAsText;let t=e.provider??"",a=e.baseUrl??"";return"mistral"===t||a.includes("mistral.ai")}(t),o=c(t),n=[];for(let e of i){if("toolResult"===e.role){let t=u(e);if(t&&a?.has(t)){a.delete(t),0===a.size&&(a=void 0);continue}n.push(e);continue}if("user"===e.role){a=void 0,n.push(e);continue}if("assistant"!==e.role){n.push(e);continue}if("error"===e.stopReason||"aborted"===e.stopReason){let t=(Array.isArray(e.content)?e.content.filter(e=>e&&"toolCall"===e.type):[]).map(e=>d(e)??"").filter(e=>""!==e);a=t.length>0?new Set(t):void 0;continue}if(a=void 0,!Array.isArray(e.content))continue;let t=e.content.some(e=>e&&"toolCall"===e.type),i=e.content.some(e=>e&&"text"===e.type&&e.text&&String(e.text).trim().length>0),s=e.content.some(e=>e&&"thinking"===e.type),l=e.content.some(e=>e&&"thinking"===e.type&&e.thinking&&String(e.thinking).trim().length>0);if(t||i||o&&s||r&&l){n.push(e);continue}if(l&&!r)continue}return n}(a,t))||[]).map(e=>{if("assistant"!==e.role||!Array.isArray(e.content))return e;let t=e.content.map(e=>{if(!e||"toolCall"!==e.type)return e;let t=d(e);return null==t||t===e.id?e:{...e,id:t}});return{...e,content:t}}),a=p(a,t);let i=function(e=process.env,t=null){let a=e=>{if(null==e||""===e)return;let t=Number.parseInt(String(e),10);return Number.isFinite(t)&&t>0?t:void 0},i=t?(0,s.Kr)(t):null,r=null!=i&&null!=i.maxMessageTokens?i.maxMessageTokens:null!=i?Math.max(0,i.maxContextTokens-i.reservedSystemTokens):void 0;return{maxMessageTokens:a(e.PITHOSAI_MAX_MESSAGE_TOKENS)??r,maxHistoryMessages:a(e.PITHOSAI_MAX_HISTORY_MESSAGES),minHistoryMessages:a(e.PITHOSAI_MIN_HISTORY_MESSAGES),maxToolResultChars:a(e.PITHOSAI_MAX_TOOL_RESULT_CHARS),minToolResultChars:a(e.PITHOSAI_MIN_TOOL_RESULT_CHARS)}}(process.env,t),r=(0,s.G1)(a,i);return a=p(r.messages,t),(0,o.KH)("[llm_request] "+JSON.stringify(a)),a}i()}catch(e){i(e)}})},627(e,t,a){a.a(e,async function(e,i){try{a.d(t,{_:()=>c});var r=a(9493),o=a(9868),n=a(2425),s=a(4071),l=e([n,r,s,o]);[n,r,s,o]=l.then?(await l)():l;let u="ollama-native",p=!1;function d(e,t,a={}){var i;let o,l=(0,n.createAssistantMessageEventStream)(),c=(i=e.baseUrl,(o=String(i||"").trim())?o.replace(/\/?v1\/?$/,"").replace(/\/$/,""):"http://localhost:11434"),p=new r.Ollama({host:c}),m=(t.messages||[]).map(e=>{if(!e)return{role:"user",content:""};let t="developer"===e.role?"system":"toolResult"===e.role?"tool":e.role,a=function(e){if("string"==typeof e)return e;if(!Array.isArray(e))return String(e??"");let t=[];for(let a of e){if("string"==typeof a){t.push(a);continue}a&&"object"==typeof a&&("text"===a.type&&null!=a.text?t.push(String(a.text)):"toolResult"===a.type&&null!=a.result?t.push(String(a.result)):"thinking"===a.type&&null!=a.thinking&&t.push(String(a.thinking)))}return t.join("")}(e.content),i={role:t,content:a};if("assistant"===t){let t=function(e){if(!Array.isArray(e))return null;let t=[];for(let a of e)if(a&&"toolCall"===a.type){let e=a.arguments??{};if("string"==typeof e)try{e=JSON.parse(e)}catch{e={}}t.push({function:{name:a.toolName??a.name??"",arguments:e}})}return t.length>0?t:null}(e.content);t&&(i.tool_calls=t)}else if("tool"===t){let t=e.toolName??e.tool_name??"";t&&(i.tool_name=t)}return i}),g=t.systemPrompt;g&&"string"==typeof g&&g.trim().length>0&&m.unshift({role:"system",content:g.trim()});let h=t.tools??[],f=h.length>0,k={role:"assistant",content:[],api:u,provider:e.provider||"ollama",model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"stop",timestamp:Date.now()},v=null,b=!1;return(async()=>{try{let i={model:e.id,messages:m,stream:!0};f&&(i.tools=h.map(e=>({type:"function",function:{name:e.name??e.function?.name??"",description:e.description??e.function?.description??"",parameters:e.parameters??e.function?.parameters??{}}}))),(null!=e.contextWindow||null!=e.maxTokens)&&(i.options={...null!=e.contextWindow&&{num_ctx:e.contextWindow},...null!=e.maxTokens&&{num_predict:e.maxTokens}});let r=a?.signal,o=await p.chat(i);for await(let e of(l.push({type:"start",partial:k}),o)){if(r?.aborted)throw Error("Request was aborted");let a=e.message?.content??"",i=e.message?.tool_calls??[],o=!0===e.done;if(a.length>0&&(v||(v={type:"text",text:""},k.content.push(v),l.push({type:"text_start",contentIndex:k.content.length-1,partial:k})),v.text+=a,l.push({type:"text_delta",contentIndex:k.content.length-1,delta:a,partial:k})),o&&i.length>0&&!b){b=!0;for(let e=0;e<i.length;e++){var t;let a=i[e],r="string"==typeof a.function.arguments?(()=>{try{return JSON.parse(a.function.arguments)}catch{return{}}})():a.function.arguments||{},o={type:"toolCall",name:a.function.name,arguments:r,id:(t=e,`ollama-native-tc-${t}`)};k.content.push(o);let n=k.content.length-1;l.push({type:"toolcall_start",contentIndex:n,partial:k}),l.push({type:"toolcall_delta",contentIndex:n,delta:JSON.stringify(o.arguments),partial:k}),l.push({type:"toolcall_end",contentIndex:n,toolCall:o,partial:k})}}}v&&v.text&&!b?(l.push({type:"text_end",contentIndex:k.content.length-1,content:v.text,partial:k}),k.stopReason="stop"):b&&(k.stopReason="toolUse"),l.push({type:"done",reason:k.stopReason,message:k}),l.end()}catch(e){k.stopReason=a?.signal?.aborted?"aborted":"error",k.errorMessage=e instanceof Error?e.message:String(e),(0,s.CN)("ollama-native error: "+k.errorMessage),l.push({type:"error",reason:k.stopReason,error:k}),l.end()}})(),l}function c(){p||(p=!0,(0,o.registerApiProvider)({api:u,stream:d,streamSimple:d}))}i()}catch(e){i(e)}})},7790(e,t,a){a.d(t,{z:()=>i});function i(e,t){return e}},8038(e,t,a){a.a(e,async function(e,i){try{a.d(t,{RM:()=>d,Wf:()=>u,pT:()=>c});var r=a(4071),o=a(1482),n=e([r]);r=(n.then?(await n)():n)[0];let p=new Map;function s(e){let t=p.get(e);if(t)return t;let a={lane:e,queue:[],active:0,maxConcurrent:1,draining:!1};return p.set(e,a),a}function l(e){let t=s(e);if(t.draining)return;t.draining=!0;let a=()=>{for(;t.active<t.maxConcurrent&&t.queue.length>0;){let i=t.queue.shift(),o=Date.now()-i.enqueuedAt;o>=i.warnAfterMs&&(i.onWait?.(o,t.queue.length),(0,r._F)(`lane wait exceeded: lane=${e} waitedMs=${o} queueAhead=${t.queue.length}`)),(0,r.KH)(`lane dequeue: lane=${e} waitedMs=${o} queueAhead=${t.queue.length}`),t.active+=1,(async()=>{let o=Date.now();try{let n=await i.task();t.active-=1,(0,r.KH)(`lane task done: lane=${e} durationMs=${Date.now()-o} active=${t.active} queued=${t.queue.length}`),a(),i.resolve(n)}catch(n){t.active-=1,e.startsWith("auth-probe:")||e.startsWith("session:probe-")||(0,r.CN)(`lane task error: lane=${e} durationMs=${Date.now()-o} error="${String(n)}"`),a(),i.reject(n)}})()}t.draining=!1};a()}function d(e,t){let a=e.trim()||o.A.Main;s(a).maxConcurrent=Math.max(1,Math.floor(t)),l(a)}function c(e,t,a){let i=e.trim()||o.A.Main,n=a?.warnAfterMs??2e3,d=s(i);return new Promise((e,o)=>{d.queue.push({task:()=>t(),resolve:t=>e(t),reject:o,enqueuedAt:Date.now(),warnAfterMs:n,onWait:a?.onWait}),(0,r.KH)(`lane enqueue: lane=${i} depth=${d.queue.length+d.active}`),l(i)})}function u(e,t){return c(o.A.Main,e,t)}i()}catch(e){i(e)}})},7420(e,t,a){a.a(e,async function(e,i){try{a.d(t,{_:()=>d});var r=a(1421),o=a(6760),n=a(7975),s=a(4071),l=e([s]);async function d(e,t){let a,i="number"==typeof t?{timeoutMs:t}:t,{timeoutMs:n,cwd:s,input:l,env:d}=i,{windowsVerbatimArguments:c}=i,u=void 0!==l,p=(a=o.basename(e[0]??""),"npm"===a||"npm.cmd"===a||"npm.exe"===a||("node"===a||"node.exe"===a)&&(e[1]??"").includes("npm-cli.js")),m=d?{...process.env,...d}:{...process.env};return p&&(null==m.NPM_CONFIG_FUND&&(m.NPM_CONFIG_FUND="false"),null==m.npm_config_fund&&(m.npm_config_fund="false")),await new Promise((t,a)=>{let i=(0,r.spawn)(e[0],e.slice(1),{stdio:[u?"pipe":"inherit","pipe","pipe"],cwd:s,env:m,windowsVerbatimArguments:c}),o="",d="",p=!1,g=setTimeout(()=>{i.kill("SIGKILL")},n);u&&i.stdin&&(i.stdin.write(l??""),i.stdin.end()),i.stdout?.on("data",e=>{o+=e.toString()}),i.stderr?.on("data",e=>{d+=e.toString()}),i.on("error",e=>{p||(p=!0,clearTimeout(g),a(e))}),i.on("close",(e,a)=>{p||(p=!0,clearTimeout(g),t({stdout:o,stderr:d,code:e,signal:a,killed:i.killed}))})})}s=(l.then?(await l)():l)[0],(0,n.promisify)(r.execFile),i()}catch(e){i(e)}})},1482(e,t,a){a.d(t,{A:()=>i});let i={Main:"main",Cron:"cron",Subagent:"subagent",Nested:"nested"}},4788(e,t,a){a.a(e,async function(e,i){try{a.d(t,{EY:()=>k,Ol:()=>p,Wv:()=>m,aG:()=>v,by:()=>b});var r=a(6760),o=a(1455),n=a(5012),s=a(8362),l=a(8359),d=a(8391),c=a(4071),u=e([l,d,c,s]);function p(e){return null!=e&&"object"==typeof e&&"MISSING_PROMPT_FILES"===e.code&&"string"==typeof e.pithosaiDir&&Array.isArray(e.missing)}[l,d,c,s]=u.then?(await u)():u;let w=new Set(["one-shot-run.md","one-shot-run-zh.md"]);async function m(e,t="en",a=!1){if(!a)return"";let i=(0,r.join)(e,".pithosai","rules"),n=function(e="en"){return String(e??"").toLowerCase().startsWith("zh")?"one-shot-run-zh.md":"one-shot-run.md"}(t),s="one-shot-run-zh.md"===n?"one-shot-run.md":null;for(let e of[n,s].filter(Boolean))try{let t=(await (0,o.readFile)((0,r.join)(i,e),"utf-8")).trim();if(t)return t}catch(e){if(e?.code!=="ENOENT")throw e}return function(e="en"){return String(e??"").toLowerCase().startsWith("zh")?"## 单次运行\n\n这是一次**单次(非交互)运行**,用户无法回答后续问题。\n\n1. 在一次运行中完成任务,不要中途停下等待用户输入。\n2. 遇到多种可行方案时,根据上下文自行选择最优方案并执行,不要向用户征求意见或让其做选择。\n3. 不要提出澄清问题、选项菜单或确认请求。\n4. 若有歧义,做出合理假设,简要说明后继续推进。\n5. 直接交付最终结果,避免讨论「如果有用户在场我会问什么」之类的元评论。":"## One-shot run\n\nThis is a **one-shot (non-interactive) run**. There is no user available to answer follow-up questions.\n\n1. Complete the task in a single pass — do not stop mid-task waiting for input.\n2. When multiple valid choices exist, pick the best option based on context and proceed — do not ask the user to choose.\n3. Do not ask clarifying questions, present option menus, or request confirmation.\n4. If something is ambiguous, make a reasonable assumption, state it briefly, and continue.\n5. Deliver the final result directly; avoid meta-commentary about what you would ask if the user were present."}(t)}function g(e){return"zh"===e?"zh":"en"}function h(e){let{role:t,lang:a,missing:i}=e,r=g(a);return Object.assign(Error("Missing role prompts in database"),{code:"MISSING_PROMPT_FILES",missing:i,pithosaiDir:`pithosai_role_prompts (role=${t}, lang=${r})`,role:t,lang:r})}async function f(e,t,a){let i=g(t),r={};try{let e=await (0,l.Lf)();r=await (0,d.S)(e,{role:a,lang:i})}catch(e){throw(0,c.vV)("cannot load system prompt from db. error:",e.message,e.stack),h({role:a,lang:t,missing:[...n.GV]})}let o=n.GV.filter(e=>null==r[e]||""===String(r[e]).trim());if(o.length>0)throw(0,c.vV)("not find all prompt base names, byNames:",JSON.stringify(Object.keys(r)),"missing:",JSON.stringify(o)),h({role:a,lang:t,missing:o});var u=r;let p=n.GV.map(e=>(u[e]??"").trim()).filter(Boolean);if(0===p.length)return"";let m=(0,s.lW)(t)("prompt.projectDir",{cwd:e}),f=function(e="en"){let t=n.aL[e]??n.aL[n.Kc];return"zh"===e?`## 语言:
|
|
9
|
+
Result: ${t}`)}switch(l){case"error":(0,o.vV)(u);break;case"warn":(0,o.JE)(u);break;case"debug":(0,o.MD)(u);break;default:(0,o.fH)(u)}return i})}),n}function l(){let e=new Map;return{[r.WD.BEFORE_MODEL_CALL]:t=>{let{data:a}=t,i=`model_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;return e.set(i,{startTime:Date.now(),messages:a.messages?.length||0,model:a.model}),t.data._timingKey=i,a},[r.WD.AFTER_MODEL_CALL]:t=>{let{data:a,result:i}=t,r=a._timingKey;if(r&&e.has(r)){let t=e.get(r),a=Date.now()-t.startTime;(0,o.fH)(`⏱️ Model call performance: ${a}ms for ${t.messages} messages (${t.model})`),e.delete(r)}return a},[r.WD.BEFORE_TOOL_EXECUTE]:t=>{let{data:a}=t,i=`tool_${a.name}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;return e.set(i,{startTime:Date.now(),toolName:a.name,params:a.params}),t.data._timingKey=i,a},[r.WD.AFTER_TOOL_EXECUTE]:t=>{let{data:a,result:i}=t,r=a._timingKey;if(r&&e.has(r)){let t=e.get(r),a=Date.now()-t.startTime;(0,o.fH)(`⏱️ Tool execution: ${t.toolName} took ${a}ms`),e.delete(r)}return a}}}function d(e={}){let{blockedTools:t=[],maxPromptLength:a=1e4}=e;return{[r.WD.BEFORE_SYSTEM_PROMPT_BUILD]:e=>{let{data:t}=e;return t.systemPrompt&&t.systemPrompt.length>a&&(0,o.JE)(`⚠️ System prompt is too long: ${t.systemPrompt.length} characters (max: ${a})`),t},[r.WD.BEFORE_TOOL_EXECUTE]:e=>{let{data:a}=e;if(t.includes(a.name))throw Error(`Tool "${a.name}" is blocked by security policy`);let i=JSON.stringify(a.params||{});for(let e of[/password/i,/secret/i,/api[_-]?key/i,/token/i,/credential/i])if(e.test(i)){(0,o.JE)(`⚠️ Potential sensitive information in tool "${a.name}" parameters`);break}return a},[r.WD.BEFORE_MODEL_CALL]:e=>{let{data:t}=e,a=JSON.stringify(t.messages||[]);for(let e of[/password\s*[:=]/i,/secret\s*[:=]/i,/api[_-]?key\s*[:=]/i,/token\s*[:=]/i])if(e.test(a)){(0,o.JE)("⚠️ Potential sensitive information in model call messages");break}return t}}}function c(){let e={modelCalls:0,toolCalls:0,totalTokens:0,errors:0,startTime:Date.now()};return{[r.WD.BEFORE_MODEL_CALL]:t=>(e.modelCalls++,t?.data),[r.WD.BEFORE_TOOL_EXECUTE]:t=>(e.toolCalls++,t?.data),[r.WD.AFTER_MODEL_CALL]:t=>(t?.result?.usage&&(e.totalTokens+=t.result.usage.total_tokens||0),t?.data),[r.WD.AFTER_TOOL_EXECUTE]:t=>(t?.error&&e.errors++,t?.data),[r.WD.AFTER_AGENT_RUN]:t=>{let a=Date.now()-e.startTime;return(0,o.fH)("\uD83D\uDCCA Agent run stats:"),(0,o.fH)(` Model calls: ${e.modelCalls}`),(0,o.fH)(` Tool calls: ${e.toolCalls}`),(0,o.fH)(` Total tokens: ${e.totalTokens}`),(0,o.fH)(` Errors: ${e.errors}`),(0,o.fH)(` Duration: ${a}ms`),t?.data??null}}}[r,o]=n.then?(await n)():n,i()}catch(e){i(e)}})},7096(e,t,a){a.a(e,async function(e,i){try{a.d(t,{WD:()=>n,sX:()=>s});var r=a(7126),o=e([r]);r=(o.then?(await o)():o)[0];let n={BEFORE_SYSTEM_PROMPT_BUILD:"beforeSystemPromptBuild",AFTER_SYSTEM_PROMPT_BUILD:"afterSystemPromptBuild",BEFORE_MODEL_CALL:"beforeModelCall",AFTER_MODEL_CALL:"afterModelCall",MESSAGE_UPDATE:"messageUpdate",BEFORE_TOOL_CALL:"beforeToolCall",AFTER_TOOL_CALL:"afterToolCall",BEFORE_TOOL_EXECUTE:"beforeToolExecute",AFTER_TOOL_EXECUTE:"afterToolExecute",BEFORE_AGENT_RUN:"beforeAgentRun",AFTER_AGENT_RUN:"afterAgentRun",BEFORE_CACHED_AGENT_REUSE:"beforeCachedAgentReuse"},s=new class{constructor(){this.hooks=new Map,Object.values(n).forEach(e=>{this.hooks.set(e,[])})}register(e,t){if(!this.hooks.has(e))throw Error(`Unknown hook type: ${e}`);let a=this.hooks.get(e);return a.push(t),()=>{let e=a.indexOf(t);e>-1&&a.splice(e,1)}}registerAll(e){let t=Object.entries(e).map(([e,t])=>this.register(e,t));return()=>{t.forEach(e=>e())}}async trigger(e,t,a={}){let{mutateData:i=!0,abortOnError:r=!1}=a;if(!this.hooks.has(e))throw Error(`Unknown hook type: ${e}`);let o=this.hooks.get(e);if(0===o.length)return t;let n=t;for(let t of o)try{let a={hookType:e,data:n,timestamp:Date.now()},r=await t(a);i&&void 0!==r&&(n=r)}catch(t){if(console.error(`Error in hook handler for ${e}:`,t),r)throw t}return n}async triggerWithAction(e,t,a,i){let r,o=await this.trigger(e,a);try{r=await i(o);let e={hookType:t,data:o,result:r,timestamp:Date.now()};await this.trigger(t,e,{mutateData:!1})}catch(a){let e={hookType:t,data:o,error:a,timestamp:Date.now()};throw await this.trigger(t,e,{mutateData:!1}),a}return r}clear(){this.hooks.forEach((e,t)=>{this.hooks.set(t,[])})}getStats(){let e={};return this.hooks.forEach((t,a)=>{e[a]=t.length}),e}};i()}catch(e){i(e)}})},1045(e,t,a){a.a(e,async function(e,i){try{a.d(t,{J:()=>l});var r=a(7096),o=a(4071),n=a(6849),s=e([r,o]);function l(e){let{rules:t,requestApproval:a,npcId:i,taskId:s}=e;return{[r.WD.BEFORE_TOOL_EXECUTE]:async e=>{let{data:r}=e,l=String(r?.name??""),d=r?.params??{},c="string"==typeof r?.cwd?r.cwd:process.cwd(),u="string"==typeof r?.role?r.role:"",p="string"==typeof r?.toolCallId?r.toolCallId:"",m=(0,n.WE)({toolName:l,params:d,agentCwd:c,rules:t});if((0,o.JX)("[npc-security] beforeToolExecute",JSON.stringify({toolName:l,command:m.command,cwd:m.cwd,decision:m.decision})),"scope"===m.decision||"forbidden"===m.decision){let e=m.message??"Shell command blocked by security policy";throw(0,o.CN)(`[npc-security] blocked: ${e}`),Error(e)}if("approval"===m.decision){if("function"!=typeof a){let e=m.message??"Shell command requires approval";throw(0,o.CN)(`[npc-security] approval required but no handler: ${e}`),Error(e)}if(!await a({toolCallId:p,toolName:l,command:m.command,cwd:m.cwd,role:u,npcId:i,taskId:s})){let e=`Shell command "${m.command}" was denied by user`;throw(0,o.CN)(`[npc-security] denied: ${e}`),Error(e)}}return r}}}[r,o]=s.then?(await s)():s,i()}catch(e){i(e)}})},6849(e,t,a){a.d(t,{WE:()=>s});var i=a(6760);let r=new Set(["exec","queue_exec","bash"]);function o(e){let t=String(e??"").trim().toLowerCase();return t?(t.includes("/")?(0,i.basename)(t):t).trim():""}function n(e,t){let a=o(t);return!!a&&e.some(e=>o(e)===a)}function s(e){var t;let a,s,l,d,c,{toolName:u,params:p,agentCwd:m,rules:g}=e;if(!r.has(String(u??"").toLowerCase()))return{decision:"ok",command:"",cwd:m};let h=(a=String(u??"").toLowerCase(),(s=p?.command!=null?String(p.command).trim():"")?"exec"===a||"queue_exec"===a?o(s):"bash"===a?o(s.split(/\s+/)[0]??""):"":""),f=(l=(t={params:p,agentCwd:m}).params??{},d="string"==typeof t.agentCwd?t.agentCwd:process.cwd(),c=null!=l.cwd?String(l.cwd).trim():"",(0,i.resolve)(c||d));return g.scopes.length>0&&!function(e,t){if(!Array.isArray(t)||0===t.length)return!0;let a=(0,i.resolve)(e);for(let e of t){if("string"!=typeof e||""===e.trim())continue;let t=(0,i.resolve)(e.trim());if(a===t)return!0;let r=t.endsWith(i.sep)?t:`${t}${i.sep}`;if(a.startsWith(r))return!0}return!1}(f,g.scopes)?{decision:"scope",command:h,cwd:f,message:`Shell command cwd "${f}" is outside allowed scopes`}:h&&n(g.forbiddenShellCommands,h)?{decision:"forbidden",command:h,cwd:f,message:`Shell command "${h}" is forbidden by security policy`}:h&&n(g.allowedShellCommands,h)?{decision:"ok",command:h,cwd:f}:(h&&n(g.approvalShellCommands,h),{decision:"approval",command:h,cwd:f,message:`Shell command "${h}" requires approval`})}},7126(e,t,a){a.a(e,async function(e,i){try{let c;a.d(t,{l:()=>d});var r=a(4427),o=a(4071),n=a(7096),s=e([r,n,o]);[r,n,o]=s.then?(await s)():s;let u=!0,p=!0;async function l(e){if(!u)return e.data;let{runState:t,agent:a,task:i,opts:n}=e.data;if(!t||!n||!a)return e.data;try{(0,o.JX)("handleBeforeCachedAgentReuse: rebuilding system prompt",{taskId:i?.id,role:n.role,mode:n.mode});let{systemPrompt:t,systemPromptRaw:s,initialMessages:l}=await (0,r.E)({cwd:n.cwd,lang:n.lang,role:n.role,mode:n.mode||"agent",task:i,skillsDir:n.skillsDir,modelConfig:n.modelConfig,onceRun:n.onceRun});return a.state.systemPrompt=t,l&&l.length>0&&((0,o.JX)("handleBeforeCachedAgentReuse: updating initial messages",{taskId:i?.id,messages:l.length}),a.state.messages=l),p&&(0,o.KH)("handleBeforeCachedAgentReuse: System prompt rebuilt for cached agent",{taskId:i?.id,messages:l?.length??0,promptLength:t.length,rawLength:s?.length??0}),e.data}catch(t){return(0,o.CN)("Error in handleBeforeCachedAgentReuse:",t),(0,o.JX)("handleBeforeCachedAgentReuse failed",{error:t?.message,taskId:i?.id}),e.data}}function d(){return c&&c(),c=n.sX.register(n.WD.BEFORE_CACHED_AGENT_REUSE,l),(0,o.JX)("registerSystemPromptRebuildHook: hook registered"),c}i()}catch(e){i(e)}})},1224(e,t,a){a.d(t,{c:()=>o});var i=a(481);let r=!1;function o(e){if(!process.stdin.isTTY)return()=>{};!r&&process.stdin.isTTY&&((0,i.emitKeypressEvents)(process.stdin),r=!0);let t=process.stdin.isRaw;process.stdin.setRawMode(!0),process.stdin.resume();let a=(t,a)=>{a&&(a.ctrl&&"s"===a.name?(process.stdout.write("\n[Ctrl+S] Stopping agent...\n"),e.stop()):a.ctrl&&"p"===a.name?(process.stdout.write("\n[Ctrl+P] Pausing agent...\n"),e.pause()):a.ctrl&&"c"===a.name&&(process.stdout.write("\n"),process.exit(0)))};return process.stdin.on("keypress",a),()=>{process.stdin.removeListener("keypress",a),process.stdin.isTTY&&process.stdin.setRawMode(t??!1);try{process.stdin.pause()}catch{}}}},4765(e,t,a){a.a(e,async function(e,i){try{a.d(t,{C:()=>n});var r=a(7382),o=e([r]);function n(e){let t,a,i,o,n,s,l,d,c,u,p,m,g,h,f,k,v,b,w=(t=e?.provider??"",a=e?.baseUrl??"",i="zai"===t||"zai-coding-cn"===t||a.includes("api.z.ai")||a.includes("open.bigmodel.cn"),o="together"===t||a.includes("api.together.ai")||a.includes("api.together.xyz"),n="moonshotai"===t||"moonshotai-cn"===t||a.includes("api.moonshot."),s="openrouter"===t||a.includes("openrouter.ai"),l="cloudflare-workers-ai"===t||a.includes("api.cloudflare.com"),d="cloudflare-ai-gateway"===t||a.includes("gateway.ai.cloudflare.com"),c="nvidia"===t||a.includes("integrate.api.nvidia.com"),u="ant-ling"===t||a.includes("api.ant-ling.com"),p="deepseek"===t||a.toLowerCase().includes("deepseek.com"),m=c||"cerebras"===t||a.includes("cerebras.ai")||"xai"===t||a.includes("api.x.ai")||o||a.includes("chutes.ai")||p||i||n||"opencode"===t||a.includes("opencode.ai")||l||d||u,g=a.includes("chutes.ai")||p||n||d||o||c||u||i,h="xai"===t||a.includes("api.x.ai"),f=String(e?.id??""),k=s&&(f.startsWith("anthropic/")||f.startsWith("openai/")),v="openrouter"===t&&f.startsWith("anthropic/")?"anthropic":void 0,b=(0,r.tq)(e),{supportsStore:!m,supportsDeveloperRole:(k||!m&&!s)&&!b,supportsReasoningEffort:!h&&!i&&!n&&!o&&!d&&!c&&!u,supportsUsageInStreaming:!0,supportsFinishReason:!0,maxTokensField:g?"max_tokens":"max_completion_tokens",requiresToolResultName:!1,requiresAssistantAfterToolResult:!1,requiresThinkingAsText:!1,requiresReasoningContentOnAssistantMessages:p,thinkingFormat:p?"deepseek":i?"zai":o?"together":u?"ant-ling":s?"openrouter":"openai",openRouterRouting:{},vercelGatewayRouting:{},chatTemplateKwargs:{},chatTemplateArgs:{},zaiToolStream:!1,supportsThinkingTokenBudget:!1,thinkingTokenBudgetField:void 0,supportsStrictMode:!n&&!o&&!d&&!c,supportsOpenAIGrammarTools:!1,cacheControlFormat:v,sendSessionAffinityHeaders:!1,deferredToolsMode:void 0,sessionAffinityFormat:s?"openrouter":"openai",supportsLongCacheRetention:!(o||l||d||c||u)}),y=e?.compat;return y?{supportsStore:y.supportsStore??w.supportsStore,supportsDeveloperRole:y.supportsDeveloperRole??w.supportsDeveloperRole,supportsReasoningEffort:y.supportsReasoningEffort??w.supportsReasoningEffort,supportsUsageInStreaming:y.supportsUsageInStreaming??w.supportsUsageInStreaming,supportsFinishReason:y.supportsFinishReason??w.supportsFinishReason,maxTokensField:y.maxTokensField??w.maxTokensField,requiresToolResultName:y.requiresToolResultName??w.requiresToolResultName,requiresAssistantAfterToolResult:y.requiresAssistantAfterToolResult??w.requiresAssistantAfterToolResult,requiresThinkingAsText:y.requiresThinkingAsText??w.requiresThinkingAsText,requiresReasoningContentOnAssistantMessages:y.requiresReasoningContentOnAssistantMessages??w.requiresReasoningContentOnAssistantMessages,thinkingFormat:y.thinkingFormat??w.thinkingFormat,openRouterRouting:y.openRouterRouting??{},vercelGatewayRouting:y.vercelGatewayRouting??w.vercelGatewayRouting,chatTemplateKwargs:y.chatTemplateKwargs??w.chatTemplateKwargs,chatTemplateArgs:y.chatTemplateArgs??w.chatTemplateArgs,zaiToolStream:y.zaiToolStream??w.zaiToolStream,supportsThinkingTokenBudget:y.supportsThinkingTokenBudget??w.supportsThinkingTokenBudget,thinkingTokenBudgetField:y.thinkingTokenBudgetField??w.thinkingTokenBudgetField,supportsStrictMode:y.supportsStrictMode??w.supportsStrictMode,supportsOpenAIGrammarTools:y.supportsOpenAIGrammarTools??w.supportsOpenAIGrammarTools,cacheControlFormat:y.cacheControlFormat??w.cacheControlFormat,sendSessionAffinityHeaders:y.sendSessionAffinityHeaders??w.sendSessionAffinityHeaders,deferredToolsMode:y.deferredToolsMode??w.deferredToolsMode,sessionAffinityFormat:y.sessionAffinityFormat??w.sessionAffinityFormat,supportsLongCacheRetention:y.supportsLongCacheRetention??w.supportsLongCacheRetention,vllmPriority:y.vllmPriority}:w}r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},6551(e,t,a){a.a(e,async function(e,i){try{a.d(t,{C4:()=>m,Lp:()=>c});var r=a(6623),o=a(4071),n=a(4765),s=a(178),l=e([n,r,s,o]);[n,r,s,o]=l.then?(await l)():l;let g=/^[a-zA-Z0-9_-]{1,64}$/;function d(e){if(e){if(null!=e.id)return String(e.id);if(null!=e.callId)return String(e.callId)}}function c(e){return e?.reasoning===!0}function u(e){if(e?.toolCallId!=null&&""!==String(e.toolCallId).trim())return String(e.toolCallId);if(!Array.isArray(e?.content))return"";for(let t of e.content)if(t?.type==="toolResult"){let e=d(t);if(null!=e)return e}return""}function p(e,t=null){let a=(e||[]).filter(e=>null!=e&&["user","assistant","toolResult"].includes(e.role)),i=new Set,o=[];for(let e of a){if("assistant"===e.role){o.push(e);let t=function(e){if(!e||"assistant"!==e.role||!Array.isArray(e.content))return[];let t=[];for(let a of e.content)if(a&&"toolCall"===a.type){let e=d(a);null!=e&&t.push(e)}return t}(e);i=new Set(t);continue}if("user"===e.role){o.push(e),i=new Set;continue}let a=u(e);if(!a||0===i.size||!i.has(a))continue;let s=o.length>0?o[o.length-1]:void 0;(!(t&&s&&s&&"assistant"===s.role&&Array.isArray(s.content)&&"error"!==s.stopReason&&s.content.some(e=>e&&"toolCall"===e.type))||function(e,t,a){let i=(0,n.C)(e),o=e&&(Array.isArray(e.input)&&0!==e.input.length?e:{...e,input:["text"]}),s=(0,r.convertMessages)(o,{messages:[t,a],systemPrompt:""},i).filter(e=>"system"!==e.role&&"developer"!==e.role);if(s.length<2)return!1;let l=s[0],d=s[1];return"assistant"===l.role&&Array.isArray(l.tool_calls)&&l.tool_calls.length>0&&"tool"===d.role}(t,s,e))&&(i.delete(a),o.push(e))}return o}function m(e,t=null){let a=(e||[]).map(e=>{if(e?.role!=="assistant"||!Array.isArray(e.content))return e;let t=e.content.filter(e=>{var t;return!e||"toolCall"!==e.type||(t=e.name,!!("string"==typeof t&&g.test(t))||((0,o.JX)("stripInvalidNamedToolCalls: dropped invalid tool name",{name:e.name,id:d(e)}),!1))});return t.length===e.content.length?e:{...e,content:t}});a=((a=function(e,t=null){let a,i=(e||[]).filter(e=>null!=e&&["user","assistant","toolResult"].includes(e.role)),r=function(e){if(!e)return!1;if(e.compat?.requiresThinkingAsText!=null)return!!e.compat.requiresThinkingAsText;let t=e.provider??"",a=e.baseUrl??"";return"mistral"===t||a.includes("mistral.ai")}(t),o=c(t),n=[];for(let e of i){if("toolResult"===e.role){let t=u(e);if(t&&a?.has(t)){a.delete(t),0===a.size&&(a=void 0);continue}n.push(e);continue}if("user"===e.role){a=void 0,n.push(e);continue}if("assistant"!==e.role){n.push(e);continue}if("error"===e.stopReason||"aborted"===e.stopReason){let t=(Array.isArray(e.content)?e.content.filter(e=>e&&"toolCall"===e.type):[]).map(e=>d(e)??"").filter(e=>""!==e);a=t.length>0?new Set(t):void 0;continue}if(a=void 0,!Array.isArray(e.content))continue;let t=e.content.some(e=>e&&"toolCall"===e.type),i=e.content.some(e=>e&&"text"===e.type&&e.text&&String(e.text).trim().length>0),s=e.content.some(e=>e&&"thinking"===e.type),l=e.content.some(e=>e&&"thinking"===e.type&&e.thinking&&String(e.thinking).trim().length>0);if(t||i||o&&s||r&&l){n.push(e);continue}if(l&&!r)continue}return n}(a,t))||[]).map(e=>{if("assistant"!==e.role||!Array.isArray(e.content))return e;let t=e.content.map(e=>{if(!e||"toolCall"!==e.type)return e;let t=d(e);return null==t||t===e.id?e:{...e,id:t}});return{...e,content:t}}),a=p(a,t);let i=function(e=process.env,t=null){let a=e=>{if(null==e||""===e)return;let t=Number.parseInt(String(e),10);return Number.isFinite(t)&&t>0?t:void 0},i=t?(0,s.Kr)(t):null,r=null!=i&&null!=i.maxMessageTokens?i.maxMessageTokens:null!=i?Math.max(0,i.maxContextTokens-i.reservedSystemTokens):void 0;return{maxMessageTokens:a(e.PITHOSAI_MAX_MESSAGE_TOKENS)??r,maxHistoryMessages:a(e.PITHOSAI_MAX_HISTORY_MESSAGES),minHistoryMessages:a(e.PITHOSAI_MIN_HISTORY_MESSAGES),maxToolResultChars:a(e.PITHOSAI_MAX_TOOL_RESULT_CHARS),minToolResultChars:a(e.PITHOSAI_MIN_TOOL_RESULT_CHARS)}}(process.env,t),r=(0,s.G1)(a,i);return a=p(r.messages,t),(0,o.KH)("[llm_request] "+JSON.stringify(a)),a}i()}catch(e){i(e)}})},627(e,t,a){a.a(e,async function(e,i){try{a.d(t,{_:()=>c});var r=a(9493),o=a(9868),n=a(2425),s=a(4071),l=e([n,r,s,o]);[n,r,s,o]=l.then?(await l)():l;let u="ollama-native",p=!1;function d(e,t,a={}){var i;let o,l=(0,n.createAssistantMessageEventStream)(),c=(i=e.baseUrl,(o=String(i||"").trim())?o.replace(/\/?v1\/?$/,"").replace(/\/$/,""):"http://localhost:11434"),p=new r.Ollama({host:c}),m=(t.messages||[]).map(e=>{if(!e)return{role:"user",content:""};let t="developer"===e.role?"system":"toolResult"===e.role?"tool":e.role,a=function(e){if("string"==typeof e)return e;if(!Array.isArray(e))return String(e??"");let t=[];for(let a of e){if("string"==typeof a){t.push(a);continue}a&&"object"==typeof a&&("text"===a.type&&null!=a.text?t.push(String(a.text)):"toolResult"===a.type&&null!=a.result?t.push(String(a.result)):"thinking"===a.type&&null!=a.thinking&&t.push(String(a.thinking)))}return t.join("")}(e.content),i={role:t,content:a};if("assistant"===t){let t=function(e){if(!Array.isArray(e))return null;let t=[];for(let a of e)if(a&&"toolCall"===a.type){let e=a.arguments??{};if("string"==typeof e)try{e=JSON.parse(e)}catch{e={}}t.push({function:{name:a.toolName??a.name??"",arguments:e}})}return t.length>0?t:null}(e.content);t&&(i.tool_calls=t)}else if("tool"===t){let t=e.toolName??e.tool_name??"";t&&(i.tool_name=t)}return i}),g=t.systemPrompt;g&&"string"==typeof g&&g.trim().length>0&&m.unshift({role:"system",content:g.trim()});let h=t.tools??[],f=h.length>0,k={role:"assistant",content:[],api:u,provider:e.provider||"ollama",model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"stop",timestamp:Date.now()},v=null,b=!1;return(async()=>{try{let i={model:e.id,messages:m,stream:!0};f&&(i.tools=h.map(e=>({type:"function",function:{name:e.name??e.function?.name??"",description:e.description??e.function?.description??"",parameters:e.parameters??e.function?.parameters??{}}}))),(null!=e.contextWindow||null!=e.maxTokens)&&(i.options={...null!=e.contextWindow&&{num_ctx:e.contextWindow},...null!=e.maxTokens&&{num_predict:e.maxTokens}});let r=a?.signal,o=await p.chat(i);for await(let e of(l.push({type:"start",partial:k}),o)){if(r?.aborted)throw Error("Request was aborted");let a=e.message?.content??"",i=e.message?.tool_calls??[],o=!0===e.done;if(a.length>0&&(v||(v={type:"text",text:""},k.content.push(v),l.push({type:"text_start",contentIndex:k.content.length-1,partial:k})),v.text+=a,l.push({type:"text_delta",contentIndex:k.content.length-1,delta:a,partial:k})),o&&i.length>0&&!b){b=!0;for(let e=0;e<i.length;e++){var t;let a=i[e],r="string"==typeof a.function.arguments?(()=>{try{return JSON.parse(a.function.arguments)}catch{return{}}})():a.function.arguments||{},o={type:"toolCall",name:a.function.name,arguments:r,id:(t=e,`ollama-native-tc-${t}`)};k.content.push(o);let n=k.content.length-1;l.push({type:"toolcall_start",contentIndex:n,partial:k}),l.push({type:"toolcall_delta",contentIndex:n,delta:JSON.stringify(o.arguments),partial:k}),l.push({type:"toolcall_end",contentIndex:n,toolCall:o,partial:k})}}}v&&v.text&&!b?(l.push({type:"text_end",contentIndex:k.content.length-1,content:v.text,partial:k}),k.stopReason="stop"):b&&(k.stopReason="toolUse"),l.push({type:"done",reason:k.stopReason,message:k}),l.end()}catch(e){k.stopReason=a?.signal?.aborted?"aborted":"error",k.errorMessage=e instanceof Error?e.message:String(e),(0,s.CN)("ollama-native error: "+k.errorMessage),l.push({type:"error",reason:k.stopReason,error:k}),l.end()}})(),l}function c(){p||(p=!0,(0,o.registerApiProvider)({api:u,stream:d,streamSimple:d}))}i()}catch(e){i(e)}})},7790(e,t,a){a.d(t,{z:()=>i});function i(e,t){return e}},8038(e,t,a){a.a(e,async function(e,i){try{a.d(t,{RM:()=>d,Wf:()=>u,pT:()=>c});var r=a(4071),o=a(1482),n=e([r]);r=(n.then?(await n)():n)[0];let p=new Map;function s(e){let t=p.get(e);if(t)return t;let a={lane:e,queue:[],active:0,maxConcurrent:1,draining:!1};return p.set(e,a),a}function l(e){let t=s(e);if(t.draining)return;t.draining=!0;let a=()=>{for(;t.active<t.maxConcurrent&&t.queue.length>0;){let i=t.queue.shift(),o=Date.now()-i.enqueuedAt;o>=i.warnAfterMs&&(i.onWait?.(o,t.queue.length),(0,r._F)(`lane wait exceeded: lane=${e} waitedMs=${o} queueAhead=${t.queue.length}`)),(0,r.KH)(`lane dequeue: lane=${e} waitedMs=${o} queueAhead=${t.queue.length}`),t.active+=1,(async()=>{let o=Date.now();try{let n=await i.task();t.active-=1,(0,r.KH)(`lane task done: lane=${e} durationMs=${Date.now()-o} active=${t.active} queued=${t.queue.length}`),a(),i.resolve(n)}catch(n){t.active-=1,e.startsWith("auth-probe:")||e.startsWith("session:probe-")||(0,r.CN)(`lane task error: lane=${e} durationMs=${Date.now()-o} error="${String(n)}"`),a(),i.reject(n)}})()}t.draining=!1};a()}function d(e,t){let a=e.trim()||o.A.Main;s(a).maxConcurrent=Math.max(1,Math.floor(t)),l(a)}function c(e,t,a){let i=e.trim()||o.A.Main,n=a?.warnAfterMs??2e3,d=s(i);return new Promise((e,o)=>{d.queue.push({task:()=>t(),resolve:t=>e(t),reject:o,enqueuedAt:Date.now(),warnAfterMs:n,onWait:a?.onWait}),(0,r.KH)(`lane enqueue: lane=${i} depth=${d.queue.length+d.active}`),l(i)})}function u(e,t){return c(o.A.Main,e,t)}i()}catch(e){i(e)}})},7420(e,t,a){a.a(e,async function(e,i){try{a.d(t,{_:()=>d});var r=a(1421),o=a(6760),n=a(7975),s=a(4071),l=e([s]);async function d(e,t){let a,i="number"==typeof t?{timeoutMs:t}:t,{timeoutMs:n,cwd:s,input:l,env:d}=i,{windowsVerbatimArguments:c}=i,u=void 0!==l,p=(a=o.basename(e[0]??""),"npm"===a||"npm.cmd"===a||"npm.exe"===a||("node"===a||"node.exe"===a)&&(e[1]??"").includes("npm-cli.js")),m=d?{...process.env,...d}:{...process.env};return p&&(null==m.NPM_CONFIG_FUND&&(m.NPM_CONFIG_FUND="false"),null==m.npm_config_fund&&(m.npm_config_fund="false")),await new Promise((t,a)=>{let i=(0,r.spawn)(e[0],e.slice(1),{stdio:[u?"pipe":"inherit","pipe","pipe"],cwd:s,env:m,windowsVerbatimArguments:c}),o="",d="",p=!1,g=setTimeout(()=>{i.kill("SIGKILL")},n);u&&i.stdin&&(i.stdin.write(l??""),i.stdin.end()),i.stdout?.on("data",e=>{o+=e.toString()}),i.stderr?.on("data",e=>{d+=e.toString()}),i.on("error",e=>{p||(p=!0,clearTimeout(g),a(e))}),i.on("close",(e,a)=>{p||(p=!0,clearTimeout(g),t({stdout:o,stderr:d,code:e,signal:a,killed:i.killed}))})})}s=(l.then?(await l)():l)[0],(0,n.promisify)(r.execFile),i()}catch(e){i(e)}})},1482(e,t,a){a.d(t,{A:()=>i});let i={Main:"main",Cron:"cron",Subagent:"subagent",Nested:"nested"}},4788(e,t,a){a.a(e,async function(e,i){try{a.d(t,{EY:()=>k,Ol:()=>p,Wv:()=>m,aG:()=>v,by:()=>b});var r=a(6760),o=a(1455),n=a(5012),s=a(8362),l=a(8359),d=a(8391),c=a(4071),u=e([l,d,c,s]);function p(e){return null!=e&&"object"==typeof e&&"MISSING_PROMPT_FILES"===e.code&&"string"==typeof e.pithosaiDir&&Array.isArray(e.missing)}[l,d,c,s]=u.then?(await u)():u;let w=new Set(["one-shot-run.md","one-shot-run-zh.md"]);async function m(e,t="en",a=!1){if(!a)return"";let i=(0,r.join)(e,".pithosai","rules"),n=function(e="en"){return String(e??"").toLowerCase().startsWith("zh")?"one-shot-run-zh.md":"one-shot-run.md"}(t),s="one-shot-run-zh.md"===n?"one-shot-run.md":null;for(let e of[n,s].filter(Boolean))try{let t=(await (0,o.readFile)((0,r.join)(i,e),"utf-8")).trim();if(t)return t}catch(e){if(e?.code!=="ENOENT")throw e}return function(e="en"){return String(e??"").toLowerCase().startsWith("zh")?"## 单次运行\n\n这是一次**单次(非交互)运行**,用户无法回答后续问题。\n\n1. 在一次运行中完成任务,不要中途停下等待用户输入。\n2. 遇到多种可行方案时,根据上下文自行选择最优方案并执行,不要向用户征求意见或让其做选择。\n3. 不要提出澄清问题、选项菜单或确认请求。\n4. 若有歧义,做出合理假设,简要说明后继续推进。\n5. 直接交付最终结果,避免讨论「如果有用户在场我会问什么」之类的元评论。":"## One-shot run\n\nThis is a **one-shot (non-interactive) run**. There is no user available to answer follow-up questions.\n\n1. Complete the task in a single pass — do not stop mid-task waiting for input.\n2. When multiple valid choices exist, pick the best option based on context and proceed — do not ask the user to choose.\n3. Do not ask clarifying questions, present option menus, or request confirmation.\n4. If something is ambiguous, make a reasonable assumption, state it briefly, and continue.\n5. Deliver the final result directly; avoid meta-commentary about what you would ask if the user were present."}(t)}function g(e){return"zh"===e?"zh":"en"}function h(e){let{role:t,lang:a,missing:i}=e,r=g(a);return Object.assign(Error("Missing role prompts in database"),{code:"MISSING_PROMPT_FILES",missing:i,pithosaiDir:`pithosai_role_prompts (role=${t}, lang=${r})`,role:t,lang:r})}async function f(e,t,a){let i=g(t),r={};try{let e=await (0,l.Lf)();r=await (0,d.S)(e,{role:a,lang:i})}catch(e){throw(0,c.vV)("cannot load system prompt from db. error:",e.message,e.stack),h({role:a,lang:t,missing:[...n.GV]})}let o=n.GV.filter(e=>null==r[e]||""===String(r[e]).trim());if(o.length>0)throw(0,c.vV)("not find all prompt base names, byNames:",JSON.stringify(Object.keys(r)),"missing:",JSON.stringify(o)),h({role:a,lang:t,missing:o});var u=r;let p=n.GV.map(e=>(u[e]??"").trim()).filter(Boolean);if(0===p.length)return"";let m=(0,s.lW)(t)("prompt.projectDir",{cwd:e}),f=function(e="en"){let t=n.aL[e]??n.aL[n.Kc];return"zh"===e?`## 语言:
|
|
10
10
|
- **语言**: 简体中文(请使用简体中文回复)。`:`## languages:
|
|
11
11
|
- **Language**: ${t} (respond in ${t}).`}(t);return[p[0],m,f,...p.slice(1)].join("\n\n---\n\n")}async function k(e,t="en",a="RD"){return f(e,t,a)}async function v(e,t="en"){let a,i=(0,r.join)(e,".pithosai","rules");try{await (0,o.readdir)(i)}catch{return""}try{a=await (0,o.readdir)(i)}catch{return""}let n=a.filter(e=>e.toLowerCase().endsWith(".md")&&!w.has(String(e??"").toLowerCase()));if(0===n.length)return"";let l=[];for(let e of n)try{let t=(await (0,o.readFile)((0,r.join)(i,e),"utf-8")).trim();t&&l.push(t)}catch{continue}if(0===l.length)return"";let d=l.join("\n\n"),c=(0,s.lW)("zh"===t?"zh":"en");return"# "+c("prompt.baseRequirementHeading")+"\n\n"+d}async function b(e,t="RD",a="en"){let i=(0,r.join)(e,".pithosai",t,"memory.md"),n=String(a??"").toLowerCase().startsWith("zh")?"# 记忆":"# memory";try{let e=(await (0,o.readFile)(i,"utf-8")).trim();if(!e)return"";return`${n}
|
|
12
12
|
|
|
@@ -145,9 +145,9 @@ ${c}`,p=`
|
|
|
145
145
|
|
|
146
146
|
---
|
|
147
147
|
|
|
148
|
-
${l}`,m=s.indexOf(u);return -1!==m?`${s.slice(0,m)}${p}${s.slice(m)}`:`${s}${p}`}({systemPrompt:t.state.systemPrompt??"",skills:m,lang:c}),console.debug("refreshAgentSessionSkills: updated",{cwd:a,skillCount:m.length,skillNames:g}),{skillCount:m.length,skillNames:g}}({agent:m,cwd:a.cwd,skillsDir:a.skillsDir,lang:a.lang||"en",role:a.role});if(e.skipped)return e;return c(i("run.skillSlash.sessionSkillsUpdated",{count:String(e.skillCount)})),e}catch(e){return console.error("refreshLiveAgentSkillsFromSession failed",e),u(i("run.skillSlash.sessionSkillsRefreshFailed",{message:e instanceof Error?e.message:String(e)})),null}}[r,o,n,l,d,s]=c.then?(await c)():c,i()}catch(e){i(e)}})},2306(e,t,a){a.a(e,async function(e,i){try{a.d(t,{E8:()=>c,TD:()=>d,w$:()=>l});var r=a(4071),o=a(4055),n=a(1447),s=e([o,r,n]);[o,r,n]=s.then?(await s)():s;let u=/\[PITHOS_SKILL_COMPLETE:([^\]]+)\]/gi;function l(e){let t=String(e??"");if(!u.test(t))return{text:t,removedNames:[]};u.lastIndex=0;let a=[],i=new Set;return{text:t.replace(u,(e,t)=>{let r=String(t??"").trim(),o=r.toLowerCase();return r&&!i.has(o)&&(i.add(o),a.push(r)),""}).replace(/[ \t]+\n/g,"\n").replace(/\n{3,}/g,"\n\n").replace(/\s+/g,e=>e.includes("\n")?e.replace(/[ \t]+/g,""):" ").trim(),removedNames:a}}function d(e){let{message:t,entry:a=null,lang:i="en"}=e;if(!t||"assistant"!==t.role)return[];let s=function(e){if(!e||!Array.isArray(e.content))return[];let t=[],a=new Set;for(let i of e.content){if(i?.type!=="text"||"string"!=typeof i.text)continue;let e=l(i.text);for(let r of(i.text=e.text,e.removedNames)){let e=r.toLowerCase();a.has(e)||(a.add(e),t.push(r))}}return t}(t);if(0===s.length||!a)return s;let d=(0,o.mS)(a.activeSkillNames,s);return a.activeSkillNames=d,a.agent?.state&&(a.agent.state.systemPrompt=(0,n.fx)({systemPrompt:a.agent.state.systemPrompt??"",skillNames:d,lang:i})),(0,r.JX)("applySkillCompleteMarkersToSession",{removed:s,activeSkillNames:d}),s}function c(){let e="";return{reset(){e=""},push(t){e+=String(t??"");let{emit:a,hold:i}=function(e){let t="",a=0;for(;a<e.length;){let i=e.indexOf("[",a);if(-1===i){t+=e.slice(a);break}t+=e.slice(a,i);let r=e.slice(i);if(n.Yx.startsWith(r)&&r.length<n.Yx.length)return{emit:t,hold:r};if(r.startsWith(n.Yx)){let e=r.indexOf("]");if(-1===e)return{emit:t,hold:r};a=i+e+1;continue}t+="[",a=i+1}return{emit:t,hold:""}}(e);return e=i,a},flush(){let{text:t}=l(e);return e="",t}}}i()}catch(e){i(e)}})},5846(e,t,a){a.d(t,{m:()=>n});var i=a(3024),r=a(6760),o=a(1455);class n{constructor(e){this.cwd=e,this.storagePath=(0,r.join)(e,".pithosai","skill-executions.json"),this.statsPath=(0,r.join)(e,".pithosai","skill-stats.json"),this.conversionConfigPath=(0,r.join)(e,".pithosai","skill-conversion.json"),this.executions=this.loadExecutions(),this.stats=this.loadStats(),this.config=this.loadConfig()}loadExecutions(){try{if((0,i.existsSync)(this.storagePath)){let e=(0,i.readFileSync)(this.storagePath,"utf-8");return JSON.parse(e)}}catch(e){console.warn(`Failed to load skill executions: ${e.message}`)}return[]}loadStats(){try{if((0,i.existsSync)(this.statsPath)){let e=(0,i.readFileSync)(this.statsPath,"utf-8");return JSON.parse(e)}}catch(e){console.warn(`Failed to load skill stats: ${e.message}`)}return{}}loadConfig(){let e={autoConvert:!0,minFrequency:3,minSuccessRate:.7,excludedSkills:[],customTemplates:{},conversionThreshold:.8};try{if((0,i.existsSync)(this.conversionConfigPath)){let t=(0,i.readFileSync)(this.conversionConfigPath,"utf-8");return{...e,...JSON.parse(t)}}}catch(e){console.warn(`Failed to load conversion config: ${e.message}`)}return e}async saveExecutions(){try{await (0,o.mkdir)((0,r.dirname)(this.storagePath),{recursive:!0}),(0,i.writeFileSync)(this.storagePath,JSON.stringify(this.executions,null,2),"utf-8")}catch(e){console.warn(`Failed to save skill executions: ${e.message}`)}}async saveStats(){try{await (0,o.mkdir)((0,r.dirname)(this.statsPath),{recursive:!0}),(0,i.writeFileSync)(this.statsPath,JSON.stringify(this.stats,null,2),"utf-8")}catch(e){console.warn(`Failed to save skill stats: ${e.message}`)}}async record(e,t,a,i,r){let o={skillName:e,timestamp:new Date().toISOString(),params:this.sanitizeParams(t),success:a,executionTime:i,...r&&{error:r}};this.executions.push(o);let n=this.executions.filter(t=>t.skillName===e);n.length>1e3&&(this.executions=this.executions.filter(t=>t.skillName!==e||n.slice(-1e3).includes(t))),await this.saveExecutions(),await this.updateStats(e,o)}sanitizeParams(e){let t={...e},a=["password","secret","token","key","apiKey","apikey"];for(let e of Object.keys(t)){let i=e.toLowerCase();a.some(e=>i.includes(e))&&(t[e]="***REDACTED***")}return t}async updateStats(e,t){this.stats[e]||(this.stats[e]={skillName:e,totalExecutions:0,successfulExecutions:0,failedExecutions:0,avgExecutionTime:0,paramFrequency:{},lastExecuted:t.timestamp,conversionScore:0});let a=this.stats[e];a.totalExecutions++,t.success?a.successfulExecutions++:a.failedExecutions++;let i=a.avgExecutionTime*(a.totalExecutions-1)+t.executionTime;for(let[e,r]of(a.avgExecutionTime=i/a.totalExecutions,Object.entries(t.params))){let t=`${e}=${JSON.stringify(r)}`;a.paramFrequency[t]=(a.paramFrequency[t]||0)+1}a.lastExecuted=t.timestamp,a.conversionScore=this.calculateConversionScore(a),await this.saveStats()}calculateConversionScore(e){let t;t=0+Math.min(e.totalExecutions/10,40)+30*(e.successfulExecutions/e.totalExecutions);let a=Object.keys(e.paramFrequency).length,i=Math.max(...Object.values(e.paramFrequency));return t+=a>0?i/e.totalExecutions*20:0,Math.min(100,t+=e.avgExecutionTime>0?Math.min(10,1e3/e.avgExecutionTime):0)}getSuggestedConversions(e=100*this.config.conversionThreshold){let t=[];for(let[a,i]of Object.entries(this.stats))!this.config.excludedSkills.includes(a)&&i.totalExecutions>=this.config.minFrequency&&i.conversionScore>=e&&t.push({skillName:a,score:i.conversionScore,stats:i});return t.sort((e,t)=>t.score-e.score)}getExecutionHistory(e,t=50){return this.executions.filter(t=>t.skillName===e).slice(-t)}getCommonParameters(e,t=10){let a=this.stats[e];if(!a||!a.paramFrequency)return[];let i=a.totalExecutions;return Object.entries(a.paramFrequency).map(([e,t])=>({param:e,frequency:t,percentage:t/i*100})).sort((e,t)=>t.frequency-e.frequency).slice(0,t)}async clearSkillRecords(e){this.executions=this.executions.filter(t=>t.skillName!==e),delete this.stats[e],await this.saveExecutions(),await this.saveStats()}async clearAllRecords(){this.executions=[],this.stats={},await this.saveExecutions(),await this.saveStats()}getSummary(){let e=Object.keys(this.stats),t=e.reduce((e,t)=>e+this.stats[t].totalExecutions,0),a=e.length>0?e.reduce((e,t)=>{let a=this.stats[t];return e+a.successfulExecutions/a.totalExecutions},0)/e.length:0,i=e.map(e=>({skillName:e,executions:this.stats[e].totalExecutions,score:this.stats[e].conversionScore})).sort((e,t)=>t.executions-e.executions).slice(0,10);return{totalSkills:e.length,totalExecutions:t,avgSuccessRate:100*a,topSkills:i}}}},6865(e,t,a){a.a(e,async function(e,i){try{a.d(t,{k:()=>d});var r=a(4071),o=a(4224),n=a(8641),s=e([n,r]);function l(e){let t=e&&"object"==typeof e?e:{role:"assistant",content:[]},a=Array.isArray(t.content)?t.content:[],i=a.some(e=>e&&"toolCall"===e.type&&""!==String(e.name??"").trim()),r={...t,role:"assistant",content:a,stopReason:i?"toolUse":"stop"};return delete r.errorMessage,delete r.error,r}function d(e,t={}){if(!e||"function"!=typeof e[Symbol.asyncIterator])return e;let a=t.createRetryStream,i=Number.isFinite(t.maxRetries)&&t.maxRetries>=0?t.maxRetries:2,s=null,c=e,u=i,p=!1;return{[Symbol.asyncIterator](){let e=c[Symbol.asyncIterator]();return{async next(){try{for(;;){var t;let i=await e.next();if(i.done)return i;let d=i.value;if(d?.type==="start"){if(p){(0,r.JX)("wrapStreamForMissingFinishReason: skipping duplicate start after retry");continue}return p=!0,i}if(d?.type!=="error")return i;let m=(0,n.Mr)(d.error);if(!(0,o.Ag)(m))return i;if((t=d.error)&&"object"==typeof t&&(Array.isArray(t.content)?t.content:[]).some(e=>!!e&&("toolCall"===e.type&&""!==String(e.name??"").trim()||"text"===e.type&&""!==String(e.text??"").trim()||"thinking"===e.type&&""!==String(e.thinking??"").trim())))return s=l(d.error),(0,r.JX)("wrapStreamForMissingFinishReason: recovered",{stopReason:s.stopReason}),{done:!1,value:{type:"done",reason:s.stopReason,message:s}};let g=function(e){let{createRetryStream:t,retriesLeft:a}=e;if(a<=0||"function"!=typeof t)return null;try{let e=t();if(!e||"function"!=typeof e[Symbol.asyncIterator])return(0,r.vV)("wrapStreamForMissingFinishReason: retry factory returned a non-iterable stream"),null;return{stream:e,iterator:e[Symbol.asyncIterator]()}}catch(e){return(0,r.vV)("wrapStreamForMissingFinishReason: retry factory failed",e),null}}({createRetryStream:a,retriesLeft:u});if(g){u-=1,c=g.stream,e=g.iterator,(0,r.JX)("wrapStreamForMissingFinishReason: retrying empty stream",{retriesLeft:u});continue}return s=l(d.error),(0,r.JX)("wrapStreamForMissingFinishReason: empty recovered as stop"),{done:!1,value:{type:"done",reason:"stop",message:s}}}}catch(e){throw(0,r.vV)("wrapStreamForMissingFinishReason: iterator failed",e),e}},return:async t=>"function"==typeof e.return?e.return(t):{done:!0,value:t},async throw(t){if("function"==typeof e.throw)return e.throw(t);throw t}}},result:()=>s?Promise.resolve(s):"function"==typeof c.result?c.result():Promise.resolve(s)}}[n,r]=s.then?(await s)():s,i()}catch(e){i(e)}})},5899(e,t,a){a.a(e,async function(e,i){try{a.d(t,{K:()=>c});var r=a(3122),o=a(7440),n=a(2613),s=a(1294),l=a(6498),d=e([o,s,n]);function c(e){let{tools:t,runMode:a,isSubagentRun:i,subagentOpts:d,subagentRegistry:c,toolAllowlist:u,parentContext:p}=e,m=t,g=c??d?.registry??void 0;return"agent"===a&&!i&&(g=g??(0,o.d)({cwd:p.cwd,lang:p.lang,role:p.role,skillsDir:p.skillsDir,mode:p.mode,outputSink:p.outputSink}),(null==u||u.has("task"))&&(m=[...m,(0,n.gE)(g)]),(null==u||u.has(l.Q4))&&(m=[...m,(0,s.wS)(g)])),i&&(m=(0,r.UZ)(m,d?.allowedTools??null,["task",l.Q4]),d?.includeTaskTool!==!1&&g&&(m=[...m,(0,n.gE)(g,{parentRunId:d?.parentRunId??null,parentDepth:d?.depth??1,allowedTools:d?.allowedTools??null})])),{tools:m,subagentRegistry:g}}[o,s,n]=d.then?(await d)():d,i()}catch(e){i(e)}})},6498(e,t,a){a.d(t,{Q4:()=>i,UJ:()=>s,mn:()=>n,uP:()=>o,wg:()=>r});let i="code_review",r="deepseek-v4-flash",o="deepseek-v4-pro",n=Object.freeze(["read","grep","find","ls","list_files","git_status","git_log"]),s=Object.freeze(["explore","general-purpose"])},7440(e,t,a){a.a(e,async function(e,i){try{a.d(t,{d:()=>p});var r=a(8474),o=a(7598),n=a(6760),s=a(4071),l=a(6498),d=a(6456),c=a(5386),u=e([d,s]);[d,s]=u.then?(await u)():u;class m extends r.EventEmitter{constructor(e){super(),this.parentContext=e,this.runs=new Map,this.sessionTree=new Map}updateParentContext(e){this.parentContext={...this.parentContext,...e}}spawn(e){let{parentRunId:t=null,prompt:a,description:i,model:r=l.wg,subagentType:u="general-purpose",allowedTools:p=null,depth:m=1,signal:g=null,cwd:h=null,includeTaskTool:f}=e;if(m>3)throw Error("Maximum subagent depth (3) exceeded");let k=(0,o.randomUUID)(),v=(0,c.D)(t,k),b={runId:k,parentRunId:t,childSessionKey:v,depth:m,status:"initializing",modelId:r,prompt:a,description:i,subagentType:u,result:null,error:null,startTime:Date.now(),endTime:null,abortController:new AbortController};g&&g.addEventListener("abort",()=>{b.abortController.abort(),b.status="aborted"},{once:!0}),this.runs.set(k,b),t&&(this.sessionTree.has(t)||this.sessionTree.set(t,[]),this.sessionTree.get(t).push(k));let w=b.abortController.signal;b.status="running",this.emit("subagent-start",{runId:k,depth:m,parentRunId:t,sessionKey:v}),(0,s.JX)("[subagent-registry] spawn",{runId:k,parentRunId:t,depth:m});let y={...this.parentContext,registry:this,...h&&""!==String(h).trim()?{cwd:(0,n.resolve)(String(h).trim())}:{}},S=(0,d.a0)({runId:k,parentRunId:t,prompt:a,description:i,depth:m,modelId:r,subagentType:u,allowedTools:p,includeTaskTool:f,parentContext:y,signal:w,registry:this}).then(e=>(b.endTime=Date.now(),b.result=e,e.success?(b.status="completed",this.emit("subagent-complete",{runId:k,result:e})):(b.status="aborted"===b.status?"aborted":"failed",b.error=e.error??"Subagent failed",this.emit("subagent-error",{runId:k,error:b.error,result:e})),e)).catch(e=>{throw b.endTime=Date.now(),b.status="failed",b.error=e?.message??String(e),console.error(`[subagent-registry] spawn error runId=${k}: ${b.error}`),this.emit("subagent-error",{runId:k,error:b.error}),e});return{runId:k,sessionKey:v,promise:S}}async spawnParallel(e,t={}){let{parentRunId:a=null,signal:i=null}=t,r=e.slice(0,8);e.length>8&&(0,s.vV)(`[subagent-registry] spawnParallel truncated ${e.length} tasks to 8`);let o=r.map(e=>this.spawn({...e,parentRunId:a,signal:i}));return(await Promise.allSettled(o.map(e=>e.promise))).map((e,t)=>({config:r[t],status:e.status,result:"fulfilled"===e.status?e.value:null,error:"rejected"===e.status?e.reason:null}))}getRunTree(e=null){let t={},a=(e,t)=>{let i=this.runs.get(e);if(i)for(let r of(t[e]={depth:i.depth,status:i.status,model:i.modelId,prompt:i.prompt.length>50?`${i.prompt.slice(0,50)}...`:i.prompt,children:{}},this.sessionTree.get(e)??[]))a(r,t[e].children)};if(e)return a(e,t),t;for(let[e,i]of this.runs)i.parentRunId||a(e,t);return t}abortAll(){for(let e of this.runs.values())("running"===e.status||"initializing"===e.status)&&(e.abortController.abort(),e.status="aborted")}}function p(e){return new m(e)}i()}catch(e){i(e)}})},6456(e,t,a){a.a(e,async function(e,i){try{a.d(t,{a0:()=>g});var r=a(4071),o=a(4820),n=a(1165),s=a(3242),l=a(1482),d=a(8038),c=a(6498),u=a(5569),p=a(5386),m=e([u,s,o,r,d]);[u,s,o,r,d]=m.then?(await m)():m;let h=!1;async function g(e){h||((0,d.RM)(l.A.Subagent,4),(0,d.RM)(l.A.Nested,1),h=!0);let{runId:t,parentRunId:a=null,prompt:i,description:m,depth:g,modelId:f=c.wg,subagentType:k="general-purpose",allowedTools:v=null,includeTaskTool:b,parentContext:w,signal:y=null,registry:S=null}=e,P="boolean"==typeof b?b:g<3,T=g>1?l.A.Nested:l.A.Subagent,A=(0,p.D)(a,t),I=Date.now(),E=async()=>{if(y?.aborted)return{success:!1,error:"Subagent aborted",runId:t,depth:g,sessionKey:A,durationMs:Date.now()-I};let e=(0,n.gc)(w.outputSink),l=w.lang||"en",d=function(e){let{runId:t,prompt:a,description:i,modelId:r,cwd:o}=e;return{id:`subagent-${t}`,status:"pending",title:i?.trim()||a.slice(0,120),description:a,model:r??c.wg,createdAt:new Date().toISOString(),section:null,projectPath:o}}({runId:t,prompt:i,description:m,modelId:f,cwd:w.cwd}),p=(0,u.r)({depth:g,modelId:f,allowedTools:v,subagentType:k,lang:l});(0,r.JX)("[subagent] start",{runId:t,parentRunId:a,depth:g,sessionKey:A,modelId:f,subagentType:k});try{let i=await (0,s.Ty)(d,{cwd:w.cwd,lang:w.lang,role:w.role,skillsDir:w.skillsDir,mode:w.mode??"agent",timeout:w.timeout,outputSink:e,newSession:!0,quiet:!0,abortSignal:y,subagent:{isolated:!0,depth:g,parentRunId:a,persistMessages:!1,systemPromptOverride:p,allowedTools:v,includeTaskTool:P,registry:S??w.registry??null},...(0,o.SZ)(f)}),n=Date.now()-I;if(i.success)return(0,r.JX)("[subagent] complete",{runId:t,depth:g,durationMs:n}),{success:!0,result:i.result??"(no response)",runId:t,depth:g,sessionKey:A,durationMs:n};let l=i.error??"Subagent run failed";return console.error(`[subagent] failed runId=${t} depth=${g}: ${l}`),{success:!1,result:i.result,error:l,runId:t,depth:g,sessionKey:A,durationMs:n}}catch(a){let e=a&&"object"==typeof a&&"message"in a?String(a.message):String(a);return console.error(`[subagent] exception runId=${t}: ${e}`),{success:!1,error:e,runId:t,depth:g,sessionKey:A,durationMs:Date.now()-I}}};return(0,d.pT)(T,E)}i()}catch(e){i(e)}})},5569(e,t,a){a.a(e,async function(e,i){try{a.d(t,{r:()=>n});var r=a(8362),o=e([r]);function n(e){let t,{depth:a,modelId:i="deepseek-v4-flash",allowedTools:o=null,subagentType:n="general-purpose",lang:s="en"}=e,l=(0,r.lW)((t=String(s??"").trim().toLowerCase().replace(/_/g,"-"),"zh"===t||"zh-cn"===t||"zh-hans"===t||"zh-hant"===t||"zh-tw"===t||"zh-hk"===t||t.startsWith("zh-")?"zh":"en")),d=o&&o.length>0?o.join(", "):l("subagent.toolsAll");return[l("subagent.systemIntro",{depth:String(a),model:i,type:n}),l("subagent.systemTools",{tools:d}),l("subagent.systemBehavior")].join("\n")}r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},5386(e,t,a){a.d(t,{D:()=>i});function i(e,t){return e?`${e}/subagent-${t}`:`subagent-${t}`}},4427(e,t,a){a.a(e,async function(e,i){try{a.d(t,{E:()=>k});var r=a(3565),o=a(9434),n=a(4788),s=a(178),l=a(8362),d=a(7096),c=a(2369),u=a(8359),p=a(4071),m=a(8641),g=a(4768),h=a(4972),f=e([c,l,n,o,r,g,h,s,d,u,m,p]);async function k({cwd:e,lang:t,role:a,mode:i="agent",task:f,skillsDir:k,modelConfig:v,onceRun:b=!1,includeToolsListing:w=!1}){let y,S=await (0,c.Lf)(),P=(0,l.lW)(t),T=(0,l.lW)("zh"===t?"zh":"en"),A="",I="",E="";if("agent"===i){try{y=await (0,n.EY)(e,t,a)}catch(e){if((0,n.Ol)(e))throw Object.assign(Error(`Missing role prompts in database (${e.pithosaiDir}): ${e.missing.join(", ")}`),{code:e.code,pithosaiDir:e.pithosaiDir,missing:e.missing});throw e}A=await (0,n.aG)(e,t),I=await (0,n.Wv)(e,t,b),E=await (0,n.by)(e,a,t)}else{let e;e=String(t??"").toLowerCase().startsWith("zh"),y="dialog"===i?e?"你是助理(对话模式)。\n只回答用户的问题。\n可以在必要时使用只读工具:read、list_files、read_pdf、web_fetch、web_search、proxy_downloader、read_email。\n禁止使用任何会修改环境或执行命令的工具(如 write/edit/bash/exec/queue_exec 等)。\n不要展示工具调用 JSON。\n只输出最终答案,不要添加额外说明或元评论。":"You are a helpful assistant (DIALOG MODE).\nAnswer the user's question directly.\nYou may use read-only tools when needed: read, list_files, read_pdf, web_fetch, web_search, proxy_downloader, read_email.\nNever use mutating/execution tools (e.g. write/edit/bash/exec/queue_exec).\nDo NOT output tool-call JSON.\nOutput only the final answer, with no extra commentary.":e?"你是规划助手(计划模式)。\n为用户的请求生成一个计划(Markdown)。\n只输出计划内容(Markdown)。\n可以在必要时使用只读工具:read、list_files、read_pdf、web_fetch、web_search、proxy_downloader、read_email。\n禁止使用任何会修改环境或执行命令的工具(如 write/edit/bash/exec/queue_exec 等)。":"You are a planning assistant (PLAN MODE).\nCreate a plan in Markdown for the user's request.\nOutput ONLY the plan content (Markdown).\nYou may use read-only tools when needed: read, list_files, read_pdf, web_fetch, web_search, proxy_downloader, read_email.\nNever use mutating/execution tools (e.g. write/edit/bash/exec/queue_exec)."}let C="",R="",L="",x="";if("agent"===i){let{skills:t}=(0,o.nn)({cwd:e,skillsDir:k});t.length>0&&(C=(0,r.formatSkillsForPrompt)(t)+"\n"+P("prompt.skillsInstruction")),R=T("prompt.toolArgSizeLimit",{maxChars:String(s.QF)}),L=T("prompt.toolCallJsonFormat",{})}if(w){let r=await (0,g.s)(e),o=await (0,h.Bp)({cwd:e,lang:t,role:a,mode:i,skillsDir:k,settings:r});x=(0,h.Nb)(o,P)}let j={systemPromptBase:y,requirementsBlock:A,oneShotRunBlock:I,memoryBlock:E,skillsBlock:C,parts:[y],lang:t,role:a,cwd:e,onceRun:b},M=(await d.sX.trigger(d.WD.BEFORE_SYSTEM_PROMPT_BUILD,j)).parts||[y];A&&M.push(A),!0===b&&I&&M.push(I),E&&M.push(E),C&&M.push(C);let O=M.join("\n\n---\n\n"),N=O,D=O;if(v){let{maxSystemChars:e}=(0,s.Kr)(v.model),{text:t}=(0,s.uO)(O,{maxChars:e});N=t,D="agent"===i?N+"\n\n---\n\n"+R+"\n\n"+L:N}else D="agent"===i?O+"\n\n---\n\n"+R+"\n\n"+L:O,x&&(D+="\n\n---\n\n"+x);let _={systemPromptRaw:O,systemPromptTruncated:N,systemPrompt:D,toolArgLimitBlock:R,toolCallJsonFormatBlock:L,lang:t,role:a,cwd:e};D=(await d.sX.trigger(d.WD.AFTER_SYSTEM_PROMPT_BUILD,_)).systemPrompt||D;let F=[];if(f&&f.id)try{let e=await (0,u.gg)(S,f.id),t=String(e?.summary??"").trim();t&&(F.push({role:"user",content:`# ${P("prompt.taskSummaryHeading")}
|
|
148
|
+
${l}`,m=s.indexOf(u);return -1!==m?`${s.slice(0,m)}${p}${s.slice(m)}`:`${s}${p}`}({systemPrompt:t.state.systemPrompt??"",skills:m,lang:c}),console.debug("refreshAgentSessionSkills: updated",{cwd:a,skillCount:m.length,skillNames:g}),{skillCount:m.length,skillNames:g}}({agent:m,cwd:a.cwd,skillsDir:a.skillsDir,lang:a.lang||"en",role:a.role});if(e.skipped)return e;return c(i("run.skillSlash.sessionSkillsUpdated",{count:String(e.skillCount)})),e}catch(e){return console.error("refreshLiveAgentSkillsFromSession failed",e),u(i("run.skillSlash.sessionSkillsRefreshFailed",{message:e instanceof Error?e.message:String(e)})),null}}[r,o,n,l,d,s]=c.then?(await c)():c,i()}catch(e){i(e)}})},2306(e,t,a){a.a(e,async function(e,i){try{a.d(t,{E8:()=>c,TD:()=>d,w$:()=>l});var r=a(4071),o=a(4055),n=a(1447),s=e([o,r,n]);[o,r,n]=s.then?(await s)():s;let u=/\[PITHOS_SKILL_COMPLETE:([^\]]+)\]/gi;function l(e){let t=String(e??"");if(!u.test(t))return{text:t,removedNames:[]};u.lastIndex=0;let a=[],i=new Set;return{text:t.replace(u,(e,t)=>{let r=String(t??"").trim(),o=r.toLowerCase();return r&&!i.has(o)&&(i.add(o),a.push(r)),""}).replace(/[ \t]+\n/g,"\n").replace(/\n{3,}/g,"\n\n").replace(/\s+/g,e=>e.includes("\n")?e.replace(/[ \t]+/g,""):" ").trim(),removedNames:a}}function d(e){let{message:t,entry:a=null,lang:i="en"}=e;if(!t||"assistant"!==t.role)return[];let s=function(e){if(!e||!Array.isArray(e.content))return[];let t=[],a=new Set;for(let i of e.content){if(i?.type!=="text"||"string"!=typeof i.text)continue;let e=l(i.text);for(let r of(i.text=e.text,e.removedNames)){let e=r.toLowerCase();a.has(e)||(a.add(e),t.push(r))}}return t}(t);if(0===s.length||!a)return s;let d=(0,o.mS)(a.activeSkillNames,s);return a.activeSkillNames=d,a.agent?.state&&(a.agent.state.systemPrompt=(0,n.fx)({systemPrompt:a.agent.state.systemPrompt??"",skillNames:d,lang:i})),(0,r.JX)("applySkillCompleteMarkersToSession",{removed:s,activeSkillNames:d}),s}function c(){let e="";return{reset(){e=""},push(t){e+=String(t??"");let{emit:a,hold:i}=function(e){let t="",a=0;for(;a<e.length;){let i=e.indexOf("[",a);if(-1===i){t+=e.slice(a);break}t+=e.slice(a,i);let r=e.slice(i);if(n.Yx.startsWith(r)&&r.length<n.Yx.length)return{emit:t,hold:r};if(r.startsWith(n.Yx)){let e=r.indexOf("]");if(-1===e)return{emit:t,hold:r};a=i+e+1;continue}t+="[",a=i+1}return{emit:t,hold:""}}(e);return e=i,a},flush(){let{text:t}=l(e);return e="",t}}}i()}catch(e){i(e)}})},5846(e,t,a){a.d(t,{m:()=>n});var i=a(3024),r=a(6760),o=a(1455);class n{constructor(e){this.cwd=e,this.storagePath=(0,r.join)(e,".pithosai","skill-executions.json"),this.statsPath=(0,r.join)(e,".pithosai","skill-stats.json"),this.conversionConfigPath=(0,r.join)(e,".pithosai","skill-conversion.json"),this.executions=this.loadExecutions(),this.stats=this.loadStats(),this.config=this.loadConfig()}loadExecutions(){try{if((0,i.existsSync)(this.storagePath)){let e=(0,i.readFileSync)(this.storagePath,"utf-8");return JSON.parse(e)}}catch(e){console.warn(`Failed to load skill executions: ${e.message}`)}return[]}loadStats(){try{if((0,i.existsSync)(this.statsPath)){let e=(0,i.readFileSync)(this.statsPath,"utf-8");return JSON.parse(e)}}catch(e){console.warn(`Failed to load skill stats: ${e.message}`)}return{}}loadConfig(){let e={autoConvert:!0,minFrequency:3,minSuccessRate:.7,excludedSkills:[],customTemplates:{},conversionThreshold:.8};try{if((0,i.existsSync)(this.conversionConfigPath)){let t=(0,i.readFileSync)(this.conversionConfigPath,"utf-8");return{...e,...JSON.parse(t)}}}catch(e){console.warn(`Failed to load conversion config: ${e.message}`)}return e}async saveExecutions(){try{await (0,o.mkdir)((0,r.dirname)(this.storagePath),{recursive:!0}),(0,i.writeFileSync)(this.storagePath,JSON.stringify(this.executions,null,2),"utf-8")}catch(e){console.warn(`Failed to save skill executions: ${e.message}`)}}async saveStats(){try{await (0,o.mkdir)((0,r.dirname)(this.statsPath),{recursive:!0}),(0,i.writeFileSync)(this.statsPath,JSON.stringify(this.stats,null,2),"utf-8")}catch(e){console.warn(`Failed to save skill stats: ${e.message}`)}}async record(e,t,a,i,r){let o={skillName:e,timestamp:new Date().toISOString(),params:this.sanitizeParams(t),success:a,executionTime:i,...r&&{error:r}};this.executions.push(o);let n=this.executions.filter(t=>t.skillName===e);n.length>1e3&&(this.executions=this.executions.filter(t=>t.skillName!==e||n.slice(-1e3).includes(t))),await this.saveExecutions(),await this.updateStats(e,o)}sanitizeParams(e){let t={...e},a=["password","secret","token","key","apiKey","apikey"];for(let e of Object.keys(t)){let i=e.toLowerCase();a.some(e=>i.includes(e))&&(t[e]="***REDACTED***")}return t}async updateStats(e,t){this.stats[e]||(this.stats[e]={skillName:e,totalExecutions:0,successfulExecutions:0,failedExecutions:0,avgExecutionTime:0,paramFrequency:{},lastExecuted:t.timestamp,conversionScore:0});let a=this.stats[e];a.totalExecutions++,t.success?a.successfulExecutions++:a.failedExecutions++;let i=a.avgExecutionTime*(a.totalExecutions-1)+t.executionTime;for(let[e,r]of(a.avgExecutionTime=i/a.totalExecutions,Object.entries(t.params))){let t=`${e}=${JSON.stringify(r)}`;a.paramFrequency[t]=(a.paramFrequency[t]||0)+1}a.lastExecuted=t.timestamp,a.conversionScore=this.calculateConversionScore(a),await this.saveStats()}calculateConversionScore(e){let t;t=0+Math.min(e.totalExecutions/10,40)+30*(e.successfulExecutions/e.totalExecutions);let a=Object.keys(e.paramFrequency).length,i=Math.max(...Object.values(e.paramFrequency));return t+=a>0?i/e.totalExecutions*20:0,Math.min(100,t+=e.avgExecutionTime>0?Math.min(10,1e3/e.avgExecutionTime):0)}getSuggestedConversions(e=100*this.config.conversionThreshold){let t=[];for(let[a,i]of Object.entries(this.stats))!this.config.excludedSkills.includes(a)&&i.totalExecutions>=this.config.minFrequency&&i.conversionScore>=e&&t.push({skillName:a,score:i.conversionScore,stats:i});return t.sort((e,t)=>t.score-e.score)}getExecutionHistory(e,t=50){return this.executions.filter(t=>t.skillName===e).slice(-t)}getCommonParameters(e,t=10){let a=this.stats[e];if(!a||!a.paramFrequency)return[];let i=a.totalExecutions;return Object.entries(a.paramFrequency).map(([e,t])=>({param:e,frequency:t,percentage:t/i*100})).sort((e,t)=>t.frequency-e.frequency).slice(0,t)}async clearSkillRecords(e){this.executions=this.executions.filter(t=>t.skillName!==e),delete this.stats[e],await this.saveExecutions(),await this.saveStats()}async clearAllRecords(){this.executions=[],this.stats={},await this.saveExecutions(),await this.saveStats()}getSummary(){let e=Object.keys(this.stats),t=e.reduce((e,t)=>e+this.stats[t].totalExecutions,0),a=e.length>0?e.reduce((e,t)=>{let a=this.stats[t];return e+a.successfulExecutions/a.totalExecutions},0)/e.length:0,i=e.map(e=>({skillName:e,executions:this.stats[e].totalExecutions,score:this.stats[e].conversionScore})).sort((e,t)=>t.executions-e.executions).slice(0,10);return{totalSkills:e.length,totalExecutions:t,avgSuccessRate:100*a,topSkills:i}}}},6865(e,t,a){a.a(e,async function(e,i){try{a.d(t,{k:()=>d});var r=a(4071),o=a(4224),n=a(8641),s=e([n,r]);function l(e){let t=e&&"object"==typeof e?e:{role:"assistant",content:[]},a=Array.isArray(t.content)?t.content:[],i=a.some(e=>e&&"toolCall"===e.type&&""!==String(e.name??"").trim()),r={...t,role:"assistant",content:a,stopReason:i?"toolUse":"stop"};return delete r.errorMessage,delete r.error,r}function d(e,t={}){if(!e||"function"!=typeof e[Symbol.asyncIterator])return e;let a=t.createRetryStream,i=Number.isFinite(t.maxRetries)&&t.maxRetries>=0?t.maxRetries:2,s=null,c=e,u=i,p=!1;return{[Symbol.asyncIterator](){let e=c[Symbol.asyncIterator]();return{async next(){try{for(;;){var t;let i=await e.next();if(i.done)return i;let d=i.value;if(d?.type==="start"){if(p){(0,r.JX)("wrapStreamForMissingFinishReason: skipping duplicate start after retry");continue}return p=!0,i}if(d?.type!=="error")return i;let m=(0,n.Mr)(d.error);if(!(0,o.Ag)(m))return i;if((t=d.error)&&"object"==typeof t&&(Array.isArray(t.content)?t.content:[]).some(e=>!!e&&("toolCall"===e.type&&""!==String(e.name??"").trim()||"text"===e.type&&""!==String(e.text??"").trim()||"thinking"===e.type&&""!==String(e.thinking??"").trim())))return s=l(d.error),(0,r.JX)("wrapStreamForMissingFinishReason: recovered",{stopReason:s.stopReason}),{done:!1,value:{type:"done",reason:s.stopReason,message:s}};let g=function(e){let{createRetryStream:t,retriesLeft:a}=e;if(a<=0||"function"!=typeof t)return null;try{let e=t();if(!e||"function"!=typeof e[Symbol.asyncIterator])return(0,r.vV)("wrapStreamForMissingFinishReason: retry factory returned a non-iterable stream"),null;return{stream:e,iterator:e[Symbol.asyncIterator]()}}catch(e){return(0,r.vV)("wrapStreamForMissingFinishReason: retry factory failed",e),null}}({createRetryStream:a,retriesLeft:u});if(g){u-=1,c=g.stream,e=g.iterator,(0,r.JX)("wrapStreamForMissingFinishReason: retrying empty stream",{retriesLeft:u});continue}return s=l(d.error),(0,r.JX)("wrapStreamForMissingFinishReason: empty recovered as stop"),{done:!1,value:{type:"done",reason:"stop",message:s}}}}catch(e){throw(0,r.vV)("wrapStreamForMissingFinishReason: iterator failed",e),e}},return:async t=>"function"==typeof e.return?e.return(t):{done:!0,value:t},async throw(t){if("function"==typeof e.throw)return e.throw(t);throw t}}},result:()=>s?Promise.resolve(s):"function"==typeof c.result?c.result():Promise.resolve(s)}}[n,r]=s.then?(await s)():s,i()}catch(e){i(e)}})},5899(e,t,a){a.a(e,async function(e,i){try{a.d(t,{K:()=>c});var r=a(3122),o=a(7440),n=a(2613),s=a(1294),l=a(6498),d=e([o,s,n]);function c(e){let{tools:t,runMode:a,isSubagentRun:i,subagentOpts:d,subagentRegistry:c,toolAllowlist:u,parentContext:p}=e,m=t,g=c??d?.registry??void 0;return"agent"===a&&!i&&(g=g??(0,o.d)({cwd:p.cwd,lang:p.lang,role:p.role,skillsDir:p.skillsDir,mode:p.mode,outputSink:p.outputSink}),(null==u||u.has("task"))&&(m=[...m,(0,n.gE)(g)]),(null==u||u.has(l.Q4))&&(m=[...m,(0,s.wS)(g)])),i&&(m=(0,r.UZ)(m,d?.allowedTools??null,["task",l.Q4]),d?.includeTaskTool!==!1&&g&&(m=[...m,(0,n.gE)(g,{parentRunId:d?.parentRunId??null,parentDepth:d?.depth??1,allowedTools:d?.allowedTools??null})])),{tools:m,subagentRegistry:g}}[o,s,n]=d.then?(await d)():d,i()}catch(e){i(e)}})},6498(e,t,a){a.d(t,{Q4:()=>i,UJ:()=>s,mn:()=>n,uP:()=>o,wg:()=>r});let i="code_review",r="deepseek-v4-flash",o="deepseek-v4-pro",n=Object.freeze(["read","grep","find","ls","list_files","git_status","git_log"]),s=Object.freeze(["explore","general-purpose"])},7440(e,t,a){a.a(e,async function(e,i){try{a.d(t,{d:()=>p});var r=a(8474),o=a(7598),n=a(6760),s=a(4071),l=a(6498),d=a(6456),c=a(5386),u=e([d,s]);[d,s]=u.then?(await u)():u;class m extends r.EventEmitter{constructor(e){super(),this.parentContext=e,this.runs=new Map,this.sessionTree=new Map}updateParentContext(e){this.parentContext={...this.parentContext,...e}}spawn(e){let{parentRunId:t=null,prompt:a,description:i,model:r=l.wg,subagentType:u="general-purpose",allowedTools:p=null,depth:m=1,signal:g=null,cwd:h=null,includeTaskTool:f}=e;if(m>3)throw Error("Maximum subagent depth (3) exceeded");let k=(0,o.randomUUID)(),v=(0,c.D)(t,k),b={runId:k,parentRunId:t,childSessionKey:v,depth:m,status:"initializing",modelId:r,prompt:a,description:i,subagentType:u,result:null,error:null,startTime:Date.now(),endTime:null,abortController:new AbortController};g&&g.addEventListener("abort",()=>{b.abortController.abort(),b.status="aborted"},{once:!0}),this.runs.set(k,b),t&&(this.sessionTree.has(t)||this.sessionTree.set(t,[]),this.sessionTree.get(t).push(k));let w=b.abortController.signal;b.status="running",this.emit("subagent-start",{runId:k,depth:m,parentRunId:t,sessionKey:v}),(0,s.JX)("[subagent-registry] spawn",{runId:k,parentRunId:t,depth:m});let y={...this.parentContext,registry:this,...h&&""!==String(h).trim()?{cwd:(0,n.resolve)(String(h).trim())}:{}},S=(0,d.a0)({runId:k,parentRunId:t,prompt:a,description:i,depth:m,modelId:r,subagentType:u,allowedTools:p,includeTaskTool:f,parentContext:y,signal:w,registry:this}).then(e=>(b.endTime=Date.now(),b.result=e,e.success?(b.status="completed",this.emit("subagent-complete",{runId:k,result:e})):(b.status="aborted"===b.status?"aborted":"failed",b.error=e.error??"Subagent failed",this.emit("subagent-error",{runId:k,error:b.error,result:e})),e)).catch(e=>{throw b.endTime=Date.now(),b.status="failed",b.error=e?.message??String(e),console.error(`[subagent-registry] spawn error runId=${k}: ${b.error}`),this.emit("subagent-error",{runId:k,error:b.error}),e});return{runId:k,sessionKey:v,promise:S}}async spawnParallel(e,t={}){let{parentRunId:a=null,signal:i=null}=t,r=e.slice(0,8);e.length>8&&(0,s.vV)(`[subagent-registry] spawnParallel truncated ${e.length} tasks to 8`);let o=r.map(e=>this.spawn({...e,parentRunId:a,signal:i}));return(await Promise.allSettled(o.map(e=>e.promise))).map((e,t)=>({config:r[t],status:e.status,result:"fulfilled"===e.status?e.value:null,error:"rejected"===e.status?e.reason:null}))}getRunTree(e=null){let t={},a=(e,t)=>{let i=this.runs.get(e);if(i)for(let r of(t[e]={depth:i.depth,status:i.status,model:i.modelId,prompt:i.prompt.length>50?`${i.prompt.slice(0,50)}...`:i.prompt,children:{}},this.sessionTree.get(e)??[]))a(r,t[e].children)};if(e)return a(e,t),t;for(let[e,i]of this.runs)i.parentRunId||a(e,t);return t}abortAll(){for(let e of this.runs.values())("running"===e.status||"initializing"===e.status)&&(e.abortController.abort(),e.status="aborted")}}function p(e){return new m(e)}i()}catch(e){i(e)}})},6456(e,t,a){a.a(e,async function(e,i){try{a.d(t,{a0:()=>g});var r=a(4071),o=a(4820),n=a(1165),s=a(3242),l=a(1482),d=a(8038),c=a(6498),u=a(5569),p=a(5386),m=e([u,s,o,r,d]);[u,s,o,r,d]=m.then?(await m)():m;let h=!1;async function g(e){h||((0,d.RM)(l.A.Subagent,4),(0,d.RM)(l.A.Nested,1),h=!0);let{runId:t,parentRunId:a=null,prompt:i,description:m,depth:g,modelId:f=c.wg,subagentType:k="general-purpose",allowedTools:v=null,includeTaskTool:b,parentContext:w,signal:y=null,registry:S=null}=e,P="boolean"==typeof b?b:g<3,T=g>1?l.A.Nested:l.A.Subagent,A=(0,p.D)(a,t),I=Date.now(),E=async()=>{if(y?.aborted)return{success:!1,error:"Subagent aborted",runId:t,depth:g,sessionKey:A,durationMs:Date.now()-I};let e=(0,n.gc)(w.outputSink),l=w.lang||"en",d=function(e){let{runId:t,prompt:a,description:i,modelId:r,cwd:o}=e;return{id:`subagent-${t}`,status:"pending",title:i?.trim()||a.slice(0,120),description:a,model:r??c.wg,createdAt:new Date().toISOString(),section:null,projectPath:o}}({runId:t,prompt:i,description:m,modelId:f,cwd:w.cwd}),p=(0,u.r)({depth:g,modelId:f,allowedTools:v,subagentType:k,lang:l});(0,r.JX)("[subagent] start",{runId:t,parentRunId:a,depth:g,sessionKey:A,modelId:f,subagentType:k});try{let i=await (0,s.Ty)(d,{cwd:w.cwd,lang:w.lang,role:w.role,skillsDir:w.skillsDir,mode:w.mode??"agent",timeout:w.timeout,outputSink:e,newSession:!0,quiet:!0,abortSignal:y,subagent:{isolated:!0,depth:g,parentRunId:a,persistMessages:!1,systemPromptOverride:p,allowedTools:v,includeTaskTool:P,registry:S??w.registry??null},...(0,o.SZ)(f)}),n=Date.now()-I;if(i.success)return(0,r.JX)("[subagent] complete",{runId:t,depth:g,durationMs:n}),{success:!0,result:i.result??"(no response)",runId:t,depth:g,sessionKey:A,durationMs:n};let l=i.error??"Subagent run failed";return console.error(`[subagent] failed runId=${t} depth=${g}: ${l}`),{success:!1,result:i.result,error:l,runId:t,depth:g,sessionKey:A,durationMs:n}}catch(a){let e=a&&"object"==typeof a&&"message"in a?String(a.message):String(a);return console.error(`[subagent] exception runId=${t}: ${e}`),{success:!1,error:e,runId:t,depth:g,sessionKey:A,durationMs:Date.now()-I}}};return(0,d.pT)(T,E)}i()}catch(e){i(e)}})},5569(e,t,a){a.a(e,async function(e,i){try{a.d(t,{r:()=>n});var r=a(8362),o=e([r]);function n(e){let t,{depth:a,modelId:i="deepseek-v4-flash",allowedTools:o=null,subagentType:n="general-purpose",lang:s="en"}=e,l=(0,r.lW)((t=String(s??"").trim().toLowerCase().replace(/_/g,"-"),"zh"===t||"zh-cn"===t||"zh-hans"===t||"zh-hant"===t||"zh-tw"===t||"zh-hk"===t||t.startsWith("zh-")?"zh":"en")),d=o&&o.length>0?o.join(", "):l("subagent.toolsAll");return[l("subagent.systemIntro",{depth:String(a),model:i,type:n}),l("subagent.systemTools",{tools:d}),l("subagent.systemBehavior")].join("\n")}r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},5386(e,t,a){a.d(t,{D:()=>i});function i(e,t){return e?`${e}/subagent-${t}`:`subagent-${t}`}},4427(e,t,a){a.a(e,async function(e,i){try{a.d(t,{E:()=>k});var r=a(3565),o=a(9434),n=a(4788),s=a(178),l=a(8362),d=a(7096),c=a(2369),u=a(8359),p=a(4071),m=a(8641),g=a(4768),h=a(4972),f=e([c,l,n,o,r,g,h,s,d,u,m,p]);async function k({cwd:e,lang:t,role:a,mode:i="agent",task:f,skillsDir:k,modelConfig:v,onceRun:b=!1,includeToolsListing:w=!1}){let y,S=await (0,c.Lf)(),P=(0,l.lW)(t),T=(0,l.lW)("zh"===t?"zh":"en"),A="",I="",E="";if("agent"===i){try{y=await (0,n.EY)(e,t,a)}catch(e){if((0,n.Ol)(e))throw Object.assign(Error(`Missing role prompts in database (${e.pithosaiDir}): ${e.missing.join(", ")}`),{code:e.code,pithosaiDir:e.pithosaiDir,missing:e.missing});throw e}A=await (0,n.aG)(e,t),I=await (0,n.Wv)(e,t,b),E=await (0,n.by)(e,a,t)}else{let e;e=String(t??"").toLowerCase().startsWith("zh"),y="dialog"===i?e?"你是助理(对话模式)。\n只回答用户的问题。\n可以在必要时使用只读工具:read、list_files、read_pdf、web_fetch、web_search、proxy_downloader、read_email。\n禁止使用任何会修改环境或执行命令的工具(如 write/edit/bash/exec/queue_exec 等)。\n不要展示工具调用 JSON。\n只输出最终答案,不要添加额外说明或元评论。":"You are a helpful assistant (DIALOG MODE).\nAnswer the user's question directly.\nYou may use read-only tools when needed: read, list_files, read_pdf, web_fetch, web_search, proxy_downloader, read_email.\nNever use mutating/execution tools (e.g. write/edit/bash/exec/queue_exec).\nDo NOT output tool-call JSON.\nOutput only the final answer, with no extra commentary.":e?"你是规划助手(计划模式)。\n为用户的请求生成一个计划(Markdown)。\n只输出计划内容(Markdown)。\n可以在必要时使用只读工具:read、list_files、read_pdf、web_fetch、web_search、proxy_downloader、read_email。\n禁止使用任何会修改环境或执行命令的工具(如 write/edit/bash/exec/queue_exec 等)。":"You are a planning assistant (PLAN MODE).\nCreate a plan in Markdown for the user's request.\nOutput ONLY the plan content (Markdown).\nYou may use read-only tools when needed: read, list_files, read_pdf, web_fetch, web_search, proxy_downloader, read_email.\nNever use mutating/execution tools (e.g. write/edit/bash/exec/queue_exec)."}let C="",R="",x="",L="";if("agent"===i){let{skills:t}=(0,o.nn)({cwd:e,skillsDir:k});t.length>0&&(C=(0,r.formatSkillsForPrompt)(t)+"\n"+P("prompt.skillsInstruction")),R=T("prompt.toolArgSizeLimit",{maxChars:String(s.QF)}),x=T("prompt.toolCallJsonFormat",{})}if(w){let r=await (0,g.s)(e),o=await (0,h.Bp)({cwd:e,lang:t,role:a,mode:i,skillsDir:k,settings:r});L=(0,h.Nb)(o,P)}let j={systemPromptBase:y,requirementsBlock:A,oneShotRunBlock:I,memoryBlock:E,skillsBlock:C,parts:[y],lang:t,role:a,cwd:e,onceRun:b},O=(await d.sX.trigger(d.WD.BEFORE_SYSTEM_PROMPT_BUILD,j)).parts||[y];A&&O.push(A),!0===b&&I&&O.push(I),E&&O.push(E),C&&O.push(C);let M=O.join("\n\n---\n\n"),N=M,D=M;if(v){let{maxSystemChars:e}=(0,s.Kr)(v.model),{text:t}=(0,s.uO)(M,{maxChars:e});N=t,D="agent"===i?N+"\n\n---\n\n"+R+"\n\n"+x:N}else D="agent"===i?M+"\n\n---\n\n"+R+"\n\n"+x:M,L&&(D+="\n\n---\n\n"+L);let _={systemPromptRaw:M,systemPromptTruncated:N,systemPrompt:D,toolArgLimitBlock:R,toolCallJsonFormatBlock:x,lang:t,role:a,cwd:e};D=(await d.sX.trigger(d.WD.AFTER_SYSTEM_PROMPT_BUILD,_)).systemPrompt||D;let F=[];if(f&&f.id)try{let e=await (0,u.gg)(S,f.id),t=String(e?.summary??"").trim();t&&(F.push({role:"user",content:`# ${P("prompt.taskSummaryHeading")}
|
|
149
149
|
|
|
150
|
-
${t}`}),(0,p.KH)(`Loaded task summary for task ${f.id} (${t.length} chars) -> prepended as user message`))}catch(e){(0,p.CN)(`Failed to load task summary for task ${f.id}: ${e&&"object"==typeof e&&"message"in e?e.message:String(e)}`)}if(f&&f.id)try{let e=await (0,u.XV)(S,{taskId:f.id,asc:!1}),t=[];for(let a of e)try{t.push(JSON.parse(a.message))}catch{}let a=t.reverse(),i="true"===process.env.PHI_MESSAGES_DISABLED,r=i?a:(0,m._Y)(a,m.rT);F.push(...r),(0,p.KH)(i?`Loaded ${r.length} task messages (PHI_MESSAGES_DISABLED=true) for task ${f.id}`:`Loaded ${r.length} task messages (LUM: first user turn + last ${m.rT} user turns) for task ${f.id}`)}catch(e){(0,p.CN)(`Failed to load task messages for task ${f.id}: ${e.message}`)}return{systemPrompt:D,systemPromptRaw:
|
|
150
|
+
${t}`}),(0,p.KH)(`Loaded task summary for task ${f.id} (${t.length} chars) -> prepended as user message`))}catch(e){(0,p.CN)(`Failed to load task summary for task ${f.id}: ${e&&"object"==typeof e&&"message"in e?e.message:String(e)}`)}if(f&&f.id)try{let e=await (0,u.XV)(S,{taskId:f.id,asc:!1}),t=[];for(let a of e)try{t.push(JSON.parse(a.message))}catch{}let a=t.reverse(),i="true"===process.env.PHI_MESSAGES_DISABLED,r=i?a:(0,m._Y)(a,m.rT);F.push(...r),(0,p.KH)(i?`Loaded ${r.length} task messages (PHI_MESSAGES_DISABLED=true) for task ${f.id}`:`Loaded ${r.length} task messages (LUM: first user turn + last ${m.rT} user turns) for task ${f.id}`)}catch(e){(0,p.CN)(`Failed to load task messages for task ${f.id}: ${e.message}`)}return{systemPrompt:D,systemPromptRaw:M,systemPromptTruncated:N,initialMessages:F}}[c,l,n,o,r,g,h,s,d,u,m,p]=f.then?(await f)():f,i()}catch(e){i(e)}})},9662(e,t,a){a.a(e,async function(e,i){try{a.d(t,{v:()=>d});var r=a(9748),o=a(6760),n=a(3024),s=a(4071),l=e([r,s]);[r,s]=l.then?(await l)():l;class d{constructor(e="./prompts.md"){this.filePath=o.resolve(e),this.watcher=null,this.lastModified=null,this.debounceTimeout=null}async initialize(){try{await n.promises.access(this.filePath)}catch{await this.createSampleFile()}}async createSampleFile(){let e=`# Task List
|
|
151
151
|
|
|
152
152
|
## Pending Tasks
|
|
153
153
|
|
|
@@ -170,12 +170,12 @@ Task format (same as TaskManager):
|
|
|
170
170
|
Original description: ${a}`}}getHandler(e){return this.handlers.get("default")}registerHandler(e,t){this.handlers.set(e,t)}}i()}catch(e){i(e)}})},7648(e,t,a){a.a(e,async function(e,i){try{a.d(t,{S5:()=>s,Uz:()=>p,cb:()=>m,il:()=>d,ku:()=>l,n8:()=>c,we:()=>u});var r=a(6698),o=a(4071),n=e([o]);function s(){return{created:new Set,modified:new Set,deleted:new Set}}function l(e){return{created:[...e?.created??[]].sort(),modified:[...e?.modified??[]].sort(),deleted:[...e?.deleted??[]].sort()}}function d(e,t){let a=c();if(!a?.fileChanges)return;let i=String(e??"").trim().replace(/\\/g,"/");if(!i)return;let{fileChanges:r}=a;if("created"===t){r.created.add(i),r.modified.delete(i),r.deleted.delete(i);return}if("deleted"===t){r.deleted.add(i),r.created.delete(i),r.modified.delete(i);return}r.created.has(i)||r.modified.add(i)}o=(n.then?(await n)():n)[0];let g=new r.AsyncLocalStorage;function c(){return g.getStore()}function u(e,t){return g.run(e,t)}function p(e){let t=c(),a=String(e??"");if(t?.routeToolUserLogViaSink&&t.outputSink){t.outputSink.write(`${a}
|
|
171
171
|
`,{kind:"tool"}),(0,o.KH)(a);return}(0,o.fH)(a)}function m(e,t){let a=String(e??""),i=c(),r=null!=t&&"object"==typeof t&&"function"==typeof t.write?t:i?.routeToolUserLogViaSink&&i.outputSink?i.outputSink:null;if(r){r.write(`${a}
|
|
172
172
|
`,{kind:"tool"}),(0,o.KH)(a);return}process.stdout.write(`${a}
|
|
173
|
-
`)}i()}catch(e){i(e)}})},1294(e,t,a){a.a(e,async function(e,i){try{a.d(t,{wS:()=>v});var r=a(6760),o=a(4204),n=a(8362),s=a(4071),l=a(4768),d=a(4820),c=a(3122),u=a(7648),p=a(5227),m=a(2613),g=a(6498),h=e([o,d,u,l,n,p,s,m]);[o,d,u,l,n,p,s,m]=h.then?(await h)():h;let b=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Project directory (relative to agent cwd or absolute). Defaults to agent cwd."})),filepaths:o.Type.Optional(o.Type.Array(o.Type.String({description:"Repository-relative paths to review."}),{description:"Optional paths to review. When omitted, reviews all uncommitted changes from git_status."})),focus:o.Type.Optional(o.Type.String({description:"Optional short context describing what was generated (docs/code) so the reviewer can focus."}))});function f(){return String(process.env.DEFAULT_CODERVIEW_MODEL_ID??"").trim()||g.uP}async function k(e,t){let a=await (0,l.s)(process.cwd()),i=a?.lang??(0,n.ao)(),r=(0,n.lW)(i);(0,u.Uz)(r(e,t))}function v(e,t={}){return{name:g.Q4,label:"Code Review",description:`After generating docs or code, call this tool to review uncommitted changes with the configured code review model (default ${g.uP}; override with DEFAULT_CODERVIEW_MODEL_ID). Defaults to all git_status changes; optional path/filepaths narrow scope. Returns findings only (read-only subagent). After this tool returns, apply ALL fixes from the findings, then commit with git_commit using a concise AI-generated one-line message.`,parameters:b,execute:async(a,i,o,u)=>{let h,v,b=(0,c.h_)(i,"path",{label:"path"}),w=(0,c.h_)(i,"focus",{label:"focus"}),y=Array.isArray(i.filepaths)?i.filepaths.map(e=>String(e).trim()).filter(Boolean):void 0,S=f(),P=await (0,l.s)(process.cwd()),T=P?.lang??(0,n.ao)(),A=(0,n.lW)(T);if(!function(e){let t=String(e??f()).trim();try{let e=(0,d.Al)((0,d.SZ)(t));return!!e?.model}catch(e){return console.error("[code-review-tool] model config resolve failed",e),!1}}(S)){let e=A("tools.codeReview.noModel",{model:S});throw console.error(`[code-review-tool] ${e}`),(0,s.JX)("[code-review-tool] model not configured",{toolCallId:a,model:S}),Error(e)}let I=e.parentContext?.cwd??process.cwd(),E=function(e,t=process.cwd()){let a=(0,r.resolve)(t);return e&&""!==e.trim()?(0,r.resolve)(a,e.trim()):a}(b,I);try{v=await (0,p.Iv)(E)??E,h=await (0,p.fG)(v)}catch(t){let e=t&&"object"==typeof t&&"message"in t?String(t.message):String(t);throw console.error(`[code-review-tool] git status failed: ${e}`),Error(e)}let C=function(e,t){if(!t||0===t.length)return e;let a=new Set(t.map(e=>String(e).trim().replace(/\\/g,"/")).filter(Boolean));return 0===a.size?e:e.filter(e=>a.has(String(e.path).replace(/\\/g,"/")))}(h.entries,y),R=C.map(e=>e.path),
|
|
173
|
+
`)}i()}catch(e){i(e)}})},1294(e,t,a){a.a(e,async function(e,i){try{a.d(t,{wS:()=>v});var r=a(6760),o=a(4204),n=a(8362),s=a(4071),l=a(4768),d=a(4820),c=a(3122),u=a(7648),p=a(5227),m=a(2613),g=a(6498),h=e([o,d,u,l,n,p,s,m]);[o,d,u,l,n,p,s,m]=h.then?(await h)():h;let b=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Project directory (relative to agent cwd or absolute). Defaults to agent cwd."})),filepaths:o.Type.Optional(o.Type.Array(o.Type.String({description:"Repository-relative paths to review."}),{description:"Optional paths to review. When omitted, reviews all uncommitted changes from git_status."})),focus:o.Type.Optional(o.Type.String({description:"Optional short context describing what was generated (docs/code) so the reviewer can focus."}))});function f(){return String(process.env.DEFAULT_CODERVIEW_MODEL_ID??"").trim()||g.uP}async function k(e,t){let a=await (0,l.s)(process.cwd()),i=a?.lang??(0,n.ao)(),r=(0,n.lW)(i);(0,u.Uz)(r(e,t))}function v(e,t={}){return{name:g.Q4,label:"Code Review",description:`After generating docs or code, call this tool to review uncommitted changes with the configured code review model (default ${g.uP}; override with DEFAULT_CODERVIEW_MODEL_ID). Defaults to all git_status changes; optional path/filepaths narrow scope. Returns findings only (read-only subagent). After this tool returns, apply ALL fixes from the findings, then commit with git_commit using a concise AI-generated one-line message.`,parameters:b,execute:async(a,i,o,u)=>{let h,v,b=(0,c.h_)(i,"path",{label:"path"}),w=(0,c.h_)(i,"focus",{label:"focus"}),y=Array.isArray(i.filepaths)?i.filepaths.map(e=>String(e).trim()).filter(Boolean):void 0,S=f(),P=await (0,l.s)(process.cwd()),T=P?.lang??(0,n.ao)(),A=(0,n.lW)(T);if(!function(e){let t=String(e??f()).trim();try{let e=(0,d.Al)((0,d.SZ)(t));return!!e?.model}catch(e){return console.error("[code-review-tool] model config resolve failed",e),!1}}(S)){let e=A("tools.codeReview.noModel",{model:S});throw console.error(`[code-review-tool] ${e}`),(0,s.JX)("[code-review-tool] model not configured",{toolCallId:a,model:S}),Error(e)}let I=e.parentContext?.cwd??process.cwd(),E=function(e,t=process.cwd()){let a=(0,r.resolve)(t);return e&&""!==e.trim()?(0,r.resolve)(a,e.trim()):a}(b,I);try{v=await (0,p.Iv)(E)??E,h=await (0,p.fG)(v)}catch(t){let e=t&&"object"==typeof t&&"message"in t?String(t.message):String(t);throw console.error(`[code-review-tool] git status failed: ${e}`),Error(e)}let C=function(e,t){if(!t||0===t.length)return e;let a=new Set(t.map(e=>String(e).trim().replace(/\\/g,"/")).filter(Boolean));return 0===a.size?e:e.filter(e=>a.has(String(e.path).replace(/\\/g,"/")))}(h.entries,y),R=C.map(e=>e.path),x=Array.isArray(y)&&y.length>0;if((0,s.JX)("[code-review-tool] execute",{toolCallId:a,requestedCwd:E,repoDir:v,isRepository:h.isRepository,entryCount:C.length,focus:w??null}),!h.isRepository){let e={success:!0,skipped:"not_a_repository",findings:"",reviewedFiles:[],cwd:v};return await k("tools.codeReview.skipped",{path:v,reason:"not_a_repository"}),(0,c.Ao)(e)}if(0===C.length){let e=x&&h.entries.length>0?"no_matching_files":"clean",t={success:!0,skipped:e,findings:"",reviewedFiles:[],cwd:v,...x?{requestedFilepaths:y}:{}};return await k("tools.codeReview.skipped",{path:v,reason:e}),(0,c.Ao)(t)}let L=(0,m.Kr)(e,t),j=t.parentRunId??null,O=function(e){let{cwd:t,entries:a,focus:i}=e,r=a.map(e=>`- ${e.path} (${e.change??"changed"}, status=${e.status})`).join("\n"),o=i&&""!==i.trim()?`Review focus / generation context:
|
|
174
174
|
${i.trim()}
|
|
175
175
|
|
|
176
|
-
`:"";return["You are a code review subagent. Review the uncommitted project changes below.\nUse only read-only tools (read, grep, find, ls, list_files, git_status, git_log).\nDo NOT edit, write, delete, or commit any files. Report findings only.\nDo NOT spawn nested task/subagent tools.\n",`Repository: ${t}`,"",o+"Changed files:",r||"(none)","\nInstructions:\n1. Inspect the changed files (and related context as needed).\n2. Report bugs, missing tests, style/convention issues, docs problems, and security risks.\n3. Structure the response as a numbered list of findings. For each finding include: severity (blocker/major/minor), file path, and a concrete fix suggestion.\n4. If there are no issues, reply with exactly: No issues found.\n5. Do not apply fixes yourself."].join("\n")}({cwd:v,entries:C,focus:w??void 0}),O=w?.trim()?`Code review: ${w.trim().slice(0,80)}`:`Code review (${R.length} file(s))`;u?.({content:[{type:"text",text:A("tools.codeReview.spawning",{model:S})}],details:{depth:x,model:S,reviewedFiles:R,cwd:v}});try{let t=e.spawn({parentRunId:j,prompt:M,description:O,model:S,subagentType:"general-purpose",allowedTools:[...g.mn],depth:x,signal:o,cwd:v,includeTaskTool:!1}),a=await t.promise,i=function(e){if(null==e)return"";if("string"==typeof e)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}(a.result),r={runId:t.runId,sessionKey:t.sessionKey,depth:x,success:a.success,findings:i,error:a.error,durationMs:a.durationMs,reviewedFiles:R,cwd:v,model:S};return a.success||console.error(`[code-review-tool] subagent failed runId=${t.runId}: ${a.error??"unknown"}`),await k("tools.codeReview.result",{path:v,count:String(R.length),success:a.success?"yes":"no"}),(0,c.Ao)(r)}catch(t){let e=t&&"object"==typeof t&&"message"in t?String(t.message):String(t);throw console.error(`[code-review-tool] error: ${e}`),Error(e)}}}}i()}catch(e){i(e)}})},3122(e,t,a){function i(e,t,a={}){let{required:r=!1,trim:o=!0,label:n=t,allowEmpty:s=!1,defaultValue:l}=a,d=e[t];if("string"!=typeof d){if(r)throw Error(`${n} required`);return void 0!==l?l:void 0}let c=o?d.trim():d;if(!c&&!s){if(r)throw Error(`${n} required`);return void 0!==l?l:void 0}return c}function r(e,t,a={}){let i,{required:o=!1,label:n=t,integer:s=!1,defaultValue:l}=a,d=e[t];if("number"==typeof d&&Number.isFinite(d))i=d;else if("string"==typeof d){let e=d.trim();if(e){let t=Number.parseFloat(e);Number.isFinite(t)&&(i=t)}}if(void 0===i){if(o)throw Error(`${n} required`);return void 0!==l?l:void 0}return s?Math.trunc(i):i}function o(e,t,a={}){let{required:i=!1,label:r=t,defaultValue:n}=a,s=e[t];if(null==s){if(i)throw Error(`${r} required`);return void 0!==n?n:void 0}if("boolean"==typeof s)return s;if("string"==typeof s){let e=s.trim().toLowerCase();if("true"===e||"1"===e||"yes"===e)return!0;if("false"===e||"0"===e||"no"===e)return!1}if("number"==typeof s)return 0!==s;if(i)throw Error(`${r} required`);return void 0!==n?n:void 0}function n(e){return{type:"text",text:e}}function s(e,t={}){return{content:[n(!0===t.compact?JSON.stringify(e):JSON.stringify(e,null,2))],details:e}}function l(e,t,a){let i=e??[];if(t&&t.length>0){let e=new Set(t.map(e=>String(e).toLowerCase()));i=i.filter(t=>e.has(String(t?.name??"").toLowerCase()))}let r=a??[];if(r.length>0){let e=new Set(r.map(e=>String(e).toLowerCase()));i=i.filter(t=>!e.has(String(t?.name??"").toLowerCase()))}return i}a.d(t,{Ao:()=>s,GE:()=>o,UZ:()=>l,fI:()=>n,h_:()=>i,jV:()=>r})},3722(e,t,a){a.a(e,async function(e,i){try{a.d(t,{k1:()=>w});var r=a(7598),o=a(6760),n=a(4204),s=a(3122),l=a(8359),d=a(1846),c=a(4071),u=e([n,d,l,c]);[n,d,l,c]=u.then?(await u)():u;let g="Schedules are picked up by `pithosai cron-daemon` (reload within ~60s). Ensure the daemon is running.",h=n.Type.Union(d.Fb.map(e=>n.Type.Literal(e)),{description:"reuse = stable taskId; new_each_run = fresh task id every fire."}),f=n.Type.Object({role:n.Type.String({description:"Agent role code (e.g. MKT, RD, PM)."}),lang:n.Type.String({description:"Locale for the scheduled run (e.g. en, zh)."}),input:n.Type.String({description:"Agent request body (instructions after title)."}),cronExpr:n.Type.String({description:"Standard 5-field cron expression (minute hour dom month dow)."}),title:n.Type.Optional(n.Type.String({description:"Request title; defaults to first line of input."})),projectPath:n.Type.Optional(n.Type.String({description:"Working directory for the run; defaults to process cwd."})),model:n.Type.Optional(n.Type.String({description:"Optional model key for the run."})),taskIdStrategy:n.Type.Optional(h),taskId:n.Type.Optional(n.Type.String({description:"Stable task id when taskIdStrategy is reuse."})),newSession:n.Type.Optional(n.Type.Boolean({description:"Start with a new session when the job fires."})),timeout:n.Type.Optional(n.Type.Number({description:"Max run time in seconds."})),enabled:n.Type.Optional(n.Type.Boolean({description:"When false, job is stored but not scheduled."}))}),k=n.Type.Object({enabledOnly:n.Type.Optional(n.Type.Boolean({description:"When true, return only enabled jobs."}))}),v=n.Type.Object({id:n.Type.String({description:"Cron task id to update."}),role:n.Type.Optional(n.Type.String()),lang:n.Type.Optional(n.Type.String()),title:n.Type.Optional(n.Type.String()),input:n.Type.Optional(n.Type.String()),cronExpr:n.Type.Optional(n.Type.String()),projectPath:n.Type.Optional(n.Type.String()),model:n.Type.Optional(n.Type.String()),taskIdStrategy:n.Type.Optional(h),taskId:n.Type.Optional(n.Type.String()),newSession:n.Type.Optional(n.Type.Boolean()),timeout:n.Type.Optional(n.Type.Number()),enabled:n.Type.Optional(n.Type.Boolean())}),b=n.Type.Object({id:n.Type.String({description:"Cron task id to delete."})});function p(e){return"new_each_run"===e?"new_each_run":"reuse"}async function m(e){let t=(0,s.h_)(e,"role",{required:!0,label:"role"}),a=(0,s.h_)(e,"lang",{required:!0,label:"lang"}),i=(0,s.h_)(e,"input",{required:!0,label:"input"}),n=(0,s.h_)(e,"cronExpr",{required:!0,label:"cronExpr"}),l=(0,d.AB)(n);if(!1===l.ok)return{ok:!1,error:l.error};let c=(0,s.h_)(e,"title",{label:"title"})??((String(i??"").split(/\r?\n/)[0]?.trim()??"")||"Scheduled task"),u=(0,o.resolve)((0,s.h_)(e,"projectPath",{label:"projectPath"})??process.cwd()),m=p((0,s.h_)(e,"taskIdStrategy",{label:"taskIdStrategy"})),g=(0,s.h_)(e,"taskId",{label:"taskId"}),h="reuse"===m?g??(0,r.randomUUID)():g??null,f=+(!0===(0,s.GE)(e,"newSession",{label:"newSession"})),k=(0,s.jV)(e,"timeout",{label:"timeout",integer:!0}),v=+!!(0,s.GE)(e,"enabled",{label:"enabled",defaultValue:!0}),b=(0,s.h_)(e,"model",{label:"model"})??null,w=1===v?(0,d.FG)(n):null;return{ok:!0,row:{id:(0,r.randomUUID)(),role:t,lang:a,title:c,input:i,cronExpr:n.trim(),projectPath:u,model:b,enabled:v,taskIdStrategy:m,taskId:h,newSession:f,timeout:k??null,overlapPolicy:"skip",nextRunAt:w}}}let w=[{name:"create_cron_task",label:"Create Cron Task",description:"Create a recurring scheduled agent job stored in pithosai_cron_task. Requires `pithosai cron-daemon` to be running for schedules to fire.",parameters:f,execute:async(e,t)=>{try{let e=await m(t);if(!1===e.ok)return(0,s.Ao)({ok:!1,error:e.error});let a=await (0,l.Lf)(),i=await (0,l.jx)(a,e.row);return(0,s.Ao)({ok:!0,cronTask:i,reminder:g})}catch(e){return console.error("[create_cron_task] failed:",e),(0,c.CN)(`[create_cron_task] failed: ${String(e)}`),(0,s.Ao)({ok:!1,error:String(e)})}}},{name:"list_cron_tasks",label:"List Cron Tasks",description:"List scheduled cron tasks from pithosai_cron_task.",parameters:k,execute:async(e,t)=>{try{let e=!0===(0,s.GE)(t,"enabledOnly",{label:"enabledOnly"}),a=await (0,l.Lf)(),i=await (0,l.V0)(a,{enabledOnly:e});return(0,s.Ao)({ok:!0,cronTasks:i,count:i.length})}catch(e){return console.error("[list_cron_tasks] failed:",e),(0,c.CN)(`[list_cron_tasks] failed: ${String(e)}`),(0,s.Ao)({ok:!1,error:String(e)})}}},{name:"update_cron_task",label:"Update Cron Task",description:"Update a scheduled cron task by id. Changes are picked up on the next cron-daemon reload.",parameters:v,execute:async(e,t)=>{try{let e=(0,s.h_)(t,"id",{required:!0,label:"id"}),a=await (0,l.Lf)(),i=await (0,l.yD)(a,e);if(!i)return(0,s.Ao)({ok:!1,error:`cron task not found: ${e}`});let r={};for(let e of["role","lang","title","input","cronExpr","projectPath","model","taskId"]){let a=(0,s.h_)(t,e,{label:e});void 0!==a&&(r[e]="projectPath"===e?(0,o.resolve)(a):a)}if(void 0!==r.cronExpr){let e=(0,d.AB)(String(r.cronExpr));if(!1===e.ok)return(0,s.Ao)({ok:!1,error:e.error});r.cronExpr=String(r.cronExpr).trim()}let n=(0,s.h_)(t,"taskIdStrategy",{label:"taskIdStrategy"});void 0!==n&&(r.taskIdStrategy=p(n));let c=(0,s.GE)(t,"newSession",{label:"newSession"});void 0!==c&&(r.newSession=+!!c);let u=(0,s.GE)(t,"enabled",{label:"enabled"});void 0!==u&&(r.enabled=+!!u);let m=(0,s.jV)(t,"timeout",{label:"timeout",integer:!0});void 0!==m&&(r.timeout=m);let h="string"==typeof r.cronExpr?r.cronExpr:i.cronExpr,f=void 0!==r.enabled?r.enabled:i.enabled;1===f?r.nextRunAt=(0,d.FG)(h):!1===u&&(r.nextRunAt=null);let k=await (0,l.BU)(a,e,r);return(0,s.Ao)({ok:!0,cronTask:k,reminder:g})}catch(e){return console.error("[update_cron_task] failed:",e),(0,c.CN)(`[update_cron_task] failed: ${String(e)}`),(0,s.Ao)({ok:!1,error:String(e)})}}},{name:"delete_cron_task",label:"Delete Cron Task",description:"Delete a scheduled cron task by id.",parameters:b,execute:async(e,t)=>{try{let e=(0,s.h_)(t,"id",{required:!0,label:"id"}),a=await (0,l.Lf)();if(!await (0,l.D2)(a,e))return(0,s.Ao)({ok:!1,error:`cron task not found: ${e}`});return(0,s.Ao)({ok:!0,id:e,reminder:g})}catch(e){return console.error("[delete_cron_task] failed:",e),(0,c.CN)(`[delete_cron_task] failed: ${String(e)}`),(0,s.Ao)({ok:!1,error:String(e)})}}}];i()}catch(e){i(e)}})},7536(e,t,a){a.d(t,{Pc:()=>c,Ui:()=>p,WO:()=>d,ZU:()=>n,gm:()=>l});var i=a(1455),r=a(6760),o=a(3024);async function n(e,t={}){let a=(0,r.join)(e,".pithosai","custom-tools"),l=t.importTool;if(!(0,o.existsSync)(a))return[];let d=[];try{for(let e of(await (0,i.readdir)(a)).filter(e=>e.endsWith(".js")))try{let t=await s((0,r.join)(a,e),l);t&&d.push(t)}catch(t){console.warn(`Failed to load custom tool from ${e}:`,t.message)}}catch(e){console.warn("Failed to read custom tools directory:",e.message)}return d}async function s(e,t){try{let a,i=`file://${e}`,r=t?await t(i):await import(i),o=Object.keys(r).find(e=>e.startsWith("create")&&e.endsWith("Tool"));if(!o)throw Error(`No tool creation function found in ${e}`);let n=r[o];if("function"!=typeof n)throw Error(`${o} is not a function in ${e}`);let s=n();if(!s.name||!s.execute||"function"!=typeof s.execute)throw Error(`Invalid tool structure in ${e}`);return a=s.parameters,null!=a&&"object"==typeof a&&"object"===a.type||(s.parameters={type:"object",properties:null!=a&&"object"==typeof a&&null!=a.properties?a.properties:null==a||"object"!=typeof a||"type"in a?{}:a}),s}catch(t){return console.warn(`Error loading custom tool from ${e}:`,t.message),null}}async function l(e){let t=(0,r.join)(e,".pithosai","custom-tools");if(!(0,o.existsSync)(t))return[];let a=[];try{for(let e of(await (0,i.readdir)(t)).filter(e=>e.endsWith(".json")))try{let n=(0,r.join)(t,e),s=await (0,i.readFile)(n,"utf-8"),l=JSON.parse(s),d=e.replace(".json",".js"),c=(0,r.join)(t,d);(0,o.existsSync)(c)&&a.push({name:l.name,description:l.description||"No description",metadata:l,filePath:c})}catch(t){console.warn(`Failed to load metadata from ${e}:`,t.message)}}catch(e){console.warn("Failed to read custom tools metadata:",e.message)}return a}async function d(e,t){let i=t.endsWith("_tool")?t:`${t}_tool`,n=(0,r.join)(e,".pithosai","custom-tools"),s=(0,r.join)(n,`${i}.js`),l=(0,r.join)(n,`${i}.json`);try{let e=await Promise.resolve().then(a.t.bind(a,1943,19));return(0,o.existsSync)(s)&&await e.unlink(s),(0,o.existsSync)(l)&&await e.unlink(l),!0}catch(e){return console.warn(`Failed to remove custom tool ${t}:`,e.message),!1}}async function c(e,t,i){let n=t.endsWith("_tool")?t:`${t}_tool`,s=(0,r.join)(e,".pithosai","custom-tools"),l=(0,r.join)(s,`${n}.js`),d=(0,r.join)(s,`${n}.js.disabled`),c=(0,r.join)(s,`${n}.json`),u=(0,r.join)(s,`${n}.json.disabled`);try{let e=await Promise.resolve().then(a.t.bind(a,1943,19));return i?((0,o.existsSync)(d)&&await e.rename(d,l),(0,o.existsSync)(u)&&await e.rename(u,c)):((0,o.existsSync)(l)&&await e.rename(l,d),(0,o.existsSync)(c)&&await e.rename(c,u)),!0}catch(e){return console.warn(`Failed to ${i?"enable":"disable"} custom tool ${t}:`,e.message),!1}}async function u(e,t){let a=t.endsWith("_tool")?t:`${t}_tool`,i=(0,r.join)(e,".pithosai","custom-tools"),n=(0,r.join)(i,`${a}.js`);return(0,o.existsSync)(n)}async function p(e){let t=await l(e),a=[];for(let i of t){let t=await u(e,i.name);a.push({name:i.name,enabled:t,lastUsed:i.metadata.usageStats?.lastExecuted,usageCount:i.metadata.usageStats?.totalExecutions||0,successRate:i.metadata.usageStats?.successRate,avgExecutionTime:i.metadata.usageStats?.avgExecutionTime})}return a}},1305(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Df:()=>y,Md:()=>b,XN:()=>k,ZM:()=>w,jI:()=>v});var r=a(6760),o=a(3024),n=a(8161),s=a(4204),l=a(3122),d=a(4071),c=a(8362),u=e([s,c,d]);function p(e,t){let a=e?.roles?.[t];return((0,d.JX)("getRoleEmailConfig: r:",a,"role:",t,"settings:",e),a&&"object"==typeof a&&"string"==typeof a.email&&a.email.trim()&&"string"==typeof a.password)?a:null}function m(e){let t=e.smtp?.host;if(!t||"string"!=typeof t||!t.trim())return null;let a=e.smtp?.port??587;return{host:t.trim(),port:Number(a)||587,secure:465===a}}function g(e){let t=e.imap,a=t?.host;if(!a||"string"!=typeof a||!a.trim())return null;let i=t?.port??993;return{host:a.trim(),port:Number(i)||993,user:e.email.trim(),password:e.password}}[s,c,d]=u.then?(await u)():u;let S="Configure this role in the email_roles table in the pithosai SQLite database (loaded via readSettings).",P={noConfig:`No email config for this role. ${S}`,imapMissing:`IMAP not configured for this role. ${S} Set imap.host for IMAP.`,smtpMissing:`SMTP not configured for this role. ${S} Set smtp.host for SMTP.`},T=s.Type.Object({limit:s.Type.Optional(s.Type.Number({description:"Maximum number of emails to return (default 10).",minimum:1,maximum:50})),mailbox:s.Type.Optional(s.Type.String({description:"IMAP mailbox name (default INBOX)."}))}),A=s.Type.Object({to:s.Type.String({description:"Recipient email address(es), comma-separated."}),subject:s.Type.String({description:"Email subject."}),text:s.Type.Optional(s.Type.String({description:"Plain text body."})),html:s.Type.Optional(s.Type.String({description:"HTML body (optional)."})),attachments:s.Type.Optional(s.Type.Array(s.Type.Object({filename:s.Type.String({description:"Attachment filename (e.g. document.pdf)."}),filePath:s.Type.String({description:"Absolute or project-relative path to the file on disk. Use only filePath; inline base64 content is not supported."})}),{description:"Optional attachments. Each item must have filename and filePath only. Do not use inline base64 content; the file must exist on disk at filePath."}))});async function h(e,t){let i=g(e);if(!i)return{emails:[],error:P.imapMissing};let n=await a.e("613").then(a.bind(a,2220)),s=n.default??n,l=(await a.e("236").then(a.bind(a,7351))).simpleParser,d=Math.min(50,Math.max(1,t.limit||10)),c=(t.mailbox||"INBOX").trim()||"INBOX",u="number"==typeof t.maxTextLength&&t.maxTextLength>0?t.maxTextLength:2e3,p="number"==typeof t.maxAttachmentInlineSize&&t.maxAttachmentInlineSize>=0?t.maxAttachmentInlineSize:2097152,m=t.attachmentsDir??(t.projectCwd?(0,r.join)(t.projectCwd,".pithosai","attachments"):void 0);return new Promise(e=>{let t=new s({user:i.user,password:i.password,host:i.host,port:i.port,tls:!0,tlsOptions:{rejectUnauthorized:!1}}),a=[],n=a=>{t.end(),e({emails:[],error:a?.message||String(a)})};t.once("error",n),t.once("ready",()=>{t.openBox(c,!1,(i,s)=>{if(i)return void n(i);let c=Math.min(s.messages.total,d);if(0===c){t.end(),e({emails:[]});return}let g=`${Math.max(1,s.messages.total-d+1)}:${s.messages.total}`,h=t.seq.fetch(g,{bodies:"",struct:!0}),f=0,k=!1,v=()=>{f>=c&&!k&&(k=!0,t.end(),e({emails:a.reverse()}))};h.on("message",e=>{e.on("body",e=>{l(e,(e,t)=>{if(e){f++,v();return}let i=t.text||t.textAsText||"",n=Array.isArray(t.attachments)?t.attachments.map((e,t)=>(function(e,t,a,i=0){let n=e.filename||e.contentType?.split("/")[0]||"attachment",s=e.contentType||"application/octet-stream",l=e.content,d=l?l.length:e.size??0;if(l&&d>102400&&a)try{(0,o.mkdirSync)(a,{recursive:!0});let e=`${i}_${(n.replace(/^.*[/\\]/,"").replace(/\0/g,"")||"attachment").replace(/[<>:"|?*\s]+/g,"_").slice(0,200)}`,t=(0,r.join)(a,e);return(0,o.writeFileSync)(t,l,{flag:"w"}),{filename:n,contentType:s,filePath:t,size:d}}catch{return{filename:n,contentType:s,size:d}}let c={filename:n,contentType:s,size:d};return l&&d>0&&d<=t&&(c.content=l.toString("base64")),c})(e,p,m,t)):[];a.push({from:t.from?.text||"",to:t.to?.text||"",subject:t.subject||"",date:t.date?new Date(t.date).toISOString():"",text:i.slice(0,u),...n.length>0?{attachments:n}:{}}),f++,v()})})}),h.once("error",n)})}),t.connect()})}async function f(e,t){let i,s=m(e);if(!s)return{success:!1,error:P.smtpMissing};let l=(await a.e("220").then(a.bind(a,1663))).default.createTransport({host:s.host,port:s.port,secure:s.secure,auth:{user:e.email.trim(),pass:e.password}}),d=t.to.trim(),c=t.text?.trim(),u=t.html?.trim();if(!c&&!u)return{success:!1,error:"Either text or html body is required."};try{i=function(e,t){if(!Array.isArray(e))return[];for(let t of e){if(!t||"object"!=typeof t)continue;let e=void 0!==t.content&&null!==t.content&&String(t.content).length>0,a="string"==typeof t.filePath&&t.filePath.trim().length>0;if(e&&!a)throw Error("Attachments must use filePath only; inline base64 content is not supported. Save the file to disk and pass its path in filePath.")}let a=[];for(let i of e){if(!i||"string"!=typeof i.filename||"string"!=typeof i.filePath)continue;let e=i.filePath.trim();if(!e)continue;let s=i.filename.trim()||"attachment",{path:l}=function(e,t){let a=t||process.cwd(),i=(0,r.resolve)(a,e.trim());if(!(0,o.existsSync)(i))throw Error(`Attachment file not found: ${i}`);let s=(0,o.statSync)(i);if(!s.isFile())throw Error(`Attachment path is not a file: ${i}`);let l=(0,n.homedir)(),d=i.startsWith(process.cwd()),c=l&&i.startsWith(l);if(!d&&!c)throw Error(`Attachment path must be under project or home directory: ${i}`);if(s.size>0x1900000)throw Error(`Attachment file too large (${s.size} bytes, max 26214400): ${i}`);return{path:i,size:s.size}}(e,t);a.push({filename:s,content:(0,o.readFileSync)(l)})}return a}(t.attachments,t.projectCwd)}catch(e){return{success:!1,error:e?.message||String(e)}}try{let a=await l.sendMail({from:e.email.trim(),to:d,subject:t.subject.trim(),text:c||void 0,html:u||void 0,attachments:i.length>0?i:void 0});return{success:!0,messageId:a.messageId}}catch(e){return{success:!1,error:e?.message||String(e)}}}function k(e,t){let a=p(e,t);return a&&g(a)?{label:"Read Email",name:"read_email",description:"Read recent emails from the inbox for the current role. Uses IMAP config from settings.roles (email_roles table via readSettings).",parameters:T,execute:async(e,t)=>{let i=t&&"object"==typeof t&&!Array.isArray(t)?t:{},r=(0,l.jV)(i,"limit",{integer:!0}),o=(0,l.h_)(i,"mailbox"),n=await h(a,{limit:r??10,mailbox:o??"INBOX"});return(0,l.Ao)(n)}}:null}function v(e,t){let a=p(e,t);return a&&m(a)?{label:"Send Email",name:"send_email",description:"Send an email using the current role's SMTP account from settings.roles (email_roles table via readSettings). Call this tool once per email; do not invoke it again for the same message after a successful result. For attachments, use only filePath (path to a file on disk); inline base64 content is not supported.",parameters:A,execute:async(e,t)=>{let i=t&&"object"==typeof t&&!Array.isArray(t)?t:{},r=(0,l.h_)(i,"to",{required:!0}),o=(0,l.h_)(i,"subject",{required:!0}),n=(0,l.h_)(i,"text"),s=(0,l.h_)(i,"html"),d=Array.isArray(i.attachments)?i.attachments:void 0;if(!r)throw Error("to required");if(!o)throw Error("subject required");let c=await f(a,{to:r,subject:o,text:n,html:s,attachments:d,projectCwd:process.cwd()});return(0,l.Ao)(c)}}:null}async function b(e,t,a={}){let i=p(e,t);return i?h(i,{limit:a.limit??20,mailbox:a.mailbox??"INBOX",maxTextLength:a.maxTextLength??5e4,maxAttachmentInlineSize:a.maxAttachmentInlineSize,projectCwd:a.projectCwd,attachmentsDir:a.attachmentsDir}):{emails:[],error:P.noConfig}}async function w(e,t,a){let i=p(e,t);return i?f(i,a):{success:!1,error:P.noConfig}}async function y(e,t,i,r={}){let o=p(e,t),n={close:()=>{}};if(!o)return n;let s=g(o);if(!s)return n;let l=r.lang??(0,c.ao)(),u=(0,c.lW)(l),m=await a.e("613").then(a.bind(a,2220)),h=m.default??m,f=!1,k=null,v=null,b=!1;return!function e(){f||(b=!1,(k=new h({user:s.user,password:s.password,host:s.host,port:s.port,tls:!0,tlsOptions:{rejectUnauthorized:!1},keepalive:!0})).once("error",e=>{if((0,d.vV)(u("heartbeat.imapError",{message:e?.message||e})),k)try{k.end()}catch(e){}}),k.once("end",()=>{k=null,f||b||(b=!0,(0,d.vV)(u("heartbeat.imapDisconnectedReconnect",{ms:String(5e3)})),setTimeout(()=>{e()},5e3))}),k.on("close",()=>{}),k.once("ready",()=>{f||k.openBox("INBOX",!1,e=>{if(e){if((0,d.vV)(u("heartbeat.imapOpenBoxError",{message:e?.message||e})),k)try{k.end()}catch(e){}return}f||(k.on("mail",e=>{Promise.resolve(i(e)).catch(e=>(0,d.vV)(u("heartbeat.onNewMailError",{message:e?.message||e})))}),v||(v=setInterval(()=>{if(!f&&k&&"authenticated"===k.state)try{"function"==typeof k._client?.send?k._client.send("NOOP"):"function"==typeof k._enqueue&&k._enqueue("NOOP",!0)}catch(e){}},174e4)))})}),k.connect())}(),{close(){if(f=!0,v&&(clearInterval(v),v=null),k){try{k.removeAllListeners("close"),k.end()}catch(e){}k=null}}}}i()}catch(e){i(e)}})},3772(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Z:()=>k,w:()=>f});var r=a(4204),o=a(4071),n=a(7420),s=a(8038),l=a(3122),d=a(178),c=e([d,r,s,n,o]);[d,r,s,n,o]=c.then?(await c)():c;let g=Math.floor(d.yg/2);function u(e,t=g,a=20,i=20){if("string"!=typeof e)return{text:"",truncated:!1};if(e.length<=t)return{text:e,truncated:!1};let r=e.split("\n");if(r.length<=a+i)return{text:e.slice(0,t)+"\n[Content truncated for request size limit.]",truncated:!0};let o=r.slice(0,a).join("\n"),n=r.slice(-i).join("\n"),s=r.length-a-i;return{text:o+"\n[... "+s+" lines omitted ...]\n"+n,truncated:!0}}let h=r.Type.Object({command:r.Type.String({description:"Executable name or path (e.g. 'node', 'npm', '/usr/bin/env')."}),args:r.Type.Optional(r.Type.Array(r.Type.String(),{description:"Arguments to pass to the command. Omit or empty for no arguments."})),timeoutMs:r.Type.Optional(r.Type.Number({description:"Timeout in milliseconds. Default 60000.",minimum:1e3})),cwd:r.Type.Optional(r.Type.String({description:"Working directory for the command. Omit for process cwd."})),input:r.Type.Optional(r.Type.String({description:"Stdin content to pipe to the command."})),env:r.Type.Optional(r.Type.Record(r.Type.String(),r.Type.String(),{description:"Extra environment variables (merged with process.env)."}))});function p(e){let t={timeoutMs:"number"==typeof e.timeoutMs&&e.timeoutMs>=1e3?e.timeoutMs:6e4};if(null!=e.cwd&&String(e.cwd).trim()&&(t.cwd=String(e.cwd).trim()),void 0!==e.input&&(t.input="string"==typeof e.input?e.input:String(e.input)),null!=e.env&&"object"==typeof e.env&&!Array.isArray(e.env))for(let[a,i]of(t.env={},Object.entries(e.env)))null!=a&&"string"==typeof i&&(t.env[a]=i);return t}function m(e){let t=u(e.stdout??""),a=u(e.stderr??""),i={ok:0===e.code,stdout:t.text,stderr:a.text,code:e.code,signal:e.signal??null,killed:e.killed};return t.truncated&&(i.stdoutTruncated=!0),a.truncated&&(i.stderrTruncated=!0),i}let f={name:"exec",label:"Exec",description:"Run a shell command with a timeout. Command runs immediately (not queued). Use for one-off commands. Provide executable and optional args, cwd, stdin, env.",parameters:h,execute:async(e,t,a,i)=>{let r=null!=t.command?String(t.command).trim():"";if(!r)return(0,l.Ao)({ok:!1,error:"command is required"});let s=Array.isArray(t.args)?t.args.map(e=>String(e)):[],d=[r,...s],c=p(t);(0,o.JX)(JSON.stringify({tool:"exec",toolCallId:e,command:d,timeoutMs:c.timeoutMs}));try{let e=await (0,n._)(d,c),t=m(e);return e.stderr?.trim()&&(0,o.JX)(`exec stderr: ${e.stderr.trim()}`),(0,l.Ao)(t)}catch(e){return(0,o.CN)(`exec failed: ${r} ${s.join(" ")}: ${String(e)}`),(0,l.Ao)({ok:!1,error:String(e?.message??e),stdout:"",stderr:""})}}},k={name:"queue_exec",label:"Queue Exec",description:"Run a shell command through the main command queue. Same parameters as exec, but execution is serialized with other queued commands. Prefer this when running multiple commands or when the agent uses other process tools.",parameters:h,execute:async(e,t,a,i)=>{let r=null!=t.command?String(t.command).trim():"";if(!r)return(0,l.Ao)({ok:!1,error:"command is required"});let d=Array.isArray(t.args)?t.args.map(e=>String(e)):[],c=[r,...d],u=p(t);(0,o.JX)(JSON.stringify({tool:"queue_exec",toolCallId:e,command:c,timeoutMs:u.timeoutMs}));try{let e=await (0,s.Wf)(()=>(0,n._)(c,u)),t=m(e);return e.stderr?.trim()&&(0,o.JX)(`queue_exec stderr: ${e.stderr.trim()}`),(0,l.Ao)(t)}catch(e){return(0,o.CN)(`queue_exec failed: ${r} ${d.join(" ")}: ${String(e)}`),(0,l.Ao)({ok:!1,error:String(e?.message??e),stdout:"",stderr:""})}}};i()}catch(e){i(e)}})},5939(e,t,a){a.a(e,async function(e,i){try{a.d(t,{G:()=>c,MH:()=>d,_z:()=>u});var r=a(1421),o=a(8161),n=a(7975),s=a(4071),l=e([s]);s=(l.then?(await l)():l)[0];let p=(0,n.promisify)(r.execFile),m=null;async function d(e){let t="number"==typeof e.timeoutMs&&e.timeoutMs>0?e.timeoutMs:15e3,{stdout:a,stderr:i}=await p("git",e.args,{encoding:"utf8",timeout:t,cwd:e.dir,maxBuffer:0x2000000});return{stdout:String(a??""),stderr:String(i??"")}}async function c(e){try{let{stdout:t}=await d(e);return t}catch(t){return(0,s.JX)(`[git-cli] git ${e.args.join(" ")} failed in ${e.dir}: ${String(t?.message??t)}`),null}}async function u(){if(null!=m)return m;let e=await c({dir:(0,o.tmpdir)(),args:["--version"],timeoutMs:3e3});return m="string"==typeof e&&/\bgit version\b/i.test(e)}i()}catch(e){i(e)}})},5227(e,t,a){a.a(e,async function(e,i){try{a.d(t,{G2:()=>L,Iv:()=>u,PC:()=>S,aT:()=>w,fG:()=>p,vx:()=>m,xF:()=>R});var r=a(3024),o=a(6760),n=a(9155),s=a(7163),l=a(5939),d=a(9898),c=e([d,s,n,l]);async function u(e){let t=(0,o.resolve)(e);try{let e=await n.default.findRoot({fs:r,filepath:t});return e?(0,o.resolve)(e):null}catch(e){if(console.debug(`[git-operations] resolveGitRepositoryDir: no git root for ${t}: ${String(e?.message??e)}`),await (0,s.y)(t))return t;return null}}async function p(e){let t=(0,o.resolve)(e),a=await (0,d.eY)(t);if(!a)return{isRepository:!1,cwd:t,entries:[]};let i=[...a.entries.values()].map(e=>({path:e.path,status:`${e.indexStatus}${e.workTreeStatus}`,change:(0,d.bm)(e)}));return{isRepository:!0,cwd:t,entries:i}}async function m(e){let t=(0,o.resolve)(e.dir);return await (0,l._z)()?g({dir:t,filepaths:e.filepaths}):h({dir:t,filepaths:e.filepaths})}async function g(e){let{dir:t,filepaths:a}=e,i=[],r=[];for(let e of a){let a=String(e??"").trim().replace(/\\/g,"/");if(a)try{if(await f(t,a)){r.push(a);continue}await (0,l.MH)({dir:t,args:["add","--",a],timeoutMs:15e3}),i.push(a)}catch(e){console.error(`[git-operations] stage failed (${a}): ${String(e?.message??e)}`),r.push(a)}}return{staged:i,skipped:r}}async function h(e){let{dir:t,filepaths:a}=e,i=[],o=[];for(let e of a){let a=String(e??"").trim().replace(/\\/g,"/");if(a)try{if(await n.default.isIgnored({fs:r,dir:t,filepath:a})){o.push(a);continue}await n.default.add({fs:r,dir:t,filepath:a}),i.push(a)}catch(e){console.error(`[git-operations] stage failed (${a}): ${String(e?.message??e)}`),o.push(a)}}return{staged:i,skipped:o}}async function f(e,t){try{return await (0,l.MH)({dir:e,args:["check-ignore","-q","--",t],timeoutMs:5e3}),!0}catch(t){let e="number"==typeof t?.code?t.code:null;if(1===e)return!1;throw t}}async function k(e){let t=(0,o.resolve)(e);return await (0,l._z)()?v(t):b(t)}async function v(e){await (0,l.MH)({dir:e,args:["add","-A"],timeoutMs:3e4});let t=await (0,l.G)({dir:e,args:["diff","--cached","--name-only","-z"],timeoutMs:15e3});if(null==t){let t=`[git-operations] git diff --cached --name-only failed after git add -A in ${e}`;throw console.error(t),Error(t)}return""===t?[]:t.split("\0").map(e=>e.trim()).filter(Boolean)}async function b(e){let t=[];for(let a of(await n.default.statusMatrix({fs:r,dir:e}))){let[i,o,s,l]=a;if((0!==s||0!==l)&&(o!==s||l!==s))try{await n.default.add({fs:r,dir:e,filepath:i}),t.push(i)}catch(e){console.error(`[git-operations] stage matrix path failed (${i}): ${String(e?.message??e)}`)}}return t}async function w(e){var t;let a,i=(0,o.resolve)(e.dir),d=(t=e.message,(a=String(t??"").split(/\r?\n/).map(e=>e.trim()).find(e=>e.length>0))?a.length>72?`${a.slice(0,69)}...`:a:"Update project files"),c=[];if(!0===e.stageAll?c=await k(i):Array.isArray(e.filepaths)&&e.filepaths.length>0&&(c=(await m({dir:i,filepaths:e.filepaths})).staged),0===c.length)return{commitMessage:d,staged:c,commitOid:null};if(await (0,l._z)()){await (0,l.MH)({dir:i,args:["-c",`user.name=${s.tA.name}`,"-c",`user.email=${s.tA.email}`,"-c","commit.gpgsign=false","commit","-m",d],timeoutMs:3e4});let e=String(await (0,l.G)({dir:i,args:["rev-parse","HEAD"],timeoutMs:5e3})??"").trim();return{commitMessage:d,staged:c,commitOid:e||null}}let u=await n.default.commit({fs:r,dir:i,message:d,author:s.tA});return{commitMessage:d,staged:c,commitOid:u}}function y(e){let t=String(e??"").split("\x1e").map(e=>e.replace(/^\n/,"")).filter(e=>e.length>0),a=[];for(let e of t){let t=e.split("\0");if(t.length<4)continue;let[i,r,o,...n]=t;i&&a.push({oid:i.trim(),author:String(r??"").trim(),when:Number(o)||0,message:n.join("\0").trim()})}return a}async function S(e){let t=(0,o.resolve)(e.dir),a="number"==typeof e.depth&&e.depth>0?e.depth:10;if(await (0,l._z)()){let e=await (0,l.G)({dir:t,args:["log","-n",String(a),"--format=%H%x00%an%x00%at%x00%B%x1e"],timeoutMs:15e3});if(null!=e)return y(e)}return(await n.default.log({fs:r,dir:t,depth:a})).map(e=>({oid:e.oid,message:String(e.commit.message??"").trim(),author:e.commit.author.name,when:e.commit.author.timestamp}))}async function P(e){if(await (0,l._z)()){let t=String(await (0,l.G)({dir:e,args:["symbolic-ref","HEAD"],timeoutMs:3e3})??"").trim();return t&&x(t.replace(/^refs\/heads\//,""))?t:"HEAD"}let t=await n.default.currentBranch({fs:r,dir:e,fullname:!0});return"string"==typeof t&&""!==t.trim()?t:"HEAD"}async function T(e){if(await (0,l._z)())return void await (0,l.MH)({dir:e,args:["reset","--mixed","HEAD"],timeoutMs:3e4});let t=await n.default.statusMatrix({fs:r,dir:e}),a=[];for(let i of t){let t=i[0];try{await n.default.resetIndex({fs:r,dir:e,filepath:t})}catch(e){console.error(`[git-operations] resetIndex failed (${t}): ${String(e?.message??e)}`),a.push(t)}}if(a.length>0)throw Error(`Failed to reset index for ${a.length} path(s): ${a.slice(0,5).join(", ")}`)}async function A(e){let{stdout:t}=await (0,l.MH)({dir:e.dir,args:["rev-parse","--verify",`${e.spec}^{commit}`],timeoutMs:5e3});return t.trim()}async function I(e){return((0,o.resolve)(e.dir),await (0,l._z)())?E(e):C(e)}async function E(e){let t,a=(0,o.resolve)(e.dir);try{t=await A({dir:a,spec:"HEAD"})}catch(e){throw console.error(`[git-operations] cannot resolve HEAD for rollback: ${String(e?.message??e)}`),e}let i="string"==typeof e.commitOid&&""!==e.commitOid.trim()?e.commitOid.trim():"";if(i){let e;try{e=await A({dir:a,spec:i})}catch(e){throw console.error(`[git-operations] invalid rollback commitOid (${i}): ${String(e?.message??e)}`),Error(`Unknown commitOid for rollback: ${i}`)}if(e===t)throw Error("commitOid already points at HEAD; nothing to roll back");try{await (0,l.MH)({dir:a,args:["merge-base","--is-ancestor",e,"HEAD"],timeoutMs:5e3})}catch(e){throw console.error(`[git-operations] commitOid is not an ancestor of HEAD (${i}): ${String(e?.message??e)}`),Error(`commitOid ${i} is not an ancestor of HEAD; only local history rollbacks are supported`)}let r=await (0,l.G)({dir:a,args:["log","--format=%H%x00%an%x00%at%x00%B%x1e",`${e}..HEAD`],timeoutMs:15e3}),o=y(r??"").map(e=>({oid:e.oid,message:e.message}));return{previousOid:t,targetOid:e,rolledBackCommits:o}}let r=e.steps,n=await (0,l.G)({dir:a,args:["log","-n",String(r+1),"--format=%H%x00%an%x00%at%x00%B%x1e"],timeoutMs:15e3}),s=y(n??"");if(s.length<=r)throw Error(`Cannot rollback ${r} commit(s): only ${s.length} commit(s) available (refusing to remove the root commit)`);let d=s[r].oid,c=s.slice(0,r).map(e=>({oid:e.oid,message:e.message}));return{previousOid:t,targetOid:d,rolledBackCommits:c}}async function C(e){let t=(0,o.resolve)(e.dir),a=await n.default.resolveRef({fs:r,dir:t,ref:"HEAD"}),i="string"==typeof e.commitOid&&""!==e.commitOid.trim()?e.commitOid.trim():"";if(i){let e;try{e=await n.default.resolveRef({fs:r,dir:t,ref:i})}catch(e){throw console.error(`[git-operations] invalid rollback commitOid (${i}): ${String(e?.message??e)}`),Error(`Unknown commitOid for rollback: ${i}`)}if(e===a)throw Error("commitOid already points at HEAD; nothing to roll back");let o=await n.default.log({fs:r,dir:t}),s=o.findIndex(t=>t.oid===e);if(s<0)throw Error(`commitOid ${i} is not an ancestor of HEAD; only local history rollbacks are supported`);if(0===s)throw Error("commitOid already points at HEAD; nothing to roll back");let l=o.slice(0,s).map(e=>({oid:e.oid,message:String(e.commit.message??"").trim()}));return{previousOid:a,targetOid:e,rolledBackCommits:l}}let s=e.steps,l=await n.default.log({fs:r,dir:t,depth:s+1});if(l.length<=s)throw Error(`Cannot rollback ${s} commit(s): only ${l.length} commit(s) available (refusing to remove the root commit)`);let d=l[s].oid,c=l.slice(0,s).map(e=>({oid:e.oid,message:String(e.commit.message??"").trim()}));return{previousOid:a,targetOid:d,rolledBackCommits:c}}async function R(e){let t=(0,o.resolve)(e.dir),a="string"==typeof e.mode?e.mode.trim().toLowerCase():"soft",i="mixed"===a||"hard"===a||"soft"===a?a:"soft";""!==a&&a!==i&&console.debug(`[git-operations] unknown rollback mode "${a}", using soft`);let s="string"==typeof e.commitOid&&""!==e.commitOid.trim(),d="number"==typeof e.steps&&Number.isFinite(e.steps)?Math.trunc(e.steps):1;if(!s&&d<1)throw Error("steps must be >= 1");s&&d<1&&(d=1);let{previousOid:c,targetOid:u,rolledBackCommits:p}=await I({dir:t,steps:d,commitOid:e.commitOid});d=p.length;let m=await P(t);if(console.debug(`[git-operations] rollback ${i} ${c.slice(0,7)} -> ${u.slice(0,7)} (${m}, steps=${d})`),await (0,l._z)())try{await (0,l.MH)({dir:t,args:["reset",`--${i}`,u],timeoutMs:3e4})}catch(e){console.error(`[git-operations] rollback ${i} failed; restoring ${c.slice(0,7)}: ${String(e?.message??e)}`);try{await (0,l.MH)({dir:t,args:["reset",`--${i}`,c],timeoutMs:3e4})}catch(e){console.error(`[git-operations] failed to restore previous HEAD after rollback error: ${String(e?.message??e)}`)}throw e}else{await n.default.writeRef({fs:r,dir:t,ref:m,value:u,force:!0});try{"mixed"===i?await T(t):"hard"===i&&await n.default.checkout({fs:r,dir:t,ref:"HEAD",force:!0})}catch(e){console.error(`[git-operations] rollback ${i} cleanup failed; restoring ${c.slice(0,7)}: ${String(e?.message??e)}`);try{await n.default.writeRef({fs:r,dir:t,ref:m,value:c,force:!0})}catch(e){console.error(`[git-operations] failed to restore previous HEAD after rollback error: ${String(e?.message??e)}`)}throw e}}return{mode:i,steps:d,branch:m,previousOid:c,targetOid:u,rolledBackCommits:p}}async function L(e){let t=(0,o.resolve)(e),a=null;try{let e=await n.default.findRoot({fs:r,filepath:t});a=e?(0,o.resolve)(e):null}catch{a=null}if(!a)return"";let i=await j(a);if(x(i))return i.trim();try{let e=await n.default.currentBranch({fs:r,dir:a,fullname:!1});if(x(e))return String(e).trim()}catch{}return""}function x(e){let t=String(e??"").trim();return!!t&&"HEAD"!==t&&".invalid"!==t}async function j(e){let t=String(await (0,l.G)({dir:e,args:["branch","--show-current"],timeoutMs:3e3})??"").trim();return t||String(await (0,l.G)({dir:e,args:["rev-parse","--abbrev-ref","HEAD"],timeoutMs:3e3})??"").trim()}[d,s,n,l]=c.then?(await c)():c,i()}catch(e){i(e)}})},3734(e,t,a){a.a(e,async function(e,i){try{a.d(t,{QY:()=>S});var r=a(6760),o=a(4204),n=a(8362),s=a(4071),l=a(4768),d=a(3122),c=a(7648),u=a(5227),p=a(7163),m=e([l,n,c,o,p,u,s]);function g(e){return e&&""!==e.trim()?(0,r.resolve)(process.cwd(),e.trim()):process.cwd()}async function h(e,t){let a=await (0,l.s)(process.cwd()),i=a?.lang??(0,n.ao)(),r=(0,n.lW)(i);(0,c.Uz)(r(e,t))}[l,n,c,o,p,u,s]=m.then?(await m)():m;let f=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Project directory (relative to cwd or absolute). Defaults to cwd."}))}),k=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Project directory to initialize. Defaults to cwd."})),projectName:o.Type.Optional(o.Type.String({description:"Optional project name for the initial commit message."}))}),v=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Repository directory. Defaults to cwd."})),filepaths:o.Type.Array(o.Type.String({description:"Repository-relative file paths to stage."}),{minItems:1})}),b=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Repository directory. Defaults to cwd."})),message:o.Type.String({description:"Commit message (summarized to one concise line)."}),filepaths:o.Type.Optional(o.Type.Array(o.Type.String({description:"Paths to stage before commit. Omit to stage all changes."}))),stageAll:o.Type.Optional(o.Type.Boolean({description:"When true, stage all changed/untracked files before commit (default when filepaths omitted)."}))}),w=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Repository directory. Defaults to cwd."})),depth:o.Type.Optional(o.Type.Number({description:"Number of recent commits (default 10)."}))}),y=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Repository directory. Defaults to cwd."})),steps:o.Type.Optional(o.Type.Number({description:"Number of commits to roll back from HEAD (default 1). Ignored when commitOid is set."})),mode:o.Type.Optional(o.Type.String({description:'Rollback mode: "soft" (default, keep staged changes), "mixed" (keep working tree, unstage), or "hard" (discard changes).'})),commitOid:o.Type.Optional(o.Type.String({description:"Optional target commit oid (must be an ancestor of HEAD). When set, HEAD moves to this commit instead of HEAD~steps."}))}),S=[{name:"git_status",label:"Git Status",description:"Show git working tree status for the project (porcelain-style entries with created/modified/deleted classification).",parameters:f,execute:async(e,t)=>{let a=g((0,d.h_)(t,"path",{label:"path"})),i=await (0,u.fG)(a);return(0,s.JX)(JSON.stringify({tool:"git_status",toolCallId:e,cwd:a,count:i.entries.length})),await h("tools.gitStatus.result",{path:a,count:String(i.entries.length)}),(0,d.Ao)(i)}},{name:"git_init",label:"Git Init",description:"Initialize git in the project when not versionized: create .gitignore with standard patterns, then initial commit.",parameters:k,execute:async(e,t)=>{let a=g((0,d.h_)(t,"path",{label:"path"})),i=(0,d.h_)(t,"projectName",{label:"projectName"}),r=await (0,p.c6)({dir:a,projectName:i}),o={cwd:a,...r};return(0,s.JX)(JSON.stringify({tool:"git_init",toolCallId:e,cwd:a,result:r})),await h("tools.gitInit.result",{path:a,initialized:r.initialized?"yes":"no",committed:r.committed?"yes":"no"}),(0,d.Ao)(o)}},{name:"git_add",label:"Git Add",description:"Stage file paths in the project git repository.",parameters:v,execute:async(e,t)=>{let a=g((0,d.h_)(t,"path",{label:"path"})),i=await (0,u.Iv)(a);if(!i)throw Error(`Not a git repository: ${a}`);let r=Array.isArray(t.filepaths)?t.filepaths.map(e=>String(e).trim()).filter(Boolean):[];if(0===r.length)throw Error("filepaths required");let{staged:o,skipped:n}=await (0,u.vx)({dir:i,filepaths:r});return(0,s.JX)(JSON.stringify({tool:"git_add",toolCallId:e,cwd:i,staged:o})),await h("tools.gitAdd.result",{path:i,count:String(o.length)}),(0,d.Ao)({cwd:i,staged:o,skipped:n})}},{name:"git_commit",label:"Git Commit",description:"Stage paths (or all changes) and create a git commit with a summarized one-line message.",parameters:b,execute:async(e,t)=>{let a=g((0,d.h_)(t,"path",{label:"path"})),i=await (0,u.Iv)(a);if(!i)throw Error(`Not a git repository: ${a}`);let r=(0,d.h_)(t,"message",{required:!0,label:"message"}),o=Array.isArray(t.filepaths)?t.filepaths.map(e=>String(e).trim()).filter(Boolean):void 0,n=!0===(0,d.GE)(t,"stageAll",{defaultValue:null==o||0===o.length}),l=await (0,u.aT)({dir:i,message:r??"",filepaths:o,stageAll:n}),c={cwd:i,...l};return(0,s.JX)(JSON.stringify({tool:"git_commit",toolCallId:e,cwd:i,result:l})),await h("tools.gitCommit.result",{path:i,message:l.commitMessage,staged:String(l.staged.length)}),(0,d.Ao)(c)}},{name:"git_log",label:"Git Log",description:"List recent git commits in the project repository.",parameters:w,execute:async(e,t)=>{let a=g((0,d.h_)(t,"path",{label:"path"})),i=await (0,u.Iv)(a);if(!i)throw Error(`Not a git repository: ${a}`);let r=(0,d.jV)(t,"depth",{integer:!0,defaultValue:10}),o=await (0,u.PC)({dir:i,depth:r}),n={cwd:i,count:o.length,commits:o};return(0,s.JX)(JSON.stringify({tool:"git_log",toolCallId:e,cwd:i,count:o.length})),await h("tools.gitLog.result",{path:i,count:String(o.length)}),(0,d.Ao)(n)}},{name:"git_rollback",label:"Git Rollback",description:"Roll back local git commits (soft/mixed/hard). Default soft keeps changes staged. Does not touch remotes. Refuses to remove the root commit.",parameters:y,execute:async(e,t)=>{let a=g((0,d.h_)(t,"path",{label:"path"})),i=await (0,u.Iv)(a);if(!i)throw Error(`Not a git repository: ${a}`);let r=(0,d.jV)(t,"steps",{integer:!0,defaultValue:1}),o=(0,d.h_)(t,"mode",{label:"mode"})??"soft",n=(0,d.h_)(t,"commitOid",{label:"commitOid"}),l=await (0,u.xF)({dir:i,steps:r??1,mode:o,commitOid:n||void 0}),c={cwd:i,...l};return(0,s.JX)(JSON.stringify({tool:"git_rollback",toolCallId:e,cwd:i,result:l})),await h("tools.gitRollback.result",{path:i,mode:l.mode,steps:String(l.steps),target:l.targetOid.slice(0,7)}),(0,d.Ao)(c)}}];i()}catch(e){i(e)}})},9628(e,t,a){function i(e){let t=".pithosai/\nlogs/\n\n",a="node_modules/\n.env\ncoverage/\n*.log\nnpm-debug.log*\n.DS_Store";return"python"===e?t+"__pycache__/\n*.py[cod]\n*$py.class\n.env\nvenv/\n.venv/\n.pytest_cache/\n.mypy_cache/\n*.egg-info/\n.eggs/\ndist/\nbuild/":"ts"===e?t+a+"\ndist/\n":t+a}a.d(t,{ei:()=>i,iK:()=>o,m0:()=>n});let r=[{label:"Pithos AI",patterns:[".pithosai/","logs/",".env","coverage/","*.log","npm-debug.log*",".DS_Store","dist/","build/"]},{label:"JavaScript / TypeScript",patterns:["node_modules/",".next/",".nuxt/",".parcel-cache/",".turbo/","out/","*.tsbuildinfo"]},{label:"Python",patterns:["__pycache__/","*.py[cod]","*$py.class","venv/",".venv/",".pytest_cache/",".mypy_cache/","*.egg-info/",".eggs/",".tox/",".ruff_cache/"]},{label:"Java",patterns:["target/","*.class","*.jar","*.war","*.ear",".gradle/",".idea/","*.iml"]},{label:"Go",patterns:["bin/","*.exe","*.test","go.work","go.work.sum"]},{label:"Rust",patterns:["target/","**/*.rs.bk"]},{label:"Dart / Flutter",patterns:[".dart_tool/",".packages",".pub-cache/",".pub/",".flutter-plugins",".flutter-plugins-dependencies",".metadata"]},{label:"C / C++",patterns:["*.o","*.obj","*.a","*.lib","*.so","*.dll","*.dylib","*.out","*.app","cmake-build-*/","CMakeFiles/","CMakeCache.txt"]},{label:"PHP",patterns:["vendor/","composer.phar",".phpunit.result.cache",".phpunit.cache"]}];function o(){var e=r.flatMap(e=>e.patterns);let t=new Set,a=[];for(let i of e)t.has(i)||(t.add(i),a.push(i));return a}function n(){let e=r.map(e=>[`# ${e.label}`,...e.patterns].join("\n")).join("\n\n");return`${e}
|
|
176
|
+
`:"";return["You are a code review subagent. Review the uncommitted project changes below.\nUse only read-only tools (read, grep, find, ls, list_files, git_status, git_log).\nDo NOT edit, write, delete, or commit any files. Report findings only.\nDo NOT spawn nested task/subagent tools.\n",`Repository: ${t}`,"",o+"Changed files:",r||"(none)","\nInstructions:\n1. Inspect the changed files (and related context as needed).\n2. Report bugs, missing tests, style/convention issues, docs problems, and security risks.\n3. Structure the response as a numbered list of findings. For each finding include: severity (blocker/major/minor), file path, and a concrete fix suggestion.\n4. If there are no issues, reply with exactly: No issues found.\n5. Do not apply fixes yourself."].join("\n")}({cwd:v,entries:C,focus:w??void 0}),M=w?.trim()?`Code review: ${w.trim().slice(0,80)}`:`Code review (${R.length} file(s))`;u?.({content:[{type:"text",text:A("tools.codeReview.spawning",{model:S})}],details:{depth:L,model:S,reviewedFiles:R,cwd:v}});try{let t=e.spawn({parentRunId:j,prompt:O,description:M,model:S,subagentType:"general-purpose",allowedTools:[...g.mn],depth:L,signal:o,cwd:v,includeTaskTool:!1}),a=await t.promise,i=function(e){if(null==e)return"";if("string"==typeof e)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}(a.result),r={runId:t.runId,sessionKey:t.sessionKey,depth:L,success:a.success,findings:i,error:a.error,durationMs:a.durationMs,reviewedFiles:R,cwd:v,model:S};return a.success||console.error(`[code-review-tool] subagent failed runId=${t.runId}: ${a.error??"unknown"}`),await k("tools.codeReview.result",{path:v,count:String(R.length),success:a.success?"yes":"no"}),(0,c.Ao)(r)}catch(t){let e=t&&"object"==typeof t&&"message"in t?String(t.message):String(t);throw console.error(`[code-review-tool] error: ${e}`),Error(e)}}}}i()}catch(e){i(e)}})},3122(e,t,a){function i(e,t,a={}){let{required:r=!1,trim:o=!0,label:n=t,allowEmpty:s=!1,defaultValue:l}=a,d=e[t];if("string"!=typeof d){if(r)throw Error(`${n} required`);return void 0!==l?l:void 0}let c=o?d.trim():d;if(!c&&!s){if(r)throw Error(`${n} required`);return void 0!==l?l:void 0}return c}function r(e,t,a={}){let i,{required:o=!1,label:n=t,integer:s=!1,defaultValue:l}=a,d=e[t];if("number"==typeof d&&Number.isFinite(d))i=d;else if("string"==typeof d){let e=d.trim();if(e){let t=Number.parseFloat(e);Number.isFinite(t)&&(i=t)}}if(void 0===i){if(o)throw Error(`${n} required`);return void 0!==l?l:void 0}return s?Math.trunc(i):i}function o(e,t,a={}){let{required:i=!1,label:r=t,defaultValue:n}=a,s=e[t];if(null==s){if(i)throw Error(`${r} required`);return void 0!==n?n:void 0}if("boolean"==typeof s)return s;if("string"==typeof s){let e=s.trim().toLowerCase();if("true"===e||"1"===e||"yes"===e)return!0;if("false"===e||"0"===e||"no"===e)return!1}if("number"==typeof s)return 0!==s;if(i)throw Error(`${r} required`);return void 0!==n?n:void 0}function n(e){return{type:"text",text:e}}function s(e,t={}){return{content:[n(!0===t.compact?JSON.stringify(e):JSON.stringify(e,null,2))],details:e}}function l(e,t,a){let i=e??[];if(t&&t.length>0){let e=new Set(t.map(e=>String(e).toLowerCase()));i=i.filter(t=>e.has(String(t?.name??"").toLowerCase()))}let r=a??[];if(r.length>0){let e=new Set(r.map(e=>String(e).toLowerCase()));i=i.filter(t=>!e.has(String(t?.name??"").toLowerCase()))}return i}a.d(t,{Ao:()=>s,GE:()=>o,UZ:()=>l,fI:()=>n,h_:()=>i,jV:()=>r})},3722(e,t,a){a.a(e,async function(e,i){try{a.d(t,{k1:()=>w});var r=a(7598),o=a(6760),n=a(4204),s=a(3122),l=a(8359),d=a(1846),c=a(4071),u=e([n,d,l,c]);[n,d,l,c]=u.then?(await u)():u;let g="Schedules are picked up by `pithosai cron-daemon` (reload within ~60s). Ensure the daemon is running.",h=n.Type.Union(d.Fb.map(e=>n.Type.Literal(e)),{description:"reuse = stable taskId; new_each_run = fresh task id every fire."}),f=n.Type.Object({role:n.Type.String({description:"Agent role code (e.g. MKT, RD, PM)."}),lang:n.Type.String({description:"Locale for the scheduled run (e.g. en, zh)."}),input:n.Type.String({description:"Agent request body (instructions after title)."}),cronExpr:n.Type.String({description:"Standard 5-field cron expression (minute hour dom month dow)."}),title:n.Type.Optional(n.Type.String({description:"Request title; defaults to first line of input."})),projectPath:n.Type.Optional(n.Type.String({description:"Working directory for the run; defaults to process cwd."})),model:n.Type.Optional(n.Type.String({description:"Optional model key for the run."})),taskIdStrategy:n.Type.Optional(h),taskId:n.Type.Optional(n.Type.String({description:"Stable task id when taskIdStrategy is reuse."})),newSession:n.Type.Optional(n.Type.Boolean({description:"Start with a new session when the job fires."})),timeout:n.Type.Optional(n.Type.Number({description:"Max run time in seconds."})),enabled:n.Type.Optional(n.Type.Boolean({description:"When false, job is stored but not scheduled."}))}),k=n.Type.Object({enabledOnly:n.Type.Optional(n.Type.Boolean({description:"When true, return only enabled jobs."}))}),v=n.Type.Object({id:n.Type.String({description:"Cron task id to update."}),role:n.Type.Optional(n.Type.String()),lang:n.Type.Optional(n.Type.String()),title:n.Type.Optional(n.Type.String()),input:n.Type.Optional(n.Type.String()),cronExpr:n.Type.Optional(n.Type.String()),projectPath:n.Type.Optional(n.Type.String()),model:n.Type.Optional(n.Type.String()),taskIdStrategy:n.Type.Optional(h),taskId:n.Type.Optional(n.Type.String()),newSession:n.Type.Optional(n.Type.Boolean()),timeout:n.Type.Optional(n.Type.Number()),enabled:n.Type.Optional(n.Type.Boolean())}),b=n.Type.Object({id:n.Type.String({description:"Cron task id to delete."})});function p(e){return"new_each_run"===e?"new_each_run":"reuse"}async function m(e){let t=(0,s.h_)(e,"role",{required:!0,label:"role"}),a=(0,s.h_)(e,"lang",{required:!0,label:"lang"}),i=(0,s.h_)(e,"input",{required:!0,label:"input"}),n=(0,s.h_)(e,"cronExpr",{required:!0,label:"cronExpr"}),l=(0,d.AB)(n);if(!1===l.ok)return{ok:!1,error:l.error};let c=(0,s.h_)(e,"title",{label:"title"})??((String(i??"").split(/\r?\n/)[0]?.trim()??"")||"Scheduled task"),u=(0,o.resolve)((0,s.h_)(e,"projectPath",{label:"projectPath"})??process.cwd()),m=p((0,s.h_)(e,"taskIdStrategy",{label:"taskIdStrategy"})),g=(0,s.h_)(e,"taskId",{label:"taskId"}),h="reuse"===m?g??(0,r.randomUUID)():g??null,f=+(!0===(0,s.GE)(e,"newSession",{label:"newSession"})),k=(0,s.jV)(e,"timeout",{label:"timeout",integer:!0}),v=+!!(0,s.GE)(e,"enabled",{label:"enabled",defaultValue:!0}),b=(0,s.h_)(e,"model",{label:"model"})??null,w=1===v?(0,d.FG)(n):null;return{ok:!0,row:{id:(0,r.randomUUID)(),role:t,lang:a,title:c,input:i,cronExpr:n.trim(),projectPath:u,model:b,enabled:v,taskIdStrategy:m,taskId:h,newSession:f,timeout:k??null,overlapPolicy:"skip",nextRunAt:w}}}let w=[{name:"create_cron_task",label:"Create Cron Task",description:"Create a recurring scheduled agent job stored in pithosai_cron_task. Requires `pithosai cron-daemon` to be running for schedules to fire.",parameters:f,execute:async(e,t)=>{try{let e=await m(t);if(!1===e.ok)return(0,s.Ao)({ok:!1,error:e.error});let a=await (0,l.Lf)(),i=await (0,l.jx)(a,e.row);return(0,s.Ao)({ok:!0,cronTask:i,reminder:g})}catch(e){return console.error("[create_cron_task] failed:",e),(0,c.CN)(`[create_cron_task] failed: ${String(e)}`),(0,s.Ao)({ok:!1,error:String(e)})}}},{name:"list_cron_tasks",label:"List Cron Tasks",description:"List scheduled cron tasks from pithosai_cron_task.",parameters:k,execute:async(e,t)=>{try{let e=!0===(0,s.GE)(t,"enabledOnly",{label:"enabledOnly"}),a=await (0,l.Lf)(),i=await (0,l.V0)(a,{enabledOnly:e});return(0,s.Ao)({ok:!0,cronTasks:i,count:i.length})}catch(e){return console.error("[list_cron_tasks] failed:",e),(0,c.CN)(`[list_cron_tasks] failed: ${String(e)}`),(0,s.Ao)({ok:!1,error:String(e)})}}},{name:"update_cron_task",label:"Update Cron Task",description:"Update a scheduled cron task by id. Changes are picked up on the next cron-daemon reload.",parameters:v,execute:async(e,t)=>{try{let e=(0,s.h_)(t,"id",{required:!0,label:"id"}),a=await (0,l.Lf)(),i=await (0,l.yD)(a,e);if(!i)return(0,s.Ao)({ok:!1,error:`cron task not found: ${e}`});let r={};for(let e of["role","lang","title","input","cronExpr","projectPath","model","taskId"]){let a=(0,s.h_)(t,e,{label:e});void 0!==a&&(r[e]="projectPath"===e?(0,o.resolve)(a):a)}if(void 0!==r.cronExpr){let e=(0,d.AB)(String(r.cronExpr));if(!1===e.ok)return(0,s.Ao)({ok:!1,error:e.error});r.cronExpr=String(r.cronExpr).trim()}let n=(0,s.h_)(t,"taskIdStrategy",{label:"taskIdStrategy"});void 0!==n&&(r.taskIdStrategy=p(n));let c=(0,s.GE)(t,"newSession",{label:"newSession"});void 0!==c&&(r.newSession=+!!c);let u=(0,s.GE)(t,"enabled",{label:"enabled"});void 0!==u&&(r.enabled=+!!u);let m=(0,s.jV)(t,"timeout",{label:"timeout",integer:!0});void 0!==m&&(r.timeout=m);let h="string"==typeof r.cronExpr?r.cronExpr:i.cronExpr,f=void 0!==r.enabled?r.enabled:i.enabled;1===f?r.nextRunAt=(0,d.FG)(h):!1===u&&(r.nextRunAt=null);let k=await (0,l.BU)(a,e,r);return(0,s.Ao)({ok:!0,cronTask:k,reminder:g})}catch(e){return console.error("[update_cron_task] failed:",e),(0,c.CN)(`[update_cron_task] failed: ${String(e)}`),(0,s.Ao)({ok:!1,error:String(e)})}}},{name:"delete_cron_task",label:"Delete Cron Task",description:"Delete a scheduled cron task by id.",parameters:b,execute:async(e,t)=>{try{let e=(0,s.h_)(t,"id",{required:!0,label:"id"}),a=await (0,l.Lf)();if(!await (0,l.D2)(a,e))return(0,s.Ao)({ok:!1,error:`cron task not found: ${e}`});return(0,s.Ao)({ok:!0,id:e,reminder:g})}catch(e){return console.error("[delete_cron_task] failed:",e),(0,c.CN)(`[delete_cron_task] failed: ${String(e)}`),(0,s.Ao)({ok:!1,error:String(e)})}}}];i()}catch(e){i(e)}})},7536(e,t,a){a.d(t,{Pc:()=>c,Ui:()=>p,WO:()=>d,ZU:()=>n,gm:()=>l});var i=a(1455),r=a(6760),o=a(3024);async function n(e,t={}){let a=(0,r.join)(e,".pithosai","custom-tools"),l=t.importTool;if(!(0,o.existsSync)(a))return[];let d=[];try{for(let e of(await (0,i.readdir)(a)).filter(e=>e.endsWith(".js")))try{let t=await s((0,r.join)(a,e),l);t&&d.push(t)}catch(t){console.warn(`Failed to load custom tool from ${e}:`,t.message)}}catch(e){console.warn("Failed to read custom tools directory:",e.message)}return d}async function s(e,t){try{let a,i=`file://${e}`,r=t?await t(i):await import(i),o=Object.keys(r).find(e=>e.startsWith("create")&&e.endsWith("Tool"));if(!o)throw Error(`No tool creation function found in ${e}`);let n=r[o];if("function"!=typeof n)throw Error(`${o} is not a function in ${e}`);let s=n();if(!s.name||!s.execute||"function"!=typeof s.execute)throw Error(`Invalid tool structure in ${e}`);return a=s.parameters,null!=a&&"object"==typeof a&&"object"===a.type||(s.parameters={type:"object",properties:null!=a&&"object"==typeof a&&null!=a.properties?a.properties:null==a||"object"!=typeof a||"type"in a?{}:a}),s}catch(t){return console.warn(`Error loading custom tool from ${e}:`,t.message),null}}async function l(e){let t=(0,r.join)(e,".pithosai","custom-tools");if(!(0,o.existsSync)(t))return[];let a=[];try{for(let e of(await (0,i.readdir)(t)).filter(e=>e.endsWith(".json")))try{let n=(0,r.join)(t,e),s=await (0,i.readFile)(n,"utf-8"),l=JSON.parse(s),d=e.replace(".json",".js"),c=(0,r.join)(t,d);(0,o.existsSync)(c)&&a.push({name:l.name,description:l.description||"No description",metadata:l,filePath:c})}catch(t){console.warn(`Failed to load metadata from ${e}:`,t.message)}}catch(e){console.warn("Failed to read custom tools metadata:",e.message)}return a}async function d(e,t){let i=t.endsWith("_tool")?t:`${t}_tool`,n=(0,r.join)(e,".pithosai","custom-tools"),s=(0,r.join)(n,`${i}.js`),l=(0,r.join)(n,`${i}.json`);try{let e=await Promise.resolve().then(a.t.bind(a,1943,19));return(0,o.existsSync)(s)&&await e.unlink(s),(0,o.existsSync)(l)&&await e.unlink(l),!0}catch(e){return console.warn(`Failed to remove custom tool ${t}:`,e.message),!1}}async function c(e,t,i){let n=t.endsWith("_tool")?t:`${t}_tool`,s=(0,r.join)(e,".pithosai","custom-tools"),l=(0,r.join)(s,`${n}.js`),d=(0,r.join)(s,`${n}.js.disabled`),c=(0,r.join)(s,`${n}.json`),u=(0,r.join)(s,`${n}.json.disabled`);try{let e=await Promise.resolve().then(a.t.bind(a,1943,19));return i?((0,o.existsSync)(d)&&await e.rename(d,l),(0,o.existsSync)(u)&&await e.rename(u,c)):((0,o.existsSync)(l)&&await e.rename(l,d),(0,o.existsSync)(c)&&await e.rename(c,u)),!0}catch(e){return console.warn(`Failed to ${i?"enable":"disable"} custom tool ${t}:`,e.message),!1}}async function u(e,t){let a=t.endsWith("_tool")?t:`${t}_tool`,i=(0,r.join)(e,".pithosai","custom-tools"),n=(0,r.join)(i,`${a}.js`);return(0,o.existsSync)(n)}async function p(e){let t=await l(e),a=[];for(let i of t){let t=await u(e,i.name);a.push({name:i.name,enabled:t,lastUsed:i.metadata.usageStats?.lastExecuted,usageCount:i.metadata.usageStats?.totalExecutions||0,successRate:i.metadata.usageStats?.successRate,avgExecutionTime:i.metadata.usageStats?.avgExecutionTime})}return a}},1305(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Df:()=>y,Md:()=>b,XN:()=>k,ZM:()=>w,jI:()=>v});var r=a(6760),o=a(3024),n=a(8161),s=a(4204),l=a(3122),d=a(4071),c=a(8362),u=e([s,c,d]);function p(e,t){let a=e?.roles?.[t];return((0,d.JX)("getRoleEmailConfig: r:",a,"role:",t,"settings:",e),a&&"object"==typeof a&&"string"==typeof a.email&&a.email.trim()&&"string"==typeof a.password)?a:null}function m(e){let t=e.smtp?.host;if(!t||"string"!=typeof t||!t.trim())return null;let a=e.smtp?.port??587;return{host:t.trim(),port:Number(a)||587,secure:465===a}}function g(e){let t=e.imap,a=t?.host;if(!a||"string"!=typeof a||!a.trim())return null;let i=t?.port??993;return{host:a.trim(),port:Number(i)||993,user:e.email.trim(),password:e.password}}[s,c,d]=u.then?(await u)():u;let S="Configure this role in the email_roles table in the pithosai SQLite database (loaded via readSettings).",P={noConfig:`No email config for this role. ${S}`,imapMissing:`IMAP not configured for this role. ${S} Set imap.host for IMAP.`,smtpMissing:`SMTP not configured for this role. ${S} Set smtp.host for SMTP.`},T=s.Type.Object({limit:s.Type.Optional(s.Type.Number({description:"Maximum number of emails to return (default 10).",minimum:1,maximum:50})),mailbox:s.Type.Optional(s.Type.String({description:"IMAP mailbox name (default INBOX)."}))}),A=s.Type.Object({to:s.Type.String({description:"Recipient email address(es), comma-separated."}),subject:s.Type.String({description:"Email subject."}),text:s.Type.Optional(s.Type.String({description:"Plain text body."})),html:s.Type.Optional(s.Type.String({description:"HTML body (optional)."})),attachments:s.Type.Optional(s.Type.Array(s.Type.Object({filename:s.Type.String({description:"Attachment filename (e.g. document.pdf)."}),filePath:s.Type.String({description:"Absolute or project-relative path to the file on disk. Use only filePath; inline base64 content is not supported."})}),{description:"Optional attachments. Each item must have filename and filePath only. Do not use inline base64 content; the file must exist on disk at filePath."}))});async function h(e,t){let i=g(e);if(!i)return{emails:[],error:P.imapMissing};let n=await a.e("613").then(a.bind(a,2220)),s=n.default??n,l=(await a.e("236").then(a.bind(a,7351))).simpleParser,d=Math.min(50,Math.max(1,t.limit||10)),c=(t.mailbox||"INBOX").trim()||"INBOX",u="number"==typeof t.maxTextLength&&t.maxTextLength>0?t.maxTextLength:2e3,p="number"==typeof t.maxAttachmentInlineSize&&t.maxAttachmentInlineSize>=0?t.maxAttachmentInlineSize:2097152,m=t.attachmentsDir??(t.projectCwd?(0,r.join)(t.projectCwd,".pithosai","attachments"):void 0);return new Promise(e=>{let t=new s({user:i.user,password:i.password,host:i.host,port:i.port,tls:!0,tlsOptions:{rejectUnauthorized:!1}}),a=[],n=a=>{t.end(),e({emails:[],error:a?.message||String(a)})};t.once("error",n),t.once("ready",()=>{t.openBox(c,!1,(i,s)=>{if(i)return void n(i);let c=Math.min(s.messages.total,d);if(0===c){t.end(),e({emails:[]});return}let g=`${Math.max(1,s.messages.total-d+1)}:${s.messages.total}`,h=t.seq.fetch(g,{bodies:"",struct:!0}),f=0,k=!1,v=()=>{f>=c&&!k&&(k=!0,t.end(),e({emails:a.reverse()}))};h.on("message",e=>{e.on("body",e=>{l(e,(e,t)=>{if(e){f++,v();return}let i=t.text||t.textAsText||"",n=Array.isArray(t.attachments)?t.attachments.map((e,t)=>(function(e,t,a,i=0){let n=e.filename||e.contentType?.split("/")[0]||"attachment",s=e.contentType||"application/octet-stream",l=e.content,d=l?l.length:e.size??0;if(l&&d>102400&&a)try{(0,o.mkdirSync)(a,{recursive:!0});let e=`${i}_${(n.replace(/^.*[/\\]/,"").replace(/\0/g,"")||"attachment").replace(/[<>:"|?*\s]+/g,"_").slice(0,200)}`,t=(0,r.join)(a,e);return(0,o.writeFileSync)(t,l,{flag:"w"}),{filename:n,contentType:s,filePath:t,size:d}}catch{return{filename:n,contentType:s,size:d}}let c={filename:n,contentType:s,size:d};return l&&d>0&&d<=t&&(c.content=l.toString("base64")),c})(e,p,m,t)):[];a.push({from:t.from?.text||"",to:t.to?.text||"",subject:t.subject||"",date:t.date?new Date(t.date).toISOString():"",text:i.slice(0,u),...n.length>0?{attachments:n}:{}}),f++,v()})})}),h.once("error",n)})}),t.connect()})}async function f(e,t){let i,s=m(e);if(!s)return{success:!1,error:P.smtpMissing};let l=(await a.e("220").then(a.bind(a,1663))).default.createTransport({host:s.host,port:s.port,secure:s.secure,auth:{user:e.email.trim(),pass:e.password}}),d=t.to.trim(),c=t.text?.trim(),u=t.html?.trim();if(!c&&!u)return{success:!1,error:"Either text or html body is required."};try{i=function(e,t){if(!Array.isArray(e))return[];for(let t of e){if(!t||"object"!=typeof t)continue;let e=void 0!==t.content&&null!==t.content&&String(t.content).length>0,a="string"==typeof t.filePath&&t.filePath.trim().length>0;if(e&&!a)throw Error("Attachments must use filePath only; inline base64 content is not supported. Save the file to disk and pass its path in filePath.")}let a=[];for(let i of e){if(!i||"string"!=typeof i.filename||"string"!=typeof i.filePath)continue;let e=i.filePath.trim();if(!e)continue;let s=i.filename.trim()||"attachment",{path:l}=function(e,t){let a=t||process.cwd(),i=(0,r.resolve)(a,e.trim());if(!(0,o.existsSync)(i))throw Error(`Attachment file not found: ${i}`);let s=(0,o.statSync)(i);if(!s.isFile())throw Error(`Attachment path is not a file: ${i}`);let l=(0,n.homedir)(),d=i.startsWith(process.cwd()),c=l&&i.startsWith(l);if(!d&&!c)throw Error(`Attachment path must be under project or home directory: ${i}`);if(s.size>0x1900000)throw Error(`Attachment file too large (${s.size} bytes, max 26214400): ${i}`);return{path:i,size:s.size}}(e,t);a.push({filename:s,content:(0,o.readFileSync)(l)})}return a}(t.attachments,t.projectCwd)}catch(e){return{success:!1,error:e?.message||String(e)}}try{let a=await l.sendMail({from:e.email.trim(),to:d,subject:t.subject.trim(),text:c||void 0,html:u||void 0,attachments:i.length>0?i:void 0});return{success:!0,messageId:a.messageId}}catch(e){return{success:!1,error:e?.message||String(e)}}}function k(e,t){let a=p(e,t);return a&&g(a)?{label:"Read Email",name:"read_email",description:"Read recent emails from the inbox for the current role. Uses IMAP config from settings.roles (email_roles table via readSettings).",parameters:T,execute:async(e,t)=>{let i=t&&"object"==typeof t&&!Array.isArray(t)?t:{},r=(0,l.jV)(i,"limit",{integer:!0}),o=(0,l.h_)(i,"mailbox"),n=await h(a,{limit:r??10,mailbox:o??"INBOX"});return(0,l.Ao)(n)}}:null}function v(e,t){let a=p(e,t);return a&&m(a)?{label:"Send Email",name:"send_email",description:"Send an email using the current role's SMTP account from settings.roles (email_roles table via readSettings). Call this tool once per email; do not invoke it again for the same message after a successful result. For attachments, use only filePath (path to a file on disk); inline base64 content is not supported.",parameters:A,execute:async(e,t)=>{let i=t&&"object"==typeof t&&!Array.isArray(t)?t:{},r=(0,l.h_)(i,"to",{required:!0}),o=(0,l.h_)(i,"subject",{required:!0}),n=(0,l.h_)(i,"text"),s=(0,l.h_)(i,"html"),d=Array.isArray(i.attachments)?i.attachments:void 0;if(!r)throw Error("to required");if(!o)throw Error("subject required");let c=await f(a,{to:r,subject:o,text:n,html:s,attachments:d,projectCwd:process.cwd()});return(0,l.Ao)(c)}}:null}async function b(e,t,a={}){let i=p(e,t);return i?h(i,{limit:a.limit??20,mailbox:a.mailbox??"INBOX",maxTextLength:a.maxTextLength??5e4,maxAttachmentInlineSize:a.maxAttachmentInlineSize,projectCwd:a.projectCwd,attachmentsDir:a.attachmentsDir}):{emails:[],error:P.noConfig}}async function w(e,t,a){let i=p(e,t);return i?f(i,a):{success:!1,error:P.noConfig}}async function y(e,t,i,r={}){let o=p(e,t),n={close:()=>{}};if(!o)return n;let s=g(o);if(!s)return n;let l=r.lang??(0,c.ao)(),u=(0,c.lW)(l),m=await a.e("613").then(a.bind(a,2220)),h=m.default??m,f=!1,k=null,v=null,b=!1;return!function e(){f||(b=!1,(k=new h({user:s.user,password:s.password,host:s.host,port:s.port,tls:!0,tlsOptions:{rejectUnauthorized:!1},keepalive:!0})).once("error",e=>{if((0,d.vV)(u("heartbeat.imapError",{message:e?.message||e})),k)try{k.end()}catch(e){}}),k.once("end",()=>{k=null,f||b||(b=!0,(0,d.vV)(u("heartbeat.imapDisconnectedReconnect",{ms:String(5e3)})),setTimeout(()=>{e()},5e3))}),k.on("close",()=>{}),k.once("ready",()=>{f||k.openBox("INBOX",!1,e=>{if(e){if((0,d.vV)(u("heartbeat.imapOpenBoxError",{message:e?.message||e})),k)try{k.end()}catch(e){}return}f||(k.on("mail",e=>{Promise.resolve(i(e)).catch(e=>(0,d.vV)(u("heartbeat.onNewMailError",{message:e?.message||e})))}),v||(v=setInterval(()=>{if(!f&&k&&"authenticated"===k.state)try{"function"==typeof k._client?.send?k._client.send("NOOP"):"function"==typeof k._enqueue&&k._enqueue("NOOP",!0)}catch(e){}},174e4)))})}),k.connect())}(),{close(){if(f=!0,v&&(clearInterval(v),v=null),k){try{k.removeAllListeners("close"),k.end()}catch(e){}k=null}}}}i()}catch(e){i(e)}})},3772(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Z:()=>k,w:()=>f});var r=a(4204),o=a(4071),n=a(7420),s=a(8038),l=a(3122),d=a(178),c=e([d,r,s,n,o]);[d,r,s,n,o]=c.then?(await c)():c;let g=Math.floor(d.yg/2);function u(e,t=g,a=20,i=20){if("string"!=typeof e)return{text:"",truncated:!1};if(e.length<=t)return{text:e,truncated:!1};let r=e.split("\n");if(r.length<=a+i)return{text:e.slice(0,t)+"\n[Content truncated for request size limit.]",truncated:!0};let o=r.slice(0,a).join("\n"),n=r.slice(-i).join("\n"),s=r.length-a-i;return{text:o+"\n[... "+s+" lines omitted ...]\n"+n,truncated:!0}}let h=r.Type.Object({command:r.Type.String({description:"Executable name or path (e.g. 'node', 'npm', '/usr/bin/env')."}),args:r.Type.Optional(r.Type.Array(r.Type.String(),{description:"Arguments to pass to the command. Omit or empty for no arguments."})),timeoutMs:r.Type.Optional(r.Type.Number({description:"Timeout in milliseconds. Default 60000.",minimum:1e3})),cwd:r.Type.Optional(r.Type.String({description:"Working directory for the command. Omit for process cwd."})),input:r.Type.Optional(r.Type.String({description:"Stdin content to pipe to the command."})),env:r.Type.Optional(r.Type.Record(r.Type.String(),r.Type.String(),{description:"Extra environment variables (merged with process.env)."}))});function p(e){let t={timeoutMs:"number"==typeof e.timeoutMs&&e.timeoutMs>=1e3?e.timeoutMs:6e4};if(null!=e.cwd&&String(e.cwd).trim()&&(t.cwd=String(e.cwd).trim()),void 0!==e.input&&(t.input="string"==typeof e.input?e.input:String(e.input)),null!=e.env&&"object"==typeof e.env&&!Array.isArray(e.env))for(let[a,i]of(t.env={},Object.entries(e.env)))null!=a&&"string"==typeof i&&(t.env[a]=i);return t}function m(e){let t=u(e.stdout??""),a=u(e.stderr??""),i={ok:0===e.code,stdout:t.text,stderr:a.text,code:e.code,signal:e.signal??null,killed:e.killed};return t.truncated&&(i.stdoutTruncated=!0),a.truncated&&(i.stderrTruncated=!0),i}let f={name:"exec",label:"Exec",description:"Run a shell command with a timeout. Command runs immediately (not queued). Use for one-off commands. Provide executable and optional args, cwd, stdin, env.",parameters:h,execute:async(e,t,a,i)=>{let r=null!=t.command?String(t.command).trim():"";if(!r)return(0,l.Ao)({ok:!1,error:"command is required"});let s=Array.isArray(t.args)?t.args.map(e=>String(e)):[],d=[r,...s],c=p(t);(0,o.JX)(JSON.stringify({tool:"exec",toolCallId:e,command:d,timeoutMs:c.timeoutMs}));try{let e=await (0,n._)(d,c),t=m(e);return e.stderr?.trim()&&(0,o.JX)(`exec stderr: ${e.stderr.trim()}`),(0,l.Ao)(t)}catch(e){return(0,o.CN)(`exec failed: ${r} ${s.join(" ")}: ${String(e)}`),(0,l.Ao)({ok:!1,error:String(e?.message??e),stdout:"",stderr:""})}}},k={name:"queue_exec",label:"Queue Exec",description:"Run a shell command through the main command queue. Same parameters as exec, but execution is serialized with other queued commands. Prefer this when running multiple commands or when the agent uses other process tools.",parameters:h,execute:async(e,t,a,i)=>{let r=null!=t.command?String(t.command).trim():"";if(!r)return(0,l.Ao)({ok:!1,error:"command is required"});let d=Array.isArray(t.args)?t.args.map(e=>String(e)):[],c=[r,...d],u=p(t);(0,o.JX)(JSON.stringify({tool:"queue_exec",toolCallId:e,command:c,timeoutMs:u.timeoutMs}));try{let e=await (0,s.Wf)(()=>(0,n._)(c,u)),t=m(e);return e.stderr?.trim()&&(0,o.JX)(`queue_exec stderr: ${e.stderr.trim()}`),(0,l.Ao)(t)}catch(e){return(0,o.CN)(`queue_exec failed: ${r} ${d.join(" ")}: ${String(e)}`),(0,l.Ao)({ok:!1,error:String(e?.message??e),stdout:"",stderr:""})}}};i()}catch(e){i(e)}})},5939(e,t,a){a.a(e,async function(e,i){try{a.d(t,{G:()=>c,MH:()=>d,_z:()=>u});var r=a(1421),o=a(8161),n=a(7975),s=a(4071),l=e([s]);s=(l.then?(await l)():l)[0];let p=(0,n.promisify)(r.execFile),m=null;async function d(e){let t="number"==typeof e.timeoutMs&&e.timeoutMs>0?e.timeoutMs:15e3,{stdout:a,stderr:i}=await p("git",e.args,{encoding:"utf8",timeout:t,cwd:e.dir,maxBuffer:0x2000000});return{stdout:String(a??""),stderr:String(i??"")}}async function c(e){try{let{stdout:t}=await d(e);return t}catch(t){return(0,s.JX)(`[git-cli] git ${e.args.join(" ")} failed in ${e.dir}: ${String(t?.message??t)}`),null}}async function u(){if(null!=m)return m;let e=await c({dir:(0,o.tmpdir)(),args:["--version"],timeoutMs:3e3});return m="string"==typeof e&&/\bgit version\b/i.test(e)}i()}catch(e){i(e)}})},5227(e,t,a){a.a(e,async function(e,i){try{a.d(t,{G2:()=>x,Iv:()=>u,PC:()=>S,aT:()=>w,fG:()=>p,vx:()=>m,xF:()=>R});var r=a(3024),o=a(6760),n=a(9155),s=a(7163),l=a(5939),d=a(9898),c=e([d,s,n,l]);async function u(e){let t=(0,o.resolve)(e);try{let e=await n.default.findRoot({fs:r,filepath:t});if(e){let a=(0,o.resolve)(t,e);if((0,r.existsSync)((0,o.join)(a,".git")))return a}}catch(e){console.debug(`[git-operations] resolveGitRepositoryDir: no git root for ${t}: ${String(e?.message??e)}`)}return await (0,s.y)(t)?t:null}async function p(e){let t=(0,o.resolve)(e),a=await (0,d.eY)(t);if(!a)return{isRepository:!1,cwd:t,entries:[]};let i=[...a.entries.values()].map(e=>({path:e.path,status:`${e.indexStatus}${e.workTreeStatus}`,change:(0,d.bm)(e)}));return{isRepository:!0,cwd:t,entries:i}}async function m(e){let t=(0,o.resolve)(e.dir);return await (0,l._z)()?g({dir:t,filepaths:e.filepaths}):h({dir:t,filepaths:e.filepaths})}async function g(e){let{dir:t,filepaths:a}=e,i=[],r=[];for(let e of a){let a=String(e??"").trim().replace(/\\/g,"/");if(a)try{if(await f(t,a)){r.push(a);continue}await (0,l.MH)({dir:t,args:["add","--",a],timeoutMs:15e3}),i.push(a)}catch(e){console.error(`[git-operations] stage failed (${a}): ${String(e?.message??e)}`),r.push(a)}}return{staged:i,skipped:r}}async function h(e){let{dir:t,filepaths:a}=e,i=[],o=[];for(let e of a){let a=String(e??"").trim().replace(/\\/g,"/");if(a)try{if(await n.default.isIgnored({fs:r,dir:t,filepath:a})){o.push(a);continue}await n.default.add({fs:r,dir:t,filepath:a}),i.push(a)}catch(e){console.error(`[git-operations] stage failed (${a}): ${String(e?.message??e)}`),o.push(a)}}return{staged:i,skipped:o}}async function f(e,t){try{return await (0,l.MH)({dir:e,args:["check-ignore","-q","--",t],timeoutMs:5e3}),!0}catch(t){let e="number"==typeof t?.code?t.code:null;if(1===e)return!1;throw t}}async function k(e){let t=(0,o.resolve)(e);return await (0,l._z)()?v(t):b(t)}async function v(e){await (0,l.MH)({dir:e,args:["add","-A"],timeoutMs:3e4});let t=await (0,l.G)({dir:e,args:["diff","--cached","--name-only","-z"],timeoutMs:15e3});if(null==t){let t=`[git-operations] git diff --cached --name-only failed after git add -A in ${e}`;throw console.error(t),Error(t)}return""===t?[]:t.split("\0").map(e=>e.trim()).filter(Boolean)}async function b(e){let t=[];for(let a of(await n.default.statusMatrix({fs:r,dir:e}))){let[i,o,s,l]=a;if((0!==s||0!==l)&&(o!==s||l!==s))try{await n.default.add({fs:r,dir:e,filepath:i}),t.push(i)}catch(e){console.error(`[git-operations] stage matrix path failed (${i}): ${String(e?.message??e)}`)}}return t}async function w(e){var t;let a,i=(0,o.resolve)(e.dir),d=(t=e.message,(a=String(t??"").split(/\r?\n/).map(e=>e.trim()).find(e=>e.length>0))?a.length>72?`${a.slice(0,69)}...`:a:"Update project files"),c=[];if(!0===e.stageAll?c=await k(i):Array.isArray(e.filepaths)&&e.filepaths.length>0&&(c=(await m({dir:i,filepaths:e.filepaths})).staged),0===c.length)return{commitMessage:d,staged:c,commitOid:null};if(await (0,l._z)()){await (0,l.MH)({dir:i,args:["-c",`user.name=${s.tA.name}`,"-c",`user.email=${s.tA.email}`,"-c","commit.gpgsign=false","commit","-m",d],timeoutMs:3e4});let e=String(await (0,l.G)({dir:i,args:["rev-parse","HEAD"],timeoutMs:5e3})??"").trim();return{commitMessage:d,staged:c,commitOid:e||null}}let u=await n.default.commit({fs:r,dir:i,message:d,author:s.tA});return{commitMessage:d,staged:c,commitOid:u}}function y(e){let t=String(e??"").split("\x1e").map(e=>e.replace(/^\n/,"")).filter(e=>e.length>0),a=[];for(let e of t){let t=e.split("\0");if(t.length<4)continue;let[i,r,o,...n]=t;i&&a.push({oid:i.trim(),author:String(r??"").trim(),when:Number(o)||0,message:n.join("\0").trim()})}return a}async function S(e){let t=(0,o.resolve)(e.dir),a="number"==typeof e.depth&&e.depth>0?e.depth:10;if(await (0,l._z)()){let e=await (0,l.G)({dir:t,args:["log","-n",String(a),"--format=%H%x00%an%x00%at%x00%B%x1e"],timeoutMs:15e3});if(null!=e)return y(e)}return(await n.default.log({fs:r,dir:t,depth:a})).map(e=>({oid:e.oid,message:String(e.commit.message??"").trim(),author:e.commit.author.name,when:e.commit.author.timestamp}))}async function P(e){if(await (0,l._z)()){let t=String(await (0,l.G)({dir:e,args:["symbolic-ref","HEAD"],timeoutMs:3e3})??"").trim();return t&&L(t.replace(/^refs\/heads\//,""))?t:"HEAD"}let t=await n.default.currentBranch({fs:r,dir:e,fullname:!0});return"string"==typeof t&&""!==t.trim()?t:"HEAD"}async function T(e){if(await (0,l._z)())return void await (0,l.MH)({dir:e,args:["reset","--mixed","HEAD"],timeoutMs:3e4});let t=await n.default.statusMatrix({fs:r,dir:e}),a=[];for(let i of t){let t=i[0];try{await n.default.resetIndex({fs:r,dir:e,filepath:t})}catch(e){console.error(`[git-operations] resetIndex failed (${t}): ${String(e?.message??e)}`),a.push(t)}}if(a.length>0)throw Error(`Failed to reset index for ${a.length} path(s): ${a.slice(0,5).join(", ")}`)}async function A(e){let{stdout:t}=await (0,l.MH)({dir:e.dir,args:["rev-parse","--verify",`${e.spec}^{commit}`],timeoutMs:5e3});return t.trim()}async function I(e){return((0,o.resolve)(e.dir),await (0,l._z)())?E(e):C(e)}async function E(e){let t,a=(0,o.resolve)(e.dir);try{t=await A({dir:a,spec:"HEAD"})}catch(e){throw console.error(`[git-operations] cannot resolve HEAD for rollback: ${String(e?.message??e)}`),e}let i="string"==typeof e.commitOid&&""!==e.commitOid.trim()?e.commitOid.trim():"";if(i){let e;try{e=await A({dir:a,spec:i})}catch(e){throw console.error(`[git-operations] invalid rollback commitOid (${i}): ${String(e?.message??e)}`),Error(`Unknown commitOid for rollback: ${i}`)}if(e===t)throw Error("commitOid already points at HEAD; nothing to roll back");try{await (0,l.MH)({dir:a,args:["merge-base","--is-ancestor",e,"HEAD"],timeoutMs:5e3})}catch(e){throw console.error(`[git-operations] commitOid is not an ancestor of HEAD (${i}): ${String(e?.message??e)}`),Error(`commitOid ${i} is not an ancestor of HEAD; only local history rollbacks are supported`)}let r=await (0,l.G)({dir:a,args:["log","--format=%H%x00%an%x00%at%x00%B%x1e",`${e}..HEAD`],timeoutMs:15e3}),o=y(r??"").map(e=>({oid:e.oid,message:e.message}));return{previousOid:t,targetOid:e,rolledBackCommits:o}}let r=e.steps,n=await (0,l.G)({dir:a,args:["log","-n",String(r+1),"--format=%H%x00%an%x00%at%x00%B%x1e"],timeoutMs:15e3}),s=y(n??"");if(s.length<=r)throw Error(`Cannot rollback ${r} commit(s): only ${s.length} commit(s) available (refusing to remove the root commit)`);let d=s[r].oid,c=s.slice(0,r).map(e=>({oid:e.oid,message:e.message}));return{previousOid:t,targetOid:d,rolledBackCommits:c}}async function C(e){let t=(0,o.resolve)(e.dir),a=await n.default.resolveRef({fs:r,dir:t,ref:"HEAD"}),i="string"==typeof e.commitOid&&""!==e.commitOid.trim()?e.commitOid.trim():"";if(i){let e;try{e=await n.default.resolveRef({fs:r,dir:t,ref:i})}catch(e){throw console.error(`[git-operations] invalid rollback commitOid (${i}): ${String(e?.message??e)}`),Error(`Unknown commitOid for rollback: ${i}`)}if(e===a)throw Error("commitOid already points at HEAD; nothing to roll back");let o=await n.default.log({fs:r,dir:t}),s=o.findIndex(t=>t.oid===e);if(s<0)throw Error(`commitOid ${i} is not an ancestor of HEAD; only local history rollbacks are supported`);if(0===s)throw Error("commitOid already points at HEAD; nothing to roll back");let l=o.slice(0,s).map(e=>({oid:e.oid,message:String(e.commit.message??"").trim()}));return{previousOid:a,targetOid:e,rolledBackCommits:l}}let s=e.steps,l=await n.default.log({fs:r,dir:t,depth:s+1});if(l.length<=s)throw Error(`Cannot rollback ${s} commit(s): only ${l.length} commit(s) available (refusing to remove the root commit)`);let d=l[s].oid,c=l.slice(0,s).map(e=>({oid:e.oid,message:String(e.commit.message??"").trim()}));return{previousOid:a,targetOid:d,rolledBackCommits:c}}async function R(e){let t=(0,o.resolve)(e.dir),a="string"==typeof e.mode?e.mode.trim().toLowerCase():"soft",i="mixed"===a||"hard"===a||"soft"===a?a:"soft";""!==a&&a!==i&&console.debug(`[git-operations] unknown rollback mode "${a}", using soft`);let s="string"==typeof e.commitOid&&""!==e.commitOid.trim(),d="number"==typeof e.steps&&Number.isFinite(e.steps)?Math.trunc(e.steps):1;if(!s&&d<1)throw Error("steps must be >= 1");s&&d<1&&(d=1);let{previousOid:c,targetOid:u,rolledBackCommits:p}=await I({dir:t,steps:d,commitOid:e.commitOid});d=p.length;let m=await P(t);if(console.debug(`[git-operations] rollback ${i} ${c.slice(0,7)} -> ${u.slice(0,7)} (${m}, steps=${d})`),await (0,l._z)())try{await (0,l.MH)({dir:t,args:["reset",`--${i}`,u],timeoutMs:3e4})}catch(e){console.error(`[git-operations] rollback ${i} failed; restoring ${c.slice(0,7)}: ${String(e?.message??e)}`);try{await (0,l.MH)({dir:t,args:["reset",`--${i}`,c],timeoutMs:3e4})}catch(e){console.error(`[git-operations] failed to restore previous HEAD after rollback error: ${String(e?.message??e)}`)}throw e}else{await n.default.writeRef({fs:r,dir:t,ref:m,value:u,force:!0});try{"mixed"===i?await T(t):"hard"===i&&await n.default.checkout({fs:r,dir:t,ref:"HEAD",force:!0})}catch(e){console.error(`[git-operations] rollback ${i} cleanup failed; restoring ${c.slice(0,7)}: ${String(e?.message??e)}`);try{await n.default.writeRef({fs:r,dir:t,ref:m,value:c,force:!0})}catch(e){console.error(`[git-operations] failed to restore previous HEAD after rollback error: ${String(e?.message??e)}`)}throw e}}return{mode:i,steps:d,branch:m,previousOid:c,targetOid:u,rolledBackCommits:p}}async function x(e){let t=(0,o.resolve)(e),a=null;try{let e=await n.default.findRoot({fs:r,filepath:t});if(e){let i=(0,o.resolve)(t,e);a=(0,r.existsSync)((0,o.join)(i,".git"))?i:null}}catch{a=null}if(!a)return"";let i=await j(a);if(L(i))return i.trim();try{let e=await n.default.currentBranch({fs:r,dir:a,fullname:!1});if(L(e))return String(e).trim()}catch{}return""}function L(e){let t=String(e??"").trim();return!!t&&"HEAD"!==t&&".invalid"!==t}async function j(e){let t=String(await (0,l.G)({dir:e,args:["branch","--show-current"],timeoutMs:3e3})??"").trim();return t||String(await (0,l.G)({dir:e,args:["rev-parse","--abbrev-ref","HEAD"],timeoutMs:3e3})??"").trim()}[d,s,n,l]=c.then?(await c)():c,i()}catch(e){i(e)}})},3734(e,t,a){a.a(e,async function(e,i){try{a.d(t,{QY:()=>S});var r=a(6760),o=a(4204),n=a(8362),s=a(4071),l=a(4768),d=a(3122),c=a(7648),u=a(5227),p=a(7163),m=e([l,n,c,o,p,u,s]);function g(e){return e&&""!==e.trim()?(0,r.resolve)(process.cwd(),e.trim()):process.cwd()}async function h(e,t){let a=await (0,l.s)(process.cwd()),i=a?.lang??(0,n.ao)(),r=(0,n.lW)(i);(0,c.Uz)(r(e,t))}[l,n,c,o,p,u,s]=m.then?(await m)():m;let f=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Project directory (relative to cwd or absolute). Defaults to cwd."}))}),k=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Project directory to initialize. Defaults to cwd."})),projectName:o.Type.Optional(o.Type.String({description:"Optional project name for the initial commit message."}))}),v=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Repository directory. Defaults to cwd."})),filepaths:o.Type.Array(o.Type.String({description:"Repository-relative file paths to stage."}),{minItems:1})}),b=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Repository directory. Defaults to cwd."})),message:o.Type.String({description:"Commit message (summarized to one concise line)."}),filepaths:o.Type.Optional(o.Type.Array(o.Type.String({description:"Paths to stage before commit. Omit to stage all changes."}))),stageAll:o.Type.Optional(o.Type.Boolean({description:"When true, stage all changed/untracked files before commit (default when filepaths omitted)."}))}),w=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Repository directory. Defaults to cwd."})),depth:o.Type.Optional(o.Type.Number({description:"Number of recent commits (default 10)."}))}),y=o.Type.Object({path:o.Type.Optional(o.Type.String({description:"Repository directory. Defaults to cwd."})),steps:o.Type.Optional(o.Type.Number({description:"Number of commits to roll back from HEAD (default 1). Ignored when commitOid is set."})),mode:o.Type.Optional(o.Type.String({description:'Rollback mode: "soft" (default, keep staged changes), "mixed" (keep working tree, unstage), or "hard" (discard changes).'})),commitOid:o.Type.Optional(o.Type.String({description:"Optional target commit oid (must be an ancestor of HEAD). When set, HEAD moves to this commit instead of HEAD~steps."}))}),S=[{name:"git_status",label:"Git Status",description:"Show git working tree status for the project (porcelain-style entries with created/modified/deleted classification).",parameters:f,execute:async(e,t)=>{let a=g((0,d.h_)(t,"path",{label:"path"})),i=await (0,u.fG)(a);return(0,s.JX)(JSON.stringify({tool:"git_status",toolCallId:e,cwd:a,count:i.entries.length})),await h("tools.gitStatus.result",{path:a,count:String(i.entries.length)}),(0,d.Ao)(i)}},{name:"git_init",label:"Git Init",description:"Initialize git in the project when not versionized: create .gitignore with standard patterns, then initial commit.",parameters:k,execute:async(e,t)=>{let a=g((0,d.h_)(t,"path",{label:"path"})),i=(0,d.h_)(t,"projectName",{label:"projectName"}),r=await (0,p.c6)({dir:a,projectName:i}),o={cwd:a,...r};return(0,s.JX)(JSON.stringify({tool:"git_init",toolCallId:e,cwd:a,result:r})),await h("tools.gitInit.result",{path:a,initialized:r.initialized?"yes":"no",committed:r.committed?"yes":"no"}),(0,d.Ao)(o)}},{name:"git_add",label:"Git Add",description:"Stage file paths in the project git repository.",parameters:v,execute:async(e,t)=>{let a=g((0,d.h_)(t,"path",{label:"path"})),i=await (0,u.Iv)(a);if(!i)throw Error(`Not a git repository: ${a}`);let r=Array.isArray(t.filepaths)?t.filepaths.map(e=>String(e).trim()).filter(Boolean):[];if(0===r.length)throw Error("filepaths required");let{staged:o,skipped:n}=await (0,u.vx)({dir:i,filepaths:r});return(0,s.JX)(JSON.stringify({tool:"git_add",toolCallId:e,cwd:i,staged:o})),await h("tools.gitAdd.result",{path:i,count:String(o.length)}),(0,d.Ao)({cwd:i,staged:o,skipped:n})}},{name:"git_commit",label:"Git Commit",description:"Stage paths (or all changes) and create a git commit with a summarized one-line message.",parameters:b,execute:async(e,t)=>{let a=g((0,d.h_)(t,"path",{label:"path"})),i=await (0,u.Iv)(a);if(!i)throw Error(`Not a git repository: ${a}`);let r=(0,d.h_)(t,"message",{required:!0,label:"message"}),o=Array.isArray(t.filepaths)?t.filepaths.map(e=>String(e).trim()).filter(Boolean):void 0,n=!0===(0,d.GE)(t,"stageAll",{defaultValue:null==o||0===o.length}),l=await (0,u.aT)({dir:i,message:r??"",filepaths:o,stageAll:n}),c={cwd:i,...l};return(0,s.JX)(JSON.stringify({tool:"git_commit",toolCallId:e,cwd:i,result:l})),await h("tools.gitCommit.result",{path:i,message:l.commitMessage,staged:String(l.staged.length)}),(0,d.Ao)(c)}},{name:"git_log",label:"Git Log",description:"List recent git commits in the project repository.",parameters:w,execute:async(e,t)=>{let a=g((0,d.h_)(t,"path",{label:"path"})),i=await (0,u.Iv)(a);if(!i)throw Error(`Not a git repository: ${a}`);let r=(0,d.jV)(t,"depth",{integer:!0,defaultValue:10}),o=await (0,u.PC)({dir:i,depth:r}),n={cwd:i,count:o.length,commits:o};return(0,s.JX)(JSON.stringify({tool:"git_log",toolCallId:e,cwd:i,count:o.length})),await h("tools.gitLog.result",{path:i,count:String(o.length)}),(0,d.Ao)(n)}},{name:"git_rollback",label:"Git Rollback",description:"Roll back local git commits (soft/mixed/hard). Default soft keeps changes staged. Does not touch remotes. Refuses to remove the root commit.",parameters:y,execute:async(e,t)=>{let a=g((0,d.h_)(t,"path",{label:"path"})),i=await (0,u.Iv)(a);if(!i)throw Error(`Not a git repository: ${a}`);let r=(0,d.jV)(t,"steps",{integer:!0,defaultValue:1}),o=(0,d.h_)(t,"mode",{label:"mode"})??"soft",n=(0,d.h_)(t,"commitOid",{label:"commitOid"}),l=await (0,u.xF)({dir:i,steps:r??1,mode:o,commitOid:n||void 0}),c={cwd:i,...l};return(0,s.JX)(JSON.stringify({tool:"git_rollback",toolCallId:e,cwd:i,result:l})),await h("tools.gitRollback.result",{path:i,mode:l.mode,steps:String(l.steps),target:l.targetOid.slice(0,7)}),(0,d.Ao)(c)}}];i()}catch(e){i(e)}})},9628(e,t,a){function i(e){let t=".pithosai/\nlogs/\n\n",a="node_modules/\n.env\ncoverage/\n*.log\nnpm-debug.log*\n.DS_Store";return"python"===e?t+"__pycache__/\n*.py[cod]\n*$py.class\n.env\nvenv/\n.venv/\n.pytest_cache/\n.mypy_cache/\n*.egg-info/\n.eggs/\ndist/\nbuild/":"ts"===e?t+a+"\ndist/\n":t+a}a.d(t,{ei:()=>i,iK:()=>o,m0:()=>n});let r=[{label:"Pithos AI",patterns:[".pithosai/","logs/",".env","coverage/","*.log","npm-debug.log*",".DS_Store","dist/","build/"]},{label:"JavaScript / TypeScript",patterns:["node_modules/",".next/",".nuxt/",".parcel-cache/",".turbo/","out/","*.tsbuildinfo"]},{label:"Python",patterns:["__pycache__/","*.py[cod]","*$py.class","venv/",".venv/",".pytest_cache/",".mypy_cache/","*.egg-info/",".eggs/",".tox/",".ruff_cache/"]},{label:"Java",patterns:["target/","*.class","*.jar","*.war","*.ear",".gradle/",".idea/","*.iml"]},{label:"Go",patterns:["bin/","*.exe","*.test","go.work","go.work.sum"]},{label:"Rust",patterns:["target/","**/*.rs.bk"]},{label:"Dart / Flutter",patterns:[".dart_tool/",".packages",".pub-cache/",".pub/",".flutter-plugins",".flutter-plugins-dependencies",".metadata"]},{label:"C / C++",patterns:["*.o","*.obj","*.a","*.lib","*.so","*.dll","*.dylib","*.out","*.app","cmake-build-*/","CMakeFiles/","CMakeCache.txt"]},{label:"PHP",patterns:["vendor/","composer.phar",".phpunit.result.cache",".phpunit.cache"]}];function o(){var e=r.flatMap(e=>e.patterns);let t=new Set,a=[];for(let i of e)t.has(i)||(t.add(i),a.push(i));return a}function n(){let e=r.map(e=>[`# ${e.label}`,...e.patterns].join("\n")).join("\n\n");return`${e}
|
|
177
177
|
`}},2120(e,t,a){a.a(e,async function(e,i){try{a.d(t,{G2:()=>n.G2});var r=a(7163),o=a(9898),n=a(5227),s=a(3734),l=e([r,o,n,s]);[r,o,n,s]=l.then?(await l)():l,i()}catch(e){i(e)}})},7163(e,t,a){a.a(e,async function(e,i){try{a.d(t,{c6:()=>h,tA:()=>f,y:()=>u});var r=a(3024),o=a(1455),n=a(6760),s=a(9155),l=a(9628),d=a(4071),c=e([s,d]);[s,d]=c.then?(await c)():c;let f={name:"Pithos AI",email:"pithosai@localhost"};async function u(e){let t=(0,n.resolve)(e);try{let e=(0,n.join)(t,".git");return(await (0,o.stat)(e)).isDirectory()}catch{return!1}}async function p(e){let t=(0,n.resolve)(e),a=(0,n.join)(t,".gitignore"),i=(0,l.iK)(),r=null;try{await (0,o.stat)(a),r=await (0,o.readFile)(a,"utf-8")}catch{}if(null==r)try{return await (0,o.writeFile)(a,(0,l.m0)(),"utf-8"),(0,d.JX)(`[project-git-init] created .gitignore: ${a}`),!0}catch(e){return console.error(`[project-git-init] create .gitignore failed for ${t}: ${String(e?.message??e)}`),!1}let s=function(e,t=(0,l.iK)()){let a=function(e){let t=new Set;for(let a of String(e??"").split(/\r?\n/)){let e=a.trim();!e||e.startsWith("#")||t.add(e)}return t}(e);return t.filter(e=>!a.has(e))}(r,i);if(0===s.length)return(0,d.JX)(`[project-git-init] .gitignore already contains standard patterns: ${a}`),!1;try{let e=function(e,t){if(0===t.length)return e;let a=String(e??"").replace(/\s+$/,""),i=["","# Standard ignores (Pithos AI)",...t,""].join("\n");return a.length>0?`${a}${i}`:`${t.join("\n")}
|
|
178
|
-
`}(r,s);return await (0,o.writeFile)(a,e,"utf-8"),(0,d.JX)(`[project-git-init] appended missing .gitignore patterns (${s.join(", ")}): ${a}`),!0}catch(e){return console.error(`[project-git-init] update .gitignore failed for ${t}: ${String(e?.message??e)}`),!1}}async function m(e,t=""){let a,i=t?(0,n.join)(e,t):e,r=[];try{a=await (0,o.readdir)(i,{withFileTypes:!0})}catch(e){return console.error(`[project-git-init] listProjectFilePaths failed for ${i}: ${String(e?.message??e)}`),r}for(let i of a){let a=t?`${t}/${i.name}`:i.name;if(!(".git"===a||a.startsWith(".git/"))){if(i.isDirectory()){r.push(...await m(e,a));continue}(i.isFile()||i.isSymbolicLink())&&r.push(a.replace(/\\/g,"/"))}}return r}async function g(e){let{dir:t,filepaths:a}=e,i=0;for(let e of a)try{if(await s.default.isIgnored({fs:r,dir:t,filepath:e}))continue;await s.default.add({fs:r,dir:t,filepath:e}),i+=1}catch(t){console.error(`[project-git-init] stage file failed (${e}): ${String(t?.message??t)}`)}return i}async function h(e){var t;let a,i,o=(0,n.resolve)(e.dir),l={initialized:!1,committed:!1};if(await u(o))return(0,d.JX)(`[project-git-init] already versionized: ${o}`),l;try{await s.default.init({fs:r,dir:o,defaultBranch:"main"}),(0,d.JX)(`[project-git-init] initialized repository: ${o}`)}catch(e){return console.error(`[project-git-init] git init failed for ${o}: ${String(e?.message??e)}`),l}let c=(t={projectName:e.projectName,projectPath:o,t:e.t},a=(0,n.resolve)(t.projectPath),i="string"==typeof t.projectName&&""!==t.projectName.trim()?t.projectName.trim():(0,n.basename)(a),"function"==typeof t.t?t.t("run.project.gitInitCommitMessage",{name:i,path:a}):`Initialize project "${i}"`);await p(o);let h=await m(o),k=await g({dir:o,filepaths:h});if(0===k)return(0,d.JX)(`[project-git-init] no files staged for initial commit: ${o}`),{initialized:!0,committed:!1,commitMessage:c};try{return await s.default.commit({fs:r,dir:o,message:c,author:f}),(0,d.JX)(`[project-git-init] initial commit created (${k} files): ${o}`),{initialized:!0,committed:!0,commitMessage:c}}catch(e){return console.error(`[project-git-init] initial commit failed for ${o}: ${String(e?.message??e)}`),{initialized:!0,committed:!1,commitMessage:c}}}i()}catch(e){i(e)}})},9898(e,t,a){a.a(e,async function(e,i){try{a.d(t,{W8:()=>h,Wo:()=>g,Y9:()=>f,bm:()=>m,eY:()=>p});var r=a(3024),o=a(6760),n=a(9155),s=a(7163),l=a(5939),d=a(4071),c=e([l,s,n,d]);async function u(e){let t=await (0,l.G)({dir:e,args:["status","--porcelain=v1","-uall"],timeoutMs:15e3});if(null==t)return null;let a=new Map;for(let e of t.split("\n")){let t=function(e){let t=e.trimEnd();if(t.length<4)return null;let a=t[0],i=t[1],r=t.slice(3).trim();if(r.includes(" -> ")){let e=r.split(" -> ");r=e[e.length-1].trim()}return(r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\")),r)?{path:r.replace(/\\/g,"/"),indexStatus:a,workTreeStatus:i}:null}(e);t&&a.set(t.path,t)}return a}async function p(e){let t=(0,o.resolve)(e);try{if(!await (0,s.y)(t))return null;let e=await u(t);if(e)return(0,d.JX)(`workspace-snapshot: captured git status via cli in ${t} (${e.size} entries)`),{entries:e};let a=await n.default.statusMatrix({fs:r,dir:t}),i=function(e){let t=new Map;for(let a of e){let[e,i,r,o]=a,n=function(e,t,a,i){if(t===a&&a===i)return null;let r=e.replace(/\\/g,"/");if(0===t&&0===i&&2===a)return{path:r,indexStatus:"?",workTreeStatus:"?"};let o=" ",n=" ";return(2===i?o=0===t?"A":"M":0===i&&1===t&&(o="D"),0===a?n="D":2===a&&(1===i||2===i&&1===t?n="M":2===i&&0===t&&(n=" "))," "===o&&" "===n)?null:{path:r,indexStatus:o,workTreeStatus:n}}(e,i,r,o);n&&t.set(n.path,n)}return t}(a);return(0,d.JX)(`workspace-snapshot: captured git status in ${t}`),{entries:i}}catch(e){return(0,d.JX)(`workspace-snapshot: git snapshot skipped for ${t}: ${String(e?.message??e)}`),null}}function m(e){return`${e.indexStatus}${e.workTreeStatus}`.includes("D")?"deleted":"?"===e.indexStatus&&"?"===e.workTreeStatus||"A"===e.indexStatus||"A"===e.workTreeStatus?"created":("M"===e.indexStatus||"M"===e.workTreeStatus||"R"===e.indexStatus||"R"===e.workTreeStatus||"C"===e.indexStatus||e.workTreeStatus,"modified")}function g(e,t){let a=(0,o.resolve)(e),i=(0,o.resolve)(a,t),r=(0,o.relative)(a,i);return r.startsWith("..")||""===r?t.replace(/\\/g,"/"):r.replace(/\\/g,"/")}function h(e,t,a){if(!e||!t)return{created:[],modified:[],deleted:[]};let i=new Set,r=new Set,o=new Set;for(let n of new Set([...e.entries.keys(),...t.entries.keys()])){let s=g(a,n),l=e.entries.get(n),d=t.entries.get(n);if(!l&&d){let e=m(d);"created"===e?i.add(s):"deleted"===e?o.add(s):r.add(s);continue}if(l&&!d){o.add(s);continue}if(l&&d){let e=`${l.indexStatus}${l.workTreeStatus}:${l.path}`,t=`${d.indexStatus}${d.workTreeStatus}:${d.path}`;if(e!==t){let e=m(d);"created"===e?i.add(s):"deleted"===e?o.add(s):r.add(s)}}}return{created:[...i].sort(),modified:[...r].sort(),deleted:[...o].sort()}}function f(e,t){let a=(e,t)=>[...new Set([...e,...t])].sort();return{created:a(e.created,t.created),modified:a(e.modified.filter(a=>!e.created.includes(a)&&!t.created.includes(a)),t.modified.filter(a=>!e.created.includes(a)&&!t.created.includes(a))),deleted:a(e.deleted,t.deleted)}}[l,s,n,d]=c.then?(await c)():c,i()}catch(e){i(e)}})},9243(e,t,a){a.a(e,async function(e,i){try{a.d(t,{G:()=>w});var r=a(3513),o=a(3772),n=a(4508),s=a(1942),l=a(1305),d=a(3591),c=a(6935),u=a(68),p=a(1549),m=a(7619),g=a(224),h=a(3722),f=a(3734),k=a(7536),v=e([r,p,m,g,o,n,s,c,l,u,d,h,f]);function b(e,t){return null==e||e.has(t.toLowerCase())}async function w(e,t,a,i={}){let v=i.allowNames??null,y=e?.tools?{config:{tools:e.tools}}:{},S=[];if(b(v,"list_files")&&S.push(r.i),b(v,"read_pdf")&&S.push(p.Hw),b(v,"playwright_view_markdown")&&S.push(m.Ef),b(v,"notify_npc")&&S.push(g.p),b(v,"exec")&&S.push(o.w),b(v,"queue_exec")&&S.push(o.Z),a){let e=null==v||v.has("customer_tools")||v.has("custom_tools");try{let t=await (0,k.ZU)(a);if(e)S.push(...t);else for(let e of t){let t=String(e.name??"").toLowerCase();v?.has(t)&&S.push(e)}}catch(e){console.warn(`Failed to load custom tools: ${e.message}`)}}let P=(0,n.dW)(y);P&&b(v,"web_fetch")&&S.push(P);let T=(0,s.t)(y);T&&b(v,"web_search")&&S.push(T);let A=(0,c.Q)(y);A&&b(v,"proxy_downloader")&&S.push(A);let I=t?(0,l.XN)(e,t):null;I&&b(v,"read_email")&&S.push(I);let E=t?(0,l.jI)(e,t):null;E&&b(v,"send_email")&&S.push(E);let C=(0,u.Ei)(y);C&&b(v,"html_to_markdown")&&S.push(C);let R=(0,u.Gz)(y);R&&b(v,"markdown_to_html")&&S.push(R);let
|
|
178
|
+
`}(r,s);return await (0,o.writeFile)(a,e,"utf-8"),(0,d.JX)(`[project-git-init] appended missing .gitignore patterns (${s.join(", ")}): ${a}`),!0}catch(e){return console.error(`[project-git-init] update .gitignore failed for ${t}: ${String(e?.message??e)}`),!1}}async function m(e,t=""){let a,i=t?(0,n.join)(e,t):e,r=[];try{a=await (0,o.readdir)(i,{withFileTypes:!0})}catch(e){return console.error(`[project-git-init] listProjectFilePaths failed for ${i}: ${String(e?.message??e)}`),r}for(let i of a){let a=t?`${t}/${i.name}`:i.name;if(!(".git"===a||a.startsWith(".git/"))){if(i.isDirectory()){r.push(...await m(e,a));continue}(i.isFile()||i.isSymbolicLink())&&r.push(a.replace(/\\/g,"/"))}}return r}async function g(e){let{dir:t,filepaths:a}=e,i=0;for(let e of a)try{if(await s.default.isIgnored({fs:r,dir:t,filepath:e}))continue;await s.default.add({fs:r,dir:t,filepath:e}),i+=1}catch(t){console.error(`[project-git-init] stage file failed (${e}): ${String(t?.message??t)}`)}return i}async function h(e){var t;let a,i,o=(0,n.resolve)(e.dir),l={initialized:!1,committed:!1};if(await u(o))return(0,d.JX)(`[project-git-init] already versionized: ${o}`),l;try{await s.default.init({fs:r,dir:o,defaultBranch:"main"}),(0,d.JX)(`[project-git-init] initialized repository: ${o}`)}catch(e){return console.error(`[project-git-init] git init failed for ${o}: ${String(e?.message??e)}`),l}let c=(t={projectName:e.projectName,projectPath:o,t:e.t},a=(0,n.resolve)(t.projectPath),i="string"==typeof t.projectName&&""!==t.projectName.trim()?t.projectName.trim():(0,n.basename)(a),"function"==typeof t.t?t.t("run.project.gitInitCommitMessage",{name:i,path:a}):`Initialize project "${i}"`);await p(o);let h=await m(o),k=await g({dir:o,filepaths:h});if(0===k)return(0,d.JX)(`[project-git-init] no files staged for initial commit: ${o}`),{initialized:!0,committed:!1,commitMessage:c};try{return await s.default.commit({fs:r,dir:o,message:c,author:f}),(0,d.JX)(`[project-git-init] initial commit created (${k} files): ${o}`),{initialized:!0,committed:!0,commitMessage:c}}catch(e){return console.error(`[project-git-init] initial commit failed for ${o}: ${String(e?.message??e)}`),{initialized:!0,committed:!1,commitMessage:c}}}i()}catch(e){i(e)}})},9898(e,t,a){a.a(e,async function(e,i){try{a.d(t,{W8:()=>h,Wo:()=>g,Y9:()=>f,bm:()=>m,eY:()=>p});var r=a(3024),o=a(6760),n=a(9155),s=a(7163),l=a(5939),d=a(4071),c=e([l,s,n,d]);async function u(e){let t=await (0,l.G)({dir:e,args:["status","--porcelain=v1","-uall"],timeoutMs:15e3});if(null==t)return null;let a=new Map;for(let e of t.split("\n")){let t=function(e){let t=e.trimEnd();if(t.length<4)return null;let a=t[0],i=t[1],r=t.slice(3).trim();if(r.includes(" -> ")){let e=r.split(" -> ");r=e[e.length-1].trim()}return(r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\")),r)?{path:r.replace(/\\/g,"/"),indexStatus:a,workTreeStatus:i}:null}(e);t&&a.set(t.path,t)}return a}async function p(e){let t=(0,o.resolve)(e);try{if(!await (0,s.y)(t))return null;let e=await u(t);if(e)return(0,d.JX)(`workspace-snapshot: captured git status via cli in ${t} (${e.size} entries)`),{entries:e};let a=await n.default.statusMatrix({fs:r,dir:t}),i=function(e){let t=new Map;for(let a of e){let[e,i,r,o]=a,n=function(e,t,a,i){if(t===a&&a===i)return null;let r=e.replace(/\\/g,"/");if(0===t&&0===i&&2===a)return{path:r,indexStatus:"?",workTreeStatus:"?"};let o=" ",n=" ";return(2===i?o=0===t?"A":"M":0===i&&1===t&&(o="D"),0===a?n="D":2===a&&(1===i||2===i&&1===t?n="M":2===i&&0===t&&(n=" "))," "===o&&" "===n)?null:{path:r,indexStatus:o,workTreeStatus:n}}(e,i,r,o);n&&t.set(n.path,n)}return t}(a);return(0,d.JX)(`workspace-snapshot: captured git status in ${t}`),{entries:i}}catch(e){return(0,d.JX)(`workspace-snapshot: git snapshot skipped for ${t}: ${String(e?.message??e)}`),null}}function m(e){return`${e.indexStatus}${e.workTreeStatus}`.includes("D")?"deleted":"?"===e.indexStatus&&"?"===e.workTreeStatus||"A"===e.indexStatus||"A"===e.workTreeStatus?"created":("M"===e.indexStatus||"M"===e.workTreeStatus||"R"===e.indexStatus||"R"===e.workTreeStatus||"C"===e.indexStatus||e.workTreeStatus,"modified")}function g(e,t){let a=(0,o.resolve)(e),i=(0,o.resolve)(a,t),r=(0,o.relative)(a,i);return r.startsWith("..")||""===r?t.replace(/\\/g,"/"):r.replace(/\\/g,"/")}function h(e,t,a){if(!e||!t)return{created:[],modified:[],deleted:[]};let i=new Set,r=new Set,o=new Set;for(let n of new Set([...e.entries.keys(),...t.entries.keys()])){let s=g(a,n),l=e.entries.get(n),d=t.entries.get(n);if(!l&&d){let e=m(d);"created"===e?i.add(s):"deleted"===e?o.add(s):r.add(s);continue}if(l&&!d){o.add(s);continue}if(l&&d){let e=`${l.indexStatus}${l.workTreeStatus}:${l.path}`,t=`${d.indexStatus}${d.workTreeStatus}:${d.path}`;if(e!==t){let e=m(d);"created"===e?i.add(s):"deleted"===e?o.add(s):r.add(s)}}}return{created:[...i].sort(),modified:[...r].sort(),deleted:[...o].sort()}}function f(e,t){let a=(e,t)=>[...new Set([...e,...t])].sort();return{created:a(e.created,t.created),modified:a(e.modified.filter(a=>!e.created.includes(a)&&!t.created.includes(a)),t.modified.filter(a=>!e.created.includes(a)&&!t.created.includes(a))),deleted:a(e.deleted,t.deleted)}}[l,s,n,d]=c.then?(await c)():c,i()}catch(e){i(e)}})},9243(e,t,a){a.a(e,async function(e,i){try{a.d(t,{G:()=>w});var r=a(3513),o=a(3772),n=a(4508),s=a(1942),l=a(1305),d=a(3591),c=a(6935),u=a(68),p=a(1549),m=a(7619),g=a(224),h=a(3722),f=a(3734),k=a(7536),v=e([r,p,m,g,o,n,s,c,l,u,d,h,f]);function b(e,t){return null==e||e.has(t.toLowerCase())}async function w(e,t,a,i={}){let v=i.allowNames??null,y=e?.tools?{config:{tools:e.tools}}:{},S=[];if(b(v,"list_files")&&S.push(r.i),b(v,"read_pdf")&&S.push(p.Hw),b(v,"playwright_view_markdown")&&S.push(m.Ef),b(v,"notify_npc")&&S.push(g.p),b(v,"exec")&&S.push(o.w),b(v,"queue_exec")&&S.push(o.Z),a){let e=null==v||v.has("customer_tools")||v.has("custom_tools");try{let t=await (0,k.ZU)(a);if(e)S.push(...t);else for(let e of t){let t=String(e.name??"").toLowerCase();v?.has(t)&&S.push(e)}}catch(e){console.warn(`Failed to load custom tools: ${e.message}`)}}let P=(0,n.dW)(y);P&&b(v,"web_fetch")&&S.push(P);let T=(0,s.t)(y);T&&b(v,"web_search")&&S.push(T);let A=(0,c.Q)(y);A&&b(v,"proxy_downloader")&&S.push(A);let I=t?(0,l.XN)(e,t):null;I&&b(v,"read_email")&&S.push(I);let E=t?(0,l.jI)(e,t):null;E&&b(v,"send_email")&&S.push(E);let C=(0,u.Ei)(y);C&&b(v,"html_to_markdown")&&S.push(C);let R=(0,u.Gz)(y);R&&b(v,"markdown_to_html")&&S.push(R);let x=(0,d.H)();x&&b(v,"wechat_publish_article")&&S.push(x);let L=(0,d.f)();for(let e of(L&&b(v,"wechat_generate_cover_image")&&S.push(L),h.k1))b(v,e.name)&&S.push(e);for(let e of f.QY)b(v,e.name)&&S.push(e);return S}[r,p,m,g,o,n,s,c,l,u,d,h,f]=v.then?(await v)():v,i()}catch(e){i(e)}})},3513(e,t,a){a.a(e,async function(e,i){try{a.d(t,{i:()=>m});var r=a(1455),o=a(6760),n=a(4204),s=a(4071),l=a(7648),d=a(8362),c=a(4768),u=a(3122),p=e([n,s,c,d,l]);[n,s,c,d,l]=p.then?(await p)():p;let m={name:"list_files",label:"List Files",description:"List files and directories in a directory. Use to explore the project. Default is the current project directory.",parameters:n.Type.Object({path:n.Type.Optional(n.Type.String({description:"Directory path to list (relative to project or absolute). Omit for current directory."}))}),execute:async(e,t,a,i)=>{let n=t.path&&(0,o.resolve)(process.cwd(),t.path)||process.cwd(),p=await (0,r.readdir)(n,{withFileTypes:!0}),m=p.map(e=>e.isDirectory()?`${e.name}/`:e.name),g={path:n,count:p.length,entries:m};(0,s.JX)(JSON.stringify({tool:"list_files",toolCallId:e,params:t,payload:g}));let h=await (0,c.s)(process.cwd()),f=h?.lang??(0,d.ao)(),k=(0,d.lW)(f);return(0,l.Uz)(k("tools.listFiles.result",{path:n,count:g.count})),(0,u.Ao)(g)}};i()}catch(e){i(e)}})},68(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Ei:()=>c,Gz:()=>u,LZ:()=>p});var r=a(4204),o=a(3122),n=a(8703),s=e([n,r]);function l(e,t={}){if(!e||"string"!=typeof e)return"";let{forWechat:a,...i}=t;if(a)return function(e,t={}){let a=[],{Renderer:i}=n.marked,r=new i;r.paragraph=function(e){let t=this.parser.parseInline(e.tokens);return`<p style="${m}">${t}</p>
|
|
179
179
|
`},r.heading=function(e){let t=this.parser.parseInline(e.tokens);return`<h${e.depth} style="${g(e.depth)}">${t}</h${e.depth}>
|
|
180
180
|
`},r.blockquote=function(e){let t=this.parser.parse(e.tokens);return`<blockquote style="${h}">
|
|
181
181
|
${t}</blockquote>
|
|
@@ -360,19 +360,19 @@ ${o} ${n}
|
|
|
360
360
|
- ${a}`:""})).replace(/<(br|hr)\s*\/?>/gi,"\n").replace(/<\/(p|div|section|article|header|footer|table|tr|ul|ol)>/gi,"\n"),{text:o=r(o=i(o)),title:a}}function n(e){let t=e;return r(t=(t=(t=(t=(t=(t=(t=t.replace(/!\[[^\]]*]\([^)]+\)/g,"")).replace(/\[([^\]]+)]\([^)]+\)/g,"$1")).replace(/```[\s\S]*?```/g,e=>e.replace(/```[^\n]*\n?/g,"").replace(/```/g,""))).replace(/`([^`]+)`/g,"$1")).replace(/^#{1,6}\s+/gm,"")).replace(/^\s*[-*+]\s+/gm,"")).replace(/^\s*\d+\.\s+/gm,""))}function s(e,t){return e.length<=t?{text:e,truncated:!1}:{text:e.slice(0,t),truncated:!0}}async function l(e){let t=()=>{let t=o(e.html);return"text"===e.extractMode?{text:n(t.text)||r(i(e.html)),title:t.title}:t};try{let[{Readability:i},{parseHTML:n}]=await Promise.all([a.e("511").then(a.bind(a,5522)),a.e("691").then(a.bind(a,4382))]),{document:s}=n(e.html);try{s.baseURI=e.url}catch{}let l=new i(s,{charThreshold:0}).parse();if(!l?.content)return t();let d=l.title||void 0;if("text"===e.extractMode){let e=r(l.textContent??"");return e?{text:e,title:d}:t()}let c=o(l.content);return{text:c.text,title:d??c.title}}catch{return t()}}a.d(t,{EJ:()=>s,Yj:()=>o,it:()=>n,rm:()=>l})},4508(e,t,a){a.a(e,async function(e,i){try{a.d(t,{dW:()=>h});var r=a(4204),o=a(3122),n=a(178),s=a(4671),l=a(2696),d=e([r,n]);[r,n]=d.then?(await d)():d;let f=n.nd,k="https://api.firecrawl.dev",v=new Map;function c(e){if(!(!e||"object"!=typeof e||Array.isArray(e)))return e}let b=r.Type.Object({url:r.Type.String({description:"HTTP or HTTPS URL to fetch."}),extractMode:r.Type.Optional(r.Type.Union([r.Type.Literal("markdown"),r.Type.Literal("text")],{description:'Extraction mode ("markdown" or "text"). Default: markdown.'})),maxChars:r.Type.Optional(r.Type.Number({description:"Maximum characters to return (truncates when exceeded).",minimum:100}))});async function u(e){let t=(0,s.wj)(void 0,1e3*e.timeoutSeconds),a=new Set,i=e.url,r=0;for(;;){var o;let n;try{n=new URL(i)}catch{throw Error("Invalid URL: must be http or https")}if(!["http:","https:"].includes(n.protocol))throw Error("Invalid URL: must be http or https");!function(e){let t=e.toLowerCase().trim();if(!t)throw Error("Invalid hostname");if("localhost"===t||t.endsWith(".localhost"))throw Error("Blocked: localhost not allowed");if("[::1]"===t||"::1"===t)throw Error("Blocked: loopback not allowed");let a=t.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);if(a){let e=Number.parseInt(a[1],10),t=Number.parseInt(a[2],10);if(Number.parseInt(a[3],10),Number.parseInt(a[4],10),127===e)throw Error("Blocked: loopback not allowed");if(10===e||172===e&&t>=16&&t<=31||192===e&&168===t)throw Error("Blocked: private network not allowed")}}(n.hostname);let s=await fetch(n.toString(),{method:"GET",headers:{Accept:"*/*","User-Agent":e.userAgent,"Accept-Language":"en-US,en;q=0.9"},signal:t,redirect:"manual"});if(o=s.status,301===o||302===o||303===o||307===o||308===o){let t=s.headers.get("location");if(!t)throw Error(`Redirect missing location header (${s.status})`);if((r+=1)>e.maxRedirects)throw Error(`Too many redirects (limit: ${e.maxRedirects})`);let o=new URL(t,n).toString();if(a.has(o))throw Error("Redirect loop detected");a.add(o),s.body?.cancel(),i=o;continue}return{response:s,finalUrl:i}}}async function p(e){let t=function(e){let t=e.trim();if(!t)return`${k}/v2/scrape`;try{let e=new URL(t);if(e.pathname&&"/"!==e.pathname)return e.toString();return e.pathname="/v2/scrape",e.toString()}catch{return`${k}/v2/scrape`}}(e.baseUrl),a={url:e.url,formats:["markdown"],onlyMainContent:e.onlyMainContent,timeout:1e3*e.timeoutSeconds,maxAge:e.maxAgeMs,proxy:e.proxy,storeInCache:e.storeInCache},i=await fetch(t,{method:"POST",headers:{Authorization:`Bearer ${e.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify(a),signal:(0,s.wj)(void 0,1e3*e.timeoutSeconds)}),r=await i.json();if(!i.ok||r?.success===!1){let e=r?.error||i.statusText;throw Error(`Firecrawl fetch failed (${i.status}): ${e}`.trim())}let o=r?.data??{},n="string"==typeof o.markdown?o.markdown:"string"==typeof o.content?o.content:"";return{text:"text"===e.extractMode?(0,l.it)(n):n,title:o.metadata?.title,finalUrl:o.metadata?.sourceURL,status:o.metadata?.statusCode,warning:r?.warning}}async function m(e){let t,a,i,r=(0,s.dU)(`fetch:${e.url}:${e.extractMode}:${e.maxChars}`),o=(0,s.xe)(v,r);if(o)return{...o.value,cached:!0};try{t=new URL(e.url)}catch{throw Error("Invalid URL: must be http or https")}if(!["http:","https:"].includes(t.protocol))throw Error("Invalid URL: must be http or https");let n=Date.now(),d=e.url;try{let t=await u({url:e.url,maxRedirects:e.maxRedirects,timeoutSeconds:e.timeoutSeconds,userAgent:e.userAgent});a=t.response,d=t.finalUrl}catch(t){if(e.firecrawlEnabled&&e.firecrawlApiKey){let t=await p({url:d,extractMode:e.extractMode,apiKey:e.firecrawlApiKey,baseUrl:e.firecrawlBaseUrl,onlyMainContent:e.firecrawlOnlyMainContent,maxAgeMs:e.firecrawlMaxAgeMs,proxy:e.firecrawlProxy,storeInCache:e.firecrawlStoreInCache,timeoutSeconds:e.firecrawlTimeoutSeconds}),a=(0,l.EJ)(t.text,e.maxChars),i={url:e.url,finalUrl:t.finalUrl||d,status:t.status??200,contentType:"text/markdown",title:t.title,extractMode:e.extractMode,extractor:"firecrawl",truncated:a.truncated,length:a.text.length,fetchedAt:new Date().toISOString(),tookMs:Date.now()-n,text:a.text,warning:t.warning};return(0,s.aR)(v,r,i,e.cacheTtlMs),i}throw t}if(!a.ok){if(e.firecrawlEnabled&&e.firecrawlApiKey){let t=await p({url:e.url,extractMode:e.extractMode,apiKey:e.firecrawlApiKey,baseUrl:e.firecrawlBaseUrl,onlyMainContent:e.firecrawlOnlyMainContent,maxAgeMs:e.firecrawlMaxAgeMs,proxy:e.firecrawlProxy,storeInCache:e.firecrawlStoreInCache,timeoutSeconds:e.firecrawlTimeoutSeconds}),i=(0,l.EJ)(t.text,e.maxChars),o={url:e.url,finalUrl:t.finalUrl||d,status:t.status??a.status,contentType:"text/markdown",title:t.title,extractMode:e.extractMode,extractor:"firecrawl",truncated:i.truncated,length:i.text.length,fetchedAt:new Date().toISOString(),tookMs:Date.now()-n,text:i.text,warning:t.warning};return(0,s.aR)(v,r,o,e.cacheTtlMs),o}let t=await (0,s.BQ)(a),i=function(e){let{detail:t,contentType:a,maxChars:i}=e;if(!t)return"";let r=t,o=a?.toLowerCase();if(o?.includes("text/html")||function(e){let t=e.trimStart();if(!t)return!1;let a=t.slice(0,256).toLowerCase();return a.startsWith("<!doctype html")||a.startsWith("<html")}(t)){let e=(0,l.Yj)(t),a=e.title?`${e.title}
|
|
361
361
|
${e.text}`:e.text;r=(0,l.it)(a)}return(0,l.EJ)(r.trim(),i).text}({detail:t,contentType:a.headers.get("content-type"),maxChars:4e3});throw Error(`Web fetch failed (${a.status}): ${i||a.statusText}`)}let c=a.headers.get("content-type")??"application/octet-stream",m=await (0,s.BQ)(a),h="raw",f=m;if(c.includes("text/html"))if(e.readabilityEnabled){let t=await (0,l.rm)({html:m,url:d,extractMode:e.extractMode});if(t?.text)f=t.text,i=t.title,h="readability";else{let t=await g({...e,url:d});if(t)f=t.text,i=t.title,h="firecrawl";else throw Error("Web fetch extraction failed: Readability and Firecrawl returned no content.")}}else throw Error("Web fetch extraction failed: Readability disabled and Firecrawl unavailable.");else if(c.includes("application/json"))try{f=JSON.stringify(JSON.parse(m),null,2),h="json"}catch{f=m,h="raw"}let k=(0,l.EJ)(f,e.maxChars),b={url:e.url,finalUrl:d,status:a.status,contentType:c,title:i,extractMode:e.extractMode,extractor:h,truncated:k.truncated,length:k.text.length,fetchedAt:new Date().toISOString(),tookMs:Date.now()-n,text:k.text};return(0,s.aR)(v,r,b,e.cacheTtlMs),b}async function g(e){if(!e.firecrawlEnabled||!e.firecrawlApiKey)return null;try{let t=await p({url:e.url,extractMode:e.extractMode,apiKey:e.firecrawlApiKey,baseUrl:e.firecrawlBaseUrl,onlyMainContent:e.firecrawlOnlyMainContent,maxAgeMs:e.firecrawlMaxAgeMs,proxy:e.firecrawlProxy,storeInCache:e.firecrawlStoreInCache,timeoutSeconds:e.firecrawlTimeoutSeconds});return{text:t.text,title:t.title}}catch{return null}}function h(e){var t,a,i;let r,l,d,u,p,g=(t=e?.config,r=c(t?.tools),l=c(r?.web),c(l?.fetch));if(a={fetch:g,sandboxed:e?.sandboxed},"boolean"==typeof a.fetch?.enabled&&!a.fetch.enabled)return null;let h="boolean"!=typeof g?.readability||g.readability,v=c(g?.firecrawl),w=(d=v&&"string"==typeof v.apiKey?v.apiKey.trim():"",u=(process.env.FIRECRAWL_API_KEY??"").trim(),d||u||void 0),y=(i={firecrawl:v,apiKey:w},"boolean"==typeof i.firecrawl?.enabled?i.firecrawl.enabled:!!i.apiKey),S=(v&&"string"==typeof v.baseUrl?v.baseUrl.trim():"")||k,P="boolean"!=typeof v?.onlyMainContent||v.onlyMainContent,T=(p=function(e){let t=e&&"number"==typeof e.maxAgeMs?e.maxAgeMs:void 0;if("number"!=typeof t||!Number.isFinite(t))return;let a=Math.max(0,Math.floor(t));return a>0?a:void 0}(v),"number"==typeof p?p:1728e5),A=(0,s.vc)(v?.timeoutSeconds??g?.timeoutSeconds,30),I=g&&"string"==typeof g.userAgent&&g.userAgent||"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_7_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36";return{label:"Web Fetch",name:"web_fetch",description:"Fetch and extract readable content from a URL (HTML → markdown/text). Use for lightweight page access without browser automation.",parameters:b,execute:async(e,t)=>{var a,i;let r,l,d,u,p=c(t)??{},k=(0,o.h_)(p,"url",{required:!0}),v="text"===(0,o.h_)(p,"extractMode")?"text":"markdown",b=(0,o.jV)(p,"maxChars",{integer:!0}),E=await m({url:k,extractMode:v,maxChars:(a=b??g?.maxChars,r=(0,n.O8)(),l=(0,n.Pl)(r),d="number"==typeof a&&Number.isFinite(a)?a:f,Math.max(100,Math.min(Math.floor(d),l))),maxRedirects:(i=g?.maxRedirects,u="number"==typeof i&&Number.isFinite(i)?i:3,Math.max(0,Math.floor(u))),timeoutSeconds:(0,s.vc)(g?.timeoutSeconds,30),cacheTtlMs:(0,s.d6)(g?.cacheTtlMinutes,15),userAgent:I,readabilityEnabled:h,firecrawlEnabled:y,firecrawlApiKey:w,firecrawlBaseUrl:S,firecrawlOnlyMainContent:P,firecrawlMaxAgeMs:T,firecrawlProxy:"auto",firecrawlStoreInCache:!0,firecrawlTimeoutSeconds:A});return(0,o.Ao)(E,{compact:!0})}}}i()}catch(e){i(e)}})},1942(e,t,a){a.a(e,async function(e,i){try{a.d(t,{t:()=>u});var r=a(4204),o=a(3122),n=a(4671),s=e([r]);r=(s.then?(await s)():s)[0];let p="https://openrouter.ai/api/v1",m="https://api.perplexity.ai",g="perplexity/sonar-pro",h=["pplx-"],f=["sk-or-"],k=new Map,v=r.Type.Object({query:r.Type.String({description:"Search query string."}),count:r.Type.Optional(r.Type.Number({description:"Number of results to return (1-10).",minimum:1,maximum:10})),country:r.Type.Optional(r.Type.String({description:"2-letter country code for region-specific results (e.g., 'DE', 'US', 'ALL'). Default: 'US'."})),search_lang:r.Type.Optional(r.Type.String({description:"ISO language code for search results (e.g., 'de', 'en', 'fr')."})),ui_lang:r.Type.Optional(r.Type.String({description:"ISO language code for UI elements."}))});function l(e){return"string"==typeof e?e.trim():""}async function d(e){let t=`${e.baseUrl.replace(/\/$/,"")}/chat/completions`,a=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`,"HTTP-Referer":"https://clawdbot.com","X-Title":"Web Search"},body:JSON.stringify({model:e.model,messages:[{role:"user",content:e.query}]}),signal:(0,n.wj)(void 0,1e3*e.timeoutSeconds)});if(!a.ok){let e=await (0,n.BQ)(a);throw Error(`Perplexity API error (${a.status}): ${e||a.statusText}`)}let i=await a.json(),r=i.choices?.[0]?.message?.content??"No response",o=i.citations??[];return{content:r,citations:o}}async function c(e){let t=(0,n.dU)(`${e.provider}:${e.query}:${e.count}:${e.country||"default"}:${e.search_lang||"default"}:${e.ui_lang||"default"}`),a=(0,n.xe)(k,t);if(a)return{...a.value,cached:!0};let i=Date.now();if("perplexity"===e.provider){let{content:a,citations:r}=await d({query:e.query,apiKey:e.apiKey,baseUrl:e.perplexityBaseUrl??p,model:e.perplexityModel??g,timeoutSeconds:e.timeoutSeconds}),o={query:e.query,provider:e.provider,model:e.perplexityModel??g,tookMs:Date.now()-i,content:a,citations:r};return(0,n.aR)(k,t,o,e.cacheTtlMs),o}if("brave"!==e.provider)throw Error("Unsupported web search provider.");let r=new URL("https://api.search.brave.com/res/v1/web/search");r.searchParams.set("q",e.query),r.searchParams.set("count",String(e.count)),e.country&&r.searchParams.set("country",e.country),e.search_lang&&r.searchParams.set("search_lang",e.search_lang),e.ui_lang&&r.searchParams.set("ui_lang",e.ui_lang);let o=await fetch(r.toString(),{method:"GET",headers:{Accept:"application/json","X-Subscription-Token":e.apiKey},signal:(0,n.wj)(void 0,1e3*e.timeoutSeconds)});if(!o.ok){let e=await (0,n.BQ)(o);throw Error(`Brave Search API error (${o.status}): ${e||o.statusText}`)}let s=await o.json(),l=(Array.isArray(s.web?.results)?s.web?.results??[]:[]).map(e=>({title:e.title??"",url:e.url??"",description:e.description??"",published:e.age??void 0,siteName:function(e){if(e)try{return new URL(e).hostname}catch{return}}(e.url??"")})),c={query:e.query,provider:e.provider,count:l.length,tookMs:Date.now()-i,results:l};return(0,n.aR)(k,t,c,e.cacheTtlMs),c}function u(e){var t;let a,i=function(e){let t=e?.tools?.web?.search;if(t&&"object"==typeof t)return t}(e?.config);if(t={search:i,sandboxed:e?.sandboxed},"boolean"==typeof t.search?.enabled&&!t.search.enabled)return null;let r=(a=i&&"string"==typeof i.provider?i.provider.trim().toLowerCase():"","perplexity"===a?"perplexity":"brave"),s=function(e){if(!e||"object"!=typeof e)return{};let t=e.perplexity;return t&&"object"==typeof t?t:{}}(i),d="perplexity"===r?"Search the web using Perplexity Sonar (direct or via OpenRouter). Returns AI-synthesized answers with citations from real-time web search.":"Search the web using Brave Search API. Supports region-specific and localized search via country and language parameters. Returns titles, URLs, and snippets for fast research.";return{label:"Web Search",name:"web_search",description:d,parameters:v,execute:async(e,t)=>{let a,d,u,k="perplexity"===r?function(e){let t=l(e?.apiKey);if(t)return{apiKey:t,source:"config"};let a=l(process.env.PERPLEXITY_API_KEY);if(a)return{apiKey:a,source:"perplexity_env"};let i=l(process.env.OPENROUTER_API_KEY);return i?{apiKey:i,source:"openrouter_env"}:{apiKey:void 0,source:"none"}}(s):void 0,v="perplexity"===r?k?.apiKey:(a=i&&"string"==typeof i.apiKey?i.apiKey.trim():"",d=(process.env.BRAVE_API_KEY??"").trim(),a||d||void 0);if(!v)return(0,o.Ao)("perplexity"===r?{error:"missing_perplexity_api_key",message:"web_search (perplexity) needs an API key. Set PERPLEXITY_API_KEY or OPENROUTER_API_KEY, or configure tools.web.search.perplexity.apiKey."}:{error:"missing_brave_api_key",message:"web_search needs a Brave Search API key. Set BRAVE_API_KEY in the environment or configure tools.web.search.apiKey."});let b=t&&"object"==typeof t?t:{},w=(0,o.h_)(b,"query",{required:!0}),y=(0,o.jV)(b,"count",{integer:!0})??i?.maxResults,S=(0,o.h_)(b,"country"),P=(0,o.h_)(b,"search_lang"),T=(0,o.h_)(b,"ui_lang"),A=await c({query:w,count:(u="number"==typeof y&&Number.isFinite(y)?y:5,Math.max(1,Math.min(10,Math.floor(u)))),apiKey:v,timeoutSeconds:(0,n.vc)(i?.timeoutSeconds,30),cacheTtlMs:(0,n.d6)(i?.cacheTtlMinutes,15),provider:r,country:S,search_lang:P,ui_lang:T,perplexityBaseUrl:function(e,t,a){let i=e&&"string"==typeof e.baseUrl?e.baseUrl.trim():"";if(i)return i;if("perplexity_env"===t)return m;if("openrouter_env"===t)return p;if("config"===t){let e=function(e){if(!e)return;let t=e.toLowerCase();return h.some(e=>t.startsWith(e))?"direct":f.some(e=>t.startsWith(e))?"openrouter":void 0}(a);if("direct"===e)return m}return p}(s,k?.source,k?.apiKey),perplexityModel:(s&&"string"==typeof s.model?s.model.trim():"")||g});return(0,o.Ao)(A)}}}i()}catch(e){i(e)}})},4671(e,t,a){function i(e,t){return Math.max(1,Math.floor("number"==typeof e&&Number.isFinite(e)?e:t))}function r(e,t){return Math.round(6e4*("number"==typeof e&&Number.isFinite(e)?Math.max(0,e):t))}function o(e){return e.trim().toLowerCase()}function n(e,t){let a=e.get(t);return a?Date.now()>a.expiresAt?(e.delete(t),null):{value:a.value,cached:!0}:null}function s(e,t,a,i){if(!(i<=0)){if(e.size>=100){let t=e.keys().next();t.done||e.delete(t.value)}e.set(t,{value:a,expiresAt:Date.now()+i,insertedAt:Date.now()})}}function l(e,t){if(t<=0)return e??new AbortController().signal;let a=new AbortController,i=setTimeout(()=>a.abort(),t);return e&&e.addEventListener("abort",()=>{clearTimeout(i),a.abort()},{once:!0}),a.signal.addEventListener("abort",()=>clearTimeout(i),{once:!0}),a.signal}async function d(e){try{return await e.text()}catch{return""}}a.d(t,{BQ:()=>d,aR:()=>s,d6:()=>r,dU:()=>o,vc:()=>i,wj:()=>l,xe:()=>n})},3591(e,t,a){a.a(e,async function(e,i){try{a.d(t,{H:()=>h,f:()=>f});var r=a(4204),o=a(3122),n=e([r]);r=(n.then?(await n)():n)[0];let k="black-forest-labs/flux.2-pro";function s(){let e=process.env.WECHAT_APPID?.trim(),t=process.env.WECHAT_SECRET?.trim(),a=process.env.OPENROUTER_API_KEY?.trim();return e&&t&&a?{appId:e,secret:t,openRouterKey:a,imageModel:process.env.OPENROUTER_IMAGE_MODEL?.trim()||k,author:process.env.WECHAT_AUTHOR?.trim()||"田威 AI",defaultCoverUrl:process.env.DEFAULT_COVER_URL?.trim()||void 0}:null}async function l(e){let t=`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${e.appId}&secret=${e.secret}`,a=await fetch(t),i=await a.json(),r=i?.access_token;if(!r||"string"!=typeof r)throw Error(`Failed to get WeChat token: ${JSON.stringify(i)}`);return r}async function d(e,t,a="16:9"){let i="1:1"!==a?` Aspect ratio: ${a}.`:"",r=`${i} ${t}`.trim(),o=JSON.stringify({model:e.imageModel||k,messages:[{role:"user",content:r}],modalities:["image"]});try{let t,a=await fetch("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${e.openRouterKey}`,"Content-Type":"application/json","HTTP-Referer":process.env.OPENROUTER_REFERRER||"https://github.com/pithosai"},body:o});if(!a.ok)throw console.error("[wechat-tools] OpenRouter API error: HTTP",a.status,a.statusText,"body:",o),Error(`OpenRouter API error: HTTP ${a.status} ${a.statusText}`);let i=(await a.text()).trim();if(!i)throw console.error("[wechat-tools] OpenRouter empty response body:","HTTP",a.status,a.statusText),Error(`OpenRouter API error: HTTP ${a.status} (empty body)`);try{t=JSON.parse(i)}catch(t){let e=i.replace(/\s+/g," ").slice(0,400);throw console.error("[wechat-tools] OpenRouter response is not JSON:","HTTP",a.status,a.statusText,"body preview:",e+(i.length>400?"…":"")),console.debug("[wechat-tools] JSON.parse failed:",t),Error(`OpenRouter API error: HTTP ${a.status} non-JSON body: ${e.slice(0,200)}`)}if(!a.ok){let e="object"==typeof t&&null!==t?JSON.stringify(t):String(t);throw console.error("[wechat-tools] OpenRouter API HTTP error:",a.status,a.statusText,"response:",e,"request body:",o),Error(`OpenRouter API error: HTTP ${a.status} ${a.statusText||""} ${e}`.trim())}let r=t?.choices?.[0]?.message,n=r?.images??r?.content?.filter?.(e=>e?.type==="image"),s=n?.[0]?.image_url?.url??n?.[0]?.imageUrl?.url??n?.[0]?.url;return{output:s||null,status:s?"succeeded":"failed"}}catch(t){let e=t instanceof AggregateError?t.errors.map(e=>e instanceof Error?e.message:String(e)).join("; "):t instanceof Error?t.message:String(t);throw console.error("[wechat-tools] OpenRouter image generation failed:",e,t instanceof Error?t.stack:""),t instanceof Error?t:Error(e)}}async function c(e){if(e.startsWith("data:")){let t=e.replace(/^data:image\/\w+;base64,/,"");return Buffer.from(t,"base64")}let t=await fetch(e);if(!t.ok)throw Error(`Failed to download image: ${t.status}`);let a=await t.arrayBuffer();return Buffer.from(a)}async function u(e,t,a="cover.png"){let i=new FormData,r=new Blob([t],{type:"image/png"});i.append("media",r,a);let o=await fetch(`https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=${e}&type=image`,{method:"POST",body:i}),n=await o.json();if(n?.errcode&&0!==n.errcode)throw Error(`WeChat upload failed: ${n.errmsg||JSON.stringify(n)}`);return n}async function p(e,t){let a=JSON.stringify({articles:[{title:t.title,author:t.author,digest:t.digest,content:t.content,thumb_media_id:t.thumb_media_id,need_open_comment:1,only_fans_can_comment:0}]}),i=await fetch(`https://api.weixin.qq.com/cgi-bin/draft/add?access_token=${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:a}),r=await i.json();if(r?.errcode&&0!==r.errcode)throw Error(`WeChat draft failed: ${r.errmsg||JSON.stringify(r)}`);return r}async function m(e,t,a){let i=(await d(e,t,"16:9")).output;if(i&&!i.startsWith("ERROR"))return{buffer:await c(i)};if(e.defaultCoverUrl)return{buffer:await c(e.defaultCoverUrl)};throw Error("Failed to generate cover and no DEFAULT_COVER_URL provided")}let v=r.Type.Object({title:r.Type.String({description:"WeChat article title."}),content_html:r.Type.String({description:"WeChat article body in HTML."}),cover_prompt:r.Type.String({description:"Prompt for generating the WeChat article cover image."}),digest:r.Type.String({description:"Short summary shown in WeChat article list (recommended 50–100 chars)."})});async function g(e,t){let a=Date.now().toString(36),i=await l(e),{buffer:r}=await m(e,t.cover_prompt,a),o=(await u(i,r,`wechat_cover_${a}.png`)).media_id;if(!o)return{success:!1,error:"Failed to upload cover image"};let n=(await p(i,{title:t.title,author:e.author||"Pithosai AI",digest:t.digest,content:t.content_html,thumb_media_id:o})).media_id;return n?{success:!0,draft_media_id:n}:{success:!1,error:"Failed to create draft"}}function h(){let e=s();return e?{label:"WeChat: Publish Article",name:"wechat_publish_article",description:"Publish an article to WeChat Official Account (公众号) draft box. Generates a cover image, uploads it to WeChat material library, and creates a draft. For WeChat platform only.",parameters:v,execute:async(t,a)=>{let i=a&&"object"==typeof a?a:{},r=(0,o.h_)(i,"title",{required:!0}),n=(0,o.h_)(i,"content_html",{required:!0}),s=(0,o.h_)(i,"cover_prompt",{required:!0}),l=(0,o.h_)(i,"digest",{required:!0});if(!r||!n||!s||!l)throw Error("title, content_html, cover_prompt, and digest are required");try{let t=await g(e,{title:r,content_html:n,cover_prompt:s,digest:l});return(0,o.Ao)(t)}catch(e){return(0,o.Ao)({success:!1,error:e?.message||String(e)})}}}:null}function f(){let e=s();if(!e)return null;let t=r.Type.Object({prompt:r.Type.String({description:"Prompt for WeChat article cover image."}),aspect_ratio:r.Type.Optional(r.Type.Union([r.Type.Literal("1:1"),r.Type.Literal("16:9"),r.Type.Literal("9:16"),r.Type.Literal("4:3"),r.Type.Literal("3:4")],{description:"Cover aspect ratio. Default: 16:9."}))});return{label:"WeChat: Generate Cover Image",name:"wechat_generate_cover_image",description:"Generate a cover image for WeChat Official Account articles. For WeChat platform only. Use before or alongside wechat_publish_article.",parameters:t,execute:async(t,a)=>{let i=a&&"object"==typeof a?a:{},r=(0,o.h_)(i,"prompt",{required:!0}),n=(0,o.h_)(i,"aspect_ratio")||"16:9";if(!r)throw Error("prompt is required");try{let t=await d(e,r,n),a=t.output;return(0,o.Ao)({success:!0,image_url:a,status:t.status})}catch(e){return(0,o.Ao)({success:!1,error:e?.message||String(e)})}}}}i()}catch(e){i(e)}})},6659(e,t,a){a.a(e,async function(e,i){try{a.d(t,{RD:()=>v,RT:()=>k,hd:()=>y,ib:()=>P,mJ:()=>T,n7:()=>S,nG:()=>b,ph:()=>w,ww:()=>m});var r=a(1455),o=a(6760),n=a(8161),s=a(3024),l=a(5012),d=a(2369),c=a(9923),u=e([d]);d=(u.then?(await u)():u)[0];let A=".migrated";function p(){let e=process.env.PITHOSAI_PROJECTS_REGISTRY_PATH;return"string"==typeof e&&""!==e.trim()?e.trim():(0,o.join)(l.qu,"projects.json")}function m(e){let t=String(e??"").trim();return"~"===t?(0,n.homedir)():t.startsWith("~/")?(0,o.join)((0,n.homedir)(),t.slice(2)):t}function g(e){let t=m(e.pathStr);return t.startsWith("/")||/^[A-Za-z]:[\\/]/.test(t)?(0,o.resolve)(t):(0,o.resolve)(e.baseCwd,t)}async function h(e=p()){if(!(0,s.existsSync)(e))return[];try{let t=await (0,r.readFile)(e,"utf8"),a=JSON.parse(t);if(!Array.isArray(a))return[];return a.map(e=>(0,c.mo)(e)).filter(e=>null!=e)}catch{return[]}}async function f(e){let t=p();if(!function(e=p()){return(0,s.existsSync)(e)}(t))return 0;let a=await h(t);if(0===a.length){console.debug("migrateProjectsJsonToDbIfNeeded: legacy projects.json has no valid rows; renaming",t);try{await (0,r.rename)(t,`${t}${A}`)}catch(e){console.error("migrateProjectsJsonToDbIfNeeded: failed to rename legacy projects.json",e)}return 0}for(let t of(console.debug("migrateProjectsJsonToDbIfNeeded: importing legacy projects.json rows",a.length),a))await (0,c.mN)(e,{accountId:c.UP,project:t});try{let e=`${t}${A}`;await (0,r.rename)(t,e),console.debug("migrateProjectsJsonToDbIfNeeded: renamed legacy registry to",e)}catch(e){console.error("migrateProjectsJsonToDbIfNeeded: failed to rename legacy projects.json",e)}return a.length}async function k(e={}){let t=await (0,d.Lf)();await f(t);let a=(0,c.sK)(e.accountId);return(0,c.hB)(t,{accountId:a})}async function v(e,t={}){let a=await (0,d.Lf)();await f(a);let i=(0,c.sK)(t.accountId),r=await (0,c.mN)(a,{accountId:i,project:e});if(!r)throw Error("Failed to upsert virtual project");return r}async function b(e){await (0,r.mkdir)(e,{recursive:!0})}function w(e,t){let a=String(e??"").trim();if(!a)return null;for(let e=0;e<t.length;e++)if(t[e].id===a)return{index:e,project:t[e]};return null}function y(e,t){let a=String(t.projectId??t.id??"").trim();if(a)return w(a,e);if("number"==typeof t.index&&Number.isInteger(t.index)){let a=t.index;return a>=0&&a<e.length?{index:a,project:e[a]}:null}return"string"==typeof t.path&&""!==t.path.trim()?S(t.path,e):null}function S(e,t){let a;try{a=(0,o.resolve)(e)}catch{return null}for(let e=0;e<t.length;e++){let i=t[e];try{if((0,o.resolve)(i.path)===a)return{index:e,project:i}}catch{continue}}return null}function P(e){let t=(0,o.resolve)(e.cwd),a=(0,o.basename)(t),i="string"==typeof e.lang&&""!==e.lang.trim()?e.lang.trim():"en";return{resolvedPath:t,project:{name:a,path:t,lang:i,description:e.t("run.project.createDefaultDescription",{path:t})}}}function T(e,t){let a=String(e??"").replace(/^\s*\/create-project\b\s*/i,"").trim();if(""===a)return{ok:!1,errorKey:"run.project.createUsage"};if(a.startsWith("{")){let e;try{e=JSON.parse(a)}catch{return{ok:!1,errorKey:"run.project.createInvalidJson"}}if(!e||"object"!=typeof e)return{ok:!1,errorKey:"run.project.createMissingFields"};let i=String(e.name??"").trim(),r=String(e.path??"").trim(),o=String(e.lang??"").trim(),n=String(e.description??"").trim();if(!i||!r||!o)return{ok:!1,errorKey:"run.project.createMissingFields"};let s=g({pathStr:r,baseCwd:t});return{ok:!0,project:{name:i,path:s,lang:o,description:n},resolvedPath:s}}let i=/^(\S+)\s+(\S+)\s+(\S+)(?:\s+(.*))?$/s.exec(a);if(!i)return{ok:!1,errorKey:"run.project.createUsage"};let r=String(i[1]??"").trim(),o=String(i[2]??"").trim(),n=String(i[3]??"").trim(),s=String(i[4]??"").trim(),l=g({pathStr:o,baseCwd:t});return{ok:!0,project:{name:r,path:l,lang:n,description:s},resolvedPath:l}}i()}catch(e){i(e)}})},6652(e,t,a){a.a(e,async function(e,i){try{a.d(t,{e:()=>r.e});var r=a(968),o=e([r]);r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},968(e,t,a){a.a(e,async function(e,i){try{a.d(t,{e:()=>d});var r=a(6760),o=a(8476),n=a(2212),s=a(5738),l=e([s,n,o]);function d(e,t){return e.command("add-role <role>").description(t("cli.addRoleDescription")).option("-C, --cwd <dir>",t("cli.cwdOption")).option("-l, --lang <lang>",t("cli.langOption")).action(async function(t){let a=e.opts(),i=this.optsWithGlobals?this.optsWithGlobals():this.opts(),l=(0,r.resolve)(i.cwd||process.cwd()),d=(0,s.lG)(a,i);await (0,n.e)(l,e.opts().logPath),await (0,o.Cm)(l,t,d)})}[s,n,o]=l.then?(await l)():l,i()}catch(e){i(e)}})},8280(e,t,a){a.a(e,async function(e,i){try{a.d(t,{x:()=>r.x});var r=a(9487),o=e([r]);r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},9487(e,t,a){a.a(e,async function(e,i){try{a.d(t,{x:()=>c});var r=a(6760),o=a(2657),n=a(2212),s=a(4071),l=a(5738),d=e([l,n,s,o]);function c(e,t){return e.command("cron-daemon").description(t("cli.cronDaemonDescription")).option("-C, --cwd <dir>",t("cli.cwdOption")).option("--reload-interval <seconds>",t("cli.cronDaemonReloadIntervalOption"),"60").option("--once",t("cli.cronDaemonOnceOption"),!1).action(async function(){let a=e.opts(),i=this.optsWithGlobals?this.optsWithGlobals():this.opts(),d=(0,r.resolve)((0,l.sv)(i.cwd)??process.cwd());await (0,n.e)(d,a.logPath);let c={cwd:d,quiet:!0},u=Math.max(15,Number(i.reloadInterval)||60);if(!0===i.once){let e=await (0,o.N9)({defaultRunOpts:c});(0,s.fH)(t("cli.cronDaemonOnceDone",{count:String(e.count),registered:String(e.registered),removed:String(e.removed),skipped:String(e.skipped)}));return}(0,s.fH)(t("cli.cronDaemonRunning",{seconds:String(u)})),await (0,o.O8)({reloadIntervalSeconds:u,defaultRunOpts:c})})}[l,n,s,o]=d.then?(await d)():d,i()}catch(e){i(e)}})},924(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Z:()=>r.Z});var r=a(9544),o=e([r]);r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},9544(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Z:()=>l});var r=a(6760),o=a(6478),n=a(2212),s=e([n,o]);function l(e,t){return e.command("heartbeat").description(t("cli.heartbeatDescription")).option("-C, --cwd <dir>",t("cli.cwdOption")).option("-r, --role <role>",t("cli.roleOption")).option("-l, --lang <lang>",t("cli.langOption")).option("--interval <seconds>",t("cli.heartbeatIntervalOption"),"60").option("--once",t("cli.heartbeatOnceOption"),!1).option("--reasoner",t("cli.reasonerOption"),!1).option("--chat",t("cli.chatOption"),!1).option("--cursor [model]",t("cli.cursorOption")).option("--timeout <seconds>",t("cli.timeoutOption")).option("--no-markdown","Plain text output only (default: markdown when TTY)").action(async function(){let t=e.opts(),a=this.optsWithGlobals?this.optsWithGlobals():this.opts(),i=(0,r.resolve)(a.cwd||process.cwd());await (0,n.e)(i,t.logPath);let s=!1!==a.markdown&&!!process.stdout.isTTY,l={role:t.role??a.role,lang:t.lang??a.lang,reasoner:!0===a.reasoner,chat:!0===a.chat,cursor:a.cursor||void 0,timeout:null!=a.timeout?Number(a.timeout):void 0,markdown:s},d=Number(a.interval)||60;!0===a.once?await (0,o.I)(i,l):await (0,o.D)(i,{...l,intervalSeconds:d})})}[n,o]=s.then?(await s)():s,i()}catch(e){i(e)}})},2520(e,t,a){a.a(e,async function(e,i){try{a.d(t,{J:()=>r.Jg});var r=a(7404),o=e([r]);r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},7404(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Jg:()=>k});var r=a(5347),o=a(6928),n=a(3136),s=a(7096),l=a(7318),d=a(3586),c=a(4071),u=a(4768),p=e([l,r,d,u,s,c]);async function m(e){return import((0,n.pathToFileURL)(e).href)}function g(e){process.stdout.write(`${e}
|
|
362
362
|
`)}function h(e={}){return s.sX.clear(),(0,l.A)({cwd:e.cwd??process.cwd()})}async function f(e){try{let t=await (0,u.s)(process.cwd());t.hooks||(t.hooks={}),t.hooks.active=e,await (0,u.L)(process.cwd(),t)}catch(e){(0,c.vV)(`Failed to save hook config: ${e.message}`)}}function k(e,t){let a=new r.Command("hooks").description(t("hooks.description")).alias("hook");a.command("list").description(t("hooks.list.description")).option("-v, --verbose",t("hooks.list.options.verbose")).action(async e=>{try{let a=h({cwd:process.cwd()}),i=s.sX.getStats();g(t("hooks.list.title")),g("=".repeat(50)),g(t("hooks.list.sources",{sources:a.length>0?a.join(", "):t("hooks.list.sourcesNone")})),g(""),Object.entries(i).forEach(([t,a])=>{g(`${a>0?"✅":"❌"} ${t}: ${a} handlers`),e.verbose&&a>0&&s.sX.hooks.get(t).forEach((e,t)=>{g(` ${t+1}. ${e.name||"anonymous"}`)})}),g("=".repeat(50));let r=Object.values(i).reduce((e,t)=>e+t,0);g(t("hooks.list.total",{total:r}))}catch(e){(0,c.vV)(t("hooks.list.error",{error:e.message}))}}),a.command("debug").description(t("hooks.debug.description")).option("-d, --data",t("hooks.debug.options.data")).option("-p, --performance",t("hooks.debug.options.performance")).option("-s, --stats",t("hooks.debug.options.stats")).option("-a, --all",t("hooks.debug.options.all")).action(async e=>{try{s.sX.clear();let a=0,i={type:"debug",options:{}};if(e.all||e.data){let e=(0,d._3)({logData:!0});s.sX.registerAll(e),a+=Object.keys(e).length,(0,c.fH)(t("hooks.debug.added.debug")),i.options.data=!0}if(e.all||e.performance){let e=(0,d.TA)();s.sX.registerAll(e),a+=Object.keys(e).length,(0,c.fH)(t("hooks.debug.added.performance")),i.options.performance=!0}if(e.all||e.stats){let e=(0,d.sD)();s.sX.registerAll(e),a+=Object.keys(e).length,(0,c.fH)(t("hooks.debug.added.stats")),i.options.stats=!0}if(0===a){let e=(0,d._3)({logData:!1});s.sX.registerAll(e),a=Object.keys(e).length,(0,c.fH)(t("hooks.debug.added.basic")),i.type="debug-basic"}await f(i),(0,c.fH)(t("hooks.debug.success",{count:a}))}catch(e){(0,c.vV)(t("hooks.debug.error",{error:e.message}))}}),a.command("security").description(t("hooks.security.description")).option("-b, --block <tools>",t("hooks.security.options.block")).option("-m, --max-prompt <length>",t("hooks.security.options.maxPrompt")).action(async e=>{try{let a=e.block?e.block.split(",").map(e=>e.trim()):[],i=e.maxPrompt?parseInt(e.maxPrompt,10):1e4,r=(0,d.n$)({blockedTools:a,maxPromptLength:i});s.sX.clear(),s.sX.registerAll(r),await f({type:"security",options:{blockedTools:a,maxPromptLength:i}}),(0,c.fH)(t("hooks.security.success")),a.length>0&&(0,c.fH)(t("hooks.security.blockedTools",{tools:a.join(", ")})),(0,c.fH)(t("hooks.security.maxPrompt",{length:i}))}catch(e){(0,c.vV)(t("hooks.security.error",{error:e.message}))}}),a.command("clear").description(t("hooks.clear.description")).action(async()=>{try{s.sX.clear();let e=await (0,u.s)(process.cwd());e.hooks&&(delete e.hooks.active,await (0,u.L)(process.cwd(),e)),(0,c.fH)(t("hooks.clear.success"))}catch(e){(0,c.vV)(t("hooks.clear.error",{error:e.message}))}}),a.command("test").description(t("hooks.test.description")).argument("[hookType]",t("hooks.test.argument.hookType")).action(async e=>{try{if(e){if(!Object.values(s.WD).includes(e))return void(0,c.vV)(t("hooks.test.invalidType",{type:e}));let a={test:!0,timestamp:Date.now(),hookType:e},i=await s.sX.trigger(e,a);(0,c.fH)(t("hooks.test.triggered",{type:e})),(0,c.fH)(t("hooks.test.result",{result:JSON.stringify(i,null,2)}))}else{for(let e of Object.values(s.WD)){let a={test:!0,timestamp:Date.now(),hookType:e};await s.sX.trigger(e,a),(0,c.fH)(t("hooks.test.triggered",{type:e}))}(0,c.fH)(t("hooks.test.allTriggered"))}}catch(e){(0,c.vV)(t("hooks.test.error",{error:e.message}))}}),a.command("register").description(t("hooks.register.description")).argument("<hookType>",t("hooks.register.argument.hookType")).argument("<handlerFile>",t("hooks.register.argument.handlerFile")).action(async(e,a)=>{try{var i;if(!Object.values(s.WD).includes(e))return void(0,c.vV)(t("hooks.register.invalidType",{type:e}));let r=o.isAbsolute(a)?a:o.join(process.cwd(),a),n=await m(r);if(i=n.default,"function"!=typeof i)return void(0,c.vV)(t("hooks.register.invalidHandler"));let l=s.sX.register(e,n.default);(0,c.fH)(t("hooks.register.success",{type:e,file:a}));let d=await (0,u.s)(process.cwd());d.hooks||(d.hooks={}),d.hooks.customHandlers||(d.hooks.customHandlers=[]),d.hooks.customHandlers.push({type:e,file:a,timestamp:new Date().toISOString()}),await (0,u.L)(process.cwd(),d),(0,c.fH)("Saved custom hook handler to settings"),process.on("exit",()=>l())}catch(e){(0,c.vV)(t("hooks.register.error",{error:e.message}))}}),a.command("status").description(t("hooks.status.description")).action(async()=>{try{let e=h({cwd:process.cwd()}),a=s.sX.getStats(),i=Object.values(a).reduce((e,t)=>e+t,0),r=Object.values(a).filter(e=>e>0).length;g(t("hooks.status.title")),g("=".repeat(50)),g(t("hooks.list.sources",{sources:e.length>0?e.join(", "):t("hooks.list.sourcesNone")})),g(""),g(t("hooks.status.totalHandlers",{total:i})),g(t("hooks.status.enabledHooks",{enabled:r,total:Object.keys(a).length})),i>0&&(g(""),g(t("hooks.status.distribution")),Object.entries(a).forEach(([e,t])=>{t>0&&g(` ${e}: ${t} handlers`)})),g("=".repeat(50))}catch(e){(0,c.vV)(t("hooks.status.error",{error:e.message}))}}),e.addCommand(a)}[l,r,d,u,s,c]=p.then?(await p)():p,i()}catch(e){i(e)}})},8(e,t,a){a.a(e,async function(e,i){try{a.d(t,{z:()=>r.z});var r=a(796),o=e([r]);r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},796(e,t,a){a.a(e,async function(e,i){try{a.d(t,{z:()=>d});var r=a(6760),o=a(8476),n=a(8362),s=a(2212),l=e([n,s,o]);function d(e,t){return e.command("init [dir]").description(t("cli.initDescription")).option("-t, --type <type>",t("cli.initTypeOption"),"js").addHelpText("after",t("cli.initExamples")).action(async(t,a)=>{let i=e.opts(),l=i.role??"RD",d=i.lang??(0,n.ao)(),c=(0,r.resolve)(t||".");await (0,s.e)(c,i.logPath);try{await (0,o.Ts)(c,{...a,role:l,lang:d})}catch(e){process.exit(e?.exitCode??1)}})}[n,s,o]=l.then?(await l)():l,i()}catch(e){i(e)}})},4072(e,t,a){a.a(e,async function(e,i){try{a.d(t,{v:()=>r.v});var r=a(2060),o=e([r]);r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},2060(e,t,a){a.a(e,async function(e,i){try{a.d(t,{v:()=>f});var r=a(6760),o=a(1455),n=a(8359),s=a(465),l=a(5708),d=a(6354),c=a(4768),u=a(8362),p=e([n,l,d,c,u]);function m(e){process.stdout.write(`${e}
|
|
363
|
-
`)}async function g(e,t){let a=new Map;for(let i of e)a.set(i,await (0,n.gg)(t,i));return[...e].sort((e,t)=>{let i=a.get(e),r=a.get(t),o=i?.createdAt??"",n=r?.createdAt??"";return o===n?e.localeCompare(t):n.localeCompare(o)})}async function h({cwd:e,role:t,start:a,end:i,t:c,skipLlm:u=!1,modelOpts:p,lang:h="en"}){let f=r.resolve(e),k=await (0,n.Lf)(),{startIso:v,endIso:b}=(0,s.v)(a,i),w=await (0,n.LW)(k,{role:t,startIso:v,endIso:b}),y=await g(w,k),S=[];for(let e of y){let a=await (0,n.gg)(k,e),i=await (0,n.eC)(k,{taskId:e,role:t,asc:!0}),r=(0,l.$)(i);S.push({taskId:e,title:a?.title??e,status:a?.status??"unknown",description:a?.description??"",contributionSummary:r})}let P=(0,l.x)({role:t,entries:S}),T="1"===process.env.PITHOSAI_MEMORIZE_SKIP_LLM,A=S.length>0&&!u&&!T,I=P;if(A)try{I=await (0,d.Vh)({markdown:P,role:t,modelOpts:p??{},lang:h})}catch(t){let e=t&&"object"==typeof t&&"message"in t?String(t.message):String(t);m(c("cli.memorizeLlmFallback",{message:e})),I=P}let E=r.join(f,".pithosai",t);await (0,o.mkdir)(E,{recursive:!0});let C=r.join(E,"memory.md");return await (0,o.writeFile)(C,I,"utf8"),0===S.length?m(c("cli.memorizeNoTasks",{role:t,path:C})):m(c("cli.memorizeWrote",{path:C,count:String(S.length)})),{path:C,taskCount:S.length}}function f(e,t){let a=e.command("memorize").description(t("cli.memorizeDescription")).requiredOption("--start <date>",t("cli.memorizeStartOption")).requiredOption("--end <date>",t("cli.memorizeEndOption")).option("-C, --cwd <dir>",t("cli.cwdOption")).option("-r, --role <role>",t("cli.roleOption")).option("--no-llm",t("cli.memorizeNoLlmOption")).option("--reasoner",t("cli.reasonerOption"),!1).option("--chat",t("cli.chatOption"),!1).option("--cursor [model]",t("cli.cursorOption")).option("--model <key>",t("cli.taskModelOption")).addHelpText("after",t("cli.memorizeExamples"));return a.action(async function(){let a=e.opts(),i=this.optsWithGlobals?this.optsWithGlobals():this.opts(),o=i.cwd?r.resolve(i.cwd):process.cwd(),n=i.role??a.role;n&&""!==String(n).trim()||(m(t("cli.memorizeRoleRequired")),process.exit(1));try{let e=!1===i.llm,r=await (0,c.s)(o),s=a.lang??r?.lang??(0,u.ao)();await h({cwd:o,role:String(n).trim(),start:i.start,end:i.end,t,skipLlm:e,lang:s,modelOpts:{reasoner:!0===i.reasoner,chat:!0===i.chat,cursor:i.cursor||void 0,model:i.model||void 0}})}catch(a){let e=a&&"object"==typeof a&&"message"in a?String(a.message):String(a);m(t("cli.memorizeDateError",{message:e})),process.exit(1)}}),a}[n,l,d,c,u]=p.then?(await p)():p,i()}catch(e){i(e)}})},5900(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Q:()=>r.Q});var r=a(600),o=e([r]);r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},600(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Q:()=>l});var r=a(6760),o=a(2369),n=a(5012),s=e([o]);function l(e,t){return e.command("migrate-db").description(t("cli.migrateDbDescription")).option("--db-path <file>",t("cli.migrateDbDbPathOption")).action(async e=>{try{let a=e.dbPath?(0,r.resolve)(e.dbPath):await (0,o.sA)(n.qu),i=await (0,o.tT)({path:a});if("migrated"===i.action)return void console.log(t("cli.migrateDbMigrated"));if("file_missing"===i.reason)return void console.log(t("cli.migrateDbSkippedMissing",{path:a}));if("already_encrypted_with_key"===i.reason)return void console.log(t("cli.migrateDbSkippedAlready"));console.log(t("cli.migrateDbSkippedNotPlain"))}catch(e){e instanceof o.IH?console.error(t("cli.migrateDbErrNoSqlcipher")):console.error(e instanceof Error?e.message:String(e)),process.exit(1)}})}o=(s.then?(await s)():s)[0],i()}catch(e){i(e)}})},5048(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Rr:()=>r.R});var r=a(3900),o=a(7538),n=e([r,o]);[r,o]=n.then?(await n)():n,i()}catch(e){i(e)}})},3900(e,t,a){a.a(e,async function(e,i){try{a.d(t,{R:()=>d});var r=a(8362),o=a(4768),n=a(7538),s=e([o,r,n]);async function l(e,t){let a=e.lang??t.lang;if("string"==typeof a&&a.trim())return a.trim().toLowerCase();let i="string"==typeof t.cwd&&t.cwd.trim()?t.cwd.trim():process.cwd(),n=await (0,o.s)(i);return n?.lang??(0,r.ao)()}function d(e,t){return e.command("models").description(t("cli.modelsDescription")).argument("[filters...]",t("cli.modelsFiltersArgument")).option("--json",t("cli.modelsJsonOption")).option("--table",t("cli.modelsTableOption")).option("-l, --lang <lang>",t("cli.langOption")).action(async function(t){let a=e.opts(),i=this.optsWithGlobals?this.optsWithGlobals():this.opts(),o=await l(a,i),s=(0,r.lW)(o);try{let e=(0,n.bm)(i),{entries:a,krouterFetchFailed:r}=await (0,n.U6)({filters:Array.isArray(t)?t:[]});if(r&&console.error(s("cli.modelsKrouterFetchFailed")),"json"===e)return void console.log((0,n.Hf)(a));if(!a.length)return void console.log(s("cli.modelsNoneFound"));console.log((0,n.nL)(a))}catch(e){e&&"INVALID_MODELS_OUTPUT_FORMAT"===e.code&&(console.error(s("cli.modelsInvalidOutputFormat")),process.exit(1)),e&&"INVALID_MODEL_FILTER_REGEX"===e.code&&(console.error(s("cli.modelsInvalidFilter",{pattern:String(e.pattern??""),message:e instanceof Error?e.message:String(e)})),process.exit(1)),console.error(s("cli.modelsError",{message:e instanceof Error?e.message:String(e)})),process.exit(1)}})}[o,r,n]=s.then?(await s)():s,i()}catch(e){i(e)}})},7538(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Hf:()=>d,U6:()=>p,bm:()=>u,nL:()=>c});var r=a(1351),o=a(7817),n=a(5537),s=a(6840),l=e([r,o,n,s]);function d(e){return JSON.stringify(e??[],null,2)}function c(e){let t=new r.default({head:["key","provider","modelId"],style:{head:[],border:[]}});for(let a of e??[])t.push([String(a.key??""),String(a.provider??""),String(a.modelId??"")]);return t.toString()}function u(e={}){let t=!!e.json,a=!!e.table;if(t&&a){let e=Error("Cannot use --json and --table together");throw e.code="INVALID_MODELS_OUTPUT_FORMAT",e}return a?"table":"json"}async function p(e={}){let t=e.getPublicKeys??o.rs,a=e.getKeyToModel??(()=>o.q1),i=e.hasKrouter??n.qY,r=e.fetchKrouter??s.Tw,l=e.clearKrouterCache??s.O1,d=e.getFetchOk??s.Vl,c=a(),u=t(),m=new Set(u),g=new Map;for(let e of u)g.set(e,function(e,t){let a=String(e??"").trim(),i=t[a];return i?{key:a,provider:String(i.provider??"").trim(),modelId:String(i.id??"").trim()}:a.startsWith("krouter/")?{key:a,provider:"krouter",modelId:a.slice(8)}:a.startsWith("kiro/")?{key:a,provider:"krouter",modelId:a.slice(5)}:{key:a,provider:"",modelId:""}}(e,c));let h=!1;if(i()){l();let e=await r();for(let t of(h=!d(),e.keys())){let e=function(e){let t=String(e??"").trim().replace(/^kr\//i,"").toLowerCase();return t?`krouter-${t}`:""}(t);if(e&&m.has(e))continue;let a=function(e){let t=String(e??"").trim();return t?`krouter/${t}`:""}(t);!a||g.has(a)||g.set(a,{key:a,provider:"krouter",modelId:String(t)})}}let f=[...g.values()].sort((e,t)=>e.key.localeCompare(t.key));return{entries:function(e,t=[]){let a=function(e=[]){let t=[];for(let a of e??[]){let e=String(a??"").trim();if(e)try{t.push(RegExp(e,"i"))}catch(a){let t=Error(`Invalid model filter regex: ${e}${a instanceof Error?` (${a.message})`:""}`);throw t.code="INVALID_MODEL_FILTER_REGEX",t.pattern=e,t}}return t}(t);return 0===a.length?[...e]:e.filter(e=>a.every(t=>t.test(e.key)||t.test(e.provider)||t.test(e.modelId)))}(f,e.filters),krouterFetchFailed:h}}[r,o,n,s]=l.then?(await l)():l,i()}catch(e){i(e)}})},8376(e,t,a){a.a(e,async function(e,i){try{a.d(t,{T:()=>L});var r=a(3024),o=a(6760),n=a(5347),s=a(8),l=a(5900),d=a(7500),c=a(924),u=a(8280),p=a(6806),m=a(2457),g=a(4117),h=a(6652),f=a(6765),k=a(3028),v=a(2520),b=a(831),w=a(4072),y=a(2734),S=a(6841),P=a(5048),T=a(5119),A=a(1084),I=a(8362),E=a(4768),C=a(4399),R=e([E,I,A,n,s,l,h,d,k,v,p,m,g,c,u,b,w,y,P,S,f]);[E,I,A,n,s,l,h,d,k,v,p,m,g,c,u,b,w,y,P,S,f]=R.then?(await R)():R;let x=JSON.parse((0,r.readFileSync)((0,o.join)((0,C.F8)(),"package.json"),"utf8"));async function L(){var e;let t,a=(t=(e=process.argv).findIndex(e=>"--lang"===e||"-l"===e),-1!==t&&e[t+1]?e[t+1].toLowerCase():null),i=function(e=process.argv){return e.some(e=>"--help"===e||"-h"===e||"--version"===e||"-V"===e)}(process.argv);if(i)a=a??(0,I.ao)();else{let e=(0,o.resolve)(process.cwd()),t=await (0,E.s)(e);a=a??t?.lang??(0,I.ao)()}let r=(0,I.lW)(a);if(!i){await (0,T.NL)({currentVersion:x.version,packageName:x.name,t:r});try{await (0,A.z)({t:r,argv:process.argv})}catch(e){console.error(r("cli.roleTemplate.autoSeedFailed",{message:e instanceof Error?e.message:String(e)}))}}let C=new n.Command,R={"Usage:":r("cli.helpUsage"),"Arguments:":r("cli.helpArguments"),"Options:":r("cli.helpOptions"),"Commands:":r("cli.helpCommands"),"Global Options:":r("cli.helpGlobalOptions")},L={styleTitle:e=>Object.hasOwn(R,e)?R[e]:e};C.configureHelp(L),C.name("pithosai").description(r("cli.description")).version(x.version,"-V, --version",r("cli.versionOption")).option("-r, --role <role>",r("cli.roleOption")).option("-l, --lang <lang>",r("cli.langOption")).option("-i, --interactive",r("cli.interactiveModeOption")).option("--log-path <file>","Path for log file (defaults to a per-project file under the OS temp directory)").helpOption("-h, --help",r("cli.helpOption"));let j=(0,s.z)(C,r);j&&j.configureHelp(L);let M=(0,l.Q)(C,r);M&&M.configureHelp(L);let O=(0,h.e)(C,r);O&&O.configureHelp(L),(0,d.B)(C);let N=C.commands[C.commands.length-1];N&&N.configureHelp(L),(0,k.F)(C);let D=C.commands[C.commands.length-1];D&&D.configureHelp(L),(0,v.J)(C,r);let _=C.commands[C.commands.length-1];_&&_.configureHelp(L),(0,p.H)(C);let F=C.commands[C.commands.length-1];F&&F.configureHelp(L);let z=(0,m.Ng)(C,r);z&&z.configureHelp(L);let q=(0,g.O)(C,r);q&&q.configureHelp(L);let H=(0,c.Z)(C,r);H&&H.configureHelp(L);let U=(0,u.x)(C,r);U&&U.configureHelp(L);let $=(0,b.y)(C,r);$&&$.configureHelp(L);let B=(0,w.v)(C,r);B&&B.configureHelp(L);let K=(0,y.S)(C,r);K&&K.configureHelp(L);let W=(0,P.Rr)(C,r);W&&W.configureHelp(L);let G=(0,S.x)(C,r);return G&&G.configureHelp(L),(0,f.E)(C,r),C}i()}catch(e){i(e)}})},6765(e,t,a){a.a(e,async function(e,i){try{a.d(t,{E:()=>r.E});var r=a(5745),o=e([r]);r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},5560(e,t,a){a.a(e,async function(e,i){try{a.d(t,{$i:()=>N,YP:()=>S,Ym:()=>T,d1:()=>A});var r=a(2615),o=a(3525),n=a(3713),s=a(6109),l=a(7443),d=a(5215),c=a(2586),u=a(9989),p=a(9782),m=a(8691),g=a(2120),h=a(4071),f=e([o,s,l,d,g,r,h,c,m]);function k(e,t){let a=(0,r.truncateToWidth)(String(e??""),Math.max(0,t)),i=Math.max(0,t-(0,r.visibleWidth)(a));return a+" ".repeat(i)}[o,s,l,d,g,r,h,c,m]=f.then?(await f)():f;let I=" → ";function v(e){if(Number.isFinite(e)&&e>0)return Math.floor(e);let t=Number(process.stdout.columns);return Number.isFinite(t)&&t>0?Math.floor(t):80}function b(e){return String(e??"").replace(/\x1b\[[0-9;]*m/g,"")}function w(e){let t=b(e).trimStart();return!!(""===t||/^---/.test(t)||/^[─━═-]{3,}\s*$/.test(t)||/^(>You:|You:)/i.test(t)||/^┌/.test(t)||/^[└├|]/.test(t)||t.startsWith("|")||t.startsWith("│")||/^---+$/.test(t.replace(/\s/g,""))||/^#{1,3}\s/.test(t)||/^\s*(\d+\.|[-*•])\s/.test(t))}function y(e,t,a,i){if("soft"!==a||"soft"!==i||!e||!t||w(e)||w(t))return!1;let r=b(e).trimEnd(),o=b(t).trimStart();return!(!r||!o||/[.!?]["')\]]*$/.test(r)&&/^[A-Z0-9"'`([[]/.test(o))&&/^[a-z(]/.test(o)}let E=/^\x1b\[<(\d+(?:;\d+)*)([Mm])/;class C{constructor(){this.lines=[],this._lineBreaks=[],this.maxLines=8e3,this._wrapWidth=0,this._nextRawStartsNewRow=!1,this._assistantBodyStartLine=null,this._viewportPinLine=null,this._viewportPinDisplay=null,this._wrapCache=null}setWrapWidth(e){this._wrapWidth=e}_invalidateWrapCache(){this._wrapCache=null}_wrapLogicalLines(e){let t=v(e);if(this._wrapCache&&this._wrapCache.width===t)return this._wrapCache.result;let a=function(e,t){let a=t??e.map(()=>"hard"),i=[],r=[];for(let t=0;t<e.length;t++){let o=e[t],n=a[t]??"hard";if(""===o){i.push(""),r.push("hard");continue}let s=i[i.length-1],l=r[r.length-1]??"hard";if("string"==typeof s&&""!==s&&y(s,o,l,n)){i[i.length-1]=function(e,t){let a=b(e),i=b(t).trimStart();return/\s/.test(a)&&/^[a-z(]/.test(i)?`${e} ${t}`:`${e}${t}`}(s,o);continue}i.push(o),r.push(n)}return i}(this.lines,this._lineBreaks),i=[],o=0;for(let e=0;e<this.lines.length;e++){if(0===e){i.push(0);continue}let t=this.lines[e-1],a=this.lines[e],r=this._lineBreaks[e-1]??"hard",n=this._lineBreaks[e]??"hard";""!==a&&y(t,a,r,n)||(o+=1),i.push(o)}let n=[],s=[];for(let e of a){s.push(n.length);let a=(0,r.wrapTextWithAnsi)(String(e??""),t);if(0===a.length){n.push("");continue}for(let e of a)n.push(e)}let l=i.map(e=>s[e]??0),d={rows:n,logicalStarts:l};return this._wrapCache={width:t,result:d},d}setViewportPin(e){this._viewportPinLine=Math.max(0,e),this._viewportPinDisplay=null}clearViewportPin(){this._viewportPinLine=null,this._viewportPinDisplay=null}appendLine(e){if(this._invalidateWrapCache(),this.lines.push(e),this._lineBreaks.push("hard"),this._nextRawStartsNewRow=""!==e,this.lines.length>this.maxLines){let e=this.lines.length-this.maxLines;this.lines=this.lines.slice(-this.maxLines),this._lineBreaks=this._lineBreaks.slice(-this.maxLines),null!=this._viewportPinLine&&(this._viewportPinLine=Math.max(0,this._viewportPinLine-e)),null!=this._viewportPinDisplay&&(this._viewportPinDisplay=Math.max(0,this._viewportPinDisplay-e)),null!=this._assistantBodyStartLine&&(this._assistantBodyStartLine=Math.max(0,this._assistantBodyStartLine-e))}}appendBlankSeparator(){this.appendLine(""),this._nextRawStartsNewRow=!0}ensureBlankSeparator(){if(0===this.lines.length)return;let e=this.lines[this.lines.length-1];""!==String(e).trim()&&this.appendBlankSeparator()}truncateToLineIndex(e){let t=Math.max(0,Math.min(e,this.lines.length));this.lines.length=t,this._lineBreaks.length=t,this._nextRawStartsNewRow=!0,this._invalidateWrapCache()}appendRaw(e){let t=String(e);if(this._invalidateWrapCache(),0===this.lines.length||this._nextRawStartsNewRow){this.lines.push(t),this._lineBreaks.push("soft"),this._nextRawStartsNewRow=!1;return}this.lines[this.lines.length-1]+=t,this._nextRawStartsNewRow=!1}viewportLines(e,t){if(0===this.lines.length)return[""];let a=Math.max(1,e),{rows:i,logicalStarts:r}=this._wrapLogicalLines(t),o=i.length,n=Math.max(0,o-a),s=n;if(null!=this._viewportPinDisplay)s=Math.min(Math.max(0,this._viewportPinDisplay),n);else if(null!=this._viewportPinLine){let e=r[this._viewportPinLine]??0;s=Math.min(Math.max(0,e),n)}let l=v(t);return i.slice(s,s+a).map(e=>k(e,l))}tailLines(e,t){return this.viewportLines(e,t)}bumpViewStart(e,t,a){let i,r=Math.max(1,t),o=v(a??this._wrapWidth),{rows:n,logicalStarts:s}=this._wrapLogicalLines(o),l=n.length;if(0===l)return!1;let d=Math.max(0,l-r);if(null!=this._viewportPinDisplay)i=Math.min(this._viewportPinDisplay,d);else{if(null==this._viewportPinLine)return!(e>=0)&&(this._viewportPinDisplay=Math.max(0,d+e),this._viewportPinLine=null,!0);i=Math.min(s[this._viewportPinLine]??0,d)}let c=Math.max(0,Math.min(d,i+e));return c!==i&&(this._viewportPinDisplay=c,this._viewportPinLine=null,!0)}}class R{constructor(e,t){this.tui=e,this.getMessage=t,this.intervalId=null,this.frame=0,this.active=!1,this.preserveReservedRows=!1,this.phase="loading"}_startTick(e){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),this.intervalId=setInterval(()=>{let e="loading"===this.phase?p.d2.length:p.Mm.length;this.frame=(this.frame+1)%e,this.tui.requestRender()},e)}setActive(e){e!==this.active&&(this.active=e,e?(this.preserveReservedRows=!0,this.phase="loading",this.frame=0,this._startTick(80)):this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null))}enterRunningPhase(){this.active&&"running"!==this.phase&&(this.phase="running",this.frame=0,this._startTick(120),this.tui.requestRender())}isActive(){return this.active}isRunningPhase(){return this.active&&"running"===this.phase}reservedHeight(){return this.active||this.preserveReservedRows?1:0}render(e){if(!this.active)return[k("",e)];let t="loading"===this.phase?p.d2:p.Mm,a=t[this.frame%t.length],i=this.getMessage()??"";return[(0,r.truncateToWidth)(`${a} ${i}`,e)]}invalidate(){}}class L{constructor(e){this.t=e,this.taskId="",this.model="",this.role="",this.mode="",this.usedTokens=0,this.committedRequests=0}setState(e){e&&"object"==typeof e&&("string"==typeof e.taskId&&(this.taskId=e.taskId),"string"==typeof e.model&&(this.model=e.model),"string"==typeof e.role&&(this.role=e.role),"string"==typeof e.mode&&(this.mode=e.mode),"number"==typeof e.usedTokens&&Number.isFinite(e.usedTokens)&&(this.usedTokens=Math.max(0,Math.floor(e.usedTokens))),"number"==typeof e.committedRequests&&Number.isFinite(e.committedRequests)&&(this.committedRequests=Math.max(0,Math.floor(e.committedRequests))))}render(e){let t=this.taskId?`...${this.taskId.slice(-6)}`:"...------",a=this.model||"-",i=this.role||"-",r=this.mode||"-",o=this.t("run.tuiTaskStatus.task"),n=this.t("run.tuiTaskStatus.model"),s=this.t("run.tuiTaskStatus.role"),l=this.t("run.tuiTaskStatus.mode"),d=this.t("run.tuiTaskStatus.tokens"),c=function(e){let t=Number.isFinite(e)?Math.max(0,e):0;if(t<1e3)return String(Math.floor(t));let a=e=>String(Number(e.toFixed(1)));return t<1e6?`${a(t/1e3)}KB`:t<1e9?`${a(t/1e6)}MB`:`${a(t/1e9)}GB`}(this.usedTokens),u=this.t("run.tuiTaskStatus.committed"),p=`${o}:${t} | ${n}:${a} | ${s}:${i} | ${l}:${r} | ${d}:${c} | ${u}:${this.committedRequests}`;return m.m.dim(k(p,e))}invalidate(){}}class x{constructor(e){this.t=e,this.messages=[]}setMessages(e){this.messages=Array.isArray(e)?e.map(e=>String(e??"").trim()).filter(Boolean):[]}clear(){this.messages=[]}reservedHeight(){return+(this.messages.length>0)}render(e){if(0===this.messages.length)return[];let t=(0,n.x)(this.t,this.messages,e);return[k(m.m.dim(t),e)]}invalidate(){}}class j{constructor(e,t){this.focused=!1,this.tui=e,this.onExit=t?.onExit,this.editor=new r.Editor(e,{borderColor:e=>m.m.dim(e),selectList:{selectedPrefix:e=>m.m.cyan.bold(e),selectedText:e=>m.m.cyan(e),description:e=>m.m.dim(e),scrollInfo:e=>m.m.dim(e),noMatch:e=>m.m.yellow(e)}},{paddingX:1,autocompleteMaxVisible:8}),this.editor.setAutocompleteProvider((0,o.ML)(t)),this.isShiftPressed=void 0,(0,s.i)()}isAutocompleteActive(){return this.editor.isShowingAutocomplete()}handleInput(e){if(this.editor.focused=this.focused,(0,r.matchesKey)(e,"ctrl+d")&&!this.editor.getText().trim()&&((0,u.E5)(),this.onExit?(0,u.e_)(this.onExit):(0,u.e_)(()=>this.tui.stop())),(0,r.matchesKey)(e,"alt+e")){let e=this.editor.getExpandedText();e!==this.editor.getText()&&this.editor.setText(e);return}if((0,s.y)({data:e,isShiftPressed:this.isShiftPressed})){try{(0,h.JX)("tui editor inserting newline"),this.editor.insertTextAtCursor("\n")}catch(e){(0,h.CN)("FramedEditorPrompt newline insert failed",e)}return}(0,l.c8)({data:e,editor:this.editor})||this.editor.handleInput(e)}render(e){let t,a,i,o;this.editor.focused=this.focused;let n=Math.max(3,e-2),s=(0,r.visibleWidth)(I),l=Math.max(1,n-s),d=this.editor.render(l);if(d.length<2)return d;let c=function(e){if(!Array.isArray(e)||e.length<2)return Math.max(0,(e?.length??1)-1);for(let t=e.length-1;t>=1;t--)if(b(e[t]??"").startsWith("─"))return t;return e.length-1}(d);if(c<1)return d;let u=d.slice(1,c),p=d.slice(c+1),g=m.m.cyan(I),h=(t=(0,r.visibleWidth)(I),a=Math.max(0,n-t),u.map((e,i)=>{var r;let o=k((r=e??"",String(r).replace(/(?:\.{3}|…)((?:\u001b\[[0-9;]*m)*)$/u,"$1")),a);return 0===i?`${g}${o}`:`${" ".repeat(t)}${o}`})),f=(i=`┌${"─".repeat(n)}┐`,m.m.cyan(i)),v=(o=`└${"─".repeat(n)}┘`,m.m.cyan(o)),w=e=>m.m.cyan("│")+e+m.m.cyan("│"),y=[f];for(let e of h)y.push(w(e));for(let e of(y.push(v),p))y.push(w(k(e??"",n)));return y}invalidate(){this.editor.invalidate()}}class M{constructor(e){let{terminal:t,transcript:a,loading:i,queuedFollowUp:r,taskStatus:o,prompt:n,cwdGit:s}=e;this.terminal=t,this.transcript=a,this.loading=i,this.queuedFollowUp=r,this.taskStatus=o,this.prompt=n,this.cwdGit=s,this.focused=!1,this.onPromptChromeHeightChange=e.onPromptChromeHeightChange}handleInput(e){this.prompt.focused=this.focused;let t=this.terminal.columns??80,a=0;try{a=this.prompt.render(t).length}catch(e){(0,h.CN)("PithosReplLayout prompt height before input failed",e)}this.prompt.handleInput(e);try{let e=this.prompt.render(t).length,i=Math.abs(e-a);i>0&&((0,h.JX)("tui prompt chrome height changed",{before:a,after:e,delta:i}),this.onPromptChromeHeightChange?.(i))}catch(e){(0,h.CN)("PithosReplLayout prompt height after input failed",e)}}invalidate(){this.prompt.invalidate()}footerChromeLines(e){this.prompt.focused=this.focused;let t=this.prompt.render(e),a=this.loading.reservedHeight()>0?[...this.loading.render(e)]:[],i=[...this.queuedFollowUp.render(e)],r=[this.taskStatus.render(e)],o=[...this.cwdGit.render(e)];return[...a,...i,...r,...t,...o]}render(e){this.prompt.focused=this.focused;let t=this.terminal.rows,a=this.footerChromeLines(e),i=a.length,r=t-i;r<0&&(r=0);let o=0===r?[]:this.transcript.viewportLines(Math.max(1,r),e);for(;o.length<r;)o.push(k("",e));return o.length>r&&(o=o.slice(0,r)),[...o,...a]}}class O extends r.TuiAltScreen{constructor(e){super(e,void 0,void 0,{mouse:!1}),this.agentRunning=!1,this.agentController=null,this.onTranscriptPageScroll=null,this.transcriptPageScrollGuard=null,this.onAgentControlNotice=null,this.onSuspendToBackground=null,this.onAfterRender=null,this.addInputListener(e=>this.interceptTerminalInput(e));var t=this;try{t.handleViewportInput=e=>{let a=function(e,t){try{if(!e.onTranscriptPageScroll||e.transcriptPageScrollGuard?.()===!0)return;let a=function(e){let t=function(e){let t=String(e);if(!t.startsWith("\x1b[<"))return null;let a=[];for(;t.length>0;){let e=t.match(E);if(!e)return a.length>0?a:null;let i=e[1].split(";").map(e=>Number.parseInt(e,10));if(i.length<1||i.some(e=>!Number.isFinite(e)))return a.length>0?a:null;a.push({btn:i[0]}),t=t.slice(e[0].length)}return a}(e);if(!t||0===t.length)return null;let a=0,i=!1;for(let e of t){let t=function(e){if((64&e)==0)return null;let t=3&e;return 0===t?-3:1===t?3:null}(e.btn);null!=t&&(i=!0,a+=t)}return i?a:null}(t);if(null!=a)return e.onTranscriptPageScroll(a,{coalesce:!0}),{consume:!0};let i=Math.max(3,e.terminal.rows-3),o=Math.max(3,Math.floor(.85*i));if((0,r.matchesKey)(t,"pageUp"))return e.onTranscriptPageScroll(-o),{consume:!0};if((0,r.matchesKey)(t,"pageDown"))return e.onTranscriptPageScroll(o),{consume:!0};if(!e.agentRunning){if((0,r.matchesKey)(t,"up"))return e.onTranscriptPageScroll(-1),{consume:!0};if((0,r.matchesKey)(t,"down"))return e.onTranscriptPageScroll(1),{consume:!0}}if((0,r.matchesKey)(t,"ctrl+u"))return e.onTranscriptPageScroll(-o),{consume:!0};if((0,r.matchesKey)(t,"ctrl+f"))return e.onTranscriptPageScroll(o),{consume:!0};return}catch(e){(0,h.CN)("PithosTUI.handleViewportInput transcript scroll failed",e);return}}(t,e);if(a?.consume)return a;try{let a=r.TuiAltScreen.prototype.handleViewportInput;if("function"!=typeof a)return void(0,h.CN)("invokeTuiAltScreenHandleViewportInput: TuiAltScreen.handleViewportInput is missing");return a.call(t,e)}catch(e){(0,h.CN)("invokeTuiAltScreenHandleViewportInput failed",e);return}}}catch(e){(0,h.CN)("bindPithosTuiViewportInput failed",e)}!function(e){try{let t=r.TuiAltScreen.prototype.doRender;if("function"!=typeof t)return void(0,h.CN)("bindPithosTuiAfterRender: TuiAltScreen.doRender is missing");let a=t.bind(e);Object.defineProperty(e,"doRender",{configurable:!0,writable:!0,value:()=>{a(),e.onAfterRender?.()}})}catch(e){(0,h.CN)("bindPithosTuiAfterRender failed",e)}}(this)}invokeAfterRenderHookForTests(){this.onAfterRender?.()}markFooterRowsDirty(e){let t=Math.max(0,Math.floor(Number(e)||0)),a=this.previousScreen;if(!Array.isArray(a)||0===a.length||0===t)return;let i=Math.max(0,a.length-t);for(let e=i;e<a.length;e++)a[e]=`\u0001${a[e]}`}setAgentRunning(e,t){this.agentRunning=e,this.agentController=t}interceptTerminalInput(e){try{let t;if((0,r.matchesKey)(e,"ctrl+z"))return this.onSuspendToBackground?.(),{consume:!0};if((t=String(e)).startsWith("\x1b[<")||6===t.length&&t.startsWith("\x1b[M"))return(0,h.JX)("PithosTUI.interceptTerminalInput consumed leftover SGR mouse",{length:String(e).length}),{consume:!0};if(this.agentRunning&&this.agentController){if((0,r.matchesKey)(e,"ctrl+s")){let e=`${m.m.yellow("[Ctrl+S]")} Stopping agent...`;return this.onAgentControlNotice?this.onAgentControlNotice(e):process.stdout.write(`
|
|
363
|
+
`)}async function g(e,t){let a=new Map;for(let i of e)a.set(i,await (0,n.gg)(t,i));return[...e].sort((e,t)=>{let i=a.get(e),r=a.get(t),o=i?.createdAt??"",n=r?.createdAt??"";return o===n?e.localeCompare(t):n.localeCompare(o)})}async function h({cwd:e,role:t,start:a,end:i,t:c,skipLlm:u=!1,modelOpts:p,lang:h="en"}){let f=r.resolve(e),k=await (0,n.Lf)(),{startIso:v,endIso:b}=(0,s.v)(a,i),w=await (0,n.LW)(k,{role:t,startIso:v,endIso:b}),y=await g(w,k),S=[];for(let e of y){let a=await (0,n.gg)(k,e),i=await (0,n.eC)(k,{taskId:e,role:t,asc:!0}),r=(0,l.$)(i);S.push({taskId:e,title:a?.title??e,status:a?.status??"unknown",description:a?.description??"",contributionSummary:r})}let P=(0,l.x)({role:t,entries:S}),T="1"===process.env.PITHOSAI_MEMORIZE_SKIP_LLM,A=S.length>0&&!u&&!T,I=P;if(A)try{I=await (0,d.Vh)({markdown:P,role:t,modelOpts:p??{},lang:h})}catch(t){let e=t&&"object"==typeof t&&"message"in t?String(t.message):String(t);m(c("cli.memorizeLlmFallback",{message:e})),I=P}let E=r.join(f,".pithosai",t);await (0,o.mkdir)(E,{recursive:!0});let C=r.join(E,"memory.md");return await (0,o.writeFile)(C,I,"utf8"),0===S.length?m(c("cli.memorizeNoTasks",{role:t,path:C})):m(c("cli.memorizeWrote",{path:C,count:String(S.length)})),{path:C,taskCount:S.length}}function f(e,t){let a=e.command("memorize").description(t("cli.memorizeDescription")).requiredOption("--start <date>",t("cli.memorizeStartOption")).requiredOption("--end <date>",t("cli.memorizeEndOption")).option("-C, --cwd <dir>",t("cli.cwdOption")).option("-r, --role <role>",t("cli.roleOption")).option("--no-llm",t("cli.memorizeNoLlmOption")).option("--reasoner",t("cli.reasonerOption"),!1).option("--chat",t("cli.chatOption"),!1).option("--cursor [model]",t("cli.cursorOption")).option("--model <key>",t("cli.taskModelOption")).addHelpText("after",t("cli.memorizeExamples"));return a.action(async function(){let a=e.opts(),i=this.optsWithGlobals?this.optsWithGlobals():this.opts(),o=i.cwd?r.resolve(i.cwd):process.cwd(),n=i.role??a.role;n&&""!==String(n).trim()||(m(t("cli.memorizeRoleRequired")),process.exit(1));try{let e=!1===i.llm,r=await (0,c.s)(o),s=a.lang??r?.lang??(0,u.ao)();await h({cwd:o,role:String(n).trim(),start:i.start,end:i.end,t,skipLlm:e,lang:s,modelOpts:{reasoner:!0===i.reasoner,chat:!0===i.chat,cursor:i.cursor||void 0,model:i.model||void 0}})}catch(a){let e=a&&"object"==typeof a&&"message"in a?String(a.message):String(a);m(t("cli.memorizeDateError",{message:e})),process.exit(1)}}),a}[n,l,d,c,u]=p.then?(await p)():p,i()}catch(e){i(e)}})},5900(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Q:()=>r.Q});var r=a(600),o=e([r]);r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},600(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Q:()=>l});var r=a(6760),o=a(2369),n=a(5012),s=e([o]);function l(e,t){return e.command("migrate-db").description(t("cli.migrateDbDescription")).option("--db-path <file>",t("cli.migrateDbDbPathOption")).action(async e=>{try{let a=e.dbPath?(0,r.resolve)(e.dbPath):await (0,o.sA)(n.qu),i=await (0,o.tT)({path:a});if("migrated"===i.action)return void console.log(t("cli.migrateDbMigrated"));if("file_missing"===i.reason)return void console.log(t("cli.migrateDbSkippedMissing",{path:a}));if("already_encrypted_with_key"===i.reason)return void console.log(t("cli.migrateDbSkippedAlready"));console.log(t("cli.migrateDbSkippedNotPlain"))}catch(e){e instanceof o.IH?console.error(t("cli.migrateDbErrNoSqlcipher")):console.error(e instanceof Error?e.message:String(e)),process.exit(1)}})}o=(s.then?(await s)():s)[0],i()}catch(e){i(e)}})},5048(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Rr:()=>r.R});var r=a(3900),o=a(7538),n=e([r,o]);[r,o]=n.then?(await n)():n,i()}catch(e){i(e)}})},3900(e,t,a){a.a(e,async function(e,i){try{a.d(t,{R:()=>d});var r=a(8362),o=a(4768),n=a(7538),s=e([o,r,n]);async function l(e,t){let a=e.lang??t.lang;if("string"==typeof a&&a.trim())return a.trim().toLowerCase();let i="string"==typeof t.cwd&&t.cwd.trim()?t.cwd.trim():process.cwd(),n=await (0,o.s)(i);return n?.lang??(0,r.ao)()}function d(e,t){return e.command("models").description(t("cli.modelsDescription")).argument("[filters...]",t("cli.modelsFiltersArgument")).option("--json",t("cli.modelsJsonOption")).option("--table",t("cli.modelsTableOption")).option("-l, --lang <lang>",t("cli.langOption")).action(async function(t){let a=e.opts(),i=this.optsWithGlobals?this.optsWithGlobals():this.opts(),o=await l(a,i),s=(0,r.lW)(o);try{let e=(0,n.bm)(i),{entries:a,krouterFetchFailed:r}=await (0,n.U6)({filters:Array.isArray(t)?t:[]});if(r&&console.error(s("cli.modelsKrouterFetchFailed")),"json"===e)return void console.log((0,n.Hf)(a));if(!a.length)return void console.log(s("cli.modelsNoneFound"));console.log((0,n.nL)(a))}catch(e){e&&"INVALID_MODELS_OUTPUT_FORMAT"===e.code&&(console.error(s("cli.modelsInvalidOutputFormat")),process.exit(1)),e&&"INVALID_MODEL_FILTER_REGEX"===e.code&&(console.error(s("cli.modelsInvalidFilter",{pattern:String(e.pattern??""),message:e instanceof Error?e.message:String(e)})),process.exit(1)),console.error(s("cli.modelsError",{message:e instanceof Error?e.message:String(e)})),process.exit(1)}})}[o,r,n]=s.then?(await s)():s,i()}catch(e){i(e)}})},7538(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Hf:()=>d,U6:()=>p,bm:()=>u,nL:()=>c});var r=a(1351),o=a(7817),n=a(5537),s=a(6840),l=e([r,o,n,s]);function d(e){return JSON.stringify(e??[],null,2)}function c(e){let t=new r.default({head:["key","provider","modelId"],style:{head:[],border:[]}});for(let a of e??[])t.push([String(a.key??""),String(a.provider??""),String(a.modelId??"")]);return t.toString()}function u(e={}){let t=!!e.json,a=!!e.table;if(t&&a){let e=Error("Cannot use --json and --table together");throw e.code="INVALID_MODELS_OUTPUT_FORMAT",e}return a?"table":"json"}async function p(e={}){let t=e.getPublicKeys??o.rs,a=e.getKeyToModel??(()=>o.q1),i=e.hasKrouter??n.qY,r=e.fetchKrouter??s.Tw,l=e.clearKrouterCache??s.O1,d=e.getFetchOk??s.Vl,c=a(),u=t(),m=new Set(u),g=new Map;for(let e of u)g.set(e,function(e,t){let a=String(e??"").trim(),i=t[a];return i?{key:a,provider:String(i.provider??"").trim(),modelId:String(i.id??"").trim()}:a.startsWith("krouter/")?{key:a,provider:"krouter",modelId:a.slice(8)}:a.startsWith("kiro/")?{key:a,provider:"krouter",modelId:a.slice(5)}:{key:a,provider:"",modelId:""}}(e,c));let h=!1;if(i()){l();let e=await r();for(let t of(h=!d(),e.keys())){let e=function(e){let t=String(e??"").trim().replace(/^kr\//i,"").toLowerCase();return t?`krouter-${t}`:""}(t);if(e&&m.has(e))continue;let a=function(e){let t=String(e??"").trim();return t?`krouter/${t}`:""}(t);!a||g.has(a)||g.set(a,{key:a,provider:"krouter",modelId:String(t)})}}let f=[...g.values()].sort((e,t)=>e.key.localeCompare(t.key));return{entries:function(e,t=[]){let a=function(e=[]){let t=[];for(let a of e??[]){let e=String(a??"").trim();if(e)try{t.push(RegExp(e,"i"))}catch(a){let t=Error(`Invalid model filter regex: ${e}${a instanceof Error?` (${a.message})`:""}`);throw t.code="INVALID_MODEL_FILTER_REGEX",t.pattern=e,t}}return t}(t);return 0===a.length?[...e]:e.filter(e=>a.every(t=>t.test(e.key)||t.test(e.provider)||t.test(e.modelId)))}(f,e.filters),krouterFetchFailed:h}}[r,o,n,s]=l.then?(await l)():l,i()}catch(e){i(e)}})},8376(e,t,a){a.a(e,async function(e,i){try{a.d(t,{T:()=>x});var r=a(3024),o=a(6760),n=a(5347),s=a(8),l=a(5900),d=a(7500),c=a(924),u=a(8280),p=a(6806),m=a(2457),g=a(4117),h=a(6652),f=a(6765),k=a(3028),v=a(2520),b=a(831),w=a(4072),y=a(2734),S=a(6841),P=a(5048),T=a(5119),A=a(1084),I=a(8362),E=a(4768),C=a(4399),R=e([E,I,A,n,s,l,h,d,k,v,p,m,g,c,u,b,w,y,P,S,f]);[E,I,A,n,s,l,h,d,k,v,p,m,g,c,u,b,w,y,P,S,f]=R.then?(await R)():R;let L=JSON.parse((0,r.readFileSync)((0,o.join)((0,C.F8)(),"package.json"),"utf8"));async function x(){var e;let t,a=(t=(e=process.argv).findIndex(e=>"--lang"===e||"-l"===e),-1!==t&&e[t+1]?e[t+1].toLowerCase():null),i=function(e=process.argv){return e.some(e=>"--help"===e||"-h"===e||"--version"===e||"-V"===e)}(process.argv);if(i)a=a??(0,I.ao)();else{let e=(0,o.resolve)(process.cwd()),t=await (0,E.s)(e);a=a??t?.lang??(0,I.ao)()}let r=(0,I.lW)(a);if(!i){await (0,T.NL)({currentVersion:L.version,packageName:L.name,t:r});try{await (0,A.z)({t:r,argv:process.argv})}catch(e){console.error(r("cli.roleTemplate.autoSeedFailed",{message:e instanceof Error?e.message:String(e)}))}}let C=new n.Command,R={"Usage:":r("cli.helpUsage"),"Arguments:":r("cli.helpArguments"),"Options:":r("cli.helpOptions"),"Commands:":r("cli.helpCommands"),"Global Options:":r("cli.helpGlobalOptions")},x={styleTitle:e=>Object.hasOwn(R,e)?R[e]:e};C.configureHelp(x),C.name("pithosai").description(r("cli.description")).version(L.version,"-V, --version",r("cli.versionOption")).option("-r, --role <role>",r("cli.roleOption")).option("-l, --lang <lang>",r("cli.langOption")).option("-i, --interactive",r("cli.interactiveModeOption")).option("--log-path <file>","Path for log file (defaults to a per-project file under the OS temp directory)").helpOption("-h, --help",r("cli.helpOption"));let j=(0,s.z)(C,r);j&&j.configureHelp(x);let O=(0,l.Q)(C,r);O&&O.configureHelp(x);let M=(0,h.e)(C,r);M&&M.configureHelp(x),(0,d.B)(C);let N=C.commands[C.commands.length-1];N&&N.configureHelp(x),(0,k.F)(C);let D=C.commands[C.commands.length-1];D&&D.configureHelp(x),(0,v.J)(C,r);let _=C.commands[C.commands.length-1];_&&_.configureHelp(x),(0,p.H)(C);let F=C.commands[C.commands.length-1];F&&F.configureHelp(x);let z=(0,m.Ng)(C,r);z&&z.configureHelp(x);let q=(0,g.O)(C,r);q&&q.configureHelp(x);let H=(0,c.Z)(C,r);H&&H.configureHelp(x);let U=(0,u.x)(C,r);U&&U.configureHelp(x);let $=(0,b.y)(C,r);$&&$.configureHelp(x);let B=(0,w.v)(C,r);B&&B.configureHelp(x);let K=(0,y.S)(C,r);K&&K.configureHelp(x);let W=(0,P.Rr)(C,r);W&&W.configureHelp(x);let G=(0,S.x)(C,r);return G&&G.configureHelp(x),(0,f.E)(C,r),C}i()}catch(e){i(e)}})},6765(e,t,a){a.a(e,async function(e,i){try{a.d(t,{E:()=>r.E});var r=a(5745),o=e([r]);r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},5560(e,t,a){a.a(e,async function(e,i){try{a.d(t,{$i:()=>N,YP:()=>S,Ym:()=>T,d1:()=>A});var r=a(2615),o=a(3525),n=a(3713),s=a(6109),l=a(7443),d=a(5215),c=a(2586),u=a(9989),p=a(9782),m=a(8691),g=a(2120),h=a(4071),f=e([o,s,l,d,g,r,h,c,m]);function k(e,t){let a=(0,r.truncateToWidth)(String(e??""),Math.max(0,t)),i=Math.max(0,t-(0,r.visibleWidth)(a));return a+" ".repeat(i)}[o,s,l,d,g,r,h,c,m]=f.then?(await f)():f;let I=" → ";function v(e){if(Number.isFinite(e)&&e>0)return Math.floor(e);let t=Number(process.stdout.columns);return Number.isFinite(t)&&t>0?Math.floor(t):80}function b(e){return String(e??"").replace(/\x1b\[[0-9;]*m/g,"")}function w(e){let t=b(e).trimStart();return!!(""===t||/^---/.test(t)||/^[─━═-]{3,}\s*$/.test(t)||/^(>You:|You:)/i.test(t)||/^┌/.test(t)||/^[└├|]/.test(t)||t.startsWith("|")||t.startsWith("│")||/^---+$/.test(t.replace(/\s/g,""))||/^#{1,3}\s/.test(t)||/^\s*(\d+\.|[-*•])\s/.test(t))}function y(e,t,a,i){if("soft"!==a||"soft"!==i||!e||!t||w(e)||w(t))return!1;let r=b(e).trimEnd(),o=b(t).trimStart();return!(!r||!o||/[.!?]["')\]]*$/.test(r)&&/^[A-Z0-9"'`([[]/.test(o))&&/^[a-z(]/.test(o)}let E=/^\x1b\[<(\d+(?:;\d+)*)([Mm])/;class C{constructor(){this.lines=[],this._lineBreaks=[],this.maxLines=8e3,this._wrapWidth=0,this._nextRawStartsNewRow=!1,this._assistantBodyStartLine=null,this._viewportPinLine=null,this._viewportPinDisplay=null,this._wrapCache=null}setWrapWidth(e){this._wrapWidth=e}_invalidateWrapCache(){this._wrapCache=null}_wrapLogicalLines(e){let t=v(e);if(this._wrapCache&&this._wrapCache.width===t)return this._wrapCache.result;let a=function(e,t){let a=t??e.map(()=>"hard"),i=[],r=[];for(let t=0;t<e.length;t++){let o=e[t],n=a[t]??"hard";if(""===o){i.push(""),r.push("hard");continue}let s=i[i.length-1],l=r[r.length-1]??"hard";if("string"==typeof s&&""!==s&&y(s,o,l,n)){i[i.length-1]=function(e,t){let a=b(e),i=b(t).trimStart();return/\s/.test(a)&&/^[a-z(]/.test(i)?`${e} ${t}`:`${e}${t}`}(s,o);continue}i.push(o),r.push(n)}return i}(this.lines,this._lineBreaks),i=[],o=0;for(let e=0;e<this.lines.length;e++){if(0===e){i.push(0);continue}let t=this.lines[e-1],a=this.lines[e],r=this._lineBreaks[e-1]??"hard",n=this._lineBreaks[e]??"hard";""!==a&&y(t,a,r,n)||(o+=1),i.push(o)}let n=[],s=[];for(let e of a){s.push(n.length);let a=(0,r.wrapTextWithAnsi)(String(e??""),t);if(0===a.length){n.push("");continue}for(let e of a)n.push(e)}let l=i.map(e=>s[e]??0),d={rows:n,logicalStarts:l};return this._wrapCache={width:t,result:d},d}setViewportPin(e){this._viewportPinLine=Math.max(0,e),this._viewportPinDisplay=null}clearViewportPin(){this._viewportPinLine=null,this._viewportPinDisplay=null}appendLine(e){if(this._invalidateWrapCache(),this.lines.push(e),this._lineBreaks.push("hard"),this._nextRawStartsNewRow=""!==e,this.lines.length>this.maxLines){let e=this.lines.length-this.maxLines;this.lines=this.lines.slice(-this.maxLines),this._lineBreaks=this._lineBreaks.slice(-this.maxLines),null!=this._viewportPinLine&&(this._viewportPinLine=Math.max(0,this._viewportPinLine-e)),null!=this._viewportPinDisplay&&(this._viewportPinDisplay=Math.max(0,this._viewportPinDisplay-e)),null!=this._assistantBodyStartLine&&(this._assistantBodyStartLine=Math.max(0,this._assistantBodyStartLine-e))}}appendBlankSeparator(){this.appendLine(""),this._nextRawStartsNewRow=!0}ensureBlankSeparator(){if(0===this.lines.length)return;let e=this.lines[this.lines.length-1];""!==String(e).trim()&&this.appendBlankSeparator()}truncateToLineIndex(e){let t=Math.max(0,Math.min(e,this.lines.length));this.lines.length=t,this._lineBreaks.length=t,this._nextRawStartsNewRow=!0,this._invalidateWrapCache()}appendRaw(e){let t=String(e);if(this._invalidateWrapCache(),0===this.lines.length||this._nextRawStartsNewRow){this.lines.push(t),this._lineBreaks.push("soft"),this._nextRawStartsNewRow=!1;return}this.lines[this.lines.length-1]+=t,this._nextRawStartsNewRow=!1}viewportLines(e,t){if(0===this.lines.length)return[""];let a=Math.max(1,e),{rows:i,logicalStarts:r}=this._wrapLogicalLines(t),o=i.length,n=Math.max(0,o-a),s=n;if(null!=this._viewportPinDisplay)s=Math.min(Math.max(0,this._viewportPinDisplay),n);else if(null!=this._viewportPinLine){let e=r[this._viewportPinLine]??0;s=Math.min(Math.max(0,e),n)}let l=v(t);return i.slice(s,s+a).map(e=>k(e,l))}tailLines(e,t){return this.viewportLines(e,t)}bumpViewStart(e,t,a){let i,r=Math.max(1,t),o=v(a??this._wrapWidth),{rows:n,logicalStarts:s}=this._wrapLogicalLines(o),l=n.length;if(0===l)return!1;let d=Math.max(0,l-r);if(null!=this._viewportPinDisplay)i=Math.min(this._viewportPinDisplay,d);else{if(null==this._viewportPinLine)return!(e>=0)&&(this._viewportPinDisplay=Math.max(0,d+e),this._viewportPinLine=null,!0);i=Math.min(s[this._viewportPinLine]??0,d)}let c=Math.max(0,Math.min(d,i+e));return c!==i&&(this._viewportPinDisplay=c,this._viewportPinLine=null,!0)}}class R{constructor(e,t){this.tui=e,this.getMessage=t,this.intervalId=null,this.frame=0,this.active=!1,this.preserveReservedRows=!1,this.phase="loading"}_startTick(e){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),this.intervalId=setInterval(()=>{let e="loading"===this.phase?p.d2.length:p.Mm.length;this.frame=(this.frame+1)%e,this.tui.requestRender()},e)}setActive(e){e!==this.active&&(this.active=e,e?(this.preserveReservedRows=!0,this.phase="loading",this.frame=0,this._startTick(80)):this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null))}enterRunningPhase(){this.active&&"running"!==this.phase&&(this.phase="running",this.frame=0,this._startTick(120),this.tui.requestRender())}isActive(){return this.active}isRunningPhase(){return this.active&&"running"===this.phase}reservedHeight(){return this.active||this.preserveReservedRows?1:0}render(e){if(!this.active)return[k("",e)];let t="loading"===this.phase?p.d2:p.Mm,a=t[this.frame%t.length],i=this.getMessage()??"";return[(0,r.truncateToWidth)(`${a} ${i}`,e)]}invalidate(){}}class x{constructor(e){this.t=e,this.taskId="",this.model="",this.role="",this.mode="",this.usedTokens=0,this.committedRequests=0}setState(e){e&&"object"==typeof e&&("string"==typeof e.taskId&&(this.taskId=e.taskId),"string"==typeof e.model&&(this.model=e.model),"string"==typeof e.role&&(this.role=e.role),"string"==typeof e.mode&&(this.mode=e.mode),"number"==typeof e.usedTokens&&Number.isFinite(e.usedTokens)&&(this.usedTokens=Math.max(0,Math.floor(e.usedTokens))),"number"==typeof e.committedRequests&&Number.isFinite(e.committedRequests)&&(this.committedRequests=Math.max(0,Math.floor(e.committedRequests))))}render(e){let t=this.taskId?`...${this.taskId.slice(-6)}`:"...------",a=this.model||"-",i=this.role||"-",r=this.mode||"-",o=this.t("run.tuiTaskStatus.task"),n=this.t("run.tuiTaskStatus.model"),s=this.t("run.tuiTaskStatus.role"),l=this.t("run.tuiTaskStatus.mode"),d=this.t("run.tuiTaskStatus.tokens"),c=function(e){let t=Number.isFinite(e)?Math.max(0,e):0;if(t<1e3)return String(Math.floor(t));let a=e=>String(Number(e.toFixed(1)));return t<1e6?`${a(t/1e3)}KB`:t<1e9?`${a(t/1e6)}MB`:`${a(t/1e9)}GB`}(this.usedTokens),u=this.t("run.tuiTaskStatus.committed"),p=`${o}:${t} | ${n}:${a} | ${s}:${i} | ${l}:${r} | ${d}:${c} | ${u}:${this.committedRequests}`;return m.m.dim(k(p,e))}invalidate(){}}class L{constructor(e){this.t=e,this.messages=[]}setMessages(e){this.messages=Array.isArray(e)?e.map(e=>String(e??"").trim()).filter(Boolean):[]}clear(){this.messages=[]}reservedHeight(){return+(this.messages.length>0)}render(e){if(0===this.messages.length)return[];let t=(0,n.x)(this.t,this.messages,e);return[k(m.m.dim(t),e)]}invalidate(){}}class j{constructor(e,t){this.focused=!1,this.tui=e,this.onExit=t?.onExit,this.editor=new r.Editor(e,{borderColor:e=>m.m.dim(e),selectList:{selectedPrefix:e=>m.m.cyan.bold(e),selectedText:e=>m.m.cyan(e),description:e=>m.m.dim(e),scrollInfo:e=>m.m.dim(e),noMatch:e=>m.m.yellow(e)}},{paddingX:1,autocompleteMaxVisible:8}),this.editor.setAutocompleteProvider((0,o.ML)(t)),this.isShiftPressed=void 0,(0,s.i)()}isAutocompleteActive(){return this.editor.isShowingAutocomplete()}handleInput(e){if(this.editor.focused=this.focused,(0,r.matchesKey)(e,"ctrl+d")&&!this.editor.getText().trim()&&((0,u.E5)(),this.onExit?(0,u.e_)(this.onExit):(0,u.e_)(()=>this.tui.stop())),(0,r.matchesKey)(e,"alt+e")){let e=this.editor.getExpandedText();e!==this.editor.getText()&&this.editor.setText(e);return}if((0,s.y)({data:e,isShiftPressed:this.isShiftPressed})){try{(0,h.JX)("tui editor inserting newline"),this.editor.insertTextAtCursor("\n")}catch(e){(0,h.CN)("FramedEditorPrompt newline insert failed",e)}return}(0,l.c8)({data:e,editor:this.editor})||this.editor.handleInput(e)}render(e){let t,a,i,o;this.editor.focused=this.focused;let n=Math.max(3,e-2),s=(0,r.visibleWidth)(I),l=Math.max(1,n-s),d=this.editor.render(l);if(d.length<2)return d;let c=function(e){if(!Array.isArray(e)||e.length<2)return Math.max(0,(e?.length??1)-1);for(let t=e.length-1;t>=1;t--)if(b(e[t]??"").startsWith("─"))return t;return e.length-1}(d);if(c<1)return d;let u=d.slice(1,c),p=d.slice(c+1),g=m.m.cyan(I),h=(t=(0,r.visibleWidth)(I),a=Math.max(0,n-t),u.map((e,i)=>{var r;let o=k((r=e??"",String(r).replace(/(?:\.{3}|…)((?:\u001b\[[0-9;]*m)*)$/u,"$1")),a);return 0===i?`${g}${o}`:`${" ".repeat(t)}${o}`})),f=(i=`┌${"─".repeat(n)}┐`,m.m.cyan(i)),v=(o=`└${"─".repeat(n)}┘`,m.m.cyan(o)),w=e=>m.m.cyan("│")+e+m.m.cyan("│"),y=[f];for(let e of h)y.push(w(e));for(let e of(y.push(v),p))y.push(w(k(e??"",n)));return y}invalidate(){this.editor.invalidate()}}class O{constructor(e){let{terminal:t,transcript:a,loading:i,queuedFollowUp:r,taskStatus:o,prompt:n,cwdGit:s}=e;this.terminal=t,this.transcript=a,this.loading=i,this.queuedFollowUp=r,this.taskStatus=o,this.prompt=n,this.cwdGit=s,this.focused=!1,this.onPromptChromeHeightChange=e.onPromptChromeHeightChange}handleInput(e){this.prompt.focused=this.focused;let t=this.terminal.columns??80,a=0;try{a=this.prompt.render(t).length}catch(e){(0,h.CN)("PithosReplLayout prompt height before input failed",e)}this.prompt.handleInput(e);try{let e=this.prompt.render(t).length,i=Math.abs(e-a);i>0&&((0,h.JX)("tui prompt chrome height changed",{before:a,after:e,delta:i}),this.onPromptChromeHeightChange?.(i))}catch(e){(0,h.CN)("PithosReplLayout prompt height after input failed",e)}}invalidate(){this.prompt.invalidate()}footerChromeLines(e){this.prompt.focused=this.focused;let t=this.prompt.render(e),a=this.loading.reservedHeight()>0?[...this.loading.render(e)]:[],i=[...this.queuedFollowUp.render(e)],r=[this.taskStatus.render(e)],o=[...this.cwdGit.render(e)];return[...a,...i,...r,...t,...o]}render(e){this.prompt.focused=this.focused;let t=this.terminal.rows,a=this.footerChromeLines(e),i=a.length,r=t-i;r<0&&(r=0);let o=0===r?[]:this.transcript.viewportLines(Math.max(1,r),e);for(;o.length<r;)o.push(k("",e));return o.length>r&&(o=o.slice(0,r)),[...o,...a]}}class M extends r.TuiAltScreen{constructor(e){super(e,void 0,void 0,{mouse:!1}),this.agentRunning=!1,this.agentController=null,this.onTranscriptPageScroll=null,this.transcriptPageScrollGuard=null,this.onAgentControlNotice=null,this.onSuspendToBackground=null,this.onAfterRender=null,this.addInputListener(e=>this.interceptTerminalInput(e));var t=this;try{t.handleViewportInput=e=>{let a=function(e,t){try{if(!e.onTranscriptPageScroll||e.transcriptPageScrollGuard?.()===!0)return;let a=function(e){let t=function(e){let t=String(e);if(!t.startsWith("\x1b[<"))return null;let a=[];for(;t.length>0;){let e=t.match(E);if(!e)return a.length>0?a:null;let i=e[1].split(";").map(e=>Number.parseInt(e,10));if(i.length<1||i.some(e=>!Number.isFinite(e)))return a.length>0?a:null;a.push({btn:i[0]}),t=t.slice(e[0].length)}return a}(e);if(!t||0===t.length)return null;let a=0,i=!1;for(let e of t){let t=function(e){if((64&e)==0)return null;let t=3&e;return 0===t?-3:1===t?3:null}(e.btn);null!=t&&(i=!0,a+=t)}return i?a:null}(t);if(null!=a)return e.onTranscriptPageScroll(a,{coalesce:!0}),{consume:!0};let i=Math.max(3,e.terminal.rows-3),o=Math.max(3,Math.floor(.85*i));if((0,r.matchesKey)(t,"pageUp"))return e.onTranscriptPageScroll(-o),{consume:!0};if((0,r.matchesKey)(t,"pageDown"))return e.onTranscriptPageScroll(o),{consume:!0};if(!e.agentRunning){if((0,r.matchesKey)(t,"up"))return e.onTranscriptPageScroll(-1),{consume:!0};if((0,r.matchesKey)(t,"down"))return e.onTranscriptPageScroll(1),{consume:!0}}if((0,r.matchesKey)(t,"ctrl+u"))return e.onTranscriptPageScroll(-o),{consume:!0};if((0,r.matchesKey)(t,"ctrl+f"))return e.onTranscriptPageScroll(o),{consume:!0};return}catch(e){(0,h.CN)("PithosTUI.handleViewportInput transcript scroll failed",e);return}}(t,e);if(a?.consume)return a;try{let a=r.TuiAltScreen.prototype.handleViewportInput;if("function"!=typeof a)return void(0,h.CN)("invokeTuiAltScreenHandleViewportInput: TuiAltScreen.handleViewportInput is missing");return a.call(t,e)}catch(e){(0,h.CN)("invokeTuiAltScreenHandleViewportInput failed",e);return}}}catch(e){(0,h.CN)("bindPithosTuiViewportInput failed",e)}!function(e){try{let t=r.TuiAltScreen.prototype.doRender;if("function"!=typeof t)return void(0,h.CN)("bindPithosTuiAfterRender: TuiAltScreen.doRender is missing");let a=t.bind(e);Object.defineProperty(e,"doRender",{configurable:!0,writable:!0,value:()=>{a(),e.onAfterRender?.()}})}catch(e){(0,h.CN)("bindPithosTuiAfterRender failed",e)}}(this)}invokeAfterRenderHookForTests(){this.onAfterRender?.()}markFooterRowsDirty(e){let t=Math.max(0,Math.floor(Number(e)||0)),a=this.previousScreen;if(!Array.isArray(a)||0===a.length||0===t)return;let i=Math.max(0,a.length-t);for(let e=i;e<a.length;e++)a[e]=`\u0001${a[e]}`}setAgentRunning(e,t){this.agentRunning=e,this.agentController=t}interceptTerminalInput(e){try{let t;if((0,r.matchesKey)(e,"ctrl+z"))return this.onSuspendToBackground?.(),{consume:!0};if((t=String(e)).startsWith("\x1b[<")||6===t.length&&t.startsWith("\x1b[M"))return(0,h.JX)("PithosTUI.interceptTerminalInput consumed leftover SGR mouse",{length:String(e).length}),{consume:!0};if(this.agentRunning&&this.agentController){if((0,r.matchesKey)(e,"ctrl+s")){let e=`${m.m.yellow("[Ctrl+S]")} Stopping agent...`;return this.onAgentControlNotice?this.onAgentControlNotice(e):process.stdout.write(`
|
|
364
364
|
${e}
|
|
365
365
|
`),this.agentController.stop(),{consume:!0}}if((0,r.matchesKey)(e,"ctrl+p")){let e=`${m.m.yellow("[Ctrl+P]")} Pausing agent...`;return this.onAgentControlNotice?this.onAgentControlNotice(e):process.stdout.write(`
|
|
366
366
|
${e}
|
|
367
|
-
`),this.agentController.pause(),{consume:!0}}(0,r.matchesKey)(e,"ctrl+c")&&(this.onAgentControlNotice||process.stdout.write("\n"),(0,u.e_)(()=>this.stop()))}return}catch(e){(0,h.CN)("PithosTUI.interceptTerminalInput failed",e);return}}dispatchInput(e){try{let t=r.TuiAltScreen.prototype.handleTerminalInput;if("function"!=typeof t){let t=Object.getPrototypeOf(r.TuiAltScreen.prototype);if("function"==typeof t.handleTerminalInput)return void t.handleTerminalInput.call(this,e);(0,h.CN)("PithosTUI.dispatchInput: handleTerminalInput is missing");return}t.call(this,e)}catch(e){(0,h.CN)("PithosTUI.dispatchInput failed",e)}}}function S(){return"1"!==process.env.PITHOSAI_NO_TUI&&!!(process.stdout.isTTY&&process.stdin.isTTY)}class N{constructor(e){let{t,cwd:a,runOpts:i={}}=e;this.t=t,this.cwd=a,this.runOpts=i,this.terminal=new r.ProcessTerminal,this.tui=new
|
|
367
|
+
`),this.agentController.pause(),{consume:!0}}(0,r.matchesKey)(e,"ctrl+c")&&(this.onAgentControlNotice||process.stdout.write("\n"),(0,u.e_)(()=>this.stop()))}return}catch(e){(0,h.CN)("PithosTUI.interceptTerminalInput failed",e);return}}dispatchInput(e){try{let t=r.TuiAltScreen.prototype.handleTerminalInput;if("function"!=typeof t){let t=Object.getPrototypeOf(r.TuiAltScreen.prototype);if("function"==typeof t.handleTerminalInput)return void t.handleTerminalInput.call(this,e);(0,h.CN)("PithosTUI.dispatchInput: handleTerminalInput is missing");return}t.call(this,e)}catch(e){(0,h.CN)("PithosTUI.dispatchInput failed",e)}}}function S(){return"1"!==process.env.PITHOSAI_NO_TUI&&!!(process.stdout.isTTY&&process.stdin.isTTY)}class N{constructor(e){let{t,cwd:a,runOpts:i={}}=e;this.t=t,this.cwd=a,this.runOpts=i,this.terminal=new r.ProcessTerminal,this.tui=new M(this.terminal),this.transcript=new C,this.transcript.setWrapWidth(this.terminal.columns??process.stdout.columns??80),this.loadingLine=new R(this.tui,()=>this.loadingMessage),this.taskStatusLine=new x(this.t),this.queuedFollowUpLine=new L(this.t),this.cwdGitStatusLine=new d.f2(this.t),this.cwdGitStatusLine.setCwd(a),this.loadingMessage="",this.loadingRunningMessage=null,this.loadingPhase=null,this.prompt=new j(this.tui,{...i,onExit:()=>this.stop()}),this.layout=new O({terminal:this.terminal,transcript:this.transcript,loading:this.loadingLine,queuedFollowUp:this.queuedFollowUpLine,taskStatus:this.taskStatusLine,prompt:this.prompt,cwdGit:this.cwdGitStatusLine,onPromptChromeHeightChange:e=>{try{(0,h.JX)("tui prompt chrome height changed, full redraw",{delta:e}),this.requestTuiFullRedraw()}catch(e){(0,h.CN)("onPromptChromeHeightChange failed",e)}}}),this._footerRepaintAfterRender=!1,this._cwdGitRefreshToken=0,this._cwdGitWatchTimer=null,this._pendingScrollDelta=0,this._scrollFlushTimer=null,this._jobControlState=(0,c.cO)(),this._disposeJobControl=null,this._jobControlLoadingSnapshot=null;let o=new r.Container;o.addChild(this.layout),this.tui.addChild(o),this.tui.setFocus(this.layout),this.tui.onAfterRender=()=>{this._footerRepaintAfterRender&&(this._footerRepaintAfterRender=!1,this.repaintInputEditorRegion())},this._resolveLine=null,this._runtimeSubmitHandler=null,this.prompt.editor.onSubmit=e=>{let t="string"==typeof e?String(e).replace(/^\s*[>→]\s*/u,""):"",a=t.trim();if(a&&this.prompt.editor.addToHistory(a),this.requestTuiFullRedraw(),this._resolveLine){let e=this._resolveLine;this._resolveLine=null,e(t);return}if(this.tui.agentRunning)return void this._runtimeSubmitHandler?.(t);let i=this._resolveLine;this._resolveLine=null,i?.(t)},this.tui.onTranscriptPageScroll=(e,t)=>{t?.coalesce?this.queueTranscriptScroll(e):this.scrollTranscriptBy(e)},this.tui.transcriptPageScrollGuard=()=>this.prompt.isAutocompleteActive(),this.tui.onAgentControlNotice=e=>{this.transcript.appendLine(e),this.transcript.clearViewportPin(),this.requestTuiRedraw()},this.tui.onSuspendToBackground=()=>{this.suspendToBackground()}}setProjectCwd(e){this.cwd=e,this.cwdGitStatusLine.setCwd(e),this.refreshCwdGitStatusLine()}async refreshCwdGitStatusLine(e={}){let t=++this._cwdGitRefreshToken,a="string"==typeof e.cwd&&""!==e.cwd.trim()?e.cwd.trim():this.cwd,i=a!==this.cwd;i&&(this.cwd=a,this.cwdGitStatusLine.setCwd(a));try{let e=await (0,g.G2)(a);if(t!==this._cwdGitRefreshToken)return;let r=this.cwdGitStatusLine.branch;this.cwdGitStatusLine.setBranch(e),(i||e!==r)&&this.requestTuiRedrawKeepingFooter(),(0,h.JX)("PithosAgentTuiSession.refreshCwdGitStatusLine",{cwd:a,branch:e,cwdChanged:i,branchChanged:e!==r})}catch(a){if((0,h.CN)("PithosAgentTuiSession.refreshCwdGitStatusLine failed",a),t!==this._cwdGitRefreshToken)return;let e=this.cwdGitStatusLine.branch;this.cwdGitStatusLine.setBranch(""),(i||""!==e)&&this.requestTuiRedrawKeepingFooter()}}startCwdGitBranchWatch(){this.stopCwdGitBranchWatch(),this._cwdGitWatchTimer=setInterval(()=>{this.refreshCwdGitStatusLine()},2e3),this._cwdGitWatchTimer&&"function"==typeof this._cwdGitWatchTimer.unref&&this._cwdGitWatchTimer.unref(),(0,h.JX)("PithosAgentTuiSession.startCwdGitBranchWatch",{cwd:this.cwd,intervalMs:2e3})}stopCwdGitBranchWatch(){null!=this._cwdGitWatchTimer&&(clearInterval(this._cwdGitWatchTimer),this._cwdGitWatchTimer=null)}requestTuiRedraw(){this.maintainInputEditorFocus(),this.layout.invalidate(),this.tui.requestRender()}requestTuiRedrawEnsuringInputEditor(){this.prompt.invalidate(),this.layout.invalidate(),this.tui.requestRender()}requestTuiRedrawKeepingFooter(e={}){let t=Math.max(0,Math.floor(Number(e.extraDirtyRows)||0));this.maintainInputEditorFocus(),this.prompt.invalidate(),this.layout.invalidate();let a=this.terminal.columns,i=this.layout.footerChromeLines(a).length;this.tui.markFooterRowsDirty(i+t),this.tui.requestRender(!1)}repaintInputEditorRegion(){let e=this.terminal.columns,t=this.terminal.rows,a=this.layout.footerChromeLines(e),i=Math.max(1,t-a.length+1),o="\x1b[s";for(let t=0;t<a.length;t++){let n=String(a[t]).replace(r.CURSOR_MARKER,""),s=(0,r.truncateToWidth)(n,e,"",!0);o+=`\x1b[${i+t};1H\x1b[2K${s}`}o+="\x1b[u",this.terminal.write(o)}scheduleFooterRepaintAfterDifferentialRender(){this._footerRepaintAfterRender=!0}requestTuiFullRedraw(){this.layout.invalidate(),this.tui.requestRender(!0)}queueTranscriptScroll(e){let t=Number(e);Number.isFinite(t)&&0!==t&&(this._pendingScrollDelta+=t,null==this._scrollFlushTimer&&(this._scrollFlushTimer=setTimeout(()=>{this.flushQueuedTranscriptScroll()},16)))}flushQueuedTranscriptScroll(){null!=this._scrollFlushTimer&&(clearTimeout(this._scrollFlushTimer),this._scrollFlushTimer=null);let e=this._pendingScrollDelta;this._pendingScrollDelta=0,0!==e&&((0,h.JX)("PithosAgentTuiSession.flushQueuedTranscriptScroll",{delta:e}),this.scrollTranscriptBy(e))}scrollTranscriptBy(e){let t=this.terminal.rows,a=this.terminal.columns,i=this.layout.footerChromeLines(a).length,r=Math.max(1,t-i);this.transcript.bumpViewStart(e,r,a)&&this.requestTuiRedrawKeepingFooter()}start(){this._disposeJobControl||(this._disposeJobControl=(0,c.Io)({tuiSession:{resumeFromReadline:()=>this.resumeFromJobControl()},state:this._jobControlState})),this._signalHandler=()=>{(0,u.E5)(),this.tui.stop(),(0,u.eN)(),process.exit(0)},process.on("SIGINT",this._signalHandler),process.on("SIGTERM",this._signalHandler),this.tui.start(),(0,u.VV)(),this.tui.setFocus(this.layout),this.layout.focused=!0,this.prompt.focused=!0,this.prompt.editor.focused=!0,this.refreshCwdGitStatusLine()}stop(){this._disposeJobControl&&(this._disposeJobControl(),this._disposeJobControl=null),this._jobControlState.suspended=!1,this._jobControlLoadingSnapshot=null,this.loadingLine.setActive(!1),this._footerRepaintAfterRender=!1,null!=this._scrollFlushTimer&&(clearTimeout(this._scrollFlushTimer),this._scrollFlushTimer=null),this._pendingScrollDelta=0,this._signalHandler&&(process.off("SIGINT",this._signalHandler),process.off("SIGTERM",this._signalHandler),this._signalHandler=null),(0,u.E5)(),this.tui.stop(),(0,u.eN)()}captureLoadingUiState(){return{active:this.loadingLine.isActive(),message:this.loadingMessage,runningMessage:this.loadingRunningMessage,phase:this.loadingPhase}}restoreLoadingUiState(e){e?.active&&(this.loadingMessage=e.message??"",this.loadingRunningMessage=e.runningMessage??null,this.loadingPhase=e.phase??"waiting",this.loadingLine.setActive(!0),"running"===e.phase&&this.loadingLine.enterRunningPhase(),this.requestTuiRedrawKeepingFooter({extraDirtyRows:1}))}suspendToBackground(){if(!(0,c.Ph)()){try{process.stdout.write(`${this.t("run.tuiBgUnsupported")}
|
|
368
368
|
`)}catch(e){(0,h.CN)("[tui-job-control] write unsupported hint failed",e)}return!1}return(0,c.cu)({tuiSession:{suspendForReadline:()=>this.suspendForJobControl(),resumeFromReadline:()=>this.resumeFromJobControl()},state:this._jobControlState,writeHint:()=>{process.stdout.write(`${this.t("run.tuiBgSuspended")}
|
|
369
369
|
`)}})}suspendForJobControl(){this._jobControlLoadingSnapshot=this.captureLoadingUiState(),this.suspendForReadline()}resumeFromJobControl(){this.resumeFromReadline();let e=this._jobControlLoadingSnapshot;this._jobControlLoadingSnapshot=null,this.restoreLoadingUiState(e)}suspendForReadline(){this.loadingLine.setActive(!1),(0,u.E5)(),this.tui.stop(),(0,u.eN)()}resumeFromReadline(){this.tui.start(),(0,u.VV)(),this.tui.setFocus(this.layout),this.layout.focused=!0,this.prompt.focused=!0,this.prompt.editor.focused=!0,this.requestTuiFullRedraw()}appendLines(e){for(let t of e)this.transcript.appendLine(t);this.requestTuiRedraw()}appendLine(e){this.transcript.appendLine(e),this.requestTuiRedraw()}appendBlankSeparator(){this.transcript.appendBlankSeparator(),this.requestTuiRedraw()}ensureBlankSeparator(){this.transcript.ensureBlankSeparator(),this.requestTuiRedraw()}clearLoadingIfActive(){this.loadingLine.isActive()&&("waiting"===this.loadingPhase&&this.loadingRunningMessage&&(this.loadingMessage=this.loadingRunningMessage),this.loadingPhase="running",this.loadingLine.enterRunningPhase())}appendAgentChunk(e){if(!e)return;this.clearLoadingIfActive(),this.transcript.clearViewportPin();let t=String(e).replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n");for(let e=0;e<t.length;e++)e>0&&this.transcript.appendLine(""),t[e]&&this.transcript.appendRaw(t[e]);this.requestTuiRedrawKeepingFooter()}setLoading(e,t="",a={}){let{runningMessage:i=null}=a,r=this.terminal.columns,o=this.layout.footerChromeLines(r).length;this.loadingMessage=t,this.loadingRunningMessage=i,this.loadingPhase=e?"waiting":null,this.loadingLine.setActive(e);let n=this.layout.footerChromeLines(r).length;this.requestTuiRedrawKeepingFooter({extraDirtyRows:+(n!==o)})}setTaskStatus(e){this.taskStatusLine.setState(e),this.requestTuiRedraw()}setQueuedFollowUpMessages(e){this.queuedFollowUpLine.setMessages(e),this.requestTuiRedrawKeepingFooter({extraDirtyRows:1})}clearQueuedFollowUpDisplay(){this.queuedFollowUpLine.clear(),this.requestTuiRedrawKeepingFooter({extraDirtyRows:1})}getAgentOutputSink(){return{write:(e,t={})=>{"stderr"===t.stream?(this.clearLoadingIfActive(),this.transcript.clearViewportPin(),this.transcript.appendLine(m.m.red(String(e))),this.requestTuiRedrawKeepingFooter()):this.appendAgentChunk(String(e))},beginAssistantBody:()=>{this.beginAssistantBody()},finalizeAssistantBody:e=>{this.finalizeAssistantBody(e)},resetAssistantBody:()=>{this.transcript._assistantBodyStartLine=null}}}beginAssistantBody(){null===this.transcript._assistantBodyStartLine&&(this.transcript._nextRawStartsNewRow=!0,this.transcript._assistantBodyStartLine=this.transcript.lines.length)}finalizeAssistantBody(e){if(null==this.transcript._assistantBodyStartLine)return;let t=this.transcript._assistantBodyStartLine;this.transcript._assistantBodyStartLine=null,this.clearLoadingIfActive(),this.transcript.clearViewportPin(),this.transcript.truncateToLineIndex(t);let a=String(e??"").replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n");for(;a.length>0&&""===a[a.length-1];)a.pop();for(let e of a)this.transcript.appendLine(e);this.requestTuiRedrawKeepingFooter()}getIo(){return{write:e=>{this.appendAgentChunk(String(e))},writeLn:e=>{let t=String(e).split(/\r?\n/);t.length>0&&""===t[t.length-1]&&(t=t.slice(0,-1)),t.length>0&&this.clearLoadingIfActive();let a=this.transcript.lines.length;for(let e of t)this.transcript.appendLine(e);t.length>=4&&this.transcript.setViewportPin(a),this.requestTuiRedraw()}}}clearTranscriptViewportPin(){this.transcript.clearViewportPin()}setTranscriptViewportPin(e){this.transcript.setViewportPin(e),this.requestTuiFullRedraw()}attachControllerForRun(e){this.tui.setAgentRunning(!0,{stop:()=>e.stop(),pause:()=>e.pause()}),this.startCwdGitBranchWatch(),this.maintainInputEditorFocus(),this.requestTuiRedrawEnsuringInputEditor()}detachControllerForRun(){this.stopCwdGitBranchWatch(),this.refreshCwdGitStatusLine(),this.tui.setAgentRunning(!1,null),this.clearQueuedFollowUpDisplay()}readSubmittedLine(){return new Promise(e=>{this._resolveLine=e})}setRuntimeSubmitHandler(e){this._runtimeSubmitHandler=e}isAgentRunning(){return this.tui.agentRunning}maintainInputEditorFocus(){this.tui.agentRunning&&(this.tui.setFocus(this.layout),this.layout.focused=!0,this.prompt.focused=!0,this.prompt.editor.focused=!0)}ensureInputEditorActive(){this.tui.setFocus(this.layout),this.layout.focused=!0,this.prompt.focused=!0,this.prompt.editor.focused=!0,this.requestTuiFullRedraw()}}function P(e,t,a){return String(t).split("\n")}function T(e){let t,a,i,{session:r,cwd:o,t:n,mode:s}=e;if("dialog"===s){let e,t,a;return void r.appendLines([...(e=n("run.interactiveModeDialogTitle"),P(r,e)),...(t=n("run.interactiveModeCwd",{cwd:o}),P(r,t)),...(a=n("run.interactiveModeDialogTips"),P(r,a)),""])}if("plan"===s){let e,t,a;return void r.appendLines([...(e=n("run.interactiveModePlanTitle"),P(r,e)),...(t=n("run.interactiveModeCwd",{cwd:o}),P(r,t)),...(a=n("run.interactiveModePlanTips"),P(r,a)),""])}r.appendLines([...(t=n("run.interactiveModeAgentTitle"),P(r,t)),...(a=n("run.interactiveModeCwd",{cwd:o}),P(r,a)),...(i=n("run.interactiveModeAgentTips"),P(r,i)),""])}function A(e,t,a){let i=t.mode??"agent",r=[a("run.interactiveExitHint")];"dialog"===i?r.push(a("run.replIntroDialog")):"plan"===i?r.push(a("run.replIntroPlan")):r.push(a("run.shellHint")),r.push(a("run.newSessionHint"),a("run.controlHint"),a("run.replTabCompletionHint"),a("run.tuiScrollTranscriptHint")),e.appendLines(r.flatMap(t=>P(e,t)).concat([""]))}i()}catch(e){i(e)}})},5215(e,t,a){a.a(e,async function(e,i){try{a.d(t,{f2:()=>l});var r=a(2615),o=a(8691),n=e([r,o]);function s(e,t){let a=String(e??""),i=Math.max(0,Math.floor(Number(t)||0));if(i<=0)return"";if((0,r.visibleWidth)(a)<=i)return a;if(i<=3)return".".repeat(i);let o=i-3,n="";for(let e=a.length;e>0;e--){let t=a.slice(e-1);if((0,r.visibleWidth)(t)>o)break;n=t}return n||(n=(0,r.truncateToWidth)(a,o)),`...${n}`}[r,o]=n.then?(await n)():n;class l{constructor(e){this.t=e,this.cwd="",this.branch=""}setCwd(e){this.cwd=String(e??"")}setBranch(e){this.branch=String(e??"").trim()}render(e){let t=this.t("run.tuiCwdGitStatus.git"),a=function(e){let t=String(e?.cwd??""),a=String(e?.branch??"").trim(),i=Math.max(0,Math.floor(Number(e?.width)||0)),o=String(e?.gitLabel??"git").trim()||"git",n=Math.floor(.5*i),l=Math.floor(.4*i),d=s(t,n),c=d;if(a){let e=s(a,l);c=`${d} - ${o} ${e}`}let u=(0,r.truncateToWidth)(c,i),p=Math.max(0,i-(0,r.visibleWidth)(u));return u+" ".repeat(p)}({cwd:this.cwd,branch:this.branch,width:e,gitLabel:t});return[o.m.dim(a)]}invalidate(){}}i()}catch(e){i(e)}})},5661(e,t,a){a.a(e,async function(e,i){try{a.d(t,{j:()=>k,w:()=>f});var r=a(4071),o=a(9898),n=a(2815),s=a(1232),l=a(3582),d=a(8449),c=a(1316),u=a(687),p=a(1404),m=a(6179),g=e([d,c,u,s,n,r,p,m,o]);async function h(e,t){e&&await (0,d.bX)(e,{outcome:t.outcome,request:t.request,runOpts:{cwd:t.runOpts.cwd,role:t.runOpts.role,lang:t.runOpts.lang,mode:t.runOpts.mode},taskId:t.taskId,startedAt:t.startedAt,gitSnapshotBefore:t.gitSnapshotBefore})}async function f(e,t,a,i){let{taskRef:o,controller:d,io:g=c.kS,tuiSession:h=null,outputSink:f=null,sessionReport:k=null}=i,v=(0,c.kP)(h,f),b=e.trim(),w=await (0,u.iL)({trimmedRequest:b,runOpts:t,t:a,taskRef:o,io:g,tuiSession:h,controller:d,outputSink:f,sessionReport:k});if(w)return w;let y=(0,s.o)({request:b,cwd:o.projectPath??t.cwd??process.cwd(),skillsDir:t.skillsDir});if(y.unknownNames.length>0){let e=y.unknownNames[0]||"";return(0,r.JX)("executeRunWithGuard: unknown skill invoke",{unknownNames:y.unknownNames}),g.writeLn(a("run.skillInvoke.unknown",{name:e})),(0,l.NE)(o.taskId)}if(y.skillNames.length>0){let e=t.mode??"agent";if("agent"!==e)return(0,r.JX)("executeRunWithGuard: skill invoke rejected in non-agent mode",{mode:e}),g.writeLn(a("run.skillInvoke.agentOnly")),(0,l.NE)(o.taskId)}let S=(0,n._A)({request:y.cleanedRequest,cwd:o.projectPath??process.cwd()});for(let{image:e,rawPath:t}of S.imagesWithPaths)o.runtimeMessageLog.attachImage(e),(0,r.JX)("handleRequest: image attached",{rawPath:t,mimeType:e.mimeType}),g.writeLn(a("run.imageAttached",{path:t,type:e.mimeType??""}));if(S.errors.length>0){let e=S.errors.map(e=>e.rawPath).join(", ");(0,r.CN)("handleRequest: image read errors",{errors:S.errors}),g.writeLn(a("run.imageNotFound",{path:e}))}let P=S.imagesWithPaths.length>0,T=S.cleanedRequest.length>0,A=y.skillNames.length>0;if(!P&&!T&&!A)return(0,l.NE)(o.taskId);let I=S.cleanedRequest.length>0?S.cleanedRequest:A?a("run.skillInvoke.followActive"):"",E=(0,p.pM)(I,o);return(""===E&&A&&(E=a("run.skillInvoke.followActive")),""===E)?(0,l.NE)(o.taskId):"plan"===t.mode?(0,m.xy)({body:E,runOpts:t,t:a,taskRef:o,controller:d,io:g,tuiSession:h,outputSink:v}):(0,m.IZ)(E,t,a,{taskRef:o,controller:d,tuiSession:h,outputSink:v,io:g,activateSkillNames:y.skillNames})}async function k(e,t,a,i,r){let n=new Date().toISOString(),s=null!=r?await (0,o.eY)(t.cwd):null,l=i.taskRef.taskId,d=await f(e,t,a,{...i,sessionReport:r});return d.sessionReportSkip||await h(r,{startedAt:n,gitSnapshotBefore:s,outcome:d,request:e,runOpts:t,taskId:l}),d}[d,c,u,s,n,r,p,m,o]=g.then?(await g)():g,i()}catch(e){i(e)}})},8484(e,t,a){a.d(t,{D:()=>i});function i(e={}){let t,a="string"==typeof e.topic?e.topic.trim():"",r="zh-hant"===(t=String(e.lang??"").trim().toLowerCase())||"zh-tw"===t||"zh-hk"===t?"zh-Hant":"zh"===t||"zh-cn"===t?"zh":"en",o="zh"===r?"请就本计划的每个方面不断向我提问,直到我们达成共同理解。请沿设计决策树的每个分支推进,逐条理清决策之间的依赖关系。对每一个问题,请同时给出你的推荐答案。\n\n一次只提一个问题。\n\n如果某个问题可以通过探索代码库来回答,请优先探索代码库,不要仅凭猜测回答。":"zh-Hant"===r?"請就本計畫的每個方面不斷向我提問,直到我們達成共同理解。請沿設計決策樹的每個分支推進,逐條理清決策之間的依賴關係。對每一個問題,請同時給出你的推薦答案。\n\n一次只提一個問題。\n\n如果某個問題可以透過探索程式碼庫來回答,請優先探索程式碼庫,不要僅憑猜測回答。":"Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.\n\nAsk the questions one at a time.\n\nIf a question can be answered by exploring the codebase, explore the codebase instead.";return 0===a.length?o:`${"zh"===r?"聚焦 / 待压力测试的方案:":"zh-Hant"===r?"聚焦 / 待壓力測試的方案:":"Focus / plan to stress-test:"}
|
|
370
370
|
${a}
|
|
371
371
|
|
|
372
372
|
---
|
|
373
373
|
|
|
374
|
-
${o}`}},5745(e,t,a){a.a(e,async function(e,i){try{a.d(t,{E:()=>L});var r=a(6760),o=a(7598),n=a(83),s=a(4768),l=a(8362),d=a(2212),c=a(5012),u=a(4071),p=a(4239),m=a(9481),g=a(5560),h=a(5738),f=a(2568),k=a(1165),v=a(9898),b=a(8449),w=a(3582),y=a(1316),S=a(3470),P=a(5661),T=a(9013),A=a(9499),I=a(4820),E=a(3327),C=a(5061),R=e([C,E,I,n,f,s,l,d,S,h,u,g,A,p,m,y,P,v,b,T]);function L(e,t){return e.argument("[request]",t("cli.requestArgument")).option("-C, --cwd <dir>",t("cli.cwdOption")).option("--skills-dir <dir>",t("cli.skillsDirOption")).option("--reasoner",t("cli.reasonerOption"),!1).option("--chat",t("cli.chatOption"),!1).option("--pro","use DeepSeek Pro model for coding (costlier than default chat)",!1).option("--model <key>",t("cli.modelOption")).option("--cursor [model]",t("cli.cursorOption")).option("--timeout <seconds>",t("cli.timeoutOption")).option("--no-interactive",t("cli.interactiveOption")).option("--no-markdown","Plain text output only (default: markdown when TTY)").option("--mode <agent|dialog|plan>",t("cli.modeOption"),"agent").option("--task-id <id>","Resume/use a specific task id (default: new UUID)").option("--json",t("cli.jsonReportOption"),!1).option("--report-json <path>",t("cli.reportJsonOption")).addHelpText("after",t("cli.runExamples")).action(async function(t){let a=e.opts(),i=this.optsWithGlobals?this.optsWithGlobals():this.opts(),R=void 0===t||"string"==typeof t&&""===t.trim();if(R&&!a.interactive)return void e.outputHelp();let L=(0,r.resolve)(i.cwd||process.cwd()),x={taskId:(0,h.sv)(i.taskId)??(0,o.randomUUID)(),projectPath:L,agentSessionRef:(0,n.$6)(),runtimeMessageLog:(0,f.Tj)()},j=await (0,s.s)(L),M=(0,l.Fj)({cliLang:a.lang,settings:j});a.lang=M,(0,u.JX)("langOpt:",M);let O=(0,l.lW)(M);await (0,d.e)(L,a.logPath);let N=(0,S.q5)(i,a,L);!function(e,t){let a="string"==typeof e.model?e.model.trim():"";if(!a||(0,I.oT)(a))return;let i=t("run.model.unknown",{model:a});(0,u.CN)(i),console.error(i),process.exit(c.dc.CONFIG)}(N,O),function(e,t){let a=function(e){var t;let a,i;if(e.cursor)return"cursor";let r="string"==typeof e.model?e.model.trim():"",o=(0,I.aN)(e);if(r)return o?"explicit":"missing-key";let n=(t=o?.model,a=String(t?.provider??"").trim(),i=String(t?.id??"").trim(),a&&i?`${a}/${i}`:"");return n?(e.model=n,(0,u.JX)("applyEnvResolvedModel: set model from env walk",{model:n}),"env"):"none"}(e);if("none"!==a&&"missing-key"!==a)return;let i="missing-key"===a?function(e){let t=String(e??"").trim().toLowerCase();if(!t)return"";if(t.includes("/")){var a;let e;return a=t.slice(0,t.indexOf("/")).trim(),(e=String(a??"").trim().toLowerCase())&&"cursor"!==e&&"krouter"!==e&&"kiro"!==e?"ollama"===e?"OPENAI_LOCAL_API_KEY":(0,C.o4)(e)||"OPENROUTER_API_KEY":""}return t.startsWith("cursor")||t.startsWith("krouter")||t.startsWith("kiro")?"":t.startsWith("ollama")?"OPENAI_LOCAL_API_KEY":function(e){let t=(0,E.A5)();for(let a of Object.entries((0,E.Fx)()).map(([e,a])=>({prefix:String(a?.keyPrefix??"").toLowerCase(),envVar:t[e]||""})).filter(e=>e.prefix&&e.envVar).sort((e,t)=>t.prefix.length-e.prefix.length))if(e===a.prefix||e.startsWith(`${a.prefix}-`))return a.envVar;return""}(t)||"OPENROUTER_API_KEY"}(e.model):"",r=i?t("errors.modelApiKeyNotSet",{envVar:i}):t("errors.noApiKey");(0,u.JX)("exitIfModelApiKeyNotSet: model env is not configured",{source:a,envVar:i}),(0,u.CN)(r),console.error(r),process.exit(c.dc.CONFIG)}(N,O);let D=!0===i.json,_=(0,h.sv)(i.reportJson);if(D&&!1!==i.interactive){let e=O("cli.jsonReportRequiresNoInteractive");(0,u.CN)(e),console.error(e),process.exit(c.dc.USAGE)}let F=!1!==i.interactive&&(!R||a.interactive),z=_&&F?await (0,b.h9)({cwd:N.cwd,reportPath:_}):null;if((0,g.YP)()&&F)return void await (0,A.c)({tLang:O,cwd:L,runOpts:N,sessionTaskRef:x,sessionReport:z,isEmptyRequest:R,globalOpts:a,request:t});let q=new p.w;if(R&&a.interactive)(0,T.kk)(L,O,N.mode??"agent");else if(!R){let e=!1===i.interactive,a=e&&D?(0,k.VL)():null,r=new Date().toISOString(),o=e?await (0,v.eY)(N.cwd):null,n=(0,w.Ow)(x.taskId);if(await (0,m.w)({title:t,...x},{controller:q,t:O,tuiSession:null,io:y.kS,execute:async(e,t)=>{n=z?await (0,P.j)(t,N,O,{taskRef:x,controller:q},z):await (0,P.w)(t,N,O,{taskRef:x,controller:q,...a?{outputSink:a}:{}})}}),e){let e=new Date().toISOString(),a=await (0,v.eY)(N.cwd);await (0,b.uw)({outcome:n,runOpts:N,taskRef:x,request:"string"==typeof t?t:String(t??""),gitSnapshotBefore:o,gitSnapshotAfter:a,startedAt:r,finishedAt:e,jsonStdout:D,reportPath:_})}}await new Promise(e=>setImmediate(e)),F&&await (0,T.vj)(N,O,x,z)}),e}[C,E,I,n,f,s,l,d,S,h,u,g,A,p,m,y,P,v,b,T]=R.then?(await R)():R,i()}catch(e){i(e)}})},1316(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Si:()=>p,We:()=>c,kP:()=>d,kS:()=>m});var r=a(4071),o=a(9782),n=a(8691),s=a(2943),l=e([n,r]);[n,r]=l.then?(await l)():l;let m={write:e=>{process.stdout.write(e)},writeLn:e=>{process.stdout.write(e+"\n")}};function d(e,t){return e&&"function"==typeof e.getAgentOutputSink?e.getAgentOutputSink():t??null}function c(e){let{io:t,t:a,message:i,tuiSession:o=null,quietUserOutput:l=!1}=e,d=(0,s.K)({t:a,message:i});l?(0,r.CN)(d):o?((0,r.CN)(d),t.writeLn(n.m.red(d))):((0,r.vV)(d),console.error(d))}async function u(e,t,a){let{waitingMessage:i,runningMessage:r}=t,n="string"==typeof r&&""!==r.trim(),s=n?r:i;if(a){a.setLoading(!0,i,{runningMessage:n?r:null});try{return await e}finally{a.setLoading(!1)}}return(0,o.vg)(e,i,s)}async function p(e,t,a,i){return i?await e:await u(e,t,a)}i()}catch(e){i(e)}})},6607(e,t,a){a.a(e,async function(e,i){try{a.d(t,{AC:()=>T,AO:()=>w,aP:()=>S,k2:()=>v,t1:()=>P});var r=a(6760),o=a(7598),n=a(83),s=a(8691),l=a(8362),d=a(4768),c=a(4071),u=a(4380),p=a(7163),m=a(1124),g=a(161),h=e([p,n,d,l,m,g,u,s,c]);async function f(e){let t=await (0,p.c6)({dir:e.dir,projectName:e.projectName,t:e.t});t.initialized&&t.commitMessage&&e.io.writeLn(e.t("run.project.gitInitialized",{message:t.commitMessage}))}function k(e){return e.replace(/\r\n?/g,"\n").replace(/\n/g,"<br>").replace(/\|/g,"\\|")}function v(e){return/^\/list(\s|$)/i.test(String(e??""))}function b(e){let{newCwd:t,runOpts:a,taskRef:i,tuiSession:s=null}=e,l=(0,r.resolve)(String(t??"").trim());process.chdir(l);let d=process.cwd();a.cwd=d,i.taskId=(0,o.randomUUID)(),i.projectPath=d,(0,n.mb)(i.agentSessionRef),delete i.persistedTasks,s&&"function"==typeof s.setProjectCwd&&s.setProjectCwd(d),s&&"function"==typeof s.setTaskStatus&&"string"==typeof i.taskId&&s.setTaskStatus({taskId:i.taskId,usedTokens:0,committedRequests:0})}async function w(e){let{trimmedRequest:t,runOpts:a,taskRef:i,t:o,io:n,tuiSession:p=null}=e;if(!/^\s*\/create-project\b/i.test(t))return!1;let m=String(t??"").replace(/^\s*\/create-project\b\s*/i,"").trim();if(""===m){let e;try{let t;t=i&&"string"==typeof i.projectPath&&""!==i.projectPath.trim()?i.projectPath.trim():a.cwd,e=(0,r.resolve)(t)}catch(e){return n.writeLn(o("run.project.createEmptyCwdFailed",{message:e?.message??String(e)})),!0}let t=await (0,u.RT)();if((0,u.n7)(e,t)){let t=await y({runOpts:{...a,cwd:e},t:o}),i=!0===a.markdown?(0,g.oq)(t):t;return n.writeLn(i),!0}let m=await (0,d.s)(e),h=(0,l.Fj)({cliLang:a.lang,settings:m}),{project:k,resolvedPath:v}=(0,u.ib)({cwd:e,lang:h,t:o});try{await (0,u.nG)(v)}catch(t){let e=o("run.project.mkdirFailed",{message:t?.message??String(t)});return p?((0,c.CN)(e),n.writeLn(s.m.red(e))):(0,c.vV)(e),!0}await f({dir:v,projectName:k.name,t:o,io:n});try{await (0,u.RD)(k)}catch(t){let e=o("run.project.saveFailed",{message:t?.message??String(t)});return p?((0,c.CN)(e),n.writeLn(s.m.red(e))):(0,c.vV)(e),!0}return b({newCwd:v,runOpts:a,taskRef:i,tuiSession:p}),n.writeLn(o("run.project.created",{name:k.name,path:v})),n.writeLn(o("run.project.cwdNow",{cwd:v})),!0}let h=(0,u.mJ)(t,a.cwd);if(!1===h.ok)return n.writeLn(o(h.errorKey)),!0;try{await (0,u.nG)(h.resolvedPath)}catch(t){let e=o("run.project.mkdirFailed",{message:t?.message??String(t)});return p?((0,c.CN)(e),n.writeLn(s.m.red(e))):(0,c.vV)(e),!0}await f({dir:h.resolvedPath,projectName:h.project.name,t:o,io:n});try{await (0,u.RD)(h.project)}catch(t){let e=o("run.project.saveFailed",{message:t?.message??String(t)});return p?((0,c.CN)(e),n.writeLn(s.m.red(e))):(0,c.vV)(e),!0}return b({newCwd:h.resolvedPath,runOpts:a,taskRef:i,tuiSession:p}),n.writeLn(o("run.project.created",{name:h.project.name,path:h.resolvedPath})),n.writeLn(o("run.project.cwdNow",{cwd:h.resolvedPath})),!0}async function y(e){let t,{runOpts:a,t:i}=e;try{t=(0,r.resolve)(a.cwd)}catch{t=String(a.cwd??"")}let o=await (0,u.RT)(),n=(0,u.n7)(t,o),s=["",`### ${i("run.project.showTitle")}`,"",`| ${i("run.show.field")} | ${i("run.show.value")} |`,"| --- | --- |",`| ${i("run.project.showFieldCwd")} | ${k(t)} |`];if(n){s.push(`| ${i("run.project.showFieldRegistryIndex")} | ${String(n.index)} |`),s.push(`| ${i("run.project.showFieldName")} | ${k(n.project.name)} |`),s.push(`| ${i("run.project.showFieldLang")} | ${k(n.project.lang)} |`);let e=String(n.project.description??"").trim()||i("run.project.showDescriptionEmpty");s.push(`| ${i("run.project.showFieldDescription")} | ${k(e)} |`)}else s.push(`| ${i("run.project.showFieldRegistry")} | ${k(i("run.project.showNotRegistered"))} |`);return s.push(""),s.join("\n")}async function S(e){let t,{trimmedRequest:a,runOpts:i,t:r,io:o}=e;if(!/^\s*\/list-project\b/i.test(a))return!1;let n=String(a??"").replace(/^\s*\/list-project\b\s*/i,"").trim(),s=await (0,u.RT)();if(""!==n){let e=n.toLowerCase();t=s.filter(t=>t.name.toLowerCase().includes(e)||t.path.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)||t.lang.toLowerCase().includes(e))}else t=[...s];if(0===t.length)return""!==n?o.writeLn(r("run.project.listFilterEmpty",{text:n})):o.writeLn(r("run.project.listEmpty")),!0;let l=["",""!==n?r("run.project.listFilterHeader",{count:String(t.length),text:n}):r("run.project.listHeader",{count:String(t.length)}),"",`| ${r("run.project.tableIndex")} | ${r("run.project.tableName")} | ${r("run.project.tablePath")} | ${r("run.project.tableLang")} |`,"| --- | --- | --- | --- |"];for(let e=0;e<t.length;e++){let a=t[e],i=k((0,m.vt)(a.name,40)),r=k((0,m.Ky)(a.path,60));l.push(`| ${e} | ${i} | ${r} | ${k(a.lang)} |`)}l.push(""),l.push(r("run.project.switchHint")),l.push("");let d=l.join("\n"),c=!0===i.markdown?(0,g.oq)(d):d;return o.writeLn(c),!0}async function P(e){let{trimmedRequest:t,runOpts:a,t:i,io:r}=e;if(!/^\s*\/show-project\s*$/i.test(t))return!1;let o=await y({runOpts:a,t:i}),n=!0===a.markdown?(0,g.oq)(o):o;return r.writeLn(n),!0}async function T(e){let{trimmedRequest:t,runOpts:a,taskRef:i,t:r,io:o,tuiSession:n=null}=e,l=/^\s*\/switch-project\s+(\S+)\s*$/i.exec(t);if(!l)return!!/^\s*\/switch-project\b/i.test(t)&&(o.writeLn(r("run.project.switchUsage")),!0);let d=String(l[1]??"").trim(),p=await (0,u.RT)();if(0===p.length)return o.writeLn(r("run.project.listEmpty")),!0;let m=/^\d+$/.test(d)?(0,u.hd)(p,{index:Number(d)})?.project:(0,u.ph)(d,p)?.project;if(!m)return o.writeLn(r("run.project.invalidIndex",{index:d,maxIndex:String(Math.max(0,p.length-1))})),!0;try{await (0,u.nG)(m.path)}catch(t){let e=r("run.project.mkdirFailed",{message:t?.message??String(t)});return n?((0,c.CN)(e),o.writeLn(s.m.red(e))):(0,c.vV)(e),!0}return await f({dir:m.path,projectName:m.name,t:r,io:o}),b({newCwd:m.path,runOpts:a,taskRef:i,tuiSession:n}),o.writeLn(r("run.project.switched",{index:String(p.findIndex(e=>e.id===m.id)),name:m.name,path:m.path})),o.writeLn(r("run.project.cwdNow",{cwd:m.path})),!0}[p,n,d,l,m,g,u,s,c]=h.then?(await h)():h,i()}catch(e){i(e)}})},3713(e,t,a){a.d(t,{x:()=>i});function i(e,t,a){let i=t.map(e=>String(e??"").trim()).filter(Boolean);if(0===i.length)return"";let r=i.join(" \xb7 "),o=i.length>1?e("run.tuiQueuedFollowUp.countPrefix",{count:String(i.length)}):e("run.tuiQueuedFollowUp.prefix"),n=`${o} ${r}`,s=Math.max(1,a);return n.length<=s?n:1===s?"…":`${n.slice(0,s-1)}…`}},9013(e,t,a){a.a(e,async function(e,i){try{a.d(t,{kk:()=>h,vj:()=>f});var r=a(481),o=a(4239),n=a(4138),s=a(646),l=a(3525),d=a(9481),c=a(8449),u=a(3470),p=a(5661),m=e([l,o,c,u,s,d,p]);function g(e){let t=process.stdout.columns??80;for(let a of(0,n.II)(e,t))process.stdout.write(`${a}
|
|
375
|
-
`)}function h(e,t,a="agent"){if("dialog"===a){g(t("run.interactiveModeDialogTitle")),g(t("run.interactiveModeCwd",{cwd:e})),g(t("run.interactiveModeDialogTips")),process.stdout.write("\n");return}if("plan"===a){g(t("run.interactiveModePlanTitle")),g(t("run.interactiveModeCwd",{cwd:e})),g(t("run.interactiveModePlanTips")),process.stdout.write("\n");return}g(t("run.interactiveModeAgentTitle")),g(t("run.interactiveModeCwd",{cwd:e})),g(t("run.interactiveModeAgentTips")),process.stdout.write("\n")}async function f(e,t,a,i=null){let n,m=new o.w,h=e.mode??"agent";for(n=e.mode??"agent",g(t("run.interactiveExitHint")),"dialog"===n?g(t("run.replIntroDialog")):"plan"===n?g(t("run.replIntroPlan")):g(t("run.shellHint")),g(t("run.newSessionHint")),g(t("run.controlHint")),g(t("run.replTabCompletionHint"));;){let o=await function(e,t){return new Promise(a=>{let i=(0,r.createInterface)({input:process.stdin,output:process.stdout,completer:(0,l.ry)(t)});i.question(e,e=>{i.close(),a(e??"")})})}(t("run.interactivePrompt"),e),n=("string"==typeof o?o:"").replace(/\r\n?/g,"\n").trim(),g=n.toLowerCase();if(("/exit"===g||"/quit"===g)&&(await (0,c.SN)(i,{runOpts:e,taskRef:a}),process.exit(0)),""===n)continue;if(process.stdout.write("\n"),("dialog"===h||"plan"===h)&&n.toLowerCase().startsWith("/shell")){process.stdout.write(t("cli.shellDisabledInMode")+"\n");continue}let f=(0,u.jS)(e),k={current:e.cwd},v=await (0,s.as)({line:n,cwd:e.cwd,t,timeoutMs:f,cwdRef:k});e.cwd=k.current,a.projectPath=k.current,v||await (0,d.w)({title:n,...a},{controller:m,t,execute:async(r,o)=>{await (0,p.j)(o,e,t,{taskRef:a,controller:m},i)}})}}[l,o,c,u,s,d,p]=m.then?(await m)():m,i()}catch(e){i(e)}})},8099(e,t,a){a.a(e,async function(e,i){try{a.d(t,{G:()=>s});var r=a(4071),o=a(161),n=e([o,r]);async function s(e){let{markdown:t,t:i,documentTitle:n,tuiSession:s=null,skipNormalize:l=!1}=e;if(!t||"string"!=typeof t||!t.trim())return;let d=l?t:(0,o.xX)(t);if("chrome"==("chrome"===process.env.PITHOSAI_RESULT_BROWSER?"chrome":"terminal")){let{showMarkdownResultInPlaywright:e}=await Promise.resolve().then(a.bind(a,6973)),t=s&&"function"==typeof s.getAgentOutputSink?s.getAgentOutputSink():null;await e({markdown:d,t:i,documentTitle:n,outputSink:t});return}try{let{showMarkdownInPiTui:e}=await a.e("813").then(a.bind(a,5484));await e({markdown:d,t:i,documentTitle:n,tuiSession:s})}catch(e){(0,r.vV)(i("cli.resultPreviewFailed",{message:e?.message??String(e)}))}}[o,r]=n.then?(await n)():n,i()}catch(e){i(e)}})},2943(e,t,a){a.d(t,{K:()=>i});function i(e){let{t,message:a}=e,i=String(a??"").trim()||t("errors.unknownRunError");return t("errors.agentRunFailed",{message:i})}},6179(e,t,a){a.a(e,async function(e,i){try{a.d(t,{IZ:()=>S,xy:()=>y});var r=a(6760),o=a(1455),n=a(3242),s=a(4239),l=a(9737),d=a(4071),c=a(8691),u=a(8099),p=a(1165),m=a(4224),g=a(5012),h=a(3582),f=a(1316),k=a(3470),v=e([u,c,k,d,n,s,f]);async function b(e){let{markdown:t,runOpts:a,t:i,tuiSession:r=null}=e;if("1"===process.env.PITHOSAI_SKIP_RESULT_BROWSER)return;let o=a.mode??"agent";if(("dialog"===o||"plan"===o)&&t?.trim())try{await (0,u.G)({markdown:t,t:i,tuiSession:r})}catch(t){let e=i("cli.resultPreviewFailed",{message:t?.message??String(t)});r?((0,d.CN)(e),r.getIo().writeLn(c.m.red(e))):(0,d.vV)(e)}}function w(e,t){return t?{...e,toolFileChanges:{created:[...t.created??[]],modified:[...t.modified??[]],deleted:[...t.deleted??[]]}}:e}async function y(e){let{body:t,runOpts:a,t:i,taskRef:d,controller:c,io:u=f.kS,tuiSession:m=null,outputSink:g=null}=e,v=(0,p.D0)(g),y=v||!0===a.onceRun,S=(0,k.jS)(a)+1e4,P={id:d.taskId,status:"pending",title:t,description:"",createdAt:new Date().toISOString(),section:null,projectPath:d.projectPath??null},T={...c?{...a,controller:c}:{...a},...d.agentSessionRef?{agentSessionRef:d.agentSessionRef}:{},mode:"plan",outputSink:g??{write(){}},...v?{quiet:!0}:{}},A=(0,k.C8)(t),I=(0,r.resolve)((0,r.join)(a.cwd,A)),E=(0,n.Ty)(P,T),C=(0,l.n)(E,S,()=>Error(i("errors.runTimeout",{seconds:String(Math.round(S/1e3))})));try{let e=await (0,f.Si)(C,{waitingMessage:i("cli.planRunning")},m,y),t=(e&&"string"==typeof e.result&&e.result.length>0?e.result:Array.isArray(e?.results)&&e.results.length>0?e.results.join("\n\n"):"")??"";await (0,o.writeFile)(I,t,"utf8"),v||u.writeLn(i("cli.planWritten",{path:I})),!v&&t.trim()&&t.length>1024&&await b({markdown:t,runOpts:a,t:i,tuiSession:m}),e&&!1===e.success&&e.error&&(0,f.We)({io:u,t:i,message:e.error,tuiSession:m,quietUserOutput:v});let r=e?.stopped?(0,h.Ao)(d.taskId):(0,h.vH)(e,d.taskId);return{...w(r,e?.fileChanges),planFile:I}}catch(e){if(c&&(c.status===s.i.STOPPED||c.status===s.i.PAUSED))return(0,h.Ao)(d.taskId);return(0,f.We)({io:u,t:i,message:e?.message??String(e),tuiSession:m,quietUserOutput:v}),(0,h.vi)(e?.message??String(e),d.taskId)}}async function S(e,t,a,i){let{taskRef:r,controller:o,tuiSession:c=null,outputSink:u=null,io:v=f.kS,activateSkillNames:y=[]}=i,S=(0,p.D0)(u),P=S||!0===t.onceRun,T=(0,k.jS)(t)+1e4,A={id:r.taskId,status:"pending",title:e,description:"",createdAt:new Date().toISOString(),section:null,projectPath:r.projectPath??null},I=o?{...t,controller:o}:{...t};r.agentSessionRef&&(I={...I,agentSessionRef:r.agentSessionRef}),null!=u&&(I={...I,outputSink:u}),S&&(I={...I,quiet:!0}),Array.isArray(y)&&y.length>0&&(I={...I,activateSkillNames:y},(0,d.JX)("runTaskWithGuard: activateSkillNames",{activateSkillNames:y}));let E=function(e){if(!e)return(0,d.JX)("extractRuntimeImages: no runtimeMessageLog"),[];let t=e.consumeImages();return(0,d.JX)("extractRuntimeImages: consumed",{count:t.length}),t}(r.runtimeMessageLog);E.length>0?(I={...I,images:E},(0,d.JX)("runTaskWithGuard: images set on opts",{count:E.length})):(0,d.JX)("runTaskWithGuard: no images to pass"),c&&r.runtimeMessageLog&&(I={...I,runtimeMessageLog:r.runtimeMessageLog,onFollowUpQueueChange:e=>{c.setQueuedFollowUpMessages?.(e)}});let C=t.mode??"agent",R={waitingMessage:a("cli.waitingReply"),runningMessage:a("cli.runningReply")},
|
|
374
|
+
${o}`}},5745(e,t,a){a.a(e,async function(e,i){try{a.d(t,{E:()=>x});var r=a(6760),o=a(7598),n=a(83),s=a(4768),l=a(8362),d=a(2212),c=a(5012),u=a(4071),p=a(4239),m=a(9481),g=a(5560),h=a(5738),f=a(2568),k=a(1165),v=a(9898),b=a(8449),w=a(3582),y=a(1316),S=a(3470),P=a(5661),T=a(9013),A=a(9499),I=a(4820),E=a(3327),C=a(5061),R=e([C,E,I,n,f,s,l,d,S,h,u,g,A,p,m,y,P,v,b,T]);function x(e,t){return e.argument("[request]",t("cli.requestArgument")).option("-C, --cwd <dir>",t("cli.cwdOption")).option("--skills-dir <dir>",t("cli.skillsDirOption")).option("--reasoner",t("cli.reasonerOption"),!1).option("--chat",t("cli.chatOption"),!1).option("--pro","use DeepSeek Pro model for coding (costlier than default chat)",!1).option("--model <key>",t("cli.modelOption")).option("--cursor [model]",t("cli.cursorOption")).option("--timeout <seconds>",t("cli.timeoutOption")).option("--no-interactive",t("cli.interactiveOption")).option("--no-markdown","Plain text output only (default: markdown when TTY)").option("--mode <agent|dialog|plan>",t("cli.modeOption"),"agent").option("--task-id <id>","Resume/use a specific task id (default: new UUID)").option("--json",t("cli.jsonReportOption"),!1).option("--report-json <path>",t("cli.reportJsonOption")).addHelpText("after",t("cli.runExamples")).action(async function(t){let a=e.opts(),i=this.optsWithGlobals?this.optsWithGlobals():this.opts(),R=void 0===t||"string"==typeof t&&""===t.trim();if(R&&!a.interactive)return void e.outputHelp();let x=(0,r.resolve)(i.cwd||process.cwd()),L={taskId:(0,h.sv)(i.taskId)??(0,o.randomUUID)(),projectPath:x,agentSessionRef:(0,n.$6)(),runtimeMessageLog:(0,f.Tj)()},j=await (0,s.s)(x),O=(0,l.Fj)({cliLang:a.lang,settings:j});a.lang=O,(0,u.JX)("langOpt:",O);let M=(0,l.lW)(O);await (0,d.e)(x,a.logPath);let N=(0,S.q5)(i,a,x);!function(e,t){let a="string"==typeof e.model?e.model.trim():"";if(!a||(0,I.oT)(a))return;let i=t("run.model.unknown",{model:a});(0,u.CN)(i),console.error(i),process.exit(c.dc.CONFIG)}(N,M),function(e,t){let a=function(e){var t;let a,i;if(e.cursor)return"cursor";let r="string"==typeof e.model?e.model.trim():"",o=(0,I.aN)(e);if(r)return o?"explicit":"missing-key";let n=(t=o?.model,a=String(t?.provider??"").trim(),i=String(t?.id??"").trim(),a&&i?`${a}/${i}`:"");return n?(e.model=n,(0,u.JX)("applyEnvResolvedModel: set model from env walk",{model:n}),"env"):"none"}(e);if("none"!==a&&"missing-key"!==a)return;let i="missing-key"===a?function(e){let t=String(e??"").trim().toLowerCase();if(!t)return"";if(t.includes("/")){var a;let e;return a=t.slice(0,t.indexOf("/")).trim(),(e=String(a??"").trim().toLowerCase())&&"cursor"!==e&&"krouter"!==e&&"kiro"!==e?"ollama"===e?"OPENAI_LOCAL_API_KEY":(0,C.o4)(e)||"OPENROUTER_API_KEY":""}return t.startsWith("cursor")||t.startsWith("krouter")||t.startsWith("kiro")?"":t.startsWith("ollama")?"OPENAI_LOCAL_API_KEY":function(e){let t=(0,E.A5)();for(let a of Object.entries((0,E.Fx)()).map(([e,a])=>({prefix:String(a?.keyPrefix??"").toLowerCase(),envVar:t[e]||""})).filter(e=>e.prefix&&e.envVar).sort((e,t)=>t.prefix.length-e.prefix.length))if(e===a.prefix||e.startsWith(`${a.prefix}-`))return a.envVar;return""}(t)||"OPENROUTER_API_KEY"}(e.model):"",r=i?t("errors.modelApiKeyNotSet",{envVar:i}):t("errors.noApiKey");(0,u.JX)("exitIfModelApiKeyNotSet: model env is not configured",{source:a,envVar:i}),(0,u.CN)(r),console.error(r),process.exit(c.dc.CONFIG)}(N,M);let D=!0===i.json,_=(0,h.sv)(i.reportJson);if(D&&!1!==i.interactive){let e=M("cli.jsonReportRequiresNoInteractive");(0,u.CN)(e),console.error(e),process.exit(c.dc.USAGE)}let F=!1!==i.interactive&&(!R||a.interactive),z=_&&F?await (0,b.h9)({cwd:N.cwd,reportPath:_}):null;if((0,g.YP)()&&F)return void await (0,A.c)({tLang:M,cwd:x,runOpts:N,sessionTaskRef:L,sessionReport:z,isEmptyRequest:R,globalOpts:a,request:t});let q=new p.w;if(R&&a.interactive)(0,T.kk)(x,M,N.mode??"agent");else if(!R){let e=!1===i.interactive,a=e&&D?(0,k.VL)():null,r=new Date().toISOString(),o=e?await (0,v.eY)(N.cwd):null,n=(0,w.Ow)(L.taskId);if(await (0,m.w)({title:t,...L},{controller:q,t:M,tuiSession:null,io:y.kS,execute:async(e,t)=>{n=z?await (0,P.j)(t,N,M,{taskRef:L,controller:q},z):await (0,P.w)(t,N,M,{taskRef:L,controller:q,...a?{outputSink:a}:{}})}}),e){let e=new Date().toISOString(),a=await (0,v.eY)(N.cwd);await (0,b.uw)({outcome:n,runOpts:N,taskRef:L,request:"string"==typeof t?t:String(t??""),gitSnapshotBefore:o,gitSnapshotAfter:a,startedAt:r,finishedAt:e,jsonStdout:D,reportPath:_})}}await new Promise(e=>setImmediate(e)),F&&await (0,T.vj)(N,M,L,z)}),e}[C,E,I,n,f,s,l,d,S,h,u,g,A,p,m,y,P,v,b,T]=R.then?(await R)():R,i()}catch(e){i(e)}})},1316(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Si:()=>p,We:()=>c,kP:()=>d,kS:()=>m});var r=a(4071),o=a(9782),n=a(8691),s=a(2943),l=e([n,r]);[n,r]=l.then?(await l)():l;let m={write:e=>{process.stdout.write(e)},writeLn:e=>{process.stdout.write(e+"\n")}};function d(e,t){return e&&"function"==typeof e.getAgentOutputSink?e.getAgentOutputSink():t??null}function c(e){let{io:t,t:a,message:i,tuiSession:o=null,quietUserOutput:l=!1}=e,d=(0,s.K)({t:a,message:i});l?(0,r.CN)(d):o?((0,r.CN)(d),t.writeLn(n.m.red(d))):((0,r.vV)(d),console.error(d))}async function u(e,t,a){let{waitingMessage:i,runningMessage:r}=t,n="string"==typeof r&&""!==r.trim(),s=n?r:i;if(a){a.setLoading(!0,i,{runningMessage:n?r:null});try{return await e}finally{a.setLoading(!1)}}return(0,o.vg)(e,i,s)}async function p(e,t,a,i){return i?await e:await u(e,t,a)}i()}catch(e){i(e)}})},6607(e,t,a){a.a(e,async function(e,i){try{a.d(t,{AC:()=>T,AO:()=>w,aP:()=>S,k2:()=>v,t1:()=>P});var r=a(6760),o=a(7598),n=a(83),s=a(8691),l=a(8362),d=a(4768),c=a(4071),u=a(4380),p=a(7163),m=a(1124),g=a(161),h=e([p,n,d,l,m,g,u,s,c]);async function f(e){let t=await (0,p.c6)({dir:e.dir,projectName:e.projectName,t:e.t});t.initialized&&t.commitMessage&&e.io.writeLn(e.t("run.project.gitInitialized",{message:t.commitMessage}))}function k(e){return e.replace(/\r\n?/g,"\n").replace(/\n/g,"<br>").replace(/\|/g,"\\|")}function v(e){return/^\/list(\s|$)/i.test(String(e??""))}function b(e){let{newCwd:t,runOpts:a,taskRef:i,tuiSession:s=null}=e,l=(0,r.resolve)(String(t??"").trim());process.chdir(l);let d=process.cwd();a.cwd=d,i.taskId=(0,o.randomUUID)(),i.projectPath=d,(0,n.mb)(i.agentSessionRef),delete i.persistedTasks,s&&"function"==typeof s.setProjectCwd&&s.setProjectCwd(d),s&&"function"==typeof s.setTaskStatus&&"string"==typeof i.taskId&&s.setTaskStatus({taskId:i.taskId,usedTokens:0,committedRequests:0})}async function w(e){let{trimmedRequest:t,runOpts:a,taskRef:i,t:o,io:n,tuiSession:p=null}=e;if(!/^\s*\/create-project\b/i.test(t))return!1;let m=String(t??"").replace(/^\s*\/create-project\b\s*/i,"").trim();if(""===m){let e;try{let t;t=i&&"string"==typeof i.projectPath&&""!==i.projectPath.trim()?i.projectPath.trim():a.cwd,e=(0,r.resolve)(t)}catch(e){return n.writeLn(o("run.project.createEmptyCwdFailed",{message:e?.message??String(e)})),!0}let t=await (0,u.RT)();if((0,u.n7)(e,t)){let t=await y({runOpts:{...a,cwd:e},t:o}),i=!0===a.markdown?(0,g.oq)(t):t;return n.writeLn(i),!0}let m=await (0,d.s)(e),h=(0,l.Fj)({cliLang:a.lang,settings:m}),{project:k,resolvedPath:v}=(0,u.ib)({cwd:e,lang:h,t:o});try{await (0,u.nG)(v)}catch(t){let e=o("run.project.mkdirFailed",{message:t?.message??String(t)});return p?((0,c.CN)(e),n.writeLn(s.m.red(e))):(0,c.vV)(e),!0}await f({dir:v,projectName:k.name,t:o,io:n});try{await (0,u.RD)(k)}catch(t){let e=o("run.project.saveFailed",{message:t?.message??String(t)});return p?((0,c.CN)(e),n.writeLn(s.m.red(e))):(0,c.vV)(e),!0}return b({newCwd:v,runOpts:a,taskRef:i,tuiSession:p}),n.writeLn(o("run.project.created",{name:k.name,path:v})),n.writeLn(o("run.project.cwdNow",{cwd:v})),!0}let h=(0,u.mJ)(t,a.cwd);if(!1===h.ok)return n.writeLn(o(h.errorKey)),!0;try{await (0,u.nG)(h.resolvedPath)}catch(t){let e=o("run.project.mkdirFailed",{message:t?.message??String(t)});return p?((0,c.CN)(e),n.writeLn(s.m.red(e))):(0,c.vV)(e),!0}await f({dir:h.resolvedPath,projectName:h.project.name,t:o,io:n});try{await (0,u.RD)(h.project)}catch(t){let e=o("run.project.saveFailed",{message:t?.message??String(t)});return p?((0,c.CN)(e),n.writeLn(s.m.red(e))):(0,c.vV)(e),!0}return b({newCwd:h.resolvedPath,runOpts:a,taskRef:i,tuiSession:p}),n.writeLn(o("run.project.created",{name:h.project.name,path:h.resolvedPath})),n.writeLn(o("run.project.cwdNow",{cwd:h.resolvedPath})),!0}async function y(e){let t,{runOpts:a,t:i}=e;try{t=(0,r.resolve)(a.cwd)}catch{t=String(a.cwd??"")}let o=await (0,u.RT)(),n=(0,u.n7)(t,o),s=["",`### ${i("run.project.showTitle")}`,"",`| ${i("run.show.field")} | ${i("run.show.value")} |`,"| --- | --- |",`| ${i("run.project.showFieldCwd")} | ${k(t)} |`];if(n){s.push(`| ${i("run.project.showFieldRegistryIndex")} | ${String(n.index)} |`),s.push(`| ${i("run.project.showFieldName")} | ${k(n.project.name)} |`),s.push(`| ${i("run.project.showFieldLang")} | ${k(n.project.lang)} |`);let e=String(n.project.description??"").trim()||i("run.project.showDescriptionEmpty");s.push(`| ${i("run.project.showFieldDescription")} | ${k(e)} |`)}else s.push(`| ${i("run.project.showFieldRegistry")} | ${k(i("run.project.showNotRegistered"))} |`);return s.push(""),s.join("\n")}async function S(e){let t,{trimmedRequest:a,runOpts:i,t:r,io:o}=e;if(!/^\s*\/list-project\b/i.test(a))return!1;let n=String(a??"").replace(/^\s*\/list-project\b\s*/i,"").trim(),s=await (0,u.RT)();if(""!==n){let e=n.toLowerCase();t=s.filter(t=>t.name.toLowerCase().includes(e)||t.path.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)||t.lang.toLowerCase().includes(e))}else t=[...s];if(0===t.length)return""!==n?o.writeLn(r("run.project.listFilterEmpty",{text:n})):o.writeLn(r("run.project.listEmpty")),!0;let l=["",""!==n?r("run.project.listFilterHeader",{count:String(t.length),text:n}):r("run.project.listHeader",{count:String(t.length)}),"",`| ${r("run.project.tableIndex")} | ${r("run.project.tableName")} | ${r("run.project.tablePath")} | ${r("run.project.tableLang")} |`,"| --- | --- | --- | --- |"];for(let e=0;e<t.length;e++){let a=t[e],i=k((0,m.vt)(a.name,40)),r=k((0,m.Ky)(a.path,60));l.push(`| ${e} | ${i} | ${r} | ${k(a.lang)} |`)}l.push(""),l.push(r("run.project.switchHint")),l.push("");let d=l.join("\n"),c=!0===i.markdown?(0,g.oq)(d):d;return o.writeLn(c),!0}async function P(e){let{trimmedRequest:t,runOpts:a,t:i,io:r}=e;if(!/^\s*\/show-project\s*$/i.test(t))return!1;let o=await y({runOpts:a,t:i}),n=!0===a.markdown?(0,g.oq)(o):o;return r.writeLn(n),!0}async function T(e){let{trimmedRequest:t,runOpts:a,taskRef:i,t:r,io:o,tuiSession:n=null}=e,l=/^\s*\/switch-project\s+(\S+)\s*$/i.exec(t);if(!l)return!!/^\s*\/switch-project\b/i.test(t)&&(o.writeLn(r("run.project.switchUsage")),!0);let d=String(l[1]??"").trim(),p=await (0,u.RT)();if(0===p.length)return o.writeLn(r("run.project.listEmpty")),!0;let m=/^\d+$/.test(d)?(0,u.hd)(p,{index:Number(d)})?.project:(0,u.ph)(d,p)?.project;if(!m)return o.writeLn(r("run.project.invalidIndex",{index:d,maxIndex:String(Math.max(0,p.length-1))})),!0;try{await (0,u.nG)(m.path)}catch(t){let e=r("run.project.mkdirFailed",{message:t?.message??String(t)});return n?((0,c.CN)(e),o.writeLn(s.m.red(e))):(0,c.vV)(e),!0}return await f({dir:m.path,projectName:m.name,t:r,io:o}),b({newCwd:m.path,runOpts:a,taskRef:i,tuiSession:n}),o.writeLn(r("run.project.switched",{index:String(p.findIndex(e=>e.id===m.id)),name:m.name,path:m.path})),o.writeLn(r("run.project.cwdNow",{cwd:m.path})),!0}[p,n,d,l,m,g,u,s,c]=h.then?(await h)():h,i()}catch(e){i(e)}})},3713(e,t,a){a.d(t,{x:()=>i});function i(e,t,a){let i=t.map(e=>String(e??"").trim()).filter(Boolean);if(0===i.length)return"";let r=i.join(" \xb7 "),o=i.length>1?e("run.tuiQueuedFollowUp.countPrefix",{count:String(i.length)}):e("run.tuiQueuedFollowUp.prefix"),n=`${o} ${r}`,s=Math.max(1,a);return n.length<=s?n:1===s?"…":`${n.slice(0,s-1)}…`}},9013(e,t,a){a.a(e,async function(e,i){try{a.d(t,{kk:()=>h,vj:()=>f});var r=a(481),o=a(4239),n=a(4138),s=a(646),l=a(3525),d=a(9481),c=a(8449),u=a(3470),p=a(5661),m=e([l,o,c,u,s,d,p]);function g(e){let t=process.stdout.columns??80;for(let a of(0,n.II)(e,t))process.stdout.write(`${a}
|
|
375
|
+
`)}function h(e,t,a="agent"){if("dialog"===a){g(t("run.interactiveModeDialogTitle")),g(t("run.interactiveModeCwd",{cwd:e})),g(t("run.interactiveModeDialogTips")),process.stdout.write("\n");return}if("plan"===a){g(t("run.interactiveModePlanTitle")),g(t("run.interactiveModeCwd",{cwd:e})),g(t("run.interactiveModePlanTips")),process.stdout.write("\n");return}g(t("run.interactiveModeAgentTitle")),g(t("run.interactiveModeCwd",{cwd:e})),g(t("run.interactiveModeAgentTips")),process.stdout.write("\n")}async function f(e,t,a,i=null){let n,m=new o.w,h=e.mode??"agent";for(n=e.mode??"agent",g(t("run.interactiveExitHint")),"dialog"===n?g(t("run.replIntroDialog")):"plan"===n?g(t("run.replIntroPlan")):g(t("run.shellHint")),g(t("run.newSessionHint")),g(t("run.controlHint")),g(t("run.replTabCompletionHint"));;){let o=await function(e,t){return new Promise(a=>{let i=(0,r.createInterface)({input:process.stdin,output:process.stdout,completer:(0,l.ry)(t)});i.question(e,e=>{i.close(),a(e??"")})})}(t("run.interactivePrompt"),e),n=("string"==typeof o?o:"").replace(/\r\n?/g,"\n").trim(),g=n.toLowerCase();if(("/exit"===g||"/quit"===g)&&(await (0,c.SN)(i,{runOpts:e,taskRef:a}),process.exit(0)),""===n)continue;if(process.stdout.write("\n"),("dialog"===h||"plan"===h)&&n.toLowerCase().startsWith("/shell")){process.stdout.write(t("cli.shellDisabledInMode")+"\n");continue}let f=(0,u.jS)(e),k={current:e.cwd},v=await (0,s.as)({line:n,cwd:e.cwd,t,timeoutMs:f,cwdRef:k});e.cwd=k.current,a.projectPath=k.current,v||await (0,d.w)({title:n,...a},{controller:m,t,execute:async(r,o)=>{await (0,p.j)(o,e,t,{taskRef:a,controller:m},i)}})}}[l,o,c,u,s,d,p]=m.then?(await m)():m,i()}catch(e){i(e)}})},8099(e,t,a){a.a(e,async function(e,i){try{a.d(t,{G:()=>s});var r=a(4071),o=a(161),n=e([o,r]);async function s(e){let{markdown:t,t:i,documentTitle:n,tuiSession:s=null,skipNormalize:l=!1}=e;if(!t||"string"!=typeof t||!t.trim())return;let d=l?t:(0,o.xX)(t);if("chrome"==("chrome"===process.env.PITHOSAI_RESULT_BROWSER?"chrome":"terminal")){let{showMarkdownResultInPlaywright:e}=await Promise.resolve().then(a.bind(a,6973)),t=s&&"function"==typeof s.getAgentOutputSink?s.getAgentOutputSink():null;await e({markdown:d,t:i,documentTitle:n,outputSink:t});return}try{let{showMarkdownInPiTui:e}=await a.e("813").then(a.bind(a,5484));await e({markdown:d,t:i,documentTitle:n,tuiSession:s})}catch(e){(0,r.vV)(i("cli.resultPreviewFailed",{message:e?.message??String(e)}))}}[o,r]=n.then?(await n)():n,i()}catch(e){i(e)}})},2943(e,t,a){a.d(t,{K:()=>i});function i(e){let{t,message:a}=e,i=String(a??"").trim()||t("errors.unknownRunError");return t("errors.agentRunFailed",{message:i})}},6179(e,t,a){a.a(e,async function(e,i){try{a.d(t,{IZ:()=>S,xy:()=>y});var r=a(6760),o=a(1455),n=a(3242),s=a(4239),l=a(9737),d=a(4071),c=a(8691),u=a(8099),p=a(1165),m=a(4224),g=a(5012),h=a(3582),f=a(1316),k=a(3470),v=e([u,c,k,d,n,s,f]);async function b(e){let{markdown:t,runOpts:a,t:i,tuiSession:r=null}=e;if("1"===process.env.PITHOSAI_SKIP_RESULT_BROWSER)return;let o=a.mode??"agent";if(("dialog"===o||"plan"===o)&&t?.trim())try{await (0,u.G)({markdown:t,t:i,tuiSession:r})}catch(t){let e=i("cli.resultPreviewFailed",{message:t?.message??String(t)});r?((0,d.CN)(e),r.getIo().writeLn(c.m.red(e))):(0,d.vV)(e)}}function w(e,t){return t?{...e,toolFileChanges:{created:[...t.created??[]],modified:[...t.modified??[]],deleted:[...t.deleted??[]]}}:e}async function y(e){let{body:t,runOpts:a,t:i,taskRef:d,controller:c,io:u=f.kS,tuiSession:m=null,outputSink:g=null}=e,v=(0,p.D0)(g),y=v||!0===a.onceRun,S=(0,k.jS)(a)+1e4,P={id:d.taskId,status:"pending",title:t,description:"",createdAt:new Date().toISOString(),section:null,projectPath:d.projectPath??null},T={...c?{...a,controller:c}:{...a},...d.agentSessionRef?{agentSessionRef:d.agentSessionRef}:{},mode:"plan",outputSink:g??{write(){}},...v?{quiet:!0}:{}},A=(0,k.C8)(t),I=(0,r.resolve)((0,r.join)(a.cwd,A)),E=(0,n.Ty)(P,T),C=(0,l.n)(E,S,()=>Error(i("errors.runTimeout",{seconds:String(Math.round(S/1e3))})));try{let e=await (0,f.Si)(C,{waitingMessage:i("cli.planRunning")},m,y),t=(e&&"string"==typeof e.result&&e.result.length>0?e.result:Array.isArray(e?.results)&&e.results.length>0?e.results.join("\n\n"):"")??"";await (0,o.writeFile)(I,t,"utf8"),v||u.writeLn(i("cli.planWritten",{path:I})),!v&&t.trim()&&t.length>1024&&await b({markdown:t,runOpts:a,t:i,tuiSession:m}),e&&!1===e.success&&e.error&&(0,f.We)({io:u,t:i,message:e.error,tuiSession:m,quietUserOutput:v});let r=e?.stopped?(0,h.Ao)(d.taskId):(0,h.vH)(e,d.taskId);return{...w(r,e?.fileChanges),planFile:I}}catch(e){if(c&&(c.status===s.i.STOPPED||c.status===s.i.PAUSED))return(0,h.Ao)(d.taskId);return(0,f.We)({io:u,t:i,message:e?.message??String(e),tuiSession:m,quietUserOutput:v}),(0,h.vi)(e?.message??String(e),d.taskId)}}async function S(e,t,a,i){let{taskRef:r,controller:o,tuiSession:c=null,outputSink:u=null,io:v=f.kS,activateSkillNames:y=[]}=i,S=(0,p.D0)(u),P=S||!0===t.onceRun,T=(0,k.jS)(t)+1e4,A={id:r.taskId,status:"pending",title:e,description:"",createdAt:new Date().toISOString(),section:null,projectPath:r.projectPath??null},I=o?{...t,controller:o}:{...t};r.agentSessionRef&&(I={...I,agentSessionRef:r.agentSessionRef}),null!=u&&(I={...I,outputSink:u}),S&&(I={...I,quiet:!0}),Array.isArray(y)&&y.length>0&&(I={...I,activateSkillNames:y},(0,d.JX)("runTaskWithGuard: activateSkillNames",{activateSkillNames:y}));let E=function(e){if(!e)return(0,d.JX)("extractRuntimeImages: no runtimeMessageLog"),[];let t=e.consumeImages();return(0,d.JX)("extractRuntimeImages: consumed",{count:t.length}),t}(r.runtimeMessageLog);E.length>0?(I={...I,images:E},(0,d.JX)("runTaskWithGuard: images set on opts",{count:E.length})):(0,d.JX)("runTaskWithGuard: no images to pass"),c&&r.runtimeMessageLog&&(I={...I,runtimeMessageLog:r.runtimeMessageLog,onFollowUpQueueChange:e=>{c.setQueuedFollowUpMessages?.(e)}});let C=t.mode??"agent",R={waitingMessage:a("cli.waitingReply"),runningMessage:a("cli.runningReply")},x=()=>Error(a("errors.runTimeout",{seconds:String(Math.round(T/1e3))}));try{if("dialog"===C){let e=(0,n.Ty)(A,I),i=(0,l.n)(e,T,x),o=await (0,f.Si)(i,R,c,P),s=("string"==typeof o.result&&o.result.length>0?o.result:Array.isArray(o.results)&&o.results.length>0?o.results.join("\n\n"):"")??"";!1===o.success&&o.error&&(0,f.We)({io:v,t:a,message:o.error,tuiSession:c,quietUserOutput:S}),!S&&s.trim()&&s.length>1024&&await b({markdown:s,runOpts:t,t:a,tuiSession:c});let d=o.stopped?(0,h.Ao)(r.taskId):(0,h.vH)(o,r.taskId);return w(d,o.fileChanges)}let e=(0,n.eF)(A,I),i=(0,l.n)(e,T,x),o=await (0,f.Si)(i,R,c,P),s=(0,h.fv)(o,r.taskId);return w(s,o.fileChanges)}catch(e){if(o&&(o.status===s.i.STOPPED||o.status===s.i.PAUSED))return(0,h.Ao)(r.taskId);return e instanceof m.VP&&(c&&"function"==typeof c.stop&&c.stop(),(0,f.We)({io:v,t:a,message:e?.message??String(e),tuiSession:null,quietUserOutput:!1}),process.exit(g.dc.CONFIG)),(0,f.We)({io:v,t:a,message:e?.message??String(e),tuiSession:c,quietUserOutput:S}),(0,h.vi)(e?.message??String(e),r.taskId)}}[u,c,k,d,n,s,f]=v.then?(await v)():v,i()}catch(e){i(e)}})},3470(e,t,a){a.a(e,async function(e,i){try{a.d(t,{C8:()=>d,jS:()=>c,q5:()=>u,uf:()=>l});var r=a(7598),o=a(5012),n=a(5738),s=e([n]);function l(e){let t="string"==typeof e?e.trim().toLowerCase():"agent";return o.fk.includes(t)?t:"agent"}function d(e){let t=String(e).split(/\r?\n/)[0].trim(),a=t.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"");if(!a){let e=(0,r.createHash)("md5").update(t||"plan","utf8").digest("hex").slice(0,8);return`${e}-plan.md`}return a.length>80&&(a=a.slice(0,80).replace(/-+$/g,"")),`${a}-plan.md`}function c(e){let t=null!=e.timeout?1e3*e.timeout:null,a="string"==typeof process.env.PITHOSAI_TIMEOUT_MS?parseInt(process.env.PITHOSAI_TIMEOUT_MS,10):null;return t??a??o.TZ}function u(e,t,a){let i=null!=e.timeout?Number(e.timeout):void 0,r=!1!==e.markdown&&!!process.stdout.isTTY;return{cwd:a,skillsDir:(0,n.sv)(e.skillsDir),reasoner:!0===e.reasoner,chat:!0===e.chat,pro:!0===e.pro,cursor:(0,n.M)(e.cursor),model:(0,n.sv)(e.model),lang:t.lang,role:t.role,timeout:i,markdown:r,mode:l(e.mode),onceRun:!1===e.interactive}}n=(s.then?(await s)():s)[0],i()}catch(e){i(e)}})},3582(e,t,a){a.d(t,{Ao:()=>s,FY:()=>u,NE:()=>r,Ow:()=>o,Yh:()=>c,fv:()=>d,vH:()=>l,vi:()=>n});var i=a(5012);function r(e){return{status:"success",taskId:e,sessionReportSkip:!0}}function o(e){return{status:"success",taskId:e}}function n(e,t){return{status:"failure",error:String(e??"").trim()||"Agent run failed",taskId:t}}function s(e){return{status:"stopped",taskId:e}}function l(e,t){return e?.success===!0?o(t):n(e?.error,t)}function d(e,t){return e?.stopped===!0?s(t):e?.success===!0?o(t):n(e?.error,t)}function c(e){return"success"===e.status?0:"stopped"===e.status?i.dc.AGENT_STOPPED:i.dc.AGENT_FAILED}function u(e){return"success"===e.status}},1906(e,t,a){a.a(e,async function(e,i){try{a.d(t,{IW:()=>c,pX:()=>u});var r=a(1455),o=a(6760),n=a(3582),s=a(9898),l=e([s]);function d(e){return{created:[...e?.created??[]].sort(),modified:[...e?.modified??[]].sort(),deleted:[...e?.deleted??[]].sort()}}function c(e){let{outcome:t,runOpts:a,taskId:i,request:r,gitChanges:l,toolChanges:c,startedAt:u,finishedAt:p}=e,m=d(l),g=d(c),h=(0,s.Y9)(m,g),f=Date.parse(u),k=Date.parse(p),v=Number.isFinite(f)&&Number.isFinite(k)?Math.max(0,k-f):0;return{version:1,success:(0,n.FY)(t),exitCode:(0,n.Yh)(t),status:t.status,taskId:i,cwd:(0,o.resolve)(a.cwd??process.cwd()),role:"string"==typeof a.role&&""!==a.role.trim()?a.role.trim():null,lang:"string"==typeof a.lang&&""!==a.lang.trim()?a.lang.trim():"en",mode:"string"==typeof a.mode&&""!==a.mode.trim()?a.mode.trim():"agent",request:r,startedAt:u,finishedAt:p,durationMs:v,error:"failure"===t.status?t.error??null:null,artifacts:{planFile:t.planFile??null},files:h,filesBySource:{git:m,tools:g}}}async function u(e,t={}){let a,i=(a=Array.isArray(e)?e:[e],`${JSON.stringify(a,null,2)}
|
|
376
376
|
`);if(!0===t.jsonStdout&&process.stdout.write(i),"string"==typeof t.reportPath&&""!==t.reportPath.trim()){let e=(0,o.resolve)(t.reportPath.trim());await (0,r.mkdir)((0,o.dirname)(e),{recursive:!0}),await (0,r.writeFile)(e,i,"utf8")}}s=(l.then?(await l)():l)[0],i()}catch(e){i(e)}})},2815(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Nr:()=>u,_A:()=>c});var r=a(4071),o=a(3024),n=a(6760),s=a(2568),l=e([s,r]);[s,r]=l.then?(await l)():l;let p={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".bmp":"image/bmp",".svg":"image/svg+xml"};function d(e){if(!(0,o.existsSync)(e))return(0,r.CN)("readImageFile: file not found",e),null;try{let t=(0,o.readFileSync)(e),a=p[(0,n.extname)(e).toLowerCase()]??null,i=t.toString("base64");return(0,r.JX)("readImageFile: success",{path:e,mimeType:a,dataLen:i.length}),{type:"image",mimeType:a??"image/png",data:i}}catch(t){return(0,r.CN)("readImageFile: read error",e,t),null}}function c(e){let{request:t,cwd:a}=e,i=String(t??"").trim(),o=[],s=[],l=[...i.matchAll(/(?:^|\s)\/image\s+(\S+)/gi)];if(0===l.length)return{cleanedRequest:i,imagesWithPaths:[],errors:[]};let c=l.map(e=>({rawPath:e[1],index:e.index,length:e[0].length})),u=i;for(let e=c.length-1;e>=0;e--){let{index:t,length:a}=c[e];u=u.slice(0,t)+u.slice(t+a)}let p=u.replace(/\s+/g," ").trim();for(let{rawPath:e}of c){let t=e.startsWith("@")?e.slice(1):e,i=(0,n.resolve)(String(a??process.cwd()),t),l=d(i);l?(o.push({image:l,rawPath:e}),(0,r.JX)("parseEmbeddedImageFromRequest: image ok",{rawPath:e,resolvedPath:i,mimeType:l.mimeType})):(s.push({rawPath:e,resolvedPath:i}),(0,r.CN)("parseEmbeddedImageFromRequest: image failed",{rawPath:e,resolvedPath:i}))}return(0,r.JX)("parseEmbeddedImageFromRequest: result",{matchCount:c.length,okCount:o.length,errorCount:s.length,cleanedRequestLength:p?p.length:0}),{cleanedRequest:p||"",imagesWithPaths:o,errors:s}}function u(e){let t,{line:a,cwd:i,runtimeMessageLog:o=null,controller:s=null,session:l,t:c}=e,u=String(a??"").trim();if(""===u||function(e){let{line:t,cwd:a,runtimeMessageLog:i,controller:o,session:s,t:l}=e,c=function(e,t){let a=String(e??"").trim();if(!/^\/image(?:\s|$)/i.test(a))return{isImage:!1,path:"",rawPath:""};let i=a.replace(/^\/image\s*/i,"").trim();if(""===i)return{isImage:!0,path:"",rawPath:""};let r=i.startsWith("@")?i.slice(1):i,o=(0,n.resolve)(String(t??process.cwd()),r);return{isImage:!0,path:o,rawPath:i}}(t,a);if(!c.isImage)return!1;if(""===c.path)return s.appendLine(l("run.imageEmpty")),!0;let u=d(c.path);if(!u)return s.appendLine(l("run.imageNotFound",{path:c.rawPath||c.path})),!0;let p=o?.attachImage?.(u,i);return!1===p?s.appendLine(l("run.imageRunning")):(s.appendLine(l("run.imageAttached",{path:c.rawPath||c.path,type:u.mimeType})),(0,r.JX)("handleImageCommand",{path:c.path,mimeType:u.mimeType,dataLen:u.data.length})),!0}({line:a,cwd:i??process.cwd(),runtimeMessageLog:o,controller:s,session:l,t:c}))return;let p=(t=String(u??"").trim(),/^\/note(?:\s|$)/i.test(t)?{isNote:!0,body:t.replace(/^\/note\s*/i,"").trim()}:{isNote:!1,body:""});if(p.isNote){if(""===p.body)return void l.appendLine(c("run.noteEmpty"));let e=s?.steerNote?.(p.body)===!0;return e&&o?.recordSteer(p.body),l.appendLine(c(e?"run.noteSteered":"run.noteStored",{message:p.body})),void(0,r.JX)("handleRuntimeLineSubmit: steer note",{steered:e,body:p.body})}if(s?.queueFollowUp?.(u)===!0){o?.recordFollowUp(u),l.setQueuedFollowUpMessages?.(o.visitFollowUp().map(e=>e.text)),(0,r.JX)("handleRuntimeLineSubmit: follow-up",{queued:!0,message:u});return}l.appendLine(c("run.followUpStored",{message:u})),(0,r.JX)("handleRuntimeLineSubmit: follow-up",{queued:!1,message:u})}i()}catch(e){i(e)}})},8449(e,t,a){a.a(e,async function(e,i){try{a.d(t,{SN:()=>p,bX:()=>u,h9:()=>c,uw:()=>m});var r=a(4071),o=a(3582),n=a(9898),s=a(1906),l=e([n,s,r]);function d(e,t){let a=e=>[...new Set((e??[]).map(e=>(0,n.Wo)(t,e)))].sort();return{created:a(e?.created),modified:a(e?.modified),deleted:a(e?.deleted)}}async function c(e){let t="string"==typeof e.reportPath&&""!==e.reportPath.trim()?e.reportPath.trim():null;return t?{reportPath:t,runs:[]}:null}async function u(e,t){if(!e)return;let{outcome:a,request:i,runOpts:r,taskId:o,startedAt:l,gitSnapshotBefore:c}=t,u=new Date().toISOString(),p=r.cwd??process.cwd(),m=await (0,n.eY)(p),g=(0,n.W8)(c,m,p),h=d(a.toolFileChanges,p),f=(0,s.IW)({outcome:a,runOpts:r,taskId:o,request:i,gitChanges:g,toolChanges:h,startedAt:l,finishedAt:u});e.runs.push(f)}async function p(e,t){if(!e)return;let{taskRef:a}=t;await (0,s.pX)(e.runs,{reportPath:e.reportPath});let i=e.runs[e.runs.length-1];(0,r.JX)(`session run report flushed: runs=${String(e.runs.length)} lastStatus=${i?.status??"none"} taskId=${a.taskId} path=${e.reportPath}`)}async function m(e){let{outcome:t,runOpts:a,taskRef:i,request:l,gitSnapshotBefore:c,gitSnapshotAfter:u,startedAt:p,finishedAt:m,jsonStdout:g=!1,reportPath:h=null}=e,f=(0,n.W8)(c,u,a.cwd??process.cwd()),k=d(t.toolFileChanges,a.cwd??process.cwd()),v=(0,s.IW)({outcome:t,runOpts:a,taskId:i.taskId,request:l,gitChanges:f,toolChanges:k,startedAt:p,finishedAt:m});(g||h)&&await (0,s.pX)([v],{jsonStdout:g,reportPath:h}),process.exitCode=(0,o.Yh)(t),(0,r.JX)(`one-shot run finished: status=${t.status} exitCode=${String(process.exitCode)} taskId=${i.taskId}`)}[n,s,r]=l.then?(await l)():l,i()}catch(e){i(e)}})},1124(e,t,a){a.a(e,async function(e,i){try{a.d(t,{JT:()=>p,Ky:()=>g,ZP:()=>u,vt:()=>m});var r=a(8641),o=a(5935),n=e([r]);function s(e){if(e&&"object"==typeof e)return e;if("string"!=typeof e||""===e.trim())return null;try{let t=JSON.parse(e);return t&&"object"==typeof t?t:null}catch{return null}}function l(e){return(0,r.JZ)(e)}function d(e,t){return"string"==typeof e.name&&""!==e.name.trim()?e.name.trim():"string"==typeof e.toolName&&""!==e.toolName.trim()?e.toolName.trim():t?.role==="toolResult"&&"string"==typeof t.toolName&&""!==t.toolName.trim()?t.toolName.trim():"tool"}function c(e){let t=e?.content;return Array.isArray(t)?t:"string"==typeof t&&""!==t.trim()?[{type:"text",text:t}]:[]}function u(e,t=e=>e){if(!Array.isArray(e)||0===e.length)return[];let a=Array.isArray(e)&&0!==e.length?[...e].sort((e,t)=>{let a="string"==typeof e.createdAt?e.createdAt:"",i="string"==typeof t.createdAt?t.createdAt:"";if(a!==i)return a.localeCompare(i);let r=Number.isFinite(e.id)?e.id:0,o=Number.isFinite(t.id)?t.id:0;return r-o}):[],i=[],o=0;for(;o<a.length;){let e=s(a[o].message);if(e?.role!=="user"){o+=1;continue}let n=l(e),u="string"==typeof a[o].createdAt?a[o].createdAt:"";o+=1;let p=[];for(;o<a.length;){let e=s(a[o].message);if(e?.role==="user")break;if(e?.role==="assistant"){let a=l(e);for(let i of(a&&p.push(a),function(e){if(e?.role!=="assistant")return[];let t=c(e),a=[];for(let i of t){if(!i||"object"!=typeof i||"toolCall"!==i.type)continue;let t=d(i,e),o=(0,r.Lf)(i.arguments);a.push({toolName:t,args:o})}return a}(e)))p.push(function(e,t){let a=e.args?` ${e.args}`:"";return`**${t("run.showTask.toolRunLabel")}:** \`${e.toolName}\`${a}`}(i,t))}else if(e?.role==="toolResult"){let a=function(e){if(e?.role!=="toolResult")return null;let t=c(e),a=d({},e),i=!0===e.isError;for(let r of t)if(r&&"object"==typeof r&&"toolResult"===r.type){a=d(r,e),function(e,t){if(t?.isError===!0||!0===e.isError)return!0;let a=e.result;return!(!a||"object"!=typeof a||Array.isArray(a))&&(!0===a.isError||"error"in a&&null!=a.error)||!1}(r,e)&&(i=!0);break}let o=function(e){let t=(0,r.bE)(e);if(t)return t;let a=l(e);if(a)return a;for(let t of c(e))if(t&&"object"==typeof t&&"toolResult"===t.type&&null!=t.result){var i=t.result;if(null==i)return"";if("string"==typeof i)return i;try{return JSON.stringify(i,null,2)}catch{return String(i)}}return""}(e);return{toolName:a,result:o,isError:i}}(e);a&&p.push(function(e,t){let a=t(e.isError?"run.showTask.toolResultFailure":"run.showTask.toolResultSuccess"),i=[`**${t("run.showTask.toolResultLabel")}:** \`${e.toolName}\` (${a})`],o=(0,r.d7)(e.result).trim();return""!==o&&(i.push(""),i.push("```"),i.push(o),i.push("```")),i.join("\n")}(a,t))}o+=1}i.push({question:n,answer:p.join("\n\n"),createdAt:u})}return i.length>100?i.slice(0,100):i}function p(e){let{taskId:t,taskTitle:a,pairs:i,t:r}=e,o=m(a,30),n=[`## ${r("run.showTask.title")}`,"",`| ${r("run.show.field")} | ${r("run.show.value")} |`,"| --- | --- |",`| ${r("run.show.taskId")} | \`${t}\` |`,`| ${r("cli.taskLabelTitle")} | ${o} |`,"","---",""];for(let e=0;e<i.length;e++){let t=i[e];n.push(`### ${r("run.showTask.turnHeading",{index:String(e+1)})}`),n.push(""),n.push(`**${r("run.showTask.createdLabel")}:** ${t.createdAt||"—"}`),n.push(""),n.push(`**${r("run.showTask.questionLabel")}**`),n.push(""),n.push(t.question.trim()||r("run.showTask.emptyQuestion")),n.push(""),n.push(`**${r("run.showTask.answerLabel")}**`),n.push(""),n.push(t.answer.trim()?t.answer:r("run.showTask.emptyAnswer")),n.push(""),n.push("---"),n.push("")}return n.join("\n").trimEnd()}function m(e,t){if("string"!=typeof e||""===e.trim())return"—";if(!Number.isFinite(t)||t<=0)return e.trim();let a=e.trim();return(0,o.$0)(a)>t?`${function(e,t){let a="";for(let i of e){let e=a+i;if((0,o.$0)(e)>t)break;a=e}return a}(a,t)}...`:a}function g(e,t=60){if("string"!=typeof e||""===e.trim())return"—";let a=e.trim();return a.length<=t?a:"..."+a.slice(-(t-3))}r=(n.then?(await n)():n)[0],i()}catch(e){i(e)}})},7443(e,t,a){a.a(e,async function(e,i){try{a.d(t,{c8:()=>s});var r=a(2615),o=a(4071),n=e([r,o]);function s(e){let{data:t,editor:a}=e,i=a?.isShowingAutocomplete?.()===!0,n=function(e){try{let t=e?.autocompleteList?.getSelectedItem?.()??null;return String(t?.value??"")}catch(e){return(0,o.CN)("getEditorAutocompleteSelectedValue failed",e),""}}(a);return!!function(e){try{let{data:t,isAutocompleteActive:a,selectedValue:i}=e;if(!a||"string"!=typeof t||0===t.length||!(0,r.matchesKey)(t,"enter"))return!1;let o=String(i??"").trimEnd();if(/^\/skill-done$/i.test(o))return!1;return/^\/skill-[a-z0-9][a-z0-9_-]*$/i.test(o)}catch(e){return(0,o.CN)("shouldApplySkillInvokeCompletionWithoutSubmit failed",e),!1}}({data:t,isAutocompleteActive:i,selectedValue:n})&&((0,o.JX)("tryApplySkillInvokeEnterAsTab: enter acts like tab",{selectedValue:n}),a.handleInput(" "),!0)}[r,o]=n.then?(await n)():n,i()}catch(e){i(e)}})},1232(e,t,a){a.a(e,async function(e,i){try{a.d(t,{B:()=>s,o:()=>l});var r=a(5671),o=a(4071),n=e([r,o]);[r,o]=n.then?(await n)():n;let d=new Set(["done"]),c=/^[a-z0-9][a-z0-9_-]*$/;function s(e){let t=[],a=new Set;for(let i of e??[]){let e=String(i?.name??"").trim(),r=e.toLowerCase();!(!c.test(r)||d.has(r))&&(a.has(r)||(a.add(r),t.push({original:e,lower:r})))}return t.sort((e,t)=>t.lower.length-e.lower.length),t}function l(e){let t=String(e.request??"").trim();if(!/(?:^|\s)\/skill(?:-|\s|$)/i.test(t))return{cleanedRequest:t,skillNames:[],unknownNames:[]};let a=e.skills??(0,r.nn)({cwd:e.cwd??process.cwd(),skillsDir:e.skillsDir}).skills,i=s(a),n=[],l=/(?:^|\s)(\/skill(?:-([^\s]*))?)/gi,d=l.exec(t);for(;d;){let e=d[1],a=d[2],r=d.index+d[0].length-e.length,o=e.length,s=String(a??"").toLowerCase();if("done"===s){d=l.exec(t);continue}if(void 0===a||""===a)n.push({index:r,length:o,known:null,unknown:""===a?"-":""});else{let e=function(e,t){let a=String(e??"").toLowerCase();if(!a)return null;for(let e of t)if(a===e.lower)return e;return null}(a,i);e?n.push({index:r,length:o,known:e.original,unknown:""}):n.push({index:r,length:o,known:null,unknown:a})}d=l.exec(t)}let c=[],u=new Set,p=[];for(let e of n)if(e.known){let t=e.known.toLowerCase();u.has(t)||(u.add(t),c.push(e.known))}else p.push(e.unknown);let m=t;for(let e=n.length-1;e>=0;e--){let{index:t,length:a}=n[e];m=m.slice(0,t)+m.slice(t+a)}let g=m.replace(/\s+/g," ").trim();return(0,o.JX)("parseEmbeddedSkillInvokes",{skillNames:c,unknownNames:p,cleanedRequestLength:g.length}),{cleanedRequest:g,skillNames:c,unknownNames:p}}i()}catch(e){i(e)}})},6703(e,t,a){a.d(t,{D:()=>i});function i(e){let t=e.trim();if(!t.startsWith("/"))return null;if(/^\/skill-done(?:\s|$)/i.test(t)){let e=t.replace(/^\/skill-done\s*/i,"").trim();return{type:"done",skillNames:e?e.split(/\s+/).filter(Boolean):[]}}if(/^\/list-skill\b/i.test(t))return t.replace(/^\/list-skill\s*/i,"").trim()?{type:"invalid",command:"list",reason:"extraArgs"}:{type:"list"};if(/^\/install-skill\b/i.test(t)){let e=t.replace(/^\/install-skill\s*/i,"").trim().split(/\s+/).filter(Boolean),a=!1,i=[];for(let t of e)"--force"===t?a=!0:i.push(t);return i.length>1?{type:"invalid",command:"install",reason:"tooManyArgs"}:{type:"install",force:a,skillName:i[0]}}if(/^\/remove-skill\b/i.test(t)){let e=t.replace(/^\/remove-skill\s*/i,"").trim();return e?{type:"remove",skillName:e}:{type:"invalid",command:"remove",reason:"missingName"}}return null}},647(e,t,a){a.a(e,async function(e,i){try{a.d(t,{J:()=>l});var r=a(4071),o=a(1316),n=a(2586),s=e([o,n,r]);async function l(e){return!function(e){let{trimmedRequest:t,t:a,io:i=o.kS,tuiSession:s=null}=e;if(!/^\/bg\s*$/i.test(t))return!1;if(!s||"function"!=typeof s.suspendToBackground)return i.writeLn(a("run.tuiBgTuiOnly")),!0;if(!(0,n.Ph)())return i.writeLn(a("run.tuiBgUnsupported")),!0;try{s.suspendToBackground()}catch(e){(0,r.CN)("[slash-bg] suspendToBackground failed",e),i.writeLn(a("run.tuiBgFailed",{message:String(e?.message??e??"Unknown error")}))}return!0}(e)?{handled:!1}:{handled:!0}}[o,n,r]=s.then?(await s)():s,i()}catch(e){i(e)}})},9465(e,t,a){a.a(e,async function(e,i){try{a.d(t,{e:()=>u});var r=a(4768),o=a(8362),n=a(8484),s=a(1316),l=a(6179),d=e([r,o,s,l]);async function c(e){let{trimmedRequest:t,runOpts:a,t:i,taskRef:d,controller:c,io:u=s.kS,tuiSession:p=null,outputSink:m=null}=e;if(!/^\/grill-me(?:\s|$)/i.test(t))return null;let g=t.replace(/^\/grill-me\s*/i,"").trim();u.writeLn(i("cli.grillMeAck")),g.length>0&&u.writeLn(i("cli.grillMeTopic",{topic:g}));let h=await (0,r.s)(a.cwd),f=(0,n.D)({topic:g,lang:(0,o.Fj)({cliLang:a.lang,settings:h})}),k=(0,s.kP)(p,m);return"plan"===a.mode?(0,l.xy)({body:f,runOpts:a,t:i,taskRef:d,controller:c,io:u,tuiSession:p,outputSink:k}):(0,l.IZ)(f,a,i,{taskRef:d,controller:c,tuiSession:p,outputSink:k,io:u})}async function u(e){let t=await c(e);return t?{handled:!0,outcome:t}:{handled:!1}}[r,o,s,l]=d.then?(await d)():d,i()}catch(e){i(e)}})},687(e,t,a){a.a(e,async function(e,i){try{a.d(t,{iL:()=>w});var r=a(6607),o=a(3582),n=a(376),s=a(647),l=a(1718),d=a(1404),c=a(8133),u=a(4962),p=a(9465),m=e([r,n,s,l,c,u,p,d]);function g(e){return e?{handled:!0}:{handled:!1}}async function h(e){let t=await (0,r.AO)({trimmedRequest:e.trimmedRequest,runOpts:e.runOpts,taskRef:e.taskRef,t:e.t,io:e.io,tuiSession:e.tuiSession});return g(t)}async function f(e){let t=await (0,r.aP)({trimmedRequest:e.trimmedRequest,runOpts:e.runOpts,t:e.t,io:e.io});return g(t)}async function k(e){let t=await (0,r.t1)({trimmedRequest:e.trimmedRequest,runOpts:e.runOpts,t:e.t,io:e.io});return g(t)}async function v(e){let t=await (0,r.AC)({trimmedRequest:e.trimmedRequest,runOpts:e.runOpts,taskRef:e.taskRef,t:e.t,io:e.io,tuiSession:e.tuiSession});return g(t)}[r,n,s,l,c,u,p,d]=m.then?(await m)():m;let y=[n.i,s.J,l.T9,h,f,k,v,d.A$,c.Gw,c.zP,c.$s,u.tS,u.fV,u.u2,d.FY,p.e,d.aI];async function b(e,t){for(let a of e){let e=await a(t);if(e.handled)return e.outcome??(0,o.NE)(t.taskRef.taskId)}return null}async function w(e){return b(y,e)}i()}catch(e){i(e)}})},4962(e,t,a){a.a(e,async function(e,i){try{a.d(t,{fV:()=>g,tS:()=>h,u2:()=>f});var r=a(5012),o=a(4822),n=a(7817),s=a(4768),l=a(8449),d=a(1316),c=a(1999),u=e([n,d,o,l,s,c]);async function p(e,t,a,i=d.kS,o=null,n=null,s=null){let u=/^\/mode(?:\s+(.+))?\s*$/i.exec(e);if(!u)return!1;let m=r.fk,g=(0,c.zc)(t),h=(u[1]??"").trim();if(""===h)return i.writeLn(a("run.mode.current",{mode:g})),i.writeLn(a("run.mode.usage")),!0;if("list"===h.toLowerCase())return i.writeLn(a("run.mode.current",{mode:g})),i.writeLn(a("run.mode.available",{modes:m.join(", ")})),!0;let f=h.toLowerCase();return r.fk.includes(f)?(s&&n&&await (0,l.SN)(s,{runOpts:t,taskRef:n}),t.mode=f,i.writeLn(a("run.mode.switched",{mode:f})),o&&n&&await (0,c.v5)({tuiSession:o,taskRef:n,runOpts:t})):(i.writeLn(a("run.mode.unknown",{mode:h})),i.writeLn(a("run.mode.usage")),i.writeLn(a("run.mode.available",{modes:m.join(", ")}))),!0}async function m(e,t,a,i=d.kS,r=null,n=null,u=null){let p=/^\/role(?:\s+(.+))?\s*$/i.exec(e);if(!p)return!1;let g=await (0,s.s)(t.cwd),h=g?.supportedRoles??[],f=o.MG,k=t.role??g?.supportedRoles?.[0]??"",v=(p[1]??"").trim();if(""===v)return i.writeLn(a("run.role.current",{role:k})),i.writeLn(a("run.role.usage")),!0;if("list"===v.toLowerCase()){let e=f.join(", ");return i.writeLn(a("run.role.current",{role:k})),i.writeLn(a("run.role.available",{roles:e})),!0}let b=v.toUpperCase();if(!o.MG.includes(b)){let e=f.join(", ");return i.writeLn(a("run.role.unknown",{role:v})),i.writeLn(a("run.role.usage")),i.writeLn(a("run.role.available",{roles:e})),!0}return u&&n&&await (0,l.SN)(u,{runOpts:t,taskRef:n}),t.role=b,g&&!h.includes(b)&&(h.push(b),await (0,s.L)(t.cwd,{supportedRoles:h})),i.writeLn(a("run.role.switched",{role:b})),r&&n&&await (0,c.v5)({tuiSession:r,taskRef:n,runOpts:t}),!0}async function g(e){return await p(e.trimmedRequest,e.runOpts,e.t,e.io,e.tuiSession,e.taskRef,e.sessionReport)?{handled:!0}:{handled:!1}}function h(e){return!function(e,t,a,i=d.kS){let r=/^\/model(?:\s+(.+))?\s*$/i.exec(e);if(!r)return!1;let o=(0,n.rs)().sort((e,t)=>e.localeCompare(t)),s=(r[1]??"").trim(),l=(0,c.R8)(t);return""===s||"list"===s.toLowerCase()?(i.writeLn(a("run.model.current",{model:l})),i.writeLn(a("run.model.available",{models:o.join(", ")})),i.writeLn(a("run.model.usage")),!0):Object.hasOwn(n.q1,s)?(t.model=s,t.reasoner=!1,t.chat=!1,t.pro=!1,t.cursor=void 0,i.writeLn(a("run.model.switched",{model:s})),!0):(i.writeLn(a("run.model.unknown",{model:s})),i.writeLn(a("run.model.available",{models:o.join(", ")})),!0)}(e.trimmedRequest,e.runOpts,e.t,e.io)?{handled:!1}:{handled:!0}}async function f(e){return await m(e.trimmedRequest,e.runOpts,e.t,e.io,e.tuiSession,e.taskRef,e.sessionReport)?{handled:!0}:{handled:!1}}[n,d,o,l,s,c]=u.then?(await u)():u,i()}catch(e){i(e)}})},376(e,t,a){a.a(e,async function(e,i){try{a.d(t,{i:()=>p});var r=a(646),o=a(4380),n=a(4071),s=a(8691),l=a(1316),d=a(3470),c=e([l,o,r,d,s,n]);async function u(e){let{trimmedRequest:t,runOpts:i,t:c,io:u=l.kS,tuiSession:p=null,taskRef:m}=e,g=i.mode??"agent";if(("dialog"===g||"plan"===g)&&t.toLowerCase().startsWith("/shell"))return u.writeLn(c("cli.shellDisabledInMode")),!0;if(!t.toLowerCase().startsWith("/shell"))return!1;let{executeShellCommand:h,executeInteractiveShellCommand:f,formatShellResult:k,parseShellInteractiveRequest:v}=await Promise.resolve().then(a.bind(a,646)),b=t.substring(6).trim();if(!b)return u.writeLn(c("shell.noCommand")),!0;if(/^cd\s/.test(b)||"cd"===b){let e=b.split(/\s+/),t=e.length>1?e.slice(1).join(" "):"",a=(0,o.ww)(t),s=(0,r.ZI)(a,c);return s.success?(u.writeLn(c("shell.cdResult",{path:s.newCwd})),i.cwd=s.newCwd,m&&(m.projectPath=s.newCwd),p&&p.setProjectCwd(s.newCwd)):(u.writeLn(s.error),p?(0,n.CN)(s.error):(0,n.vV)(s.error)),!0}let w=v(b);if(!w.command)return u.writeLn(c("shell.noCommand")),!0;try{let e=(0,d.jS)(i),t=w.interactive?await f({command:w.command,cwd:i.cwd,t:c,tuiSession:p}):await h(w.command,i.cwd,e,c),a=k(w.command,t,c);if(u.writeLn(a),!t.success){let e=c("shell.logFailed",{command:w.command,code:null!=t.exitCode?String(t.exitCode):"N/A"});p?((0,n.CN)(e),u.writeLn(s.m.red(e))):(0,n.vV)(e)}p&&"function"==typeof p.refreshCwdGitStatusLine&&p.refreshCwdGitStatusLine({cwd:i.cwd})}catch(t){u.writeLn(c("shell.executionError",{error:t.message}));let e=c("shell.logExecutionError",{message:t.message});p?((0,n.CN)(e),u.writeLn(s.m.red(e))):(0,n.vV)(e)}return!0}async function p(e){return await u(e)?{handled:!0}:{handled:!1}}[l,o,r,d,s,n]=c.then?(await c)():c,i()}catch(e){i(e)}})},8133(e,t,a){a.a(e,async function(e,i){try{a.d(t,{$s:()=>P,EY:()=>b,Gw:()=>y,zP:()=>S});var r=a(6760),o=a(4768),n=a(8362),s=a(8359),l=a(4071),d=a(8691),c=a(161),u=a(8099),p=a(4427),m=a(9224),g=a(1124),h=a(1316),f=a(1999),k=e([o,n,p,f,h,g,s,c,u,d,l]);async function v(e,t,a,i=h.kS,s=null){if(!/^\/show-prompt\s*$/i.test(e))return!1;let g=a.cwd,f=await (0,o.s)(g),k=(0,n.Fj)({cliLang:a.lang,settings:f}),b=a.role??f?.supportedRoles?.[0]??"RD",w=a.mode??"agent";if(!["agent","dialog","plan"].includes(w))return i.writeLn(t("cli.showPromptInvalidMode")),!0;try{let e="agent"===w?a.skillsDir??(0,r.resolve)(g,".pithosai","skills"):void 0,o=await (0,p.E)({cwd:g,lang:k,role:b,mode:w,skillsDir:e,includeToolsListing:!0}),n=(0,m.k)(o.systemPrompt);if("1"===process.env.PITHOSAI_SKIP_RESULT_BROWSER){let e=!0===a.markdown?(0,c.oq)(n):n;return i.writeLn(e),!0}try{await (0,u.G)({markdown:n,t,documentTitle:t("run.showPrompt.previewDocumentTitle"),tuiSession:s,skipNormalize:!0})}catch(a){let e=t("cli.resultPreviewFailed",{message:a?.message??String(a)});s?((0,l.CN)(e),i.writeLn(d.m.red(e))):(0,l.vV)(e)}return!0}catch(e){return i.writeLn(t("cli.showPromptError",{message:e&&"object"==typeof e&&"message"in e?String(e.message):String(e)})),!0}}async function b(e,t,a,i,r=h.kS){if(!/^\/show(\s+.*)?$/i.test(e))return!1;let o=await (0,s.Lf)(),n=await (0,s.gg)(o,t.taskId),l=await (0,s.XV)(o,{taskId:t.taskId,asc:!1,limit:1e6}),d=Array.isArray(l)?l:[],u=d.length,p=(0,f.Qy)(d),m=i.mode??"agent",k=n?.model?String(n.model):(0,f.R8)(i),v=n?.status?String(n.status):"unknown",w=(0,g.vt)(n?.title?String(n.title):"",30),y=`
|
|
377
377
|
---
|
|
378
378
|
### ${a("run.show.title")}
|
|
@@ -539,9 +539,9 @@ ${e}
|
|
|
539
539
|
</tool_result>`)}}return a.join("\n\n")}(u,p),g=[c,m].filter(Boolean).join("\n\n"),h=await function(e,t,a,i={}){let{onLine:o}=i;return new Promise((i,n)=>{let s=process.env.CURSOR_AGENT_BIN||"cursor-agent",l=["--print","--mode","ask","--trust","--model",e,"--output-format","stream-json","--stream-partial-output","--workspace",process.cwd(),t],d=(0,r.spawn)(s,l,{cwd:process.cwd(),env:process.env,stdio:["ignore","pipe","pipe"]}),c=setTimeout(()=>{d.kill("SIGKILL")},3e5),u="",p=[];d.stderr.setEncoding("utf8"),d.stderr.on("data",e=>u+=e);let m="";if(d.stdout.setEncoding("utf8"),d.stdout.on("data",e=>{let t=(m+=e).split("\n");for(let e of(m=t.pop()??"",t)){let t=e.trim();t&&(p.push(t),o?.(t))}}),a){let e=()=>{d.kill("SIGTERM")};a.addEventListener("abort",e,{once:!0}),d.on("close",()=>a.removeEventListener("abort",e))}d.on("error",e=>{(clearTimeout(c),e?.code==="ENOENT")?n(Error("cursor-agent not found. Install it: curl https://cursor.com/install -fsS | bash && cursor-agent login")):n(e)}),d.on("close",e=>{if(clearTimeout(c),m.trim()){let e=m.trim();p.push(e),o?.(e)}i({code:e??0,lines:p,stderr:u})})})}(e.id,g,a?.signal);if(a?.signal?.aborted)throw Error("Request was aborted");if(0!==h.code&&h.stderr){let e=h.stderr.trim();if(e.includes("not logged in")||e.includes("authentication")||e.includes("Unauthorized"))throw Error("Cursor authentication required. Run: cursor-agent login");throw Error(`cursor-agent exited with code ${h.code}: ${e}`)}let{text:b,thinking:w,usage:y}=function(e){let t=[],a=[],i=null;for(let r of e)try{let e=JSON.parse(r);if("assistant"===e.type&&e.message?.content)for(let i of e.message.content)"text"===i.type&&i.text&&t.push(i.text),"thinking"===i.type&&i.thinking&&a.push(i.thinking);else"result"===e.type&&e.usage&&(i=e.usage)}catch{}return{text:t.join(""),thinking:a.join(""),usage:i}}(h.lines);y&&(n.usage.input=y.inputTokens??0,n.usage.output=y.outputTokens??0,n.usage.cacheRead=y.cacheReadTokens??0,n.usage.cacheWrite=y.cacheWriteTokens??0,n.usage.totalTokens=n.usage.input+n.usage.output+n.usage.cacheRead+n.usage.cacheWrite);let S=!o&&b?d(b):b,P=S?function(e){let t,a=[],i=[],r=RegExp(f.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),o=0;for(;null!==(t=r.exec(e));){let n=e.slice(o,t.index);n.trim()&&i.push(n);let s=t.index+f.length,l=e.indexOf(k,s);if(-1===l)break;let d=e.slice(s,l).trim();try{let e=JSON.parse(d);a.push({type:"toolCall",id:e.id||`call_${a.length+1}`,name:e.name,arguments:e.arguments||{}})}catch{i.push(e.slice(t.index,l+k.length))}r.lastIndex=o=l+k.length}let n=e.slice(o).replace(v,"").trim();return n&&i.push(n),{textParts:i,toolCalls:a}}(S):{textParts:[],toolCalls:[]},T=P.textParts.join("\n").trim();if(!b){let e=h.lines.join("\n"),t=o?e:d(e);if(t.trim()){let e={type:"text",text:t.trim()};n.content.push(e),i.push({type:"start",partial:n}),i.push({type:"text_start",contentIndex:0,partial:n}),i.push({type:"text_delta",contentIndex:0,delta:t.trim(),partial:n}),i.push({type:"text_end",contentIndex:0,content:t.trim(),partial:n}),i.push({type:"done",reason:"stop",message:n}),i.end();return}throw Error("cursor-agent returned empty response. Ensure you are logged in: cursor-agent login")}if(i.push({type:"start",partial:n}),l&&w&&(l.thinking=w,n.content.push(l)),T){s.text=T,n.content.push(s);let e=n.content.length-1;i.push({type:"text_start",contentIndex:e,partial:n}),i.push({type:"text_delta",contentIndex:e,delta:T,partial:n}),i.push({type:"text_end",contentIndex:e,content:T,partial:n})}for(let e of P.toolCalls){n.content.push(e);let t=n.content.length-1;i.push({type:"toolcall_start",contentIndex:t,partial:n}),i.push({type:"toolcall_delta",contentIndex:t,delta:JSON.stringify(e.arguments),partial:n}),i.push({type:"toolcall_end",contentIndex:t,toolCall:e,partial:n})}n.stopReason=P.toolCalls.length>0?"toolUse":"stop",i.push({type:"done",reason:n.stopReason,message:n}),i.end()}catch(e){n.stopReason=a?.signal?.aborted?"aborted":"error",n.errorMessage=e instanceof Error?e.message:String(e),i.push({type:"error",reason:n.stopReason,error:n}),i.end()}})(),i}let b=!1;function u(){b||(b=!0,(0,o.registerApiProvider)({api:p,stream:c,streamSimple:c}))}i()}catch(e){i(e)}})},5e3(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Eq:()=>l,pE:()=>d,rz:()=>s,zR:()=>n});var r=a(3327),o=e([r]);r=(o.then?(await o)():o)[0];let n=(0,r.jj)("deepseek"),s=(0,r.Kr)("deepSeekCoderModel"),l=(0,r.Kr)("deepSeekChatModel"),d=(0,r.Kr)("deepSeekReasonerModel");i()}catch(e){i(e)}})},9616(e,t,a){a.a(e,async function(e,i){try{a.d(t,{aN:()=>d.aN});var r=a(7817),o=a(5e3),n=a(1576),s=a(6840),l=a(9068),d=a(4820),c=e([r,o,n,s,l,d]);[r,o,n,s,l,d]=c.then?(await c)():c,i()}catch(e){i(e)}})},7817(e,t,a){a.a(e,async function(e,i){try{let v;a.d(t,{q1:()=>w,rs:()=>k});var r=a(9868),o=a(5e3),n=a(1576),s=a(9068),l=a(6840),d=a(509),c=a(5061),u=a(5537),p=a(3327),m=a(7382),g=a(4071),h=e([c,o,n,s,l,p,u,r,m,d,g]);[c,o,n,s,l,p,u,r,m,d,g]=h.then?(await h)():h;let b=(0,p.M_)();function f(e,t){let a=t.replace(RegExp(`^${e}/`,"i"),"");return(e+"_"+a).split(/[-_./]+/).filter(Boolean).map(e=>e.toLowerCase()).join("-")}let w={...function(){let e={};if(!(0,u.tU)())return e;try{for(let t of(0,r.getModels)("openrouter")){let a=t.id.indexOf("/");if(a>=0){let i=t.id.slice(0,a);if(!b.has(i))continue;let r=t.id.slice(a+1);e[f(i,r)]=(0,m.TX)(t)}else e[f("openrouter",t.id)]=(0,m.TX)(t)}}catch{}return e}(),...function(){let e={};if(!(0,u.tU)())return e;try{for(let t of(0,r.getModels)("openrouter")){let a=t.id.indexOf("/");if(a>=0){let i=t.id.slice(0,a);if(b.has(i)||"openrouter"===i)continue;let r=t.id.slice(a+1);e[f(i,r)]=(0,m.TX)(t)}}}catch{}return e}(),...(0,d.Qi)(),...(v={},(0,u.E4)()&&Object.assign(v,o.zR),(0,u.G2)()&&Object.assign(v,n.Bm),(0,u.fr)()&&Object.assign(v,s.zz),(0,u.qY)()&&Object.assign(v,l.tK),v)};function k(){let e=Object.keys(w);return(0,g.JX)("getPublicModelKeys keys: ",e),e}i()}catch(e){i(e)}})},6840(e,t,a){a.a(e,async function(e,i){try{a.d(t,{II:()=>m,O1:()=>c,Tw:()=>p,Vl:()=>u,gG:()=>P,jy:()=>g,q$:()=>S,sC:()=>l,tK:()=>y,xU:()=>s});var r=a(3327),o=a(4071),n=e([o,r]);[o,r]=n.then?(await n)():n;let h=(0,r.Wg)(),f=h.krouterBaseUrl,k=h.krouterApiKey,v=null,b=null,w=!1;function s(){return((process.env.KROUTER_API_BASE||"").trim()||(process.env.KIRO_API_BASE||"").trim()||f).replace(/\/$/,"")||f}function l(e){let t="string"==typeof e?e.trim():"";return t||(process.env.KROUTER_API_KEY||"").trim()||(process.env.KIRO_API_KEY||"").trim()||k}function d(e){return{...e,baseUrl:s(),provider:"krouter"}}function c(){v=null,b=null,w=!1}function u(){return w}async function p(){return v||b||(b=(async()=>{let e=s(),t=l(),a=`${e}/models`;try{(0,o.KH)("[models/krouter] fetchKrouterModels",{url:a});let e=await fetch(a,{headers:{Authorization:`Bearer ${t}`,Accept:"application/json"}});if(!e.ok){let t=Error(`Krouter /models HTTP ${e.status}`);return console.error("[models/krouter] fetchKrouterModels failed",t),(0,o.CN)("[models/krouter] fetchKrouterModels failed",{url:a,status:e.status}),v=new Map,w=!1,v}let i=await e.json();return v=function(e){let t=new Map;for(let a of e&&"object"==typeof e&&Array.isArray(e.data)?e.data:[]){if(!a||"object"!=typeof a)continue;let e=String(a.id??"").trim();if(!e)continue;let i={},r=a.context_length,o=a.max_completion_tokens;"number"==typeof r&&Number.isFinite(r)&&r>0&&(i.contextWindow=r),"number"==typeof o&&Number.isFinite(o)&&o>0&&(i.maxTokens=o),t.set(e,i)}return t}(i),w=!0,(0,o.KH)("[models/krouter] fetchKrouterModels ok",{count:v.size}),v}catch(e){return console.error("[models/krouter] fetchKrouterModels error",e),(0,o.CN)("[models/krouter] fetchKrouterModels error",{url:a,message:e instanceof Error?e.message:String(e)}),v=new Map,w=!1,v}finally{b=null}})())}function m(){v||b||p()}function g(e){let t,a=String(e??"").trim(),i=(0,r.Mu)(),o=(0,r.jY)()[a],n=(t=String(a??"").trim())&&v?v.get(t)??null:null,s=o?{...o}:{id:a,name:a,api:i.api,provider:"krouter",reasoning:!1,input:i.input??["text"],cost:i.cost,contextWindow:i.contextWindow,maxTokens:i.maxTokens,supportsTools:i.supportsTools};return n?.contextWindow!=null&&(s.contextWindow=n.contextWindow),n?.maxTokens!=null&&(s.maxTokens=n.maxTokens),d(s)}let y=(0,r.vw)("krouter",d),S=Object.fromEntries(Object.entries((0,r.jY)()).map(([e,t])=>[e,d(t)])),P=y["krouter-rd"]??d((0,r.jY)().RD);i()}catch(e){i(e)}})},5061(e,t,a){a.a(e,async function(e,i){try{a.d(t,{o4:()=>n});var r=a(3327),o=e([r]);r=(o.then?(await o)():o)[0];let s=(0,r.A5)();function n(e){let t=String(e??"").trim();if(t)return s[t]}i()}catch(e){i(e)}})},1576(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Bm:()=>l,Z5:()=>u,ZU:()=>c,eM:()=>d,jK:()=>p,lE:()=>s,wc:()=>m});var r=a(3327),o=e([r]);r=(o.then?(await o)():o)[0];let s=(0,r.Wg)().ollamaBaseUrl;function n(e){let t=(process.env.OPENAI_LOCAL_API_BASE||"").trim()||s;return{...e,baseUrl:t.replace(/\/$/,"")||t}}let l=(0,r.vw)("ollama",n),d=l["ollama-qwen25"]??n((0,r.Kr)("ollamaQwen25_14bModel")),c=l["ollama-qwen25-coder"]??n((0,r.Kr)("ollamaQwen25Coder_14bModel")),u=l["ollama-deepseek-r1"]??n((0,r.Kr)("ollamaDeepSeekR1_14bModel")),p=l["ollama-qwythos-9b-q8"]??n((0,r.Kr)("ollamaQwythos9BQ8Model")),m=Object.fromEntries(Object.values(l).map(e=>[e.id,e]));i()}catch(e){i(e)}})},7382(e,t,a){a.a(e,async function(e,i){try{a.d(t,{CO:()=>c,Dz:()=>u,TX:()=>d,jd:()=>p,tq:()=>s});var r=a(3327),o=e([r]);r=(o.then?(await o)():o)[0];let m=(0,r.M_)();function n(e){let t=String(e?.id??""),a=t.indexOf("/");return a>=0?t.slice(0,a).toLowerCase():""}function s(e){return e?.provider==="openrouter"&&m.has(n(e))}function l(e){if(!e||"openrouter"!==e.provider||!0!==e.reasoning)return!1;let t=String(e.id??"").toLowerCase();if(!t.includes("/"))return!0;let a=t.indexOf("/");return!!(a>=0?t.slice(a+1):t).includes("thinking")||(/\bthinking\b/i.test(String(e.name??"")),!0)}function d(e){if(e?.provider!=="openrouter")return e;let t=e;s(e)&&(t={...t,compat:{...t.compat??{},supportsDeveloperRole:!1}});let a=n(e);return!0===e.reasoning&&("anthropic"===a||"~anthropic"===a)&&(t={...t,compat:{...t.compat??{},supportsDeveloperRole:!1}}),l(t)&&(t={...t,compat:{...t.compat??{},thinkingFormat:"openrouter"},thinkingLevelMap:{...t.thinkingLevelMap??{},off:null,minimal:t.thinkingLevelMap?.minimal??"low",low:t.thinkingLevelMap?.low??"low",medium:t.thinkingLevelMap?.medium??"medium",high:t.thinkingLevelMap?.high??"high"}}),t===e?e:t}function c(e){return d(e)}function u(e){return l(e)?"medium":"off"}function p(e,t){return null!=t&&"off"!==t?t:l(e)?"medium":void 0}i()}catch(e){i(e)}})},5537(e,t,a){a.a(e,async function(e,i){try{a.d(t,{E4:()=>d,G2:()=>u,as:()=>s,fr:()=>c,k:()=>l,qY:()=>m,tU:()=>g});var r=a(9868),o=e([r]);function n(e){return(process.env[e]||"").trim()}function s(e){return null!=l(e)}function l(e){if(!(0,r.findEnvKeys)(e))return null;let t=(0,r.getEnvApiKey)(e);if(null==t||""===t||"<authenticated>"===t)return null;let a=String(t).trim();return""===a?null:a}function d(){return s("deepseek")}function c(){return""!==n("CURSOR_MODEL")}function u(){return!!(n("OPENAI_LOCAL_API_BASE")&&n("OPENAI_LOCAL_API_KEY"))}function p(e){let t=n(e).toLowerCase();return"1"===t||"true"===t||"yes"===t}function m(){return!(p("KROUTER_DISABLED")||p("KIRO_DISABLED"))}function g(){return s("openrouter")}r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},274(e,t,a){a.a(e,async function(e,i){try{a.d(t,{GX:()=>d});var r=a(3024),o=a(8161),n=a(6760),s=a(8684),l=e([s]);s=(l.then?(await l)():l)[0];let c=`// pithosai user model catalog
|
|
540
540
|
// Seeded from the bundled catalog.json. Edit this file and restart pithosai.
|
|
541
541
|
`;function d({bundledCatalog:e,modelsPath:t}){let a,i=t??((a=String(process.env.PITHOSAI_MODELS_PATH??"").trim())||(0,n.join)((0,o.homedir)(),".pithosai","models.json5"));try{!(0,r.existsSync)(i)&&((0,r.mkdirSync)((0,n.dirname)(i),{recursive:!0}),(0,r.writeFileSync)(i,`${c}${s.default.stringify(e,null,2)}
|
|
542
|
-
`,"utf8"),console.debug("[catalog] seeded user models file",i));let t=(0,r.readFileSync)(i,"utf8"),a=s.default.parse(t);if(!function(e){if(null==e||"object"!=typeof e)return!1;let t=e.openrouter,a=e.handCrafted,i=e.defaults;return!!Array.isArray(e.chinaDirectProviders)&&null!=t&&"object"==typeof t&&!!Array.isArray(t.chinaMainlandSlugs)&&null!=a&&"object"==typeof a&&null!=a.krouter&&null!=i&&"object"==typeof i&&!0}(a))return console.error("[catalog] user models file missing required sections, using bundled catalog",i),e;return a}catch(t){return console.error("[catalog] failed to load user models file",i,t),e}}i()}catch(e){i(e)}})},2421(e,t,a){a.d(t,{k:()=>i});function i(){return null}},5784(e,t,a){a.d(t,{Oe:()=>i}),a(7598);function i(e){let t="string"==typeof e?e.trim():"";return t&&!(t.length>128)&&/^[0-9a-zA-Z_.-]+$/.test(t)?t:null}},3451(e,t,a){a.d(t,{KL:()=>i,Oi:()=>r});let i=Object.freeze({SYSTEM:"system",USER:"user"}),r=Object.freeze({SYSTEM:"system",INSTALLED:"installed",CREATED:"created"})},4347(e,t,a){a.d(t,{uG:()=>r});let i=Object.freeze({ARCH:"Architect",RD:"Developer",PM:"Product Manager",QA:"Quality Assurance",CO:"Company Operation",MKT:"Marketing",SRE:"Operations",WR:"Writer",LDR:"Leader"});function r(e,t){let a,r="string"==typeof e?e.trim():"";return r?r:(a=String(t??"").trim().toUpperCase())?i[a]||a:""}},8391(e,t,a){a.a(e,async function(e,i){try{a.d(t,{S:()=>l});var r=a(5012),o=a(8359),n=a(9966),s=e([o]);async function l(e,t){let a=await (0,o.Iz)(e)??process.env.PITHOSAI_RSA_PUBLIC_KEY?.trim()??null;if(!a)throw Error("Missing RSA public key. Set pithosai_security_key.security_key or PITHOSAI_RSA_PUBLIC_KEY to decrypt role prompts.");let{role:i,lang:s}=t,l=await (0,o.iV)(e,{role:i,lang:s}),d=Object.fromEntries(l.map(e=>[e.name,e])),c={};for(let e of r.GV){let t=d[e];t&&(c[e]=(0,n.Yc)(t.content,a))}return c}o=(s.then?(await s)():s)[0],i()}catch(e){i(e)}})},8098(e,t,a){a.d(t,{Ai:()=>s});var i=a(5012);let r="https://app.circlecoin.me/pithosai/ROLE_MARKET_CATALOG",o=new Map;function n(e){let t=String(e??"").trim(),a=t.toLowerCase();return t&&"en"!==a?"zh-tw"===a||"zh-hk"===a||"zh-hant"===a?"zh-Hant":i.Lq.includes(t)?t:i.Lq.includes(a)?a:"en":"en"}async function s(e={}){let t,a,i=n(e.lang),l=o.get(i);if(l)return l;let d="en"===(a=n(i))?`${r}.json`:`${r}-${a}.json`,c=e.fetchImpl??fetch;try{t=await c(d,{headers:{Accept:"application/json"}})}catch(e){throw Error(`Failed to fetch role market catalog from ${d}: ${String(e)}`)}if(!t.ok)throw Error(`Failed to fetch role market catalog from ${d}: ${t.status} ${t.statusText}`);let u=function(e){if(!Array.isArray(e))throw Error("Role market catalog response must be a JSON array.");return Object.freeze(e.map(e=>Object.freeze(function(e){if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Role market catalog entry must be a JSON object.");let t=String(e.url??"").trim();if(!t)throw Error("Role market catalog entry is missing required fields.");let a={id:String(e.id??"").trim(),role:String(e.role??"").trim().toUpperCase(),title:String(e.title??"").trim(),description:String(e.description??"").trim(),category:String(e.category??"").trim(),iconColor:String(e.iconColor??"").trim(),url:t},i=String(e.sourceRole??"").trim().toUpperCase();return i&&(a.sourceRole=i),a}(e))))}(await t.json());return o.set(i,u),u}},9966(e,t,a){a.d(t,{Yc:()=>p,w:()=>u});var i=a(7598);let r="aes-256-gcm",o=i.constants.RSA_PKCS1_PADDING;function n(e){return(e||"").trim().replace(/\\n/g,"\n")}function s(e,t){if(t+4>e.length)throw Error("Truncated OpenSSH key");let a=e.readUInt32BE(t),i=t+4,r=i+a;if(r>e.length)throw Error("Truncated OpenSSH key");return{value:e.subarray(i,r),next:r}}function l(e){let t=e;for(;t.length>1&&0===t[0];)t=t.subarray(1);return t.toString("base64url")}function d(e){let t=e;for(;t.length>1&&0===t[0];)t=t.subarray(1);return BigInt(`0x${t.toString("hex")||"0"}`)}function c(e){let t=e.toString(16);return t.length%2&&(t=`0${t}`),Buffer.from(t,"hex").toString("base64url")}function u(e,t){let a=function(e){let t=n(e);if(!t)throw Error("RSA private key is empty");let a=/BEGIN OPENSSH PRIVATE KEY/.test(t);if(t.includes("-----BEGIN")&&!a)try{return(0,i.createPrivateKey)(t)}catch(e){throw console.error("[role-prompts-crypto] failed to parse private key PEM",e),Error("Invalid RSA private key PEM. Expected PKCS#8 (BEGIN PRIVATE KEY), PKCS#1 (BEGIN RSA PRIVATE KEY), or OpenSSH (BEGIN OPENSSH PRIVATE KEY).",{cause:e})}let r=function(e){if(e.includes("-----BEGIN")){let t=e.replace(/-----BEGIN [^-]+-----/,"").replace(/-----END [^-]+-----/,"").replace(/\s/g,"");return Buffer.from(t,"base64")}return Buffer.from(e.replace(/\s/g,""),"base64")}(t);if(a||"openssh-key-v1\0"===r.subarray(0,15).toString())try{return function(e){let t,a=Buffer.from("openssh-key-v1\0");if(e.length<a.length||!e.subarray(0,a.length).equals(a))throw Error("Not an OpenSSH private key");let r=a.length,o=s(e,r),n=s(e,r=o.next);if(r=s(e,r=n.next).next,"none"!==o.value.toString()||"none"!==n.value.toString())throw Error("Encrypted OpenSSH private keys are not supported. Convert with: ssh-keygen -p -m PEM -f <keyfile>");let u=e.readUInt32BE(r);if(r+=4,1!==u)throw Error(`OpenSSH key must contain exactly 1 key (got ${u})`);r=s(e,r).next;try{t=s(e,r).value}catch(e){throw Error("OpenSSH private key appears truncated or incomplete (common when pasting into Windows env vars). Set the full key via PITHOSAI_RSA_PRIVATE_KEY_FILE, or convert to PEM: ssh-keygen -p -m PEM -f <keyfile>",{cause:e})}let p=0,m=t.readUInt32BE(p);p+=4;let g=t.readUInt32BE(p);if(p+=4,m!==g)throw Error("OpenSSH private key checkints mismatch (corrupt or wrong passphrase)");let h=s(t,p);if(p=h.next,"ssh-rsa"!==h.value.toString())throw Error(`OpenSSH key type "${h.value.toString()}" is not supported; need ssh-rsa (2048-bit).`);let f=s(t,p),k=s(t,p=f.next),v=s(t,p=k.next),b=s(t,p=v.next),w=s(t,p=b.next),y=s(t,p=w.next),S=d(v.value),P=d(w.value),T=d(y.value);return(0,i.createPrivateKey)({key:{kty:"RSA",n:l(f.value),e:l(k.value),d:l(v.value),p:l(w.value),q:l(y.value),dp:c(S%(P-1n)),dq:c(S%(T-1n)),qi:l(b.value)},format:"jwk"})}(r)}catch(e){throw console.error("[role-prompts-crypto] failed to parse OpenSSH private key",e),e instanceof Error?e:Error("Invalid OpenSSH private key",{cause:e})}for(let e of["pkcs8","pkcs1"])try{return(0,i.createPrivateKey)({key:r,format:"der",type:e})}catch(t){console.debug(`[role-prompts-crypto] private key DER as ${e} failed:`,t instanceof Error?t.message:t)}throw Error("Invalid RSA private key. Provide PEM/OpenSSH or base64 DER (PKCS#8 or PKCS#1, 2048-bit RSA).")}(t),u=(0,i.randomBytes)(32),p=(0,i.randomBytes)(12),m=(0,i.createCipheriv)(r,u,p,{authTagLength:16}),g=Buffer.concat([m.update(e,"utf8"),m.final()]),h=m.getAuthTag(),f=(0,i.privateEncrypt)({key:a,padding:o},u);if(256!==f.length)throw Error(`RSA encrypted key must be 256 bytes (got ${f.length}). Use 2048-bit RSA key.`);return Buffer.concat([f,p,h,g]).toString("hex")}function p(e,t){let a=function(e){let t=n(e);if(!t)throw Error("RSA public key is empty");if(t.includes("-----BEGIN"))try{return(0,i.createPublicKey)(t)}catch(e){throw console.error("[role-prompts-crypto] failed to parse public key PEM",e),Error("Invalid RSA public key PEM. Expected SPKI (BEGIN PUBLIC KEY) or PKCS#1 (BEGIN RSA PUBLIC KEY).",{cause:e})}let a=Buffer.from(t.replace(/\s/g,""),"base64");for(let e of["spki","pkcs1"])try{return(0,i.createPublicKey)({key:a,format:"der",type:e})}catch(t){console.debug(`[role-prompts-crypto] public key DER as ${e} failed:`,t instanceof Error?t.message:t)}throw Error("Invalid RSA public key. Provide PEM or base64 DER (SPKI or PKCS#1).")}(t),s=Buffer.from(e,"hex");if(s.length<284)throw Error("Role prompt content too short (invalid or corrupted)");let l=s.subarray(0,256),d=s.subarray(256,268),c=s.subarray(268,284),u=s.subarray(284),p=(0,i.publicDecrypt)({key:a,padding:o},l);if(32!==p.length)throw Error(`Unwrapped key must be 32 bytes (got ${p.length}).`);let m=(0,i.createDecipheriv)(r,p,d,{authTagLength:16});return m.setAuthTag(c),m.update(u,void 0,"utf8")+m.final("utf8")}},789(e,t,a){a.a(e,async function(e,i){try{a.d(t,{yU:()=>n});var r=a(7993),o=e([r]);async function n(e){let t=String(e.url??"").trim(),a=(0,r.aP)(e.lang),i=e.fetchImpl??fetch,o={};for(let e of r.Wi){let n,s=function(e){var t,a;let i,o,n=function(e){let t=String(e??"").trim().replace(/\/+$/,"");if(!t)throw Error("Role market URL is required.");return`${t}/`}(e.url),s=(t=e.promptName,a=e.lang,i=(0,r.nv)(t),o=(0,r.aP)(a),"en"===o?`${i}.md`:`${i}-${o}.md`);return`${n}${s}`}({url:t,promptName:e,lang:a});try{n=await i(s,{headers:{Accept:"text/plain, text/markdown, */*"}})}catch(e){throw Error(`Failed to fetch role template from ${s}: ${String(e)}`)}if(!n.ok)throw Error(`Failed to fetch role template from ${s}: ${n.status} ${n.statusText}`);let l=String(await n.text()).trim();if(!l)throw Error(`Role market prompt file is empty: ${s}`);o[e]=l}return(0,r.El)(o)}r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},5342(e,t,a){a.a(e,async function(e,i){try{a.d(t,{$j:()=>p,au:()=>m,v_:()=>h,xB:()=>f});var r=a(8098),o=a(789),n=a(7993),s=a(8359),l=a(4071),d=e([o,n,s,l]);[o,n,s,l]=d.then?(await d)():d;let g=Object.freeze(["RD","PM","QA","WR","CO","MKT","SRE"]);class h extends Error{constructor(){super("There is already data in the role templates, please use update command"),this.name="RoleTemplatesAlreadyPresentError"}}class f extends Error{constructor(e){super(`Role ${e} was not found in the Role Market catalog.`),this.name="RoleMarketCatalogRoleNotFoundError",this.role=e}}function c(e,t){let a=(0,n.Rd)(t);return(Array.isArray(e)?e:[]).find(e=>String(e?.role??"").trim().toUpperCase()===a)}function u(e,t){(0,l.JX)("[role-template-market-seed] progress",JSON.stringify(t)),"function"==typeof e.onProgress&&e.onProgress(t)}async function p(e,t={}){if((await (0,s.ax)(e)).length>0)throw(0,l.CN)("[role-template-market-seed] init rejected: pithosai_role_prompts already has data"),new h;u(t,{phase:"start"});let a=t.fetchImpl,i={};for(let e of n.go)u(t,{phase:"catalog",lang:e}),i[e]=await (0,r.Ai)({lang:e,fetchImpl:a});let d=[],m=g.length*n.go.length,f=0;for(let e of g)for(let r of n.go){let n=function(e,t){let a=c(e,t.role),i=String(a?.url??"").trim();if(!a||!i)throw Error(`Role Market catalog is missing required role: ${t.role} (${t.lang}).`);return{role:String(a.role??"").trim()||t.role,title:String(a.title??"").trim(),url:i}}(i[r],{role:e,lang:r});f+=1,u(t,{phase:"template",role:e,lang:r,current:f,total:m,url:n.url});let s=await (0,o.yU)({url:n.url,lang:r,fetchImpl:a});d.push({role:e,lang:r,url:n.url,displayName:n.title||e,prompts:s})}(0,l.JX)(`[role-template-market-seed] fetched ${d.length} role/lang packs; persisting`),u(t,{phase:"persist"}),await e.exec("BEGIN");try{for(let t of d)await (0,n.XE)(e,{role:t.role,lang:t.lang,prompts:t.prompts,displayName:t.displayName,sourceType:"installed"}),await (0,s.A2)(e,t.role,t.lang,t.url);await e.exec("COMMIT")}catch(t){(0,l.CN)("[role-template-market-seed] persist failed; rolling back",t);try{await e.exec("ROLLBACK")}catch(e){(0,l.CN)("[role-template-market-seed] rollback failed",e)}throw t}return(0,l.JX)(`[role-template-market-seed] initialized ${g.join(", ")}`),{roles:[...g],langs:[...n.go]}}async function m(e,t){let a=(0,n.Rd)(t.role),i=(0,n.aP)(t.lang),d=t.fetchImpl,u=await (0,r.Ai)({lang:i,fetchImpl:d}),p=c(u,a);if(!p?.url)throw(0,l.CN)(`[role-template-market-seed] catalog lookup failed for ${a}/${i}`),new f(a);let m=await (0,o.yU)({url:p.url,lang:i,fetchImpl:d}),g=await (0,n.sO)(e,{role:a,lang:i,prompts:m,displayName:p.title||a});return await (0,s.A2)(e,a,i,p.url),(0,l.JX)(`[role-template-market-seed] updated ${a}/${i} from ${p.url}: ${g.names.join(", ")}`),{role:a,lang:i,names:g.names,url:p.url}}i()}catch(e){i(e)}})},7993(e,t,a){a.a(e,async function(e,i){try{a.d(t,{E7:()=>P,El:()=>A,Kg:()=>R,Rd:()=>f,Wi:()=>L,XE:()=>I,aP:()=>k,go:()=>x,nv:()=>v,qr:()=>T,sO:()=>E});var r=a(3024),o=a(1455),n=a(6760),s=a(4347),l=a(5012),d=a(8359),c=a(4399),u=a(4071),p=a(9966),m=a(1986),g=a(3451),h=e([d,u]);[d,u]=h.then?(await h)():h;let L=[...l.GV,"TOOLS"],x=["en","zh"],j=/^[A-Z][A-Z0-9_]*$/;function f(e){let t=String(e??"").trim().toUpperCase();if(!j.test(t))throw Error(`Invalid role name "${e}". Use uppercase letters, digits, and underscores (e.g. RD, ARCH).`);return t}function k(e){let t=String(e??"").trim().toLowerCase();if(!x.includes(t))throw Error(`Invalid role template language "${e}". Supported: ${x.join(", ")}.`);return t}function v(e){let t=String(e??"").trim().toUpperCase();if(!L.includes(t))throw Error(`Invalid prompt name "${e}". Supported: ${L.join(", ")}.`);return t}async function b(e){let t=await (0,d.Iz)(e)??process.env.PITHOSAI_RSA_PUBLIC_KEY?.trim()??null;if(!t)throw Error("Missing RSA public key. Set pithosai_security_key.security_key or PITHOSAI_RSA_PUBLIC_KEY.");return t}async function w(e){let t=await (0,d.Tn)(e)??process.env.PITHOSAI_RSA_PRIVATE_KEY?.trim()??null;if(!t)throw Error("Missing RSA private key. Set pithosai_security_key.private_key or PITHOSAI_RSA_PRIVATE_KEY to create or update role templates.");return t}function y(e,t){if(!t)throw Error("privateKeyPem is required to encrypt role prompt plaintext.");return(0,p.w)(String(e),t)}function S(e,t){return(0,p.Yc)(String(e),t)}async function P(e){let t=await (0,d.ax)(e),a=await (0,d.SC)(e),i=new Map;for(let{role:e,lang:a}of t){let t=i.get(e)??[];t.includes(a)||t.push(a),i.set(e,t)}return[...i.entries()].sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({role:e,langs:t.sort(),displayNames:a[e]??{}}))}async function T(e,t){let a=f(t.role),i=k(t.lang),r=await b(e),o=(0,s.uG)(await (0,d.Bb)(e,a,i),a);if(null!=t.name&&""!==String(t.name).trim()){let n=v(t.name),s=await (0,d.N6)(e,{lang:i,role:a,name:n});if(!s)throw Error(`Role template not found: ${a} / ${i} / ${n}.`);return{role:a,lang:i,displayName:o,name:n,content:S(s.content,r)}}let n=await (0,d.iV)(e,{role:a,lang:i});if(0===n.length)throw Error(`Role template not found: ${a} / ${i}.`);let l={};for(let e of n)l[e.name]=S(e.content,r);return{role:a,lang:i,displayName:o,prompts:l}}function A(e){if(!e||"object"!=typeof e||Array.isArray(e))throw Error("prompts must be a non-null object keyed by prompt name.");let t={};for(let[a,i]of Object.entries(e)){let e=v(a);if("string"!=typeof i||""===i.trim())throw Error(`Prompt "${e}" must be a non-empty string.`);t[e]=i}if(0===Object.keys(t).length)throw Error("At least one prompt must be provided.");return t}async function I(e,t){let a=f(t.role),i=k(t.lang),r=A(t.prompts),o=(0,s.uG)(t.displayName,a);if((await (0,d.iV)(e,{role:a,lang:i})).length>0)throw Error(`Role template already exists for ${a} / ${i}. Use update instead.`);let n=await w(e);for(let[t,s]of Object.entries(r)){let r=y(s,n);await (0,d.s1)(e,{lang:i,role:a,name:t,content:r,displayName:o})}return await (0,d.z6)(e,a,i,o),await (0,m.Yu)(e,a)||await (0,m.TK)(e,{role:a,origin:t.origin??g.KL.USER,sourceType:t.sourceType??g.Oi.CREATED}),(0,u.JX)(`[role-template] created ${a}/${i}: ${Object.keys(r).join(", ")}`),{role:a,lang:i,names:Object.keys(r).sort(),displayName:o}}async function E(e,t){let a=f(t.role),i=k(t.lang),r=A(t.prompts),o=await (0,d.iV)(e,{role:a,lang:i});if(0===o.length)throw Error(`Role template not found for ${a} / ${i}. Use create instead.`);let n=void 0!==t.displayName&&null!==t.displayName,l=n?(0,s.uG)(t.displayName,a):(0,s.uG)(await (0,d.Bb)(e,a,i),a),c=await w(e);for(let[t,o]of Object.entries(r)){let r=y(o,c);await (0,d.s1)(e,{lang:i,role:a,name:t,content:r,displayName:n?l:""})}return n&&await (0,d.z6)(e,a,i,l),(0,u.JX)(`[role-template] updated ${a}/${i}: ${Object.keys(r).join(", ")}`),{role:a,lang:i,names:Object.keys(r).sort(),displayName:l}}async function C(e){let{roleDir:t,lang:a}=e,i=e.names??L,s={};for(let e of i){let i=function(e,t,a){let i=(0,l.fP)(t),o=(0,l.fP)(l.Kc),s=l.GV.indexOf(a);if(-1===s)return(0,n.join)(e,`${a}.md`);let d=i[s],c=o[s],u=(0,n.join)(e,d);return(0,r.existsSync)(u)||c===d||(u=(0,n.join)(e,c)),u}(t,a,e);(0,r.existsSync)(i)&&(s[e]=await (0,o.readFile)(i,"utf-8"))}if(0===Object.keys(s).length)throw Error(`No template files found under ${t} for lang "${a}".`);return s}async function R(e){let t=f(e.role),a=k(e.lang),i=e.fromDir?.trim()?e.fromDir.trim():(0,c.mi)(t);return C({roleDir:i,lang:a,names:e.names})}i()}catch(e){i(e)}})},8552(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Yb:()=>L,jN:()=>k,k9:()=>S,rP:()=>M,uJ:()=>w,uX:()=>O});var r=a(3024),o=a(8161),n=a(6760),s=a(1455),l=a(1421),d=a(11),c=a(7975),u=a(9434),p=a(4071),m=e([p,u,d]);[p,u,d]=m.then?(await m)():m;let N=(0,c.promisify)(l.exec);function g(e,t={}){(0,p.JX)(`[skills-service] ${e}`,JSON.stringify(t))}function h(e){let t="string"==typeof e?e.trim().toLowerCase():"";return"global"===t||"project"===t?t:null}function f(e={}){return(0,n.resolve)("string"==typeof e.projectPath&&""!==e.projectPath.trim()?e.projectPath.trim():e.cwd||process.cwd())}function k(e){let t=e.homeDir??(0,o.homedir)(),a=f(e);return"global"===e.scope?(0,n.join)(t,".pithosai","skills"):(0,n.join)(a,".pithosai","skills")}function v(e){let t=e.homeDir??(0,o.homedir)(),a=f(e);return"global"===e.scope?(0,n.join)(t,".pithosai","skill-settings.json"):(0,n.join)(a,".pithosai","skill-settings.json")}async function b(){try{return await N("which clawhub"),!0}catch{return!1}}async function w(){if(await b())return void g("ensureClawhubAvailable",{status:"available"});g("ensureClawhubAvailable",{status:"missing",action:"install"}),console.debug("[skills-service] clawhub not found on PATH, installing via npm i -g clawhub");try{await y("npm i -g clawhub")}catch(e){console.error("[skills-service] failed to install clawhub via npm",e)}if(!await b())throw g("ensureClawhubAvailable",{status:"installFailed"}),Error("clawhubMissing");g("ensureClawhubAvailable",{status:"installed"})}async function y(e){await new Promise((t,a)=>{let i=(0,l.spawn)(e,{shell:!0,stdio:"inherit"});i.on("error",a),i.on("close",(e,i)=>{0===e?t():a(Error(`Command exited with code ${e??"null"}${i?` (signal ${i})`:""}`))})})}async function S(){g("listRemoteClawhubSkillNames",{status:"start"});let e=await N("clawhub list | awk '{print $1}'"),t=(function(e){if(null!=e&&"object"==typeof e&&"stdout"in e){let t=e.stdout;return null==t?"":String(t)}return"string"==typeof e?e:Array.isArray(e)&&null!=e[0]?String(e[0]):""})(e).split("\n").map(e=>e.trim()).filter(Boolean);return g("listRemoteClawhubSkillNames",{status:"done",count:t.length}),t}function P(){let e=process.env.CLAWHUB_REGISTRY||process.env.CLAWDHUB_REGISTRY||"";return String(e).trim()||"https://clawhub.ai"}function T(e){let t=String(e.slug??"").trim(),a=String(e.ownerHandle??"").trim();return t&&a?`@${a}/${t}`:""}function A(e){let t=e&&"object"==typeof e?e:null;if(!t)return null;let a="string"==typeof t.ownerHandle?t.ownerHandle.trim():"",i="string"==typeof t.slug?t.slug.trim():"",r="string"==typeof t.ref?t.ref.trim():T({ownerHandle:a,slug:i});if(!a||!i||!r)return null;let o="string"==typeof t.url?t.url.trim():"";return{ownerHandle:a,slug:i,ref:r,...o?{url:o}:{}}}async function I(e,t=""){let a,i=String(e??"").trim();if(!i)return{type:"notFound"};let r=String(t??"").trim();g("lookupSkillMarketSkillDetail",{slug:i,ownerHandle:r||null,status:"start"});let o=P().replace(/\/$/,""),n=new URL(`${o}/api/v1/skills/${encodeURIComponent(i)}`);r&&n.searchParams.set("owner",r);try{g("lookupSkillMarketSkillDetail",{url:n.toString(),status:"start"}),a=await fetch(n.toString(),{headers:{Accept:"application/json"}})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`skillMarketFetchFailed:${e}`)}if(404===a.status)return g("lookupSkillMarketSkillDetail",{slug:i,status:"notFound"}),{type:"notFound"};if(429===a.status)return g("lookupSkillMarketSkillDetail",{slug:i,status:"rateLimited"}),{type:"rateLimited"};if(!a.ok){let e=await a.text().catch(()=>"");if(!r){let t=function(e){let t=function(e){let t=String(e??"").trim(),a=t.startsWith("installFailed:")?t.slice(14).trim():t;if(!a.startsWith("{"))return null;try{let e=JSON.parse(a);return e&&"object"==typeof e?e:null}catch{return null}}(String(e??"").trim());if(t?.code!=="AMBIGUOUS_SKILL_SLUG"||!Array.isArray(t.matches))return null;let a=t.matches.map(A).filter(e=>null!=e);return a.length?a:null}(e);if(t)return g("lookupSkillMarketSkillDetail",{slug:i,status:"ambiguous",matchCount:t.length}),{type:"ambiguous",matches:t}}if(e.trim().startsWith("{"))throw(0,p.CN)("lookupSkillMarketSkillDetail",{slug:i,status:"failed",error:e.trim()}),Error(`skillMarketFetchFailed:${e.trim()}`);throw(0,p.CN)("lookupSkillMarketSkillDetail",{slug:i,status:"failed",error:`skillMarketFetchFailed:HTTP ${a.status}`}),Error(`skillMarketFetchFailed:HTTP ${a.status}`)}return g("lookupSkillMarketSkillDetail",{slug:i,status:"done"}),{type:"found",payload:await a.json()}}async function E(e,t=""){let a=await I(e,t);if("found"===a.type)return a.payload;if("notFound"===a.type||"rateLimited"===a.type)return null;throw Error(`skillMarketFetchFailed:${JSON.stringify({code:"AMBIGUOUS_SKILL_SLUG",slug:String(e??"").trim(),matches:a.matches})}`)}async function C(e){let t=v(e);if(!(0,r.existsSync)(t))return new Set;try{let a=await (0,s.readFile)(t,"utf-8"),i=JSON.parse(a),r=i?.disabledSkills?.[e.scope];if(!Array.isArray(r))return new Set;return new Set(r.map(e=>String(e??"").trim().toLowerCase()).filter(Boolean))}catch{return new Set}}async function R(e){let t=v(e);await (0,s.mkdir)((0,n.dirname)(t),{recursive:!0});let a={};if((0,r.existsSync)(t))try{a=JSON.parse(await (0,s.readFile)(t,"utf-8"))}catch{a={}}let i={...a.disabledSkills&&"object"==typeof a.disabledSkills?a.disabledSkills:{},[e.scope]:e.disabledNames};await (0,s.writeFile)(t,`${JSON.stringify({...a,disabledSkills:i},null,2)}
|
|
543
|
-
`,"utf-8")}async function
|
|
544
|
-
`,"utf-8"),g("persistInstalledSkillOwnerMetadata",{targetDir:t,ownerHandle:a,status:"done"})}catch(e){console.error(`[skills-service] failed to persist owner metadata for installed skill: ${t}`,e)}}async function j(e){let t=String(e.slug??"").trim(),a=String(e.ownerHandle??"").trim(),i=String(e.skillsDir??"").trim();if(!t||!a||!i)throw Error("skillSlugRequired");let l=(0,n.join)(i,t);if((0,r.existsSync)(l)&&!0!==e.force)throw Error(`installFailed:Already installed: ${l} (use --force)`);!0===e.force&&(0,r.existsSync)(l)&&await (0,s.rm)(l,{recursive:!0,force:!0});let c=await E(t,a);if(!c)throw Error("installFailed:Skill not found");let u=c.latestVersion&&"object"==typeof c.latestVersion?c.latestVersion:null,p="string"==typeof u?.version?u.version.trim():"";if(!p)throw Error("installFailed:Could not resolve latest version");let m=P().replace(/\/$/,""),g=new URL(`${m}/api/v1/download`);g.searchParams.set("slug",t),g.searchParams.set("owner",a),g.searchParams.set("version",p);let h=await fetch(g.toString());if(!h.ok){let e=await h.text().catch(()=>"");throw Error(`installFailed:${e||`HTTP ${h.status}`}`)}let f=Buffer.from(await h.arrayBuffer()),k=await (0,s.mkdtemp)((0,n.join)((0,o.tmpdir)(),"pithos-skill-install-")),v=(0,n.join)(k,`${t}.zip`);try{await (0,s.writeFile)(v,f),await (0,s.mkdir)(l,{recursive:!0}),new d.default(v).extractAllTo(l,!0),await x({targetDir:l,ownerHandle:a})}finally{await (0,s.rm)(k,{recursive:!0,force:!0})}}async function M(e){let t=function(e){let t=String(e.ref??e.installRef??"").trim();if(t)return t;let a=T({ownerHandle:e.ownerHandle,slug:e.slug});return a||String(e.slug??"").trim()}({slug:e.slug,ref:e.ref,installRef:e.installRef,ownerHandle:e.ownerHandle}),{slug:a,ownerHandle:i}=function(e){let t=String(e??"").trim();if(!t)return{ownerHandle:"",slug:""};let a=t.startsWith("@")?t.slice(1):t,i=a.indexOf("/");return -1===i?{ownerHandle:"",slug:a}:{ownerHandle:a.slice(0,i).trim(),slug:a.slice(i+1).trim()}}(t);if(!a)throw Error("skillSlugRequired");let r=h(e.scope);if(!r)throw Error("skillScopeInvalid");let n=e.homeDir??(0,o.homedir)(),l=f(e),d=k({scope:r,cwd:l,homeDir:n});await (0,s.mkdir)(d,{recursive:!0}),g("installSkill",{status:"start",ref:t,slug:a,ownerHandle:i||null,scope:r,skillsDir:d,force:!0===e.force});try{if(i)await j({slug:a,ownerHandle:i,skillsDir:d,force:!0===e.force});else{await w();let t=`'${String(a).replace(/'/g,"'\\''")}'`,i=`clawhub install ${t} --dir "${d}"`;!0===e.force&&(i=`${i} --force`),await y(i)}}catch(o){let e=o instanceof Error?o.message:String(o);throw g("installSkill",{status:"failed",ref:t,slug:a,ownerHandle:i||null,scope:r,error:e}),Error(e.startsWith("installFailed:")?e:`installFailed:${e}`)}g("installSkill",{status:"done",ref:t,slug:a,ownerHandle:i||null,scope:r,skillsDir:d})}async function O(e){let t=String(e.skillName??"").trim();if(!t)throw Error("skillNameRequired");let a=h(e.scope);if(!a)throw Error("skillScopeInvalid");let i=e.homeDir??(0,o.homedir)(),l=f(e),d=k({scope:a,cwd:l,homeDir:i});if(!(0,r.existsSync)(d))throw Error("skillsDirMissing");let c=(0,n.join)(d,t,"SKILL.md");if(!(0,r.existsSync)(c))throw Error("skillNotInstalled");g("removeSkill",{status:"start",skillName:t,scope:a,skillsDir:d});let u=(0,n.join)(d,t,"_meta.json");await (0,s.unlink)(c),(0,r.existsSync)(u)&&await (0,s.unlink)(u),await (0,s.rm)((0,n.join)(d,t),{recursive:!0,force:!0});let p=await C({scope:a,cwd:l,homeDir:i});p.has(t.toLowerCase())&&(p.delete(t.toLowerCase()),await R({scope:a,disabledNames:[...p],cwd:l,homeDir:i})),g("removeSkill",{status:"done",skillName:t,scope:a,skillsDir:d})}i()}catch(e){i(e)}})},4768(e,t,a){a.a(e,async function(e,i){try{a.d(t,{L:()=>p,s:()=>u});var r=a(6760);a(8161);var o=a(1455),n=a(8359),s=a(4071),l=e([n,s]);[n,s]=l.then?(await l)():l;let m=".settings.json";function d(e,t){let a=null!=t&&"object"==typeof t?t:{},i=a.project?.type??a.type??"js",o={name:a.project?.name??((0,r.basename)(e)||"project"),cwd:a.project?.cwd??e,type:"ts"===i||"python"===i||"rust"===i||"java"===i?i:"js"},n=Array.isArray(a.supportedRoles)?a.supportedRoles:[],s=a.hooks&&"object"==typeof a.hooks?a.hooks:{};return{...null!=a.lang&&{lang:String(a.lang)},project:o,supportedRoles:n,roles:null,tools:null,hooks:s}}async function c(e){let t=await (0,n.Lf)();return e.roles=await (0,n.uh)(t),e}async function u(e){let t=(0,r.join)(e,m);try{let a=await (0,o.readFile)(t,"utf-8"),i=JSON.parse(a),r=d(e,i);return await c(r)}catch(a){return null!=a&&"object"==typeof a&&"code"in a&&"ENOENT"===a.code?(0,s.JX)("readSettings: settings file missing, using defaults:",t):(0,s.vV)("readSettings, cwd:",e,"error:",a.message,a.stack),c(d(e,{}))}}async function p(e,t){let a=(0,r.join)(e,m),i=await u(e),n=t.project?.type??t.type??i.project.type,s={...{...null!=t.lang?{lang:t.lang}:null!=i.lang?{lang:i.lang}:{},project:{name:t.project?.name??i.project.name,cwd:t.project?.cwd??i.project.cwd,type:"ts"===n||"python"===n||"rust"===n||"java"===n?n:"js"},supportedRoles:Array.isArray(t.supportedRoles)?t.supportedRoles:i.supportedRoles,roles:t.roles&&"object"==typeof t.roles?t.roles:i.roles??{},tools:t.tools&&"object"==typeof t.tools?{web:{fetch:t.tools.web?.fetch!=null?{enabled:!!t.tools.web.fetch.enabled}:i.tools.web.fetch,search:t.tools.web?.search!=null?{enabled:!!t.tools.web.search.enabled}:i.tools.web.search}}:i.tools,hooks:t.hooks&&"object"==typeof t.hooks?t.hooks:i.hooks??{}}};void 0===s.lang&&delete s.lang,await (0,o.writeFile)(a,JSON.stringify(s,null,2),"utf-8")}i()}catch(e){i(e)}})},5771(e,t,a){a.a(e,async function(e,i){try{a.d(t,{IH:()=>R,Qk:()=>E,Rz:()=>u,VT:()=>A,dF:()=>I,tT:()=>T});var r=a(6760),o=a(1455),n=a(3024),s=a(4071),l=a(3529),d=a(3447),c=e([s,l]);[s,l]=c.then?(await c)():c;let C=null;try{let e=await a.e("336").then(a.bind(a,5627));C=e.default??e}catch{C=null}async function u(e){if((0,r.basename)(e)===d.l4)throw Error(`Invalid database path: ${e} is the device metadata file (${d.l4}), not a database file. Fix the DB path env var.`);if(!(0,n.existsSync)(e))return;let t=await (0,o.stat)(e);if(t.isDirectory())throw Error(`Invalid database path: ${e} is a directory, not a file. Fix the DB path env var.`);0===t.size&&await (0,o.unlink)(e)}function p(e,t,a=[]){return(0,s.JX)(`[storage][sqlcipher] get sql=${f(t)} paramTypes=${a.map(e=>null===e?"null":void 0===e?"undefined":"bigint"==typeof e?"bigint":e instanceof Uint8Array?"Uint8Array":e instanceof ArrayBuffer?"ArrayBuffer":typeof e).join(",")}`),new Promise((i,r)=>{e.get(t,a,(e,t)=>{e?r(e):i(t)})})}function m(e,t){return(0,s.JX)(`[storage][sqlcipher] exec sql=${f(t)}`),new Promise((a,i)=>{e.exec(t,e=>{e?i(e):a()})})}function g(e){return(0,s.JX)("[storage][sqlcipher] close db"),new Promise((t,a)=>{e.close(e=>{e?a(e):t()})})}function h(e){return String(e).replace(/'/g,"''")}function f(e){let t=String(e??"").replace(/\s+/g," ").trim();return t=(t=t.replace(/(PRAGMA\s+key\s*=\s*)'[^']*'/gi,"$1'<redacted>'")).replace(/(\bKEY\s*)'[^']*'/gi,"$1'<redacted>'")}function k(e){let{sqlite3:t,path:a}=e;return new Promise((e,i)=>{let r=new t.Database(a,t.OPEN_READWRITE|t.OPEN_CREATE,t=>{t?i(t):e(r)})})}async function v(e){await p(e,"SELECT count(*) AS total FROM sqlite_master")}async function b(e,t,a){let i=await k({sqlite3:e,path:t});try{var r;return(0,s.JX)(`[storage] openSqlcipherAdapterWithKey key=${a}, path=${t}`),await m(i,`PRAGMA key = '${h(a)}'`),await m(i,"PRAGMA cipher_compatibility = 4"),await v(i),await m(i,"PRAGMA journal_mode = WAL"),await m(i,"PRAGMA foreign_keys = ON"),r=i,{run:(e,t=[])=>(function(e,t,a=[]){return(0,s.JX)(`[storage][sqlcipher] run sql=${f(t)} paramTypes=${a.map(e=>null===e?"null":void 0===e?"undefined":"bigint"==typeof e?"bigint":e instanceof Uint8Array?"Uint8Array":e instanceof ArrayBuffer?"ArrayBuffer":typeof e).join(",")}`),new Promise((i,r)=>{e.run(t,a,function(e){e?r(e):i({id:Number(this.lastID??0),changes:Number(this.changes??0)})})})})(r,e,t),get:(e,t=[])=>p(r,e,t),all:(e,t=[])=>(function(e,t,a=[]){return(0,s.JX)(`[storage][sqlcipher] all sql=${f(t)} paramTypes=${a.map(e=>null===e?"null":void 0===e?"undefined":"bigint"==typeof e?"bigint":e instanceof Uint8Array?"Uint8Array":e instanceof ArrayBuffer?"ArrayBuffer":typeof e).join(",")}`),new Promise((i,r)=>{e.all(t,a,(e,t)=>{e?r(e):i(t??[])})})})(r,e,t),exec:e=>m(r,e),close:()=>g(r)}}catch(e){throw await g(i),(0,s.CN)(`[storage] openSqlcipherAdapterWithKey key=${a}, path=${t} error: ${e.message}`,e.stack),e}}async function w(e){try{await v(e);return}catch{}await m(e,"PRAGMA key = ''"),await v(e)}async function y(e){if(function(e){try{let t=new l.default(e,{fileMustExist:!0});try{t.pragma("query_only = ON"),t.prepare("SELECT count(*) AS c FROM sqlite_master").get()}finally{t.close()}return!0}catch{return!1}}(e.path))return!0;let t=await k(e);try{return await w(t),await g(t),!0}catch{return await g(t),!1}}class R extends Error{constructor(){super("The SQLCipher native module (@journeyapps/sqlcipher) is not available. Install or rebuild it for your platform to migrate or open encrypted databases."),this.name="SqlcipherUnavailableError"}}async function S(e){let{sqlite3:t,path:a,cipherKey:i}=e,r=`${a}.enc-migrating`,s=`${a}.plain-backup`;(0,n.existsSync)(r)&&await (0,o.unlink)(r),(0,n.existsSync)(s)&&await (0,o.unlink)(s);let l=await k({sqlite3:t,path:a});try{await w(l),await m(l,`ATTACH DATABASE '${h(r)}' AS encrypted KEY '${h(i)}'`),await m(l,"SELECT sqlcipher_export('encrypted')"),await m(l,"DETACH DATABASE encrypted")}finally{await g(l)}await (0,o.rename)(a,s);try{await (0,o.rename)(r,a),await (0,o.unlink)(s)}catch(e){throw(0,n.existsSync)(a)&&await (0,o.unlink)(a),await (0,o.rename)(s,a),(0,n.existsSync)(r)&&await (0,o.unlink)(r),e}}async function P(e){let t,{sqlite3:a,path:i,cipherKey:r}=e;try{return await b(a,i,r)}catch(e){t=e}if(!await y({sqlite3:a,path:i}))throw Error(function(e,t){let a=t&&"object"==typeof t&&"code"in t?String(t.code):"",i=t instanceof Error?t.message:String(t),r="";try{if((0,n.existsSync)(e)){let t=(0,n.statSync)(e);r=`File exists; ${t.isFile()?"regular file":"not a regular file"}; size ${t.size} bytes.`}else r="File does not exist (unexpected after path resolution)."}catch{r=""}let o=[r,`path: ${e}`,`Check PITHOSAI_DB_PATH points to the real SQLite file (not a directory or ${d.l4}).`,`If ~/.pithosai/${d.l4} was replaced, the device-derived key changed — restore that file from backup (see docs/device-id.md).`,"If the file is corrupt or not SQLite at all, move it aside and let the app create a new DB, or restore from backup."];return`Cannot open storage database (${a||"error"}): ${i}
|
|
542
|
+
`,"utf8"),console.debug("[catalog] seeded user models file",i));let t=(0,r.readFileSync)(i,"utf8"),a=s.default.parse(t);if(!function(e){if(null==e||"object"!=typeof e)return!1;let t=e.openrouter,a=e.handCrafted,i=e.defaults;return!!Array.isArray(e.chinaDirectProviders)&&null!=t&&"object"==typeof t&&!!Array.isArray(t.chinaMainlandSlugs)&&null!=a&&"object"==typeof a&&null!=a.krouter&&null!=i&&"object"==typeof i&&!0}(a))return console.error("[catalog] user models file missing required sections, using bundled catalog",i),e;return a}catch(t){return console.error("[catalog] failed to load user models file",i,t),e}}i()}catch(e){i(e)}})},2421(e,t,a){a.d(t,{k:()=>i});function i(){return null}},5784(e,t,a){a.d(t,{Oe:()=>i}),a(7598);function i(e){let t="string"==typeof e?e.trim():"";return t&&!(t.length>128)&&/^[0-9a-zA-Z_.-]+$/.test(t)?t:null}},3451(e,t,a){a.d(t,{KL:()=>i,Oi:()=>r});let i=Object.freeze({SYSTEM:"system",USER:"user"}),r=Object.freeze({SYSTEM:"system",INSTALLED:"installed",CREATED:"created"})},4347(e,t,a){a.d(t,{uG:()=>r});let i=Object.freeze({ARCH:"Architect",RD:"Developer",PM:"Product Manager",QA:"Quality Assurance",CO:"Company Operation",MKT:"Marketing",SRE:"Operations",WR:"Writer",LDR:"Leader"});function r(e,t){let a,r="string"==typeof e?e.trim():"";return r?r:(a=String(t??"").trim().toUpperCase())?i[a]||a:""}},8391(e,t,a){a.a(e,async function(e,i){try{a.d(t,{S:()=>l});var r=a(5012),o=a(8359),n=a(9966),s=e([o]);async function l(e,t){let a=await (0,o.Iz)(e)??process.env.PITHOSAI_RSA_PUBLIC_KEY?.trim()??null;if(!a)throw Error("Missing RSA public key. Set pithosai_security_key.security_key or PITHOSAI_RSA_PUBLIC_KEY to decrypt role prompts.");let{role:i,lang:s}=t,l=await (0,o.iV)(e,{role:i,lang:s}),d=Object.fromEntries(l.map(e=>[e.name,e])),c={};for(let e of r.GV){let t=d[e];t&&(c[e]=(0,n.Yc)(t.content,a))}return c}o=(s.then?(await s)():s)[0],i()}catch(e){i(e)}})},8098(e,t,a){a.d(t,{Ai:()=>s});var i=a(5012);let r="https://app.circlecoin.me/pithosai/ROLE_MARKET_CATALOG",o=new Map;function n(e){let t=String(e??"").trim(),a=t.toLowerCase();return t&&"en"!==a?"zh-tw"===a||"zh-hk"===a||"zh-hant"===a?"zh-Hant":i.Lq.includes(t)?t:i.Lq.includes(a)?a:"en":"en"}async function s(e={}){let t,a,i=n(e.lang),l=o.get(i);if(l)return l;let d="en"===(a=n(i))?`${r}.json`:`${r}-${a}.json`,c=e.fetchImpl??fetch;try{t=await c(d,{headers:{Accept:"application/json"}})}catch(e){throw Error(`Failed to fetch role market catalog from ${d}: ${String(e)}`)}if(!t.ok)throw Error(`Failed to fetch role market catalog from ${d}: ${t.status} ${t.statusText}`);let u=function(e){if(!Array.isArray(e))throw Error("Role market catalog response must be a JSON array.");return Object.freeze(e.map(e=>Object.freeze(function(e){if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Role market catalog entry must be a JSON object.");let t=String(e.url??"").trim();if(!t)throw Error("Role market catalog entry is missing required fields.");let a={id:String(e.id??"").trim(),role:String(e.role??"").trim().toUpperCase(),title:String(e.title??"").trim(),description:String(e.description??"").trim(),category:String(e.category??"").trim(),iconColor:String(e.iconColor??"").trim(),url:t},i=String(e.sourceRole??"").trim().toUpperCase();return i&&(a.sourceRole=i),a}(e))))}(await t.json());return o.set(i,u),u}},9966(e,t,a){a.d(t,{Yc:()=>p,w:()=>u});var i=a(7598);let r="aes-256-gcm",o=i.constants.RSA_PKCS1_PADDING;function n(e){return(e||"").trim().replace(/\\n/g,"\n")}function s(e,t){if(t+4>e.length)throw Error("Truncated OpenSSH key");let a=e.readUInt32BE(t),i=t+4,r=i+a;if(r>e.length)throw Error("Truncated OpenSSH key");return{value:e.subarray(i,r),next:r}}function l(e){let t=e;for(;t.length>1&&0===t[0];)t=t.subarray(1);return t.toString("base64url")}function d(e){let t=e;for(;t.length>1&&0===t[0];)t=t.subarray(1);return BigInt(`0x${t.toString("hex")||"0"}`)}function c(e){let t=e.toString(16);return t.length%2&&(t=`0${t}`),Buffer.from(t,"hex").toString("base64url")}function u(e,t){let a=function(e){let t=n(e);if(!t)throw Error("RSA private key is empty");let a=/BEGIN OPENSSH PRIVATE KEY/.test(t);if(t.includes("-----BEGIN")&&!a)try{return(0,i.createPrivateKey)(t)}catch(e){throw console.error("[role-prompts-crypto] failed to parse private key PEM",e),Error("Invalid RSA private key PEM. Expected PKCS#8 (BEGIN PRIVATE KEY), PKCS#1 (BEGIN RSA PRIVATE KEY), or OpenSSH (BEGIN OPENSSH PRIVATE KEY).",{cause:e})}let r=function(e){if(e.includes("-----BEGIN")){let t=e.replace(/-----BEGIN [^-]+-----/,"").replace(/-----END [^-]+-----/,"").replace(/\s/g,"");return Buffer.from(t,"base64")}return Buffer.from(e.replace(/\s/g,""),"base64")}(t);if(a||"openssh-key-v1\0"===r.subarray(0,15).toString())try{return function(e){let t,a=Buffer.from("openssh-key-v1\0");if(e.length<a.length||!e.subarray(0,a.length).equals(a))throw Error("Not an OpenSSH private key");let r=a.length,o=s(e,r),n=s(e,r=o.next);if(r=s(e,r=n.next).next,"none"!==o.value.toString()||"none"!==n.value.toString())throw Error("Encrypted OpenSSH private keys are not supported. Convert with: ssh-keygen -p -m PEM -f <keyfile>");let u=e.readUInt32BE(r);if(r+=4,1!==u)throw Error(`OpenSSH key must contain exactly 1 key (got ${u})`);r=s(e,r).next;try{t=s(e,r).value}catch(e){throw Error("OpenSSH private key appears truncated or incomplete (common when pasting into Windows env vars). Set the full key via PITHOSAI_RSA_PRIVATE_KEY_FILE, or convert to PEM: ssh-keygen -p -m PEM -f <keyfile>",{cause:e})}let p=0,m=t.readUInt32BE(p);p+=4;let g=t.readUInt32BE(p);if(p+=4,m!==g)throw Error("OpenSSH private key checkints mismatch (corrupt or wrong passphrase)");let h=s(t,p);if(p=h.next,"ssh-rsa"!==h.value.toString())throw Error(`OpenSSH key type "${h.value.toString()}" is not supported; need ssh-rsa (2048-bit).`);let f=s(t,p),k=s(t,p=f.next),v=s(t,p=k.next),b=s(t,p=v.next),w=s(t,p=b.next),y=s(t,p=w.next),S=d(v.value),P=d(w.value),T=d(y.value);return(0,i.createPrivateKey)({key:{kty:"RSA",n:l(f.value),e:l(k.value),d:l(v.value),p:l(w.value),q:l(y.value),dp:c(S%(P-1n)),dq:c(S%(T-1n)),qi:l(b.value)},format:"jwk"})}(r)}catch(e){throw console.error("[role-prompts-crypto] failed to parse OpenSSH private key",e),e instanceof Error?e:Error("Invalid OpenSSH private key",{cause:e})}for(let e of["pkcs8","pkcs1"])try{return(0,i.createPrivateKey)({key:r,format:"der",type:e})}catch(t){console.debug(`[role-prompts-crypto] private key DER as ${e} failed:`,t instanceof Error?t.message:t)}throw Error("Invalid RSA private key. Provide PEM/OpenSSH or base64 DER (PKCS#8 or PKCS#1, 2048-bit RSA).")}(t),u=(0,i.randomBytes)(32),p=(0,i.randomBytes)(12),m=(0,i.createCipheriv)(r,u,p,{authTagLength:16}),g=Buffer.concat([m.update(e,"utf8"),m.final()]),h=m.getAuthTag(),f=(0,i.privateEncrypt)({key:a,padding:o},u);if(256!==f.length)throw Error(`RSA encrypted key must be 256 bytes (got ${f.length}). Use 2048-bit RSA key.`);return Buffer.concat([f,p,h,g]).toString("hex")}function p(e,t){let a=function(e){let t=n(e);if(!t)throw Error("RSA public key is empty");if(t.includes("-----BEGIN"))try{return(0,i.createPublicKey)(t)}catch(e){throw console.error("[role-prompts-crypto] failed to parse public key PEM",e),Error("Invalid RSA public key PEM. Expected SPKI (BEGIN PUBLIC KEY) or PKCS#1 (BEGIN RSA PUBLIC KEY).",{cause:e})}let a=Buffer.from(t.replace(/\s/g,""),"base64");for(let e of["spki","pkcs1"])try{return(0,i.createPublicKey)({key:a,format:"der",type:e})}catch(t){console.debug(`[role-prompts-crypto] public key DER as ${e} failed:`,t instanceof Error?t.message:t)}throw Error("Invalid RSA public key. Provide PEM or base64 DER (SPKI or PKCS#1).")}(t),s=Buffer.from(e,"hex");if(s.length<284)throw Error("Role prompt content too short (invalid or corrupted)");let l=s.subarray(0,256),d=s.subarray(256,268),c=s.subarray(268,284),u=s.subarray(284),p=(0,i.publicDecrypt)({key:a,padding:o},l);if(32!==p.length)throw Error(`Unwrapped key must be 32 bytes (got ${p.length}).`);let m=(0,i.createDecipheriv)(r,p,d,{authTagLength:16});return m.setAuthTag(c),m.update(u,void 0,"utf8")+m.final("utf8")}},789(e,t,a){a.a(e,async function(e,i){try{a.d(t,{yU:()=>n});var r=a(7993),o=e([r]);async function n(e){let t=String(e.url??"").trim(),a=(0,r.aP)(e.lang),i=e.fetchImpl??fetch,o={};for(let e of r.Wi){let n,s=function(e){var t,a;let i,o,n=function(e){let t=String(e??"").trim().replace(/\/+$/,"");if(!t)throw Error("Role market URL is required.");return`${t}/`}(e.url),s=(t=e.promptName,a=e.lang,i=(0,r.nv)(t),o=(0,r.aP)(a),"en"===o?`${i}.md`:`${i}-${o}.md`);return`${n}${s}`}({url:t,promptName:e,lang:a});try{n=await i(s,{headers:{Accept:"text/plain, text/markdown, */*"}})}catch(e){throw Error(`Failed to fetch role template from ${s}: ${String(e)}`)}if(!n.ok)throw Error(`Failed to fetch role template from ${s}: ${n.status} ${n.statusText}`);let l=String(await n.text()).trim();if(!l)throw Error(`Role market prompt file is empty: ${s}`);o[e]=l}return(0,r.El)(o)}r=(o.then?(await o)():o)[0],i()}catch(e){i(e)}})},5342(e,t,a){a.a(e,async function(e,i){try{a.d(t,{$j:()=>p,au:()=>m,v_:()=>h,xB:()=>f});var r=a(8098),o=a(789),n=a(7993),s=a(8359),l=a(4071),d=e([o,n,s,l]);[o,n,s,l]=d.then?(await d)():d;let g=Object.freeze(["RD","PM","QA","WR","CO","MKT","SRE"]);class h extends Error{constructor(){super("There is already data in the role templates, please use update command"),this.name="RoleTemplatesAlreadyPresentError"}}class f extends Error{constructor(e){super(`Role ${e} was not found in the Role Market catalog.`),this.name="RoleMarketCatalogRoleNotFoundError",this.role=e}}function c(e,t){let a=(0,n.Rd)(t);return(Array.isArray(e)?e:[]).find(e=>String(e?.role??"").trim().toUpperCase()===a)}function u(e,t){(0,l.JX)("[role-template-market-seed] progress",JSON.stringify(t)),"function"==typeof e.onProgress&&e.onProgress(t)}async function p(e,t={}){if((await (0,s.ax)(e)).length>0)throw(0,l.CN)("[role-template-market-seed] init rejected: pithosai_role_prompts already has data"),new h;u(t,{phase:"start"});let a=t.fetchImpl,i={};for(let e of n.go)u(t,{phase:"catalog",lang:e}),i[e]=await (0,r.Ai)({lang:e,fetchImpl:a});let d=[],m=g.length*n.go.length,f=0;for(let e of g)for(let r of n.go){let n=function(e,t){let a=c(e,t.role),i=String(a?.url??"").trim();if(!a||!i)throw Error(`Role Market catalog is missing required role: ${t.role} (${t.lang}).`);return{role:String(a.role??"").trim()||t.role,title:String(a.title??"").trim(),url:i}}(i[r],{role:e,lang:r});f+=1,u(t,{phase:"template",role:e,lang:r,current:f,total:m,url:n.url});let s=await (0,o.yU)({url:n.url,lang:r,fetchImpl:a});d.push({role:e,lang:r,url:n.url,displayName:n.title||e,prompts:s})}(0,l.JX)(`[role-template-market-seed] fetched ${d.length} role/lang packs; persisting`),u(t,{phase:"persist"}),await e.exec("BEGIN");try{for(let t of d)await (0,n.XE)(e,{role:t.role,lang:t.lang,prompts:t.prompts,displayName:t.displayName,sourceType:"installed"}),await (0,s.A2)(e,t.role,t.lang,t.url);await e.exec("COMMIT")}catch(t){(0,l.CN)("[role-template-market-seed] persist failed; rolling back",t);try{await e.exec("ROLLBACK")}catch(e){(0,l.CN)("[role-template-market-seed] rollback failed",e)}throw t}return(0,l.JX)(`[role-template-market-seed] initialized ${g.join(", ")}`),{roles:[...g],langs:[...n.go]}}async function m(e,t){let a=(0,n.Rd)(t.role),i=(0,n.aP)(t.lang),d=t.fetchImpl,u=await (0,r.Ai)({lang:i,fetchImpl:d}),p=c(u,a);if(!p?.url)throw(0,l.CN)(`[role-template-market-seed] catalog lookup failed for ${a}/${i}`),new f(a);let m=await (0,o.yU)({url:p.url,lang:i,fetchImpl:d}),g=await (0,n.sO)(e,{role:a,lang:i,prompts:m,displayName:p.title||a});return await (0,s.A2)(e,a,i,p.url),(0,l.JX)(`[role-template-market-seed] updated ${a}/${i} from ${p.url}: ${g.names.join(", ")}`),{role:a,lang:i,names:g.names,url:p.url}}i()}catch(e){i(e)}})},7993(e,t,a){a.a(e,async function(e,i){try{a.d(t,{E7:()=>P,El:()=>A,Kg:()=>R,Rd:()=>f,Wi:()=>x,XE:()=>I,aP:()=>k,go:()=>L,nv:()=>v,qr:()=>T,sO:()=>E});var r=a(3024),o=a(1455),n=a(6760),s=a(4347),l=a(5012),d=a(8359),c=a(4399),u=a(4071),p=a(9966),m=a(1986),g=a(3451),h=e([d,u]);[d,u]=h.then?(await h)():h;let x=[...l.GV,"TOOLS"],L=["en","zh"],j=/^[A-Z][A-Z0-9_]*$/;function f(e){let t=String(e??"").trim().toUpperCase();if(!j.test(t))throw Error(`Invalid role name "${e}". Use uppercase letters, digits, and underscores (e.g. RD, ARCH).`);return t}function k(e){let t=String(e??"").trim().toLowerCase();if(!L.includes(t))throw Error(`Invalid role template language "${e}". Supported: ${L.join(", ")}.`);return t}function v(e){let t=String(e??"").trim().toUpperCase();if(!x.includes(t))throw Error(`Invalid prompt name "${e}". Supported: ${x.join(", ")}.`);return t}async function b(e){let t=await (0,d.Iz)(e)??process.env.PITHOSAI_RSA_PUBLIC_KEY?.trim()??null;if(!t)throw Error("Missing RSA public key. Set pithosai_security_key.security_key or PITHOSAI_RSA_PUBLIC_KEY.");return t}async function w(e){let t=await (0,d.Tn)(e)??process.env.PITHOSAI_RSA_PRIVATE_KEY?.trim()??null;if(!t)throw Error("Missing RSA private key. Set pithosai_security_key.private_key or PITHOSAI_RSA_PRIVATE_KEY to create or update role templates.");return t}function y(e,t){if(!t)throw Error("privateKeyPem is required to encrypt role prompt plaintext.");return(0,p.w)(String(e),t)}function S(e,t){return(0,p.Yc)(String(e),t)}async function P(e){let t=await (0,d.ax)(e),a=await (0,d.SC)(e),i=new Map;for(let{role:e,lang:a}of t){let t=i.get(e)??[];t.includes(a)||t.push(a),i.set(e,t)}return[...i.entries()].sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({role:e,langs:t.sort(),displayNames:a[e]??{}}))}async function T(e,t){let a=f(t.role),i=k(t.lang),r=await b(e),o=(0,s.uG)(await (0,d.Bb)(e,a,i),a);if(null!=t.name&&""!==String(t.name).trim()){let n=v(t.name),s=await (0,d.N6)(e,{lang:i,role:a,name:n});if(!s)throw Error(`Role template not found: ${a} / ${i} / ${n}.`);return{role:a,lang:i,displayName:o,name:n,content:S(s.content,r)}}let n=await (0,d.iV)(e,{role:a,lang:i});if(0===n.length)throw Error(`Role template not found: ${a} / ${i}.`);let l={};for(let e of n)l[e.name]=S(e.content,r);return{role:a,lang:i,displayName:o,prompts:l}}function A(e){if(!e||"object"!=typeof e||Array.isArray(e))throw Error("prompts must be a non-null object keyed by prompt name.");let t={};for(let[a,i]of Object.entries(e)){let e=v(a);if("string"!=typeof i||""===i.trim())throw Error(`Prompt "${e}" must be a non-empty string.`);t[e]=i}if(0===Object.keys(t).length)throw Error("At least one prompt must be provided.");return t}async function I(e,t){let a=f(t.role),i=k(t.lang),r=A(t.prompts),o=(0,s.uG)(t.displayName,a);if((await (0,d.iV)(e,{role:a,lang:i})).length>0)throw Error(`Role template already exists for ${a} / ${i}. Use update instead.`);let n=await w(e);for(let[t,s]of Object.entries(r)){let r=y(s,n);await (0,d.s1)(e,{lang:i,role:a,name:t,content:r,displayName:o})}return await (0,d.z6)(e,a,i,o),await (0,m.Yu)(e,a)||await (0,m.TK)(e,{role:a,origin:t.origin??g.KL.USER,sourceType:t.sourceType??g.Oi.CREATED}),(0,u.JX)(`[role-template] created ${a}/${i}: ${Object.keys(r).join(", ")}`),{role:a,lang:i,names:Object.keys(r).sort(),displayName:o}}async function E(e,t){let a=f(t.role),i=k(t.lang),r=A(t.prompts),o=await (0,d.iV)(e,{role:a,lang:i});if(0===o.length)throw Error(`Role template not found for ${a} / ${i}. Use create instead.`);let n=void 0!==t.displayName&&null!==t.displayName,l=n?(0,s.uG)(t.displayName,a):(0,s.uG)(await (0,d.Bb)(e,a,i),a),c=await w(e);for(let[t,o]of Object.entries(r)){let r=y(o,c);await (0,d.s1)(e,{lang:i,role:a,name:t,content:r,displayName:n?l:""})}return n&&await (0,d.z6)(e,a,i,l),(0,u.JX)(`[role-template] updated ${a}/${i}: ${Object.keys(r).join(", ")}`),{role:a,lang:i,names:Object.keys(r).sort(),displayName:l}}async function C(e){let{roleDir:t,lang:a}=e,i=e.names??x,s={};for(let e of i){let i=function(e,t,a){let i=(0,l.fP)(t),o=(0,l.fP)(l.Kc),s=l.GV.indexOf(a);if(-1===s)return(0,n.join)(e,`${a}.md`);let d=i[s],c=o[s],u=(0,n.join)(e,d);return(0,r.existsSync)(u)||c===d||(u=(0,n.join)(e,c)),u}(t,a,e);(0,r.existsSync)(i)&&(s[e]=await (0,o.readFile)(i,"utf-8"))}if(0===Object.keys(s).length)throw Error(`No template files found under ${t} for lang "${a}".`);return s}async function R(e){let t=f(e.role),a=k(e.lang),i=e.fromDir?.trim()?e.fromDir.trim():(0,c.mi)(t);return C({roleDir:i,lang:a,names:e.names})}i()}catch(e){i(e)}})},8552(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Yb:()=>x,jN:()=>k,k9:()=>S,rP:()=>O,uJ:()=>w,uX:()=>M});var r=a(3024),o=a(8161),n=a(6760),s=a(1455),l=a(1421),d=a(11),c=a(7975),u=a(9434),p=a(4071),m=e([p,u,d]);[p,u,d]=m.then?(await m)():m;let N=(0,c.promisify)(l.exec);function g(e,t={}){(0,p.JX)(`[skills-service] ${e}`,JSON.stringify(t))}function h(e){let t="string"==typeof e?e.trim().toLowerCase():"";return"global"===t||"project"===t?t:null}function f(e={}){return(0,n.resolve)("string"==typeof e.projectPath&&""!==e.projectPath.trim()?e.projectPath.trim():e.cwd||process.cwd())}function k(e){let t=e.homeDir??(0,o.homedir)(),a=f(e);return"global"===e.scope?(0,n.join)(t,".pithosai","skills"):(0,n.join)(a,".pithosai","skills")}function v(e){let t=e.homeDir??(0,o.homedir)(),a=f(e);return"global"===e.scope?(0,n.join)(t,".pithosai","skill-settings.json"):(0,n.join)(a,".pithosai","skill-settings.json")}async function b(){try{return await N("which clawhub"),!0}catch{return!1}}async function w(){if(await b())return void g("ensureClawhubAvailable",{status:"available"});g("ensureClawhubAvailable",{status:"missing",action:"install"}),console.debug("[skills-service] clawhub not found on PATH, installing via npm i -g clawhub");try{await y("npm i -g clawhub")}catch(e){console.error("[skills-service] failed to install clawhub via npm",e)}if(!await b())throw g("ensureClawhubAvailable",{status:"installFailed"}),Error("clawhubMissing");g("ensureClawhubAvailable",{status:"installed"})}async function y(e){await new Promise((t,a)=>{let i=(0,l.spawn)(e,{shell:!0,stdio:"inherit"});i.on("error",a),i.on("close",(e,i)=>{0===e?t():a(Error(`Command exited with code ${e??"null"}${i?` (signal ${i})`:""}`))})})}async function S(){g("listRemoteClawhubSkillNames",{status:"start"});let e=await N("clawhub list | awk '{print $1}'"),t=(function(e){if(null!=e&&"object"==typeof e&&"stdout"in e){let t=e.stdout;return null==t?"":String(t)}return"string"==typeof e?e:Array.isArray(e)&&null!=e[0]?String(e[0]):""})(e).split("\n").map(e=>e.trim()).filter(Boolean);return g("listRemoteClawhubSkillNames",{status:"done",count:t.length}),t}function P(){let e=process.env.CLAWHUB_REGISTRY||process.env.CLAWDHUB_REGISTRY||"";return String(e).trim()||"https://clawhub.ai"}function T(e){let t=String(e.slug??"").trim(),a=String(e.ownerHandle??"").trim();return t&&a?`@${a}/${t}`:""}function A(e){let t=e&&"object"==typeof e?e:null;if(!t)return null;let a="string"==typeof t.ownerHandle?t.ownerHandle.trim():"",i="string"==typeof t.slug?t.slug.trim():"",r="string"==typeof t.ref?t.ref.trim():T({ownerHandle:a,slug:i});if(!a||!i||!r)return null;let o="string"==typeof t.url?t.url.trim():"";return{ownerHandle:a,slug:i,ref:r,...o?{url:o}:{}}}async function I(e,t=""){let a,i=String(e??"").trim();if(!i)return{type:"notFound"};let r=String(t??"").trim();g("lookupSkillMarketSkillDetail",{slug:i,ownerHandle:r||null,status:"start"});let o=P().replace(/\/$/,""),n=new URL(`${o}/api/v1/skills/${encodeURIComponent(i)}`);r&&n.searchParams.set("owner",r);try{g("lookupSkillMarketSkillDetail",{url:n.toString(),status:"start"}),a=await fetch(n.toString(),{headers:{Accept:"application/json"}})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`skillMarketFetchFailed:${e}`)}if(404===a.status)return g("lookupSkillMarketSkillDetail",{slug:i,status:"notFound"}),{type:"notFound"};if(429===a.status)return g("lookupSkillMarketSkillDetail",{slug:i,status:"rateLimited"}),{type:"rateLimited"};if(!a.ok){let e=await a.text().catch(()=>"");if(!r){let t=function(e){let t=function(e){let t=String(e??"").trim(),a=t.startsWith("installFailed:")?t.slice(14).trim():t;if(!a.startsWith("{"))return null;try{let e=JSON.parse(a);return e&&"object"==typeof e?e:null}catch{return null}}(String(e??"").trim());if(t?.code!=="AMBIGUOUS_SKILL_SLUG"||!Array.isArray(t.matches))return null;let a=t.matches.map(A).filter(e=>null!=e);return a.length?a:null}(e);if(t)return g("lookupSkillMarketSkillDetail",{slug:i,status:"ambiguous",matchCount:t.length}),{type:"ambiguous",matches:t}}if(e.trim().startsWith("{"))throw(0,p.CN)("lookupSkillMarketSkillDetail",{slug:i,status:"failed",error:e.trim()}),Error(`skillMarketFetchFailed:${e.trim()}`);throw(0,p.CN)("lookupSkillMarketSkillDetail",{slug:i,status:"failed",error:`skillMarketFetchFailed:HTTP ${a.status}`}),Error(`skillMarketFetchFailed:HTTP ${a.status}`)}return g("lookupSkillMarketSkillDetail",{slug:i,status:"done"}),{type:"found",payload:await a.json()}}async function E(e,t=""){let a=await I(e,t);if("found"===a.type)return a.payload;if("notFound"===a.type||"rateLimited"===a.type)return null;throw Error(`skillMarketFetchFailed:${JSON.stringify({code:"AMBIGUOUS_SKILL_SLUG",slug:String(e??"").trim(),matches:a.matches})}`)}async function C(e){let t=v(e);if(!(0,r.existsSync)(t))return new Set;try{let a=await (0,s.readFile)(t,"utf-8"),i=JSON.parse(a),r=i?.disabledSkills?.[e.scope];if(!Array.isArray(r))return new Set;return new Set(r.map(e=>String(e??"").trim().toLowerCase()).filter(Boolean))}catch{return new Set}}async function R(e){let t=v(e);await (0,s.mkdir)((0,n.dirname)(t),{recursive:!0});let a={};if((0,r.existsSync)(t))try{a=JSON.parse(await (0,s.readFile)(t,"utf-8"))}catch{a={}}let i={...a.disabledSkills&&"object"==typeof a.disabledSkills?a.disabledSkills:{},[e.scope]:e.disabledNames};await (0,s.writeFile)(t,`${JSON.stringify({...a,disabledSkills:i},null,2)}
|
|
543
|
+
`,"utf-8")}async function x(e={}){g("listDiscoveredSkillEntries",{status:"start",cwd:e.cwd??process.cwd()});let t=(0,n.resolve)(e.cwd||process.cwd()),a=e.homeDir??(0,o.homedir)(),i=(0,u.fo)({cwd:t,homeDir:a}),r=new Map;for(let e of i)for(let t of(await (0,s.readdir)(e)).filter(e=>(function(e){let t=String(e??"");return!(!t||"."===t||".."===t||t.startsWith("."))})(e))){let a=(0,n.basename)(t,".md"),i=String(a).toLowerCase();!i||r.has(i)||r.set(i,{skillBaseName:a,dir:e})}return g("listDiscoveredSkillEntries",{status:"done",directoryCount:i.length,entryCount:r.size}),{directories:i,entries:[...r.values()]}}async function L(e){let t=String(e.targetDir??"").trim(),a=String(e.ownerHandle??"").trim();if(!t||!a)return;let i=(0,n.join)(t,"_meta.json");if((0,r.existsSync)(i))try{let e=JSON.parse(await (0,s.readFile)(i,"utf-8"));await (0,s.writeFile)(i,`${JSON.stringify({...e,username:a,ownerHandle:a},null,2)}
|
|
544
|
+
`,"utf-8"),g("persistInstalledSkillOwnerMetadata",{targetDir:t,ownerHandle:a,status:"done"})}catch(e){console.error(`[skills-service] failed to persist owner metadata for installed skill: ${t}`,e)}}async function j(e){let t=String(e.slug??"").trim(),a=String(e.ownerHandle??"").trim(),i=String(e.skillsDir??"").trim();if(!t||!a||!i)throw Error("skillSlugRequired");let l=(0,n.join)(i,t);if((0,r.existsSync)(l)&&!0!==e.force)throw Error(`installFailed:Already installed: ${l} (use --force)`);!0===e.force&&(0,r.existsSync)(l)&&await (0,s.rm)(l,{recursive:!0,force:!0});let c=await E(t,a);if(!c)throw Error("installFailed:Skill not found");let u=c.latestVersion&&"object"==typeof c.latestVersion?c.latestVersion:null,p="string"==typeof u?.version?u.version.trim():"";if(!p)throw Error("installFailed:Could not resolve latest version");let m=P().replace(/\/$/,""),g=new URL(`${m}/api/v1/download`);g.searchParams.set("slug",t),g.searchParams.set("owner",a),g.searchParams.set("version",p);let h=await fetch(g.toString());if(!h.ok){let e=await h.text().catch(()=>"");throw Error(`installFailed:${e||`HTTP ${h.status}`}`)}let f=Buffer.from(await h.arrayBuffer()),k=await (0,s.mkdtemp)((0,n.join)((0,o.tmpdir)(),"pithos-skill-install-")),v=(0,n.join)(k,`${t}.zip`);try{await (0,s.writeFile)(v,f),await (0,s.mkdir)(l,{recursive:!0}),new d.default(v).extractAllTo(l,!0),await L({targetDir:l,ownerHandle:a})}finally{await (0,s.rm)(k,{recursive:!0,force:!0})}}async function O(e){let t=function(e){let t=String(e.ref??e.installRef??"").trim();if(t)return t;let a=T({ownerHandle:e.ownerHandle,slug:e.slug});return a||String(e.slug??"").trim()}({slug:e.slug,ref:e.ref,installRef:e.installRef,ownerHandle:e.ownerHandle}),{slug:a,ownerHandle:i}=function(e){let t=String(e??"").trim();if(!t)return{ownerHandle:"",slug:""};let a=t.startsWith("@")?t.slice(1):t,i=a.indexOf("/");return -1===i?{ownerHandle:"",slug:a}:{ownerHandle:a.slice(0,i).trim(),slug:a.slice(i+1).trim()}}(t);if(!a)throw Error("skillSlugRequired");let r=h(e.scope);if(!r)throw Error("skillScopeInvalid");let n=e.homeDir??(0,o.homedir)(),l=f(e),d=k({scope:r,cwd:l,homeDir:n});await (0,s.mkdir)(d,{recursive:!0}),g("installSkill",{status:"start",ref:t,slug:a,ownerHandle:i||null,scope:r,skillsDir:d,force:!0===e.force});try{if(i)await j({slug:a,ownerHandle:i,skillsDir:d,force:!0===e.force});else{await w();let t=`'${String(a).replace(/'/g,"'\\''")}'`,i=`clawhub install ${t} --dir "${d}"`;!0===e.force&&(i=`${i} --force`),await y(i)}}catch(o){let e=o instanceof Error?o.message:String(o);throw g("installSkill",{status:"failed",ref:t,slug:a,ownerHandle:i||null,scope:r,error:e}),Error(e.startsWith("installFailed:")?e:`installFailed:${e}`)}g("installSkill",{status:"done",ref:t,slug:a,ownerHandle:i||null,scope:r,skillsDir:d})}async function M(e){let t=String(e.skillName??"").trim();if(!t)throw Error("skillNameRequired");let a=h(e.scope);if(!a)throw Error("skillScopeInvalid");let i=e.homeDir??(0,o.homedir)(),l=f(e),d=k({scope:a,cwd:l,homeDir:i});if(!(0,r.existsSync)(d))throw Error("skillsDirMissing");let c=(0,n.join)(d,t,"SKILL.md");if(!(0,r.existsSync)(c))throw Error("skillNotInstalled");g("removeSkill",{status:"start",skillName:t,scope:a,skillsDir:d});let u=(0,n.join)(d,t,"_meta.json");await (0,s.unlink)(c),(0,r.existsSync)(u)&&await (0,s.unlink)(u),await (0,s.rm)((0,n.join)(d,t),{recursive:!0,force:!0});let p=await C({scope:a,cwd:l,homeDir:i});p.has(t.toLowerCase())&&(p.delete(t.toLowerCase()),await R({scope:a,disabledNames:[...p],cwd:l,homeDir:i})),g("removeSkill",{status:"done",skillName:t,scope:a,skillsDir:d})}i()}catch(e){i(e)}})},4768(e,t,a){a.a(e,async function(e,i){try{a.d(t,{L:()=>p,s:()=>u});var r=a(6760);a(8161);var o=a(1455),n=a(8359),s=a(4071),l=e([n,s]);[n,s]=l.then?(await l)():l;let m=".settings.json";function d(e,t){let a=null!=t&&"object"==typeof t?t:{},i=a.project?.type??a.type??"js",o={name:a.project?.name??((0,r.basename)(e)||"project"),cwd:a.project?.cwd??e,type:"ts"===i||"python"===i||"rust"===i||"java"===i?i:"js"},n=Array.isArray(a.supportedRoles)?a.supportedRoles:[],s=a.hooks&&"object"==typeof a.hooks?a.hooks:{};return{...null!=a.lang&&{lang:String(a.lang)},project:o,supportedRoles:n,roles:null,tools:null,hooks:s}}async function c(e){let t=await (0,n.Lf)();return e.roles=await (0,n.uh)(t),e}async function u(e){let t=(0,r.join)(e,m);try{let a=await (0,o.readFile)(t,"utf-8"),i=JSON.parse(a),r=d(e,i);return await c(r)}catch(a){return null!=a&&"object"==typeof a&&"code"in a&&"ENOENT"===a.code?(0,s.JX)("readSettings: settings file missing, using defaults:",t):(0,s.vV)("readSettings, cwd:",e,"error:",a.message,a.stack),c(d(e,{}))}}async function p(e,t){let a=(0,r.join)(e,m),i=await u(e),n=t.project?.type??t.type??i.project.type,s={...{...null!=t.lang?{lang:t.lang}:null!=i.lang?{lang:i.lang}:{},project:{name:t.project?.name??i.project.name,cwd:t.project?.cwd??i.project.cwd,type:"ts"===n||"python"===n||"rust"===n||"java"===n?n:"js"},supportedRoles:Array.isArray(t.supportedRoles)?t.supportedRoles:i.supportedRoles,roles:t.roles&&"object"==typeof t.roles?t.roles:i.roles??{},tools:t.tools&&"object"==typeof t.tools?{web:{fetch:t.tools.web?.fetch!=null?{enabled:!!t.tools.web.fetch.enabled}:i.tools.web.fetch,search:t.tools.web?.search!=null?{enabled:!!t.tools.web.search.enabled}:i.tools.web.search}}:i.tools,hooks:t.hooks&&"object"==typeof t.hooks?t.hooks:i.hooks??{}}};void 0===s.lang&&delete s.lang,await (0,o.writeFile)(a,JSON.stringify(s,null,2),"utf-8")}i()}catch(e){i(e)}})},5771(e,t,a){a.a(e,async function(e,i){try{a.d(t,{IH:()=>R,Qk:()=>E,Rz:()=>u,VT:()=>A,dF:()=>I,tT:()=>T});var r=a(6760),o=a(1455),n=a(3024),s=a(4071),l=a(3529),d=a(3447),c=e([s,l]);[s,l]=c.then?(await c)():c;let C=null;try{let e=await a.e("336").then(a.bind(a,5627));C=e.default??e}catch{C=null}async function u(e){if((0,r.basename)(e)===d.l4)throw Error(`Invalid database path: ${e} is the device metadata file (${d.l4}), not a database file. Fix the DB path env var.`);if(!(0,n.existsSync)(e))return;let t=await (0,o.stat)(e);if(t.isDirectory())throw Error(`Invalid database path: ${e} is a directory, not a file. Fix the DB path env var.`);0===t.size&&await (0,o.unlink)(e)}function p(e,t,a=[]){return(0,s.JX)(`[storage][sqlcipher] get sql=${f(t)} paramTypes=${a.map(e=>null===e?"null":void 0===e?"undefined":"bigint"==typeof e?"bigint":e instanceof Uint8Array?"Uint8Array":e instanceof ArrayBuffer?"ArrayBuffer":typeof e).join(",")}`),new Promise((i,r)=>{e.get(t,a,(e,t)=>{e?r(e):i(t)})})}function m(e,t){return(0,s.JX)(`[storage][sqlcipher] exec sql=${f(t)}`),new Promise((a,i)=>{e.exec(t,e=>{e?i(e):a()})})}function g(e){return(0,s.JX)("[storage][sqlcipher] close db"),new Promise((t,a)=>{e.close(e=>{e?a(e):t()})})}function h(e){return String(e).replace(/'/g,"''")}function f(e){let t=String(e??"").replace(/\s+/g," ").trim();return t=(t=t.replace(/(PRAGMA\s+key\s*=\s*)'[^']*'/gi,"$1'<redacted>'")).replace(/(\bKEY\s*)'[^']*'/gi,"$1'<redacted>'")}function k(e){let{sqlite3:t,path:a}=e;return new Promise((e,i)=>{let r=new t.Database(a,t.OPEN_READWRITE|t.OPEN_CREATE,t=>{t?i(t):e(r)})})}async function v(e){await p(e,"SELECT count(*) AS total FROM sqlite_master")}async function b(e,t,a){let i=await k({sqlite3:e,path:t});try{var r;return(0,s.JX)(`[storage] openSqlcipherAdapterWithKey key=${a}, path=${t}`),await m(i,`PRAGMA key = '${h(a)}'`),await m(i,"PRAGMA cipher_compatibility = 4"),await v(i),await m(i,"PRAGMA journal_mode = WAL"),await m(i,"PRAGMA foreign_keys = ON"),r=i,{run:(e,t=[])=>(function(e,t,a=[]){return(0,s.JX)(`[storage][sqlcipher] run sql=${f(t)} paramTypes=${a.map(e=>null===e?"null":void 0===e?"undefined":"bigint"==typeof e?"bigint":e instanceof Uint8Array?"Uint8Array":e instanceof ArrayBuffer?"ArrayBuffer":typeof e).join(",")}`),new Promise((i,r)=>{e.run(t,a,function(e){e?r(e):i({id:Number(this.lastID??0),changes:Number(this.changes??0)})})})})(r,e,t),get:(e,t=[])=>p(r,e,t),all:(e,t=[])=>(function(e,t,a=[]){return(0,s.JX)(`[storage][sqlcipher] all sql=${f(t)} paramTypes=${a.map(e=>null===e?"null":void 0===e?"undefined":"bigint"==typeof e?"bigint":e instanceof Uint8Array?"Uint8Array":e instanceof ArrayBuffer?"ArrayBuffer":typeof e).join(",")}`),new Promise((i,r)=>{e.all(t,a,(e,t)=>{e?r(e):i(t??[])})})})(r,e,t),exec:e=>m(r,e),close:()=>g(r)}}catch(e){throw await g(i),(0,s.CN)(`[storage] openSqlcipherAdapterWithKey key=${a}, path=${t} error: ${e.message}`,e.stack),e}}async function w(e){try{await v(e);return}catch{}await m(e,"PRAGMA key = ''"),await v(e)}async function y(e){if(function(e){try{let t=new l.default(e,{fileMustExist:!0});try{t.pragma("query_only = ON"),t.prepare("SELECT count(*) AS c FROM sqlite_master").get()}finally{t.close()}return!0}catch{return!1}}(e.path))return!0;let t=await k(e);try{return await w(t),await g(t),!0}catch{return await g(t),!1}}class R extends Error{constructor(){super("The SQLCipher native module (@journeyapps/sqlcipher) is not available. Install or rebuild it for your platform to migrate or open encrypted databases."),this.name="SqlcipherUnavailableError"}}async function S(e){let{sqlite3:t,path:a,cipherKey:i}=e,r=`${a}.enc-migrating`,s=`${a}.plain-backup`;(0,n.existsSync)(r)&&await (0,o.unlink)(r),(0,n.existsSync)(s)&&await (0,o.unlink)(s);let l=await k({sqlite3:t,path:a});try{await w(l),await m(l,`ATTACH DATABASE '${h(r)}' AS encrypted KEY '${h(i)}'`),await m(l,"SELECT sqlcipher_export('encrypted')"),await m(l,"DETACH DATABASE encrypted")}finally{await g(l)}await (0,o.rename)(a,s);try{await (0,o.rename)(r,a),await (0,o.unlink)(s)}catch(e){throw(0,n.existsSync)(a)&&await (0,o.unlink)(a),await (0,o.rename)(s,a),(0,n.existsSync)(r)&&await (0,o.unlink)(r),e}}async function P(e){let t,{sqlite3:a,path:i,cipherKey:r}=e;try{return await b(a,i,r)}catch(e){t=e}if(!await y({sqlite3:a,path:i}))throw Error(function(e,t){let a=t&&"object"==typeof t&&"code"in t?String(t.code):"",i=t instanceof Error?t.message:String(t),r="";try{if((0,n.existsSync)(e)){let t=(0,n.statSync)(e);r=`File exists; ${t.isFile()?"regular file":"not a regular file"}; size ${t.size} bytes.`}else r="File does not exist (unexpected after path resolution)."}catch{r=""}let o=[r,`path: ${e}`,`Check PITHOSAI_DB_PATH points to the real SQLite file (not a directory or ${d.l4}).`,`If ~/.pithosai/${d.l4} was replaced, the device-derived key changed — restore that file from backup (see docs/device-id.md).`,"If the file is corrupt or not SQLite at all, move it aside and let the app create a new DB, or restore from backup."];return`Cannot open storage database (${a||"error"}): ${i}
|
|
545
545
|
${o.join("\n")}`}(i,t),{cause:t});return await S({sqlite3:a,path:i,cipherKey:r}),b(a,i,r)}async function T(e){let{path:t}=e;if(!(0,n.existsSync)(t))return{action:"skipped",reason:"file_missing"};if(!C)throw new R;let a=C.verbose(),i=e.cipherKey??await (0,d.Ib)(t),r=e.cipherKey??i,o=await k({sqlite3:a,path:t});try{return await m(o,`PRAGMA key = '${h(r)}'`),await m(o,"PRAGMA cipher_compatibility = 4"),await v(o),await g(o),{action:"skipped",reason:"already_encrypted_with_key"}}catch{await g(o)}return await y({sqlite3:a,path:t})?(await S({sqlite3:a,path:t,cipherKey:i}),{action:"migrated"}):{action:"skipped",reason:"not_plaintext_or_unreadable"}}function A(){return null!=C}function I(e){var t;let a;try{a=new l.default(e)}catch(a){let t=a&&"object"==typeof a&&"code"in a?String(a.code):"";if("SQLITE_NOTADB"===t||a instanceof Error&&/not a database/i.test(a.message))throw Error(`Cannot open ${e} as plain SQLite (${t||"SQLITE_NOTADB"}). The file may be SQLCipher-encrypted or not a database: install @journeyapps/sqlcipher, or fix PITHOSAI_DB_PATH / replace the file with a valid plain SQLite database.`,{cause:a});throw a}return a.pragma("journal_mode = WAL"),a.pragma("foreign_keys = ON"),t=a,{run:async(e,a=[])=>{let i=t.prepare(e).run(...a);return{id:Number(i.lastInsertRowid??0),changes:Number(i.changes??0)}},get:async(e,a=[])=>t.prepare(e).get(...a),all:async(e,a=[])=>t.prepare(e).all(...a),exec:async e=>{t.exec(e)},close:async()=>{t.close()}}}async function E(e){if(!C)throw new R;let t=C.verbose(),a=await (0,d.Ib)(e);return P({sqlite3:t,path:e,cipherKey:a})}i()}catch(e){i(e)}},1)},3447(e,t,a){a.d(t,{Ib:()=>T,l4:()=>p});var i=a(6760),r=a(1455),o=a(3024),n=a(1421),s=a(7975),l=a(7598),d=a(8161);let c=(0,s.promisify)(n.execFile),u=(0,s.promisify)(l.pbkdf2),p=".device_key";function m(e){return(0,i.join)(e,p)}async function g(e){let t=m(e);if(!(0,o.existsSync)(t))return{};try{let e=await (0,r.readFile)(t,"utf8"),a=JSON.parse(e);return a&&"object"==typeof a?a:{}}catch{return{}}}async function h(e,t){await (0,r.mkdir)(e,{recursive:!0});let a={...await g(e),...t};await (0,r.writeFile)(m(e),JSON.stringify(a,null,2),{encoding:"utf8",mode:384})}async function f(e){let t=(await g(e)).persistentId;if("string"==typeof t&&t.length>0)return t;let a=(0,l.randomBytes)(16).toString("hex");return await h(e,{persistentId:a}),a}async function k(e){let t=d.platform();try{if("linux"===t&&(0,o.existsSync)("/etc/machine-id")){let e=(await (0,r.readFile)("/etc/machine-id","utf8")).trim();if(e)return e}if("darwin"===t)try{let{stdout:e}=await c("ioreg",["-rd1","-c","IOPlatformExpertDevice"],{encoding:"utf8",maxBuffer:262144}),t=e.match(/"IOPlatformUUID"\s*=\s*"([^"]+)"/);if(t?.[1])return t[1]}catch{}}catch{}return f(e)}async function v(e){let t=(await g(e)).machineIdSnapshot;if("string"==typeof t&&t.length>0)return t;let a=await k(e);return await h(e,{machineIdSnapshot:a}),a}async function b(e){let t=await v(e),a={};return a.hostname=d.hostname(),a.platform=d.platform(),a.arch=d.arch(),a.cpus=d.cpus().length,a.totalMemory=d.totalmem(),a.macAddress=function(){try{let e=d.networkInterfaces(),t=[];for(let a of Object.keys(e)){let i=e[a];if(i)for(let e of i)!e.internal&&e.mac&&"00:00:00:00:00:00"!==e.mac&&t.push(e.mac)}let a=[...new Set(t)].sort((e,t)=>e.toLowerCase().localeCompare(t.toLowerCase(),"en"));if(0===a.length)return"unknown-mac";return a[0]}catch{}return"unknown-mac"}(),a.machineId=t,a}async function w(e){let t=(await g(e)).salt;if("string"==typeof t&&t.length>0)return t;let a=(0,l.randomBytes)(16).toString("hex");return await h(e,{salt:a}),a}async function y(e){await (0,r.mkdir)(e,{recursive:!0});let t=function(e){let t={};for(let a of S)t[a]=e[a];return JSON.stringify(t)}(await b(e)),a=await w(e);return(await u(t,a,1e5,32,"sha256")).toString("hex")}let S=["platform","arch","machineId"],P=new Map;async function T(e){let t=(0,i.dirname)(e),a=P.get(t);if(a)return a;let r=await y(t);return P.set(t,r),r}},2369(e,t,a){a.a(e,async function(e,i){try{a.d(t,{IH:()=>r.IH,Lf:()=>n.Lf,sA:()=>o.s,tT:()=>r.tT});var r=a(5771),o=a(982),n=a(9789);a(395);var s=e([r,o,n]);[r,o,n]=s.then?(await s)():s,i()}catch(e){i(e)}})},6553(e,t,a){a.a(e,async function(e,t){try{var i=a(5771);a(5722),a(9760),a(6715),a(180),a(8782);var r=e([i]);i=(r.then?(await r)():r)[0],t()}catch(e){t(e)}})},9760(){},180(e,t,a){a(7598);let i=Object.freeze({FREE:"FREE",L1:"L1",L2:"L2",L3:"L3",L4:"L4",L5:"L5",L6:"L6",L7:"L7",L8:"L8",L9:"L9"});Object.freeze({name:"Admin",role:"Administrator",email:"admin@pithosai.local",status:"active",accountLevel:"FREE"}),Object.values(i),Object.freeze(["active","suspended","inactive"])},8782(e,t,a){a(7598)},6715(){},5722(e,t,a){a(8161),a(6760)},8359(e,t,a){a.a(e,async function(e,i){try{a.d(t,{$R:()=>l.$R,A2:()=>s.A2,BU:()=>d.BU,Bb:()=>s.Bb,D2:()=>d.D2,Fh:()=>n.Fh,Iz:()=>s.Iz,J7:()=>n.J7,Jo:()=>n.Jo,LW:()=>l.LW,Lf:()=>r.Lf,N6:()=>s.N6,O3:()=>o.O3,PT:()=>n.PT,SC:()=>s.SC,SW:()=>n.SW,Tn:()=>s.Tn,V0:()=>d.V0,Vk:()=>l.Vk,Vr:()=>o.Vr,XQ:()=>l.XQ,XV:()=>l.XV,YC:()=>n.YC,_D:()=>n._D,au:()=>n.au,ax:()=>s.ax,bY:()=>n.bY,eC:()=>l.eC,em:()=>d.em,gg:()=>l.gg,iV:()=>s.iV,jx:()=>d.jx,kF:()=>l.kF,p:()=>l.p,p9:()=>l.p9,s1:()=>s.s1,tJ:()=>n.tJ,uh:()=>n.uh,x_:()=>n.x_,yD:()=>d.yD,yh:()=>n.yh,z6:()=>s.z6});var r=a(2369);a(3447),a(7034);var o=a(5429),n=a(8672),s=a(1341);a(9923);var l=a(4151),d=a(1978),c=a(6553),u=e([r,c]);[r,c]=u.then?(await u)():u,i()}catch(e){i(e)}})},9789(e,t,a){a.a(e,async function(e,i){try{a.d(t,{Lf:()=>u});var r=a(5012),o=a(5771),n=a(982),s=a(395),l=e([n,o]);[n,o]=l.then?(await l)():l;let p=null,m=null;async function d(e=r.qu){if(p)return p;let t=await (0,n.D)(e);return p=(0,o.VT)()?await (0,o.Qk)(t):(0,o.dF)(t)}async function c(e=r.qu){let t=await d(e);return m||(m=(0,s.X)(t).catch(e=>{throw m=null,e})),await m,t}async function u(e=r.qu){return c(e)}i()}catch(e){i(e)}})},395(e,t,a){a.d(t,{X:()=>u});var i=a(7034);async function r(e){let t=await e.all("PRAGMA table_info(pithosai_task)");if(0===t.length)return;let a=new Set(t.map(e=>e.name));for(let{column:t,definition:i}of[{column:"projectPath",definition:"TEXT NOT NULL DEFAULT ''"},{column:"summary",definition:"TEXT NOT NULL DEFAULT ''"},{column:"summarized_message_id",definition:"INTEGER"},{column:"summarized_at",definition:"TEXT"}])a.has(t)||await e.exec(`ALTER TABLE pithosai_task ADD COLUMN ${t} ${i}`)}async function o(e){let t=await e.all("PRAGMA table_info(pithosai_task_message)");if(0===t.length)return;let a=new Set(t.map(e=>e.name));for(let[t,i]of[["role","'PM'"],["lang","'en'"],["mode","'agent'"],["model","'deepSeekChat'"]])a.has(t)||await e.exec(`ALTER TABLE pithosai_task_message ADD COLUMN ${t} TEXT NOT NULL DEFAULT ${i}`)}async function n(e){let t=await e.all("PRAGMA table_info(pithosai_role_prompts)");if(0===t.length)return;let i=new Set(t.map(e=>e.name));i.has("display_name")||await e.exec("ALTER TABLE pithosai_role_prompts ADD COLUMN display_name TEXT NOT NULL DEFAULT ''"),i.has("source_url")||await e.exec("ALTER TABLE pithosai_role_prompts ADD COLUMN source_url TEXT NOT NULL DEFAULT ''");let{backfillRolePromptDisplayNames:r}=await Promise.resolve().then(a.bind(a,1341));await r(e)}async function s(e){let t=await e.all("PRAGMA table_info(email_roles)");0===t.length||new Set(t.map(e=>e.name)).has("npc_id")||(await e.exec(`
|
|
546
546
|
CREATE TABLE email_roles_new (
|
|
547
547
|
email TEXT NOT NULL,
|
|
@@ -846,4 +846,5 @@ ${o.w4.muted(e)}
|
|
|
846
846
|
${g}
|
|
847
847
|
`},tablerow:({text:e})=>e,tablecell({tokens:e}){return this.parser.parseInline(e)},br:()=>"\n",text(e){return e.tokens&&e.tokens.length>0?this.parser.parseInline(e.tokens):e.text??""},html:()=>"",checkbox:({checked:e})=>o.w4[e?"success":"muted"](e?"[x]":"[ ]")+" "}}),r.marked.setOptions({gfm:!0,breaks:!0}),m=!0);let t=c(e);try{let e=r.marked.parse(t,{async:!1});return"string"==typeof e?e:String(e)}catch{return e}}i()}catch(e){i(e)}})},9005(e,t,a){a.d(t,{A:()=>i});let i={accent:"#FF5A2D",accentBright:"#FF7A3D",accentDim:"#D14A22",info:"#FF8A5B",success:"#2FBF71",warn:"#FFB020",error:"#E23D2D",muted:"#8B7F77"}},6022(e,t,a){a.d(t,{b:()=>o});var i=a(5935);function r(e,t){return t<=0?"":e.repeat(t)}function o(e){let t=e.rows.map(e=>{let t={};for(let[a,i]of Object.entries(e))t[a]=null==i?"":String(i);return t}),a=e.border??"unicode";if("none"===a){let a=e.columns,i=[a.map(e=>e.header).join(" | "),...t.map(e=>a.map(t=>e[t.key]??"").join(" | "))];return`${i.join("\n")}
|
|
848
848
|
`}let o=Math.max(0,e.padding??1),n=e.columns,s=n.map(e=>({headerW:(0,i.$0)(e.header),cellW:Math.max(0,...t.map(t=>(0,i.$0)(t[e.key]??"")))})),l=n.map((e,t)=>{let a=s[t],i=Math.max(a?.headerW??0,a?.cellW??0)+2*o,r=e.maxWidth?Math.min(i,e.maxWidth):i;return Math.max(e.minWidth??3,r)}),d=function(e){if(null!=e&&Number.isFinite(e)&&!(e<=0))return Math.floor(e)}(e.width),c=n.length+1,u=l.reduce((e,t)=>e+t,0)+c,p=e=>Math.max((s[e]?.headerW??0)+2*o,(s[e]?.cellW??0)+2*o,3),m=n.map((e,t)=>Math.max(e.minWidth??3,p(t))),g=n.map((e,t)=>p(t));if(d&&u>d){let e=u-d,t=n.map((e,t)=>({i:t,w:l[t]??0})).filter(({i:e})=>!!n[e]?.flex).sort((e,t)=>t.w-e.w).map(e=>e.i),a=n.map((e,t)=>({i:t,w:l[t]??0})).filter(({i:e})=>!n[e]?.flex).sort((e,t)=>t.w-e.w).map(e=>e.i),i=(t,a)=>{for(;e>0;){let i=!1;for(let r of t)if(!((l[r]??0)<=(a[r]??0))&&(l[r]=(l[r]??0)-1,i=!0,(e-=1)<=0))break;if(!i)break}};if(i(t,m),i(t,g),i(a,m),i(a,g),e>0){let e=n.map((e,t)=>Math.max(3,e.minWidth??0));i(t,e),i(a,e)}}if(d){let e=n.length+1,t=d-(l.reduce((e,t)=>e+t,0)+e);if(t>0){let e=n.map((e,t)=>({c:e,i:t})).filter(({c:e})=>!!e.flex).map(({i:e})=>e);if(e.length>0){let a=n.map(e=>"number"==typeof e.maxWidth&&e.maxWidth>0?Math.floor(e.maxWidth):1/0);for(;t>0;){let i=!1;for(let r of e)if(!((l[r]??0)>=(a[r]??1/0))&&(l[r]=(l[r]??0)+1,i=!0,(t-=1)<=0))break;if(!i)break}}}}let h="ascii"===a?{tl:"+",tr:"+",bl:"+",br:"+",h:"-",v:"|",t:"+",ml:"+",m:"+",mr:"+",b:"+"}:{tl:"┌",tr:"┐",bl:"└",br:"┘",h:"─",v:"│",t:"┬",ml:"├",m:"┼",mr:"┤",b:"┴"},f=(e,t,a)=>`${e}${l.map(e=>r(h.h,e)).join(t)}${a}`,k=e=>Math.max(1,l[e]-2*o),v=r(" ",o),b=(e,t=!1)=>{let a=n.map(a=>t?a.header:e[a.key]??"").map((e,t)=>(function(e,t){if(t<=0)return[e];let a=[];for(let t=0;t<e.length;){if("\x1b"===e[t]){if("["===e[t+1]){let i=t+2;for(;i<e.length;){let t=e[i];if("m"===t)break;if(t&&t>="0"&&t<="9"||";"===t){i+=1;continue}break}if("m"===e[i]){a.push({kind:"ansi",value:e.slice(t,i+1)}),t=i+1;continue}}if("]"===e[t+1]&&"8;;"===e.slice(t+2,t+5)){let i=e.indexOf("\x1b\\",t+5);if(i>=0){a.push({kind:"ansi",value:e.slice(t,i+2)}),t=i+2;continue}}}let r=e.codePointAt(t)??0,o=String.fromCodePoint(r);a.push({kind:"char",value:o,w:(0,i.dE)(r)}),t+=r>65535?2:1}let r=a.findIndex(e=>"char"===e.kind);if(r<0)return[e];let o=-1;for(let e=a.length-1;e>=0;e-=1)if(a[e]?.kind==="char"){o=e;break}let n=a.slice(0,r).filter(e=>"ansi"===e.kind).map(e=>e.value).join(""),s=a.slice(o+1).filter(e=>"ansi"===e.kind).map(e=>e.value).join(""),l=a.slice(r,o+1),d=[],c=e=>" "===e||" "===e||"/"===e||"-"===e||"_"===e||"."===e,u=e=>" "===e||" "===e,p=[],m=0,g=null,h=e=>(e??p).map(e=>e.value).join(""),f=e=>{let t=e.replace(/\s+$/,"");0!==t.trim().length&&d.push(t)},k=e=>{if(0===p.length)return;if(null==e||e<=0){f(h()),p.length=0,m=0,g=null;return}let t=p.slice(0,e),a=p.slice(e);for(f(h(t));a.length>0&&a[0]?.kind==="char"&&u(a[0].value);)a.shift();p.length=0,p.push(...a),m=a.filter(e=>"char"===e.kind).reduce((e,t)=>e+(t.w??1),0),g=null};for(let e of l){if("ansi"===e.kind){p.push(e);continue}let a=e.value,i=e.w??1;if("\n"===a||"\r"===a){k(p.length);continue}m+i>t&&m>0&&k(g),p.push(e),m+=i,c(a)&&(g=p.length)}return(k(p.length),d.length)?n||s?d.map(e=>e?`${n}${e}${s}`:e):d:[""]})(e,k(t))),o=Math.max(...a.map(e=>e.length)),s=[];for(let e=0;e<o;e+=1){let t=a.map((t,a)=>{let o=function(e,t,a){let o=(0,i.$0)(e);if(o>=t)return e;let n=t-o;if("right"===a)return`${r(" ",n)}${e}`;if("center"===a){let t=Math.floor(n/2),a=n-t;return`${r(" ",t)}${e}${r(" ",a)}`}return`${e}${r(" ",n)}`}(t[e]??"",k(a),n[a]?.align??"left");return`${v}${o}${v}`});s.push(`${h.v}${t.join(h.v)}${h.v}`)}return s},w=[];for(let e of(w.push(f(h.tl,h.t,h.tr)),w.push(...b({},!0)),w.push(f(h.ml,h.m,h.mr)),t))w.push(...b(e,!1));return w.push(f(h.bl,h.b,h.br)),`${w.join("\n")}
|
|
849
|
-
`}},1483(e,t,a){a.a(e,async function(e,i){try{let s,l,d,c,u,p,m,g,h,f;a.d(t,{D8:()=>w,w4:()=>b});var r=a(8691),o=a(9005),n=e([r]);r=(n.then?(await n)():n)[0];let k="string"==typeof process.env.FORCE_COLOR&&process.env.FORCE_COLOR.trim().length>0&&"0"!==process.env.FORCE_COLOR.trim(),v=process.env.NO_COLOR&&!k?new r.g({level:0}):r.m,b={accent:(s=o.A.accent,v.hex(s)),accentBright:(l=o.A.accentBright,v.hex(l)),accentDim:(d=o.A.accentDim,v.hex(d)),info:(c=o.A.info,v.hex(c)),success:(u=o.A.success,v.hex(u)),warn:(p=o.A.warn,v.hex(p)),error:(m=o.A.error,v.hex(m)),muted:(g=o.A.muted,v.hex(g)),heading:v.bold.hex(o.A.accent),strong:v.bold.hex(o.A.accentBright),command:(h=o.A.accentBright,v.hex(h)),option:(f=o.A.warn,v.hex(f))},w=()=>v.level>0;i()}catch(e){i(e)}})},4138(e,t,a){a.d(t,{II:()=>o});var i=a(5935);function r(e,t){if(t<=0)return[e];let a=Array.from(e),i=[];for(let e=0;e<a.length;e+=t)i.push(a.slice(e,e+t).join(""));return i.length>0?i:[e]}function o(e,t){let a=function(e={}){return Number.isFinite(e.maxWidth)&&e.maxWidth>0?e.maxWidth:Math.max(1,Number.isFinite(e.columns)&&e.columns>0?e.columns:process.stdout.columns??80)}({columns:t});return String(e).split("\n").flatMap(e=>(function(e,t){if(0===e.trim().length)return[e];let a=e.match(/^(\s*)([-*\u2022]\s+)?(.*)$/),o=a?.[1]??"",n=a?.[2]??"",s=a?.[3]??"",l=`${o}${n}`,d=`${o}${n?" ".repeat(n.length):""}`,c=Math.max(1,t-(0,i.LQ)(l)),u=Math.max(1,t-(0,i.LQ)(d)),p=s.split(/\s+/).filter(Boolean),m=[],g="",h=l,f=c;for(let e of p){if(!g){if((0,i.LQ)(e)>f){let t=r(e,f),a=t.shift()??"";for(let e of(m.push(h+a),h=d,f=u,t))m.push(h+e);continue}g=e;continue}let t=`${g} ${e}`;if((0,i.LQ)(t)<=f){g=t;continue}if(m.push(h+g),h=d,f=u,(0,i.LQ)(e)>f){let t=r(e,f),a=t.shift()??"";for(let e of(m.push(h+a),t))m.push(h+e);g="";continue}g=e}return(g||0===p.length)&&m.push(h+g),m})(e,a))}},8691(e,t,a){a.a(e,async function(e,i){try{a.d(t,{g:()=>r.Chalk,m:()=>n});var r=a(5590),o=e([r]);r=(o.then?(await o)():o)[0];let n=function(){if("function"==typeof r.default.hex)return r.default;let e=r.default.default;return e&&"function"==typeof e.hex?e:r.default}();i()}catch(e){i(e)}})},4899(e,t,a){a.d(t,{Jx:()=>d,Pe:()=>c});var i=a(3024),r=a(8161),o=a(6760);function n(){return process.env.PITHOSAI_HISTORY_FILE?process.env.PITHOSAI_HISTORY_FILE:(0,o.join)(s,".history.json")}let s=(0,o.join)((0,r.homedir)(),".pithosai");function l(){try{let e=n();if(!(0,i.existsSync)(e))return[];let t=(0,i.readFileSync)(e,"utf8").trim();if(!t)return[];let a=JSON.parse(t);if(!Array.isArray(a))return[];return a.filter(e=>e&&"string"==typeof e.path&&"string"==typeof e.visitDate)}catch{return[]}}function d(e){var t;let a,r=l(),o=new Date().toISOString(),d=r.filter(t=>t.path!==e);t=[{path:e,visitDate:o},...d].slice(0,100),a=n(),(0,i.mkdirSync)(s,{recursive:!0}),(0,i.writeFileSync)(a,JSON.stringify(t,null,2),"utf8")}function c(){return l().map(e=>e.path)}},4071(e,t,a){a.a(e,async function(e,i){try{let b;a.d(t,{CN:()=>g,IW:()=>k,JE:()=>u,JX:()=>v,KH:()=>f,MD:()=>m,_F:()=>h,cS:()=>s,dz:()=>l,fH:()=>p,vV:()=>c});var r=a(4082),o=e([r]);function n(e){let t=function(e=process.argv[1]){return"string"!=typeof e||0===e.length?"all":e.includes("/dist/")?"INFO":"all"}();r.default.configure({appenders:{file:{type:"file",filename:e||"/tmp/pithosai_log_file.log",layout:{type:"pattern",pattern:"%d{yyyy-MM-dd hh:mm:ss.SSS} %p %f:%l %m"}}},categories:{default:{appenders:["file"],level:t,enableCallStack:!0}}}),(b=r.default.getLogger()).callStackLinesToSkip=1}function s(e){e&&"string"==typeof e&&(process.env.PITHOSAI_LOG_FILEPATH=e,n(e))}function l(){return new Promise(e=>{r.default.shutdown(e)})}function d(e){return e.map(e=>e instanceof Error?e.message||String(e):"object"==typeof e&&null!==e?JSON.stringify(e):String(e)).join(" ")}function c(...e){let t=e.length>1?d(e):e[0]??"";b.error(t)}function u(...e){let t=e.length>1?d(e):e[0]??"";b.warn(t)}function p(...e){let t=e.length>1?d(e):e[0]??"";b.info(t)}function m(...e){let t=e.length>1?d(e):e[0]??"";b.debug(t)}function g(...e){try{let t=e.length>1?d(e):e[0]??"";b.error(t)}catch{}}function h(...e){let t=e.length>1?d(e):e[0]??"";b.warn(t)}function f(...e){try{let t=e.length>1?d(e):e[0]??"";b.info(t)}catch{}}function k(...e){let t=e.length>1?d(e):e[0]??"";b.info(t)}function v(...e){try{let t=e.length>1?d(e):e[0]??"";b.debug(t)}catch{}}r=(o.then?(await o)():o)[0],n(process.env.PITHOSAI_LOG_FILEPATH),i()}catch(e){i(e)}})},8140(e,t,a){a.d(t,{X:()=>i});function i(e){return e&&e.startsWith("~")?(process.env.HOME||process.env.USERPROFILE||"")+e.slice(1):e}},4399(e,t,a){let i,r;a.d(t,{F8:()=>m,gb:()=>h,mi:()=>f});var o=a(6760),n=a(3136),s=a(3024),l=a(8995);let d=function(){if("u">typeof __dirname)return __dirname;let e=(0,o.dirname)((0,n.fileURLToPath)("file:///Users/lidh04/Projects/scripts/pithosai/src/utils/paths.js"));if((0,s.existsSync)(e))return e;let t=process.argv[1];if(t&&"-"!==t&&!t.startsWith("-"))try{return(0,o.dirname)((0,s.realpathSync)(t))}catch{}return e}(),c=(0,l.createRequire)(function(){let e=(0,n.fileURLToPath)("file:///Users/lidh04/Projects/scripts/pithosai/src/utils/paths.js");if((0,s.existsSync)(e))return"file:///Users/lidh04/Projects/scripts/pithosai/src/utils/paths.js";let t=process.argv[1];if(t&&"-"!==t&&!t.startsWith("-"))try{let e=(0,s.realpathSync)(t);if((0,s.existsSync)(e))return(0,n.pathToFileURL)(e).href}catch{}return"file:///Users/lidh04/Projects/scripts/pithosai/src/utils/paths.js"}());function u(e){let t=(0,o.join)(e,"package.json");if(!(0,s.existsSync)(t))return!1;try{let e=JSON.parse((0,s.readFileSync)(t,"utf8"));return"@pithosai/pithosai"===e.name||"pithosai"===e.name||"@pithosai/npc-platform-client"===e.name}catch{return!1}}function p(e){let t=e;for(let e=0;e<24;e++){if(u(t))return t;let e=(0,o.dirname)(t);if(e===t)break;t=e}return null}function m(){if(i)return i;let e=process.env.PITHOSAI_PACKAGE_ROOT?.trim();if(e&&(0,s.existsSync)(e))return i=e;let t=function(){for(let e of[(0,o.join)(d,"..","shims","package-root.cjs"),(0,o.join)(d,"..","..","shims","package-root.cjs")])try{let t=c(e);if("string"==typeof t&&u(t))return t}catch{}return null}();if(t)return i=t;try{let e=c.resolve("@pithosai/pithosai/package.json"),t=(0,o.dirname)(e);if(u(t))return i=t}catch{}try{let e=c.resolve("pithosai/package.json"),t=(0,o.dirname)(e);if(u(t))return i=t}catch{}let a=process.argv[1];if(a&&"-"!==a&&!a.startsWith("-"))try{let e=p((0,o.dirname)((0,s.realpathSync)(a)));if(e)return i=e}catch{}let r=p(d);if(r)return i=r;throw Error("pithosai: could not find package root. Reinstall @pithosai/pithosai.")}let g=m(),h=(r=process.env.PITHOSAI_TEMPLATES_DIR?.trim())&&(0,s.existsSync)(r)?r:(0,o.join)(g,"templates");function f(e){return(0,o.join)(h,e)}},9737(e,t,a){a.d(t,{n:()=>i});function i(e,t,a){let i,r=new Promise((e,r)=>{void 0!==(i=setTimeout(()=>r(a()),t))&&"function"==typeof i.unref&&i.unref()});return Promise.race([e.finally(()=>{void 0!==i&&clearTimeout(i)}),r])}},3188(e,t,a){a.d(t,{y:()=>i});function i(e){return new Promise(t=>setTimeout(t,e))}},5460(e,t,a){a.d(t,{cs:()=>i});function i(e){if("string"!=typeof e||""===e)return e;let t=e.replace(/\r\n/g,"\n").split("\n");for(;t.length>0&&""===t[0].trim();)t.shift();let a=[],i=!1;for(let e of t){if(""===e.trim())continue;if(3===a.length){i=!0;break}let t=e.length>400?e.slice(0,400).replace(/\s+$/,"")+"...":e;a.push(t)}let r=a.join("\n");return i&&(r+="\n..."),r}},2939(e){e.exports=JSON.parse('{"version":"v1","hooks":[{"name":"git-ai-before-tool","description":"Human checkpoint before write/edit/read so Git AI can attribute later AI changes.","enabled":true,"matcher":"^(write|edit|read)$","hookType":"beforeToolExecute","timeout":30,"command":"{pithosaiCli:pithosai-git-ai-adapter} checkpoint pre"},{"name":"git-ai-after-tool","description":"AI checkpoint after write/edit/read with transcript so Git AI can blame authorship.","enabled":true,"matcher":"^(write|edit|read)$","hookType":"afterToolExecute","timeout":30,"command":"{pithosaiCli:pithosai-git-ai-adapter} checkpoint post"}]}')},679(e){e.exports=JSON.parse('{"openrouter":{"envVar":"OPENROUTER_API_KEY","chinaMainlandSlugs":["deepseek","qwen","moonshotai","minimax","z-ai","xiaomi","baidu","bytedance-seed","stepfun","tencent","kwaipilot","inclusionai"],"defaultModelIds":{"default":"deepseek/deepseek-v4-flash","pro":"deepseek/deepseek-v4-pro","reasoner":"deepseek/deepseek-v4-pro"}},"chinaDirectProviders":[{"id":"deepseek","envVar":"DEEPSEEK_API_KEY","keyPrefix":"deepseek","openRouterProvider":"deepseek","defaultModelId":"deepseek-v4-flash"},{"id":"kimi-coding","envVar":"KIMI_API_KEY","keyPrefix":"kimi","openRouterProvider":null,"defaultModelId":"kimi-for-coding"},{"id":"moonshotai-cn","envVar":"MOONSHOT_API_KEY","keyPrefix":"moonshotai-cn","openRouterProvider":"moonshotai","defaultModelId":"kimi-k2.6"},{"id":"moonshotai","envVar":"MOONSHOT_API_KEY","keyPrefix":"moonshotai","openRouterProvider":"moonshotai","defaultModelId":"kimi-k2.6"},{"id":"zai","envVar":"ZAI_API_KEY","keyPrefix":"z-ai","openRouterProvider":"z-ai","defaultModelId":"glm-4.7"},{"id":"minimax-cn","envVar":"MINIMAX_CN_API_KEY","keyPrefix":"minimax-cn","openRouterProvider":"minimax","defaultModelId":"MiniMax-M2.7"},{"id":"minimax","envVar":"MINIMAX_API_KEY","keyPrefix":"minimax","openRouterProvider":"minimax","defaultModelId":"MiniMax-M2.7"},{"id":"xiaomi","envVar":"XIAOMI_API_KEY","keyPrefix":"xiaomi","openRouterProvider":"xiaomi","defaultModelId":"mimo-v2.5"}],"defaults":{"ollamaBaseUrl":"http://localhost:11434/v1","krouterBaseUrl":"http://localhost:20128/v1","krouterApiKey":"krouter"},"handCrafted":{"deepseek":{"shared":{"api":"openai-completions","provider":"deepseek","baseUrl":"https://api.deepseek.com","input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":100000,"maxTokens":8192},"models":[{"exportName":"deepSeekCoderModel","cliKeys":["deepseek-coder","deepseek-pro"],"idAliases":["deepseek-v4-pro","deepseek-coder"],"id":"deepseek-v4-pro","name":"DeepSeek Coder","reasoning":true},{"exportName":"deepSeekChatModel","cliKeys":["deepseek-chat","deepseek-flash"],"idAliases":["deepseek-v4-flash","deepseek-chat"],"id":"deepseek-v4-flash","name":"DeepSeek Chat","reasoning":false},{"exportName":"deepSeekReasonerModel","cliKeys":["deepseek-reasoner"],"idAliases":["deepseek-reasoner"],"id":"deepseek-v4-pro","name":"DeepSeek Reasoner","reasoning":true}]},"ollama":{"shared":{"provider":"ollama","input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0}},"models":[{"exportName":"ollamaQwen25_14bModel","cliKeys":["ollama-qwen25"],"id":"qwen2.5:14b","name":"Qwen2.5 14B (Ollama)","api":"openai-completions","reasoning":false,"contextWindow":32768,"maxTokens":4096,"supportsTools":true},{"exportName":"ollamaQwen25Coder_14bModel","cliKeys":["ollama-qwen25-coder"],"id":"qwen2.5-coder:14b","name":"Qwen2.5 Coder 14B (Ollama)","api":"openai-completions","reasoning":false,"contextWindow":32768,"maxTokens":4096,"supportsTools":true},{"exportName":"ollamaDeepSeekR1_14bModel","cliKeys":["ollama-deepseek-r1"],"id":"deepseek-r1:14b","name":"DeepSeek R1 14B (Ollama)","api":"openai-completions","reasoning":true,"contextWindow":4096,"maxTokens":4096,"supportsTools":false},{"exportName":"ollamaQwythos9BQ8Model","cliKeys":["ollama-qwythos-9b-q8"],"id":"qwythos-9b-q8","name":"Qwythos-9B-Q8 (Ollama)","api":"ollama-native","reasoning":false,"contextWindow":65536,"maxTokens":16384,"supportsTools":true}]},"cursor":{"shared":{"api":"cursor-cli","provider":"cursor","baseUrl":"","input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"maxTokens":16384},"models":[{"exportName":"cursorAutoModel","cliKeys":["cursor-auto-model"],"id":"auto","name":"Cursor Auto","reasoning":false,"contextWindow":200000},{"exportName":"cursorSonnetModel","cliKeys":["cursor-sonnet"],"id":"sonnet-4.6","name":"Cursor Sonnet 4.6","reasoning":false,"contextWindow":200000},{"exportName":"cursorSonnetThinkingModel","cliKeys":["cursor-sonnet-thinking"],"id":"sonnet-4.6-thinking","name":"Cursor Sonnet 4.6 Thinking","reasoning":true,"contextWindow":200000},{"exportName":"cursorOpusModel","cliKeys":["cursor-opus"],"id":"opus-4.6","name":"Cursor Opus 4.6","reasoning":false,"contextWindow":200000},{"exportName":"cursorGptModel","cliKeys":["cursor-gpt"],"id":"gpt-5.2","name":"Cursor GPT 5.2","reasoning":false,"contextWindow":128000}]},"krouter":{"shared":{"api":"openai-completions","provider":"krouter","input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":16384,"supportsTools":true},"combos":[{"id":"RD","name":"RD"},{"id":"ARCH","name":"ARCH"},{"id":"PM","name":"PM"},{"id":"QA","name":"QA"}]}}}')}},g={};function h(e){var t=g[e];if(void 0!==t)return t.exports;var a=g[e]={exports:{}};return m[e](a,a.exports,h),a.exports}h.m=m,i=(a="function"==typeof Symbol)?Symbol("rspack queues"):"__rspack_queues",r=h.aE=a?Symbol("rspack exports"):"__webpack_exports__",o=a?Symbol("rspack error"):"__rspack_error",n=a?Symbol("rspack done"):"__rspack_done",s=h.zS=a?Symbol("rspack defer"):"__rspack_defer",l=e=>{e&&e.d<1&&(e.d=1,e.forEach(e=>e.r--),e.forEach(e=>e.r--?e.r++:e()))},h.a=(e,t,a)=>{a&&((d=[]).d=-1);var d,c,u,p,m=new Set,f=e.exports,k=new Promise((e,t)=>{p=t,u=e});k[r]=f,k[i]=e=>{d&&e(d),m.forEach(e),k.catch(()=>{})},e.exports=k,t(e=>{c=e.map(e=>{if(null!==e&&"object"==typeof e){if(!e[i]&&e[s]){var t=e[s];if(!t.some(e=>{var t=g[e];return!t||!1===t[n]}))return e;var a=e;e={then(e){Promise.all(t.map(h)).then(()=>e(a))}}}if(e[i])return e;if(e.then){var d=[];d.d=0,e.then(e=>{c[r]=e,l(d)},e=>{c[o]=e,l(d)});var c={};return c[s]=!1,c[i]=e=>e(d),c}}var u={};return u[i]=()=>{},u[r]=e,u});var t,a=()=>c.map(e=>{if(e[s])return e;if(e[o])throw e[o];return e[r]}),u=new Promise(e=>{(t=()=>e(a)).r=0;var r=e=>e!==d&&!m.has(e)&&(m.add(e),e&&!e.d&&(t.r++,e.push(t)));c.map(e=>e[s]||e[i](r))});return t.r?u:a()},e=>(e?p(k[o]=e):u(f),l(d),k[n]=!0)),d&&d.d<0&&(d.d=0)},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,h.t=function(e,t){if(1&t&&(e=this(e)),8&t||"object"==typeof e&&e&&(4&t&&e.__esModule||16&t&&"function"==typeof e.then))return e;var a=Object.create(null);h.r(a);var i={};d=d||[null,c({}),c([]),c(c)];for(var r=2&t&&e;("object"==typeof r||"function"==typeof r)&&!~d.indexOf(r);r=c(r))Object.getOwnPropertyNames(r).forEach(t=>{i[t]=()=>e[t]});return i.default=()=>e,h.d(a,i),a},h.d=(e,t)=>{for(var a in t)h.o(t,a)&&!h.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},h.f={},h.e=e=>Promise.all(Object.keys(h.f).reduce((t,a)=>(h.f[a](e,t),t),[])),h.u=e=>""+e+".mjs",h.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),h.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},h.p="",h.rv=()=>"1.7.6",u={238:0},p=e=>{var t,a,i=e.__rspack_esm_ids,r=e.__webpack_modules__,o=e.__rspack_esm_runtime,n=0;for(t in r)h.o(r,t)&&(h.m[t]=r[t]);for(o&&o(h);n<i.length;n++)a=i[n],h.o(u,a)&&u[a]&&u[a][0](),u[i[n]]=0},h.f.j=function(e,t){var a=h.o(u,e)?u[e]:void 0;if(0!==a)if(a)t.push(a[1]);else{var i=import("./"+h.u(e)).then(p,t=>{throw 0!==u[e]&&(u[e]=void 0),t}),i=Promise.race([i,new Promise(t=>{a=u[e]=[t]})]);t.push(a[1]=i)}},h.ruid="bundler=rspack@1.7.6",h(272);
|
|
849
|
+
`}},1483(e,t,a){a.a(e,async function(e,i){try{let s,l,d,c,u,p,m,g,h,f;a.d(t,{D8:()=>w,w4:()=>b});var r=a(8691),o=a(9005),n=e([r]);r=(n.then?(await n)():n)[0];let k="string"==typeof process.env.FORCE_COLOR&&process.env.FORCE_COLOR.trim().length>0&&"0"!==process.env.FORCE_COLOR.trim(),v=process.env.NO_COLOR&&!k?new r.g({level:0}):r.m,b={accent:(s=o.A.accent,v.hex(s)),accentBright:(l=o.A.accentBright,v.hex(l)),accentDim:(d=o.A.accentDim,v.hex(d)),info:(c=o.A.info,v.hex(c)),success:(u=o.A.success,v.hex(u)),warn:(p=o.A.warn,v.hex(p)),error:(m=o.A.error,v.hex(m)),muted:(g=o.A.muted,v.hex(g)),heading:v.bold.hex(o.A.accent),strong:v.bold.hex(o.A.accentBright),command:(h=o.A.accentBright,v.hex(h)),option:(f=o.A.warn,v.hex(f))},w=()=>v.level>0;i()}catch(e){i(e)}})},4138(e,t,a){a.d(t,{II:()=>o});var i=a(5935);function r(e,t){if(t<=0)return[e];let a=Array.from(e),i=[];for(let e=0;e<a.length;e+=t)i.push(a.slice(e,e+t).join(""));return i.length>0?i:[e]}function o(e,t){let a=function(e={}){return Number.isFinite(e.maxWidth)&&e.maxWidth>0?e.maxWidth:Math.max(1,Number.isFinite(e.columns)&&e.columns>0?e.columns:process.stdout.columns??80)}({columns:t});return String(e).split("\n").flatMap(e=>(function(e,t){if(0===e.trim().length)return[e];let a=e.match(/^(\s*)([-*\u2022]\s+)?(.*)$/),o=a?.[1]??"",n=a?.[2]??"",s=a?.[3]??"",l=`${o}${n}`,d=`${o}${n?" ".repeat(n.length):""}`,c=Math.max(1,t-(0,i.LQ)(l)),u=Math.max(1,t-(0,i.LQ)(d)),p=s.split(/\s+/).filter(Boolean),m=[],g="",h=l,f=c;for(let e of p){if(!g){if((0,i.LQ)(e)>f){let t=r(e,f),a=t.shift()??"";for(let e of(m.push(h+a),h=d,f=u,t))m.push(h+e);continue}g=e;continue}let t=`${g} ${e}`;if((0,i.LQ)(t)<=f){g=t;continue}if(m.push(h+g),h=d,f=u,(0,i.LQ)(e)>f){let t=r(e,f),a=t.shift()??"";for(let e of(m.push(h+a),t))m.push(h+e);g="";continue}g=e}return(g||0===p.length)&&m.push(h+g),m})(e,a))}},8691(e,t,a){a.a(e,async function(e,i){try{a.d(t,{g:()=>r.Chalk,m:()=>n});var r=a(5590),o=e([r]);r=(o.then?(await o)():o)[0];let n=function(){if("function"==typeof r.default.hex)return r.default;let e=r.default.default;return e&&"function"==typeof e.hex?e:r.default}();i()}catch(e){i(e)}})},3458(e,t,a){a.d(t,{O:()=>r});var i=a(3024);function r(){let e=process.argv[1];if(!e||"-"===e||e.startsWith("-"))return null;try{let t=(0,i.realpathSync)(e);return"string"==typeof t&&t.length>0?t:null}catch{return null}}},4899(e,t,a){a.d(t,{Jx:()=>d,Pe:()=>c});var i=a(3024),r=a(8161),o=a(6760);function n(){return process.env.PITHOSAI_HISTORY_FILE?process.env.PITHOSAI_HISTORY_FILE:(0,o.join)(s,".history.json")}let s=(0,o.join)((0,r.homedir)(),".pithosai");function l(){try{let e=n();if(!(0,i.existsSync)(e))return[];let t=(0,i.readFileSync)(e,"utf8").trim();if(!t)return[];let a=JSON.parse(t);if(!Array.isArray(a))return[];return a.filter(e=>e&&"string"==typeof e.path&&"string"==typeof e.visitDate)}catch{return[]}}function d(e){var t;let a,r=l(),o=new Date().toISOString(),d=r.filter(t=>t.path!==e);t=[{path:e,visitDate:o},...d].slice(0,100),a=n(),(0,i.mkdirSync)(s,{recursive:!0}),(0,i.writeFileSync)(a,JSON.stringify(t,null,2),"utf8")}function c(){return l().map(e=>e.path)}},4071(e,t,a){a.a(e,async function(e,i){try{let b;a.d(t,{CN:()=>g,IW:()=>k,JE:()=>u,JX:()=>v,KH:()=>f,MD:()=>m,_F:()=>h,cS:()=>s,dz:()=>l,fH:()=>p,vV:()=>c});var r=a(4082),o=e([r]);function n(e){let t=function(e=process.argv[1]){return"string"!=typeof e||0===e.length?"all":e.includes("/dist/")?"INFO":"all"}();r.default.configure({appenders:{file:{type:"file",filename:e||"/tmp/pithosai_log_file.log",layout:{type:"pattern",pattern:"%d{yyyy-MM-dd hh:mm:ss.SSS} %p %f:%l %m"}}},categories:{default:{appenders:["file"],level:t,enableCallStack:!0}}}),(b=r.default.getLogger()).callStackLinesToSkip=1}function s(e){e&&"string"==typeof e&&(process.env.PITHOSAI_LOG_FILEPATH=e,n(e))}function l(){return new Promise(e=>{r.default.shutdown(e)})}function d(e){return e.map(e=>e instanceof Error?e.message||String(e):"object"==typeof e&&null!==e?JSON.stringify(e):String(e)).join(" ")}function c(...e){let t=e.length>1?d(e):e[0]??"";b.error(t)}function u(...e){let t=e.length>1?d(e):e[0]??"";b.warn(t)}function p(...e){let t=e.length>1?d(e):e[0]??"";b.info(t)}function m(...e){let t=e.length>1?d(e):e[0]??"";b.debug(t)}function g(...e){try{let t=e.length>1?d(e):e[0]??"";b.error(t)}catch{}}function h(...e){let t=e.length>1?d(e):e[0]??"";b.warn(t)}function f(...e){try{let t=e.length>1?d(e):e[0]??"";b.info(t)}catch{}}function k(...e){let t=e.length>1?d(e):e[0]??"";b.info(t)}function v(...e){try{let t=e.length>1?d(e):e[0]??"";b.debug(t)}catch{}}r=(o.then?(await o)():o)[0],n(process.env.PITHOSAI_LOG_FILEPATH),i()}catch(e){i(e)}})},8140(e,t,a){a.d(t,{X:()=>i});function i(e){return e&&e.startsWith("~")?(process.env.HOME||process.env.USERPROFILE||"")+e.slice(1):e}},4399(e,t,a){let i,r;a.d(t,{F8:()=>h,gb:()=>k,mi:()=>v});var o=a(6760),n=a(3136),s=a(3024),l=a(8995),d=a(3458);function c(e){"1"===process.env.PITHOSAI_DEBUG_PATHS&&process.stderr.write(`[pithosai][paths] bundled import.meta.url unusable on this host: ${e?.code??e}
|
|
850
|
+
`)}let u=function(){let e=function(e,t={}){let a=t.existsSync??s.existsSync;if("string"!=typeof e||!e.startsWith("file:"))return null;try{let t=(0,n.fileURLToPath)(e);if(!a(t))return null;let i=(0,o.dirname)(t);return a(i)?i:null}catch(e){return c(e),null}}("file:///Users/lidh04/Projects/scripts/pithosai/src/utils/paths.js");if(e)return e;let t=(0,d.O)();return t?(0,o.dirname)(t):"u">typeof __dirname&&(0,s.existsSync)(__dirname)?__dirname:process.cwd()}(),p=(0,l.createRequire)(function(){let e="file:///Users/lidh04/Projects/scripts/pithosai/src/utils/paths.js";if("string"==typeof e&&e.startsWith("file:"))try{if((0,s.existsSync)((0,n.fileURLToPath)(e)))return e}catch(e){c(e)}let t=(0,d.O)();return t?(0,n.pathToFileURL)(t).href:(0,n.pathToFileURL)(process.execPath).href}());function m(e){let t=(0,o.join)(e,"package.json");if(!(0,s.existsSync)(t))return!1;try{let e=JSON.parse((0,s.readFileSync)(t,"utf8"));return"@pithosai/pithosai"===e.name||"pithosai"===e.name||"@pithosai/npc-platform-client"===e.name}catch{return!1}}function g(e){let t=e;for(let e=0;e<24;e++){if(m(t))return t;let e=(0,o.dirname)(t);if(e===t)break;t=e}return null}function h(){if(i)return i;let e=process.env.PITHOSAI_PACKAGE_ROOT?.trim();if(e&&(0,s.existsSync)(e))return i=e;let t=function(){for(let e of[(0,o.join)(u,"..","shims","package-root.cjs"),(0,o.join)(u,"..","..","shims","package-root.cjs")])try{let t=p(e);if("string"==typeof t&&m(t))return t}catch{}return null}();if(t)return i=t;try{let e=p.resolve("@pithosai/pithosai/package.json"),t=(0,o.dirname)(e);if(m(t))return i=t}catch{}try{let e=p.resolve("pithosai/package.json"),t=(0,o.dirname)(e);if(m(t))return i=t}catch{}let a=(0,d.O)();if(a){let e=g((0,o.dirname)(a));if(e)return i=e}let r=g(u);if(r)return i=r;throw Error("pithosai: could not find package root. Reinstall @pithosai/pithosai.")}let f=h(),k=(r=process.env.PITHOSAI_TEMPLATES_DIR?.trim())&&(0,s.existsSync)(r)?r:(0,o.join)(f,"templates");function v(e){return(0,o.join)(k,e)}},9737(e,t,a){a.d(t,{n:()=>i});function i(e,t,a){let i,r=new Promise((e,r)=>{void 0!==(i=setTimeout(()=>r(a()),t))&&"function"==typeof i.unref&&i.unref()});return Promise.race([e.finally(()=>{void 0!==i&&clearTimeout(i)}),r])}},3188(e,t,a){a.d(t,{y:()=>i});function i(e){return new Promise(t=>setTimeout(t,e))}},5460(e,t,a){a.d(t,{cs:()=>i});function i(e){if("string"!=typeof e||""===e)return e;let t=e.replace(/\r\n/g,"\n").split("\n");for(;t.length>0&&""===t[0].trim();)t.shift();let a=[],i=!1;for(let e of t){if(""===e.trim())continue;if(3===a.length){i=!0;break}let t=e.length>400?e.slice(0,400).replace(/\s+$/,"")+"...":e;a.push(t)}let r=a.join("\n");return i&&(r+="\n..."),r}},2939(e){e.exports=JSON.parse('{"version":"v1","hooks":[{"name":"git-ai-before-tool","description":"Human checkpoint before write/edit/read so Git AI can attribute later AI changes.","enabled":true,"matcher":"^(write|edit|read)$","hookType":"beforeToolExecute","timeout":30,"command":"{pithosaiCli:pithosai-git-ai-adapter} checkpoint pre"},{"name":"git-ai-after-tool","description":"AI checkpoint after write/edit/read with transcript so Git AI can blame authorship.","enabled":true,"matcher":"^(write|edit|read)$","hookType":"afterToolExecute","timeout":30,"command":"{pithosaiCli:pithosai-git-ai-adapter} checkpoint post"}]}')},679(e){e.exports=JSON.parse('{"openrouter":{"envVar":"OPENROUTER_API_KEY","chinaMainlandSlugs":["deepseek","qwen","moonshotai","minimax","z-ai","xiaomi","baidu","bytedance-seed","stepfun","tencent","kwaipilot","inclusionai"],"defaultModelIds":{"default":"deepseek/deepseek-v4-flash","pro":"deepseek/deepseek-v4-pro","reasoner":"deepseek/deepseek-v4-pro"}},"chinaDirectProviders":[{"id":"deepseek","envVar":"DEEPSEEK_API_KEY","keyPrefix":"deepseek","openRouterProvider":"deepseek","defaultModelId":"deepseek-v4-flash"},{"id":"kimi-coding","envVar":"KIMI_API_KEY","keyPrefix":"kimi","openRouterProvider":null,"defaultModelId":"kimi-for-coding"},{"id":"moonshotai-cn","envVar":"MOONSHOT_API_KEY","keyPrefix":"moonshotai-cn","openRouterProvider":"moonshotai","defaultModelId":"kimi-k2.6"},{"id":"moonshotai","envVar":"MOONSHOT_API_KEY","keyPrefix":"moonshotai","openRouterProvider":"moonshotai","defaultModelId":"kimi-k2.6"},{"id":"zai","envVar":"ZAI_API_KEY","keyPrefix":"z-ai","openRouterProvider":"z-ai","defaultModelId":"glm-4.7"},{"id":"minimax-cn","envVar":"MINIMAX_CN_API_KEY","keyPrefix":"minimax-cn","openRouterProvider":"minimax","defaultModelId":"MiniMax-M2.7"},{"id":"minimax","envVar":"MINIMAX_API_KEY","keyPrefix":"minimax","openRouterProvider":"minimax","defaultModelId":"MiniMax-M2.7"},{"id":"xiaomi","envVar":"XIAOMI_API_KEY","keyPrefix":"xiaomi","openRouterProvider":"xiaomi","defaultModelId":"mimo-v2.5"}],"defaults":{"ollamaBaseUrl":"http://localhost:11434/v1","krouterBaseUrl":"http://localhost:20128/v1","krouterApiKey":"krouter"},"handCrafted":{"deepseek":{"shared":{"api":"openai-completions","provider":"deepseek","baseUrl":"https://api.deepseek.com","input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":100000,"maxTokens":8192},"models":[{"exportName":"deepSeekCoderModel","cliKeys":["deepseek-coder","deepseek-pro"],"idAliases":["deepseek-v4-pro","deepseek-coder"],"id":"deepseek-v4-pro","name":"DeepSeek Coder","reasoning":true},{"exportName":"deepSeekChatModel","cliKeys":["deepseek-chat","deepseek-flash"],"idAliases":["deepseek-v4-flash","deepseek-chat"],"id":"deepseek-v4-flash","name":"DeepSeek Chat","reasoning":false},{"exportName":"deepSeekReasonerModel","cliKeys":["deepseek-reasoner"],"idAliases":["deepseek-reasoner"],"id":"deepseek-v4-pro","name":"DeepSeek Reasoner","reasoning":true}]},"ollama":{"shared":{"provider":"ollama","input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0}},"models":[{"exportName":"ollamaQwen25_14bModel","cliKeys":["ollama-qwen25"],"id":"qwen2.5:14b","name":"Qwen2.5 14B (Ollama)","api":"openai-completions","reasoning":false,"contextWindow":32768,"maxTokens":4096,"supportsTools":true},{"exportName":"ollamaQwen25Coder_14bModel","cliKeys":["ollama-qwen25-coder"],"id":"qwen2.5-coder:14b","name":"Qwen2.5 Coder 14B (Ollama)","api":"openai-completions","reasoning":false,"contextWindow":32768,"maxTokens":4096,"supportsTools":true},{"exportName":"ollamaDeepSeekR1_14bModel","cliKeys":["ollama-deepseek-r1"],"id":"deepseek-r1:14b","name":"DeepSeek R1 14B (Ollama)","api":"openai-completions","reasoning":true,"contextWindow":4096,"maxTokens":4096,"supportsTools":false},{"exportName":"ollamaQwythos9BQ8Model","cliKeys":["ollama-qwythos-9b-q8"],"id":"qwythos-9b-q8","name":"Qwythos-9B-Q8 (Ollama)","api":"ollama-native","reasoning":false,"contextWindow":65536,"maxTokens":16384,"supportsTools":true}]},"cursor":{"shared":{"api":"cursor-cli","provider":"cursor","baseUrl":"","input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"maxTokens":16384},"models":[{"exportName":"cursorAutoModel","cliKeys":["cursor-auto-model"],"id":"auto","name":"Cursor Auto","reasoning":false,"contextWindow":200000},{"exportName":"cursorSonnetModel","cliKeys":["cursor-sonnet"],"id":"sonnet-4.6","name":"Cursor Sonnet 4.6","reasoning":false,"contextWindow":200000},{"exportName":"cursorSonnetThinkingModel","cliKeys":["cursor-sonnet-thinking"],"id":"sonnet-4.6-thinking","name":"Cursor Sonnet 4.6 Thinking","reasoning":true,"contextWindow":200000},{"exportName":"cursorOpusModel","cliKeys":["cursor-opus"],"id":"opus-4.6","name":"Cursor Opus 4.6","reasoning":false,"contextWindow":200000},{"exportName":"cursorGptModel","cliKeys":["cursor-gpt"],"id":"gpt-5.2","name":"Cursor GPT 5.2","reasoning":false,"contextWindow":128000}]},"krouter":{"shared":{"api":"openai-completions","provider":"krouter","input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":16384,"supportsTools":true},"combos":[{"id":"RD","name":"RD"},{"id":"ARCH","name":"ARCH"},{"id":"PM","name":"PM"},{"id":"QA","name":"QA"}]}}}')}},g={};function h(e){var t=g[e];if(void 0!==t)return t.exports;var a=g[e]={exports:{}};return m[e](a,a.exports,h),a.exports}h.m=m,i=(a="function"==typeof Symbol)?Symbol("rspack queues"):"__rspack_queues",r=h.aE=a?Symbol("rspack exports"):"__webpack_exports__",o=a?Symbol("rspack error"):"__rspack_error",n=a?Symbol("rspack done"):"__rspack_done",s=h.zS=a?Symbol("rspack defer"):"__rspack_defer",l=e=>{e&&e.d<1&&(e.d=1,e.forEach(e=>e.r--),e.forEach(e=>e.r--?e.r++:e()))},h.a=(e,t,a)=>{a&&((d=[]).d=-1);var d,c,u,p,m=new Set,f=e.exports,k=new Promise((e,t)=>{p=t,u=e});k[r]=f,k[i]=e=>{d&&e(d),m.forEach(e),k.catch(()=>{})},e.exports=k,t(e=>{c=e.map(e=>{if(null!==e&&"object"==typeof e){if(!e[i]&&e[s]){var t=e[s];if(!t.some(e=>{var t=g[e];return!t||!1===t[n]}))return e;var a=e;e={then(e){Promise.all(t.map(h)).then(()=>e(a))}}}if(e[i])return e;if(e.then){var d=[];d.d=0,e.then(e=>{c[r]=e,l(d)},e=>{c[o]=e,l(d)});var c={};return c[s]=!1,c[i]=e=>e(d),c}}var u={};return u[i]=()=>{},u[r]=e,u});var t,a=()=>c.map(e=>{if(e[s])return e;if(e[o])throw e[o];return e[r]}),u=new Promise(e=>{(t=()=>e(a)).r=0;var r=e=>e!==d&&!m.has(e)&&(m.add(e),e&&!e.d&&(t.r++,e.push(t)));c.map(e=>e[s]||e[i](r))});return t.r?u:a()},e=>(e?p(k[o]=e):u(f),l(d),k[n]=!0)),d&&d.d<0&&(d.d=0)},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,h.t=function(e,t){if(1&t&&(e=this(e)),8&t||"object"==typeof e&&e&&(4&t&&e.__esModule||16&t&&"function"==typeof e.then))return e;var a=Object.create(null);h.r(a);var i={};d=d||[null,c({}),c([]),c(c)];for(var r=2&t&&e;("object"==typeof r||"function"==typeof r)&&!~d.indexOf(r);r=c(r))Object.getOwnPropertyNames(r).forEach(t=>{i[t]=()=>e[t]});return i.default=()=>e,h.d(a,i),a},h.d=(e,t)=>{for(var a in t)h.o(t,a)&&!h.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},h.f={},h.e=e=>Promise.all(Object.keys(h.f).reduce((t,a)=>(h.f[a](e,t),t),[])),h.u=e=>""+e+".mjs",h.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),h.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},h.p="",h.rv=()=>"1.7.6",u={238:0},p=e=>{var t,a,i=e.__rspack_esm_ids,r=e.__webpack_modules__,o=e.__rspack_esm_runtime,n=0;for(t in r)h.o(r,t)&&(h.m[t]=r[t]);for(o&&o(h);n<i.length;n++)a=i[n],h.o(u,a)&&u[a]&&u[a][0](),u[i[n]]=0},h.f.j=function(e,t){var a=h.o(u,e)?u[e]:void 0;if(0!==a)if(a)t.push(a[1]);else{var i=import("./"+h.u(e)).then(p,t=>{throw 0!==u[e]&&(u[e]=void 0),t}),i=Promise.race([i,new Promise(t=>{a=u[e]=[t]})]);t.push(a[1]=i)}},h.ruid="bundler=rspack@1.7.6",h(272);
|