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 @@
1
+ {"version":3,"file":"daemon-lock.js","sourceRoot":"","sources":["../../src/storage/daemon-lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type PsporeConfig } from "../config/config.js";
2
+ export interface PsporePaths {
3
+ home: string;
4
+ config: string;
5
+ workspace: string;
6
+ state: string;
7
+ sessions: string;
8
+ runs: string;
9
+ approvals: string;
10
+ events: string;
11
+ audit: string;
12
+ resourceTrust: string;
13
+ artifacts: string;
14
+ plugins: string;
15
+ credentials: string;
16
+ cache: string;
17
+ run: string;
18
+ agentDir: string;
19
+ socket: string;
20
+ endpoint: string;
21
+ lock: string;
22
+ }
23
+ export declare function psporePaths(home: string, workspace?: string): PsporePaths;
24
+ export declare function initializePsporeHome(home: string): Promise<{
25
+ paths: PsporePaths;
26
+ created: string[];
27
+ }>;
28
+ export declare function loadConfig(home: string): Promise<PsporeConfig>;
29
+ //# sourceMappingURL=home.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../src/storage/home.ts"],"names":[],"mappings":"AAGA,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGpF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAWD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,CAyBzE;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqD3G;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAIpE"}
@@ -0,0 +1,108 @@
1
+ import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { defaultConfig, parseConfig } from "../config/config.js";
4
+ import { atomicWriteJson } from "./atomic.js";
5
+ const WORKSPACE_TEMPLATES = {
6
+ "AGENTS.md": "# Workspace Rules\n\nAdd workspace-specific operating rules here.\n",
7
+ "SOUL.md": "# Agent Style\n\nBe clear, direct, and careful with side effects.\n",
8
+ "USER.md": "# User Preferences\n\nRecord explicit, durable user preferences here.\n",
9
+ "MEMORY.md": "# Curated Memory\n\nOnly high-value, sourced long-term memory belongs here.\n",
10
+ "TOOLS.md": "# Local Tools\n\nDocument trusted local tools and environment conventions here.\n",
11
+ "BOOT.md": "# Startup Tasks\n\n",
12
+ };
13
+ export function psporePaths(home, workspace) {
14
+ const resolvedWorkspace = workspace ?? join(home, "workspace");
15
+ const state = join(home, "state");
16
+ const run = join(home, "run");
17
+ return {
18
+ home,
19
+ config: join(home, "config.json"),
20
+ workspace: resolvedWorkspace,
21
+ state,
22
+ sessions: join(state, "sessions"),
23
+ runs: join(state, "runs"),
24
+ approvals: join(state, "approvals"),
25
+ events: join(state, "events"),
26
+ audit: join(state, "audit"),
27
+ resourceTrust: join(state, "resource-trust.json"),
28
+ artifacts: join(home, "artifacts"),
29
+ plugins: join(home, "plugins"),
30
+ credentials: join(home, "credentials"),
31
+ cache: join(home, "cache", "search"),
32
+ run,
33
+ agentDir: join(state, "pi"),
34
+ socket: join(run, "daemon.sock"),
35
+ endpoint: join(run, "endpoint.json"),
36
+ lock: join(run, "daemon.lock"),
37
+ };
38
+ }
39
+ export async function initializePsporeHome(home) {
40
+ const initialPaths = psporePaths(home);
41
+ const created = [];
42
+ await mkdir(home, { recursive: true, mode: 0o700 });
43
+ await chmod(home, 0o700);
44
+ let config;
45
+ try {
46
+ config = await loadConfig(home);
47
+ }
48
+ catch (error) {
49
+ if (!isMissingFile(error))
50
+ throw error;
51
+ config = defaultConfig(home);
52
+ await atomicWriteJson(initialPaths.config, config, 0o600);
53
+ created.push(initialPaths.config);
54
+ }
55
+ const paths = psporePaths(home, config.runtime.workspace);
56
+ const directories = [
57
+ paths.workspace,
58
+ join(paths.workspace, "memory"),
59
+ join(paths.workspace, "memory", "topics"),
60
+ join(paths.workspace, "jobs"),
61
+ join(paths.workspace, "skills"),
62
+ join(paths.workspace, "staging"),
63
+ join(paths.workspace, "trash"),
64
+ paths.state,
65
+ paths.sessions,
66
+ paths.runs,
67
+ paths.approvals,
68
+ paths.events,
69
+ paths.audit,
70
+ paths.artifacts,
71
+ paths.plugins,
72
+ paths.credentials,
73
+ paths.cache,
74
+ paths.run,
75
+ paths.agentDir,
76
+ ];
77
+ for (const directory of directories) {
78
+ await mkdir(directory, { recursive: true, mode: 0o700 });
79
+ await chmod(directory, 0o700);
80
+ }
81
+ for (const [name, content] of Object.entries(WORKSPACE_TEMPLATES)) {
82
+ const path = join(paths.workspace, name);
83
+ try {
84
+ await writeFile(path, content, { encoding: "utf8", mode: 0o600, flag: "wx" });
85
+ created.push(path);
86
+ }
87
+ catch (error) {
88
+ if (!isAlreadyExists(error))
89
+ throw error;
90
+ }
91
+ }
92
+ return { paths, created };
93
+ }
94
+ export async function loadConfig(home) {
95
+ const path = psporePaths(home).config;
96
+ const value = JSON.parse(await readFile(path, "utf8"));
97
+ return parseConfig(value, home);
98
+ }
99
+ function isMissingFile(error) {
100
+ return isNodeError(error) && error.code === "ENOENT";
101
+ }
102
+ function isAlreadyExists(error) {
103
+ return isNodeError(error) && error.code === "EEXIST";
104
+ }
105
+ function isNodeError(error) {
106
+ return error instanceof Error && "code" in error;
107
+ }
108
+ //# sourceMappingURL=home.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home.js","sourceRoot":"","sources":["../../src/storage/home.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAqB,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAwB9C,MAAM,mBAAmB,GAAqC;IAC5D,WAAW,EAAE,qEAAqE;IAClF,SAAS,EAAE,qEAAqE;IAChF,SAAS,EAAE,yEAAyE;IACpF,WAAW,EAAE,+EAA+E;IAC5F,UAAU,EAAE,mFAAmF;IAC/F,SAAS,EAAE,qBAAqB;CACjC,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,SAAkB;IAC1D,MAAM,iBAAiB,GAAG,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QACjC,SAAS,EAAE,iBAAiB;QAC5B,KAAK;QACL,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC;QACjC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC;QACnC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;QAC3B,aAAa,EAAE,IAAI,CAAC,KAAK,EAAE,qBAAqB,CAAC;QACjD,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;QAClC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAC9B,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QACtC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;QACpC,GAAG;QACH,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QAC3B,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC;QAChC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC;QACpC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY;IACrD,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEzB,IAAI,MAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QACvC,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG;QAClB,KAAK,CAAC,SAAS;QACf,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QAC9B,KAAK,CAAC,KAAK;QACX,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,SAAS;QACf,KAAK,CAAC,MAAM;QACZ,KAAK,CAAC,KAAK;QACX,KAAK,CAAC,SAAS;QACf,KAAK,CAAC,OAAO;QACb,KAAK,CAAC,WAAW;QACjB,KAAK,CAAC,KAAK;QACX,KAAK,CAAC,GAAG;QACT,KAAK,CAAC,QAAQ;KACf,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;QACpC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChE,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;AACnD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function readJsonLinesRecovering(path: string, recoveryDirectory: string, idFactory?: () => string): Promise<unknown[]>;
2
+ //# sourceMappingURL=jsonl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../src/storage/jsonl.ts"],"names":[],"mappings":"AAIA,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,MAAM,EACzB,SAAS,GAAE,MAAM,MAAmB,GACnC,OAAO,CAAC,OAAO,EAAE,CAAC,CAkCpB"}
@@ -0,0 +1,45 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { copyFile, mkdir, open, readFile } from "node:fs/promises";
3
+ import { basename, join } from "node:path";
4
+ export async function readJsonLinesRecovering(path, recoveryDirectory, idFactory = randomUUID) {
5
+ const content = await readFile(path);
6
+ const lines = [];
7
+ let start = 0;
8
+ for (let index = 0; index < content.byteLength; index++) {
9
+ if (content[index] !== 0x0a)
10
+ continue;
11
+ lines.push({ start, end: index, complete: true });
12
+ start = index + 1;
13
+ }
14
+ if (start < content.byteLength)
15
+ lines.push({ start, end: content.byteLength, complete: false });
16
+ const nonEmpty = lines.filter((line) => content.subarray(line.start, line.end).toString("utf8").trim());
17
+ const values = [];
18
+ for (let index = 0; index < nonEmpty.length; index++) {
19
+ const line = nonEmpty[index];
20
+ if (!line)
21
+ continue;
22
+ const text = content.subarray(line.start, line.end).toString("utf8").trim();
23
+ try {
24
+ values.push(JSON.parse(text));
25
+ }
26
+ catch (error) {
27
+ if (index !== nonEmpty.length - 1)
28
+ throw new Error(`Malformed JSONL middle record in ${path}`, { cause: error });
29
+ await mkdir(recoveryDirectory, { recursive: true, mode: 0o700 });
30
+ const recoveryPath = join(recoveryDirectory, `${basename(path)}.${idFactory()}.broken`);
31
+ await copyFile(path, recoveryPath);
32
+ const file = await open(path, "r+");
33
+ try {
34
+ await file.truncate(line.start);
35
+ await file.sync();
36
+ }
37
+ finally {
38
+ await file.close();
39
+ }
40
+ break;
41
+ }
42
+ }
43
+ return values;
44
+ }
45
+ //# sourceMappingURL=jsonl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../src/storage/jsonl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type ToolDefinition } from "@earendil-works/pi-coding-agent";
2
+ import type { SearchService } from "../memory/search-service.js";
3
+ import { ShellService } from "../shell/shell-service.js";
4
+ export interface CoreToolOptions {
5
+ workspaceRoot: string;
6
+ shell: ShellService;
7
+ defaultShellTimeoutMs: number;
8
+ maxShellOutputBytes: number;
9
+ maxReadBytes?: number;
10
+ maxSearchOutputBytes?: number;
11
+ retrieval?: Pick<SearchService, "search">;
12
+ defaultSearchMaxResults?: number;
13
+ defaultSearchMaxReturnedTokens?: number;
14
+ }
15
+ export declare function createCoreTools(options: CoreToolOptions): readonly ToolDefinition[];
16
+ //# sourceMappingURL=core-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-tools.d.ts","sourceRoot":"","sources":["../../src/tools/core-tools.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGlF,OAAO,KAAK,EAA0B,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC1C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC;AAuED,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,cAAc,EAAE,CA+KnF"}
@@ -0,0 +1,283 @@
1
+ import { createHash } from "node:crypto";
2
+ import { spawn } from "node:child_process";
3
+ import { readFile, realpath, stat } from "node:fs/promises";
4
+ import { isAbsolute, resolve } from "node:path";
5
+ import { defineTool } from "@earendil-works/pi-coding-agent";
6
+ import { Type } from "typebox";
7
+ import { ShellService } from "../shell/shell-service.js";
8
+ import { atomicWriteFile } from "../storage/atomic.js";
9
+ const readParameters = Type.Object({
10
+ path: Type.String({ minLength: 1 }),
11
+ offset: Type.Optional(Type.Integer({ minimum: 1 })),
12
+ limit: Type.Optional(Type.Integer({ minimum: 1, maximum: 2_000 })),
13
+ expectedSha256: Type.Optional(Type.String({ minLength: 64, maxLength: 64 })),
14
+ }, { additionalProperties: false });
15
+ const editParameters = Type.Object({
16
+ path: Type.String({ minLength: 1 }),
17
+ expectedSha256: Type.String({ minLength: 7, maxLength: 64 }),
18
+ content: Type.String({ maxLength: 1_048_576 }),
19
+ }, { additionalProperties: false });
20
+ const searchParameters = Type.Object({
21
+ query: Type.String({ minLength: 1, maxLength: 4_096 }),
22
+ path: Type.Optional(Type.String({ minLength: 1 })),
23
+ glob: Type.Optional(Type.String({ minLength: 1, maxLength: 256 })),
24
+ maxResults: Type.Optional(Type.Integer({ minimum: 1, maximum: 500 })),
25
+ mode: Type.Optional(Type.Union([Type.Literal("auto"), Type.Literal("exact"), Type.Literal("bm25")])),
26
+ scopes: Type.Optional(Type.Array(Type.Union([
27
+ Type.Literal("memory"),
28
+ Type.Literal("sessions"),
29
+ Type.Literal("workspace"),
30
+ Type.Literal("project"),
31
+ ]), { minItems: 1, maxItems: 4 })),
32
+ }, { additionalProperties: false });
33
+ const shellParameters = Type.Object({
34
+ command: Type.String({ minLength: 1, maxLength: 131_072 }),
35
+ cwd: Type.Optional(Type.String({ minLength: 1 })),
36
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 1, maximum: 3_600_000 })),
37
+ }, { additionalProperties: false });
38
+ export function createCoreTools(options) {
39
+ const maxReadBytes = options.maxReadBytes ?? 1_048_576;
40
+ const maxSearchOutputBytes = options.maxSearchOutputBytes ?? 256 * 1024;
41
+ const read = defineTool({
42
+ name: "read",
43
+ label: "Read",
44
+ description: "Read a UTF-8 text file with stable line numbers. Returns a SHA-256 hash for safe edits.",
45
+ promptSnippet: "Read UTF-8 files and obtain hashes for safe edits",
46
+ promptGuidelines: ["Read a file before editing it and pass its SHA-256 hash to edit."],
47
+ parameters: readParameters,
48
+ executionMode: "parallel",
49
+ execute: async (_toolCallId, params, signal) => {
50
+ throwIfAborted(signal);
51
+ const path = absolutePath(params.path, options.workspaceRoot);
52
+ const content = await readFile(path);
53
+ if (content.byteLength > maxReadBytes) {
54
+ throw new Error(`File exceeds read limit of ${maxReadBytes} bytes: ${path}`);
55
+ }
56
+ throwIfAborted(signal);
57
+ const text = content.toString("utf8");
58
+ const lines = text.split("\n");
59
+ const offset = params.offset ?? 1;
60
+ const limit = params.limit ?? 400;
61
+ const selected = lines.slice(offset - 1, offset - 1 + limit);
62
+ const numbered = selected.map((line, index) => `${offset + index}: ${line}`).join("\n");
63
+ const sha256 = hash(content);
64
+ if (params.expectedSha256 !== undefined && params.expectedSha256 !== sha256) {
65
+ throw new Error(`Read conflict for ${path}: expected ${params.expectedSha256}, current ${sha256}`);
66
+ }
67
+ return {
68
+ content: [
69
+ {
70
+ type: "text",
71
+ text: `path: ${path}\nsha256: ${sha256}\nlines: ${lines.length}\n\n${numbered}`,
72
+ },
73
+ ],
74
+ details: { path, sha256, bytes: content.byteLength, offset, returnedLines: selected.length },
75
+ };
76
+ },
77
+ });
78
+ const edit = defineTool({
79
+ name: "edit",
80
+ label: "Edit",
81
+ description: 'Atomically replace a UTF-8 file after checking expectedSha256. Use expectedSha256="missing" only to create a new file.',
82
+ promptSnippet: "Atomically replace files with an expected hash",
83
+ promptGuidelines: ["Never guess expectedSha256; obtain it from read. Use missing only for new files."],
84
+ parameters: editParameters,
85
+ executionMode: "sequential",
86
+ execute: async (_toolCallId, params, signal) => {
87
+ throwIfAborted(signal);
88
+ const path = absolutePath(params.path, options.workspaceRoot);
89
+ const current = await currentFile(path);
90
+ if (params.expectedSha256 !== current.sha256) {
91
+ throw new Error(`Edit conflict for ${path}: expected ${params.expectedSha256}, current ${current.sha256}. Read the file again.`);
92
+ }
93
+ const content = Buffer.from(params.content, "utf8");
94
+ throwIfAborted(signal);
95
+ await atomicWriteFile(path, content, current.mode);
96
+ const sha256 = hash(content);
97
+ return {
98
+ content: [{ type: "text", text: `Updated ${path} (${content.byteLength} bytes, sha256 ${sha256})` }],
99
+ details: { path, previousSha256: current.sha256, sha256, bytes: content.byteLength },
100
+ };
101
+ },
102
+ });
103
+ const search = defineTool({
104
+ name: "search",
105
+ label: "Search",
106
+ description: "Search for exact text with ripgrep and return file, line, and matching content.",
107
+ promptSnippet: "Search exact text in workspace files",
108
+ parameters: searchParameters,
109
+ executionMode: "parallel",
110
+ execute: async (_toolCallId, params, signal) => {
111
+ if (options.retrieval) {
112
+ const hits = await options.retrieval.search({
113
+ query: params.query,
114
+ ...(params.scopes === undefined ? {} : { scopes: params.scopes }),
115
+ ...(params.mode === undefined ? {} : { mode: params.mode }),
116
+ ...(params.path === undefined ? {} : { pathPrefix: params.path }),
117
+ ...(params.glob === undefined ? {} : { glob: params.glob }),
118
+ maxResults: params.maxResults ?? options.defaultSearchMaxResults ?? 8,
119
+ maxReturnedTokens: options.defaultSearchMaxReturnedTokens ?? 3_000,
120
+ }, signal);
121
+ return {
122
+ content: [{ type: "text", text: hits.length > 0 ? JSON.stringify(hits, null, 2) : "No matches." }],
123
+ details: { hits },
124
+ };
125
+ }
126
+ const path = absolutePath(params.path ?? options.workspaceRoot, options.workspaceRoot);
127
+ const result = await runRipgrep({
128
+ query: params.query,
129
+ path,
130
+ ...(params.glob === undefined ? {} : { glob: params.glob }),
131
+ maxResults: params.maxResults ?? 100,
132
+ maxOutputBytes: maxSearchOutputBytes,
133
+ }, signal);
134
+ return {
135
+ content: [
136
+ {
137
+ type: "text",
138
+ text: result.output || (result.matchCount === 0 ? "No exact matches." : "Matches contained no text output."),
139
+ },
140
+ ],
141
+ details: {
142
+ fallback: {
143
+ matchCount: result.matchCount,
144
+ capturedBytes: result.capturedBytes,
145
+ truncated: result.truncated,
146
+ },
147
+ },
148
+ };
149
+ },
150
+ });
151
+ const shell = defineTool({
152
+ name: "shell",
153
+ label: "Shell",
154
+ description: "Run a command in the user's resolved login shell. Full output is stored as a private artifact.",
155
+ promptSnippet: "Run commands in the user's login shell",
156
+ promptGuidelines: ["Use shell only when read, edit, or search cannot perform the task more safely."],
157
+ parameters: shellParameters,
158
+ executionMode: "sequential",
159
+ execute: async (_toolCallId, params, signal) => {
160
+ throwIfAborted(signal);
161
+ const handle = await options.shell.start({
162
+ command: params.command,
163
+ cwd: absolutePath(params.cwd ?? options.workspaceRoot, options.workspaceRoot),
164
+ mode: "pipe",
165
+ timeoutMs: params.timeoutMs ?? options.defaultShellTimeoutMs,
166
+ maxOutputBytes: options.maxShellOutputBytes,
167
+ });
168
+ const abort = () => handle.signal("SIGTERM");
169
+ signal?.addEventListener("abort", abort, { once: true });
170
+ try {
171
+ const result = await handle.completion;
172
+ const summary = {
173
+ exitCode: result.exitCode,
174
+ signal: result.signal,
175
+ timedOut: result.timedOut,
176
+ aborted: result.aborted,
177
+ outputLimitExceeded: result.outputLimitExceeded,
178
+ stdout: result.stdout,
179
+ stderr: result.stderr,
180
+ capturedBytes: result.capturedBytes,
181
+ artifactPath: result.artifactPath,
182
+ artifactSha256: result.artifactSha256,
183
+ };
184
+ return {
185
+ content: [{ type: "text", text: JSON.stringify(summary, null, 2) }],
186
+ details: {
187
+ processId: result.processId,
188
+ artifactPath: result.artifactPath,
189
+ artifactSha256: result.artifactSha256,
190
+ capturedBytes: result.capturedBytes,
191
+ },
192
+ };
193
+ }
194
+ finally {
195
+ signal?.removeEventListener("abort", abort);
196
+ }
197
+ },
198
+ });
199
+ return [read, edit, search, shell];
200
+ }
201
+ async function runRipgrep(options, signal) {
202
+ throwIfAborted(signal);
203
+ const args = ["--fixed-strings", "--line-number", "--no-heading", "--color", "never", "--max-count", String(options.maxResults)];
204
+ if (options.glob)
205
+ args.push("--glob", options.glob);
206
+ args.push("--", options.query, options.path);
207
+ const child = spawn("rg", args, { stdio: ["ignore", "pipe", "pipe"] });
208
+ const chunks = [];
209
+ let capturedBytes = 0;
210
+ let truncated = false;
211
+ const capture = (chunk) => {
212
+ const buffer = Buffer.from(chunk);
213
+ const remaining = options.maxOutputBytes - capturedBytes;
214
+ if (remaining <= 0) {
215
+ truncated = true;
216
+ child.kill("SIGTERM");
217
+ return;
218
+ }
219
+ const accepted = buffer.subarray(0, remaining);
220
+ chunks.push(accepted);
221
+ capturedBytes += accepted.byteLength;
222
+ if (accepted.byteLength < buffer.byteLength) {
223
+ truncated = true;
224
+ child.kill("SIGTERM");
225
+ }
226
+ };
227
+ child.stdout.on("data", capture);
228
+ child.stderr.on("data", capture);
229
+ const abort = () => child.kill("SIGTERM");
230
+ signal?.addEventListener("abort", abort, { once: true });
231
+ try {
232
+ const { code, error } = await new Promise((resolveResult) => {
233
+ let spawnError;
234
+ child.once("error", (error) => {
235
+ spawnError = error;
236
+ });
237
+ child.once("close", (code) => resolveResult({ code, ...(spawnError ? { error: spawnError } : {}) }));
238
+ });
239
+ if (error)
240
+ throw error;
241
+ if (signal?.aborted)
242
+ throw signal.reason instanceof Error ? signal.reason : new Error("Search aborted");
243
+ if (code !== 0 && code !== 1 && !truncated)
244
+ throw new Error(`ripgrep exited with code ${String(code)}`);
245
+ const output = Buffer.concat(chunks).toString("utf8").trimEnd();
246
+ return {
247
+ output: `${output}${truncated ? "\n[pSpore: search output truncated]" : ""}`.trimStart(),
248
+ matchCount: output ? output.split("\n").length : 0,
249
+ capturedBytes,
250
+ truncated,
251
+ };
252
+ }
253
+ finally {
254
+ signal?.removeEventListener("abort", abort);
255
+ }
256
+ }
257
+ async function currentFile(path) {
258
+ try {
259
+ const content = await readFile(path);
260
+ return { sha256: hash(content), mode: (await stat(path)).mode & 0o777 };
261
+ }
262
+ catch (error) {
263
+ if (isNodeError(error) && error.code === "ENOENT") {
264
+ await realpath(resolve(path, ".."));
265
+ return { sha256: "missing", mode: 0o600 };
266
+ }
267
+ throw error;
268
+ }
269
+ }
270
+ function absolutePath(path, cwd) {
271
+ return resolve(isAbsolute(path) ? path : resolve(cwd, path));
272
+ }
273
+ function hash(content) {
274
+ return createHash("sha256").update(content).digest("hex");
275
+ }
276
+ function throwIfAborted(signal) {
277
+ if (signal?.aborted)
278
+ throw signal.reason instanceof Error ? signal.reason : new Error("Operation aborted");
279
+ }
280
+ function isNodeError(error) {
281
+ return error instanceof Error && "code" in error;
282
+ }
283
+ //# sourceMappingURL=core-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-tools.js","sourceRoot":"","sources":["../../src/tools/core-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { KernelState } from "../../kernel/state.js";
2
+ import type { AgentRecord } from "../../agents/types.js";
3
+ export interface SessionListItem {
4
+ id: string;
5
+ sessionId: string;
6
+ title: string;
7
+ status: string;
8
+ depth: number;
9
+ selected: boolean;
10
+ active: boolean;
11
+ kind: "main" | "agent";
12
+ }
13
+ export interface KernelMetrics {
14
+ sessions: number;
15
+ runningSessions: number;
16
+ pendingApprovals: number;
17
+ runs: number;
18
+ activeRuns: number;
19
+ readyMcpServers: number;
20
+ mcpServers: number;
21
+ activeResources: number;
22
+ resources: number;
23
+ }
24
+ export type ComposerMode = "prompt" | "steer" | "follow_up";
25
+ export type ConversationIntent = {
26
+ target: "main";
27
+ sessionId: "main";
28
+ text: string;
29
+ mode: ComposerMode;
30
+ } | {
31
+ target: "agent";
32
+ agentId: string;
33
+ sessionId: string;
34
+ text: string;
35
+ mode: "next" | "steer" | "follow_up";
36
+ };
37
+ export declare function presentSessions(kernel: KernelState, selectedSessionId: string): SessionListItem[];
38
+ export declare function kernelMetrics(kernel: KernelState): KernelMetrics;
39
+ export declare function selectedAgent(kernel: KernelState, selectedSessionId: string): AgentRecord | undefined;
40
+ export declare function conversationIntent(kernel: KernelState, selectedSessionId: string, text: string, mode: ComposerMode): ConversationIntent;
41
+ export declare function terminalAgentStatus(value: string): boolean;
42
+ export declare function shortId(value: string): string;
43
+ export declare function formatTokens(value: number): string;
44
+ export declare function formatBytes(value: number): string;
45
+ export declare function clockTime(value: string): string;
46
+ //# sourceMappingURL=presentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../../../src/ui/shared/presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;AAC5D,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GACvE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAA;CAAE,CAAC;AAEhH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,GAAG,eAAe,EAAE,CA0BjG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CAgBhE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAErG;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,iBAAiB,EAAE,MAAM,EACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,GACjB,kBAAkB,CAYpB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/C"}