aquaman-coder 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Broker client — talks to the aquaman-proxy daemon over UDS to
3
+ * materialize credentials per tool call.
4
+ *
5
+ * Wraps `POST /broker/resolve` with retry, timeout, and clean errors.
6
+ */
7
+ import * as http from 'node:http';
8
+ import * as os from 'node:os';
9
+ import * as path from 'node:path';
10
+ export function defaultSocketPath() {
11
+ return path.join(os.homedir(), '.aquaman', 'proxy.sock');
12
+ }
13
+ export class BrokerClient {
14
+ socketPath;
15
+ timeoutMs;
16
+ constructor(opts = {}) {
17
+ this.socketPath = opts.socketPath ?? defaultSocketPath();
18
+ this.timeoutMs = opts.timeoutMs ?? 5000;
19
+ }
20
+ /**
21
+ * Materialize a credential. Throws if the proxy is unreachable,
22
+ * the credential is not found, or the request is policy-denied.
23
+ */
24
+ async resolve(opts) {
25
+ const body = JSON.stringify({
26
+ service: opts.service,
27
+ key: opts.key,
28
+ ttl_seconds: opts.ttlSeconds,
29
+ });
30
+ const { statusCode, payload } = await this.request('POST', '/broker/resolve', body);
31
+ let json;
32
+ try {
33
+ json = JSON.parse(payload);
34
+ }
35
+ catch {
36
+ throw new Error(`Broker returned non-JSON response (status ${statusCode}): ${payload.slice(0, 200)}`);
37
+ }
38
+ if (statusCode >= 400) {
39
+ const msg = json.error || `Broker error (HTTP ${statusCode})`;
40
+ const fix = json.fix ? ` — ${json.fix}` : '';
41
+ throw new Error(`${msg}${fix}`);
42
+ }
43
+ if (typeof json.value !== 'string' || typeof json.expires_at !== 'string') {
44
+ throw new Error('Broker response missing value / expires_at');
45
+ }
46
+ return { value: json.value, expiresAt: json.expires_at };
47
+ }
48
+ /**
49
+ * Check whether the proxy is up and responsive.
50
+ */
51
+ async health() {
52
+ const { statusCode, payload } = await this.request('GET', '/_health');
53
+ if (statusCode !== 200) {
54
+ throw new Error(`Proxy health check failed: HTTP ${statusCode}`);
55
+ }
56
+ return JSON.parse(payload);
57
+ }
58
+ request(method, urlPath, body) {
59
+ return new Promise((resolve, reject) => {
60
+ const req = http.request({
61
+ socketPath: this.socketPath,
62
+ path: urlPath,
63
+ method,
64
+ headers: body
65
+ ? { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(body) }
66
+ : undefined,
67
+ timeout: this.timeoutMs,
68
+ }, (res) => {
69
+ let chunks = '';
70
+ res.on('data', (chunk) => { chunks += chunk; });
71
+ res.on('end', () => {
72
+ resolve({ statusCode: res.statusCode ?? 0, payload: chunks });
73
+ });
74
+ });
75
+ req.on('error', (err) => {
76
+ if (err.code === 'ENOENT' || err.code === 'ECONNREFUSED') {
77
+ reject(new Error(`Cannot reach aquaman proxy at ${this.socketPath}. ` +
78
+ `Start it with: aquaman daemon`));
79
+ }
80
+ else {
81
+ reject(err);
82
+ }
83
+ });
84
+ req.on('timeout', () => {
85
+ req.destroy();
86
+ reject(new Error(`Broker request timed out after ${this.timeoutMs}ms`));
87
+ });
88
+ if (body)
89
+ req.write(body);
90
+ req.end();
91
+ });
92
+ }
93
+ }
94
+ //# sourceMappingURL=broker-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker-client.js","sourceRoot":"","sources":["../src/broker-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * aquaman-coder CLI.
4
+ *
5
+ * Subcommands:
6
+ * setup <agent> Install hook configuration for a coding agent
7
+ * (currently: claude-code; codex/opencode/cursor planned)
8
+ * project list List configured projects
9
+ * project add Add a project (interactive or flags)
10
+ * project remove Remove a project
11
+ * get <ref> Resolve an aquaman:// ref via the broker and print
12
+ * exec <cmd...> Run a command with the matching project env injected
13
+ * hook Stdio hook handler (invoked by Claude Code)
14
+ * doctor Diagnostics
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,368 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * aquaman-coder CLI.
4
+ *
5
+ * Subcommands:
6
+ * setup <agent> Install hook configuration for a coding agent
7
+ * (currently: claude-code; codex/opencode/cursor planned)
8
+ * project list List configured projects
9
+ * project add Add a project (interactive or flags)
10
+ * project remove Remove a project
11
+ * get <ref> Resolve an aquaman:// ref via the broker and print
12
+ * exec <cmd...> Run a command with the matching project env injected
13
+ * hook Stdio hook handler (invoked by Claude Code)
14
+ * doctor Diagnostics
15
+ */
16
+ import * as fs from 'node:fs';
17
+ import { spawn } from 'node:child_process';
18
+ import { Command } from 'commander';
19
+ import { VERSION } from '../index.js';
20
+ import { defaultProjectsPath, loadProjects, saveProjects, findProjectForCwd, parseRef, } from '../projects.js';
21
+ import { BrokerClient, defaultSocketPath } from '../broker-client.js';
22
+ import { runHookFromStdin } from '../adapters/claude-code/hook.js';
23
+ import { installClaudeCodeHooks, uninstallClaudeCodeHooks, defaultSettingsPath, } from '../adapters/claude-code/setup.js';
24
+ const program = new Command();
25
+ program
26
+ .name('aquaman-coder')
27
+ .description('Vault adapter for AI coding agents')
28
+ .version(VERSION)
29
+ .enablePositionalOptions();
30
+ // ---------------- setup ----------------
31
+ program
32
+ .command('setup <agent>')
33
+ .description('Install hook configuration for a coding agent (claude-code)')
34
+ .option('--uninstall', 'Remove aquaman hooks from the agent config', false)
35
+ .action((agent, opts) => {
36
+ if (agent !== 'claude-code') {
37
+ console.error(`Unsupported agent "${agent}". Supported: claude-code`);
38
+ console.error('(codex / opencode / cursor adapters are planned for v0.13.0+)');
39
+ process.exit(1);
40
+ }
41
+ const result = opts.uninstall
42
+ ? uninstallClaudeCodeHooks()
43
+ : installClaudeCodeHooks();
44
+ if (result.changed) {
45
+ console.log(`${opts.uninstall ? 'Removed' : 'Installed'} aquaman-coder hook -> ${result.path}`);
46
+ }
47
+ else {
48
+ console.log(`No changes needed (${result.path})`);
49
+ }
50
+ });
51
+ // ---------------- project ----------------
52
+ const project = program.command('project').description('Manage ~/.aquaman/projects.yaml');
53
+ project
54
+ .command('list')
55
+ .description('List configured projects')
56
+ .action(() => {
57
+ const file = loadProjects();
58
+ const names = Object.keys(file.projects);
59
+ if (names.length === 0) {
60
+ console.log('No projects configured.');
61
+ console.log('Add one with: aquaman-coder project add <name> --path . --env KEY=aquaman://service/key');
62
+ return;
63
+ }
64
+ for (const name of names) {
65
+ const cfg = file.projects[name];
66
+ console.log(`${name}`);
67
+ for (const p of cfg.paths)
68
+ console.log(` path: ${p}`);
69
+ for (const [k, v] of Object.entries(cfg.env))
70
+ console.log(` env: ${k} = ${v}`);
71
+ }
72
+ });
73
+ project
74
+ .command('add <name>')
75
+ .description('Add a project to ~/.aquaman/projects.yaml')
76
+ .option('--path <path>', 'Filesystem path (repeat for multiple)', collect, [])
77
+ .option('--env <name=ref>', 'Env binding (repeat for multiple)', collect, [])
78
+ .action((name, opts) => {
79
+ const file = loadProjects();
80
+ const env = {};
81
+ for (const e of opts.env) {
82
+ const idx = e.indexOf('=');
83
+ if (idx < 0) {
84
+ console.error(`Bad --env "${e}". Expected NAME=aquaman://service/key`);
85
+ process.exit(1);
86
+ }
87
+ const key = e.slice(0, idx);
88
+ const ref = e.slice(idx + 1);
89
+ if (!parseRef(ref)) {
90
+ console.error(`Bad reference "${ref}". Expected aquaman://service/key`);
91
+ process.exit(1);
92
+ }
93
+ env[key] = ref;
94
+ }
95
+ const paths = opts.path.length > 0 ? opts.path : [process.cwd()];
96
+ const cfg = { paths, env };
97
+ file.projects[name] = cfg;
98
+ saveProjects(file);
99
+ console.log(`Added project "${name}" -> ${defaultProjectsPath()}`);
100
+ });
101
+ project
102
+ .command('remove <name>')
103
+ .description('Remove a project')
104
+ .action((name) => {
105
+ const file = loadProjects();
106
+ if (!file.projects[name]) {
107
+ console.error(`Project "${name}" not found`);
108
+ process.exit(1);
109
+ }
110
+ delete file.projects[name];
111
+ saveProjects(file);
112
+ console.log(`Removed project "${name}"`);
113
+ });
114
+ // ---------------- get ----------------
115
+ program
116
+ .command('get <ref>')
117
+ .description('Resolve an aquaman:// ref via the broker and print the value')
118
+ .action(async (ref) => {
119
+ const parsed = parseRef(ref);
120
+ if (!parsed) {
121
+ console.error(`Bad reference "${ref}". Expected aquaman://service/key`);
122
+ process.exit(1);
123
+ }
124
+ const broker = new BrokerClient();
125
+ try {
126
+ const result = await broker.resolve({ service: parsed.service, key: parsed.key });
127
+ process.stdout.write(result.value);
128
+ if (process.stdout.isTTY)
129
+ process.stdout.write('\n');
130
+ }
131
+ catch (err) {
132
+ console.error(err.message);
133
+ process.exit(1);
134
+ }
135
+ });
136
+ // ---------------- exec ----------------
137
+ program
138
+ .command('exec <cmd> [args...]')
139
+ .description('Run a command with project env injected and stdout/stderr redacted')
140
+ .passThroughOptions()
141
+ .allowUnknownOption()
142
+ .option('--raw', 'Disable stdout/stderr redaction', false)
143
+ .action(async (cmd, args, opts) => {
144
+ const cwd = process.cwd();
145
+ const projects = loadProjects();
146
+ const match = findProjectForCwd(cwd, projects);
147
+ if (!match) {
148
+ console.error(`No aquaman project covers ${cwd}.`);
149
+ console.error('Add one with: aquaman-coder project add <name>');
150
+ process.exit(1);
151
+ }
152
+ const broker = new BrokerClient();
153
+ const env = { ...process.env };
154
+ const injectedValues = [];
155
+ for (const [envName, ref] of Object.entries(match.config.env)) {
156
+ const parsed = parseRef(ref);
157
+ if (!parsed)
158
+ continue;
159
+ try {
160
+ const result = await broker.resolve({ service: parsed.service, key: parsed.key, ttlSeconds: 60 });
161
+ env[envName] = result.value;
162
+ injectedValues.push(result.value);
163
+ }
164
+ catch (err) {
165
+ console.error(`aquaman: failed to resolve ${envName}: ${err.message}`);
166
+ process.exit(1);
167
+ }
168
+ }
169
+ const stdio = opts.raw ? 'inherit' : ['inherit', 'pipe', 'pipe'];
170
+ const child = spawn(cmd, args, { env, stdio: stdio });
171
+ if (!opts.raw) {
172
+ // Value-based redaction: prepend patterns built from the exact strings
173
+ // we just injected so they're stripped from child stdout/stderr no
174
+ // matter what shape they happen to have. Generic BUILTIN_PATTERNS still
175
+ // run after as defense-in-depth for any secrets the child surfaces that
176
+ // we did NOT inject (hardcoded tokens, env vars leaked from parent, ...).
177
+ const { redact, buildValuePatterns, BUILTIN_PATTERNS } = await import('aquaman-proxy');
178
+ const patterns = [...buildValuePatterns(injectedValues), ...BUILTIN_PATTERNS];
179
+ const pipeRedacted = (src, dst) => {
180
+ src.setEncoding('utf-8');
181
+ src.on('data', (chunk) => {
182
+ dst.write(redact(chunk, patterns).output);
183
+ });
184
+ };
185
+ if (child.stdout)
186
+ pipeRedacted(child.stdout, process.stdout);
187
+ if (child.stderr)
188
+ pipeRedacted(child.stderr, process.stderr);
189
+ }
190
+ child.on('exit', (code) => process.exit(code ?? 0));
191
+ child.on('error', (err) => {
192
+ console.error(`Failed to spawn "${cmd}": ${err.message}`);
193
+ process.exit(1);
194
+ });
195
+ });
196
+ // ---------------- hook ----------------
197
+ program
198
+ .command('hook')
199
+ .description('Stdio hook handler (invoked by Claude Code, not directly)')
200
+ .action(async () => {
201
+ const code = await runHookFromStdin(process.argv);
202
+ process.exit(code);
203
+ });
204
+ // ---------------- doctor ----------------
205
+ program
206
+ .command('doctor')
207
+ .description('Deep diagnostic for the coder integration (projects, broker, hooks, per-project vault checks)')
208
+ .action(async () => {
209
+ const checks = [];
210
+ // 1. projects.yaml exists
211
+ const projectsPath = defaultProjectsPath();
212
+ const projectsOk = fs.existsSync(projectsPath);
213
+ checks.push({
214
+ name: 'projects.yaml',
215
+ ok: projectsOk,
216
+ detail: projectsPath,
217
+ fix: projectsOk ? undefined : 'aquaman-coder project add <name> --path <dir> --env NAME=aquaman://service/key',
218
+ });
219
+ // 2. projects.yaml parses
220
+ let projects = null;
221
+ if (projectsOk) {
222
+ try {
223
+ projects = loadProjects();
224
+ const count = Object.keys(projects.projects).length;
225
+ checks.push({ name: 'projects parsed', ok: true, detail: `${count} project(s)` });
226
+ }
227
+ catch (err) {
228
+ checks.push({ name: 'projects parsed', ok: false, detail: err.message });
229
+ }
230
+ }
231
+ // 3. Proxy running on socket
232
+ const socketPath = defaultSocketPath();
233
+ const broker = new BrokerClient({ socketPath, timeoutMs: 2000 });
234
+ let brokerOk = false;
235
+ try {
236
+ const health = await broker.health();
237
+ checks.push({ name: 'proxy running', ok: true, detail: `version ${health.version ?? '?'}` });
238
+ brokerOk = true;
239
+ }
240
+ catch (err) {
241
+ checks.push({
242
+ name: 'proxy running',
243
+ ok: false,
244
+ detail: err.message,
245
+ fix: 'aquaman daemon &',
246
+ });
247
+ }
248
+ // 4. Per-project: every declared aquaman:// ref resolves
249
+ if (brokerOk && projects) {
250
+ for (const [name, cfg] of Object.entries(projects.projects)) {
251
+ for (const [envName, ref] of Object.entries(cfg.env)) {
252
+ const parsed = parseRef(ref);
253
+ if (!parsed) {
254
+ checks.push({ name: `project ${name}: env ${envName}`, ok: false, detail: `bad ref "${ref}"` });
255
+ continue;
256
+ }
257
+ try {
258
+ await broker.resolve({ service: parsed.service, key: parsed.key, ttlSeconds: 1 });
259
+ checks.push({ name: `project ${name}: ${envName}`, ok: true, detail: ref });
260
+ }
261
+ catch (err) {
262
+ checks.push({
263
+ name: `project ${name}: ${envName}`,
264
+ ok: false,
265
+ detail: `${ref} — ${err.message}`,
266
+ fix: `aquaman credentials add ${parsed.service} ${parsed.key}`,
267
+ });
268
+ }
269
+ }
270
+ }
271
+ }
272
+ // 5. Claude Code hooks installed (match both legacy and current command form)
273
+ const settingsPath = defaultSettingsPath();
274
+ if (fs.existsSync(settingsPath)) {
275
+ const raw = fs.readFileSync(settingsPath, 'utf-8');
276
+ const installed = raw.includes('aquaman-coder hook') || raw.includes('aquaman coder hook');
277
+ checks.push({
278
+ name: 'Claude Code hooks',
279
+ ok: installed,
280
+ detail: installed ? settingsPath : 'not configured',
281
+ fix: installed ? undefined : 'aquaman coder setup claude-code',
282
+ });
283
+ }
284
+ else {
285
+ checks.push({
286
+ name: 'Claude Code hooks',
287
+ ok: false,
288
+ detail: `${settingsPath} does not exist`,
289
+ fix: 'aquaman coder setup claude-code',
290
+ });
291
+ }
292
+ // Render
293
+ console.log('\n aquaman-coder doctor\n');
294
+ for (const c of checks) {
295
+ const mark = c.ok ? '✓' : '✗';
296
+ console.log(` ${mark} ${c.name}${c.detail ? ' ' + c.detail : ''}`);
297
+ if (!c.ok && c.fix)
298
+ console.log(` → ${c.fix}`);
299
+ }
300
+ const fail = checks.some((c) => !c.ok);
301
+ console.log('');
302
+ process.exit(fail ? 1 : 0);
303
+ });
304
+ // ---------------- status ----------------
305
+ program
306
+ .command('status')
307
+ .description('Show coder configuration and recent broker activity')
308
+ .action(async () => {
309
+ console.log('\n aquaman-coder status\n');
310
+ // Projects
311
+ const projectsPath = defaultProjectsPath();
312
+ if (!fs.existsSync(projectsPath)) {
313
+ console.log(' Projects: none configured');
314
+ console.log(` Add one: aquaman coder project add <name>\n`);
315
+ }
316
+ else {
317
+ try {
318
+ const projects = loadProjects();
319
+ const names = Object.keys(projects.projects);
320
+ console.log(` Projects: ${names.length} configured (${projectsPath})`);
321
+ for (const name of names) {
322
+ const cfg = projects.projects[name];
323
+ const envCount = Object.keys(cfg.env).length;
324
+ console.log(` - ${name}: ${cfg.paths.length} path(s), ${envCount} env binding(s)`);
325
+ }
326
+ }
327
+ catch (err) {
328
+ console.log(` Projects: invalid (${err.message})`);
329
+ }
330
+ }
331
+ // Claude Code hooks
332
+ const settingsPath = defaultSettingsPath();
333
+ console.log('');
334
+ if (fs.existsSync(settingsPath)) {
335
+ const raw = fs.readFileSync(settingsPath, 'utf-8');
336
+ const installed = raw.includes('aquaman-coder hook') || raw.includes('aquaman coder hook');
337
+ console.log(` Claude Code hooks: ${installed ? 'installed' : 'not configured'}`);
338
+ console.log(` ${settingsPath}`);
339
+ }
340
+ else {
341
+ console.log(' Claude Code hooks: not configured (settings.json missing)');
342
+ }
343
+ // Broker connectivity
344
+ console.log('');
345
+ const socketPath = defaultSocketPath();
346
+ const broker = new BrokerClient({ socketPath, timeoutMs: 2000 });
347
+ try {
348
+ const health = await broker.health();
349
+ console.log(` Broker: reachable (proxy v${health.version ?? '?'})`);
350
+ }
351
+ catch (err) {
352
+ console.log(` Broker: unreachable (${err.message})`);
353
+ }
354
+ console.log('');
355
+ });
356
+ // ---------------- helpers ----------------
357
+ function collect(value, prev) {
358
+ prev.push(value);
359
+ return prev;
360
+ }
361
+ if (process.argv.length <= 2) {
362
+ program.help();
363
+ }
364
+ program.parseAsync().catch((err) => {
365
+ console.error(err.message || err);
366
+ process.exit(1);
367
+ });
368
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * aquaman-coder
3
+ *
4
+ * Vault adapter for AI coding agents (Claude Code, Codex, OpenCode, Cursor).
5
+ *
6
+ * This package is the user-facing layer for the v0.12.0 coding-agent pivot.
7
+ * It depends on `aquaman-proxy` (the canonical core daemon) for vault access
8
+ * via the `/broker/resolve` UDS endpoint, and ships per-agent hook adapters
9
+ * + setup commands.
10
+ *
11
+ * See docs/PACKAGES.md for the package boundary policy.
12
+ */
13
+ export declare const VERSION = "0.12.0";
14
+ export { type ProjectConfig, type ProjectsFile, defaultProjectsPath, loadProjects, saveProjects, findProjectForCwd, parseRef, } from './projects.js';
15
+ export { type BrokerResolveOptions, type BrokerResolveResult, type BrokerClientOptions, BrokerClient, defaultSocketPath, } from './broker-client.js';
16
+ export { type HookEvent, type HookDecision, type HookContext, handlePreToolUse, handlePostToolUse, runHookFromStdin, } from './adapters/claude-code/hook.js';
17
+ export { type ClaudeSettings, type SetupOptions, type SetupResult, defaultSettingsPath, installClaudeCodeHooks, uninstallClaudeCodeHooks, } from './adapters/claude-code/setup.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,OAAO,WAAW,CAAC;AAEhC,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,YAAY,EACZ,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,iCAAiC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * aquaman-coder
3
+ *
4
+ * Vault adapter for AI coding agents (Claude Code, Codex, OpenCode, Cursor).
5
+ *
6
+ * This package is the user-facing layer for the v0.12.0 coding-agent pivot.
7
+ * It depends on `aquaman-proxy` (the canonical core daemon) for vault access
8
+ * via the `/broker/resolve` UDS endpoint, and ships per-agent hook adapters
9
+ * + setup commands.
10
+ *
11
+ * See docs/PACKAGES.md for the package boundary policy.
12
+ */
13
+ export const VERSION = '0.12.0';
14
+ export { defaultProjectsPath, loadProjects, saveProjects, findProjectForCwd, parseRef, } from './projects.js';
15
+ export { BrokerClient, defaultSocketPath, } from './broker-client.js';
16
+ export { handlePreToolUse, handlePostToolUse, runHookFromStdin, } from './adapters/claude-code/hook.js';
17
+ export { defaultSettingsPath, installClaudeCodeHooks, uninstallClaudeCodeHooks, } from './adapters/claude-code/setup.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEhC,OAAO,EAGL,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAIL,YAAY,EACZ,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAIL,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAIL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Project resolver — maps a working directory to an aquaman project
3
+ * config in `~/.aquaman/projects.yaml`.
4
+ *
5
+ * Each project declares:
6
+ * - one or more paths it owns (longest-prefix wins)
7
+ * - an env map: ENV_VAR_NAME → aquaman://service/key reference
8
+ *
9
+ * The resolver materializes references to real credentials by calling
10
+ * the broker over UDS — see `./broker-client.ts`.
11
+ */
12
+ export interface ProjectConfig {
13
+ /** Filesystem paths this project owns. Longest-prefix wins. */
14
+ paths: string[];
15
+ /** Environment-variable name → aquaman:// reference (e.g. aquaman://anthropic/api_key). */
16
+ env: Record<string, string>;
17
+ }
18
+ export interface ProjectsFile {
19
+ version?: number;
20
+ projects: Record<string, ProjectConfig>;
21
+ }
22
+ export declare function defaultProjectsPath(): string;
23
+ /**
24
+ * Load and validate a projects.yaml file. Returns an empty config if
25
+ * the file does not exist. Throws on malformed YAML or invalid refs.
26
+ */
27
+ export declare function loadProjects(projectsPath?: string): ProjectsFile;
28
+ /**
29
+ * Write projects.yaml atomically. Creates parent directory if needed.
30
+ */
31
+ export declare function saveProjects(file: ProjectsFile, projectsPath?: string): void;
32
+ /**
33
+ * Given a working directory, return the matching project config (or
34
+ * null if none matches). Longest-prefix wins so nested projects work.
35
+ */
36
+ export declare function findProjectForCwd(cwd: string, file: ProjectsFile): {
37
+ name: string;
38
+ config: ProjectConfig;
39
+ } | null;
40
+ /**
41
+ * Parse an aquaman:// reference into (service, key).
42
+ */
43
+ export declare function parseRef(ref: string): {
44
+ service: string;
45
+ key: string;
46
+ } | null;
47
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../src/projects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,2FAA2F;IAC3F,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACzC;AAQD,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAYD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,YAAY,GAAE,MAA8B,GAAG,YAAY,CAqCvF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,YAAY,EAClB,YAAY,GAAE,MAA8B,GAC3C,IAAI,CASN;AAeD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,YAAY,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAiBhD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAI7E"}