@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.
@@ -81,7 +81,7 @@ services:
81
81
  condition: service_healthy
82
82
  worker:
83
83
  condition: service_healthy
84
- image: outputai/api:${OUTPUT_API_VERSION:-0.1.0}
84
+ image: outputai/api:${OUTPUT_API_VERSION:-0.1.1}
85
85
  init: true
86
86
  networks:
87
87
  - main
@@ -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;
@@ -1,3 +1,3 @@
1
1
  {
2
- "framework": "0.1.0"
2
+ "framework": "0.1.1"
3
3
  }
@@ -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-claude-plugins';
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-claude-plugins'], projectRoot, { ignoreFailure: true });
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-claude-plugins'
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-claude-plugins'], '/test/project', { ignoreFailure: true });
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-claude-plugins' }
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 };
@@ -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() });
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  provider: anthropic
3
- model: claude-sonnet-4-20250514
3
+ model: claude-haiku-4-5
4
4
  temperature: 0.3
5
5
  ---
6
6
 
@@ -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-claude-plugins
10
+ claude plugin marketplace add growthxai/output
11
11
  claude plugin install outputai@outputai --scope project
12
12
  ```
13
13
 
@@ -16,7 +16,7 @@
16
16
  "team-tools": {
17
17
  "source": {
18
18
  "source": "github",
19
- "repo": "growthxai/output-claude-plugins"
19
+ "repo": "growthxai/output"
20
20
  }
21
21
  }
22
22
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@outputai/cli",
3
- "version": "0.1.1-dev.0",
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.1004.0",
18
+ "@aws-sdk/client-s3": "3.1011.0",
19
19
  "@hackylabs/deep-redact": "3.0.5",
20
- "@inquirer/prompts": "8.3.0",
21
- "@oclif/core": "4.8.3",
22
- "@oclif/plugin-help": "6.2.37",
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.4",
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/evals": "0.1.1-dev.0",
37
- "@outputai/llm": "0.1.1-dev.0",
38
- "@outputai/credentials": "0.1.1-dev.0"
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",