@blulotus/trellis-core 0.7.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 (218) 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 +102 -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 +54 -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 +145 -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 +206 -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 +57 -0
  95. package/dist/channel/internal/store/paths.d.ts.map +1 -0
  96. package/dist/channel/internal/store/paths.js +264 -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 +133 -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 +206 -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 +209 -0
  125. package/dist/mem/adapters/claude.js.map +1 -0
  126. package/dist/mem/adapters/codex.d.ts +55 -0
  127. package/dist/mem/adapters/codex.d.ts.map +1 -0
  128. package/dist/mem/adapters/codex.js +344 -0
  129. package/dist/mem/adapters/codex.js.map +1 -0
  130. package/dist/mem/adapters/grok.d.ts +41 -0
  131. package/dist/mem/adapters/grok.d.ts.map +1 -0
  132. package/dist/mem/adapters/grok.js +202 -0
  133. package/dist/mem/adapters/grok.js.map +1 -0
  134. package/dist/mem/adapters/opencode.d.ts +19 -0
  135. package/dist/mem/adapters/opencode.d.ts.map +1 -0
  136. package/dist/mem/adapters/opencode.js +25 -0
  137. package/dist/mem/adapters/opencode.js.map +1 -0
  138. package/dist/mem/adapters/pi.d.ts +24 -0
  139. package/dist/mem/adapters/pi.d.ts.map +1 -0
  140. package/dist/mem/adapters/pi.js +290 -0
  141. package/dist/mem/adapters/pi.js.map +1 -0
  142. package/dist/mem/adapters/zcode.d.ts +76 -0
  143. package/dist/mem/adapters/zcode.d.ts.map +1 -0
  144. package/dist/mem/adapters/zcode.js +434 -0
  145. package/dist/mem/adapters/zcode.js.map +1 -0
  146. package/dist/mem/context.d.ts +23 -0
  147. package/dist/mem/context.d.ts.map +1 -0
  148. package/dist/mem/context.js +120 -0
  149. package/dist/mem/context.js.map +1 -0
  150. package/dist/mem/dialogue.d.ts +32 -0
  151. package/dist/mem/dialogue.d.ts.map +1 -0
  152. package/dist/mem/dialogue.js +0 -0
  153. package/dist/mem/dialogue.js.map +1 -0
  154. package/dist/mem/filter.d.ts +31 -0
  155. package/dist/mem/filter.d.ts.map +1 -0
  156. package/dist/mem/filter.js +66 -0
  157. package/dist/mem/filter.js.map +1 -0
  158. package/dist/mem/index.d.ts +18 -0
  159. package/dist/mem/index.d.ts.map +1 -0
  160. package/dist/mem/index.js +17 -0
  161. package/dist/mem/index.js.map +1 -0
  162. package/dist/mem/internal/jsonl.d.ts +35 -0
  163. package/dist/mem/internal/jsonl.d.ts.map +1 -0
  164. package/dist/mem/internal/jsonl.js +125 -0
  165. package/dist/mem/internal/jsonl.js.map +1 -0
  166. package/dist/mem/internal/paths.d.ts +38 -0
  167. package/dist/mem/internal/paths.d.ts.map +1 -0
  168. package/dist/mem/internal/paths.js +126 -0
  169. package/dist/mem/internal/paths.js.map +1 -0
  170. package/dist/mem/internal/sqlite-readonly.d.ts +77 -0
  171. package/dist/mem/internal/sqlite-readonly.d.ts.map +1 -0
  172. package/dist/mem/internal/sqlite-readonly.js +797 -0
  173. package/dist/mem/internal/sqlite-readonly.js.map +1 -0
  174. package/dist/mem/phase.d.ts +45 -0
  175. package/dist/mem/phase.d.ts.map +1 -0
  176. package/dist/mem/phase.js +220 -0
  177. package/dist/mem/phase.js.map +1 -0
  178. package/dist/mem/projects.d.ts +13 -0
  179. package/dist/mem/projects.d.ts.map +1 -0
  180. package/dist/mem/projects.js +47 -0
  181. package/dist/mem/projects.js.map +1 -0
  182. package/dist/mem/search.d.ts +39 -0
  183. package/dist/mem/search.d.ts.map +1 -0
  184. package/dist/mem/search.js +133 -0
  185. package/dist/mem/search.js.map +1 -0
  186. package/dist/mem/sessions.d.ts +38 -0
  187. package/dist/mem/sessions.d.ts.map +1 -0
  188. package/dist/mem/sessions.js +313 -0
  189. package/dist/mem/sessions.js.map +1 -0
  190. package/dist/mem/types.d.ts +188 -0
  191. package/dist/mem/types.d.ts.map +1 -0
  192. package/dist/mem/types.js +10 -0
  193. package/dist/mem/types.js.map +1 -0
  194. package/dist/task/index.d.ts +9 -0
  195. package/dist/task/index.d.ts.map +1 -0
  196. package/dist/task/index.js +9 -0
  197. package/dist/task/index.js.map +1 -0
  198. package/dist/task/paths.d.ts +37 -0
  199. package/dist/task/paths.d.ts.map +1 -0
  200. package/dist/task/paths.js +49 -0
  201. package/dist/task/paths.js.map +1 -0
  202. package/dist/task/phase.d.ts +27 -0
  203. package/dist/task/phase.d.ts.map +1 -0
  204. package/dist/task/phase.js +24 -0
  205. package/dist/task/phase.js.map +1 -0
  206. package/dist/task/records.d.ts +39 -0
  207. package/dist/task/records.d.ts.map +1 -0
  208. package/dist/task/records.js +89 -0
  209. package/dist/task/records.js.map +1 -0
  210. package/dist/task/schema.d.ts +77 -0
  211. package/dist/task/schema.d.ts.map +1 -0
  212. package/dist/task/schema.js +220 -0
  213. package/dist/task/schema.js.map +1 -0
  214. package/dist/testing/index.d.ts +2 -0
  215. package/dist/testing/index.d.ts.map +1 -0
  216. package/dist/testing/index.js +4 -0
  217. package/dist/testing/index.js.map +1 -0
  218. package/package.json +77 -0
