You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+10Lines changed: 10 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,6 +17,8 @@ This changelog is maintained manually (not auto-generated).
17
17
### Added
18
18
19
19
- Minimal KB bootstrap in `runtime/kb.py`, creating `project.md`, `wiki/overview.md`, `user/preferences.md`, and `history/index.md` on first runtime execution.
20
+
- New bundle manifest contract in `runtime/manifest.py`, written to `.sopify-runtime/manifest.json` during bundle sync.
21
+
- New runtime handoff contract in `runtime/handoff.py`, written to `.sopify-skills/state/current_handoff.json` for non-terminal routes.
20
22
- New sub-skill `model-compare` (CN/EN) for configuration-driven multi-model parallel comparison with manual user selection.
21
23
- New compare trigger contract:
22
24
- Command: `~compare <question>`
@@ -25,16 +27,24 @@ This changelog is maintained manually (not auto-generated).
25
27
- New GitHub Actions workflow `.github/workflows/ci.yml` to gate PR/Push with sync and version checks.
- Runtime bundle sync script `scripts/sync-runtime-assets.sh` for vendoring `.sopify-runtime/` into another repository.
30
+
- One-command installer entry `scripts/install-sopify.sh` with a Python installer core and host adapters for `codex:zh-CN`, `codex:en-US`, `claude:zh-CN`, and `claude:en-US`.
- Runtime behavior test coverage in `tests/test_runtime.py`, including vendored bundle validation.
33
+
- Installer test coverage in `tests/test_installer.py` for Codex/Claude sample install paths.
30
34
31
35
### Changed
32
36
37
+
- Updated bundle sync, installer validation, and smoke checks to treat `.sopify-runtime/manifest.json` as a required control-plane artifact.
38
+
- Updated runtime output to render `Next:` from the structured handoff contract before falling back to route-only copy.
39
+
- Refactored runtime builtin-skill discovery to a catalog-first model via `runtime/builtin_catalog.py`, so vendored bundles no longer depend on scanning `Codex/Skills` or `Claude/Skills` trees.
40
+
- Extended `SkillMeta` and external skill manifests with forward-compatible catalog fields: `entry_kind`, `handoff_kind`, `contract_version`, and `supports_routes`.
41
+
- Added explicit builtin override policy in `runtime/skill_registry.py`: external skills can only replace builtin ids when `override_builtin: true` is declared.
33
42
- Updated CN/EN AGENTS routing and command references to include `~compare` and `model-compare`.
34
43
- Updated `README.md` and `README_EN.md` with:
35
44
- 7-skill install verification list
36
45
- Multi-model MVP quick start
37
46
- Environment-variable-only API key setup (`export ...`, including `~/.zshrc` persistence guidance)
- Added MVP fallback rule: when no usable multi-model config exists, `~compare` / `对比分析:` should not fail and must fallback to single-model with a clear notice.
Copy file name to clipboardExpand all lines: Claude/Skills/EN/CLAUDE.md
+10-2Lines changed: 10 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -133,7 +133,8 @@ Complex Task (full 3 phases):
133
133
|`~go exec`| Execute existing plan |
134
134
|`~compare`| Multi-model parallel comparison (includes session default model by default; falls back with reasons when usable model count is below 2) |
135
135
136
-
Note: when the current repository provides `scripts/sopify_runtime.py`, raw input should prefer that default repo-local runtime entry; when the runtime is vendored into another repository, prefer `.sopify-runtime/scripts/sopify_runtime.py`; use the matching `go_plan_runtime.py` helper only when you explicitly want the plan-only path.
136
+
Note: when the current repository provides `scripts/sopify_runtime.py`, raw input should prefer that default repo-local runtime entry; when the runtime is vendored into another repository, the host should read `.sopify-runtime/manifest.json` first to choose the entry, and only then fall back to `.sopify-runtime/scripts/sopify_runtime.py`; use the matching `go_plan_runtime.py` helper only when you explicitly want the plan-only path.
137
+
Note: after runtime execution, if `.sopify-skills/state/current_handoff.json` exists, the host should prioritize its `required_host_action`, `recommended_skill_ids`, and `artifacts` to decide the next step; the rendered `Next:` line is only a human-facing summary, not the sole machine contract.
| Full Development | >5 files or architectural changes | Full 3-phase workflow |
285
286
287
+
**Host Integration Contract:**
288
+
-`Claude/Skills` is prompt-layer guidance only; it is not the machine contract for the vendored runtime.
289
+
- For vendored runtime entry selection, treat `.sopify-runtime/manifest.json` as the source of truth.
290
+
- For post-run continuation, treat `.sopify-skills/state/current_handoff.json` as the source of truth and fall back to the rendered `Next:` text only when the handoff file is missing.
scripts/go_plan_runtime.py # helper for the plan-only slice
412
418
.sopify-runtime/scripts/go_plan_runtime.py # vendored helper for the plan-only slice
413
419
scripts/model_compare_runtime.py # runtime implementation for ~compare, not the default generic entry
420
+
.sopify-runtime/manifest.json # vendored bundle machine contract; hosts should read this first
421
+
.sopify-skills/state/current_handoff.json # structured handoff written by the runtime; hosts should read this first after execution
414
422
```
415
423
416
-
Note: the default entry is `scripts/sopify_runtime.py`; when vendored, the entry becomes `.sopify-runtime/scripts/sopify_runtime.py`; `go_plan_runtime.py` is only for plan-only; `~compare` still depends on a host-side dedicated bridge.
424
+
Note: the default entry is `scripts/sopify_runtime.py`; when vendored, prefer `.sopify-runtime/manifest.json` to select the entry and fall back to `.sopify-runtime/scripts/sopify_runtime.py`; `go_plan_runtime.py` is only for plan-only; after execution the host should read `.sopify-skills/state/current_handoff.json` before trusting `Next:`; `~compare` still depends on a host-side dedicated bridge.
Copy file name to clipboardExpand all lines: Codex/Skills/EN/AGENTS.md
+10-2Lines changed: 10 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -133,7 +133,8 @@ Complex Task (full 3 phases):
133
133
|`~go exec`| Execute existing plan |
134
134
|`~compare`| Multi-model parallel comparison (includes session default model by default; falls back with reasons when usable model count is below 2) |
135
135
136
-
Note: when the current repository provides `scripts/sopify_runtime.py`, raw input should prefer that default repo-local runtime entry; when the runtime is vendored into another repository, prefer `.sopify-runtime/scripts/sopify_runtime.py`; use the matching `go_plan_runtime.py` helper only when you explicitly want the plan-only path.
136
+
Note: when the current repository provides `scripts/sopify_runtime.py`, raw input should prefer that default repo-local runtime entry; when the runtime is vendored into another repository, the host should read `.sopify-runtime/manifest.json` first to choose the entry, and only then fall back to `.sopify-runtime/scripts/sopify_runtime.py`; use the matching `go_plan_runtime.py` helper only when you explicitly want the plan-only path.
137
+
Note: after runtime execution, if `.sopify-skills/state/current_handoff.json` exists, the host should prioritize its `required_host_action`, `recommended_skill_ids`, and `artifacts` to decide the next step; the rendered `Next:` line is only a human-facing summary, not the sole machine contract.
| Full Development | >5 files or architectural changes | Full 3-phase workflow |
285
286
287
+
**Host Integration Contract:**
288
+
-`Codex/Skills` is prompt-layer guidance only; it is not the machine contract for the vendored runtime.
289
+
- For vendored runtime entry selection, treat `.sopify-runtime/manifest.json` as the source of truth.
290
+
- For post-run continuation, treat `.sopify-skills/state/current_handoff.json` as the source of truth and fall back to the rendered `Next:` text only when the handoff file is missing.
scripts/go_plan_runtime.py # helper for the plan-only slice
412
418
.sopify-runtime/scripts/go_plan_runtime.py # vendored helper for the plan-only slice
413
419
scripts/model_compare_runtime.py # runtime implementation for ~compare, not the default generic entry
420
+
.sopify-runtime/manifest.json # vendored bundle machine contract; hosts should read this first
421
+
.sopify-skills/state/current_handoff.json # structured handoff written by the runtime; hosts should read this first after execution
414
422
```
415
423
416
-
Note: the default entry is `scripts/sopify_runtime.py`; when vendored, the entry becomes `.sopify-runtime/scripts/sopify_runtime.py`; `go_plan_runtime.py` is only for plan-only; `~compare` still depends on a host-side dedicated bridge.
424
+
Note: the default entry is `scripts/sopify_runtime.py`; when vendored, prefer `.sopify-runtime/manifest.json` to select the entry and fall back to `.sopify-runtime/scripts/sopify_runtime.py`; `go_plan_runtime.py` is only for plan-only; after execution the host should read `.sopify-skills/state/current_handoff.json` before trusting `Next:`; `~compare` still depends on a host-side dedicated bridge.
0 commit comments