@kodax-ai/kodax 0.7.97-alpha.7 → 0.7.97-alpha.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.
Files changed (120) hide show
  1. package/CHANGELOG.md +17 -1
  2. package/README.md +20 -9
  3. package/README_CN.md +13 -6
  4. package/dist/artifacts/LICENSE +158 -0
  5. package/dist/artifacts/dist/browser.d.ts +3 -0
  6. package/dist/artifacts/dist/browser.js +33 -0
  7. package/dist/artifacts/dist/browser.js.map +1 -0
  8. package/dist/artifacts/dist/client.d.ts +4 -0
  9. package/dist/artifacts/dist/client.js +87 -0
  10. package/dist/artifacts/dist/client.js.map +1 -0
  11. package/dist/artifacts/dist/contract.d.ts +14 -0
  12. package/dist/artifacts/dist/contract.js +289 -0
  13. package/dist/artifacts/dist/contract.js.map +1 -0
  14. package/dist/artifacts/dist/document-render.d.ts +12 -0
  15. package/dist/artifacts/dist/document-render.js +109 -0
  16. package/dist/artifacts/dist/document-render.js.map +1 -0
  17. package/dist/artifacts/dist/docx.browser.js +77 -0
  18. package/dist/artifacts/dist/evidence-files.d.ts +5 -0
  19. package/dist/artifacts/dist/evidence-files.js +54 -0
  20. package/dist/artifacts/dist/evidence-files.js.map +1 -0
  21. package/dist/artifacts/dist/evidence.d.ts +6 -0
  22. package/dist/artifacts/dist/evidence.js +84 -0
  23. package/dist/artifacts/dist/evidence.js.map +1 -0
  24. package/dist/artifacts/dist/files.d.ts +9 -0
  25. package/dist/artifacts/dist/files.js +115 -0
  26. package/dist/artifacts/dist/files.js.map +1 -0
  27. package/dist/artifacts/dist/formats.d.ts +2 -0
  28. package/dist/artifacts/dist/formats.js +29 -0
  29. package/dist/artifacts/dist/formats.js.map +1 -0
  30. package/dist/artifacts/dist/identity.d.ts +4 -0
  31. package/dist/artifacts/dist/identity.js +18 -0
  32. package/dist/artifacts/dist/identity.js.map +1 -0
  33. package/dist/artifacts/dist/image-data.d.ts +3 -0
  34. package/dist/artifacts/dist/image-data.js +18 -0
  35. package/dist/artifacts/dist/image-data.js.map +1 -0
  36. package/dist/artifacts/dist/index.d.ts +4 -0
  37. package/dist/artifacts/dist/index.js +4 -0
  38. package/dist/artifacts/dist/index.js.map +1 -0
  39. package/dist/artifacts/dist/kodax.d.ts +9 -0
  40. package/dist/artifacts/dist/kodax.js +88 -0
  41. package/dist/artifacts/dist/kodax.js.map +1 -0
  42. package/dist/artifacts/dist/libreoffice.d.ts +6 -0
  43. package/dist/artifacts/dist/libreoffice.js +25 -0
  44. package/dist/artifacts/dist/libreoffice.js.map +1 -0
  45. package/dist/artifacts/dist/pixels.d.ts +4 -0
  46. package/dist/artifacts/dist/pixels.js +13 -0
  47. package/dist/artifacts/dist/pixels.js.map +1 -0
  48. package/dist/artifacts/dist/prepare.d.ts +4 -0
  49. package/dist/artifacts/dist/prepare.js +30 -0
  50. package/dist/artifacts/dist/prepare.js.map +1 -0
  51. package/dist/artifacts/dist/presentation.d.ts +11 -0
  52. package/dist/artifacts/dist/presentation.js +222 -0
  53. package/dist/artifacts/dist/presentation.js.map +1 -0
  54. package/dist/artifacts/dist/render.d.ts +22 -0
  55. package/dist/artifacts/dist/render.js +186 -0
  56. package/dist/artifacts/dist/render.js.map +1 -0
  57. package/dist/artifacts/dist/runtime-entry.d.ts +1 -0
  58. package/dist/artifacts/dist/runtime-entry.js +37 -0
  59. package/dist/artifacts/dist/runtime-entry.js.map +1 -0
  60. package/dist/artifacts/dist/runtime.d.ts +11 -0
  61. package/dist/artifacts/dist/runtime.js +143 -0
  62. package/dist/artifacts/dist/runtime.js.map +1 -0
  63. package/dist/artifacts/dist/sdk.d.ts +114 -0
  64. package/dist/artifacts/dist/sdk.js +26 -0
  65. package/dist/artifacts/dist/sdk.js.map +1 -0
  66. package/dist/artifacts/dist/types.d.ts +285 -0
  67. package/dist/artifacts/dist/types.js +2 -0
  68. package/dist/artifacts/dist/types.js.map +1 -0
  69. package/dist/artifacts/dist/web-render.d.ts +3 -0
  70. package/dist/artifacts/dist/web-render.js +143 -0
  71. package/dist/artifacts/dist/web-render.js.map +1 -0
  72. package/dist/artifacts/skills/artifact-review/SKILL.md +16 -0
  73. package/dist/chunks/{agent-EIT4WRTJ.js → agent-Q3KETYAO.js} +1 -1
  74. package/dist/chunks/argument-completer-YBLONGXK.js +2 -0
  75. package/dist/chunks/{chunk-PV6DILEK.js → chunk-76OPYNVX.js} +1 -1
  76. package/dist/chunks/{chunk-YHIHYPGQ.js → chunk-D73IHTHH.js} +2 -2
  77. package/dist/chunks/{chunk-DTJNXVL6.js → chunk-EKMVGLHV.js} +2 -2
  78. package/dist/chunks/{chunk-LEON6EFI.js → chunk-FK7AP3FS.js} +1 -1
  79. package/dist/chunks/{chunk-L4HSHRFD.js → chunk-FL5KAFQZ.js} +1 -1
  80. package/dist/chunks/{chunk-VSOFCKQV.js → chunk-HCLUUEDQ.js} +1 -1
  81. package/dist/chunks/{chunk-TXCU25XM.js → chunk-HTLRQB72.js} +2 -2
  82. package/dist/chunks/{chunk-2EAGDPF4.js → chunk-JOPSY4GI.js} +1 -1
  83. package/dist/chunks/{chunk-5HEBQ4ZF.js → chunk-KH7BRH2Q.js} +1 -1
  84. package/dist/chunks/{chunk-X6BSM54P.js → chunk-MIS2WZPP.js} +2 -2
  85. package/dist/chunks/{chunk-J5XBQRJU.js → chunk-NFGFHUO6.js} +3 -3
  86. package/dist/chunks/{chunk-PGT2VSOD.js → chunk-ORH7UGCN.js} +1 -1
  87. package/dist/chunks/{chunk-2IRDPHVI.js → chunk-PRJR2WBC.js} +1 -1
  88. package/dist/chunks/{chunk-PRMGOFYX.js → chunk-RSUAZDLC.js} +5 -5
  89. package/dist/chunks/{chunk-BYRPTXH4.js → chunk-UE3J7V5F.js} +2 -2
  90. package/dist/chunks/{chunk-5DF2ZZDA.js → chunk-VNPYCHJA.js} +2 -2
  91. package/dist/chunks/{chunk-AJ3VSHGK.js → chunk-W7ZFQTOK.js} +1 -1
  92. package/dist/chunks/{chunk-VHUCG5YI.js → chunk-XXU6HP6N.js} +1 -1
  93. package/dist/chunks/{construction-bootstrap-AWOLGJJV.js → construction-bootstrap-P4QKIZV5.js} +1 -1
  94. package/dist/chunks/{dist-UG67JCUH.js → dist-2B3JWYFP.js} +1 -1
  95. package/dist/chunks/{host-76O7ZRNA.js → host-PMDL4OM2.js} +1 -1
  96. package/dist/chunks/readline-helpers-5JGWEVMK.js +2 -0
  97. package/dist/chunks/{run-manager-MPQPULSV.js → run-manager-KW252NVZ.js} +1 -1
  98. package/dist/chunks/{tool-dispatch-K2FJZ5WP.js → tool-dispatch-G2E7DV5U.js} +1 -1
  99. package/dist/chunks/{utils-KLOVODMA.js → utils-VHSKUOLF.js} +1 -1
  100. package/dist/index.js +1 -1
  101. package/dist/kodax_bootstrap.js +1 -1
  102. package/dist/kodax_cli.js +7 -7
  103. package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
  104. package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
  105. package/dist/native/win32-x64/manifest.json +2 -2
  106. package/dist/sdk-a2a.js +1 -1
  107. package/dist/sdk-client.js +1 -1
  108. package/dist/sdk-coding.js +1 -1
  109. package/dist/sdk-repl.js +1 -1
  110. package/dist/sdk-runtime.js +1 -1
  111. package/dist/sdk-sandbox.js +1 -1
  112. package/dist/sdk-session.js +1 -1
  113. package/docs/ARTIFACT_SDK.md +253 -0
  114. package/docs/SDK_MIGRATION.md +4 -4
  115. package/docs/SPACE_SDK_SEAMS.md +75 -5
  116. package/package.json +28 -2
  117. package/public_docs/README.md +7 -3
  118. package/public_docs/sdk/embedder-guide.md +13 -10
  119. package/dist/chunks/argument-completer-N54LWSHY.js +0 -2
  120. package/dist/chunks/readline-helpers-LPPOL5FD.js +0 -2
