@jungtz/chat-kit 0.3.0 → 0.3.1

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/index.js CHANGED
@@ -1 +1 @@
1
- import{streamText as e,stepCountIs as t}from"ai";export{CHAT_KIT_OPTIONS_KEY,DEFAULT_ANTHROPIC_MAX_OUTPUT_TOKENS,DEFAULT_COOLDOWN_MS,DEFAULT_PROTOCOL,GOOGLE_DEFAULT_BASE_URL,MAX_COOLDOWN_MS,PROTOCOL_ALIASES,consoleLogger,createFallbackModel,createKeyRing,createLanguageModel,createModelFromConfig,createRoutedModel,defaultKeyRing,isOpenCodeEndpoint,isQuotaError,listModels,maskApiKey,normalizeApiKeyList,normalizeBaseURL,normalizeModelConfig,normalizeProtocol,openCodeHeaders,parseModelSpec,reasoningOptions,reasoningProviderOptions,resolveModelChain,resolveModelTarget,resolveProtocol,resolveProviderApiKeys,retryAfterMsFromError}from"./models/index.js";const n={authoritative:"AUTHORITATIVE",reference:"REFERENCE",realtime:"REALTIME"};function o(e,t){return`[${n[e]}: ${t}]`}function r(e){return`[END ${n[e]}]`}const s={names:Object.values(n)};function a(e=[]){const t=[...s.names];for(const n of e){const e="string"==typeof n?n.trim():"";if(!e)throw new Error("[chat-kit/prompt] 自訂標記名稱不得為空");if(/^END\s/i.test(e))throw new Error(`[chat-kit/prompt] 自訂標記名稱不要帶 END 前綴(結尾變體會自動涵蓋):${e}`);if(/[\][\n]/.test(e))throw new Error(`[chat-kit/prompt] 自訂標記名稱不得含方括號或換行:${e}`);t.some(t=>t.toLowerCase()===e.toLowerCase())||t.push(e)}return{names:t}}function i(e){return[...e.names].sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\s+/g,String.raw`\s+`)).join("|")}const l=String.raw`(?![A-Za-z0-9_])`,c=String.raw`[^\][\n]*)(?:(\])|(?=\[)|(?=\n)|$)`;function u(e=s){return new RegExp(String.raw`\[\s*((?:END\s+)?(?:${i(e)})${l}${c}`,"gi")}function p(e=s){const t=i(e),n=String.raw`[^\][\n]*(?:\]|(?=\[)|(?=\n)|$)`;return new RegExp(String.raw`\[\s*(?!END\s)(?:${t})${l}${n}[\s\S]*?\[\s*END\s+(?:${t})${l}${n}`,"gi")}const m=/\{\{\s*([A-Za-z0-9_]+)\s*\}\}/g;function d(e,t={}){const n=new Set,o=e.replace(m,(e,o)=>Object.prototype.hasOwnProperty.call(t,o)?t[o]:(n.add(o),e));if(n.size>0)throw new Error(`[chat-kit/prompt] 提示詞有未展開的佔位符:${[...n].join(", ")}`);return o}function g(e){const t=new Set;for(const n of e){if(t.has(n.key))throw new Error(`[chat-kit/prompt] 上下文區塊 key 重複:${n.key}`);t.add(n.key)}return e.filter(e=>e.content.trim().length>0).slice().sort((e,t)=>e.order-t.order||(e.key<t.key?-1:e.key>t.key?1:0))}function f(e){return"raw"===e.format?e.content:`${o(e.trust,e.title)}\n${e.content}\n${r(e.trust)}`}const h=({blocks:e,message:t})=>e?`${e}\n\n${t}`:t;function y(e){const{spec:t,channel:n,userMessage:o}=e,r=g(e.blocks),s=r.filter(e=>"system"===e.placement),a=r.filter(e=>"user"===e.placement);return{system:[...[...t.parts,...t.channelParts?.[n]??[]].map(e=>d(e,t.placeholders)),...e.extraSystem??[],...s.map(f)].filter(e=>e.trim().length>0).join("\n\n"),userMessage:(t.composeUserMessage??h)({blocks:a.map(f).join("\n\n"),message:o}),injectedKeys:r.map(e=>e.key),blocks:r}}function k(e,t=s){let n=0;return{text:e.replace(u(t),(e,t,o)=>(n++,`[${t}${o?"]":""}`)),neutralized:n}}const w={name:"strip-markers",transform:(e,t)=>e.replace(u(t.markers),"")},E=24,x={name:"strip-echoed-context",beforeBuiltins:!0,transform(e,t){let n=e.replace(p(t.markers),"");for(const e of t.blocks){const t=e.content.trim();t.length>=24&&(n=n.split(t).join(""))}return n}};function b(e){const t=[];for(const n of e)n&&n.trim()&&t.push(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi"));return t.push(/\b(?:gemma|qwen|llama|claude|gpt|gemini|mistral|deepseek|chatgpt|copilot)[\w\-_.:]*/gi),t.push(/(?:我[是叫]|本人是|身為|身為一個?)\s*[\w\-_.:]{2,40}\s*(?:AI|助手|模型|語言模型|LLM|機器人)/gi),t.push(/(?:由|基於|透過|使用)\s*[\w\-_.:]{2,40}\s*(?:訓練|開發|構建|創建|研發|支持|驅動|賦能)/gi),t.push(/(?:作為|身為|身为|作為一個?)\s*(?:一個?\s*)?(?:AI|人工智慧|人工智能|LLM)(?:\s*(?:大型)?(?:語言|對話|生成)?模型)?/gi),t.push(/(?:AI|人工智慧|人工智能)\s*(?:大型)?(?:語言|對話)?模型/gi),t.push(/\bas an?\s+(?:AI|artificial intelligence|language model|LLM|assistant)\b/gi),t.push(/(?:我的|本|此)\s*(?:版本|模型|名字|名稱|身份)\s*(?:是|為|:)\s*[\w\-_.:]{2,40}/gi),{name:"self-intro",transform(e){let n=e;for(const e of t)n=n.replace(e,"");return n.replace(/[ \t]{2,}/g," ").replace(/\n[ \t]+/g,"\n").replace(/\n{3,}/g,"\n\n").trim()}}}function O(e,t,n){let o=e;for(const e of t)e.transform&&(o=e.transform(o,n));return o}const T=3,$=[w];function v(e,t,n){let o=e;const r=[];for(const e of t){if(!e.transform)continue;const t=e.transform(o,n);t!==o&&r.push(e.name),o=t}return{text:o,changed:r}}function S(e,t){return t<=1?e:async n=>{const o=await(e?.(n))??void 0;return n.stepNumber<t-1||void 0!==o?.toolChoice?o:{...o,toolChoice:"none"}}}function A(n){const{domains:o}=n,r=a(n.markers);async function*s(n){const s=o[n.domain];if(!s)throw new Error(`[chat-kit/engine] 未註冊的 domain:${n.domain}`);!function(e){const t=e[e.length-1];if(!t||"user"!==t.role)throw new Error("[chat-kit/engine] messages 的最後一則必須是 user");if(!t.content.trim())throw new Error("[chat-kit/engine] 使用者訊息不得為空")}(n.messages);let a=0;const i=n.messages.map(e=>{if("user"!==e.role)return e;const t=k(e.content,r);return a+=t.neutralized,{...e,content:t.text}});a>0&&(yield{type:"guard",name:"neutralize-markers",action:"neutralized",detail:`${a} 個標記`});const l=i[i.length-1].content,c={domain:n.domain,channel:n.channel,messages:i,userMessage:l,...void 0!==n.tenantId?{tenantId:n.tenantId}:{},...void 0!==n.entity?{entity:n.entity}:{},...void 0!==n.signal?{signal:n.signal}:{}};let u,p,m,d=[];try{u="function"==typeof s.prompt?await s.prompt(c):s.prompt;const e=await(s.buildContext?.(c))??[];p=y({spec:u,channel:n.channel,blocks:e,extraSystem:i.filter(e=>"system"===e.role).map(e=>e.content),userMessage:l}),m=await(s.tools?.(c));const t=s.outputGuards;d="function"==typeof t?await t(c):t??[]}catch(e){return void(yield{type:"error",error:e})}yield{type:"context",injectedKeys:p.injectedKeys};const g=i.filter(e=>"system"!==e.role).map((e,t,n)=>t===n.length-1?{role:"user",content:p.userMessage}:{role:e.role,content:e.content}),f=!!m&&Object.keys(m).length>0,h=(s.maxToolSteps??3)+1,w=n.modelOptions??{},E=e({model:n.model,system:p.system,messages:g,maxRetries:0,...f?{tools:m,stopWhen:t(h)}:{},...f?{prepareStep:S(s.prepareStep,h)}:{},...void 0!==w.temperature?{temperature:w.temperature}:{},...void 0!==w.maxOutputTokens?{maxOutputTokens:w.maxOutputTokens}:{},...void 0!==w.providerOptions?{providerOptions:w.providerOptions}:{},...void 0!==w.timeout?{timeout:w.timeout}:{},...n.signal?{abortSignal:n.signal}:{},onError:()=>{}}),x=[...d.filter(e=>e.beforeBuiltins),...$,...d.filter(e=>!e.beforeBuiltins)],b={modelId:(O=n.model,"string"==typeof O?O:O.modelId),channel:n.channel,turn:c,blocks:p.blocks,markers:r,model:n.model,system:p.system,conversation:g,modelOptions:w,...n.signal?{signal:n.signal}:{}};var O;let T="",A=0,L="unknown",M=null,_=!1;for await(const e of E.fullStream){switch(e.type){case"text-delta":{T+=e.text;const{text:t}=v(T,x,b);t.length>A&&(yield{type:"content",text:t.slice(A)},A=t.length);break}case"reasoning-delta":e.text&&(yield{type:"thinking",text:e.text});break;case"tool-call":yield{type:"tool-call",toolName:e.toolName,input:e.input};break;case"tool-result":yield{type:"tool-result",toolName:e.toolName,output:e.output};break;case"error":_=!0,yield{type:"error",error:e.error};break;case"abort":_=!0,yield{type:"error",error:new Error("[chat-kit/engine] 串流已中止"+(e.reason?`:${e.reason}`:""))};break;case"finish":L=e.finishReason,M={inputTokens:e.totalUsage.inputTokens,outputTokens:e.totalUsage.outputTokens,reasoningTokens:e.totalUsage.outputTokenDetails?.reasoningTokens,totalTokens:e.totalUsage.totalTokens}}if(_)break}if(M&&(yield{type:"usage",usage:M}),_)return;const{text:N,changed:R}=v(T,x,b);for(const e of R)yield{type:"guard",name:e,action:"transformed"};let C=N,I=!1;for(const e of x){if(!e.check)continue;const t=await e.check(C,b);"rewrite"===t.action&&"string"==typeof t.text&&t.text!==C?(C=t.text,I=!0,yield{type:"guard",name:e.name,action:"rewrite",...t.reason?{detail:t.reason}:{}}):"pass"===t.action&&t.reason&&(yield{type:"guard",name:e.name,action:"observed",detail:t.reason})}yield{type:"done",text:C,rewritten:I,finishReason:L}}return{runTurn:s,completeTurn:async function(e){const t={text:"",thinking:"",rewritten:!1,finishReason:"unknown",usage:null,toolCalls:[],guards:[],injectedKeys:[]};for await(const n of s(e))switch(n.type){case"context":t.injectedKeys=n.injectedKeys;break;case"thinking":t.thinking+=n.text;break;case"tool-call":t.toolCalls.push({toolName:n.toolName,input:n.input});break;case"tool-result":{const e=[...t.toolCalls].reverse().find(e=>e.toolName===n.toolName&&!("output"in e));e&&(e.output=n.output);break}case"guard":t.guards.push({name:n.name,action:n.action,...n.detail?{detail:n.detail}:{}});break;case"usage":t.usage=n.usage;break;case"error":throw n.error;case"done":t.text=n.text,t.rewritten=n.rewritten,t.finishReason=n.finishReason}return t}}}const L="(System note: empty user initiation)";function M(e,t={}){const{leadingUserText:n=L,separator:o="\n\n"}=t,r=[];let s;for(const t of e){if("system"===t.role){r.push({...t});continue}if(s&&s.role===t.role){s.content+=`${o}${t.content}`;continue}if(!s&&"assistant"===t.role){const e={role:"user",content:n};r.push(e),s=e}const e={...t};r.push(e),s=e}return r}export{L as DEFAULT_LEADING_USER_TEXT,s as DEFAULT_MARKER_SET,T as DEFAULT_MAX_TOOL_STEPS,E as ECHO_MIN_CHARS,n as TRUST_LABELS,O as applyTransforms,y as assemblePrompt,p as blockPattern,r as closeMarker,A as createChatEngine,a as createMarkerSet,d as expandPlaceholders,u as markerPattern,k as neutralizeMarkers,M as normalizeHistory,o as openMarker,g as orderBlocks,f as renderBlock,b as selfIntroGuard,x as stripEchoedContextGuard,w as stripMarkersGuard};//# sourceMappingURL=index.js.map
1
+ import{streamText as e,stepCountIs as t}from"ai";export{CHAT_KIT_OPTIONS_KEY,DEFAULT_ANTHROPIC_MAX_OUTPUT_TOKENS,DEFAULT_COOLDOWN_MS,DEFAULT_PROTOCOL,GOOGLE_DEFAULT_BASE_URL,MAX_COOLDOWN_MS,PROTOCOL_ALIASES,consoleLogger,createFallbackModel,createKeyRing,createLanguageModel,createModelFromConfig,createRoutedModel,defaultKeyRing,isOpenCodeEndpoint,isQuotaError,listModels,maskApiKey,normalizeApiKeyList,normalizeBaseURL,normalizeModelConfig,normalizeProtocol,openCodeHeaders,parseModelSpec,reasoningOptions,reasoningProviderOptions,resolveModelChain,resolveModelTarget,resolveProtocol,resolveProviderApiKeys,retryAfterMsFromError}from"./models/index.js";const n={authoritative:"AUTHORITATIVE",reference:"REFERENCE",realtime:"REALTIME"};function o(e,t){return`[${n[e]}: ${t}]`}function r(e){return`[END ${n[e]}]`}const s={names:Object.values(n)};function a(e=[]){const t=[...s.names];for(const n of e){const e="string"==typeof n?n.trim():"";if(!e)throw new Error("[chat-kit/prompt] 自訂標記名稱不得為空");if(/^END\s/i.test(e))throw new Error(`[chat-kit/prompt] 自訂標記名稱不要帶 END 前綴(結尾變體會自動涵蓋):${e}`);if(/[\][\n]/.test(e))throw new Error(`[chat-kit/prompt] 自訂標記名稱不得含方括號或換行:${e}`);t.some(t=>t.toLowerCase()===e.toLowerCase())||t.push(e)}return{names:t}}function i(e){return[...e.names].sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\s+/g,String.raw`\s+`)).join("|")}const l=String.raw`(?![A-Za-z0-9_])`,c=String.raw`[^\][\n]*)(?:(\])|(?=\[)|(?=\n)|$)`,u=String.raw`[^\][\n]*)(?:(\])|(?=\n)|$)`;function p(e=s,t="input"){const n="output"===t?u:c;return new RegExp(String.raw`\[\s*((?:END\s+)?(?:${i(e)})${l}${n}`,"gi")}function m(e=s){const t=i(e),n=String.raw`[^\][\n]*(?:\]|(?=\[)|(?=\n)|$)`;return new RegExp(String.raw`\[\s*(?!END\s)(?:${t})${l}${n}[\s\S]*?\[\s*END\s+(?:${t})${l}${n}`,"gi")}const g=/\{\{\s*([A-Za-z0-9_]+)\s*\}\}/g;function d(e,t={}){const n=new Set,o=e.replace(g,(e,o)=>Object.prototype.hasOwnProperty.call(t,o)?t[o]:(n.add(o),e));if(n.size>0)throw new Error(`[chat-kit/prompt] 提示詞有未展開的佔位符:${[...n].join(", ")}`);return o}function f(e){const t=new Set;for(const n of e){if(t.has(n.key))throw new Error(`[chat-kit/prompt] 上下文區塊 key 重複:${n.key}`);t.add(n.key)}return e.filter(e=>e.content.trim().length>0).slice().sort((e,t)=>e.order-t.order||(e.key<t.key?-1:e.key>t.key?1:0))}function y(e){return"raw"===e.format?e.content:`${o(e.trust,e.title)}\n${e.content}\n${r(e.trust)}`}const h=({blocks:e,message:t})=>e?`${e}\n\n${t}`:t;function k(e){const{spec:t,channel:n,userMessage:o}=e,r=f(e.blocks),s=r.filter(e=>"system"===e.placement),a=r.filter(e=>"user"===e.placement);return{system:[...[...t.parts,...t.channelParts?.[n]??[]].map(e=>d(e,t.placeholders)),...e.extraSystem??[],...s.map(y)].filter(e=>e.trim().length>0).join("\n\n"),userMessage:(t.composeUserMessage??h)({blocks:a.map(y).join("\n\n"),message:o}),injectedKeys:r.map(e=>e.key),blocks:r}}function w(e,t=s){let n=0;return{text:e.replace(p(t),(e,t,o)=>(n++,`[${t}${o?"]":""}`)),neutralized:n}}const E={name:"strip-markers",transform:(e,t)=>e.replace(p(t.markers,"output"),"")},b=24,$={name:"strip-echoed-context",beforeBuiltins:!0,transform(e,t){let n=e.replace(m(t.markers),"");for(const e of t.blocks){const t=e.content.trim();t.length>=24&&(n=n.split(t).join(""))}return n}};function x(e){const t=[];for(const n of e)n&&n.trim()&&t.push(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi"));return t.push(/\b(?:gemma|qwen|llama|claude|gpt|gemini|mistral|deepseek|chatgpt|copilot)[\w\-_.:]*/gi),t.push(/(?:我[是叫]|本人是|身為|身為一個?)\s*[\w\-_.:]{2,40}\s*(?:AI|助手|模型|語言模型|LLM|機器人)/gi),t.push(/(?:由|基於|透過|使用)\s*[\w\-_.:]{2,40}\s*(?:訓練|開發|構建|創建|研發|支持|驅動|賦能)/gi),t.push(/(?:作為|身為|身为|作為一個?)\s*(?:一個?\s*)?(?:AI|人工智慧|人工智能|LLM)(?:\s*(?:大型)?(?:語言|對話|生成)?模型)?/gi),t.push(/(?:AI|人工智慧|人工智能)\s*(?:大型)?(?:語言|對話)?模型/gi),t.push(/\bas an?\s+(?:AI|artificial intelligence|language model|LLM|assistant)\b/gi),t.push(/(?:我的|本|此)\s*(?:版本|模型|名字|名稱|身份)\s*(?:是|為|:)\s*[\w\-_.:]{2,40}/gi),{name:"self-intro",transform(e){let n=e;for(const e of t)n=n.replace(e,"");return n.replace(/[ \t]{2,}/g," ").replace(/\n[ \t]+/g,"\n").replace(/\n{3,}/g,"\n\n").trim()}}}function O(e,t,n){let o=e;for(const e of t)e.transform&&(o=e.transform(o,n));return o}const T=3,v=[E];function S(e,t,n){if(e?.aborted){const t=e.reason;if(t instanceof Error)return t;const n=new Error("[chat-kit/engine] 串流已中止"+(t?`:${String(t)}`:""),{cause:t});return n.name="AbortError",n}const o=new Error(`[chat-kit/engine] ${n?"模型逾時":"串流已中止"}${t?`:${t}`:""}`);return o.name=n?"TimeoutError":"AbortError",o}function A(e,t,n){let o=e;const r=[];for(const e of t){if(!e.transform)continue;const t=e.transform(o,n);t!==o&&r.push(e.name),o=t}return{text:o,changed:r}}function L(e,t){return t<=1?e:async n=>{const o=await(e?.(n))??void 0;return n.stepNumber<t-1||void 0!==o?.toolChoice?o:{...o,toolChoice:"none"}}}function M(n){const{domains:o}=n,r=a(n.markers);async function*s(n,s){const a=o[n.domain];if(!a)throw new Error(`[chat-kit/engine] 未註冊的 domain:${n.domain}`);!function(e){const t=e[e.length-1];if(!t||"user"!==t.role)throw new Error("[chat-kit/engine] messages 的最後一則必須是 user");if(!t.content.trim())throw new Error("[chat-kit/engine] 使用者訊息不得為空")}(n.messages);let i=0;const l=n.messages.map(e=>{if("user"!==e.role)return e;const t=w(e.content,r);return i+=t.neutralized,{...e,content:t.text}});i>0&&(yield{type:"guard",name:"neutralize-markers",action:"neutralized",detail:`${i} 個標記`});const c=l[l.length-1].content,u={domain:n.domain,channel:n.channel,messages:l,userMessage:c,...void 0!==n.tenantId?{tenantId:n.tenantId}:{},...void 0!==n.entity?{entity:n.entity}:{},...void 0!==n.signal?{signal:n.signal}:{}};let p,m,g,d=[];try{p="function"==typeof a.prompt?await a.prompt(u):a.prompt;const e=await(a.buildContext?.(u))??[];m=k({spec:p,channel:n.channel,blocks:e,extraSystem:l.filter(e=>"system"===e.role).map(e=>e.content),userMessage:c}),g=await(a.tools?.(u));const t=a.outputGuards;d="function"==typeof t?await t(u):t??[]}catch(e){return void(yield{type:"error",error:e})}yield{type:"context",injectedKeys:m.injectedKeys};const f=l.filter(e=>"system"!==e.role).map((e,t,n)=>t===n.length-1?{role:"user",content:m.userMessage}:{role:e.role,content:e.content}),y=!!g&&Object.keys(g).length>0,h=(a.maxToolSteps??3)+1,E=n.modelOptions??{},b=e({model:n.model,system:m.system,messages:f,maxRetries:0,...y?{tools:g,stopWhen:t(h)}:{},...y?{prepareStep:L(a.prepareStep,h)}:{},...void 0!==E.temperature?{temperature:E.temperature}:{},...void 0!==E.maxOutputTokens?{maxOutputTokens:E.maxOutputTokens}:{},...void 0!==E.providerOptions?{providerOptions:E.providerOptions}:{},...void 0!==E.timeout?{timeout:E.timeout}:{},...n.signal?{abortSignal:n.signal}:{},onError:()=>{}}),$=[...d.filter(e=>e.beforeBuiltins),...v,...d.filter(e=>!e.beforeBuiltins)],x={modelId:(O=n.model,"string"==typeof O?O:O.modelId),channel:n.channel,turn:u,blocks:m.blocks,markers:r,model:n.model,system:m.system,conversation:f,modelOptions:E,...n.signal?{signal:n.signal}:{}};var O;let T="",M=0,_="unknown",N=null,R=!1;try{for await(const e of b.fullStream){switch(e.type){case"text-delta":{if(T+=e.text,!s)break;const{text:t}=A(T,$,x);t.length>M&&(yield{type:"content",text:t.slice(M)},M=t.length);break}case"reasoning-delta":e.text&&(yield{type:"thinking",text:e.text});break;case"tool-call":yield{type:"tool-call",toolName:e.toolName,input:e.input};break;case"tool-result":yield{type:"tool-result",toolName:e.toolName,output:e.output};break;case"error":R=!0,yield{type:"error",error:n.signal?.aborted?S(n.signal,void 0,!1):e.error};break;case"abort":R=!0,yield{type:"error",error:S(n.signal,e.reason,void 0!==E.timeout)};break;case"finish":_=e.finishReason,N={inputTokens:e.totalUsage.inputTokens,outputTokens:e.totalUsage.outputTokens,reasoningTokens:e.totalUsage.outputTokenDetails?.reasoningTokens,totalTokens:e.totalUsage.totalTokens}}if(R)break}}catch(e){R=!0,yield{type:"error",error:n.signal?.aborted?S(n.signal,void 0,!1):e}}if(N&&(yield{type:"usage",usage:N}),R)return;const{text:C,changed:I}=A(T,$,x);for(const e of I)yield{type:"guard",name:e,action:"transformed"};let j=C,U=!1;for(const e of $){if(!e.check)continue;const t=await e.check(j,x);"rewrite"===t.action&&"string"==typeof t.text&&t.text!==j?(j=t.text,U=!0,yield{type:"guard",name:e.name,action:"rewrite",...t.reason?{detail:t.reason}:{}}):"pass"===t.action&&t.reason&&(yield{type:"guard",name:e.name,action:"observed",detail:t.reason})}yield{type:"done",text:j,rewritten:U,finishReason:_}}return{runTurn:function(e){return s(e,!0)},completeTurn:async function(e){const t={text:"",thinking:"",rewritten:!1,finishReason:"unknown",usage:null,toolCalls:[],guards:[],injectedKeys:[]};for await(const n of s(e,!1))switch(n.type){case"context":t.injectedKeys=n.injectedKeys;break;case"thinking":t.thinking+=n.text;break;case"tool-call":t.toolCalls.push({toolName:n.toolName,input:n.input});break;case"tool-result":{const e=[...t.toolCalls].reverse().find(e=>e.toolName===n.toolName&&!("output"in e));e&&(e.output=n.output);break}case"guard":t.guards.push({name:n.name,action:n.action,...n.detail?{detail:n.detail}:{}});break;case"usage":t.usage=n.usage;break;case"error":throw n.error;case"done":t.text=n.text,t.rewritten=n.rewritten,t.finishReason=n.finishReason}return t}}}const _="(System note: empty user initiation)";function N(e,t={}){const{leadingUserText:n=_,separator:o="\n\n"}=t,r=[];let s;for(const t of e){if("system"===t.role){r.push({...t});continue}if(s&&s.role===t.role){s.content+=`${o}${t.content}`;continue}if(!s&&"assistant"===t.role){const e={role:"user",content:n};r.push(e),s=e}const e={...t};r.push(e),s=e}return r}export{_ as DEFAULT_LEADING_USER_TEXT,s as DEFAULT_MARKER_SET,T as DEFAULT_MAX_TOOL_STEPS,b as ECHO_MIN_CHARS,n as TRUST_LABELS,O as applyTransforms,k as assemblePrompt,m as blockPattern,r as closeMarker,M as createChatEngine,a as createMarkerSet,d as expandPlaceholders,p as markerPattern,w as neutralizeMarkers,N as normalizeHistory,o as openMarker,f as orderBlocks,y as renderBlock,x as selfIntroGuard,$ as stripEchoedContextGuard,E as stripMarkersGuard};//# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../.build/prompt/markers.js","../.build/prompt/assemble.js","../.build/guards/input.js","../.build/guards/output.js","../.build/engine/engine.js","../.build/engine/messages.js"],"names":["streamText","stepCountIs","CHAT_KIT_OPTIONS_KEY","DEFAULT_ANTHROPIC_MAX_OUTPUT_TOKENS","DEFAULT_COOLDOWN_MS","DEFAULT_PROTOCOL","GOOGLE_DEFAULT_BASE_URL","MAX_COOLDOWN_MS","PROTOCOL_ALIASES","consoleLogger","createFallbackModel","createKeyRing","createLanguageModel","createModelFromConfig","createRoutedModel","defaultKeyRing","isOpenCodeEndpoint","isQuotaError","listModels","maskApiKey","normalizeApiKeyList","normalizeBaseURL","normalizeModelConfig","normalizeProtocol","openCodeHeaders","parseModelSpec","reasoningOptions","reasoningProviderOptions","resolveModelChain","resolveModelTarget","resolveProtocol","resolveProviderApiKeys","retryAfterMsFromError","TRUST_LABELS","authoritative","reference","realtime","openMarker","trust","title","closeMarker","DEFAULT_MARKER_SET","names","Object","values","createMarkerSet","extraNames","raw","name","trim","Error","test","some","n","toLowerCase","push","namesAlternation","set","sort","a","b","length","map","replace","String","join","NAME_END","TAIL","markerPattern","RegExp","blockPattern","tail","PLACEHOLDER","expandPlaceholders","text","leftover","Set","expanded","match","prototype","hasOwnProperty","call","add","size","orderBlocks","blocks","seen","has","key","filter","content","slice","order","renderBlock","block","format","defaultCompose","message","assemblePrompt","input","spec","channel","userMessage","ordered","systemBlocks","placement","userBlocks","system","parts","channelParts","t","placeholders","extraSystem","s","composeUserMessage","injectedKeys","neutralizeMarkers","markers","neutralized","_m","inner","close","stripMarkersGuard","transform","buffer","ctx","ECHO_MIN_CHARS","stripEchoedContextGuard","beforeBuiltins","out","split","selfIntroGuard","modelNames","patterns","cleaned","re","applyTransforms","guards","g","DEFAULT_MAX_TOOL_STEPS","BUILTIN_OUTPUT_GUARDS","transformWithTrace","changed","next","withFinalStepAnswer","domainPrepare","maxSteps","async","args","custom","undefined","stepNumber","toolChoice","createChatEngine","options","domains","runTurn","domain","messages","last","role","validateMessages","m","r","type","action","detail","turn","tenantId","entity","signal","assembled","tools","domainGuards","prompt","buildContext","configured","outputGuards","error","conversation","i","arr","hasTools","keys","maxToolSteps","opts","modelOptions","result","model","maxRetries","stopWhen","prepareStep","temperature","maxOutputTokens","providerOptions","timeout","abortSignal","onError","guardCtx","modelId","sent","finishReason","usage","failed","part","fullStream","toolName","output","reason","inputTokens","totalUsage","outputTokens","reasoningTokens","outputTokenDetails","totalTokens","transformed","finalText","rewritten","check","verdict","completeTurn","thinking","toolCalls","ev","pending","reverse","find","c","DEFAULT_LEADING_USER_TEXT","normalizeHistory","leadingUserText","separator","lastConversational","filler","copy"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../.build/prompt/markers.js","../.build/prompt/assemble.js","../.build/guards/input.js","../.build/guards/output.js","../.build/engine/engine.js","../.build/engine/messages.js"],"names":["streamText","stepCountIs","CHAT_KIT_OPTIONS_KEY","DEFAULT_ANTHROPIC_MAX_OUTPUT_TOKENS","DEFAULT_COOLDOWN_MS","DEFAULT_PROTOCOL","GOOGLE_DEFAULT_BASE_URL","MAX_COOLDOWN_MS","PROTOCOL_ALIASES","consoleLogger","createFallbackModel","createKeyRing","createLanguageModel","createModelFromConfig","createRoutedModel","defaultKeyRing","isOpenCodeEndpoint","isQuotaError","listModels","maskApiKey","normalizeApiKeyList","normalizeBaseURL","normalizeModelConfig","normalizeProtocol","openCodeHeaders","parseModelSpec","reasoningOptions","reasoningProviderOptions","resolveModelChain","resolveModelTarget","resolveProtocol","resolveProviderApiKeys","retryAfterMsFromError","TRUST_LABELS","authoritative","reference","realtime","openMarker","trust","title","closeMarker","DEFAULT_MARKER_SET","names","Object","values","createMarkerSet","extraNames","raw","name","trim","Error","test","some","n","toLowerCase","push","namesAlternation","set","sort","a","b","length","map","replace","String","join","NAME_END","TAIL_INPUT","TAIL_OUTPUT","markerPattern","use","tail","RegExp","blockPattern","PLACEHOLDER","expandPlaceholders","text","leftover","Set","expanded","match","prototype","hasOwnProperty","call","add","size","orderBlocks","blocks","seen","has","key","filter","content","slice","order","renderBlock","block","format","defaultCompose","message","assemblePrompt","input","spec","channel","userMessage","ordered","systemBlocks","placement","userBlocks","system","parts","channelParts","t","placeholders","extraSystem","s","composeUserMessage","injectedKeys","neutralizeMarkers","markers","neutralized","_m","inner","close","stripMarkersGuard","transform","buffer","ctx","ECHO_MIN_CHARS","stripEchoedContextGuard","beforeBuiltins","out","split","selfIntroGuard","modelNames","patterns","cleaned","re","applyTransforms","guards","g","DEFAULT_MAX_TOOL_STEPS","BUILTIN_OUTPUT_GUARDS","abortError","signal","sdkReason","timeoutConfigured","aborted","reason","error","cause","transformWithTrace","changed","next","withFinalStepAnswer","domainPrepare","maxSteps","async","args","custom","undefined","stepNumber","toolChoice","createChatEngine","options","domains","run","emitContent","domain","messages","last","role","validateMessages","m","r","type","action","detail","turn","tenantId","entity","assembled","tools","domainGuards","prompt","buildContext","configured","outputGuards","conversation","i","arr","hasTools","keys","maxToolSteps","opts","modelOptions","result","model","maxRetries","stopWhen","prepareStep","temperature","maxOutputTokens","providerOptions","timeout","abortSignal","onError","guardCtx","modelId","sent","finishReason","usage","failed","part","fullStream","toolName","output","inputTokens","totalUsage","outputTokens","reasoningTokens","outputTokenDetails","totalTokens","transformed","finalText","rewritten","check","verdict","runTurn","completeTurn","thinking","toolCalls","ev","pending","reverse","find","c","DEFAULT_LEADING_USER_TEXT","normalizeHistory","leadingUserText","separator","lastConversational","filler","copy"],"mappings":"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"}
@@ -27,11 +27,15 @@ export declare const DEFAULT_MARKER_SET: MarkerSet;
27
27
  * @param extraNames 例如 `['OFFICIAL Q&A']`;不分大小寫,名稱內的空白會放寬成任意空白(含換行)
28
28
  */
29
29
  export declare function createMarkerSet(extraNames?: readonly string[]): MarkerSet;
30
+ /** `input`:中和使用者訊息(只換左括號);`output`:清掉模型吐出的標記(整段刪除,不得誤傷答案) */
31
+ export type MarkerPatternUse = 'input' | 'output';
30
32
  /**
31
33
  * 比對本系統使用的標記(開頭與結尾兩種),不分大小寫、容許空白變體,也涵蓋未閉合的寫法。
32
34
  * 第 1 組擷取括號內的文字(供「換括號、保留內容」使用),第 2 組是右括號(未閉合時為 undefined)。
35
+ *
36
+ * @param use 預設 `input`;輸出端清洗要傳 `output`(兩者對未閉合標記的停手規則不同,見 `TAIL_OUTPUT` 上方說明)
33
37
  */
34
- export declare function markerPattern(set?: MarkerSet): RegExp;
38
+ export declare function markerPattern(set?: MarkerSet, use?: MarkerPatternUse): RegExp;
35
39
  /**
36
40
  * 比對「成對的區塊」:開頭標記、其間任何內容、結尾標記(`[END …]`)。
37
41
  * 模型照抄注入區塊時,只去標記會把洩漏的內容留給使用者,需整段剝除。
package/docs/API.md CHANGED
@@ -16,6 +16,9 @@ interface ChatEngine {
16
16
  }
17
17
  ```
18
18
 
19
+ - `completeTurn` 走緩衝:不逐段送 `content`,transform 閘門只在串流結束後對完整回覆跑一次(`runTurn` 才會每個 delta 重跑)。
20
+ - 中止與逾時的錯誤保留 `name`:逾時是 `TimeoutError`、主動取消是 `AbortError`(`completeTurn` 會把它拋出)。
21
+
19
22
  `markers`:使用端自己手寫的信任標記名稱(例如以 `format: 'raw'` 自帶的 `OFFICIAL Q&A`)。登記後輸入中和、輸出清洗都涵蓋它們;
20
23
  內建的 AUTHORITATIVE/REFERENCE/REALTIME 不必列。名稱不合法(空、帶 `END ` 前綴、含方括號)在建立引擎時就拋錯。
21
24
 
@@ -93,7 +96,7 @@ interface ContextBlock {
93
96
  ```
94
97
 
95
98
  - 佔位符**只掃模板本身**:值裡剛好出現 `{{x}}` 不展開、不算殘留。
96
- - 一般使用端不必呼叫;測試/除錯可用:`assemblePrompt`、`expandPlaceholders`、`orderBlocks`、`renderBlock`、`openMarker`/`closeMarker`/`markerPattern`/`TRUST_LABELS`。
99
+ - 一般使用端不必呼叫;測試/除錯可用:`assemblePrompt`、`expandPlaceholders`、`orderBlocks`、`renderBlock`、`openMarker`/`closeMarker`/`markerPattern`/`TRUST_LABELS`。`markerPattern(set, use)` 的 `use` 預設 `'input'`(中和:遇到下一個 `[` 就停手);清洗模型輸出要傳 `'output'`(遇到 `[` 不比對,未閉合標記後面還有同行內容時寧可讓標記洩漏,也不刪答案)。
97
100
 
98
101
  ## 4. 閘門
99
102
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jungtz/chat-kit",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "通用 Chat 引擎:AI SDK 模型層、金鑰輪替、主備援、提示詞組裝與閘門",
5
5
  "type": "module",
6
6
  "exports": {