oh-my-opencode-slim 2.1.1 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja-JP.md +113 -118
- package/README.ko-KR.md +141 -123
- package/README.md +102 -145
- package/README.zh-CN.md +112 -118
- package/dist/agents/index.d.ts +0 -4
- package/dist/cli/index.js +57 -20
- package/dist/cli/providers.d.ts +11 -4
- package/dist/config/constants.d.ts +11 -1
- package/dist/config/schema.d.ts +680 -2
- package/dist/config/strip-orchestrator-model.d.ts +9 -0
- package/dist/hooks/command-hook-utils.d.ts +5 -0
- package/dist/hooks/foreground-fallback/index.d.ts +40 -28
- package/dist/hooks/image-hook.d.ts +1 -0
- package/dist/hooks/index.d.ts +1 -1
- package/dist/index.js +1992 -455
- package/dist/interview/document.d.ts +2 -1
- package/dist/interview/ui.d.ts +0 -1
- package/dist/multiplexer/cmux/close-policy.d.ts +20 -0
- package/dist/multiplexer/cmux/index.d.ts +102 -0
- package/dist/multiplexer/cmux/session-lifecycle.d.ts +92 -0
- package/dist/multiplexer/cmux/session-state.d.ts +45 -0
- package/dist/multiplexer/factory.d.ts +0 -9
- package/dist/multiplexer/herdr/index.d.ts +2 -0
- package/dist/multiplexer/index.d.ts +3 -1
- package/dist/multiplexer/session-manager.d.ts +10 -2
- package/dist/multiplexer/shared.d.ts +8 -1
- package/dist/multiplexer/types.d.ts +5 -2
- package/dist/multiplexer/zellij/index.d.ts +1 -1
- package/dist/tools/smartfetch/utils.d.ts +3 -1
- package/dist/tui-state.d.ts +5 -5
- package/dist/tui.js +87 -27
- package/dist/utils/escape-html.d.ts +1 -0
- package/dist/utils/frontmatter.d.ts +6 -0
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/logger.d.ts +0 -2
- package/oh-my-opencode-slim.schema.json +717 -2
- package/package.json +1 -1
- package/src/skills/clonedeps/SKILL.md +32 -29
- package/src/skills/codemap.md +5 -3
- package/src/skills/deepwork/SKILL.md +17 -6
- package/src/skills/verification-planning/SKILL.md +102 -0
- package/src/skills/worktrees/SKILL.md +14 -7
- package/src/skills/release-smoke-test/SKILL.md +0 -159
package/package.json
CHANGED
|
@@ -100,7 +100,37 @@ The orchestrator owns final approval. Before cloning:
|
|
|
100
100
|
5. Ask for confirmation before network cloning unless the user explicitly asked
|
|
101
101
|
to clone immediately.
|
|
102
102
|
|
|
103
|
-
### Step 4:
|
|
103
|
+
### Step 4: Update Ignore Files
|
|
104
|
+
|
|
105
|
+
Before cloning artifacts or cleaning cloned dependencies, inspect existing
|
|
106
|
+
`.gitignore` and `.ignore`. Update the managed block in place when present;
|
|
107
|
+
otherwise append it. Add only the missing exact lines below, never duplicate
|
|
108
|
+
entries or modify unrelated rules. These blocks keep cloned artifacts git-local
|
|
109
|
+
while the `.ignore` allowlist keeps them readable to OpenCode.
|
|
110
|
+
|
|
111
|
+
`.gitignore`:
|
|
112
|
+
|
|
113
|
+
```gitignore
|
|
114
|
+
# BEGIN oh-my-opencode-slim clonedeps
|
|
115
|
+
.slim/clonedeps/repos/
|
|
116
|
+
# END oh-my-opencode-slim clonedeps
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
`.ignore`:
|
|
120
|
+
|
|
121
|
+
```ignore
|
|
122
|
+
# BEGIN oh-my-opencode-slim clonedeps
|
|
123
|
+
!.slim/
|
|
124
|
+
!.slim/clonedeps.json
|
|
125
|
+
!.slim/clonedeps/
|
|
126
|
+
!.slim/clonedeps/repos/
|
|
127
|
+
!.slim/clonedeps/repos/**
|
|
128
|
+
.slim/clonedeps/repos/**/.git/
|
|
129
|
+
.slim/clonedeps/repos/**/.git/**
|
|
130
|
+
# END oh-my-opencode-slim clonedeps
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Step 5: Clone Sources Manually
|
|
104
134
|
|
|
105
135
|
Create one folder per source repository under:
|
|
106
136
|
|
|
@@ -135,7 +165,7 @@ Safe manual git pattern:
|
|
|
135
165
|
|
|
136
166
|
Do not run dependency install/build/test scripts from cloned repositories.
|
|
137
167
|
|
|
138
|
-
### Step
|
|
168
|
+
### Step 6: Write Local State
|
|
139
169
|
|
|
140
170
|
Write `.slim/clonedeps.json` so future agents know what exists:
|
|
141
171
|
|
|
@@ -173,33 +203,6 @@ Do not add `.slim/clonedeps.json` to `.gitignore`. It is small, reviewable
|
|
|
173
203
|
project metadata that can be committed. Only the cloned repository contents
|
|
174
204
|
under `.slim/clonedeps/repos/` should be ignored.
|
|
175
205
|
|
|
176
|
-
### Step 6: Update Ignore Files
|
|
177
|
-
|
|
178
|
-
Update `.gitignore` with an idempotent marker block:
|
|
179
|
-
|
|
180
|
-
```gitignore
|
|
181
|
-
# BEGIN oh-my-opencode-slim clonedeps
|
|
182
|
-
.slim/clonedeps/repos/
|
|
183
|
-
# END oh-my-opencode-slim clonedeps
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
Update `.ignore` so OpenCode can read the cloned source while git still ignores
|
|
187
|
-
it:
|
|
188
|
-
|
|
189
|
-
```ignore
|
|
190
|
-
# BEGIN oh-my-opencode-slim clonedeps
|
|
191
|
-
!.slim/
|
|
192
|
-
!.slim/clonedeps.json
|
|
193
|
-
!.slim/clonedeps/
|
|
194
|
-
!.slim/clonedeps/repos/
|
|
195
|
-
!.slim/clonedeps/repos/**
|
|
196
|
-
.slim/clonedeps/repos/**/.git/
|
|
197
|
-
.slim/clonedeps/repos/**/.git/**
|
|
198
|
-
# END oh-my-opencode-slim clonedeps
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
Only edit content inside these marker blocks.
|
|
202
|
-
|
|
203
206
|
### Step 7: Register Dependency Source in AGENTS.md
|
|
204
207
|
|
|
205
208
|
After successful cloning, update the repository root `AGENTS.md` so future
|
package/src/skills/codemap.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
### Skill Registry
|
|
13
13
|
|
|
14
|
-
- `CUSTOM_SKILLS` in `src/cli/custom-skills.ts` is the authoritative skill manifest for bundled skills
|
|
14
|
+
- `CUSTOM_SKILLS` in `src/cli/custom-skills-registry.ts` is the authoritative skill manifest for bundled skills
|
|
15
15
|
- Each entry maps folder name + `sourcePath` to an install-time consumer
|
|
16
16
|
- Skills are categorized by purpose and access scope:
|
|
17
17
|
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
| `clonedeps/` | General-purpose | Workflow skill for dependency source mirroring and inspection |
|
|
22
22
|
| `simplify/` | General-purpose | Readability and maintainability guidance skill |
|
|
23
23
|
| `deepwork/` | Orchestrator-only | Heavy coding sessions, multi-phase implementation, and risky refactors |
|
|
24
|
+
| `verification-planning/` | Orchestrator-only | Project-specific evidence planning and verification affordances before non-trivial implementation |
|
|
24
25
|
| `reflect/` | Orchestrator-only | Learning from repeated work and suggesting reusable improvements |
|
|
25
26
|
| `worktrees/` | Orchestrator-only | Safe Git worktree lanes for parallel, risky, or isolated work |
|
|
26
27
|
| `oh-my-opencode-slim/` | Orchestrator-only | Plugin configuration and self-improvement guidance |
|
|
@@ -39,7 +40,7 @@
|
|
|
39
40
|
|
|
40
41
|
## Flow
|
|
41
42
|
|
|
42
|
-
1. **Skill Discovery**: `src/cli/custom-skills.ts` defines `CUSTOM_SKILLS` array with skill metadata
|
|
43
|
+
1. **Skill Discovery**: `src/cli/custom-skills-registry.ts` defines `CUSTOM_SKILLS` array with skill metadata
|
|
43
44
|
2. **Installation**: `bun run install` delegates to `src/cli/install.ts`, where `installCustomSkills()` gates copying of each `CUSTOM_SKILLS` entry
|
|
44
45
|
3. **Validation**: `installCustomSkill()` computes `packageRoot`, validates `sourcePath`, then performs a recursive directory copy via `copyDirRecursive()`
|
|
45
46
|
4. **Distribution**: During plugin release, `package.json` `files` whitelist ensures `src/skills/**` are included in the published tarball
|
|
@@ -49,13 +50,14 @@
|
|
|
49
50
|
|
|
50
51
|
### Build & Release Dependencies
|
|
51
52
|
|
|
52
|
-
- `src/cli/custom-skills.ts`: Source-of-truth registry consumed by installer and permission helpers
|
|
53
|
+
- `src/cli/custom-skills-registry.ts`: Source-of-truth registry consumed by installer and permission helpers
|
|
53
54
|
- `src/cli/install.ts`: Contains `installCustomSkills()` and `installCustomSkill()` functions
|
|
54
55
|
- `verify-release-artifact.ts`: Enforces artifact completeness by asserting key bundled skill payloads are present in the tarball:
|
|
55
56
|
- `src/skills/simplify/SKILL.md`
|
|
56
57
|
- `src/skills/codemap/SKILL.md`
|
|
57
58
|
- `src/skills/clonedeps/SKILL.md`
|
|
58
59
|
- `src/skills/deepwork/SKILL.md`
|
|
60
|
+
- `src/skills/verification-planning/SKILL.md`
|
|
59
61
|
- `src/skills/reflect/SKILL.md`
|
|
60
62
|
- `src/skills/worktrees/SKILL.md`
|
|
61
63
|
- `src/skills/oh-my-opencode-slim/SKILL.md`
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: deepwork
|
|
3
|
-
description:
|
|
3
|
+
description: High-cost orchestrator workflow for large, high-risk, multi-phase coding efforts with meaningful dependencies and review gates. Do not activate for routine multi-file changes.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Deepwork
|
|
7
7
|
|
|
8
|
-
Deepwork is an orchestrator workflow for heavy coding sessions. Use it
|
|
9
|
-
work is
|
|
10
|
-
|
|
8
|
+
Deepwork is an orchestrator workflow for heavy coding sessions. Use it only
|
|
9
|
+
when the work is clearly large or high-risk: multiple dependent phases,
|
|
10
|
+
cross-cutting architectural change, unsafe-to-partially-ship migration, or
|
|
11
|
+
sustained coordination across several specialist lanes.
|
|
12
|
+
|
|
13
|
+
Do not infer Deepwork merely because a task touches multiple files. Do not use
|
|
14
|
+
it for trivial edits, quick docs changes, simple bug fixes, or routine bounded
|
|
15
|
+
features.
|
|
11
16
|
|
|
12
17
|
## Core Contract
|
|
13
18
|
|
|
@@ -16,6 +21,10 @@ not as the default implementation worker.
|
|
|
16
21
|
|
|
17
22
|
Required behavior:
|
|
18
23
|
|
|
24
|
+
- before planning, delegation, or creating a deepwork state file, inspect the
|
|
25
|
+
existing `.gitignore` and `.ignore`; add only missing entries, without
|
|
26
|
+
duplicates, so `.gitignore` contains `.slim/deepwork/` and `.ignore` contains
|
|
27
|
+
`!.slim/deepwork/` and `!.slim/deepwork/**`;
|
|
19
28
|
- keep OpenCode todos aligned with the active deepwork phase;
|
|
20
29
|
- create and maintain a local markdown progress file under `.slim/deepwork/`;
|
|
21
30
|
- write valuable research findings into that file as confirmed research context
|
|
@@ -65,8 +74,8 @@ Create a task-specific file such as:
|
|
|
65
74
|
.slim/deepwork/<short-task-slug>.md
|
|
66
75
|
```
|
|
67
76
|
|
|
68
|
-
|
|
69
|
-
|
|
77
|
+
Before creating this file—and before planning or delegation—inspect the existing
|
|
78
|
+
`.gitignore` and `.ignore`. Add only missing entries and do not add duplicates:
|
|
70
79
|
|
|
71
80
|
```gitignore
|
|
72
81
|
# .gitignore
|
|
@@ -79,6 +88,8 @@ project ignore files include:
|
|
|
79
88
|
!.slim/deepwork/**
|
|
80
89
|
```
|
|
81
90
|
|
|
91
|
+
These rules keep deepwork state git-local while allowing OpenCode to read it.
|
|
92
|
+
|
|
82
93
|
Do not follow a rigid template. Choose whatever markdown structure best fits the
|
|
83
94
|
work. The file only needs to remain useful as persistent session state and should
|
|
84
95
|
capture, as applicable:
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: verification-planning
|
|
3
|
+
description: Verification planning for non-trivial coding work. Use before implementing a feature, bug fix, refactor, cross-system change, or high-confidence behavior change that needs a credible project-specific evidence path.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Verification Planning
|
|
7
|
+
|
|
8
|
+
## Build an evidence path
|
|
9
|
+
|
|
10
|
+
Before changing a non-trivial system, build an **evidence path**: a
|
|
11
|
+
project-specific route from the claim being made to evidence that can establish,
|
|
12
|
+
limit, or refute it.
|
|
13
|
+
|
|
14
|
+
The purpose is not to select a familiar technique. The purpose is to decide how
|
|
15
|
+
this system can reveal the truth of this particular change.
|
|
16
|
+
|
|
17
|
+
## 1. Frame the claim
|
|
18
|
+
|
|
19
|
+
State the behavior that needs to become true and the conditions that could make
|
|
20
|
+
a confident conclusion wrong.
|
|
21
|
+
|
|
22
|
+
Consider what must change, what must remain true, where the behavior crosses a
|
|
23
|
+
boundary, and which failure would matter most.
|
|
24
|
+
|
|
25
|
+
**Complete when:** the claim, its meaningful uncertainty, and its important
|
|
26
|
+
failure modes are concrete enough to investigate.
|
|
27
|
+
|
|
28
|
+
## 2. Design the evidence path
|
|
29
|
+
|
|
30
|
+
Derive possible evidence paths from the system itself: its controllable inputs,
|
|
31
|
+
observable effects, state transitions, invariants, boundaries, artifacts, and
|
|
32
|
+
ability to repeat or reverse a scenario.
|
|
33
|
+
|
|
34
|
+
Generate alternatives before choosing. Prefer the path that produces a
|
|
35
|
+
trustworthy conclusion with proportionate cost, safety, and effort.
|
|
36
|
+
|
|
37
|
+
**Complete when:** there is a preferred path, its limitations are understood,
|
|
38
|
+
and a weaker or stronger alternative is available if circumstances change.
|
|
39
|
+
|
|
40
|
+
## 3. Create a verification affordance when needed
|
|
41
|
+
|
|
42
|
+
When the existing system leaves the decisive truth too indirect or ambiguous,
|
|
43
|
+
extend the evidence path with a **verification affordance**: the smallest
|
|
44
|
+
capability that makes the relevant state controllable, observable, repeatable,
|
|
45
|
+
and diagnosable for an agent.
|
|
46
|
+
|
|
47
|
+
Ask what capability would let an agent establish the claim directly, repeat the
|
|
48
|
+
scenario from a known state, and explain a failure without inference. Prefer an
|
|
49
|
+
affordance that strengthens directness, determinism, agent-legibility,
|
|
50
|
+
isolation, resetability, or future reuse.
|
|
51
|
+
|
|
52
|
+
Treat the affordance as part of the evidence path, not an automatic product
|
|
53
|
+
feature. Decide deliberately whether it is temporary or durable before building
|
|
54
|
+
it.
|
|
55
|
+
|
|
56
|
+
**Complete when:** the chosen path can establish the claim directly enough for
|
|
57
|
+
its stakes, and any needed affordance has a defined lifecycle.
|
|
58
|
+
|
|
59
|
+
## 4. Research when the path is unknown
|
|
60
|
+
|
|
61
|
+
When the right evidence path depends on an unfamiliar dependency, framework,
|
|
62
|
+
external service, or rapidly changing capability, ask `@librarian` for focused
|
|
63
|
+
research before committing to an approach.
|
|
64
|
+
|
|
65
|
+
Ask for official or project-specific facilities, constraints, and trade-offs
|
|
66
|
+
that affect this exact verification problem. Use existing project evidence
|
|
67
|
+
directly when it already resolves the choice.
|
|
68
|
+
|
|
69
|
+
**Complete when:** the chosen path rests on known capabilities and real
|
|
70
|
+
constraints rather than assumption.
|
|
71
|
+
|
|
72
|
+
## 5. Make the path runnable
|
|
73
|
+
|
|
74
|
+
Prepare only the support needed to follow the evidence path reliably. Keep the
|
|
75
|
+
support narrow, repeatable, and safe to inspect.
|
|
76
|
+
|
|
77
|
+
Decide whether that support has recurring value or exists only to resolve the
|
|
78
|
+
current uncertainty. Retain durable value deliberately; remove temporary
|
|
79
|
+
support once it has served its purpose.
|
|
80
|
+
|
|
81
|
+
Ask before introducing dependencies, persistent diagnostic surfaces, or
|
|
82
|
+
structural changes whose sole purpose is evidence gathering.
|
|
83
|
+
|
|
84
|
+
**Complete when:** the path can be followed without guessing about setup,
|
|
85
|
+
state, or interpretation.
|
|
86
|
+
|
|
87
|
+
## 6. Close the evidence path
|
|
88
|
+
|
|
89
|
+
After implementation, follow the planned path and interpret the resulting
|
|
90
|
+
evidence against the original claim.
|
|
91
|
+
|
|
92
|
+
Report whether the claim was established, limited, or refuted; distinguish
|
|
93
|
+
known facts from remaining uncertainty.
|
|
94
|
+
|
|
95
|
+
**Complete when:** a future reader can see what supports the conclusion and
|
|
96
|
+
what remains outside its reach.
|
|
97
|
+
|
|
98
|
+
## Scope
|
|
99
|
+
|
|
100
|
+
Use this skill proportionately. Small mechanical changes can follow ordinary
|
|
101
|
+
project checks directly. For larger multi-phase work, let this skill establish
|
|
102
|
+
the evidence path that later work follows.
|
|
@@ -81,7 +81,11 @@ operation.
|
|
|
81
81
|
|
|
82
82
|
### 3. Ignore File Setup
|
|
83
83
|
|
|
84
|
-
Before creating lanes,
|
|
84
|
+
Before creating or cleaning lanes, inspect existing `.gitignore` and `.ignore`.
|
|
85
|
+
Update the managed block in place when present; otherwise append it. Add only
|
|
86
|
+
the missing exact lines below, never duplicate entries or modify unrelated
|
|
87
|
+
rules. These blocks keep lane artifacts git-local while the `.ignore` allowlist
|
|
88
|
+
keeps them readable to OpenCode.
|
|
85
89
|
|
|
86
90
|
`.gitignore`:
|
|
87
91
|
|
|
@@ -111,7 +115,8 @@ Before creating lanes, add or update managed marker blocks only.
|
|
|
111
115
|
1. Identify the task scope and determine a short `<slug>` for the worktree.
|
|
112
116
|
2. Formulate a branch name. Default to `omos/<slug>` unless project/user conventions dictate otherwise.
|
|
113
117
|
3. Validate repository safety. Ask the user for confirmation to initialize the lane.
|
|
114
|
-
4.
|
|
118
|
+
4. Before creating the lane, ensure the managed ignore blocks are present using
|
|
119
|
+
the Ignore File Setup rules above.
|
|
115
120
|
5. Run:
|
|
116
121
|
```bash
|
|
117
122
|
git worktree add -b <branch-name> .slim/worktrees/<slug> <base-commit/branch>
|
|
@@ -138,14 +143,16 @@ Before merging or integrating the worktree branch:
|
|
|
138
143
|
checkout or the user-approved integration checkout.
|
|
139
144
|
|
|
140
145
|
### Phase 4: Cleanup & Pruning
|
|
141
|
-
1.
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
146
|
+
1. Before cleaning the lane, ensure the managed ignore blocks follow the Ignore
|
|
147
|
+
File Setup rules above.
|
|
148
|
+
2. Ensure all changes are safely merged or archived.
|
|
149
|
+
3. Confirm the worktree has no uncommitted changes.
|
|
150
|
+
4. Request user approval to remove the worktree.
|
|
151
|
+
5. Safely remove the worktree using:
|
|
145
152
|
```bash
|
|
146
153
|
git worktree remove .slim/worktrees/<slug>
|
|
147
154
|
```
|
|
148
|
-
|
|
155
|
+
6. Update `.slim/worktrees.json` to mark the lane as `archived` or remove it.
|
|
149
156
|
|
|
150
157
|
---
|
|
151
158
|
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: release-smoke-test
|
|
3
|
-
description: Test an oh-my-opencode-slim release candidate or bugfix before publishing. Use when validating a packed plugin artifact, release branch, crash fix, OpenCode runtime compatibility, or model-specific smoke test such as OpenCode 1.17.11 message transform regressions.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Release Smoke Test
|
|
7
|
-
|
|
8
|
-
Use this skill to validate an `oh-my-opencode-slim` release candidate before
|
|
9
|
-
public npm publish. Test the packed artifact, not `@latest` and not the source
|
|
10
|
-
tree.
|
|
11
|
-
|
|
12
|
-
## Core Workflow
|
|
13
|
-
|
|
14
|
-
1. Start from the release-prep branch or commit.
|
|
15
|
-
2. Build and pack the candidate.
|
|
16
|
-
3. Install the tarball into a throwaway app.
|
|
17
|
-
4. Create an isolated OpenCode config pointing at the installed
|
|
18
|
-
`node_modules/oh-my-opencode-slim/dist/index.js`.
|
|
19
|
-
5. Run `opencode debug config` and verify `plugin_origins` contains only the
|
|
20
|
-
intended plugin when doing an isolation smoke.
|
|
21
|
-
6. Run non-pure `opencode run --print-logs --log-level DEBUG`.
|
|
22
|
-
7. Search isolated logs for the original crash signature.
|
|
23
|
-
8. Record exact artifact, model, OpenCode version, command shape, result, and
|
|
24
|
-
limitations on the release issue or PR.
|
|
25
|
-
|
|
26
|
-
## Pack Candidate
|
|
27
|
-
|
|
28
|
-
Use a temp directory so release validation never depends on the local package
|
|
29
|
-
cache.
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
SMOKE=/tmp/oh-my-opencode-slim-release-smoke
|
|
33
|
-
rm -rf "$SMOKE"
|
|
34
|
-
mkdir -p "$SMOKE/pkg" "$SMOKE/app" "$SMOKE/home" "$SMOKE/xdg/opencode" "$SMOKE/run"
|
|
35
|
-
|
|
36
|
-
bun run build
|
|
37
|
-
npm pack --pack-destination "$SMOKE/pkg"
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
Install the tarball:
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
cd "$SMOKE/app"
|
|
44
|
-
bun init -y
|
|
45
|
-
bun add "$SMOKE/pkg"/oh-my-opencode-slim-*.tgz
|
|
46
|
-
node -p "require('./node_modules/oh-my-opencode-slim/package.json').version"
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## Isolated Config
|
|
50
|
-
|
|
51
|
-
Write the minimal OpenCode config:
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
cat > "$SMOKE/xdg/opencode/opencode.json" <<EOF
|
|
55
|
-
{
|
|
56
|
-
"model": "opencode/deepseek-v4-flash-free",
|
|
57
|
-
"plugin": [
|
|
58
|
-
"file://$SMOKE/app/node_modules/oh-my-opencode-slim/dist/index.js"
|
|
59
|
-
],
|
|
60
|
-
"agent": {
|
|
61
|
-
"orchestrator": {
|
|
62
|
-
"model": "opencode/deepseek-v4-flash-free"
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
EOF
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Use `env -i` for the cleanest smoke. This strips host `OPENCODE_*`, `ORCA_*`,
|
|
70
|
-
and project overlay variables that can silently add plugins or provider aliases.
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
env -i PATH="$PATH" HOME="$SMOKE/home" XDG_CONFIG_HOME="$SMOKE/xdg" \
|
|
74
|
-
opencode debug config
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Confirm:
|
|
78
|
-
|
|
79
|
-
- `plugin_origins` has exactly one entry.
|
|
80
|
-
- That entry points to the temp app's packed `dist/index.js`.
|
|
81
|
-
- The model is the one intended for the smoke.
|
|
82
|
-
|
|
83
|
-
If OpenCode needs provider aliases from the host environment, run a second
|
|
84
|
-
non-isolated model-specific smoke and clearly label it as weaker isolation.
|
|
85
|
-
|
|
86
|
-
## Runtime Smoke
|
|
87
|
-
|
|
88
|
-
Run the actual prompt with timeout:
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
env -i PATH="$PATH" HOME="$SMOKE/home" XDG_CONFIG_HOME="$SMOKE/xdg" \
|
|
92
|
-
timeout 120 \
|
|
93
|
-
opencode run --print-logs --log-level DEBUG "Say OK only."
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Expected result:
|
|
97
|
-
|
|
98
|
-
```text
|
|
99
|
-
OK
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
Search logs for the bug signature. For the OpenCode 1.17.11 malformed-message
|
|
103
|
-
crash, use:
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
rg "message\\.info\\.role|undefined is not an object|Cannot read properties of undefined|TypeError" \
|
|
107
|
-
"$SMOKE/home/.local/share/opencode/log" -n 2>/dev/null || true
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
No matches should appear.
|
|
111
|
-
|
|
112
|
-
## OpenAI / Host-Provider Smoke
|
|
113
|
-
|
|
114
|
-
If the fully isolated environment cannot resolve OpenAI provider aliases, run a
|
|
115
|
-
separate host-provider smoke while keeping the plugin path pointed at the
|
|
116
|
-
tarball install.
|
|
117
|
-
|
|
118
|
-
```bash
|
|
119
|
-
mkdir -p "$SMOKE/config"
|
|
120
|
-
cat > "$SMOKE/config/opencode.json" <<EOF
|
|
121
|
-
{
|
|
122
|
-
"model": "openai/gpt-5.6-fast",
|
|
123
|
-
"plugin": [
|
|
124
|
-
"file://$SMOKE/app/node_modules/oh-my-opencode-slim/dist/index.js"
|
|
125
|
-
],
|
|
126
|
-
"agent": {
|
|
127
|
-
"orchestrator": {
|
|
128
|
-
"model": "openai/gpt-5.6-fast"
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
EOF
|
|
133
|
-
|
|
134
|
-
OPENCODE_CONFIG_DIR="$SMOKE/config" \
|
|
135
|
-
timeout 120 \
|
|
136
|
-
opencode run --print-logs --log-level DEBUG "Say OK only."
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
Report this as a host-provider smoke because existing project, user, or Orca
|
|
140
|
-
OpenCode config may still merge in. Use `opencode debug config` to disclose
|
|
141
|
-
what else loaded.
|
|
142
|
-
|
|
143
|
-
## Reporting Template
|
|
144
|
-
|
|
145
|
-
```markdown
|
|
146
|
-
## Release-candidate smoke validation
|
|
147
|
-
|
|
148
|
-
- Commit under test:
|
|
149
|
-
- Tarball:
|
|
150
|
-
- Installed package version:
|
|
151
|
-
- OpenCode version:
|
|
152
|
-
- Config isolation: sanitized `env -i` / host-provider
|
|
153
|
-
- Plugin origin:
|
|
154
|
-
- Model:
|
|
155
|
-
- Command:
|
|
156
|
-
- Result:
|
|
157
|
-
- Crash signature search:
|
|
158
|
-
- Limitations:
|
|
159
|
-
```
|