decibel-tools-mcp 1.0.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.
- package/LICENSE +21 -0
- package/README.md +335 -0
- package/dist/agentic/compiler.d.ts +21 -0
- package/dist/agentic/compiler.d.ts.map +1 -0
- package/dist/agentic/compiler.js +267 -0
- package/dist/agentic/compiler.js.map +1 -0
- package/dist/agentic/golden.d.ts +25 -0
- package/dist/agentic/golden.d.ts.map +1 -0
- package/dist/agentic/golden.js +255 -0
- package/dist/agentic/golden.js.map +1 -0
- package/dist/agentic/index.d.ts +17 -0
- package/dist/agentic/index.d.ts.map +1 -0
- package/dist/agentic/index.js +153 -0
- package/dist/agentic/index.js.map +1 -0
- package/dist/agentic/linter.d.ts +20 -0
- package/dist/agentic/linter.d.ts.map +1 -0
- package/dist/agentic/linter.js +340 -0
- package/dist/agentic/linter.js.map +1 -0
- package/dist/agentic/renderer.d.ts +17 -0
- package/dist/agentic/renderer.d.ts.map +1 -0
- package/dist/agentic/renderer.js +277 -0
- package/dist/agentic/renderer.js.map +1 -0
- package/dist/agentic/types.d.ts +199 -0
- package/dist/agentic/types.d.ts.map +1 -0
- package/dist/agentic/types.js +8 -0
- package/dist/agentic/types.js.map +1 -0
- package/dist/architectAdrs.d.ts +19 -0
- package/dist/architectAdrs.d.ts.map +1 -0
- package/dist/architectAdrs.js +123 -0
- package/dist/architectAdrs.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -0
- package/dist/dataRoot.d.ts +45 -0
- package/dist/dataRoot.d.ts.map +1 -0
- package/dist/dataRoot.js +201 -0
- package/dist/dataRoot.js.map +1 -0
- package/dist/decibelPaths.d.ts +42 -0
- package/dist/decibelPaths.d.ts.map +1 -0
- package/dist/decibelPaths.js +150 -0
- package/dist/decibelPaths.js.map +1 -0
- package/dist/httpServer.d.ts +49 -0
- package/dist/httpServer.d.ts.map +1 -0
- package/dist/httpServer.js +1472 -0
- package/dist/httpServer.js.map +1 -0
- package/dist/lib/benchmark.d.ts +110 -0
- package/dist/lib/benchmark.d.ts.map +1 -0
- package/dist/lib/benchmark.js +338 -0
- package/dist/lib/benchmark.js.map +1 -0
- package/dist/lib/supabase.d.ts +123 -0
- package/dist/lib/supabase.d.ts.map +1 -0
- package/dist/lib/supabase.js +91 -0
- package/dist/lib/supabase.js.map +1 -0
- package/dist/projectPaths.d.ts +27 -0
- package/dist/projectPaths.d.ts.map +1 -0
- package/dist/projectPaths.js +86 -0
- package/dist/projectPaths.js.map +1 -0
- package/dist/projectRegistry.d.ts +97 -0
- package/dist/projectRegistry.d.ts.map +1 -0
- package/dist/projectRegistry.js +362 -0
- package/dist/projectRegistry.js.map +1 -0
- package/dist/sentinelIssues.d.ts +44 -0
- package/dist/sentinelIssues.d.ts.map +1 -0
- package/dist/sentinelIssues.js +213 -0
- package/dist/sentinelIssues.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +93 -0
- package/dist/server.js.map +1 -0
- package/dist/test.d.ts +7 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +77 -0
- package/dist/test.js.map +1 -0
- package/dist/tools/agentic/index.d.ts +7 -0
- package/dist/tools/agentic/index.d.ts.map +1 -0
- package/dist/tools/agentic/index.js +180 -0
- package/dist/tools/agentic/index.js.map +1 -0
- package/dist/tools/architect/index.d.ts +9 -0
- package/dist/tools/architect/index.d.ts.map +1 -0
- package/dist/tools/architect/index.js +383 -0
- package/dist/tools/architect/index.js.map +1 -0
- package/dist/tools/architect.d.ts +19 -0
- package/dist/tools/architect.d.ts.map +1 -0
- package/dist/tools/architect.js +88 -0
- package/dist/tools/architect.js.map +1 -0
- package/dist/tools/bench.d.ts +89 -0
- package/dist/tools/bench.d.ts.map +1 -0
- package/dist/tools/bench.js +826 -0
- package/dist/tools/bench.js.map +1 -0
- package/dist/tools/context/index.d.ts +11 -0
- package/dist/tools/context/index.d.ts.map +1 -0
- package/dist/tools/context/index.js +439 -0
- package/dist/tools/context/index.js.map +1 -0
- package/dist/tools/context.d.ts +146 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +481 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/crit.d.ts +63 -0
- package/dist/tools/crit.d.ts.map +1 -0
- package/dist/tools/crit.js +159 -0
- package/dist/tools/crit.js.map +1 -0
- package/dist/tools/data-inspector.d.ts +188 -0
- package/dist/tools/data-inspector.d.ts.map +1 -0
- package/dist/tools/data-inspector.js +650 -0
- package/dist/tools/data-inspector.js.map +1 -0
- package/dist/tools/deck.d.ts +11 -0
- package/dist/tools/deck.d.ts.map +1 -0
- package/dist/tools/deck.js +170 -0
- package/dist/tools/deck.js.map +1 -0
- package/dist/tools/designer/index.d.ts +6 -0
- package/dist/tools/designer/index.d.ts.map +1 -0
- package/dist/tools/designer/index.js +177 -0
- package/dist/tools/designer/index.js.map +1 -0
- package/dist/tools/designer.d.ts +20 -0
- package/dist/tools/designer.d.ts.map +1 -0
- package/dist/tools/designer.js +75 -0
- package/dist/tools/designer.js.map +1 -0
- package/dist/tools/dojo/index.d.ts +13 -0
- package/dist/tools/dojo/index.d.ts.map +1 -0
- package/dist/tools/dojo/index.js +547 -0
- package/dist/tools/dojo/index.js.map +1 -0
- package/dist/tools/dojo.d.ts +254 -0
- package/dist/tools/dojo.d.ts.map +1 -0
- package/dist/tools/dojo.js +933 -0
- package/dist/tools/dojo.js.map +1 -0
- package/dist/tools/dojoBench.d.ts +49 -0
- package/dist/tools/dojoBench.d.ts.map +1 -0
- package/dist/tools/dojoBench.js +205 -0
- package/dist/tools/dojoBench.js.map +1 -0
- package/dist/tools/dojoGraduated.d.ts +50 -0
- package/dist/tools/dojoGraduated.d.ts.map +1 -0
- package/dist/tools/dojoGraduated.js +174 -0
- package/dist/tools/dojoGraduated.js.map +1 -0
- package/dist/tools/dojoPolicy.d.ts +65 -0
- package/dist/tools/dojoPolicy.d.ts.map +1 -0
- package/dist/tools/dojoPolicy.js +263 -0
- package/dist/tools/dojoPolicy.js.map +1 -0
- package/dist/tools/friction/index.d.ts +7 -0
- package/dist/tools/friction/index.d.ts.map +1 -0
- package/dist/tools/friction/index.js +239 -0
- package/dist/tools/friction/index.js.map +1 -0
- package/dist/tools/friction.d.ts +82 -0
- package/dist/tools/friction.d.ts.map +1 -0
- package/dist/tools/friction.js +331 -0
- package/dist/tools/friction.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +52 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/learnings/index.d.ts +5 -0
- package/dist/tools/learnings/index.d.ts.map +1 -0
- package/dist/tools/learnings/index.js +123 -0
- package/dist/tools/learnings/index.js.map +1 -0
- package/dist/tools/learnings.d.ts +41 -0
- package/dist/tools/learnings.d.ts.map +1 -0
- package/dist/tools/learnings.js +149 -0
- package/dist/tools/learnings.js.map +1 -0
- package/dist/tools/oracle/index.d.ts +5 -0
- package/dist/tools/oracle/index.d.ts.map +1 -0
- package/dist/tools/oracle/index.js +97 -0
- package/dist/tools/oracle/index.js.map +1 -0
- package/dist/tools/oracle.d.ts +90 -0
- package/dist/tools/oracle.d.ts.map +1 -0
- package/dist/tools/oracle.js +529 -0
- package/dist/tools/oracle.js.map +1 -0
- package/dist/tools/policy.d.ts +119 -0
- package/dist/tools/policy.d.ts.map +1 -0
- package/dist/tools/policy.js +406 -0
- package/dist/tools/policy.js.map +1 -0
- package/dist/tools/provenance/index.d.ts +4 -0
- package/dist/tools/provenance/index.d.ts.map +1 -0
- package/dist/tools/provenance/index.js +58 -0
- package/dist/tools/provenance/index.js.map +1 -0
- package/dist/tools/provenance.d.ts +75 -0
- package/dist/tools/provenance.d.ts.map +1 -0
- package/dist/tools/provenance.js +197 -0
- package/dist/tools/provenance.js.map +1 -0
- package/dist/tools/rateLimiter.d.ts +45 -0
- package/dist/tools/rateLimiter.d.ts.map +1 -0
- package/dist/tools/rateLimiter.js +91 -0
- package/dist/tools/rateLimiter.js.map +1 -0
- package/dist/tools/registry/index.d.ts +10 -0
- package/dist/tools/registry/index.d.ts.map +1 -0
- package/dist/tools/registry/index.js +467 -0
- package/dist/tools/registry/index.js.map +1 -0
- package/dist/tools/registry.d.ts +3 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +189 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/roadmap/index.d.ts +9 -0
- package/dist/tools/roadmap/index.d.ts.map +1 -0
- package/dist/tools/roadmap/index.js +250 -0
- package/dist/tools/roadmap/index.js.map +1 -0
- package/dist/tools/roadmap.d.ts +88 -0
- package/dist/tools/roadmap.d.ts.map +1 -0
- package/dist/tools/roadmap.js +365 -0
- package/dist/tools/roadmap.js.map +1 -0
- package/dist/tools/sentinel/index.d.ts +19 -0
- package/dist/tools/sentinel/index.d.ts.map +1 -0
- package/dist/tools/sentinel/index.js +832 -0
- package/dist/tools/sentinel/index.js.map +1 -0
- package/dist/tools/sentinel-scan-data.d.ts +90 -0
- package/dist/tools/sentinel-scan-data.d.ts.map +1 -0
- package/dist/tools/sentinel-scan-data.js +122 -0
- package/dist/tools/sentinel-scan-data.js.map +1 -0
- package/dist/tools/sentinel.d.ts +156 -0
- package/dist/tools/sentinel.d.ts.map +1 -0
- package/dist/tools/sentinel.js +603 -0
- package/dist/tools/sentinel.js.map +1 -0
- package/dist/tools/shared/index.d.ts +4 -0
- package/dist/tools/shared/index.d.ts.map +1 -0
- package/dist/tools/shared/index.js +7 -0
- package/dist/tools/shared/index.js.map +1 -0
- package/dist/tools/shared/project.d.ts +17 -0
- package/dist/tools/shared/project.d.ts.map +1 -0
- package/dist/tools/shared/project.js +36 -0
- package/dist/tools/shared/project.js.map +1 -0
- package/dist/tools/shared/response.d.ts +10 -0
- package/dist/tools/shared/response.d.ts.map +1 -0
- package/dist/tools/shared/response.js +36 -0
- package/dist/tools/shared/response.js.map +1 -0
- package/dist/tools/shared/validation.d.ts +10 -0
- package/dist/tools/shared/validation.d.ts.map +1 -0
- package/dist/tools/shared/validation.js +26 -0
- package/dist/tools/shared/validation.js.map +1 -0
- package/dist/tools/studio/cloud-spine.d.ts +27 -0
- package/dist/tools/studio/cloud-spine.d.ts.map +1 -0
- package/dist/tools/studio/cloud-spine.js +773 -0
- package/dist/tools/studio/cloud-spine.js.map +1 -0
- package/dist/tools/studio/index.d.ts +154 -0
- package/dist/tools/studio/index.d.ts.map +1 -0
- package/dist/tools/studio/index.js +525 -0
- package/dist/tools/studio/index.js.map +1 -0
- package/dist/tools/testSpec.d.ts +122 -0
- package/dist/tools/testSpec.d.ts.map +1 -0
- package/dist/tools/testSpec.js +525 -0
- package/dist/tools/testSpec.js.map +1 -0
- package/dist/tools/toolsIndex.d.ts +5 -0
- package/dist/tools/toolsIndex.d.ts.map +1 -0
- package/dist/tools/toolsIndex.js +37 -0
- package/dist/tools/toolsIndex.js.map +1 -0
- package/dist/tools/types.d.ts +30 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +7 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/voice/index.d.ts +8 -0
- package/dist/tools/voice/index.d.ts.map +1 -0
- package/dist/tools/voice/index.js +176 -0
- package/dist/tools/voice/index.js.map +1 -0
- package/dist/tools/voice.d.ts +291 -0
- package/dist/tools/voice.d.ts.map +1 -0
- package/dist/tools/voice.js +734 -0
- package/dist/tools/voice.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dojo Policy Enforcement
|
|
3
|
+
*
|
|
4
|
+
* Loads and enforces role-based access control for Dojo tools.
|
|
5
|
+
* Ensures Mother and other AI callers can only access sandbox-safe operations.
|
|
6
|
+
*/
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import { parse as parseYaml } from 'yaml';
|
|
10
|
+
import { log } from '../config.js';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Default Policy (fallback if file not found)
|
|
13
|
+
// ============================================================================
|
|
14
|
+
const DEFAULT_POLICY = {
|
|
15
|
+
roles: {
|
|
16
|
+
human: {
|
|
17
|
+
description: 'Full Dojo access',
|
|
18
|
+
allowed_tools: ['*'],
|
|
19
|
+
sandbox: {
|
|
20
|
+
fs_read: ['**'],
|
|
21
|
+
fs_write: ['**'],
|
|
22
|
+
exec_allowlist: ['*'],
|
|
23
|
+
net: true,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
mother: {
|
|
27
|
+
description: 'Mother AI - sandbox-only',
|
|
28
|
+
allowed_tools: [
|
|
29
|
+
'dojo_add_wish',
|
|
30
|
+
'dojo_list_wishes',
|
|
31
|
+
'dojo_create_proposal',
|
|
32
|
+
'dojo_list',
|
|
33
|
+
'dojo_scaffold_experiment',
|
|
34
|
+
'dojo_run_experiment',
|
|
35
|
+
'dojo_get_results',
|
|
36
|
+
'dojo_can_graduate',
|
|
37
|
+
],
|
|
38
|
+
denied_tools: [
|
|
39
|
+
'dojo_enable_experiment',
|
|
40
|
+
'dojo_disable_experiment',
|
|
41
|
+
'dojo_graduate_experiment',
|
|
42
|
+
],
|
|
43
|
+
sandbox: {
|
|
44
|
+
fs_read: ['{DOJO_ROOT}/**'],
|
|
45
|
+
fs_write: ['{DOJO_ROOT}/results/**', '{DOJO_ROOT}/wishes/**', '{DOJO_ROOT}/proposals/**'],
|
|
46
|
+
exec_allowlist: ['python', 'python3', 'node', 'rg', 'git'],
|
|
47
|
+
net: false,
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
ai: {
|
|
51
|
+
description: 'Generic AI caller',
|
|
52
|
+
allowed_tools: [],
|
|
53
|
+
inherits: 'mother',
|
|
54
|
+
sandbox: {
|
|
55
|
+
fs_read: [],
|
|
56
|
+
fs_write: [],
|
|
57
|
+
exec_allowlist: [],
|
|
58
|
+
net: false,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
default_role: 'human',
|
|
63
|
+
safety: {
|
|
64
|
+
never_expose_to_ai: [
|
|
65
|
+
'dojo_enable_experiment',
|
|
66
|
+
'dojo_disable_experiment',
|
|
67
|
+
'dojo_graduate_experiment',
|
|
68
|
+
],
|
|
69
|
+
always_sandbox_run: true,
|
|
70
|
+
results_write_fence: '{DOJO_ROOT}/results/**',
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
// ============================================================================
|
|
74
|
+
// Policy Loader (singleton)
|
|
75
|
+
// ============================================================================
|
|
76
|
+
let cachedPolicy = null;
|
|
77
|
+
/**
|
|
78
|
+
* Load the Dojo policy from .decibel/dojo_policy.yaml
|
|
79
|
+
* Falls back to default policy if file not found
|
|
80
|
+
*/
|
|
81
|
+
export function loadDojoPolicy(forceReload = false) {
|
|
82
|
+
if (cachedPolicy && !forceReload) {
|
|
83
|
+
return cachedPolicy;
|
|
84
|
+
}
|
|
85
|
+
const policyPaths = [
|
|
86
|
+
path.join(process.cwd(), '.decibel', 'dojo_policy.yaml'),
|
|
87
|
+
path.join(process.cwd(), 'dojo_policy.yaml'),
|
|
88
|
+
];
|
|
89
|
+
for (const policyPath of policyPaths) {
|
|
90
|
+
try {
|
|
91
|
+
if (fs.existsSync(policyPath)) {
|
|
92
|
+
const content = fs.readFileSync(policyPath, 'utf-8');
|
|
93
|
+
const parsed = parseYaml(content);
|
|
94
|
+
cachedPolicy = mergeWithDefaults(parsed);
|
|
95
|
+
log(`dojoPolicy: Loaded policy from ${policyPath}`);
|
|
96
|
+
return cachedPolicy;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
101
|
+
log(`dojoPolicy: Failed to load ${policyPath}: ${message}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
log('dojoPolicy: Using default policy (no policy file found)');
|
|
105
|
+
cachedPolicy = DEFAULT_POLICY;
|
|
106
|
+
return cachedPolicy;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Merge loaded policy with defaults to ensure all fields exist
|
|
110
|
+
*/
|
|
111
|
+
function mergeWithDefaults(loaded) {
|
|
112
|
+
return {
|
|
113
|
+
roles: { ...DEFAULT_POLICY.roles, ...loaded.roles },
|
|
114
|
+
default_role: loaded.default_role || DEFAULT_POLICY.default_role,
|
|
115
|
+
safety: { ...DEFAULT_POLICY.safety, ...loaded.safety },
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
// ============================================================================
|
|
119
|
+
// Policy Enforcement
|
|
120
|
+
// ============================================================================
|
|
121
|
+
/**
|
|
122
|
+
* Resolve a role, handling inheritance
|
|
123
|
+
*/
|
|
124
|
+
function resolveRole(roleName, policy) {
|
|
125
|
+
const role = policy.roles[roleName];
|
|
126
|
+
if (!role) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
// Handle inheritance
|
|
130
|
+
if (role.inherits && policy.roles[role.inherits]) {
|
|
131
|
+
const parent = resolveRole(role.inherits, policy);
|
|
132
|
+
if (parent) {
|
|
133
|
+
return {
|
|
134
|
+
...parent,
|
|
135
|
+
...role,
|
|
136
|
+
allowed_tools: role.allowed_tools.length > 0 ? role.allowed_tools : parent.allowed_tools,
|
|
137
|
+
denied_tools: [...(parent.denied_tools || []), ...(role.denied_tools || [])],
|
|
138
|
+
sandbox: {
|
|
139
|
+
...parent.sandbox,
|
|
140
|
+
...role.sandbox,
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return role;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Check if a caller role is allowed to use a specific tool
|
|
149
|
+
*/
|
|
150
|
+
export function checkToolAccess(toolName, callerRole = 'human') {
|
|
151
|
+
const policy = loadDojoPolicy();
|
|
152
|
+
// Check safety: never expose certain tools to AI
|
|
153
|
+
if (callerRole !== 'human' && policy.safety.never_expose_to_ai.includes(toolName)) {
|
|
154
|
+
return {
|
|
155
|
+
allowed: false,
|
|
156
|
+
reason: `Tool "${toolName}" is never allowed for AI callers`,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
// Get role policy
|
|
160
|
+
const role = resolveRole(callerRole, policy);
|
|
161
|
+
if (!role) {
|
|
162
|
+
// Unknown role - use default
|
|
163
|
+
const defaultRole = resolveRole(policy.default_role, policy);
|
|
164
|
+
if (!defaultRole) {
|
|
165
|
+
return { allowed: false, reason: 'Unknown role and no default role configured' };
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const effectiveRole = role || resolveRole(policy.default_role, policy);
|
|
169
|
+
// Check denied list first
|
|
170
|
+
if (effectiveRole.denied_tools?.includes(toolName)) {
|
|
171
|
+
return {
|
|
172
|
+
allowed: false,
|
|
173
|
+
reason: `Tool "${toolName}" is explicitly denied for role "${callerRole}"`,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// Check allowed list
|
|
177
|
+
const isAllowed = effectiveRole.allowed_tools.includes('*') || effectiveRole.allowed_tools.includes(toolName);
|
|
178
|
+
if (!isAllowed) {
|
|
179
|
+
return {
|
|
180
|
+
allowed: false,
|
|
181
|
+
reason: `Tool "${toolName}" is not in allowed list for role "${callerRole}"`,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
allowed: true,
|
|
186
|
+
sandbox: effectiveRole.sandbox,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get the sandbox policy for a caller role
|
|
191
|
+
*/
|
|
192
|
+
export function getSandboxPolicy(callerRole = 'human') {
|
|
193
|
+
const policy = loadDojoPolicy();
|
|
194
|
+
const role = resolveRole(callerRole, policy);
|
|
195
|
+
if (!role) {
|
|
196
|
+
// Strictest sandbox for unknown roles
|
|
197
|
+
return {
|
|
198
|
+
fs_read: [],
|
|
199
|
+
fs_write: [],
|
|
200
|
+
exec_allowlist: [],
|
|
201
|
+
net: false,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
return role.sandbox;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Expand sandbox path patterns with actual Dojo root
|
|
208
|
+
*/
|
|
209
|
+
export function expandSandboxPaths(sandbox, dojoRoot) {
|
|
210
|
+
const expand = (patterns) => patterns.map((p) => p.replace('{DOJO_ROOT}', dojoRoot));
|
|
211
|
+
return {
|
|
212
|
+
fs_read: expand(sandbox.fs_read),
|
|
213
|
+
fs_write: expand(sandbox.fs_write),
|
|
214
|
+
exec_allowlist: sandbox.exec_allowlist,
|
|
215
|
+
net: sandbox.net,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Check if a path is allowed for writing under the sandbox policy
|
|
220
|
+
*/
|
|
221
|
+
export function isWriteAllowed(targetPath, sandbox) {
|
|
222
|
+
const normalizedTarget = path.normalize(targetPath);
|
|
223
|
+
for (const pattern of sandbox.fs_write) {
|
|
224
|
+
// Simple glob matching (supports ** and *)
|
|
225
|
+
const regexPattern = pattern
|
|
226
|
+
.replace(/\*\*/g, '.*')
|
|
227
|
+
.replace(/\*/g, '[^/]*')
|
|
228
|
+
.replace(/\//g, '\\/');
|
|
229
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
230
|
+
if (regex.test(normalizedTarget)) {
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
// Also check if target is under the pattern directory
|
|
234
|
+
const patternDir = pattern.replace(/\/\*\*$/, '').replace(/\/\*$/, '');
|
|
235
|
+
if (normalizedTarget.startsWith(path.normalize(patternDir))) {
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Check if an executable is allowed under the sandbox policy
|
|
243
|
+
*/
|
|
244
|
+
export function isExecAllowed(executable, sandbox) {
|
|
245
|
+
if (sandbox.exec_allowlist.includes('*')) {
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
const baseName = path.basename(executable);
|
|
249
|
+
return sandbox.exec_allowlist.includes(baseName) || sandbox.exec_allowlist.includes(executable);
|
|
250
|
+
}
|
|
251
|
+
// ============================================================================
|
|
252
|
+
// Convenience: Enforce or throw
|
|
253
|
+
// ============================================================================
|
|
254
|
+
/**
|
|
255
|
+
* Enforce tool access - throws if not allowed
|
|
256
|
+
*/
|
|
257
|
+
export function enforceToolAccess(toolName, callerRole = 'human') {
|
|
258
|
+
const result = checkToolAccess(toolName, callerRole);
|
|
259
|
+
if (!result.allowed) {
|
|
260
|
+
throw new Error(`Access denied: ${result.reason}`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=dojoPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dojoPolicy.js","sourceRoot":"","sources":["../../src/tools/dojoPolicy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAyCnC,+EAA+E;AAC/E,8CAA8C;AAC9C,+EAA+E;AAE/E,MAAM,cAAc,GAAe;IACjC,KAAK,EAAE;QACL,KAAK,EAAE;YACL,WAAW,EAAE,kBAAkB;YAC/B,aAAa,EAAE,CAAC,GAAG,CAAC;YACpB,OAAO,EAAE;gBACP,OAAO,EAAE,CAAC,IAAI,CAAC;gBACf,QAAQ,EAAE,CAAC,IAAI,CAAC;gBAChB,cAAc,EAAE,CAAC,GAAG,CAAC;gBACrB,GAAG,EAAE,IAAI;aACV;SACF;QACD,MAAM,EAAE;YACN,WAAW,EAAE,0BAA0B;YACvC,aAAa,EAAE;gBACb,eAAe;gBACf,kBAAkB;gBAClB,sBAAsB;gBACtB,WAAW;gBACX,0BAA0B;gBAC1B,qBAAqB;gBACrB,kBAAkB;gBAClB,mBAAmB;aACpB;YACD,YAAY,EAAE;gBACZ,wBAAwB;gBACxB,yBAAyB;gBACzB,0BAA0B;aAC3B;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,CAAC,gBAAgB,CAAC;gBAC3B,QAAQ,EAAE,CAAC,wBAAwB,EAAE,uBAAuB,EAAE,0BAA0B,CAAC;gBACzF,cAAc,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC;gBAC1D,GAAG,EAAE,KAAK;aACX;SACF;QACD,EAAE,EAAE;YACF,WAAW,EAAE,mBAAmB;YAChC,aAAa,EAAE,EAAE;YACjB,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE;gBACP,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,EAAE;gBACZ,cAAc,EAAE,EAAE;gBAClB,GAAG,EAAE,KAAK;aACX;SACF;KACF;IACD,YAAY,EAAE,OAAO;IACrB,MAAM,EAAE;QACN,kBAAkB,EAAE;YAClB,wBAAwB;YACxB,yBAAyB;YACzB,0BAA0B;SAC3B;QACD,kBAAkB,EAAE,IAAI;QACxB,mBAAmB,EAAE,wBAAwB;KAC9C;CACF,CAAC;AAEF,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E,IAAI,YAAY,GAAsB,IAAI,CAAC;AAE3C;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,WAAW,GAAG,KAAK;IAChD,IAAI,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,WAAW,GAAG;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,kBAAkB,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC;KAC7C,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACrD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAe,CAAC;gBAChD,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBACzC,GAAG,CAAC,kCAAkC,UAAU,EAAE,CAAC,CAAC;gBACpD,OAAO,YAAY,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,GAAG,CAAC,8BAA8B,UAAU,KAAK,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,GAAG,CAAC,yDAAyD,CAAC,CAAC;IAC/D,YAAY,GAAG,cAAc,CAAC;IAC9B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAA2B;IACpD,OAAO;QACL,KAAK,EAAE,EAAE,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE;QACnD,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,cAAc,CAAC,YAAY;QAChE,MAAM,EAAE,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE;KACvD,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,WAAW,CAAC,QAAgB,EAAE,MAAkB;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,GAAG,MAAM;gBACT,GAAG,IAAI;gBACP,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa;gBACxF,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;gBAC5E,OAAO,EAAE;oBACP,GAAG,MAAM,CAAC,OAAO;oBACjB,GAAG,IAAI,CAAC,OAAO;iBAChB;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,aAAyB,OAAO;IAEhC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAEhC,iDAAiD;IACjD,IAAI,UAAU,KAAK,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClF,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,SAAS,QAAQ,mCAAmC;SAC7D,CAAC;IACJ,CAAC;IAED,kBAAkB;IAClB,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,6BAA6B;QAC7B,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,6CAA6C,EAAE,CAAC;QACnF,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAE,CAAC;IAExE,0BAA0B;IAC1B,IAAI,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,SAAS,QAAQ,oCAAoC,UAAU,GAAG;SAC3E,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,MAAM,SAAS,GACb,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE9F,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,SAAS,QAAQ,sCAAsC,UAAU,GAAG;SAC7E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,aAAa,CAAC,OAAO;KAC/B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,aAAyB,OAAO;IAC/D,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,sCAAsC;QACtC,OAAO;YACL,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,EAAE;YACZ,cAAc,EAAE,EAAE;YAClB,GAAG,EAAE,KAAK;SACX,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAsB,EAAE,QAAgB;IACzE,MAAM,MAAM,GAAG,CAAC,QAAkB,EAAY,EAAE,CAC9C,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE1D,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QAChC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QAClC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,OAAsB;IACvE,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAEpD,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvC,2CAA2C;QAC3C,MAAM,YAAY,GAAG,OAAO;aACzB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;aACtB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;aACvB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEzB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sDAAsD;QACtD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,OAAsB;IACtE,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAClG,CAAC;AAED,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,aAAyB,OAAO;IAClF,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,kBAAkB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ToolSpec } from '../types.js';
|
|
2
|
+
export declare const frictionLogTool: ToolSpec;
|
|
3
|
+
export declare const frictionListTool: ToolSpec;
|
|
4
|
+
export declare const frictionResolveTool: ToolSpec;
|
|
5
|
+
export declare const frictionBumpTool: ToolSpec;
|
|
6
|
+
export declare const frictionTools: ToolSpec[];
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/friction/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA4BvC,eAAO,MAAM,eAAe,EAAE,QAiE7B,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,QAiD9B,CAAC;AAMF,eAAO,MAAM,mBAAmB,EAAE,QA8CjC,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,QA0C9B,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,QAAQ,EAKnC,CAAC"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Friction Domain Tools
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Tools for tracking persistent pain points and friction in workflows.
|
|
5
|
+
// ============================================================================
|
|
6
|
+
import { toolSuccess, toolError, requireFields } from '../shared/index.js';
|
|
7
|
+
import { logFriction, listFriction, resolveFriction, bumpFriction, } from '../friction.js';
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Types
|
|
10
|
+
// ============================================================================
|
|
11
|
+
const VALID_FREQUENCIES = ['once', 'occasional', 'frequent', 'constant'];
|
|
12
|
+
const VALID_IMPACTS = ['low', 'medium', 'high', 'blocking'];
|
|
13
|
+
const VALID_STATUSES = ['open', 'acknowledged', 'solving', 'resolved', 'wontfix'];
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Log Friction Tool
|
|
16
|
+
// ============================================================================
|
|
17
|
+
export const frictionLogTool = {
|
|
18
|
+
definition: {
|
|
19
|
+
name: 'friction_log',
|
|
20
|
+
description: 'Log a persistent friction point or pain point. Both humans and agents can call this to track recurring issues that erode productivity. Signal strength increases when similar friction is logged multiple times.',
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
projectId: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'Optional project identifier. Uses default project if not specified.',
|
|
27
|
+
},
|
|
28
|
+
context: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
description: 'Where the friction occurs (project name, repo, system, or workflow)',
|
|
31
|
+
},
|
|
32
|
+
description: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
description: 'What the friction is - the pain point or recurring issue',
|
|
35
|
+
},
|
|
36
|
+
frequency: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
enum: ['once', 'occasional', 'frequent', 'constant'],
|
|
39
|
+
description: 'How often this friction is encountered (default: occasional)',
|
|
40
|
+
},
|
|
41
|
+
impact: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
enum: ['low', 'medium', 'high', 'blocking'],
|
|
44
|
+
description: 'How much this friction affects productivity (default: medium)',
|
|
45
|
+
},
|
|
46
|
+
source: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
enum: ['human', 'agent'],
|
|
49
|
+
description: 'Who is logging this friction (default: human)',
|
|
50
|
+
},
|
|
51
|
+
tags: {
|
|
52
|
+
type: 'array',
|
|
53
|
+
items: { type: 'string' },
|
|
54
|
+
description: 'Tags for categorization and searchability',
|
|
55
|
+
},
|
|
56
|
+
workaround: {
|
|
57
|
+
type: 'string',
|
|
58
|
+
description: 'Any current workaround being used',
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
required: ['context', 'description'],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
handler: async (args) => {
|
|
65
|
+
try {
|
|
66
|
+
const input = args;
|
|
67
|
+
requireFields(input, 'context', 'description');
|
|
68
|
+
if (input.frequency && !VALID_FREQUENCIES.includes(input.frequency)) {
|
|
69
|
+
throw new Error(`Invalid frequency. Must be one of: ${VALID_FREQUENCIES.join(', ')}`);
|
|
70
|
+
}
|
|
71
|
+
if (input.impact && !VALID_IMPACTS.includes(input.impact)) {
|
|
72
|
+
throw new Error(`Invalid impact. Must be one of: ${VALID_IMPACTS.join(', ')}`);
|
|
73
|
+
}
|
|
74
|
+
const result = await logFriction(input);
|
|
75
|
+
return toolSuccess(result);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
return toolError(err instanceof Error ? err.message : String(err));
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
// ============================================================================
|
|
83
|
+
// List Friction Tool
|
|
84
|
+
// ============================================================================
|
|
85
|
+
export const frictionListTool = {
|
|
86
|
+
definition: {
|
|
87
|
+
name: 'friction_list',
|
|
88
|
+
description: 'List friction points, sorted by impact and signal count. High-signal friction should be prioritized for resolution.',
|
|
89
|
+
inputSchema: {
|
|
90
|
+
type: 'object',
|
|
91
|
+
properties: {
|
|
92
|
+
projectId: {
|
|
93
|
+
type: 'string',
|
|
94
|
+
description: 'Optional project identifier. Uses default project if not specified.',
|
|
95
|
+
},
|
|
96
|
+
context: {
|
|
97
|
+
type: 'string',
|
|
98
|
+
description: 'Filter by context (project, repo, system)',
|
|
99
|
+
},
|
|
100
|
+
status: {
|
|
101
|
+
type: 'string',
|
|
102
|
+
enum: ['open', 'acknowledged', 'solving', 'resolved', 'wontfix'],
|
|
103
|
+
description: 'Filter by status',
|
|
104
|
+
},
|
|
105
|
+
min_impact: {
|
|
106
|
+
type: 'string',
|
|
107
|
+
enum: ['low', 'medium', 'high', 'blocking'],
|
|
108
|
+
description: 'Minimum impact level to include',
|
|
109
|
+
},
|
|
110
|
+
limit: {
|
|
111
|
+
type: 'integer',
|
|
112
|
+
description: 'Maximum number of results (default: 20)',
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
handler: async (args) => {
|
|
118
|
+
try {
|
|
119
|
+
const input = args;
|
|
120
|
+
if (input.status && !VALID_STATUSES.includes(input.status)) {
|
|
121
|
+
throw new Error(`Invalid status. Must be one of: ${VALID_STATUSES.join(', ')}`);
|
|
122
|
+
}
|
|
123
|
+
if (input.min_impact && !VALID_IMPACTS.includes(input.min_impact)) {
|
|
124
|
+
throw new Error(`Invalid min_impact. Must be one of: ${VALID_IMPACTS.join(', ')}`);
|
|
125
|
+
}
|
|
126
|
+
const result = await listFriction(input);
|
|
127
|
+
return toolSuccess(result);
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
return toolError(err instanceof Error ? err.message : String(err));
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
// ============================================================================
|
|
135
|
+
// Resolve Friction Tool
|
|
136
|
+
// ============================================================================
|
|
137
|
+
export const frictionResolveTool = {
|
|
138
|
+
definition: {
|
|
139
|
+
name: 'friction_resolve',
|
|
140
|
+
description: 'Mark a friction point as resolved. Can include a resolution note and reference to the solution (issue, ADR, commit).',
|
|
141
|
+
inputSchema: {
|
|
142
|
+
type: 'object',
|
|
143
|
+
properties: {
|
|
144
|
+
projectId: {
|
|
145
|
+
type: 'string',
|
|
146
|
+
description: 'Optional project identifier. Uses default project if not specified.',
|
|
147
|
+
},
|
|
148
|
+
friction_id: {
|
|
149
|
+
type: 'string',
|
|
150
|
+
description: 'The friction ID (filename or partial match)',
|
|
151
|
+
},
|
|
152
|
+
resolution: {
|
|
153
|
+
type: 'string',
|
|
154
|
+
description: 'How the friction was resolved',
|
|
155
|
+
},
|
|
156
|
+
solution_ref: {
|
|
157
|
+
type: 'string',
|
|
158
|
+
description: 'Optional reference to the solution (issue ID, ADR, commit SHA, PR)',
|
|
159
|
+
},
|
|
160
|
+
status: {
|
|
161
|
+
type: 'string',
|
|
162
|
+
enum: ['resolved', 'wontfix'],
|
|
163
|
+
description: 'Resolution status (default: resolved)',
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
required: ['friction_id', 'resolution'],
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
handler: async (args) => {
|
|
170
|
+
try {
|
|
171
|
+
const input = args;
|
|
172
|
+
requireFields(input, 'friction_id', 'resolution');
|
|
173
|
+
const result = await resolveFriction(input);
|
|
174
|
+
if ('error' in result) {
|
|
175
|
+
return toolError(JSON.stringify(result, null, 2));
|
|
176
|
+
}
|
|
177
|
+
return toolSuccess(result);
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
return toolError(err instanceof Error ? err.message : String(err));
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
// ============================================================================
|
|
185
|
+
// Bump Friction Tool
|
|
186
|
+
// ============================================================================
|
|
187
|
+
export const frictionBumpTool = {
|
|
188
|
+
definition: {
|
|
189
|
+
name: 'friction_bump',
|
|
190
|
+
description: 'Bump the signal count on an existing friction point. Use when encountering the same friction again. Higher signal = higher priority.',
|
|
191
|
+
inputSchema: {
|
|
192
|
+
type: 'object',
|
|
193
|
+
properties: {
|
|
194
|
+
projectId: {
|
|
195
|
+
type: 'string',
|
|
196
|
+
description: 'Optional project identifier. Uses default project if not specified.',
|
|
197
|
+
},
|
|
198
|
+
friction_id: {
|
|
199
|
+
type: 'string',
|
|
200
|
+
description: 'The friction ID (filename or partial match)',
|
|
201
|
+
},
|
|
202
|
+
source: {
|
|
203
|
+
type: 'string',
|
|
204
|
+
enum: ['human', 'agent'],
|
|
205
|
+
description: 'Who is bumping this friction (default: human)',
|
|
206
|
+
},
|
|
207
|
+
note: {
|
|
208
|
+
type: 'string',
|
|
209
|
+
description: 'Optional note about this occurrence',
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
required: ['friction_id'],
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
handler: async (args) => {
|
|
216
|
+
try {
|
|
217
|
+
const input = args;
|
|
218
|
+
requireFields(input, 'friction_id');
|
|
219
|
+
const result = await bumpFriction(input);
|
|
220
|
+
if ('error' in result) {
|
|
221
|
+
return toolError(JSON.stringify(result, null, 2));
|
|
222
|
+
}
|
|
223
|
+
return toolSuccess(result);
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
return toolError(err instanceof Error ? err.message : String(err));
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
// ============================================================================
|
|
231
|
+
// Export All Tools
|
|
232
|
+
// ============================================================================
|
|
233
|
+
export const frictionTools = [
|
|
234
|
+
frictionLogTool,
|
|
235
|
+
frictionListTool,
|
|
236
|
+
frictionResolveTool,
|
|
237
|
+
frictionBumpTool,
|
|
238
|
+
];
|
|
239
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/friction/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export interface ProjectResolutionError {
|
|
2
|
+
error: 'project_resolution_failed';
|
|
3
|
+
message: string;
|
|
4
|
+
hint: string;
|
|
5
|
+
}
|
|
6
|
+
export type FrictionSource = 'human' | 'agent';
|
|
7
|
+
export type FrictionFrequency = 'once' | 'occasional' | 'frequent' | 'constant';
|
|
8
|
+
export type FrictionImpact = 'low' | 'medium' | 'high' | 'blocking';
|
|
9
|
+
export type FrictionStatus = 'open' | 'acknowledged' | 'solving' | 'resolved' | 'wontfix';
|
|
10
|
+
export interface LogFrictionInput {
|
|
11
|
+
projectId?: string;
|
|
12
|
+
context: string;
|
|
13
|
+
description: string;
|
|
14
|
+
frequency?: FrictionFrequency;
|
|
15
|
+
impact?: FrictionImpact;
|
|
16
|
+
source?: FrictionSource;
|
|
17
|
+
tags?: string[];
|
|
18
|
+
workaround?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface LogFrictionOutput {
|
|
21
|
+
id: string;
|
|
22
|
+
timestamp: string;
|
|
23
|
+
path: string;
|
|
24
|
+
context: string;
|
|
25
|
+
signal_strength: number;
|
|
26
|
+
}
|
|
27
|
+
export interface ListFrictionInput {
|
|
28
|
+
projectId?: string;
|
|
29
|
+
context?: string;
|
|
30
|
+
status?: FrictionStatus;
|
|
31
|
+
min_impact?: FrictionImpact;
|
|
32
|
+
source?: FrictionSource;
|
|
33
|
+
limit?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface FrictionSummary {
|
|
36
|
+
id: string;
|
|
37
|
+
context: string;
|
|
38
|
+
description: string;
|
|
39
|
+
frequency: FrictionFrequency;
|
|
40
|
+
impact: FrictionImpact;
|
|
41
|
+
status: FrictionStatus;
|
|
42
|
+
signal_count: number;
|
|
43
|
+
last_reported: string;
|
|
44
|
+
tags: string[];
|
|
45
|
+
}
|
|
46
|
+
export interface ListFrictionOutput {
|
|
47
|
+
friction: FrictionSummary[];
|
|
48
|
+
total_count: number;
|
|
49
|
+
}
|
|
50
|
+
export interface ResolveFrictionInput {
|
|
51
|
+
projectId?: string;
|
|
52
|
+
friction_id: string;
|
|
53
|
+
resolution: string;
|
|
54
|
+
solution_ref?: string;
|
|
55
|
+
status?: 'resolved' | 'wontfix';
|
|
56
|
+
}
|
|
57
|
+
export interface ResolveFrictionOutput {
|
|
58
|
+
id: string;
|
|
59
|
+
path: string;
|
|
60
|
+
status: FrictionStatus;
|
|
61
|
+
resolved_at: string;
|
|
62
|
+
}
|
|
63
|
+
export interface BumpFrictionInput {
|
|
64
|
+
projectId?: string;
|
|
65
|
+
friction_id: string;
|
|
66
|
+
source?: FrictionSource;
|
|
67
|
+
note?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface BumpFrictionOutput {
|
|
70
|
+
id: string;
|
|
71
|
+
signal_count: number;
|
|
72
|
+
last_reported: string;
|
|
73
|
+
}
|
|
74
|
+
export declare function logFriction(input: LogFrictionInput): Promise<LogFrictionOutput | ProjectResolutionError>;
|
|
75
|
+
export declare function listFriction(input: ListFrictionInput): Promise<ListFrictionOutput | ProjectResolutionError>;
|
|
76
|
+
export declare function resolveFriction(input: ResolveFrictionInput): Promise<ResolveFrictionOutput | ProjectResolutionError | {
|
|
77
|
+
error: string;
|
|
78
|
+
}>;
|
|
79
|
+
export declare function bumpFriction(input: BumpFrictionInput): Promise<BumpFrictionOutput | ProjectResolutionError | {
|
|
80
|
+
error: string;
|
|
81
|
+
}>;
|
|
82
|
+
//# sourceMappingURL=friction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"friction.d.ts","sourceRoot":"","sources":["../../src/tools/friction.ts"],"names":[],"mappings":"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"}
|