openplanr 1.15.0 → 1.16.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.
Files changed (57) hide show
  1. package/README.md +3 -1
  2. package/dist/cli/commands/operate.d.ts.map +1 -1
  3. package/dist/cli/commands/operate.js +33 -8
  4. package/dist/cli/commands/operate.js.map +1 -1
  5. package/dist/services/credential-backends.d.ts +4 -0
  6. package/dist/services/credential-backends.d.ts.map +1 -1
  7. package/dist/services/credential-backends.js +21 -15
  8. package/dist/services/credential-backends.js.map +1 -1
  9. package/dist/services/operate/advisors.d.ts +18 -3
  10. package/dist/services/operate/advisors.d.ts.map +1 -1
  11. package/dist/services/operate/advisors.js +76 -4
  12. package/dist/services/operate/advisors.js.map +1 -1
  13. package/dist/services/operate/engine.d.ts +1 -0
  14. package/dist/services/operate/engine.d.ts.map +1 -1
  15. package/dist/services/operate/engine.js +29 -3
  16. package/dist/services/operate/engine.js.map +1 -1
  17. package/dist/services/operate/evidence.d.ts.map +1 -1
  18. package/dist/services/operate/evidence.js +10 -13
  19. package/dist/services/operate/evidence.js.map +1 -1
  20. package/dist/services/operate/index.d.ts.map +1 -1
  21. package/dist/services/operate/index.js +171 -36
  22. package/dist/services/operate/index.js.map +1 -1
  23. package/dist/services/operate/interaction/answer-service.d.ts.map +1 -1
  24. package/dist/services/operate/interaction/answer-service.js +17 -1
  25. package/dist/services/operate/interaction/answer-service.js.map +1 -1
  26. package/dist/services/operate/interaction/initialization-replay.d.ts +9 -0
  27. package/dist/services/operate/interaction/initialization-replay.d.ts.map +1 -0
  28. package/dist/services/operate/interaction/initialization-replay.js +64 -0
  29. package/dist/services/operate/interaction/initialization-replay.js.map +1 -0
  30. package/dist/services/operate/interaction/question-engine.d.ts.map +1 -1
  31. package/dist/services/operate/interaction/question-engine.js +28 -17
  32. package/dist/services/operate/interaction/question-engine.js.map +1 -1
  33. package/dist/services/operate/interaction/session-service.d.ts.map +1 -1
  34. package/dist/services/operate/interaction/session-service.js +40 -13
  35. package/dist/services/operate/interaction/session-service.js.map +1 -1
  36. package/dist/services/operate/maintenance.d.ts +12 -0
  37. package/dist/services/operate/maintenance.d.ts.map +1 -1
  38. package/dist/services/operate/maintenance.js +334 -35
  39. package/dist/services/operate/maintenance.js.map +1 -1
  40. package/dist/services/operate/protocol.d.ts +17 -1
  41. package/dist/services/operate/protocol.d.ts.map +1 -1
  42. package/dist/services/operate/protocol.js.map +1 -1
  43. package/dist/services/operate/reports.d.ts +28 -0
  44. package/dist/services/operate/reports.d.ts.map +1 -0
  45. package/dist/services/operate/reports.js +134 -0
  46. package/dist/services/operate/reports.js.map +1 -0
  47. package/dist/services/operate/types.d.ts +82 -3
  48. package/dist/services/operate/types.d.ts.map +1 -1
  49. package/dist/services/operate/types.js.map +1 -1
  50. package/dist/services/pipeline-package-service.d.ts +2 -0
  51. package/dist/services/pipeline-package-service.d.ts.map +1 -1
  52. package/dist/services/pipeline-package-service.js +2 -1
  53. package/dist/services/pipeline-package-service.js.map +1 -1
  54. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  55. package/dist/services/runtime-manager-service.js +4 -1
  56. package/dist/services/runtime-manager-service.js.map +1 -1
  57. package/package.json +4 -4
@@ -12,6 +12,25 @@ export const GUIDED_SESSION_TTL_MS = 24 * 60 * 60 * 1000;
12
12
  export const GUIDED_ANSWER_MAX_BYTES = 64 * 1024;
13
13
  const SESSION_ID = /^GIS-[A-Za-z0-9._-]{8,128}$/;
14
14
  const execFileAsync = promisify(execFile);
