@jterrats/open-orchestra 0.5.4 → 0.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/dist/assets/web-console.js +35 -5
  2. package/dist/autonomous-phase-lifecycle.js +3 -2
  3. package/dist/autonomous-phase-lifecycle.js.map +1 -1
  4. package/dist/autonomous-run-state.d.ts +4 -1
  5. package/dist/autonomous-run-state.js +8 -2
  6. package/dist/autonomous-run-state.js.map +1 -1
  7. package/dist/autonomous-run-store.d.ts +3 -1
  8. package/dist/autonomous-run-store.js +8 -1
  9. package/dist/autonomous-run-store.js.map +1 -1
  10. package/dist/autonomous-workflow-constants.js +5 -1
  11. package/dist/autonomous-workflow-constants.js.map +1 -1
  12. package/dist/benchmark.js +101 -9
  13. package/dist/benchmark.js.map +1 -1
  14. package/dist/cli.js +16 -1
  15. package/dist/cli.js.map +1 -1
  16. package/dist/collaboration-flows.js +5 -29
  17. package/dist/collaboration-flows.js.map +1 -1
  18. package/dist/command-manifest.js +7 -2
  19. package/dist/command-manifest.js.map +1 -1
  20. package/dist/commands.d.ts +5 -2
  21. package/dist/commands.js +64 -24
  22. package/dist/commands.js.map +1 -1
  23. package/dist/constants.d.ts +1 -0
  24. package/dist/constants.js +4 -0
  25. package/dist/constants.js.map +1 -1
  26. package/dist/cursor-canvas.d.ts +20 -0
  27. package/dist/cursor-canvas.js +119 -0
  28. package/dist/cursor-canvas.js.map +1 -0
  29. package/dist/defaults.d.ts +4 -0
  30. package/dist/defaults.js +4 -0
  31. package/dist/defaults.js.map +1 -1
  32. package/dist/delegation-decision.js +2 -10
  33. package/dist/delegation-decision.js.map +1 -1
  34. package/dist/doc-sync.d.ts +25 -0
  35. package/dist/doc-sync.js +79 -0
  36. package/dist/doc-sync.js.map +1 -0
  37. package/dist/gemini-provider.d.ts +3 -6
  38. package/dist/gemini-provider.js +14 -38
  39. package/dist/gemini-provider.js.map +1 -1
  40. package/dist/metrics-commands.js +16 -2
  41. package/dist/metrics-commands.js.map +1 -1
  42. package/dist/model-providers.d.ts +5 -12
  43. package/dist/model-providers.js +23 -64
  44. package/dist/model-providers.js.map +1 -1
  45. package/dist/network-policy.d.ts +2 -0
  46. package/dist/network-policy.js +6 -0
  47. package/dist/network-policy.js.map +1 -0
  48. package/dist/ollama-provider.d.ts +3 -6
  49. package/dist/ollama-provider.js +14 -38
  50. package/dist/ollama-provider.js.map +1 -1
  51. package/dist/package-update-check.d.ts +1 -0
  52. package/dist/package-update-check.js +4 -0
  53. package/dist/package-update-check.js.map +1 -1
  54. package/dist/phase-executor.js +305 -9
  55. package/dist/phase-executor.js.map +1 -1
  56. package/dist/phase-playbooks.d.ts +11 -0
  57. package/dist/phase-playbooks.js +200 -0
  58. package/dist/phase-playbooks.js.map +1 -0
  59. package/dist/planning-commands.js +18 -35
  60. package/dist/planning-commands.js.map +1 -1
  61. package/dist/policy-commands.d.ts +2 -0
  62. package/dist/policy-commands.js +29 -0
  63. package/dist/policy-commands.js.map +1 -0
  64. package/dist/policy-defaults.d.ts +2 -0
  65. package/dist/policy-defaults.js +42 -0
  66. package/dist/policy-defaults.js.map +1 -0
  67. package/dist/policy.d.ts +20 -0
  68. package/dist/policy.js +155 -0
  69. package/dist/policy.js.map +1 -0
  70. package/dist/prompt-registry-validation.d.ts +3 -0
  71. package/dist/prompt-registry-validation.js +24 -21
  72. package/dist/prompt-registry-validation.js.map +1 -1
  73. package/dist/provider-utils.d.ts +21 -0
  74. package/dist/provider-utils.js +45 -0
  75. package/dist/provider-utils.js.map +1 -0
  76. package/dist/refresh-generated.d.ts +23 -0
  77. package/dist/refresh-generated.js +103 -0
  78. package/dist/refresh-generated.js.map +1 -0
  79. package/dist/role-aliases.d.ts +2 -0
  80. package/dist/role-aliases.js +20 -0
  81. package/dist/role-aliases.js.map +1 -0
  82. package/dist/runtime-adapters.d.ts +2 -1
  83. package/dist/runtime-adapters.js +16 -0
  84. package/dist/runtime-adapters.js.map +1 -1
  85. package/dist/runtime-commands.js +8 -3
  86. package/dist/runtime-commands.js.map +1 -1
  87. package/dist/runtime-execution-adapters.js +40 -0
  88. package/dist/runtime-execution-adapters.js.map +1 -1
  89. package/dist/runtime-execution-renderer.d.ts +4 -3
  90. package/dist/runtime-execution-renderer.js +35 -9
  91. package/dist/runtime-execution-renderer.js.map +1 -1
  92. package/dist/runtime-execution.d.ts +6 -1
  93. package/dist/runtime-execution.js +43 -1
  94. package/dist/runtime-execution.js.map +1 -1
  95. package/dist/skills-catalog.js +1 -0
  96. package/dist/skills-catalog.js.map +1 -1
  97. package/dist/skills-commands.d.ts +1 -0
  98. package/dist/skills-commands.js +24 -0
  99. package/dist/skills-commands.js.map +1 -1
  100. package/dist/skills-planning.js +7 -18
  101. package/dist/skills-planning.js.map +1 -1
  102. package/dist/subagent-protocol.js +2 -13
  103. package/dist/subagent-protocol.js.map +1 -1
  104. package/dist/task-graph-commands.js +1 -11
  105. package/dist/task-graph-commands.js.map +1 -1
  106. package/dist/task-text.d.ts +8 -0
  107. package/dist/task-text.js +18 -0
  108. package/dist/task-text.js.map +1 -0
  109. package/dist/types/metrics.d.ts +2 -0
  110. package/dist/types/model-config.d.ts +18 -4
  111. package/dist/types/runtime.d.ts +27 -0
  112. package/dist/types/skills.d.ts +7 -0
  113. package/dist/types/tasks.d.ts +4 -0
  114. package/dist/types/workflow-run.d.ts +18 -0
  115. package/dist/types.d.ts +12 -4
  116. package/dist/types.js.map +1 -1
  117. package/dist/web-api-read-routes.js +14 -2
  118. package/dist/web-api-read-routes.js.map +1 -1
  119. package/dist/web-api.js +6 -0
  120. package/dist/web-api.js.map +1 -1
  121. package/dist/workflow-approval-service.js +11 -4
  122. package/dist/workflow-approval-service.js.map +1 -1
  123. package/dist/workflow-approval-utils.js +13 -3
  124. package/dist/workflow-approval-utils.js.map +1 -1
  125. package/dist/workflow-event-query.d.ts +2 -0
  126. package/dist/workflow-event-query.js +6 -0
  127. package/dist/workflow-event-query.js.map +1 -0
  128. package/dist/workflow-evidence-service.js +10 -8
  129. package/dist/workflow-evidence-service.js.map +1 -1
  130. package/dist/workflow-gates.d.ts +1 -0
  131. package/dist/workflow-gates.js +48 -11
  132. package/dist/workflow-gates.js.map +1 -1
  133. package/dist/workflow-markdown.d.ts +6 -0
  134. package/dist/workflow-markdown.js +25 -0
  135. package/dist/workflow-markdown.js.map +1 -0
  136. package/dist/workflow-phase-planner.d.ts +19 -0
  137. package/dist/workflow-phase-planner.js +133 -0
  138. package/dist/workflow-phase-planner.js.map +1 -0
  139. package/dist/workflow-run-commands.d.ts +1 -0
  140. package/dist/workflow-run-commands.js +266 -23
  141. package/dist/workflow-run-commands.js.map +1 -1
  142. package/dist/workflow-services.d.ts +6 -1
  143. package/dist/workflow-services.js +72 -26
  144. package/dist/workflow-services.js.map +1 -1
  145. package/dist/workflow-templates.d.ts +2 -1
  146. package/dist/workflow-templates.js +6 -16
  147. package/dist/workflow-templates.js.map +1 -1
  148. package/dist/workspace-validator.js +24 -2
  149. package/dist/workspace-validator.js.map +1 -1
  150. package/dist/workspace.js +6 -0
  151. package/dist/workspace.js.map +1 -1
  152. package/docs/autonomous-workflow.md +71 -2
  153. package/docs/benchmark.md +2 -2
  154. package/docs/core-command-surface.md +3 -0
  155. package/docs/orchestra-mvp.md +3 -0
  156. package/docs/runtime-adapters.md +21 -0
  157. package/docs/skill-loading-strategy.md +1 -0
  158. package/package.json +1 -1
  159. package/skills/doc-sync/SKILL.md +2 -0
