@pennixrv/trellis-core 0.7.0-beta.9 → 0.7.1-beta.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.
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/mem/adapters/claude.d.ts +1 -1
- package/dist/mem/adapters/claude.js +1 -1
- package/dist/mem/adapters/codex.d.ts +1 -1
- package/dist/mem/adapters/codex.js +1 -1
- package/dist/mem/adapters/devin.d.ts +1 -1
- package/dist/mem/adapters/devin.js +1 -1
- package/dist/mem/adapters/grok.d.ts +1 -1
- package/dist/mem/adapters/grok.js +1 -1
- package/dist/mem/adapters/zcode.d.ts +1 -1
- package/dist/mem/adapters/zcode.js +1 -1
- package/dist/mem/index.d.ts +3 -3
- package/dist/mem/index.js +3 -3
- package/dist/mem/phase.d.ts +4 -4
- package/dist/mem/phase.d.ts.map +1 -1
- package/dist/mem/phase.js +23 -26
- package/dist/mem/phase.js.map +1 -1
- package/dist/mem/sessions.js +2 -2
- package/dist/mem/sessions.js.map +1 -1
- package/dist/mem/types.d.ts +6 -6
- package/dist/mem/types.d.ts.map +1 -1
- package/dist/mem/types.js +3 -3
- package/dist/task/index.d.ts +2 -2
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/index.js +2 -2
- package/dist/task/index.js.map +1 -1
- package/dist/task/phase.d.ts +61 -26
- package/dist/task/phase.d.ts.map +1 -1
- package/dist/task/phase.js +152 -21
- package/dist/task/phase.js.map +1 -1
- package/dist/teamwork/api/assert.d.ts +3 -0
- package/dist/teamwork/api/assert.d.ts.map +1 -0
- package/dist/teamwork/api/assert.js +11 -0
- package/dist/teamwork/api/assert.js.map +1 -0
- package/dist/{channel → teamwork}/api/context.d.ts +8 -8
- package/dist/teamwork/api/context.d.ts.map +1 -0
- package/dist/{channel → teamwork}/api/context.js +32 -32
- package/dist/teamwork/api/context.js.map +1 -0
- package/dist/teamwork/api/coordination.d.ts +40 -0
- package/dist/teamwork/api/coordination.d.ts.map +1 -0
- package/dist/teamwork/api/coordination.js +50 -0
- package/dist/teamwork/api/coordination.js.map +1 -0
- package/dist/teamwork/api/create.d.ts +9 -0
- package/dist/teamwork/api/create.d.ts.map +1 -0
- package/dist/{channel → teamwork}/api/create.js +17 -20
- package/dist/teamwork/api/create.js.map +1 -0
- package/dist/{channel → teamwork}/api/inbox.d.ts +9 -9
- package/dist/teamwork/api/inbox.d.ts.map +1 -0
- package/dist/{channel → teamwork}/api/inbox.js +22 -22
- package/dist/teamwork/api/inbox.js.map +1 -0
- package/dist/{channel → teamwork}/api/interrupt.d.ts +5 -5
- package/dist/teamwork/api/interrupt.d.ts.map +1 -0
- package/dist/{channel → teamwork}/api/interrupt.js +10 -10
- package/dist/teamwork/api/interrupt.js.map +1 -0
- package/dist/{channel → teamwork}/api/post-thread.d.ts +4 -4
- package/dist/teamwork/api/post-thread.d.ts.map +1 -0
- package/dist/{channel → teamwork}/api/post-thread.js +13 -13
- package/dist/teamwork/api/post-thread.js.map +1 -0
- package/dist/teamwork/api/read.d.ts +17 -0
- package/dist/teamwork/api/read.d.ts.map +1 -0
- package/dist/{channel → teamwork}/api/read.js +17 -17
- package/dist/teamwork/api/read.js.map +1 -0
- package/dist/teamwork/api/resolve.d.ts +21 -0
- package/dist/teamwork/api/resolve.d.ts.map +1 -0
- package/dist/teamwork/api/resolve.js +28 -0
- package/dist/teamwork/api/resolve.js.map +1 -0
- package/dist/{channel → teamwork}/api/runtime.d.ts +4 -4
- package/dist/teamwork/api/runtime.d.ts.map +1 -0
- package/dist/teamwork/api/runtime.js.map +1 -0
- package/dist/teamwork/api/send.d.ts +4 -0
- package/dist/teamwork/api/send.d.ts.map +1 -0
- package/dist/{channel → teamwork}/api/send.js +7 -7
- package/dist/teamwork/api/send.js.map +1 -0
- package/dist/{channel → teamwork}/api/spawn.d.ts +1 -1
- package/dist/teamwork/api/spawn.d.ts.map +1 -0
- package/dist/teamwork/api/spawn.js +54 -0
- package/dist/teamwork/api/spawn.js.map +1 -0
- package/dist/teamwork/api/title.d.ts +5 -0
- package/dist/teamwork/api/title.d.ts.map +1 -0
- package/dist/{channel → teamwork}/api/title.js +12 -12
- package/dist/teamwork/api/title.js.map +1 -0
- package/dist/{channel → teamwork}/api/types.d.ts +11 -13
- package/dist/teamwork/api/types.d.ts.map +1 -0
- package/dist/{channel → teamwork}/api/types.js.map +1 -1
- package/dist/teamwork/api/watch-sessions.d.ts +40 -0
- package/dist/teamwork/api/watch-sessions.d.ts.map +1 -0
- package/dist/{channel/api/watch-channels.js → teamwork/api/watch-sessions.js} +16 -16
- package/dist/teamwork/api/watch-sessions.js.map +1 -0
- package/dist/teamwork/api/watch.d.ts +11 -0
- package/dist/teamwork/api/watch.d.ts.map +1 -0
- package/dist/{channel → teamwork}/api/watch.js +5 -5
- package/dist/teamwork/api/watch.js.map +1 -0
- package/dist/{channel → teamwork}/api/workers.d.ts +10 -10
- package/dist/teamwork/api/workers.d.ts.map +1 -0
- package/dist/{channel → teamwork}/api/workers.js +14 -14
- package/dist/teamwork/api/workers.js.map +1 -0
- package/dist/teamwork/index.d.ts +42 -0
- package/dist/teamwork/index.d.ts.map +1 -0
- package/dist/teamwork/index.js +25 -0
- package/dist/teamwork/index.js.map +1 -0
- package/dist/teamwork/internal/store/coordination.d.ts +64 -0
- package/dist/teamwork/internal/store/coordination.d.ts.map +1 -0
- package/dist/teamwork/internal/store/coordination.js +311 -0
- package/dist/teamwork/internal/store/coordination.js.map +1 -0
- package/dist/teamwork/internal/store/delivery.d.ts.map +1 -0
- package/dist/teamwork/internal/store/delivery.js.map +1 -0
- package/dist/teamwork/internal/store/events.d.ts +232 -0
- package/dist/teamwork/internal/store/events.d.ts.map +1 -0
- package/dist/{channel → teamwork}/internal/store/events.js +24 -21
- package/dist/teamwork/internal/store/events.js.map +1 -0
- package/dist/{channel → teamwork}/internal/store/filter.d.ts +5 -5
- package/dist/teamwork/internal/store/filter.d.ts.map +1 -0
- package/dist/{channel → teamwork}/internal/store/filter.js +1 -1
- package/dist/teamwork/internal/store/filter.js.map +1 -0
- package/dist/{channel → teamwork}/internal/store/inbox.d.ts +3 -3
- package/dist/teamwork/internal/store/inbox.d.ts.map +1 -0
- package/dist/{channel → teamwork}/internal/store/inbox.js +1 -1
- package/dist/teamwork/internal/store/inbox.js.map +1 -0
- package/dist/teamwork/internal/store/lock.d.ts.map +1 -0
- package/dist/{channel → teamwork}/internal/store/lock.js +1 -1
- package/dist/teamwork/internal/store/lock.js.map +1 -0
- package/dist/{channel → teamwork}/internal/store/paths.d.ts +17 -23
- package/dist/teamwork/internal/store/paths.d.ts.map +1 -0
- package/dist/{channel → teamwork}/internal/store/paths.js +44 -98
- package/dist/teamwork/internal/store/paths.js.map +1 -0
- package/dist/{channel → teamwork}/internal/store/schema.d.ts +12 -19
- package/dist/teamwork/internal/store/schema.d.ts.map +1 -0
- package/dist/{channel → teamwork}/internal/store/schema.js +4 -7
- package/dist/teamwork/internal/store/schema.js.map +1 -0
- package/dist/{channel → teamwork}/internal/store/seq.d.ts +2 -2
- package/dist/teamwork/internal/store/seq.d.ts.map +1 -0
- package/dist/{channel → teamwork}/internal/store/seq.js +3 -3
- package/dist/teamwork/internal/store/seq.js.map +1 -0
- package/dist/teamwork/internal/store/teamwork-session-metadata.d.ts +15 -0
- package/dist/teamwork/internal/store/teamwork-session-metadata.d.ts.map +1 -0
- package/dist/{channel/internal/store/channel-metadata.js → teamwork/internal/store/teamwork-session-metadata.js} +13 -27
- package/dist/teamwork/internal/store/teamwork-session-metadata.js.map +1 -0
- package/dist/{channel → teamwork}/internal/store/thread-state.d.ts +4 -4
- package/dist/teamwork/internal/store/thread-state.d.ts.map +1 -0
- package/dist/{channel → teamwork}/internal/store/thread-state.js +1 -1
- package/dist/teamwork/internal/store/thread-state.js.map +1 -0
- package/dist/teamwork/internal/store/watch.d.ts +10 -0
- package/dist/teamwork/internal/store/watch.d.ts.map +1 -0
- package/dist/{channel → teamwork}/internal/store/watch.js +6 -6
- package/dist/teamwork/internal/store/watch.js.map +1 -0
- package/dist/{channel → teamwork}/internal/store/worker-state.d.ts +7 -9
- package/dist/teamwork/internal/store/worker-state.d.ts.map +1 -0
- package/dist/{channel → teamwork}/internal/store/worker-state.js +6 -29
- package/dist/teamwork/internal/store/worker-state.js.map +1 -0
- package/package.json +7 -7
- package/dist/channel/api/assert.d.ts +0 -3
- package/dist/channel/api/assert.d.ts.map +0 -1
- package/dist/channel/api/assert.js +0 -11
- package/dist/channel/api/assert.js.map +0 -1
- package/dist/channel/api/context.d.ts.map +0 -1
- package/dist/channel/api/context.js.map +0 -1
- package/dist/channel/api/create.d.ts +0 -9
- package/dist/channel/api/create.d.ts.map +0 -1
- package/dist/channel/api/create.js.map +0 -1
- package/dist/channel/api/inbox.d.ts.map +0 -1
- package/dist/channel/api/inbox.js.map +0 -1
- package/dist/channel/api/interrupt.d.ts.map +0 -1
- package/dist/channel/api/interrupt.js.map +0 -1
- package/dist/channel/api/post-thread.d.ts.map +0 -1
- package/dist/channel/api/post-thread.js.map +0 -1
- package/dist/channel/api/read.d.ts +0 -17
- package/dist/channel/api/read.d.ts.map +0 -1
- package/dist/channel/api/read.js.map +0 -1
- package/dist/channel/api/resolve.d.ts +0 -21
- package/dist/channel/api/resolve.d.ts.map +0 -1
- package/dist/channel/api/resolve.js +0 -28
- package/dist/channel/api/resolve.js.map +0 -1
- package/dist/channel/api/runtime.d.ts.map +0 -1
- package/dist/channel/api/runtime.js.map +0 -1
- package/dist/channel/api/send.d.ts +0 -4
- package/dist/channel/api/send.d.ts.map +0 -1
- package/dist/channel/api/send.js.map +0 -1
- package/dist/channel/api/spawn.d.ts.map +0 -1
- package/dist/channel/api/spawn.js +0 -74
- package/dist/channel/api/spawn.js.map +0 -1
- package/dist/channel/api/title.d.ts +0 -5
- package/dist/channel/api/title.d.ts.map +0 -1
- package/dist/channel/api/title.js.map +0 -1
- package/dist/channel/api/types.d.ts.map +0 -1
- package/dist/channel/api/watch-channels.d.ts +0 -40
- package/dist/channel/api/watch-channels.d.ts.map +0 -1
- package/dist/channel/api/watch-channels.js.map +0 -1
- package/dist/channel/api/watch.d.ts +0 -11
- package/dist/channel/api/watch.d.ts.map +0 -1
- package/dist/channel/api/watch.js.map +0 -1
- package/dist/channel/api/workers.d.ts.map +0 -1
- package/dist/channel/api/workers.js.map +0 -1
- package/dist/channel/index.d.ts +0 -38
- package/dist/channel/index.d.ts.map +0 -1
- package/dist/channel/index.js +0 -23
- package/dist/channel/index.js.map +0 -1
- package/dist/channel/internal/store/channel-metadata.d.ts +0 -23
- package/dist/channel/internal/store/channel-metadata.d.ts.map +0 -1
- package/dist/channel/internal/store/channel-metadata.js.map +0 -1
- package/dist/channel/internal/store/delivery.d.ts.map +0 -1
- package/dist/channel/internal/store/delivery.js.map +0 -1
- package/dist/channel/internal/store/events.d.ts +0 -221
- package/dist/channel/internal/store/events.d.ts.map +0 -1
- package/dist/channel/internal/store/events.js.map +0 -1
- package/dist/channel/internal/store/filter.d.ts.map +0 -1
- package/dist/channel/internal/store/filter.js.map +0 -1
- package/dist/channel/internal/store/inbox.d.ts.map +0 -1
- package/dist/channel/internal/store/inbox.js.map +0 -1
- package/dist/channel/internal/store/lock.d.ts.map +0 -1
- package/dist/channel/internal/store/lock.js.map +0 -1
- package/dist/channel/internal/store/paths.d.ts.map +0 -1
- package/dist/channel/internal/store/paths.js.map +0 -1
- package/dist/channel/internal/store/schema.d.ts.map +0 -1
- package/dist/channel/internal/store/schema.js.map +0 -1
- package/dist/channel/internal/store/seq.d.ts.map +0 -1
- package/dist/channel/internal/store/seq.js.map +0 -1
- package/dist/channel/internal/store/thread-state.d.ts.map +0 -1
- package/dist/channel/internal/store/thread-state.js.map +0 -1
- package/dist/channel/internal/store/watch.d.ts +0 -10
- package/dist/channel/internal/store/watch.d.ts.map +0 -1
- package/dist/channel/internal/store/watch.js.map +0 -1
- package/dist/channel/internal/store/worker-state.d.ts.map +0 -1
- package/dist/channel/internal/store/worker-state.js.map +0 -1
- /package/dist/{channel → teamwork}/api/runtime.js +0 -0
- /package/dist/{channel → teamwork}/api/types.js +0 -0
- /package/dist/{channel → teamwork}/internal/store/delivery.d.ts +0 -0
- /package/dist/{channel → teamwork}/internal/store/delivery.js +0 -0
- /package/dist/{channel → teamwork}/internal/store/lock.d.ts +0 -0
|
@@ -2,12 +2,12 @@ import fs from "node:fs";
|
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { GLOBAL_PROJECT_KEY, } from "./schema.js";
|
|
5
|
-
/** Top-level Trellis
|
|
6
|
-
export function
|
|
7
|
-
const env = process.env.
|
|
5
|
+
/** Top-level Trellis Teamwork directory. */
|
|
6
|
+
export function teamworkRoot() {
|
|
7
|
+
const env = process.env.TRELLIS_TEAMWORK_ROOT;
|
|
8
8
|
if (env && env.length > 0)
|
|
9
9
|
return path.resolve(env);
|
|
10
|
-
return path.join(os.homedir(), ".trellis", "
|
|
10
|
+
return path.join(os.homedir(), ".trellis", "teamwork");
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Derive a per-project bucket name from an absolute cwd, mirroring
|
|
@@ -20,113 +20,62 @@ export function projectKey(cwd) {
|
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
22
|
* Project key for the current CLI invocation. Reads
|
|
23
|
-
* `
|
|
23
|
+
* `TRELLIS_TEAMWORK_PROJECT` env first, then falls back to deriving from
|
|
24
24
|
* `process.cwd()`.
|
|
25
25
|
*/
|
|
26
26
|
export function currentProjectKey() {
|
|
27
|
-
const env = process.env.
|
|
27
|
+
const env = process.env.TRELLIS_TEAMWORK_PROJECT;
|
|
28
28
|
if (env && env.length > 0)
|
|
29
29
|
return env;
|
|
30
30
|
return projectKey(process.cwd());
|
|
31
31
|
}
|
|
32
32
|
export function projectDir(project = currentProjectKey()) {
|
|
33
|
-
return path.join(
|
|
33
|
+
return path.join(teamworkRoot(), project);
|
|
34
34
|
}
|
|
35
35
|
const BUCKET_MARKER = ".bucket";
|
|
36
|
-
/** Characters allowed in a
|
|
36
|
+
/** Characters allowed in a Teamwork Session or teammate name used as a path segment. */
|
|
37
37
|
const SAFE_SEGMENT_RE = /^[A-Za-z0-9._-]+$/;
|
|
38
38
|
/**
|
|
39
|
-
* Whether a
|
|
39
|
+
* Whether a Teamwork Session or teammate name is usable as a filesystem segment.
|
|
40
40
|
* Discovery scans use this to skip directories created before name
|
|
41
41
|
* validation existed (spaces, CJK, ...) — they can never be valid
|
|
42
|
-
*
|
|
42
|
+
* valid Teamwork Sessions, and `assertSafeName` throwing mid-scan would kill the scan.
|
|
43
43
|
*/
|
|
44
44
|
export function isSafeName(name) {
|
|
45
45
|
return name !== "." && name !== ".." && SAFE_SEGMENT_RE.test(name);
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
48
|
* Reject names that would escape their bucket when joined into a path.
|
|
49
|
-
* A
|
|
49
|
+
* A Teamwork Session or teammate name becomes a filesystem segment; without this guard
|
|
50
50
|
* a name like `../../x` lets `path.join` resolve outside the store and a
|
|
51
51
|
* later `fs.rmSync(recursive)` deletes arbitrary directories.
|
|
52
52
|
*/
|
|
53
|
-
export function assertSafeName(name, kind = "
|
|
53
|
+
export function assertSafeName(name, kind = "Teamwork Session") {
|
|
54
54
|
if (!isSafeName(name)) {
|
|
55
55
|
throw new Error(`Invalid ${kind} name: ${JSON.stringify(name)}. ` +
|
|
56
56
|
`Names may only contain letters, digits, '.', '_' and '-'.`);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
export function
|
|
59
|
+
export function sessionDir(name, project = currentProjectKey()) {
|
|
60
60
|
assertSafeName(name);
|
|
61
61
|
return path.join(projectDir(project), name);
|
|
62
62
|
}
|
|
63
63
|
export function eventsPath(name, project = currentProjectKey()) {
|
|
64
|
-
return path.join(
|
|
64
|
+
return path.join(sessionDir(name, project), "events.jsonl");
|
|
65
65
|
}
|
|
66
66
|
export function seqSidecarPath(name, project = currentProjectKey()) {
|
|
67
|
-
return path.join(
|
|
67
|
+
return path.join(sessionDir(name, project), ".seq");
|
|
68
68
|
}
|
|
69
69
|
export function lockPath(name, project = currentProjectKey()) {
|
|
70
|
-
return path.join(
|
|
70
|
+
return path.join(sessionDir(name, project), `${name}.lock`);
|
|
71
71
|
}
|
|
72
72
|
export function workerFile(name, worker, suffix, project = currentProjectKey()) {
|
|
73
73
|
assertSafeName(worker, "worker");
|
|
74
|
-
return path.join(
|
|
74
|
+
return path.join(sessionDir(name, project), `${worker}.${suffix}`);
|
|
75
75
|
}
|
|
76
76
|
export function workerLockPath(name, worker, project = currentProjectKey()) {
|
|
77
77
|
assertSafeName(worker, "worker");
|
|
78
|
-
return path.join(
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* One-shot migration: move legacy flat channels at `<root>/<name>/` into
|
|
82
|
-
* a `_legacy/` bucket so the new project-scoped layout can use the top
|
|
83
|
-
* level. Idempotent.
|
|
84
|
-
*/
|
|
85
|
-
export function migrateLegacyChannels() {
|
|
86
|
-
const root = channelRoot();
|
|
87
|
-
if (!fs.existsSync(root))
|
|
88
|
-
return;
|
|
89
|
-
const legacy = path.join(root, "_legacy");
|
|
90
|
-
let moved = 0;
|
|
91
|
-
let entries;
|
|
92
|
-
try {
|
|
93
|
-
entries = fs.readdirSync(root);
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
for (const entry of entries) {
|
|
99
|
-
if (entry === "_legacy" || entry === "_default")
|
|
100
|
-
continue;
|
|
101
|
-
const dir = path.join(root, entry);
|
|
102
|
-
let stat;
|
|
103
|
-
try {
|
|
104
|
-
stat = fs.statSync(dir);
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
|
-
if (!stat.isDirectory())
|
|
110
|
-
continue;
|
|
111
|
-
if (fs.existsSync(path.join(dir, BUCKET_MARKER)))
|
|
112
|
-
continue;
|
|
113
|
-
if (!fs.existsSync(path.join(dir, "events.jsonl")))
|
|
114
|
-
continue;
|
|
115
|
-
fs.mkdirSync(legacy, { recursive: true });
|
|
116
|
-
const target = path.join(legacy, entry);
|
|
117
|
-
try {
|
|
118
|
-
fs.renameSync(dir, target);
|
|
119
|
-
moved++;
|
|
120
|
-
}
|
|
121
|
-
catch (err) {
|
|
122
|
-
process.stderr.write(`[channel migrate] failed to move ${entry} to _legacy/: ${err instanceof Error ? err.message : err}\n`);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
if (moved > 0) {
|
|
126
|
-
fs.mkdirSync(legacy, { recursive: true });
|
|
127
|
-
fs.writeFileSync(path.join(legacy, BUCKET_MARKER), "");
|
|
128
|
-
process.stderr.write(`[channel migrate] moved ${moved} legacy channel(s) to ${legacy}\n`);
|
|
129
|
-
}
|
|
78
|
+
return path.join(sessionDir(name, project), `${worker}.spawnlock`);
|
|
130
79
|
}
|
|
131
80
|
export function ensureBucketMarker(project) {
|
|
132
81
|
const dir = projectDir(project);
|
|
@@ -137,7 +86,7 @@ export function ensureBucketMarker(project) {
|
|
|
137
86
|
}
|
|
138
87
|
}
|
|
139
88
|
export function listProjects() {
|
|
140
|
-
const root =
|
|
89
|
+
const root = teamworkRoot();
|
|
141
90
|
if (!fs.existsSync(root))
|
|
142
91
|
return [];
|
|
143
92
|
const out = [];
|
|
@@ -151,8 +100,6 @@ export function listProjects() {
|
|
|
151
100
|
continue;
|
|
152
101
|
}
|
|
153
102
|
if (fs.existsSync(path.join(dir, BUCKET_MARKER)) ||
|
|
154
|
-
entry === "_legacy" ||
|
|
155
|
-
entry === "_default" ||
|
|
156
103
|
entry === GLOBAL_PROJECT_KEY) {
|
|
157
104
|
out.push(entry);
|
|
158
105
|
}
|
|
@@ -160,11 +107,11 @@ export function listProjects() {
|
|
|
160
107
|
return out;
|
|
161
108
|
}
|
|
162
109
|
/**
|
|
163
|
-
* List
|
|
164
|
-
* contain an `events.jsonl` file. Used by the cross-
|
|
165
|
-
* dynamic
|
|
110
|
+
* List Teamwork Session names inside a project bucket — subdirectories that
|
|
111
|
+
* contain an `events.jsonl` file. Used by the cross-session watcher for
|
|
112
|
+
* dynamic Teamwork Session discovery.
|
|
166
113
|
*/
|
|
167
|
-
export function
|
|
114
|
+
export function listSessionIdsInProject(project) {
|
|
168
115
|
const dir = projectDir(project);
|
|
169
116
|
if (!fs.existsSync(dir))
|
|
170
117
|
return [];
|
|
@@ -180,17 +127,17 @@ export function listChannelNamesInProject(project) {
|
|
|
180
127
|
if (entry.startsWith("."))
|
|
181
128
|
continue;
|
|
182
129
|
// Pre-validation legacy dirs (spaces, CJK, ...) can never be valid
|
|
183
|
-
//
|
|
184
|
-
// eventsPath calls throw and kill cross-
|
|
130
|
+
// valid Teamwork Sessions; returning them would make the watcher's sessionDir/
|
|
131
|
+
// eventsPath calls throw and kill cross-session discovery.
|
|
185
132
|
if (!isSafeName(entry))
|
|
186
133
|
continue;
|
|
187
|
-
const
|
|
188
|
-
if (fs.existsSync(
|
|
134
|
+
const teamworkEvents = path.join(dir, entry, "events.jsonl");
|
|
135
|
+
if (fs.existsSync(teamworkEvents))
|
|
189
136
|
out.push(entry);
|
|
190
137
|
}
|
|
191
138
|
return out;
|
|
192
139
|
}
|
|
193
|
-
export function
|
|
140
|
+
export function resolveTeamworkSessionProjectForCreate(name, opts = {}) {
|
|
194
141
|
const scope = opts.scope ?? "project";
|
|
195
142
|
const project = scope === "global"
|
|
196
143
|
? GLOBAL_PROJECT_KEY
|
|
@@ -201,11 +148,10 @@ export function resolveChannelProjectForCreate(name, opts = {}) {
|
|
|
201
148
|
name,
|
|
202
149
|
scope,
|
|
203
150
|
project,
|
|
204
|
-
dir:
|
|
151
|
+
dir: sessionDir(name, project),
|
|
205
152
|
};
|
|
206
153
|
}
|
|
207
|
-
export function
|
|
208
|
-
migrateLegacyChannels();
|
|
154
|
+
export function resolveExistingTeamworkSession(name, opts = {}) {
|
|
209
155
|
if (opts.scope) {
|
|
210
156
|
const project = opts.scope === "global"
|
|
211
157
|
? GLOBAL_PROJECT_KEY
|
|
@@ -213,10 +159,10 @@ export function resolveExistingChannelRef(name, opts = {}) {
|
|
|
213
159
|
? projectKey(opts.cwd)
|
|
214
160
|
: currentProjectKey();
|
|
215
161
|
if (!fs.existsSync(eventsPath(name, project))) {
|
|
216
|
-
throw new Error(`
|
|
162
|
+
throw new Error(`Teamwork Session '${name}' not found in ${opts.scope} scope (${project})`);
|
|
217
163
|
}
|
|
218
|
-
process.env.
|
|
219
|
-
return { name, scope: opts.scope, project, dir:
|
|
164
|
+
process.env.TRELLIS_TEAMWORK_PROJECT = project;
|
|
165
|
+
return { name, scope: opts.scope, project, dir: sessionDir(name, project) };
|
|
220
166
|
}
|
|
221
167
|
const current = currentProjectKey();
|
|
222
168
|
const projectMatches = listProjects()
|
|
@@ -224,41 +170,41 @@ export function resolveExistingChannelRef(name, opts = {}) {
|
|
|
224
170
|
.filter((project) => fs.existsSync(eventsPath(name, project)));
|
|
225
171
|
const globalExists = fs.existsSync(eventsPath(name, GLOBAL_PROJECT_KEY));
|
|
226
172
|
if (globalExists && projectMatches.length > 0) {
|
|
227
|
-
throw new Error(`
|
|
173
|
+
throw new Error(`Teamwork Session '${name}' exists in global and project scopes. Use --scope global or --scope project.`);
|
|
228
174
|
}
|
|
229
175
|
if (globalExists) {
|
|
230
|
-
process.env.
|
|
176
|
+
process.env.TRELLIS_TEAMWORK_PROJECT = GLOBAL_PROJECT_KEY;
|
|
231
177
|
return {
|
|
232
178
|
name,
|
|
233
179
|
scope: "global",
|
|
234
180
|
project: GLOBAL_PROJECT_KEY,
|
|
235
|
-
dir:
|
|
181
|
+
dir: sessionDir(name, GLOBAL_PROJECT_KEY),
|
|
236
182
|
};
|
|
237
183
|
}
|
|
238
184
|
if (fs.existsSync(eventsPath(name, current))) {
|
|
239
|
-
process.env.
|
|
185
|
+
process.env.TRELLIS_TEAMWORK_PROJECT = current;
|
|
240
186
|
return {
|
|
241
187
|
name,
|
|
242
188
|
scope: "project",
|
|
243
189
|
project: current,
|
|
244
|
-
dir:
|
|
190
|
+
dir: sessionDir(name, current),
|
|
245
191
|
};
|
|
246
192
|
}
|
|
247
193
|
if (projectMatches.length === 1) {
|
|
248
|
-
process.env.
|
|
194
|
+
process.env.TRELLIS_TEAMWORK_PROJECT = projectMatches[0];
|
|
249
195
|
return {
|
|
250
196
|
name,
|
|
251
197
|
scope: "project",
|
|
252
198
|
project: projectMatches[0],
|
|
253
|
-
dir:
|
|
199
|
+
dir: sessionDir(name, projectMatches[0]),
|
|
254
200
|
};
|
|
255
201
|
}
|
|
256
202
|
if (projectMatches.length > 1) {
|
|
257
|
-
throw new Error(`
|
|
203
|
+
throw new Error(`Teamwork Session '${name}' exists in multiple project buckets: ${projectMatches.join(", ")}. Run from the owning project cwd or use --scope.`);
|
|
258
204
|
}
|
|
259
|
-
throw new Error(`
|
|
205
|
+
throw new Error(`Teamwork Session '${name}' not found in current project bucket (${current}) or any known scope`);
|
|
260
206
|
}
|
|
261
|
-
export function
|
|
262
|
-
return
|
|
207
|
+
export function selectExistingTeamworkSessionProject(name) {
|
|
208
|
+
return resolveExistingTeamworkSession(name).project;
|
|
263
209
|
}
|
|
264
210
|
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../../src/teamwork/internal/store/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
export declare const GLOBAL_PROJECT_KEY = "_global";
|
|
2
|
-
export type
|
|
2
|
+
export type TeamworkSessionScope = "project" | "global";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Teamwork Session type. `chat` is timeline-first; `forum` is a topic
|
|
5
5
|
* area whose threads are individual topics. Legacy event logs may carry
|
|
6
6
|
* the old `"threads"` / `"thread"` values — readers do NOT normalize them
|
|
7
|
-
* to `forum`; they are treated as non-forum
|
|
7
|
+
* to `forum`; they are treated as non-forum Teamwork Sessions. New writes always
|
|
8
8
|
* emit `"forum"`.
|
|
9
9
|
*/
|
|
10
|
-
export type
|
|
10
|
+
export type TeamworkSessionType = "chat" | "forum";
|
|
11
11
|
export type ThreadAction = "opened" | "comment" | "status" | "labels" | "assignees" | "summary" | "processed" | "rename";
|
|
12
|
-
export type ContextTarget = "
|
|
12
|
+
export type ContextTarget = "session" | "thread";
|
|
13
13
|
export type ContextMutationAction = "add" | "delete";
|
|
14
14
|
export type EventOrigin = "cli" | "api" | "worker";
|
|
15
15
|
/**
|
|
@@ -21,7 +21,7 @@ export type EventOrigin = "cli" | "api" | "worker";
|
|
|
21
21
|
export type InboxPolicy = "explicitOnly" | "broadcastAndExplicit";
|
|
22
22
|
export declare const INBOX_POLICIES: ReadonlySet<InboxPolicy>;
|
|
23
23
|
export declare function parseInboxPolicy(v: string | undefined): InboxPolicy | undefined;
|
|
24
|
-
export declare const
|
|
24
|
+
export declare const TEAMWORK_SESSION_TYPES: ReadonlySet<TeamworkSessionType>;
|
|
25
25
|
export declare const THREAD_ACTIONS: ReadonlySet<ThreadAction>;
|
|
26
26
|
export declare const EVENT_ORIGINS: ReadonlySet<EventOrigin>;
|
|
27
27
|
export interface FileContextEntry {
|
|
@@ -33,29 +33,22 @@ export interface RawContextEntry {
|
|
|
33
33
|
text: string;
|
|
34
34
|
}
|
|
35
35
|
export type ContextEntry = FileContextEntry | RawContextEntry;
|
|
36
|
-
|
|
37
|
-
* Legacy alias kept while old code spells the field "linkedContext". New
|
|
38
|
-
* APIs use `ContextEntry`.
|
|
39
|
-
*
|
|
40
|
-
* @deprecated Use {@link ContextEntry} instead.
|
|
41
|
-
*/
|
|
42
|
-
export type LinkedContextEntry = ContextEntry;
|
|
43
|
-
export interface ChannelRef {
|
|
36
|
+
export interface TeamworkSessionRef {
|
|
44
37
|
name: string;
|
|
45
|
-
scope:
|
|
38
|
+
scope: TeamworkSessionScope;
|
|
46
39
|
/** Storage project bucket key (not the metadata `project` slug). */
|
|
47
40
|
project: string;
|
|
48
41
|
dir: string;
|
|
49
42
|
}
|
|
50
|
-
export interface
|
|
51
|
-
type:
|
|
43
|
+
export interface TeamworkSessionMetadata {
|
|
44
|
+
type: TeamworkSessionType;
|
|
52
45
|
title?: string;
|
|
53
46
|
description?: string;
|
|
54
47
|
context?: ContextEntry[];
|
|
55
48
|
labels?: string[];
|
|
56
49
|
}
|
|
57
|
-
export declare function
|
|
58
|
-
export declare function
|
|
50
|
+
export declare function parseTeamworkSessionScope(v: string | undefined): TeamworkSessionScope | undefined;
|
|
51
|
+
export declare function parseTeamworkSessionType(v: string | undefined): TeamworkSessionType;
|
|
59
52
|
export declare function parseThreadAction(v: string): ThreadAction;
|
|
60
53
|
export declare function parseEventOrigin(v: string | undefined): EventOrigin | undefined;
|
|
61
54
|
export declare function normalizeThreadKey(v: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/teamwork/internal/store/schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAC;AACxD;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnD,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,SAAS,GACT,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjD,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,sBAAsB,CAAC;AAElE,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,WAAW,CAGlD,CAAC;AAEH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,MAAM,GAAG,SAAS,GACpB,WAAW,GAAG,SAAS,CAQzB;AAED,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,mBAAmB,CAGlE,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,YAAY,CASnD,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,WAAW,CAIjD,CAAC;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,oBAAoB,CAAC;IAC5B,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,yBAAyB,CACvC,CAAC,EAAE,MAAM,GAAG,SAAS,GACpB,oBAAoB,GAAG,SAAS,CAMlC;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,mBAAmB,CAMnF;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAOzD;AAED,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,MAAM,GAAG,SAAS,GACpB,WAAW,GAAG,SAAS,CAQzB;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CASpD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAC3B,GAAG,EAAE,MAAM,EAAE,GAAG,SAAS,GACxB,YAAY,EAAE,GAAG,SAAS,CAgB5B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAGlE;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,GACb,YAAY,EAAE,GAAG,SAAS,CAU5B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAE3D"}
|
|
@@ -12,7 +12,7 @@ export function parseInboxPolicy(v) {
|
|
|
12
12
|
}
|
|
13
13
|
return v;
|
|
14
14
|
}
|
|
15
|
-
export const
|
|
15
|
+
export const TEAMWORK_SESSION_TYPES = new Set([
|
|
16
16
|
"chat",
|
|
17
17
|
"forum",
|
|
18
18
|
]);
|
|
@@ -31,7 +31,7 @@ export const EVENT_ORIGINS = new Set([
|
|
|
31
31
|
"api",
|
|
32
32
|
"worker",
|
|
33
33
|
]);
|
|
34
|
-
export function
|
|
34
|
+
export function parseTeamworkSessionScope(v) {
|
|
35
35
|
if (v === undefined)
|
|
36
36
|
return undefined;
|
|
37
37
|
if (v !== "project" && v !== "global") {
|
|
@@ -39,13 +39,10 @@ export function parseChannelScope(v) {
|
|
|
39
39
|
}
|
|
40
40
|
return v;
|
|
41
41
|
}
|
|
42
|
-
export function
|
|
42
|
+
export function parseTeamworkSessionType(v) {
|
|
43
43
|
if (v === undefined)
|
|
44
44
|
return "chat";
|
|
45
|
-
if (v
|
|
46
|
-
throw new Error(`Invalid --type '${v}'. Use '--type forum'.`);
|
|
47
|
-
}
|
|
48
|
-
if (!CHANNEL_TYPES.has(v)) {
|
|
45
|
+
if (!TEAMWORK_SESSION_TYPES.has(v)) {
|
|
49
46
|
throw new Error("Invalid --type. Must be one of: chat, forum");
|
|
50
47
|
}
|
|
51
48
|
return v;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/teamwork/internal/store/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* unparseable lines are left intact — that is mid-file damage, not a
|
|
7
7
|
* torn tail.
|
|
8
8
|
*
|
|
9
|
-
* Caller must hold the
|
|
9
|
+
* Caller must hold the Teamwork Session lock.
|
|
10
10
|
*/
|
|
11
11
|
export declare function truncateIncompleteTail(jsonlPath: string): Promise<void>;
|
|
12
12
|
/**
|
|
@@ -15,7 +15,7 @@ export declare function truncateIncompleteTail(jsonlPath: string): Promise<void>
|
|
|
15
15
|
* lower than the JSONL tail, or ahead of the JSONL tail (for example,
|
|
16
16
|
* after manual corruption or a stale future reservation).
|
|
17
17
|
*
|
|
18
|
-
* Caller must hold the
|
|
18
|
+
* Caller must hold the Teamwork Session lock when invoking this and the
|
|
19
19
|
* subsequent JSONL append + sidecar write.
|
|
20
20
|
*/
|
|
21
21
|
export declare function reconcileSeq(jsonlPath: string, sidecarPath: string): Promise<number>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seq.d.ts","sourceRoot":"","sources":["../../../../src/teamwork/internal/store/seq.ts"],"names":[],"mappings":"AAgGA;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B7E;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAKf"}
|
|
@@ -95,7 +95,7 @@ async function readLastJsonlSeq(jsonlPath) {
|
|
|
95
95
|
if (found !== null)
|
|
96
96
|
return found;
|
|
97
97
|
if (text.split("\n").some((line) => line.trim() !== "")) {
|
|
98
|
-
throw new Error(`Unable to recover
|
|
98
|
+
throw new Error(`Unable to recover Teamwork Session sequence from ${jsonlPath}`);
|
|
99
99
|
}
|
|
100
100
|
return 0;
|
|
101
101
|
}
|
|
@@ -107,7 +107,7 @@ async function readLastJsonlSeq(jsonlPath) {
|
|
|
107
107
|
* unparseable lines are left intact — that is mid-file damage, not a
|
|
108
108
|
* torn tail.
|
|
109
109
|
*
|
|
110
|
-
* Caller must hold the
|
|
110
|
+
* Caller must hold the Teamwork Session lock.
|
|
111
111
|
*/
|
|
112
112
|
export async function truncateIncompleteTail(jsonlPath) {
|
|
113
113
|
if (!fs.existsSync(jsonlPath))
|
|
@@ -146,7 +146,7 @@ export async function truncateIncompleteTail(jsonlPath) {
|
|
|
146
146
|
* lower than the JSONL tail, or ahead of the JSONL tail (for example,
|
|
147
147
|
* after manual corruption or a stale future reservation).
|
|
148
148
|
*
|
|
149
|
-
* Caller must hold the
|
|
149
|
+
* Caller must hold the Teamwork Session lock when invoking this and the
|
|
150
150
|
* subsequent JSONL append + sidecar write.
|
|
151
151
|
*/
|
|
152
152
|
export async function reconcileSeq(jsonlPath, sidecarPath) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seq.js","sourceRoot":"","sources":["../../../../src/teamwork/internal/store/seq.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type TeamworkEvent } from "./events.js";
|
|
2
|
+
import { type TeamworkSessionMetadata } from "./schema.js";
|
|
3
|
+
/**
|
|
4
|
+
* Single source of truth for projecting Teamwork Session metadata from its
|
|
5
|
+
* event stream.
|
|
6
|
+
*
|
|
7
|
+
* Covers:
|
|
8
|
+
* - create event metadata (type, description, labels, context)
|
|
9
|
+
* - `kind:"context", target:"session"` add/delete projection
|
|
10
|
+
* - `kind:"teamwork", action:"title"` set/clear projection
|
|
11
|
+
*/
|
|
12
|
+
export declare function reduceTeamworkSessionMetadata(events: TeamworkEvent[]): TeamworkSessionMetadata;
|
|
13
|
+
/** Project a single create event into Teamwork Session metadata. */
|
|
14
|
+
export declare function metadataFromCreateEvent(create: TeamworkEvent | undefined): TeamworkSessionMetadata;
|
|
15
|
+
//# sourceMappingURL=teamwork-session-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teamwork-session-metadata.d.ts","sourceRoot":"","sources":["../../../../src/teamwork/internal/store/teamwork-session-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,KAAK,uBAAuB,EAG7B,MAAM,aAAa,CAAC;AAErB;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,aAAa,EAAE,GACtB,uBAAuB,CAuDzB;AAED,oEAAoE;AACpE,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,GAAG,SAAS,GAChC,uBAAuB,CAGzB"}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isTeamworkMetadataEvent, isContextEvent, isCreateEvent, } from "./events.js";
|
|
2
2
|
import { asContextEntries, asStringArray, contextEntryKey, } from "./schema.js";
|
|
3
3
|
/**
|
|
4
|
-
* Single source of truth for projecting
|
|
4
|
+
* Single source of truth for projecting Teamwork Session metadata from its
|
|
5
5
|
* event stream.
|
|
6
6
|
*
|
|
7
7
|
* Covers:
|
|
8
8
|
* - create event metadata (type, description, labels, context)
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
11
|
-
* `forum`; they project to `chat` so thread APIs reject them
|
|
12
|
-
* - `kind:"context", target:"channel"` add/delete projection
|
|
13
|
-
* - `kind:"channel", action:"title"` set/clear projection
|
|
9
|
+
* - `kind:"context", target:"session"` add/delete projection
|
|
10
|
+
* - `kind:"teamwork", action:"title"` set/clear projection
|
|
14
11
|
*/
|
|
15
|
-
export function
|
|
12
|
+
export function reduceTeamworkSessionMetadata(events) {
|
|
16
13
|
let type = "chat";
|
|
17
14
|
let description;
|
|
18
15
|
let labels;
|
|
@@ -34,19 +31,16 @@ export function reduceChannelMetadata(events) {
|
|
|
34
31
|
};
|
|
35
32
|
for (const ev of events) {
|
|
36
33
|
if (isCreateEvent(ev)) {
|
|
37
|
-
type =
|
|
34
|
+
type = normalizeTeamworkSessionType(ev.type);
|
|
38
35
|
if (typeof ev.description === "string")
|
|
39
36
|
description = ev.description;
|
|
40
37
|
labels = asStringArray(ev.labels) ?? labels;
|
|
41
|
-
|
|
42
|
-
// `linkedContext`. New entries replace any prior state because a
|
|
43
|
-
// `create` event is always seq 1.
|
|
44
|
-
const initial = asContextEntries(ev.context) ?? asContextEntries(ev.linkedContext);
|
|
38
|
+
const initial = asContextEntries(ev.context);
|
|
45
39
|
contextMap.clear();
|
|
46
40
|
addEntries(initial);
|
|
47
41
|
continue;
|
|
48
42
|
}
|
|
49
|
-
if (isContextEvent(ev) && ev.target === "
|
|
43
|
+
if (isContextEvent(ev) && ev.target === "session") {
|
|
50
44
|
const entries = asContextEntries(ev.context);
|
|
51
45
|
if (ev.action === "add")
|
|
52
46
|
addEntries(entries);
|
|
@@ -54,7 +48,7 @@ export function reduceChannelMetadata(events) {
|
|
|
54
48
|
deleteEntries(entries);
|
|
55
49
|
continue;
|
|
56
50
|
}
|
|
57
|
-
if (
|
|
51
|
+
if (isTeamworkMetadataEvent(ev) && ev.action === "title") {
|
|
58
52
|
const next = ev.title;
|
|
59
53
|
if (typeof next === "string" && next.length > 0)
|
|
60
54
|
title = next;
|
|
@@ -72,23 +66,15 @@ export function reduceChannelMetadata(events) {
|
|
|
72
66
|
...(labels !== undefined ? { labels } : {}),
|
|
73
67
|
};
|
|
74
68
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Legacy compatibility: project a single create event into channel
|
|
77
|
-
* metadata. New callers should use {@link reduceChannelMetadata} over
|
|
78
|
-
* the full event stream so context add/delete, title set/clear, and
|
|
79
|
-
* legacy `linkedContext` projection are honored.
|
|
80
|
-
*/
|
|
69
|
+
/** Project a single create event into Teamwork Session metadata. */
|
|
81
70
|
export function metadataFromCreateEvent(create) {
|
|
82
71
|
if (!create || !isCreateEvent(create))
|
|
83
72
|
return { type: "chat" };
|
|
84
|
-
return
|
|
73
|
+
return reduceTeamworkSessionMetadata([create]);
|
|
85
74
|
}
|
|
86
|
-
function
|
|
75
|
+
function normalizeTeamworkSessionType(value) {
|
|
87
76
|
if (value === "forum")
|
|
88
77
|
return "forum";
|
|
89
|
-
// Legacy `"thread"` / `"threads"` values are intentionally not
|
|
90
|
-
// upgraded to `forum`; they fall through to `chat` so forum/thread
|
|
91
|
-
// APIs reject pre-rename channels.
|
|
92
78
|
return "chat";
|
|
93
79
|
}
|
|
94
|
-
//# sourceMappingURL=
|
|
80
|
+
//# sourceMappingURL=teamwork-session-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teamwork-session-metadata.js","sourceRoot":"","sources":["../../../../src/teamwork/internal/store/teamwork-session-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type TeamworkEvent, type ContextTeamworkEvent, type ThreadTeamworkEvent } from "./events.js";
|
|
2
2
|
import { type ContextEntry } from "./schema.js";
|
|
3
3
|
export interface ThreadState {
|
|
4
4
|
thread: string;
|
|
@@ -26,12 +26,12 @@ export interface ThreadAliasResolver {
|
|
|
26
26
|
resolve(key: string): string;
|
|
27
27
|
aliasesFor(currentKey: string): string[];
|
|
28
28
|
}
|
|
29
|
-
export declare function buildThreadAliasResolver(events:
|
|
30
|
-
export declare function reduceThreads(events:
|
|
29
|
+
export declare function buildThreadAliasResolver(events: TeamworkEvent[]): ThreadAliasResolver;
|
|
30
|
+
export declare function reduceThreads(events: TeamworkEvent[]): ThreadState[];
|
|
31
31
|
/**
|
|
32
32
|
* Return the timeline events that belong to a given thread (or any of
|
|
33
33
|
* its rename aliases), in seq order. Includes thread events and
|
|
34
34
|
* thread-targeted context events.
|
|
35
35
|
*/
|
|
36
|
-
export declare function collectThreadTimeline(events:
|
|
36
|
+
export declare function collectThreadTimeline(events: TeamworkEvent[], threadKey: string): (ThreadTeamworkEvent | ContextTeamworkEvent)[];
|
|
37
37
|
//# sourceMappingURL=thread-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-state.d.ts","sourceRoot":"","sources":["../../../../src/teamwork/internal/store/thread-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB;6EACyE;IACzE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAMD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC1C;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,EAAE,GACtB,mBAAmB,CAsDrB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE,CAgFpE;AAmDD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EAAE,EACvB,SAAS,EAAE,MAAM,GAChB,CAAC,mBAAmB,GAAG,oBAAoB,CAAC,EAAE,CAgBhD"}
|
|
@@ -142,7 +142,7 @@ function applyThreadAction(current, ev) {
|
|
|
142
142
|
current.description = ev.description;
|
|
143
143
|
}
|
|
144
144
|
{
|
|
145
|
-
const initial = asContextEntries(ev.context)
|
|
145
|
+
const initial = asContextEntries(ev.context);
|
|
146
146
|
if (initial) {
|
|
147
147
|
current.contextMap.clear();
|
|
148
148
|
for (const entry of initial) {
|