@zhuk/spego 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/README.md +24 -1
- package/dist/cli.js +3 -4
- package/dist/cli.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/generator/claude.d.ts +1 -0
- package/dist/generator/claude.js +16 -1
- package/dist/generator/claude.js.map +1 -1
- package/dist/generator/index.js +2 -0
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/opencode.d.ts +5 -0
- package/dist/generator/opencode.js +207 -0
- package/dist/generator/opencode.js.map +1 -0
- package/dist/generator/write.d.ts +1 -0
- package/dist/generator/write.js +14 -0
- package/dist/generator/write.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/workspace/config.d.ts +64 -0
- package/dist/workspace/config.js +12 -0
- package/dist/workspace/config.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
5
|
+
No unreleased changes yet.
|
|
6
|
+
|
|
7
|
+
## [0.11.0] - 2026-05-31
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
- OpenCode is now a first-class generated target. Workspaces can list `opencode` in `.spego/config.yaml` to emit `/spego-apply`, `/spego-verify`, and `/spego-explore` command files under `.opencode/commands/`.
|
|
11
|
+
- Spego no longer exposes daemon-backed `spego orchestrate`; apply/verify/explore workflows now run inside the active OpenCode instance.
|
|
12
|
+
- `/spego-apply` now defines explicit current-session phases (select, load context, plan tasks, execute work, verify results, update task checkboxes, summarize status) and allows OpenCode-native subagents only inside the active instance.
|
|
13
|
+
- `/spego-verify` and `/spego-explore` now state they run entirely inside the active OpenCode instance.
|
|
14
|
+
- Build now cleans `dist/` before TypeScript compilation to prevent stale daemon-backed files from being packaged.
|
|
15
|
+
- Generated OpenCode commands now clean up stale `opsx-*` commands and `openspec-*` skills when they carry the `spego_generated: true` marker.
|
|
16
|
+
|
|
17
|
+
### Removed
|
|
18
|
+
- Removed Spego-owned OpenCode REST orchestration code and stopped writing new `orchestration` server/model config blocks.
|
|
19
|
+
- Removed `ultracode/` sample directory (daemon-backed multi-agent orchestrator that no longer aligns with Spego's local CLI architecture).
|
|
20
|
+
|
|
21
|
+
## [0.10.1] - 2026-05-30
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- `npm run build` now sets executable mode (`chmod 0o755`) on `dist/cli.js` after TypeScript compilation, fixing `EACCES` failures when CI executes the installed `spego` bin symlink on clean checkouts.
|
|
25
|
+
|
|
26
|
+
## [0.10.0] - 2026-05-30
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
- **Multi-agent orchestration** (`spego orchestrate --change <name>`): a manager → swarm → verifier pipeline that executes a planned OpenSpec change through the OpenCode REST API, ported to TypeScript under `src/orchestration/`. Supports `sequential`/`parallel`/`adaptive` scheduling, an in-process per-task file gate, a test-backed verdict, and run-artifact persistence under a configurable work dir.
|
|
30
|
+
- `orchestration` block in `.spego/config.yaml` (server URL, model tiers, max parallelism, work dir) with `SPEGO_ORCHESTRATION_*` and `OPENCODE_*` environment overrides. Model identifiers are fully configurable with no fictional defaults.
|
|
31
|
+
- `spego init` / `spego skills` now emit the OpenCode agent prompts (`ultramanager`, `ultraworker`, `ultraverifier`) and the `orchestrate` command under `.opencode/`.
|
|
32
|
+
- OpenSpec change `add-ultracode-orchestration` documenting and validating the capability.
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
- Archived the completed OpenSpec changes `2026-05-29-clean-cli-command-surface` and `add-ultracode-orchestration`, syncing their delta specs into the main specs tree.
|
|
36
|
+
|
|
37
|
+
## [0.9.1] - 2026-05-30
|
|
38
|
+
|
|
39
|
+
Maintenance release: cleaned up the v0.9.0 commit history. No functional changes.
|
|
40
|
+
|
|
3
41
|
## [0.9.0] - 2026-05-29
|
|
4
42
|
|
|
5
43
|
### Changed
|
|
@@ -15,6 +53,7 @@
|
|
|
15
53
|
|
|
16
54
|
### Fixed
|
|
17
55
|
- `npm run lint` now includes `test/cli-help-exit.test.ts` and the new CLI test files in ESLint project-service configuration.
|
|
56
|
+
- Installed package `spego` bin symlinks now execute the CLI entrypoint correctly.
|
|
18
57
|
|
|
19
58
|
## [0.8.0] - 2026-05-22
|
|
20
59
|
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Agent-first product orchestration: markdown-first artifact engine with SQLite in
|
|
|
7
7
|
```sh
|
|
8
8
|
npm install
|
|
9
9
|
npm run build
|
|
10
|
-
spego init --agents claude --demo false
|
|
10
|
+
spego init --agents claude,opencode --demo false
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
## Commands
|
|
@@ -69,6 +69,7 @@ Workspace config lives at `.spego/config.yaml`:
|
|
|
69
69
|
version: 1
|
|
70
70
|
agents:
|
|
71
71
|
- claude
|
|
72
|
+
- opencode
|
|
72
73
|
demo: false
|
|
73
74
|
extraArtifactTypes: []
|
|
74
75
|
deliveryAdapter:
|
|
@@ -91,6 +92,20 @@ The adapter is read-only. It observes OpenSpec state but does not create, contin
|
|
|
91
92
|
|
|
92
93
|
Archived changes under `openspec/changes/archive/` are excluded. A change with no `tasks.md` is reported as `planning-incomplete`.
|
|
93
94
|
|
|
95
|
+
## OpenCode Workflows
|
|
96
|
+
|
|
97
|
+
When `opencode` is listed in `.spego/config.yaml` agents, `spego init` and `spego skills` generate static OpenCode commands under `.opencode/commands/`:
|
|
98
|
+
|
|
99
|
+
- `/spego-apply` implements pending tasks from an OpenSpec change in the active OpenCode instance.
|
|
100
|
+
- `/spego-verify` checks completeness, correctness, coherence, and tests before archive.
|
|
101
|
+
- `/spego-explore` enters a read-only exploration stance for ideas, problems, or OpenSpec changes.
|
|
102
|
+
|
|
103
|
+
`/spego-apply` runs as a phased current-session workflow: select the change, load context, plan tasks, execute work, verify results, update task checkboxes, and summarize status. It may use OpenCode-native subagents only inside the active OpenCode instance for independent investigation, implementation review, or verification.
|
|
104
|
+
|
|
105
|
+
Spego does not start or control OpenCode through `opencode serve`, does not call the OpenCode REST API, does not create external OpenCode sessions, and does not own model selection. Configure models, variants, agents, and permissions in OpenCode itself.
|
|
106
|
+
|
|
107
|
+
There are no `spego apply`, `spego verify`, `spego explore`, or `spego orchestrate` CLI commands. Apply, verify, and explore are generated OpenCode workflows; spego remains the local artifact engine and read-only OpenSpec delivery view.
|
|
108
|
+
|
|
94
109
|
## Generated Files
|
|
95
110
|
|
|
96
111
|
For Claude agent targets, `spego init` generates:
|
|
@@ -98,8 +113,16 @@ For Claude agent targets, `spego init` generates:
|
|
|
98
113
|
- `.claude/skills/spego-<command>/SKILL.md` — skill definitions following Claude Code conventions
|
|
99
114
|
- `.claude/commands/spego/` — slash command wrappers
|
|
100
115
|
|
|
116
|
+
For OpenCode targets, `spego init` generates:
|
|
117
|
+
|
|
118
|
+
- `.opencode/commands/spego-apply.md`
|
|
119
|
+
- `.opencode/commands/spego-verify.md`
|
|
120
|
+
- `.opencode/commands/spego-explore.md`
|
|
121
|
+
|
|
101
122
|
Run `spego skills` to update generated files without reinitializing the workspace.
|
|
102
123
|
|
|
124
|
+
During regeneration, Spego removes stale generated OpenCode compatibility files such as old `opsx-*` commands, `openspec-*` skills, and retired orchestration assets only when they carry the `spego_generated: true` marker. User-owned OpenCode files without that marker are preserved and reported as skipped.
|
|
125
|
+
|
|
103
126
|
## Workflow Skills
|
|
104
127
|
|
|
105
128
|
Workflow skills guide an agent through a multi-persona process inside the chat, persisting results as spego artifacts at well-defined checkpoints.
|
package/dist/cli.js
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
* in `src/cli/runtime.ts`. Error formatting is centralized in `src/cli/errors.ts`.
|
|
9
9
|
*/
|
|
10
10
|
import { Command } from 'commander';
|
|
11
|
+
import { realpathSync } from 'node:fs';
|
|
12
|
+
import { fileURLToPath } from 'node:url';
|
|
11
13
|
import pkg from '../package.json' with { type: 'json' };
|
|
12
14
|
import { fail, failValidation } from './cli/errors.js';
|
|
13
15
|
import { registerMeta } from './cli/commands/meta.js';
|
|
@@ -61,10 +63,7 @@ function isEntryPoint() {
|
|
|
61
63
|
if (!argv1)
|
|
62
64
|
return false;
|
|
63
65
|
try {
|
|
64
|
-
|
|
65
|
-
if (url.protocol !== 'file:')
|
|
66
|
-
return false;
|
|
67
|
-
return url.pathname.endsWith(argv1) || argv1.endsWith(url.pathname);
|
|
66
|
+
return realpathSync(argv1) === fileURLToPath(import.meta.url);
|
|
68
67
|
}
|
|
69
68
|
catch {
|
|
70
69
|
return false;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,QAAQ,EAAE,mDAAmD,EAAE,KAAK,CAAC;SAC5E,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAExB,OAAO,CAAC,eAAe,CAAC;QACtB,QAAQ,EAAE,CAAC,GAAW,EAAE,EAAE;YACxB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAe,CAAC;YAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,IACE,GAAG,CAAC,IAAI,KAAK,gBAAgB;YAC7B,GAAG,CAAC,IAAI,KAAK,yBAAyB;YACtC,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAChC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,IAAe,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3B,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE1B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY;IACnB,IAAI,OAAO,OAAO,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,CAAC;QACH,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Structured error codes returned by the spego artifact engine.
|
|
3
3
|
* Stable across CLI/JSON outputs so agents can branch on them.
|
|
4
4
|
*/
|
|
5
|
-
export type SpegoErrorCode = 'WORKSPACE_NOT_FOUND' | 'WORKSPACE_ALREADY_EXISTS' | 'INVALID_ARTIFACT_TYPE' | 'VALIDATION_FAILED' | 'ARTIFACT_NOT_FOUND' | 'REVISION_CONFLICT' | 'REVISION_NOT_FOUND' | 'WRITE_FAILED' | 'INDEX_REBUILD_FAILED' | 'DELIVERY_ADAPTER_NOT_FOUND' | 'DELIVERY_ADAPTER_ERROR' | 'DELIVERY_READ_ONLY';
|
|
5
|
+
export type SpegoErrorCode = 'WORKSPACE_NOT_FOUND' | 'WORKSPACE_ALREADY_EXISTS' | 'INVALID_ARTIFACT_TYPE' | 'VALIDATION_FAILED' | 'ARTIFACT_NOT_FOUND' | 'REVISION_CONFLICT' | 'REVISION_NOT_FOUND' | 'WRITE_FAILED' | 'INDEX_REBUILD_FAILED' | 'DELIVERY_ADAPTER_NOT_FOUND' | 'DELIVERY_ADAPTER_ERROR' | 'DELIVERY_READ_ONLY' | 'CHANGE_NOT_FOUND';
|
|
6
6
|
export interface SpegoErrorDetails {
|
|
7
7
|
[key: string]: unknown;
|
|
8
8
|
}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAuBA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnB,IAAI,CAAiB;IACrB,OAAO,CAAoB;IAE3C,YAAY,IAAoB,EAAE,OAAe,EAAE,UAA6B,EAAE;QAChF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAC3E,CAAC;CACF"}
|
package/dist/generator/claude.js
CHANGED
|
@@ -2,7 +2,7 @@ import path from 'node:path';
|
|
|
2
2
|
import fs from 'node:fs/promises';
|
|
3
3
|
import { COMMAND_REGISTRY } from '../commands/registry.js';
|
|
4
4
|
import { WORKFLOW_REGISTRY } from '../workflows/registry.js';
|
|
5
|
-
import { writeGeneratedFile } from './write.js';
|
|
5
|
+
import { writeGeneratedFile, removeGeneratedFile } from './write.js';
|
|
6
6
|
import { GENERATOR_VERSION } from './types.js';
|
|
7
7
|
import { isLegacySpegoGenerated, isSpegoGenerated } from './markers.js';
|
|
8
8
|
function toKebab(name) {
|
|
@@ -149,6 +149,8 @@ export class ClaudeGenerator {
|
|
|
149
149
|
files.push(...cleaned);
|
|
150
150
|
const legacyCleaned = await this.cleanupLegacyRegeneratePaths(skillsDir, commandsDir);
|
|
151
151
|
files.push(...legacyCleaned);
|
|
152
|
+
const removedOrchestrate = await this.cleanupRemovedOrchestratePaths(skillsDir, commandsDir);
|
|
153
|
+
files.push(...removedOrchestrate);
|
|
152
154
|
for (const cmd of COMMAND_REGISTRY) {
|
|
153
155
|
const skillDir = path.join(skillsDir, `spego-${cmd.name}`);
|
|
154
156
|
const skillPath = path.join(skillDir, 'SKILL.md');
|
|
@@ -193,5 +195,18 @@ export class ClaudeGenerator {
|
|
|
193
195
|
}
|
|
194
196
|
return cleaned;
|
|
195
197
|
}
|
|
198
|
+
async cleanupRemovedOrchestratePaths(skillsDir, commandsDir) {
|
|
199
|
+
const cleaned = [];
|
|
200
|
+
const removedPaths = [
|
|
201
|
+
path.join(skillsDir, 'spego-orchestrate', 'SKILL.md'),
|
|
202
|
+
path.join(commandsDir, 'orchestrate.md'),
|
|
203
|
+
];
|
|
204
|
+
for (const filePath of removedPaths) {
|
|
205
|
+
const action = await removeGeneratedFile(filePath);
|
|
206
|
+
if (action)
|
|
207
|
+
cleaned.push({ path: filePath, action });
|
|
208
|
+
}
|
|
209
|
+
return cleaned;
|
|
210
|
+
}
|
|
196
211
|
}
|
|
197
212
|
//# sourceMappingURL=claude.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/generator/claude.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/generator/claude.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAExE,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAgB;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;SACjH,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;IAChD,OAAO;QACL,KAAK;QACL,eAAe,GAAG,CAAC,IAAI,EAAE;QACzB,gBAAgB,GAAG,CAAC,WAAW,+BAA+B,SAAS,uBAAuB,GAAG,CAAC,IAAI,IAAI;QAC1G,KAAK;QACL,EAAE;QACF,eAAe,GAAG,CAAC,IAAI,gBAAgB,SAAS,sDAAsD;QACtG,EAAE;QACF,UAAU;QACV,EAAE;QACF,SAAS;QACT,SAAS,GAAG,CAAC,IAAI,mBAAmB;QACpC,KAAK;QACL,EAAE;QACF,YAAY;QACZ,EAAE;QACF,OAAO,IAAI,QAAQ;QACnB,EAAE;QACF,WAAW;QACX,EAAE;QACF,YAAY,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gFAAgF;QACtH,EAAE;QACF,WAAW;QACX,EAAE;QACF,uEAAuE;QACvE,oGAAoG;QACpG,6EAA6E;QAC7E,+GAA+G;QAC/G,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAgB;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM;SACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,QAAQ,mBAAmB,CAAC,CAAC,WAAW,KAAK,CAAC;SACjH,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO;QACL,KAAK;QACL,eAAe,GAAG,CAAC,IAAI,EAAE;QACzB,gBAAgB,GAAG,CAAC,WAAW,EAAE;QACjC,YAAY;QACZ,QAAQ,IAAI,MAAM;QAClB,KAAK;QACL,EAAE;QACF,YAAY;QACZ,EAAE;QACF,4BAA4B;QAC5B,EAAE;QACF,SAAS;QACT,SAAS,GAAG,CAAC,IAAI,oBAAoB;QACrC,KAAK;QACL,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAkB;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;SACnD,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;SACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;SAC7C,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;SACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;SACzF,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,YAAY,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;SACjG,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,OAAO;QACL,KAAK;QACL,eAAe,IAAI,CAAC,IAAI,EAAE;QAC1B,gBAAgB,IAAI,CAAC,WAAW,EAAE;QAClC,KAAK;QACL,EAAE;QACF,aAAa;QACb,EAAE;QACF,QAAQ;QACR,EAAE;QACF,WAAW;QACX,EAAE;QACF,MAAM;QACN,EAAE;QACF,WAAW;QACX,EAAE;QACF,MAAM,IAAI,QAAQ;QAClB,EAAE;QACF,YAAY;QACZ,EAAE;QACF,OAAO,IAAI,QAAQ;QACnB,EAAE;QACF,gBAAgB;QAChB,EAAE;QACF,sCAAsC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;QAC7G,EAAE;QACF,oBAAoB;QACpB,EAAE;QACF,2LAA2L;QAC3L,EAAE;QACF,WAAW;QACX,EAAE;QACF,MAAM;QACN,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,SAAiB;IACtD,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,OAAO,eAAe;IACjB,UAAU,GAAG,QAAQ,CAAC;IAE/B,KAAK,CAAC,QAAQ,CAAC,WAAmB;QAChC,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAE3E,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAEvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACtF,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAE7B,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,8BAA8B,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC7F,KAAK,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;QAElC,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAClD,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YAErD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAClD,MAAM,YAAY,GAAG,2BAA2B,CAAC,EAAE,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IACxE,CAAC;IAEO,KAAK,CAAC,4BAA4B,CACxC,SAAiB,EACjB,WAAmB;QAEnB,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,EAAE,UAAU,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC;SACxC,CAAC;QACF,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;YACnC,IAAI,OAAe,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9B,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,8BAA8B,CAC1C,SAAiB,EACjB,WAAmB;QAEnB,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG;YACnB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,EAAE,UAAU,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC;SACzC,CAAC;QACF,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
package/dist/generator/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ClaudeGenerator } from './claude.js';
|
|
2
|
+
import { OpencodeGenerator } from './opencode.js';
|
|
2
3
|
const GENERATORS = new Map();
|
|
3
4
|
export function registerGenerator(gen) {
|
|
4
5
|
GENERATORS.set(gen.targetName, gen);
|
|
@@ -10,6 +11,7 @@ export function availableTargets() {
|
|
|
10
11
|
return [...GENERATORS.keys()];
|
|
11
12
|
}
|
|
12
13
|
registerGenerator(new ClaudeGenerator());
|
|
14
|
+
registerGenerator(new OpencodeGenerator());
|
|
13
15
|
export async function generateAll(projectRoot, targets, options = {}) {
|
|
14
16
|
const emitWarnings = options.emitWarnings ?? true;
|
|
15
17
|
const reports = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,UAAU,GAAiC,IAAI,GAAG,EAAE,CAAC;AAE3D,MAAM,UAAU,iBAAiB,CAAC,GAAoB;IACpD,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,iBAAiB,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;AACzC,iBAAiB,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;AAM3C,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,WAAmB,EACnB,OAAiB,EACjB,UAA8B,EAAE;IAEhC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC;IAClD,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,MAAM,eAAe,CAAC,CAAC;YAC9F,CAAC;YACD,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { writeGeneratedFile, removeGeneratedFile } from './write.js';
|
|
3
|
+
import { GENERATOR_VERSION } from './types.js';
|
|
4
|
+
const SPEGO_APPLY = `---
|
|
5
|
+
description: Implement tasks from an OpenSpec change using the active OpenCode instance
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Implement tasks from an OpenSpec change.
|
|
9
|
+
|
|
10
|
+
Input: optionally specify a change name after \`/spego-apply\`. If omitted, infer it from conversation context only when unambiguous. If multiple active changes could apply, run \`openspec list --json\` and ask the user to choose.
|
|
11
|
+
|
|
12
|
+
## Phases
|
|
13
|
+
|
|
14
|
+
### Phase 1 — Select the change
|
|
15
|
+
|
|
16
|
+
- If a change name is provided, announce: \`Using change: <name>\`.
|
|
17
|
+
- If omitted, run \`openspec list --json\` and ask the user to choose when multiple active changes exist.
|
|
18
|
+
- Do not guess or infer when more than one active change is possible.
|
|
19
|
+
|
|
20
|
+
### Phase 2 — Load context
|
|
21
|
+
|
|
22
|
+
- Run \`openspec status --change "<name>" --json\` to get current state.
|
|
23
|
+
- Run \`openspec instructions apply --change "<name>" --json\` to get context file paths.
|
|
24
|
+
- Read every file listed in \`contextFiles\`. Follow the schema-specific instruction from the CLI output; do not assume fixed artifact names.
|
|
25
|
+
|
|
26
|
+
### Phase 3 — Plan tasks
|
|
27
|
+
|
|
28
|
+
- Review the tasks artifact and identify all pending (unchecked) tasks.
|
|
29
|
+
- Determine execution order based on task dependencies and the change's design doc.
|
|
30
|
+
- Present the planned order to the user before proceeding.
|
|
31
|
+
|
|
32
|
+
### Phase 4 — Execute work
|
|
33
|
+
|
|
34
|
+
- Implement pending tasks in order, keeping each change minimal and scoped.
|
|
35
|
+
- Follow the repository's existing conventions, imports, and patterns.
|
|
36
|
+
- After completing each task, mark its checkbox in the tasks artifact from \`- [ ]\` to \`- [x]\`.
|
|
37
|
+
|
|
38
|
+
### Phase 5 — Verify results
|
|
39
|
+
|
|
40
|
+
- After each task, confirm the implementation aligns with the relevant spec and design decisions.
|
|
41
|
+
- Run available tests when the change or repository identifies them.
|
|
42
|
+
- If a task fails verification, note the issue and either fix it or pause for guidance.
|
|
43
|
+
|
|
44
|
+
### Phase 6 — Update task checkboxes
|
|
45
|
+
|
|
46
|
+
- After verifying a task, ensure its checkbox is marked \`- [x]\` in the tasks artifact.
|
|
47
|
+
- Only mark tasks complete when implementation and verification both succeed.
|
|
48
|
+
- Do not mark tasks that were skipped or left incomplete.
|
|
49
|
+
|
|
50
|
+
### Phase 7 — Summarize status
|
|
51
|
+
|
|
52
|
+
- Report completed tasks, remaining tasks, and any blockers encountered.
|
|
53
|
+
- Recommend the next OpenSpec action (continue, verify, or archive).
|
|
54
|
+
- Pause and ask the user when a task is ambiguous, implementation exposes a design/spec issue, or a blocker prevents safe progress.
|
|
55
|
+
|
|
56
|
+
## Subagents
|
|
57
|
+
|
|
58
|
+
Subagents may be used ONLY inside the current OpenCode session for independent investigation, implementation review, or verification. All subagent work runs within this instance using its existing model, agents, and permissions.
|
|
59
|
+
|
|
60
|
+
The following are forbidden:
|
|
61
|
+
|
|
62
|
+
- Spego spawning agents or orchestrating subagent pools.
|
|
63
|
+
- Spego choosing or switching models for subagents.
|
|
64
|
+
- Creating external sessions, connecting to daemons, or calling REST APIs.
|
|
65
|
+
- Any operation that leaves the current OpenCode process boundary.
|
|
66
|
+
|
|
67
|
+
## Guardrails
|
|
68
|
+
|
|
69
|
+
- Do not call the removed Spego orchestration command.
|
|
70
|
+
- Do not start or require a separate OpenCode daemon.
|
|
71
|
+
- Do not mutate OpenSpec lifecycle state except task checkboxes required by apply workflow.
|
|
72
|
+
- Use OpenCode's current model, agents, permissions, and runtime configuration.
|
|
73
|
+
`;
|
|
74
|
+
const SPEGO_VERIFY = `---
|
|
75
|
+
description: Verify implementation against OpenSpec change artifacts before archive
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
Verify that implementation matches a change's OpenSpec artifacts.
|
|
79
|
+
|
|
80
|
+
This command runs entirely inside the active OpenCode instance. Do not connect to a daemon or REST API.
|
|
81
|
+
|
|
82
|
+
Input: optionally specify a change name after \`/spego-verify\`. If omitted, ask the user to choose from active changes; do not guess.
|
|
83
|
+
|
|
84
|
+
## Steps
|
|
85
|
+
|
|
86
|
+
1. Select the change. If needed, run \`openspec list --json\` and ask the user.
|
|
87
|
+
|
|
88
|
+
2. Check status:
|
|
89
|
+
|
|
90
|
+
\`\`\`bash
|
|
91
|
+
openspec status --change "<name>" --json
|
|
92
|
+
\`\`\`
|
|
93
|
+
|
|
94
|
+
3. Load context paths:
|
|
95
|
+
|
|
96
|
+
\`\`\`bash
|
|
97
|
+
openspec instructions apply --change "<name>" --json
|
|
98
|
+
\`\`\`
|
|
99
|
+
|
|
100
|
+
4. Read all available files from \`contextFiles\`, including proposal, design, specs, and tasks when present.
|
|
101
|
+
|
|
102
|
+
5. Verify completeness: task checkboxes, requirement coverage, and any documented acceptance criteria.
|
|
103
|
+
|
|
104
|
+
6. Verify correctness: compare implementation evidence with each requirement and scenario. Reference concrete files and lines where possible.
|
|
105
|
+
|
|
106
|
+
7. Verify coherence: compare implementation with design decisions and repository patterns.
|
|
107
|
+
|
|
108
|
+
8. Run relevant tests when the change or repository identifies them. If no test command is obvious, state that explicitly.
|
|
109
|
+
|
|
110
|
+
9. Report findings grouped as CRITICAL, WARNING, and SUGGESTION, followed by a final archive-readiness assessment.
|
|
111
|
+
|
|
112
|
+
## Guardrails
|
|
113
|
+
|
|
114
|
+
- Do not call the removed Spego orchestration command.
|
|
115
|
+
- Do not start or require a separate OpenCode daemon.
|
|
116
|
+
- Do not mark OpenSpec lifecycle state complete or archive the change.
|
|
117
|
+
- Prefer actionable findings with file references over vague recommendations.
|
|
118
|
+
`;
|
|
119
|
+
const SPEGO_EXPLORE = `---
|
|
120
|
+
description: Explore ideas, problems, or OpenSpec changes without implementing code
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
Enter explore mode. Think through ideas, investigate code, clarify requirements, and surface options without implementing code.
|
|
124
|
+
|
|
125
|
+
This command runs entirely inside the active OpenCode instance. Do not connect to a daemon or REST API.
|
|
126
|
+
|
|
127
|
+
Input: anything after \`/spego-explore\` is the topic, problem, or change name to explore.
|
|
128
|
+
|
|
129
|
+
## Stance
|
|
130
|
+
|
|
131
|
+
- Be curious and grounded in the repository.
|
|
132
|
+
- Ask questions that emerge naturally from the evidence.
|
|
133
|
+
- Use concise diagrams or tables when they clarify trade-offs.
|
|
134
|
+
- Follow interesting threads without forcing a fixed workflow.
|
|
135
|
+
|
|
136
|
+
## OpenSpec Awareness
|
|
137
|
+
|
|
138
|
+
At the start, check active changes when relevant:
|
|
139
|
+
|
|
140
|
+
\`\`\`bash
|
|
141
|
+
openspec list --json
|
|
142
|
+
\`\`\`
|
|
143
|
+
|
|
144
|
+
If the user names a change, read its available artifacts such as proposal, design, specs, and tasks. Reference them naturally in the discussion.
|
|
145
|
+
|
|
146
|
+
## Capture Options
|
|
147
|
+
|
|
148
|
+
When insights crystallize, offer to capture them in the right OpenSpec artifact. Do not auto-capture unless the user asks.
|
|
149
|
+
|
|
150
|
+
## Guardrails
|
|
151
|
+
|
|
152
|
+
- Do not implement application code in explore mode.
|
|
153
|
+
- Do not call the removed Spego orchestration command.
|
|
154
|
+
- Do not start or require a separate OpenCode daemon.
|
|
155
|
+
- Creating or editing OpenSpec artifacts is allowed only when the user explicitly asks to capture the thinking.
|
|
156
|
+
`;
|
|
157
|
+
const COMMAND_ASSETS = [
|
|
158
|
+
{ relPath: '.opencode/commands/spego-apply.md', content: SPEGO_APPLY },
|
|
159
|
+
{ relPath: '.opencode/commands/spego-verify.md', content: SPEGO_VERIFY },
|
|
160
|
+
{ relPath: '.opencode/commands/spego-explore.md', content: SPEGO_EXPLORE },
|
|
161
|
+
];
|
|
162
|
+
const STALE_ASSET_PATHS = [
|
|
163
|
+
'.opencode/commands/orchestrate.md',
|
|
164
|
+
'.opencode/commands/workflow.md',
|
|
165
|
+
'.opencode/commands/opsx-new.md',
|
|
166
|
+
'.opencode/commands/opsx-continue.md',
|
|
167
|
+
'.opencode/commands/opsx-ff.md',
|
|
168
|
+
'.opencode/commands/opsx-apply.md',
|
|
169
|
+
'.opencode/commands/opsx-verify.md',
|
|
170
|
+
'.opencode/commands/opsx-archive.md',
|
|
171
|
+
'.opencode/commands/opsx-bulk-archive.md',
|
|
172
|
+
'.opencode/commands/opsx-sync.md',
|
|
173
|
+
'.opencode/commands/opsx-explore.md',
|
|
174
|
+
'.opencode/agents/ultramanager.md',
|
|
175
|
+
'.opencode/agents/ultraworker.md',
|
|
176
|
+
'.opencode/agents/ultraverifier.md',
|
|
177
|
+
'.opencode/agents/orchestrate.md',
|
|
178
|
+
'.opencode/skills/openspec-new-change/SKILL.md',
|
|
179
|
+
'.opencode/skills/openspec-continue-change/SKILL.md',
|
|
180
|
+
'.opencode/skills/openspec-ff-change/SKILL.md',
|
|
181
|
+
'.opencode/skills/openspec-apply-change/SKILL.md',
|
|
182
|
+
'.opencode/skills/openspec-verify-change/SKILL.md',
|
|
183
|
+
'.opencode/skills/openspec-archive-change/SKILL.md',
|
|
184
|
+
'.opencode/skills/openspec-bulk-archive-change/SKILL.md',
|
|
185
|
+
'.opencode/skills/openspec-sync-specs/SKILL.md',
|
|
186
|
+
'.opencode/skills/openspec-explore/SKILL.md',
|
|
187
|
+
'.opencode/skills/openspec-onboard/SKILL.md',
|
|
188
|
+
];
|
|
189
|
+
export class OpencodeGenerator {
|
|
190
|
+
targetName = 'opencode';
|
|
191
|
+
async generate(projectRoot) {
|
|
192
|
+
const files = [];
|
|
193
|
+
for (const relPath of STALE_ASSET_PATHS) {
|
|
194
|
+
const filePath = path.join(projectRoot, relPath);
|
|
195
|
+
const action = await removeGeneratedFile(filePath);
|
|
196
|
+
if (action)
|
|
197
|
+
files.push({ path: filePath, action });
|
|
198
|
+
}
|
|
199
|
+
for (const asset of COMMAND_ASSETS) {
|
|
200
|
+
const filePath = path.join(projectRoot, asset.relPath);
|
|
201
|
+
const action = await writeGeneratedFile(filePath, asset.content);
|
|
202
|
+
files.push({ path: filePath, action });
|
|
203
|
+
}
|
|
204
|
+
return { target: this.targetName, files, version: GENERATOR_VERSION };
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/generator/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAQ/C,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEnB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CpB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCrB,CAAC;AAEF,MAAM,cAAc,GAA2B;IAC7C,EAAE,OAAO,EAAE,mCAAmC,EAAE,OAAO,EAAE,WAAW,EAAE;IACtE,EAAE,OAAO,EAAE,oCAAoC,EAAE,OAAO,EAAE,YAAY,EAAE;IACxE,EAAE,OAAO,EAAE,qCAAqC,EAAE,OAAO,EAAE,aAAa,EAAE;CAC3E,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACxB,mCAAmC;IACnC,gCAAgC;IAChC,gCAAgC;IAChC,qCAAqC;IACrC,+BAA+B;IAC/B,kCAAkC;IAClC,mCAAmC;IACnC,oCAAoC;IACpC,yCAAyC;IACzC,iCAAiC;IACjC,oCAAoC;IACpC,kCAAkC;IAClC,iCAAiC;IACjC,mCAAmC;IACnC,iCAAiC;IACjC,+CAA+C;IAC/C,oDAAoD;IACpD,8CAA8C;IAC9C,iDAAiD;IACjD,kDAAkD;IAClD,mDAAmD;IACnD,wDAAwD;IACxD,+CAA+C;IAC/C,4CAA4C;IAC5C,4CAA4C;CAC7C,CAAC;AAEF,MAAM,OAAO,iBAAiB;IACnB,UAAU,GAAG,UAAU,CAAC;IAEjC,KAAK,CAAC,QAAQ,CAAC,WAAmB;QAChC,MAAM,KAAK,GAAoB,EAAE,CAAC;QAElC,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACjE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IACxE,CAAC;CACF"}
|
package/dist/generator/write.js
CHANGED
|
@@ -25,4 +25,18 @@ export async function writeGeneratedFile(absPath, content) {
|
|
|
25
25
|
await fs.writeFile(absPath, marked, 'utf8');
|
|
26
26
|
return 'created';
|
|
27
27
|
}
|
|
28
|
+
export async function removeGeneratedFile(absPath) {
|
|
29
|
+
let existing;
|
|
30
|
+
try {
|
|
31
|
+
existing = await fs.readFile(absPath, 'utf8');
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
if (!isSpegoGenerated(existing) && !isLegacySpegoGenerated(existing)) {
|
|
37
|
+
return 'skipped';
|
|
38
|
+
}
|
|
39
|
+
await fs.unlink(absPath);
|
|
40
|
+
return 'removed';
|
|
41
|
+
}
|
|
28
42
|
//# sourceMappingURL=write.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/generator/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAe,EACf,OAAe;IAEf,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3D,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IAED,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/generator/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAe,EACf,OAAe;IAEf,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3D,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IAED,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAe;IACvD,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export { COMMAND_REGISTRY, getCommandByName } from './commands/registry.js';
|
|
|
23
23
|
export type { CommandMeta, InputField } from './commands/registry.js';
|
|
24
24
|
export { generateAll, registerGenerator, getGenerator, availableTargets } from './generator/index.js';
|
|
25
25
|
export { ClaudeGenerator } from './generator/claude.js';
|
|
26
|
+
export { OpencodeGenerator } from './generator/opencode.js';
|
|
26
27
|
export type { TargetGenerator, GenerationReport, GeneratedFile, FileAction } from './generator/types.js';
|
|
27
28
|
export { SPEGO_GENERATED_YAML_KEY, isSpegoGenerated, isLegacySpegoGenerated, wrapWithMarker } from './generator/markers.js';
|
|
28
29
|
export { resolveAdapter } from './delivery/index.js';
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,7 @@ export { validateMetaForType, hasTypeSchema, ARTIFACT_META_SCHEMAS } from './art
|
|
|
13
13
|
export { COMMAND_REGISTRY, getCommandByName } from './commands/registry.js';
|
|
14
14
|
export { generateAll, registerGenerator, getGenerator, availableTargets } from './generator/index.js';
|
|
15
15
|
export { ClaudeGenerator } from './generator/claude.js';
|
|
16
|
+
export { OpencodeGenerator } from './generator/opencode.js';
|
|
16
17
|
export { SPEGO_GENERATED_YAML_KEY, isSpegoGenerated, isLegacySpegoGenerated, wrapWithMarker } from './generator/markers.js';
|
|
17
18
|
export { resolveAdapter } from './delivery/index.js';
|
|
18
19
|
export { WORKFLOW_REGISTRY, getWorkflowByName, listWorkflowNames } from './workflows/index.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EACL,aAAa,EACb,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAQzF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE5E,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EACL,aAAa,EACb,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAQzF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE5E,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5H,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQrD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -20,6 +20,48 @@ export declare const workspaceConfigSchema: z.ZodObject<{
|
|
|
20
20
|
options?: Record<string, unknown> | undefined;
|
|
21
21
|
name?: string | undefined;
|
|
22
22
|
}>>;
|
|
23
|
+
/** Legacy block accepted for old workspaces; new configs do not write it. */
|
|
24
|
+
orchestration: z.ZodOptional<z.ZodObject<{
|
|
25
|
+
serverUrl: z.ZodOptional<z.ZodString>;
|
|
26
|
+
models: z.ZodOptional<z.ZodObject<{
|
|
27
|
+
manager: z.ZodOptional<z.ZodString>;
|
|
28
|
+
worker: z.ZodOptional<z.ZodString>;
|
|
29
|
+
verifier: z.ZodOptional<z.ZodString>;
|
|
30
|
+
fallback: z.ZodOptional<z.ZodString>;
|
|
31
|
+
}, "strip", z.ZodTypeAny, {
|
|
32
|
+
manager?: string | undefined;
|
|
33
|
+
worker?: string | undefined;
|
|
34
|
+
verifier?: string | undefined;
|
|
35
|
+
fallback?: string | undefined;
|
|
36
|
+
}, {
|
|
37
|
+
manager?: string | undefined;
|
|
38
|
+
worker?: string | undefined;
|
|
39
|
+
verifier?: string | undefined;
|
|
40
|
+
fallback?: string | undefined;
|
|
41
|
+
}>>;
|
|
42
|
+
maxParallel: z.ZodOptional<z.ZodNumber>;
|
|
43
|
+
workDir: z.ZodOptional<z.ZodString>;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
serverUrl?: string | undefined;
|
|
46
|
+
models?: {
|
|
47
|
+
manager?: string | undefined;
|
|
48
|
+
worker?: string | undefined;
|
|
49
|
+
verifier?: string | undefined;
|
|
50
|
+
fallback?: string | undefined;
|
|
51
|
+
} | undefined;
|
|
52
|
+
maxParallel?: number | undefined;
|
|
53
|
+
workDir?: string | undefined;
|
|
54
|
+
}, {
|
|
55
|
+
serverUrl?: string | undefined;
|
|
56
|
+
models?: {
|
|
57
|
+
manager?: string | undefined;
|
|
58
|
+
worker?: string | undefined;
|
|
59
|
+
verifier?: string | undefined;
|
|
60
|
+
fallback?: string | undefined;
|
|
61
|
+
} | undefined;
|
|
62
|
+
maxParallel?: number | undefined;
|
|
63
|
+
workDir?: string | undefined;
|
|
64
|
+
}>>;
|
|
23
65
|
}, "strict", z.ZodTypeAny, {
|
|
24
66
|
agents: string[];
|
|
25
67
|
demo: boolean;
|
|
@@ -29,6 +71,17 @@ export declare const workspaceConfigSchema: z.ZodObject<{
|
|
|
29
71
|
options: Record<string, unknown>;
|
|
30
72
|
name: string;
|
|
31
73
|
};
|
|
74
|
+
orchestration?: {
|
|
75
|
+
serverUrl?: string | undefined;
|
|
76
|
+
models?: {
|
|
77
|
+
manager?: string | undefined;
|
|
78
|
+
worker?: string | undefined;
|
|
79
|
+
verifier?: string | undefined;
|
|
80
|
+
fallback?: string | undefined;
|
|
81
|
+
} | undefined;
|
|
82
|
+
maxParallel?: number | undefined;
|
|
83
|
+
workDir?: string | undefined;
|
|
84
|
+
} | undefined;
|
|
32
85
|
}, {
|
|
33
86
|
agents?: string[] | undefined;
|
|
34
87
|
demo?: boolean | undefined;
|
|
@@ -38,6 +91,17 @@ export declare const workspaceConfigSchema: z.ZodObject<{
|
|
|
38
91
|
options?: Record<string, unknown> | undefined;
|
|
39
92
|
name?: string | undefined;
|
|
40
93
|
} | undefined;
|
|
94
|
+
orchestration?: {
|
|
95
|
+
serverUrl?: string | undefined;
|
|
96
|
+
models?: {
|
|
97
|
+
manager?: string | undefined;
|
|
98
|
+
worker?: string | undefined;
|
|
99
|
+
verifier?: string | undefined;
|
|
100
|
+
fallback?: string | undefined;
|
|
101
|
+
} | undefined;
|
|
102
|
+
maxParallel?: number | undefined;
|
|
103
|
+
workDir?: string | undefined;
|
|
104
|
+
} | undefined;
|
|
41
105
|
}>;
|
|
42
106
|
export type WorkspaceConfig = z.infer<typeof workspaceConfigSchema>;
|
|
43
107
|
export declare function defaultConfig(overrides?: Partial<WorkspaceConfig>): WorkspaceConfig;
|
package/dist/workspace/config.js
CHANGED
|
@@ -20,6 +20,18 @@ export const workspaceConfigSchema = z
|
|
|
20
20
|
name: z.string().default('openspec'),
|
|
21
21
|
options: z.record(z.string(), z.unknown()).default({}),
|
|
22
22
|
}).default({ name: 'openspec', options: {} }),
|
|
23
|
+
/** Legacy block accepted for old workspaces; new configs do not write it. */
|
|
24
|
+
orchestration: z.object({
|
|
25
|
+
serverUrl: z.string().optional(),
|
|
26
|
+
models: z.object({
|
|
27
|
+
manager: z.string().optional(),
|
|
28
|
+
worker: z.string().optional(),
|
|
29
|
+
verifier: z.string().optional(),
|
|
30
|
+
fallback: z.string().optional(),
|
|
31
|
+
}).optional(),
|
|
32
|
+
maxParallel: z.number().int().positive().optional(),
|
|
33
|
+
workDir: z.string().optional(),
|
|
34
|
+
}).optional(),
|
|
23
35
|
})
|
|
24
36
|
.strict();
|
|
25
37
|
export function defaultConfig(overrides = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/workspace/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAU,CAAC;AAGjF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,uDAAuD;IACvD,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAChC,8CAA8C;IAC9C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/C,0CAA0C;IAC1C,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,iEAAiE;IACjE,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,EAAE;QAC1E,OAAO,EAAE,uFAAuF;KACjG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACf,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC;QACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;QACpC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;KACvD,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/workspace/config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhuk/spego",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Agent-first product orchestration: markdown-first artifact engine with SQLite indexing.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"CHANGELOG.md"
|
|
15
15
|
],
|
|
16
16
|
"scripts": {
|
|
17
|
-
"build": "tsc -p tsconfig.json",
|
|
17
|
+
"build": "node scripts/clean-dist.mjs && tsc -p tsconfig.json && node scripts/make-cli-executable.mjs",
|
|
18
18
|
"spego": "tsx src/cli.ts",
|
|
19
19
|
"pretest": "npm run build",
|
|
20
20
|
"test": "vitest run",
|