steroids-cli 0.12.6 → 0.12.7

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.
Files changed (182) hide show
  1. package/README.md +52 -0
  2. package/dist/commands/gc.d.ts.map +1 -1
  3. package/dist/commands/gc.js +10 -0
  4. package/dist/commands/gc.js.map +1 -1
  5. package/dist/commands/llm-content.d.ts +2 -0
  6. package/dist/commands/llm-content.d.ts.map +1 -0
  7. package/dist/commands/llm-content.js +319 -0
  8. package/dist/commands/llm-content.js.map +1 -0
  9. package/dist/commands/llm.d.ts.map +1 -1
  10. package/dist/commands/llm.js +22 -290
  11. package/dist/commands/llm.js.map +1 -1
  12. package/dist/commands/loop-phases-coder.js +1 -1
  13. package/dist/commands/loop-phases-coder.js.map +1 -1
  14. package/dist/commands/loop-phases-reviewer-follow-ups.d.ts +7 -0
  15. package/dist/commands/loop-phases-reviewer-follow-ups.d.ts.map +1 -0
  16. package/dist/commands/loop-phases-reviewer-follow-ups.js +44 -0
  17. package/dist/commands/loop-phases-reviewer-follow-ups.js.map +1 -0
  18. package/dist/commands/loop-phases-reviewer.d.ts.map +1 -1
  19. package/dist/commands/loop-phases-reviewer.js +6 -45
  20. package/dist/commands/loop-phases-reviewer.js.map +1 -1
  21. package/dist/config/loader.d.ts +4 -0
  22. package/dist/config/loader.d.ts.map +1 -1
  23. package/dist/config/loader.js +27 -0
  24. package/dist/config/loader.js.map +1 -1
  25. package/dist/config/schema.d.ts.map +1 -1
  26. package/dist/config/schema.js +111 -0
  27. package/dist/config/schema.js.map +1 -1
  28. package/dist/config/validator.d.ts.map +1 -1
  29. package/dist/config/validator.js +74 -0
  30. package/dist/config/validator.js.map +1 -1
  31. package/dist/database/intake-queries.d.ts +51 -0
  32. package/dist/database/intake-queries.d.ts.map +1 -0
  33. package/dist/database/intake-queries.js +250 -0
  34. package/dist/database/intake-queries.js.map +1 -0
  35. package/dist/database/queries.d.ts +4 -0
  36. package/dist/database/queries.d.ts.map +1 -1
  37. package/dist/database/queries.js.map +1 -1
  38. package/dist/database/schema.d.ts +2 -2
  39. package/dist/database/schema.d.ts.map +1 -1
  40. package/dist/database/schema.js +49 -0
  41. package/dist/database/schema.js.map +1 -1
  42. package/dist/git/section-pr.d.ts +3 -2
  43. package/dist/git/section-pr.d.ts.map +1 -1
  44. package/dist/git/section-pr.js +95 -15
  45. package/dist/git/section-pr.js.map +1 -1
  46. package/dist/hooks/events.d.ts +10 -1
  47. package/dist/hooks/events.d.ts.map +1 -1
  48. package/dist/hooks/events.js +23 -1
  49. package/dist/hooks/events.js.map +1 -1
  50. package/dist/hooks/integration.d.ts +22 -0
  51. package/dist/hooks/integration.d.ts.map +1 -1
  52. package/dist/hooks/integration.js +52 -0
  53. package/dist/hooks/integration.js.map +1 -1
  54. package/dist/hooks/payload-factories.d.ts +17 -0
  55. package/dist/hooks/payload-factories.d.ts.map +1 -0
  56. package/dist/hooks/payload-factories.js +69 -0
  57. package/dist/hooks/payload-factories.js.map +1 -0
  58. package/dist/hooks/payload-types.d.ts +169 -0
  59. package/dist/hooks/payload-types.d.ts.map +1 -0
  60. package/dist/hooks/payload-types.js +3 -0
  61. package/dist/hooks/payload-types.js.map +1 -0
  62. package/dist/hooks/payload-validation.d.ts +6 -0
  63. package/dist/hooks/payload-validation.d.ts.map +1 -0
  64. package/dist/hooks/payload-validation.js +186 -0
  65. package/dist/hooks/payload-validation.js.map +1 -0
  66. package/dist/hooks/payload.d.ts +6 -334
  67. package/dist/hooks/payload.d.ts.map +1 -1
  68. package/dist/hooks/payload.js +21 -307
  69. package/dist/hooks/payload.js.map +1 -1
  70. package/dist/hooks/template-resolvers.d.ts +9 -0
  71. package/dist/hooks/template-resolvers.d.ts.map +1 -0
  72. package/dist/hooks/template-resolvers.js +133 -0
  73. package/dist/hooks/template-resolvers.js.map +1 -0
  74. package/dist/hooks/templates.d.ts +13 -0
  75. package/dist/hooks/templates.d.ts.map +1 -1
  76. package/dist/hooks/templates.js +40 -118
  77. package/dist/hooks/templates.js.map +1 -1
  78. package/dist/index.js +2 -0
  79. package/dist/index.js.map +1 -1
  80. package/dist/intake/github-gate-api.d.ts +37 -0
  81. package/dist/intake/github-gate-api.d.ts.map +1 -0
  82. package/dist/intake/github-gate-api.js +210 -0
  83. package/dist/intake/github-gate-api.js.map +1 -0
  84. package/dist/intake/github-gate.d.ts +22 -0
  85. package/dist/intake/github-gate.d.ts.map +1 -0
  86. package/dist/intake/github-gate.js +261 -0
  87. package/dist/intake/github-gate.js.map +1 -0
  88. package/dist/intake/github-issues-connector.d.ts +26 -0
  89. package/dist/intake/github-issues-connector.d.ts.map +1 -0
  90. package/dist/intake/github-issues-connector.js +350 -0
  91. package/dist/intake/github-issues-connector.js.map +1 -0
  92. package/dist/intake/index.d.ts +10 -0
  93. package/dist/intake/index.d.ts.map +1 -0
  94. package/dist/intake/index.js +26 -0
  95. package/dist/intake/index.js.map +1 -0
  96. package/dist/intake/pipeline-glue.d.ts +61 -0
  97. package/dist/intake/pipeline-glue.d.ts.map +1 -0
  98. package/dist/intake/pipeline-glue.js +137 -0
  99. package/dist/intake/pipeline-glue.js.map +1 -0
  100. package/dist/intake/poller.d.ts +28 -0
  101. package/dist/intake/poller.d.ts.map +1 -0
  102. package/dist/intake/poller.js +186 -0
  103. package/dist/intake/poller.js.map +1 -0
  104. package/dist/intake/post-pr.d.ts +17 -0
  105. package/dist/intake/post-pr.d.ts.map +1 -0
  106. package/dist/intake/post-pr.js +78 -0
  107. package/dist/intake/post-pr.js.map +1 -0
  108. package/dist/intake/registry.d.ts +17 -0
  109. package/dist/intake/registry.d.ts.map +1 -0
  110. package/dist/intake/registry.js +57 -0
  111. package/dist/intake/registry.js.map +1 -0
  112. package/dist/intake/reviewer-approval.d.ts +10 -0
  113. package/dist/intake/reviewer-approval.d.ts.map +1 -0
  114. package/dist/intake/reviewer-approval.js +70 -0
  115. package/dist/intake/reviewer-approval.js.map +1 -0
  116. package/dist/intake/task-reference.d.ts +10 -0
  117. package/dist/intake/task-reference.d.ts.map +1 -0
  118. package/dist/intake/task-reference.js +23 -0
  119. package/dist/intake/task-reference.js.map +1 -0
  120. package/dist/intake/task-templates.d.ts +25 -0
  121. package/dist/intake/task-templates.d.ts.map +1 -0
  122. package/dist/intake/task-templates.js +98 -0
  123. package/dist/intake/task-templates.js.map +1 -0
  124. package/dist/intake/types.d.ts +103 -0
  125. package/dist/intake/types.d.ts.map +1 -0
  126. package/dist/intake/types.js +3 -0
  127. package/dist/intake/types.js.map +1 -0
  128. package/dist/orchestrator/coder.d.ts +2 -0
  129. package/dist/orchestrator/coder.d.ts.map +1 -1
  130. package/dist/orchestrator/coder.js +25 -2
  131. package/dist/orchestrator/coder.js.map +1 -1
  132. package/dist/providers/gemini.d.ts.map +1 -1
  133. package/dist/providers/gemini.js +7 -14
  134. package/dist/providers/gemini.js.map +1 -1
  135. package/dist/providers/interface.d.ts.map +1 -1
  136. package/dist/providers/interface.js +50 -0
  137. package/dist/providers/interface.js.map +1 -1
  138. package/dist/runners/orchestrator-loop.d.ts.map +1 -1
  139. package/dist/runners/orchestrator-loop.js +7 -0
  140. package/dist/runners/orchestrator-loop.js.map +1 -1
  141. package/dist/runners/system-pressure.d.ts +26 -0
  142. package/dist/runners/system-pressure.d.ts.map +1 -0
  143. package/dist/runners/system-pressure.js +128 -0
  144. package/dist/runners/system-pressure.js.map +1 -0
  145. package/dist/runners/wakeup-checks.d.ts.map +1 -1
  146. package/dist/runners/wakeup-checks.js +16 -1
  147. package/dist/runners/wakeup-checks.js.map +1 -1
  148. package/dist/runners/wakeup-global-cleanup.d.ts +20 -0
  149. package/dist/runners/wakeup-global-cleanup.d.ts.map +1 -0
  150. package/dist/runners/wakeup-global-cleanup.js +317 -0
  151. package/dist/runners/wakeup-global-cleanup.js.map +1 -0
  152. package/dist/runners/wakeup-needed.d.ts +5 -0
  153. package/dist/runners/wakeup-needed.d.ts.map +1 -0
  154. package/dist/runners/wakeup-needed.js +42 -0
  155. package/dist/runners/wakeup-needed.js.map +1 -0
  156. package/dist/runners/wakeup-project-parallel.d.ts +13 -0
  157. package/dist/runners/wakeup-project-parallel.d.ts.map +1 -0
  158. package/dist/runners/wakeup-project-parallel.js +238 -0
  159. package/dist/runners/wakeup-project-parallel.js.map +1 -0
  160. package/dist/runners/wakeup-project.d.ts +10 -0
  161. package/dist/runners/wakeup-project.d.ts.map +1 -0
  162. package/dist/runners/wakeup-project.js +209 -0
  163. package/dist/runners/wakeup-project.js.map +1 -0
  164. package/dist/runners/wakeup-registration.d.ts +2 -0
  165. package/dist/runners/wakeup-registration.d.ts.map +1 -0
  166. package/dist/runners/wakeup-registration.js +42 -0
  167. package/dist/runners/wakeup-registration.js.map +1 -0
  168. package/dist/runners/wakeup-types.d.ts +25 -0
  169. package/dist/runners/wakeup-types.d.ts.map +1 -0
  170. package/dist/runners/wakeup-types.js +3 -0
  171. package/dist/runners/wakeup-types.js.map +1 -0
  172. package/dist/runners/wakeup.d.ts +4 -24
  173. package/dist/runners/wakeup.d.ts.map +1 -1
  174. package/dist/runners/wakeup.js +25 -601
  175. package/dist/runners/wakeup.js.map +1 -1
  176. package/dist/workspace/pool.d.ts.map +1 -1
  177. package/dist/workspace/pool.js +37 -4
  178. package/dist/workspace/pool.js.map +1 -1
  179. package/migrations/025_add_intake_tables.sql +51 -0
  180. package/migrations/026_add_section_coder_and_pr_fields.sql +11 -0
  181. package/migrations/manifest.json +18 -2
  182. package/package.json +1 -1
