@studio-foundation/cli 0.11.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -30
- package/dist/commands/init.d.ts +7 -3
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +17 -21
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/integrations.d.ts.map +1 -1
- package/dist/commands/integrations.js +20 -28
- package/dist/commands/integrations.js.map +1 -1
- package/dist/commands/marketplace.d.ts +17 -0
- package/dist/commands/marketplace.d.ts.map +1 -0
- package/dist/commands/marketplace.js +132 -0
- package/dist/commands/marketplace.js.map +1 -0
- package/dist/commands/plugin.d.ts +8 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +42 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/registry/audit.d.ts +2 -1
- package/dist/commands/registry/audit.d.ts.map +1 -1
- package/dist/commands/registry/audit.js +32 -22
- package/dist/commands/registry/audit.js.map +1 -1
- package/dist/commands/registry/index.d.ts.map +1 -1
- package/dist/commands/registry/index.js +4 -3
- package/dist/commands/registry/index.js.map +1 -1
- package/dist/commands/registry/install.d.ts +4 -2
- package/dist/commands/registry/install.d.ts.map +1 -1
- package/dist/commands/registry/install.js +132 -73
- package/dist/commands/registry/install.js.map +1 -1
- package/dist/commands/registry/remove.d.ts.map +1 -1
- package/dist/commands/registry/remove.js +11 -25
- package/dist/commands/registry/remove.js.map +1 -1
- package/dist/commands/registry/search.d.ts +1 -1
- package/dist/commands/registry/search.d.ts.map +1 -1
- package/dist/commands/registry/search.js +33 -17
- package/dist/commands/registry/search.js.map +1 -1
- package/dist/commands/registry/sync.d.ts +1 -0
- package/dist/commands/registry/sync.d.ts.map +1 -1
- package/dist/commands/registry/sync.js +46 -12
- package/dist/commands/registry/sync.js.map +1 -1
- package/dist/commands/registry/update.d.ts +14 -2
- package/dist/commands/registry/update.d.ts.map +1 -1
- package/dist/commands/registry/update.js +70 -18
- package/dist/commands/registry/update.js.map +1 -1
- package/dist/commands/templates.d.ts.map +1 -1
- package/dist/commands/templates.js +13 -16
- package/dist/commands/templates.js.map +1 -1
- package/dist/commands/tools.d.ts.map +1 -1
- package/dist/commands/tools.js +6 -2
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/upgrade.d.ts +3 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +79 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/generated/bundled-assets.d.ts +1 -1
- package/dist/generated/bundled-assets.d.ts.map +1 -1
- package/dist/generated/bundled-assets.js +77 -2
- package/dist/generated/bundled-assets.js.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/output/map-progress.d.ts +11 -1
- package/dist/output/map-progress.d.ts.map +1 -1
- package/dist/output/map-progress.js +43 -4
- package/dist/output/map-progress.js.map +1 -1
- package/dist/output/progress.d.ts.map +1 -1
- package/dist/output/progress.js +1 -1
- package/dist/output/progress.js.map +1 -1
- package/dist/registry/cache.d.ts +1 -1
- package/dist/registry/cache.d.ts.map +1 -1
- package/dist/registry/cache.js +3 -2
- package/dist/registry/cache.js.map +1 -1
- package/dist/registry/client.d.ts +20 -11
- package/dist/registry/client.d.ts.map +1 -1
- package/dist/registry/client.js +145 -45
- package/dist/registry/client.js.map +1 -1
- package/dist/registry/constraints.d.ts +17 -0
- package/dist/registry/constraints.d.ts.map +1 -0
- package/dist/registry/constraints.js +30 -0
- package/dist/registry/constraints.js.map +1 -0
- package/dist/registry/dependency-spec.d.ts +15 -0
- package/dist/registry/dependency-spec.d.ts.map +1 -0
- package/dist/registry/dependency-spec.js +17 -0
- package/dist/registry/dependency-spec.js.map +1 -0
- package/dist/registry/git-source.d.ts +16 -0
- package/dist/registry/git-source.d.ts.map +1 -0
- package/dist/registry/git-source.js +92 -0
- package/dist/registry/git-source.js.map +1 -0
- package/dist/registry/legacy-paths.d.ts +3 -0
- package/dist/registry/legacy-paths.d.ts.map +1 -0
- package/dist/registry/legacy-paths.js +31 -0
- package/dist/registry/legacy-paths.js.map +1 -0
- package/dist/registry/lockfile.d.ts +5 -1
- package/dist/registry/lockfile.d.ts.map +1 -1
- package/dist/registry/lockfile.js +28 -7
- package/dist/registry/lockfile.js.map +1 -1
- package/dist/registry/marketplaces.d.ts +23 -0
- package/dist/registry/marketplaces.d.ts.map +1 -0
- package/dist/registry/marketplaces.js +83 -0
- package/dist/registry/marketplaces.js.map +1 -0
- package/dist/registry/registry-index.d.ts +36 -0
- package/dist/registry/registry-index.d.ts.map +1 -0
- package/dist/registry/registry-index.js +57 -0
- package/dist/registry/registry-index.js.map +1 -0
- package/dist/registry/resolver.d.ts +15 -3
- package/dist/registry/resolver.d.ts.map +1 -1
- package/dist/registry/resolver.js +82 -72
- package/dist/registry/resolver.js.map +1 -1
- package/dist/registry/seed.d.ts +10 -0
- package/dist/registry/seed.d.ts.map +1 -0
- package/dist/registry/seed.js +25 -0
- package/dist/registry/seed.js.map +1 -0
- package/dist/registry/types.d.ts +66 -7
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry/types.js +28 -8
- package/dist/registry/types.js.map +1 -1
- package/dist/registry/verify.d.ts +15 -0
- package/dist/registry/verify.d.ts.map +1 -0
- package/dist/registry/verify.js +86 -0
- package/dist/registry/verify.js.map +1 -0
- package/dist/upgrade.d.ts +28 -0
- package/dist/upgrade.d.ts.map +1 -0
- package/dist/upgrade.js +64 -0
- package/dist/upgrade.js.map +1 -0
- package/dist/version-guard.d.ts +3 -1
- package/dist/version-guard.d.ts.map +1 -1
- package/dist/version-guard.js +8 -2
- package/dist/version-guard.js.map +1 -1
- package/package.json +12 -12
|
@@ -1,10 +1,85 @@
|
|
|
1
1
|
// Generated by scripts/gen-bundled-assets.mjs — do not edit.
|
|
2
|
-
export const PACKAGE_VERSION = "0.
|
|
2
|
+
export const PACKAGE_VERSION = "0.12.0";
|
|
3
3
|
/** Contents of cli/templates/, keyed by path relative to that directory. */
|
|
4
4
|
export const BUNDLED_ASSETS = {
|
|
5
5
|
".studiorc.yaml": "# Studio Configuration\n\nproviders:\n anthropic:\n apiKey: ${ANTHROPIC_API_KEY}\n # openai:\n # apiKey: ${OPENAI_API_KEY}\n\npaths:\n pipelines: ./pipelines\n contracts: ./configs/contracts\n agents: ./configs/agents\n\ndefaults:\n provider: anthropic\n model: claude-sonnet-4-20250514\n",
|
|
6
|
-
"ONBOARDING.md": "# Onboarding — {{PROJECT_NAME}}\n\nHow to go from a fresh machine to a working run of this project. Generated by\n`studio init`; edit it freely — nothing regenerates over it.\n\n## 1. Install Studio\n\nStudio is a global CLI, not a project dependency.
|
|
6
|
+
"ONBOARDING.md": "# Onboarding — {{PROJECT_NAME}}\n\nHow to go from a fresh machine to a working run of this project. Generated by\n`studio init`; edit it freely — nothing regenerates over it.\n\n## 1. Install Studio\n\nStudio is a global CLI, not a project dependency. The standalone binary needs no Node.js:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/studio-foundation/studio/main/install.sh | sh\n```\n\nOn Windows, PowerShell:\n\n```powershell\nirm https://raw.githubusercontent.com/studio-foundation/studio/main/install.ps1 | iex\n```\n\nOr from npm, if this machine already has Node.js >= 22.13:\n\n```bash\nnpm install -g @studio-foundation/cli\n```\n\n## 2. Get the project\n\n```bash\ngit clone <this-repo>\ncd {{PROJECT_NAME}}\n```\n\nInstall the app dependencies too, if this project has a `package.json`:\n\n```bash\nnpm install\n```\n\n## 3. Create your local config\n\n`.studio/config.yaml` holds the real values and is gitignored. `.studio/config.example.yaml`\nis its committed twin — every key left uncommented there is required.\n\n```bash\ncp .studio/config.example.yaml .studio/config.yaml\n```\n\nThen fill in what it asks for. Secrets belong in environment variables, referenced\nfrom `config.yaml` as `${VAR}` — never written in the file.\n\n## 4. Check the machine\n\n```bash\nstudio doctor\n```\n\nOne command, four checks: the installed Studio satisfies the project's\n`studio_version`, `config.yaml` has every key the contract declares, every required\nbinary is on PATH and in range, and every `${VAR}` resolves to a non-empty value.\nExit code is `1` on any failure, so it also works as a CI gate.\n\nFix whatever it prints, re-run it, and only then run a pipeline.\n\n## 5. Run\n\n```bash\nstudio list pipelines\nstudio run <pipeline> --input \"...\"\n```\n\nUseful while getting oriented:\n\n```bash\nstudio run <pipeline> --provider mock # no API calls, no key needed\nstudio run <pipeline> --live # stream tool calls as they happen\nstudio status # last run\nstudio logs <run-id> # raw JSONL for a run\n```\n",
|
|
7
7
|
"projects/blank/metadata.json": "{\n \"name\": \"blank\",\n \"version\": \"1.0.0\",\n \"description\": \"Empty project structure\",\n \"type\": \"template\",\n \"studio_version\": \">=7.0.0\"\n}\n",
|
|
8
|
+
"seed/index.json": "{\n \"generated_at\": \"2026-07-27T23:20:20.900Z\",\n \"version\": \"1\",\n \"packages\": [\n {\n \"name\": \"content\",\n \"type\": \"template\",\n \"version\": \"1.2.0\",\n \"description\": \"Content creation and editing with search\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"content\",\n \"writing\",\n \"research\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"search\",\n \"writer\"\n ]\n }\n },\n \"source\": {\n \"type\": \"local\",\n \"path\": \"templates/content\"\n }\n },\n {\n \"name\": \"document-analysis\",\n \"type\": \"template\",\n \"version\": \"1.2.0\",\n \"description\": \"Document extraction and structured analysis\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"analysis\",\n \"documents\",\n \"extraction\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"search\",\n \"analyst\"\n ]\n }\n },\n \"source\": {\n \"type\": \"local\",\n \"path\": \"templates/document-analysis\"\n }\n },\n {\n \"name\": \"parallel-tasks\",\n \"type\": \"template\",\n \"version\": \"1.1.0\",\n \"description\": \"Fan-out parallel task execution with consolidation\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"parallel\",\n \"fan-out\",\n \"orchestration\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"planner\",\n \"worker\",\n \"consolidator\"\n ]\n }\n },\n \"source\": {\n \"type\": \"local\",\n \"path\": \"templates/parallel-tasks\"\n }\n },\n {\n \"name\": \"software\",\n \"type\": \"template\",\n \"version\": \"1.2.0\",\n \"description\": \"Code generation with repo, shell and search tools\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"software\",\n \"code\",\n \"development\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"repo-manager\",\n \"shell\",\n \"search\",\n \"coder\",\n \"git\"\n ]\n }\n },\n \"source\": {\n \"type\": \"local\",\n \"path\": \"templates/software\"\n }\n },\n {\n \"name\": \"software-full\",\n \"type\": \"template\",\n \"version\": \"2.2.0\",\n \"description\": \"Software development (full pipeline with QA review)\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"software\",\n \"code\",\n \"development\",\n \"qa\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"repo-manager\",\n \"shell\",\n \"search\",\n \"git\",\n \"coder\",\n \"analyst\",\n \"publisher\",\n \"reviewer\"\n ],\n \"recommended\": [\n \"code-conventions\",\n \"git-workflow\"\n ]\n }\n },\n \"source\": {\n \"type\": \"local\",\n \"path\": \"templates/software-full\"\n }\n },\n {\n \"name\": \"analyst\",\n \"type\": \"plugin\",\n \"version\": \"1.2.0\",\n \"description\": \"Senior software analyst — reads code, analyzes requests, produces implementation plans\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"software\",\n \"analysis\",\n \"planning\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"search\"\n ]\n }\n },\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/analyst\"\n },\n \"provides\": {\n \"agents\": [\n \"analyst\"\n ]\n }\n },\n {\n \"name\": \"code-conventions\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Coding conventions: file organization, TypeScript patterns, testing, error handling\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"conventions\",\n \"typescript\",\n \"testing\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/code-conventions\"\n },\n \"provides\": {\n \"skills\": [\n \"code-conventions\"\n ]\n }\n },\n {\n \"name\": \"coder\",\n \"type\": \"plugin\",\n \"version\": \"1.2.0\",\n \"description\": \"Expert software developer agent — implements changes using repo-manager, shell, and search tools\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"software\",\n \"code\",\n \"development\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"code-conventions\",\n \"git-workflow\",\n \"search\"\n ]\n }\n },\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/coder\"\n },\n \"provides\": {\n \"agents\": [\n \"coder\"\n ]\n }\n },\n {\n \"name\": \"consolidator\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Aggregation specialist — merges parallel worker outputs into a single coherent result\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"parallel\",\n \"aggregation\",\n \"orchestration\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/consolidator\"\n },\n \"provides\": {\n \"agents\": [\n \"consolidator\"\n ]\n }\n },\n {\n \"name\": \"git\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Git version control operations: status, diff, checkout, commit, push, PR/MR creation\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"git\",\n \"vcs\",\n \"github\",\n \"gitlab\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/git\"\n },\n \"provides\": {\n \"tools\": [\n \"git\"\n ]\n }\n },\n {\n \"name\": \"git-workflow\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Git branching, conventional commits, and PR conventions\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"git\",\n \"commits\",\n \"workflow\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/git-workflow\"\n },\n \"provides\": {\n \"skills\": [\n \"git-workflow\"\n ]\n }\n },\n {\n \"name\": \"linear\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Triggers pipelines from Linear webhook events and syncs issue status on pipeline completion or failure\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"linear\",\n \"issues\",\n \"project-management\",\n \"webhooks\",\n \"triggers\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/linear\"\n },\n \"provides\": {\n \"integrations\": [\n \"linear\"\n ]\n }\n },\n {\n \"name\": \"planner\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Task planning specialist — decomposes a request into 5 independent parallel tasks\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"parallel\",\n \"planning\",\n \"orchestration\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/planner\"\n },\n \"provides\": {\n \"agents\": [\n \"planner\"\n ]\n }\n },\n {\n \"name\": \"publisher\",\n \"type\": \"plugin\",\n \"version\": \"1.2.0\",\n \"description\": \"Git workflow specialist — creates branch, commits, pushes, and opens PR/MR\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"git\",\n \"github\",\n \"gitlab\",\n \"publish\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"git\"\n ]\n }\n },\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/publisher\"\n },\n \"provides\": {\n \"agents\": [\n \"publisher\"\n ]\n }\n },\n {\n \"name\": \"repo-manager\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Read, write, list, and patch files in the workspace\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"files\",\n \"workspace\",\n \"builtin\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/repo-manager\"\n },\n \"provides\": {\n \"tools\": [\n \"repo_manager\"\n ]\n }\n },\n {\n \"name\": \"reviewer\",\n \"type\": \"plugin\",\n \"version\": \"1.1.0\",\n \"description\": \"Strict QA engineer — verifies implementation against acceptance criteria, returns approved or rejected\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"qa\",\n \"review\",\n \"testing\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/reviewer\"\n },\n \"provides\": {\n \"agents\": [\n \"reviewer\"\n ]\n }\n },\n {\n \"name\": \"search\",\n \"type\": \"plugin\",\n \"version\": \"2.0.0\",\n \"description\": \"Search the codebase by content pattern or file name\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"search\",\n \"codebase\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/search\"\n },\n \"provides\": {\n \"tools\": [\n \"search\"\n ]\n }\n },\n {\n \"name\": \"shell\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Execute shell commands in the workspace\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"shell\",\n \"commands\",\n \"builtin\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/shell\"\n },\n \"provides\": {\n \"tools\": [\n \"shell\"\n ]\n }\n },\n {\n \"name\": \"slack\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Sends Slack notifications to a configured channel when pipeline events occur, such as completion or failure\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"slack\",\n \"notifications\",\n \"messaging\",\n \"alerts\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/slack\"\n },\n \"provides\": {\n \"integrations\": [\n \"slack\"\n ]\n }\n },\n {\n \"name\": \"studio-run\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Launch a Studio pipeline run and wait for completion\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"studio\",\n \"pipeline\",\n \"run\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/studio\"\n },\n \"provides\": {\n \"tools\": [\n \"studio-run\"\n ]\n }\n },\n {\n \"name\": \"web-search\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Search the web using the Tavily API\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"search\",\n \"web\",\n \"tavily\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/web-search\"\n },\n \"provides\": {\n \"tools\": [\n \"web-search\"\n ]\n }\n },\n {\n \"name\": \"webhook\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Sends generic HTTP webhook notifications for pipeline and stage lifecycle events including start, completion, and failure\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"webhook\",\n \"http\",\n \"notifications\",\n \"events\",\n \"generic\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/webhook\"\n },\n \"provides\": {\n \"integrations\": [\n \"webhook\"\n ]\n }\n },\n {\n \"name\": \"worker\",\n \"type\": \"plugin\",\n \"version\": \"1.0.0\",\n \"description\": \"Task execution specialist — executes the planned task matching its own stage name\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"parallel\",\n \"execution\",\n \"orchestration\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {},\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/worker\"\n },\n \"provides\": {\n \"agents\": [\n \"worker\"\n ]\n }\n },\n {\n \"name\": \"writer\",\n \"type\": \"plugin\",\n \"version\": \"1.2.0\",\n \"description\": \"Expert content writer — researches topics and creates high-quality structured content\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"content\",\n \"writing\",\n \"research\"\n ],\n \"studio_version\": \">=0.2.0\",\n \"downloads\": 0,\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"search\"\n ]\n }\n },\n \"source\": {\n \"type\": \"local\",\n \"path\": \"plugins/writer\"\n },\n \"provides\": {\n \"agents\": [\n \"writer\"\n ]\n }\n }\n ]\n}\n",
|
|
9
|
+
"seed/plugins/analyst/analyst.agent.yaml": "name: analyst\ntools:\n - search-search_codebase\n - repo_manager-read_file\n - repo_manager-list_files\nsystem_prompt: |\n You are a senior software analyst. Your job is to analyze requests and\n produce clear, actionable implementation plans.\n\n When analyzing a request:\n - Read the target file(s) to understand the existing code structure and conventions.\n - If file content is already available in your context via previous stage tool\n results, do NOT call read_file again — use the content already provided.\n - Identify exactly what needs to change and why.\n - Produce requirements and implementation steps that are specific enough for\n a developer to execute without ambiguity.\n",
|
|
10
|
+
"seed/plugins/analyst/metadata.json": "{\n \"name\": \"analyst\",\n \"version\": \"1.2.0\",\n \"description\": \"Senior software analyst — reads code, analyzes requests, produces implementation plans\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"software\",\n \"analysis\",\n \"planning\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"agents\": [\n \"analyst\"\n ]\n },\n \"studio_version\": \">=0.2.0\",\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"search\"\n ]\n }\n }\n}\n",
|
|
11
|
+
"seed/plugins/code-conventions/code-conventions.skill.md": "# Code Conventions\n\n## File Organization\n\n- Read existing files before modifying them\n- Match the naming conventions already present in the codebase\n- Place new files near related existing files\n\n## TypeScript\n\n- Prefer `const` over `let`; avoid `var`\n- Use explicit return types on public functions\n- Avoid `any` — use `unknown` and narrow with type guards\n\n## Testing\n\n- Write tests for new behavior before (or alongside) the implementation\n- Test file lives next to source: `foo.ts` → `foo.test.ts`\n- Describe blocks group related tests; `it` describes behavior\n\n## Error Handling\n\n- Throw descriptive errors with context: `throw new Error(\\`Could not load '${name}': ${err.message}\\`)`\n- Log warnings (not errors) for non-fatal, recoverable issues\n",
|
|
12
|
+
"seed/plugins/code-conventions/metadata.json": "{\n \"name\": \"code-conventions\",\n \"version\": \"1.0.0\",\n \"description\": \"Coding conventions: file organization, TypeScript patterns, testing, error handling\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"conventions\",\n \"typescript\",\n \"testing\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"skills\": [\n \"code-conventions\"\n ]\n },\n \"studio_version\": \">=0.2.0\"\n}\n",
|
|
13
|
+
"seed/plugins/coder/coder.agent.yaml": "name: coder\ntools:\n - repo_manager-read_file\n - repo_manager-apply_patch\n - repo_manager-write_file\n - repo_manager-list_files\n - shell-run_command\n - search-search_codebase\nskills:\n - git-workflow\n - code-conventions\nsystem_prompt: |\n You are an expert software developer. Your job is to implement the requested\n changes using the available tools.\n\n CONTEXT USAGE:\n - Your context already contains the outputs and tool results from previous stages,\n including any files that were already read. Do NOT re-read a file if its content\n is already present in your context — use it directly.\n - If group_feedback is present in your context, it contains QA rejection reasons\n from previous iterations. You MUST address every issue listed before writing code.\n\n IMPLEMENTATION WORKFLOW:\n 1. Check your context for existing file content before calling read_file.\n 2. If you need files not already in context, call read_file or list_files first.\n 3. Implement the changes. Prefer repo_manager-apply_patch for targeted edits,\n repo_manager-write_file for full rewrites.\n 4. Never leave placeholder comments like \"// TODO\" or \"// existing code here\" —\n always write complete, working code.\n\n OUTPUT:\n - Your final response must include a summary and the list of files changed.\n - Every file path and change description must reflect actual tool call results.\n",
|
|
14
|
+
"seed/plugins/coder/metadata.json": "{\n \"name\": \"coder\",\n \"version\": \"1.2.0\",\n \"description\": \"Expert software developer agent — implements changes using repo-manager, shell, and search tools\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"software\",\n \"code\",\n \"development\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"agents\": [\n \"coder\"\n ]\n },\n \"studio_version\": \">=0.2.0\",\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"code-conventions\",\n \"git-workflow\",\n \"search\"\n ]\n }\n }\n}\n",
|
|
15
|
+
"seed/plugins/consolidator/consolidator.agent.yaml": "name: consolidator\nsystem_prompt: |\n You are an aggregation specialist. You receive the outputs of multiple parallel\n workers and consolidate them into a single coherent result.\n\n WORKFLOW:\n 1. Read all stage outputs from your context (all_stage_outputs).\n 2. Collect the `result` and `summary` from each worker stage that succeeded.\n 3. Merge them into a unified `results` array and write a global `summary`.\n\n RULES:\n - Include all available worker outputs, even partial ones.\n - If a worker stage failed or produced no output, skip it gracefully.\n - The global summary must reflect the combined output, not just one worker.\n - Do not invent or hallucinate results — only consolidate what workers produced.\n",
|
|
16
|
+
"seed/plugins/consolidator/metadata.json": "{\n \"name\": \"consolidator\",\n \"version\": \"1.0.0\",\n \"description\": \"Aggregation specialist — merges parallel worker outputs into a single coherent result\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"parallel\",\n \"aggregation\",\n \"orchestration\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"agents\": [\n \"consolidator\"\n ]\n },\n \"studio_version\": \">=0.2.0\"\n}\n",
|
|
17
|
+
"seed/plugins/git-workflow/git-workflow.skill.md": "# Git Workflow\n\n## Branching\n\nAlways work on a feature branch, never directly on `main` or `master`.\n\n```bash\ngit checkout -b feat/short-description\n```\n\n## Commits\n\nUse conventional commits format:\n- `feat:` — new feature\n- `fix:` — bug fix\n- `refactor:` — refactoring without behavior change\n- `test:` — adding or updating tests\n- `docs:` — documentation only\n\nKeep commits atomic: one logical change per commit.\n\n## Pull Requests\n\nBefore creating a PR:\n1. Run tests: ensure they pass\n2. Build: ensure it compiles\n3. Review your own diff\n\nCreate PRs against `main`. Title should match the commit format.\n",
|
|
18
|
+
"seed/plugins/git-workflow/metadata.json": "{\n \"name\": \"git-workflow\",\n \"version\": \"1.0.0\",\n \"description\": \"Git branching, conventional commits, and PR conventions\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"git\",\n \"commits\",\n \"workflow\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"skills\": [\n \"git-workflow\"\n ]\n },\n \"studio_version\": \">=0.2.0\"\n}\n",
|
|
19
|
+
"seed/plugins/git/git.tool.yaml": "name: git\ndescription: Git version control operations\nversion: 1\n\ncommands:\n - name: git-status\n description: Show working tree status and current branch\n parameters: {}\n execute:\n type: shell\n command: git status\n parse_output: text\n\n - name: git-diff\n description: Show changes in the working tree\n parameters:\n staged:\n type: boolean\n required: false\n description: Show staged changes instead of unstaged\n file:\n type: string\n required: false\n description: Restrict diff to this file path\n execute:\n type: shell\n command: |\n git diff {{#if staged}}--cached{{/if}} {{#if file}}{{file}}{{/if}}\n parse_output: text\n\n - name: git-checkout\n description: Checkout an existing branch or create a new one\n parameters:\n branch:\n type: string\n required: true\n description: Branch name to checkout or create\n create:\n type: boolean\n required: false\n description: Create the branch if it does not exist\n execute:\n type: shell\n command: |\n git checkout {{#if create}}-b{{/if}} {{branch}}\n parse_output: text\n\n - name: git-commit\n description: Stage all changes and commit with a message\n parameters:\n message:\n type: string\n required: true\n description: Commit message (use conventional commits format)\n execute:\n type: shell\n command: |\n git add -A && git commit -m \"{{message}}\"\n parse_output: text\n\n - name: git-push\n description: Push the current branch to origin\n parameters:\n set_upstream:\n type: boolean\n required: false\n description: Set upstream tracking reference (-u flag)\n execute:\n type: shell\n command: |\n git push {{#if set_upstream}}-u{{/if}} origin HEAD\n parse_output: text\n\n - name: git-remote-url\n description: Get the remote URL for origin\n parameters: {}\n execute:\n type: shell\n command: git remote get-url origin\n parse_output: text\n\n - name: git-create-pr\n description: Create a pull request on GitHub using the gh CLI\n parameters:\n title:\n type: string\n required: true\n description: PR title\n branch:\n type: string\n required: true\n description: Head branch for the PR\n body:\n type: string\n required: false\n description: PR description\n base:\n type: string\n required: false\n description: Base branch to merge into (defaults to main)\n execute:\n type: shell\n command: |\n gh pr create --title \"{{title}}\" --head {{branch}} {{#if body}}--body \"{{body}}\"{{/if}} {{#if base}}--base {{base}}{{/if}}\n parse_output: text\n\n - name: git-create-mr\n description: Create a merge request on GitLab using the glab CLI\n parameters:\n title:\n type: string\n required: true\n description: MR title\n description:\n type: string\n required: false\n description: MR description\n target_branch:\n type: string\n required: false\n description: Target branch to merge into (defaults to main)\n execute:\n type: shell\n command: |\n glab mr create --title \"{{title}}\" {{#if description}}--description \"{{description}}\"{{/if}} {{#if target_branch}}--target-branch {{target_branch}}{{/if}} --yes\n parse_output: text\n\nprompt_snippet: |\n You have access to git tools. Always create a feature branch before making changes.\n Never commit directly to main or master.\n Use conventional commit messages: <type>(<scope>): <description>\n To open a PR/MR: first call git-remote-url to detect the provider, then use\n git-create-pr for GitHub remotes or git-create-mr for GitLab remotes.\n\nconstraints:\n requires_binaries: [git]\n optional_binaries: [gh, glab]\n",
|
|
20
|
+
"seed/plugins/git/metadata.json": "{\n \"name\": \"git\",\n \"version\": \"1.0.0\",\n \"description\": \"Git version control operations: status, diff, checkout, commit, push, PR/MR creation\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"git\",\n \"vcs\",\n \"github\",\n \"gitlab\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"tools\": [\n \"git\"\n ]\n },\n \"studio_version\": \">=0.2.0\",\n \"requires_binaries\": [\n \"git\"\n ],\n \"optional_binaries\": [\n \"gh\",\n \"glab\"\n ]\n}\n",
|
|
21
|
+
"seed/plugins/linear/linear.integration.yaml": "name: linear\nversion: 1\ndescription: \"Linear webhook trigger + issue status sync\"\n\nconfig:\n required:\n - LINEAR_API_KEY\n - LINEAR_WEBHOOK_SECRET\n optional:\n autoTrigger: false\n\nwebhook:\n hmac:\n header: linear-signature\n secret_env: LINEAR_WEBHOOK_SECRET\n handler: linear-webhook\n\non_failure:\n handler: linear-failure\n\nevents:\n consumes:\n - linear.issue.in_progress\n emits:\n - pipeline.complete\n - pipeline.failed\n\ntest:\n type: http\n endpoint: https://api.linear.app/graphql\n method: POST\n auth: bearer:${LINEAR_API_KEY}\n body: '{\"query\":\"{ viewer { id name } }\"}'\n expect:\n status: 200\n",
|
|
22
|
+
"seed/plugins/linear/metadata.json": "{\n \"name\": \"linear\",\n \"version\": \"1.0.0\",\n \"description\": \"Triggers pipelines from Linear webhook events and syncs issue status on pipeline completion or failure\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"linear\",\n \"issues\",\n \"project-management\",\n \"webhooks\",\n \"triggers\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"integrations\": [\n \"linear\"\n ]\n },\n \"studio_version\": \">=0.2.0\"\n}\n",
|
|
23
|
+
"seed/plugins/planner/metadata.json": "{\n \"name\": \"planner\",\n \"version\": \"1.0.0\",\n \"description\": \"Task planning specialist — decomposes a request into 5 independent parallel tasks\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"parallel\",\n \"planning\",\n \"orchestration\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"agents\": [\n \"planner\"\n ]\n },\n \"studio_version\": \">=0.2.0\"\n}\n",
|
|
24
|
+
"seed/plugins/planner/planner.agent.yaml": "name: planner\nsystem_prompt: |\n You are a task planning specialist. Your job is to decompose a user request\n into exactly 5 distinct, independent tasks that can be executed in parallel.\n\n RULES:\n - Always produce exactly 5 tasks — no more, no fewer.\n - Each task must be self-contained: a worker can execute it without knowing\n about the other tasks.\n - Assign a short unique id to each task (e.g. \"task-1\" through \"task-5\").\n - The brief for each task must be specific enough for a worker to act on\n without additional context.\n - Adapt the task decomposition to the domain described in the input.\n",
|
|
25
|
+
"seed/plugins/publisher/metadata.json": "{\n \"name\": \"publisher\",\n \"version\": \"1.2.0\",\n \"description\": \"Git workflow specialist — creates branch, commits, pushes, and opens PR/MR\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"git\",\n \"github\",\n \"gitlab\",\n \"publish\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"agents\": [\n \"publisher\"\n ]\n },\n \"studio_version\": \">=0.2.0\",\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"git\"\n ]\n }\n }\n}\n",
|
|
26
|
+
"seed/plugins/publisher/publisher.agent.yaml": "name: publisher\ntools:\n - git-remote-url\n - git-checkout\n - git-status\n - git-commit\n - git-push\n - git-create-pr\n - git-create-mr\nsystem_prompt: |\n You are a git workflow specialist. Your job is to finalize the implementation\n by creating a feature branch, committing all changes, pushing to origin, and\n opening a pull/merge request.\n\n Follow this workflow exactly:\n 1. Call git-remote-url to get the origin URL and determine the VCS provider.\n - If git-remote-url fails (no remote configured), switch to LOCAL-ONLY mode:\n skip steps 4, 5, and 6. You will only branch and commit locally.\n 2. Call git-status to get the current branch name.\n - If already on a feat/ branch matching the feature, skip to step 3.\n - Otherwise, call git-checkout with create: true to create and switch to the branch.\n Use kebab-case with a feat/ prefix derived from the feature summary,\n suffixed with the run_timestamp from context, e.g. feat/add-faq-section-20260223-1618.\n 3. Call git-commit with a conventional commit message summarizing the changes.\n Format: <type>(<scope>): <description>\n 4. Call git-push with set_upstream: true to push the branch to origin.\n 5. Call git-status to verify the push succeeded and the branch is up to date.\n 6. If the remote URL contains \"github.com\", call git-create-pr to open a PR.\n If the remote URL contains \"gitlab.com\", call git-create-mr to open an MR.\n Use the feature summary as the title and the implementation summary as the body.\n If a PR/MR already exists for this branch, skip creation and use the existing URL.\n\n Never fabricate URLs, branch names, or any output — every value in your final\n response must come from an actual tool call result. If any step fails, report\n the error and stop; never invent a successful result.\n\n Always produce a summary and the branch_name used.\n If in LOCAL-ONLY mode, set pr_url to null and inform the user that changes were\n committed locally and they should add a remote with `git remote add origin <url>`\n then push manually.\n Otherwise, include the pr_url returned by the PR/MR creation command.\n",
|
|
27
|
+
"seed/plugins/repo-manager/metadata.json": "{\n \"name\": \"repo-manager\",\n \"version\": \"1.0.0\",\n \"description\": \"Read, write, list, and patch files in the workspace\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"files\",\n \"workspace\",\n \"builtin\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"tools\": [\n \"repo_manager\"\n ]\n },\n \"studio_version\": \">=0.2.0\"\n}\n",
|
|
28
|
+
"seed/plugins/repo-manager/repo-manager.tool.yaml": "name: repo_manager\ndescription: Read and write files in the workspace\nversion: 1\n\ncommands:\n - name: repo_manager-read_file\n description: Read a file from the workspace\n parameters:\n path:\n type: string\n required: true\n description: File path relative to the workspace root\n execute:\n type: builtin\n parse_output: json\n\n - name: repo_manager-write_file\n description: Write or create a file in the workspace\n parameters:\n path:\n type: string\n required: true\n description: File path relative to the workspace root\n content:\n type: string\n required: true\n description: Full content to write to the file\n execute:\n type: builtin\n parse_output: json\n\n - name: repo_manager-list_files\n description: List files in the workspace\n parameters:\n path:\n type: string\n required: false\n description: Directory to list (default is workspace root)\n recursive:\n type: boolean\n required: false\n description: Whether to list recursively\n execute:\n type: builtin\n parse_output: json\n\n - name: repo_manager-apply_patch\n description: Apply a unified diff patch to a file\n parameters:\n path:\n type: string\n required: true\n description: File path to patch\n patch:\n type: string\n required: true\n description: Unified diff patch content\n execute:\n type: builtin\n parse_output: json\n\nprompt_snippet: |\n You have access to file management tools. Read files before modifying them.\n Use repo_manager-write_file to create or update files — provide the full file content.\n",
|
|
29
|
+
"seed/plugins/reviewer/metadata.json": "{\n \"name\": \"reviewer\",\n \"version\": \"1.1.0\",\n \"description\": \"Strict QA engineer — verifies implementation against acceptance criteria, returns approved or rejected\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"qa\",\n \"review\",\n \"testing\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"agents\": [\n \"reviewer\"\n ]\n },\n \"studio_version\": \">=0.2.0\"\n}\n",
|
|
30
|
+
"seed/plugins/reviewer/reviewer.agent.yaml": "name: reviewer\ntools:\n - repo_manager-read_file\n - repo_manager-list_files\nsystem_prompt: |\n You are a strict QA engineer. Your only job is to verify that the implementation\n matches the acceptance criteria exactly.\n\n WORKFLOW:\n 1. Read every file listed in files_changed (from the code-generation stage output\n in your context) using repo_manager-read_file.\n 2. Verify each acceptance criterion against the actual code, line by line.\n 3. Return approved only if ALL criteria are fully satisfied.\n Return rejected if ANY criterion is not met.\n\n RULES:\n - Never approve based on intent or partial implementation — only on what\n the code actually does.\n - Every issue you report must reference the specific criterion it violates\n and cite the actual code that fails it.\n - A response with issues AND status \"approved\" is a critical error.\n - Do not re-read files already present in your context.\n - The `issues` array must contain ONLY criteria that FAIL. Do not list\n criteria that pass — if a criterion is satisfied, omit it entirely.\n An empty `issues` array with status \"approved\" is correct and expected.\n\n OUTPUT:\n Your response must include the following fields:\n - `status`: exactly \"approved\" or \"rejected\".\n - `summary`: 1–3 sentences describing the overall finding (e.g. what passed,\n what failed, or why the implementation was accepted or rejected).\n - `issues`: the array of failing criteria only, as described in RULES above.\n",
|
|
31
|
+
"seed/plugins/search/metadata.json": "{\n \"name\": \"search\",\n \"version\": \"2.0.0\",\n \"description\": \"Search the codebase by content pattern or file name\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"search\",\n \"codebase\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"tools\": [\n \"search\"\n ]\n },\n \"studio_version\": \">=0.2.0\",\n \"requires_binaries\": [\n \"rg\"\n ]\n}\n",
|
|
32
|
+
"seed/plugins/search/search.tool.yaml": "name: search\ndescription: Search the codebase by content or file pattern\nversion: 1\n\ncommands:\n - name: search-search_codebase\n description: Search files by content pattern (uses ripgrep)\n parameters:\n pattern:\n type: string\n required: true\n description: Regex or literal pattern to search for\n file_pattern:\n type: string\n required: false\n description: Glob pattern to restrict which files are searched (e.g. \"*.ts\")\n execute:\n type: shell\n # `|| true` — ripgrep exits 1 on \"no matches\", which is a result, not a failure.\n command: |\n rg --line-number --no-heading --max-count 50 {{#if file_pattern}}--glob \"{{file_pattern}}\"{{/if}} -e \"{{pattern}}\" . || true\n parse_output: text\n\nprompt_snippet: |\n You have access to a codebase search tool. Use it to find relevant code before making changes.\n Results come back as `path:line:content` lines, capped at 50 matches per file.\n\nconstraints:\n requires_binaries: [rg]\n",
|
|
33
|
+
"seed/plugins/shell/metadata.json": "{\n \"name\": \"shell\",\n \"version\": \"1.0.0\",\n \"description\": \"Execute shell commands in the workspace\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"shell\",\n \"commands\",\n \"builtin\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"tools\": [\n \"shell\"\n ]\n },\n \"studio_version\": \">=0.2.0\"\n}\n",
|
|
34
|
+
"seed/plugins/shell/shell.tool.yaml": "name: shell\ndescription: Execute shell commands in the workspace\nversion: 1\n\ncommands:\n - name: shell-run_command\n description: Run a shell command in the workspace directory\n parameters:\n command:\n type: string\n required: true\n description: Shell command to execute\n execute:\n type: builtin\n parse_output: text\n\nprompt_snippet: |\n You have access to a shell tool. Use it to run build, test, or inspection commands.\n Avoid destructive commands. Prefer targeted commands over broad ones.\n",
|
|
35
|
+
"seed/plugins/slack/metadata.json": "{\n \"name\": \"slack\",\n \"version\": \"1.0.0\",\n \"description\": \"Sends Slack notifications to a configured channel when pipeline events occur, such as completion or failure\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"slack\",\n \"notifications\",\n \"messaging\",\n \"alerts\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"integrations\": [\n \"slack\"\n ]\n },\n \"studio_version\": \">=0.2.0\"\n}\n",
|
|
36
|
+
"seed/plugins/slack/slack.integration.yaml": "name: slack\nversion: 1\ndescription: \"Slack notifications for pipeline events\"\n\nconfig:\n required:\n - SLACK_BOT_TOKEN\n optional:\n channel: \"#studio-runs\"\n\nevents:\n emits:\n - pipeline.complete\n - pipeline.failed\n\ntest:\n type: http\n endpoint: https://slack.com/api/auth.test\n method: POST\n auth: bearer:${SLACK_BOT_TOKEN}\n expect:\n status: 200\n",
|
|
37
|
+
"seed/plugins/studio/metadata.json": "{\n \"name\": \"studio-run\",\n \"version\": \"1.0.0\",\n \"description\": \"Launch a Studio pipeline run and wait for completion\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"studio\",\n \"pipeline\",\n \"run\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"tools\": [\n \"studio-run\"\n ]\n },\n \"studio_version\": \">=0.2.0\",\n \"requires_binaries\": [\n \"curl\"\n ]\n}\n",
|
|
38
|
+
"seed/plugins/studio/run-pipeline.tool.yaml": "name: studio-run\ncommands:\n - name: run-pipeline\n description: Launch a Studio pipeline run and wait for completion\n parameters:\n pipeline:\n type: string\n required: true\n input:\n type: object\n required: true\n wait:\n type: boolean\n default: true # attend la completion avant de retourner\n execute:\n type: shell\n command: |\n curl -X POST http://localhost:3700/api/runs \\\n -H \"Content-Type: application/json\" \\\n -d '{\"pipeline\": \"{{pipeline}}\", \"input\": {{input | json}}, \"wait\": {{wait}}}'\n parse_output: json",
|
|
39
|
+
"seed/plugins/web-search/metadata.json": "{\n \"name\": \"web-search\",\n \"version\": \"1.0.0\",\n \"description\": \"Search the web using the Tavily API\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"search\",\n \"web\",\n \"tavily\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"tools\": [\n \"web-search\"\n ]\n },\n \"studio_version\": \">=0.2.0\",\n \"requires_binaries\": [\n \"curl\"\n ]\n}\n",
|
|
40
|
+
"seed/plugins/web-search/web-search.tool.yaml": "name: web-search\ndescription: Search the web using Tavily (requires TAVILY_API_KEY)\nversion: 1\n\ncommands:\n - name: web_search-search\n description: Search the web and return relevant results\n parameters:\n query:\n type: string\n required: true\n description: The search query\n max_results:\n type: number\n required: false\n description: \"Maximum number of results to return (default: 5)\"\n execute:\n type: shell\n # The body goes through a quoted heredoc so a query containing quotes\n # cannot break out of the command.\n command: |\n curl -sS -X POST https://api.tavily.com/search \\\n -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer $TAVILY_API_KEY\" \\\n --data-binary @- <<'TAVILY_REQUEST'\n {\"query\": {{query | json}}, \"max_results\": {{#if max_results}}{{max_results}}{{else}}5{{/if}}}\n TAVILY_REQUEST\n parse_output: json\n\nprompt_snippet: |\n You have access to a web search tool. Use it to find up-to-date information from the web.\n Search in the language most relevant to the query.\n Prefer specific, targeted queries over broad ones for better results.\n\nconstraints:\n requires_binaries: [curl]\n",
|
|
41
|
+
"seed/plugins/webhook/metadata.json": "{\n \"name\": \"webhook\",\n \"version\": \"1.0.0\",\n \"description\": \"Sends generic HTTP webhook notifications for pipeline and stage lifecycle events including start, completion, and failure\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"webhook\",\n \"http\",\n \"notifications\",\n \"events\",\n \"generic\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"integrations\": [\n \"webhook\"\n ]\n },\n \"studio_version\": \">=0.2.0\"\n}\n",
|
|
42
|
+
"seed/plugins/webhook/webhook.integration.yaml": "name: webhook\nversion: 1\ndescription: \"Generic HTTP webhook notifications for pipeline events\"\n\nconfig:\n optional:\n url: \"\"\n events: \"pipeline.complete,pipeline.failed\"\n secret: \"\"\n\nevents:\n emits:\n - pipeline.complete\n - pipeline.failed\n - pipeline.start\n - stage.complete\n - stage.failed\n",
|
|
43
|
+
"seed/plugins/worker/metadata.json": "{\n \"name\": \"worker\",\n \"version\": \"1.0.0\",\n \"description\": \"Task execution specialist — executes the planned task matching its own stage name\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"parallel\",\n \"execution\",\n \"orchestration\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"agents\": [\n \"worker\"\n ]\n },\n \"studio_version\": \">=0.2.0\"\n}\n",
|
|
44
|
+
"seed/plugins/worker/worker.agent.yaml": "name: worker\nsystem_prompt: |\n You are a task execution specialist. You receive a list of planned tasks\n and your own stage name (e.g. \"task-1\"). Execute the task assigned to you.\n\n WORKFLOW:\n 1. Read the `tasks` array from your context (output of the task-selection stage).\n 2. Match your stage name to the task `id` field (e.g. stage \"task-1\" → task with id \"task-1\").\n 3. Execute that task based on its `brief`.\n 4. Return your result in the required output fields.\n\n RULES:\n - Only execute the task assigned to you — ignore the others.\n - If you cannot determine your assigned task, use the first unmatched task.\n - Be thorough and complete. The consolidator will aggregate your output\n with 4 other workers — quality matters.\n",
|
|
45
|
+
"seed/plugins/writer/metadata.json": "{\n \"name\": \"writer\",\n \"version\": \"1.2.0\",\n \"description\": \"Expert content writer — researches topics and creates high-quality structured content\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"content\",\n \"writing\",\n \"research\"\n ],\n \"type\": \"plugin\",\n \"provides\": {\n \"agents\": [\n \"writer\"\n ]\n },\n \"studio_version\": \">=0.2.0\",\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"search\"\n ]\n }\n }\n}\n",
|
|
46
|
+
"seed/plugins/writer/writer.agent.yaml": "name: writer\ntools:\n - search-search_codebase\nsystem_prompt: |\n You are an expert content writer. Research the topic thoroughly using\n the search tool, then create high-quality, well-structured content.\n",
|
|
47
|
+
"seed/templates/content/metadata.json": "{\n \"name\": \"content\",\n \"version\": \"1.2.0\",\n \"description\": \"Content creation and editing with search\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"content\",\n \"writing\",\n \"research\"\n ],\n \"type\": \"template\",\n \"studio_version\": \">=0.2.0\",\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"search\",\n \"writer\"\n ]\n }\n }\n}\n",
|
|
48
|
+
"seed/templates/content/project/README.md": "# {{PROJECT_NAME}}\n\nGenerated from the `{{TEMPLATE_NAME}}` Studio template.\n\n## Getting started\n\n```bash\nnpm install\nstudio run content-creator --input \"Write a blog post about...\"\n```\n\n## Pipelines\n\n- **content-creator** — Research and create content from a prompt\n\n## Configuration\n\nSet your API key:\n\n```bash\nstudio config set provider anthropic --api-key $ANTHROPIC_API_KEY\n```\n",
|
|
49
|
+
"seed/templates/content/project/contracts/content-output.contract.yaml": "name: content-output\nversion: 1\nschema:\n required_fields:\n - title\n - content\n - summary\n",
|
|
50
|
+
"seed/templates/content/project/inputs/example.input.yaml": "topic: \"The benefits of test-driven development\"\nformat: \"blog post\"\ntone: \"professional\"\ntarget_length: \"500 words\"\n",
|
|
51
|
+
"seed/templates/content/project/package.json": "{\n \"name\": \"{{PROJECT_NAME}}\",\n \"version\": \"0.2.0\",\n \"description\": \"{{PROJECT_NAME}} — powered by Studio ({{TEMPLATE_NAME}} template)\",\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"tsx src/index.ts\",\n \"build\": \"tsc\"\n },\n \"dependencies\": {},\n \"devDependencies\": {\n \"typescript\": \"^5.3.0\",\n \"@types/node\": \"^20.0.0\",\n \"tsx\": \"^4.0.0\"\n }\n}\n",
|
|
52
|
+
"seed/templates/content/project/pipelines/content-creator.pipeline.yaml": "name: content-creator\ndescription: Research a topic and create content\nversion: 1\n\nstages:\n - name: content-generation\n kind: content\n agent: writer\n ralph:\n max_attempts: 3\n context:\n include:\n - input\n",
|
|
53
|
+
"seed/templates/content/project/prisma/schema.prisma": "// {{PROJECT_NAME}} — Prisma schema\n// Docs: https://pris.ly/d/prisma-schema\n\ngenerator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n url = env(\"DATABASE_URL\")\n}\n\n// Add your models below\n",
|
|
54
|
+
"seed/templates/content/project/src/index.ts": "// {{PROJECT_NAME}} — powered by Studio\n// Run pipelines with: studio run content-creator --input \"...\"\nconsole.log('{{PROJECT_NAME}} ready.');\n",
|
|
55
|
+
"seed/templates/document-analysis/metadata.json": "{\n \"name\": \"document-analysis\",\n \"version\": \"1.2.0\",\n \"description\": \"Document extraction and structured analysis\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"analysis\",\n \"documents\",\n \"extraction\"\n ],\n \"type\": \"template\",\n \"studio_version\": \">=0.2.0\",\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"search\",\n \"analyst\"\n ]\n }\n }\n}\n",
|
|
56
|
+
"seed/templates/document-analysis/project/contracts/analysis-output.contract.yaml": "name: analysis-output\nversion: 1\nschema:\n required_fields:\n - summary\n - key_findings\n - recommendations\n",
|
|
57
|
+
"seed/templates/document-analysis/project/inputs/example.input.yaml": "document_path: \".\"\nanalysis_goal: \"Summarize the main patterns and suggest improvements\"\n",
|
|
58
|
+
"seed/templates/document-analysis/project/pipelines/analyzer.pipeline.yaml": "name: analyzer\ndescription: Extract insights from a document or codebase\nversion: 1\n\nstages:\n - name: analysis\n kind: analysis\n agent: analyst\n ralph:\n max_attempts: 3\n context:\n include:\n - input\n",
|
|
59
|
+
"seed/templates/parallel-tasks/metadata.json": "{\n \"name\": \"parallel-tasks\",\n \"version\": \"1.1.0\",\n \"description\": \"Fan-out parallel task execution with consolidation\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"parallel\",\n \"fan-out\",\n \"orchestration\"\n ],\n \"type\": \"template\",\n \"studio_version\": \">=0.2.0\",\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"planner\",\n \"worker\",\n \"consolidator\"\n ]\n }\n }\n}\n",
|
|
60
|
+
"seed/templates/parallel-tasks/project/contracts/consolidated-output.contract.yaml": "name: consolidated-output\nversion: 1\n\nschema:\n required_fields:\n - results\n - summary\n field_constraints:\n - field: results\n type: array\n - field: summary\n type: string\n",
|
|
61
|
+
"seed/templates/parallel-tasks/project/contracts/task-output.contract.yaml": "name: task-output\nversion: 1\n\nschema:\n required_fields:\n - task_id\n - result\n - summary\n",
|
|
62
|
+
"seed/templates/parallel-tasks/project/contracts/task-selection.contract.yaml": "name: task-selection\nversion: 1\n\nschema:\n required_fields:\n - tasks\n field_constraints:\n - field: tasks\n type: array\n min_items: 5\n max_items: 5\n item_fields:\n - id\n - name\n - brief\n",
|
|
63
|
+
"seed/templates/parallel-tasks/project/pipelines/parallel-tasks.pipeline.yaml": "name: parallel-tasks\ndescription: Decompose input into 5 parallel tasks, execute them, then consolidate\nversion: 1\n\nstages:\n - name: task-selection\n kind: planning\n agent: planner\n contract: task-selection\n ralph:\n max_attempts: 3\n context:\n include:\n - input\n\n - group: task-execution\n mode: parallel\n max_iterations: 1\n on_failure: collect-all\n stages:\n - name: task-1\n kind: execution\n agent: worker\n contract: task-output\n ralph:\n max_attempts: 2\n context:\n include:\n - previous_stage_output\n - stage_name\n\n - name: task-2\n kind: execution\n agent: worker\n contract: task-output\n ralph:\n max_attempts: 2\n context:\n include:\n - previous_stage_output\n - stage_name\n\n - name: task-3\n kind: execution\n agent: worker\n contract: task-output\n ralph:\n max_attempts: 2\n context:\n include:\n - previous_stage_output\n - stage_name\n\n - name: task-4\n kind: execution\n agent: worker\n contract: task-output\n ralph:\n max_attempts: 2\n context:\n include:\n - previous_stage_output\n - stage_name\n\n - name: task-5\n kind: execution\n agent: worker\n contract: task-output\n ralph:\n max_attempts: 2\n context:\n include:\n - previous_stage_output\n - stage_name\n\n - name: consolidation\n kind: aggregation\n agent: consolidator\n contract: consolidated-output\n ralph:\n max_attempts: 2\n context:\n include:\n - input\n - all_stage_outputs\n",
|
|
64
|
+
"seed/templates/software-full/metadata.json": "{\n \"name\": \"software-full\",\n \"version\": \"2.2.0\",\n \"description\": \"Software development (full pipeline with QA review)\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"software\",\n \"code\",\n \"development\",\n \"qa\"\n ],\n \"type\": \"template\",\n \"studio_version\": \">=0.2.0\",\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"repo-manager\",\n \"shell\",\n \"search\",\n \"git\",\n \"coder\",\n \"analyst\",\n \"publisher\",\n \"reviewer\"\n ],\n \"recommended\": [\n \"code-conventions\",\n \"git-workflow\"\n ]\n }\n }\n}\n",
|
|
65
|
+
"seed/templates/software-full/project/contracts/brief-analysis.contract.yaml": "name: brief-analysis\nversion: 1\nschema:\n required_fields:\n - summary\n - requirements\n - acceptance_criteria\n",
|
|
66
|
+
"seed/templates/software-full/project/contracts/code-generation.contract.yaml": "name: code-generation\nversion: 1\nschema:\n required_fields:\n - summary\n - files_changed\ntool_calls:\n minimum: 1\n required_tool_groups:\n - [repo_manager-write_file, repo_manager-apply_patch]\n",
|
|
67
|
+
"seed/templates/software-full/project/contracts/implementation-plan.contract.yaml": "name: implementation-plan\nversion: 1\nschema:\n required_fields:\n - summary\n - implementation_steps\n - files_to_modify\n",
|
|
68
|
+
"seed/templates/software-full/project/contracts/publish-changes.contract.yaml": "name: publish-changes\nversion: 2\nschema:\n required_fields:\n - summary\n - branch_name\ntool_calls:\n minimum: 2\n required_tools:\n - git-checkout\n - git-commit\n",
|
|
69
|
+
"seed/templates/software-full/project/contracts/qa-review.contract.yaml": "name: qa-review\nversion: 1\nschema:\n required_fields:\n - status\n - summary\ntool_calls:\n minimum: 1\n required_tools:\n - repo_manager-read_file\npost_validation:\n rejection_detection:\n field: status\n approved_values:\n - approved\n rejected_values:\n - rejected\n - needs_revision\n - failed\n - implementation_incomplete\n - approved_with_notes\n details_field: issues\n summary_field: summary\n constraints:\n - if_field: issues\n operator: array_not_empty\n then: rejected\n",
|
|
70
|
+
"seed/templates/software-full/project/inputs/example.input.yaml": "brief_summary: \"Add a hello world function to src/utils.ts\"\ntarget_page: \"src/utils.ts\"\nacceptance_criteria:\n - \"Function is exported and returns 'Hello, World!'\"\n - \"Function has TypeScript type annotations\"\n",
|
|
71
|
+
"seed/templates/software-full/project/pipelines/feature-builder.pipeline.yaml": "name: feature-builder\ndescription: Analyze a request, plan the implementation, generate code, and QA review\nversion: 2\non_pipeline_start:\n - command: npm install --silent 2>&1 | tail -5\n inject_as: install_output\n - command: date +%Y%m%d-%H%M\n inject_as: run_timestamp\ninput_schema:\n type: structured\n fields:\n - name: brief_summary\n type: text\n required: true\n prompt: Brief summary\n - name: target_page\n type: text\n required: false\n prompt: Target file or page (optional)\n - name: acceptance_criteria\n type: array\n items: text\n prompt: Acceptance criteria\nstages:\n - name: brief-analysis\n kind: analysis\n agent: analyst\n contract: brief-analysis\n ralph:\n max_attempts: 3\n context:\n include:\n - input\n - name: implementation-plan\n kind: planning\n agent: analyst\n contract: implementation-plan\n ralph:\n max_attempts: 3\n context:\n include:\n - input\n - previous_stage_output\n - all_stage_tool_results\n - group: implementation-review\n max_iterations: 3\n stages:\n - name: code-generation\n kind: code\n agent: coder\n contract: code-generation\n ralph:\n max_attempts: 3\n context:\n include:\n - input\n - all_stage_outputs\n - all_stage_tool_results\n - group_feedback\n - name: qa-review\n kind: qa\n agent: reviewer\n contract: qa-review\n ralph:\n max_attempts: 3\n context:\n include:\n - input\n - all_stage_outputs\n - group_feedback\n - name: publish-changes\n kind: publish\n agent: publisher\n contract: publish-changes\n ralph:\n max_attempts: 3\n context:\n include:\n - input\n - all_stage_outputs\n",
|
|
72
|
+
"seed/templates/software/metadata.json": "{\n \"name\": \"software\",\n \"version\": \"1.2.0\",\n \"description\": \"Code generation with repo, shell and search tools\",\n \"author\": \"studio-core\",\n \"license\": \"MIT\",\n \"tags\": [\n \"software\",\n \"code\",\n \"development\"\n ],\n \"type\": \"template\",\n \"studio_version\": \">=0.2.0\",\n \"dependencies\": {\n \"plugins\": {\n \"required\": [\n \"repo-manager\",\n \"shell\",\n \"search\",\n \"coder\",\n \"git\"\n ]\n }\n }\n}\n",
|
|
73
|
+
"seed/templates/software/project/README.md": "# {{PROJECT_NAME}}\n\nGenerated from the `{{TEMPLATE_NAME}}` Studio template.\n\n## Getting started\n\n```bash\nnpm install\nstudio run {{PROJECT_NAME}}/feature-builder --input \"Your task description\"\n```\n\n## Pipelines\n\n- **feature-builder** — Analyze a request and generate code changes\n- **quick-edit** — Apply a focused single-file edit\n\n## Configuration\n\nSet your API key:\n\n```bash\nstudio config set provider anthropic --api-key $ANTHROPIC_API_KEY\n```\n",
|
|
74
|
+
"seed/templates/software/project/contracts/code-output.contract.yaml": "name: code-output\nversion: 1\nschema:\n required_fields:\n - summary\n - files_changed\ntool_calls:\n minimum: 1\n",
|
|
75
|
+
"seed/templates/software/project/contracts/quick-edit-output.contract.yaml": "name: quick-edit-output\nversion: 1\nschema:\n required_fields:\n - summary\n - file_changed\ntool_calls:\n minimum: 1\n",
|
|
76
|
+
"seed/templates/software/project/inputs/example.input.yaml": "brief_summary: \"Add a hello world function to src/utils.ts\"\ntarget_file: \"src/utils.ts\"\nacceptance_criteria:\n - \"Function is exported and returns 'Hello, World!'\"\n",
|
|
77
|
+
"seed/templates/software/project/package.json": "{\n \"name\": \"{{PROJECT_NAME}}\",\n \"version\": \"0.2.0\",\n \"description\": \"{{PROJECT_NAME}} — powered by Studio ({{TEMPLATE_NAME}} template)\",\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"tsx src/index.ts\",\n \"build\": \"tsc\"\n },\n \"dependencies\": {},\n \"devDependencies\": {\n \"typescript\": \"^5.3.0\",\n \"@types/node\": \"^20.0.0\",\n \"tsx\": \"^4.0.0\"\n }\n}\n",
|
|
78
|
+
"seed/templates/software/project/pipelines/feature-builder.pipeline.yaml": "name: feature-builder\ndescription: Analyze a request and generate code changes\nversion: 1\n\ninput_schema:\n type: structured\n fields:\n - name: brief_summary\n type: text\n required: true\n prompt: \"Brief summary\"\n - name: target_page\n type: text\n required: false\n prompt: \"Target page (optional)\"\n - name: acceptance_criteria\n type: array\n items: text\n prompt: \"Acceptance criteria\"\n\nstages:\n - name: code-generation\n kind: code\n agent: coder\n hooks:\n on_stage_complete:\n - command: \"npx tsc --noEmit\"\n on_failure: reject\n - command: \"npx eslint --rule 'no-empty: error' --rule 'no-unused-vars: warn' {{output.files_changed}}\"\n on_failure: reject\n ralph:\n max_attempts: 3\n context:\n include:\n - input\n",
|
|
79
|
+
"seed/templates/software/project/pipelines/quick-edit.pipeline.yaml": "name: quick-edit\ndescription: Apply a focused single-file code edit\nversion: 1\n\ninput_schema:\n type: structured\n fields:\n - name: instruction\n type: text\n required: true\n prompt: \"What to change\"\n - name: target_file\n type: text\n required: true\n prompt: \"File to edit\"\n\nstages:\n - name: edit\n kind: code\n agent: coder\n contract: quick-edit-output\n ralph:\n max_attempts: 2\n context:\n include:\n - input\n",
|
|
80
|
+
"seed/templates/software/project/pipelines/quick-fix.pipeline.yaml": "name: quick-fix\ndescription: Apply a targeted fix or patch to existing code\nversion: 1\n\ninput_schema:\n type: structured\n fields:\n - name: description\n type: text\n required: true\n prompt: \"Describe the fix to apply\"\n\nstages:\n - name: code-fix\n kind: code\n agent: coder\n ralph:\n max_attempts: 3\n context:\n include:\n - input\n",
|
|
81
|
+
"seed/templates/software/project/prisma/schema.prisma": "// {{PROJECT_NAME}} — Prisma schema\n// Docs: https://pris.ly/d/prisma-schema\n\ngenerator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n url = env(\"DATABASE_URL\")\n}\n\n// Add your models below\n",
|
|
82
|
+
"seed/templates/software/project/src/index.ts": "// {{PROJECT_NAME}} — powered by Studio\n// Run pipelines with: studio run {{PROJECT_NAME}}/feature-builder --input \"...\"\nconsole.log('{{PROJECT_NAME}} ready.');\n",
|
|
8
83
|
"studio-config.example.yaml": "# Studio configuration contract — COMMIT this file.\n#\n# config.yaml holds the real values and is gitignored (it contains secrets).\n# To set up a fresh clone:\n#\n# cp .studio/config.example.yaml .studio/config.yaml\n#\n# Every key left uncommented here is REQUIRED in config.yaml — `studio run`\n# stops with a clear error if one is missing. Comment a key out to make it\n# optional.\n#\n# Secrets never belong in this file: reference an environment variable\n# (${VAR}, or ${VAR:-default}) and let config.yaml resolve it.\n\n# Semver range this project needs of Studio itself. `studio run` stops before\n# any stage when the installed CLI falls outside it.\n# studio_version: \">=0.10.0\"\n\n# Binaries this project needs. `studio run` stops before any stage when one is\n# missing from PATH, or falls outside its semver range.\n# requires_binaries:\n# - git\n# - \"node >=18 <=22\"\n\n# providers:\n# anthropic:\n# apiKey: ${ANTHROPIC_API_KEY}\n# openai:\n# apiKey: ${OPENAI_API_KEY}\n# ollama:\n# baseUrl: ${OLLAMA_BASE_URL:-http://localhost:11434}\n\ndefaults:\n provider: ollama\n model: llama3.3\n",
|
|
9
84
|
"studio-config.yaml": "# Studio Configuration\n# This file is gitignored — it contains secrets.\n# See .studio/projects/ for your pipeline configs (those ARE committed).\n\nproviders:\n ollama: {}\n # anthropic:\n # apiKey: ${ANTHROPIC_API_KEY}\n # openai:\n # apiKey: ${OPENAI_API_KEY}\n\ndefaults:\n provider: ollama\n model: llama3.3\n",
|
|
10
85
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundled-assets.js","sourceRoot":"","sources":["../../src/generated/bundled-assets.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AAExC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,gBAAgB,EAAE,+SAA+S;IACjU,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"bundled-assets.js","sourceRoot":"","sources":["../../src/generated/bundled-assets.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,7 @@ import { replayCommand, restartCommand } from './commands/replay.js';
|
|
|
17
17
|
import { validateCommand } from './commands/validate.js';
|
|
18
18
|
import { initCommand } from './commands/init.js';
|
|
19
19
|
import { doctorCommand } from './commands/doctor.js';
|
|
20
|
+
import { upgradeCommand } from './commands/upgrade.js';
|
|
20
21
|
import { configCommand } from './commands/config.js';
|
|
21
22
|
import { toolsCommand } from './commands/tools.js';
|
|
22
23
|
import { integrationsCommand } from './commands/integrations.js';
|
|
@@ -26,6 +27,8 @@ import { projectCommand } from './commands/project.js';
|
|
|
26
27
|
import { apiStartCommand, apiStopCommand, apiStatusCommand } from './commands/api.js';
|
|
27
28
|
import { installExtensionCommand } from './commands/install.js';
|
|
28
29
|
import { createRegistryCommand } from './commands/registry/index.js';
|
|
30
|
+
import { createPluginCommand } from './commands/plugin.js';
|
|
31
|
+
import { createMarketplaceCommand } from './commands/marketplace.js';
|
|
29
32
|
import { usersCommand } from './commands/users.js';
|
|
30
33
|
import { cacheCleanCommand } from './commands/cache.js';
|
|
31
34
|
import { ollamaCommand } from './commands/ollama.js';
|
|
@@ -107,6 +110,10 @@ program
|
|
|
107
110
|
.command('doctor')
|
|
108
111
|
.description('Preflight this machine against the project: Studio version, config contract, required binaries, env vars')
|
|
109
112
|
.action(doctorCommand);
|
|
113
|
+
program
|
|
114
|
+
.command('upgrade [tag]')
|
|
115
|
+
.description('Replace the standalone binary with a release (default: latest; npm installs update through npm)')
|
|
116
|
+
.action(upgradeCommand);
|
|
110
117
|
program
|
|
111
118
|
.command('config <action> [args...]')
|
|
112
119
|
.description('Manage Studio configuration (list, get, set, add-provider)')
|
|
@@ -164,6 +171,8 @@ program
|
|
|
164
171
|
void installExtensionCommand(extension);
|
|
165
172
|
});
|
|
166
173
|
program.addCommand(createRegistryCommand());
|
|
174
|
+
program.addCommand(createMarketplaceCommand());
|
|
175
|
+
program.addCommand(createPluginCommand());
|
|
167
176
|
const cacheCmd = program.command('cache').description('Manage Studio caches');
|
|
168
177
|
cacheCmd
|
|
169
178
|
.command('clean')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What an item *produced*, for the live line. An item's label is derived from
|
|
3
|
+
* its input, so a value the child computes — a classification, a verdict — is
|
|
4
|
+
* blank there and only exists in the child's output. Domain-agnostic: the first
|
|
5
|
+
* few short scalar fields, in declaration order. Long strings are skipped, not
|
|
6
|
+
* truncated — a summary paragraph would swallow the line.
|
|
7
|
+
*/
|
|
8
|
+
export declare function summarizeItemOutput(output: unknown): string | undefined;
|
|
1
9
|
export declare class MapRenderer {
|
|
2
10
|
private spinner;
|
|
3
11
|
private timer;
|
|
@@ -6,6 +14,7 @@ export declare class MapRenderer {
|
|
|
6
14
|
private total;
|
|
7
15
|
private done;
|
|
8
16
|
private failed;
|
|
17
|
+
private lastResult;
|
|
9
18
|
private readonly inFlight;
|
|
10
19
|
/**
|
|
11
20
|
* Begin rendering. Prints a permanent header line, then a live status line
|
|
@@ -19,8 +28,9 @@ export declare class MapRenderer {
|
|
|
19
28
|
/**
|
|
20
29
|
* An item settled. Failures are surfaced immediately as a permanent line
|
|
21
30
|
* (naming the item and its child run ID) — not buried in the end aggregate.
|
|
31
|
+
* A success carries what it produced onto the live line.
|
|
22
32
|
*/
|
|
23
|
-
itemComplete(index: number, status: 'success' | 'failed', label: string, runId?: string, error?: string): void;
|
|
33
|
+
itemComplete(index: number, status: 'success' | 'failed', label: string, runId?: string, error?: string, output?: unknown): void;
|
|
24
34
|
/** Tear down the live line and print the final summary. */
|
|
25
35
|
finish(succeeded: number, failed: number, status: string): void;
|
|
26
36
|
/** Ctrl-C / abort — drop the live line without a summary. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-progress.d.ts","sourceRoot":"","sources":["../../src/output/map-progress.ts"],"names":[],"mappings":"AA6CA,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IAExD;;;;;OAKG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"map-progress.d.ts","sourceRoot":"","sources":["../../src/output/map-progress.ts"],"names":[],"mappings":"AA6CA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAcvE;AAOD,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IAExD;;;;;OAKG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAoBhE,0EAA0E;IAC1E,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7C;;;;OAIG;IACH,YAAY,CACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,GAAG,QAAQ,EAC5B,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,OAAO,GACf,IAAI;IAmBP,2DAA2D;IAC3D,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAc/D,6DAA6D;IAC7D,SAAS,IAAI,IAAI;IAMjB,OAAO,CAAC,UAAU;IAYlB,0EAA0E;IAC1E,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,SAAS;CAMlB"}
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
// unusable for wiki-creator's real workloads (hundreds of items, runs measured
|
|
7
7
|
// in hours). This renderer surfaces, in real time:
|
|
8
8
|
// - a header line naming the fan-out (item count + concurrency),
|
|
9
|
-
// - a live status line: completed/failed counts
|
|
10
|
-
// items currently in flight (works with
|
|
9
|
+
// - a live status line: completed/failed counts, what the last settled item
|
|
10
|
+
// produced, and the identities of the items currently in flight (works with
|
|
11
|
+
// concurrency > 1),
|
|
11
12
|
// - a permanent line the moment an item fails, naming it and its child run ID,
|
|
12
13
|
// - a final summary line.
|
|
13
14
|
//
|
|
@@ -25,10 +26,40 @@ const MAX_INFLIGHT_WIDTH = 60;
|
|
|
25
26
|
const MAX_LABEL_WIDTH = 32;
|
|
26
27
|
/** Max width of an error message on a per-item failure line. */
|
|
27
28
|
const MAX_ERROR_WIDTH = 160;
|
|
29
|
+
/** Max width of the "last: …" result summary. */
|
|
30
|
+
const MAX_RESULT_WIDTH = 40;
|
|
31
|
+
/** How many scalar fields of an item's output make up its result summary. */
|
|
32
|
+
const RESULT_FIELDS = 3;
|
|
28
33
|
function truncate(text, max) {
|
|
29
34
|
const t = text.replace(/\s+/g, ' ').trim();
|
|
30
35
|
return t.length <= max ? t : `${t.slice(0, max - 1)}…`;
|
|
31
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* What an item *produced*, for the live line. An item's label is derived from
|
|
39
|
+
* its input, so a value the child computes — a classification, a verdict — is
|
|
40
|
+
* blank there and only exists in the child's output. Domain-agnostic: the first
|
|
41
|
+
* few short scalar fields, in declaration order. Long strings are skipped, not
|
|
42
|
+
* truncated — a summary paragraph would swallow the line.
|
|
43
|
+
*/
|
|
44
|
+
export function summarizeItemOutput(output) {
|
|
45
|
+
if (typeof output === 'string')
|
|
46
|
+
return output.trim() || undefined;
|
|
47
|
+
if (typeof output === 'number' || typeof output === 'boolean')
|
|
48
|
+
return String(output);
|
|
49
|
+
if (output === null || typeof output !== 'object' || Array.isArray(output))
|
|
50
|
+
return undefined;
|
|
51
|
+
const parts = [];
|
|
52
|
+
for (const value of Object.values(output)) {
|
|
53
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
54
|
+
parts.push(String(value));
|
|
55
|
+
else if (typeof value === 'string' && value.trim() && value.trim().length <= MAX_RESULT_WIDTH) {
|
|
56
|
+
parts.push(value.trim());
|
|
57
|
+
}
|
|
58
|
+
if (parts.length === RESULT_FIELDS)
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
return parts.length ? parts.join(', ') : undefined;
|
|
62
|
+
}
|
|
32
63
|
function truncateList(labels, max) {
|
|
33
64
|
const joined = labels.join(', ');
|
|
34
65
|
return joined.length <= max ? joined : `${joined.slice(0, max - 1)}…`;
|
|
@@ -41,6 +72,7 @@ export class MapRenderer {
|
|
|
41
72
|
total = 0;
|
|
42
73
|
done = 0;
|
|
43
74
|
failed = 0;
|
|
75
|
+
lastResult = null;
|
|
44
76
|
inFlight = new Map();
|
|
45
77
|
/**
|
|
46
78
|
* Begin rendering. Prints a permanent header line, then a live status line
|
|
@@ -54,6 +86,7 @@ export class MapRenderer {
|
|
|
54
86
|
this.total = total;
|
|
55
87
|
this.done = 0;
|
|
56
88
|
this.failed = 0;
|
|
89
|
+
this.lastResult = null;
|
|
57
90
|
this.inFlight.clear();
|
|
58
91
|
console.log(chalk.cyan(` ↳ ${mapName}`) +
|
|
59
92
|
chalk.gray(` — fan-out over ${total} item${total === 1 ? '' : 's'} (concurrency ${concurrency})`));
|
|
@@ -72,8 +105,9 @@ export class MapRenderer {
|
|
|
72
105
|
/**
|
|
73
106
|
* An item settled. Failures are surfaced immediately as a permanent line
|
|
74
107
|
* (naming the item and its child run ID) — not buried in the end aggregate.
|
|
108
|
+
* A success carries what it produced onto the live line.
|
|
75
109
|
*/
|
|
76
|
-
itemComplete(index, status, label, runId, error) {
|
|
110
|
+
itemComplete(index, status, label, runId, error, output) {
|
|
77
111
|
this.inFlight.delete(index);
|
|
78
112
|
if (status === 'failed') {
|
|
79
113
|
this.failed++;
|
|
@@ -83,6 +117,10 @@ export class MapRenderer {
|
|
|
83
117
|
}
|
|
84
118
|
else {
|
|
85
119
|
this.done++;
|
|
120
|
+
const result = summarizeItemOutput(output);
|
|
121
|
+
if (result) {
|
|
122
|
+
this.lastResult = `${truncate(label, MAX_LABEL_WIDTH)} — ${truncate(result, MAX_RESULT_WIDTH)}`;
|
|
123
|
+
}
|
|
86
124
|
}
|
|
87
125
|
if (this.spinner)
|
|
88
126
|
this.spinner.text = this.statusText();
|
|
@@ -109,11 +147,12 @@ export class MapRenderer {
|
|
|
109
147
|
const elapsed = Math.floor((Date.now() - this.startedAt) / 1000);
|
|
110
148
|
const head = chalk.cyan(`${this.done}/${this.total} done`);
|
|
111
149
|
const failStr = this.failed > 0 ? chalk.red(`, ${this.failed} failed`) : '';
|
|
150
|
+
const lastStr = this.lastResult ? chalk.dim(` · last: ${this.lastResult}`) : '';
|
|
112
151
|
const labels = [...this.inFlight.values()].map((f) => f.label);
|
|
113
152
|
const flightStr = labels.length
|
|
114
153
|
? chalk.dim(` · ${labels.length} in flight: ${truncateList(labels, MAX_INFLIGHT_WIDTH)}`)
|
|
115
154
|
: '';
|
|
116
|
-
return `${head}${failStr}${flightStr}${chalk.gray(` (${elapsed}s)`)}`;
|
|
155
|
+
return `${head}${failStr}${lastStr}${flightStr}${chalk.gray(` (${elapsed}s)`)}`;
|
|
117
156
|
}
|
|
118
157
|
/** Print a permanent line above the live status line, then restore it. */
|
|
119
158
|
persist(line) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-progress.js","sourceRoot":"","sources":["../../src/output/map-progress.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,oDAAoD;AACpD,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,mDAAmD;AACnD,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"map-progress.js","sourceRoot":"","sources":["../../src/output/map-progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/output/progress.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAM9D,qBAAa,eAAe;IA8BxB,OAAO,CAAC,QAAQ;IA7BlB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,gBAAgB,CAAiC;IAGzD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAA4B;IAG/C,KAAK,SAAM;IACX,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,gBAAgB,CAAM;IAE9B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAGhB,QAAQ,EAAE,OAAO,EACzB,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAW1E,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,MAAM;IAId,uFAAuF;IACvF,OAAO,CAAC,wBAAwB;IAUhC;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,cAAc;IAItB,SAAS,IAAI,IAAI;IAqBjB,SAAS,IAAI,YAAY;
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/output/progress.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAM9D,qBAAa,eAAe;IA8BxB,OAAO,CAAC,QAAQ;IA7BlB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,gBAAgB,CAAiC;IAGzD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAA4B;IAG/C,KAAK,SAAM;IACX,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,gBAAgB,CAAM;IAE9B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAGhB,QAAQ,EAAE,OAAO,EACzB,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAW1E,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,MAAM;IAId,uFAAuF;IACvF,OAAO,CAAC,wBAAwB;IAUhC;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,cAAc;IAItB,SAAS,IAAI,IAAI;IAqBjB,SAAS,IAAI,YAAY;CAkc1B"}
|
package/dist/output/progress.js
CHANGED
|
@@ -426,7 +426,7 @@ export class ProgressDisplay {
|
|
|
426
426
|
return;
|
|
427
427
|
if (this.jsonMode)
|
|
428
428
|
return;
|
|
429
|
-
this.mapRenderer?.itemComplete(event.index, event.status, event.label ?? `#${event.index}`, event.run_id, event.error);
|
|
429
|
+
this.mapRenderer?.itemComplete(event.index, event.status, event.label ?? `#${event.index}`, event.run_id, event.error, event.output);
|
|
430
430
|
},
|
|
431
431
|
onMapComplete: (event, ctx) => {
|
|
432
432
|
if (ctx && ctx.depth >= 1)
|