package/CHANGELOG.md CHANGED
@@ -8,6 +8,22 @@ All notable changes to this project will be documented in this file.
8
8
 
9
9
  ---
10
10
 
11
+ ## [0.7.97-alpha.8] - 2026-10-18
12
+
13
+ Eighth alpha of the v0.7.97 line: the Artifact SDK ships inside the single
14
+ main package — `@kodax-ai/kodax` gains `/artifacts`, `/artifacts/client`,
15
+ `/artifacts/runtime` and `/artifacts/kodax` subpath exports while the
16
+ workspace module turns private, its pinned dependencies declare in the root
17
+ package, and the declared Node floor advances to 20.16. Every v0.7.96
18
+ stable and v0.7.97-alpha.1 through alpha.7 contract is retained. npm
19
+ publication remains a manual maintainer action.
20
+
21
+ ### Changed
22
+
23
+ - Single-package Artifact distribution: the main tarball stages the existing module/worker/resource layout under `dist/artifacts/`, the tarball audit validates every export/entry/dependency, the Release workflow runs an installed-package Artifact gate, and `release.mjs` rejects a separate `--artifacts` publication. There is no separate `@kodax-ai/artifacts` npm package. Core startup stays free of renderer loading and probes.
24
+
25
+ ---
26
+
11
27
  ## [0.7.97-alpha.7] - 2026-10-16
12
28
 
13
29
  Seventh alpha of the v0.7.97 line: shared-Session Host ownership resolves
@@ -103,7 +119,7 @@ Validation: 16,589 tests passed, with package/bundle/native/type checks recorded
103
119
  in the [regression guide](docs/test-guides/FEATURE_301_v0.7.97_TEST_GUIDE.md).
