@pennixrv/trellis-core 0.7.0-beta.8 → 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
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { appendEvent, } from "../internal/store/events.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { sessionDir, ensureBucketMarker, eventsPath, } from "../internal/store/paths.js";
|
|
5
|
+
import { parseTeamworkSessionType } from "../internal/store/schema.js";
|
|
6
|
+
import { resolveTeamworkSession } from "./resolve.js";
|
|
7
7
|
/**
|
|
8
|
-
* Create a new
|
|
9
|
-
* `force` is set, in which case the existing
|
|
8
|
+
* Create a new Teamwork Session. Throws when it already exists unless
|
|
9
|
+
* `force` is set, in which case the existing Teamwork Session directory is wiped
|
|
10
10
|
* before the create event is appended.
|
|
11
11
|
*/
|
|
12
|
-
export async function
|
|
13
|
-
const ref =
|
|
14
|
-
|
|
12
|
+
export async function createTeamworkSession(opts) {
|
|
13
|
+
const ref = resolveTeamworkSession({
|
|
14
|
+
sessionId: opts.sessionId,
|
|
15
15
|
scope: opts.scope ?? "project",
|
|
16
16
|
...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
|
|
17
17
|
...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
|
|
18
18
|
forCreate: true,
|
|
19
19
|
});
|
|
20
|
-
const
|
|
21
|
-
const events = eventsPath(opts.
|
|
20
|
+
const sessionType = parseTeamworkSessionType(opts.type);
|
|
21
|
+
const events = eventsPath(opts.sessionId, ref.project);
|
|
22
22
|
const dir = ref.dir;
|
|
23
23
|
if (fs.existsSync(events) && !opts.force) {
|
|
24
|
-
throw new Error(`
|
|
24
|
+
throw new Error(`Teamwork Session '${opts.sessionId}' already exists at ${dir}. Use --force to overwrite.`);
|
|
25
25
|
}
|
|
26
26
|
if (opts.force && fs.existsSync(dir)) {
|
|
27
|
-
await
|
|
27
|
+
await forceCleanTeamworkSession(opts.sessionId, ref.project);
|
|
28
28
|
}
|
|
29
29
|
ensureBucketMarker(ref.project);
|
|
30
30
|
const cwd = opts.cwd ?? process.cwd();
|
|
31
|
-
const event = await appendEvent(opts.
|
|
31
|
+
const event = await appendEvent(opts.sessionId, {
|
|
32
32
|
kind: "create",
|
|
33
33
|
by: opts.by,
|
|
34
34
|
cwd,
|
|
35
35
|
scope: ref.scope,
|
|
36
|
-
type:
|
|
36
|
+
type: sessionType,
|
|
37
37
|
...(opts.task ? { task: opts.task } : {}),
|
|
38
38
|
...(opts.project ? { project: opts.project } : {}),
|
|
39
39
|
...(opts.labels && opts.labels.length > 0 ? { labels: opts.labels } : {}),
|
|
@@ -42,16 +42,13 @@ export async function createChannel(opts) {
|
|
|
42
42
|
? { context: opts.context }
|
|
43
43
|
: {}),
|
|
44
44
|
...(opts.ephemeral ? { ephemeral: true } : {}),
|
|
45
|
-
...(channelType !== "forum" && opts.ownerSessionId
|
|
46
|
-
? { ownerSessionId: opts.ownerSessionId }
|
|
47
|
-
: {}),
|
|
48
45
|
...(opts.origin ? { origin: opts.origin } : {}),
|
|
49
46
|
...(opts.meta ? { meta: opts.meta } : {}),
|
|
50
47
|
}, ref.project);
|
|
51
48
|
return event;
|
|
52
49
|
}
|
|
53
|
-
async function
|
|
54
|
-
const dir =
|
|
50
|
+
async function forceCleanTeamworkSession(name, project) {
|
|
51
|
+
const dir = sessionDir(name, project);
|
|
55
52
|
let entries;
|
|
56
53
|
try {
|
|
57
54
|
entries = fs.readdirSync(dir);
|
|
@@ -89,7 +86,7 @@ async function forceCleanChannel(name, project) {
|
|
|
89
86
|
fs.rmSync(dir, { recursive: true, force: true });
|
|
90
87
|
}
|
|
91
88
|
catch (err) {
|
|
92
|
-
process.stderr.write(`[
|
|
89
|
+
process.stderr.write(`[trellis teamwork create --force] warning: failed to fully clean ${dir}: ${err instanceof Error ? err.message : err}\n`);
|
|
93
90
|
}
|
|
94
91
|
}
|
|
95
92
|
function pidAlive(pid) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/teamwork/api/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import type {
|
|
1
|
+
import { type MessageTeamworkEvent } from "../internal/store/events.js";
|
|
2
|
+
import type { TeamworkSessionAddressOptions } from "./types.js";
|
|
3
3
|
export type WorkerInboxErrorCode = "WORKER_INBOX_WORKER_NOT_FOUND" | "WORKER_INBOX_WORKER_TERMINAL";
|
|
4
4
|
export declare class WorkerInboxError extends Error {
|
|
5
5
|
readonly code: WorkerInboxErrorCode;
|
|
6
|
-
readonly
|
|
6
|
+
readonly sessionId: string;
|
|
7
7
|
readonly workerId: string;
|
|
8
|
-
constructor(code: WorkerInboxErrorCode,
|
|
8
|
+
constructor(code: WorkerInboxErrorCode, sessionId: string, workerId: string, message?: string);
|
|
9
9
|
}
|
|
10
|
-
export interface ReadWorkerInboxInput extends
|
|
10
|
+
export interface ReadWorkerInboxInput extends TeamworkSessionAddressOptions {
|
|
11
11
|
workerId: string;
|
|
12
12
|
afterSeq?: number;
|
|
13
13
|
limit?: number;
|
|
14
14
|
includeTerminal?: boolean;
|
|
15
15
|
}
|
|
16
|
-
export interface WatchWorkerInboxInput extends
|
|
16
|
+
export interface WatchWorkerInboxInput extends TeamworkSessionAddressOptions {
|
|
17
17
|
workerId: string;
|
|
18
18
|
sinceSeq?: number;
|
|
19
19
|
fromStart?: boolean;
|
|
@@ -21,14 +21,14 @@ export interface WatchWorkerInboxInput extends ChannelAddressOptions {
|
|
|
21
21
|
}
|
|
22
22
|
export interface WorkerInboxMessage {
|
|
23
23
|
workerId: string;
|
|
24
|
-
event:
|
|
24
|
+
event: MessageTeamworkEvent;
|
|
25
25
|
seq: number;
|
|
26
26
|
cursor: number;
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Read durable inbox messages for a specific worker.
|
|
30
30
|
*
|
|
31
|
-
* Reduces the
|
|
31
|
+
* Reduces the teammate registry from the Teamwork Session event log, finds the teammate,
|
|
32
32
|
* and filters `message` events through `matchesInboxPolicy()` using the
|
|
33
33
|
* worker's latest `inboxPolicy`. Core only reasons from the durable event
|
|
34
34
|
* log; it does not claim the OS process is live.
|
|
@@ -39,7 +39,7 @@ export declare function readWorkerInbox(input: ReadWorkerInboxInput): Promise<Wo
|
|
|
39
39
|
*
|
|
40
40
|
* Performs upfront worker validation and captures the current `lastSeq`,
|
|
41
41
|
* then returns a generator that yields future inbox-matching messages
|
|
42
|
-
* through the
|
|
42
|
+
* through the Teamwork Session watch primitives. The generator ends when a terminal
|
|
43
43
|
* event for the watched worker arrives; it does not cross a terminal event
|
|
44
44
|
* into a later respawn with the same id.
|
|
45
45
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../../src/teamwork/api/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAC;AAKrC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,MAAM,oBAAoB,GAC5B,+BAA+B,GAC/B,8BAA8B,CAAC;AAEnC,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAGxB,IAAI,EAAE,oBAAoB,EAC1B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM;CAQnB;AAeD,MAAM,WAAW,oBAAqB,SAAQ,6BAA6B;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,6BAA6B;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAWD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA0C/B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAsC5D"}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readTeamworkEvents as readEventsInternal, } from "../internal/store/events.js";
|
|
2
2
|
import { matchesInboxPolicy } from "../internal/store/inbox.js";
|
|
3
3
|
import { watchEvents } from "../internal/store/watch.js";
|
|
4
4
|
import { reduceWorkerRegistry } from "../internal/store/worker-state.js";
|
|
5
|
-
import {
|
|
5
|
+
import { resolveTeamworkSession } from "./resolve.js";
|
|
6
6
|
export class WorkerInboxError extends Error {
|
|
7
7
|
code;
|
|
8
|
-
|
|
8
|
+
sessionId;
|
|
9
9
|
workerId;
|
|
10
|
-
constructor(code,
|
|
11
|
-
super(message ?? defaultMessage(code,
|
|
10
|
+
constructor(code, sessionId, workerId, message) {
|
|
11
|
+
super(message ?? defaultMessage(code, sessionId, workerId));
|
|
12
12
|
this.name = "WorkerInboxError";
|
|
13
13
|
this.code = code;
|
|
14
|
-
this.
|
|
14
|
+
this.sessionId = sessionId;
|
|
15
15
|
this.workerId = workerId;
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
function defaultMessage(code,
|
|
18
|
+
function defaultMessage(code, sessionId, workerId) {
|
|
19
19
|
switch (code) {
|
|
20
20
|
case "WORKER_INBOX_WORKER_NOT_FOUND":
|
|
21
|
-
return `
|
|
21
|
+
return `Teammate '${workerId}' not found in Teamwork Session '${sessionId}'`;
|
|
22
22
|
case "WORKER_INBOX_WORKER_TERMINAL":
|
|
23
|
-
return `
|
|
23
|
+
return `Teammate '${workerId}' in Teamwork Session '${sessionId}' is terminal`;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
function resolve(input) {
|
|
27
|
-
return
|
|
28
|
-
|
|
27
|
+
return resolveTeamworkSession({
|
|
28
|
+
sessionId: input.sessionId,
|
|
29
29
|
...(input.scope !== undefined ? { scope: input.scope } : {}),
|
|
30
30
|
...(input.projectKey !== undefined ? { projectKey: input.projectKey } : {}),
|
|
31
31
|
...(input.cwd !== undefined ? { cwd: input.cwd } : {}),
|
|
@@ -34,21 +34,21 @@ function resolve(input) {
|
|
|
34
34
|
/**
|
|
35
35
|
* Read durable inbox messages for a specific worker.
|
|
36
36
|
*
|
|
37
|
-
* Reduces the
|
|
37
|
+
* Reduces the teammate registry from the Teamwork Session event log, finds the teammate,
|
|
38
38
|
* and filters `message` events through `matchesInboxPolicy()` using the
|
|
39
39
|
* worker's latest `inboxPolicy`. Core only reasons from the durable event
|
|
40
40
|
* log; it does not claim the OS process is live.
|
|
41
41
|
*/
|
|
42
42
|
export async function readWorkerInbox(input) {
|
|
43
43
|
const ref = resolve(input);
|
|
44
|
-
const events = await readEventsInternal(input.
|
|
44
|
+
const events = await readEventsInternal(input.sessionId, ref.project);
|
|
45
45
|
const registry = reduceWorkerRegistry(events, ref);
|
|
46
46
|
const worker = registry.workers.find((w) => w.workerId === input.workerId);
|
|
47
47
|
if (!worker) {
|
|
48
|
-
throw new WorkerInboxError("WORKER_INBOX_WORKER_NOT_FOUND", input.
|
|
48
|
+
throw new WorkerInboxError("WORKER_INBOX_WORKER_NOT_FOUND", input.sessionId, input.workerId);
|
|
49
49
|
}
|
|
50
50
|
if (worker.terminal && !input.includeTerminal) {
|
|
51
|
-
throw new WorkerInboxError("WORKER_INBOX_WORKER_TERMINAL", input.
|
|
51
|
+
throw new WorkerInboxError("WORKER_INBOX_WORKER_TERMINAL", input.sessionId, input.workerId);
|
|
52
52
|
}
|
|
53
53
|
if (input.limit !== undefined &&
|
|
54
54
|
(!Number.isInteger(input.limit) || input.limit < 0)) {
|
|
@@ -79,7 +79,7 @@ export async function readWorkerInbox(input) {
|
|
|
79
79
|
*
|
|
80
80
|
* Performs upfront worker validation and captures the current `lastSeq`,
|
|
81
81
|
* then returns a generator that yields future inbox-matching messages
|
|
82
|
-
* through the
|
|
82
|
+
* through the Teamwork Session watch primitives. The generator ends when a terminal
|
|
83
83
|
* event for the watched worker arrives; it does not cross a terminal event
|
|
84
84
|
* into a later respawn with the same id.
|
|
85
85
|
*
|
|
@@ -89,14 +89,14 @@ export async function readWorkerInbox(input) {
|
|
|
89
89
|
*/
|
|
90
90
|
export async function watchWorkerInbox(input) {
|
|
91
91
|
const ref = resolve(input);
|
|
92
|
-
const events = await readEventsInternal(input.
|
|
92
|
+
const events = await readEventsInternal(input.sessionId, ref.project);
|
|
93
93
|
const registry = reduceWorkerRegistry(events, ref);
|
|
94
94
|
const worker = registry.workers.find((w) => w.workerId === input.workerId);
|
|
95
95
|
if (!worker) {
|
|
96
|
-
throw new WorkerInboxError("WORKER_INBOX_WORKER_NOT_FOUND", input.
|
|
96
|
+
throw new WorkerInboxError("WORKER_INBOX_WORKER_NOT_FOUND", input.sessionId, input.workerId);
|
|
97
97
|
}
|
|
98
98
|
if (worker.terminal) {
|
|
99
|
-
throw new WorkerInboxError("WORKER_INBOX_WORKER_TERMINAL", input.
|
|
99
|
+
throw new WorkerInboxError("WORKER_INBOX_WORKER_TERMINAL", input.sessionId, input.workerId);
|
|
100
100
|
}
|
|
101
101
|
const policy = worker.inboxPolicy;
|
|
102
102
|
const lastSeq = events.length > 0 ? events[events.length - 1].seq : 0;
|
|
@@ -113,10 +113,10 @@ export async function watchWorkerInbox(input) {
|
|
|
113
113
|
else {
|
|
114
114
|
watchOpts.sinceSeq = lastSeq;
|
|
115
115
|
}
|
|
116
|
-
return inboxWatchGenerator(input.
|
|
116
|
+
return inboxWatchGenerator(input.sessionId, input.workerId, policy, watchOpts);
|
|
117
117
|
}
|
|
118
|
-
async function* inboxWatchGenerator(
|
|
119
|
-
for await (const ev of watchEvents(
|
|
118
|
+
async function* inboxWatchGenerator(sessionId, workerId, policy, watchOpts) {
|
|
119
|
+
for await (const ev of watchEvents(sessionId, { includeNonMeaningful: true, includeProgress: false }, watchOpts)) {
|
|
120
120
|
if (isTerminalForWorker(ev, workerId))
|
|
121
121
|
return;
|
|
122
122
|
if (matchesInboxPolicy(ev, workerId, policy)) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../src/teamwork/api/inbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type TeamworkEvent, type InterruptReason } from "../internal/store/events.js";
|
|
2
2
|
import type { WorkerRuntime } from "./runtime.js";
|
|
3
|
-
import type {
|
|
4
|
-
export interface InterruptWorkerInput extends
|
|
3
|
+
import type { TeamworkSessionAddressOptions, MutationCommonOptions } from "./types.js";
|
|
4
|
+
export interface InterruptWorkerInput extends TeamworkSessionAddressOptions, MutationCommonOptions {
|
|
5
5
|
workerId: string;
|
|
6
6
|
message?: string;
|
|
7
7
|
reason?: InterruptReason;
|
|
@@ -9,7 +9,7 @@ export interface InterruptWorkerInput extends ChannelAddressOptions, MutationCom
|
|
|
9
9
|
export type InterruptDelivery = "interrupted-current-turn" | "no-active-turn" | "worker-terminal" | "worker-unknown";
|
|
10
10
|
export interface InterruptWorkerResult {
|
|
11
11
|
/** Last durable event appended (`interrupted` if attempted, else `interrupt_requested`). */
|
|
12
|
-
event:
|
|
12
|
+
event: TeamworkEvent;
|
|
13
13
|
interrupted: boolean;
|
|
14
14
|
delivery: InterruptDelivery;
|
|
15
15
|
}
|
|
@@ -17,7 +17,7 @@ export interface InterruptWorkerResult {
|
|
|
17
17
|
* Durable-event-only interrupt. Appends an `interrupt_requested` event
|
|
18
18
|
* recording intent. Does not touch any worker runtime.
|
|
19
19
|
*/
|
|
20
|
-
export declare function requestInterrupt(input: InterruptWorkerInput): Promise<
|
|
20
|
+
export declare function requestInterrupt(input: InterruptWorkerInput): Promise<TeamworkEvent>;
|
|
21
21
|
/**
|
|
22
22
|
* Orchestration interrupt. Appends `interrupt_requested`, asks the
|
|
23
23
|
* injected runtime to interrupt the worker, then appends `interrupted`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interrupt.d.ts","sourceRoot":"","sources":["../../../src/teamwork/api/interrupt.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,EAAyB,aAAa,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEvF,MAAM,WAAW,oBACf,SAAQ,6BAA6B,EACnC,qBAAqB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GACzB,0BAA0B,GAC1B,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,CAAC;AAErB,MAAM,WAAW,qBAAqB;IACpC,4FAA4F;IAC5F,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAsBxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,qBAAqB,CAAC,CAiFhC"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { appendEvent,
|
|
1
|
+
import { appendEvent, readTeamworkEvents, } from "../internal/store/events.js";
|
|
2
2
|
import { reduceWorkerRegistry } from "../internal/store/worker-state.js";
|
|
3
|
-
import {
|
|
3
|
+
import { resolveTeamworkSession } from "./resolve.js";
|
|
4
4
|
/**
|
|
5
5
|
* Durable-event-only interrupt. Appends an `interrupt_requested` event
|
|
6
6
|
* recording intent. Does not touch any worker runtime.
|
|
7
7
|
*/
|
|
8
8
|
export async function requestInterrupt(input) {
|
|
9
|
-
const ref =
|
|
10
|
-
|
|
9
|
+
const ref = resolveTeamworkSession({
|
|
10
|
+
sessionId: input.sessionId,
|
|
11
11
|
...(input.scope !== undefined ? { scope: input.scope } : {}),
|
|
12
12
|
...(input.projectKey !== undefined
|
|
13
13
|
? { projectKey: input.projectKey }
|
|
14
14
|
: {}),
|
|
15
15
|
...(input.cwd !== undefined ? { cwd: input.cwd } : {}),
|
|
16
16
|
});
|
|
17
|
-
return appendEvent(input.
|
|
17
|
+
return appendEvent(input.sessionId, {
|
|
18
18
|
kind: "interrupt_requested",
|
|
19
19
|
by: input.by,
|
|
20
20
|
worker: input.workerId,
|
|
@@ -34,19 +34,19 @@ export async function requestInterrupt(input) {
|
|
|
34
34
|
* is unknown or terminal in the durable registry.
|
|
35
35
|
*/
|
|
36
36
|
export async function interruptWorker(input, runtime) {
|
|
37
|
-
const ref =
|
|
38
|
-
|
|
37
|
+
const ref = resolveTeamworkSession({
|
|
38
|
+
sessionId: input.sessionId,
|
|
39
39
|
...(input.scope !== undefined ? { scope: input.scope } : {}),
|
|
40
40
|
...(input.projectKey !== undefined
|
|
41
41
|
? { projectKey: input.projectKey }
|
|
42
42
|
: {}),
|
|
43
43
|
...(input.cwd !== undefined ? { cwd: input.cwd } : {}),
|
|
44
44
|
});
|
|
45
|
-
const events = await
|
|
45
|
+
const events = await readTeamworkEvents(input.sessionId, ref.project);
|
|
46
46
|
const registry = reduceWorkerRegistry(events);
|
|
47
47
|
const worker = registry.workers.find((w) => w.workerId === input.workerId);
|
|
48
48
|
const turnId = worker?.activeTurnId;
|
|
49
|
-
const requestEvent = await appendEvent(input.
|
|
49
|
+
const requestEvent = await appendEvent(input.sessionId, {
|
|
50
50
|
kind: "interrupt_requested",
|
|
51
51
|
by: input.by,
|
|
52
52
|
worker: input.workerId,
|
|
@@ -78,7 +78,7 @@ export async function interruptWorker(input, runtime) {
|
|
|
78
78
|
...(input.message !== undefined ? { message: input.message } : {}),
|
|
79
79
|
})
|
|
80
80
|
: { method: "none", outcome: "unsupported" };
|
|
81
|
-
const interruptedEvent = await appendEvent(input.
|
|
81
|
+
const interruptedEvent = await appendEvent(input.sessionId, {
|
|
82
82
|
kind: "interrupted",
|
|
83
83
|
by: input.by,
|
|
84
84
|
worker: input.workerId,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interrupt.js","sourceRoot":"","sources":["../../../src/teamwork/api/interrupt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ThreadTeamworkEvent } from "../internal/store/events.js";
|
|
2
2
|
import type { PostThreadOptions, RenameThreadOptions } from "./types.js";
|
|
3
3
|
/**
|
|
4
|
-
* Append a structured thread event. Throws when the
|
|
4
|
+
* Append a structured thread event. Throws when the Teamwork Session is not of
|
|
5
5
|
* `forum` type, when `action` is invalid, or when a non-`opened` event
|
|
6
6
|
* is missing a thread key.
|
|
7
7
|
*/
|
|
8
|
-
export declare function postThread(opts: PostThreadOptions): Promise<
|
|
8
|
+
export declare function postThread(opts: PostThreadOptions): Promise<ThreadTeamworkEvent>;
|
|
9
9
|
/**
|
|
10
10
|
* Rename a thread. Records a `kind:"thread", action:"rename"` event so
|
|
11
11
|
* subsequent reducers can flatten alias chains.
|
|
12
12
|
*/
|
|
13
|
-
export declare function renameThread(opts: RenameThreadOptions): Promise<
|
|
13
|
+
export declare function renameThread(opts: RenameThreadOptions): Promise<ThreadTeamworkEvent>;
|
|
14
14
|
//# sourceMappingURL=post-thread.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-thread.d.ts","sourceRoot":"","sources":["../../../src/teamwork/api/post-thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,6BAA6B,CAAC;AAOrC,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAYzE;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,mBAAmB,CAAC,CA0C9B;AAWD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAyD9B"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { appendEvent, } from "../internal/store/events.js";
|
|
2
2
|
import { normalizeThreadKey } from "../internal/store/schema.js";
|
|
3
3
|
import { buildThreadAliasResolver, } from "../internal/store/thread-state.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { readForumTeamworkEvents } from "./assert.js";
|
|
5
|
+
import { resolveTeamworkSession } from "./resolve.js";
|
|
6
6
|
const VALID_ACTIONS = new Set([
|
|
7
7
|
"opened",
|
|
8
8
|
"comment",
|
|
@@ -13,13 +13,13 @@ const VALID_ACTIONS = new Set([
|
|
|
13
13
|
"processed",
|
|
14
14
|
]);
|
|
15
15
|
/**
|
|
16
|
-
* Append a structured thread event. Throws when the
|
|
16
|
+
* Append a structured thread event. Throws when the Teamwork Session is not of
|
|
17
17
|
* `forum` type, when `action` is invalid, or when a non-`opened` event
|
|
18
18
|
* is missing a thread key.
|
|
19
19
|
*/
|
|
20
20
|
export async function postThread(opts) {
|
|
21
|
-
const ref =
|
|
22
|
-
|
|
21
|
+
const ref = resolveTeamworkSession({
|
|
22
|
+
sessionId: opts.sessionId,
|
|
23
23
|
...(opts.scope !== undefined ? { scope: opts.scope } : {}),
|
|
24
24
|
...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
|
|
25
25
|
...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
|
|
@@ -27,9 +27,9 @@ export async function postThread(opts) {
|
|
|
27
27
|
if (!VALID_ACTIONS.has(opts.action)) {
|
|
28
28
|
throw new Error(`Invalid thread action '${opts.action}'. Must be one of: ${[...VALID_ACTIONS].join(", ")}`);
|
|
29
29
|
}
|
|
30
|
-
await
|
|
30
|
+
await readForumTeamworkEvents(opts.sessionId, ref.project, "post");
|
|
31
31
|
const thread = resolveThreadKey(opts.action, opts.thread);
|
|
32
|
-
const event = await appendEvent(opts.
|
|
32
|
+
const event = await appendEvent(opts.sessionId, {
|
|
33
33
|
kind: "thread",
|
|
34
34
|
by: opts.by,
|
|
35
35
|
...(opts.idempotencyKey !== undefined
|
|
@@ -66,13 +66,13 @@ function resolveThreadKey(action, value) {
|
|
|
66
66
|
* subsequent reducers can flatten alias chains.
|
|
67
67
|
*/
|
|
68
68
|
export async function renameThread(opts) {
|
|
69
|
-
const ref =
|
|
70
|
-
|
|
69
|
+
const ref = resolveTeamworkSession({
|
|
70
|
+
sessionId: opts.sessionId,
|
|
71
71
|
...(opts.scope !== undefined ? { scope: opts.scope } : {}),
|
|
72
72
|
...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
|
|
73
73
|
...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
|
|
74
74
|
});
|
|
75
|
-
const events = await
|
|
75
|
+
const events = await readForumTeamworkEvents(opts.sessionId, ref.project, "thread rename");
|
|
76
76
|
const oldKey = normalizeThreadKey(opts.thread);
|
|
77
77
|
const newKey = normalizeThreadKey(opts.newThread);
|
|
78
78
|
if (oldKey === newKey) {
|
|
@@ -90,12 +90,12 @@ export async function renameThread(opts) {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
if (!knownKeys.has(oldCurrent)) {
|
|
93
|
-
throw new Error(`Thread '${oldKey}' not found in
|
|
93
|
+
throw new Error(`Thread '${oldKey}' not found in Teamwork Session '${opts.sessionId}'.`);
|
|
94
94
|
}
|
|
95
95
|
if (knownKeys.has(currentTarget) && currentTarget !== oldCurrent) {
|
|
96
|
-
throw new Error(`Thread '${newKey}' already exists in
|
|
96
|
+
throw new Error(`Thread '${newKey}' already exists in Teamwork Session '${opts.sessionId}'. Refusing to merge two timelines.`);
|
|
97
97
|
}
|
|
98
|
-
const event = await appendEvent(opts.
|
|
98
|
+
const event = await appendEvent(opts.sessionId, {
|
|
99
99
|
kind: "thread",
|
|
100
100
|
by: opts.by,
|
|
101
101
|
action: "rename",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-thread.js","sourceRoot":"","sources":["../../../src/teamwork/api/post-thread.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type TeamworkEvent, type ContextTeamworkEvent, type ReadTeamworkEventsPagination, type ThreadTeamworkEvent } from "../internal/store/events.js";
|
|
2
|
+
import { type ThreadState } from "../internal/store/thread-state.js";
|
|
3
|
+
import type { TeamworkSessionMetadata } from "../internal/store/schema.js";
|
|
4
|
+
import type { TeamworkSessionAddressOptions } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Cursor pagination options. Omitting all of them returns every event,
|
|
7
|
+
* preserving the read-all default for existing callers.
|
|
8
|
+
*/
|
|
9
|
+
export interface ReadTeamworkEventsOptions extends TeamworkSessionAddressOptions, ReadTeamworkEventsPagination {
|
|
10
|
+
}
|
|
11
|
+
export declare function readTeamworkEvents(opts: ReadTeamworkEventsOptions): Promise<TeamworkEvent[]>;
|
|
12
|
+
export declare function readTeamworkSessionMetadata(opts: TeamworkSessionAddressOptions): Promise<TeamworkSessionMetadata>;
|
|
13
|
+
export declare function listForumThreads(opts: TeamworkSessionAddressOptions): Promise<ThreadState[]>;
|
|
14
|
+
export declare function showThread(opts: TeamworkSessionAddressOptions & {
|
|
15
|
+
thread: string;
|
|
16
|
+
}): Promise<(ThreadTeamworkEvent | ContextTeamworkEvent)[]>;
|
|
17
|
+
//# sourceMappingURL=read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/teamwork/api/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACzB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAG3E,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,yBACf,SAAQ,6BAA6B,EACnC,4BAA4B;CAAG;AAEnC,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC,CAY1B;AAED,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,6BAA6B,GAClC,OAAO,CAAC,uBAAuB,CAAC,CAGlC;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,6BAA6B,GAClC,OAAO,CAAC,WAAW,EAAE,CAAC,CAaxB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,6BAA6B,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GACvD,OAAO,CAAC,CAAC,mBAAmB,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAazD"}
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { readTeamworkEvents as readEventsInternal, } from "../internal/store/events.js";
|
|
2
|
+
import { reduceTeamworkSessionMetadata } from "../internal/store/teamwork-session-metadata.js";
|
|
3
3
|
import { collectThreadTimeline, reduceThreads, } from "../internal/store/thread-state.js";
|
|
4
4
|
import { normalizeThreadKey } from "../internal/store/schema.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
export async function
|
|
8
|
-
const ref =
|
|
9
|
-
|
|
5
|
+
import { readForumTeamworkEvents } from "./assert.js";
|
|
6
|
+
import { resolveTeamworkSession } from "./resolve.js";
|
|
7
|
+
export async function readTeamworkEvents(opts) {
|
|
8
|
+
const ref = resolveTeamworkSession({
|
|
9
|
+
sessionId: opts.sessionId,
|
|
10
10
|
...(opts.scope !== undefined ? { scope: opts.scope } : {}),
|
|
11
11
|
...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
|
|
12
12
|
...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
|
|
13
13
|
});
|
|
14
|
-
return readEventsInternal(opts.
|
|
14
|
+
return readEventsInternal(opts.sessionId, ref.project, {
|
|
15
15
|
...(opts.afterSeq !== undefined ? { afterSeq: opts.afterSeq } : {}),
|
|
16
16
|
...(opts.beforeSeq !== undefined ? { beforeSeq: opts.beforeSeq } : {}),
|
|
17
17
|
...(opts.limit !== undefined ? { limit: opts.limit } : {}),
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
-
export async function
|
|
21
|
-
const events = await
|
|
22
|
-
return
|
|
20
|
+
export async function readTeamworkSessionMetadata(opts) {
|
|
21
|
+
const events = await readTeamworkEvents(opts);
|
|
22
|
+
return reduceTeamworkSessionMetadata(events);
|
|
23
23
|
}
|
|
24
24
|
export async function listForumThreads(opts) {
|
|
25
|
-
const ref =
|
|
26
|
-
|
|
25
|
+
const ref = resolveTeamworkSession({
|
|
26
|
+
sessionId: opts.sessionId,
|
|
27
27
|
...(opts.scope !== undefined ? { scope: opts.scope } : {}),
|
|
28
28
|
...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
|
|
29
29
|
...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
|
|
30
30
|
});
|
|
31
|
-
const events = await
|
|
31
|
+
const events = await readForumTeamworkEvents(opts.sessionId, ref.project, "forum");
|
|
32
32
|
return reduceThreads(events);
|
|
33
33
|
}
|
|
34
34
|
export async function showThread(opts) {
|
|
35
|
-
const ref =
|
|
36
|
-
|
|
35
|
+
const ref = resolveTeamworkSession({
|
|
36
|
+
sessionId: opts.sessionId,
|
|
37
37
|
...(opts.scope !== undefined ? { scope: opts.scope } : {}),
|
|
38
38
|
...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
|
|
39
39
|
...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
|
|
40
40
|
});
|
|
41
|
-
const events = await
|
|
41
|
+
const events = await readForumTeamworkEvents(opts.sessionId, ref.project, "thread");
|
|
42
42
|
return collectThreadTimeline(events, normalizeThreadKey(opts.thread));
|
|
43
43
|
}
|
|
44
44
|
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/teamwork/api/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TeamworkSessionRef, TeamworkSessionScope } from "../internal/store/schema.js";
|
|
2
|
+
export interface ResolveTeamworkSessionOptions {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
scope?: TeamworkSessionScope;
|
|
5
|
+
/** Storage project bucket key. Wins when set. */
|
|
6
|
+
projectKey?: string;
|
|
7
|
+
/** cwd used to derive the project bucket when scope is "project". */
|
|
8
|
+
cwd?: string;
|
|
9
|
+
/**
|
|
10
|
+
* If true, do not require the Teamwork Session to exist on disk. Used for the
|
|
11
|
+
* create path. Defaults to false (existence required).
|
|
12
|
+
*/
|
|
13
|
+
forCreate?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolve a `TeamworkSessionRef` honoring `--scope`, an explicit `projectKey`,
|
|
17
|
+
* or cwd-derived defaults. Mirrors the CLI's scope-resolution rules so
|
|
18
|
+
* downstream consumers behave the same way.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveTeamworkSession(opts: ResolveTeamworkSessionOptions): TeamworkSessionRef;
|
|
21
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/teamwork/api/resolve.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,6BAA6B,GAAG,kBAAkB,CAoB9F"}
|