15
+ const STATE_WRITE_ERROR_CODES = new Set([
16
+ 'EACCES',
17
+ 'EDQUOT',
18
+ 'ENOSPC',
19
+ 'ENOTDIR',
20
+ 'EPERM',
21
+ 'EROFS',
22
+ ]);
23
+ function guidedStateWriteError(error) {
24
+ const code = error?.code;
25
+ if (!code || !STATE_WRITE_ERROR_CODES.has(code))
26
+ return null;
27
+ return new OperateError('E_OPERATE_STATE_UNAVAILABLE', 'Operating Board cannot write its machine-local guided-session state. Grant the active runtime sandbox write access to OPENPLANR_STATE_ROOT (or the default ~/.planr state root), then retry.', {
28
+ stateClass: 'machine-local',
29
+ requiredPermission: 'write',
30
+ platformCode: code,
31
+ recoveryCommand: 'planr operate init --json',
32
+ });
33
+ }
15
34
  export function createGuidedSessionId() {
16
35
  return `GIS-${randomBytes(18).toString('base64url')}`;
17
36
  }
@@ -94,19 +113,27 @@ async function validateSession(session) {
94
113
  }
95
114
  async function atomicSessionWrite(projectRoot, session, localRoot) {
96
115
  await validateSession(session);
97
- const target = sessionPath(projectRoot, session.sessionId, localRoot);
98
- await mkdir(path.dirname(target), { recursive: true, mode: 0o700 });
99
- const raw = `${canonicalize(session)}\n`;
100
- const key = await loadOrCreateSessionKey(projectRoot, localRoot);
101
- const temporary = `${target}.${process.pid}.${randomUUID()}.tmp`;
102
- const macTarget = sessionMacPath(projectRoot, session.sessionId, localRoot);
103
- const macTemporary = `${macTarget}.${process.pid}.${randomUUID()}.tmp`;
104
- await writeFile(temporary, raw, { mode: 0o600, flag: 'wx' });
105
- await writeFile(macTemporary, `${sessionMac(raw, key)}\n`, { mode: 0o600, flag: 'wx' });
106
- await rename(temporary, target);
107
- await rename(macTemporary, macTarget);
108
- await chmod(target, 0o600);
109
- await chmod(macTarget, 0o600);
116
+ try {
117
+ const target = sessionPath(projectRoot, session.sessionId, localRoot);
118
+ await mkdir(path.dirname(target), { recursive: true, mode: 0o700 });
119
+ const raw = `${canonicalize(session)}\n`;
120
+ const key = await loadOrCreateSessionKey(projectRoot, localRoot);
121
+ const temporary = `${target}.${process.pid}.${randomUUID()}.tmp`;
122
+ const macTarget = sessionMacPath(projectRoot, session.sessionId, localRoot);
123
+ const macTemporary = `${macTarget}.${process.pid}.${randomUUID()}.tmp`;
124
+ await writeFile(temporary, raw, { mode: 0o600, flag: 'wx' });
125
+ await writeFile(macTemporary, `${sessionMac(raw, key)}\n`, { mode: 0o600, flag: 'wx' });
126
+ await rename(temporary, target);
127
+ await rename(macTemporary, macTarget);
128
+ await chmod(target, 0o600);
129
+ await chmod(macTarget, 0o600);
130
+ }
131
+ catch (error) {
132
+ const normalized = guidedStateWriteError(error);
133
+ if (normalized)
134
+ throw normalized;
135
+ throw error;
136
+ }
110
137
  }
