oh-my-opencode 5.0.0-beta.7 → 5.0.0-beta.9

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 (159) hide show
  1. package/.agents/command/publish.md +44 -16
  2. package/.agents/skills/publish/SKILL.md +44 -16
  3. package/.agents/skills/work-with-pr/SKILL.md +37 -23
  4. package/.opencode/command/publish.md +44 -16
  5. package/.opencode/skills/work-with-pr/SKILL.md +37 -23
  6. package/dist/agents/atlas/agent.d.ts +0 -1
  7. package/dist/agents/sisyphus/grok-4.d.ts +20 -0
  8. package/dist/agents/sisyphus/index.d.ts +2 -0
  9. package/dist/agents/sisyphus-agent-config.d.ts +6 -0
  10. package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
  11. package/dist/agents/types.d.ts +2 -2
  12. package/dist/cli/index.js +465 -352
  13. package/dist/cli/run/on-complete-hook.d.ts +2 -0
  14. package/dist/cli-node/index.js +465 -352
  15. package/dist/hooks/atlas/final-wave-approval-gate.test-support.d.ts +50 -0
  16. package/dist/hooks/atlas/system-reminder-templates.d.ts +0 -1
  17. package/dist/index.js +283 -38
  18. package/dist/shared/normalize-sdk-response.d.ts +1 -0
  19. package/dist/shared/shell-env.d.ts +1 -1
  20. package/dist/skills/frontend/SKILL.md +10 -7
  21. package/dist/skills/frontend/references/design/_INDEX.md +1 -0
  22. package/dist/skills/frontend/references/design/stylegallery.md +80 -0
  23. package/dist/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  24. package/dist/skills/ultimate-browsing/engine/AGENTS.md +110 -0
  25. package/dist/skills/ultimate-browsing/engine/templates/package.json +1 -1
  26. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
  27. package/dist/skills/ulw-plan/SKILL.md +2 -2
  28. package/dist/skills/ulw-plan/references/full-workflow.md +27 -3
  29. package/dist/skills/ulw-plan/references/intent-clear.md +2 -1
  30. package/dist/skills/ulw-plan/references/intent-unclear.md +3 -3
  31. package/dist/tui.js +77 -9
  32. package/package.json +20 -19
  33. package/packages/lsp-core/src/lsp/client-diagnostics-concurrency.integration.test.ts +44 -0
  34. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +0 -28
  35. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  36. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  37. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +26 -4
  39. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +26 -4
  40. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  41. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  42. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  43. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  44. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  45. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  46. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  47. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +3 -17
  48. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  49. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  50. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  51. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  52. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  53. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
  54. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +16 -23
  55. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
  56. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
  57. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
  58. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
  59. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
  60. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +37 -69
  61. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
  62. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +1 -15
  63. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  64. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  65. package/packages/omo-codex/plugin/components/start-work-continuation/test/cli.test.ts +0 -3
  66. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +2 -16
  67. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  68. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  69. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +3 -9
  70. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  71. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  72. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  73. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  74. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +2 -2
  75. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +27 -3
  76. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -1
  77. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +3 -3
  78. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
  79. package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
  80. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  81. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  82. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +5 -3
  83. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +1 -1
  84. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
  85. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +2 -2
  86. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +0 -3
  87. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +2 -35
  88. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +4 -5
  89. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  93. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  96. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  104. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  105. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  106. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  107. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  108. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  109. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  110. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  111. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  112. package/packages/omo-codex/plugin/package-lock.json +20 -20
  113. package/packages/omo-codex/plugin/package.json +1 -1
  114. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +10 -7
  115. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  116. package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +80 -0
  117. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  118. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +110 -0
  119. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
  120. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
  121. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +5 -3
  122. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +1 -1
  123. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +2 -2
  124. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +27 -3
  125. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -1
  126. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +3 -3
  127. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
  128. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +4 -24
  129. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
  130. package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
  131. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
  132. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
  133. package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
  134. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +101 -0
  135. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +1 -119
  136. package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
  137. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
  138. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
  139. package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
  140. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
  141. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +0 -3
  142. package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
  143. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  144. package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +7 -2
  145. package/packages/shared-skills/skills/frontend/SKILL.md +10 -7
  146. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  147. package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +80 -0
  148. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  149. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +110 -0
  150. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
  151. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
  152. package/packages/shared-skills/skills/ulw-plan/SKILL.md +2 -2
  153. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +27 -3
  154. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -1
  155. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +3 -3
  156. package/dist/tools/call-omo-agent/background-agent-executor.d.ts +0 -5
  157. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
  158. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
  159. package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Publish oh-my-opencode to npm via GitHub Actions workflow
3
- argument-hint: <patch|minor|major>
3
+ argument-hint: <patch|minor|major|explicit-semver>
4
4
  ---
5
5
 
6
6
 
@@ -54,15 +54,16 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
54
54
 
55
55
  ## CRITICAL: ARGUMENT REQUIREMENT
56
56
 
57
- **You MUST receive a version bump type from the user.** Valid options:
57
+ **You MUST receive one release selector from the user.** Valid options:
58
58
  - `patch`: Bug fixes, backward-compatible (1.1.7 → 1.1.8)
59
59
  - `minor`: New features, backward-compatible (1.1.7 → 1.2.0)
60
60
  - `major`: Breaking changes (1.1.7 → 2.0.0)
61
+ - An explicit valid semantic version, including a prerelease such as `5.0.0-beta.9`
61
62
 
