@hongmaple0820/scale-engine 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/README.en.md +13 -5
  2. package/README.md +13 -5
  3. package/dist/agents/LeadershipPresets.d.ts +16 -0
  4. package/dist/agents/LeadershipPresets.js +152 -0
  5. package/dist/agents/LeadershipPresets.js.map +1 -0
  6. package/dist/api/cli.js +729 -5
  7. package/dist/api/cli.js.map +1 -1
  8. package/dist/api/doctor.d.ts +2 -0
  9. package/dist/api/doctor.js +83 -0
  10. package/dist/api/doctor.js.map +1 -1
  11. package/dist/api/mcp.js +2 -1
  12. package/dist/api/mcp.js.map +1 -1
  13. package/dist/artifact/types.d.ts +4 -0
  14. package/dist/artifact/types.js.map +1 -1
  15. package/dist/capabilities/InstalledSkillsIntegration.d.ts +3 -0
  16. package/dist/capabilities/InstalledSkillsIntegration.js +41 -17
  17. package/dist/capabilities/InstalledSkillsIntegration.js.map +1 -1
  18. package/dist/cli/phaseCommands.d.ts +14 -0
  19. package/dist/cli/phaseCommands.js +214 -5
  20. package/dist/cli/phaseCommands.js.map +1 -1
  21. package/dist/cli/vibeCommands.d.ts +20 -0
  22. package/dist/cli/vibeCommands.js +150 -173
  23. package/dist/cli/vibeCommands.js.map +1 -1
  24. package/dist/core/logger.d.ts +2 -0
  25. package/dist/core/logger.js +33 -1
  26. package/dist/core/logger.js.map +1 -1
  27. package/dist/index.d.ts +4 -0
  28. package/dist/index.js +5 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/output/HTMLDocumentRenderer.js +3 -2
  31. package/dist/output/HTMLDocumentRenderer.js.map +1 -1
  32. package/dist/prompts/VibeTemplateGallery.d.ts +25 -0
  33. package/dist/prompts/VibeTemplateGallery.js +295 -0
  34. package/dist/prompts/VibeTemplateGallery.js.map +1 -0
  35. package/dist/skills/ExternalSkills.js +9 -4
  36. package/dist/skills/ExternalSkills.js.map +1 -1
  37. package/dist/skills/SkillDiscovery.js +5 -3
  38. package/dist/skills/SkillDiscovery.js.map +1 -1
  39. package/dist/skills/SkillDoctor.js +178 -1
  40. package/dist/skills/SkillDoctor.js.map +1 -1
  41. package/dist/skills/SkillInstaller.js +5 -0
  42. package/dist/skills/SkillInstaller.js.map +1 -1
  43. package/dist/skills/SkillRepository.d.ts +63 -0
  44. package/dist/skills/SkillRepository.js +365 -0
  45. package/dist/skills/SkillRepository.js.map +1 -0
  46. package/dist/skills/routing/SkillPolicy.js +168 -5
  47. package/dist/skills/routing/SkillPolicy.js.map +1 -1
  48. package/dist/tools/ToolCapabilityRegistry.d.ts +46 -0
  49. package/dist/tools/ToolCapabilityRegistry.js +223 -0
  50. package/dist/tools/ToolCapabilityRegistry.js.map +1 -0
  51. package/dist/tools/ToolEvidenceGate.d.ts +39 -0
  52. package/dist/tools/ToolEvidenceGate.js +117 -0
  53. package/dist/tools/ToolEvidenceGate.js.map +1 -0
  54. package/dist/tools/ToolEvidenceStore.d.ts +58 -0
  55. package/dist/tools/ToolEvidenceStore.js +129 -0
  56. package/dist/tools/ToolEvidenceStore.js.map +1 -0
  57. package/dist/tools/ToolOrchestrator.d.ts +67 -0
  58. package/dist/tools/ToolOrchestrator.js +193 -0
  59. package/dist/tools/ToolOrchestrator.js.map +1 -0
  60. package/dist/tools/ToolPolicy.d.ts +33 -0
  61. package/dist/tools/ToolPolicy.js +157 -0
  62. package/dist/tools/ToolPolicy.js.map +1 -0
  63. package/dist/tools/index.d.ts +5 -0
  64. package/dist/tools/index.js +6 -0
  65. package/dist/tools/index.js.map +1 -0
  66. package/dist/version.d.ts +3 -0
  67. package/dist/version.js +15 -0
  68. package/dist/version.js.map +1 -0
  69. package/dist/workflow/EngineeringStandards.d.ts +212 -0
  70. package/dist/workflow/EngineeringStandards.js +1021 -0
  71. package/dist/workflow/EngineeringStandards.js.map +1 -0
  72. package/dist/workflow/GovernanceTemplatePacks.d.ts +1 -1
  73. package/dist/workflow/GovernanceTemplatePacks.js +101 -18
  74. package/dist/workflow/GovernanceTemplatePacks.js.map +1 -1
  75. package/dist/workflow/GovernanceTemplates.d.ts +1 -1
  76. package/dist/workflow/GovernanceTemplates.js +225 -37
  77. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  78. package/dist/workflow/ResourceGovernance.d.ts +120 -0
  79. package/dist/workflow/ResourceGovernance.js +512 -0
  80. package/dist/workflow/ResourceGovernance.js.map +1 -0
  81. package/dist/workflow/TaskArtifactScaffolder.js +3 -0
  82. package/dist/workflow/TaskArtifactScaffolder.js.map +1 -1
  83. package/dist/workflow/VerificationProfile.d.ts +2 -0
  84. package/dist/workflow/VerificationProfile.js +7 -0
  85. package/dist/workflow/VerificationProfile.js.map +1 -1
  86. package/dist/workflow/index.d.ts +2 -0
  87. package/dist/workflow/index.js +2 -0
  88. package/dist/workflow/index.js.map +1 -1
  89. package/package.json +2 -2
