opencastle 0.26.1 → 0.27.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/README.md +7 -1
- package/bin/cli.mjs +10 -0
- package/dist/cli/agents.d.ts +3 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +161 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/baselines.d.ts +3 -0
- package/dist/cli/baselines.d.ts.map +1 -0
- package/dist/cli/baselines.js +128 -0
- package/dist/cli/baselines.js.map +1 -0
- package/dist/cli/convoy/engine.d.ts +68 -2
- package/dist/cli/convoy/engine.d.ts.map +1 -1
- package/dist/cli/convoy/engine.js +2102 -26
- package/dist/cli/convoy/engine.js.map +1 -1
- package/dist/cli/convoy/engine.test.js +1572 -70
- package/dist/cli/convoy/engine.test.js.map +1 -1
- package/dist/cli/convoy/events.d.ts +4 -1
- package/dist/cli/convoy/events.d.ts.map +1 -1
- package/dist/cli/convoy/events.js +74 -13
- package/dist/cli/convoy/events.js.map +1 -1
- package/dist/cli/convoy/events.test.js +154 -27
- package/dist/cli/convoy/events.test.js.map +1 -1
- package/dist/cli/convoy/expertise.d.ts +16 -0
- package/dist/cli/convoy/expertise.d.ts.map +1 -0
- package/dist/cli/convoy/expertise.js +121 -0
- package/dist/cli/convoy/expertise.js.map +1 -0
- package/dist/cli/convoy/expertise.test.d.ts +2 -0
- package/dist/cli/convoy/expertise.test.d.ts.map +1 -0
- package/dist/cli/convoy/expertise.test.js +96 -0
- package/dist/cli/convoy/expertise.test.js.map +1 -0
- package/dist/cli/convoy/export.test.js +1 -0
- package/dist/cli/convoy/export.test.js.map +1 -1
- package/dist/cli/convoy/formula.d.ts +19 -0
- package/dist/cli/convoy/formula.d.ts.map +1 -0
- package/dist/cli/convoy/formula.js +142 -0
- package/dist/cli/convoy/formula.js.map +1 -0
- package/dist/cli/convoy/formula.test.d.ts +2 -0
- package/dist/cli/convoy/formula.test.d.ts.map +1 -0
- package/dist/cli/convoy/formula.test.js +342 -0
- package/dist/cli/convoy/formula.test.js.map +1 -0
- package/dist/cli/convoy/gates.d.ts +128 -0
- package/dist/cli/convoy/gates.d.ts.map +1 -0
- package/dist/cli/convoy/gates.js +606 -0
- package/dist/cli/convoy/gates.js.map +1 -0
- package/dist/cli/convoy/gates.test.d.ts +2 -0
- package/dist/cli/convoy/gates.test.d.ts.map +1 -0
- package/dist/cli/convoy/gates.test.js +976 -0
- package/dist/cli/convoy/gates.test.js.map +1 -0
- package/dist/cli/convoy/health.d.ts +11 -0
- package/dist/cli/convoy/health.d.ts.map +1 -1
- package/dist/cli/convoy/health.js +54 -0
- package/dist/cli/convoy/health.js.map +1 -1
- package/dist/cli/convoy/health.test.js +56 -1
- package/dist/cli/convoy/health.test.js.map +1 -1
- package/dist/cli/convoy/issues.d.ts +8 -0
- package/dist/cli/convoy/issues.d.ts.map +1 -0
- package/dist/cli/convoy/issues.js +98 -0
- package/dist/cli/convoy/issues.js.map +1 -0
- package/dist/cli/convoy/issues.test.d.ts +2 -0
- package/dist/cli/convoy/issues.test.d.ts.map +1 -0
- package/dist/cli/convoy/issues.test.js +107 -0
- package/dist/cli/convoy/issues.test.js.map +1 -0
- package/dist/cli/convoy/knowledge.d.ts +5 -0
- package/dist/cli/convoy/knowledge.d.ts.map +1 -0
- package/dist/cli/convoy/knowledge.js +116 -0
- package/dist/cli/convoy/knowledge.js.map +1 -0
- package/dist/cli/convoy/knowledge.test.d.ts +2 -0
- package/dist/cli/convoy/knowledge.test.d.ts.map +1 -0
- package/dist/cli/convoy/knowledge.test.js +87 -0
- package/dist/cli/convoy/knowledge.test.js.map +1 -0
- package/dist/cli/convoy/lessons.d.ts +17 -0
- package/dist/cli/convoy/lessons.d.ts.map +1 -0
- package/dist/cli/convoy/lessons.js +149 -0
- package/dist/cli/convoy/lessons.js.map +1 -0
- package/dist/cli/convoy/lessons.test.d.ts +2 -0
- package/dist/cli/convoy/lessons.test.d.ts.map +1 -0
- package/dist/cli/convoy/lessons.test.js +135 -0
- package/dist/cli/convoy/lessons.test.js.map +1 -0
- package/dist/cli/convoy/lock.d.ts +13 -0
- package/dist/cli/convoy/lock.d.ts.map +1 -0
- package/dist/cli/convoy/lock.js +88 -0
- package/dist/cli/convoy/lock.js.map +1 -0
- package/dist/cli/convoy/lock.test.d.ts +2 -0
- package/dist/cli/convoy/lock.test.d.ts.map +1 -0
- package/dist/cli/convoy/lock.test.js +136 -0
- package/dist/cli/convoy/lock.test.js.map +1 -0
- package/dist/cli/convoy/merge.d.ts +4 -0
- package/dist/cli/convoy/merge.d.ts.map +1 -1
- package/dist/cli/convoy/merge.js +18 -1
- package/dist/cli/convoy/merge.js.map +1 -1
- package/dist/cli/convoy/merge.test.js +6 -7
- package/dist/cli/convoy/merge.test.js.map +1 -1
- package/dist/cli/convoy/partition.d.ts +51 -0
- package/dist/cli/convoy/partition.d.ts.map +1 -0
- package/dist/cli/convoy/partition.js +186 -0
- package/dist/cli/convoy/partition.js.map +1 -0
- package/dist/cli/convoy/partition.test.d.ts +2 -0
- package/dist/cli/convoy/partition.test.d.ts.map +1 -0
- package/dist/cli/convoy/partition.test.js +315 -0
- package/dist/cli/convoy/partition.test.js.map +1 -0
- package/dist/cli/convoy/pipeline.test.js +6 -0
- package/dist/cli/convoy/pipeline.test.js.map +1 -1
- package/dist/cli/convoy/store.d.ts +47 -5
- package/dist/cli/convoy/store.d.ts.map +1 -1
- package/dist/cli/convoy/store.js +525 -19
- package/dist/cli/convoy/store.js.map +1 -1
- package/dist/cli/convoy/store.test.js +1345 -12
- package/dist/cli/convoy/store.test.js.map +1 -1
- package/dist/cli/convoy/types.d.ts +156 -2
- package/dist/cli/convoy/types.d.ts.map +1 -1
- package/dist/cli/destroy.d.ts +3 -0
- package/dist/cli/destroy.d.ts.map +1 -0
- package/dist/cli/destroy.js +69 -0
- package/dist/cli/destroy.js.map +1 -0
- package/dist/cli/destroy.test.d.ts +2 -0
- package/dist/cli/destroy.test.d.ts.map +1 -0
- package/dist/cli/destroy.test.js +116 -0
- package/dist/cli/destroy.test.js.map +1 -0
- package/dist/cli/gitignore.d.ts +9 -0
- package/dist/cli/gitignore.d.ts.map +1 -1
- package/dist/cli/gitignore.js +29 -0
- package/dist/cli/gitignore.js.map +1 -1
- package/dist/cli/plan.d.ts +3 -0
- package/dist/cli/plan.d.ts.map +1 -0
- package/dist/cli/plan.js +288 -0
- package/dist/cli/plan.js.map +1 -0
- package/dist/cli/run/adapters/claude.d.ts +2 -0
- package/dist/cli/run/adapters/claude.d.ts.map +1 -1
- package/dist/cli/run/adapters/claude.js +89 -49
- package/dist/cli/run/adapters/claude.js.map +1 -1
- package/dist/cli/run/adapters/claude.test.d.ts +2 -0
- package/dist/cli/run/adapters/claude.test.d.ts.map +1 -0
- package/dist/cli/run/adapters/claude.test.js +205 -0
- package/dist/cli/run/adapters/claude.test.js.map +1 -0
- package/dist/cli/run/adapters/copilot.d.ts +1 -0
- package/dist/cli/run/adapters/copilot.d.ts.map +1 -1
- package/dist/cli/run/adapters/copilot.js +84 -46
- package/dist/cli/run/adapters/copilot.js.map +1 -1
- package/dist/cli/run/adapters/copilot.test.d.ts +2 -0
- package/dist/cli/run/adapters/copilot.test.d.ts.map +1 -0
- package/dist/cli/run/adapters/copilot.test.js +195 -0
- package/dist/cli/run/adapters/copilot.test.js.map +1 -0
- package/dist/cli/run/adapters/cursor.d.ts +1 -0
- package/dist/cli/run/adapters/cursor.d.ts.map +1 -1
- package/dist/cli/run/adapters/cursor.js +83 -47
- package/dist/cli/run/adapters/cursor.js.map +1 -1
- package/dist/cli/run/adapters/cursor.test.d.ts +2 -0
- package/dist/cli/run/adapters/cursor.test.d.ts.map +1 -0
- package/dist/cli/run/adapters/cursor.test.js +129 -0
- package/dist/cli/run/adapters/cursor.test.js.map +1 -0
- package/dist/cli/run/adapters/opencode.d.ts +1 -0
- package/dist/cli/run/adapters/opencode.d.ts.map +1 -1
- package/dist/cli/run/adapters/opencode.js +81 -47
- package/dist/cli/run/adapters/opencode.js.map +1 -1
- package/dist/cli/run/adapters/opencode.test.d.ts +2 -0
- package/dist/cli/run/adapters/opencode.test.d.ts.map +1 -0
- package/dist/cli/run/adapters/opencode.test.js +119 -0
- package/dist/cli/run/adapters/opencode.test.js.map +1 -0
- package/dist/cli/run/executor.js +1 -1
- package/dist/cli/run/executor.js.map +1 -1
- package/dist/cli/run/schema.d.ts.map +1 -1
- package/dist/cli/run/schema.js +245 -4
- package/dist/cli/run/schema.js.map +1 -1
- package/dist/cli/run/schema.test.js +669 -0
- package/dist/cli/run/schema.test.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +362 -22
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/types.d.ts +85 -2
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/cli/watch.d.ts +15 -0
- package/dist/cli/watch.d.ts.map +1 -0
- package/dist/cli/watch.js +279 -0
- package/dist/cli/watch.js.map +1 -0
- package/package.json +1 -1
- package/src/cli/agents.ts +177 -0
- package/src/cli/baselines.ts +143 -0
- package/src/cli/convoy/engine.test.ts +1839 -70
- package/src/cli/convoy/engine.ts +2417 -38
- package/src/cli/convoy/events.test.ts +179 -38
- package/src/cli/convoy/events.ts +88 -16
- package/src/cli/convoy/expertise.test.ts +128 -0
- package/src/cli/convoy/expertise.ts +163 -0
- package/src/cli/convoy/export.test.ts +1 -0
- package/src/cli/convoy/formula.test.ts +405 -0
- package/src/cli/convoy/formula.ts +174 -0
- package/src/cli/convoy/gates.test.ts +1169 -0
- package/src/cli/convoy/gates.ts +774 -0
- package/src/cli/convoy/health.test.ts +64 -2
- package/src/cli/convoy/health.ts +80 -2
- package/src/cli/convoy/issues.test.ts +143 -0
- package/src/cli/convoy/issues.ts +136 -0
- package/src/cli/convoy/knowledge.test.ts +101 -0
- package/src/cli/convoy/knowledge.ts +132 -0
- package/src/cli/convoy/lessons.test.ts +188 -0
- package/src/cli/convoy/lessons.ts +164 -0
- package/src/cli/convoy/lock.test.ts +181 -0
- package/src/cli/convoy/lock.ts +103 -0
- package/src/cli/convoy/merge.test.ts +6 -7
- package/src/cli/convoy/merge.ts +19 -1
- package/src/cli/convoy/partition.test.ts +423 -0
- package/src/cli/convoy/partition.ts +232 -0
- package/src/cli/convoy/pipeline.test.ts +6 -0
- package/src/cli/convoy/store.test.ts +1512 -14
- package/src/cli/convoy/store.ts +676 -30
- package/src/cli/convoy/types.ts +170 -1
- package/src/cli/destroy.test.ts +141 -0
- package/src/cli/destroy.ts +88 -0
- package/src/cli/gitignore.ts +36 -0
- package/src/cli/plan.ts +316 -0
- package/src/cli/run/adapters/claude.test.ts +234 -0
- package/src/cli/run/adapters/claude.ts +45 -5
- package/src/cli/run/adapters/copilot.test.ts +224 -0
- package/src/cli/run/adapters/copilot.ts +34 -4
- package/src/cli/run/adapters/cursor.test.ts +144 -0
- package/src/cli/run/adapters/cursor.ts +33 -2
- package/src/cli/run/adapters/opencode.test.ts +135 -0
- package/src/cli/run/adapters/opencode.ts +30 -2
- package/src/cli/run/executor.ts +1 -1
- package/src/cli/run/schema.test.ts +758 -0
- package/src/cli/run/schema.ts +300 -25
- package/src/cli/run.ts +341 -21
- package/src/cli/types.ts +86 -1
- package/src/cli/watch.ts +298 -0
- package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
+
import { mkdtemp, mkdir, writeFile, rm } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { existsSync } from 'node:fs';
|
|
6
|
+
vi.mock('./prompt.js', () => ({
|
|
7
|
+
confirm: vi.fn().mockResolvedValue(true),
|
|
8
|
+
closePrompts: vi.fn(),
|
|
9
|
+
c: {
|
|
10
|
+
green: (s) => s,
|
|
11
|
+
dim: (s) => s,
|
|
12
|
+
bold: (s) => s,
|
|
13
|
+
red: (s) => s,
|
|
14
|
+
cyan: (s) => s,
|
|
15
|
+
yellow: (s) => s,
|
|
16
|
+
magenta: (s) => s,
|
|
17
|
+
},
|
|
18
|
+
}));
|
|
19
|
+
import destroy from './destroy.js';
|
|
20
|
+
import { confirm } from './prompt.js';
|
|
21
|
+
const START_MARKER = '# >>> OpenCastle managed (do not edit) >>>';
|
|
22
|
+
const END_MARKER = '# <<< OpenCastle managed <<<';
|
|
23
|
+
async function writeManifestFile(dir, manifest = {}) {
|
|
24
|
+
await mkdir(join(dir, '.opencastle'), { recursive: true });
|
|
25
|
+
const full = {
|
|
26
|
+
version: '1.0.0',
|
|
27
|
+
ide: 'vscode',
|
|
28
|
+
ides: ['vscode'],
|
|
29
|
+
installedAt: new Date().toISOString(),
|
|
30
|
+
updatedAt: new Date().toISOString(),
|
|
31
|
+
managedPaths: { framework: [], customizable: [] },
|
|
32
|
+
...manifest,
|
|
33
|
+
};
|
|
34
|
+
await writeFile(join(dir, '.opencastle', 'manifest.json'), JSON.stringify(full, null, 2));
|
|
35
|
+
}
|
|
36
|
+
async function writeGitignoreWithBlock(dir, userEntries = 'node_modules\n') {
|
|
37
|
+
const block = [userEntries, '', START_MARKER, '.github/', '!.github/customizations/', END_MARKER, ''].join('\n');
|
|
38
|
+
await writeFile(join(dir, '.gitignore'), block);
|
|
39
|
+
}
|
|
40
|
+
// ── Tests ──────────────────────────────────────────────────────
|
|
41
|
+
describe('destroy', () => {
|
|
42
|
+
let tmpDir;
|
|
43
|
+
let cwdSpy;
|
|
44
|
+
let exitSpy;
|
|
45
|
+
beforeEach(async () => {
|
|
46
|
+
tmpDir = await mkdtemp(join(tmpdir(), 'oc-destroy-'));
|
|
47
|
+
cwdSpy = vi.spyOn(process, 'cwd').mockReturnValue(tmpDir);
|
|
48
|
+
exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => {
|
|
49
|
+
throw new Error('process.exit called');
|
|
50
|
+
});
|
|
51
|
+
vi.mocked(confirm).mockResolvedValue(true);
|
|
52
|
+
});
|
|
53
|
+
afterEach(async () => {
|
|
54
|
+
cwdSpy.mockRestore();
|
|
55
|
+
exitSpy.mockRestore();
|
|
56
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
57
|
+
});
|
|
58
|
+
it('removes all managed framework files', async () => {
|
|
59
|
+
await writeManifestFile(tmpDir, {
|
|
60
|
+
managedPaths: {
|
|
61
|
+
framework: ['.github/instructions/general.instructions.md', '.github/copilot-instructions.md'],
|
|
62
|
+
customizable: [],
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
await mkdir(join(tmpDir, '.github', 'instructions'), { recursive: true });
|
|
66
|
+
await writeFile(join(tmpDir, '.github', 'instructions', 'general.instructions.md'), 'content');
|
|
67
|
+
await writeFile(join(tmpDir, '.github', 'copilot-instructions.md'), 'content');
|
|
68
|
+
await destroy({ pkgRoot: tmpDir, args: [] });
|
|
69
|
+
expect(existsSync(join(tmpDir, '.github', 'instructions', 'general.instructions.md'))).toBe(false);
|
|
70
|
+
expect(existsSync(join(tmpDir, '.github', 'copilot-instructions.md'))).toBe(false);
|
|
71
|
+
});
|
|
72
|
+
it('removes .opencastle/ directory', async () => {
|
|
73
|
+
await writeManifestFile(tmpDir);
|
|
74
|
+
expect(existsSync(join(tmpDir, '.opencastle'))).toBe(true);
|
|
75
|
+
await destroy({ pkgRoot: tmpDir, args: [] });
|
|
76
|
+
expect(existsSync(join(tmpDir, '.opencastle'))).toBe(false);
|
|
77
|
+
});
|
|
78
|
+
it('removes legacy .opencastle.json manifest', async () => {
|
|
79
|
+
await writeManifestFile(tmpDir);
|
|
80
|
+
const legacyPath = join(tmpDir, '.opencastle.json');
|
|
81
|
+
await writeFile(legacyPath, JSON.stringify({ version: '0.1.0', ide: 'vscode', installedAt: '', updatedAt: '' }));
|
|
82
|
+
await destroy({ pkgRoot: tmpDir, args: [] });
|
|
83
|
+
expect(existsSync(legacyPath)).toBe(false);
|
|
84
|
+
});
|
|
85
|
+
it('cleans the gitignore block but keeps user entries', async () => {
|
|
86
|
+
await writeManifestFile(tmpDir);
|
|
87
|
+
await writeGitignoreWithBlock(tmpDir, 'node_modules\ndist\n');
|
|
88
|
+
await destroy({ pkgRoot: tmpDir, args: [] });
|
|
89
|
+
const gitignorePath = join(tmpDir, '.gitignore');
|
|
90
|
+
expect(existsSync(gitignorePath)).toBe(true);
|
|
91
|
+
const { readFile } = await import('node:fs/promises');
|
|
92
|
+
const content = await readFile(gitignorePath, 'utf8');
|
|
93
|
+
expect(content).not.toContain(START_MARKER);
|
|
94
|
+
expect(content).not.toContain(END_MARKER);
|
|
95
|
+
expect(content).toContain('node_modules');
|
|
96
|
+
expect(content).toContain('dist');
|
|
97
|
+
});
|
|
98
|
+
it('dry-run makes no changes', async () => {
|
|
99
|
+
await writeManifestFile(tmpDir, {
|
|
100
|
+
managedPaths: { framework: ['some-file.md'], customizable: [] },
|
|
101
|
+
});
|
|
102
|
+
await writeFile(join(tmpDir, 'some-file.md'), 'content');
|
|
103
|
+
await writeGitignoreWithBlock(tmpDir);
|
|
104
|
+
await destroy({ pkgRoot: tmpDir, args: ['--dry-run'] });
|
|
105
|
+
expect(existsSync(join(tmpDir, 'some-file.md'))).toBe(true);
|
|
106
|
+
expect(existsSync(join(tmpDir, '.opencastle'))).toBe(true);
|
|
107
|
+
const { readFile } = await import('node:fs/promises');
|
|
108
|
+
const gitignore = await readFile(join(tmpDir, '.gitignore'), 'utf8');
|
|
109
|
+
expect(gitignore).toContain(START_MARKER);
|
|
110
|
+
});
|
|
111
|
+
it('exits with error when no manifest found', async () => {
|
|
112
|
+
await expect(destroy({ pkgRoot: tmpDir, args: [] })).rejects.toThrow('process.exit called');
|
|
113
|
+
expect(exitSpy).toHaveBeenCalledWith(1);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=destroy.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"destroy.test.js","sourceRoot":"","sources":["../../src/cli/destroy.test.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/gitignore.d.ts
CHANGED
|
@@ -8,4 +8,13 @@ import type { ManagedPaths } from './types.js';
|
|
|
8
8
|
* (handles re-init or IDE switch cleanly).
|
|
9
9
|
*/
|
|
10
10
|
export declare function updateGitignore(projectRoot: string, managed: ManagedPaths): Promise<'created' | 'updated' | 'unchanged'>;
|
|
11
|
+
/**
|
|
12
|
+
* Remove the OpenCastle managed block from `.gitignore`.
|
|
13
|
+
*
|
|
14
|
+
* - No-op if no `.gitignore` exists or no block is present.
|
|
15
|
+
* - Cleans up resulting double blank lines.
|
|
16
|
+
* - Deletes `.gitignore` if the file becomes empty after removal.
|
|
17
|
+
* - Returns 'removed' or 'unchanged'.
|
|
18
|
+
*/
|
|
19
|
+
export declare function removeGitignoreBlock(projectRoot: string): Promise<'removed' | 'unchanged'>;
|
|
11
20
|
//# sourceMappingURL=gitignore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../src/cli/gitignore.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AA6B9C;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC,CA8B9C"}
|
|
1
|
+
{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../src/cli/gitignore.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AA6B9C;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC,CA8B9C;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,CAwBlC"}
|
package/dist/cli/gitignore.js
CHANGED
|
@@ -56,4 +56,33 @@ export async function updateGitignore(projectRoot, managed) {
|
|
|
56
56
|
await writeFile(gitignorePath, existing + separator + block + '\n', 'utf8');
|
|
57
57
|
return 'updated';
|
|
58
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Remove the OpenCastle managed block from `.gitignore`.
|
|
61
|
+
*
|
|
62
|
+
* - No-op if no `.gitignore` exists or no block is present.
|
|
63
|
+
* - Cleans up resulting double blank lines.
|
|
64
|
+
* - Deletes `.gitignore` if the file becomes empty after removal.
|
|
65
|
+
* - Returns 'removed' or 'unchanged'.
|
|
66
|
+
*/
|
|
67
|
+
export async function removeGitignoreBlock(projectRoot) {
|
|
68
|
+
const gitignorePath = resolve(projectRoot, '.gitignore');
|
|
69
|
+
if (!existsSync(gitignorePath))
|
|
70
|
+
return 'unchanged';
|
|
71
|
+
const existing = await readFile(gitignorePath, 'utf8');
|
|
72
|
+
const startIdx = existing.indexOf(START_MARKER);
|
|
73
|
+
const endIdx = existing.indexOf(END_MARKER);
|
|
74
|
+
if (startIdx === -1 || endIdx === -1)
|
|
75
|
+
return 'unchanged';
|
|
76
|
+
const before = existing.slice(0, startIdx);
|
|
77
|
+
const after = existing.slice(endIdx + END_MARKER.length);
|
|
78
|
+
// Collapse consecutive blank lines left by removal
|
|
79
|
+
const updated = (before + after).replace(/\n{3,}/g, '\n\n').trimEnd();
|
|
80
|
+
if (!updated) {
|
|
81
|
+
const { unlink } = await import('node:fs/promises');
|
|
82
|
+
await unlink(gitignorePath);
|
|
83
|
+
return 'removed';
|
|
84
|
+
}
|
|
85
|
+
await writeFile(gitignorePath, updated + '\n', 'utf8');
|
|
86
|
+
return 'removed';
|
|
87
|
+
}
|
|
59
88
|
//# sourceMappingURL=gitignore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/cli/gitignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGpC,MAAM,YAAY,GAAG,4CAA4C,CAAA;AACjE,MAAM,UAAU,GAAG,8BAA8B,CAAA;AAEjD;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,OAAqB;IACvC,MAAM,KAAK,GAAa,CAAC,YAAY,CAAC,CAAA;IAEtC,+DAA+D;IAC/D,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACf,CAAC;IAED,oDAAoD;IACpD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACtB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,OAAqB;IAErB,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;IACxD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IAEjC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,MAAM,SAAS,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,CAAA;QACpD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAEtD,yBAAyB;IACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAE3C,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;QACxD,MAAM,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAA;QAEtC,IAAI,OAAO,KAAK,QAAQ;YAAE,OAAO,WAAW,CAAA;QAE5C,MAAM,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAC/C,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,gCAAgC;IAChC,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;IACzD,MAAM,SAAS,CAAC,aAAa,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,CAAA;IAC3E,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/cli/gitignore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/cli/plan.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAQ,MAAM,YAAY,CAAA;AAmKlD,wBAA8B,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiJ/E"}
|
package/dist/cli/plan.js
ADDED
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { resolve, join, basename } from 'node:path';
|
|
4
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
5
|
+
import { getAdapter, detectAdapter } from './run/adapters/index.js';
|
|
6
|
+
import { parseTaskSpecText } from './run/schema.js';
|
|
7
|
+
import { c } from './prompt.js';
|
|
8
|
+
const HELP = `
|
|
9
|
+
opencastle plan [options]
|
|
10
|
+
|
|
11
|
+
Generate a convoy spec from a task description file by running it through the
|
|
12
|
+
generate-convoy prompt via an AI adapter.
|
|
13
|
+
|
|
14
|
+
Options:
|
|
15
|
+
--file, -f <path> Path to a text file with the task description (required)
|
|
16
|
+
--context <path> Optional path to an additional context file
|
|
17
|
+
--output, -o <path> Output path for the generated convoy spec
|
|
18
|
+
--adapter, -a <name> Override agent runtime adapter
|
|
19
|
+
--verbose Show full agent output
|
|
20
|
+
--dry-run Print the prompt that would be sent without executing
|
|
21
|
+
--help, -h Show this help
|
|
22
|
+
`;
|
|
23
|
+
function parseArgs(args) {
|
|
24
|
+
const opts = {
|
|
25
|
+
file: null,
|
|
26
|
+
context: null,
|
|
27
|
+
output: null,
|
|
28
|
+
adapter: null,
|
|
29
|
+
verbose: false,
|
|
30
|
+
dryRun: false,
|
|
31
|
+
help: false,
|
|
32
|
+
};
|
|
33
|
+
for (let i = 0; i < args.length; i++) {
|
|
34
|
+
const arg = args[i];
|
|
35
|
+
switch (arg) {
|
|
36
|
+
case '--help':
|
|
37
|
+
case '-h':
|
|
38
|
+
opts.help = true;
|
|
39
|
+
break;
|
|
40
|
+
case '--file':
|
|
41
|
+
case '-f':
|
|
42
|
+
if (i + 1 >= args.length) {
|
|
43
|
+
console.error(' ✗ --file requires a path');
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
opts.file = args[++i];
|
|
47
|
+
break;
|
|
48
|
+
case '--context':
|
|
49
|
+
if (i + 1 >= args.length) {
|
|
50
|
+
console.error(' ✗ --context requires a path');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
opts.context = args[++i];
|
|
54
|
+
break;
|
|
55
|
+
case '--output':
|
|
56
|
+
case '-o':
|
|
57
|
+
if (i + 1 >= args.length) {
|
|
58
|
+
console.error(' ✗ --output requires a path');
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
opts.output = args[++i];
|
|
62
|
+
break;
|
|
63
|
+
case '--adapter':
|
|
64
|
+
case '-a':
|
|
65
|
+
if (i + 1 >= args.length) {
|
|
66
|
+
console.error(' ✗ --adapter requires a name');
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
opts.adapter = args[++i];
|
|
70
|
+
break;
|
|
71
|
+
case '--verbose':
|
|
72
|
+
opts.verbose = true;
|
|
73
|
+
break;
|
|
74
|
+
case '--dry-run':
|
|
75
|
+
case '--dryRun':
|
|
76
|
+
opts.dryRun = true;
|
|
77
|
+
break;
|
|
78
|
+
default:
|
|
79
|
+
console.error(` ✗ Unknown option: ${arg}`);
|
|
80
|
+
console.log(HELP);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return opts;
|
|
85
|
+
}
|
|
86
|
+
function printAdapterError(detectionFailed, adapterName) {
|
|
87
|
+
if (detectionFailed) {
|
|
88
|
+
console.error(` ✗ No agent CLI found on your PATH.\n` +
|
|
89
|
+
` Install one of the following adapters:\n` +
|
|
90
|
+
` • copilot — https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli\n` +
|
|
91
|
+
` • claude — npm install -g @anthropic-ai/claude-code\n` +
|
|
92
|
+
` • cursor — https://cursor.com (Cursor > Install CLI)\n` +
|
|
93
|
+
` • opencode — https://opencode.ai\n` +
|
|
94
|
+
`\n` +
|
|
95
|
+
` Or specify an adapter explicitly: opencastle plan --adapter <name>`);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const hints = {
|
|
99
|
+
'claude': ' Install: npm install -g @anthropic-ai/claude-code\n' +
|
|
100
|
+
' Docs: https://docs.anthropic.com/en/docs/claude-code',
|
|
101
|
+
copilot: ' Requires the Copilot CLI installed and authenticated:\n' +
|
|
102
|
+
' https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli\n' +
|
|
103
|
+
' Docs: https://docs.github.com/en/copilot',
|
|
104
|
+
cursor: ' The Cursor agent CLI ships with the Cursor editor.\n' +
|
|
105
|
+
' Install Cursor from https://cursor.com and ensure the\n' +
|
|
106
|
+
' "agent" command is on your PATH (Cursor > Install CLI).',
|
|
107
|
+
opencode: ' Install OpenCode from https://opencode.ai\n' +
|
|
108
|
+
' Ensure the "opencode" command is on your PATH.',
|
|
109
|
+
};
|
|
110
|
+
const cliName = adapterName === 'cursor' ? 'agent' : adapterName;
|
|
111
|
+
const hint = hints[adapterName] ?? '';
|
|
112
|
+
console.error(` ✗ Adapter "${adapterName}" is not available.\n` +
|
|
113
|
+
` Make sure the "${cliName}" CLI is installed and on your PATH.\n` +
|
|
114
|
+
hint);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Strip YAML frontmatter (everything between first and second --- lines).
|
|
119
|
+
*/
|
|
120
|
+
function stripFrontmatter(text) {
|
|
121
|
+
const lines = text.split('\n');
|
|
122
|
+
if (lines[0]?.trim() !== '---')
|
|
123
|
+
return text;
|
|
124
|
+
const closingIdx = lines.findIndex((line, i) => i > 0 && line.trim() === '---');
|
|
125
|
+
if (closingIdx === -1)
|
|
126
|
+
return text;
|
|
127
|
+
return lines.slice(closingIdx + 1).join('\n').trimStart();
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Extract YAML content from a fenced code block (```yaml or ```yml).
|
|
131
|
+
*/
|
|
132
|
+
function extractYamlBlock(text) {
|
|
133
|
+
const match = text.match(/```ya?ml\s*\n([\s\S]*?)```/);
|
|
134
|
+
if (!match)
|
|
135
|
+
return null;
|
|
136
|
+
return match[1].trim();
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Derive an output filename from YAML content.
|
|
140
|
+
* Checks for a comment on the first line, then falls back to the `name` field.
|
|
141
|
+
*/
|
|
142
|
+
function deriveOutputFilename(yaml) {
|
|
143
|
+
// First line comment: # .opencastle/convoys/some-name.convoy.yml
|
|
144
|
+
const firstLine = yaml.split('\n')[0] ?? '';
|
|
145
|
+
const commentMatch = firstLine.match(/^#\s*(.+\.convoy\.ya?ml)\s*$/);
|
|
146
|
+
if (commentMatch) {
|
|
147
|
+
return basename(commentMatch[1]);
|
|
148
|
+
}
|
|
149
|
+
// Fall back to `name:` field
|
|
150
|
+
const nameMatch = yaml.match(/^name:\s*['"]?([^'"\n]+)['"]?\s*$/m);
|
|
151
|
+
if (nameMatch) {
|
|
152
|
+
const kebab = nameMatch[1].trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
153
|
+
if (kebab)
|
|
154
|
+
return `${kebab}.convoy.yml`;
|
|
155
|
+
}
|
|
156
|
+
return 'convoy-plan.convoy.yml';
|
|
157
|
+
}
|
|
158
|
+
export default async function plan({ args, pkgRoot }) {
|
|
159
|
+
const opts = parseArgs(args);
|
|
160
|
+
if (opts.help) {
|
|
161
|
+
console.log(HELP);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// ── Validate required --file arg ──────────────────────────────
|
|
165
|
+
if (!opts.file) {
|
|
166
|
+
console.error(` ✗ --file is required. Specify a text file with the task description.`);
|
|
167
|
+
console.log(HELP);
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
const filePath = resolve(process.cwd(), opts.file);
|
|
171
|
+
if (!existsSync(filePath)) {
|
|
172
|
+
console.error(` ✗ File not found: ${opts.file}`);
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
// ── Read task description ──────────────────────────────────────
|
|
176
|
+
const taskDescription = await readFile(filePath, 'utf8');
|
|
177
|
+
// ── Read optional context file ─────────────────────────────────
|
|
178
|
+
let contextContent = '';
|
|
179
|
+
if (opts.context) {
|
|
180
|
+
const contextPath = resolve(process.cwd(), opts.context);
|
|
181
|
+
if (!existsSync(contextPath)) {
|
|
182
|
+
console.error(` ✗ Context file not found: ${opts.context}`);
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
contextContent = await readFile(contextPath, 'utf8');
|
|
186
|
+
}
|
|
187
|
+
// ── Load and assemble the prompt template ─────────────────────
|
|
188
|
+
const promptTemplatePath = join(pkgRoot, 'src', 'orchestrator', 'prompts', 'generate-convoy.prompt.md');
|
|
189
|
+
if (!existsSync(promptTemplatePath)) {
|
|
190
|
+
console.error(` ✗ Prompt template not found: ${promptTemplatePath}`);
|
|
191
|
+
process.exit(1);
|
|
192
|
+
}
|
|
193
|
+
const rawTemplate = await readFile(promptTemplatePath, 'utf8');
|
|
194
|
+
const template = stripFrontmatter(rawTemplate);
|
|
195
|
+
const assembledPrompt = template
|
|
196
|
+
.replace('{{goal}}', taskDescription.trim())
|
|
197
|
+
.replace('{{context}}', contextContent.trim());
|
|
198
|
+
// ── Dry-run: print prompt and exit ────────────────────────────
|
|
199
|
+
if (opts.dryRun) {
|
|
200
|
+
console.log(c.bold(c.cyan(' Assembled prompt (dry-run):\n')));
|
|
201
|
+
console.log(assembledPrompt);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
// ── Resolve adapter ───────────────────────────────────────────
|
|
205
|
+
let adapterName;
|
|
206
|
+
if (opts.adapter) {
|
|
207
|
+
adapterName = opts.adapter;
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
const detected = await detectAdapter();
|
|
211
|
+
if (!detected) {
|
|
212
|
+
printAdapterError(true, '');
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
adapterName = detected;
|
|
216
|
+
}
|
|
217
|
+
let adapter;
|
|
218
|
+
try {
|
|
219
|
+
adapter = await getAdapter(adapterName);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
printAdapterError(false, adapterName);
|
|
223
|
+
process.exit(1);
|
|
224
|
+
}
|
|
225
|
+
const available = await adapter.isAvailable();
|
|
226
|
+
if (!available) {
|
|
227
|
+
printAdapterError(false, adapterName);
|
|
228
|
+
process.exit(1);
|
|
229
|
+
}
|
|
230
|
+
console.log(c.dim(` Using adapter: ${adapterName}`));
|
|
231
|
+
console.log(c.dim(` Generating convoy spec from: ${opts.file}\n`));
|
|
232
|
+
// ── Execute the prompt through the adapter ────────────────────
|
|
233
|
+
const task = {
|
|
234
|
+
id: 'generate-convoy',
|
|
235
|
+
prompt: assembledPrompt,
|
|
236
|
+
agent: 'team-lead',
|
|
237
|
+
timeout: '10m',
|
|
238
|
+
depends_on: [],
|
|
239
|
+
files: [],
|
|
240
|
+
description: 'Generate convoy spec from task description',
|
|
241
|
+
max_retries: 1,
|
|
242
|
+
};
|
|
243
|
+
const result = await adapter.execute(task, { verbose: opts.verbose });
|
|
244
|
+
// ── Extract YAML from the response ────────────────────────────
|
|
245
|
+
const yamlContent = extractYamlBlock(result.output);
|
|
246
|
+
if (!yamlContent) {
|
|
247
|
+
const preview = result.output.slice(0, 500);
|
|
248
|
+
console.error(` ✗ No YAML code block found in the agent response.\n`);
|
|
249
|
+
console.error(c.dim(` Raw output (truncated):\n${preview}`));
|
|
250
|
+
process.exit(1);
|
|
251
|
+
}
|
|
252
|
+
// ── Validate YAML ─────────────────────────────────────────────
|
|
253
|
+
let validationWarning = false;
|
|
254
|
+
try {
|
|
255
|
+
parseTaskSpecText(yamlContent);
|
|
256
|
+
}
|
|
257
|
+
catch (err) {
|
|
258
|
+
validationWarning = true;
|
|
259
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
260
|
+
console.warn(c.yellow(` ⚠ YAML validation warning: ${msg}`));
|
|
261
|
+
console.warn(c.dim(` The file will still be written — you may need to edit it before running.\n`));
|
|
262
|
+
}
|
|
263
|
+
// ── Determine output path ─────────────────────────────────────
|
|
264
|
+
let outputPath;
|
|
265
|
+
if (opts.output) {
|
|
266
|
+
outputPath = resolve(process.cwd(), opts.output);
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
const convoyDir = resolve(process.cwd(), '.opencastle', 'convoys');
|
|
270
|
+
await mkdir(convoyDir, { recursive: true });
|
|
271
|
+
const filename = deriveOutputFilename(yamlContent);
|
|
272
|
+
outputPath = join(convoyDir, filename);
|
|
273
|
+
}
|
|
274
|
+
await mkdir(resolve(outputPath, '..'), { recursive: true });
|
|
275
|
+
await writeFile(outputPath, yamlContent + '\n', 'utf8');
|
|
276
|
+
const relPath = outputPath.startsWith(process.cwd())
|
|
277
|
+
? outputPath.slice(process.cwd().length + 1)
|
|
278
|
+
: outputPath;
|
|
279
|
+
console.log(c.green(` ✓ Convoy spec written to ${relPath}`));
|
|
280
|
+
if (validationWarning) {
|
|
281
|
+
console.log(c.yellow(` (contains validation warnings — review before running)`));
|
|
282
|
+
}
|
|
283
|
+
console.log(`
|
|
284
|
+
${c.dim('Preview:')} npx opencastle run -f ${relPath} --dry-run
|
|
285
|
+
${c.dim('Execute:')} npx opencastle run -f ${relPath}
|
|
286
|
+
`);
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/cli/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { Task, ExecuteOptions, ExecuteResult } from '../../types.js';
|
|
2
2
|
export declare const name = "claude";
|
|
3
|
+
export declare function supportsSessionContinuity(): boolean;
|
|
3
4
|
export declare function isAvailable(): Promise<boolean>;
|
|
5
|
+
export declare function executeViaCli(task: Task, options?: ExecuteOptions): Promise<ExecuteResult>;
|
|
4
6
|
export declare function execute(task: Task, options?: ExecuteOptions): Promise<ExecuteResult>;
|
|
5
7
|
export declare function kill(task: Task): void;
|
|
6
8
|
//# sourceMappingURL=claude.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../../src/cli/run/adapters/claude.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../../src/cli/run/adapters/claude.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAc,MAAM,gBAAgB,CAAA;AAGrF,eAAO,MAAM,IAAI,WAAW,CAAA;AAE5B,wBAAgB,yBAAyB,IAAI,OAAO,CAAiB;AAuBrE,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAUpD;AA4HD,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAwFpG;AAcD,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAI9F;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAGrC"}
|