@google/gemini-cli-core 0.24.0-nightly.20260103.30f5c4af4 → 0.24.0-preview.1
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/docs/cli/settings.md +1 -0
- package/dist/docs/cli/skills.md +156 -0
- package/dist/docs/cli/telemetry.md +3 -3
- package/dist/docs/cli/tutorials/skills-getting-started.md +124 -0
- package/dist/docs/cli/tutorials.md +4 -0
- package/dist/docs/get-started/configuration.md +32 -5
- package/dist/docs/sidebar.json +4 -0
- package/dist/google-gemini-cli-core-0.24.0-preview.0.tgz +0 -0
- package/dist/src/agents/a2a-client-manager.d.ts +5 -0
- package/dist/src/agents/a2a-client-manager.js +130 -0
- package/dist/src/agents/a2a-client-manager.js.map +1 -1
- package/dist/src/agents/a2a-client-manager.test.js +27 -1
- package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
- package/dist/src/agents/a2aUtils.d.ts +28 -0
- package/dist/src/agents/a2aUtils.js +111 -0
- package/dist/src/agents/a2aUtils.js.map +1 -0
- package/dist/src/agents/a2aUtils.test.js +147 -0
- package/dist/src/agents/a2aUtils.test.js.map +1 -0
- package/dist/src/agents/delegate-to-agent-tool.d.ts +2 -2
- package/dist/src/agents/delegate-to-agent-tool.js +6 -6
- package/dist/src/agents/delegate-to-agent-tool.js.map +1 -1
- package/dist/src/agents/delegate-to-agent-tool.test.js +37 -7
- package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -1
- package/dist/src/agents/introspection-agent.js +2 -2
- package/dist/src/agents/introspection-agent.js.map +1 -1
- package/dist/src/agents/introspection-agent.test.js +2 -2
- package/dist/src/agents/introspection-agent.test.js.map +1 -1
- package/dist/src/agents/local-executor.js +1 -1
- package/dist/src/agents/local-executor.js.map +1 -1
- package/dist/src/agents/local-executor.test.js +2 -2
- package/dist/src/agents/local-executor.test.js.map +1 -1
- package/dist/src/agents/local-invocation.d.ts +2 -2
- package/dist/src/agents/local-invocation.js +3 -3
- package/dist/src/agents/local-invocation.js.map +1 -1
- package/dist/src/agents/local-invocation.test.js +7 -5
- package/dist/src/agents/local-invocation.test.js.map +1 -1
- package/dist/src/agents/remote-invocation.d.ts +17 -3
- package/dist/src/agents/remote-invocation.js +104 -6
- package/dist/src/agents/remote-invocation.js.map +1 -1
- package/dist/src/agents/remote-invocation.test.js +184 -18
- package/dist/src/agents/remote-invocation.test.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.d.ts +2 -2
- package/dist/src/agents/subagent-tool-wrapper.js +6 -5
- package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.test.js +17 -10
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
- package/dist/src/agents/types.d.ts +6 -0
- package/dist/src/code_assist/oauth2.js +31 -1
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +75 -3
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +5 -0
- package/dist/src/code_assist/server.js +19 -4
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +19 -0
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.js +6 -4
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +63 -0
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +18 -0
- package/dist/src/config/config.d.ts +19 -3
- package/dist/src/config/config.js +49 -25
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +81 -4
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/models.js +6 -4
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.js +21 -1
- package/dist/src/config/models.test.js.map +1 -1
- package/dist/src/core/client.js +39 -7
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +93 -0
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +1 -1
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +1 -1
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolHookTriggers.test.js +11 -9
- package/dist/src/core/coreToolHookTriggers.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +1 -0
- package/dist/src/core/coreToolScheduler.js +30 -106
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +21 -21
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.js +14 -2
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/prompts.js +1 -1
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/sessionHookTriggers.d.ts +3 -2
- package/dist/src/core/sessionHookTriggers.js +8 -1
- package/dist/src/core/sessionHookTriggers.js.map +1 -1
- package/dist/src/core/turn.d.ts +16 -2
- package/dist/src/core/turn.js +2 -0
- package/dist/src/core/turn.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/generated/git-commit.js.map +1 -1
- package/dist/src/hooks/hookEventHandler.d.ts +6 -2
- package/dist/src/hooks/hookEventHandler.js +24 -3
- package/dist/src/hooks/hookEventHandler.js.map +1 -1
- package/dist/src/hooks/hookEventHandler.test.js +31 -8
- package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
- package/dist/src/hooks/hookRunner.d.ts +2 -2
- package/dist/src/hooks/hookRunner.js +12 -4
- package/dist/src/hooks/hookRunner.js.map +1 -1
- package/dist/src/hooks/hookRunner.test.js +33 -0
- package/dist/src/hooks/hookRunner.test.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.js +3 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/policy/config.js +60 -22
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/config.test.js +21 -0
- package/dist/src/policy/config.test.js.map +1 -1
- package/dist/src/policy/persistence.test.js +1 -1
- package/dist/src/policy/persistence.test.js.map +1 -1
- package/dist/src/policy/policy-engine.js +22 -6
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +206 -1
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/toml-loader.d.ts +0 -8
- package/dist/src/policy/toml-loader.js +7 -70
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +16 -6
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/utils.d.ts +21 -0
- package/dist/src/policy/utils.js +42 -0
- package/dist/src/policy/utils.js.map +1 -0
- package/dist/src/policy/utils.test.js +64 -0
- package/dist/src/policy/utils.test.js.map +1 -0
- package/dist/src/scheduler/tool-executor.d.ts +22 -0
- package/dist/src/scheduler/tool-executor.js +198 -0
- package/dist/src/scheduler/tool-executor.js.map +1 -0
- package/dist/src/scheduler/tool-executor.test.d.ts +6 -0
- package/dist/src/scheduler/tool-executor.test.js +231 -0
- package/dist/src/scheduler/tool-executor.test.js.map +1 -0
- package/dist/src/skills/skillLoader.d.ts +28 -0
- package/dist/src/skills/skillLoader.js +77 -0
- package/dist/src/skills/skillLoader.js.map +1 -0
- package/dist/src/skills/skillLoader.test.d.ts +6 -0
- package/dist/src/skills/skillLoader.test.js +73 -0
- package/dist/src/skills/skillLoader.test.js.map +1 -0
- package/dist/src/{services → skills}/skillManager.d.ts +10 -20
- package/dist/src/skills/skillManager.js +89 -0
- package/dist/src/skills/skillManager.js.map +1 -0
- package/dist/src/skills/skillManager.test.d.ts +6 -0
- package/dist/src/skills/skillManager.test.js +128 -0
- package/dist/src/skills/skillManager.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +5 -5
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +8 -8
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +2 -2
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +4 -4
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +3 -3
- package/dist/src/telemetry/loggers.js +4 -4
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +6 -5
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +7 -7
- package/dist/src/telemetry/types.js +10 -10
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/test-utils/mock-message-bus.d.ts +1 -0
- package/dist/src/test-utils/mock-message-bus.js +29 -0
- package/dist/src/test-utils/mock-message-bus.js.map +1 -1
- package/dist/src/test-utils/mock-tool.d.ts +5 -3
- package/dist/src/test-utils/mock-tool.js +11 -10
- package/dist/src/test-utils/mock-tool.js.map +1 -1
- package/dist/src/tools/activate-skill.d.ts +2 -2
- package/dist/src/tools/activate-skill.js +6 -1
- package/dist/src/tools/activate-skill.js.map +1 -1
- package/dist/src/tools/activate-skill.test.js +7 -5
- package/dist/src/tools/activate-skill.test.js.map +1 -1
- package/dist/src/tools/confirmation-policy.test.js +2 -12
- package/dist/src/tools/confirmation-policy.test.js.map +1 -1
- package/dist/src/tools/edit.d.ts +27 -5
- package/dist/src/tools/edit.js +444 -137
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +257 -525
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/get-internal-docs.d.ts +2 -2
- package/dist/src/tools/get-internal-docs.js +6 -6
- package/dist/src/tools/get-internal-docs.js.map +1 -1
- package/dist/src/tools/get-internal-docs.test.js +2 -1
- package/dist/src/tools/get-internal-docs.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +2 -2
- package/dist/src/tools/glob.js +1 -1
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +2 -1
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +2 -2
- package/dist/src/tools/grep.js +1 -1
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +5 -4
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.d.ts +2 -2
- package/dist/src/tools/ls.js +2 -2
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +2 -1
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +2 -2
- package/dist/src/tools/mcp-client.js +2 -1
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +2 -2
- package/dist/src/tools/mcp-tool.js +7 -7
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +11 -6
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +3 -3
- package/dist/src/tools/memoryTool.js +2 -2
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +5 -2
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/message-bus-integration.test.js +10 -37
- package/dist/src/tools/message-bus-integration.test.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +2 -2
- package/dist/src/tools/read-file.js +1 -1
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +3 -2
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +2 -2
- package/dist/src/tools/read-many-files.js +2 -3
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +3 -2
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +2 -2
- package/dist/src/tools/ripGrep.js +3 -4
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +7 -6
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +3 -4
- package/dist/src/tools/shell.js +9 -35
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +40 -57
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +11 -6
- package/dist/src/tools/tool-registry.js +13 -8
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +14 -10
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +5 -5
- package/dist/src/tools/tools.js +15 -17
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/tools.test.js +3 -1
- package/dist/src/tools/tools.test.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +2 -2
- package/dist/src/tools/web-fetch.js +4 -4
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +17 -19
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.d.ts +2 -2
- package/dist/src/tools/web-search.js +3 -4
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/web-search.test.js +2 -1
- package/dist/src/tools/web-search.test.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +2 -2
- package/dist/src/tools/write-file.js +3 -3
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +4 -1
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +2 -2
- package/dist/src/tools/write-todos.js +5 -4
- package/dist/src/tools/write-todos.js.map +1 -1
- package/dist/src/tools/write-todos.test.js +2 -1
- package/dist/src/tools/write-todos.test.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +1 -1
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/events.d.ts +46 -1
- package/dist/src/utils/events.js +21 -0
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/events.test.js +25 -0
- package/dist/src/utils/events.test.js.map +1 -1
- package/dist/src/utils/shell-permissions.test.js +27 -0
- package/dist/src/utils/shell-permissions.test.js.map +1 -1
- package/dist/src/utils/terminal.d.ts +2 -0
- package/dist/src/utils/terminal.js +6 -0
- package/dist/src/utils/terminal.js.map +1 -1
- package/dist/src/utils/tokenCalculation.js +20 -5
- package/dist/src/utils/tokenCalculation.js.map +1 -1
- package/dist/src/utils/tokenCalculation.test.js +11 -2
- package/dist/src/utils/tokenCalculation.test.js.map +1 -1
- package/dist/src/utils/tool-utils.test.js +2 -1
- package/dist/src/utils/tool-utils.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/google-gemini-cli-core-0.24.0-nightly.20251227.37be16243.tgz +0 -0
- package/dist/src/services/skillManager.js +0 -157
- package/dist/src/services/skillManager.js.map +0 -1
- package/dist/src/services/skillManager.test.js +0 -169
- package/dist/src/services/skillManager.test.js.map +0 -1
- package/dist/src/tools/smart-edit.d.ts +0 -78
- package/dist/src/tools/smart-edit.js +0 -722
- package/dist/src/tools/smart-edit.js.map +0 -1
- package/dist/src/tools/smart-edit.test.js +0 -591
- package/dist/src/tools/smart-edit.test.js.map +0 -1
- /package/dist/src/{services/skillManager.test.d.ts → agents/a2aUtils.test.d.ts} +0 -0
- /package/dist/src/{tools/smart-edit.test.d.ts → policy/utils.test.d.ts} +0 -0
package/package.json
CHANGED
|
Binary file
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import * as fs from 'node:fs/promises';
|
|
7
|
-
import * as path from 'node:path';
|
|
8
|
-
import { glob } from 'glob';
|
|
9
|
-
import yaml from 'js-yaml';
|
|
10
|
-
import { debugLogger } from '../utils/debugLogger.js';
|
|
11
|
-
import { Storage } from '../config/storage.js';
|
|
12
|
-
const FRONTMATTER_REGEX = /^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)/;
|
|
13
|
-
export class SkillManager {
|
|
14
|
-
skills = [];
|
|
15
|
-
activeSkillNames = new Set();
|
|
16
|
-
/**
|
|
17
|
-
* Clears all discovered skills.
|
|
18
|
-
*/
|
|
19
|
-
clearSkills() {
|
|
20
|
-
this.skills = [];
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Discovers skills from standard user and project locations.
|
|
24
|
-
* Project skills take precedence over user skills.
|
|
25
|
-
*/
|
|
26
|
-
async discoverSkills(storage) {
|
|
27
|
-
this.clearSkills();
|
|
28
|
-
// User skills first
|
|
29
|
-
const userPaths = [Storage.getUserSkillsDir()];
|
|
30
|
-
const userSkills = await this.discoverSkillsInternal(userPaths);
|
|
31
|
-
this.addSkillsWithPrecedence(userSkills);
|
|
32
|
-
// Project skills second (overwrites user skills with same name)
|
|
33
|
-
const projectPaths = [storage.getProjectSkillsDir()];
|
|
34
|
-
const projectSkills = await this.discoverSkillsInternal(projectPaths);
|
|
35
|
-
this.addSkillsWithPrecedence(projectSkills);
|
|
36
|
-
}
|
|
37
|
-
addSkillsWithPrecedence(newSkills) {
|
|
38
|
-
const skillMap = new Map();
|
|
39
|
-
for (const skill of [...this.skills, ...newSkills]) {
|
|
40
|
-
skillMap.set(skill.name, skill);
|
|
41
|
-
}
|
|
42
|
-
this.skills = Array.from(skillMap.values());
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Discovered skills in the provided paths and adds them to the manager.
|
|
46
|
-
* Internal helper for tiered discovery.
|
|
47
|
-
*/
|
|
48
|
-
async discoverSkillsInternal(paths) {
|
|
49
|
-
const discoveredSkills = [];
|
|
50
|
-
const seenLocations = new Set(this.skills.map((s) => s.location));
|
|
51
|
-
for (const searchPath of paths) {
|
|
52
|
-
try {
|
|
53
|
-
const absoluteSearchPath = path.resolve(searchPath);
|
|
54
|
-
debugLogger.debug(`Discovering skills in: ${absoluteSearchPath}`);
|
|
55
|
-
const stats = await fs.stat(absoluteSearchPath).catch(() => null);
|
|
56
|
-
if (!stats || !stats.isDirectory()) {
|
|
57
|
-
debugLogger.debug(`Search path is not a directory: ${absoluteSearchPath}`);
|
|
58
|
-
continue;
|
|
59
|
-
}
|
|
60
|
-
const skillFiles = await glob('*/SKILL.md', {
|
|
61
|
-
cwd: absoluteSearchPath,
|
|
62
|
-
absolute: true,
|
|
63
|
-
nodir: true,
|
|
64
|
-
});
|
|
65
|
-
debugLogger.debug(`Found ${skillFiles.length} potential skill files in ${absoluteSearchPath}`);
|
|
66
|
-
for (const skillFile of skillFiles) {
|
|
67
|
-
if (seenLocations.has(skillFile)) {
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
const metadata = await this.parseSkillFile(skillFile);
|
|
71
|
-
if (metadata) {
|
|
72
|
-
debugLogger.debug(`Discovered skill: ${metadata.name} at ${skillFile}`);
|
|
73
|
-
discoveredSkills.push(metadata);
|
|
74
|
-
seenLocations.add(skillFile);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
catch (error) {
|
|
79
|
-
debugLogger.log(`Error discovering skills in ${searchPath}:`, error);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return discoveredSkills;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Returns the list of enabled discovered skills.
|
|
86
|
-
*/
|
|
87
|
-
getSkills() {
|
|
88
|
-
return this.skills.filter((s) => !s.disabled);
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Returns all discovered skills, including disabled ones.
|
|
92
|
-
*/
|
|
93
|
-
getAllSkills() {
|
|
94
|
-
return this.skills;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Filters discovered skills by name.
|
|
98
|
-
*/
|
|
99
|
-
filterSkills(predicate) {
|
|
100
|
-
this.skills = this.skills.filter(predicate);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Sets the list of disabled skill names.
|
|
104
|
-
*/
|
|
105
|
-
setDisabledSkills(disabledNames) {
|
|
106
|
-
for (const skill of this.skills) {
|
|
107
|
-
skill.disabled = disabledNames.includes(skill.name);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Reads the full content (metadata + body) of a skill by name.
|
|
112
|
-
*/
|
|
113
|
-
getSkill(name) {
|
|
114
|
-
return this.skills.find((s) => s.name === name) ?? null;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Activates a skill by name.
|
|
118
|
-
*/
|
|
119
|
-
activateSkill(name) {
|
|
120
|
-
this.activeSkillNames.add(name);
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Checks if a skill is active.
|
|
124
|
-
*/
|
|
125
|
-
isSkillActive(name) {
|
|
126
|
-
return this.activeSkillNames.has(name);
|
|
127
|
-
}
|
|
128
|
-
async parseSkillFile(filePath) {
|
|
129
|
-
try {
|
|
130
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
131
|
-
const match = content.match(FRONTMATTER_REGEX);
|
|
132
|
-
if (!match) {
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
// Use yaml.load() which is safe in js-yaml v4.
|
|
136
|
-
const frontmatter = yaml.load(match[1]);
|
|
137
|
-
if (!frontmatter || typeof frontmatter !== 'object') {
|
|
138
|
-
return null;
|
|
139
|
-
}
|
|
140
|
-
const { name, description } = frontmatter;
|
|
141
|
-
if (typeof name !== 'string' || typeof description !== 'string') {
|
|
142
|
-
return null;
|
|
143
|
-
}
|
|
144
|
-
return {
|
|
145
|
-
name,
|
|
146
|
-
description,
|
|
147
|
-
location: filePath,
|
|
148
|
-
body: match[2].trim(),
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
debugLogger.log(`Error parsing skill file ${filePath}:`, error);
|
|
153
|
-
return null;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
//# sourceMappingURL=skillManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skillManager.js","sourceRoot":"","sources":["../../../src/services/skillManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
7
|
-
import * as fs from 'node:fs/promises';
|
|
8
|
-
import * as os from 'node:os';
|
|
9
|
-
import * as path from 'node:path';
|
|
10
|
-
import { SkillManager } from './skillManager.js';
|
|
11
|
-
import { Storage } from '../config/storage.js';
|
|
12
|
-
describe('SkillManager', () => {
|
|
13
|
-
let testRootDir;
|
|
14
|
-
beforeEach(async () => {
|
|
15
|
-
testRootDir = await fs.mkdtemp(path.join(os.tmpdir(), 'skill-manager-test-'));
|
|
16
|
-
});
|
|
17
|
-
afterEach(async () => {
|
|
18
|
-
await fs.rm(testRootDir, { recursive: true, force: true });
|
|
19
|
-
vi.restoreAllMocks();
|
|
20
|
-
});
|
|
21
|
-
it('should discover skills with valid SKILL.md and frontmatter', async () => {
|
|
22
|
-
const skillDir = path.join(testRootDir, 'my-skill');
|
|
23
|
-
await fs.mkdir(skillDir, { recursive: true });
|
|
24
|
-
const skillFile = path.join(skillDir, 'SKILL.md');
|
|
25
|
-
await fs.writeFile(skillFile, `---
|
|
26
|
-
name: my-skill
|
|
27
|
-
description: A test skill
|
|
28
|
-
---
|
|
29
|
-
# Instructions
|
|
30
|
-
Do something.
|
|
31
|
-
`);
|
|
32
|
-
const service = new SkillManager();
|
|
33
|
-
const skills = await service.discoverSkillsInternal([testRootDir]);
|
|
34
|
-
expect(skills).toHaveLength(1);
|
|
35
|
-
expect(skills[0].name).toBe('my-skill');
|
|
36
|
-
expect(skills[0].description).toBe('A test skill');
|
|
37
|
-
expect(skills[0].location).toBe(skillFile);
|
|
38
|
-
expect(skills[0].body).toBe('# Instructions\nDo something.');
|
|
39
|
-
});
|
|
40
|
-
it('should ignore directories without SKILL.md', async () => {
|
|
41
|
-
const notASkillDir = path.join(testRootDir, 'not-a-skill');
|
|
42
|
-
await fs.mkdir(notASkillDir, { recursive: true });
|
|
43
|
-
const service = new SkillManager();
|
|
44
|
-
const skills = await service.discoverSkillsInternal([testRootDir]);
|
|
45
|
-
expect(skills).toHaveLength(0);
|
|
46
|
-
});
|
|
47
|
-
it('should ignore SKILL.md without valid frontmatter', async () => {
|
|
48
|
-
const skillDir = path.join(testRootDir, 'invalid-skill');
|
|
49
|
-
await fs.mkdir(skillDir, { recursive: true });
|
|
50
|
-
const skillFile = path.join(skillDir, 'SKILL.md');
|
|
51
|
-
await fs.writeFile(skillFile, '# No frontmatter here');
|
|
52
|
-
const service = new SkillManager();
|
|
53
|
-
const skills = await service.discoverSkillsInternal([testRootDir]);
|
|
54
|
-
expect(skills).toHaveLength(0);
|
|
55
|
-
});
|
|
56
|
-
it('should ignore SKILL.md with missing required frontmatter fields', async () => {
|
|
57
|
-
const skillDir = path.join(testRootDir, 'missing-fields');
|
|
58
|
-
await fs.mkdir(skillDir, { recursive: true });
|
|
59
|
-
const skillFile = path.join(skillDir, 'SKILL.md');
|
|
60
|
-
await fs.writeFile(skillFile, `---
|
|
61
|
-
name: missing-fields
|
|
62
|
-
---
|
|
63
|
-
`);
|
|
64
|
-
const service = new SkillManager();
|
|
65
|
-
const skills = await service.discoverSkillsInternal([testRootDir]);
|
|
66
|
-
expect(skills).toHaveLength(0);
|
|
67
|
-
});
|
|
68
|
-
it('should handle multiple search paths', async () => {
|
|
69
|
-
const path1 = path.join(testRootDir, 'path1');
|
|
70
|
-
const path2 = path.join(testRootDir, 'path2');
|
|
71
|
-
await fs.mkdir(path1, { recursive: true });
|
|
72
|
-
await fs.mkdir(path2, { recursive: true });
|
|
73
|
-
const skill1Dir = path.join(path1, 'skill1');
|
|
74
|
-
await fs.mkdir(skill1Dir, { recursive: true });
|
|
75
|
-
await fs.writeFile(path.join(skill1Dir, 'SKILL.md'), `---
|
|
76
|
-
name: skill1
|
|
77
|
-
description: Skill 1
|
|
78
|
-
---
|
|
79
|
-
`);
|
|
80
|
-
const skill2Dir = path.join(path2, 'skill2');
|
|
81
|
-
await fs.mkdir(skill2Dir, { recursive: true });
|
|
82
|
-
await fs.writeFile(path.join(skill2Dir, 'SKILL.md'), `---
|
|
83
|
-
name: skill2
|
|
84
|
-
description: Skill 2
|
|
85
|
-
---
|
|
86
|
-
`);
|
|
87
|
-
const service = new SkillManager();
|
|
88
|
-
const skills = await service.discoverSkillsInternal([path1, path2]);
|
|
89
|
-
expect(skills).toHaveLength(2);
|
|
90
|
-
expect(skills.map((s) => s.name).sort()).toEqual(['skill1', 'skill2']);
|
|
91
|
-
});
|
|
92
|
-
it('should deduplicate skills by name (last wins)', async () => {
|
|
93
|
-
const path1 = path.join(testRootDir, 'path1');
|
|
94
|
-
const path2 = path.join(testRootDir, 'path2');
|
|
95
|
-
await fs.mkdir(path1, { recursive: true });
|
|
96
|
-
await fs.mkdir(path2, { recursive: true });
|
|
97
|
-
await fs.mkdir(path.join(path1, 'skill'), { recursive: true });
|
|
98
|
-
await fs.writeFile(path.join(path1, 'skill', 'SKILL.md'), `---
|
|
99
|
-
name: same-name
|
|
100
|
-
description: First
|
|
101
|
-
---
|
|
102
|
-
`);
|
|
103
|
-
await fs.mkdir(path.join(path2, 'skill'), { recursive: true });
|
|
104
|
-
await fs.writeFile(path.join(path2, 'skill', 'SKILL.md'), `---
|
|
105
|
-
name: same-name
|
|
106
|
-
description: Second
|
|
107
|
-
---
|
|
108
|
-
`);
|
|
109
|
-
const service = new SkillManager();
|
|
110
|
-
// In our tiered discovery logic, we call discoverSkillsInternal for each tier
|
|
111
|
-
// and then add them with precedence.
|
|
112
|
-
const skills1 = await service.discoverSkillsInternal([path1]);
|
|
113
|
-
service['addSkillsWithPrecedence'](skills1);
|
|
114
|
-
const skills2 = await service.discoverSkillsInternal([path2]);
|
|
115
|
-
service['addSkillsWithPrecedence'](skills2);
|
|
116
|
-
const skills = service.getSkills();
|
|
117
|
-
expect(skills).toHaveLength(1);
|
|
118
|
-
expect(skills[0].description).toBe('Second');
|
|
119
|
-
});
|
|
120
|
-
it('should discover skills from Storage with project precedence', async () => {
|
|
121
|
-
const userDir = path.join(testRootDir, 'user');
|
|
122
|
-
const projectDir = path.join(testRootDir, 'project');
|
|
123
|
-
await fs.mkdir(path.join(userDir, 'skill-a'), { recursive: true });
|
|
124
|
-
await fs.mkdir(path.join(projectDir, 'skill-a'), { recursive: true });
|
|
125
|
-
await fs.writeFile(path.join(userDir, 'skill-a', 'SKILL.md'), `---
|
|
126
|
-
name: skill-a
|
|
127
|
-
description: user-desc
|
|
128
|
-
---
|
|
129
|
-
`);
|
|
130
|
-
await fs.writeFile(path.join(projectDir, 'skill-a', 'SKILL.md'), `---
|
|
131
|
-
name: skill-a
|
|
132
|
-
description: project-desc
|
|
133
|
-
---
|
|
134
|
-
`);
|
|
135
|
-
vi.spyOn(Storage, 'getUserSkillsDir').mockReturnValue(userDir);
|
|
136
|
-
const storage = new Storage('/dummy');
|
|
137
|
-
vi.spyOn(storage, 'getProjectSkillsDir').mockReturnValue(projectDir);
|
|
138
|
-
const service = new SkillManager();
|
|
139
|
-
await service.discoverSkills(storage);
|
|
140
|
-
const skills = service.getSkills();
|
|
141
|
-
expect(skills).toHaveLength(1);
|
|
142
|
-
expect(skills[0].description).toBe('project-desc');
|
|
143
|
-
});
|
|
144
|
-
it('should filter disabled skills in getSkills but not in getAllSkills', async () => {
|
|
145
|
-
const skill1Dir = path.join(testRootDir, 'skill1');
|
|
146
|
-
const skill2Dir = path.join(testRootDir, 'skill2');
|
|
147
|
-
await fs.mkdir(skill1Dir, { recursive: true });
|
|
148
|
-
await fs.mkdir(skill2Dir, { recursive: true });
|
|
149
|
-
await fs.writeFile(path.join(skill1Dir, 'SKILL.md'), `---
|
|
150
|
-
name: skill1
|
|
151
|
-
description: desc1
|
|
152
|
-
---
|
|
153
|
-
`);
|
|
154
|
-
await fs.writeFile(path.join(skill2Dir, 'SKILL.md'), `---
|
|
155
|
-
name: skill2
|
|
156
|
-
description: desc2
|
|
157
|
-
---
|
|
158
|
-
`);
|
|
159
|
-
const service = new SkillManager();
|
|
160
|
-
const discovered = await service.discoverSkillsInternal([testRootDir]);
|
|
161
|
-
service['addSkillsWithPrecedence'](discovered);
|
|
162
|
-
service.setDisabledSkills(['skill1']);
|
|
163
|
-
expect(service.getSkills()).toHaveLength(1);
|
|
164
|
-
expect(service.getSkills()[0].name).toBe('skill2');
|
|
165
|
-
expect(service.getAllSkills()).toHaveLength(2);
|
|
166
|
-
expect(service.getAllSkills().find((s) => s.name === 'skill1')?.disabled).toBe(true);
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
//# sourceMappingURL=skillManager.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skillManager.test.js","sourceRoot":"","sources":["../../../src/services/skillManager.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import { BaseDeclarativeTool, type ToolInvocation, type ToolResult } from './tools.js';
|
|
7
|
-
import type { MessageBus } from '../confirmation-bus/message-bus.js';
|
|
8
|
-
import { ToolErrorType } from './tool-error.js';
|
|
9
|
-
import type { Config } from '../config/config.js';
|
|
10
|
-
import { type ModifiableDeclarativeTool, type ModifyContext } from './modifiable-tool.js';
|
|
11
|
-
interface ReplacementContext {
|
|
12
|
-
params: EditToolParams;
|
|
13
|
-
currentContent: string;
|
|
14
|
-
abortSignal: AbortSignal;
|
|
15
|
-
}
|
|
16
|
-
interface ReplacementResult {
|
|
17
|
-
newContent: string;
|
|
18
|
-
occurrences: number;
|
|
19
|
-
finalOldString: string;
|
|
20
|
-
finalNewString: string;
|
|
21
|
-
}
|
|
22
|
-
export declare function calculateReplacement(config: Config, context: ReplacementContext): Promise<ReplacementResult>;
|
|
23
|
-
export declare function getErrorReplaceResult(params: EditToolParams, occurrences: number, expectedReplacements: number, finalOldString: string, finalNewString: string): {
|
|
24
|
-
display: string;
|
|
25
|
-
raw: string;
|
|
26
|
-
type: ToolErrorType;
|
|
27
|
-
} | undefined;
|
|
28
|
-
/**
|
|
29
|
-
* Parameters for the Edit tool
|
|
30
|
-
*/
|
|
31
|
-
export interface EditToolParams {
|
|
32
|
-
/**
|
|
33
|
-
* The path to the file to modify
|
|
34
|
-
*/
|
|
35
|
-
file_path: string;
|
|
36
|
-
/**
|
|
37
|
-
* The text to replace
|
|
38
|
-
*/
|
|
39
|
-
old_string: string;
|
|
40
|
-
/**
|
|
41
|
-
* The text to replace it with
|
|
42
|
-
*/
|
|
43
|
-
new_string: string;
|
|
44
|
-
/**
|
|
45
|
-
* Number of replacements expected. Defaults to 1 if not specified.
|
|
46
|
-
* Use when you want to replace multiple occurrences.
|
|
47
|
-
*/
|
|
48
|
-
expected_replacements?: number;
|
|
49
|
-
/**
|
|
50
|
-
* The instruction for what needs to be done.
|
|
51
|
-
*/
|
|
52
|
-
instruction: string;
|
|
53
|
-
/**
|
|
54
|
-
* Whether the edit was modified manually by the user.
|
|
55
|
-
*/
|
|
56
|
-
modified_by_user?: boolean;
|
|
57
|
-
/**
|
|
58
|
-
* Initially proposed string.
|
|
59
|
-
*/
|
|
60
|
-
ai_proposed_string?: string;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Implementation of the Edit tool logic
|
|
64
|
-
*/
|
|
65
|
-
export declare class SmartEditTool extends BaseDeclarativeTool<EditToolParams, ToolResult> implements ModifiableDeclarativeTool<EditToolParams> {
|
|
66
|
-
private readonly config;
|
|
67
|
-
static readonly Name = "replace";
|
|
68
|
-
constructor(config: Config, messageBus?: MessageBus);
|
|
69
|
-
/**
|
|
70
|
-
* Validates the parameters for the Edit tool
|
|
71
|
-
* @param params Parameters to validate
|
|
72
|
-
* @returns Error message string or null if valid
|
|
73
|
-
*/
|
|
74
|
-
protected validateToolParamValues(params: EditToolParams): string | null;
|
|
75
|
-
protected createInvocation(params: EditToolParams): ToolInvocation<EditToolParams, ToolResult>;
|
|
76
|
-
getModifyContext(_: AbortSignal): ModifyContext<EditToolParams>;
|
|
77
|
-
}
|
|
78
|
-
export {};
|