111
138
  export async function createGuidedSession(input) {
112
139
  const now = input.now ?? new Date();
@@ -1 +1 @@
1
- {"version":3,"file":"session-service.js","sourceRoot":"","sources":["../../../../src/services/operate/interaction/session-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-service.js","sourceRoot":"","sources":["../../../../src/services/operate/interaction/session-service.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { OperatingEventStore } from './event-store.js';
2
+ import { type OperatingAdapterHandoff, type OperatingRoleResult } from './types.js';
1
3
  export declare function operatingCacheAction(input: {
2
4
  projectRoot: string;
3
5
  action: 'status' | 'purge';
@@ -24,6 +26,16 @@ export declare function repairOperatingSecurity(input: {
24
26
  localRoot?: string;
25
27
  faultInjector?: (boundary: 'project-quarantined') => void | Promise<void>;
26
28
  }): Promise<unknown>;
29
+ export declare function readPersistedOperatingRoleResults(store: OperatingEventStore, cycleId: string): Promise<OperatingRoleResult[]>;
30
+ export declare function createOperatingAdapterStartHandoff(input: {
31
+ projectRoot: string;
32
+ cycleId: string;
33
+ evidenceDigest: `sha256:${string}`;
34
+ runtime: string;
35
+ phase: 'advisors' | 'chair';
36
+ roles: string[];
37
+ localRoot?: string;
38
+ }): Promise<OperatingAdapterHandoff>;
27
39
  export declare function operateAdapterLifecycle(input: {
28
40
  projectRoot: string;
29
41
  action: 'prepare' | 'record' | 'resume' | 'finalize' | 'cancel';
@@ -1 +1 @@
1
- {"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../../src/services/operate/maintenance.ts"],"names":[],"mappings":"AA6GA,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuDnB;AA2BD,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqEnB;AAED,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,MAAM,EAAE,CAAA;CAAE,CAAC,CAiCxD;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3E,GAAG,OAAO,CAAC,OAAO,CAAC,CA4RnB;AAkGD,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CAiVnB"}
1
+ {"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../../src/services/operate/maintenance.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAUvD,OAAO,EAIL,KAAK,uBAAuB,EAK5B,KAAK,mBAAmB,EAEzB,MAAM,YAAY,CAAC;AAsIpB,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuDnB;AA2BD,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqEnB;AAED,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,MAAM,EAAE,CAAA;CAAE,CAAC,CAiCxD;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3E,GAAG,OAAO,CAAC,OAAO,CAAC,CA4RnB;AAsCD,wBAAsB,iCAAiC,CACrD,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAyBhC;AAgFD,wBAAsB,kCAAkC,CAAC,KAAK,EAAE;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,UAAU,MAAM,EAAE,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAgDnC;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CAmlBnB"}
@@ -1,7 +1,7 @@
1
1
  import { createHmac, randomBytes, randomUUID, timingSafeEqual } from 'node:crypto';
2
2
  import { mkdir, readdir, readFile, rename, rm, unlink, writeFile } from 'node:fs/promises';
3
3
  import path from 'node:path';
4
- import { assertAdvisorOutputMatchesBrief, buildAdvisorOperatingContext, createOperatingAdvisorPack, } from './advisors.js';
4
+ import { advisorResponseContractDetails, assertAdvisorOutputMatchesBrief, buildAdvisorOperatingContext, createNativeOperatingRoleResult, createOperatingAdvisorPack, } from './advisors.js';
5
5
  import { canonicalDigest, canonicalize, sha256Digest } from './canonical.js';
6
6
  import { operatingProjectKey } from './config.js';
7
7
  import { buildChairEvidence } from './engine.js';
@@ -17,6 +17,50 @@ import { assertOperatingArtifact, loadOperatingProtocol } from './protocol.js';
17
17
  import { containsSecret, redactSensitiveText } from './redaction.js';
18
18
  import { OPERATE_PROTOCOL_VERSION, OPERATE_SCHEMA_VERSION, OperateError, } from './types.js';
19
19
  import { resolveContainedPath, resolveOperatingPaths } from './workspace.js';
20
+ function adapterSessionSummary(session) {
21
+ const { roleBriefs: _roleBriefs, rolePacks: _rolePacks, ...summary } = session;
22
+ return summary;
23
+ }
24
+ async function adapterHandoff(session) {
25
+ const recorded = new Set(session.recordedRoles);
26
+ const state = session.state === 'cancelled'
27
+ ? 'cancelled'
28
+ : session.state === 'finalized'
29
+ ? 'continue-required'
30
+ : session.roles.some((role) => !recorded.has(role))
31
+ ? 'record-required'
32
+ : 'finalize-required';
33
+ const protocol = await loadOperatingProtocol();
34
+ const handoff = protocol.createOperatingAdapterHandoff({
35
+ phase: session.phase,
36
+ state,
37
+ cycleId: session.cycleId,
38
+ evidenceDigest: session.evidenceDigest,
39
+ runtime: session.runtime,
40
+ idempotencyKey: session.idempotencyKey,
41
+ lease: session.lease,
42
+ expiresAt: session.expiresAt,
43
+ roles: session.roles.map((role) => ({
44
+ roleId: role,
45
+ status: recorded.has(role) ? 'recorded' : 'pending',
46
+ inputDigest: session.roleInputDigests[role],
47
+ })),
48
+ });
49
+ return protocol.validateOperatingAdapterHandoffBindings(handoff);
50
+ }
51
+ function adapterPhase(roles) {
52
+ return roles.length === 1 && roles[0] === 'chair' ? 'chair' : 'advisors';
53
+ }
54
+ function sameRoleSet(left, right) {
55
+ return (left.length === right.length &&
56
+ [...left].sort().every((role, index) => role === [...right].sort()[index]));
57
+ }
58
+ function sessionExpired(session) {
59
+ return Date.parse(session.expiresAt) <= Date.now();
60
+ }
61
+ function retryRunCommand(session) {
62
+ return `planr operate run --cycle-id ${session.cycleId} --runtime ${session.runtime} --json`;
63
+ }
20
64
  async function atomicPrivateWrite(target, value) {
21
65
  await mkdir(path.dirname(target), { recursive: true, mode: 0o700 });
22
66
  const temporary = `${target}.${process.pid}.${randomUUID()}.tmp`;
@@ -490,7 +534,7 @@ async function persistedAdapterEvidence(store, cycleId) {
490
534
  }
491
535
  return assertOperatingArtifact('operating-evidence', record.content);
492
536
  }
493
- async function persistedAdapterResults(store, cycleId) {
537
+ export async function readPersistedOperatingRoleResults(store, cycleId) {
494
538
  const replay = await store.replay();
495
539
  const byRole = new Map();
496
540
  for (const event of replay.events) {
@@ -509,17 +553,87 @@ async function persistedAdapterResults(store, cycleId) {
509
553
  return [...byRole.values()].sort((left, right) => left.roleId.localeCompare(right.roleId));
510
554
  }
511
555
  async function readAdapterSession(projectRoot, cycleId, localRoot) {
512
- const session = JSON.parse(await readFile(adapterSessionPath(projectRoot, cycleId, localRoot), 'utf8'));
513
- if (session.implementation !== 'openplanr-operate-adapter' ||
514
- Date.parse(session.expiresAt) <= Date.now()) {
515
- throw new OperateError('E_OPERATE_ADVISOR_FAILED', 'Adapter session is invalid or expired.');
556
+ const parsed = JSON.parse(await readFile(adapterSessionPath(projectRoot, cycleId, localRoot), 'utf8'));
557
+ const session = {
558
+ ...parsed,
559
+ phase: parsed.phase ?? adapterPhase(parsed.roles ?? []),
560
+ runtime: parsed.runtime ?? 'auto',
561
+ };
562
+ if (session.implementation !== 'openplanr-operate-adapter') {
563
+ throw new OperateError('E_OPERATE_ADVISOR_FAILED', 'Adapter session is invalid.');
564
+ }
565
+ if (sessionExpired(session)) {
566
+ throw new OperateError('E_OPERATE_ADVISOR_FAILED', 'Adapter session expired.', {
567
+ cycleId,
568
+ recoveryCommand: retryRunCommand(session),
569
+ });
516
570
  }
517
571
  return session;
518
572
  }
519
- function assertAdapterBinding(session, lease, idempotencyKey) {
520
- if (session.lease !== lease || session.idempotencyKey !== idempotencyKey) {
521
- throw new OperateError('E_OPERATE_ADVISOR_ISOLATION', 'Adapter lease or idempotency binding does not match the prepared session.');
573
+ function assertAdapterBinding(session, lease, idempotencyKey, evidenceDigest) {
574
+ if (session.lease !== lease ||
575
+ session.idempotencyKey !== idempotencyKey ||
576
+ session.evidenceDigest !== evidenceDigest) {
577
+ throw new OperateError('E_OPERATE_ADVISOR_ISOLATION', 'Adapter evidence, lease, or idempotency binding does not match the prepared session.');
578
+ }
579
+ }
580
+ async function assertAdapterCycleBinding(input, session) {
581
+ const store = new OperatingEventStore(input.projectRoot, { localRoot: input.localRoot });
582
+ const state = await store.state();
583
+ const cycle = state.cycles.find((record) => record.id === input.cycleId);
584
+ if (!cycle || !['advising', 'blocked'].includes(cycle.state)) {
585
+ throw new OperateError('E_OPERATE_STATE_INVALID', `Adapter session requires cycle ${input.cycleId} to remain advising or blocked.`);
586
+ }
587
+ const cycleManifest = cycle;
588
+ if (cycleManifest.producer.runtime !== session.runtime) {
589
+ throw new OperateError('E_OPERATE_ADVISOR_ISOLATION', 'Adapter runtime no longer matches the immutable cycle runtime.');
590
+ }
591
+ const evidence = await persistedAdapterEvidence(store, input.cycleId);
592
+ if (evidence.fingerprint !== session.evidenceDigest) {
593
+ throw new OperateError('E_OPERATE_ADVISOR_ISOLATION', 'Adapter evidence no longer matches the committed cycle snapshot.');
594
+ }
595
+ }
596
+ export async function createOperatingAdapterStartHandoff(input) {
597
+ const target = adapterSessionPath(input.projectRoot, input.cycleId, input.localRoot);
598
+ const existing = await readFile(target, 'utf8')
599
+ .then((raw) => JSON.parse(raw))
600
+ .catch(() => null);
601
+ if (existing) {
602
+ const normalized = {
603
+ ...existing,
604
+ phase: existing.phase ?? adapterPhase(existing.roles ?? []),
605
+ runtime: existing.runtime ?? 'auto',
606
+ };
607
+ const exact = normalized.evidenceDigest === input.evidenceDigest &&
608
+ normalized.runtime === input.runtime &&
609
+ normalized.phase === input.phase &&
610
+ sameRoleSet(normalized.roles, input.roles);
611
+ if (!sessionExpired(normalized) && normalized.state !== 'cancelled' && exact) {
612
+ return adapterHandoff(normalized);
613
+ }
614
+ if (!sessionExpired(normalized) &&
615
+ ['prepared', 'recording'].includes(normalized.state) &&
616
+ !exact) {
617
+ throw new OperateError('E_OPERATE_ADVISOR_ISOLATION', `Cycle ${input.cycleId} already has a different active adapter session.`, { recoveryCommand: retryRunCommand(normalized) });
618
+ }
522
619
  }
620
+ const protocol = await loadOperatingProtocol();
621
+ const handoff = protocol.createOperatingAdapterHandoff({
622
+ phase: input.phase,
623
+ state: 'prepare-required',
624
+ cycleId: input.cycleId,
625
+ evidenceDigest: input.evidenceDigest,
626
+ runtime: input.runtime,
627
+ idempotencyKey: `native-${input.cycleId}-${input.phase}-${randomBytes(12).toString('hex')}`,
628
+ lease: null,
629
+ expiresAt: null,
630
+ roles: [...new Set(input.roles)].sort().map((roleId) => ({
631
+ roleId,
632
+ status: 'awaiting-prepare',
633
+ inputDigest: null,
634
+ })),
635
+ });
636
+ return protocol.validateOperatingAdapterHandoffBindings(handoff);
523
637
  }
524
638
  export async function operateAdapterLifecycle(input) {
525
639
  if (!input.cycleId || !input.idempotencyKey) {
@@ -538,11 +652,6 @@ export async function operateAdapterLifecycle(input) {
538
652
  if (!cycle || !['advising', 'blocked'].includes(cycle.state)) {
539
653
  throw new OperateError('E_OPERATE_STATE_INVALID', 'Adapter prepare requires an advising or blocked cycle.');
540
654
  }
541
- const existing = await readFile(target, 'utf8')
542
- .then((raw) => JSON.parse(raw))
543
- .catch(() => null);
544
- if (existing?.idempotencyKey === input.idempotencyKey)
545
- return existing;
546
655
  const protocol = await loadOperatingProtocol();
547
656
  const knownRoles = new Set(protocol.listOperatingRoles().map((role) => role.id));
548
657
  const enabledRoles = (Array.isArray(cycle.enabledRoles) ? cycle.enabledRoles.map(String) : []).filter((role) => knownRoles.has(role));
@@ -572,8 +681,45 @@ export async function operateAdapterLifecycle(input) {
572
681
  if (baseEvidence.fingerprint !== input.evidenceDigest) {
573
682
  throw new OperateError('E_OPERATE_ADVISOR_ISOLATION', 'Adapter evidence digest does not match the committed cycle snapshot.');
574
683
  }
684
+ const phase = adapterPhase(roles);
685
+ const runtime = cycle.producer.runtime;
686
+ const existing = await readFile(target, 'utf8')
687
+ .then((raw) => JSON.parse(raw))
688
+ .catch(() => null);
689
+ let recoverableSession = null;
690
+ if (existing) {
691
+ const normalized = {
692
+ ...existing,
693
+ phase: existing.phase ?? adapterPhase(existing.roles ?? []),
694
+ runtime: existing.runtime ?? 'auto',
695
+ };
696
+ const exact = normalized.cycleId === input.cycleId &&
697
+ normalized.evidenceDigest === input.evidenceDigest &&
698
+ normalized.runtime === runtime &&
699
+ normalized.phase === phase &&
700
+ sameRoleSet(normalized.roles, roles);
701
+ if (normalized.idempotencyKey === input.idempotencyKey) {
702
+ if (!exact) {
703
+ throw new OperateError('E_OPERATE_ADVISOR_ISOLATION', 'Idempotent adapter prepare does not match its original cycle, evidence, runtime, phase, or role binding.');
704
+ }
705
+ if (sessionExpired(normalized) || normalized.state === 'cancelled') {
706
+ throw new OperateError('E_OPERATE_ADVISOR_FAILED', 'The prepared adapter session is expired or cancelled; request a fresh CLI-owned handoff.', { recoveryCommand: retryRunCommand(normalized) });
707
+ }
708
+ return { ...normalized, handoff: await adapterHandoff(normalized) };
709
+ }
710
+ if (!sessionExpired(normalized) && ['prepared', 'recording'].includes(normalized.state)) {
711
+ throw new OperateError('E_OPERATE_ADVISOR_ISOLATION', `Cycle ${input.cycleId} already has an active adapter session with another binding.`, { recoveryCommand: retryRunCommand(normalized) });
712
+ }
713
+ if (normalized.state === 'finalized' &&
714
+ !(normalized.phase === 'advisors' && phase === 'chair')) {
715
+ throw new OperateError('E_OPERATE_ADVISOR_ISOLATION', `Cycle ${input.cycleId} already finalized its ${normalized.phase} adapter phase.`, { recoveryCommand: retryRunCommand(normalized) });
716
+ }
717
+ if (exact && (sessionExpired(normalized) || normalized.state === 'cancelled')) {
718
+ recoverableSession = normalized;
719
+ }
720
+ }
575
721
  const roleEvidence = roles[0] === 'chair'
576
- ? buildChairEvidence(baseEvidence, await persistedAdapterResults(store, input.cycleId), new Date().toISOString())
722
+ ? buildChairEvidence(baseEvidence, await readPersistedOperatingRoleResults(store, input.cycleId), new Date().toISOString())
577
723
  : baseEvidence;
578
724
  const readiness = await evaluateEvidenceReadiness({
579
725
  cycleId: input.cycleId,
@@ -595,53 +741,173 @@ export async function operateAdapterLifecycle(input) {
595
741
  state,
596
742
  cycleId: input.cycleId,
597
743
  });
598
- const rolePacks = Object.fromEntries(await Promise.all(readiness.roles.map(async (role) => [
599
- role.roleId,
600
- await createOperatingAdvisorPack({
601
- cycleId: input.cycleId,
602
- role,
603
- evidence: roleEvidence,
604
- context,
605
- }),
606
- ])));
744
+ const rolePacks = recoverableSession?.rolePacks ??
745
+ Object.fromEntries(await Promise.all(readiness.roles.map(async (role) => [
746
+ role.roleId,
747
+ await createOperatingAdvisorPack({
748
+ cycleId: input.cycleId,
749
+ role,
750
+ evidence: roleEvidence,
751
+ context,
752
+ }),
753
+ ])));
607
754
  const roleBriefs = Object.fromEntries(Object.entries(rolePacks).map(([role, pack]) => [role, pack.roleBrief]));
755
+ const validRecordedRoles = [];
756
+ for (const role of roles) {
757
+ const prior = await readFile(path.join(path.dirname(target), `${input.cycleId}.${role}.json`), 'utf8')
758
+ .then((raw) => JSON.parse(raw))
759
+ .catch(() => null);
760
+ if (prior &&
761
+ prior.cycleId === input.cycleId &&
762
+ prior.roleId === role &&
763
+ prior.inputDigest === rolePacks[role].inputDigest) {
764
+ try {
765
+ await assertOperatingArtifact('operating-role-result', prior);
766
+ protocol.validateOperatingRoleResultDigest(prior);
767
+ validRecordedRoles.push(role);
768
+ }
769
+ catch {
770
+ // A stale or invalid machine-local role file is never trusted as a
771
+ // recovered result; the new session will request that role again.
772
+ }
773
+ }
774
+ }
608
775
  const session = {
609
776
  implementation: 'openplanr-operate-adapter',
610
777
  cycleId: input.cycleId,
611
778
  evidenceDigest: input.evidenceDigest,
779
+ phase,
780
+ runtime,
612
781
  lease: randomBytes(32).toString('base64url'),
613
782
  idempotencyKey: input.idempotencyKey,
614
- state: 'prepared',
783
+ state: validRecordedRoles.length > 0 ? 'recording' : 'prepared',
615
784
  expiresAt: new Date(Date.now() + 15 * 60 * 1_000).toISOString(),
616
785
  roles,
617
- recordedRoles: [],
786
+ recordedRoles: validRecordedRoles.sort(),
618
787
  roleBriefs,
619
788
  rolePacks,
620
789
  roleInputDigests: Object.fromEntries(roles.map((role) => [role, rolePacks[role].inputDigest])),
621
790
  };
622
791
  await atomicPrivateWrite(target, session);
623
- return session;
792
+ return { ...session, handoff: await adapterHandoff(session) };
624
793
  }
625
794
  if (!input.lease) {
626
795
  throw new OperateError('E_OPERATE_ADVISOR_ISOLATION', 'Adapter lease is required.');
627
796
  }
628
797
  const session = await readAdapterSession(input.projectRoot, input.cycleId, input.localRoot);
629
- assertAdapterBinding(session, input.lease, input.idempotencyKey);
630
- if (input.action === 'resume')
631
- return session;
798
+ assertAdapterBinding(session, input.lease, input.idempotencyKey, input.evidenceDigest);
799
+ await assertAdapterCycleBinding({
800
+ projectRoot: input.projectRoot,
801
+ cycleId: input.cycleId,
802
+ localRoot: input.localRoot,
803
+ }, session);
804
+ if (input.action === 'resume') {
805
+ if (!['prepared', 'recording'].includes(session.state)) {
806
+ throw new OperateError('E_OPERATE_STATE_INVALID', `Adapter resume is not valid after the session is ${session.state}.`, { recoveryCommand: retryRunCommand(session) });
807
+ }
808
+ return { ...session, handoff: await adapterHandoff(session) };
809
+ }
632
810
  if (input.action === 'cancel') {
811
+ if (session.state === 'finalized') {
812
+ throw new OperateError('E_OPERATE_STATE_INVALID', 'A finalized adapter session cannot be cancelled.', { recoveryCommand: retryRunCommand(session) });
813
+ }
814
+ if (session.state === 'cancelled') {
815
+ return {
816
+ session: adapterSessionSummary(session),
817
+ handoff: await adapterHandoff(session),
818
+ };
819
+ }
633
820
  const cancelled = { ...session, state: 'cancelled' };
634
821
  await atomicPrivateWrite(target, cancelled);
635
- return cancelled;
822
+ return {
823
+ session: adapterSessionSummary(cancelled),
824
+ handoff: await adapterHandoff(cancelled),
825
+ };
636
826
  }
637
827
  if (input.action === 'record') {
828
+ if (!['prepared', 'recording'].includes(session.state)) {
829
+ throw new OperateError('E_OPERATE_STATE_INVALID', `Adapter record is not valid after the session is ${session.state}.`, { recoveryCommand: retryRunCommand(session) });
830
+ }
638
831
  if (!input.role || !input.stdin) {
639
832
  throw new OperateError('E_OPERATE_CONFIG_INVALID', 'Adapter record requires --role and JSON on stdin.');
640
833
  }
641
834
  if (!session.roles.includes(input.role)) {
642
835
  throw new OperateError('E_OPERATE_ADVISOR_ISOLATION', `Role ${input.role} was not bound by adapter prepare.`);
643
836
  }
644
- const result = JSON.parse(input.stdin);
837
+ const currentHandoff = await adapterHandoff(session);
838
+ const authorizedRecord = currentHandoff.next.find((action) => action.action === 'adapter.record');
839
+ if (!authorizedRecord || authorizedRecord.role !== input.role) {
840
+ throw new OperateError('E_OPERATE_ADVISOR_ISOLATION', `Role ${input.role} is not the current serialized adapter record action.`, {
841
+ expectedRole: authorizedRecord?.role ?? null,
842
+ recoveryCommand: currentHandoff.recovery
843
+ .find((action) => action.action === 'adapter.resume')
844
+ ?.argv.join(' '),
845
+ });
846
+ }
847
+ const outputLimit = Math.min(32_768, session.roleBriefs[input.role].output.maximumOutputBytes);
848
+ if (Buffer.byteLength(input.stdin, 'utf8') > outputLimit) {
849
+ throw new OperateError('E_OPERATE_ADVISOR_FAILED', `Native advisor response exceeds the ${outputLimit}-byte bound.`, {
850
+ ...advisorResponseContractDetails(session.roleBriefs[input.role]),
851
+ recoveryCommand: retryRunCommand(session),
852
+ });
853
+ }
854
+ let submitted;
855
+ try {
856
+ submitted = JSON.parse(input.stdin);
857
+ }
858
+ catch {
859
+ throw new OperateError('E_OPERATE_ADVISOR_FAILED', 'Native advisor response must be one valid JSON document.', {
860
+ ...advisorResponseContractDetails(session.roleBriefs[input.role]),
861
+ recoveryCommand: retryRunCommand(session),
862
+ });
863
+ }
864
+ const submittedRecord = submitted && typeof submitted === 'object' ? submitted : {};
865
+ let result;
866
+ if (submittedRecord.kind === 'operating-role-result') {
867
+ throw new OperateError('E_OPERATE_ADVISOR_FAILED', 'Native advisors must submit only the compact response contract; OpenPlanr owns canonical result metadata.', {
868
+ ...advisorResponseContractDetails(session.roleBriefs[input.role]),
869
+ recoveryCommand: retryRunCommand(session),
870
+ });
871
+ }
872
+ else {
873
+ const submittedProposals = Array.isArray(submittedRecord.proposals)
874
+ ? submittedRecord.proposals
875
+ : [];
876
+ const submittedText = [
877
+ ...submittedProposals.flatMap((proposal, index) => {
878
+ if (!proposal || typeof proposal !== 'object' || Array.isArray(proposal))
879
+ return [];
880
+ const record = proposal;
881
+ return ['title', 'problem', 'proposal'].map((field) => ({
882
+ location: `proposals.${index}.${field}`,
883
+ value: record[field],
884
+ }));
885
+ }),
886
+ ...(Array.isArray(submittedRecord.gaps) ? submittedRecord.gaps : []).map((value, index) => ({ location: `gaps.${index}`, value })),
887
+ ...(Array.isArray(submittedRecord.conflicts) ? submittedRecord.conflicts : []).map((value, index) => ({ location: `conflicts.${index}`, value })),
888
+ ];
889
+ for (const field of submittedText) {
890
+ if (typeof field.value === 'string' && containsSecret(field.value)) {
891
+ throw new OperateError('E_OPERATE_SECRET_DETECTED', `Native advisor response contains a secret at ${field.location}; nothing was persisted.`, { roleId: input.role, field: field.location });
892
+ }
893
+ }
894
+ try {
895
+ result = await createNativeOperatingRoleResult({
896
+ pack: session.rolePacks[input.role],
897
+ response: submitted,
898
+ runtime: session.runtime,
899
+ });
900
+ }
901
+ catch (error) {
902
+ if (error instanceof OperateError && error.code === 'E_OPERATE_ADVISOR_FAILED') {
903
+ throw new OperateError(error.code, error.message, {
904
+ ...error.details,
905
+ recoveryCommand: retryRunCommand(session),
906
+ });
907
+ }
908
+ throw error;
909
+ }
910
+ }
645
911
  await assertOperatingArtifact('operating-role-result', result);
646
912
  // The structured provider path runs every proposal's free text through
647
913
  // sanitizeGeneratedPlainText before it is persisted. Native runtimes hand
@@ -698,7 +964,31 @@ export async function operateAdapterLifecycle(input) {
698
964
  recordedRoles: [...new Set([...session.recordedRoles, input.role])].sort(),
699
965
  };
700
966
  await atomicPrivateWrite(target, updated);
701
- return { recorded: input.role, session: updated };
967
+ return {
968
+ recorded: input.role,
969
+ result,
970
+ session: adapterSessionSummary(updated),
971
+ handoff: await adapterHandoff(updated),
972
+ };
973
+ }
974
+ if (session.state === 'cancelled') {
975
+ throw new OperateError('E_OPERATE_STATE_INVALID', 'A cancelled adapter session cannot be finalized.', { recoveryCommand: retryRunCommand(session) });
976
+ }
977
+ if (session.state === 'finalized') {
978
+ const summaries = await Promise.all(session.recordedRoles.map((role) => readFile(path.join(path.dirname(target), `${input.cycleId}.${role}.json`), 'utf8').then((raw) => {
979
+ const result = JSON.parse(raw);
980
+ return {
981
+ roleId: result.roleId,
982
+ outcome: result.outcome,
983
+ inputDigest: result.inputDigest,
984
+ resultDigest: result.resultDigest,
985
+ };
986
+ })));
987
+ return {
988
+ session: adapterSessionSummary(session),
989
+ results: summaries,
990
+ handoff: await adapterHandoff(session),
991
+ };
702
992
  }
703
993
  const missingRoles = session.roles.filter((role) => !session.recordedRoles.includes(role));
704
994
  if (missingRoles.length > 0) {
@@ -727,7 +1017,7 @@ export async function operateAdapterLifecycle(input) {
727
1017
  localRoot: input.localRoot,
728
1018
  }, async (lock) => {
729
1019
  let head = initial.eventHead;
730
- const existing = new Map((await persistedAdapterResults(store, input.cycleId)).map((result) => [
1020
+ const existing = new Map((await readPersistedOperatingRoleResults(store, input.cycleId)).map((result) => [
731
1021
  result.roleId,
732
1022
  result,
733
1023
  ]));
@@ -760,6 +1050,15 @@ export async function operateAdapterLifecycle(input) {
760
1050
  });
761
1051
  const finalized = { ...session, state: 'finalized' };
762
1052
  await atomicPrivateWrite(target, finalized);
763
- return { session: finalized, results };
1053
+ return {
1054
+ session: adapterSessionSummary(finalized),
1055
+ results: results.map((result) => ({
1056
+ roleId: result.roleId,
1057
+ outcome: result.outcome,
1058
+ inputDigest: result.inputDigest,
1059
+ resultDigest: result.resultDigest,
1060
+ })),
1061
+ handoff: await adapterHandoff(finalized),
1062
+ };
764
1063
  }
765
1064
  //# sourceMappingURL=maintenance.js.map