@outputai/cli 0.1.1-dev.0 â 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/docker/docker-compose-dev.yml +1 -1
- package/dist/commands/dev/index.d.ts +1 -0
- package/dist/commands/dev/index.js +13 -2
- package/dist/generated/framework_version.json +1 -1
- package/dist/services/coding_agents.js +2 -2
- package/dist/services/coding_agents.spec.js +3 -3
- package/dist/services/docker.d.ts +1 -0
- package/dist/services/docker.js +12 -0
- package/dist/services/generate_plan_name@v1.prompt +1 -1
- package/dist/templates/agent_instructions/CLAUDE.md.template +1 -1
- package/dist/templates/agent_instructions/dotclaude/settings.json.template +1 -1
- package/package.json +9 -9
|
@@ -6,6 +6,7 @@ export default class Dev extends Command {
|
|
|
6
6
|
static flags: {
|
|
7
7
|
'compose-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
'image-pull-policy': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
detached: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
10
|
};
|
|
10
11
|
private dockerProcess;
|
|
11
12
|
run(): Promise<void>;
|
|
@@ -2,7 +2,7 @@ import { Command, Flags } from '@oclif/core';
|
|
|
2
2
|
import fs from 'node:fs/promises';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import logUpdate from 'log-update';
|
|
5
|
-
import { validateDockerEnvironment, startDockerCompose, stopDockerCompose, getServiceStatus, DockerComposeConfigNotFoundError, getDefaultDockerComposePath, SERVICE_HEALTH, SERVICE_STATE } from '#services/docker.js';
|
|
5
|
+
import { validateDockerEnvironment, startDockerCompose, startDockerComposeDetached, stopDockerCompose, getServiceStatus, DockerComposeConfigNotFoundError, getDefaultDockerComposePath, SERVICE_HEALTH, SERVICE_STATE } from '#services/docker.js';
|
|
6
6
|
import { getErrorMessage } from '#utils/error_utils.js';
|
|
7
7
|
import { getDevSuccessMessage } from '#services/messages.js';
|
|
8
8
|
import { ensureClaudePlugin } from '#services/coding_agents.js';
|
|
@@ -87,6 +87,11 @@ export default class Dev extends Command {
|
|
|
87
87
|
description: 'Image pull policy for docker compose (always, missing, never)',
|
|
88
88
|
options: ['always', 'missing', 'never'],
|
|
89
89
|
default: 'always'
|
|
90
|
+
}),
|
|
91
|
+
detached: Flags.boolean({
|
|
92
|
+
description: 'Start services in detached (background) mode and exit immediately',
|
|
93
|
+
default: false,
|
|
94
|
+
char: 'd'
|
|
90
95
|
})
|
|
91
96
|
};
|
|
92
97
|
dockerProcess = null;
|
|
@@ -108,6 +113,13 @@ export default class Dev extends Command {
|
|
|
108
113
|
if (flags['compose-file']) {
|
|
109
114
|
this.log(`Using custom docker-compose file: ${flags['compose-file']}\n`);
|
|
110
115
|
}
|
|
116
|
+
const pullPolicy = flags['image-pull-policy'];
|
|
117
|
+
if (flags.detached) {
|
|
118
|
+
this.log('đŗ Starting services in detached mode...\n');
|
|
119
|
+
startDockerComposeDetached(dockerComposePath, pullPolicy);
|
|
120
|
+
this.log('â
Services started. Run `output dev` without --detached to monitor status.\n');
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
111
123
|
this.log('File watching enabled - worker will restart automatically on changes\n');
|
|
112
124
|
const cleanup = async () => {
|
|
113
125
|
this.log('\n');
|
|
@@ -119,7 +131,6 @@ export default class Dev extends Command {
|
|
|
119
131
|
};
|
|
120
132
|
process.on('SIGINT', cleanup);
|
|
121
133
|
process.on('SIGTERM', cleanup);
|
|
122
|
-
const pullPolicy = flags['image-pull-policy'];
|
|
123
134
|
try {
|
|
124
135
|
const { process: dockerProc, waitForHealthy } = await startDockerCompose(dockerComposePath, pullPolicy);
|
|
125
136
|
this.dockerProcess = dockerProc;
|
|
@@ -14,7 +14,7 @@ import { executeClaudeCommand } from '#utils/claude.js';
|
|
|
14
14
|
import { processTemplate } from '#utils/template.js';
|
|
15
15
|
import { ClaudePluginError, UserCancelledError } from '#types/errors.js';
|
|
16
16
|
const debug = debugFactory('output-cli:agent');
|
|
17
|
-
const EXPECTED_MARKETPLACE_REPO = 'growthxai/output
|
|
17
|
+
const EXPECTED_MARKETPLACE_REPO = 'growthxai/output';
|
|
18
18
|
function createLogger(silent) {
|
|
19
19
|
return silent ? debug : (msg) => ux.stdout(ux.colorize('gray', msg));
|
|
20
20
|
}
|
|
@@ -169,7 +169,7 @@ async function registerPluginMarketplace(projectRoot, silent = false) {
|
|
|
169
169
|
const log = createLogger(silent);
|
|
170
170
|
log('Registering plugin marketplace...');
|
|
171
171
|
try {
|
|
172
|
-
await executeClaudeCommand(['plugin', 'marketplace', 'add', 'growthxai/output
|
|
172
|
+
await executeClaudeCommand(['plugin', 'marketplace', 'add', 'growthxai/output'], projectRoot, { ignoreFailure: true });
|
|
173
173
|
}
|
|
174
174
|
catch (error) {
|
|
175
175
|
await handlePluginError(error, 'plugin marketplace add', silent);
|
|
@@ -43,7 +43,7 @@ describe('coding_agents service', () => {
|
|
|
43
43
|
'team-tools': {
|
|
44
44
|
source: {
|
|
45
45
|
source: 'github',
|
|
46
|
-
repo: 'growthxai/output
|
|
46
|
+
repo: 'growthxai/output'
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
},
|
|
@@ -151,7 +151,7 @@ describe('coding_agents service', () => {
|
|
|
151
151
|
it('should call registerPluginMarketplace and installOutputAIPlugin', async () => {
|
|
152
152
|
const { executeClaudeCommand } = await import('../utils/claude.js');
|
|
153
153
|
await ensureClaudePlugin('/test/project');
|
|
154
|
-
expect(executeClaudeCommand).toHaveBeenCalledWith(['plugin', 'marketplace', 'add', 'growthxai/output
|
|
154
|
+
expect(executeClaudeCommand).toHaveBeenCalledWith(['plugin', 'marketplace', 'add', 'growthxai/output'], '/test/project', { ignoreFailure: true });
|
|
155
155
|
expect(executeClaudeCommand).toHaveBeenCalledWith(['plugin', 'marketplace', 'update', 'outputai'], '/test/project');
|
|
156
156
|
expect(executeClaudeCommand).toHaveBeenCalledWith(['plugin', 'install', 'outputai@outputai', '--scope', 'project'], '/test/project');
|
|
157
157
|
});
|
|
@@ -188,7 +188,7 @@ describe('coding_agents service', () => {
|
|
|
188
188
|
vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify({
|
|
189
189
|
extraKnownMarketplaces: {
|
|
190
190
|
'team-tools': {
|
|
191
|
-
source: { source: 'github', repo: 'growthxai/output
|
|
191
|
+
source: { source: 'github', repo: 'growthxai/output' }
|
|
192
192
|
}
|
|
193
193
|
},
|
|
194
194
|
enabledPlugins: { 'outputai@outputai': true }
|
|
@@ -34,5 +34,6 @@ export interface DockerComposeProcess {
|
|
|
34
34
|
}
|
|
35
35
|
export type PullPolicy = 'always' | 'missing' | 'never';
|
|
36
36
|
export declare function startDockerCompose(dockerComposePath: string, pullPolicy?: PullPolicy): Promise<DockerComposeProcess>;
|
|
37
|
+
export declare function startDockerComposeDetached(dockerComposePath: string, pullPolicy?: PullPolicy): void;
|
|
37
38
|
export declare function stopDockerCompose(dockerComposePath: string): Promise<void>;
|
|
38
39
|
export { isDockerInstalled, isDockerComposeAvailable, isDockerDaemonRunning, DockerValidationError };
|
package/dist/services/docker.js
CHANGED
|
@@ -141,6 +141,18 @@ export async function startDockerCompose(dockerComposePath, pullPolicy) {
|
|
|
141
141
|
waitForHealthy: () => waitForServicesHealthy(dockerComposePath)
|
|
142
142
|
};
|
|
143
143
|
}
|
|
144
|
+
export function startDockerComposeDetached(dockerComposePath, pullPolicy) {
|
|
145
|
+
const args = [
|
|
146
|
+
'compose',
|
|
147
|
+
'-f', dockerComposePath,
|
|
148
|
+
'--project-directory', process.cwd(),
|
|
149
|
+
'up', '-d'
|
|
150
|
+
];
|
|
151
|
+
if (pullPolicy) {
|
|
152
|
+
args.push('--pull', pullPolicy);
|
|
153
|
+
}
|
|
154
|
+
execFileSync('docker', args, { stdio: 'inherit', cwd: process.cwd() });
|
|
155
|
+
}
|
|
144
156
|
export async function stopDockerCompose(dockerComposePath) {
|
|
145
157
|
ux.stdout('âšī¸ Stopping services...\n');
|
|
146
158
|
execFileSync('docker', ['compose', '-f', dockerComposePath, 'down'], { stdio: 'inherit', cwd: process.cwd() });
|
|
@@ -7,7 +7,7 @@ This is an **Output.ai** project - a framework for building reliable, production
|
|
|
7
7
|
For full framework documentation, commands, and AI-assisted workflow development, install our Claude Code plugins:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
claude plugin marketplace add growthxai/output
|
|
10
|
+
claude plugin marketplace add growthxai/output
|
|
11
11
|
claude plugin install outputai@outputai --scope project
|
|
12
12
|
```
|
|
13
13
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@outputai/cli",
|
|
3
|
-
"version": "0.1.1
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "CLI for Output.ai workflow generation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@anthropic-ai/claude-agent-sdk": "0.1.71",
|
|
18
|
-
"@aws-sdk/client-s3": "3.
|
|
18
|
+
"@aws-sdk/client-s3": "3.1011.0",
|
|
19
19
|
"@hackylabs/deep-redact": "3.0.5",
|
|
20
|
-
"@inquirer/prompts": "8.3.
|
|
21
|
-
"@oclif/core": "4.
|
|
22
|
-
"@oclif/plugin-help": "6.2.
|
|
20
|
+
"@inquirer/prompts": "8.3.2",
|
|
21
|
+
"@oclif/core": "4.9.0",
|
|
22
|
+
"@oclif/plugin-help": "6.2.38",
|
|
23
23
|
"change-case": "5.4.4",
|
|
24
24
|
"cli-progress": "3.12.0",
|
|
25
25
|
"cli-table3": "0.6.5",
|
|
@@ -28,14 +28,14 @@
|
|
|
28
28
|
"dotenv": "17.3.1",
|
|
29
29
|
"handlebars": "4.7.8",
|
|
30
30
|
"js-yaml": "4.1.1",
|
|
31
|
-
"json-schema-library": "11.0.
|
|
31
|
+
"json-schema-library": "11.0.5",
|
|
32
32
|
"ky": "1.14.3",
|
|
33
33
|
"log-update": "7.2.0",
|
|
34
34
|
"semver": "7.7.4",
|
|
35
35
|
"yaml": "^2.7.1",
|
|
36
|
-
"@outputai/
|
|
37
|
-
"@outputai/llm": "0.1.1
|
|
38
|
-
"@outputai/
|
|
36
|
+
"@outputai/credentials": "0.1.1",
|
|
37
|
+
"@outputai/llm": "0.1.1",
|
|
38
|
+
"@outputai/evals": "0.1.1"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@types/cli-progress": "3.11.6",
|