@phuetz/code-buddy 0.1.18 → 0.1.20
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/agent/background-tasks.d.ts +49 -0
- package/dist/agent/background-tasks.js +153 -0
- package/dist/agent/background-tasks.js.map +1 -0
- package/dist/agent/definitions/agent-definition-loader.d.ts +21 -0
- package/dist/agent/definitions/agent-definition-loader.js +161 -0
- package/dist/agent/definitions/agent-definition-loader.js.map +1 -0
- package/dist/agent/definitions/index.d.ts +1 -0
- package/dist/agent/definitions/index.js +2 -0
- package/dist/agent/definitions/index.js.map +1 -0
- package/dist/agent/extended-thinking.d.ts +64 -0
- package/dist/agent/extended-thinking.js +103 -0
- package/dist/agent/extended-thinking.js.map +1 -0
- package/dist/agent/prompt-suggestions.d.ts +55 -0
- package/dist/agent/prompt-suggestions.js +125 -0
- package/dist/agent/prompt-suggestions.js.map +1 -0
- package/dist/agent/rewind-manager.d.ts +59 -0
- package/dist/agent/rewind-manager.js +124 -0
- package/dist/agent/rewind-manager.js.map +1 -0
- package/dist/agent/teams/agent-team.d.ts +54 -0
- package/dist/agent/teams/agent-team.js +114 -0
- package/dist/agent/teams/agent-team.js.map +1 -0
- package/dist/agent/teams/index.d.ts +1 -0
- package/dist/agent/teams/index.js +2 -0
- package/dist/agent/teams/index.js.map +1 -0
- package/dist/agent/teams/team-v2.d.ts +166 -0
- package/dist/agent/teams/team-v2.js +376 -0
- package/dist/agent/teams/team-v2.js.map +1 -0
- package/dist/analytics/dashboard.js +1 -1
- package/dist/analytics/dashboard.js.map +1 -1
- package/dist/channels/imessage/index.d.ts +40 -0
- package/dist/channels/imessage/index.js +69 -0
- package/dist/channels/imessage/index.js.map +1 -0
- package/dist/channels/line/index.d.ts +36 -0
- package/dist/channels/line/index.js +71 -0
- package/dist/channels/line/index.js.map +1 -0
- package/dist/channels/mattermost/index.d.ts +34 -0
- package/dist/channels/mattermost/index.js +56 -0
- package/dist/channels/mattermost/index.js.map +1 -0
- package/dist/channels/nextcloud-talk/index.d.ts +37 -0
- package/dist/channels/nextcloud-talk/index.js +67 -0
- package/dist/channels/nextcloud-talk/index.js.map +1 -0
- package/dist/channels/niche-channels.d.ts +61 -0
- package/dist/channels/niche-channels.js +131 -0
- package/dist/channels/niche-channels.js.map +1 -0
- package/dist/channels/nostr/index.d.ts +30 -0
- package/dist/channels/nostr/index.js +68 -0
- package/dist/channels/nostr/index.js.map +1 -0
- package/dist/channels/twilio-voice/index.d.ts +37 -0
- package/dist/channels/twilio-voice/index.js +76 -0
- package/dist/channels/twilio-voice/index.js.map +1 -0
- package/dist/channels/whatsapp/index.js +0 -1
- package/dist/channels/whatsapp/index.js.map +1 -1
- package/dist/channels/zalo/index.d.ts +28 -0
- package/dist/channels/zalo/index.js +53 -0
- package/dist/channels/zalo/index.js.map +1 -0
- package/dist/cloud/cloud-sessions.d.ts +56 -0
- package/dist/cloud/cloud-sessions.js +187 -0
- package/dist/cloud/cloud-sessions.js.map +1 -0
- package/dist/codebuddy/tool-definitions/advanced-tools.d.ts +1 -0
- package/dist/codebuddy/tool-definitions/advanced-tools.js +24 -0
- package/dist/codebuddy/tool-definitions/advanced-tools.js.map +1 -1
- package/dist/codebuddy/tool-definitions/index.d.ts +1 -1
- package/dist/codebuddy/tool-definitions/index.js +1 -1
- package/dist/codebuddy/tool-definitions/index.js.map +1 -1
- package/dist/commands/delegate.js +2 -2
- package/dist/commands/delegate.js.map +1 -1
- package/dist/commands/features.d.ts +1 -1
- package/dist/commands/features.js +1 -1
- package/dist/commands/handlers/auth-handler.d.ts +32 -0
- package/dist/commands/handlers/auth-handler.js +137 -0
- package/dist/commands/handlers/auth-handler.js.map +1 -0
- package/dist/commands/handlers/context-handler.d.ts +46 -0
- package/dist/commands/handlers/context-handler.js +102 -0
- package/dist/commands/handlers/context-handler.js.map +1 -0
- package/dist/commands/handlers/core-handlers.js +1 -1
- package/dist/commands/handlers/core-handlers.js.map +1 -1
- package/dist/commands/handlers/keybindings-handler.d.ts +30 -0
- package/dist/commands/handlers/keybindings-handler.js +124 -0
- package/dist/commands/handlers/keybindings-handler.js.map +1 -0
- package/dist/commands/handlers/missing-handlers.js +15 -14
- package/dist/commands/handlers/missing-handlers.js.map +1 -1
- package/dist/commands/handlers/session-commands.d.ts +17 -0
- package/dist/commands/handlers/session-commands.js +119 -0
- package/dist/commands/handlers/session-commands.js.map +1 -0
- package/dist/commands/handlers/worktree-handlers.d.ts +1 -1
- package/dist/commands/handlers/worktree-handlers.js +2 -2
- package/dist/commands/slash/builtin-commands.js +2 -2
- package/dist/commands/slash/builtin-commands.js.map +1 -1
- package/dist/config/admin-config.d.ts +54 -0
- package/dist/config/admin-config.js +144 -0
- package/dist/config/admin-config.js.map +1 -0
- package/dist/config/advanced-config.d.ts +118 -0
- package/dist/config/advanced-config.js +364 -0
- package/dist/config/advanced-config.js.map +1 -0
- package/dist/config/constants.d.ts +2 -2
- package/dist/config/constants.js +2 -2
- package/dist/config/constants.js.map +1 -1
- package/dist/config/managed-policies.d.ts +50 -0
- package/dist/config/managed-policies.js +120 -0
- package/dist/config/managed-policies.js.map +1 -0
- package/dist/config/settings-hierarchy.d.ts +59 -0
- package/dist/config/settings-hierarchy.js +188 -0
- package/dist/config/settings-hierarchy.js.map +1 -0
- package/dist/config/toml-config.js +1 -1
- package/dist/config/toml-config.js.map +1 -1
- package/dist/config/tool-profiles.d.ts +37 -0
- package/dist/config/tool-profiles.js +150 -0
- package/dist/config/tool-profiles.js.map +1 -0
- package/dist/config/user-settings.d.ts +31 -0
- package/dist/config/user-settings.js +66 -0
- package/dist/config/user-settings.js.map +1 -0
- package/dist/context/context-files.d.ts +1 -1
- package/dist/context/context-files.js +3 -3
- package/dist/context/context-files.js.map +1 -1
- package/dist/context/partial-summarizer.d.ts +32 -0
- package/dist/context/partial-summarizer.js +144 -0
- package/dist/context/partial-summarizer.js.map +1 -0
- package/dist/desktop/desktop-app.d.ts +44 -0
- package/dist/desktop/desktop-app.js +136 -0
- package/dist/desktop/desktop-app.js.map +1 -0
- package/dist/features/index.d.ts +1 -1
- package/dist/features/index.js +2 -2
- package/dist/features/index.js.map +1 -1
- package/dist/git/worktree-sessions.d.ts +24 -0
- package/dist/git/worktree-sessions.js +93 -0
- package/dist/git/worktree-sessions.js.map +1 -0
- package/dist/hooks/advanced-hooks.d.ts +110 -0
- package/dist/hooks/advanced-hooks.js +256 -0
- package/dist/hooks/advanced-hooks.js.map +1 -0
- package/dist/hooks/async-hooks.d.ts +73 -0
- package/dist/hooks/async-hooks.js +213 -0
- package/dist/hooks/async-hooks.js.map +1 -0
- package/dist/hooks/env-persistence.d.ts +58 -0
- package/dist/hooks/env-persistence.js +195 -0
- package/dist/hooks/env-persistence.js.map +1 -0
- package/dist/hooks/hook-events.d.ts +36 -0
- package/dist/hooks/hook-events.js +55 -0
- package/dist/hooks/hook-events.js.map +1 -0
- package/dist/hooks/hook-system.js +1 -1
- package/dist/hooks/hook-system.js.map +1 -1
- package/dist/hooks/smart-hooks.d.ts +85 -0
- package/dist/hooks/smart-hooks.js +199 -0
- package/dist/hooks/smart-hooks.js.map +1 -0
- package/dist/ide/jetbrains-plugin.d.ts +55 -0
- package/dist/ide/jetbrains-plugin.js +156 -0
- package/dist/ide/jetbrains-plugin.js.map +1 -0
- package/dist/ide/vscode-extension.d.ts +94 -0
- package/dist/ide/vscode-extension.js +229 -0
- package/dist/ide/vscode-extension.js.map +1 -0
- package/dist/index.js +77 -3
- package/dist/index.js.map +1 -1
- package/dist/input/file-autocomplete.d.ts +42 -0
- package/dist/input/file-autocomplete.js +154 -0
- package/dist/input/file-autocomplete.js.map +1 -0
- package/dist/integrations/chrome-bridge.d.ts +90 -0
- package/dist/integrations/chrome-bridge.js +151 -0
- package/dist/integrations/chrome-bridge.js.map +1 -0
- package/dist/integrations/github-action-runner.d.ts +40 -0
- package/dist/integrations/github-action-runner.js +163 -0
- package/dist/integrations/github-action-runner.js.map +1 -0
- package/dist/integrations/github-actions.js +1 -1
- package/dist/integrations/github-actions.js.map +1 -1
- package/dist/integrations/gitlab-ci-runner.d.ts +34 -0
- package/dist/integrations/gitlab-ci-runner.js +104 -0
- package/dist/integrations/gitlab-ci-runner.js.map +1 -0
- package/dist/integrations/pr-session-linker.d.ts +44 -0
- package/dist/integrations/pr-session-linker.js +103 -0
- package/dist/integrations/pr-session-linker.js.map +1 -0
- package/dist/integrations/tailscale.d.ts +36 -0
- package/dist/integrations/tailscale.js +101 -0
- package/dist/integrations/tailscale.js.map +1 -0
- package/dist/lsp/lsp-client.d.ts +68 -0
- package/dist/lsp/lsp-client.js +182 -0
- package/dist/lsp/lsp-client.js.map +1 -0
- package/dist/lsp/server.js +3 -3
- package/dist/lsp/server.js.map +1 -1
- package/dist/mcp/connectors.d.ts +28 -0
- package/dist/mcp/connectors.js +148 -0
- package/dist/mcp/connectors.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -4
- package/dist/mcp/index.js +7 -4
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/mcp-auto-discovery.d.ts +49 -0
- package/dist/mcp/mcp-auto-discovery.js +104 -0
- package/dist/mcp/mcp-auto-discovery.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +70 -0
- package/dist/mcp/mcp-server.js +374 -0
- package/dist/mcp/mcp-server.js.map +1 -0
- package/dist/memory/auto-memory.d.ts +53 -0
- package/dist/memory/auto-memory.js +250 -0
- package/dist/memory/auto-memory.js.map +1 -0
- package/dist/memory/hybrid-search.d.ts +51 -0
- package/dist/memory/hybrid-search.js +199 -0
- package/dist/memory/hybrid-search.js.map +1 -0
- package/dist/memory/memory-flush.d.ts +51 -0
- package/dist/memory/memory-flush.js +102 -0
- package/dist/memory/memory-flush.js.map +1 -0
- package/dist/memory/subagent-memory.d.ts +73 -0
- package/dist/memory/subagent-memory.js +172 -0
- package/dist/memory/subagent-memory.js.map +1 -0
- package/dist/nodes/device-node.d.ts +40 -0
- package/dist/nodes/device-node.js +117 -0
- package/dist/nodes/device-node.js.map +1 -0
- package/dist/observability/dashboard.d.ts +1 -1
- package/dist/observability/dashboard.js +2 -2
- package/dist/observability/dashboard.js.map +1 -1
- package/dist/offline/offline-mode.d.ts +1 -1
- package/dist/offline/offline-mode.js +1 -1
- package/dist/output/json-schema-output.d.ts +67 -0
- package/dist/output/json-schema-output.js +273 -0
- package/dist/output/json-schema-output.js.map +1 -0
- package/dist/persistence/session-picker.d.ts +22 -0
- package/dist/persistence/session-picker.js +47 -0
- package/dist/persistence/session-picker.js.map +1 -0
- package/dist/persistence/session-store.d.ts +11 -0
- package/dist/persistence/session-store.js +17 -0
- package/dist/persistence/session-store.js.map +1 -1
- package/dist/plugins/git-pinned-marketplace.d.ts +39 -0
- package/dist/plugins/git-pinned-marketplace.js +152 -0
- package/dist/plugins/git-pinned-marketplace.js.map +1 -0
- package/dist/plugins/marketplace.d.ts +1 -1
- package/dist/plugins/marketplace.js +1 -1
- package/dist/plugins/plugin-manifest.d.ts +116 -0
- package/dist/plugins/plugin-manifest.js +283 -0
- package/dist/plugins/plugin-manifest.js.map +1 -0
- package/dist/prompts/index.d.ts +1 -1
- package/dist/prompts/index.js +1 -1
- package/dist/providers/local-llm-provider.d.ts +1 -1
- package/dist/providers/local-llm-provider.js +1 -1
- package/dist/sandbox/os-sandbox.d.ts +49 -1
- package/dist/sandbox/os-sandbox.js +347 -6
- package/dist/sandbox/os-sandbox.js.map +1 -1
- package/dist/scripting/codebuddy-bindings.js +1 -1
- package/dist/scripting/codebuddy-bindings.js.map +1 -1
- package/dist/sdk/agent-sdk.d.ts +61 -0
- package/dist/sdk/agent-sdk.js +90 -0
- package/dist/sdk/agent-sdk.js.map +1 -0
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.js +1 -1
- package/dist/security/permission-modes.d.ts +76 -0
- package/dist/security/permission-modes.js +195 -0
- package/dist/security/permission-modes.js.map +1 -0
- package/dist/security/permission-patterns.d.ts +61 -0
- package/dist/security/permission-patterns.js +171 -0
- package/dist/security/permission-patterns.js.map +1 -0
- package/dist/security/safe-binaries.d.ts +23 -0
- package/dist/security/safe-binaries.js +96 -0
- package/dist/security/safe-binaries.js.map +1 -0
- package/dist/security/sender-policies.d.ts +46 -0
- package/dist/security/sender-policies.js +90 -0
- package/dist/security/sender-policies.js.map +1 -0
- package/dist/server/dashboard.d.ts +53 -0
- package/dist/server/dashboard.js +93 -0
- package/dist/server/dashboard.js.map +1 -0
- package/dist/services/system-prompt-override.d.ts +34 -0
- package/dist/services/system-prompt-override.js +64 -0
- package/dist/services/system-prompt-override.js.map +1 -0
- package/dist/skills/skill-enhancements.d.ts +37 -0
- package/dist/skills/skill-enhancements.js +69 -0
- package/dist/skills/skill-enhancements.js.map +1 -0
- package/dist/telemetry/otel-tracer.d.ts +98 -0
- package/dist/telemetry/otel-tracer.js +245 -0
- package/dist/telemetry/otel-tracer.js.map +1 -0
- package/dist/templates/export/html.template.js +2 -2
- package/dist/templates/export/markdown.template.js +1 -1
- package/dist/templates/export/markdown.template.js.map +1 -1
- package/dist/themes/default-themes.d.ts +1 -1
- package/dist/themes/default-themes.js +1 -1
- package/dist/themes/index.d.ts +1 -1
- package/dist/themes/index.js +1 -1
- package/dist/themes/theme-manager.d.ts +1 -1
- package/dist/themes/theme-manager.js +1 -1
- package/dist/themes/theme.d.ts +1 -1
- package/dist/themes/theme.js +1 -1
- package/dist/tools/browser-stub.d.ts +61 -0
- package/dist/tools/browser-stub.js +184 -0
- package/dist/tools/browser-stub.js.map +1 -0
- package/dist/tools/gateway-tool.d.ts +43 -0
- package/dist/tools/gateway-tool.js +92 -0
- package/dist/tools/gateway-tool.js.map +1 -0
- package/dist/tools/image-stub.d.ts +32 -0
- package/dist/tools/image-stub.js +97 -0
- package/dist/tools/image-stub.js.map +1 -0
- package/dist/tools/js-repl.d.ts +78 -0
- package/dist/tools/js-repl.js +280 -0
- package/dist/tools/js-repl.js.map +1 -0
- package/dist/tools/message-tool.d.ts +42 -0
- package/dist/tools/message-tool.js +113 -0
- package/dist/tools/message-tool.js.map +1 -0
- package/dist/types/errors.d.ts +1 -1
- package/dist/types/errors.js +1 -1
- package/dist/ui/app.js +1 -1
- package/dist/ui/app.js.map +1 -1
- package/dist/ui/cli-enhancements.d.ts +178 -0
- package/dist/ui/cli-enhancements.js +430 -0
- package/dist/ui/cli-enhancements.js.map +1 -0
- package/dist/ui/components/HelpSystem.d.ts +1 -1
- package/dist/ui/components/HelpSystem.js +1 -1
- package/dist/ui/context/theme-context.d.ts +1 -1
- package/dist/ui/context/theme-context.js +1 -1
- package/dist/ui/dashboard/dashboard.js +1 -1
- package/dist/ui/dashboard/dashboard.js.map +1 -1
- package/dist/ui/status-line.d.ts +90 -0
- package/dist/ui/status-line.js +160 -0
- package/dist/ui/status-line.js.map +1 -0
- package/dist/ui/terminal-enhancements.d.ts +34 -0
- package/dist/ui/terminal-enhancements.js +97 -0
- package/dist/ui/terminal-enhancements.js.map +1 -0
- package/dist/ui/ui-enhancements.d.ts +38 -0
- package/dist/ui/ui-enhancements.js +116 -0
- package/dist/ui/ui-enhancements.js.map +1 -0
- package/dist/undo/checkpoint-manager.d.ts +1 -1
- package/dist/undo/checkpoint-manager.js +1 -1
- package/dist/utils/codebuddy-home.d.ts +1 -1
- package/dist/utils/codebuddy-home.js +1 -1
- package/dist/utils/conversation-export.js +3 -3
- package/dist/utils/conversation-export.js.map +1 -1
- package/dist/utils/custom-commands.js +1 -1
- package/dist/utils/custom-instructions.js +4 -1
- package/dist/utils/custom-instructions.js.map +1 -1
- package/dist/utils/debug-logger.d.ts +1 -1
- package/dist/utils/debug-logger.js +1 -1
- package/dist/utils/errors.d.ts +2 -2
- package/dist/utils/errors.js +2 -2
- package/dist/utils/export-manager.js +3 -3
- package/dist/utils/export-manager.js.map +1 -1
- package/dist/utils/headless-output.js +1 -1
- package/dist/utils/headless-output.js.map +1 -1
- package/dist/utils/init-project.d.ts +1 -1
- package/dist/utils/init-project.js +20 -20
- package/dist/utils/init-project.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/output-schema-validator.d.ts +40 -0
- package/dist/utils/output-schema-validator.js +137 -0
- package/dist/utils/output-schema-validator.js.map +1 -0
- package/dist/utils/safety-misc.d.ts +24 -0
- package/dist/utils/safety-misc.js +91 -0
- package/dist/utils/safety-misc.js.map +1 -0
- package/dist/utils/session-enhancements.d.ts +40 -0
- package/dist/utils/session-enhancements.js +118 -0
- package/dist/utils/session-enhancements.js.map +1 -0
- package/dist/utils/shell-completions.js +6 -6
- package/dist/utils/shell-snapshot.d.ts +38 -0
- package/dist/utils/shell-snapshot.js +323 -0
- package/dist/utils/shell-snapshot.js.map +1 -0
- package/dist/utils/stream-json-formatter.d.ts +77 -0
- package/dist/utils/stream-json-formatter.js +61 -0
- package/dist/utils/stream-json-formatter.js.map +1 -0
- package/dist/utils/terminal-notifications.js +1 -1
- package/dist/utils/terminal-notifications.js.map +1 -1
- package/dist/workflows/lobster-engine.d.ts +43 -0
- package/dist/workflows/lobster-engine.js +167 -0
- package/dist/workflows/lobster-engine.js.map +1 -0
- package/package.json +3 -6
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git-Pinned Plugin Marketplace
|
|
3
|
+
*
|
|
4
|
+
* Manages plugins pinned to specific Git commit SHAs for reproducible
|
|
5
|
+
* and auditable plugin installations.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import * as os from 'os';
|
|
10
|
+
import { logger } from '../utils/logger.js';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// GitPinnedMarketplace
|
|
13
|
+
// ============================================================================
|
|
14
|
+
let instance = null;
|
|
15
|
+
export class GitPinnedMarketplace {
|
|
16
|
+
plugins = new Map();
|
|
17
|
+
configPath;
|
|
18
|
+
constructor(configDir) {
|
|
19
|
+
const dir = configDir || path.join(os.homedir(), '.codebuddy', 'plugins', 'git-pinned');
|
|
20
|
+
this.configPath = path.join(dir, 'plugins.json');
|
|
21
|
+
this.loadFromDisk();
|
|
22
|
+
}
|
|
23
|
+
static getInstance(configDir) {
|
|
24
|
+
if (!instance) {
|
|
25
|
+
instance = new GitPinnedMarketplace(configDir);
|
|
26
|
+
}
|
|
27
|
+
return instance;
|
|
28
|
+
}
|
|
29
|
+
static resetInstance() {
|
|
30
|
+
instance = null;
|
|
31
|
+
}
|
|
32
|
+
loadFromDisk() {
|
|
33
|
+
try {
|
|
34
|
+
if (fs.existsSync(this.configPath)) {
|
|
35
|
+
const data = JSON.parse(fs.readFileSync(this.configPath, 'utf-8'));
|
|
36
|
+
if (Array.isArray(data)) {
|
|
37
|
+
for (const plugin of data) {
|
|
38
|
+
this.plugins.set(plugin.name, plugin);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
logger.warn('Failed to load git-pinned plugins', { error: err });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
saveToDisk() {
|
|
48
|
+
try {
|
|
49
|
+
const dir = path.dirname(this.configPath);
|
|
50
|
+
if (!fs.existsSync(dir)) {
|
|
51
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
fs.writeFileSync(this.configPath, JSON.stringify(Array.from(this.plugins.values()), null, 2));
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
logger.warn('Failed to save git-pinned plugins', { error: err });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Parse repo spec like "org/repo" or "org/repo@sha"
|
|
61
|
+
*/
|
|
62
|
+
parseRepoSpec(repoSpec) {
|
|
63
|
+
const atIndex = repoSpec.indexOf('@');
|
|
64
|
+
let repoPath;
|
|
65
|
+
let sha;
|
|
66
|
+
if (atIndex !== -1) {
|
|
67
|
+
repoPath = repoSpec.substring(0, atIndex);
|
|
68
|
+
sha = repoSpec.substring(atIndex + 1);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
repoPath = repoSpec;
|
|
72
|
+
}
|
|
73
|
+
const parts = repoPath.split('/');
|
|
74
|
+
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
75
|
+
throw new Error(`Invalid repo spec: ${repoSpec}. Expected format: org/repo or org/repo@sha`);
|
|
76
|
+
}
|
|
77
|
+
return { org: parts[0], repo: parts[1], sha };
|
|
78
|
+
}
|
|
79
|
+
install(repoSpec) {
|
|
80
|
+
const { org, repo, sha } = this.parseRepoSpec(repoSpec);
|
|
81
|
+
const name = `${org}/${repo}`;
|
|
82
|
+
const commitSha = sha || 'HEAD';
|
|
83
|
+
const plugin = {
|
|
84
|
+
name,
|
|
85
|
+
repo: `https://github.com/${name}`,
|
|
86
|
+
commitSha,
|
|
87
|
+
installedAt: Date.now(),
|
|
88
|
+
verified: false,
|
|
89
|
+
commands: [],
|
|
90
|
+
hooks: [],
|
|
91
|
+
mcpServers: [],
|
|
92
|
+
};
|
|
93
|
+
this.plugins.set(name, plugin);
|
|
94
|
+
this.saveToDisk();
|
|
95
|
+
logger.info(`Installed git-pinned plugin: ${name}@${commitSha}`);
|
|
96
|
+
return plugin;
|
|
97
|
+
}
|
|
98
|
+
uninstall(name) {
|
|
99
|
+
const existed = this.plugins.delete(name);
|
|
100
|
+
if (existed) {
|
|
101
|
+
this.saveToDisk();
|
|
102
|
+
logger.info(`Uninstalled git-pinned plugin: ${name}`);
|
|
103
|
+
}
|
|
104
|
+
return existed;
|
|
105
|
+
}
|
|
106
|
+
list() {
|
|
107
|
+
return Array.from(this.plugins.values());
|
|
108
|
+
}
|
|
109
|
+
verify(name) {
|
|
110
|
+
const plugin = this.plugins.get(name);
|
|
111
|
+
if (!plugin) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
// In a real implementation, we would check the remote SHA
|
|
115
|
+
// For now, mark as verified if SHA is not HEAD
|
|
116
|
+
const isVerified = plugin.commitSha !== 'HEAD';
|
|
117
|
+
plugin.verified = isVerified;
|
|
118
|
+
this.saveToDisk();
|
|
119
|
+
return isVerified;
|
|
120
|
+
}
|
|
121
|
+
update(name) {
|
|
122
|
+
const plugin = this.plugins.get(name);
|
|
123
|
+
if (!plugin) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
// Simulate updating to a new SHA
|
|
127
|
+
plugin.commitSha = `updated-${Date.now().toString(16)}`;
|
|
128
|
+
plugin.verified = false;
|
|
129
|
+
plugin.installedAt = Date.now();
|
|
130
|
+
this.saveToDisk();
|
|
131
|
+
logger.info(`Updated git-pinned plugin: ${name}`);
|
|
132
|
+
return plugin;
|
|
133
|
+
}
|
|
134
|
+
getPlugin(name) {
|
|
135
|
+
return this.plugins.get(name);
|
|
136
|
+
}
|
|
137
|
+
getTrustWarning(repo) {
|
|
138
|
+
return `WARNING: Plugin from '${repo}' is not verified. ` +
|
|
139
|
+
'Unverified plugins may contain malicious code. ' +
|
|
140
|
+
'Review the source code and pin to a specific commit SHA before using.';
|
|
141
|
+
}
|
|
142
|
+
isInstalled(name) {
|
|
143
|
+
return this.plugins.has(name);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
export function getGitPinnedMarketplace(configDir) {
|
|
147
|
+
return GitPinnedMarketplace.getInstance(configDir);
|
|
148
|
+
}
|
|
149
|
+
export function resetGitPinnedMarketplace() {
|
|
150
|
+
GitPinnedMarketplace.resetInstance();
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=git-pinned-marketplace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-pinned-marketplace.js","sourceRoot":"","sources":["../../src/plugins/git-pinned-marketplace.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* - Version compatibility checking
|
|
10
10
|
* - Plugin ratings and reviews
|
|
11
11
|
*
|
|
12
|
-
* Allows extending
|
|
12
|
+
* Allows extending Code Buddy with community plugins.
|
|
13
13
|
*/
|
|
14
14
|
import { EventEmitter } from 'events';
|
|
15
15
|
import { PluginSandbox } from './sandbox-worker.js';
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* - Version compatibility checking
|
|
10
10
|
* - Plugin ratings and reviews
|
|
11
11
|
*
|
|
12
|
-
* Allows extending
|
|
12
|
+
* Allows extending Code Buddy with community plugins.
|
|
13
13
|
*/
|
|
14
14
|
import { EventEmitter } from 'events';
|
|
15
15
|
import fs from 'fs-extra';
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Manifest System
|
|
3
|
+
*
|
|
4
|
+
* Extended manifest format with components, marketplace sources,
|
|
5
|
+
* namespaced skill resolution, and marketplace restrictions.
|
|
6
|
+
*/
|
|
7
|
+
export type PluginSourceType = 'github' | 'git' | 'url' | 'npm' | 'file' | 'directory' | 'host-pattern';
|
|
8
|
+
export interface PluginManifest {
|
|
9
|
+
name: string;
|
|
10
|
+
version: string;
|
|
11
|
+
author?: string;
|
|
12
|
+
license?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
schema?: number;
|
|
15
|
+
components: {
|
|
16
|
+
skills?: string[];
|
|
17
|
+
agents?: string[];
|
|
18
|
+
hooks?: string;
|
|
19
|
+
mcpServers?: string[];
|
|
20
|
+
lspServers?: string[];
|
|
21
|
+
};
|
|
22
|
+
dependencies?: Record<string, string>;
|
|
23
|
+
marketplace?: {
|
|
24
|
+
source: PluginSourceType;
|
|
25
|
+
url?: string;
|
|
26
|
+
registry?: string;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface InstalledPlugin {
|
|
30
|
+
manifest: PluginManifest;
|
|
31
|
+
path: string;
|
|
32
|
+
enabled: boolean;
|
|
33
|
+
installedAt: number;
|
|
34
|
+
namespace: string;
|
|
35
|
+
}
|
|
36
|
+
export declare class PluginManifestManager {
|
|
37
|
+
private plugins;
|
|
38
|
+
private pluginDirs;
|
|
39
|
+
private strictKnownMarketplaces;
|
|
40
|
+
private extraKnownMarketplaces;
|
|
41
|
+
constructor(pluginDirs?: string[]);
|
|
42
|
+
/**
|
|
43
|
+
* Load plugin from manifest at a given path
|
|
44
|
+
*/
|
|
45
|
+
loadPlugin(pluginPath: string): InstalledPlugin;
|
|
46
|
+
/**
|
|
47
|
+
* Read manifest from plugin path (stub - returns parsed JSON-like object)
|
|
48
|
+
*/
|
|
49
|
+
private readManifest;
|
|
50
|
+
/**
|
|
51
|
+
* Load a plugin directly from a manifest object (for programmatic use)
|
|
52
|
+
*/
|
|
53
|
+
loadPluginDirect(manifest: PluginManifest, pluginPath: string): InstalledPlugin;
|
|
54
|
+
/**
|
|
55
|
+
* Validate a plugin manifest
|
|
56
|
+
*/
|
|
57
|
+
validateManifest(manifest: PluginManifest): {
|
|
58
|
+
valid: boolean;
|
|
59
|
+
errors: string[];
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Install from various sources (stub implementation)
|
|
63
|
+
*/
|
|
64
|
+
installFromSource(source: PluginSourceType, location: string): Promise<InstalledPlugin>;
|
|
65
|
+
/**
|
|
66
|
+
* Extract a plugin name from source type and location
|
|
67
|
+
*/
|
|
68
|
+
private extractPluginName;
|
|
69
|
+
/**
|
|
70
|
+
* Resolve namespaced skill: "plugin-name:skill-name"
|
|
71
|
+
*/
|
|
72
|
+
resolveSkill(namespacedName: string): {
|
|
73
|
+
pluginName: string;
|
|
74
|
+
skillName: string;
|
|
75
|
+
} | null;
|
|
76
|
+
/**
|
|
77
|
+
* List all plugins
|
|
78
|
+
*/
|
|
79
|
+
listPlugins(): InstalledPlugin[];
|
|
80
|
+
/**
|
|
81
|
+
* Get a specific plugin by name
|
|
82
|
+
*/
|
|
83
|
+
getPlugin(name: string): InstalledPlugin | null;
|
|
84
|
+
/**
|
|
85
|
+
* Enable a plugin
|
|
86
|
+
*/
|
|
87
|
+
enablePlugin(name: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Disable a plugin
|
|
90
|
+
*/
|
|
91
|
+
disablePlugin(name: string): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Uninstall a plugin
|
|
94
|
+
*/
|
|
95
|
+
uninstallPlugin(name: string): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Check if a marketplace URL is allowed
|
|
98
|
+
*/
|
|
99
|
+
isMarketplaceAllowed(url: string): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Set strict marketplace mode
|
|
102
|
+
*/
|
|
103
|
+
setStrictMarketplaces(strict: boolean): void;
|
|
104
|
+
/**
|
|
105
|
+
* Add a known marketplace URL
|
|
106
|
+
*/
|
|
107
|
+
addKnownMarketplace(url: string): void;
|
|
108
|
+
/**
|
|
109
|
+
* Get total plugin count
|
|
110
|
+
*/
|
|
111
|
+
getPluginCount(): number;
|
|
112
|
+
/**
|
|
113
|
+
* Get enabled plugin count
|
|
114
|
+
*/
|
|
115
|
+
getEnabledCount(): number;
|
|
116
|
+
}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Manifest System
|
|
3
|
+
*
|
|
4
|
+
* Extended manifest format with components, marketplace sources,
|
|
5
|
+
* namespaced skill resolution, and marketplace restrictions.
|
|
6
|
+
*/
|
|
7
|
+
import { logger } from '../utils/logger.js';
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Known Marketplaces
|
|
10
|
+
// ============================================================================
|
|
11
|
+
const DEFAULT_KNOWN_MARKETPLACES = [
|
|
12
|
+
'https://marketplace.codebuddy.dev',
|
|
13
|
+
'https://registry.npmjs.org',
|
|
14
|
+
'https://github.com',
|
|
15
|
+
];
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Plugin Manifest Manager
|
|
18
|
+
// ============================================================================
|
|
19
|
+
export class PluginManifestManager {
|
|
20
|
+
plugins = new Map();
|
|
21
|
+
pluginDirs;
|
|
22
|
+
strictKnownMarketplaces = false;
|
|
23
|
+
extraKnownMarketplaces = [];
|
|
24
|
+
constructor(pluginDirs) {
|
|
25
|
+
this.pluginDirs = pluginDirs || [];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Load plugin from manifest at a given path
|
|
29
|
+
*/
|
|
30
|
+
loadPlugin(pluginPath) {
|
|
31
|
+
const manifest = this.readManifest(pluginPath);
|
|
32
|
+
const validation = this.validateManifest(manifest);
|
|
33
|
+
if (!validation.valid) {
|
|
34
|
+
throw new Error(`Invalid manifest at ${pluginPath}: ${validation.errors.join(', ')}`);
|
|
35
|
+
}
|
|
36
|
+
const installed = {
|
|
37
|
+
manifest,
|
|
38
|
+
path: pluginPath,
|
|
39
|
+
enabled: true,
|
|
40
|
+
installedAt: Date.now(),
|
|
41
|
+
namespace: manifest.name,
|
|
42
|
+
};
|
|
43
|
+
this.plugins.set(manifest.name, installed);
|
|
44
|
+
logger.info(`Loaded plugin: ${manifest.name}@${manifest.version}`);
|
|
45
|
+
return installed;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Read manifest from plugin path (stub - returns parsed JSON-like object)
|
|
49
|
+
*/
|
|
50
|
+
readManifest(pluginPath) {
|
|
51
|
+
// In real implementation this would read from disk
|
|
52
|
+
// For now we expect the pluginPath to be a manifest object serialized
|
|
53
|
+
throw new Error(`Cannot read manifest from ${pluginPath} - use installFromSource or loadPluginDirect`);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Load a plugin directly from a manifest object (for programmatic use)
|
|
57
|
+
*/
|
|
58
|
+
loadPluginDirect(manifest, pluginPath) {
|
|
59
|
+
const validation = this.validateManifest(manifest);
|
|
60
|
+
if (!validation.valid) {
|
|
61
|
+
throw new Error(`Invalid manifest: ${validation.errors.join(', ')}`);
|
|
62
|
+
}
|
|
63
|
+
const installed = {
|
|
64
|
+
manifest,
|
|
65
|
+
path: pluginPath,
|
|
66
|
+
enabled: true,
|
|
67
|
+
installedAt: Date.now(),
|
|
68
|
+
namespace: manifest.name,
|
|
69
|
+
};
|
|
70
|
+
this.plugins.set(manifest.name, installed);
|
|
71
|
+
logger.info(`Loaded plugin: ${manifest.name}@${manifest.version}`);
|
|
72
|
+
return installed;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Validate a plugin manifest
|
|
76
|
+
*/
|
|
77
|
+
validateManifest(manifest) {
|
|
78
|
+
const errors = [];
|
|
79
|
+
if (!manifest || typeof manifest !== 'object') {
|
|
80
|
+
return { valid: false, errors: ['Manifest must be a valid object'] };
|
|
81
|
+
}
|
|
82
|
+
// Required fields
|
|
83
|
+
if (!manifest.name || typeof manifest.name !== 'string') {
|
|
84
|
+
errors.push('Missing or invalid required field: name');
|
|
85
|
+
}
|
|
86
|
+
if (!manifest.version || typeof manifest.version !== 'string') {
|
|
87
|
+
errors.push('Missing or invalid required field: version');
|
|
88
|
+
}
|
|
89
|
+
// Version format
|
|
90
|
+
if (manifest.version && typeof manifest.version === 'string') {
|
|
91
|
+
if (!/^\d+\.\d+\.\d+(-[\w.]+)?$/.test(manifest.version)) {
|
|
92
|
+
errors.push('Version must be in semver format (e.g., 1.0.0)');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Components must be an object
|
|
96
|
+
if (!manifest.components || typeof manifest.components !== 'object') {
|
|
97
|
+
errors.push('Missing or invalid required field: components');
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Validate component arrays
|
|
101
|
+
const arrayFields = ['skills', 'agents', 'mcpServers', 'lspServers'];
|
|
102
|
+
for (const field of arrayFields) {
|
|
103
|
+
const val = manifest.components[field];
|
|
104
|
+
if (val !== undefined && !Array.isArray(val)) {
|
|
105
|
+
errors.push(`components.${field} must be an array`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (manifest.components.hooks !== undefined && typeof manifest.components.hooks !== 'string') {
|
|
109
|
+
errors.push('components.hooks must be a string path');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Schema version
|
|
113
|
+
if (manifest.schema !== undefined && typeof manifest.schema !== 'number') {
|
|
114
|
+
errors.push('schema must be a number');
|
|
115
|
+
}
|
|
116
|
+
// Dependencies
|
|
117
|
+
if (manifest.dependencies !== undefined) {
|
|
118
|
+
if (typeof manifest.dependencies !== 'object' || Array.isArray(manifest.dependencies)) {
|
|
119
|
+
errors.push('dependencies must be an object');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Marketplace
|
|
123
|
+
if (manifest.marketplace !== undefined) {
|
|
124
|
+
if (typeof manifest.marketplace !== 'object') {
|
|
125
|
+
errors.push('marketplace must be an object');
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
const validSources = ['github', 'git', 'url', 'npm', 'file', 'directory', 'host-pattern'];
|
|
129
|
+
if (!validSources.includes(manifest.marketplace.source)) {
|
|
130
|
+
errors.push(`marketplace.source must be one of: ${validSources.join(', ')}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return { valid: errors.length === 0, errors };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Install from various sources (stub implementation)
|
|
138
|
+
*/
|
|
139
|
+
async installFromSource(source, location) {
|
|
140
|
+
// Check marketplace restrictions
|
|
141
|
+
if (this.strictKnownMarketplaces && (source === 'url' || source === 'github' || source === 'git')) {
|
|
142
|
+
if (!this.isMarketplaceAllowed(location)) {
|
|
143
|
+
throw new Error(`Marketplace URL not allowed: ${location}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const pluginName = this.extractPluginName(source, location);
|
|
147
|
+
const manifest = {
|
|
148
|
+
name: pluginName,
|
|
149
|
+
version: '0.0.0',
|
|
150
|
+
components: {},
|
|
151
|
+
marketplace: { source, url: location },
|
|
152
|
+
};
|
|
153
|
+
const installed = {
|
|
154
|
+
manifest,
|
|
155
|
+
path: location,
|
|
156
|
+
enabled: true,
|
|
157
|
+
installedAt: Date.now(),
|
|
158
|
+
namespace: pluginName,
|
|
159
|
+
};
|
|
160
|
+
this.plugins.set(pluginName, installed);
|
|
161
|
+
logger.info(`Installed plugin from ${source}: ${pluginName}`);
|
|
162
|
+
return installed;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Extract a plugin name from source type and location
|
|
166
|
+
*/
|
|
167
|
+
extractPluginName(source, location) {
|
|
168
|
+
switch (source) {
|
|
169
|
+
case 'github':
|
|
170
|
+
return location.replace(/^https?:\/\/github\.com\//, '').replace(/\.git$/, '');
|
|
171
|
+
case 'npm':
|
|
172
|
+
return location.replace(/^@/, '').replace(/\//, '-');
|
|
173
|
+
default:
|
|
174
|
+
// Use last path segment
|
|
175
|
+
const segments = location.split('/').filter(Boolean);
|
|
176
|
+
return segments[segments.length - 1] || location;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Resolve namespaced skill: "plugin-name:skill-name"
|
|
181
|
+
*/
|
|
182
|
+
resolveSkill(namespacedName) {
|
|
183
|
+
const parts = namespacedName.split(':');
|
|
184
|
+
if (parts.length !== 2) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
const [pluginName, skillName] = parts;
|
|
188
|
+
if (!pluginName || !skillName) {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
const plugin = this.plugins.get(pluginName);
|
|
192
|
+
if (!plugin || !plugin.enabled) {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
return { pluginName, skillName };
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* List all plugins
|
|
199
|
+
*/
|
|
200
|
+
listPlugins() {
|
|
201
|
+
return Array.from(this.plugins.values());
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get a specific plugin by name
|
|
205
|
+
*/
|
|
206
|
+
getPlugin(name) {
|
|
207
|
+
return this.plugins.get(name) || null;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Enable a plugin
|
|
211
|
+
*/
|
|
212
|
+
enablePlugin(name) {
|
|
213
|
+
const plugin = this.plugins.get(name);
|
|
214
|
+
if (!plugin)
|
|
215
|
+
return false;
|
|
216
|
+
plugin.enabled = true;
|
|
217
|
+
logger.info(`Enabled plugin: ${name}`);
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Disable a plugin
|
|
222
|
+
*/
|
|
223
|
+
disablePlugin(name) {
|
|
224
|
+
const plugin = this.plugins.get(name);
|
|
225
|
+
if (!plugin)
|
|
226
|
+
return false;
|
|
227
|
+
plugin.enabled = false;
|
|
228
|
+
logger.info(`Disabled plugin: ${name}`);
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Uninstall a plugin
|
|
233
|
+
*/
|
|
234
|
+
uninstallPlugin(name) {
|
|
235
|
+
const existed = this.plugins.delete(name);
|
|
236
|
+
if (existed) {
|
|
237
|
+
logger.info(`Uninstalled plugin: ${name}`);
|
|
238
|
+
}
|
|
239
|
+
return existed;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Check if a marketplace URL is allowed
|
|
243
|
+
*/
|
|
244
|
+
isMarketplaceAllowed(url) {
|
|
245
|
+
const allKnown = [...DEFAULT_KNOWN_MARKETPLACES, ...this.extraKnownMarketplaces];
|
|
246
|
+
return allKnown.some(known => url.startsWith(known));
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Set strict marketplace mode
|
|
250
|
+
*/
|
|
251
|
+
setStrictMarketplaces(strict) {
|
|
252
|
+
this.strictKnownMarketplaces = strict;
|
|
253
|
+
logger.info(`Strict marketplaces: ${strict}`);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Add a known marketplace URL
|
|
257
|
+
*/
|
|
258
|
+
addKnownMarketplace(url) {
|
|
259
|
+
if (!this.extraKnownMarketplaces.includes(url)) {
|
|
260
|
+
this.extraKnownMarketplaces.push(url);
|
|
261
|
+
logger.info(`Added known marketplace: ${url}`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Get total plugin count
|
|
266
|
+
*/
|
|
267
|
+
getPluginCount() {
|
|
268
|
+
return this.plugins.size;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Get enabled plugin count
|
|
272
|
+
*/
|
|
273
|
+
getEnabledCount() {
|
|
274
|
+
let count = 0;
|
|
275
|
+
const plugins = Array.from(this.plugins.values());
|
|
276
|
+
for (const plugin of plugins) {
|
|
277
|
+
if (plugin.enabled)
|
|
278
|
+
count++;
|
|
279
|
+
}
|
|
280
|
+
return count;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=plugin-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-manifest.js","sourceRoot":"","sources":["../../src/plugins/plugin-manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/prompts/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Prompts module - exports all system prompts for
|
|
2
|
+
* Prompts module - exports all system prompts for Code Buddy
|
|
3
3
|
*/
|
|
4
4
|
export { getBaseSystemPrompt, getSystemPromptForMode, getChatOnlySystemPrompt, getChatOnlySystemPromptEN, YOLO_MODE_ADDITIONS, SAFE_MODE_ADDITIONS, CODE_MODE_ADDITIONS, RESEARCH_MODE_ADDITIONS, } from "./system-base.js";
|
|
5
5
|
export { PromptManager, getPromptManager, resetPromptManager, isWellAlignedModel, needsExtraSecurity, autoSelectPromptId, type PromptConfig, type PromptSection, } from "./prompt-manager.js";
|
package/dist/prompts/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Prompts module - exports all system prompts for
|
|
2
|
+
* Prompts module - exports all system prompts for Code Buddy
|
|
3
3
|
*/
|
|
4
4
|
export { getBaseSystemPrompt, getSystemPromptForMode, getChatOnlySystemPrompt, getChatOnlySystemPromptEN, YOLO_MODE_ADDITIONS, SAFE_MODE_ADDITIONS, CODE_MODE_ADDITIONS, RESEARCH_MODE_ADDITIONS, } from "./system-base.js";
|
|
5
5
|
// New: External Markdown prompts system (inspired by mistral-vibe)
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - WebLLM: Browser-based LLM with WebGPU
|
|
7
7
|
* - Ollama: HTTP API to local Ollama server
|
|
8
8
|
*
|
|
9
|
-
* These providers allow
|
|
9
|
+
* These providers allow Code Buddy to function without cloud API dependencies.
|
|
10
10
|
*/
|
|
11
11
|
import { EventEmitter } from 'events';
|
|
12
12
|
export type LocalProviderType = 'ollama' | 'local-llama' | 'webllm';
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - WebLLM: Browser-based LLM with WebGPU
|
|
7
7
|
* - Ollama: HTTP API to local Ollama server
|
|
8
8
|
*
|
|
9
|
-
* These providers allow
|
|
9
|
+
* These providers allow Code Buddy to function without cloud API dependencies.
|
|
10
10
|
*/
|
|
11
11
|
import { EventEmitter } from 'events';
|
|
12
12
|
import fs from 'fs-extra';
|