@getmarrow/mcp 3.9.50 → 3.9.52
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/README.md +39 -4
- package/dist/cli.js +9 -3
- package/dist/cli.js.map +1 -1
- package/dist/env.d.ts +1 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +38 -10
- package/dist/env.js.map +1 -1
- package/dist/hook-context.d.ts +1 -1
- package/dist/hook-context.d.ts.map +1 -1
- package/dist/hook-context.js +134 -0
- package/dist/hook-context.js.map +1 -1
- package/dist/hook-contract.d.ts +7 -7
- package/dist/hook-contract.d.ts.map +1 -1
- package/dist/hook-contract.js +2 -2
- package/dist/hook-contract.js.map +1 -1
- package/dist/hook-pre-action.d.ts +19 -2
- package/dist/hook-pre-action.d.ts.map +1 -1
- package/dist/hook-pre-action.js +144 -24
- package/dist/hook-pre-action.js.map +1 -1
- package/dist/hook-session.d.ts +1 -1
- package/dist/hook-tool-policy.d.ts +11 -0
- package/dist/hook-tool-policy.d.ts.map +1 -0
- package/dist/hook-tool-policy.js +149 -0
- package/dist/hook-tool-policy.js.map +1 -0
- package/dist/hook.d.ts +3 -2
- package/dist/hook.d.ts.map +1 -1
- package/dist/hook.js +11 -154
- package/dist/hook.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -1
- package/dist/lifecycle-spool.d.ts +2 -0
- package/dist/lifecycle-spool.d.ts.map +1 -1
- package/dist/lifecycle-spool.js +17 -0
- package/dist/lifecycle-spool.js.map +1 -1
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/server.json +2 -2
package/dist/hook-pre-action.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.classifyTool = classifyTool;
|
|
3
4
|
exports.preActionHookOutput = preActionHookOutput;
|
|
4
5
|
exports.installPreActionHook = installPreActionHook;
|
|
5
6
|
exports.runPreActionHookCommand = runPreActionHookCommand;
|
|
6
7
|
const index_1 = require("./index");
|
|
7
8
|
const env_1 = require("./env");
|
|
8
9
|
const lifecycle_spool_1 = require("./lifecycle-spool");
|
|
10
|
+
const hook_tool_policy_1 = require("./hook-tool-policy");
|
|
9
11
|
const hook_contract_1 = require("./hook-contract");
|
|
10
12
|
const MAX_INPUT_BYTES = 64 * 1024;
|
|
11
|
-
const RUNTIME_TIMEOUT_MS =
|
|
13
|
+
const RUNTIME_TIMEOUT_MS = 3000;
|
|
12
14
|
function asRecord(value) {
|
|
13
15
|
return value && typeof value === 'object' && !Array.isArray(value)
|
|
14
16
|
? value
|
|
@@ -28,32 +30,67 @@ async function readStdin() {
|
|
|
28
30
|
}
|
|
29
31
|
function classifyTool(event) {
|
|
30
32
|
const tool = String(event.tool_name || 'tool').slice(0, 64);
|
|
31
|
-
const
|
|
33
|
+
const normalizedTool = (0, hook_tool_policy_1.normalizeHookToolName)(tool);
|
|
34
|
+
const command = (0, hook_tool_policy_1.hookToolCommand)(event);
|
|
35
|
+
const input = `${normalizedTool} ${command} ${JSON.stringify(event.tool_input || {})}`.toLowerCase();
|
|
36
|
+
const readOnly = (0, hook_tool_policy_1.isReadOnlyToolEvent)(event);
|
|
37
|
+
const protectedShellCommand = (0, hook_tool_policy_1.isProtectedShellMutation)(command);
|
|
38
|
+
const infrastructureDeployment = /\b(?:kubectl|terraform|pulumi|helm)\b/.test(command.toLowerCase())
|
|
39
|
+
&& protectedShellCommand;
|
|
32
40
|
let type = 'process';
|
|
33
|
-
if (/\b(?:
|
|
41
|
+
if (/\b(?:publish|unpublish|deprecate)\b/.test(input))
|
|
42
|
+
type = 'publish';
|
|
43
|
+
else if (/\b(?:deploy|release|wrangler)\b/.test(input) || infrastructureDeployment)
|
|
34
44
|
type = 'deploy';
|
|
35
|
-
else if (/\b(?:merge|pull request|git push)\b/.test(input))
|
|
45
|
+
else if (/\b(?:merge|pull request|git push)\b/.test(input) || /\bgit\b[^\n;&|]{0,240}\bpush\b/.test(command.toLowerCase()))
|
|
36
46
|
type = 'review';
|
|
37
47
|
else if (/\b(?:migration|schema|database|d1)\b/.test(input))
|
|
38
48
|
type = 'migration';
|
|
39
49
|
else if (/\b(?:secret|credential|token|key|permission)\b/.test(input))
|
|
40
50
|
type = 'audit';
|
|
51
|
+
else if (/\b(?:payment|refund|charge|invoice|stripe|financial)\b/.test(input))
|
|
52
|
+
type = 'financial';
|
|
41
53
|
const surfaces = [
|
|
42
|
-
/\b(?:deploy|release|production|prod|wrangler)\b/.test(input) ? 'production' : '',
|
|
54
|
+
/\b(?:deploy|release|production|prod|wrangler)\b/.test(input) || infrastructureDeployment ? 'production' : '',
|
|
43
55
|
/\b(?:git|github|merge|pull request|push)\b/.test(input) ? 'github' : '',
|
|
44
56
|
/\b(?:npm|package|publish)\b/.test(input) ? 'npm' : '',
|
|
45
57
|
/\b(?:secret|credential|token|key)\b/.test(input) ? 'secrets' : '',
|
|
58
|
+
/\b(?:migration|schema|database|d1)\b/.test(input) ? 'database' : '',
|
|
59
|
+
/\b(?:payment|refund|charge|invoice|stripe|financial)\b/.test(input) ? 'financial' : '',
|
|
46
60
|
].filter(Boolean);
|
|
47
|
-
const
|
|
61
|
+
const protectedAction = !readOnly && (/\b(?:deploy|release|publish|git\s+push|git\s+merge|gh\s+pr\s+merge|migration|migrate|secret|credential|rotate|revoke|payment|refund|charge|invoice|production|prod)\b/.test(input)
|
|
62
|
+
|| protectedShellCommand
|
|
63
|
+
|| (String(event.tool_name || '').startsWith('mcp__') && !(0, hook_tool_policy_1.isOfficialMarrowMcpTool)(event.tool_name)));
|
|
64
|
+
const risk = readOnly ? 'low' : protectedAction ? 'high' : 'medium';
|
|
65
|
+
const target = surfaces.includes('npm') ? `npm:${type}`
|
|
66
|
+
: surfaces.includes('github') ? `github:${type}`
|
|
67
|
+
: surfaces.includes('production') ? `production:${type}`
|
|
68
|
+
: surfaces.includes('database') ? `database:${type}`
|
|
69
|
+
: surfaces.includes('financial') ? `financial:${type}`
|
|
70
|
+
: surfaces.includes('secrets') ? `secrets:${type}`
|
|
71
|
+
: `workspace:${type}`;
|
|
48
72
|
return {
|
|
49
73
|
action: `classified ${tool} action: ${type} on ${surfaces.join(', ') || 'workspace'}`,
|
|
74
|
+
target,
|
|
50
75
|
type,
|
|
51
|
-
role: ['deploy', 'review', 'migration', 'audit'].includes(type) ? type : 'general',
|
|
76
|
+
role: type === 'publish' ? 'deploy' : ['deploy', 'review', 'migration', 'audit'].includes(type) ? type : 'general',
|
|
52
77
|
surfaces: surfaces.length ? surfaces : ['workspace'],
|
|
53
78
|
risk,
|
|
79
|
+
protected: protectedAction,
|
|
80
|
+
readOnly,
|
|
54
81
|
};
|
|
55
82
|
}
|
|
56
|
-
function preActionHookOutput(
|
|
83
|
+
function preActionHookOutput(result) {
|
|
84
|
+
const { runtime, permit, protectedRisk } = result;
|
|
85
|
+
if (protectedRisk && (!runtime || !permit?.verified)) {
|
|
86
|
+
return {
|
|
87
|
+
hookSpecificOutput: {
|
|
88
|
+
hookEventName: 'PreToolUse',
|
|
89
|
+
permissionDecision: 'deny',
|
|
90
|
+
permissionDecisionReason: result.enforcementError || 'Marrow could not verify the required action permit. Retry after governance is available.',
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
57
94
|
if (!runtime?.risk_gate) {
|
|
58
95
|
return {};
|
|
59
96
|
}
|
|
@@ -70,12 +107,17 @@ function preActionHookOutput(runtime) {
|
|
|
70
107
|
hookSpecificOutput: {
|
|
71
108
|
hookEventName: 'PreToolUse',
|
|
72
109
|
...(permissionDecision ? { permissionDecision, permissionDecisionReason: reason } : {}),
|
|
73
|
-
...(runtime.before_you_act
|
|
110
|
+
...(runtime.before_you_act || permit?.permit_id ? {
|
|
111
|
+
additionalContext: [
|
|
112
|
+
runtime.before_you_act,
|
|
113
|
+
permit?.permit_id ? `Marrow action permit verified: ${permit.permit_id}. Evidence and outcome closure remain required.` : null,
|
|
114
|
+
].filter(Boolean).join('\n'),
|
|
115
|
+
} : {}),
|
|
74
116
|
},
|
|
75
117
|
};
|
|
76
118
|
}
|
|
77
|
-
function emitDecision(
|
|
78
|
-
process.stdout.write(JSON.stringify(preActionHookOutput(
|
|
119
|
+
function emitDecision(result) {
|
|
120
|
+
process.stdout.write(JSON.stringify(preActionHookOutput(result)));
|
|
79
121
|
}
|
|
80
122
|
async function withTimeout(operation) {
|
|
81
123
|
const controller = new AbortController();
|
|
@@ -120,25 +162,47 @@ async function runPreActionHookCommand(input) {
|
|
|
120
162
|
event = raw ? JSON.parse(raw) : {};
|
|
121
163
|
}
|
|
122
164
|
catch {
|
|
123
|
-
|
|
165
|
+
emitDecision({ runtime: null, permit: null, protectedRisk: true, enforcementError: 'Marrow rejected malformed or oversized pre-action input.' });
|
|
124
166
|
return;
|
|
125
167
|
}
|
|
126
168
|
}
|
|
127
169
|
const source = asRecord(event);
|
|
128
170
|
if (!source?.tool_name) {
|
|
171
|
+
emitDecision({ runtime: null, permit: null, protectedRisk: true, enforcementError: 'Marrow could not classify this mutation-capable tool request.' });
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const classified = classifyTool(source);
|
|
175
|
+
if (classified.readOnly) {
|
|
129
176
|
process.stdout.write('{}');
|
|
130
177
|
return;
|
|
131
178
|
}
|
|
132
|
-
|
|
179
|
+
let resolved;
|
|
180
|
+
let baseUrl;
|
|
181
|
+
try {
|
|
182
|
+
resolved = (0, env_1.resolveMarrowEnv)({ trustedOnly: true });
|
|
183
|
+
baseUrl = (0, index_1.validateBaseUrl)(resolved.baseUrl || 'https://api.getmarrow.ai');
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
emitDecision({
|
|
187
|
+
runtime: null,
|
|
188
|
+
permit: null,
|
|
189
|
+
protectedRisk: classified.protected,
|
|
190
|
+
enforcementError: 'Marrow enforcement configuration is unavailable. Restore the trusted configuration before retrying this protected action.',
|
|
191
|
+
});
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
133
194
|
if (!resolved.apiKey) {
|
|
134
|
-
|
|
195
|
+
emitDecision({
|
|
196
|
+
runtime: null,
|
|
197
|
+
permit: null,
|
|
198
|
+
protectedRisk: classified.protected,
|
|
199
|
+
enforcementError: 'Marrow credentials are unavailable for this protected action. Restore the configured agent key before retrying.',
|
|
200
|
+
});
|
|
135
201
|
return;
|
|
136
202
|
}
|
|
137
|
-
const baseUrl = (0, index_1.validateBaseUrl)(resolved.baseUrl || 'https://api.getmarrow.ai');
|
|
138
203
|
const sessionId = resolved.sessionId || source.session_id;
|
|
139
204
|
const agentId = resolved.agentId || undefined;
|
|
140
205
|
const correlation = (0, hook_contract_1.stableToolCorrelation)({ ...source, session_id: sessionId });
|
|
141
|
-
const classified = classifyTool(source);
|
|
142
206
|
const lifecycle = (0, lifecycle_spool_1.recordLifecycleEvent)({
|
|
143
207
|
apiKey: resolved.apiKey,
|
|
144
208
|
baseUrl,
|
|
@@ -152,17 +216,73 @@ async function runPreActionHookCommand(input) {
|
|
|
152
216
|
correlation_id: correlation,
|
|
153
217
|
...(0, hook_contract_1.nativeHookEvidence)('pre_action'),
|
|
154
218
|
action: classified.action,
|
|
219
|
+
target: classified.target,
|
|
220
|
+
surfaces: classified.surfaces,
|
|
155
221
|
risk_level: classified.risk,
|
|
156
222
|
outcome_state: 'pending',
|
|
157
223
|
},
|
|
158
224
|
}).catch(() => null);
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
225
|
+
const control = async (signal) => {
|
|
226
|
+
const runtime = await (0, index_1.marrowAgentRuntime)(resolved.apiKey, baseUrl, {
|
|
227
|
+
action: classified.action,
|
|
228
|
+
target: classified.target,
|
|
229
|
+
type: classified.type,
|
|
230
|
+
role: classified.role,
|
|
231
|
+
surfaces: classified.surfaces,
|
|
232
|
+
}, sessionId, agentId, signal);
|
|
233
|
+
const decision = await (0, index_1.marrowThink)(resolved.apiKey, baseUrl, {
|
|
234
|
+
action: classified.action,
|
|
235
|
+
target: classified.target,
|
|
236
|
+
surfaces: classified.surfaces,
|
|
237
|
+
type: classified.type,
|
|
238
|
+
source_kind: 'integration',
|
|
239
|
+
source_meta: {
|
|
240
|
+
harness: 'claude-code',
|
|
241
|
+
correlation_id: correlation,
|
|
242
|
+
gate_receipt_id: runtime.gate_receipt?.id || runtime.gate_receipt_id || null,
|
|
243
|
+
},
|
|
244
|
+
}, sessionId, agentId, signal);
|
|
245
|
+
const issued = await (0, index_1.marrowEnforcement)(resolved.apiKey, baseUrl, {
|
|
246
|
+
operation: 'issue',
|
|
247
|
+
action: classified.action,
|
|
248
|
+
action_type: classified.type,
|
|
249
|
+
target: classified.target,
|
|
250
|
+
correlation_id: correlation,
|
|
251
|
+
harness: 'claude-code',
|
|
252
|
+
decision_id: decision.decision_id,
|
|
253
|
+
gate_receipt_id: runtime.gate_receipt?.id || runtime.gate_receipt_id || null,
|
|
254
|
+
proof_requirements: runtime.proof_pack?.fields || [],
|
|
255
|
+
surfaces: classified.surfaces,
|
|
256
|
+
}, sessionId, agentId, signal);
|
|
257
|
+
const issuedPermitId = typeof issued.permit_id === 'string' ? issued.permit_id.trim() : '';
|
|
258
|
+
if (!issued.permit || !issuedPermitId) {
|
|
259
|
+
return { runtime, permit: { ...issued, verified: false }, protectedRisk: classified.protected, enforcementError: 'Marrow did not issue a complete action permit.' };
|
|
260
|
+
}
|
|
261
|
+
const verified = await (0, index_1.marrowEnforcement)(resolved.apiKey, baseUrl, {
|
|
262
|
+
operation: 'verify',
|
|
263
|
+
permit: issued.permit,
|
|
264
|
+
action: classified.action,
|
|
265
|
+
action_type: classified.type,
|
|
266
|
+
target: classified.target,
|
|
267
|
+
surfaces: classified.surfaces,
|
|
268
|
+
correlation_id: correlation,
|
|
269
|
+
harness: 'claude-code',
|
|
270
|
+
}, sessionId, agentId, signal);
|
|
271
|
+
const verifiedPermitId = typeof verified.permit_id === 'string' ? verified.permit_id.trim() : '';
|
|
272
|
+
const verifiedExactly = verified.verified === true && verifiedPermitId === issuedPermitId;
|
|
273
|
+
return {
|
|
274
|
+
runtime,
|
|
275
|
+
permit: { ...issued, ...verified, permit_id: issuedPermitId, permit: undefined, verified: verifiedExactly },
|
|
276
|
+
protectedRisk: classified.protected,
|
|
277
|
+
...(verifiedExactly ? {} : { enforcementError: 'Marrow permit verification did not match the issued permit.' }),
|
|
278
|
+
};
|
|
279
|
+
};
|
|
280
|
+
const [result] = await Promise.all([withTimeout(control), lifecycle]);
|
|
281
|
+
emitDecision(result || {
|
|
282
|
+
runtime: null,
|
|
283
|
+
permit: null,
|
|
284
|
+
protectedRisk: classified.protected,
|
|
285
|
+
enforcementError: 'Marrow governance timed out before this protected action. Retry instead of bypassing the gate.',
|
|
286
|
+
});
|
|
167
287
|
}
|
|
168
288
|
//# sourceMappingURL=hook-pre-action.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-pre-action.js","sourceRoot":"","sources":["../src/hook-pre-action.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hook-pre-action.js","sourceRoot":"","sources":["../src/hook-pre-action.ts"],"names":[],"mappings":"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"}
|
package/dist/hook-session.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const SESSION_HOOK_COMMAND = "npx -y @getmarrow/mcp@3.9.
|
|
1
|
+
export declare const SESSION_HOOK_COMMAND = "npx -y @getmarrow/mcp@3.9.52 session-hook";
|
|
2
2
|
export declare function installSessionEndHook(startDir?: string): {
|
|
3
3
|
settingsPath: string;
|
|
4
4
|
installed: boolean;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type ToolPolicyEvent = {
|
|
2
|
+
tool_name?: string;
|
|
3
|
+
tool_input?: unknown;
|
|
4
|
+
};
|
|
5
|
+
export declare function normalizeHookToolName(value: unknown): string;
|
|
6
|
+
export declare function isOfficialMarrowMcpTool(value: unknown): boolean;
|
|
7
|
+
export declare function isProtectedShellMutation(command: string): boolean;
|
|
8
|
+
export declare function hookToolCommand(event: ToolPolicyEvent): string;
|
|
9
|
+
export declare function isReadOnlyToolEvent(event: ToolPolicyEvent): boolean;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=hook-tool-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-tool-policy.d.ts","sourceRoot":"","sources":["../src/hook-tool-policy.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AA8EF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE5D;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/D;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAKjE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAa9D;AAsBD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAgBnE"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeHookToolName = normalizeHookToolName;
|
|
4
|
+
exports.isOfficialMarrowMcpTool = isOfficialMarrowMcpTool;
|
|
5
|
+
exports.isProtectedShellMutation = isProtectedShellMutation;
|
|
6
|
+
exports.hookToolCommand = hookToolCommand;
|
|
7
|
+
exports.isReadOnlyToolEvent = isReadOnlyToolEvent;
|
|
8
|
+
const READ_ONLY_TOOLS = new Set([
|
|
9
|
+
'read',
|
|
10
|
+
'grep',
|
|
11
|
+
'glob',
|
|
12
|
+
'ls',
|
|
13
|
+
'notebookread',
|
|
14
|
+
'todoread',
|
|
15
|
+
'tasklist',
|
|
16
|
+
'taskget',
|
|
17
|
+
'sessions_list',
|
|
18
|
+
'sessions_history',
|
|
19
|
+
'session_status',
|
|
20
|
+
'marrow_list_memories',
|
|
21
|
+
'marrow_retrieve_memories',
|
|
22
|
+
'marrow_get_memory',
|
|
23
|
+
'marrow_dashboard',
|
|
24
|
+
'marrow_digest',
|
|
25
|
+
'marrow_status',
|
|
26
|
+
'marrow_orient',
|
|
27
|
+
'marrow_ask',
|
|
28
|
+
]);
|
|
29
|
+
const READ_ONLY_BASH_COMMANDS = new Set([
|
|
30
|
+
'read', 'grep', 'rg', 'ls', 'cat', 'find', 'tail', 'head', 'wc', 'file',
|
|
31
|
+
'stat', 'which', 'type', 'echo', 'printf', 'pwd', 'date', 'env', 'printenv',
|
|
32
|
+
'whoami', 'uname',
|
|
33
|
+
]);
|
|
34
|
+
const MUTATION_TOOL_VERB = /(?:^|__|_)(?:create|update|delete|remove|write|edit|send|post|put|patch|execute|run|deploy|publish|merge|push|commit|revoke|rotate|charge|refund|cancel|approve)(?:_|$)/;
|
|
35
|
+
const READ_ONLY_TOOL_VERB = /(?:^|__|_)(?:get|list|read|search|find|fetch|status|inspect|query)(?:_|$)/;
|
|
36
|
+
const PROTECTED_SHELL_MUTATION_FAMILIES = [
|
|
37
|
+
/\b(?:npm|pnpm|yarn)(?:\s+npm)?\b[\s\S]{0,8192}\b(?:publish|unpublish|deprecate|access|owner|team|token|login|logout|profile\s+(?:set|enable-2fa|disable-2fa)|org\s+(?:set|rm|remove)|dist-tag|tag\s+(?:add|remove))\b/i,
|
|
38
|
+
/\b(?:cargo\s+(?:publish|yank|owner)|twine\s+upload|gem\s+(?:push|yank|owner)|(?:dotnet\s+nuget|nuget)\s+(?:push|delete))\b/i,
|
|
39
|
+
/\bgit\b[\s\S]{0,8192}\b(?:push|commit|merge|rebase|reset|tag|clean|rm|update-ref|cherry-pick|revert|worktree\s+(?:add|move|remove|prune|repair|lock|unlock)|branch\s+(?:-[dDmM]|--delete|--move)|remote\s+(?:add|remove|rename|set-url|set-head|prune|update)|checkout\s+-[bB]|switch\s+-[cC])\b/i,
|
|
40
|
+
/\bgh\b[\s\S]{0,8192}\b(?:auth\s+logout|pr\s+(?:merge|close|reopen|edit|review|comment)|issue\s+(?:create|close|reopen|edit|comment)|run\s+(?:cancel|delete|rerun)|release\s+(?:create|delete|edit|upload)|repo\s+(?:archive|delete|edit|fork|rename|transfer)|workflow\s+run|secret\s+(?:set|delete)|variable\s+(?:set|delete))\b/i,
|
|
41
|
+
/\bgh\s+api\b[\s\S]{0,8192}(?:(?:--method|-X)(?:=|\s+)(?:POST|PUT|PATCH|DELETE)\b|(?:-f|-F|--field|--raw-field|--input)(?:=|\s+))/i,
|
|
42
|
+
/\b(?:kubectl|oc)\b[\s\S]{0,8192}\b(?:apply|create|delete|edit|patch|replace|rollout|scale|set|drain|cordon|uncordon|taint|exec|cp|run|expose|autoscale|label|annotate|reconcile|certificate\s+(?:approve|deny))\b/i,
|
|
43
|
+
/\b(?:terraform|terragrunt|tofu)\b[\s\S]{0,8192}\b(?:apply|destroy|import|taint|untaint|force-unlock|state\s+(?:mv|rm|push|replace-provider)|workspace\s+(?:new|delete))\b/i,
|
|
44
|
+
/\bpulumi\b[\s\S]{0,8192}\b(?:up|destroy|import|refresh|stack\s+rm|config\s+(?:set|rm))\b/i,
|
|
45
|
+
/\bhelm\b[\s\S]{0,8192}\b(?:install|upgrade|uninstall|rollback|push)\b/i,
|
|
46
|
+
/\bflux\b[\s\S]{0,8192}\b(?:bootstrap|create|delete|install|reconcile|resume|suspend|tag|uninstall)\b/i,
|
|
47
|
+
/\bnomad\b[\s\S]{0,8192}\b(?:job\s+(?:dispatch|plan|promote|run|scale|stop)|alloc\s+stop|deployment\s+(?:fail|promote)|node\s+drain|acl\s+(?:bootstrap|policy|role|token))\b/i,
|
|
48
|
+
/\bcdk\b[\s\S]{0,8192}\b(?:bootstrap|deploy|destroy|import|rollback|watch)\b/i,
|
|
49
|
+
/\bansible-playbook\b/i,
|
|
50
|
+
/\bansible\b[\s\S]{0,8192}(?:(?:-m|--module-name)(?:=|\s+)(?:shell|command|raw|script)\b|(?:-a|--args)(?:=|\s+))/i,
|
|
51
|
+
/\b(?:docker|podman)\b[\s\S]{0,8192}\b(?:push|buildx\s+build\b[\s\S]*--push)\b/i,
|
|
52
|
+
/\bwrangler\b[\s\S]{0,8192}\b(?:deploy|delete|rollback|execute|apply|put|bulk|secret|publish)\b/i,
|
|
53
|
+
/\bcurl\b[\s\S]{0,8192}(?:(?:-X\s*|--request(?:=|\s+))(?:POST|PUT|PATCH|DELETE)\b|--(?:json|data(?:-ascii|-raw|-binary|-urlencode)?)(?:=|\s+)|-[dF](?:\s+|[^A-Za-z])|--form(?:-string)?(?:=|\s+)|(?:-T|--upload-file|-K|--config)(?:=|\s+))/i,
|
|
54
|
+
/\b(?:http|xh)\b[\s\S]{0,8192}(?:\b(?:POST|PUT|PATCH|DELETE)\b|(?:--form|--raw|-f)\b|\s[^\s=:@]+(?::=|=|@))/i,
|
|
55
|
+
/\bwget\b[\s\S]{0,8192}(?:--post-data|--post-file|--body-data|--body-file|--method(?:=|\s+)(?:POST|PUT|PATCH|DELETE))\b/i,
|
|
56
|
+
/\b(?:psql|mysql|sqlite3|duckdb)\b[\s\S]{0,8192}(?:\b(?:drop|delete|update|insert|replace|alter|truncate|create|grant|revoke|call|do)\b|(?:-f|--file|\.read|source)(?:=|\s+)|\s<\s*[^\s])/i,
|
|
57
|
+
/\bredis-cli\b[\s\S]{0,8192}(?:--pipe\b|\b(?:set|setex|psetex|mset|del|unlink|getdel|incr|decr|append|expire|persist|rename|move|flushall|flushdb|shutdown|eval|evalsha|fcall|fcall_ro|function|script\s+(?:load|flush|kill)|config\s+set|acl\s+setuser|hset|hdel|lpush|rpush|lpop|rpop|sadd|srem|zadd|zrem|xadd|xdel|publish|restore|migrate)\b)/i,
|
|
58
|
+
/\baws\b[\s\S]{0,8192}\b(?:create|update|delete|put|attach|detach|associate|disassociate|terminate|stop|start|reboot|modify|restore|rotate|tag|untag|deploy|sync|s3\s+(?:cp|mv|rm)|s3api\s+put-object|ssm\s+(?:put-parameter|delete-parameter|delete-parameters))\b/i,
|
|
59
|
+
/\bgcloud\b[\s\S]{0,8192}\b(?:create|update|delete|deploy|add|remove|set|destroy|disable|restore|storage\s+(?:cp|mv|rm|rsync)|pubsub\s+(?:topics|subscriptions)\s+(?:create|delete|update))\b/i,
|
|
60
|
+
/\baz\b[\s\S]{0,8192}\b(?:create|update|delete|set|deploy|start|stop|restart|restore|storage\s+blob\s+(?:upload|delete|copy)|group\s+(?:create|delete|update))\b/i,
|
|
61
|
+
/\brclone\b[\s\S]{0,8192}\b(?:copy|copyto|sync|move|moveto|delete|deletefile|purge|mkdir|rmdir|bisync)\b/i,
|
|
62
|
+
/\bgsutil\b[\s\S]{0,8192}\b(?:cp|mv|rm|rsync|setacl|setmeta|web)\b/i,
|
|
63
|
+
/(?:^|[;&|]\s*|\bsudo\s+|\benv\s+)mc\b[\s\S]{0,8192}\b(?:cp|mv|rm|mirror|mb|rb|anonymous|admin)\b/i,
|
|
64
|
+
/\boci\b[\s\S]{0,8192}\bos\b[\s\S]{0,8192}\b(?:put|upload|bulk-upload|delete|rename|restore|reencrypt)\b/i,
|
|
65
|
+
/\b(?:vault|op)\b[\s\S]{0,8192}\b(?:write|put|patch|delete|edit|create|move|rotate|revoke|destroy|share|operator\s+(?:init|rekey|generate-root|seal|unseal))\b/i,
|
|
66
|
+
/\bpass\b[\s\S]{0,8192}\b(?:insert|edit|generate|rm|remove|mv|cp|init|git)\b/i,
|
|
67
|
+
/(?:^|[\s;&|]|\bsudo\s+|\benv\s+)(?:(?:\/[^\s/]+)*\/)?(?:rm\b|unlink\b|shred\b|truncate\b|dd\b[\s\S]{0,8192}\bof=|find\b[\s\S]{0,8192}\s-delete\b|xargs\b[\s\S]{0,8192}(?:(?:\/[^\s/]+)*\/)?rm\b)/i,
|
|
68
|
+
/(?:^|[\s;&|])["']\/(?:[^\/"']+\/)*(?:rm|unlink|shred|truncate)["'](?:\s|$)/i,
|
|
69
|
+
];
|
|
70
|
+
function asRecord(value) {
|
|
71
|
+
return value && typeof value === 'object' && !Array.isArray(value)
|
|
72
|
+
? value
|
|
73
|
+
: null;
|
|
74
|
+
}
|
|
75
|
+
function stringValue(value) {
|
|
76
|
+
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
77
|
+
}
|
|
78
|
+
function normalizeHookToolName(value) {
|
|
79
|
+
return String(value || '').replace(/^mcp__/, '').trim().toLowerCase();
|
|
80
|
+
}
|
|
81
|
+
function isOfficialMarrowMcpTool(value) {
|
|
82
|
+
return /^mcp__marrow__marrow_[a-z0-9_]+$/i.test(String(value || '').trim());
|
|
83
|
+
}
|
|
84
|
+
function isProtectedShellMutation(command) {
|
|
85
|
+
const raw = String(command || '');
|
|
86
|
+
if (raw.length > 8192)
|
|
87
|
+
return true;
|
|
88
|
+
const bounded = raw.slice(0, 8192);
|
|
89
|
+
return PROTECTED_SHELL_MUTATION_FAMILIES.some((pattern) => pattern.test(bounded));
|
|
90
|
+
}
|
|
91
|
+
function hookToolCommand(event) {
|
|
92
|
+
if (typeof event.tool_input === 'string')
|
|
93
|
+
return event.tool_input.trim();
|
|
94
|
+
const input = asRecord(event.tool_input);
|
|
95
|
+
if (!input)
|
|
96
|
+
return '';
|
|
97
|
+
for (const key of ['command', 'description', 'query', 'path', 'file_path', 'url', 'name']) {
|
|
98
|
+
const value = stringValue(input[key]);
|
|
99
|
+
if (value)
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
return JSON.stringify(input).slice(0, 4096);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return '';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function hasWriteLikeShellSyntax(command) {
|
|
110
|
+
return /(^|[^>])>(?!>)|>>|\b(?:tee|touch|mkdir|rm|mv|cp|install|uninstall|publish|deploy|release)\b|\bsed\s+-i\b|\bperl\s+-i\b/i.test(command)
|
|
111
|
+
|| /\b(?:curl|wget|nc|ncat|netcat|scp|rsync|ssh|ftp|tftp)\b/i.test(command)
|
|
112
|
+
|| /\bgit\s+(?:push|merge|commit|rebase|reset|checkout|switch|tag)\b/i.test(command)
|
|
113
|
+
|| isProtectedShellMutation(command);
|
|
114
|
+
}
|
|
115
|
+
function hasCompoundShellSyntax(command) {
|
|
116
|
+
return /[|;&`\n\r]|\$\(|\$\{/.test(command);
|
|
117
|
+
}
|
|
118
|
+
function pathOnlyInput(value) {
|
|
119
|
+
const input = asRecord(value);
|
|
120
|
+
if (!input)
|
|
121
|
+
return false;
|
|
122
|
+
const keys = Object.keys(input);
|
|
123
|
+
return keys.length > 0
|
|
124
|
+
&& keys.every((key) => ['path', 'file_path', 'filename', 'target_file'].includes(key))
|
|
125
|
+
&& Object.values(input).every((item) => typeof item === 'string' && item.trim().length > 0);
|
|
126
|
+
}
|
|
127
|
+
function isReadOnlyToolEvent(event) {
|
|
128
|
+
const tool = normalizeHookToolName(event.tool_name);
|
|
129
|
+
if (!tool)
|
|
130
|
+
return false;
|
|
131
|
+
if (READ_ONLY_TOOLS.has(tool))
|
|
132
|
+
return true;
|
|
133
|
+
if (MUTATION_TOOL_VERB.test(tool))
|
|
134
|
+
return false;
|
|
135
|
+
if (READ_ONLY_TOOL_VERB.test(tool))
|
|
136
|
+
return true;
|
|
137
|
+
const command = hookToolCommand(event).replace(/\s+/g, ' ').trim();
|
|
138
|
+
if (tool === 'bash' && command && !hasCompoundShellSyntax(command) && !hasWriteLikeShellSyntax(command)) {
|
|
139
|
+
if (/^(?:node|npm)\s+(?:-v|--version)$/i.test(command))
|
|
140
|
+
return true;
|
|
141
|
+
if (/^git\s+(?:status|diff|show|log|branch|rev-parse|ls-files|ls-remote)(?:\s|$)/i.test(command))
|
|
142
|
+
return true;
|
|
143
|
+
const firstToken = command.split(/[\s|;&]+/, 1)[0]?.toLowerCase();
|
|
144
|
+
if (firstToken && READ_ONLY_BASH_COMMANDS.has(firstToken))
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
return !['edit', 'write', 'multiedit'].includes(tool) && pathOnlyInput(event.tool_input);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=hook-tool-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-tool-policy.js","sourceRoot":"","sources":["../src/hook-tool-policy.ts"],"names":[],"mappings":"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"}
|
package/dist/hook.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare const AUTO_HOOK_COMMAND = "npx -y @getmarrow/mcp@3.9.
|
|
2
|
-
export declare const AUTO_HOOK_MATCHER = "Bash|Edit|Write|MultiEdit|mcp__(?!
|
|
1
|
+
export declare const AUTO_HOOK_COMMAND = "npx -y @getmarrow/mcp@3.9.52 hook";
|
|
2
|
+
export declare const AUTO_HOOK_MATCHER = "Bash|Edit|Write|MultiEdit|mcp__(?!marrow__marrow_).*";
|
|
3
3
|
interface HookEvent {
|
|
4
4
|
session_id?: string;
|
|
5
5
|
hook_event_name?: string;
|
|
@@ -16,6 +16,7 @@ interface HookInstallResult {
|
|
|
16
16
|
installed: boolean;
|
|
17
17
|
}
|
|
18
18
|
export declare function shouldSkipAutoLog(event: HookEvent): boolean;
|
|
19
|
+
export declare function deriveAction(event: HookEvent): string | null;
|
|
19
20
|
export declare function installPostToolUseHook(startDir?: string): HookInstallResult;
|
|
20
21
|
export declare function runHookCommand(): Promise<void>;
|
|
21
22
|
export {};
|
package/dist/hook.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,iBAAiB,sCAA6B,CAAC;AAC5D,eAAO,MAAM,iBAAiB,yDAAsB,CAAC;AAOrD,UAAU,SAAS;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,iBAAiB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACpB;AAgBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE3D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAK5D;AA2BD,wBAAgB,sBAAsB,CAAC,QAAQ,GAAE,MAAsB,GAAG,iBAAiB,CAwB1F;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAgFpD"}
|