@nexus-cortex/core 4.51.0 → 4.52.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/dist/adapters/ChatCompletionsAPIAdapter.d.ts.map +1 -1
- package/dist/adapters/ChatCompletionsAPIAdapter.js +16 -0
- package/dist/adapters/ChatCompletionsAPIAdapter.js.map +1 -1
- package/dist/adapters/FormatAdapter.interface.d.ts +4 -4
- package/dist/adapters/FormatAdapter.interface.js +4 -4
- package/dist/adapters/GatewayTranslationLayer.d.ts +9 -0
- package/dist/adapters/GatewayTranslationLayer.d.ts.map +1 -1
- package/dist/adapters/GatewayTranslationLayer.js +24 -1
- package/dist/adapters/GatewayTranslationLayer.js.map +1 -1
- package/dist/adapters/ResponsesAPIAdapter.d.ts +66 -0
- package/dist/adapters/ResponsesAPIAdapter.d.ts.map +1 -1
- package/dist/adapters/ResponsesAPIAdapter.js +66 -0
- package/dist/adapters/ResponsesAPIAdapter.js.map +1 -1
- package/dist/adapters/ToolNamingHandler.d.ts +4 -4
- package/dist/adapters/ToolNamingHandler.js +4 -4
- package/dist/adapters/servedModelDrift.d.ts +44 -0
- package/dist/adapters/servedModelDrift.d.ts.map +1 -0
- package/dist/adapters/servedModelDrift.js +0 -0
- package/dist/adapters/servedModelDrift.js.map +1 -0
- package/dist/agents/AgentStore.d.ts.map +1 -1
- package/dist/agents/AgentStore.js +5 -2
- package/dist/agents/AgentStore.js.map +1 -1
- package/dist/config/RuntimeConfigRegistry.d.ts.map +1 -1
- package/dist/config/RuntimeConfigRegistry.js +1 -0
- package/dist/config/RuntimeConfigRegistry.js.map +1 -1
- package/dist/config/SettingsLoader.js +1 -1
- package/dist/config/SettingsLoader.js.map +1 -1
- package/dist/config/SettingsSchema.d.ts +2 -2
- package/dist/config/SettingsSchema.d.ts.map +1 -1
- package/dist/config/SettingsSchema.js +13 -8
- package/dist/config/SettingsSchema.js.map +1 -1
- package/dist/conversation/ContextBudgetManager.d.ts.map +1 -1
- package/dist/conversation/ContextBudgetManager.js +4 -2
- package/dist/conversation/ContextBudgetManager.js.map +1 -1
- package/dist/conversation/ToolResultPruner.d.ts +45 -0
- package/dist/conversation/ToolResultPruner.d.ts.map +1 -0
- package/dist/conversation/ToolResultPruner.js +94 -0
- package/dist/conversation/ToolResultPruner.js.map +1 -0
- package/dist/middleware/ErrorClassificationMiddleware.d.ts +19 -0
- package/dist/middleware/ErrorClassificationMiddleware.d.ts.map +1 -1
- package/dist/middleware/ErrorClassificationMiddleware.js +55 -1
- package/dist/middleware/ErrorClassificationMiddleware.js.map +1 -1
- package/dist/middleware/PermissionsMiddleware.d.ts +2 -2
- package/dist/middleware/PermissionsMiddleware.js +2 -2
- package/dist/middleware/RetryMiddleware.d.ts.map +1 -1
- package/dist/middleware/RetryMiddleware.js +8 -2
- package/dist/middleware/RetryMiddleware.js.map +1 -1
- package/dist/middleware/contracts/MiddlewareContracts.d.ts +4 -0
- package/dist/middleware/contracts/MiddlewareContracts.d.ts.map +1 -1
- package/dist/middleware/permissions/BashCommandPolicy.d.ts +2 -2
- package/dist/middleware/permissions/BashCommandPolicy.js +2 -2
- package/dist/middleware/permissions/BlacklistPolicy.d.ts +1 -1
- package/dist/middleware/permissions/BlacklistPolicy.js +1 -1
- package/dist/middleware/permissions/FileOperationPolicy.d.ts +2 -2
- package/dist/middleware/permissions/FileOperationPolicy.js +2 -2
- package/dist/middleware/permissions/PermissionAuditLogger.d.ts +1 -1
- package/dist/middleware/permissions/PermissionAuditLogger.js +1 -1
- package/dist/middleware/permissions/PermissionConfig.js +2 -2
- package/dist/middleware/permissions/PermissionConfig.js.map +1 -1
- package/dist/middleware/permissions/PermissionEvaluator.d.ts +2 -2
- package/dist/middleware/permissions/PermissionEvaluator.js +2 -2
- package/dist/middleware/permissions/WhitelistPolicy.d.ts +2 -2
- package/dist/middleware/permissions/WhitelistPolicy.js +2 -2
- package/dist/middleware/permissions/WorkspaceBoundaryPolicy.d.ts.map +1 -1
- package/dist/middleware/permissions/WorkspaceBoundaryPolicy.js +2 -3
- package/dist/middleware/permissions/WorkspaceBoundaryPolicy.js.map +1 -1
- package/dist/models/ModelConfig.interface.js +1 -1
- package/dist/orchestrator/APIClient.d.ts +10 -0
- package/dist/orchestrator/APIClient.d.ts.map +1 -1
- package/dist/orchestrator/APIClient.js +81 -6
- package/dist/orchestrator/APIClient.js.map +1 -1
- package/dist/orchestrator/CortexOrchestrator.d.ts +30 -0
- package/dist/orchestrator/CortexOrchestrator.d.ts.map +1 -1
- package/dist/orchestrator/CortexOrchestrator.js +256 -36
- package/dist/orchestrator/CortexOrchestrator.js.map +1 -1
- package/dist/orchestrator/OrchestratorFactory.js +1 -1
- package/dist/orchestrator/OrchestratorFactory.js.map +1 -1
- package/dist/orchestrator/SubAgentPermissionChecker.d.ts.map +1 -1
- package/dist/orchestrator/SubAgentPermissionChecker.js +13 -2
- package/dist/orchestrator/SubAgentPermissionChecker.js.map +1 -1
- package/dist/orchestrator/apiErrorClassifier.d.ts.map +1 -1
- package/dist/orchestrator/apiErrorClassifier.js +8 -1
- package/dist/orchestrator/apiErrorClassifier.js.map +1 -1
- package/dist/orchestrator/emptyResponseClassifier.d.ts +29 -0
- package/dist/orchestrator/emptyResponseClassifier.d.ts.map +1 -0
- package/dist/orchestrator/emptyResponseClassifier.js +42 -0
- package/dist/orchestrator/emptyResponseClassifier.js.map +1 -0
- package/dist/orchestrator/index.d.ts +1 -0
- package/dist/orchestrator/index.d.ts.map +1 -1
- package/dist/orchestrator/index.js +3 -0
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/structuredOutput.d.ts +144 -0
- package/dist/orchestrator/structuredOutput.d.ts.map +1 -0
- package/dist/orchestrator/structuredOutput.js +230 -0
- package/dist/orchestrator/structuredOutput.js.map +1 -0
- package/dist/orchestrator/tailRepetitionDetector.d.ts +57 -0
- package/dist/orchestrator/tailRepetitionDetector.d.ts.map +1 -0
- package/dist/orchestrator/tailRepetitionDetector.js +98 -0
- package/dist/orchestrator/tailRepetitionDetector.js.map +1 -0
- package/dist/system-messages/SystemReminderInjector.d.ts +3 -3
- package/dist/system-messages/SystemReminderInjector.d.ts.map +1 -1
- package/dist/system-messages/SystemReminderInjector.js +4 -4
- package/dist/system-messages/SystemReminderInjector.js.map +1 -1
- package/dist/system-messages/messages/EXAMPLES.md +18 -18
- package/dist/system-messages/messages/SYSTEM_PROMPT.md +15 -13
- package/dist/system-messages/messages/TASK_AGENT_GUIDE.md +2 -2
- package/dist/system-messages/messages/TOOL_USAGE_GUIDE.md +43 -42
- package/dist/system-messages/messages/WORK_QUALITY.md +12 -10
- package/dist/tools/ToolFactory.d.ts.map +1 -1
- package/dist/tools/ToolFactory.js +3 -1
- package/dist/tools/ToolFactory.js.map +1 -1
- package/dist/tools/context-management/InitCortexContext.js +1 -1
- package/dist/tools/context-management/InitCortexContext.js.map +1 -1
- package/dist/tools/mcp-management/InitMcpConfig.js +1 -1
- package/dist/tools/registries/BaseToolRegistry.js +45 -45
- package/dist/tools/registries/BaseToolRegistry.js.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolResultPruner — age-tiered tool-result pruning for OUTGOING REQUEST
|
|
3
|
+
* copies of the canonical history.
|
|
4
|
+
*
|
|
5
|
+
* Ported from grok-build's request-builder pruning (2026-08-01): when context
|
|
6
|
+
* pressure is high, tool results outside the most recent turns are
|
|
7
|
+
* middle-trimmed (soft tier) or fully elided (hard tier). This is a relief
|
|
8
|
+
* valve BELOW compaction — it defers whole-message removal/summarization and
|
|
9
|
+
* costs nothing while context is comfortable (the caller gates on
|
|
10
|
+
* utilization; see CortexOrchestrator.pruneAgedForRequest).
|
|
11
|
+
*
|
|
12
|
+
* Contract:
|
|
13
|
+
* - PURE: never mutates the input. Touched messages get a new wrapper, a new
|
|
14
|
+
* content array, new block objects, and a new toolResult object; untouched
|
|
15
|
+
* messages pass through by reference. Canonical history, JSONL, and the
|
|
16
|
+
* canonicalConversionCache are never affected.
|
|
17
|
+
* - ONLY tool_result payloads are touched. text, tool_use, thinking,
|
|
18
|
+
* redacted_thinking, and server-tool blocks are never modified, so
|
|
19
|
+
* tool_use/tool_result pairing stays structurally intact (blocks are
|
|
20
|
+
* rewritten in place, never removed) and provider validators stay happy.
|
|
21
|
+
* - Prompt-cache note: rewriting an old tool result invalidates the cached
|
|
22
|
+
* prefix from that message onward. That is why the CALLER gates this on
|
|
23
|
+
* high utilization — where the alternative is compaction, which busts the
|
|
24
|
+
* entire prefix anyway.
|
|
25
|
+
*/
|
|
26
|
+
import type { CanonicalMessage } from '../adapters/FormatAdapter.interface.js';
|
|
27
|
+
export interface ToolResultPruneOptions {
|
|
28
|
+
/** Turns whose tool results are never touched, counting back from newest. Default 3. */
|
|
29
|
+
keepLastNTurns?: number;
|
|
30
|
+
/** Rendered char size above which aged results are middle-trimmed. Default 4000. */
|
|
31
|
+
softTrimThreshold?: number;
|
|
32
|
+
/** Chars kept from each end when middle-trimming. Default 1500. */
|
|
33
|
+
softTrimKeep?: number;
|
|
34
|
+
/** Turn age at which tool results are fully elided. Default 10. */
|
|
35
|
+
hardClearAgeTurns?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface ToolResultPruneResult {
|
|
38
|
+
messages: CanonicalMessage[];
|
|
39
|
+
/** Number of tool-result payloads trimmed or elided. */
|
|
40
|
+
prunedCount: number;
|
|
41
|
+
/** Total rendered characters removed. */
|
|
42
|
+
savedChars: number;
|
|
43
|
+
}
|
|
44
|
+
export declare function pruneAgedToolResults(messages: CanonicalMessage[], options?: ToolResultPruneOptions): ToolResultPruneResult;
|
|
45
|
+
//# sourceMappingURL=ToolResultPruner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolResultPruner.d.ts","sourceRoot":"","sources":["../../src/conversation/ToolResultPruner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,wCAAwC,CAAC;AAEtG,MAAM,WAAW,sBAAsB;IACrC,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AAiBD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,OAAO,GAAE,sBAA2B,GACnC,qBAAqB,CAsDvB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolResultPruner — age-tiered tool-result pruning for OUTGOING REQUEST
|
|
3
|
+
* copies of the canonical history.
|
|
4
|
+
*
|
|
5
|
+
* Ported from grok-build's request-builder pruning (2026-08-01): when context
|
|
6
|
+
* pressure is high, tool results outside the most recent turns are
|
|
7
|
+
* middle-trimmed (soft tier) or fully elided (hard tier). This is a relief
|
|
8
|
+
* valve BELOW compaction — it defers whole-message removal/summarization and
|
|
9
|
+
* costs nothing while context is comfortable (the caller gates on
|
|
10
|
+
* utilization; see CortexOrchestrator.pruneAgedForRequest).
|
|
11
|
+
*
|
|
12
|
+
* Contract:
|
|
13
|
+
* - PURE: never mutates the input. Touched messages get a new wrapper, a new
|
|
14
|
+
* content array, new block objects, and a new toolResult object; untouched
|
|
15
|
+
* messages pass through by reference. Canonical history, JSONL, and the
|
|
16
|
+
* canonicalConversionCache are never affected.
|
|
17
|
+
* - ONLY tool_result payloads are touched. text, tool_use, thinking,
|
|
18
|
+
* redacted_thinking, and server-tool blocks are never modified, so
|
|
19
|
+
* tool_use/tool_result pairing stays structurally intact (blocks are
|
|
20
|
+
* rewritten in place, never removed) and provider validators stay happy.
|
|
21
|
+
* - Prompt-cache note: rewriting an old tool result invalidates the cached
|
|
22
|
+
* prefix from that message onward. That is why the CALLER gates this on
|
|
23
|
+
* high utilization — where the alternative is compaction, which busts the
|
|
24
|
+
* entire prefix anyway.
|
|
25
|
+
*/
|
|
26
|
+
/** A genuine user turn starts at a user message carrying no tool results
|
|
27
|
+
* (tool-result carriers are loop continuations of the previous turn). */
|
|
28
|
+
function isGenuineUserTurn(msg) {
|
|
29
|
+
return msg.role === 'user' && !msg.content.some((b) => b.type === 'tool_result');
|
|
30
|
+
}
|
|
31
|
+
function renderPayload(content) {
|
|
32
|
+
if (typeof content === 'string')
|
|
33
|
+
return content;
|
|
34
|
+
try {
|
|
35
|
+
return JSON.stringify(content);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return String(content);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function pruneAgedToolResults(messages, options = {}) {
|
|
42
|
+
const keepLastNTurns = options.keepLastNTurns ?? 3;
|
|
43
|
+
const softTrimThreshold = options.softTrimThreshold ?? 4000;
|
|
44
|
+
const softTrimKeep = options.softTrimKeep ?? 1500;
|
|
45
|
+
const hardClearAgeTurns = options.hardClearAgeTurns ?? 10;
|
|
46
|
+
// Forward pass: assign a turn index to every message.
|
|
47
|
+
const turnIndex = new Array(messages.length);
|
|
48
|
+
let turn = 0;
|
|
49
|
+
for (let i = 0; i < messages.length; i++) {
|
|
50
|
+
if (isGenuineUserTurn(messages[i]))
|
|
51
|
+
turn += 1;
|
|
52
|
+
turnIndex[i] = turn;
|
|
53
|
+
}
|
|
54
|
+
const currentTurn = turn;
|
|
55
|
+
let prunedCount = 0;
|
|
56
|
+
let savedChars = 0;
|
|
57
|
+
const pruneRendered = (rendered, age) => {
|
|
58
|
+
if (age >= hardClearAgeTurns) {
|
|
59
|
+
return `[Tool result omitted - too old (${rendered.length} chars)]`;
|
|
60
|
+
}
|
|
61
|
+
if (rendered.length > softTrimThreshold) {
|
|
62
|
+
const head = rendered.slice(0, softTrimKeep);
|
|
63
|
+
const tail = rendered.slice(-softTrimKeep);
|
|
64
|
+
return `${head}\n[... trimmed ${rendered.length - 2 * softTrimKeep} of ${rendered.length} chars ...]\n${tail}`;
|
|
65
|
+
}
|
|
66
|
+
return null; // untouched
|
|
67
|
+
};
|
|
68
|
+
const result = messages.map((msg, i) => {
|
|
69
|
+
const age = currentTurn - (turnIndex[i] ?? currentTurn);
|
|
70
|
+
if (age <= keepLastNTurns)
|
|
71
|
+
return msg;
|
|
72
|
+
let touched = false;
|
|
73
|
+
const newContent = msg.content.map((block) => {
|
|
74
|
+
if (block.type !== 'tool_result' || !block.toolResult)
|
|
75
|
+
return block;
|
|
76
|
+
const rendered = renderPayload(block.toolResult.content);
|
|
77
|
+
const replaced = pruneRendered(rendered, age);
|
|
78
|
+
if (replaced === null || replaced.length >= rendered.length)
|
|
79
|
+
return block;
|
|
80
|
+
touched = true;
|
|
81
|
+
prunedCount += 1;
|
|
82
|
+
savedChars += rendered.length - replaced.length;
|
|
83
|
+
return {
|
|
84
|
+
...block,
|
|
85
|
+
toolResult: { ...block.toolResult, content: replaced },
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
if (!touched)
|
|
89
|
+
return msg;
|
|
90
|
+
return { ...msg, content: newContent };
|
|
91
|
+
});
|
|
92
|
+
return { messages: result, prunedCount, savedChars };
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=ToolResultPruner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolResultPruner.js","sourceRoot":"","sources":["../../src/conversation/ToolResultPruner.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,14 @@ export declare class ErrorClassificationMiddleware implements IErrorClassifier {
|
|
|
45
45
|
* Permission and validation error patterns that are not retryable
|
|
46
46
|
*/
|
|
47
47
|
private readonly nonRetryablePatterns;
|
|
48
|
+
/**
|
|
49
|
+
* Context-window overflow phrasings (grok-build port, 2026-08-01). Kept
|
|
50
|
+
* deliberately STRICTER than ErrorDetector.isGenericContextError — that
|
|
51
|
+
* matcher includes the bare word 'context', which would wrongly veto
|
|
52
|
+
* retrying transient errors like "context deadline exceeded" 503s. These
|
|
53
|
+
* are a retry VETO: replaying an oversized payload fails identically.
|
|
54
|
+
*/
|
|
55
|
+
private readonly contextLengthPatterns;
|
|
48
56
|
/**
|
|
49
57
|
* Classify an error and provide detailed information
|
|
50
58
|
*
|
|
@@ -102,6 +110,17 @@ export declare class ErrorClassificationMiddleware implements IErrorClassifier {
|
|
|
102
110
|
* @param value - The string to normalize
|
|
103
111
|
* @returns Lowercase string or empty string if null/undefined
|
|
104
112
|
*/
|
|
113
|
+
/**
|
|
114
|
+
* Extract an HTTP status embedded in a raw-fetch error message. Anchored on
|
|
115
|
+
* the literal "API error" that every raw-fetch throw site uses, so a bare
|
|
116
|
+
* number in an error body ("Found 400 records") never matches. Covers all
|
|
117
|
+
* four raw-fetch throw shapes (2026-08-02):
|
|
118
|
+
* "XAI Messages API error (429): ..." -> paren form
|
|
119
|
+
* "Google GenerateContent API error (503): ..." -> paren form
|
|
120
|
+
* "XAI Responses API error 429: ..." -> bare form (was a gap)
|
|
121
|
+
* "Gemini API error: 429 - ..." -> colon form (was a gap)
|
|
122
|
+
*/
|
|
123
|
+
private extractStatusFromMessage;
|
|
105
124
|
private normalizeString;
|
|
106
125
|
/**
|
|
107
126
|
* Check if error message or name matches any of the given patterns
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorClassificationMiddleware.d.ts","sourceRoot":"","sources":["../../src/middleware/ErrorClassificationMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,oCAAoC,CAAC;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,6BAA8B,YAAW,gBAAgB;IACpE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CASnC;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAkC;IAEvE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAuB;IAEhE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CASnC;IAEF;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,mBAAmB;IA4BzC;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"ErrorClassificationMiddleware.d.ts","sourceRoot":"","sources":["../../src/middleware/ErrorClassificationMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,oCAAoC,CAAC;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,6BAA8B,YAAW,gBAAgB;IACpE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CASnC;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAkC;IAEvE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAuB;IAEhE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CASnC;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAUpC;IAEF;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,mBAAmB;IA4BzC;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IA0DhC;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,mBAAmB,CAAC,WAAW,CAAC;IA0C1D;;;;;OAKG;IACH;;;;;;;;;OASG;IACH,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,eAAe;IAIvB;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;CASvB"}
|
|
@@ -62,6 +62,24 @@ export class ErrorClassificationMiddleware {
|
|
|
62
62
|
'unauthorized',
|
|
63
63
|
'forbidden',
|
|
64
64
|
];
|
|
65
|
+
/**
|
|
66
|
+
* Context-window overflow phrasings (grok-build port, 2026-08-01). Kept
|
|
67
|
+
* deliberately STRICTER than ErrorDetector.isGenericContextError — that
|
|
68
|
+
* matcher includes the bare word 'context', which would wrongly veto
|
|
69
|
+
* retrying transient errors like "context deadline exceeded" 503s. These
|
|
70
|
+
* are a retry VETO: replaying an oversized payload fails identically.
|
|
71
|
+
*/
|
|
72
|
+
contextLengthPatterns = [
|
|
73
|
+
'context length',
|
|
74
|
+
'context_length_exceeded',
|
|
75
|
+
'maximum context',
|
|
76
|
+
'context window',
|
|
77
|
+
'prompt is too long',
|
|
78
|
+
'input is too long',
|
|
79
|
+
'too many tokens',
|
|
80
|
+
'exceeds the maximum number of tokens',
|
|
81
|
+
'reduce the length of the messages',
|
|
82
|
+
];
|
|
65
83
|
/**
|
|
66
84
|
* Classify an error and provide detailed information
|
|
67
85
|
*
|
|
@@ -120,6 +138,14 @@ export class ErrorClassificationMiddleware {
|
|
|
120
138
|
isRetryable(error) {
|
|
121
139
|
const errorMessage = this.normalizeString(error?.message);
|
|
122
140
|
const errorName = this.normalizeString(error?.name);
|
|
141
|
+
// Context-length veto (grok-build port, 2026-08-01): a context-window
|
|
142
|
+
// overflow is NEVER retryable — replaying the identical payload fails
|
|
143
|
+
// identically, even when a provider surfaces it under an otherwise
|
|
144
|
+
// retryable status. The remedy is compaction upstream, not a retry.
|
|
145
|
+
// Runs BEFORE the status branch deliberately (the one exception to R13).
|
|
146
|
+
if (this.matchesPattern(errorMessage, errorName, this.contextLengthPatterns)) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
123
149
|
// R13 (parallel-bench): HTTP status code is AUTHORITATIVE. A 401 with
|
|
124
150
|
// "ECONNRESET" in the body is still an auth error — message patterns must
|
|
125
151
|
// not override it. Only fall back to pattern matching when there is no
|
|
@@ -128,6 +154,16 @@ export class ErrorClassificationMiddleware {
|
|
|
128
154
|
if (statusCode) {
|
|
129
155
|
return this.retryableStatusCodes.includes(statusCode) || statusCode >= 500;
|
|
130
156
|
}
|
|
157
|
+
// Raw-fetch provider errors carry no .status property — the status is
|
|
158
|
+
// embedded in the message as "... (429): body" (xAI Messages, xAI
|
|
159
|
+
// Responses, Google HTTP, Gemini paths in APIClient). Without this,
|
|
160
|
+
// provider 429/5xx from those paths were NEVER retried (2026-08 surface
|
|
161
|
+
// map finding). The strict "(NNN):" shape avoids false positives on
|
|
162
|
+
// ordinary numbers in error text.
|
|
163
|
+
const parsedStatus = this.extractStatusFromMessage(errorMessage);
|
|
164
|
+
if (parsedStatus) {
|
|
165
|
+
return this.retryableStatusCodes.includes(parsedStatus) || parsedStatus >= 500;
|
|
166
|
+
}
|
|
131
167
|
// No status code → fall back to message-pattern matching.
|
|
132
168
|
// Network/connection errors - retryable
|
|
133
169
|
if (this.matchesPattern(errorMessage, errorName, this.networkErrorPatterns)) {
|
|
@@ -169,7 +205,8 @@ export class ErrorClassificationMiddleware {
|
|
|
169
205
|
// R13 (parallel-bench): status code is AUTHORITATIVE — a 429 with
|
|
170
206
|
// "invalid" in the body is rate_limit, not validation. Pattern matching
|
|
171
207
|
// only applies when there is no status code.
|
|
172
|
-
const statusCode = error?.status || error?.statusCode
|
|
208
|
+
const statusCode = error?.status || error?.statusCode
|
|
209
|
+
|| this.extractStatusFromMessage(errorMessage);
|
|
173
210
|
if (statusCode) {
|
|
174
211
|
if (statusCode === 429)
|
|
175
212
|
return 'rate_limit';
|
|
@@ -207,6 +244,23 @@ export class ErrorClassificationMiddleware {
|
|
|
207
244
|
* @param value - The string to normalize
|
|
208
245
|
* @returns Lowercase string or empty string if null/undefined
|
|
209
246
|
*/
|
|
247
|
+
/**
|
|
248
|
+
* Extract an HTTP status embedded in a raw-fetch error message. Anchored on
|
|
249
|
+
* the literal "API error" that every raw-fetch throw site uses, so a bare
|
|
250
|
+
* number in an error body ("Found 400 records") never matches. Covers all
|
|
251
|
+
* four raw-fetch throw shapes (2026-08-02):
|
|
252
|
+
* "XAI Messages API error (429): ..." -> paren form
|
|
253
|
+
* "Google GenerateContent API error (503): ..." -> paren form
|
|
254
|
+
* "XAI Responses API error 429: ..." -> bare form (was a gap)
|
|
255
|
+
* "Gemini API error: 429 - ..." -> colon form (was a gap)
|
|
256
|
+
*/
|
|
257
|
+
extractStatusFromMessage(message) {
|
|
258
|
+
const m = /API error[:\s(]*(\d{3})/i.exec(message);
|
|
259
|
+
if (!m)
|
|
260
|
+
return undefined;
|
|
261
|
+
const status = Number(m[1]);
|
|
262
|
+
return status >= 100 && status <= 599 ? status : undefined;
|
|
263
|
+
}
|
|
210
264
|
normalizeString(value) {
|
|
211
265
|
return value?.toLowerCase() || '';
|
|
212
266
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorClassificationMiddleware.js","sourceRoot":"","sources":["../../src/middleware/ErrorClassificationMiddleware.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ErrorClassificationMiddleware.js","sourceRoot":"","sources":["../../src/middleware/ErrorClassificationMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,6BAA6B;IACxC;;OAEG;IACc,oBAAoB,GAAG;QACtC,YAAY;QACZ,cAAc;QACd,WAAW;QACX,aAAa;QACb,cAAc;QACd,gBAAgB;QAChB,eAAe;QACf,cAAc;KACf,CAAC;IAEF;;OAEG;IACc,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAEvE;;OAEG;IACc,wBAAwB,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEhE;;OAEG;IACc,oBAAoB,GAAG;QACtC,mBAAmB;QACnB,QAAQ;QACR,OAAO;QACP,QAAQ,EAAE,iBAAiB;QAC3B,SAAS;QACT,mBAAmB;QACnB,cAAc;QACd,WAAW;KACZ,CAAC;IAEF;;;;;;OAMG;IACc,qBAAqB,GAAG;QACvC,gBAAgB;QAChB,yBAAyB;QACzB,iBAAiB;QACjB,gBAAgB;QAChB,oBAAoB;QACpB,mBAAmB;QACnB,iBAAiB;QACjB,sCAAsC;QACtC,mCAAmC;KACpC,CAAC;IAEF;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,KAAU;QACjB,MAAM,UAAU,GAAG,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,UAAU,CAAC;QAEtD,uBAAuB;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE3C,yBAAyB;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE5C,8BAA8B;QAC9B,MAAM,cAAc,GAAwB;YAC1C,WAAW;YACX,SAAS;YACT,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;YACxC,QAAQ,EAAE;gBACR,SAAS,EAAE,KAAK,EAAE,IAAI;aACvB;SACF,CAAC;QAEF,6BAA6B;QAC7B,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,cAAc,CAAC,UAAU,GAAG,UAAU,CAAC;YACvC,cAAc,CAAC,QAAS,CAAC,UAAU,GAAG,UAAU,CAAC;QACnD,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,KAAU;QACpB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEpD,sEAAsE;QACtE,sEAAsE;QACtE,mEAAmE;QACnE,oEAAoE;QACpE,yEAAyE;QACzE,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC7E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,sEAAsE;QACtE,0EAA0E;QAC1E,uEAAuE;QACvE,sBAAsB;QACtB,MAAM,UAAU,GAAG,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,UAAU,CAAC;QACtD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,GAAG,CAAC;QAC7E,CAAC;QAED,sEAAsE;QACtE,kEAAkE;QAClE,oEAAoE;QACpE,wEAAwE;QACxE,oEAAoE;QACpE,kCAAkC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;QACjE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,GAAG,CAAC;QACjF,CAAC;QAED,0DAA0D;QAC1D,wCAAwC;QACxC,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC5E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2CAA2C;QAC3C,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAChF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,wDAAwD;QACxD,IAAI,SAAS,KAAK,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,+CAA+C;QAC/C,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC5E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,sCAAsC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,KAAU;QACrB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEpD,kEAAkE;QAClE,wEAAwE;QACxE,6CAA6C;QAC7C,MAAM,UAAU,GAAG,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,UAAU;eAChD,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,UAAU,KAAK,GAAG;gBAAE,OAAO,YAAY,CAAC;YAC5C,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG;gBAAE,OAAO,YAAY,CAAC;YAClE,IAAI,UAAU,IAAI,GAAG;gBAAE,OAAO,SAAS,CAAC;YACxC,IAAI,UAAU,IAAI,GAAG;gBAAE,OAAO,YAAY,CAAC;QAC7C,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC5E,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,yBAAyB;QACzB,IAAI,SAAS,KAAK,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,8BAA8B;QAC9B,MAAM,kBAAkB,GAAG,CAAC,mBAAmB,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QACjG,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAAE,CAAC;YACrE,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,8BAA8B;QAC9B,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAAE,CAAC;YACrE,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,qBAAqB;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH;;;;;;;;;OASG;IACK,wBAAwB,CAAC,OAAe;QAC9C,MAAM,CAAC,GAAG,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC;IAEO,eAAe,CAAC,KAAU;QAChC,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAED;;;;;;;OAOG;IACK,cAAc,CACpB,YAAoB,EACpB,SAAiB,EACjB,QAAkB;QAElB,OAAO,QAAQ,CAAC,IAAI,CAClB,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CACzE,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -59,7 +59,7 @@ export interface PermissionsMiddlewareOptions {
|
|
|
59
59
|
* ```typescript
|
|
60
60
|
* const middleware = new PermissionsMiddleware({
|
|
61
61
|
* policies: [
|
|
62
|
-
* new WhitelistPolicy(['
|
|
62
|
+
* new WhitelistPolicy(['Read', 'Write']),
|
|
63
63
|
* new FileOperationPolicy({
|
|
64
64
|
* allowedPaths: ['/workspace'],
|
|
65
65
|
* blockedPaths: ['/etc', '/root']
|
|
@@ -74,7 +74,7 @@ export interface PermissionsMiddlewareOptions {
|
|
|
74
74
|
* });
|
|
75
75
|
*
|
|
76
76
|
* const decision = await middleware.checkPermission(
|
|
77
|
-
* '
|
|
77
|
+
* 'Read',
|
|
78
78
|
* { file_path: '/workspace/file.txt' },
|
|
79
79
|
* context
|
|
80
80
|
* );
|
|
@@ -23,7 +23,7 @@ import { PermissionAuditLogger } from './permissions/PermissionAuditLogger.js';
|
|
|
23
23
|
* ```typescript
|
|
24
24
|
* const middleware = new PermissionsMiddleware({
|
|
25
25
|
* policies: [
|
|
26
|
-
* new WhitelistPolicy(['
|
|
26
|
+
* new WhitelistPolicy(['Read', 'Write']),
|
|
27
27
|
* new FileOperationPolicy({
|
|
28
28
|
* allowedPaths: ['/workspace'],
|
|
29
29
|
* blockedPaths: ['/etc', '/root']
|
|
@@ -38,7 +38,7 @@ import { PermissionAuditLogger } from './permissions/PermissionAuditLogger.js';
|
|
|
38
38
|
* });
|
|
39
39
|
*
|
|
40
40
|
* const decision = await middleware.checkPermission(
|
|
41
|
-
* '
|
|
41
|
+
* 'Read',
|
|
42
42
|
* { file_path: '/workspace/file.txt' },
|
|
43
43
|
* context
|
|
44
44
|
* );
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RetryMiddleware.d.ts","sourceRoot":"","sources":["../../src/middleware/RetryMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,EAEZ,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"RetryMiddleware.d.ts","sourceRoot":"","sources":["../../src/middleware/RetryMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,EAEZ,MAAM,oCAAoC,CAAC;AAqB5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBAAa,eAAgB,YAAW,cAAc;IAUlD,OAAO,CAAC,QAAQ,CAAC,eAAe;IATlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IAEvC;;;;;OAKG;gBAEgB,eAAe,EAAE,gBAAgB,EAClD,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM;IA0BrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACG,gBAAgB,CAAC,CAAC,EACtB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAwD1B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAkBvC;;;;;OAKG;IACH,OAAO,CAAC,KAAK;IAIb;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,YAAY;IA4BpB;;;;OAIG;IACH,UAAU,IAAI,QAAQ,CAAC,YAAY,CAAC;CAGrC"}
|
|
@@ -25,6 +25,7 @@ const DEFAULT_OPTIONS = {
|
|
|
25
25
|
maxDelayMs: 30000,
|
|
26
26
|
backoffMultiplier: 2,
|
|
27
27
|
jitterFactor: 0.1,
|
|
28
|
+
rateLimitMaxRetries: 2,
|
|
28
29
|
};
|
|
29
30
|
/**
|
|
30
31
|
* RetryMiddleware
|
|
@@ -160,8 +161,13 @@ export class RetryMiddleware {
|
|
|
160
161
|
// Classify the error
|
|
161
162
|
const classification = this.errorClassifier.classify(error);
|
|
162
163
|
errors.push(classification);
|
|
163
|
-
// Check if we should retry
|
|
164
|
-
|
|
164
|
+
// Check if we should retry. Rate limits get a lower attempt cap than
|
|
165
|
+
// transient faults (grok-build port): a 429 that survives two waits
|
|
166
|
+
// will usually survive a third.
|
|
167
|
+
const attemptCap = classification.errorType === 'rate_limit'
|
|
168
|
+
? Math.min(this.options.maxRetries, this.options.rateLimitMaxRetries ?? this.options.maxRetries)
|
|
169
|
+
: this.options.maxRetries;
|
|
170
|
+
const isLastAttempt = attempt >= attemptCap;
|
|
165
171
|
const shouldRetry = classification.isRetryable && !isLastAttempt;
|
|
166
172
|
if (!shouldRetry) {
|
|
167
173
|
// Either non-retryable or exhausted retries - throw error
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RetryMiddleware.js","sourceRoot":"","sources":["../../src/middleware/RetryMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH;;;;;;;;;GASG;AACH,MAAM,eAAe,GAAiB;IACpC,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,KAAK;IACjB,iBAAiB,EAAE,CAAC;IACpB,YAAY,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"RetryMiddleware.js","sourceRoot":"","sources":["../../src/middleware/RetryMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,6 +67,10 @@ export interface RetryOptions {
|
|
|
67
67
|
maxDelayMs: number;
|
|
68
68
|
backoffMultiplier: number;
|
|
69
69
|
jitterFactor: number;
|
|
70
|
+
/** Separate, lower attempt cap for rate-limit (429) errors — a 429 that
|
|
71
|
+
* survives two waits usually survives a third; burning the full backoff
|
|
72
|
+
* ladder wastes wall-clock (grok-build port, 2026-08-01). Default: 2. */
|
|
73
|
+
rateLimitMaxRetries?: number;
|
|
70
74
|
}
|
|
71
75
|
/**
|
|
72
76
|
* Result of a retry operation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MiddlewareContracts.d.ts","sourceRoot":"","sources":["../../../src/middleware/contracts/MiddlewareContracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAMnF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,CAAC,EAAE;QACb,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,MAAM,EAAE,OAAO;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IAEjB,OAAO,CACL,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAC3B,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAMD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,CAAC;IACxF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,mBAAmB,CAAC;IAE1C;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC;IAEjC;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;CAC5D;AAMD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"MiddlewareContracts.d.ts","sourceRoot":"","sources":["../../../src/middleware/contracts/MiddlewareContracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAMnF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,CAAC,EAAE;QACb,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,MAAM,EAAE,OAAO;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IAEjB,OAAO,CACL,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAC3B,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAMD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,CAAC;IACxF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,mBAAmB,CAAC;IAE1C;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC;IAEjC;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;CAC5D;AAMD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB;;8EAE0E;IAC1E,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC;IACV,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,gBAAgB,CAAC,CAAC,EAChB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3B;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CACzC;AAMD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,CAAA;CAAE,GACrC;IACE,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;CACjC,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,GAAG,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACnE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;;OAQG;IACH,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnF;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,GAAG,CAAC;IACf,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,GAAG,EACd,OAAO,EAAE,iBAAiB,EAC1B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/B;;;;OAIG;IACH,eAAe,CACb,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAAC;CACxD;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IAC1C,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,KAAK,CAAC,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC,CAAC;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,oBAAoB,CAClB,WAAW,EAAE,MAAM,GAAG,GAAG,EAAE,EAC3B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAElB;;OAEG;IACH,qBAAqB,CACnB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,iBAAiB,GACzB,gBAAgB,CAAC;IAEpB;;OAEG;IACH,sBAAsB,CACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,iBAAiB,CAAC;CACtB;AAMD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,uBAAuB,CACrB,UAAU,EAAE,oBAAoB,EAChC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC;IAEX;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtD;;OAEG;IACH,sBAAsB,CACpB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;IAE1D;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAEpD;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,qBAAqB,CAAC,EAAE,sBAAsB,CAAC;IAC/C,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC;IACnD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B"}
|
|
@@ -51,14 +51,14 @@ export interface BashCommandPolicyConfig {
|
|
|
51
51
|
* });
|
|
52
52
|
*
|
|
53
53
|
* await policy.evaluate({
|
|
54
|
-
* toolName: '
|
|
54
|
+
* toolName: 'Bash',
|
|
55
55
|
* toolInput: { command: 'ls -la' },
|
|
56
56
|
* sessionId: '123',
|
|
57
57
|
* timestamp: new Date()
|
|
58
58
|
* }); // Returns { allowed: true }
|
|
59
59
|
*
|
|
60
60
|
* await policy.evaluate({
|
|
61
|
-
* toolName: '
|
|
61
|
+
* toolName: 'Bash',
|
|
62
62
|
* toolInput: { command: 'rm -rf /' },
|
|
63
63
|
* sessionId: '123',
|
|
64
64
|
* timestamp: new Date()
|
|
@@ -66,14 +66,14 @@ const DEFAULT_DANGEROUS_PATTERNS = [
|
|
|
66
66
|
* });
|
|
67
67
|
*
|
|
68
68
|
* await policy.evaluate({
|
|
69
|
-
* toolName: '
|
|
69
|
+
* toolName: 'Bash',
|
|
70
70
|
* toolInput: { command: 'ls -la' },
|
|
71
71
|
* sessionId: '123',
|
|
72
72
|
* timestamp: new Date()
|
|
73
73
|
* }); // Returns { allowed: true }
|
|
74
74
|
*
|
|
75
75
|
* await policy.evaluate({
|
|
76
|
-
* toolName: '
|
|
76
|
+
* toolName: 'Bash',
|
|
77
77
|
* toolInput: { command: 'rm -rf /' },
|
|
78
78
|
* sessionId: '123',
|
|
79
79
|
* timestamp: new Date()
|
|
@@ -25,7 +25,7 @@ import { BasePermissionPolicy } from './PermissionPolicy.js';
|
|
|
25
25
|
* }); // Returns { allowed: false, reason: '...', canApprove: false }
|
|
26
26
|
*
|
|
27
27
|
* await policy.evaluate({
|
|
28
|
-
* toolName: '
|
|
28
|
+
* toolName: 'Read',
|
|
29
29
|
* toolInput: {},
|
|
30
30
|
* sessionId: '123',
|
|
31
31
|
* timestamp: new Date()
|
|
@@ -24,7 +24,7 @@ import { BasePermissionPolicy, PolicyPriority } from './PermissionPolicy.js';
|
|
|
24
24
|
* }); // Returns { allowed: false, reason: '...', canApprove: false }
|
|
25
25
|
*
|
|
26
26
|
* await policy.evaluate({
|
|
27
|
-
* toolName: '
|
|
27
|
+
* toolName: 'Read',
|
|
28
28
|
* toolInput: {},
|
|
29
29
|
* sessionId: '123',
|
|
30
30
|
* timestamp: new Date()
|
|
@@ -57,14 +57,14 @@ export interface FileOperationPolicyConfig {
|
|
|
57
57
|
* });
|
|
58
58
|
*
|
|
59
59
|
* await policy.evaluate({
|
|
60
|
-
* toolName: '
|
|
60
|
+
* toolName: 'Read',
|
|
61
61
|
* toolInput: { file_path: '/home/user/workspace/file.txt' },
|
|
62
62
|
* sessionId: '123',
|
|
63
63
|
* timestamp: new Date()
|
|
64
64
|
* }); // Returns { allowed: true }
|
|
65
65
|
*
|
|
66
66
|
* await policy.evaluate({
|
|
67
|
-
* toolName: '
|
|
67
|
+
* toolName: 'Read',
|
|
68
68
|
* toolInput: { file_path: '/etc/passwd' },
|
|
69
69
|
* sessionId: '123',
|
|
70
70
|
* timestamp: new Date()
|
|
@@ -53,14 +53,14 @@ const SENSITIVE_DIRECTORIES = [
|
|
|
53
53
|
* });
|
|
54
54
|
*
|
|
55
55
|
* await policy.evaluate({
|
|
56
|
-
* toolName: '
|
|
56
|
+
* toolName: 'Read',
|
|
57
57
|
* toolInput: { file_path: '/home/user/workspace/file.txt' },
|
|
58
58
|
* sessionId: '123',
|
|
59
59
|
* timestamp: new Date()
|
|
60
60
|
* }); // Returns { allowed: true }
|
|
61
61
|
*
|
|
62
62
|
* await policy.evaluate({
|
|
63
|
-
* toolName: '
|
|
63
|
+
* toolName: 'Read',
|
|
64
64
|
* toolInput: { file_path: '/etc/passwd' },
|
|
65
65
|
* sessionId: '123',
|
|
66
66
|
* timestamp: new Date()
|
|
@@ -76,7 +76,7 @@ export interface AuditQueryOptions {
|
|
|
76
76
|
* await logger.log({
|
|
77
77
|
* timestamp: new Date(),
|
|
78
78
|
* sessionId: '123',
|
|
79
|
-
* toolName: '
|
|
79
|
+
* toolName: 'Read',
|
|
80
80
|
* toolInput: { file_path: '/workspace/file.txt' },
|
|
81
81
|
* decision: { allowed: true },
|
|
82
82
|
* approvalRequested: false
|
|
@@ -26,7 +26,7 @@ import { createInterface } from 'node:readline';
|
|
|
26
26
|
* await logger.log({
|
|
27
27
|
* timestamp: new Date(),
|
|
28
28
|
* sessionId: '123',
|
|
29
|
-
* toolName: '
|
|
29
|
+
* toolName: 'Read',
|
|
30
30
|
* toolInput: { file_path: '/workspace/file.txt' },
|
|
31
31
|
* decision: { allowed: true },
|
|
32
32
|
* approvalRequested: false
|
|
@@ -49,14 +49,14 @@ export const PermissionPresets = {
|
|
|
49
49
|
{
|
|
50
50
|
type: 'whitelist',
|
|
51
51
|
config: {
|
|
52
|
-
allowedTools: ['
|
|
52
|
+
allowedTools: ['Read', 'Glob', 'Grep', 'CreateArtifactTool'],
|
|
53
53
|
},
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
56
|
type: 'blacklist',
|
|
57
57
|
priority: 100,
|
|
58
58
|
config: {
|
|
59
|
-
blockedTools: ['
|
|
59
|
+
blockedTools: ['Bash', 'Write', 'Edit'],
|
|
60
60
|
},
|
|
61
61
|
},
|
|
62
62
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionConfig.js","sourceRoot":"","sources":["../../../src/middleware/permissions/PermissionConfig.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoLH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B;;OAEG;IACH,WAAW,EAAE,GAAqB,EAAE,CAAC,CAAC;QACpC,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,OAAO;QACtB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE;oBACN,YAAY,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBAC7B,YAAY,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC;oBACjD,wBAAwB,EAAE,IAAI;iBAC/B;aACF;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE;oBACN,eAAe,EAAE,EAAE;oBACnB,eAAe,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;oBACxC,2BAA2B,EAAE,IAAI;iBAClC;aACF;SACF;QACD,eAAe,EAAE,KAAK;QACtB,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,qCAAqC;SAC5C;KACF,CAAC;IAEF;;OAEG;IACH,UAAU,EAAE,GAAqB,EAAE,CAAC,CAAC;QACnC,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE;oBACN,YAAY,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"PermissionConfig.js","sourceRoot":"","sources":["../../../src/middleware/permissions/PermissionConfig.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoLH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B;;OAEG;IACH,WAAW,EAAE,GAAqB,EAAE,CAAC,CAAC;QACpC,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,OAAO;QACtB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE;oBACN,YAAY,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBAC7B,YAAY,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC;oBACjD,wBAAwB,EAAE,IAAI;iBAC/B;aACF;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE;oBACN,eAAe,EAAE,EAAE;oBACnB,eAAe,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;oBACxC,2BAA2B,EAAE,IAAI;iBAClC;aACF;SACF;QACD,eAAe,EAAE,KAAK;QACtB,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,qCAAqC;SAC5C;KACF,CAAC;IAEF;;OAEG;IACH,UAAU,EAAE,GAAqB,EAAE,CAAC,CAAC;QACnC,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE;oBACN,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC;iBAC7D;aACF;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,GAAG;gBACb,MAAM,EAAE;oBACN,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;iBACxC;aACF;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE;oBACN,YAAY,EAAE,CAAC,mBAAmB,CAAC;oBACnC,YAAY,EAAE,CAAC,GAAG,CAAC;oBACnB,wBAAwB,EAAE,KAAK;iBAChC;aACF;SACF;QACD,eAAe,EAAE,UAAU;QAC3B,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,iCAAiC;SACxC;KACF,CAAC;IAEF;;OAEG;IACH,OAAO,EAAE,GAAqB,EAAE,CAAC,CAAC;QAChC,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,OAAO;QACtB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE;oBACN,YAAY,EAAE,CAAC,qBAAqB,CAAC;oBACrC,YAAY,EAAE,EAAE;oBAChB,wBAAwB,EAAE,KAAK;iBAChC;aACF;SACF;QACD,eAAe,EAAE,cAAc;QAC/B,QAAQ,EAAE;YACR,OAAO,EAAE,KAAK;SACf;KACF,CAAC;IAEF;;OAEG;IACH,QAAQ,EAAE,GAAqB,EAAE,CAAC,CAAC;QACjC,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,OAAO;QACtB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE;YACR,OAAO,EAAE,KAAK;SACf;KACF,CAAC;CACM,CAAC"}
|
|
@@ -55,11 +55,11 @@ export interface EvaluationResult {
|
|
|
55
55
|
* @example
|
|
56
56
|
* ```typescript
|
|
57
57
|
* const evaluator = new PermissionEvaluator();
|
|
58
|
-
* evaluator.registerPolicy(new WhitelistPolicy(['
|
|
58
|
+
* evaluator.registerPolicy(new WhitelistPolicy(['Read', 'Write']));
|
|
59
59
|
* evaluator.registerPolicy(new FileOperationPolicy(['/workspace'], ['/etc']));
|
|
60
60
|
*
|
|
61
61
|
* const result = await evaluator.evaluate({
|
|
62
|
-
* toolName: '
|
|
62
|
+
* toolName: 'Read',
|
|
63
63
|
* toolInput: { file_path: '/workspace/file.txt' },
|
|
64
64
|
* sessionId: '123',
|
|
65
65
|
* timestamp: new Date()
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
* @example
|
|
19
19
|
* ```typescript
|
|
20
20
|
* const evaluator = new PermissionEvaluator();
|
|
21
|
-
* evaluator.registerPolicy(new WhitelistPolicy(['
|
|
21
|
+
* evaluator.registerPolicy(new WhitelistPolicy(['Read', 'Write']));
|
|
22
22
|
* evaluator.registerPolicy(new FileOperationPolicy(['/workspace'], ['/etc']));
|
|
23
23
|
*
|
|
24
24
|
* const result = await evaluator.evaluate({
|
|
25
|
-
* toolName: '
|
|
25
|
+
* toolName: 'Read',
|
|
26
26
|
* toolInput: { file_path: '/workspace/file.txt' },
|
|
27
27
|
* sessionId: '123',
|
|
28
28
|
* timestamp: new Date()
|
|
@@ -15,10 +15,10 @@ import { BasePermissionPolicy } from './PermissionPolicy.js';
|
|
|
15
15
|
*
|
|
16
16
|
* @example
|
|
17
17
|
* ```typescript
|
|
18
|
-
* const policy = new WhitelistPolicy(['
|
|
18
|
+
* const policy = new WhitelistPolicy(['Read', 'Write', 'Bash']);
|
|
19
19
|
*
|
|
20
20
|
* await policy.evaluate({
|
|
21
|
-
* toolName: '
|
|
21
|
+
* toolName: 'Read',
|
|
22
22
|
* toolInput: {},
|
|
23
23
|
* sessionId: '123',
|
|
24
24
|
* timestamp: new Date()
|