@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
@@ -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,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"}