ultra-builder-pro-cli 0.5.3 → 0.7.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/.ultra-template/changes/active/.gitkeep +1 -0
- package/.ultra-template/changes/archive/.gitkeep +1 -0
- package/CHANGELOG.md +90 -14
- package/README.md +38 -32
- package/adapters/_shared/codex-assets.cjs +32 -151
- package/adapters/_shared/frontmatter.cjs +2 -2
- package/adapters/_shared/handbook.cjs +10 -10
- package/adapters/_shared/path-rewrite.cjs +0 -3
- package/adapters/_shared/runtime-assets.cjs +13 -4
- package/adapters/_shared/tests/handbook.test.cjs +4 -1
- package/adapters/_shared/tests/path-rewrite.test.cjs +1 -3
- package/adapters/_shared/tests/resolve-target.test.cjs +1 -11
- package/adapters/_shared/tests/runtime-assets.test.cjs +7 -6
- package/adapters/opencode.js +82 -26
- package/adapters/tests/claude.test.cjs +1 -4
- package/adapters/tests/codex.test.cjs +9 -8
- package/adapters/tests/opencode.test.cjs +17 -11
- package/bin/install.js +6 -28
- package/bin/orchestrator.js +12 -30
- package/commands/ultra-change.md +47 -0
- package/commands/ultra-deliver.md +14 -7
- package/commands/ultra-dev.md +6 -3
- package/commands/ultra-doctor.md +36 -0
- package/commands/ultra-init.md +4 -3
- package/commands/ultra-status.md +7 -5
- package/commands/ultra-test.md +2 -1
- package/docs/AGENT-CONTEXT.md +35 -28
- package/docs/ARCHITECTURE.md +49 -21
- package/docs/PLAN.zh-CN.md +67 -68
- package/docs/ROADMAP.md +17 -17
- package/docs/RUNTIME-COMPAT-MATRIX.md +63 -62
- package/hooks/README.md +8 -7
- package/hooks/active_task_context.py +22 -15
- package/hooks/health_check.py +136 -38
- package/hooks/workflow_context.py +120 -30
- package/mcp-server/lib/change-workflow.cjs +556 -0
- package/mcp-server/lib/change-workflow.test.cjs +259 -0
- package/mcp-server/lib/doctor.cjs +112 -0
- package/mcp-server/lib/doctor.test.cjs +86 -0
- package/mcp-server/lib/init-project.cjs +32 -6
- package/mcp-server/lib/pricing.cjs +0 -6
- package/mcp-server/lib/runtime-state.cjs +222 -0
- package/mcp-server/lib/runtime-state.test.cjs +92 -0
- package/mcp-server/lib/state-db.cjs +31 -8
- package/mcp-server/lib/state-ops.cjs +24 -3
- package/mcp-server/lib/telemetry.cjs +4 -0
- package/mcp-server/server.cjs +102 -10
- package/mcp-server/tests/db-ops.test.cjs +5 -1
- package/mcp-server/tests/init-project.test.cjs +45 -0
- package/mcp-server/tests/server-contract.test.cjs +140 -1
- package/mcp-server/tests/state-db.test.cjs +44 -7
- package/mcp-server/tests/state-ops.test.cjs +42 -0
- package/mcp-server/tests/telemetry.test.cjs +14 -0
- package/orchestrator/daemon.cjs +39 -0
- package/orchestrator/dispatch-rules.cjs +15 -4
- package/orchestrator/tests/daemon.test.cjs +63 -12
- package/orchestrator/tests/dispatch-rules.test.cjs +12 -10
- package/package.json +5 -7
- package/settings.json +1 -2
- package/skills/ultra-change/SKILL.md +140 -0
- package/skills/ultra-deliver/SKILL.md +81 -15
- package/skills/ultra-dev/SKILL.md +32 -12
- package/skills/ultra-doctor/SKILL.md +90 -0
- package/skills/ultra-init/SKILL.md +8 -6
- package/skills/ultra-review/SKILL.md +16 -0
- package/skills/ultra-status/SKILL.md +30 -7
- package/skills/ultra-test/SKILL.md +14 -2
- package/skills/ultra-verify/SKILL.md +22 -41
- package/skills/ultra-verify/evals/evals.json +22 -24
- package/skills/ultra-verify/references/confidence-system.md +15 -32
- package/skills/ultra-verify/references/cross-verify-modes.md +14 -59
- package/skills/ultra-verify/scripts/verify_wait.py +44 -81
- package/spec/cli-protocol.md +12 -1
- package/spec/mcp-tools.yaml +340 -4
- package/spec/schemas/mcp-tools.schema.json +1 -1
- package/spec/schemas/skill-manifest.schema.json +2 -2
- package/spec/schemas/state-db.sql +119 -2
- package/ultra-tools/cli.cjs +3 -0
- package/ultra-tools/commands/system.cjs +57 -0
- package/ultra-tools/system-command.test.cjs +53 -0
- package/adapters/_shared/md-to-toml.cjs +0 -54
- package/adapters/_shared/rtk-detect.cjs +0 -86
- package/adapters/_shared/tests/md-to-toml.test.cjs +0 -48
- package/adapters/_shared/tests/rtk-detect.test.cjs +0 -116
- package/adapters/gemini.js +0 -204
- package/adapters/tests/gemini.test.cjs +0 -112
- package/docs/LEGACY-HERMES.md +0 -1175
- package/orchestrator/code-graph-watcher.cjs +0 -121
- package/orchestrator/tests/code-graph-watcher.test.cjs +0 -183
- package/skills/gemini-collab/SKILL.md +0 -51
- package/skills/gemini-collab/evals/evals.json +0 -42
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,83 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.7.0] — 2026-07-17
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Added `ultra-change` and `ultra-doctor` as native workflows on Claude Code,
|
|
15
|
+
OpenCode, and Codex. Daily fixes, features, redesigns, and incidents now stay
|
|
16
|
+
attached to an explicit change packet after the initial baseline delivery.
|
|
17
|
+
- Added seven `change.*` MCP tools and `system.doctor`, advancing the live MCP
|
|
18
|
+
contract to 29 tools and `.ultra/state.db` to schema `9.0` with 15 tables for
|
|
19
|
+
changes, artifacts, context snapshots, trace links, incidents, projection
|
|
20
|
+
jobs, and durable event-consumer cursors.
|
|
21
|
+
- Added deterministic convergence and archive gates for task completion, spec
|
|
22
|
+
deltas, tests, documentation impact, review evidence, context freshness, and
|
|
23
|
+
baseline reconciliation.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- `task.init_project` now initializes `state.db` immediately and creates active
|
|
28
|
+
and archived change roots. `tasks.json` remains a generated projection.
|
|
29
|
+
- MCP mutations now commit authority first, enqueue a durable projection job,
|
|
30
|
+
process it, and expose projection status in MCP metadata instead of silently
|
|
31
|
+
swallowing projection failures.
|
|
32
|
+
- Session-start and edit hooks now understand initialized baselines and active
|
|
33
|
+
changes. Health checks surface incidents, projection lag, orphan sessions,
|
|
34
|
+
and missing change artifacts; direct writes to the task projection remain
|
|
35
|
+
blocked even outside a command-scoped workflow.
|
|
36
|
+
- Memory and code-graph content are exclusively owned by separately installed
|
|
37
|
+
providers. Ultra accepts only provider metadata references in compiled change
|
|
38
|
+
contexts and never stores recalled content, graph payloads, or embeddings.
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Wired spec-staleness consumption, crash recovery, projection processing, and
|
|
43
|
+
durable cursors into the real orchestrator loop instead of leaving production
|
|
44
|
+
helpers unconsumed.
|
|
45
|
+
- Kept `intent.md` synchronized with authoritative change updates, linked task
|
|
46
|
+
status events to their newly assigned change, and included `plan.export`
|
|
47
|
+
events in projection accounting.
|
|
48
|
+
- Added atomic projection claims and backup-first recovery for failed or stale
|
|
49
|
+
interrupted jobs so a crashed projector cannot remain invisibly `running`.
|
|
50
|
+
- Kept all three native plugin bundles, MCP launchers, agents, hooks, commands,
|
|
51
|
+
and user-handbook renderings on one explicit Ultra-owned asset allowlist.
|
|
52
|
+
|
|
53
|
+
### Removed
|
|
54
|
+
|
|
55
|
+
- Removed the internal filesystem graph watcher and its dependency; external
|
|
56
|
+
graph providers own indexing and refresh.
|
|
57
|
+
- Removed the retired command-proxy detector, installer option, managed handbook
|
|
58
|
+
block, cache artifacts, prompts, configuration, and documentation surface.
|
|
59
|
+
- Stopped publishing the archived pre-CLI manual in the npm package; it remains
|
|
60
|
+
repository history and cannot be mistaken for an active plugin contract.
|
|
61
|
+
|
|
62
|
+
## [0.6.0] — 2026-07-17
|
|
63
|
+
|
|
64
|
+
### Changed
|
|
65
|
+
|
|
66
|
+
- Reduced the supported host matrix to Claude Code, OpenCode, and Codex.
|
|
67
|
+
- Reworked `ultra-verify` into independent two-model verification: the current
|
|
68
|
+
host remains primary, one read-only external advisor supplies a second view,
|
|
69
|
+
and evidence rather than model voting determines confidence.
|
|
70
|
+
- Restricted orchestrator routing, MCP session/event inputs, telemetry writes,
|
|
71
|
+
state schema enums, installer flags, package metadata, and handbooks to the
|
|
72
|
+
three supported runtimes.
|
|
73
|
+
|
|
74
|
+
### Removed
|
|
75
|
+
|
|
76
|
+
- Removed the retired fourth-runtime adapter, installer surface, extension and
|
|
77
|
+
conformance packaging, pricing entries, collaboration companion, and all
|
|
78
|
+
active Ultra prompts and documentation that offered it as an advisor.
|
|
79
|
+
|
|
80
|
+
### Fixed
|
|
81
|
+
|
|
82
|
+
- Added a retirement regression contract so unsupported runtimes cannot
|
|
83
|
+
re-enter active source, package, schema, prompt, or generated plugin surfaces.
|
|
84
|
+
- Rejects unsupported runtime labels before state, event, or telemetry writes,
|
|
85
|
+
including old databases whose historical SQLite constraints were broader.
|
|
86
|
+
|
|
10
87
|
## [0.5.3] — 2026-07-17
|
|
11
88
|
|
|
12
89
|
### Fixed
|
|
@@ -59,7 +136,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
59
136
|
|
|
60
137
|
- Added first-class native Claude Code and OpenCode plugin builders alongside
|
|
61
138
|
the Codex personal plugin. All hosts build from one explicit runtime asset
|
|
62
|
-
allowlist;
|
|
139
|
+
allowlist; the then-supported compatibility extension used the same boundary.
|
|
63
140
|
- Added `ubp-handbook` for previewed, backed-up managed-block integration with
|
|
64
141
|
user-level Claude `CLAUDE.md`, Codex `AGENTS.md`, and OpenCode `AGENTS.md`.
|
|
65
142
|
- Added `ultra-tools legacy-memory inspect|archive|prune`; prune requires the
|
|
@@ -87,7 +164,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
87
164
|
with the npm package, and fixed `session.subscribe_events` sid filtering.
|
|
88
165
|
- Aligned session/plan input schemas with runtime behavior, including circuit
|
|
89
166
|
breaker output, session spawn intent semantics, and removal of ignored inputs.
|
|
90
|
-
- Bundled
|
|
167
|
+
- Bundled the compatibility MCP runtime durably and restored project-local
|
|
91
168
|
`.ultra/state.db` ownership across all adapters.
|
|
92
169
|
- Exported the documented `ultra-tools` executable and included every README
|
|
93
170
|
documentation target in the npm tarball.
|
|
@@ -164,8 +241,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
164
241
|
|
|
165
242
|
- D49 tech-debt sweep: stale Phase comments (`"scheduled for Phase 1"`,
|
|
166
243
|
`"not implemented in Phase 3.1"`) replaced with accurate `unknown verb`
|
|
167
|
-
messages; `docs/ROADMAP.md` status table synchronized
|
|
168
|
-
excludes `.rtk/` local filter cache.
|
|
244
|
+
messages; `docs/ROADMAP.md` status table synchronized.
|
|
169
245
|
|
|
170
246
|
### Tests
|
|
171
247
|
|
|
@@ -176,13 +252,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
176
252
|
|
|
177
253
|
### Added
|
|
178
254
|
|
|
179
|
-
- **Phase 6 — monitoring + live code graph** (D44):
|
|
180
|
-
|
|
181
|
-
token / cost telemetry with per-runtime pricing table, `telemetry` table +
|
|
255
|
+
- **Phase 6 — monitoring + live code graph** (D44): token / cost telemetry
|
|
256
|
+
with per-runtime pricing table, `telemetry` table +
|
|
182
257
|
daily `.ultra/telemetry/YYYY-MM-DD.jsonl`; `ultra-tools status --cost`
|
|
183
258
|
panel with by-runtime / by-task / by-session aggregation; chokidar-based
|
|
184
|
-
|
|
185
|
-
opt-in via `--with-graph-watcher`.
|
|
259
|
+
then-experimental incremental graph watcher with debounce and batch thresholds.
|
|
186
260
|
- **Phase 5 — execution resilience** (D43): `recovery.cjs` boot-time orphan
|
|
187
261
|
scan using live PID probe; `circuit_breaker` table with `recordTaskFailure`
|
|
188
262
|
counter and `resetCircuitBreaker` escape hatch; spec-change staleness
|
|
@@ -193,8 +267,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
193
267
|
- **Phase 4.6b — full conformance suite** (D45): 4 runtime × 5 capability
|
|
194
268
|
(command / skills / hooks / MCP + no `env._source` leak / install idempotency)
|
|
195
269
|
= 20 additional conformance tests; table-driven `resolve-target.test.cjs`
|
|
196
|
-
(21 tests) covering `configDir > env > home/cwd` precedence
|
|
197
|
-
|
|
270
|
+
(21 tests) covering `configDir > env > home/cwd` precedence and extension
|
|
271
|
+
root resolution; schema bump 5.2 → 7.1 alongside memory store.
|
|
198
272
|
|
|
199
273
|
### Changed
|
|
200
274
|
|
|
@@ -213,9 +287,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
213
287
|
admission control with takeover / resume / abandon strategies (D33).
|
|
214
288
|
- **Phase 4 — cross-runtime distribution** (D41, `5aa1fd0`): shared adapter
|
|
215
289
|
toolkit (`adapters/_shared/` — file-ops / frontmatter / settings-merge /
|
|
216
|
-
path-rewrite / md-to-toml);
|
|
290
|
+
path-rewrite / md-to-toml); the initial runtime adapters (Claude sentinel-block
|
|
217
291
|
settings.json merge; OpenCode `opencode.json.mcp`; Codex `config.toml`
|
|
218
|
-
marker-block + prompts/;
|
|
292
|
+
marker-block + prompts/; plus the then-supported compatibility package);
|
|
219
293
|
`docs/RUNTIME-COMPAT-MATRIX.md` with 10-section capability matrix;
|
|
220
294
|
install / uninstall round-trip tests + idempotency.
|
|
221
295
|
- **Phase 3 — thin-shell commands** (D40, `b3d1797`): 9 commands migrated
|
|
@@ -232,7 +306,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
232
306
|
skill manifest, CLI protocol + mapping table; 5 spec validators.
|
|
233
307
|
- **Phase 0 — skeleton**: multi-runtime installer scaffolding.
|
|
234
308
|
|
|
235
|
-
[Unreleased]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.
|
|
309
|
+
[Unreleased]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.7.0...HEAD
|
|
310
|
+
[0.7.0]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.6.0...v0.7.0
|
|
311
|
+
[0.6.0]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.5.3...v0.6.0
|
|
236
312
|
[0.5.3]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.5.2...v0.5.3
|
|
237
313
|
[0.5.2]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.5.1...v0.5.2
|
|
238
314
|
[0.5.1]: https://github.com/rocky2431/ultra-builder-pro-cli/compare/v0.5.0...v0.5.1
|
package/README.md
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
Multi-runtime plugin suite + autonomous coding factory for the Ultra Builder Pro
|
|
4
4
|
agent engineering system. It ships native plugins for **Claude Code · OpenCode ·
|
|
5
|
-
Codex
|
|
5
|
+
Codex** and orchestrates PRD →
|
|
6
6
|
dependency graph → parallel session execution → auto-merge with a single
|
|
7
7
|
authoritative `.ultra/state.db`.
|
|
8
8
|
|
|
9
9
|
<div align="center">
|
|
10
10
|
|
|
11
|
-
[](./CHANGELOG.md)
|
|
12
12
|
[](#verification)
|
|
13
13
|
[](./LICENSE)
|
|
14
14
|
[](./package.json)
|
|
@@ -23,18 +23,23 @@ authoritative `.ultra/state.db`.
|
|
|
23
23
|
|
|
24
24
|
- **Builds host-native plugins from one allowlist.** Claude Code, OpenCode, and
|
|
25
25
|
Codex receive their own command/skill, agent, hook, and MCP representation.
|
|
26
|
-
|
|
26
|
+
Install and uninstall are symmetric on every supported host.
|
|
27
27
|
- **Shares state across runtimes.** `.ultra/state.db` (SQLite + WAL) is the
|
|
28
|
-
authoritative source for tasks, sessions, events,
|
|
29
|
-
and context markdown are
|
|
28
|
+
authoritative source for changes, tasks, sessions, events, incidents,
|
|
29
|
+
projection jobs, and telemetry. `tasks.json` and context markdown are
|
|
30
|
+
generated projections, not handwritten.
|
|
30
31
|
- **Keeps memory ownership explicit.** Ultra Builder Pro does not collect
|
|
31
32
|
prompts, transcripts, observations, summaries, or cross-session memory.
|
|
32
33
|
Install cloud-mem/claude-mem separately if persistent memory is wanted.
|
|
33
34
|
- **Runs real PRDs end-to-end.** `task.parse_prd` → `lib/topo.cjs` waves →
|
|
34
35
|
`.ultra/execution-plan.json` → parallel worktree sessions → auto-merge back.
|
|
35
|
-
- **
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
- **Keeps daily work convergent.** `/ultra-change` creates a bounded delta and
|
|
37
|
+
context manifest; `/ultra-deliver` requires docs/test/review evidence and
|
|
38
|
+
baseline reconciliation before archive. `/ultra-doctor` reports incidents,
|
|
39
|
+
projection lag, orphan sessions, and backup-first mechanical recovery.
|
|
40
|
+
- **Keeps external context external.** Memory and code-graph providers retain
|
|
41
|
+
their own content; Ultra stores only provider/project/revision/status metadata
|
|
42
|
+
references in a compiled change context.
|
|
38
43
|
|
|
39
44
|
## Quickstart
|
|
40
45
|
|
|
@@ -43,7 +48,6 @@ authoritative `.ultra/state.db`.
|
|
|
43
48
|
npx ultra-builder-pro-cli --claude --local
|
|
44
49
|
npx ultra-builder-pro-cli --opencode --local
|
|
45
50
|
npx ultra-builder-pro-cli --codex --local
|
|
46
|
-
npx ultra-builder-pro-cli --gemini --local
|
|
47
51
|
|
|
48
52
|
# Or blanket-install to every supported runtime you have
|
|
49
53
|
npx ultra-builder-pro-cli --all --local
|
|
@@ -58,9 +62,8 @@ npx ultra-builder-pro-cli --all --local --uninstall
|
|
|
58
62
|
After install, start a new host session/task and point it at the project.
|
|
59
63
|
Claude Code and OpenCode expose native command forms. Codex exposes the same workflows as namespaced plugin
|
|
60
64
|
skills such as `$ultra-builder-pro:ultra-init`, `$ultra-builder-pro:ultra-plan`,
|
|
61
|
-
and `$ultra-builder-pro:ultra-dev`; `command-map.json` records the
|
|
62
|
-
command mappings (`ultra-review` remains a directly invocable skill).
|
|
63
|
-
retains its compatibility command form.
|
|
65
|
+
and `$ultra-builder-pro:ultra-dev`; `command-map.json` records the eleven legacy
|
|
66
|
+
command mappings (`ultra-review` remains a directly invocable skill).
|
|
64
67
|
See [`docs/RUNTIME-COMPAT-MATRIX.md`](./docs/RUNTIME-COMPAT-MATRIX.md)
|
|
65
68
|
for per-runtime capabilities.
|
|
66
69
|
|
|
@@ -70,30 +73,31 @@ for per-runtime capabilities.
|
|
|
70
73
|
|-------|---------|----------------|
|
|
71
74
|
| **skill** (`skills/ultra-*/`) | Knowledge — prompts, workflows, prose | Runtime's native skill/prompt loader picks them up after install |
|
|
72
75
|
| **MCP** (`mcp-server/`) | Authoritative state — reads/writes `.ultra/state.db` via stdio JSON-RPC | Primary path for task / session / event / plan operations |
|
|
73
|
-
| **CLI** (`ultra-tools`, `bin/*`) |
|
|
76
|
+
| **CLI** (`ultra-tools`, `bin/*`) | Selected initialization, recovery, diagnostics, and orchestration surfaces | `ultra-tools task init-project`, `ultra-tools system doctor`, `ubp-orchestrator run` |
|
|
74
77
|
|
|
75
|
-
The
|
|
78
|
+
The layers share one `.ultra/state.db`, but the CLI is not a mirror of every MCP
|
|
79
|
+
tool: continuous change mutations are MCP-only and fail closed. See
|
|
76
80
|
[`docs/ARCHITECTURE.md`](./docs/ARCHITECTURE.md) for the full contract and
|
|
77
|
-
[`spec/cli-protocol.md`](./spec/cli-protocol.md) for the
|
|
81
|
+
[`spec/cli-protocol.md`](./spec/cli-protocol.md) for the 29 live contracts.
|
|
78
82
|
Review, impact discovery, skill resolution, and user interaction stay on each
|
|
79
83
|
Host's native surfaces; the generated Codex capability map documents those
|
|
80
84
|
replacements without advertising non-existent MCP tools.
|
|
81
85
|
|
|
82
|
-
The package boundary is deliberate:
|
|
86
|
+
The package boundary is deliberate: twelve public Ultra workflow skills, four
|
|
83
87
|
internal review-rule skills, and host-specific collaboration companions. Browser,
|
|
84
88
|
deployment, skill-discovery, and framework guidance belong to their original plugins.
|
|
85
89
|
|
|
86
90
|
## Runtime capability matrix
|
|
87
91
|
|
|
88
|
-
| Feature | Claude Code | OpenCode | Codex CLI |
|
|
89
|
-
|
|
90
|
-
| Custom commands | ✅ | ✅ | ✅ |
|
|
91
|
-
| Skill loader | ✅ | ✅ | ✅ (personal plugin) |
|
|
92
|
-
| MCP server (stdio) | ✅ | ✅ | ✅ (plugin `.mcp.json`) |
|
|
93
|
-
| Workflow hooks | ✅ (native plugin) | ✅ (native JS plugin) | ✅ (native plugin) |
|
|
94
|
-
| Sub-agents | ✅ | ✅ | ✅ (9 native TOML agents) |
|
|
95
|
-
| Session worktree isolation | ✅ (
|
|
96
|
-
| Parallel dispatch + auto-merge | ✅ (`ubp-orchestrator run`) | ✅ | ✅ |
|
|
92
|
+
| Feature | Claude Code | OpenCode | Codex CLI |
|
|
93
|
+
|------------------------------|:-----------:|:--------:|:---------:|
|
|
94
|
+
| Custom commands | ✅ | ✅ | ✅ |
|
|
95
|
+
| Skill loader | ✅ | ✅ | ✅ (personal plugin) |
|
|
96
|
+
| MCP server (stdio) | ✅ | ✅ | ✅ (plugin `.mcp.json`) |
|
|
97
|
+
| Workflow hooks | ✅ (native plugin) | ✅ (native JS plugin) | ✅ (native plugin) |
|
|
98
|
+
| Sub-agents | ✅ | ✅ | ✅ (9 native TOML agents) |
|
|
99
|
+
| Session worktree isolation | ✅ (driven by `orchestrator/session-runner.cjs`) | ✅ | ✅ |
|
|
100
|
+
| Parallel dispatch + auto-merge | ✅ (`ubp-orchestrator run`) | ✅ | ✅ |
|
|
97
101
|
|
|
98
102
|
Full details in [`docs/RUNTIME-COMPAT-MATRIX.md`](./docs/RUNTIME-COMPAT-MATRIX.md)
|
|
99
103
|
(10 sections, with per-runtime deviations called out).
|
|
@@ -101,30 +105,33 @@ Full details in [`docs/RUNTIME-COMPAT-MATRIX.md`](./docs/RUNTIME-COMPAT-MATRIX.m
|
|
|
101
105
|
## Typical workflow
|
|
102
106
|
|
|
103
107
|
```bash
|
|
104
|
-
# 1. Initialize a project (writes .ultra/ skeleton
|
|
108
|
+
# 1. Initialize a project (writes .ultra/ skeleton and initializes state.db)
|
|
105
109
|
ultra-tools task init-project --name myapp
|
|
106
110
|
|
|
107
111
|
# 2. Turn a PRD into a task graph + execution plan (human-gate via dry-run)
|
|
108
112
|
# (invoked by /ultra-plan skill or via MCP task.parse_prd + plan.export)
|
|
109
113
|
|
|
110
114
|
# 3. Run the plan — parallel sessions, auto-merge back to main on success
|
|
111
|
-
ubp-orchestrator run
|
|
115
|
+
ubp-orchestrator run
|
|
112
116
|
|
|
113
|
-
# 4. Monitor cost and
|
|
117
|
+
# 4. Monitor cost, progress, and runtime health
|
|
114
118
|
ultra-tools status
|
|
115
119
|
ultra-tools status --cost --since 24h
|
|
116
120
|
ultra-tools session list --json
|
|
121
|
+
ultra-tools system doctor
|
|
117
122
|
```
|
|
118
123
|
|
|
119
124
|
Or let the skills drive it. In Codex, invoke
|
|
120
125
|
`$ultra-builder-pro:ultra-plan` → `$ultra-builder-pro:ultra-dev` →
|
|
121
|
-
`$ultra-builder-pro:ultra-status`;
|
|
126
|
+
`$ultra-builder-pro:ultra-status`; after the baseline is delivered, daily work
|
|
127
|
+
starts with `$ultra-builder-pro:ultra-change`. Other runtimes retain their
|
|
128
|
+
native command form.
|
|
122
129
|
|
|
123
130
|
## CLI surface
|
|
124
131
|
|
|
125
132
|
| Binary | Purpose |
|
|
126
133
|
|--------|---------|
|
|
127
|
-
| `ultra-builder-pro-cli` / `ubp` | Installer — `--claude / --opencode / --codex / --
|
|
134
|
+
| `ultra-builder-pro-cli` / `ubp` | Installer — `--claude / --opencode / --codex / --all`, `--local / --global`, `--uninstall` |
|
|
128
135
|
| `ubp-orchestrator` | Session dispatch daemon — `run`, `start`, `stop`, `status` |
|
|
129
136
|
| `ultra-tools` | State-layer CLI — `task`, `session`, `status`, `db`, `migrate`; explicit `legacy-memory` archive/prune migration |
|
|
130
137
|
| `ubp-handbook` | Preview/apply the managed Ultra contract in `CLAUDE.md` / `AGENTS.md`, with backup |
|
|
@@ -171,7 +178,7 @@ Individual suites: `test:state`, `test:orch`, `test:spec`, `test:rest`.
|
|
|
171
178
|
|
|
172
179
|
| Doc | What's in it |
|
|
173
180
|
|-----|--------------|
|
|
174
|
-
| [`docs/PLAN.zh-CN.md`](./docs/PLAN.zh-CN.md) |
|
|
181
|
+
| [`docs/PLAN.zh-CN.md`](./docs/PLAN.zh-CN.md) | Historical 12-phase plan and decision log with a current-boundary overlay |
|
|
175
182
|
| [`docs/ROADMAP.md`](./docs/ROADMAP.md) | One-page English roadmap + phase status |
|
|
176
183
|
| [`docs/ARCHITECTURE.md`](./docs/ARCHITECTURE.md) | Single-page system architecture |
|
|
177
184
|
| [`docs/AGENT-CONTEXT.md`](./docs/AGENT-CONTEXT.md) | Canonical runtime context contract |
|
|
@@ -179,7 +186,6 @@ Individual suites: `test:state`, `test:orch`, `test:spec`, `test:rest`.
|
|
|
179
186
|
| [`docs/RUNTIME-COMPAT-MATRIX.md`](./docs/RUNTIME-COMPAT-MATRIX.md) | Per-runtime capability matrix |
|
|
180
187
|
| [`docs/STATE-DB-ACCESS-POLICY.md`](./docs/STATE-DB-ACCESS-POLICY.md) | Multi-process write contract |
|
|
181
188
|
| [`docs/COMMIT-HASH-BACKFILL.md`](./docs/COMMIT-HASH-BACKFILL.md) | Two-commit task-completion flow |
|
|
182
|
-
| [`docs/LEGACY-HERMES.md`](./docs/LEGACY-HERMES.md) | Archived pre-CLI "Hermes 6.6" documentation |
|
|
183
189
|
| [`CHANGELOG.md`](./CHANGELOG.md) | v0.1 → current release notes |
|
|
184
190
|
|
|
185
191
|
## License
|
|
@@ -66,7 +66,6 @@ const COMMAND_NAMES = Object.freeze(CORE_PUBLIC_SKILLS.filter((name) => name !==
|
|
|
66
66
|
const SKILL_REFERENCE_NAMES = Object.freeze([
|
|
67
67
|
...COMMAND_NAMES,
|
|
68
68
|
'cc-collab',
|
|
69
|
-
'gemini-collab',
|
|
70
69
|
'ultra-review',
|
|
71
70
|
'ultra-verify',
|
|
72
71
|
]);
|
|
@@ -119,52 +118,12 @@ Do not call native Codex subagents through this skill; use Codex subagent orches
|
|
|
119
118
|
parallel work and reserve \`cc-collab\` for an explicitly requested cross-model perspective.
|
|
120
119
|
`;
|
|
121
120
|
|
|
122
|
-
const GEMINI_COLLAB_BODY = `# Gemini Collaboration for Codex
|
|
123
|
-
|
|
124
|
-
Use Gemini as an advisory second model. Codex remains responsible for scope, source verification,
|
|
125
|
-
decisions, and the final answer.
|
|
126
|
-
|
|
127
|
-
## Preflight
|
|
128
|
-
|
|
129
|
-
1. Confirm \`gemini\` is installed and capture \`gemini --version\`.
|
|
130
|
-
2. Confirm the target workspace and requested scope.
|
|
131
|
-
3. Form Codex's initial analysis before reading Gemini's answer when independence matters.
|
|
132
|
-
|
|
133
|
-
## Invoke safely
|
|
134
|
-
|
|
135
|
-
Run Gemini in non-interactive, read-only plan mode:
|
|
136
|
-
|
|
137
|
-
\`\`\`bash
|
|
138
|
-
gemini --approval-mode plan --output-format text -p "<bounded prompt>"
|
|
139
|
-
\`\`\`
|
|
140
|
-
|
|
141
|
-
Use a timeout appropriate to the task. Redirect large output to a temporary file when needed, then
|
|
142
|
-
read only the relevant result. Do not use auto-edit or yolo modes. Do not place secrets, tokens,
|
|
143
|
-
unrelated files, or unbounded repository content in the prompt.
|
|
144
|
-
|
|
145
|
-
For repository analysis, give Gemini the exact files, diff range, question, and expected response
|
|
146
|
-
shape. If the CLI is missing, unauthenticated, times out, or returns empty output, report the degraded
|
|
147
|
-
path and continue with Codex evidence rather than blocking.
|
|
148
|
-
|
|
149
|
-
## Verify and synthesize
|
|
150
|
-
|
|
151
|
-
Treat Gemini output as an untrusted analysis artifact:
|
|
152
|
-
|
|
153
|
-
1. Check every consequential claim against the current checkout, runtime, or primary source.
|
|
154
|
-
2. Separate agreements, useful dissent, and unsupported claims.
|
|
155
|
-
3. Resolve scope or version mismatches before comparing conclusions.
|
|
156
|
-
4. Present Codex's final judgment, not a transcript of two models.
|
|
157
|
-
|
|
158
|
-
Read the bundled references only when a mode or CLI detail is needed. Never let model agreement
|
|
159
|
-
substitute for tests, runtime evidence, or authoritative documentation.
|
|
160
|
-
`;
|
|
161
|
-
|
|
162
121
|
const ULTRA_VERIFY_BODY = String(function ultraVerifyBodyTemplate() { /*
|
|
163
|
-
# Ultra Verify — Codex-Primary
|
|
122
|
+
# Ultra Verify — Codex-Primary Two-Model Verification
|
|
164
123
|
|
|
165
124
|
Codex owns the task, writes the first independent analysis, verifies every consequential claim,
|
|
166
|
-
and produces the final synthesis. Claude Code
|
|
167
|
-
|
|
125
|
+
and produces the final synthesis. Claude Code is a read-only external advisor. Use this workflow
|
|
126
|
+
only when the user asks for cross-model verification.
|
|
168
127
|
|
|
169
128
|
## Modes
|
|
170
129
|
|
|
@@ -175,13 +134,11 @@ workflow only when the user asks for cross-model or three-way verification.
|
|
|
175
134
|
|
|
176
135
|
## Preconditions
|
|
177
136
|
|
|
178
|
-
1. Confirm `claude --version`
|
|
137
|
+
1. Confirm `claude --version` plus authentication.
|
|
179
138
|
2. Define the exact workspace, scope, evidence standard, and expected answer shape.
|
|
180
|
-
3. Do not send secrets, unrelated files, or an unbounded home directory to
|
|
181
|
-
|
|
182
|
-
## Workflow
|
|
139
|
+
3. Do not send secrets, unrelated files, or an unbounded home directory to the advisor.
|
|
183
140
|
|
|
184
|
-
|
|
141
|
+
## 1. Create the session and write Codex's independent view
|
|
185
142
|
|
|
186
143
|
```bash
|
|
187
144
|
SESSION_ID="$(date +%Y%m%d-%H%M%S)-verify-<mode>"
|
|
@@ -189,63 +146,47 @@ SESSION_PATH=".ultra/collab/${SESSION_ID}"
|
|
|
189
146
|
mkdir -p "${SESSION_PATH}"
|
|
190
147
|
```
|
|
191
148
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
answers from priming the primary analysis.
|
|
195
|
-
|
|
196
|
-
### 2. Launch Claude Code and Gemini concurrently
|
|
149
|
+
Write the evidence-backed Codex analysis to `${SESSION_PATH}/codex-analysis.md` before reading
|
|
150
|
+
the external answer. Record the mode, scope, checkout, and evidence boundary.
|
|
197
151
|
|
|
198
|
-
|
|
152
|
+
## 2. Launch Claude Code read-only
|
|
199
153
|
|
|
200
|
-
Claude Code
|
|
154
|
+
Give Claude Code the bounded raw question and evidence without Codex's conclusions.
|
|
201
155
|
|
|
202
156
|
```bash
|
|
203
|
-
claude --safe-mode -p "<BOUNDED_PROMPT>"
|
|
204
|
-
--permission-mode plan
|
|
205
|
-
--tools "Read,Grep,Glob,Bash"
|
|
206
|
-
--output-format text
|
|
207
|
-
--no-session-persistence
|
|
208
|
-
> "${SESSION_PATH}/claude-output.md"
|
|
157
|
+
claude --safe-mode -p "<BOUNDED_PROMPT>" \
|
|
158
|
+
--permission-mode plan \
|
|
159
|
+
--tools "Read,Grep,Glob,Bash" \
|
|
160
|
+
--output-format text \
|
|
161
|
+
--no-session-persistence \
|
|
162
|
+
> "${SESSION_PATH}/claude-output.md" \
|
|
209
163
|
2> "${SESSION_PATH}/claude-error.log"
|
|
210
164
|
```
|
|
211
165
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
```bash
|
|
215
|
-
gemini --approval-mode plan --output-format text -p "<BOUNDED_PROMPT>" \\
|
|
216
|
-
> "${SESSION_PATH}/gemini-output.md" \\
|
|
217
|
-
2> "${SESSION_PATH}/gemini-error.log"
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
Start the two commands with parallel `exec_command` calls and a short initial yield. If a command
|
|
221
|
-
returns a live session id, poll it with `write_stdin` in bounded intervals. Do not use YOLO,
|
|
222
|
-
auto-edit, permission bypass, or write-capable external tools.
|
|
166
|
+
Run the command in a yielded shell session. Do not enable permission bypass, mutation tools,
|
|
167
|
+
background writes, or session persistence.
|
|
223
168
|
|
|
224
|
-
|
|
169
|
+
## 3. Collect completed output
|
|
225
170
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
error log as evidence when a CLI fails.
|
|
171
|
+
The bundled `scripts/verify_wait.py` checks output stability. Poll yielded sessions in bounded
|
|
172
|
+
intervals and never hold one blocking tool call longer than 60 seconds. Read the output only when
|
|
173
|
+
it is non-empty; retain the error log when the advisor fails.
|
|
230
174
|
|
|
231
|
-
|
|
175
|
+
## 4. Verify and synthesize
|
|
232
176
|
|
|
233
|
-
Compare `codex-analysis.md
|
|
177
|
+
Compare `codex-analysis.md` and `claude-output.md`:
|
|
234
178
|
|
|
235
179
|
1. Verify claims against the current checkout, runtime, tests, or primary documentation.
|
|
236
|
-
2. Separate
|
|
237
|
-
3. Explain scope, version, or assumption differences before
|
|
180
|
+
2. Separate verified agreement, useful dissent, and unsupported assertions.
|
|
181
|
+
3. Explain scope, version, or assumption differences before judging the result.
|
|
238
182
|
4. Write `${SESSION_PATH}/synthesis.md` and `metadata.json`, then present one Codex-owned answer.
|
|
239
183
|
|
|
240
|
-
|
|
241
|
-
are a majority; three materially different answers are no consensus and require decomposition or
|
|
242
|
-
more evidence. Model agreement never overrides failing tests or authoritative runtime evidence.
|
|
184
|
+
Model agreement never overrides failing tests or authoritative runtime evidence.
|
|
243
185
|
|
|
244
186
|
## Degraded operation
|
|
245
187
|
|
|
246
|
-
-
|
|
247
|
-
-
|
|
248
|
-
- Never block the user's task solely because an external CLI is absent, unauthenticated, or slow.
|
|
188
|
+
- Advisor failure: return Codex-only analysis with an explicit single-source warning.
|
|
189
|
+
- Never block the user's task solely because the external CLI is absent, unauthenticated, or slow.
|
|
249
190
|
|
|
250
191
|
## Session files
|
|
251
192
|
|
|
@@ -254,70 +195,16 @@ more evidence. Model agreement never overrides failing tests or authoritative ru
|
|
|
254
195
|
codex-analysis.md
|
|
255
196
|
claude-output.md
|
|
256
197
|
claude-error.log
|
|
257
|
-
gemini-output.md
|
|
258
|
-
gemini-error.log
|
|
259
198
|
metadata.json
|
|
260
199
|
synthesis.md
|
|
261
200
|
```
|
|
262
201
|
|
|
263
|
-
Read the bundled references for mode-specific
|
|
264
|
-
*/ }).match(/\/\*([\s\S]*?)\*\//)[1].trim();
|
|
265
|
-
|
|
266
|
-
const ULTRA_VERIFY_FLOW = String(function ultraVerifyFlowTemplate() { /*
|
|
267
|
-
# Codex-Native Orchestration Flow
|
|
268
|
-
|
|
269
|
-
## 1. Primary analysis
|
|
270
|
-
|
|
271
|
-
Create `.ultra/collab/<SESSION_ID>/` and write `codex-analysis.md` before reading any external
|
|
272
|
-
answer. Record the mode, scope, checkout, and evidence boundary.
|
|
273
|
-
|
|
274
|
-
## 2. Parallel advisors
|
|
275
|
-
|
|
276
|
-
Launch Claude Code in `--safe-mode --permission-mode plan` and Gemini in
|
|
277
|
-
`--approval-mode plan` through separate `exec_command` calls. Redirect their output to
|
|
278
|
-
`claude-output.md` and `gemini-output.md`. If a call yields a session id, poll with
|
|
279
|
-
`write_stdin` in bounded intervals; do not grant either advisor mutation authority.
|
|
280
|
-
|
|
281
|
-
## 3. Completion gate
|
|
282
|
-
|
|
283
|
-
Proceed only after both sessions have completed or timed out. For automation, run:
|
|
284
|
-
|
|
285
|
-
```bash
|
|
286
|
-
python3 ~/plugins/ultra-builder-pro/skills/ultra-verify/scripts/verify_wait.py \\
|
|
287
|
-
"${SESSION_PATH}" --timeout 1200
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
Run the waiter as a yielded exec session and poll it; never hold one blocking tool call for more
|
|
291
|
-
than 60 seconds. Its JSON reports `claude` and `gemini` as `complete`, `failed`, `empty`, or
|
|
292
|
-
`pending`.
|
|
293
|
-
|
|
294
|
-
## 4. Synthesis
|
|
295
|
-
|
|
296
|
-
Read `codex-analysis.md` plus each completed advisor output. Verify consequential claims, compute
|
|
297
|
-
consensus using `confidence-system.md`, and write `synthesis.md` plus:
|
|
298
|
-
|
|
299
|
-
```json
|
|
300
|
-
{
|
|
301
|
-
"id": "<SESSION_ID>",
|
|
302
|
-
"agent": "ultra-verify",
|
|
303
|
-
"mode": "<mode>",
|
|
304
|
-
"models": {"codex": "<primary>", "claude": "<advisor>", "gemini": "<advisor>"},
|
|
305
|
-
"scope": "<scope>",
|
|
306
|
-
"timestamp": "<ISO 8601>",
|
|
307
|
-
"confidence": "<consensus|majority|no_consensus>",
|
|
308
|
-
"degraded": false
|
|
309
|
-
}
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
If one advisor fails, cap the result at majority and name the missing perspective. If both fail,
|
|
313
|
-
set `degraded: true`, `agents_responded: ["codex"]`, and mark the result single-source.
|
|
202
|
+
Read the bundled references for mode-specific evidence and confidence guidance.
|
|
314
203
|
*/ }).match(/\/\*([\s\S]*?)\*\//)[1].trim();
|
|
315
|
-
|
|
316
204
|
function titleCase(name) {
|
|
317
205
|
const special = {
|
|
318
206
|
'ai-collab-base': 'AI Collaboration Base',
|
|
319
207
|
'cc-collab': 'Claude Code Collaboration',
|
|
320
|
-
'gemini-collab': 'Gemini Collaboration',
|
|
321
208
|
'use-railway': 'Use Railway',
|
|
322
209
|
};
|
|
323
210
|
if (special[name]) return special[name];
|
|
@@ -600,8 +487,6 @@ and does not require an interactive MCP or legacy CLI menu.
|
|
|
600
487
|
}
|
|
601
488
|
|
|
602
489
|
function adaptUltraVerifyAsset(input, rel) {
|
|
603
|
-
if (rel === path.join('references', 'orchestration-flow.md')) return ULTRA_VERIFY_FLOW;
|
|
604
|
-
|
|
605
490
|
let text = adaptHostText(String(input), '');
|
|
606
491
|
if (rel === path.join('scripts', 'verify_wait.py')) {
|
|
607
492
|
text = text.replaceAll('Codex', 'Claude Code');
|
|
@@ -621,7 +506,6 @@ function adaptUltraVerifyAsset(input, rel) {
|
|
|
621
506
|
text = text.replaceAll('"codex": "<model>"', '"claude": "<advisor>"');
|
|
622
507
|
text = text.replaceAll('["claude"]', '["codex"]');
|
|
623
508
|
text = text.replaceAll('Claude Code-only', 'Codex-only');
|
|
624
|
-
text = text.replaceAll('Gemini and Claude Code in parallel (native parallel execution)', 'Claude Code and Gemini concurrently');
|
|
625
509
|
text = text.replaceAll('run_in_background', 'native concurrent execution');
|
|
626
510
|
text = text.replaceAll('Bash tool', '`exec_command`');
|
|
627
511
|
text = text.replaceAll('Read tool', 'targeted file reads');
|
|
@@ -661,7 +545,7 @@ function adaptHostText(input, skillName = '') {
|
|
|
661
545
|
text = adaptCodexPrimaryText(text, skillName);
|
|
662
546
|
}
|
|
663
547
|
|
|
664
|
-
if (skillName === '
|
|
548
|
+
if (skillName === 'ai-collab-base') {
|
|
665
549
|
text = text.replaceAll("Claude's", "Codex's");
|
|
666
550
|
text = text.replaceAll('Claude-only', 'Codex-only');
|
|
667
551
|
text = text.replaceAll('Claude ', 'Codex ');
|
|
@@ -716,8 +600,7 @@ function adaptHostText(input, skillName = '') {
|
|
|
716
600
|
function adaptedDescription(sourceDescription, targetName) {
|
|
717
601
|
const special = {
|
|
718
602
|
'cc-collab': 'Ask Claude Code for an independent read-only analysis while Codex owns verification and synthesis. Use only when the user explicitly requests CC or Claude Code collaboration.',
|
|
719
|
-
'
|
|
720
|
-
'ultra-verify': 'Run Codex-primary three-way verification with read-only Claude Code and Gemini advisors, then verify and synthesize the evidence.',
|
|
603
|
+
'ultra-verify': 'Run Codex-primary two-model verification with a read-only Claude Code advisor, then verify and synthesize the evidence.',
|
|
721
604
|
'ultra-dev': 'Execute one Ultra task with Codex-native TDD, persistent task.update state, workflow checkpoints, and the native Ultra review agents.',
|
|
722
605
|
'learn': 'Extract one reusable pattern from the current Codex task into a valid user skill, with explicit user approval before writing.',
|
|
723
606
|
};
|
|
@@ -730,7 +613,6 @@ function buildSkillMarkdown(sourceText, sourceName, targetName) {
|
|
|
730
613
|
const { fm, body } = parseFrontmatter(sourceText);
|
|
731
614
|
let adaptedBody;
|
|
732
615
|
if (targetName === 'cc-collab') adaptedBody = CC_COLLAB_BODY;
|
|
733
|
-
else if (targetName === 'gemini-collab') adaptedBody = GEMINI_COLLAB_BODY;
|
|
734
616
|
else if (targetName === 'ultra-verify') adaptedBody = ULTRA_VERIFY_BODY;
|
|
735
617
|
else adaptedBody = adaptHostText(body, targetName);
|
|
736
618
|
return yaml.dump({
|
|
@@ -745,7 +627,6 @@ function buildOpenAiYaml(name, description) {
|
|
|
745
627
|
COMMAND_NAMES.includes(name)
|
|
746
628
|
|| INTERNAL_SKILLS.has(name)
|
|
747
629
|
|| name === 'cc-collab'
|
|
748
|
-
|| name === 'gemini-collab'
|
|
749
630
|
|| name.startsWith('ultra-')
|
|
750
631
|
);
|
|
751
632
|
const short = description.replace(/\s+/g, ' ').trim().slice(0, 63).replace(/[\s.,;:]+$/, '');
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
// YAML frontmatter parsing / serialization for markdown assets.
|
|
4
|
-
// Every runtime adapter consumes this — OpenCode lowercases keys
|
|
5
|
-
//
|
|
4
|
+
// Every runtime adapter consumes this — OpenCode lowercases keys while
|
|
5
|
+
// Claude Code and Codex preserve their native metadata contracts.
|
|
6
6
|
|
|
7
7
|
const yaml = require('js-yaml');
|
|
8
8
|
|