@jterrats/open-orchestra 1.0.16 → 1.0.17

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 (99) hide show
  1. package/CLAUDE.md +24 -2
  2. package/README.md +32 -9
  3. package/dist/benchmark.js +65 -27
  4. package/dist/benchmark.js.map +1 -1
  5. package/dist/metrics-commands.js +3 -0
  6. package/dist/metrics-commands.js.map +1 -1
  7. package/dist/runtime-bootstrap.js +33 -8
  8. package/dist/runtime-bootstrap.js.map +1 -1
  9. package/dist/runtime-capacity-policy.d.ts +38 -0
  10. package/dist/runtime-capacity-policy.js +117 -0
  11. package/dist/runtime-capacity-policy.js.map +1 -0
  12. package/dist/runtime-capacity-scheduler-helpers.d.ts +40 -0
  13. package/dist/runtime-capacity-scheduler-helpers.js +111 -0
  14. package/dist/runtime-capacity-scheduler-helpers.js.map +1 -0
  15. package/dist/runtime-capacity-scheduler-state.d.ts +44 -0
  16. package/dist/runtime-capacity-scheduler-state.js +128 -0
  17. package/dist/runtime-capacity-scheduler-state.js.map +1 -0
  18. package/dist/runtime-capacity-scheduler.d.ts +34 -0
  19. package/dist/runtime-capacity-scheduler.js +193 -0
  20. package/dist/runtime-capacity-scheduler.js.map +1 -0
  21. package/dist/runtime-capacity-snapshot.d.ts +14 -0
  22. package/dist/runtime-capacity-snapshot.js +87 -0
  23. package/dist/runtime-capacity-snapshot.js.map +1 -0
  24. package/dist/runtime-child-prompt.d.ts +2 -1
  25. package/dist/runtime-child-prompt.js +4 -1
  26. package/dist/runtime-child-prompt.js.map +1 -1
  27. package/dist/runtime-claude-native-bridge.js +2 -1
  28. package/dist/runtime-claude-native-bridge.js.map +1 -1
  29. package/dist/runtime-commands.js +6 -0
  30. package/dist/runtime-commands.js.map +1 -1
  31. package/dist/runtime-lifecycle-watch.d.ts +5 -2
  32. package/dist/runtime-lifecycle-watch.js +19 -3
  33. package/dist/runtime-lifecycle-watch.js.map +1 -1
  34. package/dist/runtime-load-balancer.d.ts +12 -0
  35. package/dist/runtime-load-balancer.js +106 -0
  36. package/dist/runtime-load-balancer.js.map +1 -0
  37. package/dist/runtime-spawn-bridge.js +23 -0
  38. package/dist/runtime-spawn-bridge.js.map +1 -1
  39. package/dist/runtime-spawn-guidance.js +15 -0
  40. package/dist/runtime-spawn-guidance.js.map +1 -1
  41. package/dist/runtime-worker-registry.d.ts +19 -0
  42. package/dist/runtime-worker-registry.js +84 -0
  43. package/dist/runtime-worker-registry.js.map +1 -0
  44. package/dist/security/content-classifier.d.ts +2 -0
  45. package/dist/security/content-classifier.js +147 -0
  46. package/dist/security/content-classifier.js.map +1 -0
  47. package/dist/security/operation-contract-types.d.ts +28 -0
  48. package/dist/security/operation-contract-types.js +2 -0
  49. package/dist/security/operation-contract-types.js.map +1 -0
  50. package/dist/security/operation-contract.d.ts +2 -0
  51. package/dist/security/operation-contract.js +169 -0
  52. package/dist/security/operation-contract.js.map +1 -0
  53. package/dist/security/policy-engine.d.ts +2 -0
  54. package/dist/security/policy-engine.js +142 -0
  55. package/dist/security/policy-engine.js.map +1 -0
  56. package/dist/security/policy-types.d.ts +79 -0
  57. package/dist/security/policy-types.js +7 -0
  58. package/dist/security/policy-types.js.map +1 -0
  59. package/dist/security/prompt-intake.d.ts +13 -0
  60. package/dist/security/prompt-intake.js +33 -0
  61. package/dist/security/prompt-intake.js.map +1 -0
  62. package/dist/security/redaction.d.ts +3 -0
  63. package/dist/security/redaction.js +64 -0
  64. package/dist/security/redaction.js.map +1 -0
  65. package/dist/security/sink-encoding.d.ts +6 -0
  66. package/dist/security/sink-encoding.js +40 -0
  67. package/dist/security/sink-encoding.js.map +1 -0
  68. package/dist/sprint-commands.js +33 -22
  69. package/dist/sprint-commands.js.map +1 -1
  70. package/dist/transcription-failures.d.ts +2 -0
  71. package/dist/transcription-failures.js +4 -0
  72. package/dist/transcription-failures.js.map +1 -0
  73. package/dist/transcription-media-preflight.d.ts +9 -0
  74. package/dist/transcription-media-preflight.js +147 -0
  75. package/dist/transcription-media-preflight.js.map +1 -0
  76. package/dist/transcription-request.d.ts +13 -0
  77. package/dist/transcription-request.js +150 -0
  78. package/dist/transcription-request.js.map +1 -0
  79. package/dist/transcription-source-policy.d.ts +4 -0
  80. package/dist/transcription-source-policy.js +43 -0
  81. package/dist/transcription-source-policy.js.map +1 -0
  82. package/dist/transcription-types.d.ts +161 -0
  83. package/dist/transcription-types.js +2 -0
  84. package/dist/transcription-types.js.map +1 -0
  85. package/dist/types/runtime.d.ts +147 -0
  86. package/dist/types.d.ts +3 -1
  87. package/dist/types.js +1 -0
  88. package/dist/types.js.map +1 -1
  89. package/dist/workflow-phase-planner.js +5 -3
  90. package/dist/workflow-phase-planner.js.map +1 -1
  91. package/dist/workflow-phases.js +5 -0
  92. package/dist/workflow-phases.js.map +1 -1
  93. package/dist/workflow-run-commands.js +89 -10
  94. package/dist/workflow-run-commands.js.map +1 -1
  95. package/docs/audio-video-transcription-skill.md +102 -70
  96. package/docs/runtime-adapters.md +7 -0
  97. package/docs/runtime-capacity.md +57 -0
  98. package/docs/security-saas-orchestrator.md +368 -0
  99. package/package.json +1 -1