62
- **If the user did not provide a bump type argument, STOP IMMEDIATELY and ask:**
63
- > "To proceed with deployment, please specify a version bump type: `patch`, `minor`, or `major`"
63
+ **If the user did not provide a release selector, STOP IMMEDIATELY and ask:**
64
+ > "To proceed with deployment, specify `patch`, `minor`, `major`, or an explicit semantic version such as `5.0.0-beta.9`."
64
65
 
65
- **DO NOT PROCEED without explicit user confirmation of bump type.**
66
+ Reject any other value. Do not infer or repair malformed versions.
66
67
 
67
68
  ---
68
69
 
@@ -72,7 +73,7 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
72
73
 
73
74
  ```
74
75
  [
75
- { "id": "confirm-bump", "content": "Confirm version bump type with user (patch/minor/major)", "status": "in_progress", "priority": "high" },
76
+ { "id": "confirm-release-input", "content": "Confirm release selector with user (patch/minor/major or explicit semver)", "status": "in_progress", "priority": "high" },
76
77
  { "id": "check-uncommitted", "content": "Check for uncommitted changes and commit if needed", "status": "pending", "priority": "high" },
77
78
  { "id": "sync-remote", "content": "Sync with remote (pull --rebase && push if unpushed commits)", "status": "pending", "priority": "high" },
78
79
  { "id": "run-workflow", "content": "Trigger GitHub Actions publish workflow", "status": "pending", "priority": "high" },
@@ -92,9 +93,23 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
92
93
 
93
94
  ---
94
95
 
95
- ## STEP 1: CONFIRM BUMP TYPE
96
+ ## STEP 1: CONFIRM AND CLASSIFY THE RELEASE SELECTOR
96
97
 
97
- If the user already named a bump type (argument or message), that IS the confirmation state it and continue immediately. Only ask and wait when no bump type was given.
98
+ If the user already supplied the selector in the command argument or message, that IS the confirmation. Parse it exactly once:
99
+
100
+ ```bash
101
+ RELEASE_INPUT="${ARGUMENTS}"
102
+ if [[ "$RELEASE_INPUT" =~ ^(patch|minor|major)$ ]]; then
103
+ RELEASE_KIND=bump
104
+ elif [[ "$RELEASE_INPUT" =~ ^([0-9]+\.){2}[0-9]+(-[0-9A-Za-z]+(\.[0-9A-Za-z]+)*)?$ ]]; then
105
+ RELEASE_KIND=version
106
+ else
107
+ echo "Invalid release selector: $RELEASE_INPUT" >&2
108
+ exit 1
109
+ fi
110
+ ```
111
+
112
+ Only ask and wait when no selector was provided.
98
113
 
99
114
  ---
100
115
 
@@ -125,16 +140,29 @@ This ensures the GitHub Actions workflow runs on the latest code including all l
125
140
 
126
141
  ## STEP 3: TRIGGER GITHUB ACTIONS WORKFLOW
127
142
 
128
- Run the publish workflow:
129
- ```bash
130
- gh workflow run publish -f bump={bump_type}
131
- ```
143
+ Dispatch from `dev`, pass bump selectors through `bump`, and pass exact versions through `version`. The required `bump` input remains `patch` for explicit-version dispatches but is ignored by the workflow because `version` takes precedence.
132
144
 
133
- Wait 3 seconds, then get the run ID:
134
145
  ```bash
