@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.
- package/LICENSE +235 -0
- package/dist/channel/api/assert.d.ts +3 -0
- package/dist/channel/api/assert.d.ts.map +1 -0
- package/dist/channel/api/assert.js +11 -0
- package/dist/channel/api/assert.js.map +1 -0
- package/dist/channel/api/context.d.ts +21 -0
- package/dist/channel/api/context.d.ts.map +1 -0
- package/dist/channel/api/context.js +99 -0
- package/dist/channel/api/context.js.map +1 -0
- package/dist/channel/api/create.d.ts +9 -0
- package/dist/channel/api/create.d.ts.map +1 -0
- package/dist/channel/api/create.js +104 -0
- package/dist/channel/api/create.js.map +1 -0
- package/dist/channel/api/inbox.d.ts +51 -0
- package/dist/channel/api/inbox.d.ts.map +1 -0
- package/dist/channel/api/inbox.js +176 -0
- package/dist/channel/api/inbox.js.map +1 -0
- package/dist/channel/api/interrupt.d.ts +31 -0
- package/dist/channel/api/interrupt.d.ts.map +1 -0
- package/dist/channel/api/interrupt.js +98 -0
- package/dist/channel/api/interrupt.js.map +1 -0
- package/dist/channel/api/post-thread.d.ts +14 -0
- package/dist/channel/api/post-thread.d.ts.map +1 -0
- package/dist/channel/api/post-thread.js +109 -0
- package/dist/channel/api/post-thread.js.map +1 -0
- package/dist/channel/api/read.d.ts +17 -0
- package/dist/channel/api/read.d.ts.map +1 -0
- package/dist/channel/api/read.js +44 -0
- package/dist/channel/api/read.js.map +1 -0
- package/dist/channel/api/resolve.d.ts +21 -0
- package/dist/channel/api/resolve.d.ts.map +1 -0
- package/dist/channel/api/resolve.js +28 -0
- package/dist/channel/api/resolve.js.map +1 -0
- package/dist/channel/api/runtime.d.ts +70 -0
- package/dist/channel/api/runtime.d.ts.map +1 -0
- package/dist/channel/api/runtime.js +11 -0
- package/dist/channel/api/runtime.js.map +1 -0
- package/dist/channel/api/send.d.ts +4 -0
- package/dist/channel/api/send.d.ts.map +1 -0
- package/dist/channel/api/send.js +52 -0
- package/dist/channel/api/send.js.map +1 -0
- package/dist/channel/api/spawn.d.ts +13 -0
- package/dist/channel/api/spawn.d.ts.map +1 -0
- package/dist/channel/api/spawn.js +52 -0
- package/dist/channel/api/spawn.js.map +1 -0
- package/dist/channel/api/title.d.ts +5 -0
- package/dist/channel/api/title.d.ts.map +1 -0
- package/dist/channel/api/title.js +40 -0
- package/dist/channel/api/title.js.map +1 -0
- package/dist/channel/api/types.d.ts +65 -0
- package/dist/channel/api/types.d.ts.map +1 -0
- package/dist/channel/api/types.js +2 -0
- package/dist/channel/api/types.js.map +1 -0
- package/dist/channel/api/watch-channels.d.ts +40 -0
- package/dist/channel/api/watch-channels.d.ts.map +1 -0
- package/dist/channel/api/watch-channels.js +143 -0
- package/dist/channel/api/watch-channels.js.map +1 -0
- package/dist/channel/api/watch.d.ts +11 -0
- package/dist/channel/api/watch.d.ts.map +1 -0
- package/dist/channel/api/watch.js +17 -0
- package/dist/channel/api/watch.js.map +1 -0
- package/dist/channel/api/workers.d.ts +69 -0
- package/dist/channel/api/workers.d.ts.map +1 -0
- package/dist/channel/api/workers.js +143 -0
- package/dist/channel/api/workers.js.map +1 -0
- package/dist/channel/index.d.ts +38 -0
- package/dist/channel/index.d.ts.map +1 -0
- package/dist/channel/index.js +23 -0
- package/dist/channel/index.js.map +1 -0
- package/dist/channel/internal/store/channel-metadata.d.ts +23 -0
- package/dist/channel/internal/store/channel-metadata.d.ts.map +1 -0
- package/dist/channel/internal/store/channel-metadata.js +94 -0
- package/dist/channel/internal/store/channel-metadata.js.map +1 -0
- package/dist/channel/internal/store/delivery.d.ts +27 -0
- package/dist/channel/internal/store/delivery.d.ts.map +1 -0
- package/dist/channel/internal/store/delivery.js +37 -0
- package/dist/channel/internal/store/delivery.js.map +1 -0
- package/dist/channel/internal/store/events.d.ts +215 -0
- package/dist/channel/internal/store/events.d.ts.map +1 -0
- package/dist/channel/internal/store/events.js +204 -0
- package/dist/channel/internal/store/events.js.map +1 -0
- package/dist/channel/internal/store/filter.d.ts +21 -0
- package/dist/channel/internal/store/filter.d.ts.map +1 -0
- package/dist/channel/internal/store/filter.js +75 -0
- package/dist/channel/internal/store/filter.js.map +1 -0
- package/dist/channel/internal/store/inbox.d.ts +17 -0
- package/dist/channel/internal/store/inbox.d.ts.map +1 -0
- package/dist/channel/internal/store/inbox.js +30 -0
- package/dist/channel/internal/store/inbox.js.map +1 -0
- package/dist/channel/internal/store/lock.d.ts +17 -0
- package/dist/channel/internal/store/lock.d.ts.map +1 -0
- package/dist/channel/internal/store/lock.js +88 -0
- package/dist/channel/internal/store/lock.js.map +1 -0
- package/dist/channel/internal/store/paths.d.ts +43 -0
- package/dist/channel/internal/store/paths.d.ts.map +1 -0
- package/dist/channel/internal/store/paths.js +233 -0
- package/dist/channel/internal/store/paths.js.map +1 -0
- package/dist/channel/internal/store/schema.d.ts +77 -0
- package/dist/channel/internal/store/schema.d.ts.map +1 -0
- package/dist/channel/internal/store/schema.js +127 -0
- package/dist/channel/internal/store/schema.js.map +1 -0
- package/dist/channel/internal/store/seq.d.ts +12 -0
- package/dist/channel/internal/store/seq.d.ts.map +1 -0
- package/dist/channel/internal/store/seq.js +134 -0
- package/dist/channel/internal/store/seq.js.map +1 -0
- package/dist/channel/internal/store/thread-state.d.ts +37 -0
- package/dist/channel/internal/store/thread-state.d.ts.map +1 -0
- package/dist/channel/internal/store/thread-state.js +208 -0
- package/dist/channel/internal/store/thread-state.js.map +1 -0
- package/dist/channel/internal/store/watch.d.ts +10 -0
- package/dist/channel/internal/store/watch.d.ts.map +1 -0
- package/dist/channel/internal/store/watch.js +122 -0
- package/dist/channel/internal/store/watch.js.map +1 -0
- package/dist/channel/internal/store/worker-state.d.ts +56 -0
- package/dist/channel/internal/store/worker-state.d.ts.map +1 -0
- package/dist/channel/internal/store/worker-state.js +220 -0
- package/dist/channel/internal/store/worker-state.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/mem/adapters/claude.d.ts +22 -0
- package/dist/mem/adapters/claude.d.ts.map +1 -0
- package/dist/mem/adapters/claude.js +234 -0
- package/dist/mem/adapters/claude.js.map +1 -0
- package/dist/mem/adapters/codex.d.ts +35 -0
- package/dist/mem/adapters/codex.d.ts.map +1 -0
- package/dist/mem/adapters/codex.js +222 -0
- package/dist/mem/adapters/codex.js.map +1 -0
- package/dist/mem/adapters/opencode.d.ts +19 -0
- package/dist/mem/adapters/opencode.d.ts.map +1 -0
- package/dist/mem/adapters/opencode.js +25 -0
- package/dist/mem/adapters/opencode.js.map +1 -0
- package/dist/mem/adapters/pi.d.ts +20 -0
- package/dist/mem/adapters/pi.d.ts.map +1 -0
- package/dist/mem/adapters/pi.js +299 -0
- package/dist/mem/adapters/pi.js.map +1 -0
- package/dist/mem/context.d.ts +23 -0
- package/dist/mem/context.d.ts.map +1 -0
- package/dist/mem/context.js +118 -0
- package/dist/mem/context.js.map +1 -0
- package/dist/mem/dialogue.d.ts +17 -0
- package/dist/mem/dialogue.d.ts.map +1 -0
- package/dist/mem/dialogue.js +51 -0
- package/dist/mem/dialogue.js.map +1 -0
- package/dist/mem/filter.d.ts +31 -0
- package/dist/mem/filter.d.ts.map +1 -0
- package/dist/mem/filter.js +66 -0
- package/dist/mem/filter.js.map +1 -0
- package/dist/mem/index.d.ts +18 -0
- package/dist/mem/index.d.ts.map +1 -0
- package/dist/mem/index.js +17 -0
- package/dist/mem/index.js.map +1 -0
- package/dist/mem/internal/jsonl.d.ts +35 -0
- package/dist/mem/internal/jsonl.d.ts.map +1 -0
- package/dist/mem/internal/jsonl.js +125 -0
- package/dist/mem/internal/jsonl.js.map +1 -0
- package/dist/mem/internal/paths.d.ts +25 -0
- package/dist/mem/internal/paths.d.ts.map +1 -0
- package/dist/mem/internal/paths.js +97 -0
- package/dist/mem/internal/paths.js.map +1 -0
- package/dist/mem/phase.d.ts +45 -0
- package/dist/mem/phase.d.ts.map +1 -0
- package/dist/mem/phase.js +220 -0
- package/dist/mem/phase.js.map +1 -0
- package/dist/mem/projects.d.ts +13 -0
- package/dist/mem/projects.d.ts.map +1 -0
- package/dist/mem/projects.js +37 -0
- package/dist/mem/projects.js.map +1 -0
- package/dist/mem/search.d.ts +32 -0
- package/dist/mem/search.d.ts.map +1 -0
- package/dist/mem/search.js +125 -0
- package/dist/mem/search.js.map +1 -0
- package/dist/mem/sessions.d.ts +37 -0
- package/dist/mem/sessions.d.ts.map +1 -0
- package/dist/mem/sessions.js +279 -0
- package/dist/mem/sessions.js.map +1 -0
- package/dist/mem/types.d.ts +176 -0
- package/dist/mem/types.d.ts.map +1 -0
- package/dist/mem/types.js +10 -0
- package/dist/mem/types.js.map +1 -0
- package/dist/task/index.d.ts +9 -0
- package/dist/task/index.d.ts.map +1 -0
- package/dist/task/index.js +9 -0
- package/dist/task/index.js.map +1 -0
- package/dist/task/paths.d.ts +37 -0
- package/dist/task/paths.d.ts.map +1 -0
- package/dist/task/paths.js +49 -0
- package/dist/task/paths.js.map +1 -0
- package/dist/task/phase.d.ts +27 -0
- package/dist/task/phase.d.ts.map +1 -0
- package/dist/task/phase.js +24 -0
- package/dist/task/phase.js.map +1 -0
- package/dist/task/records.d.ts +39 -0
- package/dist/task/records.d.ts.map +1 -0
- package/dist/task/records.js +89 -0
- package/dist/task/records.js.map +1 -0
- package/dist/task/schema.d.ts +77 -0
- package/dist/task/schema.d.ts.map +1 -0
- package/dist/task/schema.js +220 -0
- package/dist/task/schema.js.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +4 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/mem/sessions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2BH,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,CActD;AAED,iBAAS,eAAe,CAAC,CAAC,EAAE,cAAc,GAAG,YAAY,EAAE,CAW1D;AA+BD;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;8DAC8D;AAC9D,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,279 @@
|
|
|
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 { collectPiTurnsAndEvents, piExtractDialogue, piListSessions, piSearch, } from "./adapters/pi.js";
|
|
10
|
+
import { buildBrainstormWindows } from "./phase.js";
|
|
11
|
+
import { relevanceScore, searchInDialogue } from "./search.js";
|
|
12
|
+
/** Internal wide limit — `limit` only caps display; search recall and session
|
|
13
|
+
* lookup must scan everything. */
|
|
14
|
+
export const WIDE_LIMIT = 1_000_000;
|
|
15
|
+
/** Thrown by `readMemContext` / `extractMemDialogue` when the requested
|
|
16
|
+
* session id cannot be resolved. */
|
|
17
|
+
export class MemSessionNotFoundError extends Error {
|
|
18
|
+
sessionId;
|
|
19
|
+
constructor(sessionId) {
|
|
20
|
+
super(`mem session not found: ${sessionId}`);
|
|
21
|
+
this.name = "MemSessionNotFoundError";
|
|
22
|
+
this.sessionId = sessionId;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Fill platform / limit defaults so internal helpers see a complete filter. */
|
|
26
|
+
export function resolveFilter(filter) {
|
|
27
|
+
return {
|
|
28
|
+
platform: filter?.platform ?? "all",
|
|
29
|
+
since: filter?.since,
|
|
30
|
+
until: filter?.until,
|
|
31
|
+
cwd: filter?.cwd,
|
|
32
|
+
limit: filter?.limit ?? 50,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** Fan out to every in-scope platform, merge by recency, cap at `f.limit`. */
|
|
36
|
+
export function listAll(f) {
|
|
37
|
+
const all = [];
|
|
38
|
+
if (f.platform === "all" || f.platform === "claude")
|
|
39
|
+
all.push(...claudeListSessions(f));
|
|
40
|
+
if (f.platform === "all" || f.platform === "codex")
|
|
41
|
+
all.push(...codexListSessions(f));
|
|
42
|
+
if (f.platform === "all" || f.platform === "opencode")
|
|
43
|
+
all.push(...opencodeListSessions(f));
|
|
44
|
+
if (f.platform === "all" || f.platform === "pi")
|
|
45
|
+
all.push(...piListSessions(f));
|
|
46
|
+
all.sort((a, b) => (b.updated ?? b.created ?? "").localeCompare(a.updated ?? a.created ?? ""));
|
|
47
|
+
return all.slice(0, f.limit);
|
|
48
|
+
}
|
|
49
|
+
function extractDialogue(s) {
|
|
50
|
+
switch (s.platform) {
|
|
51
|
+
case "claude":
|
|
52
|
+
return claudeExtractDialogue(s);
|
|
53
|
+
case "codex":
|
|
54
|
+
return codexExtractDialogue(s);
|
|
55
|
+
case "opencode":
|
|
56
|
+
return opencodeExtractDialogue(s);
|
|
57
|
+
case "pi":
|
|
58
|
+
return piExtractDialogue(s);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function searchSession(s, kw) {
|
|
62
|
+
switch (s.platform) {
|
|
63
|
+
case "claude":
|
|
64
|
+
return claudeSearch(s, kw);
|
|
65
|
+
case "codex":
|
|
66
|
+
return codexSearch(s, kw);
|
|
67
|
+
case "opencode":
|
|
68
|
+
return opencodeSearch(kw);
|
|
69
|
+
case "pi":
|
|
70
|
+
return piSearch(s, kw);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function collectTurnsAndEvents(s) {
|
|
74
|
+
switch (s.platform) {
|
|
75
|
+
case "claude":
|
|
76
|
+
return collectClaudeTurnsAndEvents(s);
|
|
77
|
+
case "codex":
|
|
78
|
+
return collectCodexTurnsAndEvents(s);
|
|
79
|
+
case "opencode":
|
|
80
|
+
return { turns: opencodeExtractDialogue(s), events: [] };
|
|
81
|
+
case "pi":
|
|
82
|
+
return collectPiTurnsAndEvents(s);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** Build a parent → descendants index (transitively flattened) for OpenCode
|
|
86
|
+
* sub-agent chains. Other platforms have no native `parent_id`. */
|
|
87
|
+
function buildChildIndex(sessions) {
|
|
88
|
+
const directChildren = new Map();
|
|
89
|
+
for (const s of sessions) {
|
|
90
|
+
if (!s.parent_id)
|
|
91
|
+
continue;
|
|
92
|
+
const list = directChildren.get(s.parent_id) ?? [];
|
|
93
|
+
list.push(s);
|
|
94
|
+
directChildren.set(s.parent_id, list);
|
|
95
|
+
}
|
|
96
|
+
const out = new Map();
|
|
97
|
+
for (const [pid] of directChildren) {
|
|
98
|
+
const stack = [...(directChildren.get(pid) ?? [])];
|
|
99
|
+
const flat = [];
|
|
100
|
+
while (stack.length) {
|
|
101
|
+
const cur = stack.pop();
|
|
102
|
+
if (cur === undefined)
|
|
103
|
+
break;
|
|
104
|
+
flat.push(cur);
|
|
105
|
+
for (const c of directChildren.get(cur.id) ?? [])
|
|
106
|
+
stack.push(c);
|
|
107
|
+
}
|
|
108
|
+
out.set(pid, flat);
|
|
109
|
+
}
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
function searchSessionWithChildren(s, kw, childIndex) {
|
|
113
|
+
const children = childIndex.get(s.id) ?? [];
|
|
114
|
+
if (children.length === 0)
|
|
115
|
+
return searchSession(s, kw);
|
|
116
|
+
const merged = [...extractDialogue(s)];
|
|
117
|
+
for (const c of children)
|
|
118
|
+
merged.push(...extractDialogue(c));
|
|
119
|
+
return searchInDialogue(merged, kw);
|
|
120
|
+
}
|
|
121
|
+
/** Resolve a session by exact id or id prefix, scanning every project. */
|
|
122
|
+
export function findSessionById(id, f) {
|
|
123
|
+
const wide = { ...f, cwd: undefined, limit: WIDE_LIMIT };
|
|
124
|
+
const all = listAll(wide);
|
|
125
|
+
return all.find((s) => s.id === id) ?? all.find((s) => s.id.startsWith(id));
|
|
126
|
+
}
|
|
127
|
+
/** Slice cleaned dialogue by phase. Claude / Codex / Pi have native boundary
|
|
128
|
+
* detection; OpenCode degrades to "all turns + warning". */
|
|
129
|
+
function sliceMemPhase(s, phase) {
|
|
130
|
+
const warnings = [];
|
|
131
|
+
if (phase === "all" || s.platform === "opencode") {
|
|
132
|
+
if (phase !== "all" && s.platform === "opencode") {
|
|
133
|
+
warnings.push({
|
|
134
|
+
code: "opencode-phase-unsupported",
|
|
135
|
+
message: `--phase ${phase} on platform=opencode is not yet supported; ` +
|
|
136
|
+
`returning full dialogue.`,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
const turns = extractDialogue(s);
|
|
140
|
+
return {
|
|
141
|
+
groups: [{ label: null, turns }],
|
|
142
|
+
windows: [],
|
|
143
|
+
totalTurns: turns.length,
|
|
144
|
+
warnings,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
const { turns, events } = collectTurnsAndEvents(s);
|
|
148
|
+
const windows = buildBrainstormWindows(events, turns.length);
|
|
149
|
+
if (phase === "brainstorm") {
|
|
150
|
+
if (windows.length === 0) {
|
|
151
|
+
warnings.push({
|
|
152
|
+
code: "no-brainstorm-boundary",
|
|
153
|
+
message: `no task.py create/start boundary found in session — returning full dialogue.`,
|
|
154
|
+
});
|
|
155
|
+
return {
|
|
156
|
+
groups: [{ label: null, turns }],
|
|
157
|
+
windows: [],
|
|
158
|
+
totalTurns: turns.length,
|
|
159
|
+
warnings,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
const groups = windows.map((w) => ({
|
|
163
|
+
label: w.label,
|
|
164
|
+
turns: turns.slice(w.startTurn, w.endTurn),
|
|
165
|
+
}));
|
|
166
|
+
return { groups, windows, totalTurns: turns.length, warnings };
|
|
167
|
+
}
|
|
168
|
+
// phase === "implement": all turns NOT inside any brainstorm window.
|
|
169
|
+
if (windows.length === 0) {
|
|
170
|
+
warnings.push({
|
|
171
|
+
code: "no-brainstorm-boundary",
|
|
172
|
+
message: `no task.py create/start boundary found in session — implement phase is empty.`,
|
|
173
|
+
});
|
|
174
|
+
return {
|
|
175
|
+
groups: [{ label: null, turns: [] }],
|
|
176
|
+
windows: [],
|
|
177
|
+
totalTurns: turns.length,
|
|
178
|
+
warnings,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
const covered = new Set();
|
|
182
|
+
for (const w of windows) {
|
|
183
|
+
for (let i = w.startTurn; i < w.endTurn; i++)
|
|
184
|
+
covered.add(i);
|
|
185
|
+
}
|
|
186
|
+
const implementTurns = [];
|
|
187
|
+
for (let i = 0; i < turns.length; i++) {
|
|
188
|
+
if (!covered.has(i)) {
|
|
189
|
+
const t = turns[i];
|
|
190
|
+
if (t)
|
|
191
|
+
implementTurns.push(t);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
groups: [{ label: null, turns: implementTurns }],
|
|
196
|
+
windows,
|
|
197
|
+
totalTurns: turns.length,
|
|
198
|
+
warnings,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
// ---------- public API ----------
|
|
202
|
+
/** List session metadata across Claude / Codex / OpenCode / Pi, sorted by
|
|
203
|
+
* recency and capped at the filter's `limit` (default 50). */
|
|
204
|
+
export function listMemSessions(options) {
|
|
205
|
+
return listAll(resolveFilter(options?.filter));
|
|
206
|
+
}
|
|
207
|
+
/** Multi-token AND grep over cleaned dialogue across all matching sessions,
|
|
208
|
+
* ranked by weighted-density relevance. `matches` is capped at the filter's
|
|
209
|
+
* `limit`; `totalMatches` is the full match count. */
|
|
210
|
+
export function searchMemSessions(options) {
|
|
211
|
+
const f = resolveFilter(options.filter);
|
|
212
|
+
const kw = options.keyword;
|
|
213
|
+
const includeChildren = options.includeChildren === true;
|
|
214
|
+
const candidates = listAll({ ...f, limit: WIDE_LIMIT });
|
|
215
|
+
const childIndex = includeChildren
|
|
216
|
+
? buildChildIndex(candidates)
|
|
217
|
+
: new Map();
|
|
218
|
+
const candidateIds = new Set(candidates.map((s) => s.id));
|
|
219
|
+
const isAbsorbedChild = (s) => includeChildren &&
|
|
220
|
+
s.parent_id !== undefined &&
|
|
221
|
+
candidateIds.has(s.parent_id);
|
|
222
|
+
const matches = [];
|
|
223
|
+
for (const s of candidates) {
|
|
224
|
+
if (isAbsorbedChild(s))
|
|
225
|
+
continue;
|
|
226
|
+
const hit = includeChildren
|
|
227
|
+
? searchSessionWithChildren(s, kw, childIndex)
|
|
228
|
+
: searchSession(s, kw);
|
|
229
|
+
if (hit.count === 0)
|
|
230
|
+
continue;
|
|
231
|
+
matches.push({
|
|
232
|
+
session: s,
|
|
233
|
+
hit,
|
|
234
|
+
score: relevanceScore(hit),
|
|
235
|
+
descendantsMerged: childIndex.get(s.id)?.length ?? 0,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
matches.sort((a, b) => {
|
|
239
|
+
if (b.score !== a.score)
|
|
240
|
+
return b.score - a.score;
|
|
241
|
+
if (b.hit.count !== a.hit.count)
|
|
242
|
+
return b.hit.count - a.hit.count;
|
|
243
|
+
return (b.session.updated ?? b.session.created ?? "").localeCompare(a.session.updated ?? a.session.created ?? "");
|
|
244
|
+
});
|
|
245
|
+
return {
|
|
246
|
+
matches: matches.slice(0, f.limit),
|
|
247
|
+
totalMatches: matches.length,
|
|
248
|
+
warnings: [],
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
/** Dump cleaned dialogue for one session, optionally sliced by brainstorm
|
|
252
|
+
* phase and filtered by a multi-token AND `grep`. */
|
|
253
|
+
export function extractMemDialogue(options) {
|
|
254
|
+
const f = resolveFilter(options.filter);
|
|
255
|
+
const phase = options.phase ?? "all";
|
|
256
|
+
const s = findSessionById(options.sessionId, f);
|
|
257
|
+
if (!s)
|
|
258
|
+
throw new MemSessionNotFoundError(options.sessionId);
|
|
259
|
+
const slice = sliceMemPhase(s, phase);
|
|
260
|
+
const grepLc = typeof options.grep === "string" ? options.grep.toLowerCase() : undefined;
|
|
261
|
+
const filterTurns = (turns) => grepLc ? turns.filter((t) => t.text.toLowerCase().includes(grepLc)) : turns;
|
|
262
|
+
const groups = slice.groups.map((g) => ({
|
|
263
|
+
label: g.label,
|
|
264
|
+
turns: filterTurns(g.turns),
|
|
265
|
+
}));
|
|
266
|
+
const flat = groups.flatMap((g) => g.turns);
|
|
267
|
+
return {
|
|
268
|
+
session: s,
|
|
269
|
+
phase,
|
|
270
|
+
windows: slice.windows,
|
|
271
|
+
totalTurns: slice.totalTurns,
|
|
272
|
+
groups,
|
|
273
|
+
turns: flat,
|
|
274
|
+
warnings: slice.warnings,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
// Re-exports needed by sibling orchestration modules.
|
|
278
|
+
export { extractDialogue, buildChildIndex };
|
|
279
|
+
//# 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 `@baoanaz/cviauto-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" | "pi";
|
|
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 `@baoanaz/cviauto-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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { TrellisTaskRecord, TaskRecordField } from "./schema.js";
|
|
2
|
+
export { TASK_RECORD_FIELD_ORDER, emptyTaskRecord, taskRecordSchema, } from "./schema.js";
|
|
3
|
+
export type { LoadTaskRecordOptions, WriteTaskRecordOptions, } from "./records.js";
|
|
4
|
+
export { loadTaskRecord, writeTaskRecord } from "./records.js";
|
|
5
|
+
export type { TaskDirParts } from "./paths.js";
|
|
6
|
+
export { validateTaskDirName, isValidTaskDirName } from "./paths.js";
|
|
7
|
+
export type { TrellisTaskPhase } from "./phase.js";
|
|
8
|
+
export { inferTaskPhase } from "./phase.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAKA,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEtE,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/D,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Public task API surface — canonical task record shape, factory,
|
|
2
|
+
// schema, I/O helpers, directory validation, and phase inference.
|
|
3
|
+
//
|
|
4
|
+
// Task API is intentionally independent from the channel API.
|
|
5
|
+
export { TASK_RECORD_FIELD_ORDER, emptyTaskRecord, taskRecordSchema, } from "./schema.js";
|
|
6
|
+
export { loadTaskRecord, writeTaskRecord } from "./records.js";
|
|
7
|
+
export { validateTaskDirName, isValidTaskDirName } from "./paths.js";
|
|
8
|
+
export { inferTaskPhase } from "./phase.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,kEAAkE;AAClE,EAAE;AACF,8DAA8D;AAI9D,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAOrB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task directory naming.
|
|
3
|
+
*
|
|
4
|
+
* User-created task dirs follow the `MM-DD-slug` pattern produced by
|
|
5
|
+
* `.cviauto/scripts/common/task_store.py::cmd_create`:
|
|
6
|
+
*
|
|
7
|
+
* <tasks-dir>/05-13-trellis-core-sdk-package/
|
|
8
|
+
*
|
|
9
|
+
* Trellis also creates system onboarding tasks during `cviauto init` using a
|
|
10
|
+
* `00-slug` prefix, such as `00-bootstrap-guidelines` and `00-join-new-developer`.
|
|
11
|
+
*
|
|
12
|
+
* `MM` is the two-digit month, `DD` is the two-digit day, and `slug` is
|
|
13
|
+
* a lower-kebab-case identifier composed of `[a-z0-9-]+` characters.
|
|
14
|
+
*/
|
|
15
|
+
export interface TaskDirParts {
|
|
16
|
+
/**
|
|
17
|
+
* The directory prefix. Dated tasks use `MM-DD`; Trellis system onboarding
|
|
18
|
+
* tasks use `00`.
|
|
19
|
+
*/
|
|
20
|
+
prefix: string;
|
|
21
|
+
/** Two-digit month for dated tasks, or `null` for `00-*` system tasks. */
|
|
22
|
+
month: string | null;
|
|
23
|
+
/** Two-digit day for dated tasks, or `null` for `00-*` system tasks. */
|
|
24
|
+
day: string | null;
|
|
25
|
+
slug: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Validate a task directory base name (no slashes). Returns the parsed
|
|
29
|
+
* components when valid, or `null` when the name does not match a canonical
|
|
30
|
+
* task dir shape.
|
|
31
|
+
*
|
|
32
|
+
* Throws `TypeError` if `name` is not a string — guards downstream code
|
|
33
|
+
* from accidentally validating `Buffer`, `Path`, or other inputs.
|
|
34
|
+
*/
|
|
35
|
+
export declare function validateTaskDirName(name: string): TaskDirParts | null;
|
|
36
|
+
export declare function isValidTaskDirName(name: string): boolean;
|
|
37
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/task/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,wEAAwE;IACxE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAqBrE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task directory naming.
|
|
3
|
+
*
|
|
4
|
+
* User-created task dirs follow the `MM-DD-slug` pattern produced by
|
|
5
|
+
* `.cviauto/scripts/common/task_store.py::cmd_create`:
|
|
6
|
+
*
|
|
7
|
+
* <tasks-dir>/05-13-trellis-core-sdk-package/
|
|
8
|
+
*
|
|
9
|
+
* Trellis also creates system onboarding tasks during `cviauto init` using a
|
|
10
|
+
* `00-slug` prefix, such as `00-bootstrap-guidelines` and `00-join-new-developer`.
|
|
11
|
+
*
|
|
12
|
+
* `MM` is the two-digit month, `DD` is the two-digit day, and `slug` is
|
|
13
|
+
* a lower-kebab-case identifier composed of `[a-z0-9-]+` characters.
|
|
14
|
+
*/
|
|
15
|
+
const DATED_TASK_DIR_RE = /^(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])-([a-z0-9]+(?:-[a-z0-9]+)*)$/;
|
|
16
|
+
const SYSTEM_TASK_DIR_RE = /^00-(bootstrap-guidelines|join-[a-z0-9]+(?:-[a-z0-9]+)*)$/;
|
|
17
|
+
/**
|
|
18
|
+
* Validate a task directory base name (no slashes). Returns the parsed
|
|
19
|
+
* components when valid, or `null` when the name does not match a canonical
|
|
20
|
+
* task dir shape.
|
|
21
|
+
*
|
|
22
|
+
* Throws `TypeError` if `name` is not a string — guards downstream code
|
|
23
|
+
* from accidentally validating `Buffer`, `Path`, or other inputs.
|
|
24
|
+
*/
|
|
25
|
+
export function validateTaskDirName(name) {
|
|
26
|
+
if (typeof name !== "string") {
|
|
27
|
+
throw new TypeError("task directory name must be a string");
|
|
28
|
+
}
|
|
29
|
+
const dated = DATED_TASK_DIR_RE.exec(name);
|
|
30
|
+
if (dated) {
|
|
31
|
+
const [, month, day, slug] = dated;
|
|
32
|
+
if (month === undefined || day === undefined || slug === undefined) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
return { prefix: `${month}-${day}`, month, day, slug };
|
|
36
|
+
}
|
|
37
|
+
const system = SYSTEM_TASK_DIR_RE.exec(name);
|
|
38
|
+
if (system) {
|
|
39
|
+
const [, slug] = system;
|
|
40
|
+
if (slug === undefined)
|
|
41
|
+
return null;
|
|
42
|
+
return { prefix: "00", month: null, day: null, slug };
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
export function isValidTaskDirName(name) {
|
|
47
|
+
return validateTaskDirName(name) !== null;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/task/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,iBAAiB,GACrB,oEAAoE,CAAC;AACvE,MAAM,kBAAkB,GACtB,2DAA2D,CAAC;AAe9D;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QACnC,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;QACxB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { TrellisTaskRecord } from "./schema.js";
|
|
2
|
+
/**
|
|
3
|
+
* Coarse-grained Trellis task phase derived from task status.
|
|
4
|
+
*
|
|
5
|
+
* Phase is a projection of {@link TrellisTaskRecord.status} only. There is
|
|
6
|
+
* no separate `current_phase` field stored on disk — `inferTaskPhase`
|
|
7
|
+
* exists so consumers can render the workflow phase without depending on
|
|
8
|
+
* `.cviauto/workflow.md` parsing.
|
|
9
|
+
*
|
|
10
|
+
* Mapping:
|
|
11
|
+
*
|
|
12
|
+
* status | phase
|
|
13
|
+
* --------------------|-----------
|
|
14
|
+
* planning | plan
|
|
15
|
+
* in_progress | implement
|
|
16
|
+
* review | review
|
|
17
|
+
* completed | done | completed
|
|
18
|
+
* <anything else> | unknown
|
|
19
|
+
*/
|
|
20
|
+
export type TrellisTaskPhase = "plan" | "implement" | "review" | "completed" | "unknown";
|
|
21
|
+
/**
|
|
22
|
+
* Infer the phase of a task from either its parsed record or its raw
|
|
23
|
+
* status string. Accepts a record so callers that already have one don't
|
|
24
|
+
* need to re-pluck `status` first.
|
|
25
|
+
*/
|
|
26
|
+
export declare function inferTaskPhase(recordOrStatus: TrellisTaskRecord | string | null | undefined): TrellisTaskPhase;
|
|
27
|
+
//# sourceMappingURL=phase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase.d.ts","sourceRoot":"","sources":["../../src/task/phase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,WAAW,GACX,QAAQ,GACR,WAAW,GACX,SAAS,CAAC;AAEd;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAC5D,gBAAgB,CAkBlB"}
|