@google/gemini-cli-core 0.16.0-nightly.20251112.c961f274 → 0.16.0-nightly.20251113.ad1f0d99
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/google-gemini-cli-core-0.16.0-nightly.20251112.c961f274.tgz +0 -0
- package/dist/src/code_assist/experiments/client_metadata.js +2 -1
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.test.js +7 -2
- package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -1
- package/dist/src/config/config.js +2 -2
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.d.ts +1 -1
- package/dist/src/confirmation-bus/message-bus.js +2 -2
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.test.js +30 -24
- package/dist/src/confirmation-bus/message-bus.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/hooks/hookAggregator.d.ts +68 -0
- package/dist/src/hooks/hookAggregator.js +262 -0
- package/dist/src/hooks/hookAggregator.js.map +1 -0
- package/dist/src/hooks/hookAggregator.test.d.ts +6 -0
- package/dist/src/hooks/hookAggregator.test.js +387 -0
- package/dist/src/hooks/hookAggregator.test.js.map +1 -0
- package/dist/src/policy/config.js +3 -1
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/config.test.js +118 -1
- package/dist/src/policy/config.test.js.map +1 -1
- package/dist/src/policy/policies/write.toml +10 -0
- package/dist/src/policy/policy-engine.d.ts +12 -3
- package/dist/src/policy/policy-engine.js +61 -7
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +422 -86
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/toml-loader.d.ts +2 -1
- package/dist/src/policy/toml-loader.js +103 -6
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +32 -88
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/types.d.ts +65 -0
- package/dist/src/policy/types.js +4 -0
- package/dist/src/policy/types.js.map +1 -1
- package/dist/src/safety/built-in.d.ts +21 -0
- package/dist/src/safety/built-in.js +106 -0
- package/dist/src/safety/built-in.js.map +1 -0
- package/dist/src/safety/built-in.test.d.ts +6 -0
- package/dist/src/safety/built-in.test.js +199 -0
- package/dist/src/safety/built-in.test.js.map +1 -0
- package/dist/src/safety/checker-runner.d.ts +48 -0
- package/dist/src/safety/checker-runner.js +208 -0
- package/dist/src/safety/checker-runner.js.map +1 -0
- package/dist/src/safety/checker-runner.test.d.ts +6 -0
- package/dist/src/safety/checker-runner.test.js +238 -0
- package/dist/src/safety/checker-runner.test.js.map +1 -0
- package/dist/src/safety/context-builder.d.ts +23 -0
- package/dist/src/safety/context-builder.js +47 -0
- package/dist/src/safety/context-builder.js.map +1 -0
- package/dist/src/safety/context-builder.test.d.ts +6 -0
- package/dist/src/safety/context-builder.test.js +49 -0
- package/dist/src/safety/context-builder.test.js.map +1 -0
- package/dist/src/safety/protocol.d.ts +88 -0
- package/dist/src/safety/protocol.js +15 -0
- package/dist/src/safety/protocol.js.map +1 -0
- package/dist/src/safety/registry.d.ts +26 -0
- package/dist/src/safety/registry.js +65 -0
- package/dist/src/safety/registry.js.map +1 -0
- package/dist/src/safety/registry.test.d.ts +6 -0
- package/dist/src/safety/registry.test.js +31 -0
- package/dist/src/safety/registry.test.js.map +1 -0
- package/dist/src/tools/base-tool-invocation.test.js +2 -2
- package/dist/src/tools/base-tool-invocation.test.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +29 -0
- package/dist/src/tools/write-todos.js +33 -0
- package/dist/src/tools/write-todos.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/google-gemini-cli-core-0.16.0-nightly.20251112.2abc288c.tgz +0 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { FunctionCall } from '@google/genai';
|
|
7
|
+
/**
|
|
8
|
+
* Represents a single turn in the conversation between the user and the model.
|
|
9
|
+
* This provides semantic context for why a tool call might be happening.
|
|
10
|
+
*/
|
|
11
|
+
export interface ConversationTurn {
|
|
12
|
+
user: {
|
|
13
|
+
text: string;
|
|
14
|
+
};
|
|
15
|
+
model: {
|
|
16
|
+
text?: string;
|
|
17
|
+
toolCalls?: FunctionCall[];
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The data structure passed from the CLI to a safety checker process via stdin.
|
|
22
|
+
*/
|
|
23
|
+
export interface SafetyCheckInput {
|
|
24
|
+
/**
|
|
25
|
+
* The semantic version of the protocol (e.g., "1.0.0"). This allows
|
|
26
|
+
* for introducing breaking changes in the future while maintaining
|
|
27
|
+
* support for older checkers.
|
|
28
|
+
*/
|
|
29
|
+
protocolVersion: '1.0.0';
|
|
30
|
+
/**
|
|
31
|
+
* The specific tool call that is being validated.
|
|
32
|
+
*/
|
|
33
|
+
toolCall: FunctionCall;
|
|
34
|
+
/**
|
|
35
|
+
* A container for all contextual information from the CLI's internal state.
|
|
36
|
+
* By grouping data into categories, we can easily add new context in the
|
|
37
|
+
* future without creating a flat, unmanageable object.
|
|
38
|
+
*/
|
|
39
|
+
context: {
|
|
40
|
+
/**
|
|
41
|
+
* Information about the user's file system and execution environment.
|
|
42
|
+
*/
|
|
43
|
+
environment: {
|
|
44
|
+
cwd: string;
|
|
45
|
+
workspaces: string[];
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* The recent history of the conversation. This can be used by checkers
|
|
49
|
+
* that need to understand the intent behind a tool call.
|
|
50
|
+
*/
|
|
51
|
+
history?: {
|
|
52
|
+
turns: ConversationTurn[];
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Configuration for the safety checker.
|
|
57
|
+
* This allows checkers to be parameterized (e.g. allowed paths).
|
|
58
|
+
*/
|
|
59
|
+
config?: unknown;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The possible decisions a safety checker can make.
|
|
63
|
+
*/
|
|
64
|
+
export declare enum SafetyCheckDecision {
|
|
65
|
+
ALLOW = "allow",
|
|
66
|
+
DENY = "deny",
|
|
67
|
+
ASK_USER = "ask_user"
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The data structure returned by a safety checker process via stdout.
|
|
71
|
+
*/
|
|
72
|
+
export type SafetyCheckResult = {
|
|
73
|
+
/**
|
|
74
|
+
* The decision made by the safety checker.
|
|
75
|
+
*/
|
|
76
|
+
decision: SafetyCheckDecision.ALLOW;
|
|
77
|
+
/**
|
|
78
|
+
* If not allowed, a message explaining why the tool call was blocked.
|
|
79
|
+
* This will be shown to the user.
|
|
80
|
+
*/
|
|
81
|
+
reason?: string;
|
|
82
|
+
} | {
|
|
83
|
+
decision: SafetyCheckDecision.DENY;
|
|
84
|
+
reason: string;
|
|
85
|
+
} | {
|
|
86
|
+
decision: SafetyCheckDecision.ASK_USER;
|
|
87
|
+
reason: string;
|
|
88
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* The possible decisions a safety checker can make.
|
|
8
|
+
*/
|
|
9
|
+
export var SafetyCheckDecision;
|
|
10
|
+
(function (SafetyCheckDecision) {
|
|
11
|
+
SafetyCheckDecision["ALLOW"] = "allow";
|
|
12
|
+
SafetyCheckDecision["DENY"] = "deny";
|
|
13
|
+
SafetyCheckDecision["ASK_USER"] = "ask_user";
|
|
14
|
+
})(SafetyCheckDecision || (SafetyCheckDecision = {}));
|
|
15
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/safety/protocol.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgEH;;GAEG;AACH,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,sCAAe,CAAA;IACf,oCAAa,CAAA;IACb,4CAAqB,CAAA;AACvB,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { type InProcessChecker } from './built-in.js';
|
|
7
|
+
/**
|
|
8
|
+
* Registry for managing safety checker resolution.
|
|
9
|
+
*/
|
|
10
|
+
export declare class CheckerRegistry {
|
|
11
|
+
private readonly checkersPath;
|
|
12
|
+
private static readonly BUILT_IN_EXTERNAL_CHECKERS;
|
|
13
|
+
private static readonly BUILT_IN_IN_PROCESS_CHECKERS;
|
|
14
|
+
private static readonly VALID_NAME_PATTERN;
|
|
15
|
+
constructor(checkersPath: string);
|
|
16
|
+
/**
|
|
17
|
+
* Resolves an external checker name to an absolute executable path.
|
|
18
|
+
*/
|
|
19
|
+
resolveExternal(name: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Resolves an in-process checker name to a checker instance.
|
|
22
|
+
*/
|
|
23
|
+
resolveInProcess(name: string): InProcessChecker;
|
|
24
|
+
private static isValidCheckerName;
|
|
25
|
+
static getBuiltInCheckers(): string[];
|
|
26
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
import * as fs from 'node:fs';
|
|
8
|
+
import { AllowedPathChecker } from './built-in.js';
|
|
9
|
+
import { InProcessCheckerType } from '../policy/types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Registry for managing safety checker resolution.
|
|
12
|
+
*/
|
|
13
|
+
export class CheckerRegistry {
|
|
14
|
+
checkersPath;
|
|
15
|
+
static BUILT_IN_EXTERNAL_CHECKERS = new Map([
|
|
16
|
+
// No external built-ins for now
|
|
17
|
+
]);
|
|
18
|
+
static BUILT_IN_IN_PROCESS_CHECKERS = new Map([[InProcessCheckerType.ALLOWED_PATH, new AllowedPathChecker()]]);
|
|
19
|
+
// Regex to validate checker names (alphanumeric and hyphens only)
|
|
20
|
+
static VALID_NAME_PATTERN = /^[a-z0-9-]+$/;
|
|
21
|
+
constructor(checkersPath) {
|
|
22
|
+
this.checkersPath = checkersPath;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolves an external checker name to an absolute executable path.
|
|
26
|
+
*/
|
|
27
|
+
resolveExternal(name) {
|
|
28
|
+
if (!CheckerRegistry.isValidCheckerName(name)) {
|
|
29
|
+
throw new Error(`Invalid checker name "${name}". Checker names must contain only lowercase letters, numbers, and hyphens.`);
|
|
30
|
+
}
|
|
31
|
+
const builtInPath = CheckerRegistry.BUILT_IN_EXTERNAL_CHECKERS.get(name);
|
|
32
|
+
if (builtInPath) {
|
|
33
|
+
const fullPath = path.join(this.checkersPath, builtInPath);
|
|
34
|
+
if (!fs.existsSync(fullPath)) {
|
|
35
|
+
throw new Error(`Built-in checker "${name}" not found at ${fullPath}`);
|
|
36
|
+
}
|
|
37
|
+
return fullPath;
|
|
38
|
+
}
|
|
39
|
+
// TODO: Phase 5 - Add support for custom external checkers
|
|
40
|
+
throw new Error(`Unknown external checker "${name}".`);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolves an in-process checker name to a checker instance.
|
|
44
|
+
*/
|
|
45
|
+
resolveInProcess(name) {
|
|
46
|
+
if (!CheckerRegistry.isValidCheckerName(name)) {
|
|
47
|
+
throw new Error(`Invalid checker name "${name}".`);
|
|
48
|
+
}
|
|
49
|
+
const checker = CheckerRegistry.BUILT_IN_IN_PROCESS_CHECKERS.get(name);
|
|
50
|
+
if (checker) {
|
|
51
|
+
return checker;
|
|
52
|
+
}
|
|
53
|
+
throw new Error(`Unknown in-process checker "${name}". Available: ${Array.from(CheckerRegistry.BUILT_IN_IN_PROCESS_CHECKERS.keys()).join(', ')}`);
|
|
54
|
+
}
|
|
55
|
+
static isValidCheckerName(name) {
|
|
56
|
+
return this.VALID_NAME_PATTERN.test(name) && !name.includes('..');
|
|
57
|
+
}
|
|
58
|
+
static getBuiltInCheckers() {
|
|
59
|
+
return [
|
|
60
|
+
...Array.from(this.BUILT_IN_EXTERNAL_CHECKERS.keys()),
|
|
61
|
+
...Array.from(this.BUILT_IN_IN_PROCESS_CHECKERS.keys()),
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/safety/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAyB,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,MAAM,OAAO,eAAe;IAaG;IAZrB,MAAM,CAAU,0BAA0B,GAAG,IAAI,GAAG,CAAiB;IAC3E,gCAAgC;KACjC,CAAC,CAAC;IAEK,MAAM,CAAU,4BAA4B,GAAG,IAAI,GAAG,CAG5D,CAAC,CAAC,oBAAoB,CAAC,YAAY,EAAE,IAAI,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnE,kEAAkE;IAC1D,MAAM,CAAU,kBAAkB,GAAG,cAAc,CAAC;IAE5D,YAA6B,YAAoB;QAApB,iBAAY,GAAZ,YAAY,CAAQ;IAAG,CAAC;IAErD;;OAEG;IACH,eAAe,CAAC,IAAY;QAC1B,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,6EAA6E,CAC3G,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,eAAe,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,kBAAkB,QAAQ,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,2DAA2D;QAC3D,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,IAAI,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,IAAY;QAC3B,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,IAAI,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,OAAO,GAAG,eAAe,CAAC,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,IAAI,KAAK,CACb,+BAA+B,IAAI,iBAAiB,KAAK,CAAC,IAAI,CAC5D,eAAe,CAAC,4BAA4B,CAAC,IAAI,EAAE,CACpD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,kBAAkB,CAAC,IAAY;QAC5C,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,kBAAkB;QACvB,OAAO;YACL,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,CAAC;YACrD,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
7
|
+
import { CheckerRegistry } from './registry.js';
|
|
8
|
+
import { InProcessCheckerType } from '../policy/types.js';
|
|
9
|
+
import { AllowedPathChecker } from './built-in.js';
|
|
10
|
+
describe('CheckerRegistry', () => {
|
|
11
|
+
let registry;
|
|
12
|
+
const mockCheckersPath = '/mock/checkers/path';
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
registry = new CheckerRegistry(mockCheckersPath);
|
|
15
|
+
});
|
|
16
|
+
it('should resolve built-in in-process checkers', () => {
|
|
17
|
+
const checker = registry.resolveInProcess(InProcessCheckerType.ALLOWED_PATH);
|
|
18
|
+
expect(checker).toBeInstanceOf(AllowedPathChecker);
|
|
19
|
+
});
|
|
20
|
+
it('should throw for unknown in-process checkers', () => {
|
|
21
|
+
expect(() => registry.resolveInProcess('unknown-checker')).toThrow('Unknown in-process checker "unknown-checker"');
|
|
22
|
+
});
|
|
23
|
+
it('should validate checker names', () => {
|
|
24
|
+
expect(() => registry.resolveInProcess('invalid name!')).toThrow('Invalid checker name');
|
|
25
|
+
expect(() => registry.resolveInProcess('../escape')).toThrow('Invalid checker name');
|
|
26
|
+
});
|
|
27
|
+
it('should throw for unknown external checkers (for now)', () => {
|
|
28
|
+
expect(() => registry.resolveExternal('some-external')).toThrow('Unknown external checker "some-external"');
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=registry.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../src/safety/registry.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,QAAyB,CAAC;IAC9B,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;IAE/C,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,IAAI,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CACvC,oBAAoB,CAAC,YAAY,CAClC,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAChE,8CAA8C,CAC/C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAC9D,sBAAsB,CACvB,CAAC;QACF,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAC1D,sBAAsB,CACvB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAC7D,0CAA0C,CAC3C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -29,7 +29,7 @@ describe('BaseToolInvocation', () => {
|
|
|
29
29
|
const serverName = 'test-server';
|
|
30
30
|
const tool = new TestBaseToolInvocation({}, messageBus, 'test-tool', 'Test Tool', serverName);
|
|
31
31
|
let capturedRequest;
|
|
32
|
-
vi.mocked(messageBus.publish).mockImplementation((request) => {
|
|
32
|
+
vi.mocked(messageBus.publish).mockImplementation(async (request) => {
|
|
33
33
|
if (request.type === MessageBusType.TOOL_CONFIRMATION_REQUEST) {
|
|
34
34
|
capturedRequest = request;
|
|
35
35
|
}
|
|
@@ -60,7 +60,7 @@ describe('BaseToolInvocation', () => {
|
|
|
60
60
|
it('should NOT propagate serverName if not provided', async () => {
|
|
61
61
|
const tool = new TestBaseToolInvocation({}, messageBus, 'test-tool', 'Test Tool');
|
|
62
62
|
let capturedRequest;
|
|
63
|
-
vi.mocked(messageBus.publish).mockImplementation((request) => {
|
|
63
|
+
vi.mocked(messageBus.publish).mockImplementation(async (request) => {
|
|
64
64
|
if (request.type === MessageBusType.TOOL_CONFIRMATION_REQUEST) {
|
|
65
65
|
capturedRequest = request;
|
|
66
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-tool-invocation.test.js","sourceRoot":"","sources":["../../../src/tools/base-tool-invocation.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAmB,MAAM,YAAY,CAAC;AAEjE,OAAO,EAEL,cAAc,GAGf,MAAM,8BAA8B,CAAC;AAEtC,MAAM,sBAAuB,SAAQ,kBAAsC;IACzE,cAAc;QACZ,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,KAAK,CAAC,OAAO;QACX,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;IAC/C,CAAC;CACF;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,UAAsB,CAAC;IAC3B,IAAI,eAAgC,CAAC;IAErC,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG;YACX,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;YAChB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;YAClB,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;SACI,CAAC;QAC3B,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,UAAU,GAAG,aAAa,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,sBAAsB,CACrC,EAAE,EACF,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,CACX,CAAC;QAEF,IAAI,eAAoD,CAAC;QACzD,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"base-tool-invocation.test.js","sourceRoot":"","sources":["../../../src/tools/base-tool-invocation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,35 @@ export interface WriteTodosToolParams {
|
|
|
16
16
|
export declare class WriteTodosTool extends BaseDeclarativeTool<WriteTodosToolParams, ToolResult> {
|
|
17
17
|
static readonly Name = "write_todos";
|
|
18
18
|
constructor();
|
|
19
|
+
get schema(): {
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
parametersJsonSchema: unknown;
|
|
23
|
+
responseJsonSchema: {
|
|
24
|
+
type: string;
|
|
25
|
+
properties: {
|
|
26
|
+
todos: {
|
|
27
|
+
type: string;
|
|
28
|
+
items: {
|
|
29
|
+
type: string;
|
|
30
|
+
properties: {
|
|
31
|
+
description: {
|
|
32
|
+
type: string;
|
|
33
|
+
};
|
|
34
|
+
status: {
|
|
35
|
+
type: string;
|
|
36
|
+
enum: readonly ["pending", "in_progress", "completed", "cancelled"];
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
required: string[];
|
|
40
|
+
additionalProperties: boolean;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
required: string[];
|
|
45
|
+
additionalProperties: boolean;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
19
48
|
protected validateToolParamValues(params: WriteTodosToolParams): string | null;
|
|
20
49
|
protected createInvocation(params: WriteTodosToolParams, _messageBus?: MessageBus, _toolName?: string, _displayName?: string): ToolInvocation<WriteTodosToolParams, ToolResult>;
|
|
21
50
|
}
|
|
@@ -125,12 +125,45 @@ export class WriteTodosTool extends BaseDeclarativeTool {
|
|
|
125
125
|
},
|
|
126
126
|
},
|
|
127
127
|
required: ['description', 'status'],
|
|
128
|
+
additionalProperties: false,
|
|
128
129
|
},
|
|
129
130
|
},
|
|
130
131
|
},
|
|
131
132
|
required: ['todos'],
|
|
133
|
+
additionalProperties: false,
|
|
132
134
|
});
|
|
133
135
|
}
|
|
136
|
+
get schema() {
|
|
137
|
+
return {
|
|
138
|
+
name: this.name,
|
|
139
|
+
description: this.description,
|
|
140
|
+
parametersJsonSchema: this.parameterSchema,
|
|
141
|
+
responseJsonSchema: {
|
|
142
|
+
type: 'object',
|
|
143
|
+
properties: {
|
|
144
|
+
todos: {
|
|
145
|
+
type: 'array',
|
|
146
|
+
items: {
|
|
147
|
+
type: 'object',
|
|
148
|
+
properties: {
|
|
149
|
+
description: {
|
|
150
|
+
type: 'string',
|
|
151
|
+
},
|
|
152
|
+
status: {
|
|
153
|
+
type: 'string',
|
|
154
|
+
enum: TODO_STATUSES,
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
required: ['description', 'status'],
|
|
158
|
+
additionalProperties: false,
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
required: ['todos'],
|
|
163
|
+
additionalProperties: false,
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
134
167
|
validateToolParamValues(params) {
|
|
135
168
|
const todos = params?.todos;
|
|
136
169
|
if (!params || !Array.isArray(todos)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-todos.js","sourceRoot":"","sources":["../../../src/tools/write-todos.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,IAAI,GAGL,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,aAAa,GAAG;IACpB,SAAS;IACT,aAAa;IACb,WAAW;IACX,WAAW;CACH,CAAC;AAEX,oCAAoC;AACpC,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DtC,CAAC;AASF,MAAM,wBAAyB,SAAQ,kBAGtC;IACC,YACE,MAA4B,EAC5B,UAAuB,EACvB,SAAkB,EAClB,gBAAyB;QAEzB,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,cAAc;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QACD,OAAO,OAAO,KAAK,UAAU,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAAoB,EACpB,aAAwC;QAExC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QACtC,MAAM,cAAc,GAAG,KAAK;aACzB,GAAG,CACF,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,CACtE;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,UAAU,GACd,KAAK,CAAC,MAAM,GAAG,CAAC;YACd,CAAC,CAAC,iEAAiE,cAAc,EAAE;YACnF,CAAC,CAAC,qCAAqC,CAAC;QAE5C,OAAO;YACL,UAAU;YACV,aAAa,EAAE,EAAE,KAAK,EAAE;SACzB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,mBAGnC;IACC,MAAM,CAAU,IAAI,GAAG,qBAAqB,CAAC;IAE7C;QACE,KAAK,CACH,cAAc,CAAC,IAAI,EACnB,YAAY,EACZ,uBAAuB,EACvB,IAAI,CAAC,KAAK,EACV;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,OAAO;oBACb,WAAW,EACT,uEAAuE;oBACzE,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,qBAAqB;wBAClC,UAAU,EAAE;4BACV,WAAW,EAAE;gCACX,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,8BAA8B;6BAC5C;4BACD,MAAM,EAAE;gCACN,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,iCAAiC;gCAC9C,IAAI,EAAE,aAAa;6BACpB;yBACF;wBACD,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"write-todos.js","sourceRoot":"","sources":["../../../src/tools/write-todos.ts"],"names":[],"mappings":"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"}
|