@jterrats/open-orchestra 1.0.15 → 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 (191) hide show
  1. package/AGENTS.md +3 -3
  2. package/CLAUDE.md +26 -4
  3. package/README.md +32 -9
  4. package/dist/benchmark.js +65 -27
  5. package/dist/benchmark.js.map +1 -1
  6. package/dist/command-manifest.js +6 -1
  7. package/dist/command-manifest.js.map +1 -1
  8. package/dist/command-routes.js +8 -1
  9. package/dist/command-routes.js.map +1 -1
  10. package/dist/commands.d.ts +2 -1
  11. package/dist/commands.js +2 -1
  12. package/dist/commands.js.map +1 -1
  13. package/dist/context-vault-commands.d.ts +5 -0
  14. package/dist/context-vault-commands.js +79 -0
  15. package/dist/context-vault-commands.js.map +1 -0
  16. package/dist/context-vault-file-metadata.d.ts +3 -0
  17. package/dist/context-vault-file-metadata.js +25 -0
  18. package/dist/context-vault-file-metadata.js.map +1 -0
  19. package/dist/context-vault-model.d.ts +79 -0
  20. package/dist/context-vault-model.js +2 -0
  21. package/dist/context-vault-model.js.map +1 -0
  22. package/dist/context-vault-redaction.d.ts +5 -0
  23. package/dist/context-vault-redaction.js +22 -0
  24. package/dist/context-vault-redaction.js.map +1 -0
  25. package/dist/context-vault-renderer.d.ts +3 -0
  26. package/dist/context-vault-renderer.js +30 -0
  27. package/dist/context-vault-renderer.js.map +1 -0
  28. package/dist/context-vault-service.d.ts +17 -0
  29. package/dist/context-vault-service.js +183 -0
  30. package/dist/context-vault-service.js.map +1 -0
  31. package/dist/delivery-commands.d.ts +1 -0
  32. package/dist/delivery-commands.js +19 -1
  33. package/dist/delivery-commands.js.map +1 -1
  34. package/dist/diagram-schema.d.ts +2 -0
  35. package/dist/diagram-schema.js +148 -0
  36. package/dist/diagram-schema.js.map +1 -0
  37. package/dist/diagrams/index.d.ts +2 -0
  38. package/dist/diagrams/index.js +2 -0
  39. package/dist/diagrams/index.js.map +1 -1
  40. package/dist/diagrams/pipeline.js +7 -5
  41. package/dist/diagrams/pipeline.js.map +1 -1
  42. package/dist/evidence-compaction-model.d.ts +62 -0
  43. package/dist/evidence-compaction-model.js +2 -0
  44. package/dist/evidence-compaction-model.js.map +1 -0
  45. package/dist/evidence-compaction-renderer.d.ts +2 -0
  46. package/dist/evidence-compaction-renderer.js +35 -0
  47. package/dist/evidence-compaction-renderer.js.map +1 -0
  48. package/dist/evidence-compaction-service.d.ts +11 -0
  49. package/dist/evidence-compaction-service.js +94 -0
  50. package/dist/evidence-compaction-service.js.map +1 -0
  51. package/dist/evidence-compaction-summary.d.ts +4 -0
  52. package/dist/evidence-compaction-summary.js +160 -0
  53. package/dist/evidence-compaction-summary.js.map +1 -0
  54. package/dist/knowledge-base.js +7 -1
  55. package/dist/knowledge-base.js.map +1 -1
  56. package/dist/metrics-commands.js +3 -0
  57. package/dist/metrics-commands.js.map +1 -1
  58. package/dist/planning-commands.js +23 -1
  59. package/dist/planning-commands.js.map +1 -1
  60. package/dist/quality-contracts.js +12 -6
  61. package/dist/quality-contracts.js.map +1 -1
  62. package/dist/report-index.d.ts +3 -0
  63. package/dist/report-index.js +3 -0
  64. package/dist/report-index.js.map +1 -0
  65. package/dist/report-model.d.ts +22 -0
  66. package/dist/report-model.js +2 -0
  67. package/dist/report-model.js.map +1 -0
  68. package/dist/report-render-markdown.d.ts +1 -0
  69. package/dist/report-render-markdown.js +40 -0
  70. package/dist/report-render-markdown.js.map +1 -0
  71. package/dist/report-schema.d.ts +2 -0
  72. package/dist/report-schema.js +109 -0
  73. package/dist/report-schema.js.map +1 -0
  74. package/dist/rule-catalog.d.ts +33 -0
  75. package/dist/rule-catalog.js +215 -0
  76. package/dist/rule-catalog.js.map +1 -0
  77. package/dist/runtime-bootstrap.js +33 -8
  78. package/dist/runtime-bootstrap.js.map +1 -1
  79. package/dist/runtime-capacity-policy.d.ts +38 -0
  80. package/dist/runtime-capacity-policy.js +117 -0
  81. package/dist/runtime-capacity-policy.js.map +1 -0
  82. package/dist/runtime-capacity-scheduler-helpers.d.ts +40 -0
  83. package/dist/runtime-capacity-scheduler-helpers.js +111 -0
  84. package/dist/runtime-capacity-scheduler-helpers.js.map +1 -0
  85. package/dist/runtime-capacity-scheduler-state.d.ts +44 -0
  86. package/dist/runtime-capacity-scheduler-state.js +128 -0
  87. package/dist/runtime-capacity-scheduler-state.js.map +1 -0
  88. package/dist/runtime-capacity-scheduler.d.ts +34 -0
  89. package/dist/runtime-capacity-scheduler.js +193 -0
  90. package/dist/runtime-capacity-scheduler.js.map +1 -0
  91. package/dist/runtime-capacity-snapshot.d.ts +14 -0
  92. package/dist/runtime-capacity-snapshot.js +87 -0
  93. package/dist/runtime-capacity-snapshot.js.map +1 -0
  94. package/dist/runtime-child-prompt.d.ts +2 -1
  95. package/dist/runtime-child-prompt.js +4 -1
  96. package/dist/runtime-child-prompt.js.map +1 -1
  97. package/dist/runtime-claude-native-bridge.js +2 -1
  98. package/dist/runtime-claude-native-bridge.js.map +1 -1
  99. package/dist/runtime-commands.js +6 -0
  100. package/dist/runtime-commands.js.map +1 -1
  101. package/dist/runtime-context-manifest.js +3 -24
  102. package/dist/runtime-context-manifest.js.map +1 -1
  103. package/dist/runtime-lifecycle-watch.d.ts +5 -2
  104. package/dist/runtime-lifecycle-watch.js +19 -3
  105. package/dist/runtime-lifecycle-watch.js.map +1 -1
  106. package/dist/runtime-load-balancer.d.ts +12 -0
  107. package/dist/runtime-load-balancer.js +106 -0
  108. package/dist/runtime-load-balancer.js.map +1 -0
  109. package/dist/runtime-spawn-bridge.js +23 -0
  110. package/dist/runtime-spawn-bridge.js.map +1 -1
  111. package/dist/runtime-spawn-guidance.js +15 -0
  112. package/dist/runtime-spawn-guidance.js.map +1 -1
  113. package/dist/runtime-worker-registry.d.ts +19 -0
  114. package/dist/runtime-worker-registry.js +84 -0
  115. package/dist/runtime-worker-registry.js.map +1 -0
  116. package/dist/security/content-classifier.d.ts +2 -0
  117. package/dist/security/content-classifier.js +147 -0
  118. package/dist/security/content-classifier.js.map +1 -0
  119. package/dist/security/operation-contract-types.d.ts +28 -0
  120. package/dist/security/operation-contract-types.js +2 -0
  121. package/dist/security/operation-contract-types.js.map +1 -0
  122. package/dist/security/operation-contract.d.ts +2 -0
  123. package/dist/security/operation-contract.js +169 -0
  124. package/dist/security/operation-contract.js.map +1 -0
  125. package/dist/security/policy-engine.d.ts +2 -0
  126. package/dist/security/policy-engine.js +142 -0
  127. package/dist/security/policy-engine.js.map +1 -0
  128. package/dist/security/policy-types.d.ts +79 -0
  129. package/dist/security/policy-types.js +7 -0
  130. package/dist/security/policy-types.js.map +1 -0
  131. package/dist/security/prompt-intake.d.ts +13 -0
  132. package/dist/security/prompt-intake.js +33 -0
  133. package/dist/security/prompt-intake.js.map +1 -0
  134. package/dist/security/redaction.d.ts +3 -0
  135. package/dist/security/redaction.js +64 -0
  136. package/dist/security/redaction.js.map +1 -0
  137. package/dist/security/sink-encoding.d.ts +6 -0
  138. package/dist/security/sink-encoding.js +40 -0
  139. package/dist/security/sink-encoding.js.map +1 -0
  140. package/dist/sprint-commands.js +33 -22
  141. package/dist/sprint-commands.js.map +1 -1
  142. package/dist/structured-output-validation.d.ts +9 -0
  143. package/dist/structured-output-validation.js +20 -0
  144. package/dist/structured-output-validation.js.map +1 -0
  145. package/dist/transcription-failures.d.ts +2 -0
  146. package/dist/transcription-failures.js +4 -0
  147. package/dist/transcription-failures.js.map +1 -0
  148. package/dist/transcription-media-preflight.d.ts +9 -0
  149. package/dist/transcription-media-preflight.js +147 -0
  150. package/dist/transcription-media-preflight.js.map +1 -0
  151. package/dist/transcription-request.d.ts +13 -0
  152. package/dist/transcription-request.js +150 -0
  153. package/dist/transcription-request.js.map +1 -0
  154. package/dist/transcription-source-policy.d.ts +4 -0
  155. package/dist/transcription-source-policy.js +43 -0
  156. package/dist/transcription-source-policy.js.map +1 -0
  157. package/dist/transcription-types.d.ts +161 -0
  158. package/dist/transcription-types.js +2 -0
  159. package/dist/transcription-types.js.map +1 -0
  160. package/dist/types/runtime.d.ts +147 -0
  161. package/dist/types.d.ts +3 -1
  162. package/dist/types.js +1 -0
  163. package/dist/types.js.map +1 -1
  164. package/dist/web-api-read-routes.js +2 -0
  165. package/dist/web-api-read-routes.js.map +1 -1
  166. package/dist/web-console/assets/index-BJuVTqfQ.js +11 -0
  167. package/dist/web-console/index.html +1 -1
  168. package/dist/workflow-evidence-service.js +16 -0
  169. package/dist/workflow-evidence-service.js.map +1 -1
  170. package/dist/workflow-phase-planner.js +5 -3
  171. package/dist/workflow-phase-planner.js.map +1 -1
  172. package/dist/workflow-phases.js +5 -0
  173. package/dist/workflow-phases.js.map +1 -1
  174. package/dist/workflow-run-commands.js +89 -10
  175. package/dist/workflow-run-commands.js.map +1 -1
  176. package/dist/workflow-services.d.ts +1 -0
  177. package/dist/workflow-services.js +8 -1
  178. package/dist/workflow-services.js.map +1 -1
  179. package/docs/audio-video-transcription-skill.md +102 -70
  180. package/docs/autonomous-workflow.md +3 -3
  181. package/docs/context-vault.md +34 -11
  182. package/docs/diagrams/deterministic-pipeline/README.md +35 -1
  183. package/docs/evidence-compaction.md +25 -0
  184. package/docs/rule-loading-strategy.md +37 -0
  185. package/docs/runtime-adapters.md +7 -0
  186. package/docs/runtime-capacity.md +57 -0
  187. package/docs/security-saas-orchestrator.md +368 -0
  188. package/docs/sonar-quality-gates.md +1 -1
  189. package/package.json +1 -1
  190. package/rules/development/semantic-code.md +28 -0
  191. package/dist/web-console/assets/index-Bis4CecA.js +0 -11