package/README.md CHANGED
@@ -34,6 +34,7 @@ Steroids is an AI-powered task orchestration system that automates software deve
34
34
  * [Web Dashboard](#web-dashboard)
35
35
  * [CLI Commands](#cli-commands)
36
36
  * [Runner Daemon](#runner-daemon)
37
+ * [Bug Intake](#bug-intake)
37
38
  * [Coordinator System](#coordinator-system)
38
39
  * [Disputes](#disputes)
39
40
  * [Hooks](#hooks)
@@ -116,6 +117,7 @@ pending → in_progress → review → completed
116
117
  * **Multi-provider support** — Claude, Codex (OpenAI), Gemini
117
118
  * **CLI-first workflow** for power users and automation
118
119
  * **Background runner daemon** to process tasks without babysitting
120
+ * **Bug intake pipeline** for polling external reports, triaging them, and driving triage/reproduction/fix work
119
121
  * **Event hooks** — trigger scripts/webhooks on task completion, project events
120
122
  * **Multi-project support** with global project registry
121
123
  * **Web dashboard** for monitoring progress across projects
@@ -405,6 +407,20 @@ The daemon:
405
407
 
406
408
  ---
407
409
 
410
+ ## Bug Intake
411
+
412
+ Steroids can ingest external bug reports, normalize them into the project database, and move them through a deterministic `triage -> reproduction -> fix` workflow.
413
+
414
+ - Intake connectors poll during `steroids runners wakeup`, honoring each connector's poll interval and persisted cursor state.
415
+ - GitHub intake can also accept signed inbound webhooks at `POST /webhooks/intake/:connector`.
416
+ - New reports can open a GitHub approval issue, then create internal intake tasks only after the gate is approved.
417
+ - Intake tasks stay phase-specific: triage decides `close | reproduce | fix`, reproduction decides `close | retry | fix`, and approved tasks advance the report without ad hoc state transitions.
418
+ - The dashboard and API expose intake reports, summary stats, and connector health so you can monitor the pipeline without digging through the database.
419
+
420
+ This is intended for bug-report funnels such as GitHub Issues or Sentry where you want external reports to become tightly scoped internal work instead of free-form backlog noise.
421
+
422
+ ---
423
+
408
424
  ## Coordinator System
409
425
 
410
426
  When the coder and reviewer get stuck in a rejection loop, the **coordinator** intervenes automatically at rejection thresholds (2, 5, and 9 rejections):
@@ -498,6 +514,15 @@ ai:
498
514
  provider: claude
499
515
  model: claude-sonnet-4
500
516
 
517
+ git:
518
+ remote: origin
519
+ branch: main
520
+ prAssignees: # Optional GitHub assignees for auto-created section PRs
521
+ - "@me"
522
+ prReviewers: # Optional GitHub reviewers or teams for auto-created section PRs
523
+ - octocat
524
+ - my-org/platform-team
525
+
501
526
  output:
502
527
  format: table
503
528
  colors: true
@@ -541,8 +566,35 @@ logs:
541
566
  backup:
542
567
  enabled: true
543
568
  retention: 7d
569
+
570
+ intake:
571
+ enabled: false
572
+ pollIntervalMinutes: 15
573
+ maxReportsPerPoll: 50
574
+ connectors:
575
+ sentry:
576
+ enabled: false
577
+ baseUrl: https://sentry.io
578
+ organization: ""
579
+ project: ""
580
+ authTokenEnvVar: SENTRY_AUTH_TOKEN
581
+ webhookSecretEnvVar: SENTRY_WEBHOOK_SECRET
582
+ github:
583
+ enabled: false
584
+ apiBaseUrl: https://api.github.com
585
+ owner: ""
586
+ repo: ""
587
+ tokenEnvVar: GITHUB_TOKEN
588
+ webhookSecretEnvVar: GITHUB_WEBHOOK_SECRET
589
+ labels: []
544
590
  ```
545
591
 
592
+ `intake` defines shared bug-intake connector settings. Validation rejects `intake.enabled: true` unless at least one connector is enabled and its required identifiers are configured.
593
+
594
+ The GitHub Issues connector uses the installed `gh` CLI for pull and push operations. The token named by `intake.connectors.github.tokenEnvVar` must be present in the environment when intake runs.
595
+ Inbound signed webhooks use `POST /webhooks/intake/:connector` and validate HMAC-SHA256 signatures against the connector secret named by `webhookSecretEnvVar`.
596
+ Enabled intake connectors are polled during the regular `steroids runners wakeup` cycle, honoring `pollIntervalMinutes` and persisting normalized reports plus per-connector cursor state in the project database.
597
+
546
598
  ### Global Config (`~/.steroids/config.yaml`)
547
599
 
548
600
  Same schema — acts as default, overridden by project config.
@@ -1 +1 @@
1
- {"version":3,"file":"gc.d.ts","sourceRoot":"","sources":["../../src/commands/gc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAwDnD,eAAO,MAAM,SAAS,uDAqDpB,CAAC"}
1
+ {"version":3,"file":"gc.d.ts","sourceRoot":"","sources":["../../src/commands/gc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA0DnD,eAAO,MAAM,SAAS,uDAuDpB,CAAC"}
@@ -36,6 +36,7 @@ const HELP = (0, help_js_1.generateHelp)({
36
36
  { command: 'steroids backup', description: 'Create backups' },
37
37
  ],
38
38
  });
39
+ const wakeup_global_cleanup_js_1 = require("../runners/wakeup-global-cleanup.js");
39
40
  const base_command_js_1 = require("../cli/base-command.js");
40
41
  exports.gcCommand = (0, base_command_js_1.defineCommand)({
41
42
  name: 'gc',
@@ -61,6 +62,7 @@ exports.gcCommand = (0, base_command_js_1.defineCommand)({
61
62
  orphanedIds: 0,
62
63
  staleRunners: 0,
63
64
  tempFiles: 0,
65
+ providerHomes: 0,
64
66
  vacuumedBytes: 0,
65
67
  };
66
68
  /* REFACTOR_MANUAL */ (0, connection_js_1.withDatabase)(projectPath, (db) => {
@@ -75,6 +77,7 @@ exports.gcCommand = (0, base_command_js_1.defineCommand)({
75
77
  // Clean temp files
76
78
  if (runAll || values['temp-files']) {
77
79
  result.tempFiles = cleanTempFiles(projectPath, dryRun);
80
+ result.providerHomes = (0, wakeup_global_cleanup_js_1.cleanStaleProviderHomes)(dryRun, () => { });
78
81
  }
79
82
  // Vacuum database
80
83
  if (runAll || values.vacuum) {
@@ -243,6 +246,7 @@ function outputResult(result, json, dryRun) {
243
246
  orphanedIds: result.orphanedIds,
244
247
  staleRunners: result.staleRunners,
245
248
  tempFiles: result.tempFiles,
249
+ providerHomes: result.providerHomes,
246
250
  vacuumedBytes: result.vacuumedBytes,
247
251
  },
248
252
  error: null,
@@ -268,6 +272,12 @@ function outputResult(result, json, dryRun) {
268
272
  else {
269
273
  console.log(` - No temp files found`);
270
274
  }
275
+ if (result.providerHomes > 0) {
276
+ console.log(` \u2713 ${prefix}Cleaned ${result.providerHomes} stale provider home dir(s)`);
277
+ }
278
+ else {
279
+ console.log(` - No stale provider homes found`);
280
+ }
271
281
  if (result.vacuumedBytes > 0) {
272
282
  console.log(` \u2713 ${prefix}Vacuumed database (${formatSize(result.vacuumedBytes)} ${dryRun ? 'potential' : 'saved'})`);
273
283
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gc.js","sourceRoot":"","sources":["../../src/commands/gc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gc.js","sourceRoot":"","sources":["../../src/commands/gc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const LLM_INSTRUCTIONS = "# STEROIDS LLM QUICK REFERENCE\n\n## WHAT IS STEROIDS\nSteroids=automated task orchestration system.\nIt manages tasks and invokes LLM agents (coders/reviewers) to execute them.\nThe system spawns separate LLM processes for coding and reviewing.\nDeterministic daemon \u2014 never makes decisions, just follows the state machine.\n\n## DATABASE ACCESS RULES (CRITICAL)\n- Never touch '.steroids/steroids.db' directly \u2014 no raw SQL, no sqlite3.\n- Use 'steroids llm' first to understand how to inspect or manipulate the system.\n- Read/write operations must go through the steroids CLI only.\n\n## TASK SIZING (CRITICAL)\n\nTasks should be PR-sized chunks of work \u2014 not individual classes or functions,\nbut whole testable pieces of functionality. Think \"what would make a good pull request?\"\n\nGOOD task sizing:\n- \"Implement user authentication endpoint with tests\"\n- \"Add section dependency graph visualization\"\n- \"Build CSV export for task reports\"\n\nBAD task sizing (too granular):\n- \"Create UserService class\"\n- \"Add validateEmail helper function\"\n- \"Write test for login method\"\n\nBAD task sizing (too large):\n- \"Build the entire frontend\"\n- \"Implement all API endpoints\"\n\nEach task should produce a reviewable, testable unit of work that can be\nmerged independently. The reviewer needs enough context to verify correctness,\nand the coder needs enough scope to make meaningful progress.\n\n## TASK STATE MACHINE\n\n### All 8 Statuses\n\n| Marker | Status | Terminal? | Runner picks it? | Description |\n|--------|-------------|-----------|-------------------|------------------------------------------------|\n| [ ] | pending | No | YES \u2192 coder | Not started, waiting for coder |\n| [-] | in_progress | No | YES \u2192 coder | Coder is actively working |\n| [o] | review | No | YES \u2192 reviewer | Coder finished, waiting for reviewer |\n| [x] | completed | YES | No | Reviewer approved, code pushed |\n| [!] | disputed | YES | No | Coder/reviewer disagreement, code pushed |\n| [F] | failed | YES | No | Exceeded 15 rejections, needs human |\n| [S] | skipped | YES | No | Fully external \u2014 nothing to code |\n| [s] | partial | YES | No | Some coded, rest needs external setup |\n\nCRITICAL: skipped [S] and partial [s] are TERMINAL states. The runner will NEVER\npick them up for coding. Once a task is marked partial/skipped, it is DONE from the\nrunner's perspective. If coding is still needed, reset to pending manually.\n\n### State Transitions\n\npending [ ] \u2192 in_progress [-] \u2192 review [o] \u2192 completed [x] (approved)\n \u2193 rejected \u2192 back to in_progress [-]\n \u2193 disputed \u2192 disputed [!] (code pushed, move on)\n if 15 rejections \u2192 failed [F] (full stop)\nHuman can mark at any time \u2192 skipped [S] or partial [s] (terminal)\n\n### Coordinator Intervention\nAt rejection thresholds [2, 5, 9], a coordinator LLM is invoked to analyze the\nrejection pattern and provide guidance to both coder and reviewer. This breaks\ncoder/reviewer deadlocks without human intervention.\n\n## TASK SELECTION ALGORITHM\n\nRunner selects tasks in strict priority order:\n\n Priority 1: review [o] \u2014 complete reviews before starting new work\n Priority 2: in_progress [-] \u2014 resume incomplete work\n Priority 3: pending [ ] \u2014 start new work\n\nWithin each priority, ordered by: section position (lower=first), then created_at (older=first).\n\n### Filters Applied Before Selection\n1. Terminal statuses excluded: completed, disputed, failed, skipped, partial\n2. Tasks in skipped sections excluded (unless runner focused on specific section)\n3. Tasks in sections with UNMET DEPENDENCIES excluded (see below)\n4. Tasks locked by another runner excluded\n\nIf no selectable task exists \u2192 runner goes idle.\n\n## SECTION DEPENDENCIES\n\nSections can declare dependencies on other sections:\n steroids sections depends-on <A> <B> \u2192 Section A depends on Section B\n\nEffect: ALL tasks in section B must be completed before ANY task in section A\ncan be picked by the runner. \"Completed\" means status=completed (not just\nskipped/partial \u2014 those count as incomplete for dependency purposes).\n\nDependency checks:\n- Cycle detection prevents circular dependencies\n- Runner evaluates dependencies at task selection time\n- Use `steroids sections graph` to visualize the dependency tree\n\nCommands:\n steroids sections depends-on <id> <dep-id> # add dependency\n steroids sections no-depends-on <id> <dep-id> # remove dependency\n steroids sections list --deps # show deps inline\n steroids sections graph # ASCII dependency tree\n steroids sections graph --mermaid # Mermaid syntax\n steroids sections graph --json # JSON output\n\n## ARCHITECTURE\n- Tasks stored in .steroids/steroids.db (SQLite, per project)\n- Runner daemon executes the loop (one per project)\n- Coder LLM: implements task, commits, submits for review\n- Reviewer LLM: verifies implementation, approves or rejects\n- Coordinator LLM: breaks deadlocks at rejection thresholds [2, 5, 9]\n- Build verification: orchestrator re-runs build+tests after coder submits\n- If build/tests fail \u2192 auto-reject back to in_progress (coder fixes)\n\n## MULTI-PROJECT\n- Multiple projects can have runners simultaneously\n- Each runner bound to ONE project only\n- Global registry at ~/.steroids/steroids.db tracks all projects\n- NEVER modify files outside current project\n\n## KEY COMMANDS\n\n### View Tasks\nsteroids tasks stats # task counts by status\nsteroids tasks # pending tasks (current project)\nsteroids tasks --status active # in_progress+review (current project)\nsteroids tasks --status active --global # active across ALL projects\nsteroids tasks --status all # all tasks\nsteroids tasks audit <id> # view task spec, history, rejection notes\n\n### Add Tasks\nsteroids tasks add \"Title\" --section <id> --source <spec-file>\nsteroids tasks add \"Title\" --section <id> --source spec.md --file src/foo.ts --line 42\nsteroids tasks feedback \"Advisory note\"\n\nOptions:\n --section <id> Section to add the task to (required unless --feedback)\n --source <file> Specification markdown file (required unless --feedback)\n --file <path> Anchor task to a specific file in the codebase\n File must be committed in git (not dirty/untracked)\n Auto-captures: commit SHA of last change + content hash\n Coder/reviewer prompts will reference this exact location\n --line <number> Line number in the anchored file (requires --file)\n --feedback Add to skipped \"Needs User Input\" section for human review\n Skips --section and --source requirements\n\nBEST PRACTICE: When generating tasks from documentation or specs, commit the\ndocumentation first, then fill in ALL values including optional ones:\n --source pointing to the committed spec file\n --file pointing to the relevant source file in the codebase\n --line pointing to the exact line where work applies\nThis gives the coder/reviewer maximum context and traceability.\n\n### Manage Tasks\nsteroids tasks update <id> --status <s> --actor model --model <m>\n statuses: pending, in_progress, review, completed, skipped, partial\nsteroids tasks update <id> --source <file> # fix/change spec file\nsteroids tasks update <id> --title \"New title\" # rename task\nsteroids tasks update <id> --section <id> # move to different section\nsteroids tasks update <id> --file <path> --line <n> # change file anchor\nsteroids tasks approve <id> --model <m> [--notes \"msg\"] # mark completed\nsteroids tasks reject <id> --model <m> --notes \"feedback\" # back to pending\nsteroids tasks skip <id> --notes \"reason\" # external setup, skip it\nsteroids tasks skip <id> --partial --notes \"reason\" # coded some, rest external\n\n### Sections\nsteroids sections list # list sections\nsteroids sections list --deps # list with dependencies shown\nsteroids sections skip <id> # exclude from runner\nsteroids sections unskip <id> # include in runner\nsteroids sections priority <id> <val> # set priority (0-100 or high/medium/low)\nsteroids sections depends-on <A> <B> # A depends on B (B must complete first)\nsteroids sections no-depends-on <A> <B> # remove dependency\nsteroids sections graph # show dependency graph\n\n### Runners (daemon that executes tasks)\nsteroids runners list # all runners (all projects)\nsteroids runners start --detach # start background daemon\nsteroids runners start --section \"X\" # focus on specific section\nsteroids runners stop --all # stop all\nsteroids runners status # current state\nsteroids runners logs <pid> # view daemon output\nsteroids runners wakeup # poll intake + restart stale runners\n\nNOTE: Stopping a runner is temporary \u2014 the wakeup cron will respawn it.\nTo permanently stop a runner, DISABLE the project first:\n steroids projects disable # then steroids runners stop --all\n\n### Projects\nsteroids projects list # all registered projects\n\n### Web Dashboard\nsteroids web # clone (first run) and launch dashboard\nsteroids web update # pull latest + reinstall deps\nsteroids web stop # stop running dashboard\nsteroids web status # check if dashboard is running\nsteroids web config # manage web dashboard configuration\n\n## BUG INTAKE\n\nExternal bug intake is config-driven and currently supports the GitHub Issues\nconnector. If `intake.connectors.sentry.enabled=true`, registry construction\nfails fast because the Sentry runtime connector is not implemented here.\n\nKey concepts:\n- Connector: pulls normalized reports from an external source into Steroids\n- Intake report: stored record keyed by source + external_id\n- Approval gate: GitHub issue flow that approves or rejects intake reports\n- Intake hooks: `intake.received`, `intake.triaged`, `intake.pr_created`\n- Intake pipeline tasks: `Triage intake report ...`, `Reproduce intake report ...`,\n `Fix intake report ...`\n\nUseful commands:\n steroids config show intake # inspect merged intake config\n steroids config schema intake # JSON Schema for intake settings\n steroids config validate # validate connector config\n steroids hooks list --event intake.received # inspect intake automation hooks\n steroids runners wakeup # poll due connectors + sync gate issues\n steroids web # view intake reports in dashboard\n\nIntake report statuses:\n open -> triaged -> in_progress -> resolved\n \\-> ignored\n\n## COMMON OPERATIONS\n\n### Start automation\nsteroids runners start --detach # daemon picks tasks and invokes coders/reviewers\n\n### Check what's happening\nsteroids tasks --status active --global # see all active work\nsteroids runners list # see all running daemons\n\n### Unblock stuck task in review\nsteroids tasks approve <id> --model human # approve manually\nsteroids tasks reject <id> --model human --notes \"reason\" # reject manually\n\n### Restart failed task\nsteroids tasks update <id> --status pending --reset-rejections # reset to pending with fresh count\n\n### Fix incorrectly marked partial/skipped tasks\nsteroids tasks update <id> --status pending --actor human:cli\n# Use when: a task was marked partial/skipped but still needs coding\n\n### Skip external setup task\nsteroids tasks skip <id> --notes \"spec says SKIP, needs Cloud SQL setup\"\n# Use when: spec says SKIP/MANUAL, requires cloud console, account creation, etc.\n# --partial: use if you coded some parts but rest needs human action\n\n## PROJECT SETUP\n\nSECTIONS = Features or Functional Areas\n - Each section represents ONE cohesive piece of functionality\n - Sections should be independent enough to be worked on in isolation\n - Sections have priorities and can depend on other sections\n\nTASKS = PR-Sized Implementation Units\n - Each task produces a reviewable, testable unit of work\n - Tasks must have a specification file explaining exactly what to build\n - Tasks are ordered within sections \u2014 earlier tasks may set up later ones\n\nSPECIFICATIONS = Markdown files describing what to build\n - Include: purpose, requirements, examples, acceptance criteria\n - Reference existing code patterns the implementation should follow\n - Create a specs/ directory with markdown files\n\nINITIALIZING A PROJECT:\n 1. steroids init -y # non-interactive, accept defaults\n 2. Create specs/ with your specifications\n 3. steroids sections add \"Phase 1: Feature Name\"\n 4. steroids tasks add \"Task title\" --section <id> --source specs/spec.md\n 5. steroids loop\n\n## DATABASE MIGRATIONS (IMPORTANT)\n\nEach project has its own SQLite database (.steroids/steroids.db). When Steroids is\nupdated with schema changes, older project databases need migration.\n\nMigrations run AUTOMATICALLY on any command that opens the database. However, if a\nproject hasn't been used for a while and the schema has drifted significantly,\nauto-migration may fail.\n\n### Before Adding Tasks to an Existing Project\nAlways verify the database is healthy first:\n steroids health # checks DB, runs auto-migration\n\nIf you see \"Database schema is out of date\" errors:\n STEROIDS_AUTO_MIGRATE=1 steroids health # force migration + health check\n\n### How Migrations Work\n- Migration files live in migrations/ (SQL with UP/DOWN sections)\n- Applied automatically when the database is opened\n- A backup is created before each migration (.steroids/backups/)\n- Safe to run multiple times (idempotent)\n- If migration fails: fix the issue, then re-run any steroids command\n\n### For LLM Agents\nALWAYS run `steroids health` before adding the first task to a project you haven't\ntouched recently. This ensures the schema is current and prevents cryptic SQL errors\nduring task creation or runner execution.\n\n## IMPORTANT NOTES\n- Task spec is in source file (see tasks audit output)\n- Max 15 rejections before task fails; coordinator intervenes at [2, 5, 9]\n- Runner auto-restarts via cron (steroids runners cron install)\n- Each project isolated: own database, own runner\n- Section dependencies block entire sections, not individual tasks\n- Build+test verification happens automatically after coder submits\n- Always run build AND tests before submitting for review\n- Never modify code outside the task scope\n- If stuck, create a dispute rather than guessing\n";
2
+ //# sourceMappingURL=llm-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-content.d.ts","sourceRoot":"","sources":["../../src/commands/llm-content.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,yreA0T5B,CAAC"}
@@ -0,0 +1,319 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LLM_INSTRUCTIONS = void 0;
4
+ exports.LLM_INSTRUCTIONS = `# STEROIDS LLM QUICK REFERENCE
5
+
6
+ ## WHAT IS STEROIDS
7
+ Steroids=automated task orchestration system.
8
+ It manages tasks and invokes LLM agents (coders/reviewers) to execute them.
9
+ The system spawns separate LLM processes for coding and reviewing.
10
+ Deterministic daemon — never makes decisions, just follows the state machine.
11
+
12
+ ## DATABASE ACCESS RULES (CRITICAL)
13
+ - Never touch '.steroids/steroids.db' directly — no raw SQL, no sqlite3.
14
+ - Use 'steroids llm' first to understand how to inspect or manipulate the system.
15
+ - Read/write operations must go through the steroids CLI only.
16
+
17
+ ## TASK SIZING (CRITICAL)
18
+
19
+ Tasks should be PR-sized chunks of work — not individual classes or functions,
20
+ but whole testable pieces of functionality. Think "what would make a good pull request?"
21
+
22
+ GOOD task sizing:
23
+ - "Implement user authentication endpoint with tests"
24
+ - "Add section dependency graph visualization"
25
+ - "Build CSV export for task reports"
26
+
27
+ BAD task sizing (too granular):
28
+ - "Create UserService class"
29
+ - "Add validateEmail helper function"
30
+ - "Write test for login method"
31
+
32
+ BAD task sizing (too large):
33
+ - "Build the entire frontend"
34
+ - "Implement all API endpoints"
35
+
36
+ Each task should produce a reviewable, testable unit of work that can be
37
+ merged independently. The reviewer needs enough context to verify correctness,
38
+ and the coder needs enough scope to make meaningful progress.
39
+
40
+ ## TASK STATE MACHINE
41
+
42
+ ### All 8 Statuses
43
+
44
+ | Marker | Status | Terminal? | Runner picks it? | Description |
45
+ |--------|-------------|-----------|-------------------|------------------------------------------------|
46
+ | [ ] | pending | No | YES → coder | Not started, waiting for coder |
47
+ | [-] | in_progress | No | YES → coder | Coder is actively working |
48
+ | [o] | review | No | YES → reviewer | Coder finished, waiting for reviewer |
49
+ | [x] | completed | YES | No | Reviewer approved, code pushed |
50
+ | [!] | disputed | YES | No | Coder/reviewer disagreement, code pushed |
51
+ | [F] | failed | YES | No | Exceeded 15 rejections, needs human |
52
+ | [S] | skipped | YES | No | Fully external — nothing to code |
53
+ | [s] | partial | YES | No | Some coded, rest needs external setup |
54
+
55
+ CRITICAL: skipped [S] and partial [s] are TERMINAL states. The runner will NEVER
56
+ pick them up for coding. Once a task is marked partial/skipped, it is DONE from the
57
+ runner's perspective. If coding is still needed, reset to pending manually.
58
+
59
+ ### State Transitions
60
+
61
+ pending [ ] → in_progress [-] → review [o] → completed [x] (approved)
62
+ ↓ rejected → back to in_progress [-]
63
+ ↓ disputed → disputed [!] (code pushed, move on)
64
+ if 15 rejections → failed [F] (full stop)
65
+ Human can mark at any time → skipped [S] or partial [s] (terminal)
66
+
67
+ ### Coordinator Intervention
68
+ At rejection thresholds [2, 5, 9], a coordinator LLM is invoked to analyze the
69
+ rejection pattern and provide guidance to both coder and reviewer. This breaks
70
+ coder/reviewer deadlocks without human intervention.
71
+
72
+ ## TASK SELECTION ALGORITHM
73
+
74
+ Runner selects tasks in strict priority order:
75
+
76
+ Priority 1: review [o] — complete reviews before starting new work
77
+ Priority 2: in_progress [-] — resume incomplete work
78
+ Priority 3: pending [ ] — start new work
79
+
80
+ Within each priority, ordered by: section position (lower=first), then created_at (older=first).
81
+
82
+ ### Filters Applied Before Selection
83
+ 1. Terminal statuses excluded: completed, disputed, failed, skipped, partial
84
+ 2. Tasks in skipped sections excluded (unless runner focused on specific section)
85
+ 3. Tasks in sections with UNMET DEPENDENCIES excluded (see below)
86
+ 4. Tasks locked by another runner excluded
87
+
88
+ If no selectable task exists → runner goes idle.
89
+
90
+ ## SECTION DEPENDENCIES
91
+
92
+ Sections can declare dependencies on other sections:
93
+ steroids sections depends-on <A> <B> → Section A depends on Section B
94
+
95
+ Effect: ALL tasks in section B must be completed before ANY task in section A
96
+ can be picked by the runner. "Completed" means status=completed (not just
97
+ skipped/partial — those count as incomplete for dependency purposes).
98
+
99
+ Dependency checks:
100
+ - Cycle detection prevents circular dependencies
101
+ - Runner evaluates dependencies at task selection time
102
+ - Use \`steroids sections graph\` to visualize the dependency tree
103
+
104
+ Commands:
105
+ steroids sections depends-on <id> <dep-id> # add dependency
106
+ steroids sections no-depends-on <id> <dep-id> # remove dependency
107
+ steroids sections list --deps # show deps inline
108
+ steroids sections graph # ASCII dependency tree
109
+ steroids sections graph --mermaid # Mermaid syntax
110
+ steroids sections graph --json # JSON output
111
+
112
+ ## ARCHITECTURE
113
+ - Tasks stored in .steroids/steroids.db (SQLite, per project)
114
+ - Runner daemon executes the loop (one per project)
115
+ - Coder LLM: implements task, commits, submits for review
116
+ - Reviewer LLM: verifies implementation, approves or rejects
117
+ - Coordinator LLM: breaks deadlocks at rejection thresholds [2, 5, 9]
118
+ - Build verification: orchestrator re-runs build+tests after coder submits
119
+ - If build/tests fail → auto-reject back to in_progress (coder fixes)
120
+
121
+ ## MULTI-PROJECT
122
+ - Multiple projects can have runners simultaneously
123
+ - Each runner bound to ONE project only
124
+ - Global registry at ~/.steroids/steroids.db tracks all projects
125
+ - NEVER modify files outside current project
126
+
127
+ ## KEY COMMANDS
128
+
129
+ ### View Tasks
130
+ steroids tasks stats # task counts by status
131
+ steroids tasks # pending tasks (current project)
132
+ steroids tasks --status active # in_progress+review (current project)
133
+ steroids tasks --status active --global # active across ALL projects
134
+ steroids tasks --status all # all tasks
135
+ steroids tasks audit <id> # view task spec, history, rejection notes
136
+
137
+ ### Add Tasks
138
+ steroids tasks add "Title" --section <id> --source <spec-file>
139
+ steroids tasks add "Title" --section <id> --source spec.md --file src/foo.ts --line 42
140
+ steroids tasks feedback "Advisory note"
141
+
142
+ Options:
143
+ --section <id> Section to add the task to (required unless --feedback)
144
+ --source <file> Specification markdown file (required unless --feedback)
145
+ --file <path> Anchor task to a specific file in the codebase
146
+ File must be committed in git (not dirty/untracked)
147
+ Auto-captures: commit SHA of last change + content hash
148
+ Coder/reviewer prompts will reference this exact location
149
+ --line <number> Line number in the anchored file (requires --file)
150
+ --feedback Add to skipped "Needs User Input" section for human review
151
+ Skips --section and --source requirements
152
+
153
+ BEST PRACTICE: When generating tasks from documentation or specs, commit the
154
+ documentation first, then fill in ALL values including optional ones:
155
+ --source pointing to the committed spec file
156
+ --file pointing to the relevant source file in the codebase
157
+ --line pointing to the exact line where work applies
158
+ This gives the coder/reviewer maximum context and traceability.
159
+
160
+ ### Manage Tasks
161
+ steroids tasks update <id> --status <s> --actor model --model <m>
162
+ statuses: pending, in_progress, review, completed, skipped, partial
163
+ steroids tasks update <id> --source <file> # fix/change spec file
164
+ steroids tasks update <id> --title "New title" # rename task
165
+ steroids tasks update <id> --section <id> # move to different section
166
+ steroids tasks update <id> --file <path> --line <n> # change file anchor
167
+ steroids tasks approve <id> --model <m> [--notes "msg"] # mark completed
168
+ steroids tasks reject <id> --model <m> --notes "feedback" # back to pending
169
+ steroids tasks skip <id> --notes "reason" # external setup, skip it
170
+ steroids tasks skip <id> --partial --notes "reason" # coded some, rest external
171
+
172
+ ### Sections
173
+ steroids sections list # list sections
174
+ steroids sections list --deps # list with dependencies shown
175
+ steroids sections skip <id> # exclude from runner
176
+ steroids sections unskip <id> # include in runner
177
+ steroids sections priority <id> <val> # set priority (0-100 or high/medium/low)
178
+ steroids sections depends-on <A> <B> # A depends on B (B must complete first)
179
+ steroids sections no-depends-on <A> <B> # remove dependency
180
+ steroids sections graph # show dependency graph
181
+
182
+ ### Runners (daemon that executes tasks)
183
+ steroids runners list # all runners (all projects)
184
+ steroids runners start --detach # start background daemon
185
+ steroids runners start --section "X" # focus on specific section
186
+ steroids runners stop --all # stop all
187
+ steroids runners status # current state
188
+ steroids runners logs <pid> # view daemon output
189
+ steroids runners wakeup # poll intake + restart stale runners
190
+
191
+ NOTE: Stopping a runner is temporary — the wakeup cron will respawn it.
192
+ To permanently stop a runner, DISABLE the project first:
193
+ steroids projects disable # then steroids runners stop --all
194
+
195
+ ### Projects
196
+ steroids projects list # all registered projects
197
+
198
+ ### Web Dashboard
199
+ steroids web # clone (first run) and launch dashboard
200
+ steroids web update # pull latest + reinstall deps
201
+ steroids web stop # stop running dashboard
202
+ steroids web status # check if dashboard is running
203
+ steroids web config # manage web dashboard configuration
204
+
205
+ ## BUG INTAKE
206
+
207
+ External bug intake is config-driven and currently supports the GitHub Issues
208
+ connector. If \`intake.connectors.sentry.enabled=true\`, registry construction
209
+ fails fast because the Sentry runtime connector is not implemented here.
210
+
211
+ Key concepts:
212
+ - Connector: pulls normalized reports from an external source into Steroids
213
+ - Intake report: stored record keyed by source + external_id
214
+ - Approval gate: GitHub issue flow that approves or rejects intake reports
215
+ - Intake hooks: \`intake.received\`, \`intake.triaged\`, \`intake.pr_created\`
216
+ - Intake pipeline tasks: \`Triage intake report ...\`, \`Reproduce intake report ...\`,
217
+ \`Fix intake report ...\`
218
+
219
+ Useful commands:
220
+ steroids config show intake # inspect merged intake config
221
+ steroids config schema intake # JSON Schema for intake settings
222
+ steroids config validate # validate connector config
223
+ steroids hooks list --event intake.received # inspect intake automation hooks
224
+ steroids runners wakeup # poll due connectors + sync gate issues
225
+ steroids web # view intake reports in dashboard
226
+
227
+ Intake report statuses:
228
+ open -> triaged -> in_progress -> resolved
229
+ \\-> ignored
230
+
231
+ ## COMMON OPERATIONS
232
+
233
+ ### Start automation
234
+ steroids runners start --detach # daemon picks tasks and invokes coders/reviewers
235
+
236
+ ### Check what's happening
237
+ steroids tasks --status active --global # see all active work
238
+ steroids runners list # see all running daemons
239
+
240
+ ### Unblock stuck task in review
241
+ steroids tasks approve <id> --model human # approve manually
242
+ steroids tasks reject <id> --model human --notes "reason" # reject manually
243
+
244
+ ### Restart failed task
245
+ steroids tasks update <id> --status pending --reset-rejections # reset to pending with fresh count
246
+
247
+ ### Fix incorrectly marked partial/skipped tasks
248
+ steroids tasks update <id> --status pending --actor human:cli
249
+ # Use when: a task was marked partial/skipped but still needs coding
250
+
251
+ ### Skip external setup task
252
+ steroids tasks skip <id> --notes "spec says SKIP, needs Cloud SQL setup"
253
+ # Use when: spec says SKIP/MANUAL, requires cloud console, account creation, etc.
254
+ # --partial: use if you coded some parts but rest needs human action
255
+
256
+ ## PROJECT SETUP
257
+
258
+ SECTIONS = Features or Functional Areas
259
+ - Each section represents ONE cohesive piece of functionality
260
+ - Sections should be independent enough to be worked on in isolation
261
+ - Sections have priorities and can depend on other sections
262
+
263
+ TASKS = PR-Sized Implementation Units
264
+ - Each task produces a reviewable, testable unit of work
265
+ - Tasks must have a specification file explaining exactly what to build
266
+ - Tasks are ordered within sections — earlier tasks may set up later ones
267
+
268
+ SPECIFICATIONS = Markdown files describing what to build
269
+ - Include: purpose, requirements, examples, acceptance criteria
270
+ - Reference existing code patterns the implementation should follow
271
+ - Create a specs/ directory with markdown files
272
+
273
+ INITIALIZING A PROJECT:
274
+ 1. steroids init -y # non-interactive, accept defaults
275
+ 2. Create specs/ with your specifications
276
+ 3. steroids sections add "Phase 1: Feature Name"
277
+ 4. steroids tasks add "Task title" --section <id> --source specs/spec.md
278
+ 5. steroids loop
279
+
280
+ ## DATABASE MIGRATIONS (IMPORTANT)
281
+
282
+ Each project has its own SQLite database (.steroids/steroids.db). When Steroids is
283
+ updated with schema changes, older project databases need migration.
284
+
285
+ Migrations run AUTOMATICALLY on any command that opens the database. However, if a
286
+ project hasn't been used for a while and the schema has drifted significantly,
287
+ auto-migration may fail.
288
+
289
+ ### Before Adding Tasks to an Existing Project
290
+ Always verify the database is healthy first:
291
+ steroids health # checks DB, runs auto-migration
292
+
293
+ If you see "Database schema is out of date" errors:
294
+ STEROIDS_AUTO_MIGRATE=1 steroids health # force migration + health check
295
+
296
+ ### How Migrations Work
297
+ - Migration files live in migrations/ (SQL with UP/DOWN sections)
298
+ - Applied automatically when the database is opened
299
+ - A backup is created before each migration (.steroids/backups/)
300
+ - Safe to run multiple times (idempotent)
301
+ - If migration fails: fix the issue, then re-run any steroids command
302
+
303
+ ### For LLM Agents
304
+ ALWAYS run \`steroids health\` before adding the first task to a project you haven't
305
+ touched recently. This ensures the schema is current and prevents cryptic SQL errors
306
+ during task creation or runner execution.
307
+
308
+ ## IMPORTANT NOTES
309
+ - Task spec is in source file (see tasks audit output)
310
+ - Max 15 rejections before task fails; coordinator intervenes at [2, 5, 9]
311
+ - Runner auto-restarts via cron (steroids runners cron install)
312
+ - Each project isolated: own database, own runner
313
+ - Section dependencies block entire sections, not individual tasks
314
+ - Build+test verification happens automatically after coder submits
315
+ - Always run build AND tests before submitting for review
316
+ - Never modify code outside the task scope
317
+ - If stuck, create a dispute rather than guessing
318
+ `;
319
+ //# sourceMappingURL=llm-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-content.js","sourceRoot":"","sources":["../../src/commands/llm-content.ts"],"names":[],"mappings":";;;AAAa,QAAA,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0T/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/commands/llm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAuUnD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsKlF"}
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/commands/llm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA0CnD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsLlF"}