trellis-hgl-core 0.6.0-beta.18

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 (202) 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 +106 -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 +44 -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 +64 -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 +203 -0
  79. package/dist/channel/internal/store/events.d.ts.map +1 -0
  80. package/dist/channel/internal/store/events.js +185 -0
  81. package/dist/channel/internal/store/events.js.map +1 -0
  82. package/dist/channel/internal/store/filter.d.ts +22 -0
  83. package/dist/channel/internal/store/filter.d.ts.map +1 -0
  84. package/dist/channel/internal/store/filter.js +78 -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 +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 +49 -0
  115. package/dist/channel/internal/store/worker-state.d.ts.map +1 -0
  116. package/dist/channel/internal/store/worker-state.js +207 -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 +252 -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/context.d.ts +23 -0
  135. package/dist/mem/context.d.ts.map +1 -0
  136. package/dist/mem/context.js +118 -0
  137. package/dist/mem/context.js.map +1 -0
  138. package/dist/mem/dialogue.d.ts +17 -0
  139. package/dist/mem/dialogue.d.ts.map +1 -0
  140. package/dist/mem/dialogue.js +51 -0
  141. package/dist/mem/dialogue.js.map +1 -0
  142. package/dist/mem/filter.d.ts +31 -0
  143. package/dist/mem/filter.d.ts.map +1 -0
  144. package/dist/mem/filter.js +70 -0
  145. package/dist/mem/filter.js.map +1 -0
  146. package/dist/mem/index.d.ts +18 -0
  147. package/dist/mem/index.d.ts.map +1 -0
  148. package/dist/mem/index.js +17 -0
  149. package/dist/mem/index.js.map +1 -0
  150. package/dist/mem/internal/jsonl.d.ts +35 -0
  151. package/dist/mem/internal/jsonl.d.ts.map +1 -0
  152. package/dist/mem/internal/jsonl.js +125 -0
  153. package/dist/mem/internal/jsonl.js.map +1 -0
  154. package/dist/mem/internal/paths.d.ts +18 -0
  155. package/dist/mem/internal/paths.d.ts.map +1 -0
  156. package/dist/mem/internal/paths.js +51 -0
  157. package/dist/mem/internal/paths.js.map +1 -0
  158. package/dist/mem/phase.d.ts +45 -0
  159. package/dist/mem/phase.d.ts.map +1 -0
  160. package/dist/mem/phase.js +220 -0
  161. package/dist/mem/phase.js.map +1 -0
  162. package/dist/mem/projects.d.ts +13 -0
  163. package/dist/mem/projects.d.ts.map +1 -0
  164. package/dist/mem/projects.js +37 -0
  165. package/dist/mem/projects.js.map +1 -0
  166. package/dist/mem/search.d.ts +32 -0
  167. package/dist/mem/search.d.ts.map +1 -0
  168. package/dist/mem/search.js +125 -0
  169. package/dist/mem/search.js.map +1 -0
  170. package/dist/mem/sessions.d.ts +37 -0
  171. package/dist/mem/sessions.d.ts.map +1 -0
  172. package/dist/mem/sessions.js +270 -0
  173. package/dist/mem/sessions.js.map +1 -0
  174. package/dist/mem/types.d.ts +176 -0
  175. package/dist/mem/types.d.ts.map +1 -0
  176. package/dist/mem/types.js +10 -0
  177. package/dist/mem/types.js.map +1 -0
  178. package/dist/task/index.d.ts +9 -0
  179. package/dist/task/index.d.ts.map +1 -0
  180. package/dist/task/index.js +9 -0
  181. package/dist/task/index.js.map +1 -0
  182. package/dist/task/paths.d.ts +37 -0
  183. package/dist/task/paths.d.ts.map +1 -0
  184. package/dist/task/paths.js +49 -0
  185. package/dist/task/paths.js.map +1 -0
  186. package/dist/task/phase.d.ts +27 -0
  187. package/dist/task/phase.d.ts.map +1 -0
  188. package/dist/task/phase.js +24 -0
  189. package/dist/task/phase.js.map +1 -0
  190. package/dist/task/records.d.ts +39 -0
  191. package/dist/task/records.d.ts.map +1 -0
  192. package/dist/task/records.js +89 -0
  193. package/dist/task/records.js.map +1 -0
  194. package/dist/task/schema.d.ts +77 -0
  195. package/dist/task/schema.d.ts.map +1 -0
  196. package/dist/task/schema.js +220 -0
  197. package/dist/task/schema.js.map +1 -0
  198. package/dist/testing/index.d.ts +2 -0
  199. package/dist/testing/index.d.ts.map +1 -0
  200. package/dist/testing/index.js +4 -0
  201. package/dist/testing/index.js.map +1 -0
  202. package/package.json +78 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/mem/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAiB,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzE;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAGnD;AAED;;;8EAG8E;AAC9E,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAYpD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,EAAE,EAAE,MAAM,EACV,WAAW,SAAI,EACf,UAAU,SAAM,GACf,SAAS,CAqFX"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Search scoring and text matching over cleaned dialogue.