135
- gh run list --workflow=publish --limit=1 --json databaseId,status --jq '.[0]'
146
+ if [ "$RELEASE_KIND" = bump ]; then
147
+ RUN_URL="$(gh workflow run publish.yml --ref dev -f "bump=${RELEASE_INPUT}")"
148
+ else
149
+ RUN_URL="$(gh workflow run publish.yml --ref dev -f bump=patch -f "version=${RELEASE_INPUT}")"
150
+ fi
151
+
152
+ if ! [[ "$RUN_URL" =~ ^https://github.com/code-yeongyu/oh-my-openagent/actions/runs/[0-9]+$ ]]; then
153
+ echo "Publish dispatch did not return an exact workflow run URL: $RUN_URL" >&2
154
+ exit 1
155
+ fi
156
+ RUN_ID="${RUN_URL##*/}"
157
+ if ! [[ "$RUN_ID" =~ ^[0-9]+$ ]]; then
158
+ echo "Publish dispatch returned an invalid run ID: $RUN_ID" >&2
159
+ exit 1
160
+ fi
161
+ gh run view "${RUN_ID}" --json databaseId,status,url --jq '{databaseId,status,url}'
136
162
  ```
137
163
 
164
+ The returned run ID owns this release attempt. Never replace it with a latest-run lookup.
165
+
138
166
  ---
139
167
 
140
168
  ## STEP 4: WAIT FOR WORKFLOW COMPLETION
@@ -150,14 +178,14 @@ The publish run is a single workflow with sequential stages. Expected timeline (
150
178
 
151
179
  Poll job-level status every 30 seconds and report stage transitions to the user:
152
180
  ```bash
153
- gh run view {run_id} --json status,conclusion,jobs --jq '{status, conclusion, stage: ([.jobs[] | select(.status=="in_progress") | .name] | join(", "))}'
181
+ gh run view "${RUN_ID}" --json status,conclusion,jobs --jq '{status, conclusion, stage: ([.jobs[] | select(.status=="in_progress") | .name] | join(", "))}'
154
182
  ```
155
183
 
156
184
  **IMPORTANT: Use polling loop, NOT sleep commands.** Use the waiting time to draft the enhanced release summary (Step 6) — do not sit idle, and do not start any review activity.
157
185
 
158
186
  If conclusion is `failure`, show error and stop:
159
187
  ```bash
160
- gh run view {run_id} --log-failed
188
+ gh run view "${RUN_ID}" --log-failed
161
189
  ```
162
190
 
163
191
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: publish
3
- description: "Publish oh-my-opencode to npm by triggering the GitHub Actions publish workflow and verifying its artifacts. Ship-only: never runs pre-publish-review or re-reviews merged code unless the user explicitly asks. Argument: <patch|minor|major>. Triggers: publish, release, deploy, npm publish."
3
+ description: "Publish oh-my-opencode to npm by triggering the GitHub Actions publish workflow and verifying its artifacts. Ship-only: never runs pre-publish-review or re-reviews merged code unless the user explicitly asks. Argument: <patch|minor|major|explicit-semver>. Triggers: publish, release, deploy, npm publish."
4
4
  ---
5
5
 
6
6
  You are the release manager for oh-my-opencode. Execute the FULL publish workflow from start to finish.
@@ -53,15 +53,16 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
53
53
 
54
54
  ## CRITICAL: ARGUMENT REQUIREMENT
55
55
 
56
- **You MUST receive a version bump type from the user.** Valid options:
56
+ **You MUST receive one release selector from the user.** Valid options:
57
57
  - `patch`: Bug fixes, backward-compatible (1.1.7 → 1.1.8)
58
58
  - `minor`: New features, backward-compatible (1.1.7 → 1.2.0)
59
59
  - `major`: Breaking changes (1.1.7 → 2.0.0)
60
+ - An explicit valid semantic version, including a prerelease such as `5.0.0-beta.9`
60
61
 
61
- **If the user did not provide a bump type argument, STOP IMMEDIATELY and ask:**
62
- > "To proceed with deployment, please specify a version bump type: `patch`, `minor`, or `major`"
62
+ **If the user did not provide a release selector, STOP IMMEDIATELY and ask:**
63
+ > "To proceed with deployment, specify `patch`, `minor`, `major`, or an explicit semantic version such as `5.0.0-beta.9`."
63
64
 
64
- **DO NOT PROCEED without explicit user confirmation of bump type.**
65
+ Reject any other value. Do not infer or repair malformed versions.
65
66
 
66
67
  ---
67
68
 
@@ -71,7 +72,7 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
71
72
 
72
73
  ```
73
74
  [
74
- { "id": "confirm-bump", "content": "Confirm version bump type with user (patch/minor/major)", "status": "in_progress", "priority": "high" },
75
+ { "id": "confirm-release-input", "content": "Confirm release selector with user (patch/minor/major or explicit semver)", "status": "in_progress", "priority": "high" },
75
76
  { "id": "check-uncommitted", "content": "Check for uncommitted changes and commit if needed", "status": "pending", "priority": "high" },
76
77
  { "id": "sync-remote", "content": "Sync with remote (pull --rebase && push if unpushed commits)", "status": "pending", "priority": "high" },
77
78
  { "id": "run-workflow", "content": "Trigger GitHub Actions publish workflow", "status": "pending", "priority": "high" },
@@ -91,9 +92,23 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
91
92
 
92
93
  ---
93
94
 
94
- ## STEP 1: CONFIRM BUMP TYPE
95
+ ## STEP 1: CONFIRM AND CLASSIFY THE RELEASE SELECTOR
95
96
 
96
- If the user already named a bump type (argument or message), that IS the confirmation state it and continue immediately. Only ask and wait when no bump type was given.
97
+ If the user already supplied the selector in the command argument or message, that IS the confirmation. Parse it exactly once:
98
+
99
+ ```bash
100
+ RELEASE_INPUT="${ARGUMENTS}"
101
+ if [[ "$RELEASE_INPUT" =~ ^(patch|minor|major)$ ]]; then
102
+ RELEASE_KIND=bump
103
+ elif [[ "$RELEASE_INPUT" =~ ^([0-9]+\.){2}[0-9]+(-[0-9A-Za-z]+(\.[0-9A-Za-z]+)*)?$ ]]; then
104
+ RELEASE_KIND=version
105
+ else
106
+ echo "Invalid release selector: $RELEASE_INPUT" >&2
107
+ exit 1
108
+ fi
109
+ ```
110
+
111
+ Only ask and wait when no selector was provided.
97
112
 
98
113
  ---
99
114
 
@@ -124,16 +139,29 @@ This ensures the GitHub Actions workflow runs on the latest code including all l
124
139
 
125
140
  ## STEP 3: TRIGGER GITHUB ACTIONS WORKFLOW
126
141
 
127
- Run the publish workflow:
128
- ```bash
129
- gh workflow run publish -f bump={bump_type}
130
- ```
142
+ Dispatch from `dev`, pass bump selectors through `bump`, and pass exact versions through `version`. The required `bump` input remains `patch` for explicit-version dispatches but is ignored by the workflow because `version` takes precedence.
131
143
 
132
- Wait 3 seconds, then get the run ID:
133
144
  ```bash
134
- gh run list --workflow=publish --limit=1 --json databaseId,status --jq '.[0]'
145
+ if [ "$RELEASE_KIND" = bump ]; then
146
+ RUN_URL="$(gh workflow run publish.yml --ref dev -f "bump=${RELEASE_INPUT}")"
147
+ else
148
+ RUN_URL="$(gh workflow run publish.yml --ref dev -f bump=patch -f "version=${RELEASE_INPUT}")"
149
+ fi
150
+
151
+ if ! [[ "$RUN_URL" =~ ^https://github.com/code-yeongyu/oh-my-openagent/actions/runs/[0-9]+$ ]]; then
152
+ echo "Publish dispatch did not return an exact workflow run URL: $RUN_URL" >&2
153
+ exit 1
154
+ fi
155
+ RUN_ID="${RUN_URL##*/}"
156
+ if ! [[ "$RUN_ID" =~ ^[0-9]+$ ]]; then
157
+ echo "Publish dispatch returned an invalid run ID: $RUN_ID" >&2
158
+ exit 1
159
+ fi
160
+ gh run view "${RUN_ID}" --json databaseId,status,url --jq '{databaseId,status,url}'
135
161
  ```
136
162
 
163
+ The returned run ID owns this release attempt. Never replace it with a latest-run lookup.
164
+
137
165
  ---
138
166
 
139
167
  ## STEP 4: WAIT FOR WORKFLOW COMPLETION
@@ -149,14 +177,14 @@ The publish run is a single workflow with sequential stages. Expected timeline (
149
177
 
150
178
  Poll job-level status every 30 seconds and report stage transitions to the user:
151
179
  ```bash
152
- gh run view {run_id} --json status,conclusion,jobs --jq '{status, conclusion, stage: ([.jobs[] | select(.status=="in_progress") | .name] | join(", "))}'
180
+ gh run view "${RUN_ID}" --json status,conclusion,jobs --jq '{status, conclusion, stage: ([.jobs[] | select(.status=="in_progress") | .name] | join(", "))}'
153
181
  ```
154
182
 
155
183
  **IMPORTANT: Use polling loop, NOT sleep commands.** Use the waiting time to draft the enhanced release summary (Step 6) — do not sit idle, and do not start any review activity.
156
184
 
157
185
  If conclusion is `failure`, show error and stop:
158
186
  ```bash
159
- gh run view {run_id} --log-failed
187
+ gh run view "${RUN_ID}" --log-failed
160
188
  ```
161
189
 
162
190
  ---
@@ -196,12 +196,20 @@ while true:
196
196
 
197
197
  ### Gate A: CI Checks
198
198
 
199
- CI is the fastest feedback loop. Wait for it to complete, then parse results.
199
+ CI is the fastest feedback loop. Subscribe to its completion via `monitor` never block a model round-trip on `gh pr checks --watch`.
200
200
 
201
- ```bash
202
- # Wait for checks to start (GitHub needs a moment after push)
203
- # Then watch for completion
204
- gh pr checks "$PR_NUMBER" --watch --fail-fast
201
+ ```
202
+ # Subscribe to CI completion the monitor event wakes the session when checks finish.
203
+ # Do NOT use `gh pr checks --watch` as a blocking tool call; it burns a full model
204
+ # round-trip (~29s) on every poll. Instead, register a monitor and end the turn:
205
+ monitor({
206
+ description: "CI completion for PR $PR_NUMBER",
207
+ command: "gh pr checks $PR_NUMBER --watch --fail-fast",
208
+ filter: "completed|fail|cancel"
209
+ })
210
+ # → end turn; the monitor's matching line arrives as an injected event.
211
+ # For a single midpoint status peek (at most once), use:
212
+ # gh pr checks "$PR_NUMBER" # one-shot, no --watch
205
213
  ```
206
214
 
207
215
  **On failure**: Get the failed run logs to understand what broke:
@@ -243,20 +251,21 @@ fi
243
251
 
244
252
  **On issues**: Cubic's review body contains structured issue descriptions. Parse them, determine which are valid (some may be false positives), and fix the valid ones per the iteration discipline below.
245
253
 
246
- Cubic reviews are triggered automatically on PR updates. After pushing a fix, wait for the new review to appear before checking again. Use `gh api` polling with a conditional loop:
254
+ Cubic reviews are triggered automatically on PR updates. After pushing a fix, subscribe to the new review arriving never spin a `for _ in $(seq 1 30)` polling loop that burns model round-trips.
247
255
 
248
- ```bash
249
- # Wait for a NEW Cubic review after push. If none arrives within the bound,
250
- # Cubic is out of quota (or not running) skip Gate B rather than spin forever.
256
+ ```
257
+ # Subscribe to a NEW Cubic review after push. The monitor exits when a review
258
+ # newer than PUSH_TIME appears, or times out (quota exhausted → Gate B SKIPPED).
251
259
  PUSH_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)
252
- for _ in $(seq 1 30); do
253
- LATEST_REVIEW_TIME=$(gh api "repos/${REPO}/pulls/${PR_NUMBER}/reviews" \
254
- --jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .submitted_at')
255
- [[ "$LATEST_REVIEW_TIME" > "$PUSH_TIME" ]] && break
256
- timeout 20 gh pr checks "$PR_NUMBER" --watch >/dev/null 2>&1 || true # spend the interval usefully
257
- done
258
- # Loop exhausted without a newer review treat Gate B as SKIPPED (quota exhausted)
259
- [[ "$LATEST_REVIEW_TIME" > "$PUSH_TIME" ]] || echo "Cubic: SKIPPED (no review within bound — quota exhausted)"
260
+ monitor({
261
+ description: "Cubic review for PR $PR_NUMBER",
262
+ command: "LATEST=$(gh api repos/${REPO}/pulls/${PR_NUMBER}/reviews --jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .submitted_at // empty'); [ -n \"$LATEST\" ] && [ \"$LATEST\" > \"$PUSH_TIME\" ] && echo NEW_REVIEW || echo WAITING",
263
+ filter: "NEW_REVIEW",
264
+ timeout_ms: 600000 # 10 min bound if no review arrives, Gate B is SKIPPED (quota exhausted)
265
+ })
266
+ # end turn; if the monitor times out without NEW_REVIEW, treat Gate B as SKIPPED.
267
+ # For a single midpoint peek (at most once), use:
268
+ # gh api "repos/${REPO}/pulls/${PR_NUMBER}/reviews" --jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .submitted_at'
260
269
  ```
261
270
 
262
271
  ### Iteration discipline
@@ -292,13 +301,18 @@ gh pr merge "$PR_NUMBER" --merge --auto --delete-branch
292
301
  # are green, fall back to a direct merge: gh pr merge "$PR_NUMBER" --merge --delete-branch
293
302
  ```
294
303
 
295
- Then WAIT until the merge has actually completed before you report done or clean up - never walk away while the PR is still merging:
304
+ Then subscribe to the merge completing never block a model round-trip on an `until [ ... MERGED ]` polling loop:
296
305
 
297
- ```bash
298
- # Block until the PR is actually MERGED (auto-merge lands once all required checks pass)
299
- until [ "$(gh pr view "$PR_NUMBER" --json state -q .state)" = "MERGED" ]; do
300
- gh pr checks "$PR_NUMBER" --watch --fail-fast >/dev/null 2>&1 || true # spend the interval on the checks
301
- done
306
+ ```
307
+ # Subscribe to merge completion. The monitor exits when gh pr view returns MERGED.
308
+ monitor({
309
+ description: "Merge completion for PR $PR_NUMBER",
310
+ command: "[ \"$(gh pr view $PR_NUMBER --json state -q .state)\" = \"MERGED\" ] && echo MERGED || echo WAITING",
311
+ filter: "MERGED",
312
+ timeout_ms: 1800000 # 30 min bound for auto-merge to land after all gates pass
313
+ })
314
+ # → end turn; the MERGED event wakes the session for the cleanup step.
315
+ # If the monitor times out, check merge state once: gh pr view "$PR_NUMBER" --json state -q .state
302
316
  ```
303
317
 
304
318
  If the user opted out of merging, skip the merge but STILL run the cleanup below: the worktree is removed either way.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Publish oh-my-opencode to npm via GitHub Actions workflow
3
- argument-hint: <patch|minor|major>
3
+ argument-hint: <patch|minor|major|explicit-semver>
4
4
  ---
5
5
 
6
6
 
@@ -54,15 +54,16 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
54
54
 
55
55
  ## CRITICAL: ARGUMENT REQUIREMENT
56
56
 
57
- **You MUST receive a version bump type from the user.** Valid options:
57
+ **You MUST receive one release selector from the user.** Valid options:
58
58
  - `patch`: Bug fixes, backward-compatible (1.1.7 → 1.1.8)
59
59
  - `minor`: New features, backward-compatible (1.1.7 → 1.2.0)
60
60
  - `major`: Breaking changes (1.1.7 → 2.0.0)
61
+ - An explicit valid semantic version, including a prerelease such as `5.0.0-beta.9`
61
62
 
62
- **If the user did not provide a bump type argument, STOP IMMEDIATELY and ask:**
63
- > "To proceed with deployment, please specify a version bump type: `patch`, `minor`, or `major`"
63
+ **If the user did not provide a release selector, STOP IMMEDIATELY and ask:**
64
+ > "To proceed with deployment, specify `patch`, `minor`, `major`, or an explicit semantic version such as `5.0.0-beta.9`."
64
65
 
65
- **DO NOT PROCEED without explicit user confirmation of bump type.**
66
+ Reject any other value. Do not infer or repair malformed versions.
66
67
 
67
68
  ---
68
69
 
@@ -72,7 +73,7 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
72
73
 
73
74
  ```
74
75
  [
75
- { "id": "confirm-bump", "content": "Confirm version bump type with user (patch/minor/major)", "status": "in_progress", "priority": "high" },
76
+ { "id": "confirm-release-input", "content": "Confirm release selector with user (patch/minor/major or explicit semver)", "status": "in_progress", "priority": "high" },
76
77
  { "id": "check-uncommitted", "content": "Check for uncommitted changes and commit if needed", "status": "pending", "priority": "high" },
77
78
  { "id": "sync-remote", "content": "Sync with remote (pull --rebase && push if unpushed commits)", "status": "pending", "priority": "high" },
78
79
  { "id": "run-workflow", "content": "Trigger GitHub Actions publish workflow", "status": "pending", "priority": "high" },
@@ -92,9 +93,23 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
92
93
 
93
94
  ---
94
95
 
95
- ## STEP 1: CONFIRM BUMP TYPE
96
+ ## STEP 1: CONFIRM AND CLASSIFY THE RELEASE SELECTOR
96
97
 
97
- If the user already named a bump type (argument or message), that IS the confirmation state it and continue immediately. Only ask and wait when no bump type was given.
98
+ If the user already supplied the selector in the command argument or message, that IS the confirmation. Parse it exactly once:
99
+
100
+ ```bash
101
+ RELEASE_INPUT="${ARGUMENTS}"
102
+ if [[ "$RELEASE_INPUT" =~ ^(patch|minor|major)$ ]]; then
103
+ RELEASE_KIND=bump
104
+ elif [[ "$RELEASE_INPUT" =~ ^([0-9]+\.){2}[0-9]+(-[0-9A-Za-z]+(\.[0-9A-Za-z]+)*)?$ ]]; then
105
+ RELEASE_KIND=version
106
+ else
107
+ echo "Invalid release selector: $RELEASE_INPUT" >&2
108
+ exit 1
109
+ fi
110
+ ```
111
+
112
+ Only ask and wait when no selector was provided.
98
113
 
99
114
  ---
100
115
 
@@ -125,16 +140,29 @@ This ensures the GitHub Actions workflow runs on the latest code including all l
125
140
 
126
141
  ## STEP 3: TRIGGER GITHUB ACTIONS WORKFLOW
127
142
 
128
- Run the publish workflow:
129
- ```bash
130
- gh workflow run publish -f bump={bump_type}
131
- ```
143
+ Dispatch from `dev`, pass bump selectors through `bump`, and pass exact versions through `version`. The required `bump` input remains `patch` for explicit-version dispatches but is ignored by the workflow because `version` takes precedence.
132
144
 
133
- Wait 3 seconds, then get the run ID:
134
145
  ```bash
135
- gh run list --workflow=publish --limit=1 --json databaseId,status --jq '.[0]'
146
+ if [ "$RELEASE_KIND" = bump ]; then
147
+ RUN_URL="$(gh workflow run publish.yml --ref dev -f "bump=${RELEASE_INPUT}")"
148
+ else
149
+ RUN_URL="$(gh workflow run publish.yml --ref dev -f bump=patch -f "version=${RELEASE_INPUT}")"
150
+ fi
151
+
152
+ if ! [[ "$RUN_URL" =~ ^https://github.com/code-yeongyu/oh-my-openagent/actions/runs/[0-9]+$ ]]; then
153
+ echo "Publish dispatch did not return an exact workflow run URL: $RUN_URL" >&2
154
+ exit 1
155
+ fi
156
+ RUN_ID="${RUN_URL##*/}"
157
+ if ! [[ "$RUN_ID" =~ ^[0-9]+$ ]]; then
158
+ echo "Publish dispatch returned an invalid run ID: $RUN_ID" >&2
159
+ exit 1
160
+ fi
161
+ gh run view "${RUN_ID}" --json databaseId,status,url --jq '{databaseId,status,url}'
136
162
  ```
137
163
 
164
+ The returned run ID owns this release attempt. Never replace it with a latest-run lookup.
165
+
138
166
  ---
139
167
 
140
168
  ## STEP 4: WAIT FOR WORKFLOW COMPLETION
@@ -150,14 +178,14 @@ The publish run is a single workflow with sequential stages. Expected timeline (
150
178
 
151
179
  Poll job-level status every 30 seconds and report stage transitions to the user:
152
180
  ```bash
153
- gh run view {run_id} --json status,conclusion,jobs --jq '{status, conclusion, stage: ([.jobs[] | select(.status=="in_progress") | .name] | join(", "))}'
181
+ gh run view "${RUN_ID}" --json status,conclusion,jobs --jq '{status, conclusion, stage: ([.jobs[] | select(.status=="in_progress") | .name] | join(", "))}'
154
182
  ```
155
183
 
156
184
  **IMPORTANT: Use polling loop, NOT sleep commands.** Use the waiting time to draft the enhanced release summary (Step 6) — do not sit idle, and do not start any review activity.
157
185
 
158
186
  If conclusion is `failure`, show error and stop:
159
187
  ```bash
160
- gh run view {run_id} --log-failed
188
+ gh run view "${RUN_ID}" --log-failed
161
189
  ```
162
190
 
163
191
  ---
@@ -196,12 +196,20 @@ while true:
196
196
 
197
197
  ### Gate A: CI Checks
198
198
 
199
- CI is the fastest feedback loop. Wait for it to complete, then parse results.
199
+ CI is the fastest feedback loop. Subscribe to its completion via `monitor` never block a model round-trip on `gh pr checks --watch`.
200
200
 
201
- ```bash
202
- # Wait for checks to start (GitHub needs a moment after push)
203
- # Then watch for completion
204
- gh pr checks "$PR_NUMBER" --watch --fail-fast
201
+ ```
202
+ # Subscribe to CI completion the monitor event wakes the session when checks finish.
203
+ # Do NOT use `gh pr checks --watch` as a blocking tool call; it burns a full model
204
+ # round-trip (~29s) on every poll. Instead, register a monitor and end the turn:
205
+ monitor({
206
+ description: "CI completion for PR $PR_NUMBER",
207
+ command: "gh pr checks $PR_NUMBER --watch --fail-fast",
208
+ filter: "completed|fail|cancel"
209
+ })
210
+ # → end turn; the monitor's matching line arrives as an injected event.
211
+ # For a single midpoint status peek (at most once), use:
212
+ # gh pr checks "$PR_NUMBER" # one-shot, no --watch
205
213
  ```
206
214
 
207
215
  **On failure**: Get the failed run logs to understand what broke:
@@ -243,20 +251,21 @@ fi
243
251
 
244
252
  **On issues**: Cubic's review body contains structured issue descriptions. Parse them, determine which are valid (some may be false positives), and fix the valid ones per the iteration discipline below.
245
253
 
246
- Cubic reviews are triggered automatically on PR updates. After pushing a fix, wait for the new review to appear before checking again. Use `gh api` polling with a conditional loop:
254
+ Cubic reviews are triggered automatically on PR updates. After pushing a fix, subscribe to the new review arriving never spin a `for _ in $(seq 1 30)` polling loop that burns model round-trips.
247
255
 
248
- ```bash
249
- # Wait for a NEW Cubic review after push. If none arrives within the bound,
250
- # Cubic is out of quota (or not running) skip Gate B rather than spin forever.
256
+ ```
257
+ # Subscribe to a NEW Cubic review after push. The monitor exits when a review
258
+ # newer than PUSH_TIME appears, or times out (quota exhausted → Gate B SKIPPED).
251
259
  PUSH_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)
252
- for _ in $(seq 1 30); do
253
- LATEST_REVIEW_TIME=$(gh api "repos/${REPO}/pulls/${PR_NUMBER}/reviews" \
254
- --jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .submitted_at')
255
- [[ "$LATEST_REVIEW_TIME" > "$PUSH_TIME" ]] && break
256
- timeout 20 gh pr checks "$PR_NUMBER" --watch >/dev/null 2>&1 || true # spend the interval usefully
257
- done
258
- # Loop exhausted without a newer review treat Gate B as SKIPPED (quota exhausted)
259
- [[ "$LATEST_REVIEW_TIME" > "$PUSH_TIME" ]] || echo "Cubic: SKIPPED (no review within bound — quota exhausted)"
260
+ monitor({
261
+ description: "Cubic review for PR $PR_NUMBER",
262
+ command: "LATEST=$(gh api repos/${REPO}/pulls/${PR_NUMBER}/reviews --jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .submitted_at // empty'); [ -n \"$LATEST\" ] && [ \"$LATEST\" > \"$PUSH_TIME\" ] && echo NEW_REVIEW || echo WAITING",
263
+ filter: "NEW_REVIEW",
264
+ timeout_ms: 600000 # 10 min bound if no review arrives, Gate B is SKIPPED (quota exhausted)
265
+ })
266
+ # end turn; if the monitor times out without NEW_REVIEW, treat Gate B as SKIPPED.
267
+ # For a single midpoint peek (at most once), use:
268
+ # gh api "repos/${REPO}/pulls/${PR_NUMBER}/reviews" --jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .submitted_at'
260
269
  ```
261
270
 
262
271
  ### Iteration discipline
@@ -292,13 +301,18 @@ gh pr merge "$PR_NUMBER" --merge --auto --delete-branch
292
301
  # are green, fall back to a direct merge: gh pr merge "$PR_NUMBER" --merge --delete-branch
293
302
  ```
294
303
 
295
- Then WAIT until the merge has actually completed before you report done or clean up - never walk away while the PR is still merging:
304
+ Then subscribe to the merge completing never block a model round-trip on an `until [ ... MERGED ]` polling loop:
296
305
 
297
- ```bash
298
- # Block until the PR is actually MERGED (auto-merge lands once all required checks pass)
299
- until [ "$(gh pr view "$PR_NUMBER" --json state -q .state)" = "MERGED" ]; do
300
- gh pr checks "$PR_NUMBER" --watch --fail-fast >/dev/null 2>&1 || true # spend the interval on the checks
301
- done
306
+ ```
307
+ # Subscribe to merge completion. The monitor exits when gh pr view returns MERGED.
308
+ monitor({
309
+ description: "Merge completion for PR $PR_NUMBER",
310
+ command: "[ \"$(gh pr view $PR_NUMBER --json state -q .state)\" = \"MERGED\" ] && echo MERGED || echo WAITING",
311
+ filter: "MERGED",
312
+ timeout_ms: 1800000 # 30 min bound for auto-merge to land after all gates pass
313
+ })
314
+ # → end turn; the MERGED event wakes the session for the cleanup step.
315
+ # If the monitor times out, check merge state once: gh pr view "$PR_NUMBER" --json state -q .state
302
316
  ```
303
317
 
304
318
  If the user opted out of merging, skip the merge but STILL run the cleanup below: the worktree is removed either way.
@@ -26,7 +26,6 @@ export interface OrchestratorContext {
26
26
  availableSkills?: AvailableSkill[];
27
27
  userCategories?: Record<string, CategoryConfig>;
28
28
  }
29
- export declare function getAtlasPrompt(model?: string): string;
30
29
  export declare function createAtlasAgent(ctx: OrchestratorContext): AgentConfig;
31
30
  export declare namespace createAtlasAgent {
32
31
  export { MODE as mode };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Shared Grok 4.5 / Grok 4.6 Sisyphus prompt.
3
+ *
4
+ * Tuned from field experience with Grok 4.6 (Eric Zakariasson's launch field
5
+ * guide): phrasing intensity ("work very hard") changes nothing, and the
6
+ * model's own taste fills gaps well, so this is deliberately the leanest
7
+ * Sisyphus variant. What does move the outcome:
8
+ * - an explicit verification loop ("keep iterating and verifying until it's
9
+ * production ready") is the single highest-leverage instruction;
10
+ * - a written definition of done, because otherwise the model decides done
11
+ * for you;
12
+ * - a narration split (quiet on small changes, narrate wide-radius work) that
13
+ * matches its information-dense communication style;
14
+ * - an anti-repetition nudge, since it duplicates component code unless asked
15
+ * to break it up.
16
+ */
17
+ import type { AvailableAgent, AvailableTool, AvailableSkill, AvailableCategory } from "../dynamic-agent-prompt-builder";
18
+ import { categorizeTools } from "../dynamic-agent-prompt-builder";
19
+ export declare function buildGrok4SisyphusPrompt(model: string, availableAgents: AvailableAgent[], availableTools?: AvailableTool[], availableSkills?: AvailableSkill[], availableCategories?: AvailableCategory[], useTaskSystem?: boolean): string;
20
+ export { categorizeTools };
@@ -10,6 +10,7 @@
10
10
  * - gemini.ts: Corrective overlays for Gemini's aggressive tendencies
11
11
  * - gpt-5-4.ts: Native GPT-5.4 prompt with block-structured guidance
12
12
  * - gpt-5-5.ts: Native GPT-5.5 prompt with Codex-style sections
13
+ * - grok-4.ts: Shared Grok 4.5/4.6 prompt, verification-loop-centered and lean
13
14
  * - kimi-k2-6.ts: Kimi K2.6 native prompt with thinking-mode stop conditions
14
15
  * - kimi-k2-7.ts: Kimi K2.7 native prompt, restrained and outcome-first
15
16
  * - kimi-k3.ts: Kimi K3 native prompt with explicit anti-overthinking calibration
@@ -22,6 +23,7 @@ export { buildClaudeFable5SisyphusPrompt } from "./claude-fable-5";
22
23
  export { buildGeminiToolMandate, buildGeminiDelegationOverride, buildGeminiVerificationOverride, buildGeminiIntentGateEnforcement, buildGeminiToolGuide, buildGeminiToolCallExamples, } from "./gemini";
23
24
  export { buildGpt54SisyphusPrompt } from "./gpt-5-4";
24
25
  export { buildGpt55SisyphusPrompt } from "./gpt-5-5";
26
+ export { buildGrok4SisyphusPrompt } from "./grok-4";
25
27
  export { buildGlm52SisyphusPrompt } from "./glm-5-2";
26
28
  export { buildKimiK26SisyphusPrompt } from "./kimi-k2-6";
27
29
  export { buildKimiK27SisyphusPrompt } from "./kimi-k2-7";
@@ -2,4 +2,10 @@ import type { AgentConfig } from "@opencode-ai/sdk";
2
2
  import type { AgentMode } from "./types";
3
3
  export declare function buildGptSisyphusAgentConfig(mode: AgentMode, model: string, prompt: string): AgentConfig;
4
4
  export declare function buildGlmSisyphusAgentConfig(mode: AgentMode, model: string, prompt: string): AgentConfig;
5
+ /**
6
+ * Grok 4.5/4.6 are xAI reasoning models: they take a reasoning effort
7
+ * (grok family caps allow low/medium/high) and reject Anthropic-style
8
+ * thinking blocks, so this is the base config plus effort only.
9
+ */
10
+ export declare function buildGrokSisyphusAgentConfig(mode: AgentMode, model: string, prompt: string): AgentConfig;
5
11
  export declare function buildClaudeSisyphusAgentConfig(mode: AgentMode, model: string, prompt: string): AgentConfig;
@@ -9,7 +9,7 @@ declare const MODE: AgentMode;
9
9
  * runtime model resolves to a different family than the configured one, the baked
10
10
  * body is the wrong family and must be rebuilt (issue #5297/#5316).
11
11
  */
12
- export type SisyphusPromptFamily = "kimi-k3" | "kimi-k2-7" | "kimi-k2-6" | "gpt-5-5" | "gpt-5-4" | "claude-fable-5" | "claude-opus-5" | "claude-opus-4-8" | "claude-opus-4-7" | "glm-5-2" | "fallback";
12
+ export type SisyphusPromptFamily = "kimi-k3" | "kimi-k2-7" | "kimi-k2-6" | "gpt-5-5" | "gpt-5-4" | "claude-fable-5" | "claude-opus-5" | "claude-opus-4-8" | "claude-opus-4-7" | "glm-5-2" | "grok-4" | "fallback";
13
13
  export declare function resolveSisyphusPromptFamily(model: string): SisyphusPromptFamily;
14
14
  export declare function createSisyphusAgent(model: string, availableAgents?: AvailableAgent[], availableToolNames?: string[], availableSkills?: AvailableSkill[], availableCategories?: AvailableCategory[], useTaskSystem?: boolean): AgentConfig;
15
15
  export declare namespace createSisyphusAgent {
@@ -1,6 +1,6 @@
1
1
  import type { AgentConfig } from "@opencode-ai/sdk";
2
- import { isClaudeFable5Model, isClaudeFableOrMythosModel, isClaudeOpus46Model, isClaudeOpus47Model, isClaudeOpus47OrLaterModel, isClaudeOpus48Model, isClaudeOpus5Model, isGeminiModel, isGlmModel, isGptModel, isKimiK2Model, isKimiK27Model, isKimiK3Model, isMiniMaxModel } from "@oh-my-opencode/model-core";
3
- export { isClaudeFable5Model, isClaudeFableOrMythosModel, isClaudeOpus46Model, isClaudeOpus47Model, isClaudeOpus47OrLaterModel, isClaudeOpus48Model, isClaudeOpus5Model, isGeminiModel, isGlmModel, isGptModel, isKimiK2Model, isKimiK27Model, isKimiK3Model, isMiniMaxModel, };
2
+ import { isClaudeFable5Model, isClaudeFableOrMythosModel, isClaudeOpus46Model, isClaudeOpus47Model, isClaudeOpus47OrLaterModel, isClaudeOpus48Model, isClaudeOpus5Model, isGeminiModel, isGlmModel, isGptModel, isGrok45Model, isGrok46Model, isKimiK2Model, isKimiK27Model, isKimiK3Model, isMiniMaxModel } from "@oh-my-opencode/model-core";
3
+ export { isClaudeFable5Model, isClaudeFableOrMythosModel, isClaudeOpus46Model, isClaudeOpus47Model, isClaudeOpus47OrLaterModel, isClaudeOpus48Model, isClaudeOpus5Model, isGeminiModel, isGlmModel, isGptModel, isGrok45Model, isGrok46Model, isKimiK2Model, isKimiK27Model, isKimiK3Model, isMiniMaxModel, };
4
4
  /**
5
5
  * Anthropic Opus 4.7+, Fable, and Mythos models reject thinking.type "enabled";
6
6
  * they require adaptive thinking plus an effort, which OpenCode core derives from