@brightbeamai/chap-coordinator 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +271 -0
- package/dist/api-C3nkEk-B.d.cts +260 -0
- package/dist/api-CmSvlIqO.d.ts +260 -0
- package/dist/api.cjs +125 -0
- package/dist/api.cjs.map +1 -0
- package/dist/api.d.cts +4 -0
- package/dist/api.d.ts +4 -0
- package/dist/api.js +98 -0
- package/dist/api.js.map +1 -0
- package/dist/index.cjs +2804 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +175 -0
- package/dist/index.d.ts +175 -0
- package/dist/index.js +2762 -0
- package/dist/index.js.map +1 -0
- package/dist/jsonrpc.cjs +103 -0
- package/dist/jsonrpc.cjs.map +1 -0
- package/dist/jsonrpc.d.cts +65 -0
- package/dist/jsonrpc.d.ts +65 -0
- package/dist/jsonrpc.js +76 -0
- package/dist/jsonrpc.js.map +1 -0
- package/dist/methods.cjs +19 -0
- package/dist/methods.cjs.map +1 -0
- package/dist/methods.d.cts +455 -0
- package/dist/methods.d.ts +455 -0
- package/dist/methods.js +1 -0
- package/dist/methods.js.map +1 -0
- package/dist/patch.cjs +277 -0
- package/dist/patch.cjs.map +1 -0
- package/dist/patch.d.cts +29 -0
- package/dist/patch.d.ts +29 -0
- package/dist/patch.js +250 -0
- package/dist/patch.js.map +1 -0
- package/dist/storage/sqlite.cjs +94 -0
- package/dist/storage/sqlite.cjs.map +1 -0
- package/dist/storage/sqlite.d.cts +67 -0
- package/dist/storage/sqlite.d.ts +67 -0
- package/dist/storage/sqlite.js +76 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/storage/store.cjs +45 -0
- package/dist/storage/store.cjs.map +1 -0
- package/dist/storage/store.d.cts +53 -0
- package/dist/storage/store.d.ts +53 -0
- package/dist/storage/store.js +20 -0
- package/dist/storage/store.js.map +1 -0
- package/dist/types.cjs +34 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +287 -0
- package/dist/types.d.ts +287 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { MethodParams, WorkspaceCreateResult, WorkspaceDescribeResult, OkResult, TaskCreateResult, TaskRouteResult, ReviewRequestResult, ReviewDepthResult, DecideOverrideResult, EscalateRaiseResult, EscalateAutoResult, WhisperAskResult, DeliberateOpenResult, DeliberateCloseResult, HandoffProposeResult, ControlSupersedeResult, ControlSnapshotResult, AuditReadResult, AuditSubmitToScittResult, AuditVerifyReceiptResult, AuditVerifyChainResult, MethodName, MethodResult } from './methods.cjs';
|
|
2
|
+
import { Store } from './storage/store.cjs';
|
|
3
|
+
import { Workspace, AuditListener, Task, ParticipantUri, Envelope, WorkspaceId, Member, KeyRecord } from './types.cjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @brightbeamai/chap-coordinator/ids
|
|
7
|
+
*
|
|
8
|
+
* ULID-format identifier generation. Supports a deterministic mode
|
|
9
|
+
* for tests/demos so byte-for-byte replay works.
|
|
10
|
+
*/
|
|
11
|
+
declare class IdFactory {
|
|
12
|
+
readonly deterministic: boolean;
|
|
13
|
+
private counter;
|
|
14
|
+
private clockMs;
|
|
15
|
+
constructor(deterministic?: boolean, seed?: bigint, startMs?: number);
|
|
16
|
+
nowMs(): number;
|
|
17
|
+
private randomness;
|
|
18
|
+
ulid(): string;
|
|
19
|
+
envelopeId(): string;
|
|
20
|
+
taskId(): string;
|
|
21
|
+
artefactId(): string;
|
|
22
|
+
logicalId(): string;
|
|
23
|
+
workspaceId(): string;
|
|
24
|
+
deliberationId(): string;
|
|
25
|
+
handoffId(): string;
|
|
26
|
+
snapshotId(): string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @brightbeamai/chap-coordinator/coordinator
|
|
31
|
+
*
|
|
32
|
+
* The Coordinator class. CHAP protocol logic, packaged as a library
|
|
33
|
+
* rather than a CLI server. Applications instantiate one, call
|
|
34
|
+
* `dispatch(envelope)`, subscribe to audit events, and persist via
|
|
35
|
+
* the provided hooks.
|
|
36
|
+
*
|
|
37
|
+
* Coverage:
|
|
38
|
+
* - Core (9 methods)
|
|
39
|
+
* - review/1.0 (6 methods)
|
|
40
|
+
* - whisper/1.0 (2 methods + lapse handling)
|
|
41
|
+
* - deliberation/1.0 (4 methods)
|
|
42
|
+
* - modes/1.0 (mode handling at task.create; trial forces review)
|
|
43
|
+
* - handoff/1.0 (3 methods with multi-task and group support)
|
|
44
|
+
* - control/1.0 (7 methods with task/participant/workspace scopes)
|
|
45
|
+
* - routing/1.0 (3 methods producing route_decision artefacts)
|
|
46
|
+
* - security-signed/1.0 (top-level `sig` field; key history)
|
|
47
|
+
* - audit-scitt/1.0 (statement assembly + local chain linkage)
|
|
48
|
+
* - identity-oidc/1.0 + identity-vc/1.0 (binding hooks at join)
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
type TokenVerifier = (token: string) => Record<string, unknown> | null;
|
|
52
|
+
type CredentialVerifier = (presentation: Record<string, unknown>) => Record<string, unknown> | null;
|
|
53
|
+
type ScittSubmitter = (statement: Record<string, unknown>) => Record<string, unknown> | null;
|
|
54
|
+
type ScittReceiptVerifier = (receipt: Record<string, unknown>) => boolean;
|
|
55
|
+
type RoutingPolicyFn = (task: Task, candidates: ParticipantUri[]) => {
|
|
56
|
+
selected: ParticipantUri;
|
|
57
|
+
rationale: Record<string, unknown>;
|
|
58
|
+
};
|
|
59
|
+
type ReviewDepthPolicyFn = (task: Task, hints: Record<string, unknown>) => {
|
|
60
|
+
depth: "skip" | "spot_check" | "full" | "escalated";
|
|
61
|
+
sampling_probability?: number;
|
|
62
|
+
rationale: Record<string, unknown>;
|
|
63
|
+
};
|
|
64
|
+
type EscalationPolicyFn = (task: Task, hints: Record<string, unknown>) => {
|
|
65
|
+
escalate: boolean;
|
|
66
|
+
to?: ParticipantUri;
|
|
67
|
+
triggered_rule?: Record<string, unknown>;
|
|
68
|
+
};
|
|
69
|
+
/** Methods classified as privileged for step-up auth. */
|
|
70
|
+
declare const PRIVILEGED_METHODS: Set<string>;
|
|
71
|
+
interface CoordinatorOptions {
|
|
72
|
+
deterministicIds?: boolean;
|
|
73
|
+
deterministicClock?: boolean;
|
|
74
|
+
enableChain?: boolean;
|
|
75
|
+
requireSignatures?: boolean;
|
|
76
|
+
enforceStepUp?: boolean;
|
|
77
|
+
onAudit?: AuditListener;
|
|
78
|
+
onAutoEscalate?: (task: Task, to: ParticipantUri) => void;
|
|
79
|
+
verifyOidcToken?: TokenVerifier;
|
|
80
|
+
verifyVc?: CredentialVerifier;
|
|
81
|
+
scittSubmitter?: ScittSubmitter;
|
|
82
|
+
verifyScittReceipt?: ScittReceiptVerifier;
|
|
83
|
+
routingPolicy?: RoutingPolicyFn;
|
|
84
|
+
reviewDepthPolicy?: ReviewDepthPolicyFn;
|
|
85
|
+
escalationPolicy?: EscalationPolicyFn;
|
|
86
|
+
defaultProfiles?: string[];
|
|
87
|
+
/**
|
|
88
|
+
* Persistence backend. Defaults to MemoryStore (no persistence).
|
|
89
|
+
* Pass SqliteStore or any other Store implementation to persist
|
|
90
|
+
* workspaces between process restarts. The Coordinator calls
|
|
91
|
+
* `store.load()` once during `start()` and `store.save()` after
|
|
92
|
+
* every successful mutation.
|
|
93
|
+
*/
|
|
94
|
+
store?: Store;
|
|
95
|
+
}
|
|
96
|
+
type Handler = (params: Record<string, unknown>) => {
|
|
97
|
+
result?: unknown;
|
|
98
|
+
error?: {
|
|
99
|
+
code: number;
|
|
100
|
+
message: string;
|
|
101
|
+
data?: unknown;
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
declare class Coordinator {
|
|
105
|
+
readonly workspaces: Map<string, Workspace>;
|
|
106
|
+
readonly options: CoordinatorOptions;
|
|
107
|
+
readonly ids: IdFactory;
|
|
108
|
+
readonly store: Store;
|
|
109
|
+
private wsVersions;
|
|
110
|
+
private clockMs?;
|
|
111
|
+
private auditListeners;
|
|
112
|
+
/** Method handler registry; profiles plug into this. */
|
|
113
|
+
readonly handlers: Map<string, Handler>;
|
|
114
|
+
/** Custom lapse-check function (whisper/1.0). Set by the whisper profile. */
|
|
115
|
+
checkWhisperLapses?: (workspaceId: string, now?: string) => Envelope[];
|
|
116
|
+
/** Typed method facade. Defined via getter in the constructor. */
|
|
117
|
+
readonly api: CoordinatorApi;
|
|
118
|
+
/** @internal cached facade instance */
|
|
119
|
+
private _api?;
|
|
120
|
+
constructor(options?: CoordinatorOptions);
|
|
121
|
+
/**
|
|
122
|
+
* Asynchronously hydrate workspaces from the store. Required only for
|
|
123
|
+
* stores whose `load()` returns a Promise. Idempotent.
|
|
124
|
+
*/
|
|
125
|
+
start(): Promise<void>;
|
|
126
|
+
private applyRecords;
|
|
127
|
+
/** Persist the current snapshot of one workspace to the store. */
|
|
128
|
+
private persist;
|
|
129
|
+
now(): string;
|
|
130
|
+
onAudit(listener: AuditListener): () => void;
|
|
131
|
+
/** Convenience: get a workspace by id, or undefined. */
|
|
132
|
+
getWorkspace(id: WorkspaceId): Workspace | undefined;
|
|
133
|
+
/**
|
|
134
|
+
* Assert that `sender` is a joined member of `ws`. Returns an error
|
|
135
|
+
* fragment if not, else null. Every actor-action method runs this on
|
|
136
|
+
* its `from` so a decision, completion, or review request can never
|
|
137
|
+
* be attributed to a participant who never joined. See
|
|
138
|
+
* SPECIFICATION.md S6.3 and the `unknown_participant` condition in
|
|
139
|
+
* S13.3. (The published spec assigns -32403; the reference
|
|
140
|
+
* implementations use NOT_AUTHORISED -32011 because -32403 already
|
|
141
|
+
* denotes OIDC_TOKEN_INVALID in their private range. The spec/impl
|
|
142
|
+
* error-table divergence is tracked separately.)
|
|
143
|
+
*/
|
|
144
|
+
private requireMember;
|
|
145
|
+
/**
|
|
146
|
+
* Assert that `sender` was addressed in the task's review. Applied to
|
|
147
|
+
* review-decision methods (decide.* and abstain.declare): to act on a
|
|
148
|
+
* review you must be one of the reviewers it was addressed to (the
|
|
149
|
+
* `to` set on review.request). Membership is the floor; this is the
|
|
150
|
+
* eligibility ceiling for decisions. Returns an error fragment if not
|
|
151
|
+
* eligible, else null.
|
|
152
|
+
*/
|
|
153
|
+
private requireReviewer;
|
|
154
|
+
/** Serialise all workspaces to a JSON-safe structure for persistence. */
|
|
155
|
+
snapshot(): unknown;
|
|
156
|
+
/** Restore from a snapshot produced by ``snapshot()``. Replaces
|
|
157
|
+
* any existing in-memory workspaces. */
|
|
158
|
+
restore(data: unknown): void;
|
|
159
|
+
dispatch(envelope: Envelope): Envelope;
|
|
160
|
+
recordAudit(ws: Workspace, envelope: Envelope): void;
|
|
161
|
+
private verifySignature;
|
|
162
|
+
/** Lookup the key valid for a given participant at a given time. */
|
|
163
|
+
lookupKey(member: Member, kid: string, ts: string): KeyRecord | null;
|
|
164
|
+
private checkStepUp;
|
|
165
|
+
private registerCoreHandlers;
|
|
166
|
+
private registerProfileHandlers;
|
|
167
|
+
private opWorkspaceCreate;
|
|
168
|
+
private opWorkspaceDescribe;
|
|
169
|
+
private opWorkspaceSetProfiles;
|
|
170
|
+
private opParticipantJoin;
|
|
171
|
+
private opParticipantLeave;
|
|
172
|
+
private opTaskCreate;
|
|
173
|
+
private opTaskUpdate;
|
|
174
|
+
private opTaskComplete;
|
|
175
|
+
private opAuditRead;
|
|
176
|
+
private opReviewRequest;
|
|
177
|
+
private opDecide;
|
|
178
|
+
private opDecideOverride;
|
|
179
|
+
private opAbstainDeclare;
|
|
180
|
+
private opEscalateRaise;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
declare class CoordinatorError extends Error {
|
|
184
|
+
readonly code: number;
|
|
185
|
+
readonly data?: unknown;
|
|
186
|
+
constructor(code: number, message: string, data?: unknown);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Single-call helper. Type-safe wrapper around `coord.dispatch()`.
|
|
190
|
+
* Throws CoordinatorError if dispatch returns an error response.
|
|
191
|
+
*/
|
|
192
|
+
declare function call<M extends MethodName>(coord: Coordinator, method: M, params: MethodParams<M>): MethodResult<M>;
|
|
193
|
+
declare function makeApi(coord: Coordinator): {
|
|
194
|
+
workspace: {
|
|
195
|
+
create: (p: MethodParams<"workspace.create">) => WorkspaceCreateResult;
|
|
196
|
+
describe: (p: MethodParams<"workspace.describe">) => WorkspaceDescribeResult;
|
|
197
|
+
set_profiles: (p: MethodParams<"workspace.set_profiles">) => OkResult;
|
|
198
|
+
};
|
|
199
|
+
participant: {
|
|
200
|
+
join: (p: MethodParams<"participant.join">) => OkResult;
|
|
201
|
+
leave: (p: MethodParams<"participant.leave">) => OkResult;
|
|
202
|
+
rotate_key: (p: MethodParams<"participant.rotate_key">) => OkResult;
|
|
203
|
+
revoke_key: (p: MethodParams<"participant.revoke_key">) => OkResult;
|
|
204
|
+
};
|
|
205
|
+
task: {
|
|
206
|
+
create: (p: MethodParams<"task.create">) => TaskCreateResult;
|
|
207
|
+
update: (p: MethodParams<"task.update">) => OkResult;
|
|
208
|
+
complete: (p: MethodParams<"task.complete">) => OkResult;
|
|
209
|
+
route: (p: MethodParams<"task.route">) => TaskRouteResult;
|
|
210
|
+
};
|
|
211
|
+
review: {
|
|
212
|
+
request: (p: MethodParams<"review.request">) => ReviewRequestResult;
|
|
213
|
+
depth: (p: MethodParams<"review.depth">) => ReviewDepthResult;
|
|
214
|
+
};
|
|
215
|
+
decide: {
|
|
216
|
+
approve: (p: MethodParams<"decide.approve">) => OkResult;
|
|
217
|
+
reject: (p: MethodParams<"decide.reject">) => OkResult;
|
|
218
|
+
override: (p: MethodParams<"decide.override">) => DecideOverrideResult;
|
|
219
|
+
};
|
|
220
|
+
abstain: {
|
|
221
|
+
declare: (p: MethodParams<"abstain.declare">) => OkResult;
|
|
222
|
+
};
|
|
223
|
+
escalate: {
|
|
224
|
+
raise: (p: MethodParams<"escalate.raise">) => EscalateRaiseResult;
|
|
225
|
+
auto: (p: MethodParams<"escalate.auto">) => EscalateAutoResult;
|
|
226
|
+
};
|
|
227
|
+
whisper: {
|
|
228
|
+
ask: (p: MethodParams<"whisper.ask">) => WhisperAskResult;
|
|
229
|
+
answer: (p: MethodParams<"whisper.answer">) => OkResult;
|
|
230
|
+
};
|
|
231
|
+
deliberate: {
|
|
232
|
+
open: (p: MethodParams<"deliberate.open">) => DeliberateOpenResult;
|
|
233
|
+
comment: (p: MethodParams<"deliberate.comment">) => OkResult;
|
|
234
|
+
vote: (p: MethodParams<"deliberate.vote">) => OkResult;
|
|
235
|
+
close: (p: MethodParams<"deliberate.close">) => DeliberateCloseResult;
|
|
236
|
+
};
|
|
237
|
+
handoff: {
|
|
238
|
+
propose: (p: MethodParams<"handoff.propose">) => HandoffProposeResult;
|
|
239
|
+
accept: (p: MethodParams<"handoff.accept">) => OkResult;
|
|
240
|
+
decline: (p: MethodParams<"handoff.decline">) => OkResult;
|
|
241
|
+
};
|
|
242
|
+
control: {
|
|
243
|
+
pause: (p: MethodParams<"control.pause">) => OkResult;
|
|
244
|
+
resume: (p: MethodParams<"control.resume">) => OkResult;
|
|
245
|
+
cancel: (p: MethodParams<"control.cancel">) => OkResult;
|
|
246
|
+
supersede: (p: MethodParams<"control.supersede">) => ControlSupersedeResult;
|
|
247
|
+
snapshot: (p: MethodParams<"control.snapshot">) => ControlSnapshotResult;
|
|
248
|
+
rollback: (p: MethodParams<"control.rollback">) => OkResult;
|
|
249
|
+
set_mode_ceiling: (p: MethodParams<"control.set_mode_ceiling">) => OkResult;
|
|
250
|
+
};
|
|
251
|
+
audit: {
|
|
252
|
+
read: (p: MethodParams<"audit.read">) => AuditReadResult;
|
|
253
|
+
submit_to_scitt: (p: MethodParams<"audit.submit_to_scitt">) => AuditSubmitToScittResult;
|
|
254
|
+
verify_receipt: (p: MethodParams<"audit.verify_receipt">) => AuditVerifyReceiptResult;
|
|
255
|
+
verify_chain: (p: MethodParams<"audit.verify_chain">) => AuditVerifyChainResult;
|
|
256
|
+
};
|
|
257
|
+
};
|
|
258
|
+
type CoordinatorApi = ReturnType<typeof makeApi>;
|
|
259
|
+
|
|
260
|
+
export { type CoordinatorOptions as C, type EscalationPolicyFn as E, type Handler as H, IdFactory as I, PRIVILEGED_METHODS as P, type ReviewDepthPolicyFn as R, type ScittReceiptVerifier as S, type TokenVerifier as T, Coordinator as a, type CoordinatorApi as b, CoordinatorError as c, type CredentialVerifier as d, type RoutingPolicyFn as e, type ScittSubmitter as f, call as g, makeApi as m };
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { MethodParams, WorkspaceCreateResult, WorkspaceDescribeResult, OkResult, TaskCreateResult, TaskRouteResult, ReviewRequestResult, ReviewDepthResult, DecideOverrideResult, EscalateRaiseResult, EscalateAutoResult, WhisperAskResult, DeliberateOpenResult, DeliberateCloseResult, HandoffProposeResult, ControlSupersedeResult, ControlSnapshotResult, AuditReadResult, AuditSubmitToScittResult, AuditVerifyReceiptResult, AuditVerifyChainResult, MethodName, MethodResult } from './methods.js';
|
|
2
|
+
import { Store } from './storage/store.js';
|
|
3
|
+
import { Workspace, AuditListener, Task, ParticipantUri, Envelope, WorkspaceId, Member, KeyRecord } from './types.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @brightbeamai/chap-coordinator/ids
|
|
7
|
+
*
|
|
8
|
+
* ULID-format identifier generation. Supports a deterministic mode
|
|
9
|
+
* for tests/demos so byte-for-byte replay works.
|
|
10
|
+
*/
|
|
11
|
+
declare class IdFactory {
|
|
12
|
+
readonly deterministic: boolean;
|
|
13
|
+
private counter;
|
|
14
|
+
private clockMs;
|
|
15
|
+
constructor(deterministic?: boolean, seed?: bigint, startMs?: number);
|
|
16
|
+
nowMs(): number;
|
|
17
|
+
private randomness;
|
|
18
|
+
ulid(): string;
|
|
19
|
+
envelopeId(): string;
|
|
20
|
+
taskId(): string;
|
|
21
|
+
artefactId(): string;
|
|
22
|
+
logicalId(): string;
|
|
23
|
+
workspaceId(): string;
|
|
24
|
+
deliberationId(): string;
|
|
25
|
+
handoffId(): string;
|
|
26
|
+
snapshotId(): string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @brightbeamai/chap-coordinator/coordinator
|
|
31
|
+
*
|
|
32
|
+
* The Coordinator class. CHAP protocol logic, packaged as a library
|
|
33
|
+
* rather than a CLI server. Applications instantiate one, call
|
|
34
|
+
* `dispatch(envelope)`, subscribe to audit events, and persist via
|
|
35
|
+
* the provided hooks.
|
|
36
|
+
*
|
|
37
|
+
* Coverage:
|
|
38
|
+
* - Core (9 methods)
|
|
39
|
+
* - review/1.0 (6 methods)
|
|
40
|
+
* - whisper/1.0 (2 methods + lapse handling)
|
|
41
|
+
* - deliberation/1.0 (4 methods)
|
|
42
|
+
* - modes/1.0 (mode handling at task.create; trial forces review)
|
|
43
|
+
* - handoff/1.0 (3 methods with multi-task and group support)
|
|
44
|
+
* - control/1.0 (7 methods with task/participant/workspace scopes)
|
|
45
|
+
* - routing/1.0 (3 methods producing route_decision artefacts)
|
|
46
|
+
* - security-signed/1.0 (top-level `sig` field; key history)
|
|
47
|
+
* - audit-scitt/1.0 (statement assembly + local chain linkage)
|
|
48
|
+
* - identity-oidc/1.0 + identity-vc/1.0 (binding hooks at join)
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
type TokenVerifier = (token: string) => Record<string, unknown> | null;
|
|
52
|
+
type CredentialVerifier = (presentation: Record<string, unknown>) => Record<string, unknown> | null;
|
|
53
|
+
type ScittSubmitter = (statement: Record<string, unknown>) => Record<string, unknown> | null;
|
|
54
|
+
type ScittReceiptVerifier = (receipt: Record<string, unknown>) => boolean;
|
|
55
|
+
type RoutingPolicyFn = (task: Task, candidates: ParticipantUri[]) => {
|
|
56
|
+
selected: ParticipantUri;
|
|
57
|
+
rationale: Record<string, unknown>;
|
|
58
|
+
};
|
|
59
|
+
type ReviewDepthPolicyFn = (task: Task, hints: Record<string, unknown>) => {
|
|
60
|
+
depth: "skip" | "spot_check" | "full" | "escalated";
|
|
61
|
+
sampling_probability?: number;
|
|
62
|
+
rationale: Record<string, unknown>;
|
|
63
|
+
};
|
|
64
|
+
type EscalationPolicyFn = (task: Task, hints: Record<string, unknown>) => {
|
|
65
|
+
escalate: boolean;
|
|
66
|
+
to?: ParticipantUri;
|
|
67
|
+
triggered_rule?: Record<string, unknown>;
|
|
68
|
+
};
|
|
69
|
+
/** Methods classified as privileged for step-up auth. */
|
|
70
|
+
declare const PRIVILEGED_METHODS: Set<string>;
|
|
71
|
+
interface CoordinatorOptions {
|
|
72
|
+
deterministicIds?: boolean;
|
|
73
|
+
deterministicClock?: boolean;
|
|
74
|
+
enableChain?: boolean;
|
|
75
|
+
requireSignatures?: boolean;
|
|
76
|
+
enforceStepUp?: boolean;
|
|
77
|
+
onAudit?: AuditListener;
|
|
78
|
+
onAutoEscalate?: (task: Task, to: ParticipantUri) => void;
|
|
79
|
+
verifyOidcToken?: TokenVerifier;
|
|
80
|
+
verifyVc?: CredentialVerifier;
|
|
81
|
+
scittSubmitter?: ScittSubmitter;
|
|
82
|
+
verifyScittReceipt?: ScittReceiptVerifier;
|
|
83
|
+
routingPolicy?: RoutingPolicyFn;
|
|
84
|
+
reviewDepthPolicy?: ReviewDepthPolicyFn;
|
|
85
|
+
escalationPolicy?: EscalationPolicyFn;
|
|
86
|
+
defaultProfiles?: string[];
|
|
87
|
+
/**
|
|
88
|
+
* Persistence backend. Defaults to MemoryStore (no persistence).
|
|
89
|
+
* Pass SqliteStore or any other Store implementation to persist
|
|
90
|
+
* workspaces between process restarts. The Coordinator calls
|
|
91
|
+
* `store.load()` once during `start()` and `store.save()` after
|
|
92
|
+
* every successful mutation.
|
|
93
|
+
*/
|
|
94
|
+
store?: Store;
|
|
95
|
+
}
|
|
96
|
+
type Handler = (params: Record<string, unknown>) => {
|
|
97
|
+
result?: unknown;
|
|
98
|
+
error?: {
|
|
99
|
+
code: number;
|
|
100
|
+
message: string;
|
|
101
|
+
data?: unknown;
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
declare class Coordinator {
|
|
105
|
+
readonly workspaces: Map<string, Workspace>;
|
|
106
|
+
readonly options: CoordinatorOptions;
|
|
107
|
+
readonly ids: IdFactory;
|
|
108
|
+
readonly store: Store;
|
|
109
|
+
private wsVersions;
|
|
110
|
+
private clockMs?;
|
|
111
|
+
private auditListeners;
|
|
112
|
+
/** Method handler registry; profiles plug into this. */
|
|
113
|
+
readonly handlers: Map<string, Handler>;
|
|
114
|
+
/** Custom lapse-check function (whisper/1.0). Set by the whisper profile. */
|
|
115
|
+
checkWhisperLapses?: (workspaceId: string, now?: string) => Envelope[];
|
|
116
|
+
/** Typed method facade. Defined via getter in the constructor. */
|
|
117
|
+
readonly api: CoordinatorApi;
|
|
118
|
+
/** @internal cached facade instance */
|
|
119
|
+
private _api?;
|
|
120
|
+
constructor(options?: CoordinatorOptions);
|
|
121
|
+
/**
|
|
122
|
+
* Asynchronously hydrate workspaces from the store. Required only for
|
|
123
|
+
* stores whose `load()` returns a Promise. Idempotent.
|
|
124
|
+
*/
|
|
125
|
+
start(): Promise<void>;
|
|
126
|
+
private applyRecords;
|
|
127
|
+
/** Persist the current snapshot of one workspace to the store. */
|
|
128
|
+
private persist;
|
|
129
|
+
now(): string;
|
|
130
|
+
onAudit(listener: AuditListener): () => void;
|
|
131
|
+
/** Convenience: get a workspace by id, or undefined. */
|
|
132
|
+
getWorkspace(id: WorkspaceId): Workspace | undefined;
|
|
133
|
+
/**
|
|
134
|
+
* Assert that `sender` is a joined member of `ws`. Returns an error
|
|
135
|
+
* fragment if not, else null. Every actor-action method runs this on
|
|
136
|
+
* its `from` so a decision, completion, or review request can never
|
|
137
|
+
* be attributed to a participant who never joined. See
|
|
138
|
+
* SPECIFICATION.md S6.3 and the `unknown_participant` condition in
|
|
139
|
+
* S13.3. (The published spec assigns -32403; the reference
|
|
140
|
+
* implementations use NOT_AUTHORISED -32011 because -32403 already
|
|
141
|
+
* denotes OIDC_TOKEN_INVALID in their private range. The spec/impl
|
|
142
|
+
* error-table divergence is tracked separately.)
|
|
143
|
+
*/
|
|
144
|
+
private requireMember;
|
|
145
|
+
/**
|
|
146
|
+
* Assert that `sender` was addressed in the task's review. Applied to
|
|
147
|
+
* review-decision methods (decide.* and abstain.declare): to act on a
|
|
148
|
+
* review you must be one of the reviewers it was addressed to (the
|
|
149
|
+
* `to` set on review.request). Membership is the floor; this is the
|
|
150
|
+
* eligibility ceiling for decisions. Returns an error fragment if not
|
|
151
|
+
* eligible, else null.
|
|
152
|
+
*/
|
|
153
|
+
private requireReviewer;
|
|
154
|
+
/** Serialise all workspaces to a JSON-safe structure for persistence. */
|
|
155
|
+
snapshot(): unknown;
|
|
156
|
+
/** Restore from a snapshot produced by ``snapshot()``. Replaces
|
|
157
|
+
* any existing in-memory workspaces. */
|
|
158
|
+
restore(data: unknown): void;
|
|
159
|
+
dispatch(envelope: Envelope): Envelope;
|
|
160
|
+
recordAudit(ws: Workspace, envelope: Envelope): void;
|
|
161
|
+
private verifySignature;
|
|
162
|
+
/** Lookup the key valid for a given participant at a given time. */
|
|
163
|
+
lookupKey(member: Member, kid: string, ts: string): KeyRecord | null;
|
|
164
|
+
private checkStepUp;
|
|
165
|
+
private registerCoreHandlers;
|
|
166
|
+
private registerProfileHandlers;
|
|
167
|
+
private opWorkspaceCreate;
|
|
168
|
+
private opWorkspaceDescribe;
|
|
169
|
+
private opWorkspaceSetProfiles;
|
|
170
|
+
private opParticipantJoin;
|
|
171
|
+
private opParticipantLeave;
|
|
172
|
+
private opTaskCreate;
|
|
173
|
+
private opTaskUpdate;
|
|
174
|
+
private opTaskComplete;
|
|
175
|
+
private opAuditRead;
|
|
176
|
+
private opReviewRequest;
|
|
177
|
+
private opDecide;
|
|
178
|
+
private opDecideOverride;
|
|
179
|
+
private opAbstainDeclare;
|
|
180
|
+
private opEscalateRaise;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
declare class CoordinatorError extends Error {
|
|
184
|
+
readonly code: number;
|
|
185
|
+
readonly data?: unknown;
|
|
186
|
+
constructor(code: number, message: string, data?: unknown);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Single-call helper. Type-safe wrapper around `coord.dispatch()`.
|
|
190
|
+
* Throws CoordinatorError if dispatch returns an error response.
|
|
191
|
+
*/
|
|
192
|
+
declare function call<M extends MethodName>(coord: Coordinator, method: M, params: MethodParams<M>): MethodResult<M>;
|
|
193
|
+
declare function makeApi(coord: Coordinator): {
|
|
194
|
+
workspace: {
|
|
195
|
+
create: (p: MethodParams<"workspace.create">) => WorkspaceCreateResult;
|
|
196
|
+
describe: (p: MethodParams<"workspace.describe">) => WorkspaceDescribeResult;
|
|
197
|
+
set_profiles: (p: MethodParams<"workspace.set_profiles">) => OkResult;
|
|
198
|
+
};
|
|
199
|
+
participant: {
|
|
200
|
+
join: (p: MethodParams<"participant.join">) => OkResult;
|
|
201
|
+
leave: (p: MethodParams<"participant.leave">) => OkResult;
|
|
202
|
+
rotate_key: (p: MethodParams<"participant.rotate_key">) => OkResult;
|
|
203
|
+
revoke_key: (p: MethodParams<"participant.revoke_key">) => OkResult;
|
|
204
|
+
};
|
|
205
|
+
task: {
|
|
206
|
+
create: (p: MethodParams<"task.create">) => TaskCreateResult;
|
|
207
|
+
update: (p: MethodParams<"task.update">) => OkResult;
|
|
208
|
+
complete: (p: MethodParams<"task.complete">) => OkResult;
|
|
209
|
+
route: (p: MethodParams<"task.route">) => TaskRouteResult;
|
|
210
|
+
};
|
|
211
|
+
review: {
|
|
212
|
+
request: (p: MethodParams<"review.request">) => ReviewRequestResult;
|
|
213
|
+
depth: (p: MethodParams<"review.depth">) => ReviewDepthResult;
|
|
214
|
+
};
|
|
215
|
+
decide: {
|
|
216
|
+
approve: (p: MethodParams<"decide.approve">) => OkResult;
|
|
217
|
+
reject: (p: MethodParams<"decide.reject">) => OkResult;
|
|
218
|
+
override: (p: MethodParams<"decide.override">) => DecideOverrideResult;
|
|
219
|
+
};
|
|
220
|
+
abstain: {
|
|
221
|
+
declare: (p: MethodParams<"abstain.declare">) => OkResult;
|
|
222
|
+
};
|
|
223
|
+
escalate: {
|
|
224
|
+
raise: (p: MethodParams<"escalate.raise">) => EscalateRaiseResult;
|
|
225
|
+
auto: (p: MethodParams<"escalate.auto">) => EscalateAutoResult;
|
|
226
|
+
};
|
|
227
|
+
whisper: {
|
|
228
|
+
ask: (p: MethodParams<"whisper.ask">) => WhisperAskResult;
|
|
229
|
+
answer: (p: MethodParams<"whisper.answer">) => OkResult;
|
|
230
|
+
};
|
|
231
|
+
deliberate: {
|
|
232
|
+
open: (p: MethodParams<"deliberate.open">) => DeliberateOpenResult;
|
|
233
|
+
comment: (p: MethodParams<"deliberate.comment">) => OkResult;
|
|
234
|
+
vote: (p: MethodParams<"deliberate.vote">) => OkResult;
|
|
235
|
+
close: (p: MethodParams<"deliberate.close">) => DeliberateCloseResult;
|
|
236
|
+
};
|
|
237
|
+
handoff: {
|
|
238
|
+
propose: (p: MethodParams<"handoff.propose">) => HandoffProposeResult;
|
|
239
|
+
accept: (p: MethodParams<"handoff.accept">) => OkResult;
|
|
240
|
+
decline: (p: MethodParams<"handoff.decline">) => OkResult;
|
|
241
|
+
};
|
|
242
|
+
control: {
|
|
243
|
+
pause: (p: MethodParams<"control.pause">) => OkResult;
|
|
244
|
+
resume: (p: MethodParams<"control.resume">) => OkResult;
|
|
245
|
+
cancel: (p: MethodParams<"control.cancel">) => OkResult;
|
|
246
|
+
supersede: (p: MethodParams<"control.supersede">) => ControlSupersedeResult;
|
|
247
|
+
snapshot: (p: MethodParams<"control.snapshot">) => ControlSnapshotResult;
|
|
248
|
+
rollback: (p: MethodParams<"control.rollback">) => OkResult;
|
|
249
|
+
set_mode_ceiling: (p: MethodParams<"control.set_mode_ceiling">) => OkResult;
|
|
250
|
+
};
|
|
251
|
+
audit: {
|
|
252
|
+
read: (p: MethodParams<"audit.read">) => AuditReadResult;
|
|
253
|
+
submit_to_scitt: (p: MethodParams<"audit.submit_to_scitt">) => AuditSubmitToScittResult;
|
|
254
|
+
verify_receipt: (p: MethodParams<"audit.verify_receipt">) => AuditVerifyReceiptResult;
|
|
255
|
+
verify_chain: (p: MethodParams<"audit.verify_chain">) => AuditVerifyChainResult;
|
|
256
|
+
};
|
|
257
|
+
};
|
|
258
|
+
type CoordinatorApi = ReturnType<typeof makeApi>;
|
|
259
|
+
|
|
260
|
+
export { type CoordinatorOptions as C, type EscalationPolicyFn as E, type Handler as H, IdFactory as I, PRIVILEGED_METHODS as P, type ReviewDepthPolicyFn as R, type ScittReceiptVerifier as S, type TokenVerifier as T, Coordinator as a, type CoordinatorApi as b, CoordinatorError as c, type CredentialVerifier as d, type RoutingPolicyFn as e, type ScittSubmitter as f, call as g, makeApi as m };
|
package/dist/api.cjs
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/api.ts
|
|
21
|
+
var api_exports = {};
|
|
22
|
+
__export(api_exports, {
|
|
23
|
+
CoordinatorError: () => CoordinatorError,
|
|
24
|
+
call: () => call,
|
|
25
|
+
makeApi: () => makeApi
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(api_exports);
|
|
28
|
+
var CoordinatorError = class extends Error {
|
|
29
|
+
code;
|
|
30
|
+
data;
|
|
31
|
+
constructor(code, message, data) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.name = "CoordinatorError";
|
|
34
|
+
this.code = code;
|
|
35
|
+
this.data = data;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
function call(coord, method, params) {
|
|
39
|
+
const envelope = {
|
|
40
|
+
jsonrpc: "2.0",
|
|
41
|
+
id: coord.ids.envelopeId(),
|
|
42
|
+
method,
|
|
43
|
+
params
|
|
44
|
+
};
|
|
45
|
+
const out = coord.dispatch(envelope);
|
|
46
|
+
if (out.error) {
|
|
47
|
+
throw new CoordinatorError(out.error.code, out.error.message, out.error.data);
|
|
48
|
+
}
|
|
49
|
+
return out.result;
|
|
50
|
+
}
|
|
51
|
+
function makeApi(coord) {
|
|
52
|
+
const c = (m, p) => call(coord, m, p);
|
|
53
|
+
return {
|
|
54
|
+
workspace: {
|
|
55
|
+
create: (p) => c("workspace.create", p),
|
|
56
|
+
describe: (p) => c("workspace.describe", p),
|
|
57
|
+
set_profiles: (p) => c("workspace.set_profiles", p)
|
|
58
|
+
},
|
|
59
|
+
participant: {
|
|
60
|
+
join: (p) => c("participant.join", p),
|
|
61
|
+
leave: (p) => c("participant.leave", p),
|
|
62
|
+
rotate_key: (p) => c("participant.rotate_key", p),
|
|
63
|
+
revoke_key: (p) => c("participant.revoke_key", p)
|
|
64
|
+
},
|
|
65
|
+
task: {
|
|
66
|
+
create: (p) => c("task.create", p),
|
|
67
|
+
update: (p) => c("task.update", p),
|
|
68
|
+
complete: (p) => c("task.complete", p),
|
|
69
|
+
route: (p) => c("task.route", p)
|
|
70
|
+
},
|
|
71
|
+
review: {
|
|
72
|
+
request: (p) => c("review.request", p),
|
|
73
|
+
depth: (p) => c("review.depth", p)
|
|
74
|
+
},
|
|
75
|
+
decide: {
|
|
76
|
+
approve: (p) => c("decide.approve", p),
|
|
77
|
+
reject: (p) => c("decide.reject", p),
|
|
78
|
+
override: (p) => c("decide.override", p)
|
|
79
|
+
},
|
|
80
|
+
abstain: {
|
|
81
|
+
declare: (p) => c("abstain.declare", p)
|
|
82
|
+
},
|
|
83
|
+
escalate: {
|
|
84
|
+
raise: (p) => c("escalate.raise", p),
|
|
85
|
+
auto: (p) => c("escalate.auto", p)
|
|
86
|
+
},
|
|
87
|
+
whisper: {
|
|
88
|
+
ask: (p) => c("whisper.ask", p),
|
|
89
|
+
answer: (p) => c("whisper.answer", p)
|
|
90
|
+
},
|
|
91
|
+
deliberate: {
|
|
92
|
+
open: (p) => c("deliberate.open", p),
|
|
93
|
+
comment: (p) => c("deliberate.comment", p),
|
|
94
|
+
vote: (p) => c("deliberate.vote", p),
|
|
95
|
+
close: (p) => c("deliberate.close", p)
|
|
96
|
+
},
|
|
97
|
+
handoff: {
|
|
98
|
+
propose: (p) => c("handoff.propose", p),
|
|
99
|
+
accept: (p) => c("handoff.accept", p),
|
|
100
|
+
decline: (p) => c("handoff.decline", p)
|
|
101
|
+
},
|
|
102
|
+
control: {
|
|
103
|
+
pause: (p) => c("control.pause", p),
|
|
104
|
+
resume: (p) => c("control.resume", p),
|
|
105
|
+
cancel: (p) => c("control.cancel", p),
|
|
106
|
+
supersede: (p) => c("control.supersede", p),
|
|
107
|
+
snapshot: (p) => c("control.snapshot", p),
|
|
108
|
+
rollback: (p) => c("control.rollback", p),
|
|
109
|
+
set_mode_ceiling: (p) => c("control.set_mode_ceiling", p)
|
|
110
|
+
},
|
|
111
|
+
audit: {
|
|
112
|
+
read: (p) => c("audit.read", p),
|
|
113
|
+
submit_to_scitt: (p) => c("audit.submit_to_scitt", p),
|
|
114
|
+
verify_receipt: (p) => c("audit.verify_receipt", p),
|
|
115
|
+
verify_chain: (p) => c("audit.verify_chain", p)
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
120
|
+
0 && (module.exports = {
|
|
121
|
+
CoordinatorError,
|
|
122
|
+
call,
|
|
123
|
+
makeApi
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=api.cjs.map
|
package/dist/api.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api.ts"],"sourcesContent":["/**\n * Typed method facade for the Coordinator.\n *\n * Replaces the verbose dispatch pattern:\n *\n * const env = await coord.dispatch({\n * jsonrpc: \"2.0\", id: \"x\",\n * method: \"task.create\",\n * params: { workspace, from, kind, input }\n * });\n * const taskId = env.result.task_id;\n *\n * with namespace-grouped calls that autocomplete and type-check:\n *\n * const { task_id } = coord.api.task.create({ workspace, from, kind, input });\n *\n * Every method on the facade calls `dispatch(envelope)` internally with\n * an auto-generated envelope id, so the audit chain semantics, profile\n * gates, and signature checks all run identically.\n *\n * On dispatch error, the facade throws a `CoordinatorError` carrying the\n * JSON-RPC error code and message. Callers expecting `error` objects on\n * the wire can still use `dispatch()` directly.\n */\n\nimport type { Coordinator } from \"./coordinator.js\";\nimport type { Envelope } from \"./types.js\";\nimport type {\n MethodName, MethodParams, MethodResult,\n} from \"./methods.js\";\n\nexport class CoordinatorError extends Error {\n readonly code: number;\n readonly data?: unknown;\n constructor(code: number, message: string, data?: unknown) {\n super(message);\n this.name = \"CoordinatorError\";\n this.code = code;\n this.data = data;\n }\n}\n\n/**\n * Single-call helper. Type-safe wrapper around `coord.dispatch()`.\n * Throws CoordinatorError if dispatch returns an error response.\n */\nexport function call<M extends MethodName>(\n coord: Coordinator,\n method: M,\n params: MethodParams<M>,\n): MethodResult<M> {\n const envelope: Envelope = {\n jsonrpc: \"2.0\",\n id: coord.ids.envelopeId(),\n method,\n params: params as unknown as Record<string, unknown>,\n };\n const out = coord.dispatch(envelope);\n if (out.error) {\n throw new CoordinatorError(out.error.code, out.error.message, out.error.data);\n }\n return out.result as MethodResult<M>;\n}\n\n// ============================================================\n// Namespace-grouped facades\n// ============================================================\n//\n// Each namespace facade is a small object exposing one method per\n// CHAP verb. Implementations are one-liners that delegate to call().\n// The pattern is verbose but autocompletes well and type-checks\n// param shape and result shape from one declaration in methods.ts.\n\nexport function makeApi(coord: Coordinator) {\n const c = <M extends MethodName>(m: M, p: MethodParams<M>) => call(coord, m, p);\n\n return {\n workspace: {\n create: (p: MethodParams<\"workspace.create\">) => c(\"workspace.create\", p),\n describe: (p: MethodParams<\"workspace.describe\">) => c(\"workspace.describe\", p),\n set_profiles: (p: MethodParams<\"workspace.set_profiles\">) => c(\"workspace.set_profiles\", p),\n },\n participant: {\n join: (p: MethodParams<\"participant.join\">) => c(\"participant.join\", p),\n leave: (p: MethodParams<\"participant.leave\">) => c(\"participant.leave\", p),\n rotate_key: (p: MethodParams<\"participant.rotate_key\">) => c(\"participant.rotate_key\", p),\n revoke_key: (p: MethodParams<\"participant.revoke_key\">) => c(\"participant.revoke_key\", p),\n },\n task: {\n create: (p: MethodParams<\"task.create\">) => c(\"task.create\", p),\n update: (p: MethodParams<\"task.update\">) => c(\"task.update\", p),\n complete: (p: MethodParams<\"task.complete\">) => c(\"task.complete\", p),\n route: (p: MethodParams<\"task.route\">) => c(\"task.route\", p),\n },\n review: {\n request: (p: MethodParams<\"review.request\">) => c(\"review.request\", p),\n depth: (p: MethodParams<\"review.depth\">) => c(\"review.depth\", p),\n },\n decide: {\n approve: (p: MethodParams<\"decide.approve\">) => c(\"decide.approve\", p),\n reject: (p: MethodParams<\"decide.reject\">) => c(\"decide.reject\", p),\n override: (p: MethodParams<\"decide.override\">) => c(\"decide.override\", p),\n },\n abstain: {\n declare: (p: MethodParams<\"abstain.declare\">) => c(\"abstain.declare\", p),\n },\n escalate: {\n raise: (p: MethodParams<\"escalate.raise\">) => c(\"escalate.raise\", p),\n auto: (p: MethodParams<\"escalate.auto\">) => c(\"escalate.auto\", p),\n },\n whisper: {\n ask: (p: MethodParams<\"whisper.ask\">) => c(\"whisper.ask\", p),\n answer: (p: MethodParams<\"whisper.answer\">) => c(\"whisper.answer\", p),\n },\n deliberate: {\n open: (p: MethodParams<\"deliberate.open\">) => c(\"deliberate.open\", p),\n comment: (p: MethodParams<\"deliberate.comment\">) => c(\"deliberate.comment\", p),\n vote: (p: MethodParams<\"deliberate.vote\">) => c(\"deliberate.vote\", p),\n close: (p: MethodParams<\"deliberate.close\">) => c(\"deliberate.close\", p),\n },\n handoff: {\n propose: (p: MethodParams<\"handoff.propose\">) => c(\"handoff.propose\", p),\n accept: (p: MethodParams<\"handoff.accept\">) => c(\"handoff.accept\", p),\n decline: (p: MethodParams<\"handoff.decline\">) => c(\"handoff.decline\", p),\n },\n control: {\n pause: (p: MethodParams<\"control.pause\">) => c(\"control.pause\", p),\n resume: (p: MethodParams<\"control.resume\">) => c(\"control.resume\", p),\n cancel: (p: MethodParams<\"control.cancel\">) => c(\"control.cancel\", p),\n supersede: (p: MethodParams<\"control.supersede\">) => c(\"control.supersede\", p),\n snapshot: (p: MethodParams<\"control.snapshot\">) => c(\"control.snapshot\", p),\n rollback: (p: MethodParams<\"control.rollback\">) => c(\"control.rollback\", p),\n set_mode_ceiling: (p: MethodParams<\"control.set_mode_ceiling\">) => c(\"control.set_mode_ceiling\", p),\n },\n audit: {\n read: (p: MethodParams<\"audit.read\">) => c(\"audit.read\", p),\n submit_to_scitt: (p: MethodParams<\"audit.submit_to_scitt\">) => c(\"audit.submit_to_scitt\", p),\n verify_receipt: (p: MethodParams<\"audit.verify_receipt\">) => c(\"audit.verify_receipt\", p),\n verify_chain: (p: MethodParams<\"audit.verify_chain\">) => c(\"audit.verify_chain\", p),\n },\n };\n}\n\nexport type CoordinatorApi = ReturnType<typeof makeApi>;\n"],"mappings":"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","names":[]}
|
package/dist/api.d.cts
ADDED
package/dist/api.d.ts
ADDED