@ngockhoale/ukit 2.7.1 → 2.7.2
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 +21 -0
- package/README.md +1 -3
- package/manifests/hostCapabilities.yaml +0 -10
- package/manifests/instructionRules.yaml +0 -16
- package/manifests/platform.full.yaml +2 -16
- package/package.json +3 -5
- package/scripts/perf/audit-perf.mjs +4 -4
- package/scripts/perf/perf-findings.json +420 -0
- package/src/cli/adapters.js +10 -13
- package/src/cli/commands/doctor.js +15 -7
- package/src/cli/index.js +2 -2
- package/src/core/opencodeSteer.js +37 -0
- package/src/core/projectImportant.js +14 -8
- package/src/core/runInstallPipeline.js +10 -0
- package/src/core/runtimeConfig.js +36 -4
- package/src/core/status.js +6 -4
- package/src/manifest/selectItems.js +0 -1
- package/templates/.claude/agents/bug-debugger.md +1 -1
- package/templates/.claude/agents/feature-implementer.md +1 -1
- package/templates/.claude/agents/ukit-small-task-maintainer.md +2 -2
- package/templates/.claude/commands/ukit/handoff-create.md +4 -4
- package/templates/.claude/commands/ukit/handoff-fullstack.md +4 -4
- package/templates/.claude/commands/ukit/handoff-implement.md +2 -2
- package/templates/.claude/commands/ukit/handoff-review.md +2 -2
- package/templates/.claude/skills/update-status/SKILL.md +1 -1
- package/templates/.claude/ukit/index/route-task.mjs +7 -2
- package/templates/.codex/README.md +1 -1
- package/templates/.codex/settings.json +0 -1
- package/templates/.omp/agents/bug-debugger.md +1 -1
- package/templates/.omp/agents/feature-implementer.md +1 -1
- package/templates/.omp/agents/ukit-small-task-maintainer.md +2 -2
- package/templates/AGENTS.md +4 -13
- package/templates/CLAUDE.md +1 -3
- package/templates/adapter-presets/claude/settings.local.json +0 -1
- package/templates/docs/AI_HANDOFF/INDEX.md +1 -1
- package/templates/docs/AI_HANDOFF/RULES.md +2 -2
- package/templates/docs/PROJECT.md +1 -1
- package/templates/docs/UKIT_INTERNALS.md +1 -1
- package/templates/instructions/core.md +1 -3
- package/templates/instructions/layout.yaml +2 -4
- package/templates/instructions/overlays/agents.md +3 -10
- package/templates/ukit/storage/config.json +0 -10
- package/templates/adapter-presets/opencode/opencode.template.json +0 -1
package/templates/CLAUDE.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
## Core Rule
|
|
5
5
|
<!-- RULES: CORE-01 CORE-02 -->
|
|
6
6
|
- Human-facing UKit workflow collapses to one remembered command: `ukit install`.
|
|
7
|
-
- After install, default to natural-language work inside **Claude Code / Codex /
|
|
7
|
+
- After install, default to natural-language work inside **Claude Code / Codex / omp**.
|
|
8
8
|
- **Quality first, then speed, then token discipline.**
|
|
9
9
|
- **Never stop after read-only steps** — implement/apply/fix requests continue to Edit/Write + verification in the same turn.
|
|
10
10
|
|
|
@@ -142,8 +142,6 @@ CHỈ kích hoạt khi task đi qua `docs/AI_HANDOFF/` (user nói "execute task
|
|
|
142
142
|
|
|
143
143
|
## Skills
|
|
144
144
|
- Canonical skills live in `.claude/skills/`; adapter mirrors may exist (`.codex/skills/` → symlink). **omp** reads `.claude/skills/` via its `claude` discovery provider.
|
|
145
|
-
- **OpenCode**: reads `AGENTS.md` at session start only — it does NOT auto-load skills; the model must explicitly read the triggered SKILL.md.
|
|
146
|
-
- `ukit-*` commands in `opencode.json` are internal helper entrypoints — never ask end users to run them.
|
|
147
145
|
|
|
148
146
|
## Project Snapshot
|
|
149
147
|
- Project: {{project.name}} | Root: {{project.root}}
|
|
@@ -31,7 +31,6 @@
|
|
|
31
31
|
"WebFetch(domain:www.steveruiz.me)",
|
|
32
32
|
"WebFetch(domain:desktopcommander.com)",
|
|
33
33
|
"WebFetch(domain:gist.github.com)",
|
|
34
|
-
"WebFetch(domain:opencodedocs.com)",
|
|
35
34
|
"WebFetch(domain:zenn.dev)",
|
|
36
35
|
"WebFetch(domain:github.com)",
|
|
37
36
|
"WebFetch(domain:gist.githubusercontent.com)",
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Status values (xem RULES.md §Status state machine):
|
|
5
5
|
ready | in_progress | pending_review | changes_requested | critical_block | approved | approved_minor | blocked | done
|
|
6
6
|
|
|
7
|
-
Owner = tool đang giữ task: claude-code | kilo-code | codex |
|
|
7
|
+
Owner = tool đang giữ task: claude-code | kilo-code | codex | -
|
|
8
8
|
-->
|
|
9
9
|
|
|
10
10
|
| ID | Title | Priority | Size | Status | Owner | Reviewer | File |
|
|
@@ -92,12 +92,12 @@ Next: <bước kế tiếp chính xác>
|
|
|
92
92
|
|
|
93
93
|
## Handoff Flow (tool-agnostic, file-based state machine)
|
|
94
94
|
|
|
95
|
-
UKit handoff hoạt động qua **file state**. Anh tự chọn tool nào cho từng phase — Claude Code / Kilo Code / Codex /
|
|
95
|
+
UKit handoff hoạt động qua **file state**. Anh tự chọn tool nào cho từng phase — Claude Code / Kilo Code / Codex / tool mới sau này — đều được. UKit chỉ care về **role của model**, không care tool.
|
|
96
96
|
|
|
97
97
|
3 phase × 3 role model:
|
|
98
98
|
|
|
99
99
|
- **Plan** — model mạnh nhất anh có (reasoning model). Có thể chạy ở bất kỳ tool nào hỗ trợ planning tốt.
|
|
100
|
-
- **Execute** — model rẻ-mà-vẫn-thông-minh (code model). Có thể là subagent code của Kilo, hay
|
|
100
|
+
- **Execute** — model rẻ-mà-vẫn-thông-minh (code model). Có thể là subagent code của Kilo, hay feature-implementer của Claude Code.
|
|
101
101
|
- **Review** — **MODEL KHÁC executor** (reasoning model thường tốt hơn). Có thể là tool khác, hoặc cùng tool nhưng subagent khác model (ví dụ Kilo có subagent code và subagent review riêng).
|
|
102
102
|
|
|
103
103
|
Hai mô hình triển khai đều hợp lệ:
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
## Delivery Profile
|
|
38
38
|
|
|
39
39
|
- Primary workflow: natural-language AI tooling installed by UKit
|
|
40
|
-
- Shared adapters: Claude Code, OpenAI Codex,
|
|
40
|
+
- Shared adapters: Claude Code, OpenAI Codex, omp (Oh My Pi)
|
|
41
41
|
- Change policy: smallest correct change with clear verification
|
|
42
42
|
|
|
43
43
|
## Session Start Routine
|
|
@@ -8,7 +8,7 @@ natural language. None of it adds commands or user-facing surface.
|
|
|
8
8
|
## Long-Run Continuity — detail
|
|
9
9
|
|
|
10
10
|
The root contract carries the LAND/DEFER/DELEGATE summary. This section mirrors what UKit
|
|
11
|
-
hooks inject at runtime on Claude Code and omp; on harnesses without hooks (Codex
|
|
11
|
+
hooks inject at runtime on Claude Code and omp; on harnesses without hooks (Codex)
|
|
12
12
|
the root contract is the only carrier — keep both in sync with
|
|
13
13
|
`.claude/hooks/context-window-guard.sh`.
|
|
14
14
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
## Core Rule
|
|
2
2
|
<!-- RULES: CORE-01 CORE-02 -->
|
|
3
3
|
- Human-facing UKit workflow collapses to one remembered command: `ukit install`.
|
|
4
|
-
- After install, default to natural-language work inside **Claude Code / Codex /
|
|
4
|
+
- After install, default to natural-language work inside **Claude Code / Codex / omp**.
|
|
5
5
|
- **Quality first, then speed, then token discipline.**
|
|
6
6
|
- **Never stop after read-only steps** — implement/apply/fix requests continue to Edit/Write + verification in the same turn.
|
|
7
7
|
|
|
@@ -139,8 +139,6 @@ CHỈ kích hoạt khi task đi qua `docs/AI_HANDOFF/` (user nói "execute task
|
|
|
139
139
|
|
|
140
140
|
## Skills
|
|
141
141
|
- Canonical skills live in `.claude/skills/`; adapter mirrors may exist (`.codex/skills/` → symlink). **omp** reads `.claude/skills/` via its `claude` discovery provider.
|
|
142
|
-
- **OpenCode**: reads `AGENTS.md` at session start only — it does NOT auto-load skills; the model must explicitly read the triggered SKILL.md.
|
|
143
|
-
- `ukit-*` commands in `opencode.json` are internal helper entrypoints — never ask end users to run them.
|
|
144
142
|
|
|
145
143
|
## Project Snapshot
|
|
146
144
|
- Project: {{project.name}} | Root: {{project.root}}
|
|
@@ -62,8 +62,7 @@ outputs:
|
|
|
62
62
|
- { from: core, heading: Adaptive Autonomy }
|
|
63
63
|
- { from: core, heading: Unattended Completion Loop }
|
|
64
64
|
- { from: core, heading: 3-Tier Model Routing }
|
|
65
|
-
- { from: 'overlay:agents', heading:
|
|
66
|
-
- { from: 'overlay:agents', heading: Project Owner Instructions — Codex and OpenCode }
|
|
65
|
+
- { from: 'overlay:agents', heading: Project Owner Instructions — Codex }
|
|
67
66
|
- { from: core, heading: Skills }
|
|
68
67
|
- { from: core, heading: Project Snapshot }
|
|
69
68
|
- { from: core, heading: Working Rules }
|
|
@@ -137,8 +136,7 @@ outputs:
|
|
|
137
136
|
- { from: core, heading: Adaptive Autonomy }
|
|
138
137
|
- { from: core, heading: Unattended Completion Loop }
|
|
139
138
|
- { from: core, heading: 3-Tier Model Routing }
|
|
140
|
-
- { from: 'overlay:agents', heading:
|
|
141
|
-
- { from: 'overlay:agents', heading: Project Owner Instructions — Codex and OpenCode }
|
|
139
|
+
- { from: 'overlay:agents', heading: Project Owner Instructions — Codex }
|
|
142
140
|
- { from: core, heading: Skills }
|
|
143
141
|
- { from: core, heading: Project Snapshot }
|
|
144
142
|
- { from: core, heading: Working Rules }
|
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
##
|
|
1
|
+
## Project Owner Instructions — Codex
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
At the start of every OpenCode session, before working on the first task:
|
|
5
|
-
1. Reuse matching route hints from `.claude/ukit/skill-router-state.json`; scan `.claude/skills/` (listing only) and read a SKILL.md only when a task triggers it.
|
|
6
|
-
2. For every non-trivial task, run `/ukit-route <task summary>` for skill + context hints **before** writing code; if it names a skill, read that SKILL.md — do not skip. When `router.enabled: true` in `.ukit/storage/config.json`, prefer router output over guessing; treat it as internal continuation — continue to edit/verify, don't stop.
|
|
7
|
-
|
|
8
|
-
## Project Owner Instructions — Codex and OpenCode
|
|
9
|
-
|
|
10
|
-
When running in Codex or OpenCode, read and follow the root
|
|
3
|
+
When running in Codex, read and follow the root
|
|
11
4
|
`PROJECT_IMPORTANT.md` before doing project work. It is the canonical
|
|
12
5
|
project-owner instruction source. Do not copy its contents into this file.
|
|
13
6
|
If it is missing or unreadable, state that limitation and continue with the
|
|
14
7
|
remaining project instructions.
|
|
15
|
-
<!--
|
|
8
|
+
<!-- RULE: OWN-01 -->
|
|
@@ -53,11 +53,6 @@
|
|
|
53
53
|
"mode": "precompact-reinject",
|
|
54
54
|
"preserveExistingHooks": true
|
|
55
55
|
},
|
|
56
|
-
"opencode": {
|
|
57
|
-
"autoCompact": true,
|
|
58
|
-
"mode": "native-auto-prune",
|
|
59
|
-
"preserveExistingCompaction": true
|
|
60
|
-
},
|
|
61
56
|
"omp": {
|
|
62
57
|
"autoCompact": true,
|
|
63
58
|
"mode": "precompact-reinject",
|
|
@@ -510,11 +505,6 @@
|
|
|
510
505
|
"mode": "precompact-reinject nghĩa là Claude được bơm context quan trọng trước/sau compact.",
|
|
511
506
|
"preserveExistingHooks": "Nên giữ true để không gỡ PreCompact/reinject của Claude."
|
|
512
507
|
},
|
|
513
|
-
"opencode": {
|
|
514
|
-
"autoCompact": "Giữ compact lane của OpenCode bật.",
|
|
515
|
-
"mode": "native-auto-prune nghĩa là OpenCode dùng compaction.auto/prune native.",
|
|
516
|
-
"preserveExistingCompaction": "Nên giữ true để không gỡ compact native của OpenCode."
|
|
517
|
-
},
|
|
518
508
|
"omp": {
|
|
519
509
|
"autoCompact": "Giữ compact lane của omp (Oh My Pi) bật.",
|
|
520
510
|
"mode": "precompact-reinject nghĩa là UKit dùng hook session.compacting/session_before_compact của omp để bơm lại context quan trọng trước khi compact.",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"$schema":"https://opencode.ai/config.json","default_agent":"build","share":"disabled","compaction":{"auto":true,"prune":true,"reserved":10000},"watcher":{"ignore":[".git/**","node_modules/**",".cache/**",".ukit/**",".claude/ukit/permission-usage.json",".claude/ukit/permission-audit.log"]},"permission":{"doom_loop":"deny"},"command":{"ukit-route":{"description":"Internal shared UKit route. Run at the start of every non-trivial task to get skill and context hints before writing code.","agent":"build","template":"Run `node .claude/ukit/index/route-task.mjs \"<task>\" --adapter opencode`; reuse `.claude/ukit/skill-router-state.json`."},"ukit-context":{"description":"Internal UKit context.","agent":"build","template":"Run `node .claude/ukit/index/resolve-context.mjs \"<intent>\" [--target <file>]`."},"ukit-verify":{"description":"Internal UKit verify lane.","agent":"build","template":"Run `node .claude/ukit/index/verify-context.mjs \"<intent>\" [--target <file>]`."},"ukit-triage":{"description":"Internal UKit triage.","agent":"build","template":"Run `node .claude/ukit/index/triage.mjs \"<error>\"`."},"ukit-query":{"description":"Internal UKit query.","agent":"build","template":"Run `node .claude/ukit/index/query-index.mjs \"<error|symbol|path>\"`."},"ukit-index":{"description":"Internal UKit index.","agent":"build","template":"Run `node .claude/ukit/index/refresh-index.mjs` (fallback: `node .claude/ukit/index/build-index.mjs`)."},"ukit-handoff-status":{"description":"Handoff dashboard — show current cycle status (read-only).","agent":"build","template":"Read `docs/AI_HANDOFF/INDEX.md`, `docs/AI_HANDOFF/ACTIVE.md`, and `docs/AI_HANDOFF/PLAN.md`. Report: active cycle name, task table with status, any blockers. No writes."},"ukit-handoff-create":{"description":"Create a new handoff cycle — Phase 1+2: write PLAN.md + TASK-xxx.md files.","agent":"build","template":"Read `.claude/commands/ukit/create-handoff.md` for full instructions, then execute. Description: <what to build>"},"ukit-handoff-implement":{"description":"Execute handoff tasks — Phase 3: implement the next Ready task.","agent":"build","template":"Read `.claude/commands/ukit/implement-handoff.md` for full instructions, then execute. Task ID (optional): <TASK-xxx>"},"ukit-handoff-review":{"description":"Review handoff results — Phase 4: verify implementation and give verdict.","agent":"build","template":"Read `.claude/commands/ukit/review-handoff.md` for full instructions, then execute. Task ID (optional): <TASK-xxx>"},"ukit-handoff-clear":{"description":"Archive and reset the current handoff cycle.","agent":"build","template":"Read `.claude/commands/ukit/clear-handoff.md` for full instructions, then execute."}},"agent":{"build":{"description":"UKit build agent. Follow AGENTS.md. For every non-trivial task: run /ukit-route first, use index-first loop, activate matching skill, never claim done after read-only steps. Keep internal ukit-* helpers hidden; users only need ukit install.","permission":{"edit":"allow","task":"allow","skill":"allow","bash":{"*":"ask","pwd":"allow","ls":"allow","ls *":"allow","find *":"allow","rg *":"allow","grep *":"allow","cat *":"allow","sed *":"allow","head *":"allow","tail *":"allow","wc *":"allow","echo *":"allow","printf *":"allow","awk *":"allow","tr *":"allow","cut *":"allow","sort *":"allow","uniq *":"allow","diff *":"allow","jq *":"allow","stat *":"allow","file *":"allow","which *":"allow","date *":"allow","basename *":"allow","dirname *":"allow","realpath *":"allow","xargs *":"allow","mkdir *":"allow","touch *":"allow","cp *":"allow","vitest *":"allow","jest *":"allow","git status":"allow","git status *":"allow","git diff":"allow","git diff *":"allow","git log":"allow","git log *":"allow","git show *":"allow","git grep *":"allow","git rev-parse *":"allow","git branch *":"allow","git stash list":"allow","git ls-files *":"allow","git tag *":"allow","git add *":"allow","git checkout *":"allow","git switch *":"allow","git restore *":"allow","git mv *":"allow","mv *":"allow","node *":"allow","node .claude/ukit/index/*":"allow","node .claude/ukit/runtime/*":"allow","npx *":"allow","npm test":"allow","npm test *":"allow","{{runtime.packageManager}} test":"allow","{{runtime.packageManager}} test *":"allow","{{runtime.packageManager}} lint":"allow","{{runtime.packageManager}} lint *":"allow","{{runtime.packageManager}} typecheck":"allow","{{runtime.packageManager}} typecheck *":"allow","{{runtime.packageManager}} build":"allow","{{runtime.packageManager}} build *":"allow","npm run test":"allow","npm run test *":"allow","npm run lint":"allow","npm run lint *":"allow","npm run typecheck":"allow","npm run typecheck *":"allow","npm run build":"allow","npm run build *":"allow","pnpm test":"allow","pnpm test *":"allow","pnpm lint":"allow","pnpm lint *":"allow","pnpm typecheck":"allow","pnpm typecheck *":"allow","pnpm build":"allow","pnpm build *":"allow","pnpm run test":"allow","pnpm run test *":"allow","pnpm run lint":"allow","pnpm run lint *":"allow","pnpm run typecheck":"allow","pnpm run typecheck *":"allow","pnpm run build":"allow","pnpm run build *":"allow","bun test":"allow","bun test *":"allow","bun run test":"allow","bun run test *":"allow","bun run lint":"allow","bun run lint *":"allow","bun run typecheck":"allow","bun run typecheck *":"allow","bun run build":"allow","bun run build *":"allow","git commit":"allow","git commit *":"allow","git push":"allow","git push *":"allow","git clean":"deny","git clean *":"deny","git reset":"deny","git reset *":"deny","rm *":"deny"}}},"plan":{"permission":{"edit":"ask","bash":"ask"}}}}
|