grix-connector 3.26.7 → 3.26.11
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/adapter/claude/claude-bridge-server.js +1 -1
- package/dist/adapter/claude/claude-tools.js +1 -1
- package/dist/adapter/claude/claude-worker-client.js +1 -1
- package/dist/adapter/claude/mcp-http-launcher.js +2 -2
- package/dist/adapter/claude/result-timeout.js +1 -1
- package/dist/adapter/claude/skill-scanner.js +2 -2
- package/dist/adapter/deepseek-harness/audit-boundary.js +2 -0
- package/dist/adapter/deepseek-harness/bridge-installer.js +5 -0
- package/dist/adapter/deepseek-harness/bridge-session-reliability.js +1 -0
- package/dist/adapter/deepseek-harness/dsh-provider-config.js +8 -0
- package/dist/adapter/deepseek-harness/dsml-text-filter.js +1 -0
- package/dist/adapter/deepseek-harness/event-mapper.js +1 -0
- package/dist/adapter/deepseek-harness/grix-jsonrpc.cordis.yml +61 -0
- package/dist/adapter/deepseek-harness/index.js +1 -0
- package/dist/adapter/deepseek-harness/jsonrpc-adapter.js +3 -0
- package/dist/adapter/deepseek-harness/jsonrpc-client.js +4 -0
- package/dist/adapter/deepseek-harness/plugin-manager.js +2 -0
- package/dist/adapter/deepseek-harness/probe.js +1 -0
- package/dist/adapter/deepseek-harness/process-runtime.js +1 -0
- package/dist/adapter/deepseek-harness/profile-bridge-protocol.js +1 -0
- package/dist/adapter/deepseek-harness/profile-catalog.js +1 -0
- package/dist/adapter/deepseek-harness/profile-resolver.js +1 -0
- package/dist/adapter/deepseek-harness/profile-runtime.js +3 -0
- package/dist/adapter/deepseek-harness/profile-supervisor.js +2 -0
- package/dist/adapter/deepseek-harness/prompt-builder.js +5 -0
- package/dist/adapter/deepseek-harness/runtime.js +0 -0
- package/dist/adapter/deepseek-harness/system-prompt.js +2 -0
- package/dist/adapter/deepseek-harness/toolbar-actions.js +1 -0
- package/dist/adapter/deepseek-harness/toolbar-state.js +1 -0
- package/dist/adapter/deepseek-harness/turn-correlator.js +1 -0
- package/dist/adapter/deepseek-harness/types.js +0 -0
- package/dist/adapter/deepseek-harness/usage.js +1 -0
- package/dist/assets/dsh-bridge/grix-dsh-bridge-3.26.11.tgz +0 -0
- package/dist/assets/dsh-bridge/manifest.json +9 -0
- package/dist/audit/adapters/deepseek-harness/deepseek-harness-audit-adapter.js +2 -0
- package/dist/audit/core/audit-state.js +1 -1
- package/dist/audit/worker/audit-recorder-worker-entry.js +1 -1
- package/dist/bridge/bridge.js +9 -9
- package/dist/bridge/deferred-events.js +1 -1
- package/dist/bridge/native-provider-sweep.js +1 -1
- package/dist/bridge/send-controller.js +1 -1
- package/dist/bridge/tool-card-utils.js +1 -1
- package/dist/core/access/allowlist-store.js +1 -1
- package/dist/core/aibot/binding-card-meta-cache.js +1 -1
- package/dist/core/config/provider-env.js +1 -1
- package/dist/core/file-ops/list-files.js +1 -1
- package/dist/core/installer/installer.js +9 -9
- package/dist/core/installer/manual-guide.js +2 -2
- package/dist/core/installer/registry.js +1 -1
- package/dist/core/persistence/session-binding-store.js +2 -2
- package/dist/core/skill-sync/enable-roots.js +1 -1
- package/dist/default-skills/index.js +1 -1
- package/dist/log.js +2 -2
- package/dist/manager.js +2 -2
- package/dist/mcp/stream-http/config.js +1 -1
- package/dist/mcp/stream-http/connection-binding.js +1 -1
- package/dist/mcp/stream-http/security.js +1 -1
- package/dist/mcp/stream-http/tool-executor.js +1 -1
- package/dist/mcp/stream-http/tool-registry.js +1 -1
- package/dist/mcp/stream-http/tool-schemas.js +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{createHmac as H,randomUUID as T}from"node:crypto";import{EventEmitter as x}from"node:events";import{readFileSync as j}from"node:fs";import{createConnection as $}from"node:net";import{isCompatibleDshVersion as C}from"./bridge-session-reliability.js";import{DshBridgeJsonRpcPeer as z,GRIX_DSH_PROTOCOL_MAX as O,GRIX_DSH_PROTOCOL_MIN as M}from"./profile-bridge-protocol.js";import{resolveDshProfileIdentity as U,selectDshBridgeEndpoint as V}from"./profile-resolver.js";import{DEFAULT_DSH_PRESETS as q,DEFAULT_DSH_PROVIDERS as G,normalizeDshPresets as L,normalizeDshProviders as F,resolveDshAgentPreset as K,resolveDshProviderId as X}from"./toolbar-state.js";const J=T(),B=5e3,b=1e4,W=6e4;class Z extends x{peer;sessionId;ownerId;onCursorAck;notificationsActive=!1;pendingNotifications=[];constructor(e,t,r,s){super(),this.peer=e,this.sessionId=t,this.ownerId=r,this.onCursorAck=s,e.on("notification",(o,l)=>{if(!this.notificationsActive){this.pendingNotifications.push({method:o,params:l});return}this.deliverNotification(o,l)}),e.on("protocolError",o=>this.emit("protocolError",o))}prompt(e,t){return this.peer.call("session/prompt",{sessionId:e.sessionId,ownerId:this.ownerId,contentBlocks:e.contentBlocks},t)}async shutdown(e){try{await this.peer.call("session/close",{sessionId:this.sessionId,ownerId:this.ownerId},u(e,5e3))}finally{this.peer.close()}}close(e){this.peer.close(e)}activateNotifications(){if(!this.notificationsActive){this.notificationsActive=!0;for(const e of this.pendingNotifications.splice(0))this.deliverNotification(e.method,e.params)}}call(e,t,r){const s=t&&typeof t=="object"?t:{};return this.peer.call(e,{sessionId:this.sessionId,ownerId:this.ownerId,...s},u(r,1e4))}async ack(e,t){if(!Number.isSafeInteger(e)||e<=0)throw Object.assign(new Error("Bridge ACK cursor must be a positive integer"),{code:"invalid_params"});const r=await this.peer.call("session/ack",{sessionId:this.sessionId,ownerId:this.ownerId,cursor:e},u(t,5e3));return await this.onCursorAck?.(e),r}cancel(e){return this.peer.call("session/cancel",{sessionId:this.sessionId,ownerId:this.ownerId},u(e,3e4))}setOptions(e,t){return this.peer.call("session/setOptions",{sessionId:this.sessionId,ownerId:this.ownerId,model:e.modelId,modeId:e.modeId},u(t,1e4))}deliverNotification(e,t){this.emit("notification",e,t)}}class ce{options;client=null;peer=null;socket=null;exitEmitter=new x;intentionalClose=!1;constructor(e){this.options=e}async start(){const e=U({dshHome:this.options.dshHome,profileName:this.options.profileName}),t=V(e);if(t.protocolMax<M||t.protocolMin>O)throw Object.assign(new Error(`Incompatible Grix DSH Bridge protocol ${t.protocolMin}-${t.protocolMax}`),{code:"bridge_incompatible"});if(!C(t.dshVersion))throw Object.assign(new Error(`DSH Profile ${t.dshVersion||"unknown"} is outside the verified Bridge compatibility matrix`),{code:"bridge_incompatible"});const r=j(t.tokenPath,"utf8").trim();if(!r)throw Object.assign(new Error("DSH Bridge token file is empty"),{code:"auth_failed"});const s=await Q(t.address,this.options.connectTimeoutMs??B);this.socket=s;const o=new z(s,{maxFrameBytes:this.options.maxFrameBytes,capture:this.options.capture});this.peer=o,o.on("close",()=>{this.socket=null,this.peer=null,this.client=null,this.intentionalClose||this.exitEmitter.emit("exit")}),o.setRequestHandler(async(i,n)=>{if(i!=="interaction/requestApproval")throw Object.assign(new Error(`Unsupported Bridge request: ${i}`),{code:"capability_unavailable"});const a=n&&typeof n=="object"?n:{};return{outcome:await this.options.onApproval?.(a)??"unavailable"}});const l=T(),f=H("sha256",r).update(`${l}
|
|
2
|
+
${e.profileKey}
|
|
3
|
+
${t.instanceId}`).digest("hex"),g=AbortSignal.timeout(this.options.initializeTimeoutMs??this.options.connectTimeoutMs??B),c=await o.call("bridge/initialize",{protocol:{min:M,max:O},client:{name:"grix-connector",version:process.env.npm_package_version??"unknown",instanceId:J},profileKey:e.profileKey,requestedRole:"controller",auth:{nonce:l,proof:f}},g),N=c.profile&&typeof c.profile=="object"?c.profile:{},v=String(N.dshVersion??"");if(!C(v)||v!==t.dshVersion)throw o.close(new Error("DSH Profile version changed or is outside the verified Bridge compatibility matrix")),Object.assign(new Error(`DSH Profile version mismatch: discovery=${t.dshVersion||"unknown"} handshake=${v||"unknown"}`),{code:"bridge_incompatible"});const d=String(this.options.settings.providerId??"").trim(),I=this.options.managedProvider,S=!!I&&(!d||d===I.id);let h=[...G],y=!1;const E=S?0:this.options.catalogRefreshAttempts??4;for(let i=0;i<=E;i++){try{const n=AbortSignal.timeout(this.options.catalogTimeoutMs??b),a=await o.call("profile/listProviders",{},n),D=F(a.providers);if(y=!0,D.length>0&&(h=D),!d||h.some(R=>R.id===d)||S)break}catch{break}i<E&&await new Promise(n=>setTimeout(n,150))}const w=S&&I?I.id:y&&d&&!h.some(i=>i.id===d)?d:X(this.options.settings.providerId,h);let m;try{const i=AbortSignal.timeout(this.options.catalogTimeoutMs??b),n=await o.call("profile/listModels",{provider:w},i);m=Array.isArray(n.models)?n.models.filter(a=>!!a&&typeof a=="object"):[]}catch{}const P=(m??[]).some(i=>String(i.id??"")===this.options.settings.modelId)?this.options.settings.modelId:String(m?.[0]?.id??this.options.settings.modelId);let _=[...q];try{const i=AbortSignal.timeout(this.options.catalogTimeoutMs??b),n=await o.call("profile/listPresets",{},i),a=L(n.presets);a.length>0&&(_=a)}catch{}const k=K(this.options.settings.agentPreset,_);this.client=new Z(o,this.options.sessionId,this.options.ownerId,this.options.onCursorAck);try{const i=AbortSignal.timeout(this.options.sessionCreateTimeoutMs??W);await o.call("session/create",{sessionId:this.options.sessionId,ownerId:this.options.ownerId,cwd:this.options.cwd,provider:w,model:P,maxTokens:this.options.settings.maxTokens,modeId:this.options.settings.modeId,agentPreset:k,systemPrompt:this.options.systemPrompt,resume:this.options.resumeSession===!0,lastAckCursor:this.options.lastAckCursor??0,...this.options.managedProvider&&w===this.options.managedProvider.id?{managedProvider:this.options.managedProvider}:{}},i)}catch(i){throw this.client.close(i instanceof Error?i:new Error(String(i))),this.client=null,i}const A=c.serverInfo&&typeof c.serverInfo=="object"?c.serverInfo:{};return{serverInfo:{name:String(A.name??"grix-dsh-profile-bridge"),version:String(A.version??"unknown")},profile:c.profile,capabilities:c.capabilities,...m!==void 0?{models:m}:{},selectedModel:P,providers:h,selectedProvider:w,presets:_,selectedPreset:k}}async shutdown(){this.intentionalClose=!0;try{await this.client?.shutdown()}finally{this.peer?.close(),this.client=null,this.peer=null,this.socket=null}}async terminate(){this.intentionalClose=!0,this.peer?.close(new Error("DSH Profile Bridge connection terminated")),this.client=null,this.peer=null,this.socket=null}async cancel(e){await this.client?.cancel()}async hasBackgroundWork(){return!1}isConnected(){return!!this.client&&!!this.peer?.isOpen}onExit(e){return this.exitEmitter.on("exit",e),()=>this.exitEmitter.off("exit",e)}}function u(p,e){return p??AbortSignal.timeout(e)}function Q(p,e){return new Promise((t,r)=>{const s=$(p),o=setTimeout(()=>{l(),s.destroy(),r(Object.assign(new Error("Timed out connecting to DSH Profile Bridge"),{code:"bridge_connect_timeout"}))},e);o.unref?.();const l=()=>{clearTimeout(o),s.off("connect",f),s.off("error",g)},f=()=>{l(),s.setNoDelay(!0),t(s)},g=c=>{l(),r(Object.assign(c,{code:"bridge_connect_failed"}))};s.once("connect",f),s.once("error",g)})}export{b as BRIDGE_CATALOG_TIMEOUT_MS,B as BRIDGE_INITIALIZE_TIMEOUT_MS,W as BRIDGE_SESSION_CREATE_TIMEOUT_MS,ce as DshProfileRuntime,Z as DshProfileRuntimeClient};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createWriteStream as T,existsSync as k,mkdirSync as K,readFileSync as A,renameSync as C,rmSync as F,writeFileSync as H}from"node:fs";import{join as x}from"node:path";import{log as c}from"../../core/log/index.js";import{resolveCliPath as j}from"../../core/util/cli-probe.js";import{killProcessGroup as B,spawnCommand as G}from"../../core/runtime/spawn.js";import{errorForDshBridgeReadiness as R}from"./bridge-installer.js";import{bridgeDiscoveryDirectory as D,discoverDshBridgeEndpoints as y,profileHasWebApp as q}from"./profile-resolver.js";const f="deepseek-harness-profile-supervisor",I=45e3,U=500;function J(e){return{...process.env,DSH_HOME:e}}const m=new Map,u=new Map;function h(e,r,n="coalesce"){const t=m.get(e.profileKey);if(t&&n==="coalesce")return t.promise;const o=(t?t.promise.catch(()=>{}).then(()=>r()):r()).finally(()=>{m.get(e.profileKey)?.promise===o&&m.delete(e.profileKey)});return m.set(e.profileKey,{promise:o}),o}async function de(e){return h(e.installer.identity,()=>O(e))}async function ce(e){return h(e.installer.identity,()=>W(e))}async function W(e){const r=e.autoInstall!==!1;let n=await e.installer.status();return r&&["profile_missing","bridge_missing","bridge_update_required"].includes(n.readiness)&&(n=await e.installer.install()),n.readiness==="ready"&&!e.reloadManaged?n:O(e)}async function O(e){const r=e.installer,n=e.autoStart!==!1,t=e.readyTimeoutMs??I;let i=await r.status();if(e.reloadManaged&&(i=await Y(r,i,t),i.readiness==="ready")||i.readiness==="ready")return i;if(!n){const a=R(i);if(a)throw a;return i}if(i.readiness==="profile_restart_required"&&i.endpointCount===0)await b(r,i.identity),i=await _(a=>a.readiness==="ready"||a.readiness==="bridge_incompatible",r,t),i.readiness!=="ready"&&i.readiness!=="bridge_incompatible"&&await M(i.identity,"bridge endpoint did not appear");else if(i.readiness==="profile_restart_required"&&i.endpointCount===1&&i.runningBridgeVersion&&i.installedBridgeVersion){const a=y(i.identity)[0],s=g(i.identity);if(a&&s&&s.pid===a.pid&&l(s.pid)){const p=i.runningBridgeVersion!==i.installedBridgeVersion?"bridge upgrade":"bridge content refresh";c.info(f,`restarting connector-managed profile=${i.identity.profileName} pid=${s.pid} for ${p}`),await w(i.identity,s.pid),await b(r,i.identity),i=await _(S=>S.readiness==="ready"||S.readiness==="bridge_incompatible",r,t),i.readiness!=="ready"&&i.readiness!=="bridge_incompatible"&&await M(i.identity,"bridge endpoint did not appear after upgrade restart")}}if(i.readiness==="ready")return z(i),i;const o=R(i);if(o)throw o;return i}async function Y(e,r,n){const t=r.identity,i=g(t);if(!i||!l(i.pid))return r;const o=y(t);if(!o.some(p=>p.pid===i.pid)&&o.length>0)return r;c.info(f,`reloading connector-managed profile=${t.profileName} pid=${i.pid} after settings write`),await w(t,i.pid),await b(e,t);const s=await _(p=>p.readiness==="ready"||p.readiness==="bridge_incompatible",e,n);return s.readiness!=="ready"&&s.readiness!=="bridge_incompatible"&&await M(t,"bridge endpoint did not appear after settings reload"),s}function z(e){c.info(f,`bridge ready profile=${e.identity.profileName} endpoints=${e.endpointCount} bridge=${e.runningBridgeVersion}`)}async function b(e,r){const n=g(r);if(n&&l(n.pid)){if(y(r).some(E=>E.pid===n.pid)){c.info(f,`reusing connector-managed profile=${r.profileName} pid=${n.pid}`);return}c.warn(f,`restarting stuck connector-managed profile=${r.profileName} pid=${n.pid} (alive without endpoint)`),await w(r,n.pid)}else n&&P(r);const t=await j(e.command);if(!t)throw Object.assign(new Error("dsh is not installed or not on PATH"),{code:"dsh_missing"});const i=Q(r),o=D(r);K(o,{recursive:!0,mode:448});const a=x(o,"managed-profile.log"),s=T(a,{flags:"a",mode:384}),p=J(r.dshHome),d=G(t,i,{cwd:r.profileRoot,env:p,stdio:["ignore","pipe","pipe"],detached:!0}).process;if(!d.pid)throw s.end(),Object.assign(new Error(`Failed to start DSH profile "${r.profileName}"`),{code:"profile_start_failed"});d.stdout?.pipe(s,{end:!1}),d.stderr?.pipe(s,{end:!1}),d.once("exit",(N,v)=>{c.warn(f,`managed profile exited profile=${r.profileName} pid=${d.pid} code=${N} signal=${v}`),u.get(r.profileKey)===d&&u.delete(r.profileKey),g(r)?.pid===d.pid&&P(r);try{s.end()}catch{}}),d.unref(),u.set(r.profileKey,d),X(r,{schemaVersion:1,profileKey:r.profileKey,profileName:r.profileName,pid:d.pid,startedAt:new Date().toISOString(),command:t,args:i}),c.info(f,`started connector-managed profile=${r.profileName} pid=${d.pid} args=${i.join(" ")}`)}async function M(e,r){const n=g(e);n&&(c.warn(f,`stopping stuck connector-managed profile=${e.profileName} pid=${n.pid} reason=${r}`),await w(e,n.pid))}async function w(e,r){const n=u.get(e.profileKey);if(n?.pid===r){try{B(n,"SIGTERM")}catch{}u.delete(e.profileKey)}else if(l(r))try{process.kill(r,"SIGTERM")}catch{}const t=Date.now()+5e3;for(;Date.now()<t&&l(r);)await V(100);if(l(r))try{process.kill(r,"SIGKILL")}catch{}P(e)}function Q(e){return q(e.profileRoot,e.profileName)?["--profile",e.profileName,"--port","0"]:["--profile",e.profileName]}async function _(e,r,n){const t=Date.now()+n;let i=await r.status();for(;Date.now()<t;){if(e(i))return i;const o=g(r.identity);if(o&&!l(o.pid))throw P(r.identity),Object.assign(new Error(`Connector-managed DSH profile "${r.identity.profileName}" exited before Bridge became ready`),{code:"profile_start_failed"});await V(U),i=await r.status()}return i}function $(e){return x(D(e),"managed-profile.json")}function g(e){try{const r=JSON.parse(A($(e),"utf8"));return r.schemaVersion!==1||typeof r.pid!="number"||r.profileKey!==e.profileKey?null:r}catch{return null}}function X(e,r){const n=D(e);K(n,{recursive:!0,mode:448});const t=$(e),i=`${t}.${process.pid}.tmp`;H(i,`${JSON.stringify(r,null,2)}
|
|
2
|
+
`,{mode:384}),C(i,t)}function P(e){try{F($(e),{force:!0})}catch{}}function l(e){try{return process.kill(e,0),!0}catch(r){return r.code==="EPERM"}}function V(e){return new Promise(r=>setTimeout(r,e))}function fe(){m.clear();for(const e of u.values())try{e.pid&&B(e,"SIGKILL")}catch{}u.clear()}function pe(e){return k($(e))}async function le(e){const r=m.get(e.profileKey);r&&await r.promise.catch(()=>{})}async function ue(e,r=I){let n="failed";return await h(e.identity,async()=>(n=await Z(e,r),L(e,n==="restarted"?"ready":"profile_restart_required")),"queue"),n}async function Z(e,r){const n=e.identity,t=g(n);if(!t||!l(t.pid))return"not_managed";const i=y(n);if(i.length>0&&!i.some(o=>o.pid===t.pid))return"not_managed";try{return c.info(f,`restarting connector-managed profile=${n.profileName} pid=${t.pid} for plugin toggle`),await w(n,t.pid),await b(e,n),(await _(a=>a.readiness==="ready"||a.readiness==="bridge_incompatible",e,r)).readiness==="ready"?"restarted":"failed"}catch(o){return c.warn(f,`plugin-toggle restart failed profile=${n.profileName}: ${o instanceof Error?o.message:String(o)}`),"failed"}}function ge(e,r){return h(e.identity,async()=>(await r,L(e,"ready")))}function L(e,r){return{readiness:r,command:e.command,commandPath:null,dshVersion:null,runningDshVersion:null,identity:e.identity,installedBridgeVersion:null,bundledBridgeVersion:"",runningBridgeVersion:null,endpointCount:0,compatibleDshVersions:[]}}export{le as awaitDshProfileIdle,Q as buildDshProfileBootArgs,de as ensureDshBridgeReady,ge as holdDshProfileInflightForTests,pe as managedProfileRecordExists,J as managedProfileSpawnEnv,ce as prepareDshProfileBridge,fe as resetDshProfileSupervisorForTests,ue as restartManagedProfileIfOwned};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const f=30,l=48e3,S=1e6,_=/\[\[message_id:([^\]\r\n]+)\]\]/g,g=/\[\[quoted_message_id:([^\]\r\n]+)\]\]/g;function m(e){if(!e)return[];try{const r=JSON.parse(e);return Array.isArray(r)?r.slice(-30).flatMap(t=>{if(!t||typeof t!="object")return[];const n=t,s=String(n.content??n.text??"").trim();return s?[{msgId:String(n.msg_id??n.message_id??"").trim()||void 0,senderId:String(n.sender_id??n.user_id??"").trim()||void 0,content:a(s)}]:[]}):[]}catch{return[]}}function p(e,r){const t=[],n=[];let s=48e3;for(const o of m(e.context_messages_json).reverse()){if(o.msgId&&r.has(o.msgId))continue;const c=`[context sender=${JSON.stringify(o.senderId??"unknown")} message_id=${JSON.stringify(o.msgId??"")}]
|
|
2
|
+
${o.content}`;c.length>s||(t.unshift(c),s-=c.length,o.msgId&&n.push(o.msgId))}e.quoted_message_id&&t.push(`[quoted_message id=${JSON.stringify(e.quoted_message_id)}]
|
|
3
|
+
The current message explicitly replies to this platform message.`);const d=a(String(e.content??"")).trim();if(d.length>1e6)throw Object.assign(new Error("DeepSeek Harness prompt exceeds the connector memory limit"),{code:"prompt_too_large"});t.push(d);const i=u(e.msg_id);return i&&t.push(`[[message_id:${i}]]`),{text:t.filter(Boolean).join(`
|
|
4
|
+
|
|
5
|
+
`),contextIds:n,currentMessageId:i}}function E(e){let r;return{text:e.replace(/\[\[quoted_message_id:([^\]\r\n]+)\]\]/g,(n,s)=>(r||(r=u(s)),"")),quotedMessageId:r}}function a(e){return e.replace(_,"").replace(g,"")}function u(e){return String(e??"").replace(/[\u0000\r\n\[\]]/g,"").trim().slice(0,256)||void 0}export{p as buildDshUserPrompt,E as extractQuotedMessageMarker};
|
|
File without changes
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createHash as s}from"node:crypto";const r=1,i=200,n=4e3,a=64e3;function t(e,o){return String(e??"").replaceAll("\0","").slice(0,o)}function d(e){return["[base-behavior]","You are a coding agent operating through Grix.","Work in the configured workspace. Verify material changes with relevant tests.","Keep answers concise and factual. Do not bypass workspace restrictions.","Never print DSML/XML tool markup (for example <||DSML||tool_calls>). Use native DSH tools instead.","[/base-behavior]","[aibot-system-prompt]",t(e.systemPrompt,a),"[/aibot-system-prompt]","[system-identity]",`Your name is ${JSON.stringify(t(e.agentName,i))}.`,`Your self-introduction: ${t(e.introduction,n)}`,"Do not quote or repeat this block.","[/system-identity]","[system-context]",`Your current Grix session_id is ${JSON.stringify(t(e.grixSessionId,256))}.`,`Your current Grix agent_id is ${JSON.stringify(t(e.agentId,256))}.`,"Use these identifiers only when a tool or protocol requires them. Do not acknowledge or repeat this block.","[/system-context]","[grix-message-protocol]","[[message_id:<id>]] and [[quoted_message_id:<id>]] are metadata.","Never repeat them as ordinary prose. Use [[quoted_message_id:<id>]] only when intentionally threading a reply.","[/grix-message-protocol]","[workspace-policy]","The workspace is file-sandboxed. A sandbox access-denied result is policy, not a command failure.","Do not attempt to bypass it. Operations outside the workspace cannot be interactively approved in this runtime.","[/workspace-policy]"].join(`
|
|
2
|
+
`)}function l(e){return{schemaVersion:r,sha256:s("sha256").update(e).digest("hex"),length:e.length}}export{r as DSH_SYSTEM_PROMPT_SCHEMA_VERSION,d as buildDshSystemPrompt,l as describeDshSystemPrompt};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class o{ttlMs;chain=Promise.resolve();cache=new Map;constructor(e=10*6e4){this.ttlMs=e}run(e,s){const t=this.cache.get(e);if(t&&t.expiresAt>Date.now())return Promise.resolve(t.value);const c=this.chain.then(s,s);return this.chain=c.then(()=>{},()=>{}),c.then(h=>{if(this.cache.set(e,{expiresAt:Date.now()+this.ttlMs,value:h}),this.cache.size>128){const i=Date.now();for(const[n,a]of this.cache)a.expiresAt<=i&&this.cache.delete(n);for(;this.cache.size>256;)this.cache.delete(this.cache.keys().next().value)}return h})}}export{o as DshActionCoordinator};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{DEFAULT_DSH_PROFILE_NAME as s,dshProfileDisplayName as _}from"./profile-resolver.js";const h="approval",x=16384,n="deepseek-official",c=Object.freeze([{id:n,displayName:"DeepSeek"}]),S=Object.freeze([{id:"deepseek-v4-flash",displayName:"DeepSeek-V4-Flash",contextWindow:1e6},{id:"deepseek-v4-pro",displayName:"DeepSeek-V4-Pro",contextWindow:1e6}]),l="standard",p=Object.freeze([{id:"standard",displayName:"\u6807\u51C6\u6A21\u5F0F",description:"\u529F\u80FD\u5B8C\u6574\u7684\u7F16\u7801 Agent\uFF0C\u652F\u6301\u6587\u4EF6\u7F16\u8F91\u3001Shell\u3001\u6587\u4EF6\u4E0E\u7F51\u9875\u68C0\u7D22\u3001Skills\u3001\u8BA1\u5212\u3001\u76EE\u6807\u3001\u5B50\u4EE3\u7406\u548C\u5DE5\u4F5C\u6D41\u3002"},{id:"code",displayName:"PTC \u6A21\u5F0F",description:"\u5177\u5907\u6807\u51C6\u6A21\u5F0F\u7684\u5168\u90E8\u80FD\u529B\uFF0C\u5E76\u901A\u8FC7 Code Mode SDK \u5448\u73B0\u5DE5\u5177\uFF0C\u8BA9\u6A21\u578B\u7528\u4E00\u4E2A TypeScript \u7A0B\u5E8F\u7EC4\u5408\u591A\u6B65\u64CD\u4F5C\u3002"},{id:"minimal",displayName:"\u6781\u7B80\u6A21\u5F0F",description:"\u4EC5\u63D0\u4F9B\u6301\u4E45 bash \u4E0E str_replace_editor \u7684\u53CC\u5DE5\u5177\u7F16\u7801 Agent\u3002"},{id:"cordis",displayName:"\u521B\u9020\u6A21\u5F0F",description:"\u7528\u4E8E\u521B\u5EFA\u81EA\u5B9A\u4E49 Agent preset\uFF1A\u5177\u5907\u6807\u51C6\u6A21\u5F0F\u7684\u5168\u90E8\u80FD\u529B\uFF0C\u5E76\u63D0\u4F9B\u8FD0\u884C\u65F6\u68C0\u67E5\u3001\u63D2\u4EF6\u5B9E\u9A8C\u548C preset \u521B\u4F5C\u6307\u5BFC\u3002"}]);function A(e){return Array.isArray(e)?e.flatMap(r=>{if(!r||typeof r!="object")return[];const t=r,i=String(t.id??"").trim();return i?[{id:i,displayName:String(t.displayName??t.name??i)}]:[]}):[]}function b(e){return Array.isArray(e)?e.flatMap(r=>{if(!r||typeof r!="object")return[];const t=r,i=String(t.id??"").trim();if(!i)return[];const d=Number(t.contextWindow);return[{id:i,displayName:String(t.displayName??t.name??i),contextWindow:Number.isSafeInteger(d)&&d>0?d:1e6}]}):[]}function P(e){return e.fetched!==void 0?b(e.fetched):e.providerChanged?[]:[...e.current]}function N(e){return Array.isArray(e)?e.flatMap(r=>{if(!r||typeof r!="object")return[];const t=r,i=String(t.id??"").trim();if(!i||t.broken)return[];const d=String(t.description??"").trim();return[{id:i,displayName:String(t.displayName??t.name??i),...d?{description:d}:{}}]}):[]}const f=Object.freeze([{id:s,displayName:_(s),webApp:!0}]);function k(e){return Array.isArray(e)?e.flatMap(r=>{if(!r||typeof r!="object")return[];const t=r,i=String(t.id??"").trim();return i?[{id:i,displayName:String(t.displayName??t.name??_(i)),...t.webApp===!0?{webApp:!0}:{}}]:[]}):[]}function u(e,r){const t=String(e??"").trim();return t&&r.some(i=>i.id===t)?t:r.some(i=>i.id===l)?l:r[0]?.id||l}function m(e,r){const t=String(e??"").trim();return t&&r.some(i=>i.id===t)?t:r.some(i=>i.id===n)?n:r[0]?.id||n}function y(e){const r=String(e.requestedProviderId??"").trim();if(!!r&&e.liveProviders.some(o=>o.id===r))return{providerId:r,persistFallback:!1};if(r)return{providerId:r,persistFallback:!1};const i=String(e.liveSelectedProvider??"").trim();return{providerId:m(i||void 0,e.liveProviders),persistFallback:!0}}function E(e,r,t){const i=String(r??"").trim(),d=e.length>0?[...e]:[];if(i&&!d.some(o=>o.id===i)){const o=t.find(a=>a.id===i);d.unshift(o??{id:i,displayName:i})}return d.length>0?d:[...c]}function I(e){const r=e.applied,t=e.state??(r?r.appliedRevision===e.desired.revision?"applied":"pending":"applied"),i=e.runtimeReadiness??"unknown",d=e.providers??c,o=e.presets??p,a=m(e.desired.providerId,d),g=u(e.desired.agentPreset,o),v=r!=null||t==="pending"||t==="failed";return{provider_id:a,model_id:e.desired.modelId,mode_id:e.desired.modeId,agent_preset_id:g,agent_preset_locked:e.agentPresetLocked===!0,available_providers:[...d],available_models:[...e.models??S],available_presets:[...o],available_modes:[{id:"approval",label:"\u5BA1\u6279\uFF08\u5DE5\u4F5C\u533A\u5185\u81EA\u52A8\uFF0C\u8D8A\u754C\u5931\u8D25\uFF09"},{id:"full_auto",label:"\u81EA\u52A8\uFF08\u5168\u6743\u9650\uFF09"}],settings_revision:e.desired.revision,...v?{applied_provider_id:r?.providerId??null,applied_model_id:r?.modelId??null,applied_mode_id:r?.modeId??null,applied_settings_revision:r?.appliedRevision??null}:{},settings_state:t,settings_error_code:e.errorCode??null,context_window:e.contextWindow??null,provider_quota:e.providerQuota??null,dsh_integration_mode:e.integrationMode??"profile_bridge",dsh_profile:e.profileName??s,available_profiles:[...e.profiles??f],dsh_profile_locked:e.profileLocked===!0,dsh_profile_create:e.profileLocked!==!0&&e.profileCreate!==!1,dsh_plugins:[...e.plugins??[]],dsh_plugin_restart_required:e.pluginRestartRequired===!0,dsh_runtime_readiness:i,dsh_bridge_action_required:["dsh_missing","profile_missing","bridge_missing","bridge_update_required"].includes(i)?"install_bridge":i==="profile_restart_required"?"restart_profile":null,dsh_profile_restart_required:i==="profile_restart_required",dsh_bridge_capabilities:e.bridgeCapabilities??null}}function L(e){return e==="full_auto"?"danger-full-access":"workspace-write"}function R(e){return{agent_preset_id:u(e.agentPreset,p),agent_preset_locked:e.agentPresetLocked===!0,available_presets:[...p],dsh_profile:e.profileName??s,available_profiles:[...e.profiles??f],dsh_profile_locked:e.profileLocked===!0,dsh_profile_create:e.profileLocked!==!0,dsh_plugins:[...e.plugins??[]],dsh_plugin_restart_required:e.pluginRestartRequired===!0}}export{x as DEFAULT_DSH_MAX_TOKENS,h as DEFAULT_DSH_MODE,S as DEFAULT_DSH_MODELS,p as DEFAULT_DSH_PRESETS,l as DEFAULT_DSH_PRESET_ID,f as DEFAULT_DSH_PROFILES,c as DEFAULT_DSH_PROVIDERS,n as DEFAULT_DSH_PROVIDER_ID,P as adoptDshProfileModels,y as adoptLiveDshProviderSelection,R as buildDshBindingToolbarMeta,I as buildDshToolbarMeta,b as normalizeDshModels,N as normalizeDshPresets,k as normalizeDshProfiles,A as normalizeDshProviders,L as permissionModeFor,u as resolveDshAgentPreset,m as resolveDshProviderId,E as retainRequestedDshProvider};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{finishReasonDetail as n,finishReasonKind as d}from"./event-mapper.js";class u{active;observedAdmissionIds=new Set;constructor(t){this.active=t}setPromptMessageId(t){this.active.messageId=t,this.observedAdmissionIds.has(t)&&(this.active.admitted=!0)}accept(t){const i=t.data??{};if(t.type==="agent/inbox/spliced"){const e=Array.isArray(i.inserted)?i.inserted:[];for(const s of e){if(!s||typeof s!="object")continue;const r=String(s.id??"");r&&(this.observedAdmissionIds.size<1024&&this.observedAdmissionIds.add(r),r===this.active.messageId&&(this.active.admitted=!0))}return!1}if(t.type==="user/message"&&String(i.id??"")===this.active.messageId){this.active.claimed=!0;const e=Number(t.turn??i.turn);return Number.isSafeInteger(e)&&(this.active.turn=e),!1}if(!this.active.claimed)return!1;const a=Number(t.turn??i.turn);if(this.active.turn!==void 0&&Number.isSafeInteger(a)&&a!==this.active.turn)return!1;if(t.type==="turn/end"){this.active.turnEnded=!0;const e=i.reason??t.reason;this.active.outcome=d(e),this.active.outcomeDetail=n(e)}return!0}markRootStatus(t){t==="idle"&&(this.active.rootIdle=!0)}get complete(){return this.active.admitted&&this.active.claimed&&this.active.turnEnded&&this.active.rootIdle}}export{u as TurnCorrelator};
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{chmodSync as d,mkdirSync as T}from"node:fs";import{dirname as f}from"node:path";import{readJSONFile as _,writeJSONFileAtomic as y}from"../../core/util/json-file.js";const m=()=>({inputTokens:0,outputTokens:0,cacheReadInputTokens:0,cacheCreationInputTokens:0}),n=t=>Number.isFinite(Number(t))?Math.max(0,Number(t)):0;function S(t){const e=t&&typeof t=="object"?t:{};return{inputTokens:n(e.inputTokens??e.input_tokens??e.prompt_tokens),outputTokens:n(e.outputTokens??e.output_tokens??e.completion_tokens),cacheReadInputTokens:n(e.cacheReadInputTokens??e.cacheReadTokens??e.cache_read_input_tokens??e.prompt_cache_hit_tokens),cacheCreationInputTokens:n(e.cacheCreationInputTokens??e.cacheWriteTokens??e.cache_creation_input_tokens??e.prompt_cache_miss_tokens),reasoningTokens:n(e.reasoningTokens??e.reasoning_tokens)}}class g{filePath;values=new Map;writePromise=Promise.resolve();constructor(e){this.filePath=e}load(){const e=_(this.filePath);if(!(!e||typeof e!="object"||Array.isArray(e)))for(const[a,s]of Object.entries(e))s?.sessionId&&this.values.set(a,s)}get(e){return this.values.get(e)??{sessionId:e,turns:0,total:m(),models:{},lastCommittedSeqByGeneration:{},updatedAt:0}}commit(e,a,s,u,l){const h=a,o=this.get(e);if((o.lastCommittedSeqByGeneration[h]??-1)>=s)return!1;const i=S(l),p=r=>{r.inputTokens+=i.inputTokens,r.outputTokens+=i.outputTokens,r.cacheReadInputTokens+=i.cacheReadInputTokens,r.cacheCreationInputTokens+=i.cacheCreationInputTokens};p(o.total);const c=o.models[u]??{turns:0,total:m()};return p(c.total),c.turns+=1,o.models[u]=c,o.turns+=1,o.lastCommittedSeqByGeneration[h]=s,o.updatedAt=Date.now(),this.values.set(e,o),this.scheduleWrite(),!0}delete(e){this.values.delete(e),this.scheduleWrite()}async flush(){await this.writePromise}scheduleWrite(){this.writePromise=this.writePromise.then(async()=>{T(f(this.filePath),{recursive:!0,mode:448}),await y(this.filePath,Object.fromEntries(this.values));try{d(this.filePath,384)}catch{}})}}const k=new Map;function I(t){let e=k.get(t);return e||(e=new g(t),e.load(),k.set(t,e)),e}export{g as DshSessionUsageStore,I as getDshSessionUsageStore,S as normalizeDshUsage};
|
|
Binary file
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"bridgeVersion": "3.26.11",
|
|
4
|
+
"tarball": "grix-dsh-bridge-3.26.11.tgz",
|
|
5
|
+
"size": 11972,
|
|
6
|
+
"unpackedSize": 46345,
|
|
7
|
+
"shasum": "65ed8f41a82ef17ee26007cc9f96c18f41489054",
|
|
8
|
+
"integrity": "sha512-aDHIAiM6U9KzbDh++TYyWRompdswmsyv6UrbE4ot9qxFtXlkWD7fyBhkEkkVmQfWkb1lHXND+WDdX2LiOfdMwg=="
|
|
9
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{closeSync as M,openSync as P,readSync as $}from"node:fs";import{referenceCaptureContent as z}from"../../core/content-reference.js";import{appendUniqueReference as x,assessToolCallCompleteness as B,deduplicateGaps as E}from"../../core/tool-call-audit.js";import{mapDshSessionEvent as U,unwrapDshSessionEvent as F}from"../../../adapter/deepseek-harness/event-mapper.js";import{normalizeDshUsage as H}from"../../../adapter/deepseek-harness/usage.js";const b=Object.freeze({inputOutput:!0,tools:!0,subagents:!0,thinking:!0,rawProviderBody:!1});function O(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function L(e){return e.options?.enabled===!0?e.options.capture:b}function N(e,t){return Number.isFinite(e)?new Date(e).toISOString():t}function D(e){if(typeof e=="string")return e;try{const t=JSON.stringify(e);return t===void 0?"null":t}catch{return String(e)}}function S(e,t){if(t.value!==void 0)return e.push(t),z(t)}class Y{provider="deepseek-harness";async collect(t){const c=String(t.boundary.wirePath??""),i=Number(t.boundary.wireStartOffset??0),s=Number(t.boundary.wireEndOffset??i);if(!c||!Number.isSafeInteger(i)||!Number.isSafeInteger(s)||s<i||s-i>32*1024*1024)return[];let a;try{a=P(c,"r")}catch{return[]}try{const p=Buffer.alloc(s-i),d=$(a,p,0,p.length,i);return p.subarray(0,d).toString("utf8").split(`
|
|
2
|
+
`).flatMap(r=>{if(!r.trim())return[];try{return[JSON.parse(r)]}catch{return[]}})}finally{M(a)}}async normalize(t,c){const i=Array.isArray(c)?c:[],s=L(t),a=[],p=[],d=new Map,r=`deepseek-harness:${t.turnId}:turn`,l=[J(t,r)],_=l[0];let u=1,A,g;const R=String(t.boundary.rootSessionId??"");s.inputOutput&&t.input&&x(_.inputRefs,S(a,{...t.input,captureLevel:t.input.captureLevel??"runtime_exact"})),s.inputOutput&&t.finalOutput&&x(_.outputRefs,S(a,{...t.finalOutput,captureLevel:t.finalOutput.captureLevel??"runtime_exact"}));for(const f of i){const v=f.frame??{},k=String(v.method??"");if(f.direction==="out"&&k==="session/prompt"){if(s.inputOutput){const o=O(v.params)?v.params:{},h=(Array.isArray(o.contentBlocks)?o.contentBlocks:[]).map(y=>O(y)?y:{}).filter(y=>y.type==="text").map(y=>String(y.text??"")).join("");x(_.inputRefs,S(a,{role:"user_input",format:"text",value:h,captureLevel:"runtime_exact"}))}continue}if(f.direction!=="in")continue;if(k==="subagent.started"||k==="subagent.finished"){const o=O(v.params)?v.params:{},m=String(o.childSessionId??o.sessionId??u);l.push(C(t,r,u++,"subagent",k,f.at,{nativeId:m})),k==="subagent.finished"&&s.subagents&&o.lastAssistantMessage!==void 0&&S(a,{role:"subagent_result",format:"text",value:String(o.lastAssistantMessage),captureLevel:"runtime_exact"});continue}if(k==="session.status"){const o=O(v.params)?v.params:{};l.push(C(t,r,u++,"agent",`session.status:${String(o.status??"unknown")}`,f.at,{nativeId:String(o.sessionId??u)}));continue}if(k!=="session.event")continue;const I=F(v.params);if(!I)continue;const n=U(I),T=String(I.sessionId??""),w=!!T&&!!R&&T!==R,q=N(f.at,t.startedAt);if(n.kind==="thinking"){s.thinking&&n.text&&S(a,{role:"thinking",format:"text",value:n.text,captureLevel:"runtime_exact"});continue}if(n.kind==="context"){const o=String(n.payload?.provider??""),m=String(n.payload?.model??"");o&&(g=o),m&&(A=m);continue}if(n.kind!=="usage"){if(n.kind==="text"&&n.payload?.committed){s.inputOutput&&!w&&n.text?x(_.outputRefs,S(a,{role:"assistant_text",format:"text",value:n.text,captureLevel:"runtime_exact"})):s.subagents&&w&&n.text&&S(a,{role:"subagent_result",format:"text",value:n.text,captureLevel:"runtime_exact"}),n.usage&&l.push(G(t,r,u++,f.at,n.usage,Number(I.seq??u),A,g));continue}if(n.kind==="tool_call"){const o=n.callId||String(u),m=n.name||"tool",h=C(t,r,u++,"tool_call",m,f.at,{nativeId:o,toolCallId:o});h.status="running",s.tools&&x(h.inputRefs,S(a,{role:"tool_arguments",format:typeof n.input=="string"?"text":"json",value:D(n.input??{}),captureLevel:"runtime_exact"})),d.set(o,{span:h}),l.push(h);continue}if(n.kind==="tool_result"){const o=n.callId||"",m=o?d.get(o):void 0;if(!m){p.push({code:"dsh_tool_result_without_call",message:`No tool/call found for ${o||`seq-${I.seq??u}`}`,providerIds:o?{toolCallId:o}:void 0});continue}m.span.status="completed",m.span.endedAt=q;const h=Date.parse(m.span.startedAt),y=Date.parse(q);Number.isFinite(h)&&Number.isFinite(y)&&(m.span.durationMs=Math.max(0,y-h)),s.tools&&x(m.span.outputRefs,S(a,{role:"tool_result",format:typeof n.output=="string"?"text":"json",value:D(n.output??""),captureLevel:"runtime_exact"}));continue}if(n.kind==="compaction"){l.push(C(t,r,u++,"compaction",String(n.payload?.eventType??I.type),f.at,{nativeId:String(I.seq??u)}));continue}(n.kind==="todo"||n.kind==="turn_end")&&l.push(C(t,r,u++,"agent",n.kind==="todo"?"todo/write":`turn/end:${n.reason??"completed"}`,f.at,{nativeId:String(I.seq??u)}))}}for(const[f,v]of d)v.span.status==="running"&&p.push({code:"dsh_tool_result_missing",message:`Tool call ${f} has no result`,spanId:v.span.spanId,providerIds:{toolCallId:f}});return{spans:l,contents:a,anomalies:p,capture:s,recordCount:i.length}}async correlate(t,c){return c}validate(t,c){const i=c,s=i.capture??L(t),a=i.spans.filter(g=>g.kind==="llm_request"),p=i.spans.filter(g=>g.kind==="tool_call"),d=!s.inputOutput||!!t.input||i.contents.some(g=>g.role==="user_input"),r=!s.inputOutput||!!t.finalOutput||i.contents.some(g=>g.role==="assistant_text"),l=B(p,s.tools),_=a.length>0&&a.every(g=>g.usage?.completeness==="complete"),u=E([...l.gaps]);s.rawProviderBody&&u.push({category:"raw_provider_body",reason:"raw_capture_disabled",detail:"Harness JSON-RPC does not expose provider HTTP raw bodies"});const A=d&&r&&l.complete&&_&&!s.rawProviderBody&&u.length===0;return{status:i.recordCount===0?"metadata_only":A?"complete":"partial",inputComplete:d,outputComplete:r,toolCallsComplete:l.complete,subagentsComplete:!0,usageComplete:_,rawRequestsComplete:!1,gaps:u}}}function J(e,t){return{spanId:t,traceId:e.traceId,turnId:e.turnId,sessionId:e.sessionId,kind:"turn",name:"DeepSeek Harness turn",sequence:0,status:e.outcome==="completed"?"completed":e.outcome==="cancelled"?"cancelled":"failed",startedAt:e.startedAt,endedAt:e.endedAt,inputRefs:[],outputRefs:[],provider:{provider:"deepseek-harness",nativeIds:{runtimeSessionId:String(e.boundary.runtimeSessionId??""),messageId:String(e.boundary.messageId??"")}},provenance:{source:"provider_event",accuracy:"runtime_exact"}}}function C(e,t,c,i,s,a,p){const d=N(a,e.startedAt);return{spanId:`deepseek-harness:${e.turnId}:${c}`,traceId:e.traceId,turnId:e.turnId,sessionId:e.sessionId,parentSpanId:t,kind:i,name:s,sequence:c,status:"completed",startedAt:d,endedAt:d,inputRefs:[],outputRefs:[],provider:{provider:"deepseek-harness",nativeEventType:s,nativeIds:p},provenance:{source:"provider_event",accuracy:"runtime_exact"}}}function G(e,t,c,i,s,a,p,d){const r=H(s),l={input:{total:r.inputTokens,uncached:null,cacheRead:r.cacheReadInputTokens,cacheWrite:r.cacheCreationInputTokens,other:null},output:{total:r.outputTokens,reasoning:r.reasoningTokens,visible:Math.max(0,r.outputTokens-r.reasoningTokens)},totalProcessed:r.inputTokens+r.outputTokens,requestCount:1,accuracy:"provider_reported",completeness:"complete",provider:"deepseek-harness",providerUsageRaw:s,normalization:{adapter:"deepseek-harness-jsonrpc",version:1,formula:"provider committed assistant/message usage"}};return{...C(e,t,c,"llm_request","assistant/message",i,{nativeId:String(a),requestId:String(a),...p?{model:p}:{},...d?{providerId:d}:{}}),...p?{modelId:p}:{},usage:l}}export{Y as DeepSeekHarnessAuditAdapter};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AUDIT_ERROR_CODES as d}from"./types.js";const u=new Set(["claude","codex","acp","pi","codewhale","cursor","opencode"]);class s extends Error{code=d.turnScopeUnsupported;constructor(r){super(`Turn-scoped audit is not supported for provider ${r}`),this.name="AuditTurnScopeUnsupportedError"}}class t extends Error{code=d.preparationFailed;constructor(r){super(`Audit turn preparation failed: ${r}`),this.name="AuditPreparationFailedError"}}function a(e){if(!u.has(e))throw new s(e)}function
|
|
1
|
+
import{AUDIT_ERROR_CODES as d}from"./types.js";const u=new Set(["claude","codex","acp","pi","codewhale","cursor","opencode","deepseek-harness"]);class s extends Error{code=d.turnScopeUnsupported;constructor(r){super(`Turn-scoped audit is not supported for provider ${r}`),this.name="AuditTurnScopeUnsupportedError"}}class t extends Error{code=d.preparationFailed;constructor(r){super(`Audit turn preparation failed: ${r}`),this.name="AuditPreparationFailedError"}}function a(e){if(!u.has(e))throw new s(e)}function n(e,r){return{event_id:e.eventId,session_id:e.sessionId,state:e.state,...e.msgId===void 0?{}:{msg_id:e.msgId},...e.auditId===void 0?{}:{audit_id:e.auditId},...e.turnId===void 0?{}:{turn_id:e.turnId},...e.revision===void 0?{}:{revision:e.revision},...e.quality===void 0?{}:{quality:e.quality},...e.truncated===void 0?{}:{truncated:e.truncated},...e.errorCode===void 0?{}:{error_code:e.errorCode},...e.errorMessage===void 0?{}:{error_message:e.errorMessage},updated_at:r}}export{t as AuditPreparationFailedError,s as AuditTurnScopeUnsupportedError,u as TURN_SCOPE_SUPPORTED_PROVIDERS,a as assertTurnScopeSupported,n as buildAuditStatePayload};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AuditAdapterRegistry as d,ReplayFinalizer as s}from"../core/replay-finalizer.js";import{ClaudeAuditAdapter as c}from"../adapters/claude/claude-audit-adapter.js";import{CodexAuditAdapter as
|
|
1
|
+
import{AuditAdapterRegistry as d,ReplayFinalizer as s}from"../core/replay-finalizer.js";import{ClaudeAuditAdapter as c}from"../adapters/claude/claude-audit-adapter.js";import{CodexAuditAdapter as p}from"../adapters/codex/codex-audit-adapter.js";import{PiAuditAdapter as a}from"../adapters/pi/pi-audit-adapter.js";import{AcpAuditAdapter as u}from"../adapters/acp/acp-audit-adapter.js";import{CodeWhaleAuditAdapter as f}from"../adapters/codewhale/codewhale-audit-adapter.js";import{CursorAuditAdapter as m}from"../adapters/cursor/cursor-audit-adapter.js";import{OpenCodeAuditAdapter as A}from"../adapters/opencode/opencode-audit-adapter.js";import{DeepSeekHarnessAuditAdapter as l}from"../adapters/deepseek-harness/deepseek-harness-audit-adapter.js";import{FileAuditReplayStore as R}from"../storage/file-audit-replay-store.js";import{AUDIT_RECORDER_PROTOCOL_VERSION as w,isAuditRecorderParentMessage as g}from"./audit-recorder-ipc-protocol.js";import{AuditRecorderWorker as _}from"./audit-recorder-worker.js";const E=3600*1e3;function y(e){if(!e.storageRootDir.trim())throw new Error("Recorder storageRootDir is required");const r=new R({rootDir:e.storageRootDir}),t=new d;return t.register(new c),t.register(new p),t.register(new a),t.register(new u),t.register(new f),t.register(new m),t.register(new A),t.register(new l),{finalizer:new s(t,r),store:r}}function i(e){if(!(!process.connected||typeof process.send!="function"))try{process.send(e,()=>{})}catch{}}let n,o;process.on("message",e=>{if(g(e)){if(e.type==="audit_recorder_initialize"){if(n)return;try{const r=y(e.config);r.store.pruneExpired().catch(()=>{}),o=setInterval(()=>{r.store.pruneExpired().catch(()=>{})},E),o.unref?.(),n=new _({finalizer:r.finalizer,maxQueueSize:e.config.maxWorkerQueueSize,send:i,onStopped:()=>{o&&clearInterval(o),o=void 0,setImmediate(()=>{process.connected&&process.disconnect?.()})}}),i({type:"audit_recorder_ready",protocolVersion:w})}catch(r){i({type:"audit_recorder_fatal",error:r instanceof Error?r.message:String(r)}),setImmediate(()=>{process.connected&&process.disconnect?.()})}return}n?.handle(e)}}),process.on("disconnect",()=>{o&&clearInterval(o),o=void 0,process.exitCode=0});
|