openplanr 1.13.2 → 1.14.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 (159) hide show
  1. package/README.md +46 -4
  2. package/dist/cli/commands/artifact.d.ts.map +1 -1
  3. package/dist/cli/commands/artifact.js +17 -6
  4. package/dist/cli/commands/artifact.js.map +1 -1
  5. package/dist/cli/commands/operate.d.ts +3 -0
  6. package/dist/cli/commands/operate.d.ts.map +1 -0
  7. package/dist/cli/commands/operate.js +568 -0
  8. package/dist/cli/commands/operate.js.map +1 -0
  9. package/dist/cli/index.js +42 -2
  10. package/dist/cli/index.js.map +1 -1
  11. package/dist/services/ai-service.d.ts +9 -2
  12. package/dist/services/ai-service.d.ts.map +1 -1
  13. package/dist/services/ai-service.js +14 -6
  14. package/dist/services/ai-service.js.map +1 -1
  15. package/dist/services/artifact-pipeline-service.d.ts +1 -0
  16. package/dist/services/artifact-pipeline-service.d.ts.map +1 -1
  17. package/dist/services/artifact-pipeline-service.js.map +1 -1
  18. package/dist/services/delta-apply-service.js +1 -1
  19. package/dist/services/delta-apply-service.js.map +1 -1
  20. package/dist/services/operate/advisors.d.ts +219 -0
  21. package/dist/services/operate/advisors.d.ts.map +1 -0
  22. package/dist/services/operate/advisors.js +745 -0
  23. package/dist/services/operate/advisors.js.map +1 -0
  24. package/dist/services/operate/artifact-route-generation.d.ts +111 -0
  25. package/dist/services/operate/artifact-route-generation.d.ts.map +1 -0
  26. package/dist/services/operate/artifact-route-generation.js +459 -0
  27. package/dist/services/operate/artifact-route-generation.js.map +1 -0
  28. package/dist/services/operate/artifacts.d.ts +26 -0
  29. package/dist/services/operate/artifacts.d.ts.map +1 -0
  30. package/dist/services/operate/artifacts.js +92 -0
  31. package/dist/services/operate/artifacts.js.map +1 -0
  32. package/dist/services/operate/canonical.d.ts +18 -0
  33. package/dist/services/operate/canonical.d.ts.map +1 -0
  34. package/dist/services/operate/canonical.js +157 -0
  35. package/dist/services/operate/canonical.js.map +1 -0
  36. package/dist/services/operate/config.d.ts +56 -0
  37. package/dist/services/operate/config.d.ts.map +1 -0
  38. package/dist/services/operate/config.js +644 -0
  39. package/dist/services/operate/config.js.map +1 -0
  40. package/dist/services/operate/consolidation.d.ts +18 -0
  41. package/dist/services/operate/consolidation.d.ts.map +1 -0
  42. package/dist/services/operate/consolidation.js +539 -0
  43. package/dist/services/operate/consolidation.js.map +1 -0
  44. package/dist/services/operate/doctor.d.ts +12 -0
  45. package/dist/services/operate/doctor.d.ts.map +1 -0
  46. package/dist/services/operate/doctor.js +307 -0
  47. package/dist/services/operate/doctor.js.map +1 -0
  48. package/dist/services/operate/engine.d.ts +53 -0
  49. package/dist/services/operate/engine.d.ts.map +1 -0
  50. package/dist/services/operate/engine.js +1097 -0
  51. package/dist/services/operate/engine.js.map +1 -0
  52. package/dist/services/operate/event-store.d.ts +57 -0
  53. package/dist/services/operate/event-store.d.ts.map +1 -0
  54. package/dist/services/operate/event-store.js +232 -0
  55. package/dist/services/operate/event-store.js.map +1 -0
  56. package/dist/services/operate/evidence-cache.d.ts +17 -0
  57. package/dist/services/operate/evidence-cache.d.ts.map +1 -0
  58. package/dist/services/operate/evidence-cache.js +96 -0
  59. package/dist/services/operate/evidence-cache.js.map +1 -0
  60. package/dist/services/operate/evidence-import.d.ts +40 -0
  61. package/dist/services/operate/evidence-import.d.ts.map +1 -0
  62. package/dist/services/operate/evidence-import.js +340 -0
  63. package/dist/services/operate/evidence-import.js.map +1 -0
  64. package/dist/services/operate/evidence-readiness.d.ts +8 -0
  65. package/dist/services/operate/evidence-readiness.d.ts.map +1 -0
  66. package/dist/services/operate/evidence-readiness.js +78 -0
  67. package/dist/services/operate/evidence-readiness.js.map +1 -0
  68. package/dist/services/operate/evidence.d.ts +71 -0
  69. package/dist/services/operate/evidence.d.ts.map +1 -0
  70. package/dist/services/operate/evidence.js +1022 -0
  71. package/dist/services/operate/evidence.js.map +1 -0
  72. package/dist/services/operate/ids.d.ts +7 -0
  73. package/dist/services/operate/ids.d.ts.map +1 -0
  74. package/dist/services/operate/ids.js +23 -0
  75. package/dist/services/operate/ids.js.map +1 -0
  76. package/dist/services/operate/index.d.ts +14 -0
  77. package/dist/services/operate/index.d.ts.map +1 -0
  78. package/dist/services/operate/index.js +881 -0
  79. package/dist/services/operate/index.js.map +1 -0
  80. package/dist/services/operate/journal.d.ts +34 -0
  81. package/dist/services/operate/journal.d.ts.map +1 -0
  82. package/dist/services/operate/journal.js +229 -0
  83. package/dist/services/operate/journal.js.map +1 -0
  84. package/dist/services/operate/legacy-import-service.d.ts +58 -0
  85. package/dist/services/operate/legacy-import-service.d.ts.map +1 -0
  86. package/dist/services/operate/legacy-import-service.js +922 -0
  87. package/dist/services/operate/legacy-import-service.js.map +1 -0
  88. package/dist/services/operate/lifecycle.d.ts +88 -0
  89. package/dist/services/operate/lifecycle.d.ts.map +1 -0
  90. package/dist/services/operate/lifecycle.js +556 -0
  91. package/dist/services/operate/lifecycle.js.map +1 -0
  92. package/dist/services/operate/lock-service.d.ts +37 -0
  93. package/dist/services/operate/lock-service.d.ts.map +1 -0
  94. package/dist/services/operate/lock-service.js +208 -0
  95. package/dist/services/operate/lock-service.js.map +1 -0
  96. package/dist/services/operate/maintenance.d.ts +38 -0
  97. package/dist/services/operate/maintenance.d.ts.map +1 -0
  98. package/dist/services/operate/maintenance.js +699 -0
  99. package/dist/services/operate/maintenance.js.map +1 -0
  100. package/dist/services/operate/outcomes.d.ts +48 -0
  101. package/dist/services/operate/outcomes.d.ts.map +1 -0
  102. package/dist/services/operate/outcomes.js +312 -0
  103. package/dist/services/operate/outcomes.js.map +1 -0
  104. package/dist/services/operate/pipeline-handoff.d.ts +138 -0
  105. package/dist/services/operate/pipeline-handoff.d.ts.map +1 -0
  106. package/dist/services/operate/pipeline-handoff.js +175 -0
  107. package/dist/services/operate/pipeline-handoff.js.map +1 -0
  108. package/dist/services/operate/projection-persistence.d.ts +55 -0
  109. package/dist/services/operate/projection-persistence.d.ts.map +1 -0
  110. package/dist/services/operate/projection-persistence.js +393 -0
  111. package/dist/services/operate/projection-persistence.js.map +1 -0
  112. package/dist/services/operate/projection.d.ts +4 -0
  113. package/dist/services/operate/projection.d.ts.map +1 -0
  114. package/dist/services/operate/projection.js +128 -0
  115. package/dist/services/operate/projection.js.map +1 -0
  116. package/dist/services/operate/protocol.d.ts +60 -0
  117. package/dist/services/operate/protocol.d.ts.map +1 -0
  118. package/dist/services/operate/protocol.js +62 -0
  119. package/dist/services/operate/protocol.js.map +1 -0
  120. package/dist/services/operate/read-only-providers.d.ts +38 -0
  121. package/dist/services/operate/read-only-providers.d.ts.map +1 -0
  122. package/dist/services/operate/read-only-providers.js +286 -0
  123. package/dist/services/operate/read-only-providers.js.map +1 -0
  124. package/dist/services/operate/redaction.d.ts +47 -0
  125. package/dist/services/operate/redaction.d.ts.map +1 -0
  126. package/dist/services/operate/redaction.js +279 -0
  127. package/dist/services/operate/redaction.js.map +1 -0
  128. package/dist/services/operate/reducer.d.ts +10 -0
  129. package/dist/services/operate/reducer.d.ts.map +1 -0
  130. package/dist/services/operate/reducer.js +11 -0
  131. package/dist/services/operate/reducer.js.map +1 -0
  132. package/dist/services/operate/routes.d.ts +49 -0
  133. package/dist/services/operate/routes.d.ts.map +1 -0
  134. package/dist/services/operate/routes.js +996 -0
  135. package/dist/services/operate/routes.js.map +1 -0
  136. package/dist/services/operate/shipment-observer.d.ts +14 -0
  137. package/dist/services/operate/shipment-observer.d.ts.map +1 -0
  138. package/dist/services/operate/shipment-observer.js +321 -0
  139. package/dist/services/operate/shipment-observer.js.map +1 -0
  140. package/dist/services/operate/stalled-item-service.d.ts +18 -0
  141. package/dist/services/operate/stalled-item-service.d.ts.map +1 -0
  142. package/dist/services/operate/stalled-item-service.js +121 -0
  143. package/dist/services/operate/stalled-item-service.js.map +1 -0
  144. package/dist/services/operate/subprocess-env.d.ts +4 -0
  145. package/dist/services/operate/subprocess-env.d.ts.map +1 -0
  146. package/dist/services/operate/subprocess-env.js +45 -0
  147. package/dist/services/operate/subprocess-env.js.map +1 -0
  148. package/dist/services/operate/types.d.ts +729 -0
  149. package/dist/services/operate/types.d.ts.map +1 -0
  150. package/dist/services/operate/types.js +13 -0
  151. package/dist/services/operate/types.js.map +1 -0
  152. package/dist/services/operate/workspace.d.ts +59 -0
  153. package/dist/services/operate/workspace.d.ts.map +1 -0
  154. package/dist/services/operate/workspace.js +316 -0
  155. package/dist/services/operate/workspace.js.map +1 -0
  156. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  157. package/dist/services/runtime-manager-service.js +71 -2
  158. package/dist/services/runtime-manager-service.js.map +1 -1
  159. package/package.json +10 -4
