@bolloon/bolloon-agent 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/execution-supervisor.js +87 -5
- package/dist/agents/model-policy.js +651 -0
- package/dist/agents/pi-sdk-tools.js +84 -33
- package/dist/agents/pi-sdk.js +83 -23
- package/dist/agents/run-store.js +53 -0
- package/dist/agents/task/task-runner.js +8 -1
- package/dist/agents/workflow-pivot-loop.js +19 -12
- package/dist/cli/clipboard.js +65 -0
- package/dist/cli/ink-app.js +145 -17
- package/dist/cli/log-gate.js +386 -0
- package/dist/cli/mention-data.js +2 -0
- package/dist/cli/model-selector.js +538 -0
- package/dist/cli/reply-hygiene.js +54 -0
- package/dist/cli/setup-wizard.js +686 -69
- package/dist/cli/startup-notice.js +160 -0
- package/dist/cli/stores.js +22 -1
- package/dist/cli/theme.js +49 -0
- package/dist/cli/tui-select.js +970 -0
- package/dist/cli-entry.js +125 -18
- package/dist/electron-build/agents/execution-supervisor.js +86 -4
- package/dist/electron-build/agents/execution-supervisor.js.map +1 -1
- package/dist/electron-build/agents/goal-store.js.map +1 -1
- package/dist/electron-build/agents/model-policy.js +706 -0
- package/dist/electron-build/agents/model-policy.js.map +1 -0
- package/dist/electron-build/agents/pi-sdk-tools.js +84 -33
- package/dist/electron-build/agents/pi-sdk-tools.js.map +1 -1
- package/dist/electron-build/agents/pi-sdk-types.js.map +1 -1
- package/dist/electron-build/agents/pi-sdk.js +83 -23
- package/dist/electron-build/agents/pi-sdk.js.map +1 -1
- package/dist/electron-build/agents/run-store.js +55 -1
- package/dist/electron-build/agents/run-store.js.map +1 -1
- package/dist/electron-build/agents/task/task-runner.js +8 -1
- package/dist/electron-build/agents/task/task-runner.js.map +1 -1
- package/dist/electron-build/agents/workflow-pivot-loop.js +19 -12
- package/dist/electron-build/agents/workflow-pivot-loop.js.map +1 -1
- package/dist/electron-build/llm/config-store.js +146 -6
- package/dist/electron-build/llm/config-store.js.map +1 -1
- package/dist/electron-build/llm/connection-probe.js +764 -0
- package/dist/electron-build/llm/connection-probe.js.map +1 -0
- package/dist/electron-build/llm/custom-provider-store.js +272 -0
- package/dist/electron-build/llm/custom-provider-store.js.map +1 -0
- package/dist/electron-build/llm/data/provider-catalog-baked.js +23 -0
- package/dist/electron-build/llm/data/provider-catalog-baked.js.map +1 -0
- package/dist/electron-build/llm/model-catalog.js +778 -0
- package/dist/electron-build/llm/model-catalog.js.map +1 -0
- package/dist/electron-build/llm/model-discovery.js +1202 -0
- package/dist/electron-build/llm/model-discovery.js.map +1 -0
- package/dist/electron-build/llm/model-selection.js +1315 -0
- package/dist/electron-build/llm/model-selection.js.map +1 -0
- package/dist/electron-build/llm/pi-ai.js +70 -11
- package/dist/electron-build/llm/pi-ai.js.map +1 -1
- package/dist/electron-build/llm/provider-catalog.js +969 -0
- package/dist/electron-build/llm/provider-catalog.js.map +1 -0
- package/dist/electron-build/llm/provider-registry.js +950 -0
- package/dist/electron-build/llm/provider-registry.js.map +1 -0
- package/dist/electron-build/llm/tool-name.js +266 -0
- package/dist/electron-build/llm/tool-name.js.map +1 -0
- package/dist/electron-build/utils/dual-source-facts.js +236 -0
- package/dist/electron-build/utils/dual-source-facts.js.map +1 -0
- package/dist/electron-build/utils/dual-source.js +32 -156
- package/dist/electron-build/utils/dual-source.js.map +1 -1
- package/dist/electron-build/utils/update-manager.js +22 -72
- package/dist/electron-build/utils/update-manager.js.map +1 -1
- package/dist/electron-build/utils/update-state.js +2 -19
- package/dist/electron-build/utils/update-state.js.map +1 -1
- package/dist/electron-build/utils/version-identity.js +193 -0
- package/dist/electron-build/utils/version-identity.js.map +1 -0
- package/dist/electron-build/utils/version-info.js +47 -101
- package/dist/electron-build/utils/version-info.js.map +1 -1
- package/dist/index.js +282 -96
- package/dist/ios/bolloon-web.json +10 -0
- package/dist/ios/mobile-contacts.js +44 -11
- package/dist/ios/mobile-core.js +1723 -84
- package/dist/ios/mobile-tasks.js +339 -0
- package/dist/ios/mobile-update.js +1442 -0
- package/dist/ios/mobile.js +308 -35
- package/dist/ios/routes-llm-config.js +344 -52
- package/dist/ios/routes-mobile-tasks.js +353 -0
- package/dist/ios/server.js +163 -4
- package/dist/ios/sw.js +1 -1
- package/dist/llm/config-store.js +146 -6
- package/dist/llm/connection-probe.js +744 -0
- package/dist/llm/custom-provider-store.js +224 -0
- package/dist/llm/data/provider-catalog-baked.js +19 -0
- package/dist/llm/model-catalog.js +717 -0
- package/dist/llm/model-discovery.js +1137 -0
- package/dist/llm/model-selection.js +1241 -0
- package/dist/llm/pi-ai.js +70 -11
- package/dist/llm/provider-catalog.js +898 -0
- package/dist/llm/provider-registry.js +917 -0
- package/dist/llm/tool-name.js +220 -0
- package/dist/setup/onboard.js +34 -8
- package/dist/utils/dual-source-facts.js +223 -0
- package/dist/utils/dual-source.js +12 -141
- package/dist/utils/update-manager.js +16 -59
- package/dist/utils/update-state.js +6 -18
- package/dist/utils/version-identity.js +176 -0
- package/dist/utils/version-info.js +9 -78
- package/dist/web/bolloon-web.json +10 -0
- package/dist/web/mobile-core.js +1721 -84
- package/dist/web/mobile-update.js +1442 -0
- package/dist/web/mobile.js +308 -35
- package/dist/web/routes-llm-config.js +344 -52
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/scripts/build-web.ts +36 -0
|
@@ -89,21 +89,54 @@ async function importPrivate(storage, c) {
|
|
|
89
89
|
}
|
|
90
90
|
/** 用设备私钥签一条 Grant (核心: 手机确认 → 桌面才认) */
|
|
91
91
|
export async function signGrantOnDevice(grant, storage, c) {
|
|
92
|
-
|
|
93
|
-
const key = await importPrivate(storage, cobj);
|
|
94
|
-
const payload = canonicalGrantPayload(grant);
|
|
95
|
-
const sig = await cobj.subtle.sign({ name: 'Ed25519' }, key, bytesOf(payload));
|
|
96
|
-
const dev = await loadOrCreateDeviceKey(storage, cobj);
|
|
97
|
-
return { deviceId: dev.deviceId, alg: 'ed25519', payloadHash: await sha256Hex(cobj, payload), sig: b64(sig) };
|
|
92
|
+
return signPayloadOnDevice(canonicalGrantPayload(grant), storage, c);
|
|
98
93
|
}
|
|
99
94
|
/** 撤销也要签名 (桌面拒收未登记设备的撤销) */
|
|
100
95
|
export async function signRevocationOnDevice(rev, storage, c) {
|
|
96
|
+
return signPayloadOnDevice(canonicalRevocationPayload(rev), storage, c);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 通用: 用**同一把设备私钥**签任意规范载荷 (2026-09-25)。
|
|
100
|
+
*
|
|
101
|
+
* 抽出来的原因: 手机上所有"要桌面认账"的动作 (长期授权 · 撤销 · 高风险任务动作
|
|
102
|
+
* 入群/发公告/过程留痕) 必须是**同一把设备密钥 + 同一套验签纪律** ——
|
|
103
|
+
* 各写一份签名实现迟早出现"某条路径没签名也能过"的缝。
|
|
104
|
+
* 载荷的规范化由调用方提供 (grant-payload / mobile-task-actions), 本函数只管签。
|
|
105
|
+
*/
|
|
106
|
+
export async function signPayloadOnDevice(payload, storage, c) {
|
|
107
|
+
const cobj = cryptoOf(c);
|
|
108
|
+
if (!cobj?.subtle)
|
|
109
|
+
throw new Error('device_signing_unavailable: 本机没有 WebCrypto');
|
|
110
|
+
// 只加载一次设备材料: deviceId 与签名必须来自**同一份**密钥
|
|
111
|
+
// (2026-09-25 修: 之前在这里二次 loadOrCreateDeviceKey, storage 不持久化时会生成另一把密钥
|
|
112
|
+
// → 桌面 device_mismatch 403。真机 localStorage 下看不出来, 但那是运气不是设计。)
|
|
113
|
+
const material = await loadOrCreateDeviceKey(storage, cobj);
|
|
114
|
+
const key = await cobj.subtle.importKey('jwk', material.privateKeyJwk, { name: 'Ed25519' }, false, ['sign']);
|
|
115
|
+
const bytes = bytesOf(String(payload ?? ''));
|
|
116
|
+
const sig = await cobj.subtle.sign({ name: 'Ed25519' }, key, bytes);
|
|
117
|
+
return { deviceId: material.deviceId, alg: 'ed25519', payloadHash: await sha256Hex(cobj, String(payload ?? '')), sig: b64(sig) };
|
|
118
|
+
}
|
|
119
|
+
/** sha256 hex (手机侧与桌面 Node 同值) —— 任务动作的内容摘要用它算 */
|
|
120
|
+
export async function sha256HexOf(text, c) {
|
|
101
121
|
const cobj = cryptoOf(c);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
122
|
+
if (!cobj?.subtle)
|
|
123
|
+
throw new Error('device_signing_unavailable: 本机没有 WebCrypto');
|
|
124
|
+
return sha256Hex(cobj, String(text ?? ''));
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 用**已经加载好的**设备材料签名 (调用方自己拿 deviceId)。
|
|
128
|
+
*
|
|
129
|
+
* 为什么留这个口: 高风险任务动作的载荷里含 deviceId, 签名必须与那个 deviceId 同源。
|
|
130
|
+
* 若"取 deviceId"与"签名"各调一次 loadOrCreateDeviceKey, 在 storage 不持久化的环境
|
|
131
|
+
* (隐私模式 / storage 被禁) 会拿到两把不同密钥 → 桌面 device_mismatch 403。
|
|
132
|
+
*/
|
|
133
|
+
export async function signPayloadWithMaterial(payload, material, c) {
|
|
134
|
+
const cobj = cryptoOf(c);
|
|
135
|
+
if (!cobj?.subtle)
|
|
136
|
+
throw new Error('device_signing_unavailable: 本机没有 WebCrypto');
|
|
137
|
+
const key = await cobj.subtle.importKey('jwk', material.privateKeyJwk, { name: 'Ed25519' }, false, ['sign']);
|
|
138
|
+
const sig = await cobj.subtle.sign({ name: 'Ed25519' }, key, bytesOf(String(payload ?? '')));
|
|
139
|
+
return { deviceId: material.deviceId, alg: 'ed25519', payloadHash: await sha256Hex(cobj, String(payload ?? '')), sig: b64(sig) };
|
|
107
140
|
}
|
|
108
141
|
async function post(base, path, body, f) {
|
|
109
142
|
const res = await f(`${String(base).replace(/\/+$/, '')}${path}`, {
|