@agent-relay/factory 0.1.14 → 0.1.15

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.
@@ -17,6 +17,26 @@ export type DispatchAttemptState = {
17
17
  terminal: boolean;
18
18
  backoffUntilMs: number;
19
19
  };
20
+ export type GithubIssueCommentWatchPending = {
21
+ correlationId: string;
22
+ kind: 'triage' | 'agent-question';
23
+ authorizedAuthor: string;
24
+ decision?: TriageDecision;
25
+ claimedByCommentId?: string;
26
+ };
27
+ export type GithubIssueCommentWatchState = {
28
+ issue: IssueRef;
29
+ source: {
30
+ owner: string;
31
+ repo: string;
32
+ number: number;
33
+ url: string;
34
+ };
35
+ pending: GithubIssueCommentWatchPending[];
36
+ sinceCommentId?: string;
37
+ lastSeenCommentId?: string;
38
+ processedCommentIds?: string[];
39
+ };
20
40
  export interface BatchSnapshot {
21
41
  readonly size: number;
22
42
  readonly inFlight: InFlightIssue[];
@@ -48,6 +68,9 @@ export interface StateStore {
48
68
  getSlackThread(workspaceId: string, issueKey: string): Promise<string | undefined>;
49
69
  clearSlackThread(workspaceId: string, issueKey: string): Promise<void>;
50
70
  clearSlackThreads(workspaceId: string): Promise<void>;
71
+ setGithubIssueCommentWatch(workspaceId: string, key: string, watch: GithubIssueCommentWatchState): Promise<void>;
72
+ listGithubIssueCommentWatches(workspaceId: string): Promise<Array<[string, GithubIssueCommentWatchState]>>;
73
+ clearGithubIssueCommentWatch(workspaceId: string, key: string): Promise<void>;
51
74
  seenAgentQuestion(workspaceId: string, key: string): Promise<boolean>;
52
75
  markAgentQuestion(workspaceId: string, key: string): Promise<void>;
53
76
  claimAgentQuestion(workspaceId: string, key: string): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/ports/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC7F,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAExD,MAAM,MAAM,cAAc,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAA;AAElE,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,QAAQ,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,YAAY,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAA;IAC9B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,aAAa,GAAG,SAAS,CAAA;IACpD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;IACxD,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAA;IACpC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAA;IAClC,QAAQ,IAAI,OAAO,CAAA;IACnB,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAAA;IAC3E,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAA;IACzD,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAA;IAClD,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC9B,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,GAAG,MAAM,CAAA;IACrF,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAA;IACjE,WAAW,CACT,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,EAC3C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,WAAW,GAClB,IAAI,CAAA;IACP,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7G;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACrD,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1G,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAA;IACrG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAErE,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtF,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAA;IACtF,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACjE,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhE,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtF,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAClF,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAErD,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACrE,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClE,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAEtE,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpG,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAA;IAC9F,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAA;IACxF,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEpE,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtF,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CACjF"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/ports/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { GithubIssueCommentWatchState } from '../ports/state.js';
2
+ import { InMemoryStateStore, type InMemoryStateStoreOptions } from './in-memory-state-store.js';
3
+ export type FileStateStoreOptions = InMemoryStateStoreOptions & {
4
+ watchStatePath: string;
5
+ };
6
+ export declare const githubWatchStatePath: (registryPath: string) => string;
7
+ /**
8
+ * Keeps the factory's general runtime bookkeeping in memory while persisting
9
+ * GitHub escalation watches atomically so they survive a CLI process restart.
10
+ * Mutations reload under an advisory lock so independent processes merge
11
+ * updates instead of publishing divergent cached documents.
12
+ */
13
+ export declare class FileStateStore extends InMemoryStateStore {
14
+ #private;
15
+ constructor(options: FileStateStoreOptions);
16
+ setGithubIssueCommentWatch(workspaceId: string, key: string, watch: GithubIssueCommentWatchState): Promise<void>;
17
+ listGithubIssueCommentWatches(workspaceId: string): Promise<Array<[string, GithubIssueCommentWatchState]>>;
18
+ clearGithubIssueCommentWatch(workspaceId: string, key: string): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=file-state-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-state-store.d.ts","sourceRoot":"","sources":["../../src/state/file-state-store.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AAO5F,MAAM,MAAM,qBAAqB,GAAG,yBAAyB,GAAG;IAC9D,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,cAAc,MAAM,KAAG,MACM,CAAA;AASlE;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,kBAAkB;;gBAIxC,OAAO,EAAE,qBAAqB;IAK3B,0BAA0B,CACvC,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,IAAI,CAAC;IAWD,6BAA6B,CAC1C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC,CAAC;IAQ1C,4BAA4B,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAqE7F"}
@@ -0,0 +1,132 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { mkdir, open, readFile, rename, rm } from 'node:fs/promises';
3
+ import { dirname, join } from 'node:path';
4
+ import lockfile from 'proper-lockfile';
5
+ import { InMemoryStateStore } from './in-memory-state-store.js';
6
+ export const githubWatchStatePath = (registryPath) => join(dirname(registryPath), 'github-issue-comment-watches.json');
7
+ // proper-lockfile refreshes a live writer's lease at half this interval. If a
8
+ // process crashes, the next writer can reclaim its lock after this TTL. The
9
+ // longer interval trades rare crash-recovery latency for enough headroom that
10
+ // serialization, fsync, GC, disk stalls, or a briefly paused process do not
11
+ // let a second writer reclaim a lock that is still actively owned.
12
+ const WATCH_STATE_LOCK_STALE_MS = 60_000;
13
+ /**
14
+ * Keeps the factory's general runtime bookkeeping in memory while persisting
15
+ * GitHub escalation watches atomically so they survive a CLI process restart.
16
+ * Mutations reload under an advisory lock so independent processes merge
17
+ * updates instead of publishing divergent cached documents.
18
+ */
19
+ export class FileStateStore extends InMemoryStateStore {
20
+ #watchStatePath;
21
+ #operation = Promise.resolve();
22
+ constructor(options) {
23
+ super(options);
24
+ this.#watchStatePath = options.watchStatePath;
25
+ }
26
+ async setGithubIssueCommentWatch(workspaceId, key, watch) {
27
+ await this.#exclusive(async () => {
28
+ await this.#withMutationLock(async () => {
29
+ const document = await this.#loadFromDisk();
30
+ const workspace = document.workspaces[workspaceId] ??= {};
31
+ workspace[key] = cloneWatch(watch);
32
+ await this.#persist(document);
33
+ });
34
+ });
35
+ }
36
+ async listGithubIssueCommentWatches(workspaceId) {
37
+ return await this.#exclusive(async () => {
38
+ const document = await this.#loadFromDisk();
39
+ return Object.entries(document.workspaces[workspaceId] ?? {})
40
+ .map(([key, watch]) => [key, cloneWatch(watch)]);
41
+ });
42
+ }
43
+ async clearGithubIssueCommentWatch(workspaceId, key) {
44
+ await this.#exclusive(async () => {
45
+ await this.#withMutationLock(async () => {
46
+ const document = await this.#loadFromDisk();
47
+ const workspace = document.workspaces[workspaceId];
48
+ if (!workspace || !(key in workspace))
49
+ return;
50
+ delete workspace[key];
51
+ if (Object.keys(workspace).length === 0) {
52
+ delete document.workspaces[workspaceId];
53
+ }
54
+ await this.#persist(document);
55
+ });
56
+ });
57
+ }
58
+ async #loadFromDisk() {
59
+ try {
60
+ const parsed = JSON.parse(await readFile(this.#watchStatePath, 'utf8'));
61
+ return parseDocument(parsed);
62
+ }
63
+ catch (error) {
64
+ if (!isMissingFileError(error))
65
+ throw error;
66
+ return { version: 1, workspaces: {} };
67
+ }
68
+ }
69
+ async #persist(document) {
70
+ const temporaryPath = `${this.#watchStatePath}.${process.pid}.${randomUUID()}.tmp`;
71
+ try {
72
+ const handle = await open(temporaryPath, 'wx', 0o600);
73
+ try {
74
+ await handle.writeFile(`${JSON.stringify(document, null, 2)}\n`);
75
+ await handle.sync();
76
+ }
77
+ finally {
78
+ await handle.close();
79
+ }
80
+ await rename(temporaryPath, this.#watchStatePath);
81
+ await syncParentDirectory(this.#watchStatePath);
82
+ }
83
+ finally {
84
+ await rm(temporaryPath, { force: true });
85
+ }
86
+ }
87
+ async #withMutationLock(operation) {
88
+ await mkdir(dirname(this.#watchStatePath), { recursive: true });
89
+ const release = await lockfile.lock(this.#watchStatePath, {
90
+ realpath: false,
91
+ stale: WATCH_STATE_LOCK_STALE_MS,
92
+ update: WATCH_STATE_LOCK_STALE_MS / 2,
93
+ retries: {
94
+ forever: true,
95
+ factor: 1.2,
96
+ minTimeout: 10,
97
+ maxTimeout: 100,
98
+ randomize: true,
99
+ },
100
+ });
101
+ try {
102
+ return await operation();
103
+ }
104
+ finally {
105
+ await release();
106
+ }
107
+ }
108
+ async #exclusive(operation) {
109
+ const result = this.#operation.then(operation, operation);
110
+ this.#operation = result.then(() => undefined, () => undefined);
111
+ return await result;
112
+ }
113
+ }
114
+ const parseDocument = (value) => {
115
+ if (!isRecord(value) || value.version !== 1 || !isRecord(value.workspaces)) {
116
+ throw new Error('Factory GitHub watch state file is invalid');
117
+ }
118
+ return value;
119
+ };
120
+ const cloneWatch = (watch) => structuredClone(watch);
121
+ const syncParentDirectory = async (filePath) => {
122
+ const handle = await open(dirname(filePath), 'r');
123
+ try {
124
+ await handle.sync();
125
+ }
126
+ finally {
127
+ await handle.close();
128
+ }
129
+ };
130
+ const isRecord = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
131
+ const isMissingFileError = (error) => isRecord(error) && error.code === 'ENOENT';
132
+ //# sourceMappingURL=file-state-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-state-store.js","sourceRoot":"","sources":["../../src/state/file-state-store.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { BatchSnapshot, CriticalRecord, DispatchAttemptState, RegistryHandoffAgent, StateStore } from '../ports/state.js';
1
+ import type { BatchSnapshot, CriticalRecord, DispatchAttemptState, GithubIssueCommentWatchState, RegistryHandoffAgent, StateStore } from '../ports/state.js';
2
2
  export type InMemoryStateStoreOptions = {
3
3
  batchSize: number;
4
4
  agentQuestionDedupeLimit?: number;
@@ -18,6 +18,9 @@ export declare class InMemoryStateStore implements StateStore {
18
18
  getSlackThread(workspaceId: string, issueKey: string): Promise<string | undefined>;
19
19
  clearSlackThread(workspaceId: string, issueKey: string): Promise<void>;
20
20
  clearSlackThreads(workspaceId: string): Promise<void>;
21
+ setGithubIssueCommentWatch(workspaceId: string, key: string, watch: GithubIssueCommentWatchState): Promise<void>;
22
+ listGithubIssueCommentWatches(workspaceId: string): Promise<Array<[string, GithubIssueCommentWatchState]>>;
23
+ clearGithubIssueCommentWatch(workspaceId: string, key: string): Promise<void>;
21
24
  seenAgentQuestion(workspaceId: string, key: string): Promise<boolean>;
22
25
  markAgentQuestion(workspaceId: string, key: string): Promise<void>;
23
26
  claimAgentQuestion(workspaceId: string, key: string): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory-state-store.d.ts","sourceRoot":"","sources":["../../src/state/in-memory-state-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"in-memory-state-store.d.ts","sourceRoot":"","sources":["../../src/state/in-memory-state-store.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,16 @@ export class InMemoryStateStore {
51
51
  async clearSlackThreads(workspaceId) {
52
52
  this.#workspace(workspaceId).slackThreadIds.clear();
53
53
  }
54
+ async setGithubIssueCommentWatch(workspaceId, key, watch) {
55
+ this.#workspace(workspaceId).githubIssueCommentWatches.set(key, cloneGithubIssueCommentWatch(watch));
56
+ }
57
+ async listGithubIssueCommentWatches(workspaceId) {
58
+ return [...this.#workspace(workspaceId).githubIssueCommentWatches]
59
+ .map(([key, watch]) => [key, cloneGithubIssueCommentWatch(watch)]);
60
+ }
61
+ async clearGithubIssueCommentWatch(workspaceId, key) {
62
+ this.#workspace(workspaceId).githubIssueCommentWatches.delete(key);
63
+ }
54
64
  async seenAgentQuestion(workspaceId, key) {
55
65
  return this.#workspace(workspaceId).seenAgentQuestionKeys.has(key);
56
66
  }
@@ -101,6 +111,7 @@ export class InMemoryStateStore {
101
111
  criticalMessages: new Map(),
102
112
  resumedExitKeys: new Set(),
103
113
  slackThreadIds: new Map(),
114
+ githubIssueCommentWatches: new Map(),
104
115
  seenAgentQuestionKeys: new Set(),
105
116
  seenAgentQuestionOrder: [],
106
117
  dispatchAttempts: new Map(),
@@ -112,4 +123,23 @@ export class InMemoryStateStore {
112
123
  return state;
113
124
  }
114
125
  }
126
+ const cloneGithubIssueCommentWatch = (watch) => ({
127
+ ...watch,
128
+ issue: { ...watch.issue },
129
+ source: { ...watch.source },
130
+ processedCommentIds: watch.processedCommentIds ? [...watch.processedCommentIds] : undefined,
131
+ pending: watch.pending.map((pending) => ({
132
+ ...pending,
133
+ ...(pending.decision ? {
134
+ decision: {
135
+ ...pending.decision,
136
+ issue: { ...pending.decision.issue },
137
+ routes: pending.decision.routes.map((route) => ({ ...route })),
138
+ implementers: pending.decision.implementers.map((agent) => ({ ...agent })),
139
+ reviewer: { ...pending.decision.reviewer },
140
+ ...(pending.decision.workflow ? { workflow: { ...pending.decision.workflow } } : {}),
141
+ },
142
+ } : {}),
143
+ })),
144
+ });
115
145
  //# sourceMappingURL=in-memory-state-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory-state-store.js","sourceRoot":"","sources":["../../src/state/in-memory-state-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"in-memory-state-store.js","sourceRoot":"","sources":["../../src/state/in-memory-state-store.ts"],"names":[],"mappings":"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"}
@@ -17,33 +17,33 @@ export declare const AgentSpecSchema: z.ZodObject<{
17
17
  }, "strip", z.ZodTypeAny, {
18
18
  repo: string;
19
19
  name: string;
20
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
21
20
  task: string;
21
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
22
22
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
23
23
  channel?: string | undefined;
24
24
  restartPolicy?: unknown;
25
25
  workflow?: string | undefined;
26
26
  model?: string | undefined;
27
- inputs?: Record<string, unknown> | undefined;
28
- clonePath?: string | undefined;
29
27
  node?: string | undefined;
30
28
  sessionRef?: string | undefined;
29
+ clonePath?: string | undefined;
31
30
  invocationId?: string | undefined;
31
+ inputs?: Record<string, unknown> | undefined;
32
32
  }, {
33
33
  repo: string;
34
34
  name: string;
35
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
36
35
  task: string;
36
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
37
37
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
38
38
  channel?: string | undefined;
39
39
  restartPolicy?: unknown;
40
40
  workflow?: string | undefined;
41
41
  model?: string | undefined;
42
- inputs?: Record<string, unknown> | undefined;
43
- clonePath?: string | undefined;
44
42
  node?: string | undefined;
45
43
  sessionRef?: string | undefined;
44
+ clonePath?: string | undefined;
46
45
  invocationId?: string | undefined;
46
+ inputs?: Record<string, unknown> | undefined;
47
47
  }>;
48
48
  export declare const TriageDecisionSchema: z.ZodObject<{
49
49
  issue: z.ZodObject<{
@@ -91,33 +91,33 @@ export declare const TriageDecisionSchema: z.ZodObject<{
91
91
  }, "strip", z.ZodTypeAny, {
92
92
  repo: string;
93
93
  name: string;
94
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
95
94
  task: string;
95
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
96
96
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
97
97
  channel?: string | undefined;
98
98
  restartPolicy?: unknown;
99
99
  workflow?: string | undefined;
100
100
  model?: string | undefined;
101
- inputs?: Record<string, unknown> | undefined;
102
- clonePath?: string | undefined;
103
101
  node?: string | undefined;
104
102
  sessionRef?: string | undefined;
103
+ clonePath?: string | undefined;
105
104
  invocationId?: string | undefined;
105
+ inputs?: Record<string, unknown> | undefined;
106
106
  }, {
107
107
  repo: string;
108
108
  name: string;
109
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
110
109
  task: string;
110
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
111
111
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
112
112
  channel?: string | undefined;
113
113
  restartPolicy?: unknown;
114
114
  workflow?: string | undefined;
115
115
  model?: string | undefined;
116
- inputs?: Record<string, unknown> | undefined;
117
- clonePath?: string | undefined;
118
116
  node?: string | undefined;
119
117
  sessionRef?: string | undefined;
118
+ clonePath?: string | undefined;
120
119
  invocationId?: string | undefined;
120
+ inputs?: Record<string, unknown> | undefined;
121
121
  }>, "many">;
122
122
  workflow: z.ZodOptional<z.ZodObject<{
123
123
  name: z.ZodString;
@@ -137,33 +137,33 @@ export declare const TriageDecisionSchema: z.ZodObject<{
137
137
  }, "strip", z.ZodTypeAny, {
138
138
  repo: string;
139
139
  name: string;
140
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
141
140
  task: string;
141
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
142
142
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
143
143
  channel?: string | undefined;
144
144
  restartPolicy?: unknown;
145
145
  workflow?: string | undefined;
146
146
  model?: string | undefined;
147
- inputs?: Record<string, unknown> | undefined;
148
- clonePath?: string | undefined;
149
147
  node?: string | undefined;
150
148
  sessionRef?: string | undefined;
149
+ clonePath?: string | undefined;
151
150
  invocationId?: string | undefined;
151
+ inputs?: Record<string, unknown> | undefined;
152
152
  }, {
153
153
  repo: string;
154
154
  name: string;
155
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
156
155
  task: string;
156
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
157
157
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
158
158
  channel?: string | undefined;
159
159
  restartPolicy?: unknown;
160
160
  workflow?: string | undefined;
161
161
  model?: string | undefined;
162
- inputs?: Record<string, unknown> | undefined;
163
- clonePath?: string | undefined;
164
162
  node?: string | undefined;
165
163
  sessionRef?: string | undefined;
164
+ clonePath?: string | undefined;
166
165
  invocationId?: string | undefined;
166
+ inputs?: Record<string, unknown> | undefined;
167
167
  }>>;
168
168
  reviewer: z.ZodObject<{
169
169
  name: z.ZodString;
@@ -183,33 +183,33 @@ export declare const TriageDecisionSchema: z.ZodObject<{
183
183
  }, "strip", z.ZodTypeAny, {
184
184
  repo: string;
185
185
  name: string;
186
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
187
186
  task: string;
187
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
188
188
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
189
189
  channel?: string | undefined;
190
190
  restartPolicy?: unknown;
191
191
  workflow?: string | undefined;
192
192
  model?: string | undefined;
193
- inputs?: Record<string, unknown> | undefined;
194
- clonePath?: string | undefined;
195
193
  node?: string | undefined;
196
194
  sessionRef?: string | undefined;
195
+ clonePath?: string | undefined;
197
196
  invocationId?: string | undefined;
197
+ inputs?: Record<string, unknown> | undefined;
198
198
  }, {
199
199
  repo: string;
200
200
  name: string;
201
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
202
201
  task: string;
202
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
203
203
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
204
204
  channel?: string | undefined;
205
205
  restartPolicy?: unknown;
206
206
  workflow?: string | undefined;
207
207
  model?: string | undefined;
208
- inputs?: Record<string, unknown> | undefined;
209
- clonePath?: string | undefined;
210
208
  node?: string | undefined;
211
209
  sessionRef?: string | undefined;
210
+ clonePath?: string | undefined;
212
211
  invocationId?: string | undefined;
212
+ inputs?: Record<string, unknown> | undefined;
213
213
  }>;
214
214
  thin: z.ZodBoolean;
215
215
  confidence: z.ZodEnum<["high", "low"]>;
@@ -218,25 +218,25 @@ export declare const TriageDecisionSchema: z.ZodObject<{
218
218
  reviewer: {
219
219
  repo: string;
220
220
  name: string;
221
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
222
221
  task: string;
222
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
223
223
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
224
224
  channel?: string | undefined;
225
225
  restartPolicy?: unknown;
226
226
  workflow?: string | undefined;
227
227
  model?: string | undefined;
228
- inputs?: Record<string, unknown> | undefined;
229
- clonePath?: string | undefined;
230
228
  node?: string | undefined;
231
229
  sessionRef?: string | undefined;
230
+ clonePath?: string | undefined;
232
231
  invocationId?: string | undefined;
232
+ inputs?: Record<string, unknown> | undefined;
233
233
  };
234
234
  routes: {
235
235
  repo: string;
236
236
  rationale: string;
237
237
  clonePath?: string | undefined;
238
238
  }[];
239
- scope: "team" | "workflow" | "single";
239
+ scope: "workflow" | "team" | "single";
240
240
  issue: {
241
241
  path: string;
242
242
  uuid: string;
@@ -246,60 +246,60 @@ export declare const TriageDecisionSchema: z.ZodObject<{
246
246
  implementers: {
247
247
  repo: string;
248
248
  name: string;
249
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
250
249
  task: string;
250
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
251
251
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
252
252
  channel?: string | undefined;
253
253
  restartPolicy?: unknown;
254
254
  workflow?: string | undefined;
255
255
  model?: string | undefined;
256
- inputs?: Record<string, unknown> | undefined;
257
- clonePath?: string | undefined;
258
256
  node?: string | undefined;
259
257
  sessionRef?: string | undefined;
258
+ clonePath?: string | undefined;
260
259
  invocationId?: string | undefined;
260
+ inputs?: Record<string, unknown> | undefined;
261
261
  }[];
262
262
  thin: boolean;
263
263
  confidence: "high" | "low";
264
264
  workflow?: {
265
265
  repo: string;
266
266
  name: string;
267
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
268
267
  task: string;
268
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
269
269
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
270
270
  channel?: string | undefined;
271
271
  restartPolicy?: unknown;
272
272
  workflow?: string | undefined;
273
273
  model?: string | undefined;
274
- inputs?: Record<string, unknown> | undefined;
275
- clonePath?: string | undefined;
276
274
  node?: string | undefined;
277
275
  sessionRef?: string | undefined;
276
+ clonePath?: string | undefined;
278
277
  invocationId?: string | undefined;
278
+ inputs?: Record<string, unknown> | undefined;
279
279
  } | undefined;
280
280
  }, {
281
281
  reviewer: {
282
282
  repo: string;
283
283
  name: string;
284
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
285
284
  task: string;
285
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
286
286
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
287
287
  channel?: string | undefined;
288
288
  restartPolicy?: unknown;
289
289
  workflow?: string | undefined;
290
290
  model?: string | undefined;
291
- inputs?: Record<string, unknown> | undefined;
292
- clonePath?: string | undefined;
293
291
  node?: string | undefined;
294
292
  sessionRef?: string | undefined;
293
+ clonePath?: string | undefined;
295
294
  invocationId?: string | undefined;
295
+ inputs?: Record<string, unknown> | undefined;
296
296
  };
297
297
  routes: {
298
298
  repo: string;
299
299
  rationale: string;
300
300
  clonePath?: string | undefined;
301
301
  }[];
302
- scope: "team" | "workflow" | "single";
302
+ scope: "workflow" | "team" | "single";
303
303
  issue: {
304
304
  path: string;
305
305
  uuid: string;
@@ -309,36 +309,36 @@ export declare const TriageDecisionSchema: z.ZodObject<{
309
309
  implementers: {
310
310
  repo: string;
311
311
  name: string;
312
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
313
312
  task: string;
313
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
314
314
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
315
315
  channel?: string | undefined;
316
316
  restartPolicy?: unknown;
317
317
  workflow?: string | undefined;
318
318
  model?: string | undefined;
319
- inputs?: Record<string, unknown> | undefined;
320
- clonePath?: string | undefined;
321
319
  node?: string | undefined;
322
320
  sessionRef?: string | undefined;
321
+ clonePath?: string | undefined;
323
322
  invocationId?: string | undefined;
323
+ inputs?: Record<string, unknown> | undefined;
324
324
  }[];
325
325
  thin: boolean;
326
326
  confidence: "high" | "low";
327
327
  workflow?: {
328
328
  repo: string;
329
329
  name: string;
330
- role: "implementer" | "reviewer" | "babysitter" | "workflow";
331
330
  task: string;
331
+ role: "implementer" | "reviewer" | "babysitter" | "workflow";
332
332
  capability: "spawn:codex" | "spawn:claude" | "workflow:run";
333
333
  channel?: string | undefined;
334
334
  restartPolicy?: unknown;
335
335
  workflow?: string | undefined;
336
336
  model?: string | undefined;
337
- inputs?: Record<string, unknown> | undefined;
338
- clonePath?: string | undefined;
339
337
  node?: string | undefined;
340
338
  sessionRef?: string | undefined;
339
+ clonePath?: string | undefined;
341
340
  invocationId?: string | undefined;
341
+ inputs?: Record<string, unknown> | undefined;
342
342
  } | undefined;
343
343
  }>;
344
344
  //# sourceMappingURL=schema.d.ts.map