@kodax-ai/kodax 0.7.96-beta.6 → 0.7.96-beta.8
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/CHANGELOG.md +43 -0
- package/README.md +17 -1
- package/README_CN.md +13 -1
- package/dist/chunks/{agent-YLACEO4O.js → agent-XBT4ZUCG.js} +1 -1
- package/dist/chunks/argument-completer-WF7FTTWB.js +2 -0
- package/dist/chunks/{chunk-DE6LTK75.js → chunk-57PKLDQI.js} +1 -1
- package/dist/chunks/{chunk-FJCIXSA2.js → chunk-5KG5LAUO.js} +1 -1
- package/dist/chunks/{chunk-R5KZ6VTX.js → chunk-6ABV6WUL.js} +1 -1
- package/dist/chunks/{chunk-737MIK3X.js → chunk-DGMNCSI3.js} +133 -133
- package/dist/chunks/{chunk-3WUM7FEF.js → chunk-F7JMG426.js} +135 -135
- package/dist/chunks/{chunk-33HFMRDF.js → chunk-FZUPRAHK.js} +1 -1
- package/dist/chunks/{chunk-7EIJFMUQ.js → chunk-HFTCGOBB.js} +2 -2
- package/dist/chunks/{chunk-74NX3QYO.js → chunk-JA2DY4EC.js} +1 -1
- package/dist/chunks/{chunk-ERTJLJ66.js → chunk-JBOJY7LE.js} +1 -1
- package/dist/chunks/{chunk-RZD74TRO.js → chunk-KHPUDIG7.js} +194 -195
- package/dist/chunks/chunk-MO3TCAKM.js +384 -0
- package/dist/chunks/chunk-P4OGLGQF.js +321 -0
- package/dist/chunks/{chunk-XB3XM75P.js → chunk-R6JRHSQR.js} +1 -1
- package/dist/chunks/{chunk-HFXXLSY5.js → chunk-ROSCR2VP.js} +2 -2
- package/dist/chunks/{chunk-RPTNKNZG.js → chunk-V7ZTP5SV.js} +24 -24
- package/dist/chunks/{chunk-TKAYTO6W.js → chunk-VNTIH7QD.js} +1 -1
- package/dist/chunks/{chunk-JQMSG2WG.js → chunk-WAKPBFEA.js} +2 -2
- package/dist/chunks/{chunk-YRIFVRVY.js → chunk-WXBRPZMI.js} +2 -2
- package/dist/chunks/{chunk-STHS3HRP.js → chunk-Y6VGGIKD.js} +1 -1
- package/dist/chunks/{chunk-GRNAJPQQ.js → chunk-YURCMKAL.js} +1 -1
- package/dist/chunks/chunk-ZMXVACRD.js +345 -0
- package/dist/chunks/{client-U47ZCHQ5.js → client-GI3J32G4.js} +1 -1
- package/dist/chunks/{compaction-config-CTMBDU4B.js → compaction-config-BUDCDBHY.js} +1 -1
- package/dist/chunks/{construction-bootstrap-E6I6PZV6.js → construction-bootstrap-JWUX7O3Z.js} +1 -1
- package/dist/chunks/{dist-T4JLXZRR.js → dist-7K3VYIPU.js} +1 -1
- package/dist/chunks/{dist-3LGBBPTI.js → dist-LR7HVFHX.js} +1 -1
- package/dist/chunks/host-CZG5BNSF.js +2 -0
- package/dist/chunks/run-manager-PIGUJW3L.js +2 -0
- package/dist/chunks/{utils-TPD7GVW7.js → utils-VEOO7TBI.js} +1 -1
- package/dist/constructed-handler-worker.js +1 -1
- package/dist/index.d.ts +14 -14
- package/dist/index.js +1 -1
- package/dist/kodax_bootstrap.js +1 -1
- package/dist/kodax_cli.js +1311 -1313
- package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
- package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
- package/dist/native/win32-x64/manifest.json +2 -2
- package/dist/runtime-worker.js +1190 -1193
- package/dist/sandbox-network-broker.js +77 -77
- package/dist/sdk-a2a.d.ts +9 -9
- package/dist/sdk-a2a.js +1 -1
- package/dist/sdk-agent.d.ts +13 -10
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +29 -28
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.d.ts +2 -2
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.d.ts +3 -2
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +4 -1
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +12 -12
- package/dist/sdk-repl.js +1 -1
- package/dist/sdk-runtime.d.ts +35 -15
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-sandbox.js +1 -1
- package/dist/sdk-session.d.ts +5 -5
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +60 -60
- package/dist/types-chunks/{bash-prefix-extractor.d-DZzEamhN.d.ts → bash-prefix-extractor.d-bWj6gAhF.d.ts} +11 -9
- package/dist/types-chunks/{capability.d-K664nHOS.d.ts → capability.d-D64w-LP1.d.ts} +5 -1
- package/dist/types-chunks/{capsule.d-BCbfpUmE.d.ts → capsule.d-CUkwG98f.d.ts} +1 -1
- package/dist/types-chunks/{controller.d-DCSJgOM2.d.ts → controller.d-ChzX_KpU.d.ts} +2 -2
- package/dist/types-chunks/{exec-policy.d-CHTikszX.d.ts → exec-policy.d-Bxi_R0VE.d.ts} +2 -2
- package/dist/types-chunks/{manager.d-B67TmPO1.d.ts → manager.d-CzNCeCuT.d.ts} +4 -3
- package/dist/types-chunks/{public-api.d-BKbFMxg8.d.ts → public-api.d-D9-qDqh8.d.ts} +31 -6
- package/dist/types-chunks/{resolver.d-S_oZtYBS.d.ts → resolver.d-CJlv-ItU.d.ts} +1 -0
- package/dist/types-chunks/{run-manager.d-CyctAOlr.d.ts → run-manager.d-CiWW5-OM.d.ts} +1 -1
- package/dist/types-chunks/{sdk-session-BE2tlwBs.d.ts → sdk-session-DpYJAre-.d.ts} +1 -1
- package/dist/types-chunks/{shell-command-sets.d-DuXtT1XY.d.ts → shell-command-sets.d-Db8Zm42g.d.ts} +1 -1
- package/dist/types-chunks/{trusted-repl-entry-_ORN3di2.d.ts → trusted-repl-entry-BLBfln-c.d.ts} +4 -4
- package/dist/types-chunks/{types.d-HKILN-uL.d.ts → types.d-BtpNflsM.d.ts} +4 -4
- package/dist/types-chunks/{types.d-voYXci-b.d.ts → types.d-CXtyICUW.d.ts} +1 -1
- package/dist/types-chunks/{utils.d-JZc49Yi4.d.ts → utils.d-BGPRMOUS.d.ts} +4 -4
- package/package.json +1 -1
- package/public_docs/README.md +8 -3
- package/public_docs/sdk/embedder-guide.md +2 -2
- package/dist/chunks/argument-completer-PVUCYVPK.js +0 -2
- package/dist/chunks/chunk-7IXST5B2.js +0 -384
- package/dist/chunks/chunk-NLXUU3XG.js +0 -319
- package/dist/chunks/chunk-NYY22UMB.js +0 -349
- package/dist/chunks/host-2ADKC6G3.js +0 -2
- package/dist/chunks/run-manager-GORI5NCM.js +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,49 @@ All notable changes to this project will be documented in this file.
|
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
+
## [0.7.96-beta.8] - 2026-09-11
|
|
12
|
+
|
|
13
|
+
Eighth beta pre-release of the v0.7.96 line: an explicit, audited opt-in for
|
|
14
|
+
legacy interrupt identities, retaining every beta.7 contract. npm
|
|
15
|
+
publication remains a manual maintainer action.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- Add `runtime.sessions.confirmIdentityAlias` for explicitly confirmed legacy
|
|
20
|
+
interrupt identities. Registration verifies the original delivery receipt and
|
|
21
|
+
session revision, preserves an immutable audit record, and rejects competing
|
|
22
|
+
claims. Subsequent conversation, page and chunk reads apply the alias across
|
|
23
|
+
saves, compaction and restart; older caches rebuild. Original messages and
|
|
24
|
+
journal events remain intact. Unconfirmed historical identities are not inferred
|
|
25
|
+
from text, timestamps or turn IDs.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## [0.7.96-beta.7] - 2026-09-11
|
|
30
|
+
|
|
31
|
+
The seventh beta pre-release of the v0.7.96 line: it carries every numbered-beta
|
|
32
|
+
contract (sandbox-first permissions, trusted text, Windows setup generation
|
|
33
|
+
11, context recovery, DeepSeek Anthropic-compat endpoint, compaction summary
|
|
34
|
+
policy, wire-faithful prompt-cache diagnostics) plus the multimodal and
|
|
35
|
+
interrupt-identity fixes below. npm publication remains a manual maintainer
|
|
36
|
+
action.
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- Preserve text/image tool results through direct and managed dispatch, constructed
|
|
41
|
+
Worker RPC, allowing guardrails, capacity recovery and MCP tool/resource adapters.
|
|
42
|
+
MCP images persist as attachments; image-capable OpenAI providers receive tool
|
|
43
|
+
images after valid paired responses, with matching prompt-cache diagnostics.
|
|
44
|
+
- Carry local execution failures and Worker error codes through child results,
|
|
45
|
+
Actor metadata and Runtime/daemon status. Returned managed/MCP errors retain
|
|
46
|
+
their error classification instead of appearing successful or as provider faults.
|
|
47
|
+
- Keep delivered interrupt entry references valid across context rewrites,
|
|
48
|
+
storage reads/saves, compaction, restart and conversation pagination. Preserve
|
|
49
|
+
explicit provenance, resolve physical ancestor aliases, reject competing claims,
|
|
50
|
+
and rebuild older conversation caches. Equal text or timestamps never create aliases.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
11
54
|
## [0.7.96-beta.6] - 2026-09-11
|
|
12
55
|
|
|
13
56
|
Sixth beta pre-release of the v0.7.96 line: a review-hardening pass that
|
package/README.md
CHANGED
|
@@ -784,6 +784,22 @@ provider's model, REPL `/compact` clears the UI only after a durable save, and
|
|
|
784
784
|
successful reports carry bounded `summaryRequests` plus `commitMs` per
|
|
785
785
|
physical summary call.
|
|
786
786
|
|
|
787
|
+
**v0.7.96-beta.8 release:** Adds `runtime.sessions.confirmIdentityAlias`
|
|
788
|
+
for explicitly confirmed legacy interrupt identities: registration verifies
|
|
789
|
+
the original delivery receipt and session revision, preserves an immutable
|
|
790
|
+
audit record, and rejects competing claims. The alias applies across saves,
|
|
791
|
+
compaction, restart, and pagination; original messages and journal events
|
|
792
|
+
stay intact, and unconfirmed historical identities are never inferred from
|
|
793
|
+
text, timestamps, or turn IDs.
|
|
794
|
+
|
|
795
|
+
**v0.7.96-beta.7 release:** The seventh beta pre-release of the v0.7.96 line. It
|
|
796
|
+
adds multimodal result fidelity — text/image tool results survive direct and
|
|
797
|
+
managed dispatch, Worker RPC, guardrails, capacity recovery, and MCP
|
|
798
|
+
adapters (MCP images persist as attachments) — carries typed local failures
|
|
799
|
+
through child results, Actor metadata, and Runtime/daemon status, and keeps
|
|
800
|
+
delivered interrupt entry references valid across context rewrites,
|
|
801
|
+
storage reads, compaction, restart, and conversation pagination.
|
|
802
|
+
|
|
787
803
|
**v0.7.96-beta.6 release:** Windows shell admission now follows the
|
|
788
804
|
Codex concurrency boundary: versioned setup performs legacy migration once,
|
|
789
805
|
while ordinary admission accepts effective inherited normal-token access and
|
|
@@ -833,7 +849,7 @@ requests, preserves structured Child Agent Provider failures, honors exact
|
|
|
833
849
|
run-scoped credential verification, and omits empty `tools` arrays for strict
|
|
834
850
|
vLLM gateways (Issues 329-332). npm publication remains a
|
|
835
851
|
manual maintainer action. See the
|
|
836
|
-
[release checklist](docs/release.md#v0796-
|
|
852
|
+
[release checklist](docs/release.md#v0796-beta8-release-preparation).
|
|
837
853
|
|
|
838
854
|
**v0.7.96-alpha.3 release:** Provider credentials are lazy, scoped,
|
|
839
855
|
revocable capabilities (ADR-068). The v2 credential broker keeps Provider
|
package/README_CN.md
CHANGED
|
@@ -296,6 +296,18 @@ SDK 系统代码契约更新,但没有放宽 shell/sandbox 的 fail-closed 边
|
|
|
296
296
|
`handleRuntimePermissionRequest()` 管理 SDK 权限 UI,并在 prepared Session 尾部遇到
|
|
297
297
|
`data_changed` 时通过权威 delta 合并恢复;后台持久化失败会显示为诊断,不再静默丢失。
|
|
298
298
|
|
|
299
|
+
**v0.7.96-beta.8 发布**:新增 `runtime.sessions.confirmIdentityAlias`,
|
|
300
|
+
用于显式确认的遗留中断标识:注册时验证原始投递回执与 session revision,
|
|
301
|
+
保留不可变审计记录并拒绝竞争声明。别名跨保存、压缩、重启与分页生效;
|
|
302
|
+
原始消息与 journal 事件保持不变,且绝不从文本、时间戳或 turn ID 推断
|
|
303
|
+
未确认的历史标识。
|
|
304
|
+
|
|
305
|
+
**v0.7.96-beta.7 发布**:新增多模态结果保真——
|
|
306
|
+
文本/图片工具结果在直接与托管分发、Worker RPC、guardrail、容量恢复与 MCP
|
|
307
|
+
适配器中完整保留(MCP 图片持久化为附件);本地执行失败以类型化错误贯穿
|
|
308
|
+
child 结果、Actor 元数据与 Runtime/daemon 状态;已投递中断条目引用在上下文
|
|
309
|
+
重写、存储读写、压缩、重启与分页中保持有效。
|
|
310
|
+
|
|
299
311
|
beta.6 让 prompt-cache 诊断与真实 provider wire 对齐:保留的孤立 `tool_use`
|
|
300
312
|
调用在其配对范围内以 interrupted-tool 标记应答,assistant 投影保持源顺序,
|
|
301
313
|
诊断哈希因此描述实际发送的消息。新增 224 个 wire 契约用例,验证投影包络在
|
|
@@ -350,7 +362,7 @@ scope 在 SDK、Agent 摘要、CLI 与 Runtime Worker 请求间共享,保留
|
|
|
350
362
|
失败信息,精确遵循 run-scoped 凭据校验,并为严格 vLLM 网关省略空 `tools` 数组(Issues 329-332)。
|
|
351
363
|
npm 发布仍由
|
|
352
364
|
npm 发布仍由
|
|
353
|
-
维护者手动执行。详见 [v0.7.96-beta.
|
|
365
|
+
维护者手动执行。详见 [v0.7.96-beta.8 发布清单](docs/release.md#v0796-beta8-release-preparation)。
|
|
354
366
|
|
|
355
367
|
**v0.7.96-alpha.3 发布**:Provider 凭据成为惰性、受限、可撤销的能力(ADR-068)。v2
|
|
356
368
|
credential broker 将 Provider 密钥保留在 OS keychain,按每次 wire call、为单一封闭
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{Aa as e,Ba as f,Ra as g,Ta as h,a as c,hb as i,ib as j,qb as k,za as d}from"./chunk-
|
|
2
|
+
import{Aa as e,Ba as f,Ra as g,Ta as h,a as c,hb as i,ib as j,qb as k,za as d}from"./chunk-ZMXVACRD.js";import"./chunk-JA2DY4EC.js";import"./chunk-KHPUDIG7.js";import"./chunk-5KG5LAUO.js";import"./chunk-Y6VGGIKD.js";import{Ob as a,Pb as b}from"./chunk-F7JMG426.js";import"./chunk-WXBRPZMI.js";import"./chunk-V7ZTP5SV.js";import"./chunk-ONUPGMER.js";export{e as bucketProviderPayloadSize,g as buildAutoRepoIntelligenceContext,f as checkPromiseSignal,b as cleanupIncompleteToolCalls,h as describeTransientProviderRetry,c as emitResilienceDebug,d as estimateProviderPayloadBytes,k as runKodaX,j as saveRequiredSessionSnapshot,i as saveSessionSnapshot,a as validateAndFixToolHistory};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{Ma as a,Na as b}from"./chunk-HFTCGOBB.js";import"./chunk-WAKPBFEA.js";import"./chunk-YURCMKAL.js";import"./chunk-DGMNCSI3.js";import"./chunk-FZUPRAHK.js";import"./chunk-ZMXVACRD.js";import"./chunk-JA2DY4EC.js";import"./chunk-ROSCR2VP.js";import"./chunk-KHPUDIG7.js";import"./chunk-5KG5LAUO.js";import"./chunk-Y6VGGIKD.js";import"./chunk-F7JMG426.js";import"./chunk-WXBRPZMI.js";import"./chunk-V7ZTP5SV.js";import"./chunk-ONUPGMER.js";export{a as ArgumentCompleter,b as createArgumentCompleter};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{a as hn,b as vn,c as De,d as xn,e as kn,f as En,g as cr,h as Rn,k as en,l as lr,m as ur,n as fr,o as nn,p as wr}from"./chunk-
|
|
2
|
+
import{a as hn,b as vn,c as De,d as xn,e as kn,f as En,g as cr,h as Rn,k as en,l as lr,m as ur,n as fr,o as nn,p as wr}from"./chunk-JBOJY7LE.js";import{Fc as dr,Ka as me,Ya as rr,_a as tr,ab as xe,bb as or,fb as Sn,hb as ke,kb as Oe,ob as ir,pb as sr,rb as ar,v as L}from"./chunk-F7JMG426.js";import{a}from"./chunk-ONUPGMER.js";import{spawn as qe,spawnSync as we}from"node:child_process";import{createHash as Xe,randomInt as jt,randomUUID as B}from"node:crypto";import{once as Ut}from"node:events";import{closeSync as Dn,constants as an,existsSync as qn,fsyncSync as Ft,lstatSync as ae,mkdirSync as qr,openSync as Xr,readFileSync as Ie,readSync as Vt,readdirSync as Jr,realpathSync as K,renameSync as Kt,rmSync as un,statSync as _e,writeFileSync as Hr,writeSync as qt}from"node:fs";import{copyFile as zr,lstat as Xt,mkdir as ne,readFile as Me,realpath as je,rm as H,stat as dn,writeFile as Ue}from"node:fs/promises";import{createRequire as Jt}from"node:module";import{createServer as Ht}from"node:net";import U from"node:os";import l from"node:path";import{lstatSync as vt,readFileSync as xt,readdirSync as pr,realpathSync as kt}from"node:fs";import C from"node:path";import{globSync as Et}from"glob";var Rt=[".ssh",".tsh",".brev",".gnupg",".aws",".azure",".kube",".docker",".config",".npm",".pki",".terraform.d"],At=new Set(["certificatefile","controlpath","globalknownhostsfile","identityagent","identityfile","revokedhostkeys","userknownhostsfile"]);function oe(e){try{return kt.native(e).toLowerCase()}catch(r){return["ENOENT","ENOTDIR"].includes(r.code??"")||L({source:"sandbox:ssh-config",level:"warn",message:`Cannot canonicalize SSH ACL path: ${e}`,detail:r}),C.resolve(e).toLowerCase()}}a(oe,"pathKey");function gr(e,r){return r===e||r.startsWith(e.endsWith(C.sep)?e:`${e}${C.sep}`)}a(gr,"inside");function Wt(e){let r=[],n="",t;for(let o=0;o<e.length;o+=1){let i=e[o];if(i==="#"&&t===void 0)break;if(i===t){t=void 0;continue}if((i==='"'||i==="'")&&t===void 0){t=i;continue}let s=e[o+1];i==="\\"&&s!==void 0&&(['"',"'","\\"].includes(s)||t===void 0&&s===" ")?(n+=s,o+=1):/\s/.test(i)&&t===void 0?(n&&r.push(n),n=""):n+=i}return n&&r.push(n),r}a(Wt,"sshWords");function Ct(e,r,n){if(e.toLowerCase()==="none")return;if(["~","%d","${HOME}"].includes(e))return r;let t=e.replace(/^(?:~|%d|\$\{HOME\})[/\\]/,`${r}${C.sep}`);return C.isAbsolute(t)?C.resolve(t):n===void 0?void 0:C.resolve(n,t)}a(Ct,"sshPath");function An(e,r,n,t,o=0){let i=oe(e);if(t.has(i))return;if(o>=32){L({source:"sandbox:ssh-config",level:"warn",message:`SSH Include depth limit reached; dependencies beyond this config were not inspected: ${e}`});return}t.add(i);let s;try{s=xt(e,"utf8")}catch(d){if(d.code==="ENOENT")return;L({source:"sandbox:ssh-config",level:"warn",message:`Cannot inspect SSH configuration dependencies: ${e}`,detail:d});return}for(let d of s.split(/\r?\n/)){let c=Wt(d.replace(/^(\s*[^\s=]+)\s*=\s*/,"$1 ")),u=c.shift()?.toLowerCase();if(u!==void 0)for(let f of c){let p=Ct(f,r,u==="include"?C.join(r,".ssh"):void 0);if(p!==void 0)if(u==="include")for(let g of Et(p.replace(/\\/g,"/"),{nodir:!0}))n.push(g),An(g,r,n,t,o+1);else At.has(u)&&n.push(p)}}}a(An,"visitSshConfig");function de(e){let r=[];An(C.join(e,".ssh","config"),e,r,new Set);let n=oe(e),t=Rt.map(o=>C.join(e,o));for(let o of r){let i=C.relative(n,oe(o));i&&!i.startsWith(`..${C.sep}`)&&i!==".."&&!C.isAbsolute(i)&&t.push(C.join(e,i.split(C.sep)[0]))}return[...new Set(t.map(o=>C.resolve(o)))]}a(de,"windowsSandboxAclExclusions");function mr(e){let r=[];An(C.join(e,".ssh","config"),e,r,new Set);let n=[C.join(e,".ssh")];for(;n.length>0;){let t=n.pop();r.push(t);let o;try{if(vt(t).isSymbolicLink())continue;o=pr(t,{withFileTypes:!0})}catch(i){if(i.code==="ENOENT")continue;throw i}for(let i of o){if(i.isSymbolicLink())continue;let s=C.join(t,i.name);r.push(s),i.isDirectory()&&n.push(s)}}return[...new Set(r.filter(t=>gr(oe(e),oe(t))))]}a(mr,"windowsSandboxSshCleanupRoots");function Ee(e,r,n){let t=oe(r),o=n.flatMap(s=>[C.resolve(s).toLowerCase(),oe(s)]),i=e.flatMap(s=>oe(s)===t?pr(r,{withFileTypes:!0}).filter(d=>!d.isSymbolicLink()).map(d=>C.join(r,d.name)):[s]);return[...new Set(i)].filter(s=>![C.resolve(s).toLowerCase(),oe(s)].some(c=>o.some(u=>gr(u,c))))}a(Ee,"windowsSandboxAclRoots");import{fileURLToPath as _r,pathToFileURL as Yr}from"node:url";import{realpathSync as Pt,statSync as Nt}from"node:fs";import _t from"node:path";function Wn(e){let r=e.code;return r==="ENOENT"||r==="ENOTDIR"}a(Wn,"isMissingGitTrustPath");function br(e,r,n){try{let t=r(e).replaceAll("\\","/").replace(/\/+$/,"");return t===""?void 0:/^[A-Za-z]:$/.test(t)?`${t}/`:t}catch(t){if(n(t))return;throw t}}a(br,"normalizeGitSafeDirectoryRootImplementation");function Tt(e){return br(e,Pt,Wn)}a(Tt,"normalizeGitSafeDirectoryRoot");function Sr(e,r,n,t){try{let i=r(n.join(e,".git"));if(i.isDirectory()||i.isFile())return!0}catch(i){if(!t(i))throw i}if(!(n.basename(e).toLowerCase()===".git"||/[/\\]\.git[/\\]modules[/\\]/i.test(e)))return!1;try{return r(n.join(e,"HEAD")).isFile()}catch(i){if(t(i))return!1;throw i}}a(Sr,"isRepoBearingGitReadRootImplementation");function It(e){return Sr(e,Nt,_t,Wn)}a(It,"isRepoBearingGitReadRoot");function hr(e,r,n,t,o){let i=[];typeof e=="string"&&e!==""&&i.push(e);for(let c of n??[])o(c)&&i.push(c);i.push(...r??[]);let s=[],d=new Set;for(let c of i){if(s.length>=8)break;let u=t(c);if(u===void 0)continue;let f=u.toLowerCase();d.has(f)||(d.add(f),s.push(u))}return s}a(hr,"windowsGitTrustRootsImplementation");function vr(e,r,n){return hr(e,r,n,Tt,It)}a(vr,"windowsGitTrustRoots");function xr(e){if(e==="git_config_count")return"count";if(/^git_config_key_\d+$/.test(e))return"key";if(/^git_config_value_\d+$/.test(e))return"value"}a(xr,"gitConfigEnvKind");function Ot(e,r,n,t,o){let i=new Map,s=[],d,c=!1;for(let u=0;u<r;u+=1){if(e[u]!=="--env"||u+1>=r)continue;let f=e[u+1],p=f.indexOf("="),g=(p<0?f:f.slice(0,p)).toLowerCase(),w=n(g);if(w===void 0)continue;c=!0,s.push(u);let m=p<0?"":f.slice(p+1);if(w==="count"){let W=Number.parseInt(m,10);(d!==void 0||!Number.isSafeInteger(W)||W<0||String(W)!==m)&&t(),d=W;continue}let S=Number.parseInt(g.slice(`git_config_${w}_`.length),10),h=i.get(S)??{};(!Number.isSafeInteger(S)||S<0||h[w]!==void 0)&&t(),h[w]=m,i.set(S,h)}return o(i,s,d,c,t)}a(Ot,"parseGitConfigEnvironmentImplementation");function rn(){throw new Error("ASRT GIT_CONFIG environment has an unexpected shape.")}a(rn,"throwUnexpectedGitConfigShape");function kr(e,r,n,t,o){!t||n!==void 0&&e.size===n&&[...e].every(([d,c])=>d<n&&c.key!==void 0&&c.value!==void 0)||o();let s=[...e].map(([d,c])=>({slot:d,key:c.key,value:c.value}));return{argumentIndices:r,pairs:s,sawAny:t}}a(kr,"finishParsedGitConfigEnvironment");function Er(e,r){let n=[];for(let o of e)n.push({key:"safe.directory",value:o},{key:"safe.directory",value:`${o}/*`});n.push(...r);let t=n.flatMap((o,i)=>[`GIT_CONFIG_KEY_${i}=${o.key}`,`GIT_CONFIG_VALUE_${i}=${o.value}`]);return t.push(`GIT_CONFIG_COUNT=${n.length}`),t}a(Er,"gitSafeDirectoryAssignments");function yr(e,r){let n=[],t=new Set;for(let[o,i]of Object.entries(e)){if(i===void 0)continue;if(o===""||o.includes("=")||o.includes("\0")||i.includes("\0"))throw new Error(`Invalid ${r} environment entry.`);let s=o.toUpperCase();if(t.has(s))throw new Error(`Ambiguous ${r} environment variable: ${o}.`);t.add(s),n.push([o,i])}return n}a(yr,"validatedEnvironmentEntries");function Dt(e,r){let n=new Map,t=[],o,i=!1;for(let[u,f]of Object.entries(e)){let p=u.toLowerCase(),g=xr(p);if(g===void 0){t.push([u,f]);continue}if(i=!0,g==="count"){let S=Number.parseInt(f,10);(o!==void 0||!Number.isSafeInteger(S)||S<0||String(S)!==f)&&rn(),o=S;continue}let w=Number.parseInt(p.slice(`git_config_${g}_`.length),10),m=n.get(w)??{};(!Number.isSafeInteger(w)||w<0||m[g]!==void 0)&&rn(),m[g]=f,n.set(w,m)}let d=kr(n,[],o,i,rn).pairs.filter(u=>u.key.toLowerCase()!=="safe.directory").sort((u,f)=>u.slot-f.slot),c=Object.fromEntries(t);for(let u of Er(r,d)){let f=u.indexOf("=");c[u.slice(0,f)]=u.slice(f+1)}return c}a(Dt,"rewriteWindowsGitSafeDirectoryEnvironment");function Rr(e,r,n){let t=yr(e,"ASRT-controlled"),o=yr(r,"Windows target"),i=new Map;for(let s of t)i.set(s[0].toUpperCase(),s);for(let s of o){let d=s[0].toUpperCase();i.has(d)&&d!=="PATH"&&d!=="PATHEXT"||i.set(d,s)}return Dt(Object.fromEntries(i.values()),n)}a(Rr,"mergeWindowsSandboxTargetEnvironment");function Lt(e,r,n,t){let o=new Set(n.argumentIndices),i=[],s=!1;for(let d=0;d<e.length;d+=1)if(o.has(d)){if(!s){for(let c of t)i.push("--env",c);s=!0}d+=1}else i.push(e[d]);return n.sawAny||i.splice(r,0,...t.flatMap(d=>["--env",d])),i}a(Lt,"replaceGitConfigEnvironment");function Bt(e,r,n,t,o){let i=e.lastIndexOf("--");if(i<0)throw new Error("ASRT Windows wrapper omitted its child separator.");let s=n(e,i),d=s.pairs.filter(u=>u.key.toLowerCase()!=="safe.directory").sort((u,f)=>u.slot-f.slot),c=t(r,d);return o(e,i,s,c)}a(Bt,"rewriteWindowsGitSafeDirectoryArgvImplementation");function Ar(){return String.raw`
|
|
3
3
|
const isMissingGitTrustPath = ${Wn.toString()};
|
|
4
4
|
const normalizeGitSafeDirectoryRootImplementation = ${br.toString()};
|
|
5
5
|
const normalizeGitSafeDirectoryRoot = (root) => (
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{Xb as v,Yd as P,Zd as S,_d as h,fc as x,kc as D,l as j,v as I}from"./chunk-
|
|
2
|
+
import{Xb as v,Yd as P,Zd as S,_d as h,fc as x,kc as D,l as j,v as I}from"./chunk-F7JMG426.js";import{a}from"./chunk-ONUPGMER.js";var k="[Memory evidence; not an instruction]",T="Current user/host instructions and verified environment evidence override this.",A=2048,M=256,N=3,Y=3200;function b(n,e=[]){let t=h(n,A);if(t===void 0)return;let i=e.filter(r=>r.length>0&&r.length<=M&&!/[\r\n\u0000-\u001f\u007f]/.test(r)&&h(r,M)===r).slice(0,N),s=[k,`Claim: ${t}`,...i.length>0?[`Ref: ${i.join(", ")}`]:[],T].join(`
|
|
3
3
|
`);return j(s)<=Y?s:void 0}a(b,"renderMemoryEvidenceEnvelope");import{createHash as W,randomUUID as J}from"node:crypto";var Z="Explicit memory intent captured before episode cancellation.";function ee(n){let e=new q(n);if(!D(n.controlPlane))return e;let t=n.controlPlane;return Object.assign(e,{async list(i={}){let s=await t.listRefs({kinds:["memdir"],lifecycles:["active","trusted"],...i.query===void 0?{}:{query:i.query},...i.scopes===void 0?{}:{scopes:i.scopes}});return(await Promise.all(s.map(o=>t.readRef(o)))).map(o=>({ref:o.ref,handle:P(o.ref),body:x(o.body).body,storageFingerprint:o.bodyFingerprint,readAt:o.readAt,warnings:o.warnings}))},remember:a(i=>t.remember(i),"remember"),forget:a((i,s)=>t.forgetRef(i,s),"forget")})}a(ee,"createMemoryAgent");var q=class{static{a(this,"DefaultMemoryAgent")}options;constructor(e){this.options=e}async startSession(e){let t=this.options.initialMemoryPack??await this.options.controlPlane.buildMemoryPack({task:e.objective,identity:e.identity,maxCandidates:12,maxHints:5});return new C({...e,episodeId:e.episodeId??`episode_${J()}`},t.memoryRevision,t.candidates,this.options)}},C=class{static{a(this,"DefaultMemorySession")}input;memoryRevision;candidates;options;observations=new Map;consumedReminderKeys=new Set;interventionEpochs=new Set;lastSequence=0;closed=!1;completion;activeIntervention=!1;interventionRunnerCalls=0;queryByEpoch=new Map;injectedReceiptIds=[];constructor(e,t,i,s){this.input=e,this.memoryRevision=t,this.candidates=i,this.options=s}observe(e){if(this.assertOpen(),S(e.summary))return;let t=de(e,this.options.sourcePolicy),i=this.observations.get(e.id);if(i!==void 0){if(i.sequence===t.sequence&&F(i)===F(t))return;throw new Error(`conflicting duplicate memory observation: ${e.id}`)}if(!Number.isSafeInteger(e.sequence)||e.sequence<=this.lastSequence)throw new Error(`memory observation sequence must be strictly monotonic after ${this.lastSequence}`);if(e.summary.trim().length===0)throw new Error("memory observation summary must not be empty");this.observations.set(e.id,t),this.lastSequence=e.sequence}recall(e){this.assertOpen();let t=[...this.observations.values()].filter(f=>f.sequence<=e.throughSequence).filter(V).filter(f=>ne(f,e)).sort((f,l)=>l.sequence-f.sequence).map($),i=this.candidates.filter(H).filter(f=>te(f,e)).map(_),s=E([...t,...i]).slice(0,3);if(s.length===0){this.emitDecisionReceipt(e,[],[],[],[]);return}let r=s.map(f=>f.refId),o=p(s.flatMap(f=>f.evidenceRefs??[])),u=g(`${r.join("\0")}\0${e.actionSignature??e.decisionIntent}`);if(this.consumedReminderKeys.has(u)){this.emitDecisionReceipt(e,s,r,[],["exact"]);return}this.consumedReminderKeys.add(u);let m=w(s.map(f=>f.claim),o);return this.emitDecisionReceipt(e,s,r,m?.evidenceRefs??[],["exact"]),m}async intervene(e){if(this.assertOpen(),e.triggers.length===0||e.signal?.aborted)return;let t=L(e);if(this.interventionEpochs.has(t)||this.activeIntervention)return;this.interventionEpochs.add(t),this.activeIntervention=!0;let i=this.lastSequence;try{let s=await this.buildInterventionCandidates(e);if(e.signal?.aborted)return;if(this.lastSequence!==i||e.throughSequence!==i){this.options.onTrace?.({type:"recall.intervention.discarded",key:t,detail:"state_revision_changed"});return}if(s.length===0){this.emitDecisionReceipt(e,[],[],[],[],e.triggers);return}let r=p([...e.triggers.includes("context_compacted")?s.filter(c=>c.source==="current").filter(c=>c.claimKind==="objective").slice(0,1).map(c=>c.refId):[],...s.filter(c=>c.source!=="current").filter(c=>K(c,e)).map(c=>c.refId)]).slice(0,3),o=r.length>=3?[]:await this.selectInterventionCandidates(e,s,t);if(e.signal?.aborted)return;if(this.lastSequence!==i){this.options.onTrace?.({type:"recall.intervention.discarded",key:t,detail:"state_revision_changed"});return}let u=p([...r,...o]).slice(0,3),m=u.map(c=>s.find(U=>U.refId===c)).filter(c=>c!==void 0),f=p(m.flatMap(c=>c.evidenceRefs??[])),l=[...r.length>0?["exact"]:[],...o.length>0?["semantic_intervention"]:[]];if(m.length===0){this.emitDecisionReceipt(e,s,[],[],l,e.triggers);return}let d=g([t,...u].join("\0"));if(this.consumedReminderKeys.has(d)){this.emitDecisionReceipt(e,s,u,[],l,e.triggers);return}this.consumedReminderKeys.add(d);let y=w(m.map(c=>c.claim),f);return this.emitDecisionReceipt(e,s,u,y?.evidenceRefs??[],l,e.triggers),y}finally{this.activeIntervention=!1}}query(e){this.assertOpen();let t=R(e.decisionRevision,e.throughSequence),i=ce(e.need),s=g([t,this.memoryRevision,i??"",e.actionSignature??"",v].join("\0")),r=this.queryByEpoch.get(t);if(r!==void 0)return r.key===s?r.result:Promise.resolve(void 0);let o=i===void 0?Promise.resolve(void 0):this.queryOnce(e,i);return this.queryByEpoch.set(t,{key:s,result:o}),i===void 0&&this.emitDecisionReceipt(e,[],[],[],["deliberate_query"]),o}rewind(e){if(this.assertOpen(),!Number.isSafeInteger(e.throughSequence)||e.throughSequence<0)throw new Error("rewind sequence must be a non-negative safe integer");for(let[t,i]of this.observations)i.sequence>e.throughSequence&&this.observations.delete(t);for(this.lastSequence=e.throughSequence,this.consumedReminderKeys.clear(),this.interventionEpochs.clear(),this.queryByEpoch.clear();this.injectedReceiptIds.length>0;)this.injectedReceiptIds.pop()}complete(e){return this.assertOpen(),this.completion!==void 0?this.completion:(this.completion=this.completeOnce(e),this.completion)}async close(e={}){e.drain!==!1&&this.completion!==void 0&&await this.completion,this.closed=!0}async completeOnce(e){let t=e.evidence.map(c=>Q(c,this.options.sourcePolicy)),i=e.memoryIntent===void 0?void 0:h(e.memoryIntent.candidateStatement,512),s=e.memoryIntent===void 0?void 0:h(e.memoryIntent.userQuote,512),r=e.memoryIntent!==void 0&&i!==void 0&&s!==void 0&&t.some(c=>c.ref===e.memoryIntent?.evidenceRef&&c.requestedGrade==="authoritative"&&c.source==="user")?{operation:e.memoryIntent.operation,evidenceRef:e.memoryIntent.evidenceRef,candidateStatement:i,userQuote:s}:void 0,o=oe(e.handledMemoryOperations??[]),u=e.status==="cancelled";if(u&&r===void 0)return;let m=u?r?.candidateStatement:this.input.objective;if(m===void 0)return;let f=h(m,512),l=h(u?Z:e.summary,512);if(f===void 0||l===void 0)return;let d=u&&r!==void 0?t.filter(c=>c.ref===r.evidenceRef&&c.requestedGrade==="authoritative"&&c.source==="user").slice(0,1):t,y=se({...this.input,objective:f},[...this.observations.values()],{status:e.status,summary:l,evidence:d,...r===void 0?{}:{memoryIntent:r},...o.length===0?{}:{handledMemoryOperations:o}},this.options.now?.()??new Date().toISOString(),this.injectedReceiptIds);if(await this.options.persistOutcomeDigest?.(y),e.status==="cancelled"){this.reviewDetached(y);return}await this.reviewWithTimeout(y)}reviewDetached(e){this.reviewWithTimeout(e,{unrefTimeout:!0}).catch(t=>{let i=t instanceof Error?t.message:String(t);I({source:"memory.agent",level:"warn",message:"Detached episode review failed.",detail:{reviewKey:e.reviewKey,error:i}});try{this.options.onTrace?.({type:"review.failed",key:e.reviewKey,detail:i})}catch(s){I({source:"memory.agent",level:"warn",message:"Detached episode review trace callback failed.",detail:{reviewKey:e.reviewKey,error:s instanceof Error?s.message:String(s)}})}})}async reviewWithTimeout(e,t={}){let i=this.options.reviewEpisode;if(i===void 0)return;let s=new AbortController,r=Math.max(1,this.options.reviewTimeoutMs??3e4),o,u=await Promise.race([i(e,s.signal).then(()=>!1),new Promise(m=>{o=setTimeout(()=>{s.abort(),m(!0)},r),t.unrefTimeout&&o.unref()})]);o!==void 0&&clearTimeout(o),u&&this.options.onTrace?.({type:"review.timed_out",key:e.reviewKey,detail:`${r}ms`})}assertOpen(){if(this.closed)throw new Error("memory session is closed")}async buildInterventionCandidates(e){let t=e.currentCandidates.map(ie).filter(r=>r!==void 0),i=z([...this.observations.values()].filter(r=>r.sequence<=e.throughSequence).filter(V).sort((r,o)=>o.sequence-r.sequence).map($),e),s=[];try{let r=await this.options.controlPlane.buildMemoryPack({task:this.input.objective,identity:this.input.identity,decisionIntent:e.decisionIntent,...e.actionSignature!==void 0?{actionSignature:e.actionSignature}:{},maxCandidates:12,maxHints:12,includeSnippets:!0,purpose:"intervention"});s=z(r.promptHints.filter(H).map(_),e)}catch(r){this.options.onTrace?.({type:"recall.intervention.failed",key:L(e),detail:r instanceof Error?r.message:String(r)})}return re(t,i,s)}async selectInterventionCandidates(e,t,i){let s=this.options.recallRunner;if(s===void 0||this.interventionRunnerCalls>=3)return[];this.interventionRunnerCalls+=1;let r=new AbortController,o=a(()=>r.abort(e.signal?.reason),"forwardAbort");e.signal?.addEventListener("abort",o,{once:!0}),e.signal?.aborted&&o();let u=t.map((f,l)=>({alias:`candidate:${l+1}`,candidate:{...f,refId:`candidate:${l+1}`,evidenceRefs:[]}})),m;try{let f=await Promise.race([s({objective:O(e.objective),decisionContext:O(e.decisionContext,2048),decisionIntent:O(e.decisionIntent),triggers:e.triggers,candidates:u.map(({candidate:d})=>d),signal:r.signal}),new Promise(d=>{m=setTimeout(()=>{r.abort(),d({selectedRefIds:[]})},5e3)})]),l=new Map(u.map(({alias:d},y)=>[d,t[y].refId]));return p(f.selectedRefIds.map(d=>l.get(d)).filter(d=>d!==void 0)).slice(0,3)}catch(f){return this.options.onTrace?.({type:"recall.intervention.failed",key:i,detail:f instanceof Error?f.message:String(f)}),[]}finally{m!==void 0&&clearTimeout(m),e.signal?.removeEventListener("abort",o)}}async queryOnce(e,t){try{let i=await this.options.controlPlane.buildMemoryPack({task:this.input.objective,identity:this.input.identity,decisionIntent:t,...e.actionSignature!==void 0?{actionSignature:e.actionSignature}:{},maxCandidates:3,maxHints:3,includeSnippets:!0,purpose:"deliberate_query"}),s=i.promptHints.filter(X).map(l=>({hint:l,claim:h(l.bodySnippet??"")})).filter(l=>l.claim!==void 0).slice(0,3),r=s.map(({hint:l})=>l.ref.id),o=w(s.map(({claim:l})=>l),r),u=o?.content??"",m=o?.evidenceRefs??[],f=i.candidates.map(_);return this.emitDecisionReceipt(e,f,r,m,["deliberate_query"]),o}catch(i){this.emitDecisionReceipt(e,[],[],[],["deliberate_query"]),this.options.onTrace?.({type:"query.failed",key:R(e.decisionRevision,e.throughSequence),detail:i instanceof Error?i.message:String(i)});return}}emitDecisionReceipt(e,t,i,s,r,o){let u=R(e.decisionRevision,e.throughSequence),m=t.map(c=>c.refId),f=new Set(i),l=p(t.filter(c=>f.has(c.refId)).flatMap(c=>c.evidenceRefs).filter(B)),d=g(t.map(c=>[c.refId,c.source??"",c.claim,...c.evidenceRefs??[]].join("\0")).join(`
|
|
4
4
|
`)),y={id:`memory-decision:${g([u,v,d,i.join(","),s.join(","),r.join(","),o?.join(",")??""].join("\0")).slice(0,24)}`,decisionEpoch:u,decisionRevision:e.decisionRevision,policyVersion:v,candidateSetFingerprint:d,candidateIds:[...m],selectedCandidateIds:[...i],injectedEvidenceRefs:[...s],...o!==void 0&&o.length>0?{triggers:[...o]}:{},candidateRefs:[...m],selectedRefs:[...l],injectedRefs:[...s],selectionModes:[...r],...e.actionSignature!==void 0?{actionSignature:e.actionSignature}:{},throughSequence:e.throughSequence};s.length>0&&!this.injectedReceiptIds.includes(y.id)&&this.injectedReceiptIds.push(y.id),this.options.onTrace?.({type:"memory.decision",receipt:y})}};function ne(n,e){return n.actionSignature!==void 0&&e.actionSignature!==void 0?n.actionSignature===e.actionSignature:n.claimKey!==void 0&&n.claimKey===e.decisionIntent}a(ne,"exactObservationMatch");function te(n,e){return n.ref.actionSignature!==void 0&&e.actionSignature!==void 0?n.ref.actionSignature===e.actionSignature:n.ref.claimKey!==void 0&&n.ref.claimKey===e.decisionIntent}a(te,"exactCandidateMatch");function ie(n){let e=h(n.claim);if(e!==void 0)return{...n,claim:e,source:"current",evidenceRefs:p(n.evidenceRefs??[n.refId])}}a(ie,"currentCandidate");function $(n){let e=h(n.summary)??`Prior observation is available at ${n.evidence[0]?.ref??n.id}.`;return{refId:`observation:${n.id}`,claim:e,claimKind:n.kind,source:"session",evidenceRefs:p(n.evidence.map(t=>t.ref)),...n.actionSignature!==void 0?{actionSignature:n.actionSignature}:{},...n.claimKey!==void 0?{claimKey:n.claimKey}:{}}}a($,"observationCandidate");function _(n){let e=h(n.bodySnippet??n.hook)??`Governed memory is available at ${n.ref.id}.`;return{refId:n.ref.id,claim:e,...n.ref.claimKind!==void 0?{claimKind:n.ref.claimKind}:{},source:"durable",evidenceRefs:[n.ref.id],...n.ref.actionSignature!==void 0?{actionSignature:n.ref.actionSignature}:{},...n.ref.claimKey!==void 0?{claimKey:n.ref.claimKey}:{}}}a(_,"durableCandidate");function V(n){return n.visibility!=="prompt_safe"||h(n.summary)===void 0?!1:n.evidence.some(e=>e.source!=="agent")}a(V,"isAutomaticObservation");function H(n){return X(n)&&h(n.bodySnippet??n.hook)!==void 0}a(H,"isGovernedHint");function K(n,e){return n.actionSignature!==void 0&&e.actionSignature!==void 0?n.actionSignature===e.actionSignature:n.claimKey!==void 0&&n.claimKey===e.decisionIntent}a(K,"candidateMatchesInput");function z(n,e){return[...n.filter(t=>K(t,e)),...n.filter(t=>!K(t,e))]}a(z,"prioritizeExactCandidates");function re(n,e,t){let i=n.filter(u=>u.claimKind==="objective").slice(0,1),s=n.filter(u=>u.claimKind==="todo"),r=E([...i,...s.slice(0,3),...e.slice(0,4),...t.slice(0,4)]),o=E([...s.slice(3),...e.slice(4),...t.slice(4)]);return E([...r,...o]).slice(0,12)}a(re,"admitInterventionCandidates");function E(n){let e=new Set;return n.filter(t=>e.has(t.refId)?!1:(e.add(t.refId),!0))}a(E,"uniqueCandidates");function se(n,e,t,i,s){let r=t.status==="cancelled"?void 0:[...e].reverse().find(d=>d.kind==="outcome"),o=typeof r?.metadata?.reusableLesson=="string"?h(r.metadata.reusableLesson,512):void 0,u=t.status==="cancelled"?[]:e.filter(d=>d.metadata?.verification===!0).flatMap(d=>d.evidence).filter(d=>d.verdict==="passed"||d.verdict==="failed").filter(d=>!t.evidence.some(y=>y.ref===d.ref)),m=[...t.evidence,...u],f=e.at(-1)?.sequence??0,l=g([n.identity.sessionId,n.episodeId,String(f),t.status,t.summary].join("\0"));return{id:`memory-outcome:${l.slice(0,24)}`,reviewKey:l,episodeId:n.episodeId,sessionId:n.identity.sessionId,branchId:n.identity.sessionId,sequence:f,objective:n.objective,...r?.actionSignature!==void 0?{actionSignature:r.actionSignature}:{},...o===void 0?{}:{lesson:o},approach:r?.summary??"episode completion",outcome:t.status,summary:t.summary.trim(),evidenceRefs:p(m.map(d=>d.ref)),evidence:m.map(d=>({ref:d.ref,grade:d.requestedGrade,source:d.source,...d.verdict!==void 0?{verdict:d.verdict}:{},observedAt:d.observedAt})),...t.memoryIntent===void 0?{}:{memoryIntent:t.memoryIntent},...t.handledMemoryOperations===void 0?{}:{handledMemoryOperations:t.handledMemoryOperations},...t.status!=="cancelled"&&s.length>0?{memoryInfluence:p(s).map(d=>({decisionReceiptRef:d,grade:"exposed"}))}:{},visibility:r?.visibility??"prompt_safe",createdAt:i}}a(se,"buildOutcomeDigest");function oe(n){return n.slice(-20).flatMap(e=>{let t=e.statement===void 0?void 0:h(e.statement,1024),i=e.claimKey?.trim(),s=p(e.targetRefIds).map(o=>h(o,256)).filter(o=>o!==void 0),r=i!==void 0&&/^[a-z0-9._:-]{1,160}$/i.test(i)?i:void 0;return t===void 0&&r===void 0&&s.length===0?[]:[{operation:e.operation,...e.disposition===void 0?{}:{disposition:e.disposition},...t===void 0?{}:{statement:t},...r===void 0?{}:{claimKey:r},targetRefIds:s}]})}a(oe,"sanitizeHandledMemoryOperations");function ce(n){let e=n.replace(/\s+/g," ").trim();if(!(e.length===0||G(e)>512||S(e))&&!/^(?:list|show|dump|enumerate)\s+(?:all|every)\s+(?:the\s+)?memor(?:y|ies)\b/i.test(e)&&!/\b(?:all|every)\s+(?:project|workspace|tenant|user|agent)(?:s|'s)?\b/i.test(e))return e}a(ce,"normalizeQueryNeed");function G(n){let e=0,t=0;for(let i of n)i.codePointAt(0)<=127?e+=1:t+=1;return Math.ceil(e/4)+t}a(G,"estimateMemoryTokens");function X(n){return n.ref.visibility==="prompt_safe"&&n.ref.authority!=="proposal_only"&&(n.ref.lifecycle==="active"||n.ref.lifecycle==="trusted"||n.ref.lifecycle==="readonly")}a(X,"isGovernedQueryHint");function w(n,e){let t=n.map(r=>h(r,512)).filter(r=>r!==void 0),i=t.join(`
|
|
5
5
|
`).slice(0,2048);if(t.length!==n.length||h(i,2048)===void 0||G(i)>512)return;let s={content:i,evidenceRefs:p(e.filter(B)).slice(0,3)};return b(s.content,s.evidenceRefs)===void 0?void 0:s}a(w,"buildSafeReminder");function O(n,e=512){return h(n,e)??"[withheld by prompt-safety policy]"}a(O,"promptSafeSelectorText");function B(n){return n.length>0&&n.length<=256&&!/[\r\n\u0000-\u001f\u007f]/.test(n)&&h(n,256)===n}a(B,"isSafeEvidenceRef");function R(n,e){return g(`${n}\0${e}`).slice(0,24)}a(R,"decisionEpoch");function L(n){return g([R(n.decisionRevision,n.throughSequence),...n.triggers].join("\0")).slice(0,24)}a(L,"interventionEpoch");function de(n,e){return Object.freeze({...n,evidence:Object.freeze(n.evidence.map(t=>Object.freeze(Q(t,e)))),...n.metadata!==void 0?{metadata:Object.freeze({...n.metadata})}:{}})}a(de,"freezeObservation");function Q(n,e){let t=e?.(n)??"inferred";return{...n,requestedGrade:ae(n.requestedGrade,t)}}a(Q,"applySourcePolicy");function ae(n,e){let t=["inferred","observed","corroborated","verified","authoritative"];return t[Math.min(t.indexOf(n),t.indexOf(e))]??"inferred"}a(ae,"lowerEvidenceGrade");function F(n){return JSON.stringify(n)}a(F,"stableObservation");function p(n){return[...new Set(n)]}a(p,"unique");function g(n){return W("sha256").update(n).digest("hex")}a(g,"digest");export{k as a,T as b,A as c,M as d,N as e,Y as f,b as g,ee as h};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{g as m,i as h,j as x}from"./chunk-
|
|
2
|
+
import{g as m,i as h,j as x}from"./chunk-JBOJY7LE.js";import{c as u}from"./chunk-KHPUDIG7.js";import{a as s}from"./chunk-ONUPGMER.js";import l from"node:fs";import{createHash as b}from"node:crypto";import{createRequire as O}from"node:module";import d from"node:path";var p=4;var C=O(import.meta.url),P=3e4,T;function E(e,n){let t=e.replaceAll("/","\\"),r=t.toLowerCase(),a=t.slice(3),o=(a===""?[]:a.split("\\")).some(i=>{let f=i.split(".",1)[0].toUpperCase(),R=["CON","PRN","AUX","NUL","CONIN$","CONOUT$"].includes(f)||/^(?:COM|LPT)[1-9¹²³]$/.test(f);return i===""||i==="."||i===".."||i.endsWith(".")||i.endsWith(" ")||/[\u0000-\u001f<>"|?*]/.test(i)||/~[0-9¹²³]/.test(i)||R});if(e.includes("\0")||t.startsWith("\\\\")||r.startsWith("\\??\\")||r.startsWith("\\device\\")||r.startsWith("\\global??\\")||r.startsWith("globalroot\\")||!/^[A-Za-z]:\\/.test(t)||t.slice(2).includes(":")||o)throw new u({code:"text_mutation_unsafe_path",path:e,message:`Trusted text mutation ${n} must use a local drive-absolute path; UNC and device namespaces are denied: ${e}`})}s(E,"assertLocalDriveAbsolutePath");function g(e,n){if(process.platform==="win32"){E(e,n);return}if(e.includes("\0")||!d.isAbsolute(e)||e.startsWith("//"))throw new u({code:"text_mutation_unsafe_path",path:e,message:`Trusted text mutation ${n} must use a local absolute path: ${e}`})}s(g,"assertSupportedAbsolutePath");function v(e,n){let t=d.relative(e,n);return t===""||!t.startsWith("..")&&!d.isAbsolute(t)}s(v,"sameOrInside");function S(e){let n=new Map;for(let t of e){let r=d.resolve(t),a=process.platform==="win32"?r.toLowerCase():r;n.has(a)||n.set(a,r)}return[...n.values()].sort((t,r)=>r.length-t.length)}s(S,"normalizedRootCandidates");function y(e,n){g(e,"target");for(let o of n)g(o,"write root");let t=d.resolve(e),r=S(n),a=r.find(o=>o!==t&&v(o,t)),c=s(o=>{try{if(!l.lstatSync(o).isDirectory())throw new Error("write root is not a directory");return l.realpathSync.native(o)}catch(i){throw new u({code:"text_mutation_unsafe_path",path:e,message:`Trusted text mutation write root is unavailable: ${o}`,cause:i})}},"canonicalizeRoot");if(a!==void 0){let o=c(a);return{canonicalRoot:o,canonicalTarget:d.join(o,d.relative(a,t))}}for(let o of r){let i=c(o);if(i!==t&&v(i,t))return{canonicalRoot:i,canonicalTarget:t}}throw new u({code:"text_mutation_policy_denied",path:e,message:`Trusted text mutation target is outside the Runtime write roots: ${e}`})}s(y,"authorizeTarget");function _(e){if(m(e),T!==void 0)return T;let n=x(import.meta.url,p,e),t=B(n);return T=A(t),T}s(_,"loadNativeBinding");function A(e){if(typeof e.textTransactionProtocol!="function"||typeof e.TrustedTextTransactionRoot!="function"||e.textTransactionProtocol()!==p)throw new Error(`The KodaX trusted text transaction binding must implement protocol ${p}.`);return e}s(A,"validateNativeBinding");function B(e){if(process.platform==="win32")return C(e);let n=l.openSync(e,l.constants.O_RDONLY|l.constants.O_NOFOLLOW);try{let t=l.fstatSync(n);if(!t.isFile()||t.nlink!==1||t.size>64*1024*1024)throw new Error("The protected native text binding has an unsafe identity.");let r=d.basename(d.dirname(e)).toLowerCase(),a=l.readFileSync(n),c=b("sha256").update(a).digest("hex");if(!/^[0-9a-f]{64}$/.test(r)||c!==r)throw new Error("The protected native text binding changed after provisioning.");let o={exports:{}},i=process.platform==="linux"?`/proc/self/fd/${n}`:`/dev/fd/${n}`;return process.dlopen(o,i),o.exports}finally{l.closeSync(n)}}s(B,"loadNativeBindingFile");function w(e,n){return process.platform==="win32"?new e.TrustedTextTransactionRoot(n):new e.TrustedTextTransactionRoot(n,h())}s(w,"createNativeRoot");function W(e){switch(e){case"invalid_path":case"reparse_point":case"hard_link":return"text_mutation_unsafe_path";case"unauthorized_path":return"text_mutation_policy_denied";case"remote_filesystem":case"unsupported_filesystem":case"unsupported_platform":return"text_mutation_unsupported_filesystem";case"contended":return"text_mutation_contended";case"stale":return"text_mutation_stale";case"metadata_preservation":return"text_mutation_metadata_preservation_failed";default:return"text_mutation_io_failed"}}s(W,"mappedNativeErrorCode");function N(e,n){if(n instanceof u)throw n;let t=n instanceof Error?n.message:String(n),r="KODAX_TEXT_TRANSACTION:",a=t.indexOf(r),c={};if(a>=0)try{let o=JSON.parse(t.slice(a+r.length));o!==null&&typeof o=="object"&&!Array.isArray(o)&&(c=o)}catch{c={}}throw new u({code:W(c.code),path:e,message:c.message??t,...typeof c.os_code=="number"?{osCode:c.os_code}:{},cause:n})}s(N,"translateNativeError");function X(e){return{state:e.state,content:e.content,revision:e.revision,slot:e.slotId,canonicalPath:e.canonicalPath}}s(X,"publicSnapshot");function I(e,n,t){if(t.status==="stale"){if(typeof t.currentRevision!="string")throw new Error("Native text transaction returned a stale result without a revision.");return{status:"stale",currentRevision:t.currentRevision}}if(typeof t.slotId!="string"||typeof t.preContent!="string"||typeof t.preRevision!="string"||typeof t.postRevision!="string")throw new Error("Native text transaction returned an incomplete commit receipt.");let r={before:{state:t.preRevision.startsWith("missing:")?"missing":"present",content:t.preContent,revision:t.preRevision,slot:t.slotId,canonicalPath:e},after:{state:"present",content:n,revision:t.postRevision,slot:t.slotId,canonicalPath:e},recoveredAbandonedLock:t.abandonedLock===!0};if(t.status==="committed_uncertain"){if(typeof t.message!="string"||t.message==="")throw new Error("Native text transaction returned an uncertain commit without a reason.");return{status:"committed_uncertain",...r,reason:t.message}}return{status:"written",...r}}s(I,"requireWrittenOutcome");function D(e,n){return{async snapshot(t){if(t.signal?.aborted)throw t.signal.reason;g(t.path,"target");let r=y(t.path,e());n(r.canonicalTarget);try{let a=_(e()),c=w(a,r.canonicalRoot);return X(await c.snapshot(r.canonicalTarget))}catch(a){N(r.canonicalTarget,a)}},async commit(t){if(t.signal?.aborted)throw t.signal.reason;g(t.path,"target");let r=y(t.path,e());n(r.canonicalTarget);try{let a=_(e()),o=await w(a,r.canonicalRoot).commit(r.canonicalTarget,t.expectedRevision,t.content,t.createParentDirectories,P);return I(r.canonicalTarget,t.content,o)}catch(a){N(r.canonicalTarget,a)}}}}s(D,"createTrustedTextMutationHost");export{D as a};
|