@gate-forge/pack-workflow 0.1.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.
@@ -0,0 +1,514 @@
1
+ import { isAbsolute, resolve } from 'node:path';
2
+ import { readFileSync } from 'node:fs';
3
+ import ts from 'typescript';
4
+ import { GATEFORGE_SCHEMA_VERSION, LocationSchema } from '@gate-forge/core';
5
+ import { PACK_PLUGIN_ID, PACK_VERSION } from './version.js';
6
+ /** Stable detector kind for every workflow resource this pack emits. */
7
+ export const WORKFLOW_CONTRACT_KIND = 'workflow.contract';
8
+ // ---------------------------------------------------------------------------
9
+ // Public factory
10
+ // ---------------------------------------------------------------------------
11
+ /**
12
+ * Creates a discover-capable detector module. The default export of the
13
+ * pack is `createWorkflowDetector()` — the CLI in-process contract.
14
+ *
15
+ * Args:
16
+ * options: Detector configuration (cwd, identity overrides).
17
+ *
18
+ * Returns:
19
+ * WorkflowDetector: the pinned `{ discover(paths) }` module.
20
+ */
21
+ export function createWorkflowDetector(options = {}) {
22
+ const cwd = options.cwd ?? process.cwd();
23
+ const detectorId = options.detectorId ?? PACK_PLUGIN_ID;
24
+ const detectorVersion = options.detectorVersion ?? PACK_VERSION;
25
+ return {
26
+ async discover(paths) {
27
+ const out = { resources: [], unresolved: [], findings: [], classificationSignals: [] };
28
+ if (paths.length === 0)
29
+ return out;
30
+ const machines = [];
31
+ const findings = [];
32
+ const scanned = [];
33
+ for (const rawPath of paths) {
34
+ const path = isAbsolute(rawPath) ? rawPath : resolve(cwd, rawPath);
35
+ let source;
36
+ try {
37
+ source = readFileSync(path, 'utf8');
38
+ }
39
+ catch {
40
+ out.unresolved.push({
41
+ code: 'WORKFLOW_READ_FAILED',
42
+ detail: `could not read source file: ${path}`,
43
+ location: {
44
+ file: path,
45
+ line: 1,
46
+ col: 0,
47
+ },
48
+ });
49
+ continue;
50
+ }
51
+ scanned.push(relPath(cwd, path));
52
+ const sf = ts.createSourceFile(path, source, ts.ScriptTarget.ES2022, true, ts.ScriptKind.TSX);
53
+ const visit = createVisitor({
54
+ file: path,
55
+ sourceFile: sf,
56
+ cwd,
57
+ onMachine: (m) => machines.push(m),
58
+ onFinding: (f) => findings.push(f),
59
+ onUnresolved: (u) => out.unresolved.push(u),
60
+ });
61
+ ts.forEachChild(sf, visit);
62
+ }
63
+ // Deterministic ordering: sort by id (stable, total).
64
+ machines.sort((a, b) => (a.idFragment < b.idFragment ? -1 : a.idFragment > b.idFragment ? 1 : 0));
65
+ for (const machine of machines) {
66
+ const resource = finalizeMachine(machine, detectorId, detectorVersion);
67
+ out.resources.push(resource);
68
+ }
69
+ // Findings are sorted by `code` then by `file` then by `line`.
70
+ findings.sort((a, b) => {
71
+ if (a.code !== b.code)
72
+ return a.code < b.code ? -1 : 1;
73
+ const aLoc = a.locations[0];
74
+ const bLoc = b.locations[0];
75
+ if (aLoc.file !== bLoc.file)
76
+ return aLoc.file < bLoc.file ? -1 : 1;
77
+ return aLoc.line - bLoc.line;
78
+ });
79
+ out.findings.push(...findings);
80
+ return { ...out, scannedPaths: scanned.sort() };
81
+ },
82
+ };
83
+ }
84
+ function createVisitor(ctx) {
85
+ return function visit(node) {
86
+ // XState v5: `createMachine({ ... })` OR `setup({ ... }).createMachine({ ... })`.
87
+ if (ts.isCallExpression(node)) {
88
+ const expr = node.expression;
89
+ if (isCreateMachineCall(expr)) {
90
+ const machine = tryExtractXstateMachine(ctx, node);
91
+ if (machine !== null) {
92
+ ctx.onMachine(machine);
93
+ }
94
+ }
95
+ else if (ts.isIdentifier(expr) && expr.text === 'create') {
96
+ // Zustand slice: `create((set, get) => ({ status, transition: ... }))`.
97
+ const machine = tryExtractZustandSlice(ctx, node);
98
+ if (machine !== null) {
99
+ ctx.onMachine(machine);
100
+ }
101
+ }
102
+ }
103
+ // Hand-rolled FSM class: a `ClassDeclaration` whose name ends in
104
+ // `Machine` / `FSM` / `State` / `Workflow` and whose body mentions a
105
+ // `transitions` member.
106
+ if (ts.isClassDeclaration(node) && node.name !== undefined) {
107
+ const machine = tryExtractFsmClass(ctx, node);
108
+ if (machine !== null) {
109
+ ctx.onMachine(machine);
110
+ }
111
+ }
112
+ // Enum + switch transition guard: an enum + a switch whose discriminant
113
+ // is the enum identifier.
114
+ if (ts.isEnumDeclaration(node) || ts.isVariableStatement(node)) {
115
+ const machine = tryExtractEnumSwitch(ctx, node);
116
+ if (machine !== null) {
117
+ ctx.onMachine(machine);
118
+ }
119
+ }
120
+ ts.forEachChild(node, visit);
121
+ };
122
+ }
123
+ // ---------------------------------------------------------------------------
124
+ // XState v5 detector arm
125
+ // ---------------------------------------------------------------------------
126
+ function isCreateMachineCall(expr) {
127
+ if (ts.isIdentifier(expr) && expr.text === 'createMachine')
128
+ return true;
129
+ if (ts.isPropertyAccessExpression(expr) && expr.name.text === 'createMachine')
130
+ return true;
131
+ return false;
132
+ }
133
+ /**
134
+ * Emits the typed finding for a `createMachine` call that cannot be
135
+ * parsed as a known FSM style. Fail-closed: no resource is produced, and
136
+ * the reason surfaces as a gate-visible finding instead of silence.
137
+ */
138
+ function unknownFsmStyleFinding(ctx, call, cause) {
139
+ const { sourceFile } = ctx;
140
+ const lc = sourceFile.getLineAndCharacterOfPosition(call.getStart(sourceFile));
141
+ return {
142
+ code: 'UNKNOWN_FSM_STYLE',
143
+ detail: `createMachine call could not be parsed as a known FSM style: ${cause}; no workflow resource is emitted from this call`,
144
+ locations: [{ file: relPath(ctx.cwd, ctx.file), line: lc.line + 1, col: lc.character }],
145
+ };
146
+ }
147
+ function tryExtractXstateMachine(ctx, call) {
148
+ const arg = call.arguments[0];
149
+ if (arg === undefined || !ts.isObjectLiteralExpression(arg)) {
150
+ ctx.onFinding(unknownFsmStyleFinding(ctx, call, 'the config argument is not an object literal'));
151
+ return null;
152
+ }
153
+ const statesProp = arg.properties.find((p) => ts.isPropertyAssignment(p) && ts.isIdentifier(p.name) && p.name.text === 'states');
154
+ if (statesProp === undefined) {
155
+ ctx.onFinding(unknownFsmStyleFinding(ctx, call, 'the config declares no `states` object'));
156
+ return null;
157
+ }
158
+ if (!ts.isObjectLiteralExpression(statesProp.initializer)) {
159
+ ctx.onFinding(unknownFsmStyleFinding(ctx, call, '`states` is not an object literal'));
160
+ return null;
161
+ }
162
+ const machine = newMachine(ctx, 'xstate');
163
+ const stateNames = [];
164
+ for (const stateProp of statesProp.initializer.properties) {
165
+ if (!ts.isPropertyAssignment(stateProp) || !ts.isIdentifier(stateProp.name))
166
+ continue;
167
+ const stateName = stateProp.name.text;
168
+ if (stateName === undefined)
169
+ continue;
170
+ stateNames.push(stateName);
171
+ machine.states.add(stateName);
172
+ if (ts.isObjectLiteralExpression(stateProp.initializer)) {
173
+ const onProp = stateProp.initializer.properties.find((p) => ts.isPropertyAssignment(p) && ts.isIdentifier(p.name) && p.name.text === 'on');
174
+ if (onProp !== undefined && ts.isObjectLiteralExpression(onProp.initializer)) {
175
+ for (const eventProp of onProp.initializer.properties) {
176
+ if (!ts.isPropertyAssignment(eventProp))
177
+ continue;
178
+ const eventName = propertyName(eventProp);
179
+ if (eventName === null)
180
+ continue;
181
+ if (!ts.isObjectLiteralExpression(eventProp.initializer))
182
+ continue;
183
+ const targetProp = eventProp.initializer.properties.find((p) => ts.isPropertyAssignment(p) && (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) &&
184
+ (ts.isIdentifier(p.name) ? p.name.text === 'target' : p.name.text === 'target'));
185
+ if (targetProp === undefined)
186
+ continue;
187
+ const target = stringValue(targetProp.initializer);
188
+ if (target === null)
189
+ continue;
190
+ // XState supports `target: 'foo' | 'bar' | undefined`. We split on `|`.
191
+ for (const part of target.split('|')) {
192
+ const cleaned = part.trim();
193
+ if (cleaned.length === 0)
194
+ continue;
195
+ machine.states.add(cleaned);
196
+ machine.transitions.push({ from: stateName, to: cleaned, action: eventName });
197
+ }
198
+ }
199
+ }
200
+ }
201
+ }
202
+ if (machine.states.size === 0) {
203
+ ctx.onFinding(unknownFsmStyleFinding(ctx, call, 'the `states` object declares no states'));
204
+ return null;
205
+ }
206
+ machine.claimed = true;
207
+ machine.auditEvent = ctx.sourceFile.text.includes('audit') || ctx.sourceFile.text.includes('appendFile');
208
+ machine.name = deriveXstateName(ctx, call, stateNames);
209
+ machine.idFragment = `${machine.domain}.${machine.name}`;
210
+ return machine;
211
+ }
212
+ function deriveXstateName(ctx, call, stateNames) {
213
+ // Prefer the enclosing variable declaration's identifier (typical usage:
214
+ // `export const contractMachine = createMachine({ ... })`).
215
+ const parent = call.parent;
216
+ if (parent !== undefined && ts.isVariableDeclaration(parent) && ts.isIdentifier(parent.name)) {
217
+ return lower(parent.name.text);
218
+ }
219
+ // Fall back to the first state name (better than nothing).
220
+ const first = stateNames[0];
221
+ return lower(first ?? ctx.file);
222
+ }
223
+ // ---------------------------------------------------------------------------
224
+ // Hand-rolled FSM class detector arm
225
+ // ---------------------------------------------------------------------------
226
+ function tryExtractFsmClass(ctx, decl) {
227
+ const className = decl.name?.text;
228
+ if (className === undefined)
229
+ return null;
230
+ if (!/Machine$|FSM$|StateMachine$|Workflow$/.test(className))
231
+ return null;
232
+ const machine = newMachine(ctx, 'fsm');
233
+ const seenTransitions = new Set();
234
+ for (const member of decl.members) {
235
+ if (ts.isPropertyDeclaration(member) && ts.isIdentifier(member.name) && member.name.text === 'transitions' &&
236
+ member.initializer !== undefined && ts.isObjectLiteralExpression(member.initializer)) {
237
+ for (const fromProp of member.initializer.properties) {
238
+ if (!ts.isPropertyAssignment(fromProp))
239
+ continue;
240
+ const from = propertyName(fromProp);
241
+ if (from === null)
242
+ continue;
243
+ machine.states.add(from);
244
+ if (!ts.isObjectLiteralExpression(fromProp.initializer))
245
+ continue;
246
+ const onProp = fromProp.initializer.properties.find((p) => ts.isPropertyAssignment(p) && ts.isIdentifier(p.name) && p.name.text === 'on');
247
+ if (onProp === undefined || !ts.isObjectLiteralExpression(onProp.initializer))
248
+ continue;
249
+ for (const eventProp of onProp.initializer.properties) {
250
+ if (!ts.isPropertyAssignment(eventProp))
251
+ continue;
252
+ const eventName = propertyName(eventProp);
253
+ if (eventName === null)
254
+ continue;
255
+ const to = stringValue(eventProp.initializer);
256
+ if (to === null)
257
+ continue;
258
+ machine.states.add(to);
259
+ const key = `${from}::${eventName}::${to}`;
260
+ if (seenTransitions.has(key))
261
+ continue;
262
+ seenTransitions.add(key);
263
+ machine.transitions.push({ from, to, action: eventName });
264
+ }
265
+ }
266
+ }
267
+ }
268
+ if (machine.states.size === 0)
269
+ return null;
270
+ machine.claimed = true;
271
+ machine.name = lower(className);
272
+ machine.idFragment = `${machine.domain}.${machine.name}`;
273
+ machine.auditEvent = ctx.sourceFile.text.includes('audit') || ctx.sourceFile.text.includes('appendFile');
274
+ return machine;
275
+ }
276
+ // ---------------------------------------------------------------------------
277
+ // Enum + switch transition guard detector arm
278
+ // ---------------------------------------------------------------------------
279
+ function tryExtractEnumSwitch(ctx, node) {
280
+ // Detect enum declarations (TS enums).
281
+ if (ts.isEnumDeclaration(node)) {
282
+ const machine = newMachine(ctx, 'enum-switch');
283
+ for (const member of node.members) {
284
+ const name = ts.isEnumMember(member) && member.name !== undefined
285
+ ? (ts.isIdentifier(member.name) ? member.name.text : member.name.getText(ctx.sourceFile))
286
+ : null;
287
+ if (name !== null)
288
+ machine.states.add(name);
289
+ }
290
+ // Look at sibling switch statements in the file.
291
+ collectEnumSwitchCases(ctx, machine);
292
+ if (machine.states.size === 0)
293
+ return null;
294
+ machine.claimed = true;
295
+ machine.name = lower(node.name.text);
296
+ machine.idFragment = `${machine.domain}.${machine.name}`;
297
+ machine.auditEvent = ctx.sourceFile.text.includes('audit') || ctx.sourceFile.text.includes('appendFile');
298
+ return machine;
299
+ }
300
+ // Detect `const X = { FOO: 'foo', ... } as const` style enums.
301
+ if (ts.isVariableStatement(node)) {
302
+ for (const decl of node.declarationList.declarations) {
303
+ if (!ts.isIdentifier(decl.name))
304
+ continue;
305
+ const init = decl.initializer;
306
+ if (init === undefined || !ts.isObjectLiteralExpression(init))
307
+ continue;
308
+ const machine = newMachine(ctx, 'enum-switch');
309
+ let looksLikeEnum = false;
310
+ for (const prop of init.properties) {
311
+ if (!ts.isPropertyAssignment(prop))
312
+ continue;
313
+ const name = propertyName(prop);
314
+ if (name === null)
315
+ continue;
316
+ const val = stringValue(prop.initializer);
317
+ if (val !== null) {
318
+ machine.states.add(val);
319
+ looksLikeEnum = true;
320
+ }
321
+ else {
322
+ machine.states.add(name);
323
+ }
324
+ }
325
+ if (!looksLikeEnum)
326
+ continue;
327
+ collectEnumSwitchCases(ctx, machine);
328
+ if (machine.states.size === 0)
329
+ continue;
330
+ machine.claimed = true;
331
+ machine.name = lower(decl.name.text);
332
+ machine.idFragment = `${machine.domain}.${machine.name}`;
333
+ machine.auditEvent = ctx.sourceFile.text.includes('audit') || ctx.sourceFile.text.includes('appendFile');
334
+ return machine;
335
+ }
336
+ }
337
+ return null;
338
+ }
339
+ function collectEnumSwitchCases(ctx, machine) {
340
+ // Walk the entire file looking for switch statements whose cases
341
+ // mention the machine's state identifiers.
342
+ const visit = (node) => {
343
+ if (ts.isSwitchStatement(node)) {
344
+ const discriminant = node.expression.getText(ctx.sourceFile);
345
+ for (const state of machine.states) {
346
+ if (discriminant.toLowerCase().includes(state.toLowerCase())) {
347
+ for (const clause of node.caseBlock.clauses) {
348
+ if (ts.isCaseClause(clause)) {
349
+ const caseText = clause.expression.getText(ctx.sourceFile).replaceAll('"', '').replaceAll("'", '').trim();
350
+ if (caseText.length === 0)
351
+ continue;
352
+ machine.states.add(caseText);
353
+ machine.transitions.push({ from: state, to: caseText, action: caseText });
354
+ }
355
+ }
356
+ break;
357
+ }
358
+ }
359
+ }
360
+ ts.forEachChild(node, visit);
361
+ };
362
+ ts.forEachChild(ctx.sourceFile, visit);
363
+ }
364
+ // ---------------------------------------------------------------------------
365
+ // Zustand state-slice detector arm
366
+ // ---------------------------------------------------------------------------
367
+ function tryExtractZustandSlice(ctx, call) {
368
+ const arg = call.arguments[0];
369
+ if (arg === undefined || !ts.isArrowFunction(arg) && !ts.isFunctionExpression(arg))
370
+ return null;
371
+ if (!ts.isObjectLiteralExpression(arg.body))
372
+ return null;
373
+ const machine = newMachine(ctx, 'zustand-slice');
374
+ for (const prop of arg.body.properties) {
375
+ if (!ts.isPropertyAssignment(prop))
376
+ continue;
377
+ const name = propertyName(prop);
378
+ if (name === null)
379
+ continue;
380
+ if (name === 'status' || name === 'state') {
381
+ const initial = stringValue(prop.initializer);
382
+ if (initial !== null)
383
+ machine.states.add(initial);
384
+ continue;
385
+ }
386
+ if (name === 'transition' || name === 'set' || name === 'move') {
387
+ const init = prop.initializer;
388
+ if (init === undefined)
389
+ continue;
390
+ const text = init.getText(ctx.sourceFile);
391
+ const matches = text.matchAll(/['"]([a-zA-Z][a-zA-Z0-9_-]*)['"]/g);
392
+ for (const m of matches) {
393
+ const literal = m[1];
394
+ if (literal !== undefined)
395
+ machine.states.add(literal);
396
+ }
397
+ }
398
+ }
399
+ if (machine.states.size === 0)
400
+ return null;
401
+ machine.claimed = true;
402
+ // Naming: prefer the variable assignment that wraps the call.
403
+ const parent = call.parent;
404
+ if (parent !== undefined && ts.isVariableDeclaration(parent) && ts.isIdentifier(parent.name)) {
405
+ machine.name = lower(machine.states.values().next().value ?? ctx.file);
406
+ }
407
+ machine.idFragment = `${machine.domain}.${machine.name}`;
408
+ machine.auditEvent = ctx.sourceFile.text.includes('audit') || ctx.sourceFile.text.includes('appendFile');
409
+ return machine;
410
+ }
411
+ // ---------------------------------------------------------------------------
412
+ // Resource finalisation
413
+ // ---------------------------------------------------------------------------
414
+ function finalizeMachine(machine, detectorId, detectorVersion) {
415
+ const states = [...machine.states].sort();
416
+ const transitions = dedupTransitions(machine.transitions);
417
+ const outgoing = new Set();
418
+ for (const t of transitions)
419
+ outgoing.add(t.from);
420
+ const terminal = states.filter((s) => !outgoing.has(s));
421
+ // The graph identity must satisfy the bare-name grammar (`^[^.]+$`):
422
+ // the dotted `idFragment` (`domain.name`) stays on the resource id, the
423
+ // dashed bare form is the graph-visible name. A normalized collision
424
+ // with another machine surfaces downstream as a duplicate-id finding —
425
+ // never silently merged.
426
+ const attributes = {
427
+ resourceName: machine.idFragment.replace(/[^A-Za-z0-9_-]/g, '-'),
428
+ states,
429
+ transitions,
430
+ terminal,
431
+ auditEvent: machine.auditEvent,
432
+ style: machine.style,
433
+ domain: machine.domain,
434
+ };
435
+ return {
436
+ schemaVersion: GATEFORGE_SCHEMA_VERSION,
437
+ id: `workflow.contract.${machine.idFragment}`,
438
+ kind: WORKFLOW_CONTRACT_KIND,
439
+ source: machine.location.file,
440
+ location: machine.location,
441
+ detectorVersion,
442
+ attributes: attributes,
443
+ };
444
+ // `detectorId` is consumed by the graph stage (handshake-pinned at
445
+ // plugin registration); the in-process detector's resource records
446
+ // use `detectorVersion` only.
447
+ void detectorId;
448
+ }
449
+ function dedupTransitions(list) {
450
+ const seen = new Set();
451
+ const out = [];
452
+ for (const t of list) {
453
+ const key = `${t.from}::${t.action}::${t.to}`;
454
+ if (seen.has(key))
455
+ continue;
456
+ seen.add(key);
457
+ out.push(t);
458
+ }
459
+ out.sort((a, b) => {
460
+ if (a.from !== b.from)
461
+ return a.from < b.from ? -1 : 1;
462
+ if (a.action !== b.action)
463
+ return a.action < b.action ? -1 : 1;
464
+ return a.to < b.to ? -1 : a.to > b.to ? 1 : 0;
465
+ });
466
+ return out;
467
+ }
468
+ // ---------------------------------------------------------------------------
469
+ // Small helpers
470
+ function newMachine(ctx, style) {
471
+ const { file, sourceFile } = ctx;
472
+ const lc = sourceFile.getLineAndCharacterOfPosition(0);
473
+ const domain = inferDomain(file);
474
+ return {
475
+ idFragment: `${domain}.unknown`,
476
+ name: 'unknown',
477
+ domain,
478
+ location: { file: relPath(ctx.cwd, file), line: lc.line + 1, col: lc.character },
479
+ states: new Set(),
480
+ transitions: [],
481
+ style,
482
+ auditEvent: false,
483
+ claimed: false,
484
+ };
485
+ }
486
+ function inferDomain(file) {
487
+ const base = file.split('/').pop() ?? file;
488
+ const stripped = base.replace(/\.(ts|tsx|js|mjs|cjs)$/i, '');
489
+ return lower(stripped);
490
+ }
491
+ function relPath(cwd, file) {
492
+ if (file.startsWith(cwd + '/'))
493
+ return file.slice(cwd.length + 1);
494
+ return file;
495
+ }
496
+ function propertyName(prop) {
497
+ const name = prop.name;
498
+ if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {
499
+ return name.text;
500
+ }
501
+ return null;
502
+ }
503
+ function stringValue(expr) {
504
+ if (ts.isStringLiteral(expr) || ts.isNoSubstitutionTemplateLiteral(expr)) {
505
+ return expr.text;
506
+ }
507
+ if (ts.isIdentifier(expr))
508
+ return expr.text;
509
+ return null;
510
+ }
511
+ function lower(value) {
512
+ return value.replace(/[^A-Za-z0-9]+/g, '-').toLowerCase().replace(/^-|-$/g, '') || 'unknown';
513
+ }
514
+ //# sourceMappingURL=detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../src/detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { PACK_PLUGIN_ID, PACK_VERSION } from './version.js';
2
+ export { createWorkflowDetector, WORKFLOW_CONTRACT_KIND, type FsmStyle, type WorkflowContractAttributes, type WorkflowDetector, type WorkflowDetectorOptions, type WorkflowTransition, } from './detector.js';
3
+ export { WORKFLOW_OBLIGATION_CONTRACTS, WORKFLOW_TRANSITION_ALLOWED, WORKFLOW_TRANSITION_REJECTED, WORKFLOW_TERMINAL_IMMUTABLE, WORKFLOW_AUDIT_EMITTED, WORKFLOW_PERSISTED_FINAL_STATE, obligationsForWorkflowResource, } from './obligations.js';
4
+ export { WorkflowAdapterSchema, auditLogContainsTransition, projectAuditRow, validateWorkflowAdapter, type AuditRow, type RawAuditLog, type RawEntity, type TransitionOutcome, type TransitionRequest, type WorkflowAdapter, type WorkflowAdapterContext, type WorkflowAdapterValidation, } from './adapter-schema.js';
5
+ /** The default CLI in-process plugin module: `{ discover(paths) }`. */
6
+ declare const _default: import("./detector.js").WorkflowDetector;
7
+ export default _default;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,QAAQ,EACb,KAAK,0BAA0B,EAC/B,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,sBAAsB,EACtB,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,EACvB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,GAC/B,MAAM,qBAAqB,CAAC;AAE7B,uEAAuE;;AACvE,wBAAwC"}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @gate-forge/pack-workflow — workflow / state-machine discovery pack.
3
+ *
4
+ * Detects state machines from TypeScript / JavaScript source via the
5
+ * TypeScript compiler API (AST only — no execution, no module
6
+ * resolution) and exposes the pinned GPP/3 discovery vocabulary of
7
+ * the resource graph: one `workflow.contract.<domain>.<name>` resource
8
+ * per detected FSM carrying `states[]`, `transitions[]`,
9
+ * `terminal[]`, `auditEvent: boolean`, and `style`.
10
+ *
11
+ * The five workflow obligation contracts (mirrored by
12
+ * {@link WORKFLOW_OBLIGATION_CONTRACTS}) drive policy generation:
13
+ * `workflow:transition-allowed`, `workflow:transition-rejected`,
14
+ * `workflow:terminal-immutable`, `workflow:audit-emitted`,
15
+ * `workflow:persisted-final-state`.
16
+ *
17
+ * The default export is the CLI in-process plugin contract
18
+ * (`discover(paths)`); the same `createWorkflowDetector()` factory
19
+ * underpins tests and the witness service's adapter binding.
20
+ *
21
+ * See README.md for the adapter schema and the example workflow
22
+ * server on port 3002.
23
+ */
24
+ import { createWorkflowDetector } from './detector.js';
25
+ export { PACK_PLUGIN_ID, PACK_VERSION } from './version.js';
26
+ export { createWorkflowDetector, WORKFLOW_CONTRACT_KIND, } from './detector.js';
27
+ export { WORKFLOW_OBLIGATION_CONTRACTS, WORKFLOW_TRANSITION_ALLOWED, WORKFLOW_TRANSITION_REJECTED, WORKFLOW_TERMINAL_IMMUTABLE, WORKFLOW_AUDIT_EMITTED, WORKFLOW_PERSISTED_FINAL_STATE, obligationsForWorkflowResource, } from './obligations.js';
28
+ export { WorkflowAdapterSchema, auditLogContainsTransition, projectAuditRow, validateWorkflowAdapter, } from './adapter-schema.js';
29
+ /** The default CLI in-process plugin module: `{ discover(paths) }`. */
30
+ export default createWorkflowDetector();
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GAMvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,sBAAsB,EACtB,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,GASxB,MAAM,qBAAqB,CAAC;AAE7B,uEAAuE;AACvE,eAAe,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Obligation contract vocabulary for the workflow pack.
3
+ *
4
+ * Every discovered `workflow.contract.*` resource generates the same
5
+ * five obligations (the policy stage of the engine chooses a subset
6
+ * based on classification; the contracts themselves are fixed). The
7
+ * contract names are the suffix of the obligation id
8
+ * `<resourceId>:<contract>`; resource ids always start with
9
+ * `workflow.contract.`, so obligation ids look like
10
+ * `workflow.contract.contracts.draft:workflow:transition-allowed`.
11
+ *
12
+ * The five contracts mirror the root plan §6 "Workflow pack" obligations
13
+ * (valid transition / invalid transition / persisted final state /
14
+ * audit event records actor and transition) plus an explicit
15
+ * terminal-immutability obligation that the e2e suite exercises.
16
+ */
17
+ /** Valid transition succeeds + persists + appends an audit row. */
18
+ export declare const WORKFLOW_TRANSITION_ALLOWED = "workflow:transition-allowed";
19
+ /**
20
+ * Invalid transition is rejected: the adapter's `attemptTransition`
21
+ * returns `{ accepted: false }`, the persisted state is unchanged, and
22
+ * no audit row is appended.
23
+ */
24
+ export declare const WORKFLOW_TRANSITION_REJECTED = "workflow:transition-rejected";
25
+ /**
26
+ * Any write attempt against a terminal state is rejected with
27
+ * `{ accepted: false, reason: 'terminal-state' }`; no audit row is
28
+ * appended.
29
+ */
30
+ export declare const WORKFLOW_TERMINAL_IMMUTABLE = "workflow:terminal-immutable";
31
+ /**
32
+ * Audit row emitted on every accepted transition contains `actor`,
33
+ * `from`, `to`, and a timestamp; the adapter's `readAuditLog()`
34
+ * returns the append-only log verbatim.
35
+ */
36
+ export declare const WORKFLOW_AUDIT_EMITTED = "workflow:audit-emitted";
37
+ /**
38
+ * The persisted entity's `status` matches the machine's terminal state
39
+ * after the transition sequence (e.g. `terminated`, `signed`).
40
+ */
41
+ export declare const WORKFLOW_PERSISTED_FINAL_STATE = "workflow:persisted-final-state";
42
+ /** Every workflow contract this pack ships, in stable declaration order. */
43
+ export declare const WORKFLOW_OBLIGATION_CONTRACTS: readonly string[];
44
+ /**
45
+ * Returns the obligation contracts applicable to a workflow resource.
46
+ * Currently every workflow resource is treated equally; the engine's
47
+ * classification stage may narrow this later.
48
+ *
49
+ * Args:
50
+ * resourceId: The full `workflow.contract.<domain>.<name>` id.
51
+ *
52
+ * Returns:
53
+ * readonly string[]: The full contract list — same for every workflow
54
+ * resource today, returned as a fresh copy so callers may not mutate
55
+ * the shared array.
56
+ */
57
+ export declare function obligationsForWorkflowResource(resourceId: string): readonly string[];
58
+ //# sourceMappingURL=obligations.d.ts.map