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
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ const { contextBridge, ipcRenderer } = require("electron");
4
+
5
+ const BOOTSTRAP_CHANNEL = "pspore:desktop:bootstrap";
6
+ const DISPATCH_CHANNEL = "pspore:desktop:dispatch";
7
+ const FRAME_CHANNEL = "pspore:desktop:frame";
8
+ const SETTINGS_GET_CHANNEL = "pspore:desktop:settings:get";
9
+ const SETTINGS_SAVE_CHANNEL = "pspore:desktop:settings:save";
10
+
11
+ const api = Object.freeze({
12
+ bootstrap() {
13
+ return ipcRenderer.invoke(BOOTSTRAP_CHANNEL);
14
+ },
15
+ dispatch(command) {
16
+ return ipcRenderer.invoke(DISPATCH_CHANNEL, command);
17
+ },
18
+ getSettings() {
19
+ return ipcRenderer.invoke(SETTINGS_GET_CHANNEL);
20
+ },
21
+ saveSettings(settings) {
22
+ return ipcRenderer.invoke(SETTINGS_SAVE_CHANNEL, settings);
23
+ },
24
+ subscribe(listener) {
25
+ if (typeof listener !== "function") throw new TypeError("pSpore frame listener must be a function");
26
+ const receive = (_event, frame) => listener(frame);
27
+ ipcRenderer.on(FRAME_CHANNEL, receive);
28
+ return () => ipcRenderer.removeListener(FRAME_CHANNEL, receive);
29
+ },
30
+ });
31
+
32
+ contextBridge.exposeInMainWorld("pspore", api);
@@ -0,0 +1,284 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN" data-theme="dark">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta
6
+ http-equiv="Content-Security-Policy"
7
+ content="default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; connect-src 'none'; object-src 'none'; base-uri 'none'; form-action 'none'; frame-src 'none'"
8
+ />
9
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
10
+ <meta id="theme-color" name="theme-color" content="#0d100e" />
11
+ <title>pSpore</title>
12
+ <link rel="stylesheet" href="./styles.css" />
13
+ </head>
14
+ <body>
15
+ <a class="skip-link" href="#main-workspace">跳到主工作区</a>
16
+ <div id="app-shell" class="app-shell">
17
+ <header class="topbar">
18
+ <div class="topbar-leading">
19
+ <button id="navigation-toggle" class="icon-button" type="button" title="收起会话栏" aria-label="收起会话栏" aria-controls="navigation-panel" aria-expanded="true">
20
+ <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 5h16M4 12h10M4 19h16"></path></svg>
21
+ </button>
22
+ <div class="brand-lockup" aria-label="pSpore local agent">
23
+ <span class="brand-mark" aria-hidden="true"><i></i><i></i><i></i></span>
24
+ <div>
25
+ <h1>pSpore</h1>
26
+ <span>LOCAL AGENT</span>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ <div class="runtime-status">
31
+ <span id="connection-badge" class="connection-badge disconnected"><i></i>OFFLINE</span>
32
+ <span id="daemon-instance" class="muted">等待本地守护进程</span>
33
+ </div>
34
+ <div class="topbar-actions">
35
+ <div class="topbar-metrics" aria-label="运行指标">
36
+ <span><small>修订</small><b id="revision-value">0</b></span>
37
+ <span><small>上下文</small><b id="usage-value">0</b></span>
38
+ <span><small>缓存</small><b id="cache-value">0</b></span>
39
+ </div>
40
+ <button id="inspector-toggle" class="icon-button" type="button" title="收起检查器" aria-label="收起检查器" aria-controls="inspector-panel" aria-expanded="true">
41
+ <svg viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="5" width="16" height="14" rx="2"></rect><path d="M14 5v14"></path></svg>
42
+ </button>
43
+ <button id="theme-toggle" class="icon-button theme-toggle" type="button" title="切换到浅色模式" aria-label="切换到浅色模式">
44
+ <svg class="theme-icon sun" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="3.5"></circle><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"></path></svg>
45
+ <svg class="theme-icon moon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 15.2A8.4 8.4 0 0 1 8.8 4a8.4 8.4 0 1 0 11.2 11.2Z"></path></svg>
46
+ </button>
47
+ <button id="refresh-button" class="icon-button" type="button" title="刷新列表" aria-label="刷新列表">
48
+ <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M19 7v5h-5M5 17v-5h5"></path><path d="M7.1 7.1A7 7 0 0 1 19 12M5 12a7 7 0 0 0 11.9 4.9"></path></svg>
49
+ </button>
50
+ <button id="settings-button" class="icon-button" type="button" title="设置" aria-label="打开设置">
51
+ <svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.7 1.7 0 0 0 .3 1.9l.1.1-2.8 2.8-.1-.1a1.7 1.7 0 0 0-1.9-.3 1.7 1.7 0 0 0-1 1.6v.2h-4V21a1.7 1.7 0 0 0-1-1.6 1.7 1.7 0 0 0-1.9.3l-.1.1L4.2 17l.1-.1a1.7 1.7 0 0 0 .3-1.9A1.7 1.7 0 0 0 3 14H2.8v-4H3a1.7 1.7 0 0 0 1.6-1 1.7 1.7 0 0 0-.3-1.9L4.2 7 7 4.2l.1.1A1.7 1.7 0 0 0 9 4.6 1.7 1.7 0 0 0 10 3v-.2h4V3a1.7 1.7 0 0 0 1 1.6 1.7 1.7 0 0 0 1.9-.3l.1-.1L19.8 7l-.1.1a1.7 1.7 0 0 0-.3 1.9 1.7 1.7 0 0 0 1.6 1h.2v4H21a1.7 1.7 0 0 0-1.6 1Z"></path></svg>
52
+ </button>
53
+ </div>
54
+ </header>
55
+
56
+ <div id="connection-banner" class="connection-banner" role="status">
57
+ <span class="spinner" aria-hidden="true"></span>
58
+ <span id="connection-message">正在连接本地守护进程…</span>
59
+ </div>
60
+
61
+ <main id="main-workspace" class="workspace-grid">
62
+ <aside id="navigation-panel" class="left-rail panel" aria-label="会话与 Agent">
63
+ <header class="panel-header navigation-header">
64
+ <div class="section-heading">
65
+ <div><span class="eyebrow">CONTEXT</span><h2>会话</h2></div>
66
+ <span id="session-count" class="count-pill">0</span>
67
+ </div>
68
+ <p>主会话与有界子任务共享同一上下文视图。</p>
69
+ </header>
70
+ <section class="sessions-section">
71
+ <nav id="session-list" class="session-list" aria-label="会话列表"></nav>
72
+ </section>
73
+
74
+ <div class="navigation-actions">
75
+ <button id="agent-compose-toggle" class="secondary-button wide-button" type="button" aria-controls="agent-compose" aria-expanded="false">
76
+ <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 5v14M5 12h14"></path></svg>
77
+ 新建子 Agent
78
+ </button>
79
+ <section id="agent-compose" class="inline-editor" hidden>
80
+ <div class="inline-editor-heading">
81
+ <div><span class="eyebrow">DELEGATE</span><h3>委派一个有界任务</h3></div>
82
+ <button id="agent-compose-close" class="quiet-icon-button" type="button" aria-label="关闭新建子 Agent">×</button>
83
+ </div>
84
+ <form id="spawn-form" class="compact-form" autocomplete="off">
85
+ <label for="spawn-objective">任务目标</label>
86
+ <textarea id="spawn-objective" name="objective" rows="4" maxlength="16384" placeholder="例如:检查测试失败的根因…"></textarea>
87
+ <button class="primary-button" type="submit">启动任务</button>
88
+ </form>
89
+ </section>
90
+ <div id="child-controls" class="child-controls" hidden>
91
+ <button id="join-agent-button" class="ghost-button" type="button">等待完成</button>
92
+ <button id="cancel-agent-button" class="danger-ghost-button" type="button">取消 Agent</button>
93
+ </div>
94
+ <button id="resource-shortcut" class="ghost-button wide-button" type="button">资源与信任</button>
95
+ <footer class="rail-footer">
96
+ <span id="version-line">pSpore — · Pi —</span>
97
+ <span id="runtime-line">Electron — · Node —</span>
98
+ </footer>
99
+ </div>
100
+ </aside>
101
+
102
+ <section class="conversation panel" aria-label="Conversation">
103
+ <header class="conversation-header">
104
+ <div>
105
+ <span class="eyebrow">ACTIVE SESSION</span>
106
+ <h2 id="session-title">main</h2>
107
+ </div>
108
+ <div class="session-health">
109
+ <span id="session-status" class="status-chip idle">IDLE</span>
110
+ <span id="model-name" class="muted">未配置模型</span>
111
+ </div>
112
+ </header>
113
+
114
+ <div id="transcript" class="transcript" tabindex="0" aria-live="polite"></div>
115
+
116
+ <div class="composer-wrap">
117
+ <div id="notice-line" class="notice-line" role="status">正在启动…</div>
118
+ <form id="composer-form" class="composer" autocomplete="off">
119
+ <textarea id="composer-input" name="message" rows="3" maxlength="65536" placeholder="向 main 发送消息…" aria-label="消息"></textarea>
120
+ <div class="composer-toolbar">
121
+ <label class="mode-select"><span>发送方式</span>
122
+ <select id="composer-mode" name="mode">
123
+ <option value="prompt">Prompt</option>
124
+ <option value="steer">Steer</option>
125
+ <option value="follow_up">Follow-up</option>
126
+ </select>
127
+ </label>
128
+ <div class="composer-actions">
129
+ <button id="compact-button" class="ghost-button" type="button">压缩上下文</button>
130
+ <button id="abort-button" class="danger-ghost-button" type="button">中止</button>
131
+ <button id="send-button" class="primary-button" type="submit">发送 <kbd>Ctrl ↵</kbd></button>
132
+ </div>
133
+ </div>
134
+ </form>
135
+ </div>
136
+ </section>
137
+
138
+ <aside id="inspector-panel" class="right-rail panel" aria-label="上下文检查器">
139
+ <header class="inspector-header">
140
+ <div><span class="eyebrow">WORKSPACE</span><h2>检查器</h2></div>
141
+ <button id="inspector-close" class="quiet-icon-button" type="button" aria-label="关闭检查器">×</button>
142
+ </header>
143
+ <nav class="inspector-tabs" role="tablist" aria-label="检查器分类">
144
+ <button id="tab-activity" class="inspector-tab selected" type="button" role="tab" aria-selected="true" aria-controls="panel-activity" data-inspector-tab="activity">活动</button>
145
+ <button id="tab-automation" class="inspector-tab" type="button" role="tab" aria-selected="false" aria-controls="panel-automation" data-inspector-tab="automation">自动化</button>
146
+ <button id="tab-integrations" class="inspector-tab" type="button" role="tab" aria-selected="false" aria-controls="panel-integrations" data-inspector-tab="integrations">集成</button>
147
+ <button id="tab-resources" class="inspector-tab" type="button" role="tab" aria-selected="false" aria-controls="panel-resources" data-inspector-tab="resources">资源</button>
148
+ </nav>
149
+ <div class="inspector-content">
150
+ <section id="panel-activity" class="inspector-view" role="tabpanel" aria-labelledby="tab-activity" data-inspector-panel="activity">
151
+ <div class="section-heading">
152
+ <div><span class="eyebrow">LIVE TRACE</span><h2>最近活动</h2></div>
153
+ <span id="activity-count" class="count-pill">0</span>
154
+ </div>
155
+ <div id="activity-list" class="activity-list"></div>
156
+ <div class="subsection-heading"><span>最近通知</span></div>
157
+ <div id="notification-list" class="dense-list"></div>
158
+ </section>
159
+
160
+ <section id="panel-automation" class="inspector-view" role="tabpanel" aria-labelledby="tab-automation" data-inspector-panel="automation" hidden>
161
+ <div class="section-heading"><div><span class="eyebrow">AUTOMATION</span><h2>计划与运行</h2></div></div>
162
+ <div class="subsection-heading"><span>计划任务</span></div>
163
+ <div id="job-list" class="dense-list"></div>
164
+ <div class="subsection-heading"><span>运行记录</span></div>
165
+ <div id="run-list" class="dense-list"></div>
166
+ </section>
167
+
168
+ <section id="panel-integrations" class="inspector-view" role="tabpanel" aria-labelledby="tab-integrations" data-inspector-panel="integrations" hidden>
169
+ <div class="section-heading"><div><span class="eyebrow">EXTENSIONS</span><h2>集成状态</h2></div></div>
170
+ <div id="integration-list" class="dense-list"></div>
171
+ </section>
172
+
173
+ <section id="panel-resources" class="inspector-view" role="tabpanel" aria-labelledby="tab-resources" data-inspector-panel="resources" hidden>
174
+ <div class="section-heading"><div><span class="eyebrow">TRUST GATE</span><h2>资源与信任</h2></div></div>
175
+ <p class="section-description">只检查 <code>workspace/staging</code> 下的单层资源,安装时锁定精确摘要。</p>
176
+ <form id="inspect-form" class="compact-form inline-form" autocomplete="off">
177
+ <label for="staging-name">暂存资源名称</label>
178
+ <div>
179
+ <input id="staging-name" name="stagingName" maxlength="128" pattern="[A-Za-z0-9][A-Za-z0-9._-]*" placeholder="例如:review-helper" spellcheck="false" />
180
+ <button class="secondary-button" type="submit">检查</button>
181
+ </div>
182
+ </form>
183
+ <div id="inspection-result" class="inspection-result" hidden></div>
184
+ </section>
185
+ </div>
186
+ </aside>
187
+ </main>
188
+ </div>
189
+
190
+ <div id="settings-overlay" class="settings-overlay" hidden>
191
+ <section class="settings-dialog" role="dialog" aria-modal="true" aria-labelledby="settings-title" aria-describedby="settings-description">
192
+ <header class="settings-header">
193
+ <div>
194
+ <span class="eyebrow">PREFERENCES</span>
195
+ <h2 id="settings-title">模型设置</h2>
196
+ <p id="settings-description">配置本地 Daemon 使用的模型、接口与凭据。</p>
197
+ </div>
198
+ <button id="settings-close" class="quiet-icon-button" type="button" aria-label="关闭设置">×</button>
199
+ </header>
200
+ <form id="settings-form" class="settings-form" autocomplete="off">
201
+ <section class="settings-section">
202
+ <div class="settings-section-title"><span>01</span><div><h3>模型</h3><p>选择当前主会话使用的 provider 与 model。</p></div></div>
203
+ <div class="field-grid two-columns">
204
+ <label><span>Provider</span>
205
+ <select id="settings-provider" name="provider">
206
+ <option value="deepseek">DeepSeek</option>
207
+ <option value="openai">OpenAI</option>
208
+ <option value="custom-openai">自定义 OpenAI</option>
209
+ </select>
210
+ </label>
211
+ <label><span>Model</span><input id="settings-model" name="model" maxlength="128" spellcheck="false" required /></label>
212
+ </div>
213
+ <p id="settings-provider-help" class="settings-field-note">使用 DeepSeek 内置模型目录与默认接口。</p>
214
+ </section>
215
+
216
+ <section class="settings-section">
217
+ <div class="settings-section-title"><span>02</span><div><h3>接口</h3><p>Base URL 留空时使用 provider 默认地址。</p></div></div>
218
+ <label><span>Base URL</span><input id="settings-base-url" name="baseUrl" type="url" maxlength="2048" placeholder="输入完整 API 服务地址" spellcheck="false" /></label>
219
+ <div class="field-grid two-columns">
220
+ <label><span>API 兼容类型</span>
221
+ <select id="settings-api" name="api">
222
+ <option value="provider-default">Provider 默认</option>
223
+ <option value="openai-completions">OpenAI Chat Completions</option>
224
+ <option value="openai-responses">OpenAI Responses</option>
225
+ </select>
226
+ </label>
227
+ <label><span>Thinking</span>
228
+ <select id="settings-thinking" name="thinking">
229
+ <option value="off">Off</option>
230
+ <option value="minimal">Minimal</option>
231
+ <option value="low">Low</option>
232
+ <option value="medium">Medium</option>
233
+ <option value="high">High</option>
234
+ <option value="xhigh">XHigh</option>
235
+ <option value="max">Max</option>
236
+ </select>
237
+ </label>
238
+ </div>
239
+ </section>
240
+
241
+ <section class="settings-section">
242
+ <div class="settings-section-title"><span>03</span><div><h3>凭据</h3><p>Key 只保存到当前用户私有目录,不进入聊天、日志或仓库。</p></div></div>
243
+ <label><span>API Key</span>
244
+ <div class="secret-input">
245
+ <input id="settings-api-key" name="apiKey" type="password" maxlength="16384" placeholder="未配置" autocomplete="new-password" spellcheck="false" />
246
+ <button id="settings-key-reveal" class="quiet-text-button" type="button">显示</button>
247
+ </div>
248
+ </label>
249
+ <label class="checkbox-field destructive">
250
+ <input id="settings-clear-key" name="clearApiKey" type="checkbox" />
251
+ <span><b>清除桌面设置保存的 Key</b><small>不会删除其他 provider 的凭据。</small></span>
252
+ </label>
253
+ </section>
254
+
255
+ <footer class="settings-footer">
256
+ <p id="settings-status" role="status">读取设置中…</p>
257
+ <div>
258
+ <button id="settings-cancel" class="ghost-button" type="button">取消</button>
259
+ <button id="settings-save" class="primary-button" type="submit">保存并应用</button>
260
+ </div>
261
+ </footer>
262
+ </form>
263
+ </section>
264
+ </div>
265
+
266
+ <div id="approval-overlay" class="approval-overlay" hidden>
267
+ <section class="approval-dialog" role="dialog" aria-modal="true" aria-labelledby="approval-title" aria-describedby="approval-summary">
268
+ <div class="approval-icon" aria-hidden="true">!</div>
269
+ <span class="eyebrow warning">PERMISSION REQUIRED</span>
270
+ <h2 id="approval-title">需要确认操作</h2>
271
+ <p id="approval-summary"></p>
272
+ <dl class="approval-details">
273
+ <div><dt>能力</dt><dd id="approval-capability"></dd></div>
274
+ <div><dt>目标</dt><dd id="approval-target"></dd></div>
275
+ <div><dt>原因</dt><dd id="approval-reasons"></dd></div>
276
+ </dl>
277
+ <pre id="approval-command" class="approval-command" hidden></pre>
278
+ <div id="approval-actions" class="approval-actions"></div>
279
+ </section>
280
+ </div>
281
+
282
+ <script type="module" src="./renderer.js"></script>
283
+ </body>
284
+ </html>
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/desktop/renderer/renderer.ts"],"names":[],"mappings":""}