@@ -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,24 @@
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 the whole active branch (last entry leaf).
8
+ *
9
+ * Compaction: Pi writes a `compaction` entry naming the first entry it kept.
10
+ * That is Pi's context rule, not a record of what was said — every earlier
11
+ * entry is still on the active path. Extraction keeps the full path and renders
12
+ * the compaction entry as a boundary marker in place.
13
+ */
14
+ import type { DialogueTurn, MemFilter, MemSessionInfo, SearchHit, TaskPyEvent } from "../types.js";
15
+ interface PiBuilt {
16
+ turns: DialogueTurn[];
17
+ events: TaskPyEvent[];
18
+ }
19
+ export declare function piListSessions(f: MemFilter): MemSessionInfo[];
20
+ export declare function piExtractDialogue(s: MemSessionInfo): DialogueTurn[];
21
+ export declare function piSearch(s: MemSessionInfo, kw: string): SearchHit;
22
+ export declare function collectPiTurnsAndEvents(s: MemSessionInfo): PiBuilt;
23
+ export {};
24
+ //# 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;;;;;;;;;;;;GAYG;AAoBH,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,290 @@
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 the whole active branch (last entry leaf).
8
+ *
9
+ * Compaction: Pi writes a `compaction` entry naming the first entry it kept.
10
+ * That is Pi's context rule, not a record of what was said — every earlier
11
+ * entry is still on the active path. Extraction keeps the full path and renders
12
+ * the compaction entry as a boundary marker in place.
13
+ */
14
+ import * as fs from "node:fs";
15
+ import * as path from "node:path";
16
+ import { compactionBoundaryTurn, stripInjectionTags, isBootstrapTurn, } from "../dialogue.js";
17
+ import { inRangeOverlap, sameProject } from "../filter.js";
18
+ import { readJsonl, readJsonlFirst } from "../internal/jsonl.js";
19
+ import { PI_AGENT_DIR, piProjectDirFromCwd, piSessionRoots, walkDir, } from "../internal/paths.js";
20
+ import { parseTaskPyCommandsAll } from "../phase.js";
21
+ import { searchInDialogue } from "../search.js";
22
+ // ---------- list ----------
23
+ export function piListSessions(f) {
24
+ const out = [];
25
+ for (const filePath of candidateFiles(f)) {
26
+ const header = readJsonlFirst(filePath);
27
+ if (header?.type !== "session")
28
+ continue;
29
+ const id = typeof header.id === "string" ? header.id : idFromFile(filePath);
30
+ const cwd = typeof header.cwd === "string" ? header.cwd : undefined;
31
+ if (f.cwd && !sameProject(cwd, f.cwd))
32
+ continue;
33
+ let title;
34
+ let lastActivityMs;
35
+ readJsonl(filePath, (entry) => {
36
+ if (entry.type === "session_info") {
37
+ title =
38
+ typeof entry.name === "string" && entry.name.trim()
39
+ ? entry.name.trim()
40
+ : undefined;
41
+ return;
42
+ }
43
+ if (entry.type !== "message")
44
+ return;
45
+ const role = entry.message?.role;
46
+ if (role !== "user" && role !== "assistant")
47
+ return;
48
+ const activityMs = timestampMs(entry.message?.timestamp) ?? timestampMs(entry.timestamp);
49
+ if (activityMs !== undefined)
50
+ lastActivityMs = Math.max(lastActivityMs ?? 0, activityMs);
51
+ });
52
+ let updated;
53
+ try {
54
+ updated =
55
+ lastActivityMs !== undefined
56
+ ? new Date(lastActivityMs).toISOString()
57
+ : fs.statSync(filePath).mtime.toISOString();
58
+ }
59
+ catch {
60
+ updated =
61
+ lastActivityMs !== undefined
62
+ ? new Date(lastActivityMs).toISOString()
63
+ : undefined;
64
+ }
65
+ const created = typeof header.timestamp === "string" ? header.timestamp : undefined;
66
+ if (!inRangeOverlap(created, updated, f))
67
+ continue;
68
+ out.push({
69
+ platform: "pi",
70
+ id,
71
+ title,
72
+ cwd,
73
+ created,
74
+ updated,
75
+ filePath,
76
+ });
77
+ }
78
+ return out;
79
+ }
80
+ function candidateFiles(f) {
81
+ const defaultRoot = path.join(PI_AGENT_DIR, "sessions");
82
+ const seen = new Set();
83
+ const out = [];
84
+ const pushJsonlFiles = (root) => {
85
+ if (!fs.existsSync(root))
86
+ return;
87
+ for (const file of walkDir(root)) {
88
+ if (!file.endsWith(".jsonl"))
89
+ continue;
90
+ const normalized = path.resolve(file);
91
+ if (seen.has(normalized))
92
+ continue;
93
+ seen.add(normalized);
94
+ out.push(file);
95
+ }
96
+ };
97
+ for (const root of piSessionRoots(f.cwd)) {
98
+ if (f.cwd && path.resolve(root) === path.resolve(defaultRoot)) {
99
+ pushJsonlFiles(piProjectDirFromCwd(f.cwd));
100
+ }
101
+ else {
102
+ pushJsonlFiles(root);
103
+ }
104
+ }
105
+ return out;
106
+ }
107
+ function idFromFile(filePath) {
108
+ const base = path.basename(filePath, ".jsonl");
109
+ const underscore = base.indexOf("_");
110
+ return underscore === -1 ? base : base.slice(underscore + 1);
111
+ }
112
+ function timestampMs(value) {
113
+ if (typeof value === "number" && Number.isFinite(value))
114
+ return value;
115
+ if (typeof value !== "string")
116
+ return undefined;
117
+ const ms = new Date(value).getTime();
118
+ return Number.isNaN(ms) ? undefined : ms;
119
+ }
120
+ // ---------- extract/search/phase ----------
121
+ export function piExtractDialogue(s) {
122
+ return buildPiTurnsAndEvents(s).turns;
123
+ }
124
+ export function piSearch(s, kw) {
125
+ return searchInDialogue(piExtractDialogue(s), kw);
126
+ }
127
+ export function collectPiTurnsAndEvents(s) {
128
+ return buildPiTurnsAndEvents(s);
129
+ }
130
+ function buildPiTurnsAndEvents(s) {
131
+ const activePath = piActivePath(s.filePath);
132
+ const turns = [];
133
+ const events = [];
134
+ for (const entry of activePath) {
135
+ collectTaskEvents(entry, turns.length, events);
136
+ const turn = turnFromEntry(entry);
137
+ if (turn)
138
+ turns.push(turn);
139
+ }
140
+ return { turns, events };
141
+ }
142
+ /** Walk parent links back from the last entry — the branch the session ended
143
+ * on, in chronological order. No compaction truncation: a `compaction` entry is
144
+ * Pi's context rule, and the entries it excluded are still on this path. */
145
+ function piActivePath(filePath) {
146
+ const entries = [];
147
+ readJsonl(filePath, (entry) => {
148
+ if (entry.type === "session")
149
+ return;
150
+ if (typeof entry.id !== "string")
151
+ return;
152
+ entries.push(entry);
153
+ });
154
+ if (entries.length === 0)
155
+ return [];
156
+ const byId = new Map();
157
+ for (const entry of entries) {
158
+ if (typeof entry.id === "string")
159
+ byId.set(entry.id, entry);
160
+ }
161
+ const leaf = entries[entries.length - 1];
162
+ if (!leaf)
163
+ return [];
164
+ const activePath = [];
165
+ let current = leaf;
166
+ const seen = new Set();
167
+ while (current) {
168
+ if (typeof current.id !== "string" || seen.has(current.id))
169
+ break;
170
+ seen.add(current.id);
171
+ activePath.unshift(current);
172
+ current =
173
+ typeof current.parentId === "string"
174
+ ? byId.get(current.parentId)
175
+ : undefined;
176
+ }
177
+ return activePath;
178
+ }
179
+ function turnFromEntry(entry) {
180
+ if (entry.type === "compaction") {
181
+ return compactionBoundary(entry.summary);
182
+ }
183
+ if (entry.type === "branch_summary") {
184
+ return syntheticTurn("[branch summary]", entry.summary);
185
+ }
186
+ if (entry.type === "custom_message") {
187
+ return buildTurn("user", entry.content);
188
+ }
189
+ if (entry.type !== "message")
190
+ return null;
191
+ const msg = entry.message;
192
+ if (!msg)
193
+ return null;
194
+ switch (msg.role) {
195
+ case "user":
196
+ return buildTurn("user", msg.content);
197
+ case "assistant":
198
+ return buildTurn("assistant", msg.content);
199
+ case "custom":
200
+ return buildTurn("user", msg.content);
201
+ case "branchSummary":
202
+ return syntheticTurn("[branch summary]", msg.summary);
203
+ case "compactionSummary":
204
+ return compactionBoundary(msg.summary);
205
+ default:
206
+ return null;
207
+ }
208
+ }
209
+ function compactionBoundary(raw) {
210
+ const summary = typeof raw === "string" ? stripInjectionTags(raw) : "";
211
+ return compactionBoundaryTurn("context compacted here; the turns above stayed on the active branch", summary);
212
+ }
213
+ function syntheticTurn(prefix, raw) {
214
+ if (typeof raw !== "string")
215
+ return null;
216
+ const text = stripInjectionTags(raw);
217
+ if (!text)
218
+ return null;
219
+ return { role: "user", text: `${prefix}\n${text}` };
220
+ }
221
+ function buildTurn(role, content) {
222
+ const parts = [];
223
+ let totalRaw = 0;
224
+ if (typeof content === "string") {
225
+ totalRaw = content.length;
226
+ const cleaned = stripInjectionTags(content);
227
+ if (cleaned)
228
+ parts.push(cleaned);
229
+ }
230
+ else if (Array.isArray(content)) {
231
+ for (const block of content) {
232
+ if (block.type !== "text" || typeof block.text !== "string")
233
+ continue;
234
+ totalRaw += block.text.length;
235
+ const cleaned = stripInjectionTags(block.text);
236
+ if (cleaned)
237
+ parts.push(cleaned);
238
+ }
239
+ }
240
+ if (parts.length === 0)
241
+ return null;
242
+ const merged = parts.join("\n\n");
243
+ if (isBootstrapTurn(merged, totalRaw))
244
+ return null;
245
+ return { role, text: merged };
246
+ }
247
+ function collectTaskEvents(entry, turnIndex, events) {
248
+ if (entry.type !== "message")
249
+ return;
250
+ const msg = entry.message;
251
+ if (!msg)
252
+ return;
253
+ if (msg.role === "bashExecution" && typeof msg.command === "string") {
254
+ pushTaskEvents(msg.command, entry.timestamp, turnIndex, events);
255
+ return;
256
+ }
257
+ if (msg.role !== "assistant" || !Array.isArray(msg.content))
258
+ return;
259
+ for (const block of msg.content) {
260
+ if (block.type !== "toolCall")
261
+ continue;
262
+ if (typeof block.name !== "string")
263
+ continue;
264
+ const toolName = block.name.toLowerCase();
265
+ if (toolName !== "bash" && toolName !== "shell")
266
+ continue;
267
+ const args = block.arguments;
268
+ if (!args || typeof args !== "object" || Array.isArray(args))
269
+ continue;
270
+ const command = args.command;
271
+ if (typeof command !== "string")
272
+ continue;
273
+ pushTaskEvents(command, entry.timestamp, turnIndex, events);
274
+ }
275
+ }
276
+ function pushTaskEvents(command, timestamp, turnIndex, events) {
277
+ const parsedAll = parseTaskPyCommandsAll(command);
278
+ for (const parsed of parsedAll) {
279
+ const ev = {
280
+ action: parsed.action,
281
+ timestamp: timestamp ?? "",
282
+ turnIndex,
283
+ ...(parsed.action === "create"
284
+ ? { slug: parsed.slug }
285
+ : { taskDir: parsed.taskDir }),
286
+ };
287
+ events.push(ev);
288
+ }
289
+ }
290
+ //# 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,76 @@
1
+ /**
2
+ * ZCode (Zhipu) persisted-session reader.
3
+ *
4
+ * ZCode stores sessions in a SQLite database at `~/.zcode/cli/db/db.sqlite`
5
+ * (WAL mode). The three tables this adapter reads are:
6
+ *
7
+ * - `session` — id / title / directory (workspace cwd) / time_created /
8
+ * time_updated / task_type
9
+ * - `message` — id / session_id / time_created / data (JSON: {role, ...})
10
+ * - `part` — message_id / time_created / data (JSON: {type, text|tool, ...})
11
+ * plus compaction markers that replace earlier dialogue with
12
+ * a summary message.
13
+ *
14
+ * The older `~/.zcode/v2/sessions/*.json` layout is abandoned by current ZCode,
15
+ * and `~/.zcode/cli/rollout/*.jsonl` is a non-persistent model-IO stream that
16
+ * gets cleaned up periodically — neither is read here. SQLite is the single
17
+ * complete source of truth (see `docs-hlaia/06-...` for the investigation).
18
+ *
19
+ * SQLite access is via the zero-dependency parser in `internal/sqlite-readonly.ts`
20
+ * — `better-sqlite3` was rejected because its native build chain broke npm
21
+ * install on Windows for the OpenCode adapter.
22
+ */
23
+ import type { DialogueTurn, MemFilter, MemSessionInfo, MemWarning, SearchHit, TaskPyEvent } from "../types.js";
24
+ interface ZcodeTextPart {
25
+ type?: string;
26
+ text?: string;
27
+ }
28
+ interface ZcodeToolPart {
29
+ type?: string;
30
+ tool?: string;
31
+ state?: {
32
+ input?: {
33
+ command?: string;
34
+ };
35
+ };
36
+ }
37
+ export declare function prepareZcodeSessionStore(dbPath: string, warnings: MemWarning[]): void;
38
+ export declare function releaseZcodeSessionStore(): void;
39
+ export declare function zcodeListSessions(f: MemFilter, warnings?: MemWarning[]): MemSessionInfo[];
40
+ /**
41
+ * Build cleaned dialogue turns from a session's messages + parts. Each message
42
+ * is one turn; its text is the concatenation of its `text`-typed parts after
43
+ * injection-tag stripping. Messages with no surviving text are dropped.
44
+ */
45
+ export declare function zcodeExtractDialogue(s: MemSessionInfo, warnings?: MemWarning[]): DialogueTurn[];
46
+ export declare function zcodeSearch(s: MemSessionInfo, kw: string, warnings?: MemWarning[]): SearchHit;
47
+ /**
48
+ * Single pass over messages + parts. Emits both the cleaned dialogue turns and
49
+ * the list of `task.py create|start` invocations found in `Bash` tool parts
50
+ * (`{type:"tool", tool:"Bash", state:{input:{command:"..."}}}`). `turnIndex`
51
+ * for each event is the turn count at the time the tool ran.
52
+ *
53
+ * Compaction: ZCode writes a summary message with a `compaction` part carrying
54
+ * `tail_start_id` / `compactBoundary`. The summarized messages remain in the
55
+ * database, so they stay in the turn pool and the summary message becomes a
56
+ * boundary marker — `task.py` boundaries from before a compaction keep pointing
57
+ * at turns that are still there.
58
+ *
59
+ * turnIndex note (differs slightly from claude/codex): in ZCode a message's
60
+ * text parts and tool parts are siblings within one message. This loop pushes
61
+ * the message's text turn *before* recording its tool events, so a tool event
62
+ * on message M has turnIndex = (turns including M's text). claude/codex
63
+ * instead record the event before pushing the text, so their turnIndex is one
64
+ * less. Both are internally self-consistent for brainstorm-window slicing
65
+ * (create and start use the same convention within a platform), so phase
66
+ * boundaries compute correctly. The ZCode ordering reflects real time order
67
+ * (the assistant writes, then the tool runs). Do not "align" this without also
68
+ * adjusting the test expectations.
69
+ */
70
+ export declare function collectZcodeTurnsAndEvents(s: MemSessionInfo, warnings?: MemWarning[]): {
71
+ turns: DialogueTurn[];
72
+ events: TaskPyEvent[];
73
+ };
74
+ /** Re-exported so callers needing loose shapes can import from one place. */
75
+ export type { ZcodeTextPart, ZcodeToolPart };
76
+ //# sourceMappingURL=zcode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zcode.d.ts","sourceRoot":"","sources":["../../../src/mem/adapters/zcode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAmBH,OAAO,KAAK,EAEV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,UAAU,EACV,SAAS,EACT,WAAW,EACZ,MAAM,aAAa,CAAC;AAQrB,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CAC1C;AAkND,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,UAAU,EAAE,GACrB,IAAI,CAEN;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AA2ID,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,SAAS,EACZ,QAAQ,GAAE,UAAU,EAAO,GAC1B,cAAc,EAAE,CA4DlB;AAUD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,EAAE,cAAc,EACjB,QAAQ,GAAE,UAAU,EAAO,GAC1B,YAAY,EAAE,CAehB;AAED,wBAAgB,WAAW,CACzB,CAAC,EAAE,cAAc,EACjB,EAAE,EAAE,MAAM,EACV,QAAQ,GAAE,UAAU,EAAO,GAC1B,SAAS,CAEX;AAID;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,0BAA0B,CACxC,CAAC,EAAE,cAAc,EACjB,QAAQ,GAAE,UAAU,EAAO,GAC1B;IACD,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAyCA;AAED,6EAA6E;AAC7E,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC"}