@@ -0,0 +1,67 @@
1
+ import type { SkillPlan } from '../skills/routing/index.js';
2
+ import { type ToolCapabilityEntry, type ToolCapabilityReport } from './ToolCapabilityRegistry.js';
3
+ import { ToolEvidenceStore, type ToolEvidenceAdapter, type ToolEvidenceStatus, type ToolRunEvidence } from './ToolEvidenceStore.js';
4
+ import { type ResolvedToolPolicy } from './ToolPolicy.js';
5
+ export type ToolStepStatus = 'ready' | 'missing' | 'skipped';
6
+ export interface ToolExecutionStep {
7
+ id: string;
8
+ toolId: string;
9
+ domain: string;
10
+ adapter: ToolEvidenceAdapter;
11
+ required: boolean;
12
+ status: ToolStepStatus;
13
+ reason: string;
14
+ capability?: ToolCapabilityEntry;
15
+ }
16
+ export interface ToolExecutionPlan {
17
+ taskId: string;
18
+ taskName: string;
19
+ mode: ResolvedToolPolicy['mode'];
20
+ steps: ToolExecutionStep[];
21
+ blockers: string[];
22
+ warnings: string[];
23
+ }
24
+ export interface ToolPlanInput {
25
+ skillPlan: SkillPlan;
26
+ }
27
+ export interface ToolRunOptions {
28
+ dryRun?: boolean;
29
+ inputs?: Record<string, Record<string, unknown>>;
30
+ }
31
+ export interface ToolStepExecutionResult {
32
+ status: ToolEvidenceStatus;
33
+ outputSummary: string;
34
+ outputPaths: string[];
35
+ exitCode?: number;
36
+ version?: string;
37
+ }
38
+ export interface ToolRunReport {
39
+ taskId: string;
40
+ ok: boolean;
41
+ dryRun: boolean;
42
+ evidence: ToolRunEvidence[];
43
+ blockers: string[];
44
+ warnings: string[];
45
+ }
46
+ export interface ToolOrchestratorOptions {
47
+ projectDir?: string;
48
+ policy?: ResolvedToolPolicy;
49
+ capabilityReport?: ToolCapabilityReport;
50
+ evidenceStore?: ToolEvidenceStore;
51
+ executeStep?: (step: ToolExecutionStep, input: Record<string, unknown>) => Promise<ToolStepExecutionResult>;
52
+ }
53
+ export declare class ToolOrchestrator {
54
+ private projectDir;
55
+ private policy;
56
+ private capabilityReport?;
57
+ private evidenceStore;
58
+ private executeStepImpl?;
59
+ constructor(options?: ToolOrchestratorOptions);
60
+ plan(input: ToolPlanInput): ToolExecutionPlan;
61
+ run(plan: ToolExecutionPlan, options?: ToolRunOptions): Promise<ToolRunReport>;
62
+ private resolveToolIds;
63
+ private isRequired;
64
+ private resolveDomain;
65
+ private executeStep;
66
+ private safetyPolicyForStep;
67
+ }
@@ -0,0 +1,193 @@
1
+ import { inspectToolCapabilities, TOOL_CAPABILITY_CATALOG } from './ToolCapabilityRegistry.js';
2
+ import { ToolEvidenceStore } from './ToolEvidenceStore.js';
3
+ import { requiredToolsForDomains, resolveToolPolicy } from './ToolPolicy.js';
4
+ export class ToolOrchestrator {
5
+ constructor(options = {}) {
6
+ this.projectDir = options.projectDir ?? process.cwd();
7
+ this.policy = options.policy ?? resolveToolPolicy(null);
8
+ this.capabilityReport = options.capabilityReport;
9
+ this.evidenceStore = options.evidenceStore ?? new ToolEvidenceStore({ projectDir: this.projectDir });
10
+ this.executeStepImpl = options.executeStep;
11
+ }
12
+ plan(input) {
13
+ if (this.policy.mode === 'off') {
14
+ return {
15
+ taskId: input.skillPlan.taskId,
16
+ taskName: input.skillPlan.taskName,
17
+ mode: this.policy.mode,
18
+ steps: [],
19
+ blockers: [],
20
+ warnings: ['Tool orchestration is disabled.'],
21
+ };
22
+ }
23
+ const toolIds = this.resolveToolIds(input.skillPlan);
24
+ const capabilityReport = this.capabilityReport ?? inspectToolCapabilities({
25
+ projectDir: this.projectDir,
26
+ toolIds,
27
+ });
28
+ const capabilityById = new Map(capabilityReport.tools.map(tool => [tool.id, tool]));
29
+ const blockers = [];
30
+ const warnings = [...this.policy.warnings];
31
+ const steps = [];
32
+ for (const toolId of toolIds) {
33
+ const capability = capabilityById.get(toolId);
34
+ const required = this.isRequired(toolId, input.skillPlan);
35
+ const status = capability?.installed ? 'ready' : 'missing';
36
+ const step = {
37
+ id: `tool-${steps.length + 1}-${toolId}`,
38
+ toolId,
39
+ domain: this.resolveDomain(toolId, input.skillPlan),
40
+ adapter: adapterForCategory(capability?.category ?? catalogCategory(toolId)),
41
+ required,
42
+ status,
43
+ capability,
44
+ reason: status === 'ready'
45
+ ? 'Tool is available.'
46
+ : capability?.missingReason ?? 'Tool capability is missing or not configured.',
47
+ };
48
+ steps.push(step);
49
+ if (status === 'missing' && required) {
50
+ const message = `Required tool ${toolId} is missing for task ${input.skillPlan.taskId}.`;
51
+ if (this.policy.mode === 'block')
52
+ blockers.push(message);
53
+ else
54
+ warnings.push(message);
55
+ }
56
+ }
57
+ return {
58
+ taskId: input.skillPlan.taskId,
59
+ taskName: input.skillPlan.taskName,
60
+ mode: this.policy.mode,
61
+ steps,
62
+ blockers,
63
+ warnings,
64
+ };
65
+ }
66
+ async run(plan, options = {}) {
67
+ const blockers = [...plan.blockers];
68
+ const warnings = [...plan.warnings];
69
+ const evidence = [];
70
+ if (blockers.length > 0) {
71
+ return {
72
+ taskId: plan.taskId,
73
+ ok: false,
74
+ dryRun: Boolean(options.dryRun),
75
+ evidence,
76
+ blockers,
77
+ warnings,
78
+ };
79
+ }
80
+ for (const step of plan.steps) {
81
+ if (step.status !== 'ready')
82
+ continue;
83
+ const result = options.dryRun
84
+ ? dryRunResult(step)
85
+ : await this.executeStep(step, options.inputs?.[step.toolId] ?? {});
86
+ const record = this.evidenceStore.save({
87
+ taskId: plan.taskId,
88
+ domain: step.domain,
89
+ tool: step.toolId,
90
+ adapter: step.adapter,
91
+ version: result.version ?? step.capability?.version,
92
+ command: step.capability?.command,
93
+ mcpToolName: step.capability?.category === 'mcp' ? step.capability.id : undefined,
94
+ status: result.status,
95
+ exitCode: result.exitCode,
96
+ sanitizedInput: options.inputs?.[step.toolId] ?? {},
97
+ outputSummary: result.outputSummary,
98
+ outputPaths: result.outputPaths,
99
+ safetyPolicy: this.safetyPolicyForStep(step, Boolean(options.dryRun)),
100
+ });
101
+ evidence.push(record);
102
+ if (record.status === 'failed') {
103
+ const message = `Tool ${step.toolId} failed for task ${plan.taskId}.`;
104
+ if (step.required)
105
+ blockers.push(message);
106
+ else
107
+ warnings.push(message);
108
+ }
109
+ }
110
+ return {
111
+ taskId: plan.taskId,
112
+ ok: blockers.length === 0,
113
+ dryRun: Boolean(options.dryRun),
114
+ evidence,
115
+ blockers,
116
+ warnings,
117
+ };
118
+ }
119
+ resolveToolIds(skillPlan) {
120
+ const requiredByDomain = requiredToolsForDomains(this.policy, skillPlan.intents.map(intent => intent.domain))
121
+ .map(tool => tool.id);
122
+ return unique([
123
+ ...skillPlan.requiredSkills,
124
+ ...requiredByDomain,
125
+ ...skillPlan.recommendedSkills.filter(skill => this.policy.tools[skill]?.enabled),
126
+ ]);
127
+ }
128
+ isRequired(toolId, skillPlan) {
129
+ if (skillPlan.requiredSkills.includes(toolId))
130
+ return true;
131
+ const config = this.policy.tools[toolId];
132
+ if (!config)
133
+ return false;
134
+ const domains = new Set(skillPlan.intents.map(intent => intent.domain));
135
+ return config.requiredFor.some(domain => domains.has(domain));
136
+ }
137
+ resolveDomain(toolId, skillPlan) {
138
+ const config = this.policy.tools[toolId];
139
+ const intentDomains = skillPlan.intents.map(intent => intent.domain);
140
+ const requiredDomain = config?.requiredFor.find(domain => intentDomains.includes(domain));
141
+ if (requiredDomain)
142
+ return requiredDomain;
143
+ const recommendedDomain = config?.recommendedFor?.find(domain => intentDomains.includes(domain));
144
+ if (recommendedDomain)
145
+ return recommendedDomain;
146
+ return intentDomains[0] ?? 'general';
147
+ }
148
+ async executeStep(step, input) {
149
+ if (this.executeStepImpl)
150
+ return this.executeStepImpl(step, input);
151
+ return {
152
+ status: 'skipped',
153
+ outputSummary: `No executor configured for ${step.toolId}; evidence recorded as skipped.`,
154
+ outputPaths: [],
155
+ };
156
+ }
157
+ safetyPolicyForStep(step, dryRun) {
158
+ const policies = ['redact-secrets'];
159
+ if (dryRun)
160
+ policies.push('dry-run');
161
+ if (step.adapter === 'browser')
162
+ policies.push('browser-side-effect-boundary');
163
+ if (step.adapter === 'desktop')
164
+ policies.push('desktop-side-effect-boundary');
165
+ if (step.adapter === 'cli')
166
+ policies.push('cli-version-and-exit-code');
167
+ if (step.adapter === 'mcp')
168
+ policies.push('mcp-tool-policy');
169
+ return policies;
170
+ }
171
+ }
172
+ function dryRunResult(step) {
173
+ return {
174
+ status: 'skipped',
175
+ outputSummary: `Dry-run: ${step.toolId} was planned but not executed.`,
176
+ outputPaths: [],
177
+ version: step.capability?.version,
178
+ };
179
+ }
180
+ function adapterForCategory(category) {
181
+ if (category === 'cli')
182
+ return 'cli';
183
+ if (category === 'mcp')
184
+ return 'mcp';
185
+ return 'skill';
186
+ }
187
+ function catalogCategory(toolId) {
188
+ return TOOL_CAPABILITY_CATALOG.find(tool => tool.id === toolId)?.category ?? 'skill';
189
+ }
190
+ function unique(items) {
191
+ return [...new Set(items)];
192
+ }
193
+ //# sourceMappingURL=ToolOrchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolOrchestrator.js","sourceRoot":"","sources":["../../src/tools/ToolOrchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export type ToolOrchestrationMode = 'off' | 'advisory' | 'evidence-required' | 'block';
2
+ export type ToolDestructiveActionPolicy = 'allow' | 'confirm' | 'block';
3
+ export interface ToolPolicyToolConfig {
4
+ enabled: boolean;
5
+ requiredFor: string[];
6
+ recommendedFor?: string[];
7
+ allowedDomains?: string[];
8
+ destructiveActions?: ToolDestructiveActionPolicy;
9
+ command?: string;
10
+ mcpToolName?: string;
11
+ evidenceRequired?: boolean;
12
+ }
13
+ export interface ToolPolicyFile {
14
+ version?: number;
15
+ mode?: ToolOrchestrationMode;
16
+ tools?: Record<string, Partial<ToolPolicyToolConfig>>;
17
+ }
18
+ export interface ResolvedToolPolicy {
19
+ version: number;
20
+ mode: ToolOrchestrationMode;
21
+ tools: Record<string, ToolPolicyToolConfig>;
22
+ warnings: string[];
23
+ }
24
+ export interface RequiredTool {
25
+ id: string;
26
+ config: ToolPolicyToolConfig;
27
+ }
28
+ export declare const DEFAULT_TOOL_POLICY: ResolvedToolPolicy;
29
+ export declare function toolPolicyPath(projectDir?: string, scaleDir?: string): string;
30
+ export declare function loadToolPolicy(projectDir?: string, scaleDir?: string): ResolvedToolPolicy;
31
+ export declare function resolveToolPolicy(input: ToolPolicyFile | null | undefined): ResolvedToolPolicy;
32
+ export declare function requiredToolsForDomains(policy: ResolvedToolPolicy, domains: string[]): RequiredTool[];
33
+ export declare function toolPolicyTemplate(mode?: ToolOrchestrationMode): string;
@@ -0,0 +1,157 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { isAbsolute, join, resolve } from 'node:path';
3
+ export const DEFAULT_TOOL_POLICY = {
4
+ version: 1,
5
+ mode: 'evidence-required',
6
+ warnings: [],
7
+ tools: {
8
+ 'web-access': {
9
+ enabled: true,
10
+ requiredFor: ['webResearch'],
11
+ recommendedFor: ['browserAutomation'],
12
+ destructiveActions: 'block',
13
+ evidenceRequired: true,
14
+ },
15
+ 'frontend-design': {
16
+ enabled: true,
17
+ requiredFor: ['ui'],
18
+ destructiveActions: 'block',
19
+ evidenceRequired: true,
20
+ },
21
+ 'ui-ux-pro-max': {
22
+ enabled: true,
23
+ requiredFor: ['ui'],
24
+ destructiveActions: 'block',
25
+ evidenceRequired: true,
26
+ },
27
+ 'agent-browser': {
28
+ enabled: true,
29
+ requiredFor: ['browserAutomation'],
30
+ recommendedFor: ['ui', 'e2e'],
31
+ allowedDomains: ['localhost', '127.0.0.1'],
32
+ destructiveActions: 'confirm',
33
+ command: 'agent-browser',
34
+ evidenceRequired: true,
35
+ },
36
+ playwright: {
37
+ enabled: true,
38
+ requiredFor: ['e2e'],
39
+ recommendedFor: ['browserAutomation', 'ui'],
40
+ destructiveActions: 'confirm',
41
+ command: 'npx playwright',
42
+ evidenceRequired: true,
43
+ },
44
+ 'mcp-chrome-devtools': {
45
+ enabled: true,
46
+ requiredFor: ['browserAutomation'],
47
+ recommendedFor: ['ui', 'e2e'],
48
+ destructiveActions: 'confirm',
49
+ mcpToolName: 'chrome-devtools',
50
+ evidenceRequired: true,
51
+ },
52
+ 'desktop-cua': {
53
+ enabled: false,
54
+ requiredFor: ['desktopAutomation'],
55
+ destructiveActions: 'block',
56
+ command: 'cua',
57
+ evidenceRequired: true,
58
+ },
59
+ 'codex-cli': {
60
+ enabled: false,
61
+ requiredFor: [],
62
+ recommendedFor: ['externalCli', 'review'],
63
+ destructiveActions: 'block',
64
+ command: 'codex',
65
+ evidenceRequired: true,
66
+ },
67
+ 'gemini-cli': {
68
+ enabled: false,
69
+ requiredFor: [],
70
+ recommendedFor: ['externalCli', 'review'],
71
+ destructiveActions: 'block',
72
+ command: 'gemini',
73
+ evidenceRequired: true,
74
+ },
75
+ 'opencode-cli': {
76
+ enabled: false,
77
+ requiredFor: [],
78
+ recommendedFor: ['externalCli', 'review'],
79
+ destructiveActions: 'block',
80
+ command: 'opencode',
81
+ evidenceRequired: true,
82
+ },
83
+ },
84
+ };
85
+ export function toolPolicyPath(projectDir = process.cwd(), scaleDir = '.scale') {
86
+ const root = isAbsolute(scaleDir) ? scaleDir : join(resolve(projectDir), scaleDir);
87
+ return join(root, 'tools.json');
88
+ }
89
+ export function loadToolPolicy(projectDir = process.cwd(), scaleDir = '.scale') {
90
+ const path = toolPolicyPath(projectDir, scaleDir);
91
+ if (!existsSync(path)) {
92
+ return {
93
+ ...DEFAULT_TOOL_POLICY,
94
+ warnings: [`No tool policy found at ${path}; using built-in defaults.`],
95
+ };
96
+ }
97
+ try {
98
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
99
+ return resolveToolPolicy(parsed);
100
+ }
101
+ catch (error) {
102
+ return {
103
+ ...DEFAULT_TOOL_POLICY,
104
+ warnings: [`Failed to read ${path}: ${error.message}; using built-in defaults.`],
105
+ };
106
+ }
107
+ }
108
+ export function resolveToolPolicy(input) {
109
+ const warnings = [];
110
+ const mode = normalizeMode(input?.mode);
111
+ if (input?.mode && !mode) {
112
+ warnings.push(`Invalid tool policy mode "${String(input.mode)}"; using ${DEFAULT_TOOL_POLICY.mode}.`);
113
+ }
114
+ const tools = {};
115
+ const ids = new Set([...Object.keys(DEFAULT_TOOL_POLICY.tools), ...Object.keys(input?.tools ?? {})]);
116
+ for (const id of ids) {
117
+ const base = DEFAULT_TOOL_POLICY.tools[id] ?? {
118
+ enabled: true,
119
+ requiredFor: [],
120
+ destructiveActions: 'confirm',
121
+ evidenceRequired: true,
122
+ };
123
+ const override = input?.tools?.[id] ?? {};
124
+ tools[id] = {
125
+ ...base,
126
+ ...override,
127
+ requiredFor: override.requiredFor ?? base.requiredFor ?? [],
128
+ recommendedFor: override.recommendedFor ?? base.recommendedFor,
129
+ allowedDomains: override.allowedDomains ?? base.allowedDomains,
130
+ };
131
+ }
132
+ return {
133
+ version: typeof input?.version === 'number' ? input.version : DEFAULT_TOOL_POLICY.version,
134
+ mode: mode ?? DEFAULT_TOOL_POLICY.mode,
135
+ tools,
136
+ warnings,
137
+ };
138
+ }
139
+ export function requiredToolsForDomains(policy, domains) {
140
+ const domainSet = new Set(domains);
141
+ return Object.entries(policy.tools)
142
+ .filter(([, config]) => config.enabled && config.requiredFor.some(domain => domainSet.has(domain)))
143
+ .map(([id, config]) => ({ id, config }));
144
+ }
145
+ export function toolPolicyTemplate(mode = 'evidence-required') {
146
+ return JSON.stringify({
147
+ version: 1,
148
+ mode,
149
+ tools: DEFAULT_TOOL_POLICY.tools,
150
+ }, null, 2) + '\n';
151
+ }
152
+ function normalizeMode(value) {
153
+ if (value === 'off' || value === 'advisory' || value === 'evidence-required' || value === 'block')
154
+ return value;
155
+ return undefined;
156
+ }
157
+ //# sourceMappingURL=ToolPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolPolicy.js","sourceRoot":"","sources":["../../src/tools/ToolPolicy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './ToolPolicy.js';
2
+ export * from './ToolEvidenceStore.js';
3
+ export * from './ToolCapabilityRegistry.js';
4
+ export * from './ToolOrchestrator.js';
5
+ export * from './ToolEvidenceGate.js';
@@ -0,0 +1,6 @@
1
+ export * from './ToolPolicy.js';
2
+ export * from './ToolEvidenceStore.js';
3
+ export * from './ToolCapabilityRegistry.js';
4
+ export * from './ToolOrchestrator.js';
5
+ export * from './ToolEvidenceGate.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export declare const FALLBACK_SCALE_ENGINE_VERSION = "0.15.1";
2
+ export declare function getScaleEngineVersion(): string;
3
+ export declare const SCALE_ENGINE_VERSION: string;
@@ -0,0 +1,15 @@
1
+ import { readFileSync } from 'node:fs';
2
+ export const FALLBACK_SCALE_ENGINE_VERSION = '0.15.1';
3
+ export function getScaleEngineVersion() {
4
+ try {
5
+ const packageJson = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
6
+ return typeof packageJson.version === 'string' && packageJson.version.trim()
7
+ ? packageJson.version
8
+ : FALLBACK_SCALE_ENGINE_VERSION;
9
+ }
10
+ catch {
11
+ return FALLBACK_SCALE_ENGINE_VERSION;
12
+ }
13
+ }
14
+ export const SCALE_ENGINE_VERSION = getScaleEngineVersion();
15
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,MAAM,CAAC,MAAM,6BAA6B,GAAG,QAAQ,CAAA;AAErD,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAC1C,CAAA;QAC1B,OAAO,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;YAC1E,CAAC,CAAC,WAAW,CAAC,OAAO;YACrB,CAAC,CAAC,6BAA6B,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,6BAA6B,CAAA;IACtC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,EAAE,CAAA"}