@studio-foundation/cli 0.3.0-beta.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/ARCHITECTURE.md +40 -0
- package/LICENSE +663 -0
- package/README.md +165 -0
- package/dist/commands/api.d.ts +16 -0
- package/dist/commands/api.d.ts.map +1 -0
- package/dist/commands/api.js +118 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/config.d.ts +32 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +390 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +93 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +728 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +2 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +22 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/integrations.d.ts +14 -0
- package/dist/commands/integrations.d.ts.map +1 -0
- package/dist/commands/integrations.js +282 -0
- package/dist/commands/integrations.js.map +1 -0
- package/dist/commands/list.d.ts +9 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +161 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/logs.d.ts +7 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +98 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/ollama.d.ts +6 -0
- package/dist/commands/ollama.d.ts.map +1 -0
- package/dist/commands/ollama.js +161 -0
- package/dist/commands/ollama.js.map +1 -0
- package/dist/commands/project.d.ts +38 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +137 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/registry/audit.d.ts +13 -0
- package/dist/commands/registry/audit.d.ts.map +1 -0
- package/dist/commands/registry/audit.js +65 -0
- package/dist/commands/registry/audit.js.map +1 -0
- package/dist/commands/registry/index.d.ts +3 -0
- package/dist/commands/registry/index.d.ts.map +1 -0
- package/dist/commands/registry/index.js +53 -0
- package/dist/commands/registry/index.js.map +1 -0
- package/dist/commands/registry/install.d.ts +17 -0
- package/dist/commands/registry/install.d.ts.map +1 -0
- package/dist/commands/registry/install.js +153 -0
- package/dist/commands/registry/install.js.map +1 -0
- package/dist/commands/registry/publish.d.ts +8 -0
- package/dist/commands/registry/publish.d.ts.map +1 -0
- package/dist/commands/registry/publish.js +94 -0
- package/dist/commands/registry/publish.js.map +1 -0
- package/dist/commands/registry/remove.d.ts +8 -0
- package/dist/commands/registry/remove.d.ts.map +1 -0
- package/dist/commands/registry/remove.js +82 -0
- package/dist/commands/registry/remove.js.map +1 -0
- package/dist/commands/registry/search.d.ts +9 -0
- package/dist/commands/registry/search.d.ts.map +1 -0
- package/dist/commands/registry/search.js +68 -0
- package/dist/commands/registry/search.js.map +1 -0
- package/dist/commands/registry/sync.d.ts +8 -0
- package/dist/commands/registry/sync.d.ts.map +1 -0
- package/dist/commands/registry/sync.js +19 -0
- package/dist/commands/registry/sync.js.map +1 -0
- package/dist/commands/registry/update.d.ts +15 -0
- package/dist/commands/registry/update.d.ts.map +1 -0
- package/dist/commands/registry/update.js +48 -0
- package/dist/commands/registry/update.js.map +1 -0
- package/dist/commands/replay.d.ts +36 -0
- package/dist/commands/replay.d.ts.map +1 -0
- package/dist/commands/replay.js +453 -0
- package/dist/commands/replay.js.map +1 -0
- package/dist/commands/run.d.ts +18 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +406 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +144 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/template/index.d.ts +2 -0
- package/dist/commands/template/index.d.ts.map +1 -0
- package/dist/commands/template/index.js +57 -0
- package/dist/commands/template/index.js.map +1 -0
- package/dist/commands/template/validate.d.ts +8 -0
- package/dist/commands/template/validate.d.ts.map +1 -0
- package/dist/commands/template/validate.js +135 -0
- package/dist/commands/template/validate.js.map +1 -0
- package/dist/commands/templates.d.ts +14 -0
- package/dist/commands/templates.d.ts.map +1 -0
- package/dist/commands/templates.js +86 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/commands/tools.d.ts +12 -0
- package/dist/commands/tools.d.ts.map +1 -0
- package/dist/commands/tools.js +200 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/users.d.ts +4 -0
- package/dist/commands/users.d.ts.map +1 -0
- package/dist/commands/users.js +123 -0
- package/dist/commands/users.js.map +1 -0
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +39 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +64 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +178 -0
- package/dist/index.js.map +1 -0
- package/dist/models-cache.d.ts +13 -0
- package/dist/models-cache.d.ts.map +1 -0
- package/dist/models-cache.js +106 -0
- package/dist/models-cache.js.map +1 -0
- package/dist/output/file-changes.d.ts +15 -0
- package/dist/output/file-changes.d.ts.map +1 -0
- package/dist/output/file-changes.js +77 -0
- package/dist/output/file-changes.js.map +1 -0
- package/dist/output/formatter.d.ts +6 -0
- package/dist/output/formatter.d.ts.map +1 -0
- package/dist/output/formatter.js +70 -0
- package/dist/output/formatter.js.map +1 -0
- package/dist/output/formatters.d.ts +42 -0
- package/dist/output/formatters.d.ts.map +1 -0
- package/dist/output/formatters.js +280 -0
- package/dist/output/formatters.js.map +1 -0
- package/dist/output/logger.d.ts +3 -0
- package/dist/output/logger.d.ts.map +1 -0
- package/dist/output/logger.js +15 -0
- package/dist/output/logger.js.map +1 -0
- package/dist/output/parallel-progress.d.ts +33 -0
- package/dist/output/parallel-progress.d.ts.map +1 -0
- package/dist/output/parallel-progress.js +85 -0
- package/dist/output/parallel-progress.js.map +1 -0
- package/dist/output/progress.d.ts +32 -0
- package/dist/output/progress.d.ts.map +1 -0
- package/dist/output/progress.js +393 -0
- package/dist/output/progress.js.map +1 -0
- package/dist/provider-validator.d.ts +15 -0
- package/dist/provider-validator.d.ts.map +1 -0
- package/dist/provider-validator.js +85 -0
- package/dist/provider-validator.js.map +1 -0
- package/dist/registry/cache.d.ts +10 -0
- package/dist/registry/cache.d.ts.map +1 -0
- package/dist/registry/cache.js +36 -0
- package/dist/registry/cache.js.map +1 -0
- package/dist/registry/client.d.ts +19 -0
- package/dist/registry/client.d.ts.map +1 -0
- package/dist/registry/client.js +63 -0
- package/dist/registry/client.js.map +1 -0
- package/dist/registry/lockfile.d.ts +17 -0
- package/dist/registry/lockfile.d.ts.map +1 -0
- package/dist/registry/lockfile.js +61 -0
- package/dist/registry/lockfile.js.map +1 -0
- package/dist/registry/resolver.d.ts +13 -0
- package/dist/registry/resolver.d.ts.map +1 -0
- package/dist/registry/resolver.js +79 -0
- package/dist/registry/resolver.js.map +1 -0
- package/dist/registry/types.d.ts +59 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +14 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/run-logger.d.ts +8 -0
- package/dist/run-logger.d.ts.map +1 -0
- package/dist/run-logger.js +53 -0
- package/dist/run-logger.js.map +1 -0
- package/dist/run-store-factory.d.ts +9 -0
- package/dist/run-store-factory.d.ts.map +1 -0
- package/dist/run-store-factory.js +26 -0
- package/dist/run-store-factory.js.map +1 -0
- package/dist/studio-dir.d.ts +7 -0
- package/dist/studio-dir.d.ts.map +1 -0
- package/dist/studio-dir.js +27 -0
- package/dist/studio-dir.js.map +1 -0
- package/dist/utils/input-wizard.d.ts +4 -0
- package/dist/utils/input-wizard.d.ts.map +1 -0
- package/dist/utils/input-wizard.js +56 -0
- package/dist/utils/input-wizard.js.map +1 -0
- package/dist/utils/placeholders.d.ts +6 -0
- package/dist/utils/placeholders.d.ts.map +1 -0
- package/dist/utils/placeholders.js +12 -0
- package/dist/utils/placeholders.js.map +1 -0
- package/package.json +43 -0
- package/src/commands/api.ts +126 -0
- package/src/commands/config.ts +433 -0
- package/src/commands/init.ts +879 -0
- package/src/commands/install.ts +23 -0
- package/src/commands/integrations.ts +332 -0
- package/src/commands/list.ts +197 -0
- package/src/commands/logs.ts +119 -0
- package/src/commands/ollama.ts +168 -0
- package/src/commands/project.ts +167 -0
- package/src/commands/registry/audit.ts +87 -0
- package/src/commands/registry/index.ts +63 -0
- package/src/commands/registry/install.ts +222 -0
- package/src/commands/registry/publish.ts +112 -0
- package/src/commands/registry/remove.ts +89 -0
- package/src/commands/registry/search.ts +93 -0
- package/src/commands/registry/sync.ts +24 -0
- package/src/commands/registry/update.ts +63 -0
- package/src/commands/replay.ts +559 -0
- package/src/commands/run.ts +454 -0
- package/src/commands/status.ts +163 -0
- package/src/commands/template/index.ts +59 -0
- package/src/commands/template/validate.ts +175 -0
- package/src/commands/templates.ts +99 -0
- package/src/commands/tools.ts +227 -0
- package/src/commands/users.ts +127 -0
- package/src/commands/validate.ts +46 -0
- package/src/config.ts +101 -0
- package/src/index.ts +201 -0
- package/src/models-cache.ts +127 -0
- package/src/output/file-changes.ts +97 -0
- package/src/output/formatter.ts +85 -0
- package/src/output/formatters.ts +303 -0
- package/src/output/logger.ts +18 -0
- package/src/output/parallel-progress.ts +103 -0
- package/src/output/progress.ts +414 -0
- package/src/provider-validator.ts +109 -0
- package/src/registry/cache.ts +46 -0
- package/src/registry/client.ts +84 -0
- package/src/registry/lockfile.ts +68 -0
- package/src/registry/resolver.ts +113 -0
- package/src/registry/types.ts +66 -0
- package/src/run-logger.ts +66 -0
- package/src/run-store-factory.ts +30 -0
- package/src/studio-dir.ts +28 -0
- package/src/utils/input-wizard.ts +73 -0
- package/src/utils/placeholders.ts +10 -0
- package/templates/.studiorc.yaml +16 -0
- package/templates/projects/blank/metadata.json +7 -0
- package/templates/studio-config.yaml +14 -0
- package/tests/__stubs__/studio-runner.ts +104 -0
- package/tests/commands/api.test.ts +110 -0
- package/tests/commands/config.test.ts +221 -0
- package/tests/commands/init.test.ts +919 -0
- package/tests/commands/install.test.ts +52 -0
- package/tests/commands/integrations.test.ts +158 -0
- package/tests/commands/ollama.test.ts +139 -0
- package/tests/commands/project.test.ts +179 -0
- package/tests/commands/registry/audit.test.ts +56 -0
- package/tests/commands/registry/install.test.ts +200 -0
- package/tests/commands/registry/publish.test.ts +56 -0
- package/tests/commands/registry/remove.test.ts +103 -0
- package/tests/commands/registry/search.test.ts +44 -0
- package/tests/commands/registry/sync.test.ts +37 -0
- package/tests/commands/registry/update.test.ts +62 -0
- package/tests/commands/replay.test.ts +283 -0
- package/tests/commands/template/validate.test.ts +150 -0
- package/tests/commands/templates.test.ts +42 -0
- package/tests/commands/tools.test.ts +106 -0
- package/tests/config.test.ts +142 -0
- package/tests/formatter.test.ts +158 -0
- package/tests/integration/sigint.test.ts +188 -0
- package/tests/models-cache.test.ts +250 -0
- package/tests/output/file-changes.test.ts +178 -0
- package/tests/output/formatters.test.ts +448 -0
- package/tests/output/progress-spinner.test.ts +232 -0
- package/tests/output/progress-timer.test.ts +230 -0
- package/tests/provider-validator.test.ts +182 -0
- package/tests/registry/cache.test.ts +66 -0
- package/tests/registry/client.test.ts +70 -0
- package/tests/registry/lockfile.test.ts +87 -0
- package/tests/registry/resolver.test.ts +122 -0
- package/tests/run-logger-events.test.ts +326 -0
- package/tests/run-logger.test.ts +64 -0
- package/tests/run-store-factory.test.ts +51 -0
- package/tests/studio-dir.test.ts +31 -0
- package/tests/utils/input-wizard.test.ts +153 -0
- package/tests/utils/placeholders.test.ts +36 -0
- package/tsconfig.json +24 -0
- package/vitest.config.ts +20 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/commands/users.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAOA,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAmCf"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import yaml from 'js-yaml';
|
|
5
|
+
import { validateSchema } from '@studio-foundation/engine';
|
|
6
|
+
export async function validateCommand(contractPath, outputPath) {
|
|
7
|
+
try {
|
|
8
|
+
// Load contract YAML
|
|
9
|
+
const contractRaw = await readFile(resolve(contractPath), 'utf-8');
|
|
10
|
+
const contract = yaml.load(contractRaw);
|
|
11
|
+
// Load output JSON
|
|
12
|
+
const outputRaw = await readFile(resolve(outputPath), 'utf-8');
|
|
13
|
+
const output = JSON.parse(outputRaw);
|
|
14
|
+
// Validate
|
|
15
|
+
const result = validateSchema(output, contract);
|
|
16
|
+
if (result.valid) {
|
|
17
|
+
console.log(chalk.green('✓ Valid'));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
console.log(chalk.red('✗ Invalid'));
|
|
21
|
+
console.log('');
|
|
22
|
+
for (const error of result.errors) {
|
|
23
|
+
console.log(chalk.red(` - ${error}`));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (result.warnings.length > 0) {
|
|
27
|
+
console.log('');
|
|
28
|
+
for (const warning of result.warnings) {
|
|
29
|
+
console.log(chalk.yellow(` ⚠ ${warning}`));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
process.exit(result.valid ? 0 : 1);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error('Error:', error instanceof Error ? error.message : error);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,YAAoB,EACpB,UAAkB;IAElB,IAAI,CAAC;QACH,qBAAqB;QACrB,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAmB,CAAC;QAE1D,mBAAmB;QACnB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE9C,WAAW;QACX,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEhD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface StudioConfig {
|
|
2
|
+
providers?: {
|
|
3
|
+
openai?: {
|
|
4
|
+
apiKey: string;
|
|
5
|
+
};
|
|
6
|
+
anthropic?: {
|
|
7
|
+
apiKey: string;
|
|
8
|
+
};
|
|
9
|
+
ollama?: {
|
|
10
|
+
baseUrl?: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
paths?: {
|
|
14
|
+
configs?: string;
|
|
15
|
+
projects_dir?: string;
|
|
16
|
+
pipelines?: string;
|
|
17
|
+
};
|
|
18
|
+
defaults?: {
|
|
19
|
+
provider?: string;
|
|
20
|
+
model?: string;
|
|
21
|
+
};
|
|
22
|
+
api?: {
|
|
23
|
+
key?: string;
|
|
24
|
+
port?: number;
|
|
25
|
+
};
|
|
26
|
+
integrations?: Record<string, Record<string, unknown>>;
|
|
27
|
+
db?: {
|
|
28
|
+
type?: 'sqlite' | 'postgres' | 'inmemory';
|
|
29
|
+
url?: string;
|
|
30
|
+
};
|
|
31
|
+
/** Resolved path to .studio/ dir — set at load time, not from YAML */
|
|
32
|
+
resolvedStudioDir?: string;
|
|
33
|
+
}
|
|
34
|
+
export declare function loadConfig(configPath?: string, cwd?: string): Promise<StudioConfig>;
|
|
35
|
+
export declare function resolveEnvVars(content: string): string;
|
|
36
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5B,SAAS,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/B,MAAM,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/B,CAAC;IACF,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,EAAE,CAAC,EAAE;QACH,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;QAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAID,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAgCzF;AA4BD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKtD"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { resolve, join } from 'node:path';
|
|
3
|
+
import yaml from 'js-yaml';
|
|
4
|
+
import { findStudioDir } from './studio-dir.js';
|
|
5
|
+
const LEGACY_CONFIG_NAMES = ['.studiorc.yaml', '.studiorc.yml'];
|
|
6
|
+
export async function loadConfig(configPath, cwd) {
|
|
7
|
+
const effectiveCwd = cwd ?? process.cwd();
|
|
8
|
+
if (configPath) {
|
|
9
|
+
return loadFromFile(resolve(configPath));
|
|
10
|
+
}
|
|
11
|
+
// 1. Try .studio/config.yaml (new standard)
|
|
12
|
+
const studioDir = await findStudioDir(effectiveCwd);
|
|
13
|
+
if (studioDir) {
|
|
14
|
+
const studioConfig = join(studioDir, 'config.yaml');
|
|
15
|
+
try {
|
|
16
|
+
const config = await loadFromFile(studioConfig);
|
|
17
|
+
config.resolvedStudioDir = studioDir;
|
|
18
|
+
return config;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// .studio/ exists but no config.yaml — still set studioDir for path resolution
|
|
22
|
+
return { resolvedStudioDir: studioDir };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// 2. Fallback: .studiorc.yaml / .studiorc.yml at cwd
|
|
26
|
+
for (const name of LEGACY_CONFIG_NAMES) {
|
|
27
|
+
const filePath = resolve(effectiveCwd, name);
|
|
28
|
+
try {
|
|
29
|
+
return await loadFromFile(filePath);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// try next
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return {};
|
|
36
|
+
}
|
|
37
|
+
async function loadFromFile(filePath) {
|
|
38
|
+
let raw;
|
|
39
|
+
try {
|
|
40
|
+
raw = await readFile(filePath, 'utf-8');
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
throw new Error(`Config file not found: ${filePath}`);
|
|
44
|
+
}
|
|
45
|
+
const resolved = resolveEnvVars(raw);
|
|
46
|
+
let parsed;
|
|
47
|
+
try {
|
|
48
|
+
parsed = yaml.load(resolved);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
throw new Error(`Failed to parse config ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
52
|
+
}
|
|
53
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
54
|
+
return {};
|
|
55
|
+
}
|
|
56
|
+
return parsed;
|
|
57
|
+
}
|
|
58
|
+
export function resolveEnvVars(content) {
|
|
59
|
+
return content.replace(/\$\{([^}]+)\}/g, (_match, varName) => {
|
|
60
|
+
const value = process.env[varName.trim()];
|
|
61
|
+
return value === undefined ? '' : value;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA8BhD,MAAM,mBAAmB,GAAG,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAmB,EAAE,GAAY;IAChE,MAAM,YAAY,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1C,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,4CAA4C;IAC5C,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;YAChD,MAAM,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACrC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,+EAA+E;YAC/E,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,OAAO,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC1C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAErC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,0BAA0B,QAAQ,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC1F,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,MAAsB,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAe,EAAE,EAAE;QACnE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import 'dotenv/config';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { runCommand } from './commands/run.js';
|
|
6
|
+
import { statusCommand } from './commands/status.js';
|
|
7
|
+
import { listCommand } from './commands/list.js';
|
|
8
|
+
import { logsCommand } from './commands/logs.js';
|
|
9
|
+
import { replayCommand, restartCommand } from './commands/replay.js';
|
|
10
|
+
import { validateCommand } from './commands/validate.js';
|
|
11
|
+
import { initCommand } from './commands/init.js';
|
|
12
|
+
import { configCommand } from './commands/config.js';
|
|
13
|
+
import { toolsCommand } from './commands/tools.js';
|
|
14
|
+
import { integrationsCommand } from './commands/integrations.js';
|
|
15
|
+
import { templatesCommand } from './commands/templates.js';
|
|
16
|
+
import { templateCommand } from './commands/template/index.js';
|
|
17
|
+
import { projectCommand } from './commands/project.js';
|
|
18
|
+
import { apiStartCommand, apiStopCommand, apiStatusCommand } from './commands/api.js';
|
|
19
|
+
import { installExtensionCommand } from './commands/install.js';
|
|
20
|
+
import { createRegistryCommand } from './commands/registry/index.js';
|
|
21
|
+
import { usersCommand } from './commands/users.js';
|
|
22
|
+
import { ollamaCommand } from './commands/ollama.js';
|
|
23
|
+
import { loadConfig } from './config.js';
|
|
24
|
+
const program = new Command();
|
|
25
|
+
program
|
|
26
|
+
.name('studio')
|
|
27
|
+
.description('Studio v7 — Agentic pipeline orchestrator')
|
|
28
|
+
.version('0.3.0');
|
|
29
|
+
program
|
|
30
|
+
.command('run <project/pipeline>')
|
|
31
|
+
.description('Run a pipeline (e.g. studio run cuisine/recipe-generator)')
|
|
32
|
+
.option('-i, --input <text>', 'Input description for the pipeline')
|
|
33
|
+
.option('-f, --input-file <path>', 'Path to YAML input file')
|
|
34
|
+
.option('-r, --repo <path>', 'Path to the target repository')
|
|
35
|
+
.option('--repo-url <url>', 'Git URL to clone as target repository')
|
|
36
|
+
.option('--config <path>', 'Path to .studiorc.yaml config file')
|
|
37
|
+
.option('--provider <name>', 'Override LLM provider for all stages (e.g. mock)')
|
|
38
|
+
.option('--json', 'Output results as JSON')
|
|
39
|
+
.option('--verbose', 'Show detailed execution logs')
|
|
40
|
+
.option('--live', 'Show live per-tool-call spinners during execution')
|
|
41
|
+
.option('--anonymize', 'Anonymize PII in inputs and outputs before sending to LLM')
|
|
42
|
+
.action(runCommand);
|
|
43
|
+
program
|
|
44
|
+
.command('status [run-id]')
|
|
45
|
+
.description('Show status of a pipeline run')
|
|
46
|
+
.option('--json', 'Output as JSON')
|
|
47
|
+
.action(statusCommand);
|
|
48
|
+
program
|
|
49
|
+
.command('logs <run-id>')
|
|
50
|
+
.description('Show log for a pipeline run (from .studio/runs/*.jsonl)')
|
|
51
|
+
.option('--raw', 'Output raw JSONL lines')
|
|
52
|
+
.option('--json', 'Output as pretty-printed JSON array')
|
|
53
|
+
.action(logsCommand);
|
|
54
|
+
program
|
|
55
|
+
.command('replay <run-id>')
|
|
56
|
+
.description('Replay a past pipeline run from JSONL logs, or re-execute from a specific stage')
|
|
57
|
+
.option('--verbose', 'Show complete outputs and tool call results')
|
|
58
|
+
.option('--restart', 'Re-execute pipeline from a specific stage (requires --stage)')
|
|
59
|
+
.option('--stage <index|name>', 'Stage index (0-based) or name to restart from (use with --restart)')
|
|
60
|
+
.option('--provider <name>', 'Override LLM provider (e.g. mock) — applies to resumed stages only')
|
|
61
|
+
.action((runId, options) => {
|
|
62
|
+
if (options.restart) {
|
|
63
|
+
if (!options.stage) {
|
|
64
|
+
console.error(chalk.red('Error: --restart requires --stage <index|name>'));
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
return restartCommand(runId, { stage: options.stage, verbose: options.verbose, provider: options.provider });
|
|
68
|
+
}
|
|
69
|
+
return replayCommand(runId, options);
|
|
70
|
+
});
|
|
71
|
+
program
|
|
72
|
+
.command('list <resource>')
|
|
73
|
+
.description('List projects, pipelines, agents, or runs')
|
|
74
|
+
.option('--status <status>', 'Filter runs by status')
|
|
75
|
+
.option('--limit <n>', 'Limit number of results', '10')
|
|
76
|
+
.option('--project <name>', 'Filter runs by project')
|
|
77
|
+
.option('--json', 'Output as JSON')
|
|
78
|
+
.action(listCommand);
|
|
79
|
+
program
|
|
80
|
+
.command('validate <contract> <output>')
|
|
81
|
+
.description('Validate an output against a contract')
|
|
82
|
+
.action(validateCommand);
|
|
83
|
+
program
|
|
84
|
+
.command('init [name]')
|
|
85
|
+
.description('Initialize a new Studio project in the current directory')
|
|
86
|
+
.option('--template <name>', 'Project template to use (e.g. software)')
|
|
87
|
+
.option('--project <name>', 'Project name (defaults to directory name or "default")')
|
|
88
|
+
.option('--provider <name>', 'LLM provider (anthropic, openai) — enables direct mode')
|
|
89
|
+
.option('--api-key <key>', 'API key for the provider')
|
|
90
|
+
.option('--force', 'Backup existing .studio/ and reinitialize')
|
|
91
|
+
.option('--yes', 'Skip confirmation prompts (for CI/CD)')
|
|
92
|
+
.option('--no-tools', 'Skip tool installation (direct mode only)')
|
|
93
|
+
.action(initCommand);
|
|
94
|
+
program
|
|
95
|
+
.command('config <action> [args...]')
|
|
96
|
+
.description('Manage Studio configuration (list, get, set, add-provider)')
|
|
97
|
+
.option('--api-key <key>', 'API key (used with: config set provider <name> --api-key <key>; config add-provider <name> --api-key <key>)')
|
|
98
|
+
.option('--set-default', 'Set as default provider (used with: config add-provider)')
|
|
99
|
+
.action(configCommand);
|
|
100
|
+
program
|
|
101
|
+
.command('tools <action> [args...]')
|
|
102
|
+
.description('Manage Studio tools (list, add, remove, info)')
|
|
103
|
+
.action(toolsCommand);
|
|
104
|
+
program
|
|
105
|
+
.command('integrations <action> [args...]')
|
|
106
|
+
.description('Manage Studio integrations (install, list, remove, test, set)')
|
|
107
|
+
.action((action, args) => {
|
|
108
|
+
void integrationsCommand(action, args, {});
|
|
109
|
+
});
|
|
110
|
+
program
|
|
111
|
+
.command('templates <action> [args...]')
|
|
112
|
+
.description('Manage Studio templates (list)')
|
|
113
|
+
.action(templatesCommand);
|
|
114
|
+
program
|
|
115
|
+
.command('template <action> [args...]')
|
|
116
|
+
.description('Template operations (validate)')
|
|
117
|
+
.action(templateCommand);
|
|
118
|
+
program
|
|
119
|
+
.command('project <action> [args...]')
|
|
120
|
+
.description('Manage Studio projects (add)')
|
|
121
|
+
.option('--template <name>', 'Template to use (blank, software, …)')
|
|
122
|
+
.option('--description <desc>', 'Project description')
|
|
123
|
+
.action(projectCommand);
|
|
124
|
+
program
|
|
125
|
+
.command('api <action>')
|
|
126
|
+
.description('Manage the Studio API server (start, stop, status)')
|
|
127
|
+
.option('--port <port>', 'Port to listen on (default: 3700)')
|
|
128
|
+
.option('--config <path>', 'Path to config file')
|
|
129
|
+
.action((action, options) => {
|
|
130
|
+
if (action === 'start') {
|
|
131
|
+
void apiStartCommand(options);
|
|
132
|
+
}
|
|
133
|
+
else if (action === 'stop') {
|
|
134
|
+
void apiStopCommand();
|
|
135
|
+
}
|
|
136
|
+
else if (action === 'status') {
|
|
137
|
+
void apiStatusCommand(options);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
console.error(`Unknown api action: ${action}. Use: studio api start|stop|status`);
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
program
|
|
145
|
+
.command('install <extension>')
|
|
146
|
+
.description('Install a Studio extension (api)')
|
|
147
|
+
.action((extension) => {
|
|
148
|
+
void installExtensionCommand(extension);
|
|
149
|
+
});
|
|
150
|
+
program.addCommand(createRegistryCommand());
|
|
151
|
+
const usersCmd = program.command('users').description('Manage users');
|
|
152
|
+
usersCmd
|
|
153
|
+
.command('list')
|
|
154
|
+
.description('List all users')
|
|
155
|
+
.action(() => { void usersCommand('list', [], {}); });
|
|
156
|
+
usersCmd
|
|
157
|
+
.command('add <email>')
|
|
158
|
+
.description('Create a new user')
|
|
159
|
+
.option('--plan <plan>', 'User plan (free|pro|unlimited)', 'free')
|
|
160
|
+
.action((email, opts) => { void usersCommand('add', [email], opts); });
|
|
161
|
+
usersCmd
|
|
162
|
+
.command('remove <email>')
|
|
163
|
+
.description('Remove a user')
|
|
164
|
+
.action((email) => { void usersCommand('remove', [email], {}); });
|
|
165
|
+
usersCmd
|
|
166
|
+
.command('info <email>')
|
|
167
|
+
.description("Show user details and today's usage")
|
|
168
|
+
.action((email) => { void usersCommand('info', [email], {}); });
|
|
169
|
+
program
|
|
170
|
+
.command('ollama <action> [model]')
|
|
171
|
+
.description('Manage local Ollama instance (start, stop, status, pull <model>)')
|
|
172
|
+
.action(async (action, model) => {
|
|
173
|
+
const config = await loadConfig();
|
|
174
|
+
const baseUrl = config.providers?.ollama?.baseUrl ?? 'http://localhost:11434';
|
|
175
|
+
void ollamaCommand(action, model, baseUrl);
|
|
176
|
+
});
|
|
177
|
+
program.parse();
|
|
178
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface RawModel {
|
|
2
|
+
id: string;
|
|
3
|
+
created?: number;
|
|
4
|
+
created_at?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function setCachedModels(provider: string, apiKey: string, models: string[]): void;
|
|
7
|
+
export declare function getCachedModels(provider: string, apiKey: string): string[] | null;
|
|
8
|
+
export declare function filterModels(provider: string, models: RawModel[]): string[];
|
|
9
|
+
export declare function sortModels(modelIds: string[], rawModels: RawModel[]): string[];
|
|
10
|
+
export declare function parseAndCacheModels(provider: string, apiKey: string, json: unknown): void;
|
|
11
|
+
export declare function getAvailableModels(provider: string, apiKey: string): Promise<string[]>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=models-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models-cache.d.ts","sourceRoot":"","sources":["../src/models-cache.ts"],"names":[],"mappings":"AAEA,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAaD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAExF;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CASjF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,CAsB3E;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,CAe9E;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CASzF;AAsCD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAI5F"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24h
|
|
2
|
+
const cache = new Map();
|
|
3
|
+
function cacheKey(provider, apiKey) {
|
|
4
|
+
return `${provider}:${apiKey.slice(0, 8)}`;
|
|
5
|
+
}
|
|
6
|
+
export function setCachedModels(provider, apiKey, models) {
|
|
7
|
+
cache.set(cacheKey(provider, apiKey), { models, fetchedAt: Date.now() });
|
|
8
|
+
}
|
|
9
|
+
export function getCachedModels(provider, apiKey) {
|
|
10
|
+
const key = cacheKey(provider, apiKey);
|
|
11
|
+
const entry = cache.get(key);
|
|
12
|
+
if (!entry)
|
|
13
|
+
return null;
|
|
14
|
+
if (Date.now() - entry.fetchedAt > CACHE_TTL_MS) {
|
|
15
|
+
cache.delete(key);
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return entry.models;
|
|
19
|
+
}
|
|
20
|
+
export function filterModels(provider, models) {
|
|
21
|
+
if (provider === 'anthropic') {
|
|
22
|
+
return models
|
|
23
|
+
.filter((m) => m.id.startsWith('claude-') &&
|
|
24
|
+
!m.id.startsWith('claude-instant') &&
|
|
25
|
+
!m.id.startsWith('claude-2'))
|
|
26
|
+
.map((m) => m.id);
|
|
27
|
+
}
|
|
28
|
+
if (provider === 'openai') {
|
|
29
|
+
return models
|
|
30
|
+
.filter((m) => m.id.startsWith('gpt-4') ||
|
|
31
|
+
m.id.startsWith('o1') ||
|
|
32
|
+
m.id.startsWith('o3'))
|
|
33
|
+
.map((m) => m.id);
|
|
34
|
+
}
|
|
35
|
+
return models.map((m) => m.id);
|
|
36
|
+
}
|
|
37
|
+
export function sortModels(modelIds, rawModels) {
|
|
38
|
+
const tsMap = new Map();
|
|
39
|
+
for (const m of rawModels) {
|
|
40
|
+
if (m.created !== undefined) {
|
|
41
|
+
tsMap.set(m.id, m.created);
|
|
42
|
+
}
|
|
43
|
+
else if (m.created_at) {
|
|
44
|
+
tsMap.set(m.id, new Date(m.created_at).getTime());
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return [...modelIds].sort((a, b) => {
|
|
48
|
+
const ta = tsMap.get(a) ?? 0;
|
|
49
|
+
const tb = tsMap.get(b) ?? 0;
|
|
50
|
+
if (ta !== tb)
|
|
51
|
+
return tb - ta;
|
|
52
|
+
return b.localeCompare(a);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
export function parseAndCacheModels(provider, apiKey, json) {
|
|
56
|
+
try {
|
|
57
|
+
const data = (json.data ?? []);
|
|
58
|
+
const filtered = filterModels(provider, data);
|
|
59
|
+
const sorted = sortModels(filtered, data);
|
|
60
|
+
setCachedModels(provider, apiKey, sorted);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// ignore malformed responses
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const SUPPORTED_PROVIDERS = new Set(['anthropic', 'openai']);
|
|
67
|
+
async function fetchModelsFromProvider(provider, apiKey) {
|
|
68
|
+
if (!SUPPORTED_PROVIDERS.has(provider))
|
|
69
|
+
return [];
|
|
70
|
+
const abort = new AbortController();
|
|
71
|
+
const timer = setTimeout(() => abort.abort(), 5000);
|
|
72
|
+
try {
|
|
73
|
+
let url;
|
|
74
|
+
let headers;
|
|
75
|
+
if (provider === 'anthropic') {
|
|
76
|
+
url = 'https://api.anthropic.com/v1/models';
|
|
77
|
+
headers = { 'x-api-key': apiKey, 'anthropic-version': '2023-06-01' };
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
url = 'https://api.openai.com/v1/models';
|
|
81
|
+
headers = { Authorization: `Bearer ${apiKey}` };
|
|
82
|
+
}
|
|
83
|
+
const res = await fetch(url, { signal: abort.signal, headers });
|
|
84
|
+
if (!res.ok)
|
|
85
|
+
return [];
|
|
86
|
+
const json = await res.json();
|
|
87
|
+
const data = (json.data ?? []);
|
|
88
|
+
const filtered = filterModels(provider, data);
|
|
89
|
+
const sorted = sortModels(filtered, data);
|
|
90
|
+
setCachedModels(provider, apiKey, sorted);
|
|
91
|
+
return sorted;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
clearTimeout(timer);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export async function getAvailableModels(provider, apiKey) {
|
|
101
|
+
const cached = getCachedModels(provider, apiKey);
|
|
102
|
+
if (cached !== null)
|
|
103
|
+
return cached;
|
|
104
|
+
return fetchModelsFromProvider(provider, apiKey);
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=models-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models-cache.js","sourceRoot":"","sources":["../src/models-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ToolCallCompleteEvent } from '@studio-foundation/contracts';
|
|
2
|
+
export interface FileChange {
|
|
3
|
+
path: string;
|
|
4
|
+
status: 'M' | 'A';
|
|
5
|
+
added: number;
|
|
6
|
+
removed: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class FileChangeCollector {
|
|
9
|
+
private paths;
|
|
10
|
+
onToolCallComplete(event: ToolCallCompleteEvent): void;
|
|
11
|
+
getWrittenPaths(): string[];
|
|
12
|
+
computeSummary(repoPath: string): FileChange[] | null;
|
|
13
|
+
}
|
|
14
|
+
export declare function formatFileChanges(changes: FileChange[]): string;
|
|
15
|
+
//# sourceMappingURL=file-changes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-changes.d.ts","sourceRoot":"","sources":["../../src/output/file-changes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAqB;IAElC,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAUtD,eAAe,IAAI,MAAM,EAAE;IAI3B,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI;CAgDtD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAiB/D"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
export class FileChangeCollector {
|
|
5
|
+
paths = new Set();
|
|
6
|
+
onToolCallComplete(event) {
|
|
7
|
+
if (event.tool !== 'repo_manager-write_file')
|
|
8
|
+
return;
|
|
9
|
+
if (event.error)
|
|
10
|
+
return;
|
|
11
|
+
const result = event.result;
|
|
12
|
+
if (result?.path) {
|
|
13
|
+
this.paths.add(result.path);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
getWrittenPaths() {
|
|
17
|
+
return [...this.paths];
|
|
18
|
+
}
|
|
19
|
+
computeSummary(repoPath) {
|
|
20
|
+
const written = this.getWrittenPaths();
|
|
21
|
+
if (written.length === 0)
|
|
22
|
+
return null;
|
|
23
|
+
try {
|
|
24
|
+
const diffOutput = execSync(`git diff --numstat -- ${written.map((p) => JSON.stringify(p)).join(' ')}`, { cwd: repoPath, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
25
|
+
const diffMap = new Map();
|
|
26
|
+
if (diffOutput) {
|
|
27
|
+
for (const line of diffOutput.split('\n')) {
|
|
28
|
+
const [addedStr, removedStr, ...pathParts] = line.split('\t');
|
|
29
|
+
const filePath = pathParts.join('\t');
|
|
30
|
+
diffMap.set(filePath, {
|
|
31
|
+
added: parseInt(addedStr, 10) || 0,
|
|
32
|
+
removed: parseInt(removedStr, 10) || 0,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const changes = [];
|
|
37
|
+
for (const filePath of written) {
|
|
38
|
+
const diff = diffMap.get(filePath);
|
|
39
|
+
if (diff) {
|
|
40
|
+
changes.push({ path: filePath, status: 'M', added: diff.added, removed: diff.removed });
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
let lineCount = 0;
|
|
44
|
+
try {
|
|
45
|
+
const wcOutput = execSync(`wc -l < ${JSON.stringify(join(repoPath, filePath))}`, { cwd: repoPath, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
46
|
+
lineCount = parseInt(wcOutput, 10) || 0;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// File might have been deleted or moved — skip line count
|
|
50
|
+
}
|
|
51
|
+
changes.push({ path: filePath, status: 'A', added: lineCount, removed: 0 });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return changes;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// git not available or not a git repo — graceful degradation
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export function formatFileChanges(changes) {
|
|
63
|
+
if (changes.length === 0)
|
|
64
|
+
return '';
|
|
65
|
+
const lines = ['', 'Changes:'];
|
|
66
|
+
for (const change of changes) {
|
|
67
|
+
const tag = change.status === 'A'
|
|
68
|
+
? chalk.green('A')
|
|
69
|
+
: chalk.yellow('M');
|
|
70
|
+
const detail = change.status === 'A'
|
|
71
|
+
? chalk.gray(`(new file, ${change.added} lines)`)
|
|
72
|
+
: chalk.gray(`(+${change.added} -${change.removed})`);
|
|
73
|
+
lines.push(` ${tag} ${change.path} ${detail}`);
|
|
74
|
+
}
|
|
75
|
+
return lines.join('\n');
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=file-changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-changes.js","sourceRoot":"","sources":["../../src/output/file-changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PipelineRun } from '@studio-foundation/contracts';
|
|
2
|
+
export declare function formatResult(run: PipelineRun): void;
|
|
3
|
+
export declare function formatJson(data: unknown): void;
|
|
4
|
+
export declare function formatError(error: Error): void;
|
|
5
|
+
export declare function formatDuration(ms: number): string;
|
|
6
|
+
//# sourceMappingURL=formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/output/formatter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAgEnD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE9C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAE9C;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAOjD"}
|