@@ -0,0 +1,729 @@
1
+ export declare const OPERATE_PROTOCOL_VERSION: "1.2.0";
2
+ export declare const OPERATE_SCHEMA_VERSION: "1.0.0";
3
+ export interface ProtocolArtifact<K extends string> {
4
+ kind: K;
5
+ schemaVersion: typeof OPERATE_SCHEMA_VERSION;
6
+ protocolVersion: typeof OPERATE_PROTOCOL_VERSION;
7
+ }
8
+ export type OperatingSensitivity = 'public' | 'internal' | 'confidential' | 'restricted';
9
+ export type OperatingPlanningEngine = 'openplanr' | 'pipeline-po';
10
+ export type OperatingRoleId = 'strategy-finance' | 'technology-risk' | 'product-activation' | 'growth-market' | 'operations-customer' | 'chair';
11
+ export type OperatingLane = 'DEV' | 'OWNER' | 'AGENT';
12
+ export type OperatingCycleStatus = 'preparing' | 'collecting' | 'advising' | 'consolidating' | 'reviewable' | 'closed' | 'blocked' | 'failed' | 'cancelled';
13
+ export type OperatingCriticalRiskCategory = 'security' | 'privacy' | 'payment-integrity' | 'legal' | 'tenant-isolation' | 'destructive-data';
14
+ export interface OperatingAdvisorBrief {
15
+ kind: 'operating-advisor-brief';
16
+ schemaVersion: '1.0.0';
17
+ protocolVersion: typeof OPERATE_PROTOCOL_VERSION;
18
+ role: {
19
+ id: OperatingRoleId;
20
+ displayLabel: string;
21
+ mandate: string;
22
+ capabilityTier: 'analysis-standard' | 'analysis-high';
23
+ };
24
+ authority: {
25
+ readOnly: true;
26
+ writeBoundary: 'none';
27
+ sharedBoundaries: string[];
28
+ forbiddenRecommendationCategories: string[];
29
+ };
30
+ evidence: {
31
+ permittedKinds: string[];
32
+ requiredFields: string[];
33
+ sensitivityCeiling: OperatingSensitivity;
34
+ minimum: Record<string, unknown>;
35
+ };
36
+ output: {
37
+ schema: string;
38
+ allowedProposalTypes: Array<'finding' | 'decision' | 'data-gap' | 'merge' | 'sequence'>;
39
+ maximumProposals: number;
40
+ maximumOutputBytes: number;
41
+ requiredBehavior: string[];
42
+ scoring: Record<string, unknown> | null;
43
+ };
44
+ budgets: Record<string, unknown>;
45
+ failureBehavior: string;
46
+ briefDigest: `sha256:${string}`;
47
+ }
48
+ export type OperateErrorCode = 'E_OPERATE_INTERNAL' | 'E_OPERATE_PROJECT_REQUIRED' | 'E_OPERATE_NOT_INITIALIZED' | 'E_OPERATE_CONFIG_INVALID' | 'E_OPERATE_CHARTER_INCOMPLETE' | 'E_OPERATE_PATH_ESCAPE' | 'E_OPERATE_STATE_INVALID' | 'E_OPERATE_HEAD_DIVERGED' | 'E_OPERATE_CHECKPOINT_INVALID' | 'E_OPERATE_CYCLE_ACTIVE' | 'E_OPERATE_CYCLE_INPUT_CONFLICT' | 'E_OPERATE_CYCLE_NOT_DISPOSED' | 'E_OPERATE_STALE_LOCK_UNSAFE' | 'E_OPERATE_TRANSACTION_INVALID' | 'E_OPERATE_EVIDENCE_REJECTED' | 'E_OPERATE_EVIDENCE_BUDGET' | 'E_OPERATE_SECRET_DETECTED' | 'E_OPERATE_PROVIDER_READ_ONLY' | 'E_OPERATE_ADVISOR_ISOLATION' | 'E_OPERATE_ADVISOR_FAILED' | 'E_OPERATE_EVIDENCE_NOT_READY' | 'E_OPERATE_CAP_EXCEEDED' | 'E_OPERATE_CRITICAL_CAP' | 'E_OPERATE_AUTHORITY_REQUIRED' | 'E_OPERATE_ROUTE_CONFIRMATION_REQUIRED' | 'E_OPERATE_ROUTE_DRIFT' | 'E_OPERATE_PLANNER_CONFLICT' | 'E_OPERATE_OUTCOME_NOT_READY' | 'E_OPERATE_PROJECTION_DRIFT' | 'E_OPERATE_ARTIFACT_REJECTED' | 'E_OPERATE_MIGRATION_CONFLICT' | 'E_OPERATE_SECURITY_REPAIR_REQUIRED' | 'E_OPERATE_INPUT_TOO_LARGE' | 'E_OPERATE_ACTION_UNKNOWN' | 'E_PIPELINE_NOT_INSTALLED';
49
+ export declare class OperateError extends Error {
50
+ readonly code: OperateErrorCode;
51
+ readonly details?: Readonly<Record<string, unknown>>;
52
+ constructor(code: OperateErrorCode, message: string, details?: Readonly<Record<string, unknown>>);
53
+ }
54
+ /** Exact persisted Protocol v1.2 operating configuration. */
55
+ export interface OperatingConfig extends ProtocolArtifact<'operating-config'> {
56
+ profile: 'saas' | 'product' | 'engineering' | 'custom';
57
+ decisionOwner: string;
58
+ cadence: 'manual' | 'weekly' | 'monthly';
59
+ planningEngine: OperatingPlanningEngine;
60
+ enabledRoles: OperatingRoleId[];
61
+ enabledProviders: string[];
62
+ caps: {
63
+ surfacedFindings: number;
64
+ newSpecs: number;
65
+ openDecisions: number;
66
+ agentArtifacts: number;
67
+ };
68
+ budgets: {
69
+ maxFiles: number;
70
+ maxItems: number;
71
+ maxBytes: number;
72
+ maxDurationMs: number;
73
+ };
74
+ }
75
+ export interface OperatingProfile {
76
+ id: OperatingConfig['profile'];
77
+ title: string;
78
+ description: string;
79
+ enabledRoles: OperatingRoleId[];
80
+ enabledProviders: string[];
81
+ caps: OperatingConfig['caps'];
82
+ budgets: OperatingConfig['budgets'];
83
+ }
84
+ export interface OperatingCharter {
85
+ purpose: string;
86
+ stage: string;
87
+ businessModel: string;
88
+ idealCustomer: string;
89
+ goals: string[];
90
+ constraints: string[];
91
+ successMetrics: string[];
92
+ guardrails: string[];
93
+ knownUnknowns: string[];
94
+ }
95
+ export interface OperatingLocalPreferences {
96
+ runtime: 'auto' | 'claude' | 'codex' | 'cursor';
97
+ timezone: string;
98
+ sensitivityCeiling: OperatingSensitivity;
99
+ evidenceTtlMs: number;
100
+ enabledSources: string[];
101
+ /** Machine-local, workspace-contained JSON/CSV evidence paths. */
102
+ importPaths?: string[];
103
+ }
104
+ export interface OperatingWorkspaceComponent {
105
+ componentId: string;
106
+ canonicalRemote: string;
107
+ configuredBranch: string;
108
+ pinnedRevision: string;
109
+ dirtyFingerprint: `sha256:${string}` | null;
110
+ readOnly: boolean;
111
+ }
112
+ export interface OperatingWorkspaceManifest extends ProtocolArtifact<'operating-workspace-manifest'> {
113
+ capturedAt: string;
114
+ workspaceDigest: `sha256:${string}`;
115
+ controlRepository: OperatingWorkspaceComponent & {
116
+ readOnly: false;
117
+ };
118
+ components: Array<OperatingWorkspaceComponent & {
119
+ readOnly: true;
120
+ }>;
121
+ }
122
+ /** Machine-local mapping. Absolute paths never enter commit-safe artifacts. */
123
+ export interface OperatingWorkspaceRoots {
124
+ controlComponentId: string;
125
+ roots: Record<string, string>;
126
+ }
127
+ export interface OperatingContentReference {
128
+ algorithm: 'sha256';
129
+ digest: `sha256:${string}`;
130
+ mediaType: 'application/json';
131
+ size: number;
132
+ sensitivity: OperatingSensitivity;
133
+ }
134
+ export interface OperatingRecordEnvelope extends ProtocolArtifact<'operating-record'> {
135
+ digest: `sha256:${string}`;
136
+ recordType: 'evidence-metadata' | 'advisor-result' | 'finding' | 'decision' | 'data-gap' | 'route' | 'spec-link' | 'outcome' | 'artifact-manifest' | 'migration' | 'recovery';
137
+ createdAt: string;
138
+ correlationId: string;
139
+ contentDigest: `sha256:${string}`;
140
+ content: Record<string, unknown>;
141
+ }
142
+ export type OperatingEventType = `cycle.${OperatingCycleStatus}` | 'evidence.collected' | 'advisory.recorded' | 'finding.proposed' | 'finding.accepted' | 'finding.queued' | 'finding.in-progress' | 'finding.done' | 'finding.rejected' | 'finding.superseded' | 'decision.open' | 'decision.answered' | 'decision.closed' | 'decision.default-due' | 'decision.superseded' | 'gap.open' | 'gap.answered' | 'gap.verified' | 'gap.closed' | 'gap.superseded' | 'route.proposed' | 'route.accepted' | 'route.prepared' | 'route.applied' | 'route.failed' | 'route.rolled_back' | 'spec.linked' | 'artifact.created' | 'ship.observed' | 'outcome.registered' | 'outcome.observed' | 'outcome.evaluated' | 'learning.recorded' | 'projection.rebuilt' | 'migration.legacy-imported' | 'recovery.performed' | 'security.discontinuity';
143
+ export interface OperatingEvent extends ProtocolArtifact<'operating-event'> {
144
+ eventId: string;
145
+ sequence: number;
146
+ timestamp: string;
147
+ cycleId: string;
148
+ type: OperatingEventType;
149
+ entityId: string;
150
+ previousEventHash: `sha256:${string}` | null;
151
+ eventHash: `sha256:${string}`;
152
+ actor: {
153
+ kind: 'human' | 'engine' | 'runtime' | 'migration';
154
+ id: string;
155
+ };
156
+ causationId: string | null;
157
+ correlationId: string;
158
+ evidenceRefs: string[];
159
+ payload: Record<string, unknown>;
160
+ }
161
+ export interface OperatingEventHead {
162
+ sequence: number;
163
+ hash: `sha256:${string}` | null;
164
+ }
165
+ export interface OperatingCheckpoint extends ProtocolArtifact<'operating-checkpoint'> {
166
+ createdAt: string;
167
+ eventHead: OperatingEventHead;
168
+ stateHash: `sha256:${string}`;
169
+ recordDigests: `sha256:${string}`[];
170
+ integrity: {
171
+ status: 'hash';
172
+ } | {
173
+ status: 'signed';
174
+ signature: {
175
+ algorithm: 'ed25519' | 'hmac-sha256';
176
+ keyId: string;
177
+ value: string;
178
+ };
179
+ };
180
+ state: OperatingState;
181
+ }
182
+ export interface OperatingCycleManifest extends ProtocolArtifact<'operating-cycle-manifest'> {
183
+ id: string;
184
+ state: OperatingCycleStatus;
185
+ health?: 'normal' | 'quiet' | 'partial' | 'blocked';
186
+ depth: 'standard' | 'deep' | 'review-only';
187
+ focus: Array<'strategy' | 'product' | 'growth' | 'operations' | 'technology' | 'all'>;
188
+ inputDigest: `sha256:${string}`;
189
+ enabledRoles: string[];
190
+ enabledProviders: string[];
191
+ createdAt: string;
192
+ updatedAt: string;
193
+ completedAt?: string | null;
194
+ producer: {
195
+ product: string;
196
+ version: string;
197
+ runtime: string;
198
+ };
199
+ warnings?: string[];
200
+ }
201
+ export interface OperatingEvidenceItem {
202
+ id: string;
203
+ source: string;
204
+ location: string;
205
+ digest: `sha256:${string}`;
206
+ collectedAt: string;
207
+ observedFrom: string | null;
208
+ observedTo: string | null;
209
+ freshness: 'fresh' | 'stale' | 'unknown';
210
+ sensitivity: OperatingSensitivity;
211
+ claimTypes: string[];
212
+ repository?: {
213
+ componentId: string;
214
+ canonicalRemote: string;
215
+ revision: string;
216
+ configuredBranch: string;
217
+ dirtyFingerprint: `sha256:${string}` | null;
218
+ };
219
+ metric?: {
220
+ identity: string;
221
+ query: string;
222
+ observedFrom: string;
223
+ observedTo: string;
224
+ };
225
+ summary?: string;
226
+ }
227
+ export interface CollectedEvidenceItem {
228
+ id: string;
229
+ source: string;
230
+ location: string;
231
+ content: string;
232
+ collectedAt: string;
233
+ observedFrom?: string | null;
234
+ observedTo?: string | null;
235
+ freshness: OperatingEvidenceItem['freshness'];
236
+ sensitivity: OperatingSensitivity;
237
+ claimTypes: string[];
238
+ quality: 'verified' | 'observed' | 'self-reported' | 'unknown';
239
+ coverage: 'complete' | 'partial' | 'unknown';
240
+ verifiedRiskCategories?: OperatingCriticalRiskCategory[];
241
+ metric?: {
242
+ identity: string;
243
+ query: string;
244
+ observedFrom: string;
245
+ observedTo: string;
246
+ };
247
+ repository?: RepositoryEvidenceProvenance;
248
+ }
249
+ export interface OperatingEvidence extends ProtocolArtifact<'operating-evidence'> {
250
+ cycleId: string;
251
+ fingerprint: `sha256:${string}`;
252
+ collectedAt: string;
253
+ truncated: boolean;
254
+ items: OperatingEvidenceItem[];
255
+ delta?: {
256
+ mode: 'baseline' | 'standard' | 'deep';
257
+ baselineFingerprint: `sha256:${string}` | null;
258
+ changedEvidenceRefs: string[];
259
+ requiredEvidenceRefs: string[];
260
+ selectedEvidenceRefs: string[];
261
+ removedEvidenceRefs: string[];
262
+ };
263
+ sources: Array<{
264
+ id: string;
265
+ fingerprint: `sha256:${string}`;
266
+ status: 'collected' | 'unchanged' | 'partial' | 'unavailable' | 'failed';
267
+ itemCount: number;
268
+ byteCount: number;
269
+ }>;
270
+ warnings: string[];
271
+ }
272
+ export interface RepositoryEvidenceProvenance {
273
+ componentId: string;
274
+ canonicalRemote: string;
275
+ revision: string;
276
+ configuredBranch: string;
277
+ dirtyFingerprint: `sha256:${string}` | null;
278
+ relativePath: string;
279
+ digest: `sha256:${string}`;
280
+ freshness: OperatingEvidenceItem['freshness'];
281
+ sensitivity: OperatingSensitivity;
282
+ collectedAt: string;
283
+ }
284
+ export interface EvidenceBudget {
285
+ maxFiles: number;
286
+ maxItems: number;
287
+ maxBytes: number;
288
+ maxItemBytes: number;
289
+ maxDurationMs: number;
290
+ }
291
+ export interface EvidenceRequirement {
292
+ source: string;
293
+ claimTypes: string[];
294
+ minimumItems: number;
295
+ maxAgeHours: number;
296
+ observationWindow: 'current-state' | 'current-cycle' | '7d' | '30d' | '90d' | '365d';
297
+ sensitivityCeiling: OperatingSensitivity;
298
+ }
299
+ export interface OperatingEvidenceReadiness extends ProtocolArtifact<'operating-evidence-readiness'> {
300
+ cycleId: string;
301
+ inputDigest: `sha256:${string}`;
302
+ evaluatedAt: string;
303
+ roles: Array<{
304
+ roleId: OperatingRoleId;
305
+ readiness: 'ready' | 'not_evaluated';
306
+ requirements: Array<EvidenceRequirement & {
307
+ observedItems: number;
308
+ oldestAgeHours: number | null;
309
+ satisfied: boolean;
310
+ }>;
311
+ missingEvidence: string[];
312
+ evidenceRefs: string[];
313
+ modelCallAllowed: boolean;
314
+ gapId: string | null;
315
+ }>;
316
+ }
317
+ export interface OperatingRoleResult extends ProtocolArtifact<'operating-role-result'> {
318
+ cycleId: string;
319
+ roleId: OperatingRoleId;
320
+ inputDigest: `sha256:${string}`;
321
+ resultDigest: `sha256:${string}`;
322
+ outcome: 'proposals' | 'quiet' | 'failed';
323
+ proposals: Array<{
324
+ proposalKey: string;
325
+ type: 'finding' | 'decision' | 'data-gap' | 'merge' | 'sequence';
326
+ title: string;
327
+ problem: string;
328
+ proposal: string;
329
+ impact: number;
330
+ confidence: number;
331
+ ease: number;
332
+ severity: 'low' | 'medium' | 'high' | 'critical';
333
+ evidenceRefs: string[];
334
+ dependsOnProposalKeys?: string[];
335
+ conflictsWithProposalKeys?: string[];
336
+ /** Ordered Chair sequence used to resolve declared conflicts. */
337
+ sequenceProposalKeys?: string[];
338
+ }>;
339
+ gaps: string[];
340
+ conflicts: string[];
341
+ producer: {
342
+ product: string;
343
+ version: string;
344
+ runtime: string;
345
+ capability: 'analysis-standard' | 'analysis-high';
346
+ };
347
+ }
348
+ export interface OperatingProviderManifest extends ProtocolArtifact<'operating-provider-manifest'> {
349
+ id: string;
350
+ providerId: string;
351
+ providerVersion: string;
352
+ mode: 'structured' | 'native-isolated';
353
+ readOnly: true;
354
+ endpoint: {
355
+ kind: 'local' | 'remote' | 'import';
356
+ display: string;
357
+ authentication: 'none' | 'machine-local';
358
+ redacted: true;
359
+ };
360
+ permittedDataClasses: Array<'source-code' | 'planning-artifacts' | 'git-metadata' | 'issue-metadata' | 'project-metadata' | 'outcome-observations' | 'imported-documents'>;
361
+ retention: {
362
+ providerStoresRequestContent: boolean;
363
+ maxProviderRetentionDays: number;
364
+ localEvidenceRetention: 'cycle' | 'project' | 'user-managed';
365
+ };
366
+ capabilities: {
367
+ incremental: boolean;
368
+ deep: boolean;
369
+ toolIsolation: 'enforced' | 'not-applicable';
370
+ };
371
+ limits: {
372
+ maxItems: number;
373
+ maxBytes: number;
374
+ maxDurationMs: number;
375
+ maxRequests: number | null;
376
+ maxTokens: number | null;
377
+ maxCostUsd: number | null;
378
+ };
379
+ consent: {
380
+ policyVersion: string;
381
+ status: 'first-use' | 'renewed';
382
+ acceptedAt: string;
383
+ renewedAt: string | null;
384
+ nextReviewAt: string | null;
385
+ renewalTriggers: Array<'policy-change' | 'scope-expansion' | 'credential-renewal' | 'scheduled-review'>;
386
+ };
387
+ policyDigest: `sha256:${string}`;
388
+ configurationDigest: `sha256:${string}`;
389
+ capturedAt: string;
390
+ }
391
+ export interface OperatingFinding extends ProtocolArtifact<'operating-finding'> {
392
+ id: string;
393
+ cycleId: string;
394
+ title: string;
395
+ category: string;
396
+ problem: string;
397
+ cost: string;
398
+ proposal: string;
399
+ /** Stable semantic identity used for cross-cycle suppression and lineage. */
400
+ fingerprint?: `sha256:${string}`;
401
+ impact: number;
402
+ confidence: number;
403
+ /** Evidence-derived maximum; human amendments may lower but never exceed it. */
404
+ confidenceCeiling?: number;
405
+ ease: number;
406
+ score: number;
407
+ severity: 'low' | 'medium' | 'high' | 'critical';
408
+ /** Highest sensitivity among all cited evidence. */
409
+ sensitivity: OperatingSensitivity;
410
+ criticalOverride: boolean;
411
+ lane: OperatingLane;
412
+ owner: string;
413
+ evidenceRefs: string[];
414
+ status: 'proposed' | 'accepted' | 'queued' | 'in-progress' | 'done' | 'rejected' | 'superseded';
415
+ dependsOn: string[];
416
+ parked?: boolean;
417
+ stalledCycles?: number;
418
+ supersededBy?: string;
419
+ rejectionReason?: string;
420
+ scoreAmendment?: {
421
+ prior: {
422
+ impact: number;
423
+ confidence: number;
424
+ ease: number;
425
+ };
426
+ next: {
427
+ impact: number;
428
+ confidence: number;
429
+ ease: number;
430
+ };
431
+ reason: string;
432
+ actor: {
433
+ kind: 'human';
434
+ id: string;
435
+ };
436
+ timestamp: string;
437
+ };
438
+ createdAt: string;
439
+ updatedAt: string;
440
+ }
441
+ export interface OperatingDecision extends ProtocolArtifact<'operating-decision'> {
442
+ id: string;
443
+ cycleId: string;
444
+ question: string;
445
+ options: Array<{
446
+ id: string;
447
+ label: string;
448
+ }>;
449
+ recommendation: string;
450
+ consequences: string;
451
+ reversibility: 'reversible' | 'costly' | 'one-way';
452
+ deadline: string;
453
+ proposedDefault: string | null;
454
+ unblocks: string[];
455
+ status: 'open' | 'answered' | 'closed' | 'default-due' | 'superseded';
456
+ owner: string;
457
+ selectedOption?: string;
458
+ note?: string;
459
+ evidenceRefs: string[];
460
+ createdAt: string;
461
+ updatedAt: string;
462
+ }
463
+ export interface OperatingDataGap extends ProtocolArtifact<'operating-data-gap'> {
464
+ id: string;
465
+ cycleId: string;
466
+ question: string;
467
+ reason: string;
468
+ unblocks: string[];
469
+ affectedRoles?: string[];
470
+ status: 'open' | 'answered' | 'verified' | 'closed' | 'superseded';
471
+ owner: string;
472
+ answer?: string;
473
+ evidenceRefs: string[];
474
+ createdAt: string;
475
+ updatedAt: string;
476
+ }
477
+ export interface OperatingRouteAction {
478
+ id: string;
479
+ findingId: string;
480
+ lane: OperatingLane;
481
+ owner: string;
482
+ kind: 'create-spec' | 'create-instrumentation-spec' | 'create-decision' | 'create-cycle-artifact';
483
+ dependsOn: string[];
484
+ evidenceRefs: string[];
485
+ reversible: true;
486
+ requiresConfirmation: true;
487
+ targetPath?: string;
488
+ }
489
+ export interface OperatingRoutePlan extends ProtocolArtifact<'operating-route-plan'> {
490
+ id: string;
491
+ cycleId: string;
492
+ inputDigest: `sha256:${string}`;
493
+ routeDigest: `sha256:${string}`;
494
+ previewDigest: `sha256:${string}`;
495
+ workspaceDigest: `sha256:${string}`;
496
+ evidenceDigest: `sha256:${string}`;
497
+ providerDigest: `sha256:${string}`;
498
+ destinationDigest: `sha256:${string}`;
499
+ eventHead: OperatingEventHead;
500
+ state: 'proposed' | 'accepted' | 'prepared' | 'applied' | 'failed' | 'rolled_back';
501
+ actions: OperatingRouteAction[];
502
+ createdAt: string;
503
+ appliedAt?: string | null;
504
+ rolledBackAt?: string | null;
505
+ failure?: string;
506
+ }
507
+ export interface OperatingOutcome extends ProtocolArtifact<'operating-outcome'> {
508
+ id: string;
509
+ sourceCycle: string;
510
+ sourceFinding: string;
511
+ specId: string;
512
+ outcomeKind: 'metric' | 'guardrail' | 'operational';
513
+ metric: string;
514
+ unit: string;
515
+ queryIdentity: string;
516
+ direction: 'increase' | 'decrease' | 'maintain' | 'range';
517
+ operator: 'gt' | 'gte' | 'lt' | 'lte' | 'eq' | 'between';
518
+ aggregation: 'sum' | 'average' | 'median' | 'minimum' | 'maximum' | 'count' | 'rate' | 'percentile' | 'latest';
519
+ baselineWindow: {
520
+ from: string;
521
+ to: string;
522
+ };
523
+ targetWindow: {
524
+ from: string;
525
+ to: string;
526
+ };
527
+ threshold: {
528
+ value: number;
529
+ upperValue?: number;
530
+ };
531
+ minimumCoverage: number;
532
+ minimumSample: number;
533
+ stalePolicy: 'inconclusive' | 'create-gap';
534
+ missingPolicy: 'inconclusive' | 'create-gap';
535
+ guardrailPrecedence: 'block-on-breach' | 'outcome-first';
536
+ guardrails: Array<{
537
+ metric: string;
538
+ unit: string;
539
+ operator: 'gt' | 'gte' | 'lt' | 'lte' | 'eq' | 'between';
540
+ threshold: number;
541
+ upperThreshold?: number;
542
+ }>;
543
+ source: string;
544
+ observationWindow: string;
545
+ verifyAfter: string;
546
+ rollout: string;
547
+ rollback: string;
548
+ status: 'pending' | 'observing' | 'positive' | 'neutral' | 'negative' | 'inconclusive';
549
+ evidenceRefs: string[];
550
+ createdAt: string;
551
+ updatedAt: string;
552
+ }
553
+ export interface OperatingOutcomeObservation extends ProtocolArtifact<'operating-outcome-observation'> {
554
+ id: string;
555
+ outcomeId: string;
556
+ observedAt: string;
557
+ window: {
558
+ from: string;
559
+ to: string;
560
+ };
561
+ value: number | null;
562
+ unit: string;
563
+ queryIdentity: string;
564
+ aggregation: OperatingOutcome['aggregation'];
565
+ sampleSize: number;
566
+ coverage: number;
567
+ freshness: 'fresh' | 'stale' | 'unknown';
568
+ guardrails: Array<{
569
+ metric: string;
570
+ breached: boolean;
571
+ observedValue?: number | null;
572
+ }>;
573
+ evaluation: 'positive' | 'neutral' | 'negative' | 'inconclusive';
574
+ evidenceRefs: string[];
575
+ }
576
+ export interface OperatingState extends ProtocolArtifact<'operating-state'> {
577
+ generatedAt: string;
578
+ eventHead: OperatingEventHead;
579
+ cycles: Array<Record<string, unknown> & {
580
+ id: string;
581
+ state: OperatingCycleStatus;
582
+ }>;
583
+ findings: Array<Record<string, unknown> & {
584
+ id: string;
585
+ status: OperatingFinding['status'];
586
+ }>;
587
+ decisions: Array<Record<string, unknown> & {
588
+ id: string;
589
+ status: OperatingDecision['status'];
590
+ }>;
591
+ dataGaps: Array<Record<string, unknown> & {
592
+ id: string;
593
+ status: OperatingDataGap['status'];
594
+ }>;
595
+ routes: Array<Record<string, unknown> & {
596
+ id: string;
597
+ state: OperatingRoutePlan['state'];
598
+ }>;
599
+ specLinks: Array<Record<string, unknown> & {
600
+ specId: string;
601
+ }>;
602
+ outcomes: Array<Record<string, unknown> & {
603
+ id: string;
604
+ status: OperatingOutcome['status'];
605
+ }>;
606
+ learnings: Array<Record<string, unknown> & {
607
+ id: string;
608
+ }>;
609
+ evidenceSources: Array<Record<string, unknown> & {
610
+ id: string;
611
+ }>;
612
+ summary: {
613
+ currentCycleId: string | null;
614
+ currentConstraint: string | null;
615
+ quiet: boolean;
616
+ evidenceFreshness: 'fresh' | 'stale' | 'mixed' | 'unknown';
617
+ surfacedFindings: number;
618
+ parkedFindings: number;
619
+ openDecisions: number;
620
+ openGaps: number;
621
+ stalledItems: number;
622
+ };
623
+ }
624
+ export interface OperatingTransactionJournal extends ProtocolArtifact<'operating-transaction-journal'> {
625
+ transactionId: string;
626
+ state: 'prepared' | 'staged-fsynced' | 'promoted' | 'committed' | 'rolled-back' | 'failed';
627
+ eventHead: OperatingEventHead;
628
+ previewDigest: `sha256:${string}`;
629
+ createdAt: string;
630
+ updatedAt: string;
631
+ writes: Array<{
632
+ path: string;
633
+ operation: 'create' | 'replace' | 'append';
634
+ beforeDigest: `sha256:${string}` | null;
635
+ afterDigest: `sha256:${string}`;
636
+ mode: `0${string}`;
637
+ }>;
638
+ failureCode?: string;
639
+ }
640
+ /** Machine-local lease; deliberately not a Protocol artifact. */
641
+ export interface OperatingLockRecord {
642
+ projectKey: string;
643
+ nonce: string;
644
+ pid: number;
645
+ host: string;
646
+ processStartedAt: string;
647
+ createdAt: string;
648
+ heartbeatAt: string;
649
+ leaseDurationMs: number;
650
+ leaseExpiresAt: string;
651
+ expectedEventHead: OperatingEventHead;
652
+ }
653
+ export interface OperatingArtifactSession extends ProtocolArtifact<'operating-artifact-session'> {
654
+ id: string;
655
+ cycleId: string;
656
+ state: 'prepared' | 'generating' | 'validated' | 'committed' | 'failed' | 'cancelled';
657
+ artifactType: 'markdown' | 'html' | 'json' | 'csv';
658
+ inputDigest: `sha256:${string}`;
659
+ outputDigest?: `sha256:${string}`;
660
+ destination: string;
661
+ evidenceRefs: string[];
662
+ producer: {
663
+ product: string;
664
+ version: string;
665
+ runtime: string;
666
+ capability: 'analysis-standard' | 'analysis-high';
667
+ };
668
+ createdAt: string;
669
+ updatedAt: string;
670
+ failureCode?: string;
671
+ }
672
+ export interface OperatingMigrationRecord extends ProtocolArtifact<'operating-migration-record'> {
673
+ id: string;
674
+ sourceKind: 'prototype-board' | 'protocol-upgrade';
675
+ sourceDigest: `sha256:${string}`;
676
+ state: 'previewed' | 'applied' | 'rolled-back' | 'conflict' | 'failed';
677
+ previewDigest: `sha256:${string}`;
678
+ backupManifestDigest: `sha256:${string}`;
679
+ mappings: Array<{
680
+ sourceId: string;
681
+ targetId: string;
682
+ eventId: string;
683
+ }>;
684
+ conflicts: string[];
685
+ createdAt: string;
686
+ updatedAt: string;
687
+ failureCode?: string;
688
+ }
689
+ export interface OperatingRecoveryRecord extends ProtocolArtifact<'operating-recovery-record'> {
690
+ id: string;
691
+ transactionId: string | null;
692
+ action: 'rebuild-projection' | 'recover-journal' | 'rollback' | 'forward-fix' | 'restore-backup';
693
+ reason: string;
694
+ previewDigest: `sha256:${string}`;
695
+ fromHead: OperatingEventHead;
696
+ toHead: OperatingEventHead;
697
+ outcome: 'recovered' | 'blocked' | 'failed';
698
+ confirmedBy: string;
699
+ createdAt: string;
700
+ }
701
+ export interface OperateActionRequest {
702
+ action: string;
703
+ projectRoot: string;
704
+ arguments?: Record<string, unknown>;
705
+ options: Record<string, unknown>;
706
+ interactive: boolean;
707
+ stdin?: string;
708
+ }
709
+ export interface OperateActionResult {
710
+ schemaVersion: '1.0.0';
711
+ protocolVersion: '1.2.0';
712
+ ok: boolean;
713
+ action: string;
714
+ code?: string;
715
+ message?: string;
716
+ cycleId?: string | null;
717
+ state?: string | null;
718
+ paths: Record<string, string>;
719
+ counts: Record<string, number>;
720
+ warnings: string[];
721
+ nextActions: string[];
722
+ data?: unknown;
723
+ preview?: unknown;
724
+ next?: string[];
725
+ /** Compatibility fields consumed by the current human renderer. */
726
+ lines?: string[];
727
+ exitCode?: number;
728
+ }
729
+ //# sourceMappingURL=types.d.ts.map