104
120
  Natural-task GLM/DeepSeek smoke observed automatic image review, but full
105
121
  repair/re-review/delivery has not passed all checks. Native DOCX fidelity and
106
- model-facing schema gaps remain open; see [E2E evidence](docs/research/automatic-visual-review-e2e-2026-10-13.md).
122
+ model-facing schema gaps remain open; see [E2E evidence](docs/test-guides/FEATURE_301_v0.7.97_TEST_GUIDE.md#natural-task-observations-2026-10-13).
107
123
 
108
124
  ---
109
125
 
package/README.md CHANGED
@@ -778,8 +778,8 @@ provider's model, REPL `/compact` clears the UI only after a durable save, and
778
778
  successful reports carry bounded `summaryRequests` plus `commitMs` per
779
779
  physical summary call.
780
780
 
781
- **v0.7.97-alpha.4 release:** Adds the independent `@kodax-ai/artifacts`
782
- package — PPTX authoring, bounded editing, and current-file visual
781
+ **v0.7.97-alpha.4 source release:** Adds the optional Artifact SDK workspace
782
+ — PPTX authoring, bounded editing, and current-file visual
783
783
  evidence through lightweight rendering (optional LibreOffice/PDF conversion) — with an optional managed
784
784
  KodaX adapter (FEATURE_301), and retires the out-of-band Sidecar
785
785
  Verifier: the main agent now verifies requested requirements with actual
@@ -794,6 +794,17 @@ starts, upgrades, or waits. See
794
794
  Every v0.7.96 stable and v0.7.97-alpha.1/alpha.2/alpha.3 contract is
795
795
  retained.
796
796
 
797
+ **v0.7.97-alpha.8 release:** Ships the Artifact SDK inside the single main
798
+ package — `@kodax-ai/kodax` gains `/artifacts`, `/artifacts/client`,
799
+ `/artifacts/runtime` and `/artifacts/kodax` subpath exports; the workspace
800
+ module turns private (no separate artifacts npm package), its pinned
801
+ dependencies declare in the root package, and the declared Node floor
802
+ advances to 20.16, with tarball-audit and installed-package Release gates.
803
+ See the
804
+ [v0.7.97-alpha.8 release notes](docs/release.md#v0797-alpha8-release-preparation).
805
+ Every v0.7.96 stable and v0.7.97-alpha.1 through alpha.7 contract is
806
+ retained.
807
+
797
808
  **v0.7.97-alpha.7 release:** Resolves shared-Session Host ownership across
798
809
  daemon profiles (Space #222) — launchers wait for a starting owner's verified
799
810
  descriptor within the original startup deadline, reuse compatible Hosts
@@ -1405,12 +1416,12 @@ kodax --repo-intelligence full --repo-intelligence-trace
1405
1416
 
1406
1417
  ## Architecture
1407
1418
 
1408
- KodaX uses a **monorepo architecture** with npm workspaces. Four core packages ship in `@kodax-ai/kodax` with 13 SDK subpath exports (`/agent`, `/llm`, `/coding`, `/media`, `/repl`, `/skills`, `/mcp`, `/session`, `/client`, `/runtime`, `/sandbox`, `/a2a`, `/experimental-memory`; ADR-024 + ADR-032 + ADR-038, with ADR-036 consolidation). The independent optional `@kodax-ai/artifacts` package adds PPTX authoring/limited edits, PDF/image/SVG evidence, candidate DOCX preview, local HTML/SMIL capture, preparation and binary evidence reading. Core startup does not load renderers; the KodaX bridge uses managed permissions, sandbox and cancellation. [SDK support and limits](docs/ARTIFACT_SDK.md).
1419
+ KodaX uses a **monorepo architecture** with npm workspaces. Four core packages ship in `@kodax-ai/kodax` with 17 SDK subpath exports (`/agent`, `/llm`, `/coding`, `/media`, `/repl`, `/skills`, `/mcp`, `/session`, `/client`, `/runtime`, `/sandbox`, `/a2a`, `/experimental-memory`, `/artifacts`, `/artifacts/client`, `/artifacts/runtime`, `/artifacts/kodax`; ADR-024 + ADR-032 + ADR-038, with ADR-036 consolidation). The private `artifacts` source workspace adds optional APIs through the same main npm package: PPTX authoring/limited edits, PDF/image/SVG evidence, candidate DOCX preview, local HTML/SMIL capture, preparation and binary evidence reading. Core startup does not load renderers; the KodaX bridge uses managed permissions, sandbox and cancellation. [SDK support and limits](docs/ARTIFACT_SDK.md).
1409
1420
 
1410
1421
  ```
1411
1422
  KodaX/
1412
1423
  ├── packages/ # 4 core packages + optional artifacts
1413
- │ ├── artifacts/ # Independent Artifact SDK + optional managed KodaX adapter
1424
+ │ ├── artifacts/ # Private Artifact SDK workspace; main-package subpaths
1414
1425
  │ ├── llm/ # @kodax-ai/llm - LLM abstraction (16 built-in provider aliases)
1415
1426
  │ │ └── providers/ # Anthropic, OpenAI, DeepSeek, Kimi, MiMo, MiniMax, Zhipu, Ark, …
1416
1427
  │ │
@@ -1480,10 +1491,10 @@ Source-side workspace package names (`@kodax-ai/*`). npm consumers install the s
1480
1491
 
1481
1492
  KodaX has two layers that consumers should understand separately:
1482
1493
 
1483
- - **Source-side**: 4 workspace packages above (what developers see when reading the repo).
1484
- - **Current packaged exports** (not a claim of npm availability): a single bundled package `@kodax-ai/kodax` with 13 SDK subpaths (what SDK consumers `import` from). The subpaths are split into two roles:
1494
+ - **Source-side**: 4 core workspace packages plus the private Artifact workspace (what developers see when reading the repo).
1495
+ - **Current packaged exports** (not a claim of npm availability): a single bundled package `@kodax-ai/kodax` with 17 SDK subpaths (what SDK consumers `import` from). The subpaths are split into two roles:
1485
1496
  - **Full-package subpaths** (`/agent`, `/llm`, `/coding`, `/repl`) — each one maps 1:1 to a source workspace and exposes its complete public API.
1486
- - **Integration and narrow subpaths** (`/media`, `/skills`, `/mcp`, `/session`, `/client`, `/runtime`, `/sandbox`, `/a2a`, `/experimental-memory`) — focused host surfaces. `/a2a` composes the neutral F258 plane with the Runtime facade; it does not add A2A wire types to `/agent`.
1497
+ - **Integration and narrow subpaths** (`/media`, `/skills`, `/mcp`, `/session`, `/client`, `/runtime`, `/sandbox`, `/a2a`, `/experimental-memory`, `/artifacts`, `/artifacts/client`, `/artifacts/runtime`, `/artifacts/kodax`) — focused host surfaces. `/a2a` composes the neutral F258 plane with the Runtime facade; it does not add A2A wire types to `/agent`.
1487
1498
 
1488
1499
  | Source package | npm subpath | Type | What you get | Example consumer |
1489
1500
  |---|---|---|---|---|
@@ -2090,11 +2101,11 @@ await runKodaX({
2090
2101
 
2091
2102
  ## SDK Usage
2092
2103
 
2093
- This development tree exposes 13 SDK subpaths plus the root. Shared product
2104
+ This development tree exposes 17 SDK subpaths plus the root. Shared product
2094
2105
  applications use `@kodax-ai/kodax/client`; independent libraries and trusted Host
2095
2106
  APIs remain available through the other subpaths. See the [Client contract](docs/CLIENT_CONTRACT.md)
2096
2107
  and [SDK migration guide](docs/SDK_MIGRATION.md). This documentation was checked
2097
- against package version `0.7.97-alpha.7`; npm publication is separate from
2108
+ against package version `0.7.97-alpha.8`; npm publication is separate from
2098
2109
  the current development-tree contract.
2099
2110
 
2100
2111
  ```bash
package/README_CN.md CHANGED
@@ -303,7 +303,7 @@ SDK 系统代码契约更新,但没有放宽 shell/sandbox 的 fail-closed 边
303
303
  `handleRuntimePermissionRequest()` 管理 SDK 权限 UI,并在 prepared Session 尾部遇到
304
304
  `data_changed` 时通过权威 delta 合并恢复;后台持久化失败会显示为诊断,不再静默丢失。
305
305
 
306
- **v0.7.97-alpha.4 发布**:新增独立的 `@kodax-ai/artifacts` 包——PPTX 创作、
306
+ **v0.7.97-alpha.4 发布**:新增可独立使用的 Artifact SDK 源码模块——PPTX 创作、
307
307
  有界编辑与当前文件视觉证据(轻量渲染,可选 LibreOffice/PDF 转换),并带可选的受管 KodaX
308
308
  适配器(FEATURE_301);同时退役旁路 Sidecar Verifier:主 Agent 在交付前用
309
309
  真实工具与渲染证据核验每条需求,由内置 `visual-review` 技能覆盖静态、分页、
@@ -314,6 +314,13 @@ SDK 系统代码契约更新,但没有放宽 shell/sandbox 的 fail-closed 边
314
314
  [v0.7.97-alpha.4 发布清单](docs/release.md#v0797-alpha4-release-preparation)。
315
315
  所有 v0.7.96 稳定与 v0.7.97-alpha.1/alpha.2/alpha.3 契约全部保留。
316
316
 
317
+ **v0.7.97-alpha.8 发布**:Artifact SDK 并入单一主包发布——`@kodax-ai/kodax` 新增
318
+ `/artifacts`、`/artifacts/client`、`/artifacts/runtime`、`/artifacts/kodax` 四个
319
+ 子路径导出;工作区模块转为私有(不再独立发布 npm),固定依赖上移到根包声明,
320
+ Node 最低版本提升到 20.16,tarball 审计与已安装包 Release 门同步就位。
321
+ 详见 [v0.7.97-alpha.8 发布清单](docs/release.md#v0797-alpha8-release-preparation)。
322
+ 所有 v0.7.96 稳定与 v0.7.97-alpha.1 至 alpha.7 契约全部保留。
323
+
317
324
  **v0.7.97-alpha.7 发布**:跨 daemon profile 解析共享 Session 存储的 Host
318
325
  归属(Space #222)——启动器在原启动期限内等待启动中 owner 的已验证描述符,
319
326
  兼容 Host 直接复用而不重启工作,仅允许受控的同构建 orphan-exit 策略刷新。
@@ -1272,7 +1279,7 @@ kodax --repo-intelligence full --repo-intelligence-trace
1272
1279
 
1273
1280
  ## 仓库结构
1274
1281
 
1275
- KodaX 是基于 npm workspaces 的 TypeScript monorepo,**4 个核心 workspace 包与独立可选 Artifact SDK**(FEATURE_194 v0.7.43 包合并 — 9 → 4,ADR-036),npm 上以单 bundle 包 `@kodax-ai/kodax` 发布 + 13 个 SDK subpath exports(`/agent`、`/llm`、`/coding`、`/media`、`/repl`、`/skills`、`/mcp`、`/session`、`/client`、`/runtime`、`/sandbox`、`/a2a`、`/experimental-memory`;ADR-024 + ADR-032 + ADR-038)。核心包:
1282
+ KodaX 是基于 npm workspaces 的 TypeScript monorepo,**4 个核心 workspace 包与私有 Artifact 源码模块**(FEATURE_194 v0.7.43 包合并 — 9 → 4,ADR-036),npm 上以单 bundle 包 `@kodax-ai/kodax` 发布 + 17 个 SDK subpath exports(`/agent`、`/llm`、`/coding`、`/media`、`/repl`、`/skills`、`/mcp`、`/session`、`/client`、`/runtime`、`/sandbox`、`/a2a`、`/experimental-memory`、`/artifacts`、`/artifacts/client`、`/artifacts/runtime`、`/artifacts/kodax`;ADR-024 + ADR-032 + ADR-038)。核心包:
1276
1283
 
1277
1284
  | Workspace 包 | 作用 | 主要依赖 |
1278
1285
  |----|------|---------|
@@ -1287,10 +1294,10 @@ KodaX 是基于 npm workspaces 的 TypeScript monorepo,**4 个核心 workspace
1287
1294
 
1288
1295
  KodaX 有两层结构,SDK 用户需要分开理解:
1289
1296
 
1290
- - **源码层**:4 个核心 workspace 包,另有独立可选 `@kodax-ai/artifacts`:PPTX 创作/限定编辑,PDF/图片/SVG 取证、DOCX 轻量预览、本地网页与 SMIL 捕获,公共准备和真实图片读取。核心启动不加载渲染依赖;桥接沿用受管权限、沙箱和取消。[SDK 支持与限制](docs/ARTIFACT_SDK.md)。
1291
- - **当前源码打包导出**(不表示已发布到 npm):单个 bundled 包 `@kodax-ai/kodax`,对外暴露 13 个 SDK subpath(SDK 消费者 `import` 时看到的接口)。subpath 分两种角色:
1297
+ - **源码层**:4 个核心 workspace 包,另有私有可选 Artifact 源码 workspace,经同一主包 `/artifacts` 子路径交付:PPTX 创作/限定编辑,PDF/图片/SVG 取证、DOCX 轻量预览、本地网页与 SMIL 捕获,公共准备和真实图片读取。核心启动不加载渲染依赖;桥接沿用受管权限、沙箱和取消。[SDK 支持与限制](docs/ARTIFACT_SDK.md)。
1298
+ - **当前源码打包导出**(不表示已发布到 npm):单个 bundled 包 `@kodax-ai/kodax`,对外暴露 17 个 SDK subpath(SDK 消费者 `import` 时看到的接口)。subpath 分两种角色:
1292
1299
  - **完整包 subpath**(`/agent`、`/llm`、`/coding`、`/repl`)—— 每个 1:1 对应一个源码包,暴露完整公开 API。
1293
- - **集成与窄子集 subpath**(`/media`、`/skills`、`/mcp`、`/session`、`/client`、`/runtime`、`/sandbox`、`/a2a`、`/experimental-memory`)—— 聚焦能力或宿主集成边界;`/experimental-memory` 明确为 opt-in 不稳定接口。
1300
+ - **集成与窄子集 subpath**(`/media`、`/skills`、`/mcp`、`/session`、`/client`、`/runtime`、`/sandbox`、`/a2a`、`/experimental-memory`、`/artifacts`、`/artifacts/client`、`/artifacts/runtime`、`/artifacts/kodax`)—— 聚焦能力或宿主集成边界;`/experimental-memory` 明确为 opt-in 不稳定接口。
1294
1301
 
1295
1302
  | 源码包 | npm subpath | 类型 | 内容 | 典型消费者 |
1296
1303
  |---|---|---|---|---|
@@ -1462,7 +1469,7 @@ KodaX/ # 4 workspace packages(FEATURE_194 v0.7.43)
1462
1469
  │ ├── kodax_cli.ts # CLI 主入口(bin: `kodax`)
1463
1470
  │ └── sdk-*.ts # SDK subpath 入口 → @kodax-ai/kodax/{agent,llm,coding,media,repl,skills,mcp,session,runtime,sandbox,a2a,experimental-memory}
1464
1471
  ├── scripts/
1465
- │ ├── build-bundle.mjs # esbuild 单 bundle 多 entry 打包(CLI + root + 13 SDK subpath + chunks)
1472
+ │ ├── build-bundle.mjs # esbuild 单 bundle 多 entry 打包(CLI + root + 13 核心 SDK subpath + Artifact 资源 + chunks)
1466
1473
  │ ├── build-binary.mjs # Bun --compile 单文件二进制打包
1467
1474
  │ └── release.mjs # 发布 CI 构建的通用 tarball;本地 --pack-only 保持 private:true
1468
1475
  └── .github/workflows/
@@ -0,0 +1,158 @@
1
+ KodaX-AI Fair Core License (KAI-FCL) 1.0
2
+
3
+ Copyright (c) 2026 icetomoyo <icetomoyo@gmail.com> <icetomoyo@163.com>
4
+
5
+ All rights reserved except as expressly granted in this License.
6
+
7
+ This License applies to KodaX releases and files that include this LICENSE file
8
+ or otherwise identify KAI-FCL as their governing license. Earlier KodaX
9
+ releases or files that were distributed under the Apache License, Version 2.0
10
+ remain licensed under Apache-2.0 for those released copies. Third-party
11
+ components remain governed by their own license terms.
12
+
13
+ Effective Version Notice
14
+
15
+ KodaX-AI intends KAI-FCL to govern official KodaX distributions for version
16
+ 0.7.70 and later when those distributions are provided by KodaX-AI with this
17
+ LICENSE file, a KAI-FCL notice, or accompanying customer terms.
18
+
19
+ Historical Git tags, source archives, binaries, npm packages, or other copies
20
+ of KodaX that were already distributed with Apache-2.0 license text remain
21
+ licensed under Apache-2.0 for those specific copies. This notice does not
22
+ retroactively revoke rights that were already granted under Apache-2.0.
23
+
24
+ For avoidance of doubt, current and future official enterprise/customer
25
+ packages for KodaX 0.7.70 and later should be delivered with KAI-FCL or
26
+ separate KodaX-AI customer terms.
27
+
28
+ 1. Definitions
29
+
30
+ "Software" means KodaX, including its source code, object code, documentation,
31
+ configuration, examples, official npm packages, binaries, and other materials
32
+ distributed by KodaX-AI under this License.
33
+
34
+ "KodaX-AI" means the copyright owner, licensor, or license steward for the
35
+ Software.
36
+
37
+ "You" means the individual or legal entity exercising permissions under this
38
+ License.
39
+
40
+ "Community Use" means use by an individual for personal learning, individual
41
+ non-commercial work, classroom instruction, non-production research, or
42
+ developing and testing changes for contribution to public open-source
43
+ projects.
44
+
45
+ "Commercial or Managed Use" means any use by or for a company, school, lab,
46
+ institution, government agency, or other organization for administration, IT
47
+ operations, team research and development, production work, intranet hosting,
48
+ managed-device deployment, paid service delivery, customer redistribution,
49
+ hosted or managed services, or other business purposes.
50
+
51
+ "Customer Agreement" means a written agreement with KodaX-AI, including
52
+ evaluation terms, an order form, an enterprise agreement, partner terms, or
53
+ another commercial authorization document.
54
+
55
+ "License Entitlement" means a signed offline entitlement file, commonly using
56
+ the `.kodax-license` extension, that identifies product, edition, license
57
+ kind, customer, expiry, enabled features, binding claims, and signature. A
58
+ License Entitlement proves technical authorization; it is not by itself the
59
+ complete legal contract.
60
+
61
+ 2. Community Grant
62
+
63
+ Subject to this License, KodaX-AI grants You a limited, non-exclusive,
64
+ non-transferable, no-charge license to download, install, run, inspect, and
65
+ modify the Software solely for Community Use.
66
+
67
+ You may make copies of the Software as reasonably necessary for Your own
68
+ Community Use, backup, testing, and contribution preparation. You may submit
69
+ changes, patches, issues, and documentation improvements to KodaX-AI. Unless a
70
+ separate written contribution agreement says otherwise, You grant KodaX-AI a
71
+ perpetual, worldwide, irrevocable, royalty-free license to use, reproduce,
72
+ modify, distribute, sublicense, and otherwise exploit contributions You submit
73
+ for inclusion in the Software.
74
+
75
+ 3. Commercial and Managed Use
76
+
77
+ Commercial or Managed Use is not permitted under the Community Grant.
78
+
79
+ Enterprise evaluation, enterprise production, intranet deployment,
80
+ managed-device deployment, commercial redistribution, partner distribution,
81
+ paid service delivery, or any other Commercial or Managed Use requires a
82
+ Customer Agreement with KodaX-AI and, where the Software requires it, a valid
83
+ License Entitlement.
84
+
85
+ All production customer License Entitlements must include an expiry date unless
86
+ a Customer Agreement expressly says otherwise. Longer commercial terms are
87
+ renewals or replacements, not perpetual local secrets.
88
+
89
+ 4. Restrictions
90
+
91
+ Except as expressly allowed by this License or a Customer Agreement, You must
92
+ not:
93
+
94
+ - use the Software for Commercial or Managed Use;
95
+ - sell, rent, lease, sublicense, host, provide, or redistribute the Software to
96
+ third parties;
97
+ - remove, disable, bypass, tamper with, or misrepresent license enforcement,
98
+ entitlement checks, signatures, expiry checks, binding checks, or related
99
+ technical controls;
100
+ - remove or alter copyright, license, attribution, trademark, or third-party
101
+ notices;
102
+ - use KodaX-AI names, logos, product names, or trademarks except to describe
103
+ the origin of the Software accurately;
104
+ - violate applicable law or use the Software to infringe third-party rights.
105
+
106
+ 5. Separate Agreements
107
+
108
+ If You have a Customer Agreement with KodaX-AI, that Customer Agreement
109
+ controls for the Software, edition, term, users, sites, features, and use cases
110
+ it covers. This License controls only where the Customer Agreement does not
111
+ grant additional rights or impose different obligations.
112
+
113
+ 6. Ownership
114
+
115
+ KodaX-AI and its licensors retain all right, title, and interest in and to the
116
+ Software. No rights are granted except those expressly stated in this License
117
+ or a Customer Agreement.
118
+
119
+ 7. Third-Party Software
120
+
121
+ The Software may include or depend on third-party software, packages, models,
122
+ fonts, assets, or tools. Those materials are licensed by their respective
123
+ owners under their own terms. This License does not change third-party license
124
+ obligations.
125
+
126
+ 8. Termination
127
+
128
+ Your rights under this License terminate automatically if You violate this
129
+ License and do not cure the violation within 30 days after receiving notice
130
+ from KodaX-AI. Rights also terminate immediately for intentional license
131
+ enforcement bypass, unauthorized Commercial or Managed Use, or unauthorized
132
+ redistribution. After termination, You must stop using and distributing the
133
+ Software, and You must delete copies not otherwise authorized by a Customer
134
+ Agreement or by another license that independently applies to a specific
135
+ released copy.
136
+
137
+ 9. Disclaimer of Warranty
138
+
139
+ THE SOFTWARE IS PROVIDED "AS IS" AND "AS AVAILABLE", WITHOUT WARRANTIES OR
140
+ CONDITIONS OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING WARRANTIES OF
141
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT,
142
+ SECURITY, ACCURACY, OR AVAILABILITY.
143
+
144
+ 10. Limitation of Liability
145
+
146
+ TO THE MAXIMUM EXTENT PERMITTED BY LAW, KODAX-AI AND ITS CONTRIBUTORS WILL NOT
147
+ BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR
148
+ PUNITIVE DAMAGES, OR FOR LOST PROFITS, LOST REVENUE, LOST DATA, BUSINESS
149
+ INTERRUPTION, GOODWILL LOSS, OR PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
150
+ ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS LICENSE, EVEN IF ADVISED OF
151
+ THE POSSIBILITY OF SUCH DAMAGES.
152
+
153
+ 11. Contact
154
+
155
+ For enterprise evaluation, production licensing, redistribution permission, or
156
+ questions about this License, contact:
157
+
158
+ icetomoyo <icetomoyo@gmail.com> <icetomoyo@163.com>
@@ -0,0 +1,3 @@
1
+ import { type Page } from 'playwright-core';
2
+ import type { ArtifactRuntimeOptions } from './runtime.js';
3
+ export declare function withArtifactPage<T>(options: ArtifactRuntimeOptions, use: (page: Page) => Promise<T>): Promise<T>;
@@ -0,0 +1,33 @@
1
+ import { chromium } from 'playwright-core';
2
+ import { defaultBrowserExecutable } from './render.js';
3
+ export async function withArtifactPage(options, use) {
4
+ options.signal?.throwIfAborted();
5
+ const browser = await chromium.launch({ executablePath: options.browserExecutable ?? defaultBrowserExecutable(), headless: true });
6
+ let closing, closeError, timedOut = false;
7
+ const close = () => { closing ??= browser.close(); void closing.catch(error => { closeError = error; }); };
8
+ const timeout = setTimeout(() => { timedOut = true; close(); }, 90_000);
9
+ options.signal?.addEventListener('abort', close, { once: true });
10
+ try {
11
+ options.signal?.throwIfAborted();
12
+ const context = await browser.newContext({ deviceScaleFactor: 1, serviceWorkers: 'block', acceptDownloads: false });
13
+ await context.routeWebSocket('**/*', socket => socket.close());
14
+ const page = await context.newPage();
15
+ page.setDefaultTimeout(20_000);
16
+ page.setDefaultNavigationTimeout(20_000);
17
+ return await use(page);
18
+ }
19
+ catch (error) {
20
+ options.signal?.throwIfAborted();
21
+ if (timedOut)
22
+ throw new Error('Artifact browser operation timed out.', { cause: error });
23
+ throw error;
24
+ }
25
+ finally {
26
+ clearTimeout(timeout);
27
+ options.signal?.removeEventListener('abort', close);
28
+ await (closing ?? browser.close());
29
+ if (closeError)
30
+ throw closeError;
31
+ }
32
+ }
33
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAI,OAA+B,EAAE,GAA+B;IACzG,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,iBAAiB,IAAI,wBAAwB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACnI,IAAI,OAAkC,EAAE,UAAmB,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC9E,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,OAAO,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACxE,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,IAAI,CAAC;QACJ,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;QACpH,MAAM,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAAC,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAC/G,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;QAAC,IAAI,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAAC,MAAM,KAAK,CAAC;IAAC,CAAC;YACpJ,CAAC;QAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAAC,IAAI,UAAU;YAAE,MAAM,UAAU,CAAC;IAAC,CAAC;AAC9J,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { KodaXProductClient } from '@kodax-ai/kodax/client';
2
+ import type { ArtifactExecutionPort } from './types.js';
3
+ /** Uses the connected Host's explicit tool Run. No local execution or automatic replay. */
4
+ export declare function createKodaXArtifactPort(client: Pick<KodaXProductClient, 'runs' | 'sessions'>, sessionId: string): ArtifactExecutionPort;
@@ -0,0 +1,87 @@
1
+ import { artifactToolName, decodeArtifactRequest, decodeArtifactResult, decodeArtifactWireResult, record } from './contract.js';
2
+ import { encodeBase64, verifyImageData } from './image-data.js';
3
+ import { sameJson } from './identity.js';
4
+ /** Uses the connected Host's explicit tool Run. No local execution or automatic replay. */
5
+ export function createKodaXArtifactPort(client, sessionId) {
6
+ return { execute: async (raw, signal) => {
7
+ const request = decodeArtifactRequest(raw);
8
+ signal?.throwIfAborted();
9
+ const name = artifactToolName(request.operation);
10
+ const started = await client.runs.startTool({ sessionId, inputId: crypto.randomUUID(), name,
11
+ input: { ...request.input }, rawInput: JSON.stringify(request.input) });
12
+ let stop;
13
+ let operationError;
14
+ const cancel = () => { stop ??= client.runs.stop(started.runId).then(receipt => ({ receipt }), error => ({ error })); };
15
+ signal?.addEventListener('abort', cancel, { once: true });
16
+ if (signal?.aborted)
17
+ cancel();
18
+ try {
19
+ const terminal = await client.runs.await(started.runId);
20
+ if (terminal.runId !== started.runId || terminal.sessionId !== sessionId || terminal.phase !== 'completed' || !terminal.result?.success)
21
+ throw new Error('Artifact Host Run did not complete: ' + terminal.phase + ': ' + (terminal.error ?? terminal.result?.lastText ?? '').slice(0, 2000));
22
+ signal?.throwIfAborted();
23
+ const messages = terminal.result.messages, callMessage = messages.at(-2), resultMessage = messages.at(-1);
24
+ const call = Array.isArray(callMessage?.content) ? callMessage.content.find(block => block.type === 'tool_use' && block.name === name && sameJson(block.input, request.input)) : undefined;
25
+ if (call?.type !== 'tool_use' || !Array.isArray(resultMessage?.content))
26
+ throw new Error('Artifact Host invocation identity is missing.');
27
+ const block = resultMessage.content.find(block => block.type === 'tool_result' && block.tool_use_id === call.id);
28
+ if (block?.type !== 'tool_result' || block.is_error)
29
+ throw new Error('Artifact Host tool result is unavailable.');
30
+ const first = typeof block.content === 'string' ? block.content : block.content.find(item => item.type === 'text')?.text;
31
+ if (!first || first.length > 2 * 1024 * 1024)
32
+ throw new Error('Artifact metadata is missing or exceeds its bound.');
33
+ const payload = record(JSON.parse(first));
34
+ if (payload.protocol !== 'kodax-artifact/1' || payload.operation !== request.operation)
35
+ throw new Error('Artifact tool payload does not match the invocation.');
36
+ const result = decodeArtifactWireResult(request, payload);
37
+ if (!result.imageRef)
38
+ return decodeArtifactResult(raw.operation, result);
39
+ let items = [];
40
+ const observation = await client.sessions.observe(sessionId, view => { items = view.items; });
41
+ try {
42
+ const item = items.find(item => item.tool?.callId === call.id && item.tool.name === name && (!item.sourceRunId || item.sourceRunId === started.runId));
43
+ const attachmentIndex = item?.attachments?.findIndex(image => image.path === result.imageRef.path);
44
+ if (!item || attachmentIndex === undefined || attachmentIndex < 0)
45
+ throw new Error('Artifact PNG is not attached to its Host invocation.');
46
+ let offset = 0, bytes;
47
+ do {
48
+ signal?.throwIfAborted();
49
+ const chunk = (await client.sessions.readItem(sessionId, item.id, { part: 'attachment', attachmentIndex, attachmentOffset: offset, expectedImageSha256: result.imageRef.sha256 }))?.image;
50
+ if (!chunk || chunk.sha256 !== result.imageRef.sha256 || chunk.width !== result.imageRef.width || chunk.height !== result.imageRef.height || chunk.mediaType !== 'image/png' || chunk.offset !== offset || !Number.isSafeInteger(chunk.totalLength) || chunk.totalLength < 33 || chunk.totalLength > 10 * 1024 * 1024)
51
+ throw new Error('Artifact attachment metadata is missing or inconsistent.');
52
+ bytes ??= new Uint8Array(chunk.totalLength);
53
+ const data = Uint8Array.from(atob(chunk.dataBase64), c => c.charCodeAt(0));
54
+ if (!data.length || bytes.length !== chunk.totalLength || offset + data.length > bytes.length || (chunk.nextOffset !== undefined && chunk.nextOffset !== offset + data.length))
55
+ throw new Error('Artifact attachment chunk is inconsistent.');
56
+ bytes.set(data, offset);
57
+ offset += data.length;
58
+ if (chunk.nextOffset === undefined && offset !== bytes.length)
59
+ throw new Error('Artifact attachment ended early.');
60
+ } while (offset < bytes.length);
61
+ const image = { mediaType: 'image/png', sha256: result.imageRef.sha256, width: result.imageRef.width, height: result.imageRef.height, dataBase64: encodeBase64(bytes) };
62
+ await verifyImageData(image);
63
+ signal?.throwIfAborted();
64
+ return decodeArtifactResult(raw.operation, { status: result.status, diagnostics: result.diagnostics, image });
65
+ }
66
+ finally {
67
+ observation.close();
68
+ }
69
+ }
70
+ catch (error) {
71
+ operationError = error;
72
+ throw error;
73
+ }
74
+ finally {
75
+ signal?.removeEventListener('abort', cancel);
76
+ if (stop) {
77
+ const outcome = await stop;
78
+ if ('error' in outcome) {
79
+ if (operationError !== undefined)
80
+ throw new AggregateError([operationError, outcome.error], 'Artifact operation and Stop settlement failed.');
81
+ throw outcome.error;
82
+ }
83
+ }
84
+ }
85
+ } };
86
+ }
87
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ArtifactOperation, ArtifactRequest, ArtifactResults, ArtifactResult, EvidenceLocator, VisualSource, RasterEvidence } from './types.js';
2
+ export declare const artifactToolName: (operation: ArtifactOperation) => string;
3
+ export declare function record(value: unknown): Record<string, unknown>;
4
+ export declare function validateSource(value: unknown): asserts value is VisualSource;
5
+ export declare function validateLocator(value: unknown): asserts value is EvidenceLocator;
6
+ export declare function validateRaster(value: unknown): asserts value is RasterEvidence;
7
+ export declare function decodeArtifactRequest(value: unknown): ArtifactRequest;
8
+ export declare function decodeArtifactResult<O extends ArtifactOperation>(operation: O, value: unknown): ArtifactResults[O];
9
+ /** Managed worker metadata. PNG bytes travel through the existing attachment channel. */
10
+ type ArtifactWireResult = Pick<ArtifactResult, 'status' | 'diagnostics' | 'artifact' | 'evidence'> & {
11
+ readonly imageRef?: RasterEvidence;
12
+ };
13
+ export declare function decodeArtifactWireResult(request: ArtifactRequest, value: unknown): ArtifactWireResult;
14
+ export {};