@zhuk/spego 0.9.0 → 0.10.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/CHANGELOG.md +23 -0
- package/README.md +51 -0
- package/dist/cli/commands/orchestrate.d.ts +6 -0
- package/dist/cli/commands/orchestrate.js +51 -0
- package/dist/cli/commands/orchestrate.js.map +1 -0
- package/dist/cli/commands/skills.js +2 -0
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli.js +5 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/registry.js +12 -0
- package/dist/commands/registry.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/orchestration/agents.d.ts +15 -0
- package/dist/orchestration/agents.js +156 -0
- package/dist/orchestration/agents.js.map +1 -0
- package/dist/orchestration/artifacts.d.ts +8 -0
- package/dist/orchestration/artifacts.js +20 -0
- package/dist/orchestration/artifacts.js.map +1 -0
- package/dist/orchestration/client.d.ts +59 -0
- package/dist/orchestration/client.js +107 -0
- package/dist/orchestration/client.js.map +1 -0
- package/dist/orchestration/config.d.ts +14 -0
- package/dist/orchestration/config.js +45 -0
- package/dist/orchestration/config.js.map +1 -0
- package/dist/orchestration/emit.d.ts +7 -0
- package/dist/orchestration/emit.js +19 -0
- package/dist/orchestration/emit.js.map +1 -0
- package/dist/orchestration/engine.d.ts +23 -0
- package/dist/orchestration/engine.js +136 -0
- package/dist/orchestration/engine.js.map +1 -0
- package/dist/orchestration/file-gate.d.ts +19 -0
- package/dist/orchestration/file-gate.js +25 -0
- package/dist/orchestration/file-gate.js.map +1 -0
- package/dist/orchestration/index.d.ts +18 -0
- package/dist/orchestration/index.js +12 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/manager.d.ts +13 -0
- package/dist/orchestration/manager.js +26 -0
- package/dist/orchestration/manager.js.map +1 -0
- package/dist/orchestration/prompts.d.ts +10 -0
- package/dist/orchestration/prompts.js +71 -0
- package/dist/orchestration/prompts.js.map +1 -0
- package/dist/orchestration/scheduler.d.ts +18 -0
- package/dist/orchestration/scheduler.js +49 -0
- package/dist/orchestration/scheduler.js.map +1 -0
- package/dist/orchestration/schema.d.ts +12 -0
- package/dist/orchestration/schema.js +78 -0
- package/dist/orchestration/schema.js.map +1 -0
- package/dist/orchestration/tiers.d.ts +14 -0
- package/dist/orchestration/tiers.js +57 -0
- package/dist/orchestration/tiers.js.map +1 -0
- package/dist/orchestration/types.d.ts +74 -0
- package/dist/orchestration/types.js +8 -0
- package/dist/orchestration/types.js.map +1 -0
- package/dist/orchestration/verifier.d.ts +14 -0
- package/dist/orchestration/verifier.js +66 -0
- package/dist/orchestration/verifier.js.map +1 -0
- package/dist/orchestration/worker.d.ts +16 -0
- package/dist/orchestration/worker.js +80 -0
- package/dist/orchestration/worker.js.map +1 -0
- package/dist/workspace/config.d.ts +67 -0
- package/dist/workspace/config.js +20 -0
- package/dist/workspace/config.js.map +1 -1
- package/dist/workspace/init.js +2 -0
- package/dist/workspace/init.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
5
|
+
## [0.10.1] - 2026-05-30
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- `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.
|
|
9
|
+
|
|
10
|
+
## [0.10.0] - 2026-05-30
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **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.
|
|
14
|
+
- `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.
|
|
15
|
+
- `spego init` / `spego skills` now emit the OpenCode agent prompts (`ultramanager`, `ultraworker`, `ultraverifier`) and the `orchestrate` command under `.opencode/`.
|
|
16
|
+
- OpenSpec change `add-ultracode-orchestration` documenting and validating the capability.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- 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.
|
|
20
|
+
|
|
21
|
+
## [0.9.1] - 2026-05-30
|
|
22
|
+
|
|
23
|
+
Maintenance release: cleaned up the v0.9.0 commit history. No functional changes.
|
|
24
|
+
|
|
3
25
|
## [0.9.0] - 2026-05-29
|
|
4
26
|
|
|
5
27
|
### Changed
|
|
@@ -15,6 +37,7 @@
|
|
|
15
37
|
|
|
16
38
|
### Fixed
|
|
17
39
|
- `npm run lint` now includes `test/cli-help-exit.test.ts` and the new CLI test files in ESLint project-service configuration.
|
|
40
|
+
- Installed package `spego` bin symlinks now execute the CLI entrypoint correctly.
|
|
18
41
|
|
|
19
42
|
## [0.8.0] - 2026-05-22
|
|
20
43
|
|
package/README.md
CHANGED
|
@@ -27,6 +27,7 @@ spego init --agents claude --demo false
|
|
|
27
27
|
| `spego skills` | Regenerate agent skill files |
|
|
28
28
|
| `spego epics` | List delivery epics |
|
|
29
29
|
| `spego tasks --change <name>` | List tasks for a change |
|
|
30
|
+
| `spego orchestrate --change <name>` | Run the multi-agent orchestration pipeline for a change |
|
|
30
31
|
| `spego index rebuild` | Rebuild SQLite index from files |
|
|
31
32
|
|
|
32
33
|
All commands accept `--cwd <dir>` to set the project root.
|
|
@@ -74,6 +75,15 @@ extraArtifactTypes: []
|
|
|
74
75
|
deliveryAdapter:
|
|
75
76
|
name: openspec
|
|
76
77
|
options: {}
|
|
78
|
+
orchestration:
|
|
79
|
+
serverUrl: http://127.0.0.1:4096
|
|
80
|
+
models:
|
|
81
|
+
manager: ""
|
|
82
|
+
worker: ""
|
|
83
|
+
verifier: ""
|
|
84
|
+
fallback: ""
|
|
85
|
+
maxParallel: 4
|
|
86
|
+
workDir: .spego/orchestration
|
|
77
87
|
```
|
|
78
88
|
|
|
79
89
|
## OpenSpec Delivery View
|
|
@@ -91,6 +101,47 @@ The adapter is read-only. It observes OpenSpec state but does not create, contin
|
|
|
91
101
|
|
|
92
102
|
Archived changes under `openspec/changes/archive/` are excluded. A change with no `tasks.md` is reported as `planning-incomplete`.
|
|
93
103
|
|
|
104
|
+
## Orchestration
|
|
105
|
+
|
|
106
|
+
`spego orchestrate --change <name>` executes a planned OpenSpec change through a multi-agent pipeline (ported from the `ultracode/` reference implementation), driven over the OpenCode REST API:
|
|
107
|
+
|
|
108
|
+
1. **Manager** decomposes the change requirement into a validated `TaskBreakdown`.
|
|
109
|
+
2. **Swarm** implements each sub-task in isolated sessions — `sequential`, `parallel`, or `adaptive` (dependency-tier) mode — under a per-task file gate that reverts out-of-scope edits.
|
|
110
|
+
3. **Verifier** runs the test command, checks acceptance criteria, and emits a verdict.
|
|
111
|
+
|
|
112
|
+
Run artifacts (`breakdown.json`, `result_<id>.json`, `swarm.log`, `verdict.json`) are written under the configured work dir (default `.spego/orchestration/<change>/`).
|
|
113
|
+
|
|
114
|
+
Orchestration consumes the change read-only and never mutates OpenSpec lifecycle state (apply/verify/sync/archive); it may modify the working tree as workers implement sub-tasks.
|
|
115
|
+
|
|
116
|
+
### Prerequisites
|
|
117
|
+
|
|
118
|
+
- A reachable OpenCode server: `opencode serve --port 4096`.
|
|
119
|
+
- Configured model identifiers — there are no fictional defaults baked into the code.
|
|
120
|
+
|
|
121
|
+
### Configuration
|
|
122
|
+
|
|
123
|
+
Add an `orchestration` block to `.spego/config.yaml`:
|
|
124
|
+
|
|
125
|
+
```yaml
|
|
126
|
+
orchestration:
|
|
127
|
+
serverUrl: http://127.0.0.1:4096
|
|
128
|
+
models:
|
|
129
|
+
manager: <provider/model>
|
|
130
|
+
worker: <provider/model>
|
|
131
|
+
verifier: <provider/model>
|
|
132
|
+
fallback: <provider/model>
|
|
133
|
+
maxParallel: 4
|
|
134
|
+
workDir: .spego/orchestration
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Environment overrides: `SPEGO_ORCHESTRATION_SERVER_URL` (or `OPENCODE_BASE_URL`), `SPEGO_ORCHESTRATION_MODEL_{MANAGER,WORKER,VERIFIER,FALLBACK}`, `SPEGO_ORCHESTRATION_MAX_PARALLEL`, `SPEGO_ORCHESTRATION_WORK_DIR`, and `OPENCODE_SERVER_USERNAME`/`OPENCODE_SERVER_PASSWORD` for basic auth.
|
|
138
|
+
|
|
139
|
+
`spego init` / `spego skills` emit the OpenCode agent prompts and the `orchestrate` command under `.opencode/`.
|
|
140
|
+
|
|
141
|
+
```sh
|
|
142
|
+
spego orchestrate --change <change-name> --json
|
|
143
|
+
```
|
|
144
|
+
|
|
94
145
|
## Generated Files
|
|
95
146
|
|
|
96
147
|
For Claude agent targets, `spego init` generates:
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `spego orchestrate` — run the multi-agent orchestration pipeline over an
|
|
3
|
+
* OpenSpec change and emit a structured verdict in human or `--json` mode.
|
|
4
|
+
*/
|
|
5
|
+
import type { Command } from 'commander';
|
|
6
|
+
export declare function registerOrchestrate(program: Command): void;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `spego orchestrate` — run the multi-agent orchestration pipeline over an
|
|
3
|
+
* OpenSpec change and emit a structured verdict in human or `--json` mode.
|
|
4
|
+
*/
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { orchestrateChange } from '../../orchestration/index.js';
|
|
7
|
+
import { renderHeader, renderTable } from '../render.js';
|
|
8
|
+
import { runCommand } from '../runtime.js';
|
|
9
|
+
const VALID_MODES = new Set(['sequential', 'parallel', 'adaptive']);
|
|
10
|
+
export function registerOrchestrate(program) {
|
|
11
|
+
program
|
|
12
|
+
.command('orchestrate')
|
|
13
|
+
.description('Run the multi-agent orchestration pipeline for an OpenSpec change')
|
|
14
|
+
.requiredOption('--change <name>', 'OpenSpec change name to orchestrate')
|
|
15
|
+
.option('--mode <mode>', 'sequential | parallel | adaptive (default: from breakdown)')
|
|
16
|
+
.option('--skip-verify', 'skip the verifier step', false)
|
|
17
|
+
.option('--cwd <dir>', 'project root')
|
|
18
|
+
.action(async (opts) => {
|
|
19
|
+
await runCommand({ program }, async () => {
|
|
20
|
+
const mode = opts.mode && VALID_MODES.has(opts.mode) ? opts.mode : undefined;
|
|
21
|
+
const outcome = await orchestrateChange({
|
|
22
|
+
projectRoot: path.resolve(opts.cwd ?? process.cwd()),
|
|
23
|
+
changeName: opts.change,
|
|
24
|
+
mode,
|
|
25
|
+
skipVerify: Boolean(opts.skipVerify),
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
payload: outcome,
|
|
29
|
+
human: () => {
|
|
30
|
+
const verdict = outcome.verdict.passed ? 'PASS' : 'FAIL';
|
|
31
|
+
const rows = outcome.results.map((r) => [
|
|
32
|
+
r.success ? '[x]' : '[ ]',
|
|
33
|
+
r.subtaskId,
|
|
34
|
+
r.error ?? '',
|
|
35
|
+
]);
|
|
36
|
+
const table = renderTable(['ok', 'subtask', 'error'], rows);
|
|
37
|
+
return [
|
|
38
|
+
renderHeader('🧭', `Orchestrate: ${outcome.changeName}`),
|
|
39
|
+
`goal ${outcome.goal}`,
|
|
40
|
+
`mode ${outcome.executionMode}`,
|
|
41
|
+
`tasks ${outcome.tasksSucceeded}/${outcome.tasksTotal} succeeded`,
|
|
42
|
+
`verdict ${verdict}`,
|
|
43
|
+
'',
|
|
44
|
+
table,
|
|
45
|
+
].join('\n');
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=orchestrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../../../src/cli/commands/orchestrate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAgB,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;AAEnF,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,mEAAmE,CAAC;SAChF,cAAc,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;SACxE,MAAM,CAAC,eAAe,EAAE,4DAA4D,CAAC;SACrF,MAAM,CAAC,eAAe,EAAE,wBAAwB,EAAE,KAAK,CAAC;SACxD,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,UAAU,CAAuB,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,IAAsB,CAAC,CAAC,CAAC,SAAS,CAAC;YAChG,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC;gBACtC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBACpD,UAAU,EAAE,IAAI,CAAC,MAAM;gBACvB,IAAI;gBACJ,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;aACrC,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,GAAG,EAAE;oBACV,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;oBACzD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;wBACtC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;wBACzB,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,KAAK,IAAI,EAAE;qBACd,CAAC,CAAC;oBACH,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC5D,OAAO;wBACL,YAAY,CAAC,IAAI,EAAE,gBAAgB,OAAO,CAAC,UAAU,EAAE,CAAC;wBACxD,YAAY,OAAO,CAAC,IAAI,EAAE;wBAC1B,YAAY,OAAO,CAAC,aAAa,EAAE;wBACnC,YAAY,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,UAAU,YAAY;wBACpE,YAAY,OAAO,EAAE;wBACrB,EAAE;wBACF,KAAK;qBACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACf,CAAC;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -5,6 +5,7 @@ import path from 'node:path';
|
|
|
5
5
|
import { resolveWorkspacePaths } from '../../workspace/paths.js';
|
|
6
6
|
import { readConfig } from '../../workspace/config.js';
|
|
7
7
|
import { generateAll } from '../../generator/index.js';
|
|
8
|
+
import { emitOrchestrationAssets } from '../../orchestration/emit.js';
|
|
8
9
|
import { renderHeader } from '../render.js';
|
|
9
10
|
import { deprecate } from '../output.js';
|
|
10
11
|
import { runCommand } from '../runtime.js';
|
|
@@ -13,6 +14,7 @@ async function runSkills(cwd, json) {
|
|
|
13
14
|
const wsPaths = resolveWorkspacePaths(projectRoot);
|
|
14
15
|
const config = await readConfig(wsPaths.configPath);
|
|
15
16
|
const reports = await generateAll(projectRoot, config.agents, { emitWarnings: !json });
|
|
17
|
+
reports.push(await emitOrchestrationAssets(projectRoot));
|
|
16
18
|
const human = () => {
|
|
17
19
|
const lines = [renderHeader('🛠️', 'Skill regeneration'), ''];
|
|
18
20
|
for (const r of reports) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,KAAK,UAAU,SAAS,CAAC,GAAuB,EAAE,IAAa;IAI7D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,MAAM,KAAK,GAAG,GAAW,EAAE;QACzB,MAAM,KAAK,GAAa,CAAC,YAAY,CAAC,KAAK,EAAE,oBAAoB,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACvC,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC3C,SAAS,CAAC,IAAI,EAAE,0CAA0C,CAAC,CAAC;YAC5D,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,KAAK,UAAU,SAAS,CAAC,GAAuB,EAAE,IAAa;IAI7D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,OAAO,CAAC,IAAI,CAAC,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,GAAW,EAAE;QACzB,MAAM,KAAK,GAAa,CAAC,YAAY,CAAC,KAAK,EAAE,oBAAoB,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACvC,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC3C,SAAS,CAAC,IAAI,EAAE,0CAA0C,CAAC,CAAC;YAC5D,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
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';
|
|
@@ -17,6 +19,7 @@ import { registerView } from './cli/commands/view.js';
|
|
|
17
19
|
import { registerIndex } from './cli/commands/index-rebuild.js';
|
|
18
20
|
import { registerSkills } from './cli/commands/skills.js';
|
|
19
21
|
import { registerDelivery } from './cli/commands/delivery.js';
|
|
22
|
+
import { registerOrchestrate } from './cli/commands/orchestrate.js';
|
|
20
23
|
export function buildProgram() {
|
|
21
24
|
const program = new Command();
|
|
22
25
|
program
|
|
@@ -47,6 +50,7 @@ export function buildProgram() {
|
|
|
47
50
|
registerIndex(program);
|
|
48
51
|
registerSkills(program);
|
|
49
52
|
registerDelivery(program);
|
|
53
|
+
registerOrchestrate(program);
|
|
50
54
|
return program;
|
|
51
55
|
}
|
|
52
56
|
/**
|
|
@@ -61,10 +65,7 @@ function isEntryPoint() {
|
|
|
61
65
|
if (!argv1)
|
|
62
66
|
return false;
|
|
63
67
|
try {
|
|
64
|
-
|
|
65
|
-
if (url.protocol !== 'file:')
|
|
66
|
-
return false;
|
|
67
|
-
return url.pathname.endsWith(argv1) || argv1.endsWith(url.pathname);
|
|
68
|
+
return realpathSync(argv1) === fileURLToPath(import.meta.url);
|
|
68
69
|
}
|
|
69
70
|
catch {
|
|
70
71
|
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;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -140,6 +140,18 @@ export const COMMAND_REGISTRY = [
|
|
|
140
140
|
inputSchema: {},
|
|
141
141
|
outputModes: ['markdown', 'json'],
|
|
142
142
|
},
|
|
143
|
+
{
|
|
144
|
+
name: 'orchestrate',
|
|
145
|
+
description: 'Run the multi-agent orchestration pipeline for an OpenSpec change',
|
|
146
|
+
slashName: '/spego:orchestrate',
|
|
147
|
+
category: 'planning',
|
|
148
|
+
inputSchema: {
|
|
149
|
+
change: { name: 'change', type: 'string', required: true, description: 'OpenSpec change name to orchestrate' },
|
|
150
|
+
mode: { name: 'mode', type: 'string', required: false, description: 'sequential | parallel | adaptive' },
|
|
151
|
+
skipVerify: { name: 'skipVerify', type: 'boolean', required: false, description: 'Skip the verifier step' },
|
|
152
|
+
},
|
|
153
|
+
outputModes: ['markdown', 'json'],
|
|
154
|
+
},
|
|
143
155
|
];
|
|
144
156
|
export function getCommandByName(name) {
|
|
145
157
|
return COMMAND_REGISTRY.find((c) => c.name === name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/commands/registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/commands/registry.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' | 'ORCHESTRATION_BACKEND_UNREACHABLE' | 'ORCHESTRATION_INVALID_BREAKDOWN' | 'ORCHESTRATION_NOT_CONFIGURED' | 'ORCHESTRATION_FAILED';
|
|
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":"AA2BA,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/index.d.ts
CHANGED
|
@@ -29,3 +29,5 @@ export { resolveAdapter } from './delivery/index.js';
|
|
|
29
29
|
export type { DeliveryAdapter, DeliveryEpicLink, DeliveryItemStatus, DeliveryStatus, DeliveryTaskSummary, } from './delivery/index.js';
|
|
30
30
|
export { WORKFLOW_REGISTRY, getWorkflowByName, listWorkflowNames } from './workflows/index.js';
|
|
31
31
|
export type { WorkflowMeta, PersonaSpec, PhaseSpec, WorkflowInput, WorkflowOutput } from './workflows/index.js';
|
|
32
|
+
export { orchestrateChange, OpenCodeClient, parseBreakdown, buildDependencyTiers, runSwarm, detectFileGateViolations, enforceFileGate, resolveOrchestrationConfig, assertModelsConfigured, } from './orchestration/index.js';
|
|
33
|
+
export type { OrchestrateOptions, OpenCodeApi, ExecutionMode, SubTask, TaskBreakdown, SubtaskResult, Verdict, OrchestrationOutcome, OrchestrationRuntimeConfig, } from './orchestration/index.js';
|
package/dist/index.js
CHANGED
|
@@ -16,4 +16,5 @@ export { ClaudeGenerator } from './generator/claude.js';
|
|
|
16
16
|
export { SPEGO_GENERATED_YAML_KEY, isSpegoGenerated, isLegacySpegoGenerated, wrapWithMarker } from './generator/markers.js';
|
|
17
17
|
export { resolveAdapter } from './delivery/index.js';
|
|
18
18
|
export { WORKFLOW_REGISTRY, getWorkflowByName, listWorkflowNames } from './workflows/index.js';
|
|
19
|
+
export { orchestrateChange, OpenCodeClient, parseBreakdown, buildDependencyTiers, runSwarm, detectFileGateViolations, enforceFileGate, resolveOrchestrationConfig, assertModelsConfigured, } from './orchestration/index.js';
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
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;AAExD,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"}
|
|
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;AAExD,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;AAE/F,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,wBAAwB,EACxB,eAAe,EACf,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode agent and command assets for the orchestration capability,
|
|
3
|
+
* ported from the ultracode reference implementation.
|
|
4
|
+
*
|
|
5
|
+
* These are emitted under `.opencode/` by `spego init` / `spego skills`.
|
|
6
|
+
* Agent files intentionally omit a `model:` line — the spego orchestrator
|
|
7
|
+
* supplies the model per request from `.spego/config.yaml`, so no provider or
|
|
8
|
+
* model identifier is committed here.
|
|
9
|
+
*/
|
|
10
|
+
export interface OrchestrationAsset {
|
|
11
|
+
/** Path relative to the project root. */
|
|
12
|
+
relPath: string;
|
|
13
|
+
content: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const ORCHESTRATION_AGENT_ASSETS: OrchestrationAsset[];
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode agent and command assets for the orchestration capability,
|
|
3
|
+
* ported from the ultracode reference implementation.
|
|
4
|
+
*
|
|
5
|
+
* These are emitted under `.opencode/` by `spego init` / `spego skills`.
|
|
6
|
+
* Agent files intentionally omit a `model:` line — the spego orchestrator
|
|
7
|
+
* supplies the model per request from `.spego/config.yaml`, so no provider or
|
|
8
|
+
* model identifier is committed here.
|
|
9
|
+
*/
|
|
10
|
+
const ULTRAMANAGER = `---
|
|
11
|
+
mode: primary
|
|
12
|
+
temperature: 0.1
|
|
13
|
+
permission:
|
|
14
|
+
read: allow
|
|
15
|
+
edit: deny
|
|
16
|
+
glob: allow
|
|
17
|
+
grep: allow
|
|
18
|
+
task:
|
|
19
|
+
"*": deny
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# UltraManager — Task Decomposition Agent
|
|
23
|
+
|
|
24
|
+
You are **UltraManager**, a senior software architect. Your sole responsibility is to parse a coding task, explore the relevant codebase, and emit a machine-readable **TaskBreakdown JSON**.
|
|
25
|
+
|
|
26
|
+
## Workflow
|
|
27
|
+
|
|
28
|
+
1. Read the repository structure to understand the codebase.
|
|
29
|
+
2. Identify affected modules — map the requirement to specific files.
|
|
30
|
+
3. Decompose the work into the smallest independently implementable sub-tasks.
|
|
31
|
+
4. Assign an execution mode: \`sequential\`, \`parallel\`, or \`adaptive\`.
|
|
32
|
+
5. Emit ONLY the JSON object — no prose, no markdown fences.
|
|
33
|
+
|
|
34
|
+
## Rules
|
|
35
|
+
|
|
36
|
+
- \`files\` lists must be mutually exclusive across parallel tasks.
|
|
37
|
+
- Tasks that share files must be ordered via \`depends_on\`.
|
|
38
|
+
- \`acceptance_criteria\` must be executable, not vague.
|
|
39
|
+
- Keep sub-tasks small enough to fit in a single agent session.
|
|
40
|
+
`;
|
|
41
|
+
const ULTRAWORKER = `---
|
|
42
|
+
mode: subagent
|
|
43
|
+
temperature: 0.15
|
|
44
|
+
permission:
|
|
45
|
+
read: allow
|
|
46
|
+
edit: allow
|
|
47
|
+
glob: allow
|
|
48
|
+
grep: allow
|
|
49
|
+
bash:
|
|
50
|
+
"*": deny
|
|
51
|
+
"pytest *": allow
|
|
52
|
+
"python -m pytest *": allow
|
|
53
|
+
"go test *": allow
|
|
54
|
+
"cargo test *": allow
|
|
55
|
+
"npm test *": allow
|
|
56
|
+
"npx vitest *": allow
|
|
57
|
+
"ruff *": allow
|
|
58
|
+
"black *": allow
|
|
59
|
+
"mypy *": allow
|
|
60
|
+
"gofmt *": allow
|
|
61
|
+
"golangci-lint *": allow
|
|
62
|
+
task: deny
|
|
63
|
+
webfetch: deny
|
|
64
|
+
websearch: deny
|
|
65
|
+
todowrite: allow
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
# UltraWorker — Single Sub-Task Implementation Agent
|
|
69
|
+
|
|
70
|
+
You are **UltraWorker**. You receive a single, precisely scoped sub-task and implement it completely.
|
|
71
|
+
|
|
72
|
+
## Operating Contract
|
|
73
|
+
|
|
74
|
+
- Touch ONLY the files listed in the task's \`files\` array.
|
|
75
|
+
- After implementing, run the provided test command.
|
|
76
|
+
- If tests fail, diagnose and fix (maximum 3 attempts).
|
|
77
|
+
- Do NOT run git commands or install new dependencies.
|
|
78
|
+
|
|
79
|
+
## Response Format
|
|
80
|
+
|
|
81
|
+
End your FINAL message with exactly one of:
|
|
82
|
+
|
|
83
|
+
ULTRAWORKER_STATUS: SUCCESS
|
|
84
|
+
|
|
85
|
+
or
|
|
86
|
+
|
|
87
|
+
ULTRAWORKER_STATUS: FAILED - <concise reason>
|
|
88
|
+
`;
|
|
89
|
+
const ULTRAVERIFIER = `---
|
|
90
|
+
mode: primary
|
|
91
|
+
temperature: 0.0
|
|
92
|
+
permission:
|
|
93
|
+
read: allow
|
|
94
|
+
edit: deny
|
|
95
|
+
glob: allow
|
|
96
|
+
grep: allow
|
|
97
|
+
bash:
|
|
98
|
+
"*": deny
|
|
99
|
+
"pytest *": allow
|
|
100
|
+
"python -m pytest *": allow
|
|
101
|
+
"go test *": allow
|
|
102
|
+
"cargo test *": allow
|
|
103
|
+
"npm test *": allow
|
|
104
|
+
"npx vitest *": allow
|
|
105
|
+
"git diff": allow
|
|
106
|
+
"git status": allow
|
|
107
|
+
task: deny
|
|
108
|
+
webfetch: deny
|
|
109
|
+
websearch: deny
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
# UltraVerifier — Aggregation and Verification Agent
|
|
113
|
+
|
|
114
|
+
You are **UltraVerifier**. You run after all worker agents complete and provide the authoritative pass/fail verdict.
|
|
115
|
+
|
|
116
|
+
## Steps
|
|
117
|
+
|
|
118
|
+
1. Review the execution summary provided in the user message.
|
|
119
|
+
2. Run the full test suite using the provided test command.
|
|
120
|
+
3. Verify each sub-task's acceptance criteria are satisfied.
|
|
121
|
+
4. Identify any regressions introduced by the parallel changes.
|
|
122
|
+
5. Emit ONLY the verdict JSON (no prose before or after).
|
|
123
|
+
|
|
124
|
+
## Rules
|
|
125
|
+
|
|
126
|
+
- \`passed\` is true only if all tests pass AND all acceptance criteria are met AND no regressions are detected.
|
|
127
|
+
- Do NOT modify any files.
|
|
128
|
+
- Do NOT invoke git operations beyond read-only.
|
|
129
|
+
`;
|
|
130
|
+
const WORKFLOW_COMMAND = `---
|
|
131
|
+
name: orchestrate
|
|
132
|
+
description: Run the spego multi-agent orchestration pipeline for an OpenSpec change.
|
|
133
|
+
arguments:
|
|
134
|
+
change: { type: string, required: true, description: "OpenSpec change name to orchestrate" }
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
$ARGUMENTS
|
|
138
|
+
|
|
139
|
+
Run the spego orchestrator for the named OpenSpec change. It decomposes the
|
|
140
|
+
change requirement, executes sub-tasks through the OpenCode worker swarm under a
|
|
141
|
+
per-task file gate, runs the verifier, and writes a verdict.
|
|
142
|
+
|
|
143
|
+
\`\`\`bash
|
|
144
|
+
spego orchestrate --change $ARGUMENTS --json
|
|
145
|
+
\`\`\`
|
|
146
|
+
|
|
147
|
+
Prerequisites: an \`opencode serve\` server must be reachable and orchestration
|
|
148
|
+
models must be configured in \`.spego/config.yaml\` (or \`SPEGO_ORCHESTRATION_MODEL_*\`).
|
|
149
|
+
`;
|
|
150
|
+
export const ORCHESTRATION_AGENT_ASSETS = [
|
|
151
|
+
{ relPath: '.opencode/agents/ultramanager.md', content: ULTRAMANAGER },
|
|
152
|
+
{ relPath: '.opencode/agents/ultraworker.md', content: ULTRAWORKER },
|
|
153
|
+
{ relPath: '.opencode/agents/ultraverifier.md', content: ULTRAVERIFIER },
|
|
154
|
+
{ relPath: '.opencode/commands/orchestrate.md', content: WORKFLOW_COMMAND },
|
|
155
|
+
];
|
|
156
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/orchestration/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BpB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CnB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCrB,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;CAmBxB,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAyB;IAC9D,EAAE,OAAO,EAAE,kCAAkC,EAAE,OAAO,EAAE,YAAY,EAAE;IACtE,EAAE,OAAO,EAAE,iCAAiC,EAAE,OAAO,EAAE,WAAW,EAAE;IACpE,EAAE,OAAO,EAAE,mCAAmC,EAAE,OAAO,EAAE,aAAa,EAAE;IACxE,EAAE,OAAO,EAAE,mCAAmC,EAAE,OAAO,EAAE,gBAAgB,EAAE;CAC5E,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run-artifact persistence. The breakdown, per-sub-task results, swarm log,
|
|
3
|
+
* and final verdict are written under the configured work dir so a run can be
|
|
4
|
+
* inspected after completion.
|
|
5
|
+
*/
|
|
6
|
+
export declare function ensureWorkDir(projectRoot: string, workDir: string): Promise<string>;
|
|
7
|
+
export declare function saveArtifact(workDirAbs: string, name: string, data: unknown): Promise<void>;
|
|
8
|
+
export declare function appendLog(workDirAbs: string, line: string): Promise<void>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run-artifact persistence. The breakdown, per-sub-task results, swarm log,
|
|
3
|
+
* and final verdict are written under the configured work dir so a run can be
|
|
4
|
+
* inspected after completion.
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'node:fs/promises';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
export async function ensureWorkDir(projectRoot, workDir) {
|
|
9
|
+
const abs = path.isAbsolute(workDir) ? workDir : path.join(projectRoot, workDir);
|
|
10
|
+
await fs.mkdir(abs, { recursive: true });
|
|
11
|
+
return abs;
|
|
12
|
+
}
|
|
13
|
+
export async function saveArtifact(workDirAbs, name, data) {
|
|
14
|
+
const payload = typeof data === 'string' ? data : JSON.stringify(data, null, 2);
|
|
15
|
+
await fs.writeFile(path.join(workDirAbs, name), payload, 'utf8');
|
|
16
|
+
}
|
|
17
|
+
export async function appendLog(workDirAbs, line) {
|
|
18
|
+
await fs.appendFile(path.join(workDirAbs, 'swarm.log'), `${line}\n`, 'utf8');
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/orchestration/artifacts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB,EAAE,OAAe;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACjF,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAkB,EAAE,IAAY,EAAE,IAAa;IAChF,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAkB,EAAE,IAAY;IAC9D,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin async client for the OpenCode REST API (`opencode serve`).
|
|
3
|
+
*
|
|
4
|
+
* Uses the Node global `fetch` and `AbortController` for per-request timeouts,
|
|
5
|
+
* with exponential backoff and jitter on 429/503. The {@link OpenCodeApi}
|
|
6
|
+
* interface is the seam used by the manager, worker, and verifier so the
|
|
7
|
+
* pipeline can be exercised in tests with a fake backend.
|
|
8
|
+
*/
|
|
9
|
+
import type { DiffEntry } from './types.js';
|
|
10
|
+
export interface OpenCodeMessagePart {
|
|
11
|
+
type?: string;
|
|
12
|
+
text?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface OpenCodeMessageResponse {
|
|
15
|
+
parts?: OpenCodeMessagePart[];
|
|
16
|
+
}
|
|
17
|
+
export interface SendMessageInput {
|
|
18
|
+
text: string;
|
|
19
|
+
model?: string;
|
|
20
|
+
agent?: string;
|
|
21
|
+
system?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface OpenCodeApi {
|
|
24
|
+
health(): Promise<{
|
|
25
|
+
version?: string;
|
|
26
|
+
}>;
|
|
27
|
+
createSession(title?: string): Promise<{
|
|
28
|
+
id: string;
|
|
29
|
+
}>;
|
|
30
|
+
sendMessage(sessionId: string, input: SendMessageInput): Promise<OpenCodeMessageResponse>;
|
|
31
|
+
getSessionDiff(sessionId: string): Promise<DiffEntry[]>;
|
|
32
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
export interface OpenCodeClientOptions {
|
|
35
|
+
baseUrl: string;
|
|
36
|
+
username?: string;
|
|
37
|
+
password?: string;
|
|
38
|
+
timeoutMs?: number;
|
|
39
|
+
maxRetries?: number;
|
|
40
|
+
}
|
|
41
|
+
/** Extract the concatenated text parts from a message response. */
|
|
42
|
+
export declare function extractText(response: OpenCodeMessageResponse): string;
|
|
43
|
+
export declare class OpenCodeClient implements OpenCodeApi {
|
|
44
|
+
private readonly baseUrl;
|
|
45
|
+
private readonly authHeader?;
|
|
46
|
+
private readonly timeoutMs;
|
|
47
|
+
private readonly maxRetries;
|
|
48
|
+
constructor(opts: OpenCodeClientOptions);
|
|
49
|
+
health(): Promise<{
|
|
50
|
+
version?: string;
|
|
51
|
+
}>;
|
|
52
|
+
createSession(title?: string): Promise<{
|
|
53
|
+
id: string;
|
|
54
|
+
}>;
|
|
55
|
+
sendMessage(sessionId: string, input: SendMessageInput): Promise<OpenCodeMessageResponse>;
|
|
56
|
+
getSessionDiff(sessionId: string): Promise<DiffEntry[]>;
|
|
57
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
58
|
+
private request;
|
|
59
|
+
}
|