@sylphx/flow 0.2.11 → 0.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -0
- package/dist/chunk-01gv4qey.js +4 -0
- package/dist/chunk-01gv4qey.js.map +11 -0
- package/dist/{chunk-f9yb2zk3.js → chunk-3m9whg4q.js} +2 -2
- package/dist/{chunk-f9yb2zk3.js.map → chunk-3m9whg4q.js.map} +1 -1
- package/dist/{chunk-sgafqzer.js → chunk-3w6pd43t.js} +3 -3
- package/dist/{chunk-sgafqzer.js.map → chunk-3w6pd43t.js.map} +2 -2
- package/dist/{chunk-d6k94684.js → chunk-4nm4ere4.js} +3 -3
- package/dist/{chunk-d6k94684.js.map → chunk-4nm4ere4.js.map} +1 -1
- package/dist/{chunk-ceyg2zjg.js → chunk-4vrj3f8r.js} +3 -3
- package/dist/{chunk-ceyg2zjg.js.map → chunk-4vrj3f8r.js.map} +1 -1
- package/dist/chunk-5njgv5k5.js +161 -0
- package/dist/{chunk-rsagxdqj.js.map → chunk-5njgv5k5.js.map} +4 -6
- package/dist/{chunk-6eb5a8kv.js → chunk-67n29s4q.js} +4 -4
- package/dist/chunk-67n29s4q.js.map +10 -0
- package/dist/{chunk-66qzap9m.js → chunk-86ce45n6.js} +2 -2
- package/dist/{chunk-66qzap9m.js.map → chunk-86ce45n6.js.map} +1 -1
- package/dist/{chunk-fyvtp08n.js → chunk-99pz5wm0.js} +2 -2
- package/dist/{chunk-fyvtp08n.js.map → chunk-99pz5wm0.js.map} +1 -1
- package/dist/chunk-d409xn8f.js +6 -0
- package/dist/{chunk-cjy100rr.js.map → chunk-d409xn8f.js.map} +2 -2
- package/dist/chunk-g0qpndpd.js +23 -0
- package/dist/{chunk-1ej6vegq.js.map → chunk-g0qpndpd.js.map} +5 -5
- package/dist/{chunk-51kpynby.js → chunk-g4baca7p.js} +3 -3
- package/dist/{chunk-51kpynby.js.map → chunk-g4baca7p.js.map} +1 -1
- package/dist/chunk-gc66xe7z.js +4 -0
- package/dist/{chunk-8ep9gk6d.js.map → chunk-gc66xe7z.js.map} +2 -2
- package/dist/{chunk-2nfq57ym.js → chunk-hj6qtsqp.js} +2 -2
- package/dist/{chunk-2nfq57ym.js.map → chunk-hj6qtsqp.js.map} +2 -2
- package/dist/{chunk-etqfkn4f.js → chunk-jbd95k1f.js} +3 -3
- package/dist/{chunk-etqfkn4f.js.map → chunk-jbd95k1f.js.map} +1 -1
- package/dist/{chunk-z61qdct1.js → chunk-kn908zkk.js} +2 -2
- package/dist/{chunk-z61qdct1.js.map → chunk-kn908zkk.js.map} +1 -1
- package/dist/{chunk-rvx8bgqk.js → chunk-mw13a082.js} +3 -3
- package/dist/{chunk-rvx8bgqk.js.map → chunk-mw13a082.js.map} +1 -1
- package/dist/chunk-nke51f3c.js +4 -0
- package/dist/chunk-nke51f3c.js.map +10 -0
- package/dist/{chunk-ny1s8fnh.js → chunk-ns5atzyz.js} +2 -2
- package/dist/{chunk-ny1s8fnh.js.map → chunk-ns5atzyz.js.map} +1 -1
- package/dist/chunk-pp4r3hp4.js +105 -0
- package/dist/chunk-pp4r3hp4.js.map +27 -0
- package/dist/{chunk-372bgp30.js → chunk-q4nh3vst.js} +3 -3
- package/dist/{chunk-372bgp30.js.map → chunk-q4nh3vst.js.map} +1 -1
- package/dist/{chunk-585jp0rg.js → chunk-q5gqgs0p.js} +3 -3
- package/dist/chunk-q5gqgs0p.js.map +10 -0
- package/dist/{chunk-f676awyz.js → chunk-s9bsh0gp.js} +3 -3
- package/dist/{chunk-f676awyz.js.map → chunk-s9bsh0gp.js.map} +1 -1
- package/dist/chunk-ss51dw5h.js +27 -0
- package/dist/{chunk-s323r5xg.js.map → chunk-ss51dw5h.js.map} +5 -5
- package/dist/{chunk-mtrcdhzn.js → chunk-xs370t8p.js} +3 -3
- package/dist/{chunk-mtrcdhzn.js.map → chunk-xs370t8p.js.map} +8 -8
- package/dist/chunk-xtrn4wn0.js +3 -0
- package/dist/{chunk-b0047ggx.js.map → chunk-xtrn4wn0.js.map} +2 -2
- package/dist/{chunk-7h737bp8.js → chunk-xvfz960r.js} +3 -3
- package/dist/{chunk-7h737bp8.js.map → chunk-xvfz960r.js.map} +1 -1
- package/dist/chunk-xytc0fks.js +27 -0
- package/dist/{chunk-pzp2kw7j.js.map → chunk-xytc0fks.js.map} +2 -2
- package/dist/chunk-yxv7hqse.js +23 -0
- package/dist/chunk-yxv7hqse.js.map +11 -0
- package/dist/chunk-zv5y8yfq.js +19 -0
- package/dist/chunk-zv5y8yfq.js.map +11 -0
- package/dist/index.js +278 -285
- package/dist/index.js.map +34 -30
- package/drizzle/0002_lyrical_random.sql +2 -0
- package/drizzle/0003_romantic_lockjaw.sql +4 -0
- package/drizzle/0004_blushing_meteorite.sql +6 -0
- package/drizzle/meta/0002_snapshot.json +920 -0
- package/drizzle/meta/0003_snapshot.json +920 -0
- package/drizzle/meta/0004_snapshot.json +921 -0
- package/drizzle/meta/_journal.json +21 -0
- package/package.json +4 -1
- package/dist/chunk-057m762a.js +0 -4
- package/dist/chunk-057m762a.js.map +0 -10
- package/dist/chunk-1ej6vegq.js +0 -23
- package/dist/chunk-585jp0rg.js.map +0 -10
- package/dist/chunk-5hcagq8j.js +0 -107
- package/dist/chunk-5hcagq8j.js.map +0 -25
- package/dist/chunk-6eb5a8kv.js.map +0 -10
- package/dist/chunk-8ep9gk6d.js +0 -4
- package/dist/chunk-b0047ggx.js +0 -3
- package/dist/chunk-cjy100rr.js +0 -6
- package/dist/chunk-dpba9y5x.js +0 -23
- package/dist/chunk-dpba9y5x.js.map +0 -11
- package/dist/chunk-pzp2kw7j.js +0 -27
- package/dist/chunk-r19ma0z2.js +0 -19
- package/dist/chunk-r19ma0z2.js.map +0 -10
- package/dist/chunk-rsagxdqj.js +0 -161
- package/dist/chunk-s323r5xg.js +0 -27
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{T as V}from"./chunk-gc66xe7z.js";import{U}from"./chunk-s9bsh0gp.js";import{Ub as R}from"./chunk-3m9whg4q.js";var E=R((M,Q)=>{var{defineProperty:K,getOwnPropertyDescriptor:W,getOwnPropertyNames:X}=Object,Y=Object.prototype.hasOwnProperty,Z=(q,v)=>{for(var z in v)K(q,z,{get:v[z],enumerable:!0})},$=(q,v,z,F)=>{if(v&&typeof v==="object"||typeof v==="function"){for(let G of X(v))if(!Y.call(q,G)&&G!==z)K(q,G,{get:()=>v[G],enumerable:!(F=W(v,G))||F.enumerable})}return q},A=(q)=>$(K({},"__esModule",{value:!0}),q),L={};Z(L,{refreshToken:()=>D});Q.exports=A(L);var H=U(),B=V();async function D(){let{projectId:q,teamId:v}=(0,B.findProjectInfo)(),z=(0,B.loadToken)(q);if(!z||(0,B.isExpired)((0,B.getTokenPayload)(z.token))){let F=(0,B.getVercelCliToken)();if(!F)throw new H.VercelOidcTokenError("Failed to refresh OIDC token: login to vercel cli");if(!q)throw new H.VercelOidcTokenError("Failed to refresh OIDC token: project id not found");if(z=await(0,B.getVercelOidcToken)(F,q,v),!z)throw new H.VercelOidcTokenError("Failed to refresh OIDC token");(0,B.saveToken)(z,q)}process.env.VERCEL_OIDC_TOKEN=z.token;return}});export default E();
|
|
2
|
+
|
|
3
|
+
//# debugId=1ABD4005A6D30E6264756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar token_exports = {};\n__export(token_exports, {\n refreshToken: () => refreshToken\n});\nmodule.exports = __toCommonJS(token_exports);\nvar import_token_error = require(\"./token-error\");\nvar import_token_util = require(\"./token-util\");\nasync function refreshToken() {\n const { projectId, teamId } = (0, import_token_util.findProjectInfo)();\n let maybeToken = (0, import_token_util.loadToken)(projectId);\n if (!maybeToken || (0, import_token_util.isExpired)((0, import_token_util.getTokenPayload)(maybeToken.token))) {\n const authToken = (0, import_token_util.getVercelCliToken)();\n if (!authToken) {\n throw new import_token_error.VercelOidcTokenError(\n \"Failed to refresh OIDC token: login to vercel cli\"\n );\n }\n if (!projectId) {\n throw new import_token_error.VercelOidcTokenError(\n \"Failed to refresh OIDC token: project id not found\"\n );\n }\n maybeToken = await (0, import_token_util.getVercelOidcToken)(authToken, projectId, teamId);\n if (!maybeToken) {\n throw new import_token_error.VercelOidcTokenError(\"Failed to refresh OIDC token\");\n }\n (0, import_token_util.saveToken)(maybeToken, projectId);\n }\n process.env.VERCEL_OIDC_TOKEN = maybeToken.token;\n return;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n refreshToken\n});\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "gJACA,FAAuB,SAAnB,EAC0B,yBAA1B,EAC2B,oBAA3B,GADmB,OAEnB,EAAe,OAAO,UAAU,eAChC,EAAW,CAAC,EAAQ,IAAQ,CAC9B,QAAS,KAAQ,EACf,EAAU,EAAQ,EAAM,CAAE,IAAK,EAAI,GAAO,WAAY,EAAK,CAAC,GAE5D,EAAc,CAAC,EAAI,EAAM,EAAQ,IAAS,CAC5C,GAAI,GAAQ,OAAO,IAAS,UAAY,OAAO,IAAS,YACtD,QAAS,KAAO,EAAkB,CAAI,EACpC,GAAI,CAAC,EAAa,KAAK,EAAI,CAAG,GAAK,IAAQ,EACzC,EAAU,EAAI,EAAK,CAAE,IAAK,IAAM,EAAK,GAAM,WAAY,EAAE,EAAO,EAAiB,EAAM,CAAG,IAAM,EAAK,UAAW,CAAC,EAEvH,OAAO,GAEL,EAAe,CAAC,IAAQ,EAAY,EAAU,CAAC,EAAG,aAAc,CAAE,MAAO,EAAK,CAAC,EAAG,CAAG,EACrF,EAAgB,CAAC,EACrB,EAAS,EAAe,CACtB,aAAc,IAAM,CACtB,CAAC,EACD,EAAO,QAAU,EAAa,CAAa,EAC3C,IAAI,MACA,MACJ,eAAe,CAAY,EAAG,CAC5B,IAAQ,YAAW,WAAY,EAAG,EAAkB,iBAAiB,EACjE,GAAc,EAAG,EAAkB,WAAW,CAAS,EAC3D,GAAI,CAAC,IAAe,EAAG,EAAkB,YAAY,EAAG,EAAkB,iBAAiB,EAAW,KAAK,CAAC,EAAG,CAC7G,IAAM,GAAa,EAAG,EAAkB,mBAAmB,EAC3D,GAAI,CAAC,EACH,MAAM,IAAI,EAAmB,qBAC3B,mDACF,EAEF,GAAI,CAAC,EACH,MAAM,IAAI,EAAmB,qBAC3B,oDACF,EAGF,GADA,EAAa,MAAO,EAAG,EAAkB,oBAAoB,EAAW,EAAW,CAAM,EACrF,CAAC,EACH,MAAM,IAAI,EAAmB,qBAAqB,8BAA8B,GAEjF,EAAG,EAAkB,WAAW,EAAY,CAAS,EAExD,QAAQ,IAAI,kBAAoB,EAAW,MAC3C",
|
|
8
|
+
"debugId": "1ABD4005A6D30E6264756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
2
|
-
export{f as
|
|
1
|
+
import{Q as U}from"./chunk-q4nh3vst.js";import{Tb as C}from"./chunk-3m9whg4q.js";var b=C(U(),1);import{readFile as B,readdir as M,access as w}from"node:fs/promises";import{join as Z,parse as y,relative as N}from"node:path";import{homedir as j}from"node:os";async function G(k,q=!1,x){try{let H=await B(k,"utf-8"),{data:Q,content:J}=b.default(H);if(!Q.name||typeof Q.name!=="string")return console.error(`Agent file ${k} missing required 'name' field`),null;let V={name:Q.name,description:Q.description||""};return{id:x||y(k).name,metadata:V,systemPrompt:J.trim(),isBuiltin:q,filePath:k}}catch(H){return console.error(`Failed to load agent from ${k}:`,H),null}}async function z(k,q=!1){try{let H=(await M(k,{recursive:!0,withFileTypes:!0})).filter((J)=>J.isFile()&&J.name.endsWith(".md")).map((J)=>{let V=Z(J.parentPath||J.path,J.name),Y=N(k,V).replace(/\.md$/,"");return{fullPath:V,agentId:Y}});return(await Promise.all(H.map(({fullPath:J,agentId:V})=>G(J,q,V)))).filter((J)=>J!==null)}catch(x){return[]}}async function S(){let k=new URL(".",import.meta.url).pathname,q=Z(k,"..","assets","agents"),x=Z(k,"..","..","assets","agents");try{return await w(q),q}catch{return x}}function D(k){let q=Z(j(),".sylphx-flow","agents"),x=Z(k,".sylphx-flow","agents");return[q,x]}async function v(k){let q=await S(),[x,H]=D(k),[Q,J,V]=await Promise.all([z(q,!0),z(x,!1),z(H,!1)]),Y=new Map;for(let W of Q)Y.set(W.id,W);for(let W of J)Y.set(W.id,W);for(let W of V)Y.set(W.id,W);return Array.from(Y.values())}var X="coder";var O=null,R=null,$={id:X,metadata:{name:"Coder",description:"Fallback agent (agent manager not initialized)"},systemPrompt:"You are a helpful coding assistant.",isBuiltin:!0};function f(k){R=k}async function u(k){let q=await v(k),x=new Map;for(let H of q)x.set(H.id,H);if(O={agents:x,cwd:k},R){let H=R();if(H.getState){let Q=H.getState().currentAgentId||X;if(!x.has(Q))H.getState().setCurrentAgentId(X)}}}function P(){if(!O)return[$];return Array.from(O.agents.values())}function h(k){if(!O)return k===X?$:null;return O.agents.get(k)||null}function L(){let k=K();if(!O)return $;return O.agents.get(k)||$}function K(){if(R){let k=R();if(k.getState)return k.getState().currentAgentId||X}return X}function p(k){if(!O)return!1;if(!O.agents.get(k))return!1;if(R){let x=R();if(x.getState)x.getState().setCurrentAgentId(k)}return!0}async function l(){if(!O)return;let k=O.cwd,q=K();if(await u(k),O&&!O.agents.has(q)){if(R){let x=R();if(x.getState)x.getState().setCurrentAgentId(X)}}}function o(){return L().systemPrompt}export{p as switchAgent,f as setAppStoreGetter,l as reloadAgents,u as initializeAgentManager,o as getCurrentSystemPrompt,K as getCurrentAgentId,L as getCurrentAgent,P as getAllAgents,h as getAgentById};
|
|
2
|
+
export{f as K,u as L,P as M,h as N,p as O,o as P};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=90F642DB2C9F336C64756E2164756E21
|
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
"/**\n * Agent Manager\n * Manages agent state and operations\n */\n\nimport type { Agent } from '../types/agent.types.js';\nimport { loadAllAgents } from './agent-loader.js';\nimport { DEFAULT_AGENT_ID } from './builtin-agents.js';\n\n/**\n * Agent manager state\n */\ninterface AgentManagerState {\n agents: Map<string, Agent>;\n cwd: string;\n}\n\nlet state: AgentManagerState | null = null;\n\n/**\n * Get the app store (lazy import to avoid circular dependencies)\n */\nlet getAppStore: (() => any) | null = null;\n\n/**\n * Fallback agent when state is not initialized\n */\nconst FALLBACK_AGENT: Agent = {\n id: DEFAULT_AGENT_ID,\n metadata: {\n name: 'Coder',\n description: 'Fallback agent (agent manager not initialized)',\n },\n systemPrompt: 'You are a helpful coding assistant.',\n isBuiltin: true,\n};\n\n/**\n * Set the app store getter (called during initialization)\n */\nexport function setAppStoreGetter(getter: () => any): void {\n getAppStore = getter;\n}\n\n/**\n * Initialize agent manager\n */\nexport async function initializeAgentManager(cwd: string): Promise<void> {\n const allAgents = await loadAllAgents(cwd);\n\n const agentMap = new Map<string, Agent>();\n for (const agent of allAgents) {\n agentMap.set(agent.id, agent);\n }\n\n state = {\n agents: agentMap,\n cwd,\n };\n\n // Initialize store with default agent if store is available\n if (getAppStore) {\n const store = getAppStore();\n if (store.getState) {\n const currentAgentId = store.getState().currentAgentId || DEFAULT_AGENT_ID;\n // Ensure the current agent exists, fallback to default if not\n if (!agentMap.has(currentAgentId)) {\n store.getState().setCurrentAgentId(DEFAULT_AGENT_ID);\n }\n }\n }\n}\n\n/**\n * Get all available agents\n */\nexport function getAllAgents(): Agent[] {\n if (!state) {\n return [FALLBACK_AGENT];\n }\n return Array.from(state.agents.values());\n}\n\n/**\n * Get agent by ID\n */\nexport function getAgentById(id: string): Agent | null {\n if (!state) {\n return id === DEFAULT_AGENT_ID ? FALLBACK_AGENT : null;\n }\n return state.agents.get(id) || null;\n}\n\n/**\n * Get current agent\n */\nexport function getCurrentAgent(): Agent {\n const currentAgentId = getCurrentAgentId();\n\n if (!state) {\n return FALLBACK_AGENT;\n }\n return state.agents.get(currentAgentId) || FALLBACK_AGENT;\n}\n\n/**\n * Get current agent ID\n */\nexport function getCurrentAgentId(): string {\n // Try to get from store first\n if (getAppStore) {\n const store = getAppStore();\n if (store.getState) {\n return store.getState().currentAgentId || DEFAULT_AGENT_ID;\n }\n }\n // Fallback to default\n return DEFAULT_AGENT_ID;\n}\n\n/**\n * Switch to a different agent\n */\nexport function switchAgent(agentId: string): boolean {\n if (!state) {\n return false;\n }\n\n const agent = state.agents.get(agentId);\n if (!agent) {\n return false;\n }\n\n // Update store if available (this triggers reactive updates)\n if (getAppStore) {\n const store = getAppStore();\n if (store.getState) {\n store.getState().setCurrentAgentId(agentId);\n }\n }\n\n return true;\n}\n\n/**\n * Reload agents from disk\n */\nexport async function reloadAgents(): Promise<void> {\n if (!state) {\n return;\n }\n\n const cwd = state.cwd;\n const currentAgentId = getCurrentAgentId();\n\n await initializeAgentManager(cwd);\n\n // Restore current agent if it still exists, otherwise reset to default\n if (state && !state.agents.has(currentAgentId)) {\n if (getAppStore) {\n const store = getAppStore();\n if (store.getState) {\n store.getState().setCurrentAgentId(DEFAULT_AGENT_ID);\n }\n }\n }\n}\n\n/**\n * Get system prompt for current agent\n */\nexport function getCurrentSystemPrompt(): string {\n return getCurrentAgent().systemPrompt;\n}\n"
|
|
8
8
|
],
|
|
9
9
|
"mappings": "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",
|
|
10
|
-
"debugId": "
|
|
10
|
+
"debugId": "90F642DB2C9F336C64756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import{ma as y}from"./chunk-g0qpndpd.js";import"./chunk-01gv4qey.js";import"./chunk-g4baca7p.js";import{Ba as u,Da as v}from"./chunk-67n29s4q.js";import"./chunk-kn908zkk.js";import{Ia as p}from"./chunk-nke51f3c.js";import{Ja as m}from"./chunk-xs370t8p.js";import"./chunk-cv1nhr27.js";import"./chunk-jbd95k1f.js";import"./chunk-4vrj3f8r.js";import"./chunk-3m9whg4q.js";var E=(q=0)=>(V)=>`\x1B[${V+q}m`,T=(q=0)=>(V)=>`\x1B[${38+q};5;${V}m`,A=(q=0)=>(V,z,H)=>`\x1B[${38+q};2;${V};${z};${H}m`,Q={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},J1=Object.keys(Q.modifier),c=Object.keys(Q.color),d=Object.keys(Q.bgColor),K1=[...c,...d];function g(){let q=new Map;for(let[V,z]of Object.entries(Q)){for(let[H,J]of Object.entries(z))Q[H]={open:`\x1B[${J[0]}m`,close:`\x1B[${J[1]}m`},z[H]=Q[H],q.set(J[0],J[1]);Object.defineProperty(Q,V,{value:z,enumerable:!1})}return Object.defineProperty(Q,"codes",{value:q,enumerable:!1}),Q.color.close="\x1B[39m",Q.bgColor.close="\x1B[49m",Q.color.ansi=E(),Q.color.ansi256=T(),Q.color.ansi16m=A(),Q.bgColor.ansi=E(10),Q.bgColor.ansi256=T(10),Q.bgColor.ansi16m=A(10),Object.defineProperties(Q,{rgbToAnsi256:{value(V,z,H){if(V===z&&z===H){if(V<8)return 16;if(V>248)return 231;return Math.round((V-8)/247*24)+232}return 16+36*Math.round(V/255*5)+6*Math.round(z/255*5)+Math.round(H/255*5)},enumerable:!1},hexToRgb:{value(V){let z=/[a-f\d]{6}|[a-f\d]{3}/i.exec(V.toString(16));if(!z)return[0,0,0];let[H]=z;if(H.length===3)H=[...H].map((K)=>K+K).join("");let J=Number.parseInt(H,16);return[J>>16&255,J>>8&255,J&255]},enumerable:!1},hexToAnsi256:{value:(V)=>Q.rgbToAnsi256(...Q.hexToRgb(V)),enumerable:!1},ansi256ToAnsi:{value(V){if(V<8)return 30+V;if(V<16)return 90+(V-8);let z,H,J;if(V>=232)z=((V-232)*10+8)/255,H=z,J=z;else{V-=16;let G=V%36;z=Math.floor(V/36)/5,H=Math.floor(G/6)/5,J=G%6/5}let K=Math.max(z,H,J)*2;if(K===0)return 30;let X=30+(Math.round(J)<<2|Math.round(H)<<1|Math.round(z));if(K===2)X+=60;return X},enumerable:!1},rgbToAnsi:{value:(V,z,H)=>Q.ansi256ToAnsi(Q.rgbToAnsi256(V,z,H)),enumerable:!1},hexToAnsi:{value:(V)=>Q.ansi256ToAnsi(Q.hexToAnsi256(V)),enumerable:!1}}),Q}var i=g(),$=i;import P from"node:process";import a from"node:os";import F from"node:tty";function Z(q,V=globalThis.Deno?globalThis.Deno.args:P.argv){let z=q.startsWith("-")?"":q.length===1?"-":"--",H=V.indexOf(z+q),J=V.indexOf("--");return H!==-1&&(J===-1||H<J)}var{env:U}=P,w;if(Z("no-color")||Z("no-colors")||Z("color=false")||Z("color=never"))w=0;else if(Z("color")||Z("colors")||Z("color=true")||Z("color=always"))w=1;function n(){if("FORCE_COLOR"in U){if(U.FORCE_COLOR==="true")return 1;if(U.FORCE_COLOR==="false")return 0;return U.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(U.FORCE_COLOR,10),3)}}function t(q){if(q===0)return!1;return{level:q,hasBasic:!0,has256:q>=2,has16m:q>=3}}function r(q,{streamIsTTY:V,sniffFlags:z=!0}={}){let H=n();if(H!==void 0)w=H;let J=z?w:H;if(J===0)return 0;if(z){if(Z("color=16m")||Z("color=full")||Z("color=truecolor"))return 3;if(Z("color=256"))return 2}if("TF_BUILD"in U&&"AGENT_NAME"in U)return 1;if(q&&!V&&J===void 0)return 0;let K=J||0;if(U.TERM==="dumb")return K;if(P.platform==="win32"){let X=a.release().split(".");if(Number(X[0])>=10&&Number(X[2])>=10586)return Number(X[2])>=14931?3:2;return 1}if("CI"in U){if(["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some((X)=>(X in U)))return 3;if(["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some((X)=>(X in U))||U.CI_NAME==="codeship")return 1;return K}if("TEAMCITY_VERSION"in U)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(U.TEAMCITY_VERSION)?1:0;if(U.COLORTERM==="truecolor")return 3;if(U.TERM==="xterm-kitty")return 3;if(U.TERM==="xterm-ghostty")return 3;if(U.TERM==="wezterm")return 3;if("TERM_PROGRAM"in U){let X=Number.parseInt((U.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(U.TERM_PROGRAM){case"iTerm.app":return X>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(U.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(U.TERM))return 1;if("COLORTERM"in U)return 1;return K}function _(q,V={}){let z=r(q,{streamIsTTY:q&&q.isTTY,...V});return t(z)}var o={stdout:_({isTTY:F.isatty(1)}),stderr:_({isTTY:F.isatty(2)})},b=o;function k(q,V,z){let H=q.indexOf(V);if(H===-1)return q;let J=V.length,K=0,X="";do X+=q.slice(K,H)+V+z,K=H+J,H=q.indexOf(V,K);while(H!==-1);return X+=q.slice(K),X}function C(q,V,z,H){let J=0,K="";do{let X=q[H-1]==="\r";K+=q.slice(J,X?H-1:H)+V+(X?`\r
|
|
2
|
+
`:`
|
|
3
|
+
`)+z,J=H+1,H=q.indexOf(`
|
|
4
|
+
`,J)}while(H!==-1);return K+=q.slice(J),K}var{stdout:S,stderr:f}=b,N=Symbol("GENERATOR"),D=Symbol("STYLER"),B=Symbol("IS_EMPTY"),h=["ansi","ansi","ansi256","ansi16m"],O=Object.create(null),l=(q,V={})=>{if(V.level&&!(Number.isInteger(V.level)&&V.level>=0&&V.level<=3))throw Error("The `level` option should be an integer from 0 to 3");let z=S?S.level:0;q.level=V.level===void 0?z:V.level};var s=(q)=>{let V=(...z)=>z.join(" ");return l(V,q),Object.setPrototypeOf(V,L.prototype),V};function L(q){return s(q)}Object.setPrototypeOf(L.prototype,Function.prototype);for(let[q,V]of Object.entries($))O[q]={get(){let z=x(this,I(V.open,V.close,this[D]),this[B]);return Object.defineProperty(this,q,{value:z}),z}};O.visible={get(){let q=x(this,this[D],!0);return Object.defineProperty(this,"visible",{value:q}),q}};var Y=(q,V,z,...H)=>{if(q==="rgb"){if(V==="ansi16m")return $[z].ansi16m(...H);if(V==="ansi256")return $[z].ansi256($.rgbToAnsi256(...H));return $[z].ansi($.rgbToAnsi(...H))}if(q==="hex")return Y("rgb",V,z,...$.hexToRgb(...H));return $[z][q](...H)},e=["rgb","hex","ansi256"];for(let q of e){O[q]={get(){let{level:z}=this;return function(...H){let J=I(Y(q,h[z],"color",...H),$.color.close,this[D]);return x(this,J,this[B])}}};let V="bg"+q[0].toUpperCase()+q.slice(1);O[V]={get(){let{level:z}=this;return function(...H){let J=I(Y(q,h[z],"bgColor",...H),$.bgColor.close,this[D]);return x(this,J,this[B])}}}}var V1=Object.defineProperties(()=>{},{...O,level:{enumerable:!0,get(){return this[N].level},set(q){this[N].level=q}}}),I=(q,V,z)=>{let H,J;if(z===void 0)H=q,J=V;else H=z.openAll+q,J=V+z.closeAll;return{open:q,close:V,openAll:H,closeAll:J,parent:z}},x=(q,V,z)=>{let H=(...J)=>q1(H,J.length===1?""+J[0]:J.join(" "));return Object.setPrototypeOf(H,V1),H[N]=q,H[D]=V,H[B]=z,H},q1=(q,V)=>{if(q.level<=0||!V)return q[B]?"":V;let z=q[D];if(z===void 0)return V;let{openAll:H,closeAll:J}=z;if(V.includes("\x1B"))while(z!==void 0)V=k(V,z.close,z.open),z=z.parent;let K=V.indexOf(`
|
|
5
|
+
`);if(K!==-1)V=C(V,J,H,K);return H+V+J};Object.defineProperties(L.prototype,O);var z1=L(),B1=L({level:f?f.level:0});var W=z1;async function H1(q,V){let z=V["default-model"];if(z)return z;try{return(await p(q,V))[0]?.id||null}catch{return null}}async function Y1(q){let V=process.cwd(),z=await u(V);if(z._tag==="Failure")return console.error(W.red("✗ Failed to load AI config")),null;let H=z.value,J=await v(V);if(J.length===0)return console.error(W.yellow(`
|
|
6
|
+
⚠️ No AI provider configured
|
|
7
|
+
`)),console.error(W.dim(`Run: sylphx code (to configure AI)
|
|
8
|
+
`)),null;let K=H.defaultProvider??J[0];if(!K)return console.error(W.yellow(`
|
|
9
|
+
⚠️ No provider configured
|
|
10
|
+
`)),null;let X=H.providers?.[K];if(!X)return console.error(W.yellow(`
|
|
11
|
+
⚠️ Provider not configured
|
|
12
|
+
`)),null;let G=m(K);if(!G.isConfigured(X))return console.error(W.yellow(`
|
|
13
|
+
⚠️ ${G.name} is not properly configured
|
|
14
|
+
`)),console.error(W.dim(`Run: sylphx code (to configure AI)
|
|
15
|
+
`)),null;let M=await y();if(q){let j=await M.getLastSession();if(j)return console.error(W.dim(`Continuing session: ${j.id}`)),console.error(W.dim(`Messages: ${j.messages.length}
|
|
16
|
+
`)),j;console.error(W.yellow(`No previous session found, creating new one
|
|
17
|
+
`))}let R=await H1(K,X);if(!R)return console.error(W.yellow(`
|
|
18
|
+
⚠️ No models available for this provider
|
|
19
|
+
`)),null;return await M.createSession(K,R)}function I1(){console.error(W.red(`
|
|
20
|
+
✗ No text response received from model
|
|
21
|
+
`)),console.error(W.yellow("The model may have called tools but did not generate a final text response.")),console.error(W.yellow(`This usually means:
|
|
22
|
+
`)),console.error(W.dim(" • The current model does not fully support multi-step tool calling")),console.error(W.dim(` • Some models can call tools but cannot process results and respond
|
|
23
|
+
`)),console.error(W.green("Recommended models with full tool support:")),console.error(W.green(" • anthropic/claude-3.5-sonnet")),console.error(W.green(" • anthropic/claude-3.5-haiku")),console.error(W.green(" • openai/gpt-4o")),console.error(W.green(` • google/gemini-2.0-flash-exp
|
|
24
|
+
`)),console.error(W.dim("\uD83D\uDCA1 Tip: Ask questions that don't require tools, or switch to a model above")),console.error(W.dim("To configure: Run `sylphx code` (TUI mode) then type /provider\n"))}export{I1 as showModelToolSupportError,Y1 as getOrCreateSession,H1 as getDefaultModel};
|
|
25
|
+
export{W as V,Y1 as W,I1 as X};
|
|
26
|
+
|
|
27
|
+
//# debugId=36BEE0E4F2AF699364756E2164756E21
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n",
|
|
9
9
|
"/**\n * Session Service\n * Centralized session management for headless mode\n * Uses database for persistence\n */\n\nimport chalk from 'chalk';\nimport { loadAIConfig, getConfiguredProviders } from '../config/ai-config.js';\nimport type { ProviderId, ProviderConfig } from '../config/ai-config.js';\nimport type { Session } from '../types/session.types.js';\nimport { getProvider } from '../providers/index.js';\nimport { fetchModels } from '../utils/ai-model-fetcher.js';\nimport { getSessionRepository } from '../db/database.js';\n\n/**\n * Get default model for a provider\n * Priority: config default-model > first available model\n */\nexport async function getDefaultModel(providerId: ProviderId, providerConfig: ProviderConfig): Promise<string | null> {\n // Try config first\n const configModel = providerConfig['default-model'] as string | undefined;\n if (configModel) {\n return configModel;\n }\n\n // Fetch first available model\n try {\n const models = await fetchModels(providerId, providerConfig);\n return models[0]?.id || null;\n } catch {\n return null;\n }\n}\n\n/**\n * Get or create session for headless mode\n */\nexport async function getOrCreateSession(continueSession: boolean): Promise<Session | null> {\n const cwd = process.cwd();\n const configResult = await loadAIConfig(cwd);\n\n if (configResult._tag === 'Failure') {\n console.error(chalk.red('✗ Failed to load AI config'));\n return null;\n }\n\n const config = configResult.value;\n const configuredProviders = await getConfiguredProviders(cwd);\n\n if (configuredProviders.length === 0) {\n console.error(chalk.yellow('\\n⚠️ No AI provider configured\\n'));\n console.error(chalk.dim('Run: sylphx code (to configure AI)\\n'));\n return null;\n }\n\n const providerId = config.defaultProvider ?? configuredProviders[0];\n if (!providerId) {\n console.error(chalk.yellow('\\n⚠️ No provider configured\\n'));\n return null;\n }\n\n const providerConfig = config.providers?.[providerId];\n if (!providerConfig) {\n console.error(chalk.yellow('\\n⚠️ Provider not configured\\n'));\n return null;\n }\n\n // Check if provider is properly configured\n const provider = getProvider(providerId);\n if (!provider.isConfigured(providerConfig)) {\n console.error(chalk.yellow(`\\n⚠️ ${provider.name} is not properly configured\\n`));\n console.error(chalk.dim('Run: sylphx code (to configure AI)\\n'));\n return null;\n }\n\n // Get session repository\n const repository = await getSessionRepository();\n\n // Try to continue last session\n if (continueSession) {\n const lastSession = await repository.getLastSession();\n if (lastSession) {\n console.error(chalk.dim(`Continuing session: ${lastSession.id}`));\n console.error(chalk.dim(`Messages: ${lastSession.messages.length}\\n`));\n return lastSession;\n }\n console.error(chalk.yellow('No previous session found, creating new one\\n'));\n }\n\n // Get default model (last used or first available)\n const modelName = await getDefaultModel(providerId, providerConfig);\n if (!modelName) {\n console.error(chalk.yellow('\\n⚠️ No models available for this provider\\n'));\n return null;\n }\n\n // Create new session in database\n return await repository.createSession(providerId, modelName);\n}\n\n/**\n * Show error message for models without tool support\n */\nexport function showModelToolSupportError(): void {\n console.error(chalk.red('\\n✗ No text response received from model\\n'));\n console.error(\n chalk.yellow('The model may have called tools but did not generate a final text response.')\n );\n console.error(\n chalk.yellow('This usually means:\\n')\n );\n console.error(chalk.dim(' • The current model does not fully support multi-step tool calling'));\n console.error(chalk.dim(' • Some models can call tools but cannot process results and respond\\n'));\n console.error(chalk.green('Recommended models with full tool support:'));\n console.error(chalk.green(' • anthropic/claude-3.5-sonnet'));\n console.error(chalk.green(' • anthropic/claude-3.5-haiku'));\n console.error(chalk.green(' • openai/gpt-4o'));\n console.error(chalk.green(' • google/gemini-2.0-flash-exp\\n'));\n console.error(chalk.dim('💡 Tip: Ask questions that don\\'t require tools, or switch to a model above'));\n console.error(chalk.dim('To configure: Run `sylphx code` (TUI mode) then type /provider\\n'));\n}\n"
|
|
10
10
|
],
|
|
11
|
-
"mappings": "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",
|
|
12
|
-
"debugId": "
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "36BEE0E4F2AF699364756E2164756E21",
|
|
13
13
|
"names": []
|
|
14
14
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import{E as j,u as Y}from"./chunk-ss51dw5h.js";import{J as I}from"./chunk-d409xn8f.js";import{P as F}from"./chunk-xvfz960r.js";import"./chunk-q4nh3vst.js";import"./chunk-mw13a082.js";import{S as N}from"./chunk-3w6pd43t.js";import"./chunk-s9bsh0gp.js";import"./chunk-g0qpndpd.js";import"./chunk-01gv4qey.js";import"./chunk-g4baca7p.js";import"./chunk-cv1nhr27.js";import"./chunk-jbd95k1f.js";import"./chunk-4vrj3f8r.js";import"./chunk-3m9whg4q.js";import*as D from"node:os";function f(w){let Q=w.filter((J)=>J.status!=="completed"&&J.status!=="removed");if(Q.length===0)return"<todo_reminder>For multi-step tasks, use updateTodos tool</todo_reminder>";let V=[...Q].sort((J,Z)=>{if(J.ordering!==Z.ordering)return J.ordering-Z.ordering;return J.id-Z.id}),X=V.filter((J)=>J.status==="pending"),v=V.filter((J)=>J.status==="in_progress"),W=["<pending_tasks>"];if(v.length>0)W.push("In Progress:"),v.forEach((J)=>W.push(` - [${J.id}] ${J.activeForm}`));if(X.length>0)W.push("Pending:"),X.forEach((J)=>W.push(` - [${J.id}] ${J.content}`));return W.push("</pending_tasks>"),W.join(`
|
|
2
|
+
`)}var _=`You are a helpful coding assistant.
|
|
3
|
+
|
|
4
|
+
You help users with:
|
|
5
|
+
- Programming tasks and code review
|
|
6
|
+
- Debugging and troubleshooting
|
|
7
|
+
- File operations and system tasks
|
|
8
|
+
- Software development best practices
|
|
9
|
+
|
|
10
|
+
Guidelines:
|
|
11
|
+
- Write clean, functional, well-documented code
|
|
12
|
+
- Use tools proactively when needed to complete tasks
|
|
13
|
+
- Explain complex concepts clearly
|
|
14
|
+
- Follow language-specific best practices
|
|
15
|
+
- Test and verify your work when possible`,C="You are Sylphx, an AI development assistant.";function R(){let w=[];w.push(C);try{let Q=I();if(Q)w.push(Q)}catch{}try{let Q=F();w.push(Q)}catch{w.push(_)}return w.join(`
|
|
16
|
+
|
|
17
|
+
`)}var g=_;function d(){let w=new Date().toISOString(),Q=D.totalmem(),V=D.freemem(),v=((Q-V)/1024/1024/1024).toFixed(1),W=(Q/1024/1024/1024).toFixed(1),J=D.cpus(),Z=J.length,z=0,$=0;J.forEach((K)=>{for(let U in K.times)$+=K.times[U];z+=K.times.idle});let B=(100-100*z/$).toFixed(1);return{timestamp:w,cpu:`${B}% (${Z} cores)`,memory:`${v}GB/${W}GB`}}function P(w){return`<system_status>
|
|
18
|
+
Time: ${w.timestamp}
|
|
19
|
+
CPU: ${w.cpu}
|
|
20
|
+
Memory: ${w.memory}
|
|
21
|
+
</system_status>`}function c(w,Q){if(!w||typeof w!=="object")return w;let V={type:"content",value:[]};if(w.type==="content")V.value=w.value;else if(w.type==="text"||w.type==="error-text")V.value.push({type:"text",text:w.value});else if(w.type==="json"||w.type==="error-json")V.value.push({type:"text",text:JSON.stringify(w.value,null,2)});let X=P(Q);return V.value.unshift({type:"text",text:X}),V}function y(w){let Q=w.content;if(typeof Q==="string")w.content=[{type:"text",text:Q}];return w}async function*i(w){let{systemPrompt:Q=R(),model:V,messages:X,abortSignal:v,onStepFinish:W,onPrepareMessages:J,onTransformToolResult:Z}=w,z=X.map(y),$=0,B=1000;while($<B){yield{type:"step-start",stepNumber:$};let K=J?J(z,$):z,{fullStream:U,response:A,finishReason:x,usage:G,content:L}=N({model:V,messages:K,system:Q,tools:j({interactive:Y()}),...v?{abortSignal:v}:{}});for await(let q of U)switch(q.type){case"text-start":yield{type:"text-start"};break;case"text-delta":yield{type:"text-delta",textDelta:q.text};break;case"text-end":yield{type:"text-end"};break;case"reasoning-start":yield{type:"reasoning-start"};break;case"reasoning-delta":yield{type:"reasoning-delta",textDelta:q.text};break;case"reasoning-end":yield{type:"reasoning-end"};break;case"tool-call":yield{type:"tool-call",toolCallId:q.toolCallId,toolName:q.toolName,args:q.input};break;case"tool-input-start":yield{type:"tool-input-start",toolCallId:q.id,toolName:q.toolName};break;case"tool-input-delta":yield{type:"tool-input-delta",toolCallId:q.id,argsTextDelta:q.delta};break;case"tool-input-end":yield{type:"tool-input-end",toolCallId:q.id};break;case"tool-result":yield{type:"tool-result",toolCallId:q.toolCallId,toolName:q.toolName,result:q.output};break;case"finish":yield{type:"finish",finishReason:q.finishReason,usage:{promptTokens:q.totalUsage.inputTokens??0,completionTokens:q.totalUsage.outputTokens??0,totalTokens:q.totalUsage.totalTokens??0}};break;case"error":yield{type:"error",error:q.error instanceof Error?q.error.message:String(q.error)};break;case"tool-error":yield{type:"tool-error",toolCallId:q.toolCallId,toolName:q.toolName,error:q.error instanceof Error?q.error.message:String(q.error)};break;case"abort":yield{type:"abort"};break;default:break}if(W){let q={finishReason:await x,usage:{promptTokens:(await G).inputTokens??0,completionTokens:(await G).outputTokens??0,totalTokens:(await G).totalTokens??0},content:await L};W(q)}let E=(await A).messages;for(let q of E)if(q.role==="tool"&&Z)z.push({...q,content:q.content.map((O)=>({...O,output:Z(O.output,O.toolName)}))});else z.push(q);let H=await x;if(yield{type:"step-end",stepNumber:$,finishReason:H},H!=="tool-calls")break;$++}}export{y as normalizeMessage,c as injectSystemStatusToOutput,d as getSystemStatus,R as getSystemPrompt,j as getAISDKTools,i as createAIStream,f as buildTodoContext,P as buildSystemStatusFromMetadata,g as SYSTEM_PROMPT};export{f as n,d as o,P as p,c as q,i as r};
|
|
22
|
+
|
|
23
|
+
//# debugId=4CED270AC8FA640164756E2164756E21
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/core/ai-sdk.ts", "../src/utils/todo-context.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Sylphx Flow AI SDK\n * Unified AI streaming interface with tool support\n * Content parts based design - own type system with proper conversion\n */\n\nimport { streamText, type AssistantContent, type ModelMessage } from 'ai';\nimport type { LanguageModelV2, LanguageModelV2ToolResultOutput } from '@ai-sdk/provider';\nimport * as os from 'node:os';\nimport { getAISDKTools } from '../tools/index.js';\nimport { hasUserInputHandler } from '../tools/interaction.js';\nimport { getCurrentSystemPrompt } from './agent-manager.js';\nimport { getEnabledRulesContent } from './rule-manager.js';\nimport { buildTodoContext } from '../utils/todo-context.js';\n\n// Legacy system prompt - kept for backwards compatibility and fallback\nconst LEGACY_SYSTEM_PROMPT = `You are a helpful coding assistant.\n\nYou help users with:\n- Programming tasks and code review\n- Debugging and troubleshooting\n- File operations and system tasks\n- Software development best practices\n\nGuidelines:\n- Write clean, functional, well-documented code\n- Use tools proactively when needed to complete tasks\n- Explain complex concepts clearly\n- Follow language-specific best practices\n- Test and verify your work when possible`;\n\n/**\n * Base system prompt - introduces Sylphx\n */\nconst BASE_SYSTEM_PROMPT = `You are Sylphx, an AI development assistant.`;\n\n/**\n * Get the system prompt to use (combines base + rules + agent)\n */\nexport function getSystemPrompt(): string {\n const parts: string[] = [];\n\n // 1. Base prompt (introduces Sylphx)\n parts.push(BASE_SYSTEM_PROMPT);\n\n // 2. Enabled rules (shared across all agents)\n try {\n const rulesContent = getEnabledRulesContent();\n if (rulesContent) {\n parts.push(rulesContent);\n }\n } catch {\n // Rule manager not initialized or no rules enabled\n }\n\n // 3. Agent-specific prompt\n try {\n const agentPrompt = getCurrentSystemPrompt();\n parts.push(agentPrompt);\n } catch {\n // Fallback to legacy if agent manager not initialized\n parts.push(LEGACY_SYSTEM_PROMPT);\n }\n\n return parts.join('\\n\\n');\n}\n\n// Export for backwards compatibility\nexport const SYSTEM_PROMPT = LEGACY_SYSTEM_PROMPT;\n\n/**\n * Stream chunk types (our own)\n */\nexport type TextStartChunk = {\n type: 'text-start';\n};\n\nexport type TextDeltaChunk = {\n type: 'text-delta';\n textDelta: string;\n};\n\nexport type TextEndChunk = {\n type: 'text-end';\n};\n\nexport type ReasoningStartChunk = {\n type: 'reasoning-start';\n};\n\nexport type ReasoningDeltaChunk = {\n type: 'reasoning-delta';\n textDelta: string;\n};\n\nexport type ReasoningEndChunk = {\n type: 'reasoning-end';\n};\n\nexport type ToolCallChunk = {\n type: 'tool-call';\n toolCallId: string;\n toolName: string;\n args: unknown;\n};\n\nexport type ToolInputStartChunk = {\n type: 'tool-input-start';\n toolCallId: string;\n toolName: string;\n};\n\nexport type ToolInputDeltaChunk = {\n type: 'tool-input-delta';\n toolCallId: string;\n argsTextDelta: string;\n};\n\nexport type ToolInputEndChunk = {\n type: 'tool-input-end';\n toolCallId: string;\n};\n\nexport type ToolResultChunk = {\n type: 'tool-result';\n toolCallId: string;\n toolName: string;\n result: unknown;\n};\n\nexport type ToolErrorChunk = {\n type: 'tool-error';\n toolCallId: string;\n toolName: string;\n error: string;\n};\n\nexport type StreamErrorChunk = {\n type: 'error';\n error: string;\n};\n\nexport type AbortChunk = {\n type: 'abort';\n};\n\nexport type FinishChunk = {\n type: 'finish';\n finishReason: string;\n usage: {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n };\n};\n\nexport type StreamChunk =\n | TextStartChunk\n | TextDeltaChunk\n | TextEndChunk\n | ReasoningStartChunk\n | ReasoningDeltaChunk\n | ReasoningEndChunk\n | ToolCallChunk\n | ToolInputStartChunk\n | ToolInputDeltaChunk\n | ToolInputEndChunk\n | ToolResultChunk\n | ToolErrorChunk\n | StreamErrorChunk\n | AbortChunk\n | FinishChunk;\n\n/**\n * Step info (our own)\n */\nexport interface StepInfo {\n finishReason: string;\n usage: {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n };\n content: AssistantContent[];\n}\n\n/**\n * Create AI stream options\n */\nexport interface CreateAIStreamOptions {\n model: LanguageModelV2;\n messages: ModelMessage[];\n systemPrompt?: string;\n /**\n * Optional abort signal to cancel the stream\n */\n abortSignal?: AbortSignal;\n onStepFinish?: (step: StepInfo) => void;\n /**\n * Called before each step to prepare messages\n * Can be used to inject context (e.g., todo list, system status)\n * @param messages - Current message history\n * @param stepNumber - Current step number\n * @returns Modified messages array\n */\n onPrepareMessages?: (messages: ModelMessage[], stepNumber: number) => ModelMessage[];\n /**\n * Called to transform tool result output before saving to history\n * Can be used to inject metadata (e.g., system status, timestamp)\n * @param output - Tool result output\n * @param toolName - Name of the tool\n * @returns Modified output\n */\n onTransformToolResult?: (\n output: LanguageModelV2ToolResultOutput,\n toolName: string\n ) => LanguageModelV2ToolResultOutput;\n}\n\n/**\n * System status object (captured at message creation time)\n *\n * Design: Separation of capture vs construction\n * ==============================================\n *\n * Why we have TWO functions (getSystemStatus + buildSystemStatusFromMetadata):\n *\n * 1. getSystemStatus() - Captures CURRENT system state\n * - Called when creating a NEW message\n * - Returns object { timestamp, cpu, memory }\n * - Stored in SessionMessage.metadata\n * - NEVER called again for historical messages\n *\n * 2. buildSystemStatusFromMetadata() - Constructs string from STORED values\n * - Called when building ModelMessage from SessionMessage\n * - Uses HISTORICAL values from metadata (never current values)\n * - Ensures prompt cache works (historical messages never change)\n *\n * ⚠️ CRITICAL for prompt cache:\n * - Historical messages must be IMMUTABLE\n * - If we use current values, messages change every request → cache miss\n * - Using stored metadata values → messages stay same → cache hit ✅\n *\n * Example timeline:\n * T1: User sends \"hi\"\n * → getSystemStatus() returns { cpu: \"45%\", memory: \"4.2GB\" }\n * → Store in message.metadata\n * T2: User sends \"bye\" (10 minutes later)\n * → getSystemStatus() returns { cpu: \"67%\", memory: \"5.1GB\" } for NEW message\n * → buildSystemStatusFromMetadata(T1.metadata) still returns \"45%, 4.2GB\" for T1 ✅\n * → Prompt cache recognizes T1 message as unchanged → cache hit!\n */\nexport interface SystemStatus {\n timestamp: string; // ISO format\n cpu: string; // e.g., \"45.3% (8 cores)\"\n memory: string; // e.g., \"4.2GB/16.0GB\"\n}\n\n/**\n * Get CURRENT system status (called only when creating NEW messages)\n *\n * ⚠️ IMPORTANT: Never call this for historical messages!\n * Use buildSystemStatusFromMetadata() instead to preserve prompt cache.\n */\nfunction getSystemStatus(): SystemStatus {\n const timestamp = new Date().toISOString();\n\n // Get memory usage\n const totalMem = os.totalmem();\n const freeMem = os.freemem();\n const usedMem = totalMem - freeMem;\n const memUsageGB = (usedMem / 1024 / 1024 / 1024).toFixed(1);\n const totalMemGB = (totalMem / 1024 / 1024 / 1024).toFixed(1);\n\n // Get CPU usage (average load)\n const cpus = os.cpus();\n const cpuCount = cpus.length;\n\n // Calculate average CPU usage from all cores\n let totalIdle = 0;\n let totalTick = 0;\n\n cpus.forEach((cpu) => {\n for (const type in cpu.times) {\n totalTick += cpu.times[type as keyof typeof cpu.times];\n }\n totalIdle += cpu.times.idle;\n });\n\n const cpuUsage = (100 - (100 * totalIdle) / totalTick).toFixed(1);\n\n return {\n timestamp,\n cpu: `${cpuUsage}% (${cpuCount} cores)`,\n memory: `${memUsageGB}GB/${totalMemGB}GB`,\n };\n}\n\n/**\n * Build system status string from STORED metadata (not current values)\n *\n * ⚠️ CRITICAL: This function MUST use the metadata parameter values,\n * NEVER call getSystemStatus() or use current system values!\n *\n * Why: Prompt cache requires historical messages to be immutable.\n * Using stored metadata ensures the same message always produces the same output.\n *\n * Called by:\n * - useChat when building ModelMessage from SessionMessage (historical messages)\n * - Tool result injection (for current step's system status)\n *\n * @param metadata - Stored SystemStatus from SessionMessage.metadata\n * @returns Formatted system status string for LLM\n */\nfunction buildSystemStatusFromMetadata(metadata: SystemStatus): string {\n return `<system_status>\nTime: ${metadata.timestamp}\nCPU: ${metadata.cpu}\nMemory: ${metadata.memory}\n</system_status>`;\n}\n\n/**\n * Inject system status into tool result output\n * Convert all types to content type and prepend system status as text part\n */\nfunction injectSystemStatusToOutput(output: LanguageModelV2ToolResultOutput, systemStatus: SystemStatus): Extract<\n LanguageModelV2ToolResultOutput,\n { type: 'content' }\n> {\n if (!output || typeof output !== 'object') {\n return output;\n }\n\n // Convert to content type if not already\n const content: Extract<\n LanguageModelV2ToolResultOutput,\n { type: 'content' }\n > = {\n type: 'content',\n value: [],\n }\n\n if (output.type === 'content') {\n // Already content type\n content.value = output.value;\n } else if (output.type === 'text' || output.type === 'error-text') {\n content.value.push({\n type: 'text',\n text: output.value,\n });\n } else if (output.type === 'json' || output.type === 'error-json') {\n // Convert JSON to content (stringify)\n content.value.push({\n type: 'text',\n text: JSON.stringify(output.value, null, 2),\n });\n }\n\n // Prepend system status as text part\n const systemStatusString = buildSystemStatusFromMetadata(systemStatus);\n\n content.value.unshift({\n type: 'text',\n text: systemStatusString,\n })\n return content;\n}\n\n/**\n * Normalize content to modern array format\n * Converts legacy string content to Array<TextPart | ImagePart | FilePart | ... >\n */\nfunction normalizeMessage(message: ModelMessage): ModelMessage {\n const content = message.content;\n if (typeof content === 'string') {\n // Legacy string format → convert to TextPart array\n message.content = [\n {\n type: 'text',\n text: content,\n },\n ];\n }\n\n // Already array format (or other object)\n return message;\n}\n\n/**\n * Create AI stream with Sylphx tools pre-configured\n * Uses manual loop to control message history with timestamps\n */\nexport async function* createAIStream(\n options: CreateAIStreamOptions\n): AsyncIterable<StreamChunk> {\n const {\n systemPrompt = getSystemPrompt(),\n model,\n messages: initialMessages,\n abortSignal,\n onStepFinish,\n onPrepareMessages,\n onTransformToolResult,\n } = options;\n\n // Normalize all messages to array format\n let messageHistory = initialMessages.map(normalizeMessage);\n\n let stepNumber = 0;\n const MAX_STEPS = 1000;\n\n while (stepNumber < MAX_STEPS) {\n // Emit step-start event\n yield {\n type: 'step-start' as any,\n stepNumber,\n };\n\n\n // Prepare messages for this step (caller can inject context)\n const preparedMessages = onPrepareMessages\n ? onPrepareMessages(messageHistory, stepNumber)\n : messageHistory;\n\n // Call AI SDK with single step\n const { fullStream, response, finishReason, usage, content } = streamText({\n model,\n messages: preparedMessages,\n system: systemPrompt,\n tools: getAISDKTools({ interactive: hasUserInputHandler() }),\n // Only pass abortSignal if provided (exactOptionalPropertyTypes compliance)\n ...(abortSignal ? { abortSignal } : {}),\n // Don't handle errors here - let them propagate to the caller\n // onError callback is for non-fatal errors, fatal ones should throw\n });\n\n // Stream all chunks to user\n for await (const chunk of fullStream) {\n // DEBUG: Log every chunk\n\n switch (chunk.type) {\n case 'text-start':\n yield { type: 'text-start' };\n break;\n\n case 'text-delta':\n yield { type: 'text-delta', textDelta: chunk.text };\n break;\n\n case 'text-end':\n yield { type: 'text-end' };\n break;\n\n case 'reasoning-start':\n yield { type: 'reasoning-start' };\n break;\n\n case 'reasoning-delta':\n yield { type: 'reasoning-delta', textDelta: chunk.text };\n break;\n\n case 'reasoning-end':\n yield { type: 'reasoning-end' };\n break;\n\n case 'tool-call':\n yield {\n type: 'tool-call',\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n args: chunk.input,\n };\n break;\n\n case 'tool-input-start':\n yield {\n type: 'tool-input-start',\n toolCallId: chunk.id,\n toolName: chunk.toolName,\n };\n break;\n\n case 'tool-input-delta':\n yield {\n type: 'tool-input-delta',\n toolCallId: chunk.id,\n argsTextDelta: chunk.delta,\n };\n break;\n\n case 'tool-input-end':\n yield {\n type: 'tool-input-end',\n toolCallId: chunk.id,\n };\n break;\n\n case 'tool-result':\n yield {\n type: 'tool-result',\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n result: chunk.output,\n };\n break;\n\n case 'finish':\n yield {\n type: 'finish',\n finishReason: chunk.finishReason,\n usage: {\n promptTokens: chunk.totalUsage.inputTokens ?? 0,\n completionTokens: chunk.totalUsage.outputTokens ?? 0,\n totalTokens: chunk.totalUsage.totalTokens ?? 0,\n },\n };\n break;\n\n case 'error':\n yield {\n type: 'error',\n error: chunk.error instanceof Error ? chunk.error.message : String(chunk.error),\n };\n break;\n\n case 'tool-error':\n yield {\n type: 'tool-error',\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n error: chunk.error instanceof Error ? chunk.error.message : String(chunk.error),\n };\n break;\n\n case 'abort':\n yield {\n type: 'abort',\n };\n break;\n\n default:\n break;\n }\n }\n\n // Call onStepFinish callback if provided\n if (onStepFinish) {\n const stepInfo: StepInfo = {\n finishReason: await finishReason,\n usage: {\n promptTokens: (await usage).inputTokens ?? 0,\n completionTokens: (await usage).outputTokens ?? 0,\n totalTokens: (await usage).totalTokens ?? 0,\n },\n content: await content,\n };\n onStepFinish(stepInfo);\n }\n\n // Save LLM response messages to history\n const responseMessages = (await response).messages;\n\n for (const msg of responseMessages) {\n // Transform tool result output if callback provided\n if (msg.role === 'tool' && onTransformToolResult) {\n messageHistory.push({\n ...msg,\n content: msg.content.map((part) => ({\n ...part,\n output: onTransformToolResult(part.output, part.toolName),\n })),\n });\n } else {\n messageHistory.push(msg);\n }\n }\n\n const currentFinishReason = await finishReason;\n\n\n // Emit step-end event\n yield {\n type: 'step-end' as any,\n stepNumber,\n finishReason: currentFinishReason,\n };\n\n // Check if we should continue the loop\n if (currentFinishReason !== 'tool-calls') {\n // No more tool calls, exit loop\n break;\n }\n\n stepNumber++;\n }\n\n}\n\n/**\n * Export helper functions\n */\nexport { getAISDKTools, getSystemStatus, buildSystemStatusFromMetadata, injectSystemStatusToOutput, buildTodoContext, normalizeMessage };\n",
|
|
6
|
+
"/**\n * Todo Context Builder\n * Builds todo reminder context for LLM messages\n */\n\nimport type { Todo } from '../types/todo.types.js';\n\n/**\n * Build todo context string from todos\n */\nexport function buildTodoContext(todos: Todo[]): string {\n // Filter active todos (exclude completed and removed)\n const activeTodos = todos.filter((t) => t.status !== 'completed' && t.status !== 'removed');\n\n // If no active todos, return minimal reminder\n if (activeTodos.length === 0) {\n return '<todo_reminder>For multi-step tasks, use updateTodos tool</todo_reminder>';\n }\n\n // Sort by ordering ASC, id ASC (first added = first to do)\n const sortedTodos = [...activeTodos].sort((a, b) => {\n if (a.ordering !== b.ordering) {\n return a.ordering - b.ordering;\n }\n return a.id - b.id;\n });\n\n const pendingTodos = sortedTodos.filter((t) => t.status === 'pending');\n const inProgressTodos = sortedTodos.filter((t) => t.status === 'in_progress');\n\n const todoLines: string[] = ['<pending_tasks>'];\n\n if (inProgressTodos.length > 0) {\n todoLines.push('In Progress:');\n inProgressTodos.forEach((t) => todoLines.push(` - [${t.id}] ${t.activeForm}`));\n }\n\n if (pendingTodos.length > 0) {\n todoLines.push('Pending:');\n pendingTodos.forEach((t) => todoLines.push(` - [${t.id}] ${t.content}`));\n }\n\n todoLines.push('</pending_tasks>');\n\n return todoLines.join('\\n');\n}\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "4CED270AC8FA640164756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import{r as Z}from"./chunk-yxv7hqse.js";import"./chunk-ss51dw5h.js";import"./chunk-d409xn8f.js";import"./chunk-xvfz960r.js";import"./chunk-q4nh3vst.js";import"./chunk-mw13a082.js";import"./chunk-3w6pd43t.js";import"./chunk-s9bsh0gp.js";import"./chunk-g0qpndpd.js";import"./chunk-01gv4qey.js";import"./chunk-g4baca7p.js";import"./chunk-cv1nhr27.js";import"./chunk-jbd95k1f.js";import"./chunk-4vrj3f8r.js";import{Tb as A,Wb as E}from"./chunk-3m9whg4q.js";function $(z,H=50){if(!z||z.trim().length===0)return"New Chat";let D=X(z);return Y(D,H)}function X(z){return z.trim().replace(/\n+/g," ")}function Y(z,H=50){if(z.length<=H)return z;let D=z.substring(0,H),B=D.lastIndexOf(" "),J=Math.floor(H*0.6);if(B>J)return D.substring(0,B)+"...";return D+"..."}function q(z,H){let D=z||"New Chat",B=new Date(H),J=new Date;if(B.toDateString()===J.toDateString()){let U=B.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"});return`${D} (${U})`}let O=B.toLocaleDateString("en-US",{month:"short",day:"numeric"});return`${D} (${O})`}function w(z){let D=Date.now()-z,B=Math.floor(D/1000),J=Math.floor(B/60),K=Math.floor(J/60),O=Math.floor(K/24);if(B<30)return"just now";else if(B<60)return`${B}s ago`;else if(J<60)return`${J}m ago`;else if(K<24)return`${K}h ago`;else if(O<7)return`${O} ${O===1?"day":"days"} ago`;else{let U=new Date(z);return U.toLocaleDateString("en-US",{month:"short",day:"numeric",year:U.getFullYear()!==new Date().getFullYear()?"numeric":void 0})}}async function Q(z,H,D,B,J){if(!z||z.trim().length===0)return"New Chat";try{let{getProvider:K}=await import("./chunk-xs370t8p.js"),U=K(H).createClient(B,D),_=Z({model:U,messages:[{role:"user",content:`You need to generate a SHORT, DESCRIPTIVE title (maximum 50 characters) for a chat conversation.
|
|
2
|
+
|
|
3
|
+
User's first message: "${z}"
|
|
4
|
+
|
|
5
|
+
Requirements:
|
|
6
|
+
- Summarize the TOPIC or INTENT, don't just copy the message
|
|
7
|
+
- Be concise and descriptive
|
|
8
|
+
- Maximum 50 characters
|
|
9
|
+
- Output ONLY the title, nothing else
|
|
10
|
+
|
|
11
|
+
Examples:
|
|
12
|
+
- Message: "How do I implement authentication?" → Title: "Authentication Implementation"
|
|
13
|
+
- Message: "你好,请帮我修复这个 bug" → Title: "Bug 修复请求"
|
|
14
|
+
- Message: "Can you help me with React hooks?" → Title: "React Hooks Help"
|
|
15
|
+
|
|
16
|
+
Now generate the title:`}]}),W="";for await(let V of _)if(V.type==="text-delta"&&V.textDelta)W+=V.textDelta,J(V.textDelta);let F=W.trim();return F=F.replace(/^["'「『]+|["'」』]+$/g,""),F=F.replace(/^(Title:|标题:)\s*/i,""),F=F.replace(/\n+/g," "),F=F.trim(),F.length>50?F.substring(0,50)+"...":F}catch(K){return generateSessionTitle(z)}}export{Y as truncateTitle,Q as generateSessionTitleWithStreaming,$ as generateSessionTitle,q as formatSessionDisplay,w as formatRelativeTime,X as cleanTitle};
|
|
17
|
+
export{$ as l,Q as m};
|
|
18
|
+
|
|
19
|
+
//# debugId=C1E6EF4D915BD17A64756E2164756E21
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/features/session/utils/title.ts", "../src/utils/session-title.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Session Title Utils\n * Pure functions for session title generation and formatting\n */\n\n/**\n * Generate a session title from the first user message\n * Takes the first 50 characters and adds ellipsis if truncated\n * Pure function - no side effects\n */\nexport function generateSessionTitle(firstMessage: string, maxLength = 50): string {\n if (!firstMessage || firstMessage.trim().length === 0) {\n return 'New Chat';\n }\n\n // Remove leading/trailing whitespace and normalize newlines\n const cleaned = cleanTitle(firstMessage);\n\n // Truncate to maxLength\n return truncateTitle(cleaned, maxLength);\n}\n\n/**\n * Clean title text\n * Removes leading/trailing whitespace and normalizes newlines to spaces\n */\nexport function cleanTitle(title: string): string {\n return title.trim().replace(/\\n+/g, ' ');\n}\n\n/**\n * Truncate title to max length\n * Tries to break at word boundaries when possible\n */\nexport function truncateTitle(title: string, maxLength = 50): string {\n if (title.length <= maxLength) {\n return title;\n }\n\n // Find last space before maxLength to avoid cutting words\n const truncated = title.substring(0, maxLength);\n const lastSpace = truncated.lastIndexOf(' ');\n\n // If there's a space in reasonable range (> 60% of maxLength), cut there\n const minReasonableLength = Math.floor(maxLength * 0.6);\n\n if (lastSpace > minReasonableLength) {\n return truncated.substring(0, lastSpace) + '...';\n }\n\n // Otherwise just truncate and add ellipsis\n return truncated + '...';\n}\n\n/**\n * Remove common title prefixes and quotes\n * Used to clean AI-generated titles\n */\nexport function removeQuotes(title: string): string {\n // Remove matching leading/trailing quotes (English, Chinese, Japanese)\n // Only remove if quotes appear at BOTH start and end\n let result = title;\n\n // Try to remove matching pairs of quotes\n const quotesPairs = [\n ['\"', '\"'],\n [\"'\", \"'\"],\n ['「', '」'],\n ['『', '』'],\n ];\n\n for (const [open, close] of quotesPairs) {\n // Keep removing matching pairs as long as they exist\n while (result.startsWith(open) && result.endsWith(close) && result.length > 1) {\n result = result.slice(open.length, -close.length);\n }\n }\n\n return result;\n}\n\n/**\n * Remove common \"Title:\" prefixes\n */\nexport function removeTitlePrefix(title: string): string {\n return title.replace(/^(Title:|标题:)\\s*/i, '');\n}\n\n/**\n * Clean AI-generated title\n * Removes quotes, prefixes, extra whitespace\n */\nexport function cleanAITitle(title: string, maxLength = 50): string {\n let cleaned = title.trim();\n\n // Remove quotes and prefixes iteratively until no more changes\n let previous = '';\n while (previous !== cleaned) {\n previous = cleaned;\n cleaned = removeTitlePrefix(cleaned);\n cleaned = removeQuotes(cleaned);\n }\n\n // Replace newlines with spaces\n cleaned = cleaned.replace(/\\n+/g, ' ');\n\n // Remove extra whitespace\n cleaned = cleaned.replace(/\\s+/g, ' ').trim();\n\n // Truncate if needed\n return truncateTitle(cleaned, maxLength);\n}\n\n/**\n * Format session title for display with timestamp\n * Returns \"Title (HH:MM)\" for today, \"Title (Mon DD)\" for other dates\n */\nexport function formatSessionDisplay(title: string | undefined, created: number): string {\n const displayTitle = title || 'New Chat';\n const date = new Date(created);\n const now = new Date();\n\n // Show time if today, otherwise show date\n const isToday = date.toDateString() === now.toDateString();\n\n if (isToday) {\n const timeStr = date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n });\n return `${displayTitle} (${timeStr})`;\n }\n\n const dateStr = date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n });\n return `${displayTitle} (${dateStr})`;\n}\n\n/**\n * Format relative time for session display\n * Returns \"just now\", \"5m ago\", \"2h ago\", \"3 days ago\", etc.\n */\nexport function formatRelativeTime(timestamp: number): string {\n const now = Date.now();\n const diff = now - timestamp;\n\n const seconds = Math.floor(diff / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (seconds < 30) {\n return 'just now';\n } else if (seconds < 60) {\n return `${seconds}s ago`;\n } else if (minutes < 60) {\n return `${minutes}m ago`;\n } else if (hours < 24) {\n return `${hours}h ago`;\n } else if (days < 7) {\n return `${days} ${days === 1 ? 'day' : 'days'} ago`;\n } else {\n // For older sessions, show date\n const date = new Date(timestamp);\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: date.getFullYear() !== new Date().getFullYear() ? 'numeric' : undefined,\n });\n }\n}\n\n/**\n * Check if title needs truncation\n */\nexport function needsTruncation(title: string, maxLength = 50): boolean {\n return title.length > maxLength;\n}\n\n/**\n * Validate title\n * Returns true if title is valid (not empty, not too long)\n */\nexport function isValidTitle(title: string, maxLength = 100): boolean {\n const trimmed = title.trim();\n return trimmed.length > 0 && trimmed.length <= maxLength;\n}\n\n/**\n * Get title length\n * Returns length after trimming\n */\nexport function getTitleLength(title: string): number {\n return title.trim().length;\n}\n\n/**\n * Compare titles for sorting\n * Case-insensitive alphabetical comparison\n */\nexport function compareTitles(a: string, b: string): number {\n return a.toLowerCase().localeCompare(b.toLowerCase());\n}\n\n/**\n * Extract title from message content\n * Takes first line or first N characters\n */\nexport function extractTitleFromMessage(message: string, maxLength = 50): string {\n // Take first line\n const firstLine = message.split('\\n')[0];\n\n // Clean and truncate\n return generateSessionTitle(firstLine, maxLength);\n}\n",
|
|
6
|
+
"/**\n * Session Title Generation Utility\n * Re-exports pure functions from feature and adds streaming functionality\n */\n\nimport { createAIStream } from '../core/ai-sdk.js';\nimport type { ProviderId } from '../types/config.types.js';\n\n// Re-export pure functions from feature\nexport {\n generateSessionTitle,\n formatSessionDisplay,\n formatRelativeTime,\n cleanTitle,\n truncateTitle,\n} from '../features/session/utils/title.js';\n\n/**\n * Generate a session title using LLM with streaming\n */\nexport async function generateSessionTitleWithStreaming(\n firstMessage: string,\n provider: ProviderId,\n modelName: string,\n providerConfig: any,\n onChunk: (chunk: string) => void\n): Promise<string> {\n if (!firstMessage || firstMessage.trim().length === 0) {\n return 'New Chat';\n }\n\n try {\n // Get the provider instance and create the model\n const { getProvider } = await import('../providers/index.js');\n const providerInstance = getProvider(provider);\n const model = providerInstance.createClient(providerConfig, modelName);\n\n const streamGenerator = createAIStream({\n model,\n messages: [\n {\n role: 'user',\n content: `You need to generate a SHORT, DESCRIPTIVE title (maximum 50 characters) for a chat conversation.\n\nUser's first message: \"${firstMessage}\"\n\nRequirements:\n- Summarize the TOPIC or INTENT, don't just copy the message\n- Be concise and descriptive\n- Maximum 50 characters\n- Output ONLY the title, nothing else\n\nExamples:\n- Message: \"How do I implement authentication?\" → Title: \"Authentication Implementation\"\n- Message: \"你好,请帮我修复这个 bug\" → Title: \"Bug 修复请求\"\n- Message: \"Can you help me with React hooks?\" → Title: \"React Hooks Help\"\n\nNow generate the title:`,\n },\n ],\n });\n\n let fullTitle = '';\n\n // Iterate the async generator and stream to UI\n for await (const chunk of streamGenerator) {\n if (chunk.type === 'text-delta' && chunk.textDelta) {\n fullTitle += chunk.textDelta;\n onChunk(chunk.textDelta);\n }\n }\n\n // Clean up title\n let cleaned = fullTitle.trim();\n cleaned = cleaned.replace(/^[\"'「『]+|[\"'」』]+$/g, ''); // Remove quotes\n cleaned = cleaned.replace(/^(Title:|标题:)\\s*/i, ''); // Remove \"Title:\" prefix\n cleaned = cleaned.replace(/\\n+/g, ' '); // Replace newlines with spaces\n cleaned = cleaned.trim();\n\n // Return truncated if needed\n return cleaned.length > 50 ? cleaned.substring(0, 50) + '...' : cleaned;\n } catch (error) {\n // Fallback to simple title generation on any error\n return generateSessionTitle(firstMessage);\n }\n}\n\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "yhBAUO,GAAS,LAAoB,LAAC,JAAsB,JAAY,HAAY,LACjF,HAAI,LAAC,HAAgB,JAAa,DAAK,JAAE,GAAW,EAClD,MAAO,WAIT,IAAM,EAAU,EAAW,CAAY,EAGvC,OAAO,EAAc,EAAS,CAAS,EAOlC,SAAS,CAAU,CAAC,EAAuB,CAChD,OAAO,EAAM,KAAK,EAAE,QAAQ,OAAQ,GAAG,EAOlC,SAAS,CAAa,CAAC,EAAe,EAAY,GAAY,CACnE,GAAI,EAAM,QAAU,EAClB,OAAO,EAIT,IAAM,EAAY,EAAM,UAAU,EAAG,CAAS,EACxC,EAAY,EAAU,YAAY,GAAG,EAGrC,EAAsB,KAAK,MAAM,EAAY,GAAG,EAEtD,GAAI,EAAY,EACd,OAAO,EAAU,UAAU,EAAG,CAAS,EAAI,MAI7C,OAAO,EAAY,MAkEd,SAAS,CAAoB,CAAC,EAA2B,EAAyB,CACvF,IAAM,EAAe,GAAS,WACxB,EAAO,IAAI,KAAK,CAAO,EACvB,EAAM,IAAI,KAKhB,GAFgB,EAAK,aAAa,IAAM,EAAI,aAAa,EAE5C,CACX,IAAM,EAAU,EAAK,mBAAmB,QAAS,CAC/C,KAAM,UACN,OAAQ,SACV,CAAC,EACD,MAAO,GAAG,MAAiB,KAG7B,IAAM,EAAU,EAAK,mBAAmB,QAAS,CAC/C,MAAO,QACP,IAAK,SACP,CAAC,EACD,MAAO,GAAG,MAAiB,KAOtB,SAAS,CAAkB,CAAC,EAA2B,CAE5D,IAAM,EADM,KAAK,IAAI,EACF,EAEb,EAAU,KAAK,MAAM,EAAO,IAAI,EAChC,EAAU,KAAK,MAAM,EAAU,EAAE,EACjC,EAAQ,KAAK,MAAM,EAAU,EAAE,EAC/B,EAAO,KAAK,MAAM,EAAQ,EAAE,EAElC,GAAI,EAAU,GACZ,MAAO,WACF,QAAI,EAAU,GACnB,MAAO,GAAG,SACL,QAAI,EAAU,GACnB,MAAO,GAAG,SACL,QAAI,EAAQ,GACjB,MAAO,GAAG,SACL,QAAI,EAAO,EAChB,MAAO,GAAG,KAAQ,IAAS,EAAI,MAAQ,aAClC,KAEL,IAAM,EAAO,IAAI,KAAK,CAAS,EAC/B,OAAO,EAAK,mBAAmB,QAAS,CACtC,MAAO,QACP,IAAK,UACL,KAAM,EAAK,YAAY,IAAM,IAAI,KAAK,EAAE,YAAY,EAAI,UAAY,MACtE,CAAC,GCtJL,eAAsB,CAAiC,CACrD,EACA,EACA,EACA,EACA,EACiB,CACjB,GAAI,CAAC,GAAgB,EAAa,KAAK,EAAE,SAAW,EAClD,MAAO,WAGT,GAAI,CAEF,IAAQ,eAAgB,KAAa,+BAE/B,EADmB,EAAY,CAAQ,EACd,aAAa,EAAgB,CAAS,EAE/D,EAAkB,EAAe,CACrC,QACA,SAAU,CACR,CACE,KAAM,OACN,QAAS;AAAA;AAAA,yBAEM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAcjB,CACF,CACF,CAAC,EAEG,EAAY,GAGhB,cAAiB,KAAS,EACxB,GAAI,EAAM,OAAS,cAAgB,EAAM,UACvC,GAAa,EAAM,UACnB,EAAQ,EAAM,SAAS,EAK3B,IAAI,EAAU,EAAU,KAAK,EAO7B,OANA,EAAU,EAAQ,QAAQ,qBAAqB,EAAE,EACjD,EAAU,EAAQ,QAAQ,oBAAoB,EAAE,EAChD,EAAU,EAAQ,QAAQ,OAAQ,GAAG,EACrC,EAAU,EAAQ,KAAK,EAGhB,EAAQ,OAAS,GAAK,EAAQ,UAAU,EAAG,EAAE,EAAI,MAAQ,EAChE,MAAO,EAAO,CAEd,OAAO,qBAAqB,CAAY",
|
|
9
|
+
"debugId": "C1E6EF4D915BD17A64756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|