3
+ */
4
+ /**
5
+ * Weighted-density relevance score:
6
+ * `(3 * userCount + asstCount) / totalTurns`
7
+ * Higher = the session is more topically concentrated on the query AND the
8
+ * user themselves brought it up (user hits weighted ×3 — the user's own words
9
+ * anchor "what they actually cared about"; assistant elaboration is downstream
10
+ * noise). Normalized by `totalTurns` so a tight short session can outrank a
11
+ * sprawling long one.
12
+ */
13
+ export function relevanceScore(h) {
14
+ if (h.totalTurns === 0)
15
+ return 0;
16
+ return (3 * h.userCount + h.asstCount) / h.totalTurns;
17
+ }
18
+ /** Find the paragraph-aligned chunk surrounding a hit position. A "chunk" is
19
+ * the contiguous text bounded by the nearest blank-line breaks (`\n\n`) on
20
+ * either side. If the natural paragraph exceeds `maxChars`, fall back to a
21
+ * centered char window — and report the truncation so callers can mark it. */
22
+ export function chunkAround(text, hitIdx, maxChars) {
23
+ const startPara = text.lastIndexOf("\n\n", hitIdx);
24
+ let start = startPara === -1 ? 0 : startPara + 2;
25
+ const endPara = text.indexOf("\n\n", hitIdx);
26
+ let end = endPara === -1 ? text.length : endPara;
27
+ let truncated = false;
28
+ if (end - start > maxChars) {
29
+ start = Math.max(0, hitIdx - Math.floor(maxChars / 2));
30
+ end = Math.min(text.length, hitIdx + Math.ceil(maxChars / 2));
31
+ truncated = true;
32
+ }
33
+ return { start, end, truncated };
34
+ }
35
+ /**
36
+ * Multi-token AND grep over cleaned dialogue. Whitespace-split tokens; a turn
37
+ * matches iff every token (case-insensitive) appears in it. `count` is the
38
+ * total occurrence count across all tokens within matching turns. Excerpts are
39
+ * paragraph-aligned chunks around each hit, deduped by chunk start; user-role
40
+ * chunks are listed before assistant chunks.
41
+ */
42
+ export function searchInDialogue(turns, kw, maxExcerpts = 3, chunkChars = 400) {
43
+ const tokens = kw.toLowerCase().split(/\s+/).filter(Boolean);
44
+ if (tokens.length === 0) {
45
+ return {
46
+ count: 0,
47
+ userCount: 0,
48
+ asstCount: 0,
49
+ totalTurns: turns.length,
50
+ excerpts: [],
51
+ };
52
+ }
53
+ let userCount = 0;
54
+ let asstCount = 0;
55
+ const userExcerpts = [];
56
+ const asstExcerpts = [];
57
+ for (const t of turns) {
58
+ const hay = t.text.toLowerCase();
59
+ if (!tokens.every((tok) => hay.includes(tok)))
60
+ continue;
61
+ const hitPositions = [];
62
+ const tokenFreq = new Map();
63
+ let turnHits = 0;
64
+ for (const tok of tokens) {
65
+ let from = 0;
66
+ let n = 0;
67
+ while (true) {
68
+ const idx = hay.indexOf(tok, from);
69
+ if (idx === -1)
70
+ break;
71
+ n++;
72
+ turnHits++;
73
+ hitPositions.push({ idx, tok });
74
+ from = idx + tok.length;
75
+ }
76
+ tokenFreq.set(tok, n);
77
+ }
78
+ if (t.role === "user")
79
+ userCount += turnHits;
80
+ else
81
+ asstCount += turnHits;
82
+ hitPositions.sort((a, b) => a.idx - b.idx);
83
+ const candidates = [];
84
+ const seenStarts = new Set();
85
+ for (const { idx, tok } of hitPositions) {
86
+ const { start, end, truncated } = chunkAround(t.text, idx, chunkChars);
87
+ if (seenStarts.has(start))
88
+ continue;
89
+ seenStarts.add(start);
90
+ const slice = hay.slice(start, end);
91
+ const coverage = tokens.filter((tk) => slice.includes(tk)).length;
92
+ const rarity = 1 / (tokenFreq.get(tok) ?? 1);
93
+ candidates.push({ start, end, truncated, coverage, rarity });
94
+ }
95
+ candidates.sort((a, b) => {
96
+ if (b.coverage !== a.coverage)
97
+ return b.coverage - a.coverage;
98
+ if (b.rarity !== a.rarity)
99
+ return b.rarity - a.rarity;
100
+ return a.start - b.start;
101
+ });
102
+ for (const c of candidates) {
103
+ let snippet = t.text.slice(c.start, c.end).trim();
104
+ if (c.truncated) {
105
+ if (c.start > 0)
106
+ snippet = "…" + snippet;
107
+ if (c.end < t.text.length)
108
+ snippet += "…";
109
+ }
110
+ (t.role === "user" ? userExcerpts : asstExcerpts).push({
111
+ role: t.role,
112
+ snippet,
113
+ });
114
+ }
115
+ }
116
+ const excerpts = [...userExcerpts, ...asstExcerpts].slice(0, maxExcerpts);
117
+ return {
118
+ count: userCount + asstCount,
119
+ userCount,
120
+ asstCount,
121
+ totalTurns: turns.length,
122
+ excerpts,
123
+ };
124
+ }
125
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/mem/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Session orchestration: source fan-out, platform dispatch, sub-agent child
3
+ * merging, session lookup, phase slicing, and the public `listMemSessions`,
4
+ * `searchMemSessions`, and `extractMemDialogue` entry points.
5
+ */
6
+ import type { DialogueTurn, ExtractMemDialogueOptions, ListMemSessionsOptions, MemExtractResult, MemFilter, MemSearchResult, MemSessionInfo, SearchMemSessionsOptions } from "./types.js";
7
+ /** Internal wide limit — `limit` only caps display; search recall and session
8
+ * lookup must scan everything. */
9
+ export declare const WIDE_LIMIT = 1000000;
10
+ /** Thrown by `readMemContext` / `extractMemDialogue` when the requested
11
+ * session id cannot be resolved. */
12
+ export declare class MemSessionNotFoundError extends Error {
13
+ readonly sessionId: string;
14
+ constructor(sessionId: string);
15
+ }
16
+ /** Fill platform / limit defaults so internal helpers see a complete filter. */
17
+ export declare function resolveFilter(filter?: MemFilter): MemFilter;
18
+ /** Fan out to every in-scope platform, merge by recency, cap at `f.limit`. */
19
+ export declare function listAll(f: MemFilter): MemSessionInfo[];
20
+ declare function extractDialogue(s: MemSessionInfo): DialogueTurn[];
21
+ /** Build a parent → descendants index (transitively flattened) for OpenCode
22
+ * sub-agent chains. Other platforms have no native `parent_id`. */
23
+ declare function buildChildIndex(sessions: readonly MemSessionInfo[]): Map<string, MemSessionInfo[]>;
24
+ /** Resolve a session by exact id or id prefix, scanning every project. */
25
+ export declare function findSessionById(id: string, f: MemFilter): MemSessionInfo | undefined;
26
+ /** List session metadata across Claude / Codex / OpenCode, sorted by recency
27
+ * and capped at the filter's `limit` (default 50). */
28
+ export declare function listMemSessions(options?: ListMemSessionsOptions): MemSessionInfo[];
29
+ /** Multi-token AND grep over cleaned dialogue across all matching sessions,
30
+ * ranked by weighted-density relevance. `matches` is capped at the filter's
31
+ * `limit`; `totalMatches` is the full match count. */
32
+ export declare function searchMemSessions(options: SearchMemSessionsOptions): MemSearchResult;
33
+ /** Dump cleaned dialogue for one session, optionally sliced by brainstorm
34
+ * phase and filtered by a multi-token AND `grep`. */
35
+ export declare function extractMemDialogue(options: ExtractMemDialogueOptions): MemExtractResult;
36
+ export { extractDialogue, buildChildIndex };
37
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/mem/sessions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqBH,OAAO,KAAK,EACV,YAAY,EACZ,yBAAyB,EACzB,sBAAsB,EAEtB,gBAAgB,EAChB,SAAS,EAGT,eAAe,EACf,cAAc,EAGd,wBAAwB,EAEzB,MAAM,YAAY,CAAC;AAEpB;kCACkC;AAClC,eAAO,MAAM,UAAU,UAAY,CAAC;AAEpC;oCACoC;AACpC,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBACf,SAAS,EAAE,MAAM;CAK9B;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAQ3D;AAED,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,cAAc,EAAE,CAYtD;AAED,iBAAS,eAAe,CAAC,CAAC,EAAE,cAAc,GAAG,YAAY,EAAE,CAS1D;AA2BD;mEACmE;AACnE,iBAAS,eAAe,CACtB,QAAQ,EAAE,SAAS,cAAc,EAAE,GAClC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAqB/B;AAcD,0EAA0E;AAC1E,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,SAAS,GACX,cAAc,GAAG,SAAS,CAI5B;AAyFD;sDACsD;AACtD,wBAAgB,eAAe,CAC7B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,cAAc,EAAE,CAElB;AAED;;sDAEsD;AACtD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,eAAe,CA0CjB;AAED;qDACqD;AACrD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,yBAAyB,GACjC,gBAAgB,CA2BlB;AAGD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Session orchestration: source fan-out, platform dispatch, sub-agent child
3
+ * merging, session lookup, phase slicing, and the public `listMemSessions`,
4
+ * `searchMemSessions`, and `extractMemDialogue` entry points.
5
+ */
6
+ import { claudeExtractDialogue, claudeListSessions, claudeSearch, collectClaudeTurnsAndEvents, } from "./adapters/claude.js";
7
+ import { codexExtractDialogue, codexListSessions, codexSearch, collectCodexTurnsAndEvents, } from "./adapters/codex.js";
8
+ import { opencodeExtractDialogue, opencodeListSessions, opencodeSearch, } from "./adapters/opencode.js";
9
+ import { buildBrainstormWindows } from "./phase.js";
10
+ import { relevanceScore, searchInDialogue } from "./search.js";
11
+ /** Internal wide limit — `limit` only caps display; search recall and session
12
+ * lookup must scan everything. */
13
+ export const WIDE_LIMIT = 1_000_000;
14
+ /** Thrown by `readMemContext` / `extractMemDialogue` when the requested
15
+ * session id cannot be resolved. */
16
+ export class MemSessionNotFoundError extends Error {
17
+ sessionId;
18
+ constructor(sessionId) {
19
+ super(`mem session not found: ${sessionId}`);
20
+ this.name = "MemSessionNotFoundError";
21
+ this.sessionId = sessionId;
22
+ }
23
+ }
24
+ /** Fill platform / limit defaults so internal helpers see a complete filter. */
25
+ export function resolveFilter(filter) {
26
+ return {
27
+ platform: filter?.platform ?? "all",
28
+ since: filter?.since,
29
+ until: filter?.until,
30
+ cwd: filter?.cwd,
31
+ limit: filter?.limit ?? 50,
32
+ };
33
+ }
34
+ /** Fan out to every in-scope platform, merge by recency, cap at `f.limit`. */
35
+ export function listAll(f) {
36
+ const all = [];
37
+ if (f.platform === "all" || f.platform === "claude")
38
+ all.push(...claudeListSessions(f));
39
+ if (f.platform === "all" || f.platform === "codex")
40
+ all.push(...codexListSessions(f));
41
+ if (f.platform === "all" || f.platform === "opencode")
42
+ all.push(...opencodeListSessions(f));
43
+ all.sort((a, b) => (b.updated ?? b.created ?? "").localeCompare(a.updated ?? a.created ?? ""));
44
+ return all.slice(0, f.limit);
45
+ }
46
+ function extractDialogue(s) {
47
+ switch (s.platform) {
48
+ case "claude":
49
+ return claudeExtractDialogue(s);
50
+ case "codex":
51
+ return codexExtractDialogue(s);
52
+ case "opencode":
53
+ return opencodeExtractDialogue(s);
54
+ }
55
+ }
56
+ function searchSession(s, kw) {
57
+ switch (s.platform) {
58
+ case "claude":
59
+ return claudeSearch(s, kw);
60
+ case "codex":
61
+ return codexSearch(s, kw);
62
+ case "opencode":
63
+ return opencodeSearch(kw);
64
+ }
65
+ }
66
+ function collectTurnsAndEvents(s) {
67
+ switch (s.platform) {
68
+ case "claude":
69
+ return collectClaudeTurnsAndEvents(s);
70
+ case "codex":
71
+ return collectCodexTurnsAndEvents(s);
72
+ case "opencode":
73
+ return { turns: opencodeExtractDialogue(s), events: [] };
74
+ }
75
+ }
76
+ /** Build a parent → descendants index (transitively flattened) for OpenCode
77
+ * sub-agent chains. Other platforms have no native `parent_id`. */
78
+ function buildChildIndex(sessions) {
79
+ const directChildren = new Map();
80
+ for (const s of sessions) {
81
+ if (!s.parent_id)
82
+ continue;
83
+ const list = directChildren.get(s.parent_id) ?? [];
84
+ list.push(s);
85
+ directChildren.set(s.parent_id, list);
86
+ }
87
+ const out = new Map();
88
+ for (const [pid] of directChildren) {
89
+ const stack = [...(directChildren.get(pid) ?? [])];
90
+ const flat = [];
91
+ while (stack.length) {
92
+ const cur = stack.pop();
93
+ if (cur === undefined)
94
+ break;
95
+ flat.push(cur);
96
+ for (const c of directChildren.get(cur.id) ?? [])
97
+ stack.push(c);
98
+ }
99
+ out.set(pid, flat);
100
+ }
101
+ return out;
102
+ }
103
+ function searchSessionWithChildren(s, kw, childIndex) {
104
+ const children = childIndex.get(s.id) ?? [];
105
+ if (children.length === 0)
106
+ return searchSession(s, kw);
107
+ const merged = [...extractDialogue(s)];
108
+ for (const c of children)
109
+ merged.push(...extractDialogue(c));
110
+ return searchInDialogue(merged, kw);
111
+ }
112
+ /** Resolve a session by exact id or id prefix, scanning every project. */
113
+ export function findSessionById(id, f) {
114
+ const wide = { ...f, cwd: undefined, limit: WIDE_LIMIT };
115
+ const all = listAll(wide);
116
+ return all.find((s) => s.id === id) ?? all.find((s) => s.id.startsWith(id));
117
+ }
118
+ /** Slice cleaned dialogue by phase. Claude / Codex have native boundary
119
+ * detection; OpenCode degrades to "all turns + warning". */
120
+ function sliceMemPhase(s, phase) {
121
+ const warnings = [];
122
+ if (phase === "all" || s.platform === "opencode") {
123
+ if (phase !== "all" && s.platform === "opencode") {
124
+ warnings.push({
125
+ code: "opencode-phase-unsupported",
126
+ message: `--phase ${phase} on platform=opencode is not yet supported; ` +
127
+ `returning full dialogue.`,
128
+ });
129
+ }
130
+ const turns = extractDialogue(s);
131
+ return {
132
+ groups: [{ label: null, turns }],
133
+ windows: [],
134
+ totalTurns: turns.length,
135
+ warnings,
136
+ };
137
+ }
138
+ const { turns, events } = collectTurnsAndEvents(s);
139
+ const windows = buildBrainstormWindows(events, turns.length);
140
+ if (phase === "brainstorm") {
141
+ if (windows.length === 0) {
142
+ warnings.push({
143
+ code: "no-brainstorm-boundary",
144
+ message: `no task.py create/start boundary found in session — returning full dialogue.`,
145
+ });
146
+ return {
147
+ groups: [{ label: null, turns }],
148
+ windows: [],
149
+ totalTurns: turns.length,
150
+ warnings,
151
+ };
152
+ }
153
+ const groups = windows.map((w) => ({
154
+ label: w.label,
155
+ turns: turns.slice(w.startTurn, w.endTurn),
156
+ }));
157
+ return { groups, windows, totalTurns: turns.length, warnings };
158
+ }
159
+ // phase === "implement": all turns NOT inside any brainstorm window.
160
+ if (windows.length === 0) {
161
+ warnings.push({
162
+ code: "no-brainstorm-boundary",
163
+ message: `no task.py create/start boundary found in session — implement phase is empty.`,
164
+ });
165
+ return {
166
+ groups: [{ label: null, turns: [] }],
167
+ windows: [],
168
+ totalTurns: turns.length,
169
+ warnings,
170
+ };
171
+ }
172
+ const covered = new Set();
173
+ for (const w of windows) {
174
+ for (let i = w.startTurn; i < w.endTurn; i++)
175
+ covered.add(i);
176
+ }
177
+ const implementTurns = [];
178
+ for (let i = 0; i < turns.length; i++) {
179
+ if (!covered.has(i)) {
180
+ const t = turns[i];
181
+ if (t)
182
+ implementTurns.push(t);
183
+ }
184
+ }
185
+ return {
186
+ groups: [{ label: null, turns: implementTurns }],
187
+ windows,
188
+ totalTurns: turns.length,
189
+ warnings,
190
+ };
191
+ }
192
+ // ---------- public API ----------
193
+ /** List session metadata across Claude / Codex / OpenCode, sorted by recency
194
+ * and capped at the filter's `limit` (default 50). */
195
+ export function listMemSessions(options) {
196
+ return listAll(resolveFilter(options?.filter));
197
+ }
198
+ /** Multi-token AND grep over cleaned dialogue across all matching sessions,
199
+ * ranked by weighted-density relevance. `matches` is capped at the filter's
200
+ * `limit`; `totalMatches` is the full match count. */
201
+ export function searchMemSessions(options) {
202
+ const f = resolveFilter(options.filter);
203
+ const kw = options.keyword;
204
+ const includeChildren = options.includeChildren === true;
205
+ const candidates = listAll({ ...f, limit: WIDE_LIMIT });
206
+ const childIndex = includeChildren
207
+ ? buildChildIndex(candidates)
208
+ : new Map();
209
+ const candidateIds = new Set(candidates.map((s) => s.id));
210
+ const isAbsorbedChild = (s) => includeChildren &&
211
+ s.parent_id !== undefined &&
212
+ candidateIds.has(s.parent_id);
213
+ const matches = [];
214
+ for (const s of candidates) {
215
+ if (isAbsorbedChild(s))
216
+ continue;
217
+ const hit = includeChildren
218
+ ? searchSessionWithChildren(s, kw, childIndex)
219
+ : searchSession(s, kw);
220
+ if (hit.count === 0)
221
+ continue;
222
+ matches.push({
223
+ session: s,
224
+ hit,
225
+ score: relevanceScore(hit),
226
+ descendantsMerged: childIndex.get(s.id)?.length ?? 0,
227
+ });
228
+ }
229
+ matches.sort((a, b) => {
230
+ if (b.score !== a.score)
231
+ return b.score - a.score;
232
+ if (b.hit.count !== a.hit.count)
233
+ return b.hit.count - a.hit.count;
234
+ return (b.session.updated ?? b.session.created ?? "").localeCompare(a.session.updated ?? a.session.created ?? "");
235
+ });
236
+ return {
237
+ matches: matches.slice(0, f.limit),
238
+ totalMatches: matches.length,
239
+ warnings: [],
240
+ };
241
+ }
242
+ /** Dump cleaned dialogue for one session, optionally sliced by brainstorm
243
+ * phase and filtered by a multi-token AND `grep`. */
244
+ export function extractMemDialogue(options) {
245
+ const f = resolveFilter(options.filter);
246
+ const phase = options.phase ?? "all";
247
+ const s = findSessionById(options.sessionId, f);
248
+ if (!s)
249
+ throw new MemSessionNotFoundError(options.sessionId);
250
+ const slice = sliceMemPhase(s, phase);
251
+ const grepLc = typeof options.grep === "string" ? options.grep.toLowerCase() : undefined;
252
+ const filterTurns = (turns) => grepLc ? turns.filter((t) => t.text.toLowerCase().includes(grepLc)) : turns;
253
+ const groups = slice.groups.map((g) => ({
254
+ label: g.label,
255
+ turns: filterTurns(g.turns),
256
+ }));
257
+ const flat = groups.flatMap((g) => g.turns);
258
+ return {
259
+ session: s,
260
+ phase,
261
+ windows: slice.windows,
262
+ totalTurns: slice.totalTurns,
263
+ groups,
264
+ turns: flat,
265
+ warnings: slice.warnings,
266
+ };
267
+ }
268
+ // Re-exports needed by sibling orchestration modules.
269
+ export { extractDialogue, buildChildIndex };
270
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/mem/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Public input / output types for `@mindfoldhq/trellis-core/mem`.
3
+ *
4
+ * This model serves persisted AI-session retrieval and dialogue-context
5
+ * extraction only. It is intentionally separate from the channel event schema:
6
+ * channel keeps its own event log as the source of truth, and v1 mem never
7
+ * reads channel events.
8
+ */
9
+ export type MemSourceKind = "claude" | "codex" | "opencode";
10
+ export type MemSourceFilter = MemSourceKind | "all";
11
+ export type MemPhase = "brainstorm" | "implement" | "all";
12
+ export type DialogueRole = "user" | "assistant";
13
+ export interface DialogueTurn {
14
+ role: DialogueRole;
15
+ text: string;
16
+ }
17
+ /**
18
+ * Cross-cutting session selection filter. Every field is optional — `platform`
19
+ * defaults to `"all"` and `limit` defaults to `50` when omitted. `cwd` scopes
20
+ * to a project directory (and its descendants); leave it `undefined` for a
21
+ * global search.
22
+ */
23
+ export interface MemFilter {
24
+ platform?: MemSourceFilter;
25
+ since?: Date;
26
+ until?: Date;
27
+ cwd?: string;
28
+ limit?: number;
29
+ }
30
+ /** Unified session metadata across platforms. JSON field names (`platform`,
31
+ * `parent_id`, `filePath`) are kept stable for user-visible output. */
32
+ export interface MemSessionInfo {
33
+ platform: MemSourceKind;
34
+ id: string;
35
+ title?: string;
36
+ cwd?: string;
37
+ created?: string;
38
+ updated?: string;
39
+ filePath: string;
40
+ /** OpenCode only: parent session id (sub-agent chain). */
41
+ parent_id?: string;
42
+ }
43
+ export interface SearchExcerpt {
44
+ role: DialogueRole;
45
+ snippet: string;
46
+ }
47
+ /** Per-session search hit: occurrence counts plus paragraph-aligned excerpts. */
48
+ export interface SearchHit {
49
+ /** Total token occurrences across all matching turns. */
50
+ count: number;
51
+ /** Breakdown: user-turn occurrences. */
52
+ userCount: number;
53
+ /** Breakdown: assistant-turn occurrences. */
54
+ asstCount: number;
55
+ /** Size of the cleaned dialogue (denominator for relevance density). */
56
+ totalTurns: number;
57
+ excerpts: SearchExcerpt[];
58
+ }
59
+ /** Non-fatal warning surfaced from a core call — the caller decides how (and
60
+ * whether) to render it. */
61
+ export interface MemWarning {
62
+ code: string;
63
+ message: string;
64
+ }
65
+ export interface MemSearchMatch {
66
+ session: MemSessionInfo;
67
+ /** Weighted-density relevance score. */
68
+ score: number;
69
+ hit: SearchHit;
70
+ /** Sub-agent descendants merged into this match (OpenCode `--include-children`). */
71
+ descendantsMerged: number;
72
+ }
73
+ export interface MemSearchResult {
74
+ /** Ranked matches, already capped to the filter's `limit`. */
75
+ matches: MemSearchMatch[];
76
+ /** Total matching sessions before the display cap. */
77
+ totalMatches: number;
78
+ warnings: MemWarning[];
79
+ }
80
+ export interface MemContextTurn {
81
+ idx: number;
82
+ role: DialogueRole;
83
+ text: string;
84
+ isHit: boolean;
85
+ }
86
+ export interface MemContextResult {
87
+ session: MemSessionInfo;
88
+ query?: string;
89
+ totalTurns: number;
90
+ totalHitTurns: number;
91
+ mergedChildren: number;
92
+ budgetUsed: number;
93
+ maxChars: number;
94
+ turns: MemContextTurn[];
95
+ warnings: MemWarning[];
96
+ }
97
+ export interface BrainstormWindow {
98
+ label: string;
99
+ /** inclusive */
100
+ startTurn: number;
101
+ /** exclusive */
102
+ endTurn: number;
103
+ }
104
+ export interface MemDialogueGroup {
105
+ label: string | null;
106
+ turns: DialogueTurn[];
107
+ }
108
+ export interface MemExtractResult {
109
+ session: MemSessionInfo;
110
+ phase: MemPhase;
111
+ windows: BrainstormWindow[];
112
+ /** Total turns in the underlying cleaned dialogue, before any `grep` filter. */
113
+ totalTurns: number;
114
+ /** Per-window labeled groups (single unlabeled group for `phase: "all"`). */
115
+ groups: MemDialogueGroup[];
116
+ /** Flat concatenation of all groups' turns. */
117
+ turns: DialogueTurn[];
118
+ warnings: MemWarning[];
119
+ }
120
+ export interface MemProjectSummary {
121
+ cwd: string;
122
+ last_active: string;
123
+ sessions: number;
124
+ by_platform: Record<MemSourceKind, number>;
125
+ }
126
+ /** Parsed `task.py create|start` invocation recovered from a raw shell call. */
127
+ export type ParsedTaskPyCommand = {
128
+ action: "create";
129
+ slug?: string;
130
+ titleArg?: string;
131
+ } | {
132
+ action: "start";
133
+ taskDir?: string;
134
+ };
135
+ export interface TaskPyEvent {
136
+ action: "create" | "start";
137
+ timestamp: string;
138
+ /** Index into the cleaned `DialogueTurn[]` at the time the shell call ran. */
139
+ turnIndex: number;
140
+ slug?: string;
141
+ taskDir?: string;
142
+ }
143
+ export interface ListMemSessionsOptions {
144
+ filter?: MemFilter;
145
+ }
146
+ export interface SearchMemSessionsOptions {
147
+ keyword: string;
148
+ filter?: MemFilter;
149
+ /** Merge OpenCode sub-agent descendants into their parent before searching. */
150
+ includeChildren?: boolean;
151
+ }
152
+ export interface ReadMemContextOptions {
153
+ sessionId: string;
154
+ filter?: MemFilter;
155
+ /** Multi-token AND keyword used to rank and anchor hit turns. */
156
+ grep?: string;
157
+ /** Number of hit turns to surface (default 3). */
158
+ turns?: number;
159
+ /** Turns of surrounding context on either side of each hit (default 1). */
160
+ around?: number;
161
+ /** Total character budget (default 6000). */
162
+ maxChars?: number;
163
+ includeChildren?: boolean;
164
+ }
165
+ export interface ExtractMemDialogueOptions {
166
+ sessionId: string;
167
+ filter?: MemFilter;
168
+ /** Phase slice (default `"all"`). */
169
+ phase?: MemPhase;
170
+ /** Multi-token AND substring filter applied after phase slicing. */
171
+ grep?: string;
172
+ }
173
+ export interface ListMemProjectsOptions {
174
+ filter?: MemFilter;
175
+ }
176
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mem/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Public input / output types for `@mindfoldhq/trellis-core/mem`.
3
+ *
4
+ * This model serves persisted AI-session retrieval and dialogue-context
5
+ * extraction only. It is intentionally separate from the channel event schema:
6
+ * channel keeps its own event log as the source of truth, and v1 mem never
7
+ * reads channel events.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mem/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}