package/dist/policy.js ADDED
@@ -0,0 +1,155 @@
1
+ import crypto from "node:crypto";
2
+ import path from "node:path";
3
+ import { removeUndefined } from "./command-utils.js";
4
+ import { FILES } from "./constants.js";
5
+ import { readJson } from "./fs-utils.js";
6
+ import { DEFAULT_ACTION_POLICY } from "./policy-defaults.js";
7
+ import { approvalRecordForArtifact } from "./workflow-approval-utils.js";
8
+ import { appendEvent, readEvents, writeArtifact } from "./workspace.js";
9
+ export async function evaluateActionPolicy(input) {
10
+ const root = input.root ?? process.cwd();
11
+ const policy = await readActionPolicy(root);
12
+ const classification = classifyAction(input, policy);
13
+ const approvalRequired = policy.requireApprovalFor.includes(classification.tier);
14
+ if (!approvalRequired) {
15
+ return {
16
+ action: input.action,
17
+ tier: classification.tier,
18
+ allowed: true,
19
+ approvalRequired: false,
20
+ reasons: classification.reasons,
21
+ };
22
+ }
23
+ const approvalId = actionApprovalId(input);
24
+ const approvalArtifact = path.join(".agent-workflow", "approvals", `${approvalId}.md`);
25
+ const approval = approvalRecordForArtifact(approvalArtifact, await readEvents(root));
26
+ if (approval.status === "approved") {
27
+ return {
28
+ action: input.action,
29
+ tier: classification.tier,
30
+ allowed: true,
31
+ approvalRequired: true,
32
+ reasons: [...classification.reasons, "approval already recorded"],
33
+ approvalId,
34
+ approvalArtifact,
35
+ approvalCommand: approveCommand(approvalId),
36
+ };
37
+ }
38
+ const artifact = await writeActionPolicyApproval({
39
+ root,
40
+ approvalId,
41
+ input,
42
+ tier: classification.tier,
43
+ reasons: classification.reasons,
44
+ });
45
+ await appendEvent(root, removeUndefined({
46
+ type: "ACTION_POLICY_APPROVAL_REQUESTED",
47
+ taskId: input.taskId,
48
+ actor: "parent",
49
+ summary: `Action policy approval required: ${input.action}`,
50
+ artifacts: [artifact],
51
+ metadata: {
52
+ approvalId,
53
+ action: input.action,
54
+ tier: classification.tier,
55
+ reasons: classification.reasons,
56
+ command: input.command,
57
+ paths: input.paths,
58
+ },
59
+ }));
60
+ return {
61
+ action: input.action,
62
+ tier: classification.tier,
63
+ allowed: false,
64
+ approvalRequired: true,
65
+ reasons: classification.reasons,
66
+ approvalId,
67
+ approvalArtifact: artifact,
68
+ approvalCommand: approveCommand(approvalId),
69
+ };
70
+ }
71
+ export async function readActionPolicy(root) {
72
+ const configured = await readJson(path.join(root, ".agent-workflow", FILES.policy), {});
73
+ return {
74
+ requireApprovalFor: configured.requireApprovalFor ?? DEFAULT_ACTION_POLICY.requireApprovalFor,
75
+ routineCommands: configured.routineCommands ?? DEFAULT_ACTION_POLICY.routineCommands,
76
+ elevatedPatterns: configured.elevatedPatterns ?? DEFAULT_ACTION_POLICY.elevatedPatterns,
77
+ majorPatterns: configured.majorPatterns ?? DEFAULT_ACTION_POLICY.majorPatterns,
78
+ destructivePatterns: configured.destructivePatterns ??
79
+ DEFAULT_ACTION_POLICY.destructivePatterns,
80
+ };
81
+ }
82
+ function classifyAction(input, policy) {
83
+ const text = [input.action, input.command, ...(input.paths ?? [])]
84
+ .filter((item) => Boolean(item))
85
+ .join(" ")
86
+ .toLowerCase();
87
+ const destructive = matchedPatterns(text, policy.destructivePatterns);
88
+ if (destructive.length > 0) {
89
+ return {
90
+ tier: "destructive",
91
+ reasons: destructive.map((item) => `matched destructive pattern: ${item}`),
92
+ };
93
+ }
94
+ const major = matchedPatterns(text, policy.majorPatterns);
95
+ if (major.length > 0) {
96
+ return {
97
+ tier: "major",
98
+ reasons: major.map((item) => `matched major pattern: ${item}`),
99
+ };
100
+ }
101
+ const elevated = matchedPatterns(text, policy.elevatedPatterns);
102
+ if (elevated.length > 0) {
103
+ return {
104
+ tier: "elevated",
105
+ reasons: elevated.map((item) => `matched elevated pattern: ${item}`),
106
+ };
107
+ }
108
+ const routine = matchedPatterns(text, policy.routineCommands);
109
+ return {
110
+ tier: "routine",
111
+ reasons: routine.length > 0
112
+ ? routine.map((item) => `matched routine pattern: ${item}`)
113
+ : ["no major or destructive risk pattern matched"],
114
+ };
115
+ }
116
+ function matchedPatterns(text, patterns) {
117
+ return patterns.filter((pattern) => text.includes(pattern.toLowerCase()));
118
+ }
119
+ async function writeActionPolicyApproval({ root, approvalId, input, tier, reasons, }) {
120
+ const content = [
121
+ `# Action Policy Approval: ${input.action}`,
122
+ "",
123
+ "## Summary",
124
+ `- Status: approval required before action`,
125
+ `- Risk tier: ${tier}`,
126
+ ...(input.taskId ? [`- Task: ${input.taskId}`] : []),
127
+ "",
128
+ "## Action",
129
+ `- Name: ${input.action}`,
130
+ ...(input.command ? [`- Command: ${input.command}`] : []),
131
+ ...(input.paths?.length ? [`- Paths: ${input.paths.join(", ")}`] : []),
132
+ "",
133
+ "## Reasons",
134
+ ...reasons.map((reason) => `- ${reason}`),
135
+ "",
136
+ "## Approval Commands",
137
+ `- Approve: ${approveCommand(approvalId)}`,
138
+ `- Reject: orchestra approvals reject --id ${approvalId} --approver <name> --rationale "<reason>"`,
139
+ "",
140
+ ].join("\n");
141
+ return writeArtifact(root, "approvals", `${approvalId}.md`, content);
142
+ }
143
+ function actionApprovalId(input) {
144
+ const hash = crypto
145
+ .createHash("sha256")
146
+ .update([input.taskId, input.action, input.command, input.paths?.join(",")].join("|"))
147
+ .digest("hex")
148
+ .slice(0, 10);
149
+ const prefix = (input.taskId ?? "policy").replace(/[^a-zA-Z0-9._-]/g, "-");
150
+ return `${prefix}-action-${hash}`;
151
+ }
152
+ function approveCommand(approvalId) {
153
+ return `orchestra approvals approve --id ${approvalId} --approver <name> --rationale "<reason>"`;
154
+ }
155
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
@@ -10,3 +10,6 @@ export interface PromptRegistryValidationIssue {
10
10
  message: string;
11
11
  }
