p-spore 0.1.0

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 (261) hide show
  1. package/README.md +97 -0
  2. package/dist/agents/agent-manager.d.ts +57 -0
  3. package/dist/agents/agent-manager.d.ts.map +1 -0
  4. package/dist/agents/agent-manager.js +559 -0
  5. package/dist/agents/agent-manager.js.map +1 -0
  6. package/dist/agents/agent-tools.d.ts +4 -0
  7. package/dist/agents/agent-tools.d.ts.map +1 -0
  8. package/dist/agents/agent-tools.js +111 -0
  9. package/dist/agents/agent-tools.js.map +1 -0
  10. package/dist/agents/types.d.ts +52 -0
  11. package/dist/agents/types.d.ts.map +1 -0
  12. package/dist/agents/types.js +2 -0
  13. package/dist/agents/types.js.map +1 -0
  14. package/dist/application/agent-application.d.ts +89 -0
  15. package/dist/application/agent-application.d.ts.map +1 -0
  16. package/dist/application/agent-application.js +542 -0
  17. package/dist/application/agent-application.js.map +1 -0
  18. package/dist/automation/automation-tools.d.ts +4 -0
  19. package/dist/automation/automation-tools.d.ts.map +1 -0
  20. package/dist/automation/automation-tools.js +35 -0
  21. package/dist/automation/automation-tools.js.map +1 -0
  22. package/dist/automation/cron-adapter.d.ts +11 -0
  23. package/dist/automation/cron-adapter.d.ts.map +1 -0
  24. package/dist/automation/cron-adapter.js +48 -0
  25. package/dist/automation/cron-adapter.js.map +1 -0
  26. package/dist/automation/daemon-run-executor.d.ts +18 -0
  27. package/dist/automation/daemon-run-executor.d.ts.map +1 -0
  28. package/dist/automation/daemon-run-executor.js +69 -0
  29. package/dist/automation/daemon-run-executor.js.map +1 -0
  30. package/dist/automation/job-store.d.ts +12 -0
  31. package/dist/automation/job-store.d.ts.map +1 -0
  32. package/dist/automation/job-store.js +185 -0
  33. package/dist/automation/job-store.js.map +1 -0
  34. package/dist/automation/run-ledger.d.ts +25 -0
  35. package/dist/automation/run-ledger.d.ts.map +1 -0
  36. package/dist/automation/run-ledger.js +148 -0
  37. package/dist/automation/run-ledger.js.map +1 -0
  38. package/dist/automation/scheduler.d.ts +36 -0
  39. package/dist/automation/scheduler.d.ts.map +1 -0
  40. package/dist/automation/scheduler.js +300 -0
  41. package/dist/automation/scheduler.js.map +1 -0
  42. package/dist/automation/types.d.ts +81 -0
  43. package/dist/automation/types.d.ts.map +1 -0
  44. package/dist/automation/types.js +2 -0
  45. package/dist/automation/types.js.map +1 -0
  46. package/dist/cli/main.d.ts +4 -0
  47. package/dist/cli/main.d.ts.map +1 -0
  48. package/dist/cli/main.js +768 -0
  49. package/dist/cli/main.js.map +1 -0
  50. package/dist/config/config.d.ts +52 -0
  51. package/dist/config/config.d.ts.map +1 -0
  52. package/dist/config/config.js +345 -0
  53. package/dist/config/config.js.map +1 -0
  54. package/dist/daemon/daemon.d.ts +30 -0
  55. package/dist/daemon/daemon.d.ts.map +1 -0
  56. package/dist/daemon/daemon.js +437 -0
  57. package/dist/daemon/daemon.js.map +1 -0
  58. package/dist/daemon/supervisor.d.ts +18 -0
  59. package/dist/daemon/supervisor.d.ts.map +1 -0
  60. package/dist/daemon/supervisor.js +37 -0
  61. package/dist/daemon/supervisor.js.map +1 -0
  62. package/dist/desktop/daemon-bridge.d.ts +32 -0
  63. package/dist/desktop/daemon-bridge.d.ts.map +1 -0
  64. package/dist/desktop/daemon-bridge.js +204 -0
  65. package/dist/desktop/daemon-bridge.js.map +1 -0
  66. package/dist/desktop/daemon-supervisor.d.ts +2 -0
  67. package/dist/desktop/daemon-supervisor.d.ts.map +1 -0
  68. package/dist/desktop/daemon-supervisor.js +2 -0
  69. package/dist/desktop/daemon-supervisor.js.map +1 -0
  70. package/dist/desktop/ipc-contract.d.ts +153 -0
  71. package/dist/desktop/ipc-contract.d.ts.map +1 -0
  72. package/dist/desktop/ipc-contract.js +219 -0
  73. package/dist/desktop/ipc-contract.js.map +1 -0
  74. package/dist/desktop/main.d.ts +2 -0
  75. package/dist/desktop/main.d.ts.map +1 -0
  76. package/dist/desktop/main.js +594 -0
  77. package/dist/desktop/main.js.map +1 -0
  78. package/dist/desktop/preload.cjs +32 -0
  79. package/dist/desktop/renderer/index.html +284 -0
  80. package/dist/desktop/renderer/renderer.d.ts +2 -0
  81. package/dist/desktop/renderer/renderer.d.ts.map +1 -0
  82. package/dist/desktop/renderer/renderer.js +895 -0
  83. package/dist/desktop/renderer/renderer.js.map +1 -0
  84. package/dist/desktop/renderer/store.d.ts +33 -0
  85. package/dist/desktop/renderer/store.d.ts.map +1 -0
  86. package/dist/desktop/renderer/store.js +144 -0
  87. package/dist/desktop/renderer/store.js.map +1 -0
  88. package/dist/desktop/renderer/styles.css +540 -0
  89. package/dist/desktop/security.d.ts +5 -0
  90. package/dist/desktop/security.d.ts.map +1 -0
  91. package/dist/desktop/security.js +49 -0
  92. package/dist/desktop/security.js.map +1 -0
  93. package/dist/desktop/smoke-fixture.d.ts +3 -0
  94. package/dist/desktop/smoke-fixture.d.ts.map +1 -0
  95. package/dist/desktop/smoke-fixture.js +223 -0
  96. package/dist/desktop/smoke-fixture.js.map +1 -0
  97. package/dist/desktop/validation.d.ts +8 -0
  98. package/dist/desktop/validation.d.ts.map +1 -0
  99. package/dist/desktop/validation.js +341 -0
  100. package/dist/desktop/validation.js.map +1 -0
  101. package/dist/domain/runtime.d.ts +116 -0
  102. package/dist/domain/runtime.d.ts.map +1 -0
  103. package/dist/domain/runtime.js +2 -0
  104. package/dist/domain/runtime.js.map +1 -0
  105. package/dist/gateway/local-gateway.d.ts +23 -0
  106. package/dist/gateway/local-gateway.d.ts.map +1 -0
  107. package/dist/gateway/local-gateway.js +265 -0
  108. package/dist/gateway/local-gateway.js.map +1 -0
  109. package/dist/kernel/loop.d.ts +10 -0
  110. package/dist/kernel/loop.d.ts.map +1 -0
  111. package/dist/kernel/loop.js +41 -0
  112. package/dist/kernel/loop.js.map +1 -0
  113. package/dist/kernel/reducer.d.ts +3 -0
  114. package/dist/kernel/reducer.d.ts.map +1 -0
  115. package/dist/kernel/reducer.js +102 -0
  116. package/dist/kernel/reducer.js.map +1 -0
  117. package/dist/kernel/state.d.ts +93 -0
  118. package/dist/kernel/state.d.ts.map +1 -0
  119. package/dist/kernel/state.js +15 -0
  120. package/dist/kernel/state.js.map +1 -0
  121. package/dist/mcp/mcp-manager.d.ts +55 -0
  122. package/dist/mcp/mcp-manager.d.ts.map +1 -0
  123. package/dist/mcp/mcp-manager.js +591 -0
  124. package/dist/mcp/mcp-manager.js.map +1 -0
  125. package/dist/mcp/mcp-tools.d.ts +4 -0
  126. package/dist/mcp/mcp-tools.d.ts.map +1 -0
  127. package/dist/mcp/mcp-tools.js +53 -0
  128. package/dist/mcp/mcp-tools.js.map +1 -0
  129. package/dist/mcp/types.d.ts +73 -0
  130. package/dist/mcp/types.d.ts.map +1 -0
  131. package/dist/mcp/types.js +2 -0
  132. package/dist/mcp/types.js.map +1 -0
  133. package/dist/memory/bm25.d.ts +14 -0
  134. package/dist/memory/bm25.d.ts.map +1 -0
  135. package/dist/memory/bm25.js +40 -0
  136. package/dist/memory/bm25.js.map +1 -0
  137. package/dist/memory/context-loader.d.ts +26 -0
  138. package/dist/memory/context-loader.d.ts.map +1 -0
  139. package/dist/memory/context-loader.js +97 -0
  140. package/dist/memory/context-loader.js.map +1 -0
  141. package/dist/memory/memory-service.d.ts +30 -0
  142. package/dist/memory/memory-service.d.ts.map +1 -0
  143. package/dist/memory/memory-service.js +133 -0
  144. package/dist/memory/memory-service.js.map +1 -0
  145. package/dist/memory/memory-tools.d.ts +4 -0
  146. package/dist/memory/memory-tools.d.ts.map +1 -0
  147. package/dist/memory/memory-tools.js +49 -0
  148. package/dist/memory/memory-tools.js.map +1 -0
  149. package/dist/memory/search-service.d.ts +38 -0
  150. package/dist/memory/search-service.d.ts.map +1 -0
  151. package/dist/memory/search-service.js +463 -0
  152. package/dist/memory/search-service.js.map +1 -0
  153. package/dist/memory/tokenizer.d.ts +5 -0
  154. package/dist/memory/tokenizer.d.ts.map +1 -0
  155. package/dist/memory/tokenizer.js +42 -0
  156. package/dist/memory/tokenizer.js.map +1 -0
  157. package/dist/notifications/notification-service.d.ts +47 -0
  158. package/dist/notifications/notification-service.d.ts.map +1 -0
  159. package/dist/notifications/notification-service.js +163 -0
  160. package/dist/notifications/notification-service.js.map +1 -0
  161. package/dist/notifications/notification-tools.d.ts +4 -0
  162. package/dist/notifications/notification-tools.d.ts.map +1 -0
  163. package/dist/notifications/notification-tools.js +31 -0
  164. package/dist/notifications/notification-tools.js.map +1 -0
  165. package/dist/pi/pi-runtime-adapter.d.ts +38 -0
  166. package/dist/pi/pi-runtime-adapter.d.ts.map +1 -0
  167. package/dist/pi/pi-runtime-adapter.js +483 -0
  168. package/dist/pi/pi-runtime-adapter.js.map +1 -0
  169. package/dist/plugins/extension-manager.d.ts +32 -0
  170. package/dist/plugins/extension-manager.d.ts.map +1 -0
  171. package/dist/plugins/extension-manager.js +562 -0
  172. package/dist/plugins/extension-manager.js.map +1 -0
  173. package/dist/plugins/resource-inspector.d.ts +18 -0
  174. package/dist/plugins/resource-inspector.d.ts.map +1 -0
  175. package/dist/plugins/resource-inspector.js +386 -0
  176. package/dist/plugins/resource-inspector.js.map +1 -0
  177. package/dist/plugins/types.d.ts +96 -0
  178. package/dist/plugins/types.d.ts.map +1 -0
  179. package/dist/plugins/types.js +2 -0
  180. package/dist/plugins/types.js.map +1 -0
  181. package/dist/policy/approval-service.d.ts +68 -0
  182. package/dist/policy/approval-service.d.ts.map +1 -0
  183. package/dist/policy/approval-service.js +349 -0
  184. package/dist/policy/approval-service.js.map +1 -0
  185. package/dist/policy/policy.d.ts +26 -0
  186. package/dist/policy/policy.d.ts.map +1 -0
  187. package/dist/policy/policy.js +228 -0
  188. package/dist/policy/policy.js.map +1 -0
  189. package/dist/protocol/client.d.ts +25 -0
  190. package/dist/protocol/client.d.ts.map +1 -0
  191. package/dist/protocol/client.js +188 -0
  192. package/dist/protocol/client.js.map +1 -0
  193. package/dist/protocol/errors.d.ts +5 -0
  194. package/dist/protocol/errors.d.ts.map +1 -0
  195. package/dist/protocol/errors.js +9 -0
  196. package/dist/protocol/errors.js.map +1 -0
  197. package/dist/protocol/schema.d.ts +71 -0
  198. package/dist/protocol/schema.d.ts.map +1 -0
  199. package/dist/protocol/schema.js +155 -0
  200. package/dist/protocol/schema.js.map +1 -0
  201. package/dist/settings/llm-settings-service.d.ts +9 -0
  202. package/dist/settings/llm-settings-service.d.ts.map +1 -0
  203. package/dist/settings/llm-settings-service.js +199 -0
  204. package/dist/settings/llm-settings-service.js.map +1 -0
  205. package/dist/settings/llm-settings.d.ts +29 -0
  206. package/dist/settings/llm-settings.d.ts.map +1 -0
  207. package/dist/settings/llm-settings.js +113 -0
  208. package/dist/settings/llm-settings.js.map +1 -0
  209. package/dist/shell/shell-service.d.ts +88 -0
  210. package/dist/shell/shell-service.d.ts.map +1 -0
  211. package/dist/shell/shell-service.js +459 -0
  212. package/dist/shell/shell-service.js.map +1 -0
  213. package/dist/storage/atomic.d.ts +4 -0
  214. package/dist/storage/atomic.d.ts.map +1 -0
  215. package/dist/storage/atomic.js +49 -0
  216. package/dist/storage/atomic.js.map +1 -0
  217. package/dist/storage/daemon-lock.d.ts +17 -0
  218. package/dist/storage/daemon-lock.d.ts.map +1 -0
  219. package/dist/storage/daemon-lock.js +97 -0
  220. package/dist/storage/daemon-lock.js.map +1 -0
  221. package/dist/storage/home.d.ts +29 -0
  222. package/dist/storage/home.d.ts.map +1 -0
  223. package/dist/storage/home.js +108 -0
  224. package/dist/storage/home.js.map +1 -0
  225. package/dist/storage/jsonl.d.ts +2 -0
  226. package/dist/storage/jsonl.d.ts.map +1 -0
  227. package/dist/storage/jsonl.js +45 -0
  228. package/dist/storage/jsonl.js.map +1 -0
  229. package/dist/tools/core-tools.d.ts +16 -0
  230. package/dist/tools/core-tools.d.ts.map +1 -0
  231. package/dist/tools/core-tools.js +283 -0
  232. package/dist/tools/core-tools.js.map +1 -0
  233. package/dist/ui/shared/presentation.d.ts +46 -0
  234. package/dist/ui/shared/presentation.d.ts.map +1 -0
  235. package/dist/ui/shared/presentation.js +81 -0
  236. package/dist/ui/shared/presentation.js.map +1 -0
  237. package/dist/ui/shared/protocol-state.d.ts +30 -0
  238. package/dist/ui/shared/protocol-state.d.ts.map +1 -0
  239. package/dist/ui/shared/protocol-state.js +165 -0
  240. package/dist/ui/shared/protocol-state.js.map +1 -0
  241. package/dist/ui/tui/commands.d.ts +2 -0
  242. package/dist/ui/tui/commands.d.ts.map +1 -0
  243. package/dist/ui/tui/commands.js +33 -0
  244. package/dist/ui/tui/commands.js.map +1 -0
  245. package/dist/ui/tui/store.d.ts +32 -0
  246. package/dist/ui/tui/store.d.ts.map +1 -0
  247. package/dist/ui/tui/store.js +62 -0
  248. package/dist/ui/tui/store.js.map +1 -0
  249. package/dist/ui/tui/tui-app.d.ts +21 -0
  250. package/dist/ui/tui/tui-app.d.ts.map +1 -0
  251. package/dist/ui/tui/tui-app.js +643 -0
  252. package/dist/ui/tui/tui-app.js.map +1 -0
  253. package/dist/ui/tui/view.d.ts +29 -0
  254. package/dist/ui/tui/view.d.ts.map +1 -0
  255. package/dist/ui/tui/view.js +255 -0
  256. package/dist/ui/tui/view.js.map +1 -0
  257. package/dist/version.d.ts +5 -0
  258. package/dist/version.d.ts.map +1 -0
  259. package/dist/version.js +5 -0
  260. package/dist/version.js.map +1 -0
  261. package/package.json +62 -0
