@vibesdotdev/integrations-anthropic 0.0.0-stage → 1.0.0-rc.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/LICENSE +126 -0
- package/README.md +57 -2
- package/dist/ai/anthropic-router-codec.d.ts +32 -0
- package/dist/ai/anthropic-router-codec.d.ts.map +1 -0
- package/dist/ai/anthropic-router-codec.js +321 -0
- package/dist/ai/anthropic-router-codec.js.map +1 -0
- package/dist/ai/anthropic.plugin.d.ts +6 -0
- package/dist/ai/anthropic.plugin.d.ts.map +1 -0
- package/dist/ai/anthropic.plugin.js +116 -0
- package/dist/ai/anthropic.plugin.js.map +1 -0
- package/dist/ai/catalog.d.ts +87 -0
- package/dist/ai/catalog.d.ts.map +1 -0
- package/dist/ai/catalog.js +64 -0
- package/dist/ai/catalog.js.map +1 -0
- package/dist/ai/claude-code-session.d.ts +56 -0
- package/dist/ai/claude-code-session.d.ts.map +1 -0
- package/dist/ai/claude-code-session.js +75 -0
- package/dist/ai/claude-code-session.js.map +1 -0
- package/dist/ai/claude-code-turn-env.d.ts +10 -0
- package/dist/ai/claude-code-turn-env.d.ts.map +1 -0
- package/dist/ai/claude-code-turn-env.js +19 -0
- package/dist/ai/claude-code-turn-env.js.map +1 -0
- package/dist/ai/hostile.d.ts +23 -0
- package/dist/ai/hostile.d.ts.map +1 -0
- package/dist/ai/hostile.js +22 -0
- package/dist/ai/hostile.js.map +1 -0
- package/dist/ai/index.d.ts +4 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +4 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/metadata/assets/logos/providers/anthropic.svg +1 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-3-5-haiku-20241022.json +77 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-3-5-sonnet-20241022.json +42 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-4-opus-20250514.json +79 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-4-sonnet-20250514.json +79 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-haiku-4-5.json +80 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-haiku-5-5.json +39 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-1.json +78 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-5.json +80 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-6.json +80 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-7.json +81 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-sonnet-4-5.json +80 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-sonnet-4-6.json +80 -0
- package/dist/ai/metadata/providers/anthropic.json +22 -0
- package/dist/ai/providers/anthropic/anthropic.provider.impl.d.ts +62 -0
- package/dist/ai/providers/anthropic/anthropic.provider.impl.d.ts.map +1 -0
- package/dist/ai/providers/anthropic/anthropic.provider.impl.js +430 -0
- package/dist/ai/providers/anthropic/anthropic.provider.impl.js.map +1 -0
- package/dist/ai/providers/anthropic/detection/index.d.ts +8 -0
- package/dist/ai/providers/anthropic/detection/index.d.ts.map +1 -0
- package/dist/ai/providers/anthropic/detection/index.js +8 -0
- package/dist/ai/providers/anthropic/detection/index.js.map +1 -0
- package/dist/ai/providers/anthropic/detection/system.d.ts +12 -0
- package/dist/ai/providers/anthropic/detection/system.d.ts.map +1 -0
- package/dist/ai/providers/anthropic/detection/system.js +34 -0
- package/dist/ai/providers/anthropic/detection/system.js.map +1 -0
- package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.d.ts +4 -0
- package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.js +212 -0
- package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.js.map +1 -0
- package/dist/ai/providers/anthropic/index.d.ts +4 -0
- package/dist/ai/providers/anthropic/index.d.ts.map +1 -0
- package/dist/ai/providers/anthropic/index.js +4 -0
- package/dist/ai/providers/anthropic/index.js.map +1 -0
- package/dist/ai/providers/anthropic/recommendations.d.ts +24 -0
- package/dist/ai/providers/anthropic/recommendations.d.ts.map +1 -0
- package/dist/ai/providers/anthropic/recommendations.js +192 -0
- package/dist/ai/providers/anthropic/recommendations.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.d.ts +4194 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.js +52 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.d.ts +46 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.js +22 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/index.d.ts +5 -0
- package/dist/ai/providers/cloud/frontier/anthropic/index.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/index.js +4 -0
- package/dist/ai/providers/cloud/frontier/anthropic/index.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.d.ts +183 -0
- package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.js +115 -0
- package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.js.map +1 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.d.ts +46 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.d.ts.map +1 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.js +183 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.js.map +1 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.d.ts +34 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.d.ts.map +1 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.js +29 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.js.map +1 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.d.ts +48 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.d.ts.map +1 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.js +557 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.js.map +1 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.d.ts +26 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.d.ts.map +1 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.js +15 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.js.map +1 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.d.ts +35 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.d.ts.map +1 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.js +210 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.js.map +1 -0
- package/dist/external/acp-server.consumer.plugin.d.ts +3 -0
- package/dist/external/acp-server.consumer.plugin.d.ts.map +1 -0
- package/dist/external/acp-server.consumer.plugin.js +29 -0
- package/dist/external/acp-server.consumer.plugin.js.map +1 -0
- package/dist/external/acp-server.d.ts +19 -0
- package/dist/external/acp-server.d.ts.map +1 -0
- package/dist/external/acp-server.js +198 -0
- package/dist/external/acp-server.js.map +1 -0
- package/dist/external/claude-code-hooks.d.ts +51 -0
- package/dist/external/claude-code-hooks.d.ts.map +1 -0
- package/dist/external/claude-code-hooks.js +252 -0
- package/dist/external/claude-code-hooks.js.map +1 -0
- package/dist/external/claude-code-installer.d.ts +10 -0
- package/dist/external/claude-code-installer.d.ts.map +1 -0
- package/dist/external/claude-code-installer.js +604 -0
- package/dist/external/claude-code-installer.js.map +1 -0
- package/dist/external/claude-code-operations.d.ts +217 -0
- package/dist/external/claude-code-operations.d.ts.map +1 -0
- package/dist/external/claude-code-operations.js +101 -0
- package/dist/external/claude-code-operations.js.map +1 -0
- package/dist/external/claude-code-plugin.json +7 -0
- package/dist/external/claude-code-presets.d.ts +813 -0
- package/dist/external/claude-code-presets.d.ts.map +1 -0
- package/dist/external/claude-code-presets.js +157 -0
- package/dist/external/claude-code-presets.js.map +1 -0
- package/dist/external/claude-code.descriptor.d.ts +160 -0
- package/dist/external/claude-code.descriptor.d.ts.map +1 -0
- package/dist/external/claude-code.descriptor.js +5 -0
- package/dist/external/claude-code.descriptor.js.map +1 -0
- package/dist/external/claude-code.manifest.d.ts +5 -0
- package/dist/external/claude-code.manifest.d.ts.map +1 -0
- package/dist/external/claude-code.manifest.js +205 -0
- package/dist/external/claude-code.manifest.js.map +1 -0
- package/dist/external/external.plugin.d.ts +6 -0
- package/dist/external/external.plugin.d.ts.map +1 -0
- package/dist/external/external.plugin.js +56 -0
- package/dist/external/external.plugin.js.map +1 -0
- package/dist/external/index.d.ts +6 -0
- package/dist/external/index.d.ts.map +1 -0
- package/dist/external/index.js +6 -0
- package/dist/external/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/package.json +108 -4
|
@@ -0,0 +1,604 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import pluginMetadata from './claude-code-plugin.json' with { type: 'json' };
|
|
3
|
+
import { CapabilityError, CaughtFailureSchema, isCapabilityError } from '@vibesdotdev/kernel';
|
|
4
|
+
import { getPathRoots } from '@vibesdotdev/paths';
|
|
5
|
+
import { providerTextCause } from '@vibesdotdev/ai/utils/provider-text';
|
|
6
|
+
/** The members of Claude's `settings.local.json` and `.mcp.json` this projection reads. */
|
|
7
|
+
const ClaudeSettingsSchema = z.looseObject({
|
|
8
|
+
hooks: z.record(z.string(), z.unknown()).optional().catch(undefined)
|
|
9
|
+
});
|
|
10
|
+
const ClaudeMcpConfigSchema = z.looseObject({
|
|
11
|
+
mcpServers: z.looseObject({ vibes: z.unknown().optional() }).optional().catch(undefined)
|
|
12
|
+
});
|
|
13
|
+
const AssetComponentsSchema = z.array(z.string()).min(1).optional();
|
|
14
|
+
/**
|
|
15
|
+
* Options for a directory only its owner may enter. The filesystem adapter honours `mode` (POSIX
|
|
16
|
+
* permission bits, subject to the umask); External's narrow capability type does not declare it yet
|
|
17
|
+
* (owed there), so the options travel as a value, not a fresh literal.
|
|
18
|
+
*/
|
|
19
|
+
const PRIVATE_DIRECTORY = { recursive: true, mode: 0o700 };
|
|
20
|
+
const CONFIG_FILES = [
|
|
21
|
+
'settings.json',
|
|
22
|
+
'settings.local.json',
|
|
23
|
+
'mcp-config.json',
|
|
24
|
+
'.mcp.json'
|
|
25
|
+
];
|
|
26
|
+
const COMMAND_FILES = {
|
|
27
|
+
'vibes-session.md': `---
|
|
28
|
+
description: Inspect and manage the current Vibes session
|
|
29
|
+
argument-hint: [status|context|archive]
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
# Vibes Session
|
|
33
|
+
|
|
34
|
+
Use the \`session\` MCP tool. Default to \`status\`. For \`context\`, return
|
|
35
|
+
active work, recent notes, and tracked files. Before \`archive\`, ask for
|
|
36
|
+
confirmation and never archive a session merely because one task completed.
|
|
37
|
+
`,
|
|
38
|
+
'vibes-todo.md': `---
|
|
39
|
+
description: Add, list, update, or complete Vibes session work
|
|
40
|
+
argument-hint: [add|list|progress|done] [content-or-id]
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
# Vibes Todos
|
|
44
|
+
|
|
45
|
+
Use the \`session-todo\` MCP tool. For add, preserve the user's wording and set
|
|
46
|
+
an honest priority. For progress/done, resolve the intended existing item before
|
|
47
|
+
mutating it. Show concise status markers after every change.
|
|
48
|
+
`,
|
|
49
|
+
'vibes-note.md': `---
|
|
50
|
+
description: Read or write a task-scoped Vibes session note
|
|
51
|
+
argument-hint: <key> [content]
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
# Vibes Notes
|
|
55
|
+
|
|
56
|
+
Use the \`session-scratchpad\` MCP tool. With content, write the named note using
|
|
57
|
+
the appropriate markdown/json/code content type. Without content, read the note;
|
|
58
|
+
if it is absent, list available keys instead of inventing it.
|
|
59
|
+
`,
|
|
60
|
+
'vibes-knowledge.md': `---
|
|
61
|
+
description: Search durable Vibes repository knowledge
|
|
62
|
+
argument-hint: <query>
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
# Vibes Knowledge
|
|
66
|
+
|
|
67
|
+
Use the \`knowledge\` MCP tool with hybrid search, a bounded result count, and
|
|
68
|
+
content included. Separate durable repository facts from session notes and cite
|
|
69
|
+
the returned owners or source paths. Do not turn a search miss into a fact.
|
|
70
|
+
`,
|
|
71
|
+
'vibes-atlas.md': `---
|
|
72
|
+
description: Search code and symbols through Vibes workspace intelligence
|
|
73
|
+
argument-hint: <query> [semantic|text|hybrid|symbol]
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
# Vibes Workspace Search
|
|
77
|
+
|
|
78
|
+
Use the \`workspace-search\` MCP tool. Default to hybrid search. Use symbol mode
|
|
79
|
+
for exact identifiers and graph mode when dependency direction matters. Report
|
|
80
|
+
file paths and symbol context; inspect the actual owner before proposing edits.
|
|
81
|
+
`
|
|
82
|
+
};
|
|
83
|
+
const AGENT_FILES = {
|
|
84
|
+
'vibes-explorer.md': `---
|
|
85
|
+
name: vibes-explorer
|
|
86
|
+
description: Explore ownership, symbols, and dependency direction before implementation
|
|
87
|
+
tools: workspace-search, knowledge
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
Start from the public owner and its SPEC. Use workspace symbol/graph search to
|
|
91
|
+
trace callers, runtime kinds, and surface boundaries. Search durable knowledge
|
|
92
|
+
for prior decisions, but verify every claim against live code. Return concrete
|
|
93
|
+
paths, contracts, and unresolved contradictions; do not implement or speculate.
|
|
94
|
+
`,
|
|
95
|
+
'vibes-planner.md': `---
|
|
96
|
+
name: vibes-planner
|
|
97
|
+
description: Build an evidence-backed runtime-first execution plan
|
|
98
|
+
tools: session, session-todo, workspace-search, knowledge
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
Orient through the live session, then identify the canonical owner, schemas,
|
|
102
|
+
runtime descriptors, implementation, plugin composition, surfaces, consumers,
|
|
103
|
+
and real proof in that order. Record a small dependency-ordered plan in session
|
|
104
|
+
todos. Call out missing authority and reject shims, duplicated schemas, private
|
|
105
|
+
deep imports, and surface-specific logic in isomorphic barrels.
|
|
106
|
+
`
|
|
107
|
+
};
|
|
108
|
+
const ASSET_COMPONENTS = ['commands', 'agents'];
|
|
109
|
+
function assetComponents(names) {
|
|
110
|
+
if (names === undefined)
|
|
111
|
+
return [...ASSET_COMPONENTS];
|
|
112
|
+
return names.map((name) => {
|
|
113
|
+
const component = ASSET_COMPONENTS.find((candidate) => candidate === name);
|
|
114
|
+
if (!component) {
|
|
115
|
+
// The offered value is not echoed: it is operator input and may be anything.
|
|
116
|
+
throw new CapabilityError(`Unknown Claude asset component. Expected: ${ASSET_COMPONENTS.join(', ')}`, 'INVALID_INPUT', { reason: 'unknown-asset-component', retryable: false });
|
|
117
|
+
}
|
|
118
|
+
return component;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
function invalidOperationInput(field, expected) {
|
|
122
|
+
return new CapabilityError(`Claude Code operation input '${field}' is invalid: ${expected}.`, 'INVALID_INPUT', {
|
|
123
|
+
reason: 'invalid-operation-input',
|
|
124
|
+
retryable: false,
|
|
125
|
+
details: { field }
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/** The plugin name `build` writes into the manifest: a lower-case package-style name. */
|
|
129
|
+
const PluginNameSchema = z.string().regex(/^[a-z0-9][a-z0-9._-]{0,63}$/);
|
|
130
|
+
/** The plugin version `build` writes: a semantic version. */
|
|
131
|
+
const PluginVersionSchema = z.string().regex(/^\d{1,9}\.\d{1,9}\.\d{1,9}(?:-[0-9A-Za-z.-]{1,64})?(?:\+[0-9A-Za-z.-]{1,64})?$/);
|
|
132
|
+
/** A path or executable operator input: non-empty, bounded, no control character. */
|
|
133
|
+
const OperatorTextSchema = z.string().min(1).max(1024).refine((value) => ![...value].some((character) => (character.codePointAt(0) ?? 0) < 32));
|
|
134
|
+
/** The members a `build` reads from operator input, validated before anything is written. */
|
|
135
|
+
function readBuildInput(context) {
|
|
136
|
+
const named = (field, schema, expected, value, fallback) => {
|
|
137
|
+
if (value === undefined || value === '')
|
|
138
|
+
return fallback;
|
|
139
|
+
const parsed = schema.safeParse(value);
|
|
140
|
+
if (!parsed.success)
|
|
141
|
+
throw invalidOperationInput(field, expected);
|
|
142
|
+
return parsed.data;
|
|
143
|
+
};
|
|
144
|
+
return {
|
|
145
|
+
output: named('output', OperatorTextSchema, 'a non-empty path without control characters', context.variables.output, ''),
|
|
146
|
+
version: named('version', PluginVersionSchema, 'a semantic version such as 1.0.0', context.variables.version, '1.0.0'),
|
|
147
|
+
name: named('name', PluginNameSchema, 'a lower-case package-style name', context.variables.name, 'vibes'),
|
|
148
|
+
vibesPath: named('vibesPath', OperatorTextSchema, 'a non-empty executable path without control characters', context.vibesPath, 'vibes')
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function requireClaudeServices(services) {
|
|
152
|
+
if (!services.filesystem) {
|
|
153
|
+
throw new CapabilityError('Claude Code operations require the filesystem capability.', 'UNAVAILABLE', {
|
|
154
|
+
reason: 'filesystem-required',
|
|
155
|
+
retryable: false
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function claudeDir(context, services) {
|
|
160
|
+
if (context.global) {
|
|
161
|
+
return services.filesystem.join(getPathRoots(services.runtime).userHome, '.claude');
|
|
162
|
+
}
|
|
163
|
+
if (!context.projectDir) {
|
|
164
|
+
throw new CapabilityError('Claude project projection requires a project directory.', 'UNAVAILABLE', {
|
|
165
|
+
reason: 'project-dir-required',
|
|
166
|
+
retryable: false
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return services.filesystem.join(context.projectDir, '.claude');
|
|
170
|
+
}
|
|
171
|
+
function safeBackupName(value) {
|
|
172
|
+
if (!value || value.includes('/') || value.includes('\\') || value === '.' || value === '..' || value.length > 128) {
|
|
173
|
+
// The offered name is not echoed.
|
|
174
|
+
throw new CapabilityError('The Claude backup name is not a single directory name.', 'INVALID_INPUT', {
|
|
175
|
+
reason: 'invalid-backup-name',
|
|
176
|
+
retryable: false
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
return value;
|
|
180
|
+
}
|
|
181
|
+
/** What the filesystem answered for one config file, as text. */
|
|
182
|
+
function textOf(content) {
|
|
183
|
+
return content instanceof Uint8Array ? new TextDecoder().decode(content) : content;
|
|
184
|
+
}
|
|
185
|
+
function settingsUnreadable(path, cause) {
|
|
186
|
+
return new CapabilityError('A Claude settings file is not valid JSON of the expected shape.', 'INVALID_INPUT', {
|
|
187
|
+
reason: 'settings-unreadable',
|
|
188
|
+
retryable: false,
|
|
189
|
+
details: { file: path.split('/').pop() ?? '' },
|
|
190
|
+
cause
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
/** A missing file reads as an empty one; an unreadable or malformed file is a typed refusal that names the file, never its contents. */
|
|
194
|
+
async function readJson(path, schema, services) {
|
|
195
|
+
if (!(await services.filesystem.exists(path)))
|
|
196
|
+
return schema.parse({});
|
|
197
|
+
const text = textOf(await services.filesystem.readFile(path, 'utf8'));
|
|
198
|
+
let decoded;
|
|
199
|
+
try {
|
|
200
|
+
decoded = JSON.parse(text);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
// The parser's message quotes a snippet of the file, which may hold an env secret: bounded cause only.
|
|
204
|
+
if (error instanceof SyntaxError)
|
|
205
|
+
throw settingsUnreadable(path, providerTextCause(error.message));
|
|
206
|
+
throw error;
|
|
207
|
+
}
|
|
208
|
+
const parsed = schema.safeParse(decoded);
|
|
209
|
+
if (!parsed.success)
|
|
210
|
+
throw settingsUnreadable(path, undefined);
|
|
211
|
+
return parsed.data;
|
|
212
|
+
}
|
|
213
|
+
async function writeFiles(baseDir, files, context, services) {
|
|
214
|
+
const paths = Object.keys(files).map((name) => services.filesystem.join(baseDir, name));
|
|
215
|
+
if (context.dryRun)
|
|
216
|
+
return paths;
|
|
217
|
+
await services.filesystem.mkdir(baseDir, { recursive: true });
|
|
218
|
+
for (const [name, content] of Object.entries(files)) {
|
|
219
|
+
await services.filesystem.writeFile(services.filesystem.join(baseDir, name), content, 'utf8');
|
|
220
|
+
}
|
|
221
|
+
return paths;
|
|
222
|
+
}
|
|
223
|
+
async function installAssets(context, services, components = ASSET_COMPONENTS) {
|
|
224
|
+
const root = claudeDir(context, services);
|
|
225
|
+
return {
|
|
226
|
+
commands: components.includes('commands')
|
|
227
|
+
? await writeFiles(services.filesystem.join(root, 'commands'), COMMAND_FILES, context, services)
|
|
228
|
+
: [],
|
|
229
|
+
agents: components.includes('agents')
|
|
230
|
+
? await writeFiles(services.filesystem.join(root, 'agents'), AGENT_FILES, context, services)
|
|
231
|
+
: []
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
async function backup(context, services, label = '') {
|
|
235
|
+
const root = claudeDir(context, services);
|
|
236
|
+
const timestamp = `${label}${new Date().toISOString().replace(/[:.]/g, '-')}`;
|
|
237
|
+
// A backup never lands in a directory that exists: a restore's own backup, taken in the same
|
|
238
|
+
// millisecond as the backup it restores, must not overwrite it.
|
|
239
|
+
let destination = services.filesystem.join(root, 'backups', timestamp);
|
|
240
|
+
for (let attempt = 1; await services.filesystem.exists(destination); attempt += 1) {
|
|
241
|
+
destination = services.filesystem.join(root, 'backups', `${timestamp}-${attempt}`);
|
|
242
|
+
}
|
|
243
|
+
const backedUpFiles = [];
|
|
244
|
+
for (const filename of CONFIG_FILES) {
|
|
245
|
+
const source = services.filesystem.join(root, filename);
|
|
246
|
+
if (!(await services.filesystem.exists(source)))
|
|
247
|
+
continue;
|
|
248
|
+
backedUpFiles.push(filename);
|
|
249
|
+
if (!context.dryRun) {
|
|
250
|
+
// The settings files may hold `env` secrets: the backup directories are owner-only.
|
|
251
|
+
await services.filesystem.mkdir(destination, PRIVATE_DIRECTORY);
|
|
252
|
+
await services.filesystem.copy(source, services.filesystem.join(destination, filename));
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return {
|
|
256
|
+
operation: 'backup',
|
|
257
|
+
backupDir: backedUpFiles.length ? destination : null,
|
|
258
|
+
backedUpFiles,
|
|
259
|
+
dryRun: context.dryRun
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
async function listBackups(context, services) {
|
|
263
|
+
const path = services.filesystem.join(claudeDir(context, services), 'backups');
|
|
264
|
+
if (!(await services.filesystem.exists(path)))
|
|
265
|
+
return [];
|
|
266
|
+
const entries = await services.filesystem.list(path);
|
|
267
|
+
return entries
|
|
268
|
+
.map((entry) => entry.name)
|
|
269
|
+
.sort()
|
|
270
|
+
.reverse();
|
|
271
|
+
}
|
|
272
|
+
async function restore(context, services) {
|
|
273
|
+
const name = safeBackupName(context.variables.backup ?? '');
|
|
274
|
+
const root = claudeDir(context, services);
|
|
275
|
+
const sourceDir = services.filesystem.join(root, 'backups', name);
|
|
276
|
+
if (!(await services.filesystem.exists(sourceDir))) {
|
|
277
|
+
throw new CapabilityError('The Claude backup does not exist.', 'NOT_FOUND', {
|
|
278
|
+
reason: 'backup-not-found',
|
|
279
|
+
retryable: false,
|
|
280
|
+
details: { kind: 'claude-backup', id: name }
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
const restored = [];
|
|
284
|
+
for (const entry of await services.filesystem.list(sourceDir)) {
|
|
285
|
+
if (CONFIG_FILES.some((filename) => filename === entry.name))
|
|
286
|
+
restored.push(entry.name);
|
|
287
|
+
}
|
|
288
|
+
// Stage first: every file of the backup must parse before the live configuration is touched.
|
|
289
|
+
for (const filename of restored) {
|
|
290
|
+
await readJson(services.filesystem.join(sourceDir, filename), z.unknown(), services);
|
|
291
|
+
}
|
|
292
|
+
if (context.dryRun)
|
|
293
|
+
return { operation: 'restore', backup: name, restored, preRestoreBackup: null, dryRun: true };
|
|
294
|
+
// The configuration being replaced is backed up first, so a restore can itself be undone.
|
|
295
|
+
const preRestore = await backup(context, services, 'pre-restore-');
|
|
296
|
+
const applied = [];
|
|
297
|
+
try {
|
|
298
|
+
for (const filename of restored) {
|
|
299
|
+
await services.filesystem.copy(services.filesystem.join(sourceDir, filename), services.filesystem.join(root, filename));
|
|
300
|
+
applied.push(filename);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
catch (thrown) {
|
|
304
|
+
// All or nothing: what was written is put back from the pre-restore backup (or removed when
|
|
305
|
+
// there was none). A rollback that itself fails is reported with both failures.
|
|
306
|
+
const failure = CaughtFailureSchema.parse(thrown);
|
|
307
|
+
await rollBack(applied, preRestore, root, services, failure);
|
|
308
|
+
throw new CapabilityError('Restoring the Claude backup failed; the previous configuration was put back.', 'INTERNAL', {
|
|
309
|
+
reason: 'restore-failed',
|
|
310
|
+
retryable: false,
|
|
311
|
+
details: { applied },
|
|
312
|
+
cause: failure instanceof Error ? providerTextCause(failure.message) : undefined
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
return { operation: 'restore', backup: name, restored, preRestoreBackup: preRestore.backupDir, dryRun: false };
|
|
316
|
+
}
|
|
317
|
+
/** Puts back the files a failed restore wrote. The first file that cannot be put back fails the rollback, carrying both failures. */
|
|
318
|
+
async function rollBack(applied, preRestore, root, services, original) {
|
|
319
|
+
for (const [index, filename] of applied.entries()) {
|
|
320
|
+
const live = services.filesystem.join(root, filename);
|
|
321
|
+
try {
|
|
322
|
+
if (preRestore.backupDir !== null && preRestore.backedUpFiles.includes(filename)) {
|
|
323
|
+
await services.filesystem.copy(services.filesystem.join(preRestore.backupDir, filename), live);
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
await services.filesystem.remove(live);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
catch (thrown) {
|
|
330
|
+
throw new CapabilityError('Restoring the Claude backup failed and the previous configuration could not be put back.', 'INTERNAL', {
|
|
331
|
+
reason: 'restore-rollback-failed',
|
|
332
|
+
retryable: false,
|
|
333
|
+
details: { unreverted: applied.slice(index), preRestoreBackup: preRestore.backupDir },
|
|
334
|
+
cause: new AggregateError([original, thrown], 'restore and rollback both failed')
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
async function status(context, services) {
|
|
340
|
+
const root = claudeDir(context, services);
|
|
341
|
+
const exists = await services.filesystem.exists(root);
|
|
342
|
+
// readJson answers a missing file with an empty one; an unreadable or malformed file
|
|
343
|
+
// must surface, not read as "nothing configured".
|
|
344
|
+
const settings = exists
|
|
345
|
+
? await readJson(services.filesystem.join(root, 'settings.local.json'), ClaudeSettingsSchema, services)
|
|
346
|
+
: ClaudeSettingsSchema.parse({});
|
|
347
|
+
const mcp = exists
|
|
348
|
+
? await readJson(services.filesystem.join(root, '.mcp.json'), ClaudeMcpConfigSchema, services)
|
|
349
|
+
: ClaudeMcpConfigSchema.parse({});
|
|
350
|
+
const countExisting = async (dir, files) => {
|
|
351
|
+
let count = 0;
|
|
352
|
+
for (const name of Object.keys(files)) {
|
|
353
|
+
if (await services.filesystem.exists(services.filesystem.join(dir, name)))
|
|
354
|
+
count++;
|
|
355
|
+
}
|
|
356
|
+
return count;
|
|
357
|
+
};
|
|
358
|
+
return {
|
|
359
|
+
operation: 'status',
|
|
360
|
+
claudeDir: root,
|
|
361
|
+
scope: context.global ? 'global' : 'project',
|
|
362
|
+
exists,
|
|
363
|
+
mcpConfigured: Boolean(mcp.mcpServers?.vibes),
|
|
364
|
+
hookEventCount: Object.keys(settings.hooks ?? {}).length,
|
|
365
|
+
commandsInstalled: await countExisting(services.filesystem.join(root, 'commands'), COMMAND_FILES),
|
|
366
|
+
commandsExpected: Object.keys(COMMAND_FILES).length,
|
|
367
|
+
agentsInstalled: await countExisting(services.filesystem.join(root, 'agents'), AGENT_FILES),
|
|
368
|
+
agentsExpected: Object.keys(AGENT_FILES).length,
|
|
369
|
+
backups: await listBackups(context, services)
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
/** The members of the External client this projection calls; a resolved value without them is not the client. */
|
|
373
|
+
const InstallerMethodSchema = z.custom((value) => value instanceof Function);
|
|
374
|
+
const ExternalClientMethodsSchema = z.looseObject({
|
|
375
|
+
installHooks: InstallerMethodSchema,
|
|
376
|
+
uninstallHooks: InstallerMethodSchema,
|
|
377
|
+
installMcp: InstallerMethodSchema,
|
|
378
|
+
uninstallMcp: InstallerMethodSchema
|
|
379
|
+
});
|
|
380
|
+
// A value with the four installer methods the projection calls is the External client for these calls.
|
|
381
|
+
const ExternalClientSchema = z.custom((value) => ExternalClientMethodsSchema.safeParse(value).success, 'The resolved External client lacks the hook and MCP installers.');
|
|
382
|
+
async function externalClient(services) {
|
|
383
|
+
const resolved = await services.runtime.query('runtime/client').withId('external').resolve();
|
|
384
|
+
const client = ExternalClientSchema.safeParse(resolved);
|
|
385
|
+
if (!client.success) {
|
|
386
|
+
throw new CapabilityError('The External client is unavailable to the Claude Code projection.', 'UNAVAILABLE', {
|
|
387
|
+
reason: 'external-client-unavailable',
|
|
388
|
+
retryable: false
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
return client.data;
|
|
392
|
+
}
|
|
393
|
+
/** One component of a multi-step operation failed: what the steps before it applied is reported. */
|
|
394
|
+
function componentFailed(operation, component, applied, cause) {
|
|
395
|
+
return new CapabilityError(`Claude Code ${operation} failed at ${component}; applied before it: ${applied.length > 0 ? applied.join(', ') : 'nothing'}.`, 'INTERNAL', { reason: 'install-component-failed', retryable: false, details: { component, applied: [...applied] }, cause });
|
|
396
|
+
}
|
|
397
|
+
/** Runs one component; a report with `success: false`, or a throw, is the operation's failure (`applied` names what ran before). */
|
|
398
|
+
async function runComponent(operation, component, applied, run) {
|
|
399
|
+
let report;
|
|
400
|
+
try {
|
|
401
|
+
report = await run();
|
|
402
|
+
}
|
|
403
|
+
catch (thrown) {
|
|
404
|
+
const failure = CaughtFailureSchema.parse(thrown);
|
|
405
|
+
if (!(failure instanceof Error))
|
|
406
|
+
throw thrown;
|
|
407
|
+
if (isCapabilityError(failure))
|
|
408
|
+
throw failure;
|
|
409
|
+
throw componentFailed(operation, component, applied, providerTextCause(failure.message));
|
|
410
|
+
}
|
|
411
|
+
if (!report.success)
|
|
412
|
+
throw componentFailed(operation, component, applied, providerTextCause(report.message));
|
|
413
|
+
applied.push(component);
|
|
414
|
+
return report;
|
|
415
|
+
}
|
|
416
|
+
async function install(context, services) {
|
|
417
|
+
const hooksOnly = context.variables.hooksOnly === 'true';
|
|
418
|
+
const mcpOnly = context.variables.mcpOnly === 'true';
|
|
419
|
+
const skipBackup = context.variables.skipBackup === 'true';
|
|
420
|
+
if (hooksOnly && mcpOnly) {
|
|
421
|
+
throw invalidOperationInput('hooksOnly', 'it cannot be combined with mcpOnly (together they would install nothing)');
|
|
422
|
+
}
|
|
423
|
+
const client = await externalClient(services);
|
|
424
|
+
const result = { operation: 'install', dryRun: context.dryRun };
|
|
425
|
+
const applied = [];
|
|
426
|
+
if (!skipBackup) {
|
|
427
|
+
result.backup = await backup(context, services);
|
|
428
|
+
applied.push('backup');
|
|
429
|
+
}
|
|
430
|
+
if (!mcpOnly) {
|
|
431
|
+
result.hooks = await runComponent('install', 'hooks', applied, () => client.installHooks({
|
|
432
|
+
tool: 'claude-code',
|
|
433
|
+
global: context.global,
|
|
434
|
+
projectDir: context.projectDir,
|
|
435
|
+
vibesPath: context.vibesPath,
|
|
436
|
+
dryRun: context.dryRun,
|
|
437
|
+
hooks: ['session.start', 'context.beforeCompact', 'tool.before', 'prompt.submit', 'agent.stop', 'subagent.stop', 'tool.after', 'session.end']
|
|
438
|
+
}));
|
|
439
|
+
}
|
|
440
|
+
if (!hooksOnly) {
|
|
441
|
+
result.mcp = await runComponent('install', 'mcp', applied, () => client.installMcp({
|
|
442
|
+
tool: 'claude-code',
|
|
443
|
+
global: context.global,
|
|
444
|
+
projectDir: context.projectDir,
|
|
445
|
+
vibesPath: context.vibesPath,
|
|
446
|
+
mcpClientId: 'claude',
|
|
447
|
+
dryRun: context.dryRun
|
|
448
|
+
}));
|
|
449
|
+
}
|
|
450
|
+
if (!hooksOnly && !mcpOnly) {
|
|
451
|
+
const assets = await runComponent('install', 'assets', applied, async () => ({
|
|
452
|
+
success: true,
|
|
453
|
+
message: 'assets installed',
|
|
454
|
+
...(await installAssets(context, services))
|
|
455
|
+
}));
|
|
456
|
+
result.assets = { commands: assets.commands, agents: assets.agents };
|
|
457
|
+
}
|
|
458
|
+
return result;
|
|
459
|
+
}
|
|
460
|
+
async function uninstall(context, services) {
|
|
461
|
+
const client = await externalClient(services);
|
|
462
|
+
const result = { operation: 'uninstall', dryRun: context.dryRun };
|
|
463
|
+
const applied = [];
|
|
464
|
+
if (context.variables.skipBackup !== 'true') {
|
|
465
|
+
result.backup = await backup(context, services);
|
|
466
|
+
applied.push('backup');
|
|
467
|
+
}
|
|
468
|
+
if (!context.dryRun) {
|
|
469
|
+
result.hooks = await runComponent('uninstall', 'hooks', applied, () => client.uninstallHooks('claude-code', context.global, context.projectDir));
|
|
470
|
+
result.mcp = await runComponent('uninstall', 'mcp', applied, () => client.uninstallMcp('claude-code', context.global, context.projectDir));
|
|
471
|
+
const root = claudeDir(context, services);
|
|
472
|
+
for (const [dir, files] of [
|
|
473
|
+
['commands', COMMAND_FILES],
|
|
474
|
+
['agents', AGENT_FILES]
|
|
475
|
+
]) {
|
|
476
|
+
for (const name of Object.keys(files)) {
|
|
477
|
+
const path = services.filesystem.join(root, dir, name);
|
|
478
|
+
if (await services.filesystem.exists(path))
|
|
479
|
+
await services.filesystem.remove(path);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
return result;
|
|
484
|
+
}
|
|
485
|
+
async function build(context, services) {
|
|
486
|
+
// Operator input is validated before anything is written.
|
|
487
|
+
const input = readBuildInput(context);
|
|
488
|
+
const output = input.output || services.filesystem.join(context.projectDir, 'vibes-plugin');
|
|
489
|
+
const { version, name, vibesPath } = input;
|
|
490
|
+
const root = services.filesystem.isAbsolute(output)
|
|
491
|
+
? output
|
|
492
|
+
: services.filesystem.resolve(context.projectDir, output);
|
|
493
|
+
const files = [
|
|
494
|
+
...(await writeFiles(services.filesystem.join(root, 'commands'), COMMAND_FILES, context, services)),
|
|
495
|
+
...(await writeFiles(services.filesystem.join(root, 'agents'), AGENT_FILES, context, services))
|
|
496
|
+
];
|
|
497
|
+
const claudePluginDir = services.filesystem.join(root, '.claude-plugin');
|
|
498
|
+
const manifestPath = services.filesystem.join(claudePluginDir, 'plugin.json');
|
|
499
|
+
const rootManifestPath = services.filesystem.join(root, 'plugin.json');
|
|
500
|
+
const mcpPath = services.filesystem.join(root, '.mcp.json');
|
|
501
|
+
if (!context.dryRun) {
|
|
502
|
+
await services.filesystem.mkdir(root, { recursive: true });
|
|
503
|
+
await services.filesystem.mkdir(claudePluginDir, { recursive: true });
|
|
504
|
+
const manifestContent = `${JSON.stringify({
|
|
505
|
+
name,
|
|
506
|
+
version,
|
|
507
|
+
...pluginMetadata,
|
|
508
|
+
commands: Object.keys(COMMAND_FILES).map((file) => `./commands/${file}`),
|
|
509
|
+
agents: Object.keys(AGENT_FILES).map((file) => `./agents/${file}`),
|
|
510
|
+
mcpServers: './.mcp.json'
|
|
511
|
+
}, null, 2)}\n`;
|
|
512
|
+
await services.filesystem.writeFile(manifestPath, manifestContent, 'utf8');
|
|
513
|
+
await services.filesystem.writeFile(rootManifestPath, manifestContent, 'utf8');
|
|
514
|
+
await services.filesystem.writeFile(mcpPath, `${JSON.stringify({ mcpServers: { vibes: { command: vibesPath, args: ['dev', 'mcp', 'serve', '--client', 'claude'] } } }, null, 2)}\n`, 'utf8');
|
|
515
|
+
}
|
|
516
|
+
files.push(manifestPath, rootManifestPath, mcpPath);
|
|
517
|
+
return { operation: 'build', outputDir: root, filesCreated: files, dryRun: context.dryRun };
|
|
518
|
+
}
|
|
519
|
+
export const claudeCodeInstallOperation = {
|
|
520
|
+
async execute(_input, context, services) {
|
|
521
|
+
requireClaudeServices(services);
|
|
522
|
+
return {
|
|
523
|
+
status: 'ok',
|
|
524
|
+
message: 'Claude Code projection installed',
|
|
525
|
+
...(await install(context, services))
|
|
526
|
+
};
|
|
527
|
+
}
|
|
528
|
+
};
|
|
529
|
+
export const claudeCodeUninstallOperation = {
|
|
530
|
+
async execute(_input, context, services) {
|
|
531
|
+
requireClaudeServices(services);
|
|
532
|
+
return {
|
|
533
|
+
status: 'ok',
|
|
534
|
+
message: 'Claude Code projection removed',
|
|
535
|
+
...(await uninstall(context, services))
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
export const claudeCodeStatusOperation = {
|
|
540
|
+
async execute(_input, context, services) {
|
|
541
|
+
requireClaudeServices(services);
|
|
542
|
+
return {
|
|
543
|
+
status: 'ok',
|
|
544
|
+
message: 'Claude Code integration status',
|
|
545
|
+
...(await status(context, services))
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
export const claudeCodeBackupOperation = {
|
|
550
|
+
async execute(_input, context, services) {
|
|
551
|
+
requireClaudeServices(services);
|
|
552
|
+
return {
|
|
553
|
+
status: 'ok',
|
|
554
|
+
message: 'Claude Code backup complete',
|
|
555
|
+
...(await backup(context, services))
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
};
|
|
559
|
+
export const claudeCodeBackupsOperation = {
|
|
560
|
+
async execute(_input, context, services) {
|
|
561
|
+
requireClaudeServices(services);
|
|
562
|
+
return {
|
|
563
|
+
status: 'ok',
|
|
564
|
+
message: 'Claude Code configuration backups',
|
|
565
|
+
backups: await listBackups(context, services)
|
|
566
|
+
};
|
|
567
|
+
}
|
|
568
|
+
};
|
|
569
|
+
export const claudeCodeRestoreOperation = {
|
|
570
|
+
async execute(_input, context, services) {
|
|
571
|
+
requireClaudeServices(services);
|
|
572
|
+
return {
|
|
573
|
+
status: 'ok',
|
|
574
|
+
message: 'Claude Code backup restored',
|
|
575
|
+
...(await restore(context, services))
|
|
576
|
+
};
|
|
577
|
+
}
|
|
578
|
+
};
|
|
579
|
+
export const claudeCodeBuildOperation = {
|
|
580
|
+
async execute(_input, context, services) {
|
|
581
|
+
requireClaudeServices(services);
|
|
582
|
+
return {
|
|
583
|
+
status: 'ok',
|
|
584
|
+
message: 'Claude Code plugin built',
|
|
585
|
+
...(await build(context, services))
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
};
|
|
589
|
+
export const claudeCodeAssetsOperation = {
|
|
590
|
+
async execute(input, context, services) {
|
|
591
|
+
requireClaudeServices(services);
|
|
592
|
+
const components = AssetComponentsSchema.safeParse(input.options.components);
|
|
593
|
+
if (!components.success) {
|
|
594
|
+
throw invalidOperationInput('components', 'it must be a non-empty array of component names');
|
|
595
|
+
}
|
|
596
|
+
return {
|
|
597
|
+
status: 'ok',
|
|
598
|
+
message: 'Claude Code assets installed',
|
|
599
|
+
...(await installAssets(context, services, assetComponents(components.data))),
|
|
600
|
+
dryRun: context.dryRun
|
|
601
|
+
};
|
|
602
|
+
}
|
|
603
|
+
};
|
|
604
|
+
//# sourceMappingURL=claude-code-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-installer.js","sourceRoot":"","sources":["../../src/external/claude-code-installer.ts"],"names":[],"mappings":"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"}
|