12
12
  export declare function validatePromptRegistryCoverage(root: string, options?: PromptRegistryValidationOptions): Promise<PromptRegistryValidationIssue[]>;
13
+ export declare function readRelevantPromptRegistryChangedPaths(root: string): Promise<string[]>;
14
+ export declare function readPromptRegistryEntries(root: string): Promise<Map<PromptRegistryFileName, string[]>>;
15
+ export declare function hasPromptRegistryCoverage(entries: string[], changedPath: string): boolean;
@@ -23,7 +23,7 @@ const RELEVANT_FILES = new Set([
23
23
  "package.json",
24
24
  ]);
25
25
  export async function validatePromptRegistryCoverage(root, options = {}) {
26
- const changedPaths = relevantChangedPaths(await readGitChangedPaths(root));
26
+ const changedPaths = await readRelevantPromptRegistryChangedPaths(root);
27
27
  if (changedPaths.length === 0 || options.bypassRationale) {
28
28
  return [];
29
29
  }
@@ -31,7 +31,7 @@ export async function validatePromptRegistryCoverage(root, options = {}) {
31
31
  return changedPaths.flatMap((changedPath) => {
32
32
  const register = inferPromptRegistryFile([changedPath]);
33
33
  const registerEntries = entries.get(register) ?? [];
34
- if (hasCoverage(registerEntries, changedPath))
34
+ if (hasPromptRegistryCoverage(registerEntries, changedPath))
35
35
  return [];
36
36
  const severity = options.strict ? "error" : "warning";
37
37
  return [
@@ -44,6 +44,28 @@ export async function validatePromptRegistryCoverage(root, options = {}) {
44
44
  ];
45
45
  });
46
46
  }
47
+ export async function readRelevantPromptRegistryChangedPaths(root) {
48
+ return relevantChangedPaths(await readGitChangedPaths(root));
49
+ }
50
+ export async function readPromptRegistryEntries(root) {
51
+ const registryRoot = path.join(root, PROMPT_REGISTRY_DIR);
52
+ if (!(await exists(registryRoot)))
53
+ return new Map();
54
+ const files = (await readdir(registryRoot)).filter((file) => file.endsWith(".md"));
55
+ const entries = new Map();
56
+ for (const file of files) {
57
+ const content = await readFile(path.join(registryRoot, file), "utf8");
58
+ const maintained = content.split(PROMPT_REGISTRY_FOOTER)[1] ?? "";
59
+ entries.set(file, maintained
60
+ .split(/\n(?=##\s+)/)
61
+ .map((entry) => entry.trim())
62
+ .filter(Boolean));
63
+ }
64
+ return entries;
65
+ }
66
+ export function hasPromptRegistryCoverage(entries, changedPath) {
67
+ return entries.some((entry) => entry.includes(changedPath));
68
+ }
47
69
  async function readGitChangedPaths(root) {
48
70
  try {
49
71
  const { stdout } = await execFileAsync("git", ["status", "--porcelain", "--untracked-files=all"], { cwd: root });
@@ -82,23 +104,4 @@ function isIgnoredPath(item) {
82
104
  item.startsWith("node_modules/") ||
83
105
  item.endsWith(".map"));
84
106
  }
85
- async function readPromptRegistryEntries(root) {
86
- const registryRoot = path.join(root, PROMPT_REGISTRY_DIR);
87
- if (!(await exists(registryRoot)))
88
- return new Map();
89
- const files = (await readdir(registryRoot)).filter((file) => file.endsWith(".md"));
90
- const entries = new Map();
91
- for (const file of files) {
92
- const content = await readFile(path.join(registryRoot, file), "utf8");
93
- const maintained = content.split(PROMPT_REGISTRY_FOOTER)[1] ?? "";
94
- entries.set(file, maintained
95
- .split(/\n(?=##\s+)/)
96
- .map((entry) => entry.trim())
97
- .filter(Boolean));
98
- }
99
- return entries;
100
- }
101
- function hasCoverage(entries, changedPath) {
102
- return entries.some((entry) => entry.includes(changedPath));
103
- }
104
107
  //# sourceMappingURL=prompt-registry-validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-registry-validation.js","sourceRoot":"","sources":["../src/prompt-registry-validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-registry-validation.js","sourceRoot":"","sources":["../src/prompt-registry-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ModelProviderCapabilities } from "./types/model-config.js";
2
+ export interface ModelProviderRuntimeOptions {
3
+ fetchFn?: typeof fetch;
4
+ env?: NodeJS.ProcessEnv;
5
+ }
6
+ export interface ModelProviderRuntime {
7
+ fetchFn: typeof fetch;
8
+ env: NodeJS.ProcessEnv;
9
+ }
10
+ export declare function modelProviderRuntime({ fetchFn, env, }?: ModelProviderRuntimeOptions): ModelProviderRuntime;
11
+ export declare function modelProviderCapabilities(overrides?: Partial<ModelProviderCapabilities>): ModelProviderCapabilities;
12
+ export declare function apiKeyFromEnvFile({ env, keyNames, fileNames, defaultValue, fileErrorName, }: {
13
+ env: NodeJS.ProcessEnv;
14
+ keyNames: string[];
15
+ fileNames: string[];
16
+ defaultValue?: string;
17
+ fileErrorName: string;
18
+ }): string | undefined;
19
+ export declare function joinUrlPath(basePath: string, segment: string): string;
20
+ export declare function stringFrom(value: unknown, fallback: string): string;
21
+ export declare function numberFrom(value: unknown): number;
@@ -0,0 +1,45 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { isAbsolute, resolve } from "node:path";
3
+ export function modelProviderRuntime({ fetchFn = fetch, env = process.env, } = {}) {
4
+ return { fetchFn, env };
5
+ }
6
+ export function modelProviderCapabilities(overrides = {}) {
7
+ return {
8
+ streaming: false,
9
+ tools: false,
10
+ vision: false,
11
+ jsonMode: true,
12
+ maxContextTokens: 0,
13
+ timeoutMs: 30000,
14
+ ...overrides,
15
+ };
16
+ }
17
+ export function apiKeyFromEnvFile({ env, keyNames, fileNames, defaultValue, fileErrorName, }) {
18
+ for (const keyName of keyNames) {
19
+ const inlineKey = env[keyName];
20
+ if (inlineKey?.trim())
21
+ return inlineKey.trim();
22
+ }
23
+ for (const fileName of fileNames) {
24
+ const keyFile = env[fileName];
25
+ if (!keyFile?.trim())
26
+ continue;
27
+ const keyPath = keyFile.trim();
28
+ const resolvedPath = resolve(keyPath);
29
+ if (!isAbsolute(keyPath) || resolvedPath !== keyPath) {
30
+ throw new Error(`${fileErrorName} must be an absolute path`);
31
+ }
32
+ return readFileSync(resolvedPath, "utf8").trim();
33
+ }
34
+ return defaultValue;
35
+ }
36
+ export function joinUrlPath(basePath, segment) {
37
+ return `${basePath.replace(/\/+$/, "")}/${segment}`.replace(/^\/?/, "/");
38
+ }
39
+ export function stringFrom(value, fallback) {
40
+ return typeof value === "string" && value ? value : fallback;
41
+ }
42
+ export function numberFrom(value) {
43
+ return typeof value === "number" ? value : 0;
44
+ }
45
+ //# sourceMappingURL=provider-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAahD,MAAM,UAAU,oBAAoB,CAAC,EACnC,OAAO,GAAG,KAAK,EACf,GAAG,GAAG,OAAO,CAAC,GAAG,MACc,EAAE;IACjC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,YAAgD,EAAE;IAElD,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,IAAI;QACd,gBAAgB,EAAE,CAAC;QACnB,SAAS,EAAE,KAAK;QAChB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,GAAG,EACH,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,aAAa,GAOd;IACC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,SAAS,EAAE,IAAI,EAAE;YAAE,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;YAAE,SAAS;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,2BAA2B,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,OAAe;IAC3D,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,QAAgB;IACzD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,23 @@
1
+ export interface RefreshGeneratedOptions {
2
+ root?: string;
3
+ check?: boolean;
4
+ dryRun?: boolean;
5
+ force?: boolean;
6
+ }
7
+ export interface RefreshGeneratedItem {
8
+ kind: "runtime-bootstrap" | "phase-playbook";
9
+ path: string;
10
+ status: "changed" | "unchanged" | "blocked";
11
+ reason: string;
12
+ }
13
+ export interface RefreshGeneratedReport {
14
+ mode: "check" | "dry-run" | "apply";
15
+ force: boolean;
16
+ items: RefreshGeneratedItem[];
17
+ totals: {
18
+ changed: number;
19
+ unchanged: number;
20
+ blocked: number;
21
+ };
22
+ }
23
+ export declare function refreshGeneratedFiles({ root, check, dryRun, force, }?: RefreshGeneratedOptions): Promise<RefreshGeneratedReport>;
@@ -0,0 +1,103 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { DEFAULT_PHASE_PLAYBOOKS, DEFAULT_PLAYBOOKS_DIR, } from "./phase-playbooks.js";
4
+ import { exists, resolveWorkspaceWritePath } from "./fs-utils.js";
5
+ import { listRuntimeAdapters } from "./runtime-adapters.js";
6
+ import { renderRuntimeBootstrap, upsertRuntimeBootstrapBlock, } from "./runtime-bootstrap.js";
7
+ export async function refreshGeneratedFiles({ root = process.cwd(), check = false, dryRun = false, force = false, } = {}) {
8
+ const items = [
9
+ ...(await refreshRuntimeBootstrapFiles({ root, check, dryRun, force })),
10
+ ...(await refreshPhasePlaybooks({ root, check, dryRun, force })),
11
+ ];
12
+ return {
13
+ mode: check ? "check" : dryRun ? "dry-run" : "apply",
14
+ force,
15
+ items,
16
+ totals: {
17
+ changed: items.filter((item) => item.status === "changed").length,
18
+ unchanged: items.filter((item) => item.status === "unchanged").length,
19
+ blocked: items.filter((item) => item.status === "blocked").length,
20
+ },
21
+ };
22
+ }
23
+ async function refreshRuntimeBootstrapFiles({ root, check, dryRun, force, }) {
24
+ const candidates = await existingRuntimeBootstrapTargets(root);
25
+ const items = [];
26
+ for (const candidate of candidates) {
27
+ const filePath = resolveWorkspaceWritePath(root, candidate.path);
28
+ const existing = await readFile(filePath, "utf8").catch(() => "");
29
+ const result = upsertRuntimeBootstrapBlock(existing, renderRuntimeBootstrap(candidate.target), { force });
30
+ if (result.drift && !force) {
31
+ items.push({
32
+ kind: "runtime-bootstrap",
33
+ path: candidate.path,
34
+ status: "blocked",
35
+ reason: "managed block drift detected; rerun with --force to replace it",
36
+ });
37
+ continue;
38
+ }
39
+ if (result.changed && !check && !dryRun) {
40
+ await ensureParent(filePath);
41
+ await writeFile(filePath, result.content, "utf8");
42
+ }
43
+ items.push({
44
+ kind: "runtime-bootstrap",
45
+ path: candidate.path,
46
+ status: result.changed ? "changed" : "unchanged",
47
+ reason: result.missing
48
+ ? "managed block missing"
49
+ : result.changed
50
+ ? "managed block refreshed"
51
+ : "managed block current",
52
+ });
53
+ }
54
+ return items;
55
+ }
56
+ async function existingRuntimeBootstrapTargets(root) {
57
+ const defaults = new Set(["ORCHESTRA.md", "AGENTS.md"]);
58
+ const candidates = listRuntimeAdapters().flatMap((adapter) => adapter.defaultInstructionFiles.map((file) => ({
59
+ path: file,
60
+ target: adapter.target,
61
+ })));
62
+ const selected = [];
63
+ for (const candidate of candidates) {
64
+ const filePath = resolveWorkspaceWritePath(root, candidate.path);
65
+ if (defaults.has(candidate.path) || (await exists(filePath))) {
66
+ selected.push(candidate);
67
+ }
68
+ }
69
+ return selected;
70
+ }
71
+ async function refreshPhasePlaybooks({ root, check, dryRun, force, }) {
72
+ const items = [];
73
+ for (const [phase, content] of Object.entries(DEFAULT_PHASE_PLAYBOOKS)) {
74
+ const relativePath = `${DEFAULT_PLAYBOOKS_DIR}/${phase}.md`;
75
+ const filePath = resolveWorkspaceWritePath(root, relativePath);
76
+ const existing = await readFile(filePath, "utf8").catch(() => "");
77
+ const desired = `${content}\n`;
78
+ const missing = existing === "";
79
+ const changed = missing || (force && existing !== desired);
80
+ if (changed && !check && !dryRun) {
81
+ await ensureParent(filePath);
82
+ await writeFile(filePath, desired, "utf8");
83
+ }
84
+ items.push({
85
+ kind: "phase-playbook",
86
+ path: relativePath,
87
+ status: changed ? "changed" : "unchanged",
88
+ reason: missing
89
+ ? "default playbook missing"
90
+ : changed
91
+ ? "default playbook refreshed with --force"
92
+ : force
93
+ ? "default playbook current"
94
+ : "existing playbook preserved",
95
+ });
96
+ }
97
+ return items;
98
+ }
99
+ async function ensureParent(filePath) {
100
+ const { mkdir } = await import("node:fs/promises");
101
+ await mkdir(path.dirname(filePath), { recursive: true });
102
+ }
103
+ //# sourceMappingURL=refresh-generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-generated.js","sourceRoot":"","sources":["../src/refresh-generated.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function roleForRiskArea(area: string): string | undefined;
2
+ export declare function rolesForRiskAreas(areas: string[]): string[];
@@ -0,0 +1,20 @@
1
+ const ROLE_BY_RISK_AREA = {
2
+ security: "security",
3
+ sre: "sre",
4
+ dba: "dba",
5
+ data: "data_engineer",
6
+ devops: "devops",
7
+ compliance: "compliance_privacy",
8
+ accessibility: "accessibility_reviewer",
9
+ ux: "ux_ui_designer",
10
+ };
11
+ export function roleForRiskArea(area) {
12
+ return ROLE_BY_RISK_AREA[area];
13
+ }
14
+ export function rolesForRiskAreas(areas) {
15
+ return [...new Set(areas.map(roleForRiskArea).filter(isString))];
16
+ }
17
+ function isString(value) {
18
+ return Boolean(value);
19
+ }
20
+ //# sourceMappingURL=role-aliases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-aliases.js","sourceRoot":"","sources":["../src/role-aliases.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAmC;IACxD,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,oBAAoB;IAChC,aAAa,EAAE,wBAAwB;IACvC,EAAE,EAAE,gBAAgB;CACrB,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,iBAAiB,CAAC,IAAsB,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAe;IAC/C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAyB;IACzC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC"}
@@ -1,5 +1,6 @@
1
- import type { RuntimeAdapter, RuntimeExecutionAdapter, RuntimeExecutionId, SkillRenderTarget } from "./types.js";
1
+ import type { RuntimeAdapter, RuntimeAdapterCatalogEntry, RuntimeExecutionAdapter, RuntimeExecutionId, SkillRenderTarget } from "./types.js";
2
2
  export declare function listRuntimeAdapters(): RuntimeAdapter[];
3
+ export declare function listRuntimeAdapterCatalog(): RuntimeAdapterCatalogEntry[];
3
4
  export declare function listRuntimeExecutionAdapters(): RuntimeExecutionAdapter[];
4
5
  export declare function listRuntimeTargets(): SkillRenderTarget[];
5
6
  export declare function getRuntimeAdapter(target: SkillRenderTarget): RuntimeAdapter;
@@ -67,6 +67,14 @@ const runtimeAdapters = [
67
67
  export function listRuntimeAdapters() {
68
68
  return runtimeAdapters.map((adapter) => ({ ...adapter }));
69
69
  }
70
+ export function listRuntimeAdapterCatalog() {
71
+ return runtimeAdapters.map((adapter) => ({
72
+ ...adapter,
73
+ executionAdapters: runtimeExecutionAdapters
74
+ .filter((executionAdapter) => executionAdapter.target === adapter.target)
75
+ .map((executionAdapter) => cloneExecutionAdapter(executionAdapter)),
76
+ }));
77
+ }
70
78
  export function listRuntimeExecutionAdapters() {
71
79
  return runtimeExecutionAdapters.map((adapter) => cloneExecutionAdapter(adapter));
72
80
  }
@@ -109,6 +117,14 @@ function cloneExecutionAdapter(adapter) {
109
117
  return {
110
118
  ...adapter,
111
119
  execution: { ...adapter.execution },
120
+ toolPermissionPolicy: {
121
+ ...adapter.toolPermissionPolicy,
122
+ readOnlyTools: [...adapter.toolPermissionPolicy.readOnlyTools],
123
+ writeTools: [...adapter.toolPermissionPolicy.writeTools],
124
+ shellTools: [...adapter.toolPermissionPolicy.shellTools],
125
+ autonomyFlags: [...adapter.toolPermissionPolicy.autonomyFlags],
126
+ gatedFlags: [...adapter.toolPermissionPolicy.gatedFlags],
127
+ },
112
128
  subagents: { ...adapter.subagents },
113
129
  };
114
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-adapters.js","sourceRoot":"","sources":["../src/runtime-adapters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-adapters.js","sourceRoot":"","sources":["../src/runtime-adapters.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { requireArg } from "./args.js";
4
4
  import { parseCsv, parseSkillRenderTarget, removeUndefined, stringOption, } from "./command-utils.js";
5
5
  import { listCommandManifest } from "./command-manifest.js";
6
6
  import { resolveWorkspaceWritePath } from "./fs-utils.js";
7
- import { listRuntimeAdapters } from "./runtime-adapters.js";
7
+ import { listRuntimeAdapterCatalog } from "./runtime-adapters.js";
8
8
  import { renderRuntimeBootstrap, upsertRuntimeBootstrapBlock, } from "./runtime-bootstrap.js";
9
9
  import { recordRuntimeHandoff, renderRuntimeBrief, renderRuntimeDelegationPacket, } from "./runtime-execution.js";
10
10
  import { renderSubagentProtocol, upsertSubagentProtocolBlock, } from "./subagent-protocol.js";
@@ -19,18 +19,23 @@ export async function commandsManifestCommand(options, io) {
19
19
  }
20
20
  }
21
21
  export async function runtimeAdaptersCommand(options, io) {
22
- const adapters = listRuntimeAdapters();
22
+ const adapters = listRuntimeAdapterCatalog();
23
23
  if (options.json) {
24
24
  io.log(JSON.stringify(adapters, null, 2));
25
25
  return;
26
26
  }
27
27
  for (const adapter of adapters) {
28
+ const executionAdapters = adapter.executionAdapters.length > 0
29
+ ? "; execution: " +
30
+ adapter.executionAdapters.map((execution) => execution.id).join(", ")
31
+ : "";
28
32
  io.log(adapter.target +
29
33
  " - " +
30
34
  adapter.label +
31
35
  " (" +
32
36
  adapter.defaultInstructionFiles.join(", ") +
33
- ")");
37
+ ")" +
38
+ executionAdapters);
34
39
  }
35
40
  }
36
41
  export async function runtimeBriefCommand(options, io) {