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
package/bin/install.js
CHANGED
|
@@ -4,20 +4,19 @@
|
|
|
4
4
|
* ultra-builder-pro-cli — multi-runtime installer.
|
|
5
5
|
*
|
|
6
6
|
* Distributes Ultra Builder Pro assets — commands, agents, skills, hooks,
|
|
7
|
-
* MCP server — to Claude Code, OpenCode,
|
|
7
|
+
* MCP server — to Claude Code, OpenCode, and Codex CLI via
|
|
8
8
|
* runtime-specific adapters under adapters/. Install is idempotent and
|
|
9
9
|
* uses atomic writes; uninstall reverses via sentinel/manifest blocks.
|
|
10
10
|
*
|
|
11
11
|
* Usage:
|
|
12
12
|
* npx ultra-builder-pro-cli [options]
|
|
13
13
|
*
|
|
14
|
-
* --claude / --opencode / --codex
|
|
14
|
+
* --claude / --opencode / --codex select runtime(s)
|
|
15
15
|
* --all install to all supported runtimes
|
|
16
16
|
* -g, --global install to runtime's global config dir
|
|
17
17
|
* -l, --local install into current working directory
|
|
18
18
|
* -u, --uninstall remove installed assets
|
|
19
19
|
* -c, --config-dir <path> override config directory
|
|
20
|
-
* --skip-rtk do not detect / install RTK hook
|
|
21
20
|
* -h, --help show help
|
|
22
21
|
*/
|
|
23
22
|
|
|
@@ -29,8 +28,7 @@ const os = require('node:os');
|
|
|
29
28
|
|
|
30
29
|
const pkg = require('../package.json');
|
|
31
30
|
const { validateConfigDir } = require('../adapters/_shared/validate.cjs');
|
|
32
|
-
|
|
33
|
-
const SUPPORTED_RUNTIMES = ['claude', 'opencode', 'codex', 'gemini'];
|
|
31
|
+
const { SUPPORTED_RUNTIMES } = require('../adapters/_shared/runtime-assets.cjs');
|
|
34
32
|
|
|
35
33
|
const COLORS = {
|
|
36
34
|
reset: '\x1b[0m',
|
|
@@ -58,7 +56,7 @@ function printBanner() {
|
|
|
58
56
|
paint('cyan', ' ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝╚══════╝╚═╝'),
|
|
59
57
|
'',
|
|
60
58
|
` ${paint('bold', 'Ultra Builder Pro CLI')} ${paint('dim', 'v' + pkg.version)}`,
|
|
61
|
-
` ${paint('dim', 'Multi-runtime installer for Claude Code, OpenCode, Codex
|
|
59
|
+
` ${paint('dim', 'Multi-runtime installer for Claude Code, OpenCode, and Codex')}`,
|
|
62
60
|
'',
|
|
63
61
|
];
|
|
64
62
|
console.log(banner.join('\n'));
|
|
@@ -71,7 +69,6 @@ function printHelp() {
|
|
|
71
69
|
${paint('cyan', '--claude')} Claude Code
|
|
72
70
|
${paint('cyan', '--opencode')} OpenCode
|
|
73
71
|
${paint('cyan', '--codex')} Codex CLI (OpenAI)
|
|
74
|
-
${paint('cyan', '--gemini')} Gemini CLI (Google)
|
|
75
72
|
${paint('cyan', '--all')} all supported runtimes
|
|
76
73
|
|
|
77
74
|
${paint('yellow', 'Scope:')}
|
|
@@ -81,7 +78,6 @@ function printHelp() {
|
|
|
81
78
|
${paint('yellow', 'Other:')}
|
|
82
79
|
${paint('cyan', '-u, --uninstall')} remove installed assets
|
|
83
80
|
${paint('cyan', '-c, --config-dir')} override runtime's config directory (string path)
|
|
84
|
-
${paint('cyan', '--skip-rtk')} skip RTK hook registration (RTK is a soft dependency)
|
|
85
81
|
${paint('cyan', '-h, --help')} show this help
|
|
86
82
|
${paint('cyan', '-v, --version')} show CLI version
|
|
87
83
|
|
|
@@ -89,7 +85,7 @@ function printHelp() {
|
|
|
89
85
|
${paint('dim', '# Install to Claude Code globally')}
|
|
90
86
|
npx ultra-builder-pro-cli --claude --global
|
|
91
87
|
|
|
92
|
-
${paint('dim', '# Install to all
|
|
88
|
+
${paint('dim', '# Install to all supported runtimes locally in this repo')}
|
|
93
89
|
npx ultra-builder-pro-cli --all --local
|
|
94
90
|
|
|
95
91
|
${paint('dim', '# Uninstall from OpenCode')}
|
|
@@ -107,7 +103,6 @@ function parseArgs(argv) {
|
|
|
107
103
|
help: false,
|
|
108
104
|
version: false,
|
|
109
105
|
configDir: null,
|
|
110
|
-
skipRtk: false,
|
|
111
106
|
};
|
|
112
107
|
|
|
113
108
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -116,7 +111,6 @@ function parseArgs(argv) {
|
|
|
116
111
|
case '--claude': runtimes.add('claude'); break;
|
|
117
112
|
case '--opencode': runtimes.add('opencode'); break;
|
|
118
113
|
case '--codex': runtimes.add('codex'); break;
|
|
119
|
-
case '--gemini': runtimes.add('gemini'); break;
|
|
120
114
|
case '--all':
|
|
121
115
|
SUPPORTED_RUNTIMES.forEach(r => runtimes.add(r));
|
|
122
116
|
break;
|
|
@@ -125,7 +119,6 @@ function parseArgs(argv) {
|
|
|
125
119
|
case '-u': case '--uninstall': flags.uninstall = true; break;
|
|
126
120
|
case '-h': case '--help': flags.help = true; break;
|
|
127
121
|
case '-v': case '--version': flags.version = true; break;
|
|
128
|
-
case '--skip-rtk': flags.skipRtk = true; break;
|
|
129
122
|
case '-c': case '--config-dir':
|
|
130
123
|
flags.configDir = args[++i];
|
|
131
124
|
if (!flags.configDir || flags.configDir.startsWith('-')) {
|
|
@@ -193,7 +186,7 @@ async function main() {
|
|
|
193
186
|
}
|
|
194
187
|
|
|
195
188
|
if (runtimes.length === 0) {
|
|
196
|
-
bail('no runtime selected; use --claude / --opencode / --codex / --
|
|
189
|
+
bail('no runtime selected; use --claude / --opencode / --codex / --all');
|
|
197
190
|
}
|
|
198
191
|
|
|
199
192
|
const scope = resolveScope(flags);
|
|
@@ -229,21 +222,6 @@ async function main() {
|
|
|
229
222
|
process.exit(1);
|
|
230
223
|
}
|
|
231
224
|
|
|
232
|
-
// Phase 6.1 — RTK hook (soft dependency; install continues on absence).
|
|
233
|
-
if (mode === 'install') {
|
|
234
|
-
const rtk = require('../adapters/_shared/rtk-detect.cjs');
|
|
235
|
-
const result = rtk.installHook({ skip: flags.skipRtk, scope });
|
|
236
|
-
if (result.skipped) {
|
|
237
|
-
console.log(` ${paint('dim', '⤼ rtk skipped (--skip-rtk)')}`);
|
|
238
|
-
} else if (result.available && result.initialized) {
|
|
239
|
-
console.log(` ${paint('green', '✓')} rtk hook registered (${result.version})`);
|
|
240
|
-
} else if (result.available && !result.initialized) {
|
|
241
|
-
console.log(` ${paint('yellow', '!')} rtk present but init failed: ${result.init_error}`);
|
|
242
|
-
} else {
|
|
243
|
-
console.log(` ${paint('dim', '⤼ ' + result.hint.replace(/\n/g, '\n '))}`);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
225
|
console.log(` ${paint('green', 'Done.')}`);
|
|
248
226
|
}
|
|
249
227
|
|
package/bin/orchestrator.js
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
const fs = require('node:fs');
|
|
23
23
|
const path = require('node:path');
|
|
24
24
|
const { spawn } = require('node:child_process');
|
|
25
|
+
const { isSupportedRuntime } = require('../adapters/_shared/runtime-assets.cjs');
|
|
25
26
|
|
|
26
27
|
const REPO_ROOT = process.env.UBP_REPO_ROOT || process.cwd();
|
|
27
28
|
const PIDFILE = path.join(REPO_ROOT, '.ultra', 'orchestrator.pid');
|
|
@@ -46,8 +47,13 @@ function optInAllowed(settings) {
|
|
|
46
47
|
}
|
|
47
48
|
|
|
48
49
|
function parseRuntimes() {
|
|
49
|
-
const raw = process.env.UBP_ORCH_RUNTIMES || 'claude,opencode,codex
|
|
50
|
-
|
|
50
|
+
const raw = process.env.UBP_ORCH_RUNTIMES || 'claude,opencode,codex';
|
|
51
|
+
const runtimes = [...new Set(raw.split(',').map((s) => s.trim()).filter(Boolean))];
|
|
52
|
+
const invalid = runtimes.filter((runtime) => !isSupportedRuntime(runtime));
|
|
53
|
+
if (invalid.length > 0) {
|
|
54
|
+
throw new Error(`unsupported orchestrator runtime(s): ${invalid.join(', ')}`);
|
|
55
|
+
}
|
|
56
|
+
return runtimes;
|
|
51
57
|
}
|
|
52
58
|
|
|
53
59
|
function cmdRun(opts = {}) {
|
|
@@ -61,48 +67,25 @@ function cmdRun(opts = {}) {
|
|
|
61
67
|
}
|
|
62
68
|
const { initStateDb } = require('../mcp-server/lib/state-db.cjs');
|
|
63
69
|
const { runDaemon } = require('../orchestrator/daemon.cjs');
|
|
70
|
+
const runtimes = parseRuntimes();
|
|
64
71
|
const { db } = initStateDb(path.join(REPO_ROOT, '.ultra', 'state.db'));
|
|
65
72
|
const handle = runDaemon({
|
|
66
73
|
db,
|
|
67
74
|
repoRoot: REPO_ROOT,
|
|
68
|
-
runtimes
|
|
75
|
+
runtimes,
|
|
69
76
|
pollMs: Number(process.env.UBP_ORCH_POLL_MS || 1000),
|
|
70
77
|
onError: (err) => process.stderr.write(`orchestrator error: ${err.message}\n`),
|
|
71
78
|
});
|
|
72
79
|
|
|
73
|
-
// Phase 6.4 — optional code-graph watcher (opt-in via settings or CLI).
|
|
74
|
-
const watcherEnabled =
|
|
75
|
-
opts.withGraphWatcher === true ||
|
|
76
|
-
!!(settings && settings.orchestrator && settings.orchestrator.graph_watcher === true);
|
|
77
|
-
let watcherHandle = null;
|
|
78
|
-
if (watcherEnabled) {
|
|
79
|
-
try {
|
|
80
|
-
const { startWatcher } = require('../orchestrator/code-graph-watcher.cjs');
|
|
81
|
-
const jsonlPath = path.join(REPO_ROOT, '.ultra', 'code-graph-events.jsonl');
|
|
82
|
-
fs.mkdirSync(path.dirname(jsonlPath), { recursive: true });
|
|
83
|
-
watcherHandle = startWatcher({
|
|
84
|
-
repoRoot: REPO_ROOT,
|
|
85
|
-
onBatch: (batch) => {
|
|
86
|
-
try { fs.appendFileSync(jsonlPath, JSON.stringify(batch) + '\n'); }
|
|
87
|
-
catch (err) { process.stderr.write(`graph-watcher write error: ${err.message}\n`); }
|
|
88
|
-
},
|
|
89
|
-
});
|
|
90
|
-
process.stderr.write(`orchestrator: graph-watcher enabled → ${jsonlPath}\n`);
|
|
91
|
-
} catch (err) {
|
|
92
|
-
process.stderr.write(`orchestrator: graph-watcher disabled (${err.message})\n`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
80
|
const shutdown = (signal) => {
|
|
97
81
|
process.stderr.write(`orchestrator received ${signal}, stopping\n`);
|
|
98
82
|
handle.stop();
|
|
99
|
-
if (watcherHandle) watcherHandle.stop();
|
|
100
83
|
try { db.close(); } catch (_) { /* ignore */ }
|
|
101
84
|
process.exit(0);
|
|
102
85
|
};
|
|
103
86
|
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
104
87
|
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
105
|
-
process.stderr.write(`orchestrator running (pollMs=${Number(process.env.UBP_ORCH_POLL_MS || 1000)}, runtimes=${
|
|
88
|
+
process.stderr.write(`orchestrator running (pollMs=${Number(process.env.UBP_ORCH_POLL_MS || 1000)}, runtimes=${runtimes.join(',')})\n`);
|
|
106
89
|
// Keep process alive while the setInterval is unref'd.
|
|
107
90
|
setInterval(() => {}, 60000);
|
|
108
91
|
}
|
|
@@ -198,9 +181,8 @@ function usage() {
|
|
|
198
181
|
|
|
199
182
|
const argv = process.argv.slice(2);
|
|
200
183
|
const subcommand = argv[0];
|
|
201
|
-
const runOpts = { withGraphWatcher: argv.includes('--with-graph-watcher') };
|
|
202
184
|
switch (subcommand) {
|
|
203
|
-
case 'run': cmdRun(
|
|
185
|
+
case 'run': cmdRun(); break;
|
|
204
186
|
case 'start': cmdStart(); break;
|
|
205
187
|
case 'stop': cmdStop(); break;
|
|
206
188
|
case 'status': cmdStatus(); break;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Start or resume a continuous post-delivery change with bounded context, documentation impact, and linked authoritative tasks
|
|
3
|
+
argument-hint: "[change-id or title] [quick|standard|major|incident]"
|
|
4
|
+
allowed-tools: Read, Write, Edit, Bash, Grep, Glob, AskUserQuestion
|
|
5
|
+
model: opus
|
|
6
|
+
workflow-ref: "@skills/ultra-change/SKILL.md"
|
|
7
|
+
mcp_tools_required:
|
|
8
|
+
- change.create
|
|
9
|
+
- change.update
|
|
10
|
+
- change.get
|
|
11
|
+
- change.list
|
|
12
|
+
- change.context
|
|
13
|
+
- task.create
|
|
14
|
+
- task.list
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# /ultra-change
|
|
18
|
+
|
|
19
|
+
## 目标
|
|
20
|
+
|
|
21
|
+
把初始交付后的日常修复、功能、重构或事故变成一个持续可追踪的 change,避免
|
|
22
|
+
代码、spec、测试证据和项目上下文逐步漂移。
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
完整流程见 `@skills/ultra-change/SKILL.md`:
|
|
27
|
+
|
|
28
|
+
1. 先查 active/blocked change,匹配则恢复,避免重复创建。
|
|
29
|
+
2. 按 `quick / standard / major / incident` 分类并声明 docs impact。
|
|
30
|
+
3. 调 `change.create`,为 change 创建至少一个带 `change_id` 的 task。
|
|
31
|
+
4. standard/major 写 delta + plan;调 `change.context` 编译最小上下文。
|
|
32
|
+
5. 路由到 `/ultra-dev`、`/ultra-test`、`/ultra-review`、`/ultra-deliver`。
|
|
33
|
+
|
|
34
|
+
Memory 与代码图谱只允许以外部 provider 元数据引用出现;本命令不保存 provider
|
|
35
|
+
正文,也不自动刷新外部 provider。
|
|
36
|
+
|
|
37
|
+
## 用法
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
/ultra-change auth-timeout quick
|
|
41
|
+
/ultra-change billing-redesign major
|
|
42
|
+
/ultra-change incident-2026-07-17 incident
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 下一步
|
|
46
|
+
|
|
47
|
+
输出会给出 change id、artifact root、linked task 与准确的下一个 Ultra workflow。
|
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Converge and deliver a verified baseline or continuous change — reconcile specs, archive evidence, version, tag, and push
|
|
3
3
|
argument-hint: "[version-type]"
|
|
4
4
|
allowed-tools: Task, Read, Write, Edit, Bash, Grep, Glob, AskUserQuestion
|
|
5
5
|
model: opus
|
|
6
6
|
workflow-ref: "@skills/ultra-deliver/SKILL.md"
|
|
7
7
|
cli_fallback: "direct user interaction"
|
|
8
|
+
mcp_tools_required:
|
|
9
|
+
- change.list
|
|
10
|
+
- change.get
|
|
11
|
+
- change.context
|
|
12
|
+
- change.converge
|
|
13
|
+
- change.archive
|
|
8
14
|
---
|
|
9
15
|
|
|
10
16
|
# /ultra-deliver
|
|
11
17
|
|
|
12
18
|
## 目标
|
|
13
19
|
|
|
14
|
-
`/ultra-test`
|
|
15
|
-
|
|
20
|
+
`/ultra-test` 绿灯后,把 active delta 合并回 baseline,重跑发布证据,调用
|
|
21
|
+
`change.converge` 与 `change.archive`,再完成版本号、tag、push 和 delivery report。
|
|
16
22
|
|
|
17
23
|
## 参数
|
|
18
24
|
|
|
@@ -22,14 +28,15 @@ production build → 版本号 + git tag + push。写 `.ultra/delivery-report.js
|
|
|
22
28
|
|
|
23
29
|
## Workflow
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
完整流程见 `@skills/ultra-deliver/SKILL.md`(绑定 change → baseline reconciliation →
|
|
32
|
+
build/test → release commit → context/convergence/archive → tag/push → report)。
|
|
26
33
|
|
|
27
34
|
**命令入口做的事**:
|
|
28
35
|
1. 读 `.ultra/test-report.json` 验 `passed=true` + `git_commit === HEAD`
|
|
29
36
|
2. `git status` 清洁检查;不干净 → 通过 Host 原生提问界面选处理方式
|
|
30
|
-
3.
|
|
31
|
-
4.
|
|
32
|
-
5.
|
|
37
|
+
3. 有 active change 时合并 delta、刷新 context,并通过确定性 convergence gate
|
|
38
|
+
4. archive 完成后才允许 tag/push
|
|
39
|
+
5. 写带 change id、archive path、baseline updates 的 delivery report
|
|
33
40
|
|
|
34
41
|
## 用法
|
|
35
42
|
|
package/commands/ultra-dev.md
CHANGED
|
@@ -8,6 +8,8 @@ mcp_tools_required:
|
|
|
8
8
|
- task.update
|
|
9
9
|
- task.get
|
|
10
10
|
- task.list
|
|
11
|
+
- change.get
|
|
12
|
+
- change.context
|
|
11
13
|
---
|
|
12
14
|
|
|
13
15
|
# /ultra-dev
|
|
@@ -34,9 +36,10 @@ v4.4→v4.5 迁移,绝不从 `tasks.json` 回退或直接改投影。
|
|
|
34
36
|
**命令入口做的事**:
|
|
35
37
|
1. 读 `.ultra/workflow-state.json` 决定新跑 vs resume
|
|
36
38
|
2. 首跑通过 Host 原生提问触发 Design Approval Gate
|
|
37
|
-
3. 驱动 skill 走 TDD + review 循环;状态仅通过 MCP `task.update
|
|
38
|
-
4.
|
|
39
|
-
5. Step 4.
|
|
39
|
+
3. 驱动 skill 走 TDD + review 循环;状态仅通过 MCP `task.update`
|
|
40
|
+
4. task 有 `change_id` 时把需求变化写进 active delta,并用 `change.context` 刷新上下文
|
|
41
|
+
5. Step 4.5 review 通过 `/ultra-review` 和 Host 原生 subagent 执行
|
|
42
|
+
6. Step 4.4 pre-review checkpoint 写入 workflow-state.json,不依赖 `/compact`
|
|
40
43
|
|
|
41
44
|
## 用法
|
|
42
45
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Inspect Ultra runtime health and optionally run explicit backup-first mechanical recovery
|
|
3
|
+
argument-hint: "[--repair]"
|
|
4
|
+
allowed-tools: Read, Bash
|
|
5
|
+
model: opus
|
|
6
|
+
workflow-ref: "@skills/ultra-doctor/SKILL.md"
|
|
7
|
+
mcp_tools_required:
|
|
8
|
+
- system.doctor
|
|
9
|
+
cli_fallback: "system doctor"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# /ultra-doctor
|
|
13
|
+
|
|
14
|
+
## 目标
|
|
15
|
+
|
|
16
|
+
诊断 state.db、projection、incident、session 和 active change artifact 的健康状态。
|
|
17
|
+
默认只读;只有显式传入 `--repair` 才允许备份后执行机械恢复。
|
|
18
|
+
|
|
19
|
+
## Workflow
|
|
20
|
+
|
|
21
|
+
完整契约见 `@skills/ultra-doctor/SKILL.md`。
|
|
22
|
+
|
|
23
|
+
1. 默认调用 `system.doctor {"repair": false}`。
|
|
24
|
+
2. 只报告失败检查、incident、游标落后和归属边界。
|
|
25
|
+
3. `--repair` 时必须先生成 state.db 备份,再恢复 orphan、消费 staleness event、
|
|
26
|
+
重排超时中断或失败的 projection 并重新投影。
|
|
27
|
+
4. 修复后重新读取报告;仍 degraded 就明确剩余阻塞,不宣称完成。
|
|
28
|
+
|
|
29
|
+
## 用法
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
/ultra-doctor
|
|
33
|
+
/ultra-doctor --repair
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Memory 和代码图谱属于外部 provider,本命令既不收集也不修复它们。
|
package/commands/ultra-init.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Initialize Ultra Builder Pro project — scaffold .ultra/,
|
|
2
|
+
description: Initialize Ultra Builder Pro project — scaffold .ultra/, initialize state.db and continuous-change directories, optional git
|
|
3
3
|
argument-hint: <name> <type> <stack> [git]
|
|
4
4
|
allowed-tools: Read, Write, Bash, Grep, Glob, AskUserQuestion
|
|
5
5
|
model: opus
|
|
@@ -13,8 +13,9 @@ cli_fallback: "task init-project"
|
|
|
13
13
|
|
|
14
14
|
## 目标
|
|
15
15
|
|
|
16
|
-
搭 `.ultra/` 骨架(specs + tasks + docs + reports
|
|
17
|
-
|
|
16
|
+
搭 `.ultra/` 骨架(specs + tasks + changes + docs + reports),初始化权威
|
|
17
|
+
`state.db`,写入带元数据的初始 `tasks.json`,并按需初始化 git。Claude Code、
|
|
18
|
+
OpenCode、Codex 三个 runtime 行为一致。
|
|
18
19
|
|
|
19
20
|
## 参数
|
|
20
21
|
|
package/commands/ultra-status.md
CHANGED
|
@@ -7,6 +7,8 @@ workflow-ref: "@skills/ultra-status/SKILL.md"
|
|
|
7
7
|
mcp_tools_required:
|
|
8
8
|
- task.list
|
|
9
9
|
- task.get
|
|
10
|
+
- change.list
|
|
11
|
+
- system.doctor
|
|
10
12
|
---
|
|
11
13
|
|
|
12
14
|
# /ultra-status
|
|
@@ -14,7 +16,7 @@ mcp_tools_required:
|
|
|
14
16
|
## 目标
|
|
15
17
|
|
|
16
18
|
一次调用拿整个项目近况:任务进度(来自 state.db `task.list`)+ 测试状态(`test-report.json`)+
|
|
17
|
-
发布状态(`delivery-report.json`)+
|
|
19
|
+
发布状态(`delivery-report.json`)+ active change + runtime health + 下一步命令路由。只读。
|
|
18
20
|
任务状态只接受 MCP `task.list`/`task.get`;失败时原样报告并停止,绝不读取
|
|
19
21
|
`tasks.json` 冒充权威数据。旧 v4.4 数据必须先执行正式迁移。
|
|
20
22
|
|
|
@@ -30,9 +32,9 @@ mcp_tools_required:
|
|
|
30
32
|
|
|
31
33
|
**命令入口做的事**:
|
|
32
34
|
1. 环境检查(state.db 可达 + 有 task)
|
|
33
|
-
2. `task.list`
|
|
34
|
-
3. 算进度 +
|
|
35
|
-
4.
|
|
35
|
+
2. `task.list` + `change.list` + read-only `system.doctor`;读 test/delivery report
|
|
36
|
+
3. 算进度 + 风险(含 projection、incident、context/docs drift)
|
|
37
|
+
4. 初始交付后不再显示终局 Done;健康 baseline 的下一项日常工作路由到 `/ultra-change`
|
|
36
38
|
|
|
37
39
|
## 用法
|
|
38
40
|
|
|
@@ -44,4 +46,4 @@ mcp_tools_required:
|
|
|
44
46
|
## 下一步
|
|
45
47
|
|
|
46
48
|
看输出的 `▶ Next Up` 块。常见场景:有 pending → `/ultra-dev`;全绿 → `/ultra-test`;
|
|
47
|
-
test passed → `/ultra-deliver`。
|
|
49
|
+
test passed → `/ultra-deliver`;已归档且 baseline 健康 → `/ultra-change`。
|
package/commands/ultra-test.md
CHANGED
|
@@ -6,6 +6,7 @@ model: opus
|
|
|
6
6
|
workflow-ref: "@skills/ultra-test/SKILL.md"
|
|
7
7
|
mcp_tools_required:
|
|
8
8
|
- task.list
|
|
9
|
+
- change.list
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
# /ultra-test
|
|
@@ -33,7 +34,7 @@ completed-task 前置检查必须来自 MCP `task.list`;失败时停止,绝
|
|
|
33
34
|
**命令入口做的事**:
|
|
34
35
|
1. 探测项目类型 + `task.list` 确认 ≥1 completed
|
|
35
36
|
2. 按 scope 跑 gates;失败进 auto-fix(最多 5 轮)
|
|
36
|
-
3. 写 `.ultra/test-report.json
|
|
37
|
+
3. 写 `.ultra/test-report.json`(change_id + exact commands + gate 明细 + blocking_issues)
|
|
37
38
|
4. 通过 → 提示 `/ultra-deliver`
|
|
38
39
|
|
|
39
40
|
## 用法
|
package/docs/AGENT-CONTEXT.md
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
# Ultra Builder Pro — Agent Context
|
|
2
2
|
|
|
3
3
|
Current shared runtime contract for the native Claude Code, OpenCode, and Codex
|
|
4
|
-
plugins.
|
|
5
|
-
shape for the three first-class plugins.
|
|
4
|
+
plugins.
|
|
6
5
|
|
|
7
6
|
## 1. Ownership boundary
|
|
8
7
|
|
|
9
8
|
Ultra Builder Pro owns only:
|
|
10
9
|
|
|
11
|
-
-
|
|
10
|
+
- twelve public workflows: `learn`, `ultra-init`, `ultra-research`, `ultra-plan`,
|
|
12
11
|
`ultra-dev`, `ultra-test`, `ultra-review`, `ultra-deliver`, `ultra-status`, and
|
|
13
|
-
`ultra-think`;
|
|
12
|
+
`ultra-think`, plus the daily `ultra-change` and diagnostic `ultra-doctor`;
|
|
14
13
|
- four internal agent-only rule skills: `code-review-expert`, `security-rules`,
|
|
15
14
|
`integration-rules`, and `testing-rules`;
|
|
16
15
|
- the host-specific collaboration companions and `ultra-verify`;
|
|
@@ -25,39 +24,39 @@ not put it in a plugin until that allowlist classifies it.
|
|
|
25
24
|
## 2. Three-layer architecture
|
|
26
25
|
|
|
27
26
|
```text
|
|
28
|
-
native command or skill -> MCP workflow-state operation ->
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
native command or skill -> MCP workflow-state operation -> .ultra/state.db
|
|
28
|
+
^
|
|
29
|
+
|
|
|
30
|
+
selected CLI init / doctor / diagnostics / orchestration
|
|
32
31
|
```
|
|
33
32
|
|
|
34
33
|
| Layer | Artifact | Contract |
|
|
35
34
|
|---|---|---|
|
|
36
35
|
| Skill/command | `skills/*/SKILL.md`, `commands/*.md` | Model-facing workflow and host-native entry point |
|
|
37
36
|
| MCP | `mcp-server/server.cjs` | Authoritative typed operations over `.ultra/state.db` |
|
|
38
|
-
| CLI | `ultra-tools`, `ubp-orchestrator` |
|
|
37
|
+
| CLI | `ultra-tools`, `ubp-orchestrator` | Selected initialization, backup-first recovery, automation, and diagnostics; not a change-state mirror |
|
|
39
38
|
|
|
40
|
-
`.ultra/state.db` is the only durable Ultra authority for
|
|
41
|
-
events, telemetry, review evidence,
|
|
42
|
-
context Markdown, execution plans, and
|
|
43
|
-
|
|
39
|
+
`.ultra/state.db` is the only durable Ultra authority for changes, tasks,
|
|
40
|
+
sessions, events, incidents, projection jobs/cursors, telemetry, review evidence,
|
|
41
|
+
and circuit-breaker state. `tasks.json`, context Markdown, execution plans, and
|
|
42
|
+
reports are projections or workflow artifacts.
|
|
44
43
|
|
|
45
44
|
## 3. Live MCP and declared contracts
|
|
46
45
|
|
|
47
|
-
`spec/mcp-tools.yaml` declares
|
|
48
|
-
|
|
46
|
+
`spec/mcp-tools.yaml` declares and the bundled server registers 29 tools across
|
|
47
|
+
five families:
|
|
49
48
|
|
|
50
49
|
| Family | Live tools |
|
|
51
50
|
|---|---|
|
|
52
51
|
| `task.*` | create, update, list, get, switch_tag, delete, init_project, expand, parse_prd, dependency_topo, append_event, subscribe_events |
|
|
53
52
|
| `session.*` | spawn, close, get, list, admission_check, heartbeat, subscribe_events |
|
|
53
|
+
| `change.*` | create, update, get, list, context, converge, archive |
|
|
54
|
+
| `system.*` | doctor |
|
|
54
55
|
| `plan.*` | export, get |
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
own native review agents, repository discovery, skill loader, and user
|
|
60
|
-
interaction surfaces.
|
|
57
|
+
Review, repository impact discovery, skill loading, and user interaction remain
|
|
58
|
+
host-native capabilities rather than fake MCP contracts. The generated Codex
|
|
59
|
+
capability map documents those replacements.
|
|
61
60
|
|
|
62
61
|
Any new MCP contract starts in `spec/mcp-tools.yaml` with valid and invalid
|
|
63
62
|
fixtures. Do not add an ad-hoc server handler first.
|
|
@@ -66,9 +65,9 @@ fixtures. Do not add an ad-hoc server handler first.
|
|
|
66
65
|
|
|
67
66
|
| Host | Plugin form | Workflow entry | Hook form | Collaboration companions |
|
|
68
67
|
|---|---|---|---|---|
|
|
69
|
-
| Claude Code | `.claude-plugin/plugin.json`, native commands/skills/agents, `.mcp.json` | `/ultra-*`, `/learn` | native `hooks/hooks.json` | `codex-collab`, `
|
|
70
|
-
| Codex | personal plugin with `.codex-plugin/plugin.json`, namespaced skills, TOML agents, `.mcp.json` | `$ultra-builder-pro:ultra-*`, `$ultra-builder-pro:learn` | native `hooks/hooks.json` through the Codex wire adapter | `cc-collab`, `
|
|
71
|
-
| OpenCode | config bundle plus native JavaScript plugin | `/ultra-*`, `/learn` | `event`, system transform, compaction, and tool lifecycle handlers | `cc-collab`, `codex-collab`, `
|
|
68
|
+
| Claude Code | `.claude-plugin/plugin.json`, native commands/skills/agents, `.mcp.json` | `/ultra-*`, `/learn` | native `hooks/hooks.json` | `codex-collab`, `ultra-verify` |
|
|
69
|
+
| Codex | personal plugin with `.codex-plugin/plugin.json`, namespaced skills, TOML agents, `.mcp.json` | `$ultra-builder-pro:ultra-*`, `$ultra-builder-pro:learn` | native `hooks/hooks.json` through the Codex wire adapter | `cc-collab`, `ultra-verify` |
|
|
70
|
+
| OpenCode | config bundle plus native JavaScript plugin | `/ultra-*`, `/learn` | `event`, system transform, compaction, and tool lifecycle handlers | `cc-collab`, `codex-collab`, `ultra-verify` |
|
|
72
71
|
|
|
73
72
|
The current host remains primary. Collaboration skills call another runtime
|
|
74
73
|
only when explicitly requested, use it as a read-only advisor, and return the
|
|
@@ -85,17 +84,22 @@ The canonical Python hook allowlist contains seven workflow-only adapters:
|
|
|
85
84
|
- `pre_stop_check.py` at stop;
|
|
86
85
|
- `subagent_tracker.py` for bounded worker lifecycle evidence.
|
|
87
86
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
`health_check.py` and `workflow_context.py` may inspect any initialized project;
|
|
88
|
+
`active_task_context.py` always protects the task projection but limits ordinary
|
|
89
|
+
edit guidance to an active workflow. Compact/stop/subagent hooks remain
|
|
90
|
+
active-workflow scoped. OpenCode natively injects baseline/change context and
|
|
91
|
+
protects the projection; full health inspection is available through
|
|
92
|
+
`system.doctor` rather than a session-start health hook.
|
|
93
|
+
Generic command blocking, post-edit governance, and unrelated user hooks are not
|
|
94
|
+
copied into Ultra Builder Pro.
|
|
92
95
|
|
|
93
96
|
## 6. Memory boundary
|
|
94
97
|
|
|
95
98
|
Ultra Builder Pro has no memory MCP family, recall skill, prompt capture,
|
|
96
99
|
transcript capture, observation journal, or session-summary hook. Persistent
|
|
97
100
|
cross-session memory belongs to a separately installed provider such as
|
|
98
|
-
cloud-mem/claude-mem.
|
|
101
|
+
cloud-mem/claude-mem. Code graph content is equally external. A change context
|
|
102
|
+
may contain only provider metadata references, never provider payload content.
|
|
99
103
|
|
|
100
104
|
Old Ultra data is never deleted during install. The explicit migration path is:
|
|
101
105
|
|
|
@@ -113,6 +117,9 @@ Archive before prune; the confirmation token is intentionally required.
|
|
|
113
117
|
.ultra/
|
|
114
118
|
├── state.db # authoritative SQLite store
|
|
115
119
|
├── workflow-state.json # active workflow/recovery checkpoint
|
|
120
|
+
├── changes/
|
|
121
|
+
│ ├── active/<id>/ # intent, delta, plan, compiled context, verification
|
|
122
|
+
│ └── archive/ # converged packets after baseline reconciliation
|
|
116
123
|
├── tasks/ # projections and task contexts
|
|
117
124
|
├── specs/ # research/product/architecture artifacts
|
|
118
125
|
├── sessions/ # bounded runtime artifacts
|