ultra-builder-pro-cli 5.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +113 -3
- package/README.md +67 -478
- package/README.zh-CN.md +49 -422
- package/adapters/_shared/frontmatter.cjs +1 -18
- package/adapters/_shared/plugin-core.cjs +17 -83
- package/adapters/_shared/runtime-assets.cjs +6 -120
- package/adapters/claude.js +8 -24
- package/adapters/codex.js +16 -38
- package/bin/install.js +35 -57
- package/docs/PLUGIN-ISOLATION-CONTRACT.md +13 -101
- package/docs/examples/drive/claude-reviewer.sh +53 -0
- package/docs/examples/drive/claude-writer.sh +43 -0
- package/engine/FORMATS.md +1051 -0
- package/engine/checks.cjs +139 -0
- package/engine/cli.cjs +148 -0
- package/engine/completion.cjs +48 -0
- package/engine/context.cjs +94 -0
- package/engine/drive.cjs +220 -0
- package/engine/expect-worker.cjs +5 -0
- package/engine/expect.cjs +33 -0
- package/engine/formats.cjs +189 -0
- package/engine/git-state.cjs +112 -0
- package/engine/ledger.cjs +205 -0
- package/engine/loading.cjs +28 -0
- package/engine/merge.cjs +273 -0
- package/engine/milestone.cjs +89 -0
- package/engine/plan.cjs +232 -0
- package/engine/project.cjs +5 -0
- package/engine/signals.cjs +3 -0
- package/engine/states.cjs +175 -0
- package/hooks/session-start.cjs +54 -0
- package/package.json +17 -52
- package/skills/ultra/SKILL.md +395 -0
- package/.ultra-template/changes/abandoned/.gitkeep +0 -0
- package/.ultra-template/changes/active/.gitkeep +0 -1
- package/.ultra-template/changes/archive/.gitkeep +0 -1
- package/.ultra-template/contexts/TEMPLATE.md +0 -135
- package/.ultra-template/decisions/.gitkeep +0 -1
- package/.ultra-template/evidence/.gitkeep +0 -1
- package/.ultra-template/north-star.md +0 -52
- package/.ultra-template/project-brief.md +0 -28
- package/.ultra-template/research/.gitkeep +0 -1
- package/.ultra-template/specs/architecture.md +0 -81
- package/.ultra-template/specs/discovery.md +0 -74
- package/.ultra-template/specs/product.md +0 -80
- package/.ultra-template/specs/research-distillate.md +0 -57
- package/.ultra-template/tasks.json +0 -4
- package/.ultra-template/test-report.json +0 -44
- package/adapters/_shared/host-profile.cjs +0 -5
- package/adapters/grok.js +0 -242
- package/adapters/kimi.js +0 -232
- package/adapters/opencode.js +0 -408
- package/adapters/zcode.js +0 -375
- package/bin/delegate-worker.cjs +0 -5
- package/bin/delegate.cjs +0 -5
- package/docs/ARCHITECTURE.md +0 -274
- package/docs/ARTIFACT-AUTHORITY.md +0 -305
- package/docs/DECISIONS.md +0 -229
- package/docs/PHILOSOPHY.md +0 -261
- package/docs/RUNTIME-COMPAT-MATRIX.md +0 -315
- package/docs/SKILL-AUTHORING.md +0 -113
- package/docs/WORKFLOW-LIFECYCLE.md +0 -350
- package/docs/evals/adversarial-review-2026-08-14.md +0 -84
- package/docs/evals/ultra-5-0-journey-results.md +0 -62
- package/docs/evals/ultra-5-0-live-acp-conformance.md +0 -93
- package/docs/evals/ultra-5-0-route-journeys.md +0 -145
- package/docs/evals/zcode-automation-2026-08-14.md +0 -103
- package/hooks/README.md +0 -52
- package/hooks/_common.py +0 -1779
- package/hooks/adapters/codex.py +0 -295
- package/hooks/adapters/grok.py +0 -134
- package/hooks/adapters/kimi.py +0 -156
- package/hooks/adapters/zcode.py +0 -227
- package/hooks/block_dangerous_commands.py +0 -201
- package/hooks/compact_context.py +0 -224
- package/hooks/mid_workflow_recall.py +0 -47
- package/hooks/post_edit_guard.py +0 -215
- package/hooks/session_context.py +0 -741
- package/skills/ultra-change/SKILL.md +0 -165
- package/skills/ultra-change/references/change-contract.md +0 -199
- package/skills/ultra-change/references/execution-grant.md +0 -109
- package/skills/ultra-change/references/primary-transfer.md +0 -273
- package/skills/ultra-change/scripts/validate_primary_transfer.cjs +0 -1928
- package/skills/ultra-delegate/SKILL.md +0 -195
- package/skills/ultra-delegate/patches/zcode-acp-0.1.0-zcode-0.16.5.patch +0 -184
- package/skills/ultra-delegate/references/delegation-contract.md +0 -138
- package/skills/ultra-delegate/scripts/acp-conformance.cjs +0 -287
- package/skills/ultra-delegate/scripts/acp-driver.cjs +0 -762
- package/skills/ultra-delegate/scripts/agent-execution-driver.cjs +0 -320
- package/skills/ultra-delegate/scripts/cli-driver.cjs +0 -61
- package/skills/ultra-delegate/scripts/delegate-profiles/kimi-read-only.md +0 -15
- package/skills/ultra-delegate/scripts/delegate-profiles/kimi-write.md +0 -17
- package/skills/ultra-delegate/scripts/delegate-worker.cjs +0 -328
- package/skills/ultra-delegate/scripts/delegate.cjs +0 -690
- package/skills/ultra-delegate/scripts/delegate_wait.py +0 -86
- package/skills/ultra-delegate/scripts/host-profile.cjs +0 -267
- package/skills/ultra-deliver/SKILL.md +0 -194
- package/skills/ultra-deliver/references/baseline-reconciliation.md +0 -41
- package/skills/ultra-dev/SKILL.md +0 -265
- package/skills/ultra-dev/references/debugging.md +0 -22
- package/skills/ultra-domain-modeling/SKILL.md +0 -79
- package/skills/ultra-grilling/SKILL.md +0 -121
- package/skills/ultra-grilling/references/reframing.md +0 -76
- package/skills/ultra-init/SKILL.md +0 -143
- package/skills/ultra-init/references/brownfield-adoption.md +0 -32
- package/skills/ultra-init/scripts/init_project.cjs +0 -1031
- package/skills/ultra-plan/SKILL.md +0 -160
- package/skills/ultra-plan/references/task-evidence-v2.md +0 -300
- package/skills/ultra-plan/scripts/validate_task_evidence.cjs +0 -859
- package/skills/ultra-research/SKILL.md +0 -167
- package/skills/ultra-research/references/00-problem-validation.md +0 -36
- package/skills/ultra-research/references/01-opportunity-discovery.md +0 -33
- package/skills/ultra-research/references/02-market-assessment.md +0 -31
- package/skills/ultra-research/references/03-alternatives.md +0 -31
- package/skills/ultra-research/references/04-product-strategy.md +0 -41
- package/skills/ultra-research/references/05-assumptions-validation.md +0 -31
- package/skills/ultra-research/references/10-user-personas.md +0 -30
- package/skills/ultra-research/references/11-user-scenarios.md +0 -28
- package/skills/ultra-research/references/20-user-stories.md +0 -31
- package/skills/ultra-research/references/21-features-scope.md +0 -38
- package/skills/ultra-research/references/22-success-metrics.md +0 -33
- package/skills/ultra-research/references/30-architecture-context.md +0 -30
- package/skills/ultra-research/references/31-solution-strategy.md +0 -28
- package/skills/ultra-research/references/32-building-blocks.md +0 -28
- package/skills/ultra-research/references/40-deployment.md +0 -29
- package/skills/ultra-research/references/41-quality-risks.md +0 -28
- package/skills/ultra-research/references/99-synthesis.md +0 -59
- package/skills/ultra-research/references/north-star-v2.md +0 -168
- package/skills/ultra-research/references/wayfinding.md +0 -50
- package/skills/ultra-research/scripts/validate_north_star.cjs +0 -1174
- package/skills/ultra-review/SKILL.md +0 -275
- package/skills/ultra-review/references/adversarial-evaluation.md +0 -31
- package/skills/ultra-review/references/code.md +0 -17
- package/skills/ultra-review/references/comments.md +0 -12
- package/skills/ultra-review/references/design.md +0 -12
- package/skills/ultra-review/references/errors.md +0 -13
- package/skills/ultra-review/references/review-modes.md +0 -29
- package/skills/ultra-review/references/spec.md +0 -18
- package/skills/ultra-review/references/tests.md +0 -12
- package/skills/ultra-review/references/unified-schema.md +0 -284
- package/skills/ultra-review/references/worker-packet.md +0 -183
- package/skills/ultra-review/scripts/review_wait.py +0 -2943
- package/skills/ultra-status/SKILL.md +0 -209
- package/skills/ultra-status/references/route-contract.md +0 -100
- package/skills/ultra-tdd/SKILL.md +0 -91
- package/skills/ultra-tdd/references/templates/README.md +0 -20
- package/skills/ultra-tdd/references/templates/feature-flag-default-audit.sh +0 -79
- package/skills/ultra-tdd/references/templates/persistence-real.ts +0 -78
- package/skills/ultra-tdd/references/templates/testcontainer-postgres.py +0 -78
- package/skills/ultra-tdd/references/templates/testcontainer-postgres.ts +0 -73
- package/skills/ultra-tdd/references/templates/vertical-slice.ts +0 -66
- package/skills/ultra-tdd/references/test-execution.md +0 -23
- package/skills/ultra-test/SKILL.md +0 -244
- package/skills/ultra-test/references/export-syntax.md +0 -18
- package/skills/ultra-test/scripts/validate_review_transport.cjs +0 -549
- package/skills/ultra-test/scripts/worktree_digest.cjs +0 -576
- package/skills/ultra-think/SKILL.md +0 -56
- package/skills/ultra-think/references/autonomy-boundary.md +0 -48
- package/skills/ultra-think/references/interaction-boundary.md +0 -42
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Recall current acceptance before a source-reading or editing tool call."""
|
|
3
|
-
|
|
4
|
-
from _common import (
|
|
5
|
-
current_task_selection,
|
|
6
|
-
emit_context,
|
|
7
|
-
project_root,
|
|
8
|
-
read_payload,
|
|
9
|
-
render_task_diagnostics,
|
|
10
|
-
task_sections,
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def main() -> int:
|
|
15
|
-
payload = read_payload()
|
|
16
|
-
root = project_root(payload) # Idle guard: no `.ultra/` means silent exit.
|
|
17
|
-
if root is None:
|
|
18
|
-
return 0
|
|
19
|
-
selection = current_task_selection(root)
|
|
20
|
-
task = selection["task"]
|
|
21
|
-
if not task:
|
|
22
|
-
diagnostics = render_task_diagnostics(selection["diagnostics"])
|
|
23
|
-
if diagnostics:
|
|
24
|
-
emit_context(
|
|
25
|
-
"PreToolUse",
|
|
26
|
-
f"Ultra task ledger diagnostics:\n{diagnostics}",
|
|
27
|
-
)
|
|
28
|
-
return 0
|
|
29
|
-
sections = task_sections(root, task)
|
|
30
|
-
parts = []
|
|
31
|
-
if sections["acceptance"]:
|
|
32
|
-
parts.append(
|
|
33
|
-
f"Ultra task {task.get('id')} acceptance reminder:\n{sections['acceptance']}"
|
|
34
|
-
)
|
|
35
|
-
diagnostics = render_task_diagnostics(sections["diagnostics"])
|
|
36
|
-
if diagnostics:
|
|
37
|
-
parts.append(f"Ultra task {task.get('id')} diagnostics:\n{diagnostics}")
|
|
38
|
-
if parts:
|
|
39
|
-
emit_context(
|
|
40
|
-
"PreToolUse",
|
|
41
|
-
"\n\n".join(parts),
|
|
42
|
-
)
|
|
43
|
-
return 0
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if __name__ == "__main__":
|
|
47
|
-
raise SystemExit(main())
|
package/hooks/post_edit_guard.py
DELETED
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Record mechanical task evidence observations after an edit."""
|
|
3
|
-
|
|
4
|
-
from __future__ import annotations
|
|
5
|
-
|
|
6
|
-
import re
|
|
7
|
-
from datetime import datetime, timezone
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
|
|
10
|
-
from _common import (
|
|
11
|
-
current_task_selection,
|
|
12
|
-
emit_context,
|
|
13
|
-
normalized_task_id,
|
|
14
|
-
project_relative_path,
|
|
15
|
-
project_root,
|
|
16
|
-
read_derived_json,
|
|
17
|
-
read_payload,
|
|
18
|
-
read_stable_project_file_snapshot,
|
|
19
|
-
render_task_diagnostics,
|
|
20
|
-
task_sections,
|
|
21
|
-
write_json_atomic,
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
DIMENSIONS = (
|
|
26
|
-
"tests_written",
|
|
27
|
-
"tests_passed",
|
|
28
|
-
"persistence_real",
|
|
29
|
-
"feature_flags_audit",
|
|
30
|
-
"vertical_slice",
|
|
31
|
-
"spec_trace",
|
|
32
|
-
)
|
|
33
|
-
PROGRESS_SNAPSHOT_MAX_BYTES = 1024 * 1024
|
|
34
|
-
TRACE_SOURCE_SNAPSHOT_MAX_BYTES = 8 * 1024 * 1024
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
def slug(value: str) -> str:
|
|
38
|
-
return re.sub(r"[^a-z0-9]+", "-", value.lower()).strip("-")
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def trace_observation(root: Path, task: dict):
|
|
42
|
-
trace = task.get("trace_to")
|
|
43
|
-
if not isinstance(trace, str) or "#" not in trace:
|
|
44
|
-
return "missing", None
|
|
45
|
-
name, anchor = trace.rsplit("#", 1)
|
|
46
|
-
relative = project_relative_path(name, ultra_default=True)
|
|
47
|
-
if relative is None:
|
|
48
|
-
return "missing", None
|
|
49
|
-
snapshot, failure = read_stable_project_file_snapshot(
|
|
50
|
-
root,
|
|
51
|
-
relative,
|
|
52
|
-
max_bytes=TRACE_SOURCE_SNAPSHOT_MAX_BYTES,
|
|
53
|
-
code_prefix="trace_source_snapshot",
|
|
54
|
-
label="Task trace source",
|
|
55
|
-
)
|
|
56
|
-
if snapshot is None or failure is not None:
|
|
57
|
-
diagnostic = dict(failure) if failure is not None else {
|
|
58
|
-
"code": "trace_source_snapshot_read_error",
|
|
59
|
-
"message": "Task trace source could not be observed.",
|
|
60
|
-
"path": str(root / relative),
|
|
61
|
-
}
|
|
62
|
-
diagnostic["repair"] = (
|
|
63
|
-
"Restore the trace source as one stable readable regular UTF-8 file and retry "
|
|
64
|
-
"PostToolUse; spec_trace remains missing until it is observed."
|
|
65
|
-
)
|
|
66
|
-
return "missing", diagnostic
|
|
67
|
-
try:
|
|
68
|
-
text = snapshot["bytes"].decode("utf-8")
|
|
69
|
-
except UnicodeDecodeError:
|
|
70
|
-
return "missing", {
|
|
71
|
-
"code": "trace_source_snapshot_invalid_utf8",
|
|
72
|
-
"message": "Task trace source must be valid UTF-8 before it can be observed.",
|
|
73
|
-
"path": snapshot["path"],
|
|
74
|
-
"repair": (
|
|
75
|
-
"Restore the trace source as valid UTF-8 and retry PostToolUse; spec_trace "
|
|
76
|
-
"remains missing until it is observed."
|
|
77
|
-
),
|
|
78
|
-
}
|
|
79
|
-
headings = re.findall(r"^#{1,6}\s+(.+?)\s*$", text, re.MULTILINE)
|
|
80
|
-
observation = (
|
|
81
|
-
"observed"
|
|
82
|
-
if slug(anchor) in {slug(heading) for heading in headings}
|
|
83
|
-
else "missing"
|
|
84
|
-
)
|
|
85
|
-
return observation, None
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
def main() -> int:
|
|
89
|
-
payload = read_payload()
|
|
90
|
-
root = project_root(payload) # Idle guard: no `.ultra/` means silent exit.
|
|
91
|
-
if root is None:
|
|
92
|
-
return 0
|
|
93
|
-
selection = current_task_selection(root)
|
|
94
|
-
task = selection["task"]
|
|
95
|
-
if not task:
|
|
96
|
-
diagnostics = render_task_diagnostics(selection["diagnostics"])
|
|
97
|
-
if diagnostics:
|
|
98
|
-
emit_context(
|
|
99
|
-
"PostToolUse",
|
|
100
|
-
"Ultra task selection diagnostic:\n" + diagnostics,
|
|
101
|
-
)
|
|
102
|
-
return 0
|
|
103
|
-
sections = task_sections(root, task)
|
|
104
|
-
if not sections["context_available"]:
|
|
105
|
-
context_diagnostics = [
|
|
106
|
-
diagnostic
|
|
107
|
-
for diagnostic in sections["diagnostics"]
|
|
108
|
-
if str(diagnostic.get("code") or "").startswith("task_context_")
|
|
109
|
-
]
|
|
110
|
-
emit_context(
|
|
111
|
-
"PostToolUse",
|
|
112
|
-
"Ultra task context diagnostic:\n"
|
|
113
|
-
+ render_task_diagnostics(context_diagnostics),
|
|
114
|
-
)
|
|
115
|
-
return 0
|
|
116
|
-
task_id = normalized_task_id(task.get("id"))
|
|
117
|
-
if task_id is None:
|
|
118
|
-
return 0
|
|
119
|
-
tool_input = payload.get("tool_input")
|
|
120
|
-
tool_input = tool_input if isinstance(tool_input, dict) else {}
|
|
121
|
-
changed = str(tool_input.get("file_path") or tool_input.get("path") or "")
|
|
122
|
-
relative = ""
|
|
123
|
-
if changed:
|
|
124
|
-
try:
|
|
125
|
-
relative = str(Path(changed).resolve().relative_to(root))
|
|
126
|
-
except (OSError, RuntimeError, ValueError):
|
|
127
|
-
relative = ""
|
|
128
|
-
|
|
129
|
-
progress_relative = Path(".ultra") / "progress" / f"{task_id}.json"
|
|
130
|
-
progress, read_failure = read_derived_json(
|
|
131
|
-
root,
|
|
132
|
-
progress_relative,
|
|
133
|
-
max_bytes=PROGRESS_SNAPSHOT_MAX_BYTES,
|
|
134
|
-
code_prefix="progress_snapshot",
|
|
135
|
-
label="Task progress observation",
|
|
136
|
-
)
|
|
137
|
-
diagnostics = []
|
|
138
|
-
if read_failure is not None:
|
|
139
|
-
code = read_failure.get("code", "")
|
|
140
|
-
if code.endswith("_missing"):
|
|
141
|
-
progress = {}
|
|
142
|
-
elif code.endswith(("_invalid_utf8", "_invalid_json", "_invalid_root")):
|
|
143
|
-
diagnostics.append(read_failure)
|
|
144
|
-
progress = {}
|
|
145
|
-
else:
|
|
146
|
-
emit_context(
|
|
147
|
-
"PostToolUse",
|
|
148
|
-
"Ultra progress diagnostic:\n"
|
|
149
|
-
+ render_task_diagnostics([read_failure]),
|
|
150
|
-
)
|
|
151
|
-
return 0
|
|
152
|
-
if progress is None:
|
|
153
|
-
progress = {}
|
|
154
|
-
if not isinstance(progress, dict):
|
|
155
|
-
progress = {}
|
|
156
|
-
existing_evidence = progress.get("evidence")
|
|
157
|
-
existing_evidence = existing_evidence if isinstance(existing_evidence, dict) else {}
|
|
158
|
-
progress["task_id"] = task_id
|
|
159
|
-
progress["evidence"] = {
|
|
160
|
-
name: existing_evidence.get(name, "unknown")
|
|
161
|
-
if isinstance(existing_evidence.get(name, "unknown"), str)
|
|
162
|
-
else "unknown"
|
|
163
|
-
for name in DIMENSIONS
|
|
164
|
-
}
|
|
165
|
-
touched_files = progress.get("touched_files")
|
|
166
|
-
progress["touched_files"] = list(dict.fromkeys(
|
|
167
|
-
item for item in touched_files if isinstance(item, str) and item
|
|
168
|
-
)) if isinstance(touched_files, list) else []
|
|
169
|
-
if relative and relative not in progress["touched_files"]:
|
|
170
|
-
progress["touched_files"].append(relative)
|
|
171
|
-
if re.search(r"(?:^|/)(?:test|tests|__tests__)/|(?:\.test|\.spec)\.", relative, re.IGNORECASE):
|
|
172
|
-
progress["evidence"]["tests_written"] = "observed"
|
|
173
|
-
trace_value, trace_failure = trace_observation(root, task)
|
|
174
|
-
progress["evidence"]["spec_trace"] = trace_value
|
|
175
|
-
if trace_failure is not None:
|
|
176
|
-
diagnostics.append(trace_failure)
|
|
177
|
-
progress["updated_at"] = datetime.now(timezone.utc).isoformat()
|
|
178
|
-
write_failure = write_json_atomic(
|
|
179
|
-
root,
|
|
180
|
-
progress_relative,
|
|
181
|
-
progress,
|
|
182
|
-
max_bytes=PROGRESS_SNAPSHOT_MAX_BYTES,
|
|
183
|
-
code_prefix="progress_write",
|
|
184
|
-
label="Task progress observation",
|
|
185
|
-
)
|
|
186
|
-
if write_failure is not None:
|
|
187
|
-
diagnostics.append(write_failure)
|
|
188
|
-
emit_context(
|
|
189
|
-
"PostToolUse",
|
|
190
|
-
"Ultra progress diagnostic:\n"
|
|
191
|
-
+ render_task_diagnostics(diagnostics),
|
|
192
|
-
)
|
|
193
|
-
return 0
|
|
194
|
-
|
|
195
|
-
non_observed = [
|
|
196
|
-
name
|
|
197
|
-
for name, value in progress["evidence"].items()
|
|
198
|
-
if value != "observed"
|
|
199
|
-
]
|
|
200
|
-
parts = []
|
|
201
|
-
if diagnostics:
|
|
202
|
-
parts.append("Ultra progress diagnostic:\n" + render_task_diagnostics(diagnostics))
|
|
203
|
-
parts.append(
|
|
204
|
-
f"Ultra evidence sensor updated task {task_id}. Still non-observed: "
|
|
205
|
-
f"{', '.join(non_observed) or 'none'}."
|
|
206
|
-
)
|
|
207
|
-
emit_context(
|
|
208
|
-
"PostToolUse",
|
|
209
|
-
"\n\n".join(parts),
|
|
210
|
-
)
|
|
211
|
-
return 0
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
if __name__ == "__main__":
|
|
215
|
-
raise SystemExit(main())
|