@bf-meishijian/aip 0.0.6 → 0.0.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/README.md +118 -1
- package/dist/agent-harness/index.d.ts +4 -0
- package/dist/agent-harness/index.d.ts.map +1 -0
- package/dist/agent-harness/index.js +4 -0
- package/dist/agent-harness/index.js.map +1 -0
- package/dist/agent-harness/pi-chat-model.d.ts +35 -0
- package/dist/agent-harness/pi-chat-model.d.ts.map +1 -0
- package/dist/agent-harness/pi-chat-model.js +285 -0
- package/dist/agent-harness/pi-chat-model.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +60 -23
- package/dist/cli.js.map +1 -1
- package/dist/coding-run-manager.d.ts +76 -16
- package/dist/coding-run-manager.d.ts.map +1 -1
- package/dist/coding-run-manager.js +550 -439
- package/dist/coding-run-manager.js.map +1 -1
- package/dist/coding-subagent-child.d.ts +1 -1
- package/dist/coding-subagent-child.d.ts.map +1 -1
- package/dist/coding-subagent-child.js +14 -21
- package/dist/coding-subagent-child.js.map +1 -1
- package/dist/coding-subagents.d.ts +2 -0
- package/dist/coding-subagents.d.ts.map +1 -1
- package/dist/coding-subagents.js +103 -119
- package/dist/coding-subagents.js.map +1 -1
- package/dist/daemon.d.ts +4 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +155 -43
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-files.d.ts +15 -12
- package/dist/delivery-files.d.ts.map +1 -1
- package/dist/delivery-files.js +124 -78
- package/dist/delivery-files.js.map +1 -1
- package/dist/delivery-tools.d.ts +28 -0
- package/dist/delivery-tools.d.ts.map +1 -0
- package/dist/delivery-tools.js +167 -0
- package/dist/delivery-tools.js.map +1 -0
- package/dist/diagnostics.d.ts +1 -0
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +48 -14
- package/dist/diagnostics.js.map +1 -1
- package/dist/host-update.d.ts +3 -0
- package/dist/host-update.d.ts.map +1 -0
- package/dist/host-update.js +70 -0
- package/dist/host-update.js.map +1 -0
- package/dist/installer.d.ts +5 -8
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +155 -65
- package/dist/installer.js.map +1 -1
- package/dist/linux-service.d.ts +14 -0
- package/dist/linux-service.d.ts.map +1 -0
- package/dist/linux-service.js +63 -0
- package/dist/linux-service.js.map +1 -0
- package/dist/live-employee.d.ts +4 -3
- package/dist/live-employee.d.ts.map +1 -1
- package/dist/live-employee.js +222 -60
- package/dist/live-employee.js.map +1 -1
- package/dist/local-handoff-workspace.d.ts +20 -0
- package/dist/local-handoff-workspace.d.ts.map +1 -0
- package/dist/local-handoff-workspace.js +80 -0
- package/dist/local-handoff-workspace.js.map +1 -0
- package/dist/local-model-usage.d.ts +6 -0
- package/dist/local-model-usage.d.ts.map +1 -0
- package/dist/local-model-usage.js +40 -0
- package/dist/local-model-usage.js.map +1 -0
- package/dist/login-url.d.ts +3 -0
- package/dist/login-url.d.ts.map +1 -0
- package/dist/login-url.js +30 -0
- package/dist/login-url.js.map +1 -0
- package/dist/paths.d.ts +9 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +27 -3
- package/dist/paths.js.map +1 -1
- package/dist/pi-model-service.d.ts +11 -0
- package/dist/pi-model-service.d.ts.map +1 -1
- package/dist/pi-model-service.js +28 -11
- package/dist/pi-model-service.js.map +1 -1
- package/dist/platform-client.d.ts +214 -6
- package/dist/platform-client.d.ts.map +1 -1
- package/dist/platform-client.js +66 -0
- package/dist/platform-client.js.map +1 -1
- package/dist/profile.d.ts +9 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +43 -0
- package/dist/profile.js.map +1 -0
- package/dist/project-facts.d.ts +19 -0
- package/dist/project-facts.d.ts.map +1 -0
- package/dist/project-facts.js +91 -0
- package/dist/project-facts.js.map +1 -0
- package/dist/provider-auth-error.d.ts +3 -0
- package/dist/provider-auth-error.d.ts.map +1 -0
- package/dist/provider-auth-error.js +12 -0
- package/dist/provider-auth-error.js.map +1 -0
- package/dist/qa-contract.d.ts +2 -0
- package/dist/qa-contract.d.ts.map +1 -0
- package/dist/qa-contract.js +165 -0
- package/dist/qa-contract.js.map +1 -0
- package/dist/qa-http-validation.js +145 -0
- package/dist/qa-project-checkout.d.ts +12 -0
- package/dist/qa-project-checkout.d.ts.map +1 -0
- package/dist/qa-project-checkout.js +68 -0
- package/dist/qa-project-checkout.js.map +1 -0
- package/dist/qa-session-manager.d.ts +101 -0
- package/dist/qa-session-manager.d.ts.map +1 -0
- package/dist/qa-session-manager.js +581 -0
- package/dist/qa-session-manager.js.map +1 -0
- package/dist/review-report.d.ts +3 -4
- package/dist/review-report.d.ts.map +1 -1
- package/dist/review-report.js +14 -12
- package/dist/review-report.js.map +1 -1
- package/dist/secure-json.d.ts.map +1 -1
- package/dist/secure-json.js +64 -2
- package/dist/secure-json.js.map +1 -1
- package/dist/stage-delivery.js +42 -25
- package/dist/state.d.ts +2 -2
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +6 -4
- package/dist/state.js.map +1 -1
- package/dist/test-cli.d.ts +2 -0
- package/dist/test-cli.d.ts.map +1 -0
- package/dist/test-cli.js +50 -0
- package/dist/test-cli.js.map +1 -0
- package/dist/test-executor.d.ts +44 -0
- package/dist/test-executor.d.ts.map +1 -0
- package/dist/test-executor.js +474 -0
- package/dist/test-executor.js.map +1 -0
- package/dist/test-reports.d.ts +13 -0
- package/dist/test-reports.d.ts.map +1 -0
- package/dist/test-reports.js +129 -0
- package/dist/test-reports.js.map +1 -0
- package/dist/test-run-manager.d.ts +24 -0
- package/dist/test-run-manager.d.ts.map +1 -0
- package/dist/test-run-manager.js +121 -0
- package/dist/test-run-manager.js.map +1 -0
- package/dist/tool-dispatch.d.ts +14 -0
- package/dist/tool-dispatch.d.ts.map +1 -0
- package/dist/tool-dispatch.js +56 -0
- package/dist/tool-dispatch.js.map +1 -0
- package/dist/windows-runtime.d.ts +9 -0
- package/dist/windows-runtime.d.ts.map +1 -0
- package/dist/windows-runtime.js +64 -0
- package/dist/windows-runtime.js.map +1 -0
- package/dist/windows-service.d.ts +20 -0
- package/dist/windows-service.d.ts.map +1 -0
- package/dist/windows-service.js +96 -0
- package/dist/windows-service.js.map +1 -0
- package/package.json +17 -10
package/README.md
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
# AI Platform Local Coding Host
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## 本地与云端环境
|
|
4
|
+
|
|
5
|
+
云端使用 `aip`(default profile),本地使用 `aip --local`(local profile)。例如 `aip --local login`、`aip --local host status`、`aip --local doctor`。本地首次登录默认 API 为 `http://127.0.0.1:3000`;云端首次登录需通过安装脚本或 `--platform URL` 明确地址。
|
|
6
|
+
|
|
7
|
+
两套凭证、模型配置、任务、Runtime 和日志分别位于 `~/.aip/profiles/default`、`~/.aip/profiles/local`;后台服务名称独立,可同时运行。已绑定的平台地址不能通过再次登录覆盖;退出登录保留地址绑定。没有全局环境切换。
|
|
8
|
+
|
|
9
|
+
`AIP_HOME` 表示安装基础目录;`AIP_PROFILE` 是后台服务和子进程继承的内部环境标识。下文 `$AIP_HOME/workspaces` 等旧示例中的 Host 数据根目录现在应使用 `$AIP_HOME/profiles/<default 或 local>`。共享 CLI 入口位于 `$AIP_HOME/bin`,不从另一 profile 回退读取配置。既有安装需执行经核实的一次性迁移,不自动读取旧目录。
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
本地 Coding Host 支持 Windows x64、macOS Apple Silicon/Intel,以及 Linux x64/arm64。安装器下载自带 Node.js 的预构建 Runtime,用户不需要预装 Node.js 或 npm。
|
|
4
13
|
|
|
5
14
|
```bash
|
|
6
15
|
npm install -g @bf-meishijian/aip@0.0.6
|
|
@@ -10,6 +19,99 @@ aip doctor
|
|
|
10
19
|
|
|
11
20
|
npm 自动安装对应系统架构的 Runtime。首次使用执行 `aip login --platform <平台地址>` 完成登录;升级后必须执行 `aip host install` 激活新 Runtime。平台后端需同步支持 Runtime 0.0.6。
|
|
12
21
|
|
|
22
|
+
本地 Docker 验收环境的一条命令如下。
|
|
23
|
+
|
|
24
|
+
Windows PowerShell:
|
|
25
|
+
|
|
26
|
+
```powershell
|
|
27
|
+
irm "http://127.0.0.1:4174/downloads/aip/install.ps1" | iex
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
macOS 或 Linux:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
curl -fsSL "http://127.0.0.1:4174/downloads/aip/install.sh" | bash
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
脚本自动选择当前系统与 CPU 架构对应的 Runtime,完成下载、SHA-256 校验、一次解压、后台服务安装、平台登录、设备注册和启动。相同版本重复执行时复用已校验的 Runtime,不再次下载和解压。注册不会自动使用 `--yes` 替换已有活动机器。
|
|
37
|
+
|
|
38
|
+
Runtime 构建时将 Host 与 Pi 的 JavaScript 依赖合并为少量文件;只保留工作区命令所需的 npm,以及依赖旁置 WASM 的 Photon 图像模块。五个平台的 Runtime 清单均约 2,000 个文件。构建脚本在本机目标上验证 CLI、npm、Pi 会话和图像 Worker;发布后的隔离安装还需通过 `scripts/test-aip-fast-install.ps1` 实测。安装耗时会随磁盘、杀毒软件和下载网络变化。
|
|
39
|
+
|
|
40
|
+
交互式安装会提示输入平台 Web 根地址;直接回车使用脚本中的默认地址。该地址必须能打开平台页面并代理 `/api/health/live` 与 `/api/v1`,不能填仅提供 API 的 `:3000` 端口。非交互安装可预先设置 `AIP_PLATFORM_URL`。一键安装用选定地址生成验证码页面链接,登录和 Host 注册也连接该地址;下载脚本和 Runtime 的来源不随平台地址变化。手动执行 `aip login --platform <API 地址>` 时仍使用平台 API 返回的验证码页面链接。
|
|
41
|
+
|
|
42
|
+
平台页面的“运行诊断”复核安装包校验凭据和启动关键文件,避免每次扫描上万文件;命令行 `aip doctor` 仍执行 Runtime 清单的逐文件 SHA-256 完整校验。
|
|
43
|
+
|
|
44
|
+
本地自动验收先构建并发布 Windows Runtime、启动 `platform-web`,再执行:
|
|
45
|
+
|
|
46
|
+
```powershell
|
|
47
|
+
powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/test-aip-fast-install.ps1
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
正式发布需要为五种目标生成 Runtime 压缩包及 `.sha256`:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pnpm runtime:release:local-coding-host
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
发布服务必须把 `install.ps1`、`install.sh` 与 `releases/` 保持在同一版本。正式公网通过 HTTPS 提供;公司内网阶段允许私网 IPv4 HTTP,并在页面提示明文下载风险。云端发布时将脚本中的平台地址和下载基址渲染为对应环境的固定地址,最终用户只复制无参数的一条命令。
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
node scripts/render-aip-installers.mjs \
|
|
60
|
+
--platform-url "https://platform.example.com" \
|
|
61
|
+
--download-base "https://download.example.com/downloads/aip/releases" \
|
|
62
|
+
--output ".artifacts/aip-release"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
渲染输出不包含凭证;下载地址和平台地址可以不同。将输出脚本与五种 Runtime 发布包部署到固定 HTTPS 或公司私网 IPv4 HTTP 地址后,Windows 使用 `irm <install.ps1> | iex`,macOS/Linux 使用 `curl -fsSL <install.sh> | bash`。
|
|
66
|
+
|
|
67
|
+
### S3 安装包发布
|
|
68
|
+
|
|
69
|
+
项目附件使用的 `S3_BUCKET` 存放私有图片和 QA 附件,安装包使用单独的桶。为专用桶配置持续在线的 HTTPS 下载域名,使 `https://download.example.com/aip/` 映射到桶内 `aip/` 对象;脚本和 Runtime 必须可由未登录、没有 S3 凭证的客户端读取。发布环境配置以下变量,不把密钥写进仓库或脚本:
|
|
70
|
+
|
|
71
|
+
| 变量 | 用途 |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| `AIP_RELEASE_S3_BUCKET` | 安装包专用桶,不能与 `S3_BUCKET` 相同 |
|
|
74
|
+
| `AIP_RELEASE_PUBLIC_BASE_URL` | HTTPS 根地址,或公司私网 IPv4 HTTP 根地址 |
|
|
75
|
+
| `AIP_RELEASE_PLATFORM_URL` | 安装时显示的默认平台 Web 地址;HTTPS 或私网 IPv4 HTTP,用户仍可输入其他平台 |
|
|
76
|
+
| `AIP_RELEASE_S3_REGION` | S3 区域;未设置时使用 `S3_REGION` 或 `us-east-1` |
|
|
77
|
+
| `AIP_RELEASE_S3_ENDPOINT` | 使用 S3 兼容服务时的 API 端点,AWS S3 可省略 |
|
|
78
|
+
| `AIP_RELEASE_KEY_PREFIX` | 桶内对象前缀,默认 `aip`;公开地址路径需匹配 |
|
|
79
|
+
| `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` | 仅发布环境使用的上传凭证 |
|
|
80
|
+
|
|
81
|
+
先运行 `pnpm runtime:release:local-coding-host`,再运行 `node scripts/publish-aip-release.mjs` 做只读发布计划检查;配置完成后显式添加 `--publish` 才写入 S3。脚本先校验五平台包及 SHA-256,上传带版本号的 Runtime 与校验文件,检查公开下载可访问,最后更新固定的 `install.ps1` 和 `install.sh`。上传中途失败不会让安装脚本指向尚未发布的 Runtime。
|
|
82
|
+
|
|
83
|
+
GitLab 中 `aip-v<版本号>` 标签提供手动的 `aip-s3-release` 作业;配置上述 CI 变量后触发发布。无专用桶或可访问的 HTTPS/私网 IPv4 HTTP 地址时只可本地验证发布计划,不能向用户提供云端安装命令。发布后从没有 S3/GitLab 凭证的另一台电脑核对两个脚本、五平台包和 SHA-256,再公布固定命令。
|
|
84
|
+
|
|
85
|
+
## 更新 Host
|
|
86
|
+
|
|
87
|
+
包含更新命令的版本安装完成后,执行 `aip update` 更新云端 Host,或 `aip --local update` 更新本地 profile。命令检查 npm 最新版本,使用当前 Runtime 自带的 npm 下载对应系统架构的运行时,校验并调用现有安装器激活。登录、注册和工作区保留;有任务或请求正在执行时提示稍后再试,更新期间暂停领取新任务。已经是最新版本时不重启。
|
|
88
|
+
|
|
89
|
+
新 Runtime 启动并通过平台心跳验证后,会同步当前版本到平台注册记录和本地状态。同步失败不会伪报成功版本;后续心跳会重新尝试。旧版 `0.0.7` 尚无 `update` 命令,需要先用 `npm install -g @bf-meishijian/aip@latest` 和 `aip host install` 升级到包含此功能的版本。
|
|
90
|
+
|
|
91
|
+
## Windows 安装与后台运行
|
|
92
|
+
|
|
93
|
+
`install.ps1` 使用纯 ASCII 源码,同时兼容 Windows PowerShell 5.1 的 `-File` 和 `irm | iex` 两种执行方式。脚本使用系统自带的 `tar.exe` 解压 Runtime,并通过计划任务 `AI Platform Local Coding Host` 隐藏启动。
|
|
94
|
+
|
|
95
|
+
Windows 安装器生成 `.aip/bin/host-daemon.ps1`,由计划任务 `AI Platform Local Coding Host` 使用隐藏 PowerShell 启动 Runtime。任务在当前用户登录 Windows 后自动启动,不依赖安装终端保持打开;不是未登录时运行的系统服务。`aip host stop/restart` 同时检查该 Runtime 的 daemon 是否退出,不停止其他 Node.js 程序。
|
|
96
|
+
|
|
97
|
+
重复安装先校验并自检候选,再停止 Host,将 `runtime/current` junction 切换到独立的版本目录。Windows 不再覆盖同名版本目录或删除仍被安装 CLI 占用的 `node.exe`。候选启动失败时停止候选、恢复旧链接并重新启动;失败原因继续返回给用户。历史 Runtime 目录保留供恢复,不在安装过程中清理;登录凭证、工作区和模型配置不变。
|
|
98
|
+
|
|
99
|
+
以上修复需要重新构建并分发 Runtime 压缩包,已经发布的 npm `0.0.5` 包不会因仓库修改自动更新。打包验收遵循 `docs/development/local-acceptance.md`,不通过重复安装旧 npm 包验证修复。
|
|
100
|
+
|
|
101
|
+
## macOS 与 Linux 后台运行
|
|
102
|
+
|
|
103
|
+
macOS 使用当前用户的 LaunchAgent,登录系统后自动启动。Linux 写入 `~/.config/systemd/user/aip-local-coding-host.service`,并执行 `systemctl --user enable` 和 `restart`。Linux 环境必须可用 systemd user service;缺失时安装保留已下载 Runtime,但明确返回后台服务安装失败。
|
|
104
|
+
|
|
105
|
+
## 云平台设备授权地址
|
|
106
|
+
|
|
107
|
+
手动运行 `aip login --platform <平台 API 可访问地址>` 的设备确认链接由 Platform API 返回。云端仍应将 `PLATFORM_WEB_URL` 设置为用户浏览器实际访问的 Web origin(协议、主机、端口),不要使用开发默认的 `http://127.0.0.1:4174`。一键安装使用用户选择的 Web 地址生成确认链接。测试环境当前入口示例:
|
|
108
|
+
|
|
109
|
+
```dotenv
|
|
110
|
+
PLATFORM_WEB_URL=http://10.254.208.127:4173
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
部署时核对真实入口,不把示例 IP 写死进安装器。配置生效后重新执行 `aip login`,确认输出链接的 origin 正确,并完成一次浏览器设备授权。旧验证码不应作为验收凭证复用。
|
|
114
|
+
|
|
13
115
|
## 上线准备与 GitLab MR
|
|
14
116
|
|
|
15
117
|
开发阶段产出 `release_checklist.md`,测试期间随修复维护。人工验收通过后恢复原开发会话,先读取测试交接和最新分支代码,核实清单后提交 MR。Runtime 负责 Git 推送和 MR 写操作;平台仅用自己的读取权限核实、登记和查询状态。
|
|
@@ -28,3 +130,18 @@ aip mr register --work-item BAOFU-91 --project scf-member --iid 128
|
|
|
28
130
|
MR 创建成功但平台登记失败时,Runtime 保存待登记结果。重试同一命令会登记原 MR,即使原 MR 后来已合并或关闭,也不会因登记失败重复创建。登记成功后平台保留 MR 历史及当前关联。
|
|
29
131
|
|
|
30
132
|
用户明确要求修改应用代码时,开发会话调用 `request_code_changes` 返回开发,再交接原测试会话和人工确认。仅解释、更新清单或 MR 说明不自动退回。整个研发流程仅按项目及源/目标分支推进,不使用 commit ID 或 tree hash 一致性门禁;实际发布、知识整理和关单不属于上线准备。
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
## 测试项目本地仓库
|
|
136
|
+
|
|
137
|
+
目录采集和正式测试共用 `$AIP_HOME/workspaces/qa-projects/<projectId>/repository`。每个项目首次创建仓库,之后增量 fetch 并检出请求固定的提交;同项目任务串行,不同项目互不占用。通过现有 proper-lockfile 防止 CLI 与 daemon 同时改动同一目录,跨进程占用会如实报错,不重试业务执行。
|
|
138
|
+
|
|
139
|
+
这是 Host 专用运行目录,不是开发工作区。更新前清理其中的旧产物与修改,防止复用旧 JUnit 结果。同项目同远端同提交最近一次成功采集的 manifest 保存在项目目录,正式运行可复用它并跳过 collect;点击“加载最新 main 目录”仍执行 collect,便于主动刷新。命令事实只记录本次实际执行的阶段,不伪造缓存命中时的 collect。
|
|
140
|
+
|
|
141
|
+
执行附件先复制到 `$AIP_HOME/workspaces/qa-executions/<executionId>/artifacts`,独立于可更新的项目仓库。平台确认附件和结果回传成功后删除该执行附件目录;回传失败保留原文件供显式重传,后续项目更新不会覆盖。结果 JSON 与回传标记保留用于阻止重复执行。旧版本遗留的逐次仓库不自动删除,也不为失败证据设置隐式过期删除。
|
|
142
|
+
|
|
143
|
+
## 用例与验收标准
|
|
144
|
+
|
|
145
|
+
仓库 manifest 只描述可复用用例,不声明 `ac`。工单的 AC 与 `caseId` 通过本工单测试计划中的 `ac`、`automationCaseIds` 建立关联;正式执行绑定计划版本。独立回归没有工单 AC 关联。旧执行原始证据保留,但目录中的旧 AC 不再参与覆盖或验收判断。
|
|
146
|
+
|
|
147
|
+
移除 AC 契约须与测试仓库、平台 API 和 Host 一起更新。旧格式目录会被新契约拒绝;仍使用旧分支的工单应先将测试资产更新到新契约,再执行,不由平台猜测或补写关联。
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { BaseChatModel, type BaseChatModelCallOptions } from "@langchain/core/language_models/chat_models";
|
|
2
|
+
import { AIMessageChunk, type BaseMessage } from "@langchain/core/messages";
|
|
3
|
+
import type { ChatModelStreamEvent } from "@langchain/core/language_models/event";
|
|
4
|
+
import { ChatGenerationChunk, type ChatResult } from "@langchain/core/outputs";
|
|
5
|
+
import { convertToOpenAITool } from "@langchain/core/utils/function_calling";
|
|
6
|
+
import type { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
|
|
7
|
+
import type { BindToolsInput } from "@langchain/core/language_models/chat_models";
|
|
8
|
+
import type { Api, Context, Model, Models, ModelThinkingLevel } from "@earendil-works/pi-ai";
|
|
9
|
+
interface CallOptions extends BaseChatModelCallOptions {
|
|
10
|
+
tools?: ReturnType<typeof convertToOpenAITool>[];
|
|
11
|
+
}
|
|
12
|
+
export declare function messageText(content: unknown): string;
|
|
13
|
+
/** Preserve provider response metadata in checkpoints for native tool/thinking continuation. */
|
|
14
|
+
export declare function piContext(messages: BaseMessage[], model: Model<Api>, tools?: CallOptions["tools"]): Context;
|
|
15
|
+
/** Model protocol adapter only. Agent loops and persistence remain Deep Agents/LangGraph. */
|
|
16
|
+
export declare class PiChatModel extends BaseChatModel<CallOptions> {
|
|
17
|
+
readonly models: Models;
|
|
18
|
+
readonly nativeModel: Model<Api>;
|
|
19
|
+
readonly reasoning: ModelThinkingLevel;
|
|
20
|
+
constructor(models: Models, nativeModel: Model<Api>, reasoning?: ModelThinkingLevel);
|
|
21
|
+
get profile(): {
|
|
22
|
+
maxInputTokens: number;
|
|
23
|
+
maxOutputTokens: number;
|
|
24
|
+
imageInputs: boolean;
|
|
25
|
+
imageUrlInputs: boolean;
|
|
26
|
+
toolCalling: boolean;
|
|
27
|
+
};
|
|
28
|
+
_llmType(): string;
|
|
29
|
+
bindTools(tools: BindToolsInput[], options?: Partial<CallOptions>): import("@langchain/core/runnables").Runnable<import("@langchain/core/language_models/base").BaseLanguageModelInput, AIMessageChunk<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>>, CallOptions>;
|
|
30
|
+
_generate(messages: BaseMessage[], options: this["ParsedCallOptions"]): Promise<ChatResult>;
|
|
31
|
+
_streamResponseChunks(messages: BaseMessage[], options: this["ParsedCallOptions"], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk, void, unknown>;
|
|
32
|
+
_streamChatModelEvents(messages: BaseMessage[], options: this["ParsedCallOptions"]): AsyncGenerator<ChatModelStreamEvent>;
|
|
33
|
+
}
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=pi-chat-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-chat-model.d.ts","sourceRoot":"","sources":["../src/pi-chat-model.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,wBAAwB,EAC9B,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAEL,cAAc,EAId,KAAK,WAAW,EACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,KAAK,EACV,GAAG,EAEH,OAAO,EACP,KAAK,EACL,MAAM,EACN,kBAAkB,EAGnB,MAAM,uBAAuB,CAAC;AAE/B,UAAU,WAAY,SAAQ,wBAAwB;IACpD,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAAE,CAAC;CAClD;AAUD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAQpD;AA6BD,gGAAgG;AAChG,wBAAgB,SAAS,CACvB,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,GAC3B,OAAO,CA+DT;AAmBD,6FAA6F;AAC7F,qBAAa,WAAY,SAAQ,aAAa,CAAC,WAAW,CAAC;IAEvD,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,kBAAkB;gBAF7B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,EACvB,SAAS,GAAE,kBAA0B;IAIhD,IAAa,OAAO;;;;;;MAQnB;IACD,QAAQ;IAGC,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAGpE,SAAS,CACb,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,GACjC,OAAO,CAAC,UAAU,CAAC;IA0Bf,qBAAqB,CAC1B,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAClC,UAAU,CAAC,EAAE,wBAAwB;IA4FvB,sBAAsB,CACpC,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,GACjC,cAAc,CAAC,oBAAoB,CAAC;CAoCxC"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { BaseChatModel, } from "@langchain/core/language_models/chat_models";
|
|
2
|
+
import { AIMessage, AIMessageChunk, HumanMessage, SystemMessage, ToolMessage, } from "@langchain/core/messages";
|
|
3
|
+
import { convertChunksToEvents } from "@langchain/core/language_models/compat";
|
|
4
|
+
import { ChatGenerationChunk } from "@langchain/core/outputs";
|
|
5
|
+
import { convertToOpenAITool } from "@langchain/core/utils/function_calling";
|
|
6
|
+
const emptyUsage = () => ({
|
|
7
|
+
input: 0,
|
|
8
|
+
output: 0,
|
|
9
|
+
cacheRead: 0,
|
|
10
|
+
cacheWrite: 0,
|
|
11
|
+
totalTokens: 0,
|
|
12
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
|
|
13
|
+
});
|
|
14
|
+
export function messageText(content) {
|
|
15
|
+
if (typeof content === "string")
|
|
16
|
+
return content;
|
|
17
|
+
if (!Array.isArray(content))
|
|
18
|
+
return "";
|
|
19
|
+
return content
|
|
20
|
+
.map((part) => part.type === "text" ? (part.text ?? "") : "")
|
|
21
|
+
.join("");
|
|
22
|
+
}
|
|
23
|
+
function inputContent(content) {
|
|
24
|
+
if (typeof content === "string")
|
|
25
|
+
return [{ type: "text", text: content }];
|
|
26
|
+
if (!Array.isArray(content))
|
|
27
|
+
throw new Error("MODEL_MESSAGE_CONTENT_UNSUPPORTED");
|
|
28
|
+
return content.map((part) => {
|
|
29
|
+
if (part.type === "text" && typeof part.text === "string")
|
|
30
|
+
return { type: "text", text: part.text };
|
|
31
|
+
const imageUrl = typeof part.image_url === "string"
|
|
32
|
+
? part.image_url
|
|
33
|
+
: part.image_url?.url;
|
|
34
|
+
if (typeof imageUrl === "string") {
|
|
35
|
+
const match = /^data:(image\/[a-z0-9.+-]+);base64,([\s\S]+)$/iu.exec(imageUrl);
|
|
36
|
+
if (match?.[1] && match[2])
|
|
37
|
+
return { type: "image", mimeType: match[1], data: match[2] };
|
|
38
|
+
}
|
|
39
|
+
if (part.type === "image" && typeof part.data === "string" && typeof part.mimeType === "string")
|
|
40
|
+
return { type: "image", data: part.data, mimeType: part.mimeType };
|
|
41
|
+
if (part.type === "image" &&
|
|
42
|
+
part.source_type === "base64" &&
|
|
43
|
+
typeof part.data === "string" &&
|
|
44
|
+
typeof part.mime_type === "string")
|
|
45
|
+
return { type: "image", data: part.data, mimeType: part.mime_type };
|
|
46
|
+
throw new Error("MODEL_MESSAGE_CONTENT_UNSUPPORTED");
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** Preserve provider response metadata in checkpoints for native tool/thinking continuation. */
|
|
50
|
+
export function piContext(messages, model, tools) {
|
|
51
|
+
const system = [];
|
|
52
|
+
const converted = [];
|
|
53
|
+
for (const message of messages) {
|
|
54
|
+
if (SystemMessage.isInstance(message))
|
|
55
|
+
system.push(messageText(message.content));
|
|
56
|
+
else if (HumanMessage.isInstance(message))
|
|
57
|
+
converted.push({
|
|
58
|
+
role: "user",
|
|
59
|
+
content: inputContent(message.content),
|
|
60
|
+
timestamp: Date.now(),
|
|
61
|
+
});
|
|
62
|
+
else if (AIMessage.isInstance(message)) {
|
|
63
|
+
const native = (message.additional_kwargs.pi_response ??
|
|
64
|
+
message.response_metadata.pi_response);
|
|
65
|
+
if (native?.role === "assistant" &&
|
|
66
|
+
native.provider === model.provider &&
|
|
67
|
+
native.model === model.id) {
|
|
68
|
+
converted.push(native);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const content = [];
|
|
72
|
+
const text = messageText(message.content);
|
|
73
|
+
if (text)
|
|
74
|
+
content.push({ type: "text", text });
|
|
75
|
+
for (const call of message.tool_calls ?? []) {
|
|
76
|
+
if (!call.id)
|
|
77
|
+
throw new Error("MODEL_TOOL_CALL_ID_REQUIRED");
|
|
78
|
+
content.push({ type: "toolCall", id: call.id, name: call.name, arguments: call.args });
|
|
79
|
+
}
|
|
80
|
+
converted.push({
|
|
81
|
+
role: "assistant",
|
|
82
|
+
content,
|
|
83
|
+
api: model.api,
|
|
84
|
+
provider: model.provider,
|
|
85
|
+
model: model.id,
|
|
86
|
+
usage: emptyUsage(),
|
|
87
|
+
stopReason: message.tool_calls?.length ? "toolUse" : "stop",
|
|
88
|
+
timestamp: Date.now(),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
else if (ToolMessage.isInstance(message))
|
|
92
|
+
converted.push({
|
|
93
|
+
role: "toolResult",
|
|
94
|
+
toolCallId: message.tool_call_id,
|
|
95
|
+
toolName: message.name ?? "tool",
|
|
96
|
+
content: inputContent(message.content),
|
|
97
|
+
isError: message.status === "error",
|
|
98
|
+
timestamp: Date.now(),
|
|
99
|
+
});
|
|
100
|
+
else
|
|
101
|
+
throw new Error("MODEL_MESSAGE_ROLE_UNSUPPORTED");
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
systemPrompt: system.join("\n\n"),
|
|
105
|
+
messages: converted,
|
|
106
|
+
...(tools?.length
|
|
107
|
+
? {
|
|
108
|
+
tools: tools.map(({ function: fn }) => ({
|
|
109
|
+
name: fn.name,
|
|
110
|
+
description: fn.description ?? "",
|
|
111
|
+
parameters: fn.parameters,
|
|
112
|
+
})),
|
|
113
|
+
}
|
|
114
|
+
: {}),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function usage(result) {
|
|
118
|
+
return {
|
|
119
|
+
input_tokens: result.usage.input + result.usage.cacheRead + result.usage.cacheWrite,
|
|
120
|
+
output_tokens: result.usage.output,
|
|
121
|
+
total_tokens: result.usage.totalTokens,
|
|
122
|
+
input_token_details: {
|
|
123
|
+
cache_read: result.usage.cacheRead,
|
|
124
|
+
cache_creation: result.usage.cacheWrite,
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function assertResult(result) {
|
|
129
|
+
if (result.stopReason === "aborted")
|
|
130
|
+
throw new DOMException("Model request aborted", "AbortError");
|
|
131
|
+
if (result.stopReason === "error")
|
|
132
|
+
throw new Error(result.errorMessage ?? "MODEL_REQUEST_FAILED");
|
|
133
|
+
}
|
|
134
|
+
/** Model protocol adapter only. Agent loops and persistence remain Deep Agents/LangGraph. */
|
|
135
|
+
export class PiChatModel extends BaseChatModel {
|
|
136
|
+
models;
|
|
137
|
+
nativeModel;
|
|
138
|
+
reasoning;
|
|
139
|
+
constructor(models, nativeModel, reasoning = "off") {
|
|
140
|
+
super({});
|
|
141
|
+
this.models = models;
|
|
142
|
+
this.nativeModel = nativeModel;
|
|
143
|
+
this.reasoning = reasoning;
|
|
144
|
+
}
|
|
145
|
+
get profile() {
|
|
146
|
+
return {
|
|
147
|
+
maxInputTokens: this.nativeModel.contextWindow,
|
|
148
|
+
maxOutputTokens: this.nativeModel.maxTokens,
|
|
149
|
+
imageInputs: this.nativeModel.input.includes("image"),
|
|
150
|
+
imageUrlInputs: false,
|
|
151
|
+
toolCalling: true,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
_llmType() {
|
|
155
|
+
return "pi-ai";
|
|
156
|
+
}
|
|
157
|
+
bindTools(tools, options) {
|
|
158
|
+
return this.withConfig({ ...options, tools: tools.map((t) => convertToOpenAITool(t)) });
|
|
159
|
+
}
|
|
160
|
+
async _generate(messages, options) {
|
|
161
|
+
const result = await this.models.completeSimple(this.nativeModel, piContext(messages, this.nativeModel, options.tools), {
|
|
162
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
163
|
+
...(this.reasoning === "off" ? {} : { reasoning: this.reasoning }),
|
|
164
|
+
});
|
|
165
|
+
assertResult(result);
|
|
166
|
+
const text = messageText(result.content);
|
|
167
|
+
const message = Object.assign(new AIMessage({
|
|
168
|
+
content: text,
|
|
169
|
+
tool_calls: result.content.flatMap((p) => p.type === "toolCall"
|
|
170
|
+
? [{ type: "tool_call", id: p.id, name: p.name, args: p.arguments }]
|
|
171
|
+
: []),
|
|
172
|
+
additional_kwargs: { pi_response: result },
|
|
173
|
+
response_metadata: { model: result.model, stopReason: result.stopReason },
|
|
174
|
+
}), { usage_metadata: usage(result) });
|
|
175
|
+
return { generations: [{ message, text }] };
|
|
176
|
+
}
|
|
177
|
+
async *_streamResponseChunks(messages, options, runManager) {
|
|
178
|
+
const stream = this.models.streamSimple(this.nativeModel, piContext(messages, this.nativeModel, options.tools), {
|
|
179
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
180
|
+
...(this.reasoning === "off" ? {} : { reasoning: this.reasoning }),
|
|
181
|
+
});
|
|
182
|
+
const emit = async (chunk) => {
|
|
183
|
+
await runManager?.handleLLMNewToken(chunk.text, undefined, undefined, undefined, undefined, {
|
|
184
|
+
chunk,
|
|
185
|
+
});
|
|
186
|
+
return chunk;
|
|
187
|
+
};
|
|
188
|
+
const startedBlocks = new Set();
|
|
189
|
+
for await (const event of stream) {
|
|
190
|
+
// The v3 text projection consumes deltas; initialize an empty indexed
|
|
191
|
+
// block so the first token is a delta rather than start-only content.
|
|
192
|
+
if ((event.type === "text_delta" || event.type === "thinking_delta") &&
|
|
193
|
+
!startedBlocks.has(event.contentIndex)) {
|
|
194
|
+
startedBlocks.add(event.contentIndex);
|
|
195
|
+
yield await emit(new ChatGenerationChunk({
|
|
196
|
+
text: "",
|
|
197
|
+
message: new AIMessageChunk({
|
|
198
|
+
content: [
|
|
199
|
+
event.type === "text_delta"
|
|
200
|
+
? { type: "text", text: "", index: event.contentIndex }
|
|
201
|
+
: { type: "reasoning", reasoning: "", index: event.contentIndex },
|
|
202
|
+
],
|
|
203
|
+
}),
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
206
|
+
if (event.type === "text_delta")
|
|
207
|
+
yield await emit(new ChatGenerationChunk({
|
|
208
|
+
text: event.delta,
|
|
209
|
+
message: new AIMessageChunk({
|
|
210
|
+
content: [{ type: "text", text: event.delta, index: event.contentIndex }],
|
|
211
|
+
}),
|
|
212
|
+
}));
|
|
213
|
+
else if (event.type === "thinking_delta")
|
|
214
|
+
yield await emit(new ChatGenerationChunk({
|
|
215
|
+
text: "",
|
|
216
|
+
message: new AIMessageChunk({
|
|
217
|
+
content: [{ type: "reasoning", reasoning: event.delta, index: event.contentIndex }],
|
|
218
|
+
}),
|
|
219
|
+
}));
|
|
220
|
+
else if (event.type === "toolcall_end")
|
|
221
|
+
yield await emit(new ChatGenerationChunk({
|
|
222
|
+
text: "",
|
|
223
|
+
message: new AIMessageChunk({
|
|
224
|
+
content: "",
|
|
225
|
+
tool_call_chunks: [
|
|
226
|
+
{
|
|
227
|
+
name: event.toolCall.name,
|
|
228
|
+
args: JSON.stringify(event.toolCall.arguments),
|
|
229
|
+
id: event.toolCall.id,
|
|
230
|
+
index: event.contentIndex,
|
|
231
|
+
type: "tool_call_chunk",
|
|
232
|
+
},
|
|
233
|
+
],
|
|
234
|
+
}),
|
|
235
|
+
}));
|
|
236
|
+
else if (event.type === "error")
|
|
237
|
+
assertResult(event.error);
|
|
238
|
+
}
|
|
239
|
+
const result = await stream.result();
|
|
240
|
+
assertResult(result);
|
|
241
|
+
yield await emit(new ChatGenerationChunk({
|
|
242
|
+
text: "",
|
|
243
|
+
message: Object.assign(new AIMessageChunk({
|
|
244
|
+
content: "",
|
|
245
|
+
additional_kwargs: { pi_response: result },
|
|
246
|
+
response_metadata: { model: result.model, stopReason: result.stopReason },
|
|
247
|
+
}), { usage_metadata: usage(result) }),
|
|
248
|
+
}));
|
|
249
|
+
}
|
|
250
|
+
async *_streamChatModelEvents(messages, options) {
|
|
251
|
+
// Core 1.2.9's official legacy bridge handles content/usage but drops
|
|
252
|
+
// provider metadata and hardcodes finish=stop. Preserve those at its v3
|
|
253
|
+
// message-finish extension point for checkpoint continuation.
|
|
254
|
+
let result;
|
|
255
|
+
const source = this._streamResponseChunks(messages, options);
|
|
256
|
+
const chunks = async function* () {
|
|
257
|
+
for await (const chunk of source) {
|
|
258
|
+
result =
|
|
259
|
+
chunk.message.additional_kwargs.pi_response ?? result;
|
|
260
|
+
yield chunk;
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
for await (const event of convertChunksToEvents(chunks(), options.signal ? { signal: options.signal } : undefined)) {
|
|
264
|
+
if (event.event === "message-finish" && result) {
|
|
265
|
+
yield {
|
|
266
|
+
...event,
|
|
267
|
+
reason: result.stopReason === "toolUse"
|
|
268
|
+
? "tool_use"
|
|
269
|
+
: result.stopReason === "length"
|
|
270
|
+
? "length"
|
|
271
|
+
: "stop",
|
|
272
|
+
usage: usage(result),
|
|
273
|
+
responseMetadata: {
|
|
274
|
+
model: result.model,
|
|
275
|
+
stopReason: result.stopReason,
|
|
276
|
+
pi_response: result,
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
else
|
|
281
|
+
yield event;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=pi-chat-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-chat-model.js","sourceRoot":"","sources":["../src/pi-chat-model.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAyBA,wBAAsB,IAAI,CAAC,IAAI,WAAwB,0BAqBtD"}
|