package/README.md ADDED
@@ -0,0 +1,97 @@
1
+ # pSpore
2
+
3
+ pSpore 是一个基于 [Pi](https://github.com/earendil-works/pi) 的 Linux 本地主动式 Agent。目标是在保留 Pi 极简 agent loop 的前提下,增加持久记忆、权限治理、计划任务、subagent、MCP,以及共享同一后端的 TUI/Electron UI。
4
+
5
+ ## 当前状态
6
+
7
+ 功能 v1 已完成。Phase 0—4 的 Node/Pi 契约、Kernel、私有存储、权限/审批、Shell、pinned memory、exact/BM25、cron/BOOT、durable run ledger、双工 subagent tree、按需 MCP、受信资源生命周期、UDS Daemon、CLI、可重连 TUI,以及安全 Electron 43 客户端均已落地。TUI 与 Electron 同时连接同一个权威 Daemon;桌面 renderer 不拥有 Node 或文件系统权限。
8
+
9
+ - 原始想法:[initial_design.txt](initial_design.txt)
10
+ - 主设计文档:[docs/detailed-design.md](docs/detailed-design.md)
11
+ - 项目记忆与导航:[memory-bank/nav.md](memory-bank/nav.md)
12
+
13
+ 运行时基线为 Node.js 24,Pi 精确锁定 `v0.84.1`;最终桌面客户端使用 Electron 43,核心功能先通过 TUI 验证。版本决策见 [ADR 0001](docs/adr/0001-runtime-and-pi-baseline.md)。
14
+
15
+ ## 核心边界
16
+
17
+ - Linux-first、local-first、单用户;默认不提供多租户或公网服务。
18
+ - 主进程与工具默认使用启动 pSpore 的登录用户权限,不构成沙箱。
19
+ - `allow_all` 会允许模型以当前用户身份执行任意工具操作;当用户拥有免密或已缓存的 `sudo` 权限时,影响可能扩大到 root。
20
+ - skills、Pi extensions、pSpore plugins 和本地 MCP server 都可能执行任意代码,只能在显式信任后加载。
21
+ - 默认记忆检索为精确搜索与 BM25;向量搜索保留为可插拔扩展,不属于首版范围。
22
+
23
+ ## 当前可运行流程
24
+
25
+ 要求 Node.js 24。发布包可直接安装并启动 TUI;`pspore tui` 会初始化缺失的 home,并在没有现有实例时自动拥有/启动 Daemon,退出时只关闭自己拥有的实例。
26
+
27
+ ```bash
28
+ npm install --global p-spore
29
+ pspore tui
30
+ ```
31
+
32
+ 也可以用 `npx p-spore --help` 临时运行。npm 包名为 `p-spore`,安装后的 CLI 命令仍为 `pspore`。npm CLI 包不携带 Electron;桌面端请使用 release 中的 AppImage。源码开发使用 npm lockfile;在中国大陆网络环境中可按需使用 npm/Electron 镜像,但不会写入全局 npm 配置。
33
+
34
+ ```bash
35
+ npm install
36
+ npm run check
37
+ npm run test:electron
38
+ npm run build
39
+
40
+ node dist/cli/main.js init
41
+ node dist/cli/main.js daemon
42
+ ```
43
+
44
+ 桌面客户端无需预先手动启动 Daemon;它会初始化缺失的 pSpore home,在没有现有实例时拥有并启动一个 Daemon,已有实例时安全复用。
45
+
46
+ 另开终端后可运行:
47
+
48
+ ```bash
49
+ node dist/cli/main.js status
50
+ node dist/cli/main.js doctor
51
+ node dist/cli/main.js tui
52
+ node dist/cli/main.js desktop
53
+ node dist/cli/main.js jobs
54
+ node dist/cli/main.js runs
55
+ node dist/cli/main.js notifications
56
+ node dist/cli/main.js agents
57
+ node dist/cli/main.js agent spawn "inspect the workspace API"
58
+ node dist/cli/main.js agent send <agent-id> "focus on error handling"
59
+ node dist/cli/main.js agent join <agent-id>
60
+ node dist/cli/main.js agent cancel <agent-id>
61
+ node dist/cli/main.js mcp list
62
+ node dist/cli/main.js mcp discover <server-id>
63
+ node dist/cli/main.js mcp tools
64
+ node dist/cli/main.js mcp ping <server-id>
65
+ node dist/cli/main.js resources
66
+ node dist/cli/main.js resource inspect <staging-path>
67
+ node dist/cli/main.js resource install <staging-path> <sha256>
68
+ node dist/cli/main.js resource disable <skill|host-plugin> <name> <sha256>
69
+ node dist/cli/main.js schedule put examples/jobs/heartbeat.json
70
+ node dist/cli/main.js run <job-id>
71
+ node dist/cli/main.js cancel <run-id>
72
+ ```
73
+
74
+ Daemon 在没有模型配置时仍会 ready,便于检查健康状态;首次 prompt 会明确返回 `model_not_configured`。GUI、TUI 与 CLI 共享同一设置 decoder/service,只提供 `deepseek`、`openai`、`custom-openai`(界面显示“自定义 OpenAI”)三类 Provider。TUI 同时支持 `/config wizard` 引导配置和 `/config …` 命令配置;CLI 使用相同命令语义:
75
+
76
+ ```bash
77
+ pspore config show
78
+ pspore config set deepseek deepseek-v4-flash off
79
+ pspore config set openai gpt-5.6-terra low
80
+ pspore config set custom-openai my-model https://gateway.example.com/v1 responses off
81
+ pspore config key # TTY 中隐藏输入,也可从 stdin 安全读取
82
+ pspore config clear-key
83
+ ```
84
+
85
+ `deepseek/deepseek-v4-flash` 已通过真实 API 端到端验证。设置可配置 provider、model、Base URL、OpenAI Chat/Responses 兼容类型、thinking 与 API Key;Key 独立保存到 `~/.pspore/credentials/<provider>.api-key`(`0600`),`models.json` 只保存对该私有文件的引用,不写入 `config.json`、会话或日志。也可继续通过 Daemon 进程环境变量或 Pi 私有 auth store 提供 credential。
86
+
87
+ 用户可在 `workspace/jobs/<job-id>.json` 定义严格的五字段 cron job,也可用 `schedule put` 基于 source hash 原子创建/更新并即时重载;示例见 `examples/jobs/heartbeat.json`。CLI/TUI 可列出、手动触发或取消 run,并读取 durable notification。TUI 普通输入发送到当前选中的 main/child session,忙时必须显式使用 `/steer` 或 `/follow`;还可以用 `/agent-spawn`、`/select`、`/agent`、`/agent-join` 和 `/agent-cancel` 操作 child tree。输入 `/help` 打开完整命令面板,`/back` 或 Esc 返回对话。MCP server 在 `config.json` 中使用 `envRefs/headerRefs` 引用环境变量,只有 `trusted-local` server 会被按需启动;`sandboxed` 配置在 v1 中 fail closed。发现后的动态 schema 从下一 session 起生效,当前 session 可使用通用 `mcp_call`。
88
+
89
+ 生成或复制来的 skill/host plugin 必须先放在 `workspace/staging/`。`resource inspect` 只执行 schema、路径、依赖、语法和内容摘要检查,不 import 代码;`resource install` 必须回传刚才看到的精确 SHA-256,随后复制到不可变私有目录并写入 trust store。Skills 从下一 session 边界进入 Pi progressive disclosure,常驻上下文只有 name/description/path。Host plugin 使用 `pspore.plugin.json`,安装后还需在 `config.plugins` 固定相同 digest 与完整 capability grant,并重启 Daemon;disable 只撤销信任,不删除内容,也不会热卸载已运行代码。
90
+
91
+ 源码仓库中的 Electron 可用会自动构建的 `npm run desktop`,或在已有最新构建后用 `node dist/cli/main.js desktop` 启动。AppImage 双击启动时也会自动初始化/启动本地 Daemon;如已有同 home Daemon 则复用,退出时只关闭桌面自己拥有的实例。main process 独占 UDS 连接,preload 仅暴露 `bootstrap/dispatch/getSettings/saveSettings/subscribe` 五个固定 API;renderer 使用轻量原生 DOM、严格 CSP、`contextIsolation + sandbox`,并关闭 Node integration、外部导航、新窗口、下载和网络请求。桌面端采用会话常驻、检查器按需展开的对话优先布局,支持窗口缩放、主/子会话、流式消息、steer/follow-up/abort、审批、run、MCP、受信资源、模型设置与持久化深色/浅色主题切换。
92
+
93
+ `npm run test:electron` 需要 Linux `xvfb-run`,会构建最新代码、创建临时 pSpore home,并以 `1920 × 1080` 为主基准、补充 `1440 × 900` 与 `1180 × 720` PC 窗口,自动验证外部/桌面拥有两种 Daemon 路径、重连、IPC allowlist、renderer 权限隔离、深浅主题、设置弹层、计算后字号下限、响应式面板收纳、长内容 overflow、transcript scroll、streaming delta、固定 composer 与审批弹层/焦点;成功后清理临时数据。设置 `PSPORE_KEEP_SMOKE=1` 可保留深色、浅色、设置、响应式与审批截图及 JSON 探针。
94
+
95
+ ## v1 之后
96
+
97
+ 默认不继续扩大到 sandbox executor、vector、remote transport、mobile 或插件市场;这些能力只有在明确提出需求并重新评估边界后进入后续版本。
@@ -0,0 +1,57 @@
1
+ import type { RunBudget } from "../automation/types.js";
2
+ import type { AgentSessionSpec, AgentSnapshot, RuntimeEvent } from "../domain/runtime.js";
3
+ import type { AgentMessage, AgentMessageMode, AgentRecord, AgentSpawnRequest } from "./types.js";
4
+ export interface AgentSessionHost {
5
+ createAgentSession(sessionId: string, cwd: string, authorization: NonNullable<AgentSessionSpec["authorization"]>): Promise<void>;
6
+ hasAgentSession(sessionId: string): boolean;
7
+ startAgentPrompt(sessionId: string, text: string): Promise<void>;
8
+ sendAgentMessage(sessionId: string, text: string, mode: AgentMessageMode): Promise<void>;
9
+ waitForAgentIdle(sessionId: string): Promise<void>;
10
+ abortAgentSession(sessionId: string, reason: string): Promise<void>;
11
+ snapshotAgentSession(sessionId: string): AgentSnapshot;
12
+ subscribeAgentSession(sessionId: string, sink: (event: RuntimeEvent) => void): () => void;
13
+ closeAgentSession(sessionId: string): Promise<void>;
14
+ }
15
+ export interface AgentManagerOptions {
16
+ workspaceRoot: string;
17
+ host: AgentSessionHost;
18
+ maxConcurrentAgents: number;
19
+ maxDepth?: number;
20
+ maxChildrenPerParent?: number;
21
+ defaultRootBudget?: RunBudget;
22
+ clock?: () => Date;
23
+ idFactory?: () => string;
24
+ onAgent?: (agent: AgentRecord) => void;
25
+ onMessage?: (message: AgentMessage) => void;
26
+ onError?: (error: Error) => void;
27
+ }
28
+ export declare class AgentManager {
29
+ #private;
30
+ private constructor();
31
+ static create(options: AgentManagerOptions): Promise<AgentManager>;
32
+ registerRoot(input: {
33
+ id: string;
34
+ budget: RunBudget;
35
+ jobId?: string;
36
+ agentPath?: readonly string[];
37
+ }): void;
38
+ unregisterRoot(id: string): void;
39
+ parentIdForSession(sessionId: string): string;
40
+ spawn(input: AgentSpawnRequest): Promise<AgentRecord>;
41
+ send(input: {
42
+ senderId: string;
43
+ recipientId: string;
44
+ text: string;
45
+ mode: AgentMessageMode;
46
+ priority?: "normal" | "high";
47
+ correlationId?: string;
48
+ }): Promise<AgentMessage>;
49
+ join(agentIds: readonly string[], timeoutMs: number, signal?: AbortSignal): Promise<AgentRecord[]>;
50
+ cancel(agentId: string, reason?: string): Promise<AgentRecord>;
51
+ cancelChildren(parentId: string, reason: string): Promise<void>;
52
+ sessionAvailable(sessionId: string): Promise<void>;
53
+ list(): AgentRecord[];
54
+ listMessages(): AgentMessage[];
55
+ stop(): Promise<void>;
56
+ }
57
+ //# sourceMappingURL=agent-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-manager.d.ts","sourceRoot":"","sources":["../../src/agents/agent-manager.ts"],"names":[],"mappings":"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"}