@@ -0,0 +1,161 @@
1
+ export type TranscriptionSourceKind = "workflow-file" | "vault-artifact";
2
+ export type TranscriptionMediaType = "audio" | "video";
3
+ export type TranscriptionExecutionMode = "local" | "external";
4
+ export type TranscriptionConsentStatus = "not_required" | "provided" | "missing" | "unknown";
5
+ export type TranscriptionTimestampQuality = "none" | "low" | "medium" | "high";
6
+ export type TranscriptionRetentionClass = "ephemeral" | "task-evidence" | "regulated" | "do-not-retain";
7
+ export interface TranscriptionSource {
8
+ kind: TranscriptionSourceKind;
9
+ mediaType: TranscriptionMediaType;
10
+ path?: string;
11
+ artifactId?: string;
12
+ sizeBytes?: number;
13
+ durationMs?: number;
14
+ language?: string;
15
+ checksum?: string;
16
+ }
17
+ export interface TranscriptionEngineRequest {
18
+ executionMode?: TranscriptionExecutionMode;
19
+ provider?: string;
20
+ model?: string;
21
+ }
22
+ export interface TranscriptionPolicy {
23
+ policyId: string;
24
+ executionMode: TranscriptionExecutionMode;
25
+ externalProviderAllowed: boolean;
26
+ allowedExternalProviders: string[];
27
+ requireConsent: boolean;
28
+ retentionClass: TranscriptionRetentionClass;
29
+ redactionPolicyId: string;
30
+ maxFileBytes?: number;
31
+ maxDurationMs?: number;
32
+ }
33
+ export interface TranscriptionRequest {
34
+ taskId: string;
35
+ actor: string;
36
+ source: TranscriptionSource;
37
+ engine?: TranscriptionEngineRequest;
38
+ policy?: Partial<TranscriptionPolicy>;
39
+ consentStatus?: TranscriptionConsentStatus;
40
+ retentionNotes?: string;
41
+ requestedAt?: string;
42
+ }
43
+ export interface NormalizedTranscriptionRequest extends Omit<TranscriptionRequest, "engine" | "policy"> {
44
+ engine: Required<TranscriptionEngineRequest>;
45
+ policy: TranscriptionPolicy;
46
+ requestedAt: string;
47
+ }
48
+ export type TranscriptionFailureCode = "missing_task" | "missing_actor" | "missing_source" | "invalid_source_identity" | "invalid_source_path" | "source_file_unreadable" | "unsupported_media_type" | "unsupported_media_extension" | "unsupported_media_codec" | "external_provider_denied" | "external_provider_not_allowed" | "missing_consent" | "duration_limit_exceeded" | "file_size_limit_exceeded" | "missing_local_engine" | "missing_media_probe" | "media_probe_failed";
49
+ export interface TranscriptionFailure {
50
+ code: TranscriptionFailureCode;
51
+ message: string;
52
+ field?: string;
53
+ }
54
+ export type TranscriptionValidationResult = {
55
+ ok: true;
56
+ request: NormalizedTranscriptionRequest;
57
+ failures: [];
58
+ } | {
59
+ ok: false;
60
+ failures: TranscriptionFailure[];
61
+ };
62
+ export interface TranscriptionRuntimeEnvironment {
63
+ localEngineAvailable: boolean;
64
+ mediaProbeAvailable: boolean;
65
+ }
66
+ export type TranscriptionReadinessStatus = "ready" | "degraded" | "blocked";
67
+ export interface TranscriptionReadiness {
68
+ status: TranscriptionReadinessStatus;
69
+ failures: TranscriptionFailure[];
70
+ warnings: string[];
71
+ }
72
+ export interface TranscriptionMediaToolReadiness {
73
+ ffmpegAvailable: boolean;
74
+ ffprobeAvailable: boolean;
75
+ }
76
+ export type TranscriptionMediaStreamType = "audio" | "video";
77
+ export interface TranscriptionMediaStreamProbe {
78
+ type: TranscriptionMediaStreamType;
79
+ codecName: string;
80
+ durationMs?: number;
81
+ }
82
+ export interface TranscriptionMediaProbeResult {
83
+ formatName: string;
84
+ durationMs?: number;
85
+ sizeBytes?: number;
86
+ streams: TranscriptionMediaStreamProbe[];
87
+ }
88
+ export interface TranscriptionMediaPreflight {
89
+ sourcePath: string;
90
+ resolvedPath: string;
91
+ sizeBytes: number;
92
+ durationMs?: number;
93
+ formatName?: string;
94
+ codecs: string[];
95
+ }
96
+ export type TranscriptionMediaPreflightResult = {
97
+ ok: true;
98
+ status: "ready";
99
+ preflight: TranscriptionMediaPreflight;
100
+ failures: [];
101
+ warnings: string[];
102
+ } | {
103
+ ok: false;
104
+ status: "degraded" | "blocked";
105
+ failures: TranscriptionFailure[];
106
+ warnings: string[];
107
+ };
108
+ export interface TranscriptionProvenance {
109
+ sourceKind: TranscriptionSourceKind;
110
+ sourcePath?: string;
111
+ artifactId?: string;
112
+ checksum?: string;
113
+ durationMs?: number;
114
+ language?: string;
115
+ mediaType: TranscriptionMediaType;
116
+ engineProvider: string;
117
+ engineModel: string;
118
+ executionMode: TranscriptionExecutionMode;
119
+ actor: string;
120
+ taskId: string;
121
+ generatedAt: string;
122
+ consentStatus: TranscriptionConsentStatus;
123
+ retentionClass: TranscriptionRetentionClass;
124
+ retentionNotes?: string;
125
+ }
126
+ export interface TranscriptionSegment {
127
+ id: string;
128
+ speaker?: string;
129
+ startMs?: number;
130
+ endMs?: number;
131
+ text: string;
132
+ timestampQuality: TranscriptionTimestampQuality;
133
+ }
134
+ export interface TranscriptionFindings {
135
+ decisions: string[];
136
+ risks: string[];
137
+ actionItems: string[];
138
+ acceptanceCriteriaCandidates: string[];
139
+ defects: string[];
140
+ lessonLearnedCandidates: string[];
141
+ }
142
+ export interface TranscriptionRedactionSummary {
143
+ policyId: string;
144
+ count: number;
145
+ categories: string[];
146
+ }
147
+ export interface TranscriptionOutput {
148
+ schemaVersion: 1;
149
+ status: "completed" | "failed" | "degraded";
150
+ provenance: TranscriptionProvenance;
151
+ segments: TranscriptionSegment[];
152
+ findings: TranscriptionFindings;
153
+ redactions: TranscriptionRedactionSummary;
154
+ artifacts: {
155
+ markdown?: string;
156
+ json?: string;
157
+ vtt?: string;
158
+ srt?: string;
159
+ };
160
+ failures: TranscriptionFailure[];
161
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transcription-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcription-types.js","sourceRoot":"","sources":["../src/transcription-types.ts"],"names":[],"mappings":""}
@@ -328,3 +328,150 @@ export interface RuntimeInvocationPlan {
328
328
  reason: string;
329
329
  warning: string;
330
330
  }
331
+ export interface RuntimeCapacityScope {
332
+ platformId: string;
333
+ tenantId: string;
334
+ workspaceId: string;
335
+ }
336
+ export type RuntimeWorkloadClass = "interactive" | "workflow-phase" | "runtime-native-spawn" | "provider-backed-phase" | "background-maintenance" | "evidence-processing";
337
+ export interface RuntimeCapacityUnit {
338
+ concurrencyUnits: number;
339
+ tokenBudget?: number;
340
+ cpuWeight?: number;
341
+ memoryMb?: number;
342
+ ioWeight?: number;
343
+ estimatedDurationMs?: number;
344
+ }
345
+ export type RuntimeCapacityLimitAction = "queue" | "reject";
346
+ export interface RuntimeQuotaPolicy {
347
+ maxActive: number;
348
+ maxQueued: number;
349
+ maxActivePerProvider?: number;
350
+ maxActivePerRuntime?: number;
351
+ maxBurst?: number;
352
+ rateWindowMs?: number;
353
+ limitAction: RuntimeCapacityLimitAction;
354
+ queueTtlMs?: number;
355
+ }
356
+ export type RuntimeWorkerKind = "local-parent" | "local-process" | "saas-worker" | "runtime-parent" | "provider-backed";
357
+ export type RuntimeTenantAffinity = "single-tenant" | "tenant-pool" | "platform-shared";
358
+ export type RuntimeWorkerHealth = "healthy" | "draining" | "degraded" | "unhealthy" | "offline";
359
+ export interface RuntimeWorkerIsolationMetadata {
360
+ version: string;
361
+ policyVersion: string;
362
+ sandboxProfile: string;
363
+ secretScope: string;
364
+ dataResidencyTags: string[];
365
+ }
366
+ export interface RuntimeWorkerRecord {
367
+ workerId: string;
368
+ workerKind: RuntimeWorkerKind;
369
+ tenantAffinity: RuntimeTenantAffinity;
370
+ allowedTenantIds: string[];
371
+ deniedTenantIds: string[];
372
+ regions: string[];
373
+ runtimeIds: string[];
374
+ providerIds: string[];
375
+ workloadClasses: RuntimeWorkloadClass[];
376
+ toolCapabilities: string[];
377
+ maxConcurrencyUnits: number;
378
+ availableConcurrencyUnits: number;
379
+ tokenBudgetRemaining?: number;
380
+ cpuWeight?: number;
381
+ memoryMb?: number;
382
+ health: RuntimeWorkerHealth;
383
+ lastHeartbeatAt: string;
384
+ failureCount: number;
385
+ openedUntil?: string;
386
+ leaseTtlMs: number;
387
+ isolation: RuntimeWorkerIsolationMetadata;
388
+ }
389
+ export interface RuntimeRegionPreference {
390
+ regions: string[];
391
+ strict: boolean;
392
+ }
393
+ export interface RuntimeQueuePolicy {
394
+ priority: "high" | "normal" | "low";
395
+ maxQueueMs?: number;
396
+ limitAction: RuntimeCapacityLimitAction;
397
+ }
398
+ export interface RuntimeScheduleRequest {
399
+ requestId: string;
400
+ scope?: RuntimeCapacityScope;
401
+ workloadClass: RuntimeWorkloadClass;
402
+ provider?: string;
403
+ runtime?: RuntimeExecutionId | string;
404
+ regionPreference?: RuntimeRegionPreference;
405
+ capacity: RuntimeCapacityUnit;
406
+ tenantPolicy?: RuntimeQuotaPolicy;
407
+ workspacePolicy?: RuntimeQuotaPolicy;
408
+ queuePolicy?: RuntimeQueuePolicy;
409
+ idempotencyKey?: string;
410
+ leaseTtlMs?: number;
411
+ }
412
+ export interface RuntimeLease {
413
+ leaseId: string;
414
+ workerId: string;
415
+ scope: RuntimeCapacityScope;
416
+ workloadClass: RuntimeWorkloadClass;
417
+ provider?: string;
418
+ runtime?: RuntimeExecutionId | string;
419
+ capacity: RuntimeCapacityUnit;
420
+ expiresAt: string;
421
+ }
422
+ export type RuntimeScheduleDecisionStatus = "admitted" | "queued" | "rejected" | "deferred";
423
+ export type RuntimeScheduleReasonCode = "admitted" | "queued_platform_limit" | "queued_tenant_limit" | "queued_workspace_limit" | "queued_provider_limit" | "queued_runtime_limit" | "queued_no_eligible_worker" | "rejected_invalid_request" | "rejected_missing_scope" | "rejected_platform_limit" | "rejected_tenant_limit" | "rejected_workspace_limit" | "rejected_provider_limit" | "rejected_runtime_limit" | "rejected_queue_full" | "deferred_no_eligible_worker";
424
+ export interface RuntimeQueueDecision {
425
+ queueId: string;
426
+ position: number;
427
+ reasonCode: RuntimeScheduleReasonCode;
428
+ retryAfterMs?: number;
429
+ expiresAt?: string;
430
+ }
431
+ export interface RuntimeScheduleDecision {
432
+ decisionId: string;
433
+ status: RuntimeScheduleDecisionStatus;
434
+ scope: RuntimeCapacityScope;
435
+ workloadClass: RuntimeWorkloadClass;
436
+ reasonCode: RuntimeScheduleReasonCode;
437
+ userSafeReason: string;
438
+ workerId?: string;
439
+ lease?: RuntimeLease;
440
+ queue?: RuntimeQueueDecision;
441
+ }
442
+ export interface RuntimeCapacitySnapshot {
443
+ active: number;
444
+ queued: number;
445
+ reserved: number;
446
+ rejected: number;
447
+ openCircuits: number;
448
+ activeByPlatform: Record<string, number>;
449
+ activeByTenant: Record<string, number>;
450
+ activeByWorkspace: Record<string, number>;
451
+ activeByWorkloadClass: Record<RuntimeWorkloadClass, number>;
452
+ activeByProvider: Record<string, number>;
453
+ activeByRuntime: Record<string, number>;
454
+ activeByRegion: Record<string, number>;
455
+ activeByWorkerId: Record<string, number>;
456
+ queuedByPlatform: Record<string, number>;
457
+ queuedByTenant: Record<string, number>;
458
+ queuedByWorkspace: Record<string, number>;
459
+ queuedByWorkloadClass: Record<RuntimeWorkloadClass, number>;
460
+ queuedByProvider: Record<string, number>;
461
+ queuedByRuntime: Record<string, number>;
462
+ queuedByRegion: Record<string, number>;
463
+ queuedByWorkerId: Record<string, number>;
464
+ }
465
+ export interface RuntimeCapacitySchedulerEvent {
466
+ decisionId: string;
467
+ type: RuntimeScheduleDecisionStatus | "released" | "promoted";
468
+ scope: RuntimeCapacityScope;
469
+ workloadClass: RuntimeWorkloadClass;
470
+ provider?: string;
471
+ runtime?: RuntimeExecutionId | string;
472
+ workerId?: string;
473
+ reasonCode: RuntimeScheduleReasonCode | "released";
474
+ queueLatencyMs?: number;
475
+ leaseDurationMs?: number;
476
+ timestamp: string;
477
+ }
package/dist/types.d.ts CHANGED
@@ -5,9 +5,11 @@ import type { EventEntry, LockEntry, Task, TaskStatus } from "./types/tasks.js";
5
5
  export type { ContextBudgetMetadata, ContextBudgetSection, } from "./types/context.js";
6
6
  export type { ContextIndexBuildResult, ContextIndexFileEntry, ContextIndexManifest, ContextIndexSearchMatch, ContextIndexSearchResult, ContextIndexStatus, ContextPackBudget, ContextPackItem, ContextPackResult, ContextPackSnippet, } from "./types/context-index.js";
7
7
  export type { BudgetLimit, BudgetPolicy, ConfiguredProviderSummary, GitHubConfig, GitHubNotificationConfig, ModelMessage, ModelProvider, ModelProviderCapabilities, ModelProviderError, ModelProvenanceInput, ModelProvenanceRecord, ModelRequest, ModelResponse, ModelStreamEvent, NotificationChannelResult, NotificationsConfig, PhaseExecutionMode, PhaseExecutorPhase, PhaseLlmResult, PhaseOutcome, PhaseStructuredOutput, ProviderFallbackResult, ProviderFailureDetail, ProviderBackedAgentBudget, ProviderBackedAgentCost, ProviderBackedAgentEvidencePolicy, ProviderBackedAgentFallback, ProviderBackedAgentOutcome, ProviderBackedAgentPolicy, ProviderBackedAgentProvenance, ProviderBackedAgentRequest, ProviderBackedAgentResult, ProviderBackedAgentUsage, ProviderCostSource, ProviderDataClass, ProviderProfileSmokeCheck, ProviderProfileSmokeResult, ProviderCredentialConfig, ProviderCredentialsConfig, ProviderPolicyConfig, ProviderRegistryCredentialEnv, ProviderRegistryEntry, ProviderRuntimeProfile, ProviderRuntimeProfileSummary, ProviderRouting, ProviderUsageSource, SlackNotificationConfig, TelemetryConsentState, TelemetryLevel, ToolConfig, WorkflowConfig, WorkflowProvidersConfig, } from "./types/model-config.js";
8
- export type { RuntimeAdapter, RuntimeAdapterCatalogEntry, RuntimeAdapterKind, RuntimeBrief, RuntimeDelegationAssignment, RuntimeDelegationGuardrailEvaluation, RuntimeDelegationGuardrailStatus, RuntimeDelegationGuardrails, RuntimeDelegationLimitAction, RuntimeDelegationMode, RuntimeDelegationOperationsReport, RuntimeDelegationPacket, RuntimeDelegationPolicy, RuntimeDelegationSessionStatus, RuntimeDelegationSessionSummary, RuntimeClaudeNativeBridgeResult, RuntimeClaudeNativeCallbackMetadata, RuntimeExecutionAdapter, RuntimeExecutionCapabilities, RuntimeExecutionId, RuntimeExecutionPolicy, RuntimeExecutorConfig, RuntimeInvocationPlan, RuntimeLifecycleWatcherAdapter, RuntimeLifecycleWatcherDetectionMode, RuntimeLifecycleWatcherSupportLevel, PendingRuntimeParentAction, RuntimeParentAction, RuntimeParentActionEligibility, RuntimeParentActionEligibilityChecked, RuntimeParentActionEligibilityStatus, RuntimeParentActionKind, RuntimeParentActionLifecycleCommands, RuntimeParentActionPayload, RuntimeParentActionSafetyState, RuntimeParentActionSkipReason, RuntimeParentActionSkipReasonCode, RuntimeSelection, RuntimeSpawnCapability, RuntimeSpawnCapabilityMode, RuntimeSpawnRequest, RuntimeSpawnRequestStatus, RuntimeSubagentCapabilities, } from "./types/runtime.js";
8
+ export type { RuntimeAdapter, RuntimeAdapterCatalogEntry, RuntimeAdapterKind, RuntimeBrief, RuntimeCapacityLimitAction, RuntimeCapacitySchedulerEvent, RuntimeCapacityScope, RuntimeCapacitySnapshot, RuntimeCapacityUnit, RuntimeDelegationAssignment, RuntimeDelegationGuardrailEvaluation, RuntimeDelegationGuardrailStatus, RuntimeDelegationGuardrails, RuntimeDelegationLimitAction, RuntimeDelegationMode, RuntimeDelegationOperationsReport, RuntimeDelegationPacket, RuntimeDelegationPolicy, RuntimeDelegationSessionStatus, RuntimeDelegationSessionSummary, RuntimeClaudeNativeBridgeResult, RuntimeClaudeNativeCallbackMetadata, RuntimeExecutionAdapter, RuntimeExecutionCapabilities, RuntimeExecutionId, RuntimeExecutionPolicy, RuntimeExecutorConfig, RuntimeInvocationPlan, RuntimeLease, RuntimeLifecycleWatcherAdapter, RuntimeLifecycleWatcherDetectionMode, RuntimeLifecycleWatcherSupportLevel, PendingRuntimeParentAction, RuntimeParentAction, RuntimeParentActionEligibility, RuntimeParentActionEligibilityChecked, RuntimeParentActionEligibilityStatus, RuntimeParentActionKind, RuntimeParentActionLifecycleCommands, RuntimeParentActionPayload, RuntimeParentActionSafetyState, RuntimeParentActionSkipReason, RuntimeParentActionSkipReasonCode, RuntimeQueueDecision, RuntimeQueuePolicy, RuntimeQuotaPolicy, RuntimeRegionPreference, RuntimeScheduleDecision, RuntimeScheduleDecisionStatus, RuntimeScheduleReasonCode, RuntimeScheduleRequest, RuntimeSelection, RuntimeSpawnCapability, RuntimeSpawnCapabilityMode, RuntimeSpawnRequest, RuntimeSpawnRequestStatus, RuntimeSubagentCapabilities, RuntimeTenantAffinity, RuntimeWorkerHealth, RuntimeWorkerIsolationMetadata, RuntimeWorkerKind, RuntimeWorkerRecord, RuntimeWorkloadClass, } from "./types/runtime.js";
9
9
  export type { AgentLesson, AgentLessonInput, CollaborationFlow, CollaborationFlowRecommendation, CollaborationFlowStep, MemoryHookPoint, MemoryLessonSnippet, MemoryPacket, MemoryPromptSnippet, MemorySectionReport, RuntimeSkillPlanRequest, Skill, SkillLoadBudget, SkillPlan, SkillPlanItem, SkillRenderTarget, PhasePlaybook, SkillValidationReport, RenderedWorkflowTemplate, WorkflowTemplate, WorkflowTemplateSelection, } from "./types/skills.js";
10
10
  export { SIZING_LABELS, type BenchmarkQualitySignals, type BenchmarkResult, type BenchmarkSummary, type BurndownPoint, type BurndownSeries, type CalibrationReport, type CalibrationRoleReport, type EffortBreakdown, type EstimateCalibration, type EstimateConfidence, type EstimateInput, type EstimateRecord, type SizingLabel, type SprintRecord, type SprintVelocity, type SprintVelocityReport, type TaskEstimateBreakdown, type VelocityReport, type VelocityWeek, } from "./types/metrics.js";
11
+ export type { NormalizedTranscriptionRequest, TranscriptionConsentStatus, TranscriptionEngineRequest, TranscriptionExecutionMode, TranscriptionFailure, TranscriptionFailureCode, TranscriptionFindings, TranscriptionMediaType, TranscriptionOutput, TranscriptionPolicy, TranscriptionProvenance, TranscriptionReadiness, TranscriptionReadinessStatus, TranscriptionRedactionSummary, TranscriptionRequest, TranscriptionRetentionClass, TranscriptionRuntimeEnvironment, TranscriptionSegment, TranscriptionSource, TranscriptionSourceKind, TranscriptionTimestampQuality, TranscriptionValidationResult, } from "./transcription-types.js";
12
+ export { defaultTranscriptionPolicy, evaluateTranscriptionReadiness, normalizeTranscriptionRequest, summarizeTranscriptionRedactions, validateTranscriptionRequest, } from "./transcription-request.js";
11
13
  export type { AddTaskInput, ArchitectureApproval, ArtifactResult, ClaimLockInput, DecisionInput, DecisionRecord, EventEntry, EventInput, EvidenceInput, EvidenceType, ExternalTaskReferences, HandoffInput, LockEntry, MechanicalOverride, PlaywrightEvidenceInput, QaGateMetadata, ReviewInput, ReviewResult, RiskAcceptance, RiskGateMetadata, RiskImpactArea, SetupAgentsTaskReference, Severity, Task, TaskStatus, TaskWorkflowMetadata, UpdateTaskInput, } from "./types/tasks.js";
12
14
  export type { AutonomousGateMode, AutonomousPhase, AutonomousPhaseStatus, AutonomousRun, AutonomousRunResult, BenchmarkPhaseDuration, ClarificationAnswerInput, ClarificationInput, ClarificationRecord, ClarificationStatus, ClarificationTarget, PhaseProviderProgress, WorkflowPhaseExecutionMode, WorkflowPhaseExecutorProvenance, WorkflowGateApprovalInput, WorkflowGateApprovalResult, WorkflowGateDecisionInput, WorkflowGateDecisionRecord, WorkflowGateDecisionResult, WorkflowRunMode, } from "./types/workflow-run.js";
13
15
  export type WorkspaceClassificationKind = "project" | "advisory" | "unsafe" | "unknown";
package/dist/types.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export { SIZING_LABELS, } from "./types/metrics.js";
2
+ export { defaultTranscriptionPolicy, evaluateTranscriptionReadiness, normalizeTranscriptionRequest, summarizeTranscriptionRedactions, validateTranscriptionRequest, } from "./transcription-request.js";
2
3
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA6JA,OAAO,EACL,aAAa,GAoBd,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAiLA,OAAO,EACL,aAAa,GAoBd,MAAM,oBAAoB,CAAC;AA2B5B,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,6BAA6B,EAC7B,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC"}
@@ -150,9 +150,11 @@ function applyRequiredRoles(sequence, requiredRoles) {
150
150
  continue;
151
151
  const insertAfter = phase.phase === "docs_review"
152
152
  ? "qa"
153
- : phase.phase === "ux_design"
154
- ? "po"
155
- : "developer";
153
+ : phase.phase === "security"
154
+ ? "architect"
155
+ : phase.phase === "ux_design"
156
+ ? "po"
157
+ : "developer";
156
158
  next = applyRecommendations(next, [
157
159
  {
158
160
  phase: phase.phase,
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-phase-planner.js","sourceRoot":"","sources":["../src/workflow-phase-planner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-phase-planner.js","sourceRoot":"","sources":["../src/workflow-phase-planner.ts"],"names":[],"mappings":"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"}
@@ -56,6 +56,11 @@ export const OPTIONAL_WORKFLOW_PHASES = [
56
56
  role: "reviewer_critic",
57
57
  summary: "Architecture challenge for over-engineered, convention-breaking, or under-specified design",
58
58
  },
59
+ {
60
+ phase: "security",
61
+ role: "security",
62
+ summary: "Security, privacy, tenant isolation, abuse-case, and data protection review",
63
+ },
59
64
  ];
60
65
  export const WORKFLOW_PHASES = [
61
66
  ...AUTONOMOUS_PHASE_SEQUENCE,
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-phases.js","sourceRoot":"","sources":["../src/workflow-phases.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-phases.js","sourceRoot":"","sources":["../src/workflow-phases.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { appendEvent, readEvents } from "./workspace.js";
2
2
  import { requireArg } from "./args.js";
3
+ import { readEstimate } from "./benchmark.js";
3
4
  import { numberOption, parseCsv, removeUndefined, stringOption, targetRootOption, } from "./command-utils.js";
4
5
  import { uniqueStrings } from "./collection-utils.js";
5
6
  import { AUTONOMOUS_PHASE_SEQUENCE, PHASE_GATES, autonomousRunsPath, cancelRun, checkArchitectSizing, closePhase, createAutonomousRun, initPhase, listActiveAutonomousRuns, listAutonomousRuns, markRunDone, markRunFailed, persistRun, readAutonomousRun, resumePhaseFromClarification, resumePhaseIndex, suspendPhaseForClarification, } from "./autonomous-workflow.js";
@@ -47,7 +48,8 @@ export async function runWorkflowRun(options, io, cwd = process.cwd()) {
47
48
  }
48
49
  const config = await getWorkflowConfig(cwd);
49
50
  const phaseTimeoutMinutes = config.workflow?.phaseTimeoutMinutes ?? 0;
50
- const phaseExecutionMode = resolvePhaseExecutionMode(requestedPhaseExecutionMode, config.workflow?.phaseExecutionMode);
51
+ const configuredPhaseExecutionMode = config.workflow?.phaseExecutionMode;
52
+ const phaseExecutionMode = await resolvePhaseExecutionMode(cwd, taskId, requestedPhaseExecutionMode, configuredPhaseExecutionMode);
51
53
  if (!GATE_MODES.includes(gates)) {
52
54
  throw new Error(`--gates must be one of: ${GATE_MODES.join(", ")}`);
53
55
  }
@@ -420,12 +422,42 @@ function defaultPhaseSequenceForTask(task, config, definitions) {
420
422
  const phaseIds = roles
421
423
  .map((role) => workflowPhaseForRole(role))
422
424
  .filter((phase) => Boolean(phase));
423
- const phaseSet = new Set(phaseIds);
424
- const sequence = definitions.filter((phase) => phaseSet.has(phase.phase));
425
+ const sequence = orderPhaseIds(phaseIds)
426
+ .map((phase) => definitions.find((definition) => definition.phase === phase))
427
+ .filter((phase) => Boolean(phase));
425
428
  return sequence.length > 0
426
429
  ? sequence
427
430
  : defaultPhaseSequenceForConfig(config, definitions);
428
431
  }
432
+ function orderPhaseIds(ids) {
433
+ const order = [
434
+ "pm",
435
+ "po",
436
+ "ux_design",
437
+ "po_validation",
438
+ "architect",
439
+ "architecture_challenge",
440
+ "security",
441
+ "developer",
442
+ "qa",
443
+ "docs_review",
444
+ "ux_review",
445
+ "release",
446
+ ];
447
+ const uniqueIds = uniqueStrings(ids);
448
+ return uniqueIds.sort((left, right) => {
449
+ const leftIndex = order.indexOf(left);
450
+ const rightIndex = order.indexOf(right);
451
+ if (leftIndex === -1 && rightIndex === -1) {
452
+ return left.localeCompare(right);
453
+ }
454
+ if (leftIndex === -1)
455
+ return 1;
456
+ if (rightIndex === -1)
457
+ return -1;
458
+ return leftIndex - rightIndex;
459
+ });
460
+ }
429
461
  function hasDefaultDeliveryRoles(roles) {
430
462
  const roleSet = new Set(roles);
431
463
  return AUTONOMOUS_PHASE_SEQUENCE.every((phase) => roleSet.has(phase.role));
@@ -467,13 +499,23 @@ function validateWorkflowPhaseSequence(sequence) {
467
499
  throw new Error("workflow phase sequence must place developer before qa");
468
500
  }
469
501
  }
470
- function resolvePhaseExecutionMode(requested, configured) {
471
- const mode = requested ?? configured ?? "auto";
502
+ async function resolvePhaseExecutionMode(root, taskId, requested, configured) {
503
+ const mode = requested ??
504
+ configured ??
505
+ (await phaseExecutionModeFromEstimate(root, taskId));
472
506
  if (!WORKFLOW_PHASE_EXECUTION_MODES.includes(mode)) {
473
507
  throw new Error(`--phase-execution must be one of: ${WORKFLOW_PHASE_EXECUTION_MODES.join(", ")}`);
474
508
  }
475
509
  return mode;
476
510
  }
511
+ async function phaseExecutionModeFromEstimate(root, taskId) {
512
+ const estimate = await readEstimate(root, taskId);
513
+ if (!estimate)
514
+ return "auto";
515
+ return estimate.sizingLabel === "xs" || estimate.sizingLabel === "s"
516
+ ? "single-agent"
517
+ : "subagents";
518
+ }
477
519
  async function assertStrictSubagentPreflight({ root, taskId, phaseExecutionMode, phase, }) {
478
520
  if (phaseExecutionMode !== "subagents" || !phase) {
479
521
  return;
@@ -1024,6 +1066,7 @@ async function latestTerminalRuntimeLifecycle(root, sessionId) {
1024
1066
  async function blockReleaseForUnresolvedReviews(root, run, phase = "release") {
1025
1067
  const blocker = await latestUnresolvedReleaseBlocker(root, run.taskId);
1026
1068
  if (!blocker) {
1069
+ await clearSupersededReleaseReviewBlock(root, run.taskId);
1027
1070
  return { blocked: false, run };
1028
1071
  }
1029
1072
  const now = new Date().toISOString();
@@ -1064,13 +1107,18 @@ async function blockReleaseForUnresolvedReviews(root, run, phase = "release") {
1064
1107
  }, root).catch(() => undefined);
1065
1108
  return { blocked: true, run: updated, reason };
1066
1109
  }
1110
+ const RELEASE_BLOCKER_ACTORS = ["qa", "release_manager"];
1067
1111
  async function latestUnresolvedReleaseBlocker(root, taskId) {
1068
1112
  const reviews = (await readEvents(root))
1069
- .filter((event) => event.taskId === taskId && event.type === "REVIEW_RECORDED")
1070
- .sort((left, right) => right.timestamp.localeCompare(left.timestamp));
1071
- const blocker = reviews.find((event) => (event.actor === "qa" || event.actor === "release_manager") &&
1072
- (event.metadata.result === "block" ||
1073
- event.metadata.result === "changes"));
1113
+ .map((event, index) => ({ event, index }))
1114
+ .filter(({ event }) => event.taskId === taskId && event.type === "REVIEW_RECORDED")
1115
+ .sort((left, right) => {
1116
+ const timestampOrder = right.event.timestamp.localeCompare(left.event.timestamp);
1117
+ return timestampOrder !== 0 ? timestampOrder : right.index - left.index;
1118
+ })
1119
+ .map(({ event }) => event);
1120
+ const latestReleaseReviews = latestReviewsByReleaseBlockerActor(reviews);
1121
+ const blocker = latestReleaseReviews.find((event) => isReleaseBlockingReview(event));
1074
1122
  if (!blocker) {
1075
1123
  return undefined;
1076
1124
  }
@@ -1087,6 +1135,37 @@ async function latestUnresolvedReleaseBlocker(root, taskId) {
1087
1135
  findings: String(blocker.metadata.findings ?? blocker.summary),
1088
1136
  };
1089
1137
  }
1138
+ function latestReviewsByReleaseBlockerActor(reviewsNewestFirst) {
1139
+ const latestByActor = new Map();
1140
+ for (const review of reviewsNewestFirst) {
1141
+ if (!isReleaseBlockerActor(review.actor))
1142
+ continue;
1143
+ if (!latestByActor.has(review.actor)) {
1144
+ latestByActor.set(review.actor, review);
1145
+ }
1146
+ }
1147
+ return [...latestByActor.values()].sort((left, right) => right.timestamp.localeCompare(left.timestamp));
1148
+ }
1149
+ function isReleaseBlockingReview(event) {
1150
+ return (isReleaseBlockerActor(event.actor) &&
1151
+ (event.metadata.result === "block" || event.metadata.result === "changes"));
1152
+ }
1153
+ function isReleaseBlockerActor(actor) {
1154
+ return RELEASE_BLOCKER_ACTORS.includes(actor);
1155
+ }
1156
+ async function clearSupersededReleaseReviewBlock(root, taskId) {
1157
+ const task = (await listTasks(root)).find((candidate) => candidate.id === taskId);
1158
+ if (task?.status !== "blocked" ||
1159
+ !task.blockedReason ||
1160
+ !/^(qa|release_manager) requested (block|changes):/.test(task.blockedReason)) {
1161
+ return;
1162
+ }
1163
+ await updateTask({
1164
+ id: taskId,
1165
+ status: "in_progress",
1166
+ blockedReason: "",
1167
+ }, root).catch(() => undefined);
1168
+ }
1090
1169
  function hasLaterPhase(sequence, currentIndex, phaseId) {
1091
1170
  return sequence
1092
1171
  .slice(currentIndex + 1)