@@ -2,6 +2,10 @@ import { requireArg } from "./args.js";
2
2
  import { computeVelocity } from "./benchmark.js";
3
3
  import { computeSprintBurndown, renderBurndownAscii } from "./burndown.js";
4
4
  import { calibrationReport, closeSprint, startSprint, velocityTrend, } from "./sprint-metrics.js";
5
+ const SPRINT_COMMAND_HANDLERS = {
6
+ start: startSprintCommand,
7
+ close: closeSprintCommand,
8
+ };
5
9
  export async function velocityCommand(options, io) {
6
10
  const cwd = process.cwd();
7
11
  if (typeof options.sprints === "string") {
@@ -42,32 +46,39 @@ export async function velocityCommand(options, io) {
42
46
  }
43
47
  }
44
48
  export async function sprintCommand(subcommand, options, io) {
45
- const cwd = process.cwd();
46
- if (subcommand === "start") {
47
- const id = requireArg(options, "id");
48
- const taskIds = requireArg(options, "tasks")
49
- .split(",")
50
- .map((taskId) => taskId.trim())
51
- .filter(Boolean);
52
- const sprint = await startSprint(cwd, id, taskIds);
53
- if (options.json) {
54
- io.log(JSON.stringify(sprint, null, 2));
55
- return;
56
- }
57
- io.log(`Sprint started: ${sprint.id} (${sprint.taskIds.length} tasks)`);
49
+ if (isSprintSubcommand(subcommand)) {
50
+ await SPRINT_COMMAND_HANDLERS[subcommand](process.cwd(), options, io);
58
51
  return;
59
52
  }
60
- if (subcommand === "close") {
61
- const id = requireArg(options, "id");
62
- const sprint = await closeSprint(cwd, id);
63
- if (options.json) {
64
- io.log(JSON.stringify(sprint, null, 2));
65
- return;
66
- }
67
- io.log(`Sprint closed: ${sprint.id}`);
53
+ throw new Error(`unknown sprint command: ${subcommand ?? ""}`.trim());
54
+ }
55
+ function isSprintSubcommand(subcommand) {
56
+ return subcommand === "start" || subcommand === "close";
57
+ }
58
+ async function startSprintCommand(cwd, options, io) {
59
+ const id = requireArg(options, "id");
60
+ const taskIds = parseSprintTaskIds(requireArg(options, "tasks"));
61
+ const sprint = await startSprint(cwd, id, taskIds);
62
+ if (options.json) {
63
+ io.log(JSON.stringify(sprint, null, 2));
68
64
  return;
69
65
  }
70
- throw new Error(`unknown sprint command: ${subcommand ?? ""}`.trim());
66
+ io.log(`Sprint started: ${sprint.id} (${sprint.taskIds.length} tasks)`);
67
+ }
68
+ async function closeSprintCommand(cwd, options, io) {
69
+ const id = requireArg(options, "id");
70
+ const sprint = await closeSprint(cwd, id);
71
+ if (options.json) {
72
+ io.log(JSON.stringify(sprint, null, 2));
73
+ return;
74
+ }
75
+ io.log(`Sprint closed: ${sprint.id}`);
76
+ }
77
+ function parseSprintTaskIds(tasks) {
78
+ return tasks
79
+ .split(",")
80
+ .map((taskId) => taskId.trim())
81
+ .filter(Boolean);
71
82
  }
72
83
  export async function calibrationCommand(options, io) {
73
84
  const report = await calibrationReport(process.cwd());
@@ -1 +1 @@
1
- {"version":3,"file":"sprint-commands.js","sourceRoot":"","sources":["../src/sprint-commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sprint-commands.js","sourceRoot":"","sources":["../src/sprint-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface StructuredOutputValidationIssue {
2
+ path: string;
3
+ message: string;
4
+ }
5
+ export declare class StructuredOutputValidationError extends Error {
6
+ readonly issues: StructuredOutputValidationIssue[];
7
+ constructor(kind: string, issues: StructuredOutputValidationIssue[]);
8
+ }
9
+ export declare function assertNoStructuredOutputIssues(kind: string, issues: StructuredOutputValidationIssue[]): void;
@@ -0,0 +1,20 @@
1
+ export class StructuredOutputValidationError extends Error {
2
+ issues;
3
+ constructor(kind, issues) {
4
+ super(formatStructuredOutputError(kind, issues));
5
+ this.name = "StructuredOutputValidationError";
6
+ this.issues = issues;
7
+ }
8
+ }
9
+ export function assertNoStructuredOutputIssues(kind, issues) {
10
+ if (issues.length > 0) {
11
+ throw new StructuredOutputValidationError(kind, issues);
12
+ }
13
+ }
14
+ function formatStructuredOutputError(kind, issues) {
15
+ const details = issues
16
+ .map((issue) => `${issue.path}: ${issue.message}`)
17
+ .join("; ");
18
+ return `${kind} payload is invalid: ${details}`;
19
+ }
20
+ //# sourceMappingURL=structured-output-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-output-validation.js","sourceRoot":"","sources":["../src/structured-output-validation.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAC/C,MAAM,CAAoC;IAEnD,YAAY,IAAY,EAAE,MAAyC;QACjE,KAAK,CAAC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,UAAU,8BAA8B,CAC5C,IAAY,EACZ,MAAyC;IAEzC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,+BAA+B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,IAAY,EACZ,MAAyC;IAEzC,MAAM,OAAO,GAAG,MAAM;SACnB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;SACjD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,GAAG,IAAI,wBAAwB,OAAO,EAAE,CAAC;AAClD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { TranscriptionFailure } from "./transcription-types.js";
2
+ export declare function transcriptionFailure(code: TranscriptionFailure["code"], message: string, field?: string): TranscriptionFailure;
@@ -0,0 +1,4 @@
1
+ export function transcriptionFailure(code, message, field) {
2
+ return field ? { code, message, field } : { code, message };
3
+ }
4
+ //# sourceMappingURL=transcription-failures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcription-failures.js","sourceRoot":"","sources":["../src/transcription-failures.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAClC,IAAkC,EAClC,OAAe,EACf,KAAc;IAEd,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { NormalizedTranscriptionRequest, TranscriptionMediaPreflightResult, TranscriptionMediaProbeResult, TranscriptionMediaToolReadiness, TranscriptionReadiness } from "./transcription-types.js";
2
+ export interface TranscriptionMediaPreflightInput {
3
+ request: NormalizedTranscriptionRequest;
4
+ workspaceRoot: string;
5
+ tools: TranscriptionMediaToolReadiness;
6
+ probe?: TranscriptionMediaProbeResult;
7
+ }
8
+ export declare function evaluateTranscriptionMediaProbeReadiness(tools: TranscriptionMediaToolReadiness): TranscriptionReadiness;
9
+ export declare function preflightTranscriptionMedia(input: TranscriptionMediaPreflightInput): TranscriptionMediaPreflightResult;
@@ -0,0 +1,147 @@
1
+ import { realpathSync, statSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { hasSupportedTranscriptionExtension, isSafeTranscriptionSourcePath, isSupportedTranscriptionCodec, } from "./transcription-source-policy.js";
4
+ import { transcriptionFailure as failure } from "./transcription-failures.js";
5
+ const TOOL_WARNING = "Media preflight remains non-destructive until ffmpeg and ffprobe are available.";
6
+ const UNREADABLE_SOURCE_MESSAGE = "Media source must exist as a readable workflow-local file.";
7
+ export function evaluateTranscriptionMediaProbeReadiness(tools) {
8
+ const failures = mediaToolFailures(tools);
9
+ if (failures.length === 0) {
10
+ return { status: "ready", failures: [], warnings: [] };
11
+ }
12
+ return {
13
+ status: "degraded",
14
+ failures,
15
+ warnings: [TOOL_WARNING],
16
+ };
17
+ }
18
+ export function preflightTranscriptionMedia(input) {
19
+ const { request, workspaceRoot } = input;
20
+ const warnings = [];
21
+ const sourcePath = request.source.path?.trim() ?? "";
22
+ const normalizedRoot = path.resolve(workspaceRoot);
23
+ const realRoot = realpathSync(normalizedRoot);
24
+ const resolvedPath = path.resolve(normalizedRoot, sourcePath);
25
+ const failures = validateWorkflowPath(normalizedRoot, sourcePath, resolvedPath);
26
+ if (sourcePath &&
27
+ !hasSupportedTranscriptionExtension(request.source.mediaType, sourcePath)) {
28
+ failures.push(failure("unsupported_media_extension", "Source extension is not supported for the declared media type.", "source.path"));
29
+ }
30
+ const fileSizeBytes = statWorkflowFile(realRoot, resolvedPath, failures);
31
+ failures.push(...mediaToolFailures(input.tools));
32
+ if (!input.probe &&
33
+ input.tools.ffmpegAvailable &&
34
+ input.tools.ffprobeAvailable) {
35
+ failures.push(failure("media_probe_failed", "Media probe metadata is required before transcription engine invocation.", "probe"));
36
+ }
37
+ const sizeBytes = input.probe?.sizeBytes ?? fileSizeBytes;
38
+ const durationMs = input.probe?.durationMs;
39
+ failures.push(...validateProbe(request, input.probe));
40
+ failures.push(...validatePolicyLimits(request, sizeBytes, durationMs));
41
+ if (failures.length > 0) {
42
+ return {
43
+ ok: false,
44
+ status: hasOnlyToolFailures(failures) ? "degraded" : "blocked",
45
+ failures,
46
+ warnings: mediaToolFailures(input.tools).length === 0
47
+ ? warnings
48
+ : [...warnings, TOOL_WARNING],
49
+ };
50
+ }
51
+ return {
52
+ ok: true,
53
+ status: "ready",
54
+ preflight: {
55
+ sourcePath,
56
+ resolvedPath,
57
+ sizeBytes: sizeBytes ?? 0,
58
+ ...(durationMs === undefined ? {} : { durationMs }),
59
+ ...(input.probe?.formatName === undefined
60
+ ? {}
61
+ : { formatName: input.probe.formatName }),
62
+ codecs: input.probe?.streams.map((stream) => stream.codecName) ?? [],
63
+ },
64
+ failures: [],
65
+ warnings,
66
+ };
67
+ }
68
+ function validateWorkflowPath(workspaceRoot, sourcePath, resolvedPath) {
69
+ const root = path.resolve(workspaceRoot);
70
+ const failures = [];
71
+ if (!sourcePath || !isSafeTranscriptionSourcePath(sourcePath)) {
72
+ failures.push(failure("invalid_source_path", "Media preflight requires a safe workspace-relative source path.", "source.path"));
73
+ }
74
+ if (sourcePath && !isPathInsideRoot(root, resolvedPath)) {
75
+ failures.push(failure("invalid_source_path", "Media preflight source path must resolve inside the workspace.", "source.path"));
76
+ }
77
+ return failures;
78
+ }
79
+ function isPathInsideRoot(workspaceRoot, resolvedPath) {
80
+ const relativePath = path.relative(workspaceRoot, resolvedPath);
81
+ return (relativePath === "" ||
82
+ (!relativePath.startsWith("..") && !path.isAbsolute(relativePath)));
83
+ }
84
+ function statWorkflowFile(workspaceRoot, resolvedPath, failures) {
85
+ try {
86
+ const file = statSync(resolvedPath);
87
+ if (!file.isFile()) {
88
+ failures.push(unreadableFailure());
89
+ return undefined;
90
+ }
91
+ const realPath = realpathSync(resolvedPath);
92
+ if (!isPathInsideRoot(workspaceRoot, realPath)) {
93
+ failures.push(failure("invalid_source_path", "Media preflight source path must not resolve through a symlink outside the workspace.", "source.path"));
94
+ return undefined;
95
+ }
96
+ return file.size;
97
+ }
98
+ catch {
99
+ failures.push(unreadableFailure());
100
+ return undefined;
101
+ }
102
+ }
103
+ function mediaToolFailures(tools) {
104
+ const failures = [];
105
+ if (!tools.ffmpegAvailable) {
106
+ failures.push(failure("missing_media_probe", "ffmpeg is required for deterministic media preflight.", "tools.ffmpeg"));
107
+ }
108
+ if (!tools.ffprobeAvailable) {
109
+ failures.push(failure("missing_media_probe", "ffprobe is required for deterministic media preflight.", "tools.ffprobe"));
110
+ }
111
+ return failures;
112
+ }
113
+ function validateProbe(request, probe) {
114
+ if (!probe) {
115
+ return [];
116
+ }
117
+ const streams = probe.streams.filter((stream) => stream.type === request.source.mediaType);
118
+ if (streams.length === 0) {
119
+ return [
120
+ failure("unsupported_media_type", "Media probe did not find a stream matching the declared media type.", "probe.streams"),
121
+ ];
122
+ }
123
+ return streams
124
+ .filter((stream) => !isSupportedTranscriptionCodec(request.source.mediaType, stream.codecName))
125
+ .map((stream) => failure("unsupported_media_codec", `Codec ${stream.codecName} is not supported for ${stream.type} transcription.`, "probe.streams"));
126
+ }
127
+ function validatePolicyLimits(request, sizeBytes, durationMs) {
128
+ const failures = [];
129
+ if (request.policy.maxDurationMs !== undefined &&
130
+ durationMs !== undefined &&
131
+ durationMs > request.policy.maxDurationMs) {
132
+ failures.push(failure("duration_limit_exceeded", "Media duration exceeds transcription policy.", "probe.durationMs"));
133
+ }
134
+ if (request.policy.maxFileBytes !== undefined &&
135
+ sizeBytes !== undefined &&
136
+ sizeBytes > request.policy.maxFileBytes) {
137
+ failures.push(failure("file_size_limit_exceeded", "Media size exceeds transcription policy.", "probe.sizeBytes"));
138
+ }
139
+ return failures;
140
+ }
141
+ function hasOnlyToolFailures(failures) {
142
+ return failures.every((entry) => entry.code === "missing_media_probe");
143
+ }
144
+ function unreadableFailure() {
145
+ return failure("source_file_unreadable", UNREADABLE_SOURCE_MESSAGE, "source.path");
146
+ }
147
+ //# sourceMappingURL=transcription-media-preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcription-media-preflight.js","sourceRoot":"","sources":["../src/transcription-media-preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { NormalizedTranscriptionRequest, TranscriptionPolicy, TranscriptionReadiness, TranscriptionRequest, TranscriptionRuntimeEnvironment, TranscriptionValidationResult } from "./transcription-types.js";
2
+ export declare function defaultTranscriptionPolicy(): TranscriptionPolicy;
3
+ export declare function normalizeTranscriptionRequest(request: TranscriptionRequest): NormalizedTranscriptionRequest;
4
+ export declare function validateTranscriptionRequest(request: TranscriptionRequest): TranscriptionValidationResult;
5
+ export declare function evaluateTranscriptionReadiness(request: NormalizedTranscriptionRequest, environment: TranscriptionRuntimeEnvironment): TranscriptionReadiness;
6
+ export declare function summarizeTranscriptionRedactions(text: string, policyId?: string): {
7
+ text: string;
8
+ redactions: {
9
+ policyId: string;
10
+ count: number;
11
+ categories: string[];
12
+ };
13
+ };
@@ -0,0 +1,150 @@
1
+ import { redactVaultText } from "./context-vault-redaction.js";
2
+ import { transcriptionFailure as failure } from "./transcription-failures.js";
3
+ import { hasSupportedTranscriptionExtension, isSafeTranscriptionSourcePath, } from "./transcription-source-policy.js";
4
+ export function defaultTranscriptionPolicy() {
5
+ return {
6
+ policyId: "local-first-transcription-v1",
7
+ executionMode: "local",
8
+ externalProviderAllowed: false,
9
+ allowedExternalProviders: [],
10
+ requireConsent: false,
11
+ retentionClass: "task-evidence",
12
+ redactionPolicyId: "context-vault-redaction-v1",
13
+ };
14
+ }
15
+ export function normalizeTranscriptionRequest(request) {
16
+ const policy = { ...defaultTranscriptionPolicy(), ...request.policy };
17
+ const engine = normalizeEngine(request.engine, policy);
18
+ return {
19
+ ...request,
20
+ engine,
21
+ policy,
22
+ requestedAt: request.requestedAt ?? new Date().toISOString(),
23
+ };
24
+ }
25
+ export function validateTranscriptionRequest(request) {
26
+ const normalized = normalizeTranscriptionRequest(request);
27
+ const failures = [];
28
+ if (!normalized.taskId.trim()) {
29
+ failures.push(failure("missing_task", "Task id is required.", "taskId"));
30
+ }
31
+ if (!normalized.actor.trim()) {
32
+ failures.push(failure("missing_actor", "Actor is required.", "actor"));
33
+ }
34
+ if (!normalized.source) {
35
+ failures.push(failure("missing_source", "Source is required.", "source"));
36
+ }
37
+ else {
38
+ failures.push(...validateSource(normalized));
39
+ }
40
+ failures.push(...validatePolicy(normalized));
41
+ failures.push(...validateLimits(normalized));
42
+ if (failures.length > 0) {
43
+ return { ok: false, failures };
44
+ }
45
+ return { ok: true, request: normalized, failures: [] };
46
+ }
47
+ export function evaluateTranscriptionReadiness(request, environment) {
48
+ const failures = [];
49
+ const warnings = [];
50
+ if (request.engine.executionMode === "local" &&
51
+ !environment.localEngineAvailable) {
52
+ failures.push(failure("missing_local_engine", "Local transcription engine is unavailable; external fallback is not automatic.", "engine.executionMode"));
53
+ }
54
+ if (request.source.mediaType === "video" &&
55
+ !environment.mediaProbeAvailable) {
56
+ failures.push(failure("missing_media_probe", "Video transcription needs local media probe tooling for deterministic metadata.", "source.mediaType"));
57
+ }
58
+ if (failures.length > 0) {
59
+ warnings.push("Request kept local and non-destructive until required tooling is available.");
60
+ return { status: "degraded", failures, warnings };
61
+ }
62
+ return { status: "ready", failures: [], warnings };
63
+ }
64
+ export function summarizeTranscriptionRedactions(text, policyId = defaultTranscriptionPolicy().redactionPolicyId) {
65
+ const redacted = redactVaultText(text);
66
+ return {
67
+ text: redacted.text,
68
+ redactions: {
69
+ policyId,
70
+ count: redacted.count,
71
+ categories: inferRedactionCategories(text),
72
+ },
73
+ };
74
+ }
75
+ function normalizeEngine(engine, policy) {
76
+ const executionMode = engine?.executionMode ?? policy.executionMode;
77
+ return {
78
+ executionMode,
79
+ provider: engine?.provider ?? (executionMode === "local" ? "local" : ""),
80
+ model: engine?.model ?? (executionMode === "local" ? "local-default" : ""),
81
+ };
82
+ }
83
+ function validateSource(request) {
84
+ const failures = [];
85
+ const { source } = request;
86
+ const hasPath = Boolean(source.path?.trim());
87
+ const hasArtifactId = Boolean(source.artifactId?.trim());
88
+ if (!hasPath && !hasArtifactId) {
89
+ failures.push(failure("invalid_source_identity", "Source must provide either a workflow file path or a vault artifact id.", "source"));
90
+ }
91
+ if (hasPath && hasArtifactId) {
92
+ failures.push(failure("invalid_source_identity", "Source must not mix workflow file path and vault artifact id.", "source"));
93
+ }
94
+ if (hasPath && !isSafeTranscriptionSourcePath(source.path ?? "")) {
95
+ failures.push(failure("invalid_source_path", "Source path must be workspace-relative and must not traverse directories.", "source.path"));
96
+ }
97
+ if (!["audio", "video"].includes(source.mediaType)) {
98
+ failures.push(failure("unsupported_media_type", "Source media type must be audio or video.", "source.mediaType"));
99
+ }
100
+ if (hasPath &&
101
+ !hasSupportedTranscriptionExtension(source.mediaType, source.path ?? "")) {
102
+ failures.push(failure("unsupported_media_extension", "Source extension is not supported for the declared media type.", "source.path"));
103
+ }
104
+ return failures;
105
+ }
106
+ function validatePolicy(request) {
107
+ const failures = [];
108
+ const { engine, policy } = request;
109
+ if (engine.executionMode === "external" && !policy.externalProviderAllowed) {
110
+ failures.push(failure("external_provider_denied", "External transcription providers require explicit policy opt-in.", "policy.externalProviderAllowed"));
111
+ }
112
+ if (engine.executionMode === "external" &&
113
+ policy.externalProviderAllowed &&
114
+ !policy.allowedExternalProviders.includes(engine.provider)) {
115
+ failures.push(failure("external_provider_not_allowed", "External transcription provider is not in the policy allowlist.", "engine.provider"));
116
+ }
117
+ if (policy.requireConsent &&
118
+ !["provided", "not_required"].includes(request.consentStatus ?? "missing")) {
119
+ failures.push(failure("missing_consent", "Transcription requires consent before processing.", "consentStatus"));
120
+ }
121
+ return failures;
122
+ }
123
+ function validateLimits(request) {
124
+ const failures = [];
125
+ if (request.policy.maxDurationMs !== undefined &&
126
+ request.source.durationMs !== undefined &&
127
+ request.source.durationMs > request.policy.maxDurationMs) {
128
+ failures.push(failure("duration_limit_exceeded", "Source duration exceeds transcription policy.", "source.durationMs"));
129
+ }
130
+ if (request.policy.maxFileBytes !== undefined &&
131
+ request.source.sizeBytes !== undefined &&
132
+ request.source.sizeBytes > request.policy.maxFileBytes) {
133
+ failures.push(failure("file_size_limit_exceeded", "Source size exceeds transcription policy.", "source.sizeBytes"));
134
+ }
135
+ return failures;
136
+ }
137
+ function inferRedactionCategories(text) {
138
+ const categories = new Set();
139
+ if (/\b(?:api[_-]?key|token|secret|password|authorization)\b\s*[:=]/i.test(text)) {
140
+ categories.add("secret");
141
+ }
142
+ if (/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/i.test(text)) {
143
+ categories.add("email");
144
+ }
145
+ if (/\b(?:\+?\d[\d .-]{7,}\d)\b/.test(text)) {
146
+ categories.add("phone");
147
+ }
148
+ return [...categories].sort();
149
+ }
150
+ //# sourceMappingURL=transcription-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcription-request.js","sourceRoot":"","sources":["../src/transcription-request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { TranscriptionMediaType } from "./transcription-types.js";
2
+ export declare function hasSupportedTranscriptionExtension(mediaType: TranscriptionMediaType, sourcePath: string): boolean;
3
+ export declare function isSafeTranscriptionSourcePath(value: string): boolean;
4
+ export declare function isSupportedTranscriptionCodec(mediaType: TranscriptionMediaType, codecName: string): boolean;
@@ -0,0 +1,43 @@
1
+ const AUDIO_CODECS = new Set([
2
+ "aac",
3
+ "flac",
4
+ "mp3",
5
+ "opus",
6
+ "pcm_s16le",
7
+ "pcm_s24le",
8
+ "vorbis",
9
+ ]);
10
+ const AUDIO_EXTENSIONS = new Set([
11
+ ".aac",
12
+ ".flac",
13
+ ".m4a",
14
+ ".mp3",
15
+ ".ogg",
16
+ ".wav",
17
+ ]);
18
+ const VIDEO_CODECS = new Set(["av1", "h264", "hevc", "vp8", "vp9"]);
19
+ const VIDEO_EXTENSIONS = new Set([".mkv", ".mov", ".mp4", ".webm"]);
20
+ export function hasSupportedTranscriptionExtension(mediaType, sourcePath) {
21
+ const extension = extensionOf(sourcePath);
22
+ return mediaType === "audio"
23
+ ? AUDIO_EXTENSIONS.has(extension)
24
+ : VIDEO_EXTENSIONS.has(extension);
25
+ }
26
+ export function isSafeTranscriptionSourcePath(value) {
27
+ return (value.length > 0 &&
28
+ !value.startsWith("/") &&
29
+ !value.startsWith("\\") &&
30
+ !value.includes("\0") &&
31
+ !value.split(/[\\/]+/).includes(".."));
32
+ }
33
+ export function isSupportedTranscriptionCodec(mediaType, codecName) {
34
+ const codec = codecName.trim().toLowerCase();
35
+ return mediaType === "audio"
36
+ ? AUDIO_CODECS.has(codec)
37
+ : VIDEO_CODECS.has(codec);
38
+ }
39
+ function extensionOf(value) {
40
+ const match = /\.[^./\\]+$/.exec(value.toLowerCase());
41
+ return match?.[0] ?? "";
42
+ }
43
+ //# sourceMappingURL=transcription-source-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcription-source-policy.js","sourceRoot":"","sources":["../src/transcription-source-policy.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,WAAW;IACX,WAAW;IACX,QAAQ;CACT,CAAC,CAAC;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC,CAAC;AACH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACpE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEpE,MAAM,UAAU,kCAAkC,CAChD,SAAiC,EACjC,UAAkB;IAElB,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAC1C,OAAO,SAAS,KAAK,OAAO;QAC1B,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;QACjC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,OAAO,CACL,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QACtB,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACvB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrB,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,SAAiC,EACjC,SAAiB;IAEjB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,OAAO,SAAS,KAAK,OAAO;QAC1B,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACtD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC"}