@baoanaz/cviauto-core 0.6.5

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 (206) hide show
  1. package/LICENSE +235 -0
  2. package/dist/channel/api/assert.d.ts +3 -0
  3. package/dist/channel/api/assert.d.ts.map +1 -0
  4. package/dist/channel/api/assert.js +11 -0
  5. package/dist/channel/api/assert.js.map +1 -0
  6. package/dist/channel/api/context.d.ts +21 -0
  7. package/dist/channel/api/context.d.ts.map +1 -0
  8. package/dist/channel/api/context.js +99 -0
  9. package/dist/channel/api/context.js.map +1 -0
  10. package/dist/channel/api/create.d.ts +9 -0
  11. package/dist/channel/api/create.d.ts.map +1 -0
  12. package/dist/channel/api/create.js +104 -0
  13. package/dist/channel/api/create.js.map +1 -0
  14. package/dist/channel/api/inbox.d.ts +51 -0
  15. package/dist/channel/api/inbox.d.ts.map +1 -0
  16. package/dist/channel/api/inbox.js +176 -0
  17. package/dist/channel/api/inbox.js.map +1 -0
  18. package/dist/channel/api/interrupt.d.ts +31 -0
  19. package/dist/channel/api/interrupt.d.ts.map +1 -0
  20. package/dist/channel/api/interrupt.js +98 -0
  21. package/dist/channel/api/interrupt.js.map +1 -0
  22. package/dist/channel/api/post-thread.d.ts +14 -0
  23. package/dist/channel/api/post-thread.d.ts.map +1 -0
  24. package/dist/channel/api/post-thread.js +109 -0
  25. package/dist/channel/api/post-thread.js.map +1 -0
  26. package/dist/channel/api/read.d.ts +17 -0
  27. package/dist/channel/api/read.d.ts.map +1 -0
  28. package/dist/channel/api/read.js +44 -0
  29. package/dist/channel/api/read.js.map +1 -0
  30. package/dist/channel/api/resolve.d.ts +21 -0
  31. package/dist/channel/api/resolve.d.ts.map +1 -0
  32. package/dist/channel/api/resolve.js +28 -0
  33. package/dist/channel/api/resolve.js.map +1 -0
  34. package/dist/channel/api/runtime.d.ts +70 -0
  35. package/dist/channel/api/runtime.d.ts.map +1 -0
  36. package/dist/channel/api/runtime.js +11 -0
  37. package/dist/channel/api/runtime.js.map +1 -0
  38. package/dist/channel/api/send.d.ts +4 -0
  39. package/dist/channel/api/send.d.ts.map +1 -0
  40. package/dist/channel/api/send.js +52 -0
  41. package/dist/channel/api/send.js.map +1 -0
  42. package/dist/channel/api/spawn.d.ts +13 -0
  43. package/dist/channel/api/spawn.d.ts.map +1 -0
  44. package/dist/channel/api/spawn.js +52 -0
  45. package/dist/channel/api/spawn.js.map +1 -0
  46. package/dist/channel/api/title.d.ts +5 -0
  47. package/dist/channel/api/title.d.ts.map +1 -0
  48. package/dist/channel/api/title.js +40 -0
  49. package/dist/channel/api/title.js.map +1 -0
  50. package/dist/channel/api/types.d.ts +65 -0
  51. package/dist/channel/api/types.d.ts.map +1 -0
  52. package/dist/channel/api/types.js +2 -0
  53. package/dist/channel/api/types.js.map +1 -0
  54. package/dist/channel/api/watch-channels.d.ts +40 -0
  55. package/dist/channel/api/watch-channels.d.ts.map +1 -0
  56. package/dist/channel/api/watch-channels.js +143 -0
  57. package/dist/channel/api/watch-channels.js.map +1 -0
  58. package/dist/channel/api/watch.d.ts +11 -0
  59. package/dist/channel/api/watch.d.ts.map +1 -0
  60. package/dist/channel/api/watch.js +17 -0
  61. package/dist/channel/api/watch.js.map +1 -0
  62. package/dist/channel/api/workers.d.ts +69 -0
  63. package/dist/channel/api/workers.d.ts.map +1 -0
  64. package/dist/channel/api/workers.js +143 -0
  65. package/dist/channel/api/workers.js.map +1 -0
  66. package/dist/channel/index.d.ts +38 -0
  67. package/dist/channel/index.d.ts.map +1 -0
  68. package/dist/channel/index.js +23 -0
  69. package/dist/channel/index.js.map +1 -0
  70. package/dist/channel/internal/store/channel-metadata.d.ts +23 -0
  71. package/dist/channel/internal/store/channel-metadata.d.ts.map +1 -0
  72. package/dist/channel/internal/store/channel-metadata.js +94 -0
  73. package/dist/channel/internal/store/channel-metadata.js.map +1 -0
  74. package/dist/channel/internal/store/delivery.d.ts +27 -0
  75. package/dist/channel/internal/store/delivery.d.ts.map +1 -0
  76. package/dist/channel/internal/store/delivery.js +37 -0
  77. package/dist/channel/internal/store/delivery.js.map +1 -0
  78. package/dist/channel/internal/store/events.d.ts +215 -0
  79. package/dist/channel/internal/store/events.d.ts.map +1 -0
  80. package/dist/channel/internal/store/events.js +204 -0
  81. package/dist/channel/internal/store/events.js.map +1 -0
  82. package/dist/channel/internal/store/filter.d.ts +21 -0
  83. package/dist/channel/internal/store/filter.d.ts.map +1 -0
  84. package/dist/channel/internal/store/filter.js +75 -0
  85. package/dist/channel/internal/store/filter.js.map +1 -0
  86. package/dist/channel/internal/store/inbox.d.ts +17 -0
  87. package/dist/channel/internal/store/inbox.d.ts.map +1 -0
  88. package/dist/channel/internal/store/inbox.js +30 -0
  89. package/dist/channel/internal/store/inbox.js.map +1 -0
  90. package/dist/channel/internal/store/lock.d.ts +17 -0
  91. package/dist/channel/internal/store/lock.d.ts.map +1 -0
  92. package/dist/channel/internal/store/lock.js +88 -0
  93. package/dist/channel/internal/store/lock.js.map +1 -0
  94. package/dist/channel/internal/store/paths.d.ts +43 -0
  95. package/dist/channel/internal/store/paths.d.ts.map +1 -0
  96. package/dist/channel/internal/store/paths.js +233 -0
  97. package/dist/channel/internal/store/paths.js.map +1 -0
  98. package/dist/channel/internal/store/schema.d.ts +77 -0
  99. package/dist/channel/internal/store/schema.d.ts.map +1 -0
  100. package/dist/channel/internal/store/schema.js +127 -0
  101. package/dist/channel/internal/store/schema.js.map +1 -0
  102. package/dist/channel/internal/store/seq.d.ts +12 -0
  103. package/dist/channel/internal/store/seq.d.ts.map +1 -0
  104. package/dist/channel/internal/store/seq.js +134 -0
  105. package/dist/channel/internal/store/seq.js.map +1 -0
  106. package/dist/channel/internal/store/thread-state.d.ts +37 -0
  107. package/dist/channel/internal/store/thread-state.d.ts.map +1 -0
  108. package/dist/channel/internal/store/thread-state.js +208 -0
  109. package/dist/channel/internal/store/thread-state.js.map +1 -0
  110. package/dist/channel/internal/store/watch.d.ts +10 -0
  111. package/dist/channel/internal/store/watch.d.ts.map +1 -0
  112. package/dist/channel/internal/store/watch.js +122 -0
  113. package/dist/channel/internal/store/watch.js.map +1 -0
  114. package/dist/channel/internal/store/worker-state.d.ts +56 -0
  115. package/dist/channel/internal/store/worker-state.d.ts.map +1 -0
  116. package/dist/channel/internal/store/worker-state.js +220 -0
  117. package/dist/channel/internal/store/worker-state.js.map +1 -0
  118. package/dist/index.d.ts +3 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +7 -0
  121. package/dist/index.js.map +1 -0
  122. package/dist/mem/adapters/claude.d.ts +22 -0
  123. package/dist/mem/adapters/claude.d.ts.map +1 -0
  124. package/dist/mem/adapters/claude.js +234 -0
  125. package/dist/mem/adapters/claude.js.map +1 -0
  126. package/dist/mem/adapters/codex.d.ts +35 -0
  127. package/dist/mem/adapters/codex.d.ts.map +1 -0
  128. package/dist/mem/adapters/codex.js +222 -0
  129. package/dist/mem/adapters/codex.js.map +1 -0
  130. package/dist/mem/adapters/opencode.d.ts +19 -0
  131. package/dist/mem/adapters/opencode.d.ts.map +1 -0
  132. package/dist/mem/adapters/opencode.js +25 -0
  133. package/dist/mem/adapters/opencode.js.map +1 -0
  134. package/dist/mem/adapters/pi.d.ts +20 -0
  135. package/dist/mem/adapters/pi.d.ts.map +1 -0
  136. package/dist/mem/adapters/pi.js +299 -0
  137. package/dist/mem/adapters/pi.js.map +1 -0
  138. package/dist/mem/context.d.ts +23 -0
  139. package/dist/mem/context.d.ts.map +1 -0
  140. package/dist/mem/context.js +118 -0
  141. package/dist/mem/context.js.map +1 -0
  142. package/dist/mem/dialogue.d.ts +17 -0
  143. package/dist/mem/dialogue.d.ts.map +1 -0
  144. package/dist/mem/dialogue.js +51 -0
  145. package/dist/mem/dialogue.js.map +1 -0
  146. package/dist/mem/filter.d.ts +31 -0
  147. package/dist/mem/filter.d.ts.map +1 -0
  148. package/dist/mem/filter.js +66 -0
  149. package/dist/mem/filter.js.map +1 -0
  150. package/dist/mem/index.d.ts +18 -0
  151. package/dist/mem/index.d.ts.map +1 -0
  152. package/dist/mem/index.js +17 -0
  153. package/dist/mem/index.js.map +1 -0
  154. package/dist/mem/internal/jsonl.d.ts +35 -0
  155. package/dist/mem/internal/jsonl.d.ts.map +1 -0
  156. package/dist/mem/internal/jsonl.js +125 -0
  157. package/dist/mem/internal/jsonl.js.map +1 -0
  158. package/dist/mem/internal/paths.d.ts +25 -0
  159. package/dist/mem/internal/paths.d.ts.map +1 -0
  160. package/dist/mem/internal/paths.js +97 -0
  161. package/dist/mem/internal/paths.js.map +1 -0
  162. package/dist/mem/phase.d.ts +45 -0
  163. package/dist/mem/phase.d.ts.map +1 -0
  164. package/dist/mem/phase.js +220 -0
  165. package/dist/mem/phase.js.map +1 -0
  166. package/dist/mem/projects.d.ts +13 -0
  167. package/dist/mem/projects.d.ts.map +1 -0
  168. package/dist/mem/projects.js +37 -0
  169. package/dist/mem/projects.js.map +1 -0
  170. package/dist/mem/search.d.ts +32 -0
  171. package/dist/mem/search.d.ts.map +1 -0
  172. package/dist/mem/search.js +125 -0
  173. package/dist/mem/search.js.map +1 -0
  174. package/dist/mem/sessions.d.ts +37 -0
  175. package/dist/mem/sessions.d.ts.map +1 -0
  176. package/dist/mem/sessions.js +279 -0
  177. package/dist/mem/sessions.js.map +1 -0
  178. package/dist/mem/types.d.ts +176 -0
  179. package/dist/mem/types.d.ts.map +1 -0
  180. package/dist/mem/types.js +10 -0
  181. package/dist/mem/types.js.map +1 -0
  182. package/dist/task/index.d.ts +9 -0
  183. package/dist/task/index.d.ts.map +1 -0
  184. package/dist/task/index.js +9 -0
  185. package/dist/task/index.js.map +1 -0
  186. package/dist/task/paths.d.ts +37 -0
  187. package/dist/task/paths.d.ts.map +1 -0
  188. package/dist/task/paths.js +49 -0
  189. package/dist/task/paths.js.map +1 -0
  190. package/dist/task/phase.d.ts +27 -0
  191. package/dist/task/phase.d.ts.map +1 -0
  192. package/dist/task/phase.js +24 -0
  193. package/dist/task/phase.js.map +1 -0
  194. package/dist/task/records.d.ts +39 -0
  195. package/dist/task/records.d.ts.map +1 -0
  196. package/dist/task/records.js +89 -0
  197. package/dist/task/records.js.map +1 -0
  198. package/dist/task/schema.d.ts +77 -0
  199. package/dist/task/schema.d.ts.map +1 -0
  200. package/dist/task/schema.js +220 -0
  201. package/dist/task/schema.js.map +1 -0
  202. package/dist/testing/index.d.ts +2 -0
  203. package/dist/testing/index.d.ts.map +1 -0
  204. package/dist/testing/index.js +4 -0
  205. package/dist/testing/index.js.map +1 -0
  206. package/package.json +78 -0
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Persisted Codex session reader.
3
+ *
4
+ * Layout: `~/.codex/sessions/**\/rollout-<ts>-<id>.jsonl`. Metadata is read
5
+ * from the first event's `payload`; the filename timestamp is a fallback
6
+ * `created`.
7
+ */
8
+ import * as fs from "node:fs";
9
+ import * as path from "node:path";
10
+ import { stripInjectionTags, isBootstrapTurn } from "../dialogue.js";
11
+ import { inRangeOverlap, sameProject } from "../filter.js";
12
+ import { readJsonl, readJsonlFirst } from "../internal/jsonl.js";
13
+ import { CODEX_SESSIONS, walkDir } from "../internal/paths.js";
14
+ import { parseTaskPyCommandsAll } from "../phase.js";
15
+ import { searchInDialogue } from "../search.js";
16
+ function parseDialogueRole(v) {
17
+ return v === "user" || v === "assistant" ? v : undefined;
18
+ }
19
+ /**
20
+ * Recover the shell command string from a Codex `function_call` event's
21
+ * `arguments` field. Codex versions vary in how they encode it:
22
+ *
23
+ * - a raw shell string
24
+ * - a stringified JSON object with `cmd` / `command` (string) or
25
+ * `argv` (string[] — joined with spaces)
26
+ * - a raw object with the same `cmd` / `command` / `argv` shape
27
+ *
28
+ * Returns `undefined` when no command can be recovered.
29
+ */
30
+ export function commandFromCodexArguments(argsRaw) {
31
+ const fromObject = (obj) => {
32
+ const cmd = obj.cmd;
33
+ if (typeof cmd === "string")
34
+ return cmd;
35
+ const command = obj.command;
36
+ if (typeof command === "string")
37
+ return command;
38
+ const argv = obj.argv;
39
+ if (Array.isArray(argv)) {
40
+ const parts = argv.filter((a) => typeof a === "string");
41
+ if (parts.length)
42
+ return parts.join(" ");
43
+ }
44
+ return undefined;
45
+ };
46
+ if (typeof argsRaw === "string") {
47
+ try {
48
+ const parsed = JSON.parse(argsRaw);
49
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
50
+ return fromObject(parsed);
51
+ }
52
+ }
53
+ catch {
54
+ // Not JSON — some Codex versions inline the raw shell string.
55
+ return argsRaw;
56
+ }
57
+ return undefined;
58
+ }
59
+ if (argsRaw && typeof argsRaw === "object" && !Array.isArray(argsRaw)) {
60
+ return fromObject(argsRaw);
61
+ }
62
+ return undefined;
63
+ }
64
+ // ---------- list ----------
65
+ export function codexListSessions(f) {
66
+ if (!fs.existsSync(CODEX_SESSIONS))
67
+ return [];
68
+ const out = [];
69
+ for (const file of walkDir(CODEX_SESSIONS)) {
70
+ if (!file.endsWith(".jsonl"))
71
+ continue;
72
+ const base = path.basename(file, ".jsonl");
73
+ const m = base.match(/^rollout-(\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2})-(.+)$/);
74
+ const tsFromName = m?.[1]
75
+ ? new Date(m[1].replace(/T(\d{2})-(\d{2})-(\d{2})/, "T$1:$2:$3") + "Z").toISOString()
76
+ : undefined;
77
+ const first = readJsonlFirst(file);
78
+ const meta = first?.payload;
79
+ const id = meta?.id ?? m?.[2] ?? base;
80
+ const cwd = meta?.cwd;
81
+ const created = first?.timestamp ?? tsFromName ?? "";
82
+ if (f.cwd && !sameProject(cwd, f.cwd))
83
+ continue;
84
+ const updated = fs.statSync(file).mtime.toISOString();
85
+ if (!inRangeOverlap(created, updated, f))
86
+ continue;
87
+ out.push({
88
+ platform: "codex",
89
+ id,
90
+ cwd,
91
+ created,
92
+ updated,
93
+ filePath: file,
94
+ });
95
+ }
96
+ return out;
97
+ }
98
+ // ---------- extract ----------
99
+ function buildTurnFromMessage(role, parts) {
100
+ const collected = [];
101
+ let totalRaw = 0;
102
+ for (const c of parts ?? []) {
103
+ const txt = c.text;
104
+ if (typeof txt !== "string")
105
+ continue;
106
+ if (c.type !== "input_text" && c.type !== "output_text")
107
+ continue;
108
+ totalRaw += txt.length;
109
+ const cleaned = stripInjectionTags(txt);
110
+ if (cleaned)
111
+ collected.push(cleaned);
112
+ }
113
+ if (!collected.length)
114
+ return null;
115
+ const merged = collected.join("\n\n");
116
+ if (isBootstrapTurn(merged, totalRaw))
117
+ return null;
118
+ return { role, text: merged };
119
+ }
120
+ export function codexExtractDialogue(s) {
121
+ // payload.type=="message" with role in {user, assistant} only.
122
+ // Compaction: a top-level `compacted` event carries payload.replacement_history
123
+ // — the new authoritative history replacing everything before.
124
+ let turns = [];
125
+ readJsonl(s.filePath, (obj) => {
126
+ if (obj.type === "compacted") {
127
+ const rh = obj.payload?.replacement_history;
128
+ turns = [];
129
+ if (!Array.isArray(rh))
130
+ return;
131
+ for (const item of rh) {
132
+ if (item.type !== "message")
133
+ continue;
134
+ const role = parseDialogueRole(item.role);
135
+ if (!role)
136
+ continue;
137
+ const turn = buildTurnFromMessage(role, item.content);
138
+ if (turn)
139
+ turns.push({ role: turn.role, text: `[compact]\n${turn.text}` });
140
+ }
141
+ return;
142
+ }
143
+ const p = obj.payload;
144
+ if (p?.type !== "message")
145
+ return;
146
+ const role = parseDialogueRole(p.role);
147
+ if (!role)
148
+ return;
149
+ const turn = buildTurnFromMessage(role, p.content);
150
+ if (turn)
151
+ turns.push(turn);
152
+ });
153
+ return turns;
154
+ }
155
+ export function codexSearch(s, kw) {
156
+ return searchInDialogue(codexExtractDialogue(s), kw);
157
+ }
158
+ /**
159
+ * Codex twin of `collectClaudeTurnsAndEvents`. Single pass over the rollout
160
+ * file; emits both the cleaned dialogue turns and the list of
161
+ * `task.py create|start` invocations found inside `function_call` events whose
162
+ * `name === "exec_command"` (or `"shell"`). Compaction resets both `turns` and
163
+ * `events`.
164
+ */
165
+ export function collectCodexTurnsAndEvents(s) {
166
+ let turns = [];
167
+ let events = [];
168
+ readJsonl(s.filePath, (obj) => {
169
+ if (obj.type === "compacted") {
170
+ const rh = obj.payload?.replacement_history;
171
+ turns = [];
172
+ events = [];
173
+ if (!Array.isArray(rh))
174
+ return;
175
+ for (const item of rh) {
176
+ if (item.type !== "message")
177
+ continue;
178
+ const role = parseDialogueRole(item.role);
179
+ if (!role)
180
+ continue;
181
+ const turn = buildTurnFromMessage(role, item.content);
182
+ if (turn)
183
+ turns.push({ role: turn.role, text: `[compact]\n${turn.text}` });
184
+ }
185
+ return;
186
+ }
187
+ const p = obj.payload;
188
+ if (!p)
189
+ return;
190
+ if (p.type === "function_call") {
191
+ const fnName = p.name;
192
+ if (fnName !== "exec_command" && fnName !== "shell")
193
+ return;
194
+ const cmd = commandFromCodexArguments(p.arguments);
195
+ if (!cmd)
196
+ return;
197
+ const parsedAll = parseTaskPyCommandsAll(cmd);
198
+ for (const parsed of parsedAll) {
199
+ const ev = {
200
+ action: parsed.action,
201
+ timestamp: obj.timestamp ?? "",
202
+ turnIndex: turns.length,
203
+ ...(parsed.action === "create"
204
+ ? { slug: parsed.slug }
205
+ : { taskDir: parsed.taskDir }),
206
+ };
207
+ events.push(ev);
208
+ }
209
+ return;
210
+ }
211
+ if (p.type !== "message")
212
+ return;
213
+ const role = parseDialogueRole(p.role);
214
+ if (!role)
215
+ return;
216
+ const turn = buildTurnFromMessage(role, p.content);
217
+ if (turn)
218
+ turns.push(turn);
219
+ });
220
+ return { turns, events };
221
+ }
222
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/mem/adapters/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * OpenCode session reader — currently a degraded no-op.
3
+ *
4
+ * OpenCode 1.2+ moved to a SQLite store at
5
+ * `~/.local/share/opencode/opencode.db`. The previous SQLite reader required a
6
+ * native dependency (`better-sqlite3`) whose prebuilt-tarball + node-gyp
7
+ * fallback chain broke `npm install` on Windows + restricted networks, so it
8
+ * was reverted. These adapter functions are kept (dispatch / phase slicing
9
+ * rely on them) but degraded to silent no-ops.
10
+ *
11
+ * The "OpenCode reader unavailable" warning is a presentation concern owned by
12
+ * the CLI — core never prints. Re-enabled in a future release once a
13
+ * non-native backend ships.
14
+ */
15
+ import type { DialogueTurn, MemFilter, MemSessionInfo, SearchHit } from "../types.js";
16
+ export declare function opencodeListSessions(_f: MemFilter): MemSessionInfo[];
17
+ export declare function opencodeExtractDialogue(_s: MemSessionInfo): DialogueTurn[];
18
+ export declare function opencodeSearch(kw: string): SearchHit;
19
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/mem/adapters/opencode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,SAAS,EACV,MAAM,aAAa,CAAC;AAErB,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,SAAS,GAAG,cAAc,EAAE,CAEpE;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,cAAc,GAAG,YAAY,EAAE,CAE1E;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAEpD"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * OpenCode session reader — currently a degraded no-op.
3
+ *
4
+ * OpenCode 1.2+ moved to a SQLite store at
5
+ * `~/.local/share/opencode/opencode.db`. The previous SQLite reader required a
6
+ * native dependency (`better-sqlite3`) whose prebuilt-tarball + node-gyp
7
+ * fallback chain broke `npm install` on Windows + restricted networks, so it
8
+ * was reverted. These adapter functions are kept (dispatch / phase slicing
9
+ * rely on them) but degraded to silent no-ops.
10
+ *
11
+ * The "OpenCode reader unavailable" warning is a presentation concern owned by
12
+ * the CLI — core never prints. Re-enabled in a future release once a
13
+ * non-native backend ships.
14
+ */
15
+ import { searchInDialogue } from "../search.js";
16
+ export function opencodeListSessions(_f) {
17
+ return [];
18
+ }
19
+ export function opencodeExtractDialogue(_s) {
20
+ return [];
21
+ }
22
+ export function opencodeSearch(kw) {
23
+ return searchInDialogue([], kw);
24
+ }
25
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/mem/adapters/opencode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAQhD,MAAM,UAAU,oBAAoB,CAAC,EAAa;IAChD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,EAAkB;IACxD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,OAAO,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Persisted Pi Agent session reader.
3
+ *
4
+ * Layout: `~/.pi/agent/sessions/--<encoded-cwd>--/<timestamp>_<id>.jsonl`
5
+ * for the default store, or direct `.jsonl` files under an env/settings
6
+ * configured custom session directory. Entries form a tree via `id` / `parentId`;
7
+ * extraction follows only the active branch (last entry leaf) and mirrors Pi's
8
+ * compaction context rules.
9
+ */
10
+ import type { DialogueTurn, MemFilter, MemSessionInfo, SearchHit, TaskPyEvent } from "../types.js";
11
+ interface PiBuilt {
12
+ turns: DialogueTurn[];
13
+ events: TaskPyEvent[];
14
+ }
15
+ export declare function piListSessions(f: MemFilter): MemSessionInfo[];
16
+ export declare function piExtractDialogue(s: MemSessionInfo): DialogueTurn[];
17
+ export declare function piSearch(s: MemSessionInfo, kw: string): SearchHit;
18
+ export declare function collectPiTurnsAndEvents(s: MemSessionInfo): PiBuilt;
19
+ export {};
20
+ //# sourceMappingURL=pi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../../src/mem/adapters/pi.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH,OAAO,KAAK,EAEV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,EACZ,MAAM,aAAa,CAAC;AAwCrB,UAAU,OAAO;IACf,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAID,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,GAAG,cAAc,EAAE,CAwD7D;AA2CD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,cAAc,GAAG,YAAY,EAAE,CAEnE;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,CAEjE;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO,CAElE"}
@@ -0,0 +1,299 @@
1
+ /**
2
+ * Persisted Pi Agent session reader.
3
+ *
4
+ * Layout: `~/.pi/agent/sessions/--<encoded-cwd>--/<timestamp>_<id>.jsonl`
5
+ * for the default store, or direct `.jsonl` files under an env/settings
6
+ * configured custom session directory. Entries form a tree via `id` / `parentId`;
7
+ * extraction follows only the active branch (last entry leaf) and mirrors Pi's
8
+ * compaction context rules.
9
+ */
10
+ import * as fs from "node:fs";
11
+ import * as path from "node:path";
12
+ import { stripInjectionTags, isBootstrapTurn } from "../dialogue.js";
13
+ import { inRangeOverlap, sameProject } from "../filter.js";
14
+ import { readJsonl, readJsonlFirst } from "../internal/jsonl.js";
15
+ import { PI_AGENT_DIR, piProjectDirFromCwd, piSessionRoots, walkDir, } from "../internal/paths.js";
16
+ import { parseTaskPyCommandsAll } from "../phase.js";
17
+ import { searchInDialogue } from "../search.js";
18
+ // ---------- list ----------
19
+ export function piListSessions(f) {
20
+ const out = [];
21
+ for (const filePath of candidateFiles(f)) {
22
+ const header = readJsonlFirst(filePath);
23
+ if (header?.type !== "session")
24
+ continue;
25
+ const id = typeof header.id === "string" ? header.id : idFromFile(filePath);
26
+ const cwd = typeof header.cwd === "string" ? header.cwd : undefined;
27
+ if (f.cwd && !sameProject(cwd, f.cwd))
28
+ continue;
29
+ let title;
30
+ let lastActivityMs;
31
+ readJsonl(filePath, (entry) => {
32
+ if (entry.type === "session_info") {
33
+ title =
34
+ typeof entry.name === "string" && entry.name.trim()
35
+ ? entry.name.trim()
36
+ : undefined;
37
+ return;
38
+ }
39
+ if (entry.type !== "message")
40
+ return;
41
+ const role = entry.message?.role;
42
+ if (role !== "user" && role !== "assistant")
43
+ return;
44
+ const activityMs = timestampMs(entry.message?.timestamp) ?? timestampMs(entry.timestamp);
45
+ if (activityMs !== undefined)
46
+ lastActivityMs = Math.max(lastActivityMs ?? 0, activityMs);
47
+ });
48
+ let updated;
49
+ try {
50
+ updated =
51
+ lastActivityMs !== undefined
52
+ ? new Date(lastActivityMs).toISOString()
53
+ : fs.statSync(filePath).mtime.toISOString();
54
+ }
55
+ catch {
56
+ updated =
57
+ lastActivityMs !== undefined
58
+ ? new Date(lastActivityMs).toISOString()
59
+ : undefined;
60
+ }
61
+ const created = typeof header.timestamp === "string" ? header.timestamp : undefined;
62
+ if (!inRangeOverlap(created, updated, f))
63
+ continue;
64
+ out.push({
65
+ platform: "pi",
66
+ id,
67
+ title,
68
+ cwd,
69
+ created,
70
+ updated,
71
+ filePath,
72
+ });
73
+ }
74
+ return out;
75
+ }
76
+ function candidateFiles(f) {
77
+ const defaultRoot = path.join(PI_AGENT_DIR, "sessions");
78
+ const seen = new Set();
79
+ const out = [];
80
+ const pushJsonlFiles = (root) => {
81
+ if (!fs.existsSync(root))
82
+ return;
83
+ for (const file of walkDir(root)) {
84
+ if (!file.endsWith(".jsonl"))
85
+ continue;
86
+ const normalized = path.resolve(file);
87
+ if (seen.has(normalized))
88
+ continue;
89
+ seen.add(normalized);
90
+ out.push(file);
91
+ }
92
+ };
93
+ for (const root of piSessionRoots()) {
94
+ if (f.cwd && path.resolve(root) === path.resolve(defaultRoot)) {
95
+ pushJsonlFiles(piProjectDirFromCwd(f.cwd));
96
+ }
97
+ else {
98
+ pushJsonlFiles(root);
99
+ }
100
+ }
101
+ return out;
102
+ }
103
+ function idFromFile(filePath) {
104
+ const base = path.basename(filePath, ".jsonl");
105
+ const underscore = base.indexOf("_");
106
+ return underscore === -1 ? base : base.slice(underscore + 1);
107
+ }
108
+ function timestampMs(value) {
109
+ if (typeof value === "number" && Number.isFinite(value))
110
+ return value;
111
+ if (typeof value !== "string")
112
+ return undefined;
113
+ const ms = new Date(value).getTime();
114
+ return Number.isNaN(ms) ? undefined : ms;
115
+ }
116
+ // ---------- extract/search/phase ----------
117
+ export function piExtractDialogue(s) {
118
+ return buildPiTurnsAndEvents(s).turns;
119
+ }
120
+ export function piSearch(s, kw) {
121
+ return searchInDialogue(piExtractDialogue(s), kw);
122
+ }
123
+ export function collectPiTurnsAndEvents(s) {
124
+ return buildPiTurnsAndEvents(s);
125
+ }
126
+ function buildPiTurnsAndEvents(s) {
127
+ const effective = effectiveActivePath(s.filePath);
128
+ const turns = [];
129
+ const events = [];
130
+ for (const entry of effective) {
131
+ collectTaskEvents(entry, turns.length, events);
132
+ const turn = turnFromEntry(entry);
133
+ if (turn)
134
+ turns.push(turn);
135
+ }
136
+ return { turns, events };
137
+ }
138
+ function effectiveActivePath(filePath) {
139
+ const entries = [];
140
+ readJsonl(filePath, (entry) => {
141
+ if (entry.type === "session")
142
+ return;
143
+ if (typeof entry.id !== "string")
144
+ return;
145
+ entries.push(entry);
146
+ });
147
+ if (entries.length === 0)
148
+ return [];
149
+ const byId = new Map();
150
+ for (const entry of entries) {
151
+ if (typeof entry.id === "string")
152
+ byId.set(entry.id, entry);
153
+ }
154
+ const leaf = entries[entries.length - 1];
155
+ if (!leaf)
156
+ return [];
157
+ const activePath = [];
158
+ let current = leaf;
159
+ const seen = new Set();
160
+ while (current) {
161
+ if (typeof current.id !== "string" || seen.has(current.id))
162
+ break;
163
+ seen.add(current.id);
164
+ activePath.unshift(current);
165
+ current =
166
+ typeof current.parentId === "string"
167
+ ? byId.get(current.parentId)
168
+ : undefined;
169
+ }
170
+ const compactionIdx = findLastIndex(activePath, (entry) => entry.type === "compaction");
171
+ if (compactionIdx === -1)
172
+ return activePath;
173
+ const compaction = activePath[compactionIdx];
174
+ if (!compaction)
175
+ return activePath;
176
+ const firstKeptIdx = activePath.findIndex((entry, idx) => idx < compactionIdx && entry.id === compaction.firstKeptEntryId);
177
+ const keptBeforeCompaction = firstKeptIdx === -1 ? [] : activePath.slice(firstKeptIdx, compactionIdx);
178
+ return [
179
+ compaction,
180
+ ...keptBeforeCompaction,
181
+ ...activePath.slice(compactionIdx + 1),
182
+ ];
183
+ }
184
+ function findLastIndex(items, pred) {
185
+ for (let i = items.length - 1; i >= 0; i--) {
186
+ const item = items[i];
187
+ if (item !== undefined && pred(item))
188
+ return i;
189
+ }
190
+ return -1;
191
+ }
192
+ function turnFromEntry(entry) {
193
+ if (entry.type === "compaction") {
194
+ return syntheticTurn("[compact summary]", entry.summary);
195
+ }
196
+ if (entry.type === "branch_summary") {
197
+ return syntheticTurn("[branch summary]", entry.summary);
198
+ }
199
+ if (entry.type === "custom_message") {
200
+ return buildTurn("user", entry.content);
201
+ }
202
+ if (entry.type !== "message")
203
+ return null;
204
+ const msg = entry.message;
205
+ if (!msg)
206
+ return null;
207
+ switch (msg.role) {
208
+ case "user":
209
+ return buildTurn("user", msg.content);
210
+ case "assistant":
211
+ return buildTurn("assistant", msg.content);
212
+ case "custom":
213
+ return buildTurn("user", msg.content);
214
+ case "branchSummary":
215
+ return syntheticTurn("[branch summary]", msg.summary);
216
+ case "compactionSummary":
217
+ return syntheticTurn("[compact summary]", msg.summary);
218
+ default:
219
+ return null;
220
+ }
221
+ }
222
+ function syntheticTurn(prefix, raw) {
223
+ if (typeof raw !== "string")
224
+ return null;
225
+ const text = stripInjectionTags(raw);
226
+ if (!text)
227
+ return null;
228
+ return { role: "user", text: `${prefix}\n${text}` };
229
+ }
230
+ function buildTurn(role, content) {
231
+ const parts = [];
232
+ let totalRaw = 0;
233
+ if (typeof content === "string") {
234
+ totalRaw = content.length;
235
+ const cleaned = stripInjectionTags(content);
236
+ if (cleaned)
237
+ parts.push(cleaned);
238
+ }
239
+ else if (Array.isArray(content)) {
240
+ for (const block of content) {
241
+ if (block.type !== "text" || typeof block.text !== "string")
242
+ continue;
243
+ totalRaw += block.text.length;
244
+ const cleaned = stripInjectionTags(block.text);
245
+ if (cleaned)
246
+ parts.push(cleaned);
247
+ }
248
+ }
249
+ if (parts.length === 0)
250
+ return null;
251
+ const merged = parts.join("\n\n");
252
+ if (isBootstrapTurn(merged, totalRaw))
253
+ return null;
254
+ return { role, text: merged };
255
+ }
256
+ function collectTaskEvents(entry, turnIndex, events) {
257
+ if (entry.type !== "message")
258
+ return;
259
+ const msg = entry.message;
260
+ if (!msg)
261
+ return;
262
+ if (msg.role === "bashExecution" && typeof msg.command === "string") {
263
+ pushTaskEvents(msg.command, entry.timestamp, turnIndex, events);
264
+ return;
265
+ }
266
+ if (msg.role !== "assistant" || !Array.isArray(msg.content))
267
+ return;
268
+ for (const block of msg.content) {
269
+ if (block.type !== "toolCall")
270
+ continue;
271
+ if (typeof block.name !== "string")
272
+ continue;
273
+ const toolName = block.name.toLowerCase();
274
+ if (toolName !== "bash" && toolName !== "shell")
275
+ continue;
276
+ const args = block.arguments;
277
+ if (!args || typeof args !== "object" || Array.isArray(args))
278
+ continue;
279
+ const command = args.command;
280
+ if (typeof command !== "string")
281
+ continue;
282
+ pushTaskEvents(command, entry.timestamp, turnIndex, events);
283
+ }
284
+ }
285
+ function pushTaskEvents(command, timestamp, turnIndex, events) {
286
+ const parsedAll = parseTaskPyCommandsAll(command);
287
+ for (const parsed of parsedAll) {
288
+ const ev = {
289
+ action: parsed.action,
290
+ timestamp: timestamp ?? "",
291
+ turnIndex,
292
+ ...(parsed.action === "create"
293
+ ? { slug: parsed.slug }
294
+ : { taskDir: parsed.taskDir }),
295
+ };
296
+ events.push(ev);
297
+ }
298
+ }
299
+ //# sourceMappingURL=pi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.js","sourceRoot":"","sources":["../../../src/mem/adapters/pi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Dialogue-window context extraction: resolve a session, optionally merge
3
+ * sub-agent children, then select a token-budgeted window of turns around the
4
+ * top hits.
5
+ */
6
+ import type { DialogueTurn, MemContextResult, MemContextTurn, ReadMemContextOptions } from "./types.js";
7
+ interface SelectedContext {
8
+ turns: MemContextTurn[];
9
+ totalHitTurns: number;
10
+ budgetUsed: number;
11
+ }
12
+ /**
13
+ * Pure selection: rank turns against `grep` (user-role first, then hit
14
+ * density), take the top `nTurns`, expand each by `around` turns of context,
15
+ * then emit turns within `maxChars` — head-truncating any single turn that
16
+ * exceeds half the budget. With no `grep`, returns the first `nTurns` turns.
17
+ */
18
+ export declare function selectContextTurns(turns: readonly DialogueTurn[], grep: string | undefined, nTurns: number, around: number, maxChars: number): SelectedContext;
19
+ /** Drill into a single session: top-N hit turns plus surrounding context,
20
+ * char-budgeted. With no `grep`, returns the session opening. */
21
+ export declare function readMemContext(options: ReadMemContextOptions): MemContextResult;
22
+ export {};
23
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/mem/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,KAAK,EAEV,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAEpB,UAAU,eAAe;IACvB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,eAAe,CAoEjB;AAED;iEACiE;AACjE,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,gBAAgB,CAiClB"}