@galaxy-stack/ai-coder-core 0.3.0-alpha.8 → 0.3.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.d/2026-09-19-advisory-guard-policy.md +1 -1
- package/CHANGELOG.d/2026-09-25-tail-anchored-bounding.md +5 -0
- package/CHANGELOG.d/2026-09-26-binary-review-pipe-guidance-finalization-test.md +14 -0
- package/CHANGELOG.d/2026-09-26-cache-capability-and-mcp-reconnect.md +16 -0
- package/CHANGELOG.d/2026-09-26-cache-hit-harness.md +13 -0
- package/CHANGELOG.d/2026-09-26-cache-hit-rate-and-inhistory-option.md +12 -0
- package/CHANGELOG.d/2026-09-26-cumulative-cache-hit.md +13 -0
- package/CHANGELOG.d/2026-09-26-default-model-deepseek.md +8 -0
- package/CHANGELOG.d/2026-09-26-finalization-prefix-and-verified-inhistory.md +12 -0
- package/CHANGELOG.d/2026-09-26-generated-state-and-churn-guard.md +16 -0
- package/CHANGELOG.d/2026-09-26-mcp-reconnect-fixture.md +11 -0
- package/CHANGELOG.d/2026-09-26-memory-hybrid-semantic-consolidation.md +16 -0
- package/CHANGELOG.d/2026-09-26-memory-recall-benchmark.md +12 -0
- package/CHANGELOG.d/2026-09-26-ollama-cache-usage.md +14 -0
- package/CHANGELOG.d/2026-09-26-ollama-embeddings-provider.md +13 -0
- package/CHANGELOG.d/2026-09-26-rerecord-live-fixture.md +6 -0
- package/CHANGELOG.d/2026-09-26-skill-index-signing.md +11 -0
- package/CHANGELOG.d/2026-09-26-skill-version-and-marketplace.md +14 -0
- package/CHANGELOG.d/2026-09-27-workspace-derived-build-output.md +16 -0
- package/CHANGELOG.d/2026-09-28-advisory-lenh-check-va-server.md +26 -0
- package/CHANGELOG.d/2026-09-28-clamp-tham-so-vuot-cap.md +20 -0
- package/CHANGELOG.d/2026-09-28-digest-context-item.md +16 -0
- package/CHANGELOG.d/2026-09-28-gate-bo-qua-path-da-xoa.md +20 -0
- package/CHANGELOG.d/2026-09-28-ngan-sach-luot-finalization.md +20 -0
- package/CHANGELOG.d/2026-09-28-scope-cua-project-validate.md +22 -0
- package/CHANGELOG.d/2026-09-28-staleness-theo-pham-vi.md +22 -0
- package/CHANGELOG.d/2026-09-28-thong-bao-guard-dependency.md +24 -0
- package/CHANGELOG.d/2026-09-28-thu-tu-mandatory-state-cache.md +20 -0
- package/CHANGELOG.md +71 -1
- package/README.md +10 -10
- package/dist/adapters/node/config/manual-provider-config.d.ts +3 -0
- package/dist/adapters/node/config/manual-provider-config.d.ts.map +1 -1
- package/dist/adapters/node/config/manual-provider-config.js +4 -0
- package/dist/adapters/node/config/manual-provider-config.js.map +1 -1
- package/dist/adapters/node/host/node-workspace-evidence-verifier.d.ts.map +1 -1
- package/dist/adapters/node/host/node-workspace-evidence-verifier.js +8 -13
- package/dist/adapters/node/host/node-workspace-evidence-verifier.js.map +1 -1
- package/dist/adapters/node/host/node-workspace-port.d.ts +1 -1
- package/dist/adapters/node/host/node-workspace-port.d.ts.map +1 -1
- package/dist/adapters/node/host/node-workspace-port.js +47 -4
- package/dist/adapters/node/host/node-workspace-port.js.map +1 -1
- package/dist/adapters/node/host/node-workspace-snapshot.d.ts.map +1 -1
- package/dist/adapters/node/host/node-workspace-snapshot.js +60 -4
- package/dist/adapters/node/host/node-workspace-snapshot.js.map +1 -1
- package/dist/adapters/node/host/project-tools.d.ts.map +1 -1
- package/dist/adapters/node/host/project-tools.js +8 -1
- package/dist/adapters/node/host/project-tools.js.map +1 -1
- package/dist/adapters/node/host/workspace-generated-state.d.ts +8 -0
- package/dist/adapters/node/host/workspace-generated-state.d.ts.map +1 -0
- package/dist/adapters/node/host/workspace-generated-state.js +8 -0
- package/dist/adapters/node/host/workspace-generated-state.js.map +1 -0
- package/dist/adapters/node/mcp/mcp-client.d.ts +7 -2
- package/dist/adapters/node/mcp/mcp-client.d.ts.map +1 -1
- package/dist/adapters/node/mcp/mcp-client.js +41 -6
- package/dist/adapters/node/mcp/mcp-client.js.map +1 -1
- package/dist/adapters/node/memory/ollama-embeddings.d.ts +26 -0
- package/dist/adapters/node/memory/ollama-embeddings.d.ts.map +1 -0
- package/dist/adapters/node/memory/ollama-embeddings.js +98 -0
- package/dist/adapters/node/memory/ollama-embeddings.js.map +1 -0
- package/dist/adapters/node/memory/sqlite-memory.d.ts +16 -3
- package/dist/adapters/node/memory/sqlite-memory.d.ts.map +1 -1
- package/dist/adapters/node/memory/sqlite-memory.js +138 -16
- package/dist/adapters/node/memory/sqlite-memory.js.map +1 -1
- package/dist/adapters/node/provider/ollama-chat-stream.d.ts.map +1 -1
- package/dist/adapters/node/provider/ollama-chat-stream.js +4 -0
- package/dist/adapters/node/provider/ollama-chat-stream.js.map +1 -1
- package/dist/adapters/node/provider/ollama-coding-model.d.ts +16 -2
- package/dist/adapters/node/provider/ollama-coding-model.d.ts.map +1 -1
- package/dist/adapters/node/provider/ollama-coding-model.js +18 -0
- package/dist/adapters/node/provider/ollama-coding-model.js.map +1 -1
- package/dist/adapters/node/skills/directory-skills.d.ts.map +1 -1
- package/dist/adapters/node/skills/directory-skills.js +16 -1
- package/dist/adapters/node/skills/directory-skills.js.map +1 -1
- package/dist/adapters/node/skills/skill-marketplace.d.ts +71 -0
- package/dist/adapters/node/skills/skill-marketplace.d.ts.map +1 -0
- package/dist/adapters/node/skills/skill-marketplace.js +259 -0
- package/dist/adapters/node/skills/skill-marketplace.js.map +1 -0
- package/dist/adapters/node/tools/tool-executor.d.ts.map +1 -1
- package/dist/adapters/node/tools/tool-executor.js +36 -15
- package/dist/adapters/node/tools/tool-executor.js.map +1 -1
- package/dist/adapters/node/tools/workspace-review.d.ts.map +1 -1
- package/dist/adapters/node/tools/workspace-review.js +51 -12
- package/dist/adapters/node/tools/workspace-review.js.map +1 -1
- package/dist/agent/index.d.ts +17 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/context/checkpoint.js +1 -1
- package/dist/context/checkpoint.js.map +1 -1
- package/dist/context/context-manager.d.ts +27 -1
- package/dist/context/context-manager.d.ts.map +1 -1
- package/dist/context/context-manager.js +54 -7
- package/dist/context/context-manager.js.map +1 -1
- package/dist/context/context-profile.d.ts.map +1 -1
- package/dist/context/context-profile.js +6 -2
- package/dist/context/context-profile.js.map +1 -1
- package/dist/context/token-ledger.d.ts +9 -0
- package/dist/context/token-ledger.d.ts.map +1 -1
- package/dist/context/token-ledger.js +8 -0
- package/dist/context/token-ledger.js.map +1 -1
- package/dist/context/tool-output.d.ts.map +1 -1
- package/dist/context/tool-output.js +23 -4
- package/dist/context/tool-output.js.map +1 -1
- package/dist/ports/capability-port.d.ts +8 -0
- package/dist/ports/capability-port.d.ts.map +1 -1
- package/dist/ports/workspace-port.d.ts +2 -1
- package/dist/ports/workspace-port.d.ts.map +1 -1
- package/dist/prompt/prompt-assembler.d.ts +1 -1
- package/dist/prompt/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt/prompt-assembler.js +12 -4
- package/dist/prompt/prompt-assembler.js.map +1 -1
- package/dist/runtime/completion-gate.d.ts +1 -0
- package/dist/runtime/completion-gate.d.ts.map +1 -1
- package/dist/runtime/completion-gate.js +54 -11
- package/dist/runtime/completion-gate.js.map +1 -1
- package/dist/runtime/run-controller.d.ts +6 -0
- package/dist/runtime/run-controller.d.ts.map +1 -1
- package/dist/runtime/run-controller.js +138 -13
- package/dist/runtime/run-controller.js.map +1 -1
- package/dist/runtime/runtime-error.d.ts +1 -1
- package/dist/runtime/runtime-error.d.ts.map +1 -1
- package/dist/runtime/runtime-error.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +10 -0
- package/dist/runtime/runtime-types.d.ts.map +1 -1
- package/dist/runtime/workspace-generated-path.d.ts +26 -0
- package/dist/runtime/workspace-generated-path.d.ts.map +1 -0
- package/dist/runtime/workspace-generated-path.js +61 -0
- package/dist/runtime/workspace-generated-path.js.map +1 -0
- package/dist/tools/command-shape.d.ts +4 -0
- package/dist/tools/command-shape.d.ts.map +1 -0
- package/dist/tools/command-shape.js +62 -0
- package/dist/tools/command-shape.js.map +1 -0
- package/dist/tools/json-schema.d.ts +13 -0
- package/dist/tools/json-schema.d.ts.map +1 -1
- package/dist/tools/json-schema.js +45 -0
- package/dist/tools/json-schema.js.map +1 -1
- package/dist/tools/settings-types.js +1 -1
- package/dist/tools/settings-types.js.map +1 -1
- package/dist/tools/tool-registry.js +2 -2
- package/dist/tools/tool-registry.js.map +1 -1
- package/dist/tools/validation-scope.d.ts +14 -0
- package/dist/tools/validation-scope.d.ts.map +1 -0
- package/dist/tools/validation-scope.js +16 -0
- package/dist/tools/validation-scope.js.map +1 -0
- package/docs/ARCHITECTURE.md +1 -1
- package/docs/CACHE_HIT.md +109 -0
- package/docs/GALAXY_AGENT_PLATFORM_PLAN.md +171 -348
- package/docs/GALAXY_AGENT_PLATFORM_TODO.md +13 -0
- package/docs/SKILL_MARKETPLACE.md +59 -0
- package/package.json +1 -1
|
@@ -1,353 +1,176 @@
|
|
|
1
|
-
# Galaxy Agent Platform —
|
|
1
|
+
# Galaxy Agent Platform — TODO và tiến độ
|
|
2
|
+
|
|
3
|
+
Ngày: 2026-09-23. Trạng thái: đang triển khai.
|
|
4
|
+
|
|
5
|
+
## Quy tắc theo dõi
|
|
6
|
+
|
|
7
|
+
`[x]` hoàn thành và có bằng chứng; `[ ]` chưa hoàn thành. Ghi rõ mock/live. Kế hoạch: [GALAXY_AGENT_PLATFORM_PLAN.md](GALAXY_AGENT_PLATFORM_PLAN.md).
|
|
8
|
+
|
|
9
|
+
## A. Kiến trúc và baseline
|
|
10
|
+
|
|
11
|
+
- [x] A01 Đọc core/CLI hiện tại, xác định lab và dependency adapters.
|
|
12
|
+
- [x] A02 Đối chiếu assistant-ui Ink, Gemini CLI, Codex TUI, OpenCode.
|
|
13
|
+
- [x] A03 Viết kế hoạch chi tiết, ranh giới và tiêu chí nghiệm thu.
|
|
14
|
+
- [x] A04 Ghi baseline tests và bảo toàn working tree trước khi di chuyển.
|
|
15
|
+
|
|
16
|
+
## B. Lab và adapter dùng chung
|
|
17
|
+
|
|
18
|
+
- [x] B01 Tách Node host/provider thành adapter subpaths, root core vẫn trung lập.
|
|
19
|
+
- [x] B02 Chuyển fixture/live runners, scenarios và tests vào core/testing.
|
|
20
|
+
- [x] B03 Lab có scripts/entrypoint độc lập; CLI không là dependency của core.
|
|
21
|
+
- [x] B04 Cập nhật runbook, default paths, source-baseline và migration map.
|
|
22
|
+
- [x] B05 Chạy regression suite, fixture và wire-mock sau di chuyển.
|
|
23
|
+
- [x] B06 Kiểm tra npm artifact không chứa testing/scenarios/recordings.
|
|
24
|
+
|
|
25
|
+
## C. MCP
|
|
26
|
+
|
|
27
|
+
- [x] C01 Contract tool source/executor và stable namespace.
|
|
28
|
+
- [x] C02 Adapter SDK stdio và Streamable HTTP; close/cancel/timeout.
|
|
29
|
+
- [x] C03 Discovery, schema validation, output/error bounds, permissions.
|
|
30
|
+
- [x] C04 Nối MCP tools vào agent runtime và CLI config.
|
|
31
|
+
- [x] C05 Test server local end-to-end.
|
|
32
|
+
- [x] C06 Resources/prompts adapter API và trust boundary.
|
|
33
|
+
- [x] C07 OAuth lifecycle: SDK discovery + dynamic client registration + PKCE + auto-refresh; `blackhole mcp login/logout`; token 0600 trong state dir. UI host-native (VS Code/desktop) dùng oauthProviderFactory khi rollout G06.
|
|
34
|
+
|
|
35
|
+
## D. Skills
|
|
36
|
+
|
|
37
|
+
- [x] D01 Metadata/content contracts, catalog và lazy activation.
|
|
38
|
+
- [x] D02 Loader SKILL.md, scope, collision, traversal/symlink protection.
|
|
39
|
+
- [x] D03 Nối catalog/load vào runtime và CLI.
|
|
40
|
+
- [x] D04 Tests metadata/path/size/hash bounds và runtime registration của skill tools.
|
|
41
|
+
- [ ] D05 Marketplace/install/update và UI quản lý đa host (giai đoạn mở rộng).
|
|
42
|
+
|
|
43
|
+
## E. Memory
|
|
44
|
+
|
|
45
|
+
- [x] E01 MemoryPort, scoped records, source/revision/supersession.
|
|
46
|
+
- [x] E02 Durable SQLite/FTS adapter và schema v1 initialization (migration Quasar tách ở E06).
|
|
47
|
+
- [x] E03 Query/remember/forget và bounded recall trong agent.
|
|
48
|
+
- [x] E04 Kiểm thử restart, scope isolation, supersede, concurrency và forget.
|
|
49
|
+
- [x] E05 CLI controls đọc/ghi/confirm/forget memory theo workspace; tự recall cho session.
|
|
50
|
+
- [x] E06 `blackhole memory import-quasar <db>`: backup nguồn vào state dir, import leaf active thành confirmed kèm provenance, idempotent khi chạy lại; đã chạy với memory.db thật (15 notes, backup giữ nguyên bản gốc).
|
|
51
|
+
- [ ] E07 Graphify/CBM backend evaluation và stale-code invalidation.
|
|
52
|
+
- [ ] E08 Background consolidation, embeddings và hybrid ranking có benchmark.
|
|
53
|
+
|
|
54
|
+
## F. CLI/TUI
|
|
55
|
+
|
|
56
|
+
- [x] F01 Application service ghép core và adapters; không dùng lab runner cho chat.
|
|
57
|
+
- [x] F02 CLI task input, JSON/text output, cancellation và error exit.
|
|
58
|
+
- [x] F03 Ink/assistant-ui bridge, composer, messages và streaming.
|
|
59
|
+
- [x] F04 Tool activity, approval, status, context/model và keyboard controls.
|
|
60
|
+
- [x] F05 Durable sessions và commands memory/skills.
|
|
61
|
+
- [x] F06 Tests render, input, stream, cancel, resize và PTY smoke.
|
|
62
|
+
- [ ] F07 Provider/model/thinking picker đầy đủ theo capability (giai đoạn mở rộng).
|
|
63
|
+
- [x] F08 Fullscreen alternate screen, header/input cố định, viewport cuộn và resize.
|
|
64
|
+
- [x] F09 Timeline có thứ tự cho thinking/message/tool; nhãn command/path và badge kết quả.
|
|
65
|
+
- [x] F10 Approval luôn nhìn thấy, timeout/cancel đóng prompt; input Unicode cuộn ngang.
|
|
66
|
+
- [x] F11 Ctrl+T thinking, Ctrl+O chi tiết tool, PageUp/PageDown và Ctrl+G.
|
|
67
|
+
- [x] F12 Scratch workspace không Git: baseline review adapter, validation và completion gate giữ nguyên.
|
|
68
|
+
- [x] F13 Regression tests + PTY live coding end-to-end theo lỗi người dùng báo.
|
|
69
|
+
- [ ] F14 Persist/replay timeline chi tiết theo session, schema version và retention.
|
|
70
|
+
- [x] F15 Mouse/trackpad scrolling, ↑/↓ và giữ vị trí khi stream; dọn mouse mode lúc thoát.
|
|
71
|
+
- [ ] F16 Điều hướng/mở chi tiết từng tool riêng biệt.
|
|
72
|
+
- [x] F17 Streaming từ HTTP đến UI trước EOF, incremental UTF-8/NDJSON, cancellation và regression tests.
|
|
73
|
+
|
|
74
|
+
## G. General agent profiles và bàn giao
|
|
2
75
|
|
|
3
|
-
|
|
76
|
+
- [x] G01 Coding compatibility và profile assistant/research.
|
|
77
|
+
- [x] G02 Typecheck/build/test core, lab và CLI.
|
|
78
|
+
- [x] G03 Ghi kết quả live smoke riêng với deterministic/wire mock.
|
|
79
|
+
- [x] G04 Cập nhật README, docs, TODO theo thực tế, kiểm tra package.
|
|
80
|
+
- [x] G05 Cập nhật graphify: 58.003 nodes, 81.722 edges, 3.717 communities; AST-only.
|
|
81
|
+
- [ ] G06 VS Code/Quasar consume API mới và conformance (giai đoạn rollout đa host).
|
|
82
|
+
|
|
83
|
+
## Nhật ký kiểm chứng
|
|
84
|
+
|
|
85
|
+
Các kết quả được phân biệt giữa kiểm thử tự động, giao thức mock và provider thật bên dưới.
|
|
86
|
+
|
|
87
|
+
### Kết quả ngày 2026-09-23
|
|
88
|
+
|
|
89
|
+
| Nhóm | Kết quả |
|
|
90
|
+
|---|---|
|
|
91
|
+
| Baseline trước di chuyển | Core 112/112 |
|
|
92
|
+
| Core sau triển khai | 119/119; typecheck/build/dist smoke qua |
|
|
93
|
+
| Private lab unit | 120/120 |
|
|
94
|
+
| Private lab integration | 88/88 |
|
|
95
|
+
| Private lab E2E | 44/44; gồm crash/resume/research protocol fixtures |
|
|
96
|
+
| CLI/TUI mới | 7/7; typecheck/build qua |
|
|
97
|
+
| Live lab | `01-write-and-validate` với Ollama `glm-5.3-flash:cloud`: passed=true, completed, failures=[] |
|
|
98
|
+
| TUI live | PTY gửi tiếng Việt → nhận “Xin chào.” từ provider thật, completed; Ctrl+C thoát |
|
|
99
|
+
| Migration data | 47 fixture/scenario/recording đối chiếu nguyên byte |
|
|
100
|
+
| Publish | Chưa push/publish; không đổi publisher/repo/npm identity |
|
|
101
|
+
|
|
102
|
+
Backup trước migration có 243 file và working-tree diff; vị trí local được ghi trong `.agent-migration-backup` cùng thư mục này. Lab regression logs ở `galaxy-ai-coder-core/testing/.galaxy/audit/`; core test journal ở repo core. Không commit log/DB cá nhân vào npm.
|
|
103
|
+
|
|
104
|
+
### Phần chưa đánh dấu xong có chủ ý
|
|
105
|
+
|
|
106
|
+
- D05/E07–E08/F07/G06 là các phase mở rộng có điều kiện nghiệm thu trong kế hoạch, không phải API đã hoạt động. C07 đã giao lifecycle + CLI login/logout; màn hình OAuth/resources riêng trong TUI chưa có.
|
|
107
|
+
- UI quản lý memory/resources/prompts trực tiếp trong TUI, production checkpoint resume, direct provider adapters, graph/embedding retrieval và migration Quasar chưa được tính là đã giao.
|
|
108
|
+
- Bản TUI hiện tại là giao diện vận hành cơ bản; chưa có slash command palette, sidebar session, multi-tab hay provider picker.
|
|
109
|
+
|
|
110
|
+
- PTY tự động: resize từ 80 xuống 40 cột, kiểm tra border 38 ký tự, Esc cập nhật trạng thái huỷ, Ctrl+C thoát mã 0. Transcript smoke lưu tại `/tmp/galaxy-tui-resize-smoke.txt`.
|
|
111
|
+
- Npm dry-run: core và CLI không chứa `testing/`, fixture, recording, SQLite DB hay output lab cũ; CLI sau clean build có 23 file artifact.
|
|
112
|
+
|
|
113
|
+
- Runtime extension smoke: `skill.list → skill.load → memory.remember → memory.search` chạy qua cùng agent loop, tất cả tool result thành công; candidate không xuất hiện trong recall mặc định.
|
|
114
|
+
- Root/agent import closure: kiểm tra 49 module compiled, không kéo Node/MCP/SQLite/React vào entrypoint thuần core.
|
|
115
|
+
- Graphify hoàn tất. Giới hạn công cụ: 12 file SQL không được parser vì thiếu `tree_sitter_sql`; 8 file ở phần khác workspace chỉ parse một phần do syntax. Không sửa các file ngoài phạm vi đợt này.
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
### Kết quả sửa TUI ngày 2026-09-24
|
|
119
|
+
|
|
120
|
+
- Core: `npm run verify` qua, 121/121 test (gồm timeout đóng approval và workspace review).
|
|
121
|
+
- CLI: `npm run check` qua, 12/12 test. Có kiểm thử trình tự thinking/tool, exit code khác 0, thao tác approval, input dài, resize và viewport 40×8.
|
|
122
|
+
- Private lab: 16/16 test `lab-tool-executor.test.ts` qua; Git review, approval và evidence cũ giữ hành vi.
|
|
123
|
+
- Live PTY với Ollama `glm-5.3-flash:cloud`, thinking bật: tạo 3 file dự án Node.js trong thư mục không Git; validation chạy 6/6 test pass; final report được lưu và run completed.
|
|
124
|
+
- PTY xác nhận thinking, approval ở đáy, scroll lịch sử, resize 110×30 → 48×16, Ctrl+T/Ctrl+O/Ctrl+G và Ctrl+C thoát mã 0; alternate screen được khôi phục.
|
|
125
|
+
- Evidence local: `/var/folders/1k/56z811sj31zfd6xkvg4r65vm0000gn/T/galaxy-tui-final-l79zgb85/` (`result.json`, `completed.txt`, `resized.txt`, `terminal.ansi`, final report trong state/runs). Không đưa transcript/provider output vào npm.
|
|
126
|
+
- Lần thử trước dừng vì bộ điều khiển QA hết thời gian chờ trước khi duyệt test; không tính đó là một lần live completed. Một lần QA khác bắt frame chưa vẽ xong đã được sửa cách chờ frame rồi chạy lại.
|
|
127
|
+
- Chưa push/publish; không thay repo, npm identity hay trusted-publisher bindings.
|
|
128
|
+
- Graphify AST update hoàn tất: 58.115 nodes, 81.898 edges, 3.706 communities. Cảnh báo parser SQL và syntax ở phần khác workspace vẫn như lần trước.
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
### Sửa streaming và scrolling theo phản hồi tiếp theo (2026-09-24)
|
|
132
|
+
|
|
133
|
+
- Root cause xác nhận bằng source: `readNdjson` chờ toàn bộ body trước khi phát events; viewport trước đó không bật mouse protocol. Đã thay bằng incremental reader + normalizer dùng chung live/replay và SGR mouse reporting.
|
|
134
|
+
- Core verify: 121/121 qua; provider transport: 13/13; normalizer: 7/7; recorded replay: 1/1. Private lab typecheck qua.
|
|
135
|
+
- CLI check: 13/13 qua. Test HTTP→core→Ink giữ response mở, xác nhận thinking/text xuất hiện trước EOF, mouse cuộn giữ dòng đang đọc trong khi delta mới đến và không làm hỏng draft.
|
|
136
|
+
- Live Ollama `glm-5.3-flash:cloud` với thinking off để đo text: partial frame đầu ở 7,48 giây; 60 frame khác nhau trước completed ở 14,04 giây. Wheel lên/xuống, draft, Ctrl+G và Ctrl+C đều qua; mouse mode được tắt và alternate screen được khôi phục.
|
|
137
|
+
- Evidence local: `/var/folders/1k/56z811sj31zfd6xkvg4r65vm0000gn/T/galaxy-stream-scroll-_sqb5j8d/`. Bài thử dài với thinking on được dừng trước completion, không tính là run completed; test streaming thinking trước EOF đã được kiểm chứng bằng HTTP giữ mở.
|
|
138
|
+
- Kiểm tra PTY riêng cho SIGTERM và SIGINT: cả hai đều tắt mouse reporting và khôi phục alternate screen khi thoát. CLI typecheck/build và diff whitespace check cuối cùng qua.
|
|
139
|
+
- Graphify AST update hoàn tất sau sửa: 58.134 nodes, 81.926 edges, 3.719 communities; cảnh báo parser ngoài phạm vi giữ nguyên.
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
### Composer và activity theo ảnh phản hồi (2026-09-24)
|
|
143
|
+
|
|
144
|
+
- [x] F18: Native caret cho IME, Delete/Fn+Delete, grapheme và packet nhiều thao tác nhập.
|
|
145
|
+
- [x] F19: Token căn phải footer; spinner + text động theo stage; ẩn activity thành công và dọn timer.
|
|
146
|
+
- [x] F20: Regression Unicode/delete/animation/footer; PTY caret ở màn hình thường, hẹp và rất thấp, cộng cleanup khi thoát.
|
|
147
|
+
- [ ] Kiểm chứng thủ công preedit với bộ gõ tiếng Việt đang bật trong iTerm2 của người dùng; automation hiện kiểm chứng terminal protocol và committed Unicode.
|
|
148
|
+
- CLI `npm run check`: typecheck, 15/15 test và build qua; `git diff --check` sạch. Dependency peer Ink 7.1.1 / React 19.3 / assistant-ui 0.0.44 hợp lệ.
|
|
149
|
+
- PTY 14 checkpoint qua: input trước space, DEL/Fn+Delete, caret trái, emoji/dấu kết hợp, nhiều delete trong packet, input dài, resize 110×30 → 40×16 → 40×8 → 110×30; Ctrl+C khôi phục terminal. Evidence: `/var/folders/1k/56z811sj31zfd6xkvg4r65vm0000gn/T/galaxy-input-cursor-m2sphvql/`.
|
|
150
|
+
- Chưa push/publish trong đợt sửa UI này.
|
|
151
|
+
|
|
152
|
+
### Bundle MCP/skills, E06 migration và C07 OAuth (2026-09-24)
|
|
153
|
+
|
|
154
|
+
- Tích hợp sẵn 2 MCP server (`orbit`, `nebula` qua npx, tắt bằng `--no-galaxy-mcp`) và 2 skill bundle (`bundled/orbit-framework`, `bundled/galaxy-ui`). Live verify: `blackhole mcp` liệt kê tool của cả hai server; `blackhole skills` thấy 2 skill và load nội dung.
|
|
155
|
+
- orbit-mcp 0.1.2 trên npm hỏng bin (mất shebang, shell chạy JS như bash). Sửa build (banner + `scripts/fix-bin-shebang.mjs`), publish 0.1.4 qua CI trusted publishing; npx -y hoạt động lại, galaxy-code kết nối OK.
|
|
156
|
+
- C07: sửa lỗi reconnect sau login (provider không được truyền lại), viết lại FileOAuthProvider khởi động callback server trong constructor với `ready` promise (hết race getter sync), thêm close() trả port; test E2E fixture OAuth cục bộ: 401 discovery, đăng ký client, PKCE, đổi token, reconnect kèm Bearer, token 0600, clear/logout.
|
|
157
|
+
- E06: `blackhole memory import-quasar` tạo backup nguồn, import leaf active thành confirmed với provenance `quasar:<source>`, key ổn định từ source_ref, bỏ trùng/superseded, chạy lại không nhân bản. Live với `~/.galaxy/desktop/memory/memory.db`: 15 notes imported, FTS recall được, chạy lại 0 imported/15 skipped; bản gốc chỉ đọc qua bản sao backup.
|
|
158
|
+
- Core verify 123/123; CLI check 17/17 + typecheck/build. Xoá `test/oauth-flow.test.ts` (phiên cũ treo vì hostname giả) và gộp assertion 0600/clear vào `test/mcp-oauth.test.ts`. Chưa push/publish galaxy-code trong đợt này.
|
|
159
|
+
|
|
160
|
+
### Runtime logging cho CLI (2026-09-25)
|
|
161
|
+
|
|
162
|
+
- [x] F21: `CliLogger` NDJSON theo ngày trong `<state-dir>/logs/`, 0600, xoay 5 MB giữ 3 đoạn, redact secret, flush/close; `blackhole logs [n]` xem lại.
|
|
163
|
+
- [x] F22: Wire vào lifecycle (cli_start, session_open, signal, fatal, uncaught/unhandled), run events (state, tool_failed, model_retry, completion_rejected, run_finished) và mcp_connect_failed.
|
|
164
|
+
- [x] F23: Tests unit (redact/rotate/recent 0700) + E2E spawn CLI lỗi → trace có stack trong log; CLI check 20/20.
|
|
4
165
|
|
|
5
|
-
|
|
166
|
+
### Chống lặp sau compact + giảm token + readOnlyHint (2026-09-25)
|
|
6
167
|
|
|
7
|
-
- `
|
|
8
|
-
-
|
|
9
|
-
- `
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
- Giữ tên repo, npm package và workflow trusted publishing hiện có. Chưa cần tạo repo/package npm mới để chia module.
|
|
13
|
-
- Không gộp hoặc sửa luồng release của Orbit/Nebula trong công việc này.
|
|
168
|
+
- [x] P1: checkpoint `lastToolCalls` thêm `argumentDigest` (redact, ≤160 ký tự) — sau compact model thấy CHÍNH XÁC đã gọi gì với path nào. Bằng chứng từ run GymFlow: 9 lần compact trong 11 phút, lastToolCalls chỉ có hash không đọc được.
|
|
169
|
+
- [x] P1: `summarizeP2` nhúng `tools: [{name, args}]` + `resultTail` (300 ký tự cuối) vào bản tóm lược — trước đó chỉ còn "listed workspace" nên agent inspect lại từ đầu.
|
|
170
|
+
- [x] P2: `command.run` maxOutputTokens 12000 → 6000; CLI wire `FileToolOutputSpill` (stateDir/spill, 0600) + tool `tool_output.read` (read-only, không prompt) để đọc lại output đầy đủ qua marker `artifact://<id>`.
|
|
171
|
+
- [x] MCP readOnlyHint: orbit-mcp 0.1.5 + nebula-mcp 1.0.3 công bố annotation; mcp-client đổi risk thành "read" khi hint=true → bỏ prompt cho tra cứu (đã verify live: 5 tool orbit risk=read). Tool khác vẫn prompt.
|
|
172
|
+
- Core 124/124 (thêm test digest); CLI 20/20. Đã publish orbit 0.1.5, nebula 1.0.3, core 0.3.0-alpha.8 (pending CI).
|
|
14
173
|
|
|
15
|
-
|
|
174
|
+
### Lưu ý chẩn đoán
|
|
16
175
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
CLI hiện là executable lab: `src/lab`, `src/live`, `fixtures`, `live/scenarios`, provider Ollama và Node host adapters. Nhiều bài test có tên live dùng HTTP mock; chúng không phải bằng chứng đã gọi model thật.
|
|
20
|
-
|
|
21
|
-
Quasar có Memory Tree Python/SQLite/FTS5/embedding và Rust IPC. Binding dữ liệu, migration và credential đang phụ thuộc desktop. `galaxy-retrieval-core` có contract/strategy cũ, chưa phải memory service dùng chung đã tích hợp vào runtime hiện tại.
|
|
22
|
-
|
|
23
|
-
Workspace root không phải Git repository. Core và CLI đều có thay đổi chưa commit trước đợt này. Khi di chuyển phải giữ nội dung working tree, không reset về HEAD.
|
|
24
|
-
|
|
25
|
-
## 3. Ranh giới triển khai
|
|
26
|
-
|
|
27
|
-
| Phần | Trách nhiệm | Phụ thuộc được phép |
|
|
28
|
-
|---|---|---|
|
|
29
|
-
| Runtime core | Vòng lặp, context, tools, profile, skills/memory policy, cancellation, evidence | Contract thuần TypeScript |
|
|
30
|
-
| Node adapters | Provider, MCP client, đọc skills, filesystem/commands, durable store | Node và SDK tích hợp |
|
|
31
|
-
| Lab | Fixture, evaluator, record/replay, reference host, báo cáo | Core + cùng adapter sản phẩm sử dụng |
|
|
32
|
-
| CLI application | Cấu hình, vòng đời session, composition, CLI output | Core + Node adapters |
|
|
33
|
-
| TUI | Input, stream, trạng thái, tool activity, approval, session commands | Application events |
|
|
34
|
-
|
|
35
|
-
Ban đầu Node adapters dùng subpath export riêng trong package core hiện tại. Root import của core không tải Node, MCP SDK, SQLite hay React. Build/package cần kiểm tra ranh giới này. Tách package/repo độc lập là bước phát hành sau, khi có nhu cầu thật.
|
|
36
|
-
|
|
37
|
-
## 4. Nghiên cứu TUI và lựa chọn
|
|
38
|
-
|
|
39
|
-
Nguồn chính đã đối chiếu ngày 2026-09-23:
|
|
40
|
-
|
|
41
|
-
- assistant-ui Ink: https://www.assistant-ui.com/docs/ink?platform=ink
|
|
42
|
-
- Custom backend: https://www.assistant-ui.com/docs/ink/custom-backend
|
|
43
|
-
- Gemini CLI package: https://github.com/google-gemini/gemini-cli/blob/main/packages/cli/package.json
|
|
44
|
-
- Codex Rust TUI: https://github.com/openai/codex/blob/main/codex-rs/tui/Cargo.toml
|
|
45
|
-
- OpenCode: https://github.com/anomalyco/opencode/blob/dev/packages/opencode/package.json
|
|
46
|
-
|
|
47
|
-
Gemini CLI dùng hệ React/Ink; Codex dùng Rust/Ratatui/Crossterm; OpenCode dùng OpenTUI/Solid. Các lựa chọn đều có thể xây agent terminal, nhưng React/Ink phù hợp nhất với code TypeScript hiện tại và tránh thêm runtime ngôn ngữ mới.
|
|
48
|
-
|
|
49
|
-
Chọn React + Ink và đánh giá/tích hợp `@assistant-ui/react-ink` cho composer/message primitives. Tài liệu hiện có API nối backend riêng. Không sử dụng UI runtime làm nơi điều phối tool loop. Core/application sở hữu execution; assistant-ui chỉ nhận/sản xuất UI state.
|
|
50
|
-
|
|
51
|
-
### Tiêu chí TUI
|
|
52
|
-
|
|
53
|
-
- Có input rõ ràng, model/provider hiện tại, trạng thái running/completed/failed/canceled.
|
|
54
|
-
- Streaming không làm mất input, không tự thực thi tool lần thứ hai.
|
|
55
|
-
- Enter gửi, Esc hủy lượt đang chạy, Ctrl+C hủy hoặc thoát; khôi phục terminal khi lỗi.
|
|
56
|
-
- Hỗ trợ Unicode, tiếng Việt, terminal hẹp và resize; trạng thái có chữ, không chỉ màu.
|
|
57
|
-
- Tool activity và lỗi hiển thị ngắn; output dài có giới hạn.
|
|
58
|
-
- Có chế độ không tương tác/JSON dành cho CI và pipe.
|
|
59
|
-
- UI chỉ gọi application service; cùng service được kiểm thử không cần render terminal.
|
|
60
|
-
- Session storage của ứng dụng là nguồn chính; không dùng file thread list không có locking của assistant-ui làm kho chia sẻ nhiều process.
|
|
61
|
-
|
|
62
|
-
## 5. Chuyển lab
|
|
63
|
-
|
|
64
|
-
1. Chụp manifest và backup working tree liên quan trước khi di chuyển.
|
|
65
|
-
2. Chuyển host/provider adapters sang subpath riêng của core.
|
|
66
|
-
3. Chuyển lab runner, fixtures, recordings và test của lab về `core/testing/`.
|
|
67
|
-
4. Chuyển các import lab sang adapter dùng chung; core không import galaxy-code.
|
|
68
|
-
5. Bổ sung entrypoint/script core để chạy lab, vẫn yêu cầu lựa chọn rõ ràng cho live provider.
|
|
69
|
-
6. Giữ test sản phẩm terminal tại CLI; phân biệt baseline mock, recorded replay và live thật.
|
|
70
|
-
7. Cập nhật runbook, source baseline và đường dẫn default sau khi di chuyển.
|
|
71
|
-
|
|
72
|
-
### Điều kiện nghiệm thu
|
|
73
|
-
|
|
74
|
-
- Lab chạy từ repo core khi CLI không nằm trong dependency graph.
|
|
75
|
-
- Fixtures/scenarios được bảo toàn nội dung trước di chuyển.
|
|
76
|
-
- Có thể chạy deterministic fixture và wire-mock provider độc lập.
|
|
77
|
-
- File runtime npm không chứa fixtures, recordings, secrets hoặc test harness.
|
|
78
|
-
|
|
79
|
-
## 6. MCP
|
|
80
|
-
|
|
81
|
-
### Contract
|
|
82
|
-
|
|
83
|
-
MCP client sống ở adapter. Core nhận tool definitions với ID ổn định có namespace server; mapping không phụ thuộc tên model. MCP không tự cấp trusted workspace effects.
|
|
84
|
-
|
|
85
|
-
### Đường chạy
|
|
86
|
-
|
|
87
|
-
Host config → connect stdio/Streamable HTTP → discover tools → kiểm tra schema/names → tạo tool snapshot → core gọi executor → kiểm tra quyền → SDK call → result có giới hạn → context dưới dạng dữ liệu ngoài.
|
|
88
|
-
|
|
89
|
-
### Yêu cầu
|
|
90
|
-
|
|
91
|
-
- Timeout và AbortSignal cho connect/list/call; cleanup transport khi thoát.
|
|
92
|
-
- Không tự chạy command MCP lấy từ repo chưa được cấu hình rõ ràng bởi người dùng.
|
|
93
|
-
- Mỗi server có namespace, allowlist công cụ và cấu hình nguồn quyền host.
|
|
94
|
-
- Tool result lỗi được chuẩn hóa; lỗi sau side effect không tự retry.
|
|
95
|
-
- Bảo toàn structured content; chặn output vượt hạn; không ghi credential vào transcript.
|
|
96
|
-
- Resources/prompts có adapter API riêng; không tự nâng thành system instructions.
|
|
97
|
-
- OAuth discovery/token refresh/PKCE đã có trong adapter (C07); UI đăng nhập host-native thuộc rollout G06 qua oauthProviderFactory.
|
|
98
|
-
|
|
99
|
-
### Kiểm thử
|
|
100
|
-
|
|
101
|
-
MCP server fixture cục bộ: discovery, call thành công/lỗi, namespace collision, cancellation, malformed payload, timeout, close. Không cần dịch vụ ngoài.
|
|
102
|
-
|
|
103
|
-
## 7. Skills
|
|
104
|
-
|
|
105
|
-
- Hỗ trợ chuẩn thư mục có `SKILL.md`, frontmatter name/description và tài nguyên tương đối.
|
|
106
|
-
- Catalog metadata được nạp trước; nội dung chỉ khi kích hoạt; tài nguyên chỉ khi cần.
|
|
107
|
-
- Scope explicit: user và workspace; đường dẫn canonical, không đọc vượt root qua traversal/symlink.
|
|
108
|
-
- Duplicate names có lỗi rõ ràng hoặc qualified ID; không ghi đè âm thầm.
|
|
109
|
-
- Nội dung có hash/version để biết skill đổi giữa hai lượt.
|
|
110
|
-
- Skill không trực tiếp cấp quyền shell/network. Script được thực thi qua host tool policy.
|
|
111
|
-
- Cho phép chọn skill chủ động và tool load skill theo catalog; trace ghi skill ID/hash đã nạp.
|
|
112
|
-
- Giới hạn số skill, byte mỗi file, catalog và tổng context.
|
|
113
|
-
- Tests: YAML hợp lệ/sai, Unicode, collision, traversal, symlink, lazy read và runtime nhận đúng skill.
|
|
114
|
-
|
|
115
|
-
## 8. Long-term memory
|
|
116
|
-
|
|
117
|
-
### Mô hình dữ liệu
|
|
118
|
-
|
|
119
|
-
Tách run checkpoint, episode, decision/preference/lesson và code index. Memory record có ID, scope, kind, text/summary, source, created/updated time, revision, status, supersedes và điều kiện áp dụng. Dữ kiện code có hash/anchor khi có thể kiểm chứng.
|
|
120
|
-
|
|
121
|
-
### Storage và phạm vi
|
|
122
|
-
|
|
123
|
-
- Store dùng chung theo host/user, phân vùng bắt buộc theo repository và worktree khi cần.
|
|
124
|
-
- SQLite/FTS là baseline local; transaction, concurrent writers, schema version, retention và forget cần được kiểm thử.
|
|
125
|
-
- Không dùng đường dẫn desktop cố định làm contract. Không buộc mở Quasar để CLI đọc memory.
|
|
126
|
-
- Cài đặt SQLite thuộc adapter, core chỉ biết MemoryPort.
|
|
127
|
-
- Không đưa dữ liệu ký ức cá nhân hoặc DB vào git/npm.
|
|
128
|
-
|
|
129
|
-
### Read path
|
|
130
|
-
|
|
131
|
-
Xác định scope từ host → lọc quyền/scope → tìm exact/lexical → chọn hit theo ngân sách → kiểm tra stale/superseded → nạp nguồn chi tiết nếu cần → đưa vào context như lịch sử có nguồn.
|
|
132
|
-
|
|
133
|
-
### Write path
|
|
134
|
-
|
|
135
|
-
Sự kiện hoặc yêu cầu remember → kiểm tra nguồn → tạo candidate → redaction → dedupe/idempotency → persist revision → index. Bản ghi do model tự rút ra là candidate, không tự trở thành quy tắc người dùng. Ghi nhớ quyết định explicit của người dùng phải giữ provenance riêng.
|
|
136
|
-
|
|
137
|
-
### Tính đúng
|
|
138
|
-
|
|
139
|
-
- Quyết định mới có thể supersede bản cũ, giữ lịch sử nhưng recall mặc định chỉ lấy bản hiệu lực.
|
|
140
|
-
- Forget phải có hiệu lực với các đường retrieval và dữ liệu dẫn xuất do hệ thống sở hữu.
|
|
141
|
-
- Memory không cấp approval và test cũ không làm task mới đạt completion gate.
|
|
142
|
-
- Recall rỗng khác với lỗi storage; timeout/offline fallback phải hiển thị trong trace.
|
|
143
|
-
- Tự động tổng hợp chạy nền cần lịch, ngân sách và chống tự củng cố; không coi số lần recall là chứng minh đúng.
|
|
144
|
-
|
|
145
|
-
### Nguồn tham khảo
|
|
146
|
-
|
|
147
|
-
- Graphify: https://github.com/Graphify-Labs/graphify — code graph/provenance và reflection.
|
|
148
|
-
- Codebase Memory MCP: https://github.com/DeusData/codebase-memory-mcp — incremental index và generation.
|
|
149
|
-
- OpenHuman memory split: https://github.com/tinyhumansai/openhuman/blob/main/crates/openhuman-core/src/memory/README.md
|
|
150
|
-
- DeepSeek Harness: https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/architecture.md
|
|
151
|
-
- Codex memories: https://learn.chatgpt.com/docs/customization/memories
|
|
152
|
-
- Graphiti: https://github.com/getzep/graphiti — temporal validity.
|
|
153
|
-
|
|
154
|
-
Baseline cần dùng được trước khi thêm embedding/graph reranking. Tái sử dụng semantics từ nghiên cứu và Memory Tree hiện tại; migration dữ liệu Quasar phải có backup, kiểm tra scope và không làm mất dữ liệu. Không import nguyên engine desktop vào runtime core.
|
|
155
|
-
|
|
156
|
-
## 9. Profile và tính tương thích
|
|
157
|
-
|
|
158
|
-
Profile coding giữ các kiểm tra workspace/write/validation/diff đang có. Profile assistant/research chọn prompt và completion requirements phù hợp, vẫn giữ tool correlation, cancellation, token/deadline budget và policy. Public exports cũ còn hoạt động; API mới là additive.
|
|
159
|
-
|
|
160
|
-
Provider-specific thinking nằm ở adapter/config. UI nhận capability để hiển thị lựa chọn hợp lệ. Test live phải ghi provider, model, settings và phiên bản adapter; không giả định mọi model có cùng thang thinking.
|
|
161
|
-
|
|
162
|
-
## 10. Validation và phát hành
|
|
163
|
-
|
|
164
|
-
1. Typecheck/build core và CLI.
|
|
165
|
-
2. Core regression suite; lab deterministic/wire mock/replay.
|
|
166
|
-
3. MCP local protocol test, skills filesystem boundary tests, memory persistence/scope/concurrency tests.
|
|
167
|
-
4. CLI pipe/JSON tests; TUI render/input/cancel và PTY smoke.
|
|
168
|
-
5. `npm pack --dry-run`: package boundaries, không kéo lab hoặc dữ liệu cá nhân vào npm.
|
|
169
|
-
6. Một live smoke với model đã cấu hình khi môi trường khả dụng; báo riêng nếu provider không chạy được, không đánh dấu mock là live.
|
|
170
|
-
7. `graphify update .` từ workspace root sau sửa code.
|
|
171
|
-
8. Release chỉ sau checks; giữ bindings trusted publishing. Version/release cần phản ánh package thực sự tương thích, không tự đánh dấu mọi phase hoàn thành.
|
|
172
|
-
|
|
173
|
-
## 11. Tiến độ
|
|
174
|
-
|
|
175
|
-
Theo dõi tại [GALAXY_AGENT_PLATFORM_TODO.md](GALAXY_AGENT_PLATFORM_TODO.md). Mỗi mục chỉ đánh dấu hoàn thành khi có implementation và bằng chứng kiểm thử; các mục future không được tính vào phần đã giao.
|
|
176
|
-
|
|
177
|
-
## 12. Phạm vi đã triển khai ngày 23/09
|
|
178
|
-
|
|
179
|
-
- 15 adapter production chuyển từ CLI vào core subpaths; `NodeToolExecutor` dùng chung, deterministic doubles chỉ nằm trong lab private.
|
|
180
|
-
- Toàn bộ lab source/test/scripts/fixtures/live/campaigns/docs chuyển về `galaxy-ai-coder-core/testing`. Manifest đối chiếu xác nhận 47 fixture/scenario/recording nguyên byte.
|
|
181
|
-
- Core có `agent` contracts, composition executor, `contextData` có giới hạn/trust envelope, và assistant/research profile với completion mặc định phù hợp. Coding profile giữ gate cũ.
|
|
182
|
-
- MCP stdio + Streamable HTTP đã thực sự connect/list/call, kiểm tra schema qua SDK, cấp quyền trước dispatch, abort/deadline và đóng kết nối. Resources/prompts có API; chưa có màn hình quản lý/OAuth.
|
|
183
|
-
- Skills có catalog user/workspace, namespace, YAML frontmatter, content/resource loading, hash/path/size bounds. Chưa có marketplace/install/update.
|
|
184
|
-
- Memory v1 có SQLite/FTS5, scope do host ràng buộc, source/hash/revision/status/trust, dedupe, optimistic concurrency, candidate/confirm, recall/forget. `key + revision + status` biểu diễn supersession; kind/conditions/source commit anchors và graph vẫn là bước sau.
|
|
185
|
-
- CLI/TUI có thực thi thật qua core, activity/approval/status, input tiếng Việt, cancellation, JSON mode, conversation session và các lệnh skills/memory/MCP. `--session` phục hồi hội thoại; chưa phải resume execution checkpoint trong sản phẩm CLI.
|
|
186
|
-
- Provider đang chạy: Ollama/local/cloud với cấu hình sẵn có và thinking do adapter xử lý. Không coi đây là đã viết xong direct SDK adapters cho Gemini/Claude/DeepSeek.
|
|
187
|
-
- Không đổi version/npm identity/repo/workflow publisher identity. Chưa push/publish. Trước khi release CLI độc lập phải thay dependency `file:../galaxy-ai-coder-core` bằng version core đã publish tương thích.
|
|
188
|
-
|
|
189
|
-
## 13. Phân kỳ tiếp theo và điều kiện qua cổng
|
|
190
|
-
|
|
191
|
-
| Giai đoạn | Công việc | Điều kiện nghiệm thu |
|
|
192
|
-
|---|---|---|
|
|
193
|
-
| P1 nền tảng (đợt này) | Core ports/adapters, private lab, CLI/TUI, MCP/skills/memory v1 | Typecheck/build/test; mock protocol; live lab; PTY; npm boundaries |
|
|
194
|
-
| P2 host rollout | VS Code port bindings, Quasar IPC adapter, giữ UI riêng | Cùng bộ conformance chạy trên từng host; không phụ thuộc CLI; rollback từng host |
|
|
195
|
-
| P3 memory nâng cao | Typed notes/conditions, source revision, stale code invalidation, Graphify/CBM adapter; migration desktop | Recall benchmark với corpus có nhãn; không trộn scope; migration dry-run/backup/rollback, forget lan đến index |
|
|
196
|
-
| P4 providers và trải nghiệm | Direct providers, capability/model/thinking picker, MCP OAuth/resources UI, session manager | Contract tests theo provider, retry/cancel/rate-limit, không chung một thang thinking giả định |
|
|
197
|
-
| P5 khai thác dài hạn | Background consolidation, embedding/hybrid ranking, temporal relations, retention | So sánh lexical baseline, budget/latency đo được, chống tự củng cố thông tin sai |
|
|
198
|
-
|
|
199
|
-
### Benchmark memory trước khi chọn graph/vector engine
|
|
200
|
-
|
|
201
|
-
1. Tạo corpus có decision, preference, lesson, code facts, nguồn lỗi thời và dữ liệu scope khác; đánh dấu câu trả lời đúng bằng tay.
|
|
202
|
-
2. Đo Recall@5/10, precision, tỷ lệ stale recall và cross-scope leakage, p50/p95 latency, số token đưa vào model.
|
|
203
|
-
3. So sánh FTS baseline với embeddings/hybrid/graph trên cùng corpus và cùng token budget; không chọn graph vì số node lớn.
|
|
204
|
-
4. Tình huống bắt buộc: rename/delete file, amend/rebase, workspace khác, supersede decision, forget, crash giữa write/index, hai host cùng ghi.
|
|
205
|
-
5. Chỉ đưa backend mới vào default khi chất lượng tốt hơn, invalidation/forget đúng và có đường quay lại FTS.
|
|
206
|
-
|
|
207
|
-
### Rollout memory từ Quasar
|
|
208
|
-
|
|
209
|
-
- Liệt kê schema, version, scope và semantics hiện tại trước khi chuyển.
|
|
210
|
-
- Tạo backup readonly, báo cáo số row và hash kiểm kê; không sửa DB gốc trong dry-run.
|
|
211
|
-
- Map những hàng thiếu provenance thành candidate, không tự xem chúng là preference đã xác nhận.
|
|
212
|
-
- Import sang DB mới theo transaction/chunk có resume marker; giữ mapping ID cũ → ID mới.
|
|
213
|
-
- Kiểm tra truy vấn, supersession và forget trên bản sao; chỉ chuyển consumer sau khi đạt.
|
|
214
|
-
- Không bật hai hệ cùng ghi vào cùng schema chưa có concurrency contract.
|
|
215
|
-
|
|
216
|
-
### Điều kiện phát hành
|
|
217
|
-
|
|
218
|
-
Giữ nguyên trusted-publisher bindings. Release core trước; CLI pin version tương thích sau; chạy kiểm thử artifact cài từ tarball rồi mới push release commit. Bản làm việc hiện tại dùng local file dependency có chủ ý, không được coi là một bản CLI npm đã sẵn sàng cài độc lập.
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
## 14. Sửa TUI theo phản hồi thực tế (2026-09-24)
|
|
222
|
-
|
|
223
|
-
Mục tiêu: một màn hình terminal có header cố định, vùng giữa cuộn được và input cố định ở đáy. Thinking, nội dung trả lời và tool phải xuất hiện theo thứ tự phát sinh, không gom tool thành log riêng dưới message.
|
|
224
|
-
|
|
225
|
-
### Phân chia trách nhiệm và cách thực hiện
|
|
226
|
-
|
|
227
|
-
1. `galaxy-code/src/timeline.ts` chuyển event core thành các phần hiển thị có thứ tự. Thinking lấy từ provider, không tự suy diễn. Text/thinking cùng loại được nối theo từng lượt model; tool được định danh bằng call ID và cập nhật kết quả ngay tại chỗ.
|
|
228
|
-
2. Tool dùng data parts của assistant-ui, không dùng tool-call parts có thể bị UI runtime thực thi lần nữa. Core vẫn là bên duy nhất thực thi tool.
|
|
229
|
-
3. Tên tool thân thiện kèm command/path/check; trạng thái có chữ và màu. Exit code khác 0 hoặc project validation thất bại phải hiển thị lỗi dù transport trả kết quả thành công.
|
|
230
|
-
4. `tui.tsx` dùng alternate screen và kích thước stdout. Không dùng Ink Static cho lịch sử. Chỉ render các dòng nằm trong viewport; header, trạng thái, approval và input có chiều cao riêng. Resize tính lại phần giữa, không đẩy input xuống scrollback.
|
|
231
|
-
5. Auto-follow ở cuối khi đang chạy; PageUp tạm dừng follow, PageDown/Ctrl+G trở về cuối. Ctrl+T thu gọn thinking, Ctrl+O mở chi tiết tool. Giữ log ngắn mặc định nhưng cho phép xem kết quả tool khi cần.
|
|
232
|
-
6. `composer.tsx` dùng state của assistant-ui và dựng input một dòng, cuộn ngang theo con trỏ. Chia ký tự theo grapheme, đo cell width để không cắt dấu tiếng Việt/emoji. Paste được giữ ở một dòng, phím cuộn không lọt vào prompt.
|
|
233
|
-
7. Approval luôn hiện phía trên input; y/n chỉ giải quyết yêu cầu đang chờ. Core tạo AbortSignal riêng cho mỗi request, hủy prompt khi timeout/cancel mà không hủy toàn run. CLI chọn tối đa 5 phút; host khác giữ timeout mặc định nếu không cấu hình.
|
|
234
|
-
8. Thư mục không có Git: CLI không cung cấp git_operation và ghép `NodeWorkspaceReviewExecutor`. Adapter này chụp baseline trước tác vụ, trả before/after cùng hash cho thay đổi văn bản, kiểm tra tính ổn định và attestation diff-review. Không tự tạo repository, không bỏ yêu cầu validation của completion gate.
|
|
235
|
-
|
|
236
|
-
### Điều kiện nghiệm thu
|
|
237
|
-
|
|
238
|
-
- Transcript có thinking → message → tool → kết quả tiếp theo; kết quả cập nhật đúng call, không lặp final text và không thực thi tool ở UI.
|
|
239
|
-
- Stream/hội thoại dài, output lỗi dài, Unicode/emoji và paste dài không làm header/input trôi.
|
|
240
|
-
- Cuộn lên không bị stream kéo xuống; thu/phóng terminal giữ vùng nhập và approval nhìn thấy được.
|
|
241
|
-
- Pending approval hết hạn/abort phải đóng, không nhận quyết định muộn cho call khác.
|
|
242
|
-
- Tool exit nonzero được hiển thị lỗi; chi tiết đọc được qua Ctrl+O.
|
|
243
|
-
- Thử tạo project Node.js + node:test ở thư mục không Git đi qua validation và completion gate thực tế.
|
|
244
|
-
- Thoát Ctrl+C/SIGINT/SIGTERM dọn runtime và trả terminal khỏi alternate screen.
|
|
245
|
-
|
|
246
|
-
### Giới hạn hiện tại
|
|
247
|
-
|
|
248
|
-
- Cuộn bằng chuột/trackpad qua SGR mouse reporting (1000/1006) hoặc ↑/↓/PageUp/PageDown. Terminal cần bật hỗ trợ mouse reporting; không còn dựa vào scrollback của alternate screen.
|
|
249
|
-
- Timeline chi tiết hiện giữ trong bộ nhớ của TUI; `--session` phục hồi user/final-answer text. Persist/replay timeline có version schema, giới hạn dung lượng và chính sách retention là việc tiếp theo.
|
|
250
|
-
- Reviewer cho thư mục không Git giới hạn baseline text 8 MiB, từng file 128 KiB và report thay đổi 24 KiB; từ chối attestation nếu thiếu/truncated/không ổn định hoặc có special entry. Dùng Git cho các dự án vượt phạm vi này.
|
|
251
|
-
- TUI cần terminal ít nhất 12 cột × 8 dòng; nghiệm thu compact ở 40×8 và PTY ở 48×16. Các picker/provider/graph memory đang ở những phase riêng trong mục 13.
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
## 15. Streaming thật và cuộn chuột (2026-09-24)
|
|
255
|
-
|
|
256
|
-
Phản hồi người dùng đã chỉ ra hai thiếu sót của bản trước: UI nhận event streaming nhưng Ollama adapter đọc hết HTTP body rồi mới normalize, và list chỉ hỗ trợ PageUp/PageDown nên cuộn chuột không có tác dụng. Lần smoke trước chỉ chứng minh nội dung xuất hiện, chưa chứng minh delta đến trước EOF.
|
|
257
|
-
|
|
258
|
-
### Thiết kế sửa
|
|
259
|
-
|
|
260
|
-
- Đọc body dưới dạng async byte iterator; TextDecoder giữ phần UTF-8 dở dang giữa các chunk, tách NDJSON theo newline và phát event ngay. Chỉ giữ phần dòng JSON chưa hoàn tất, không giữ toàn bộ response. Giới hạn tổng response 8 MiB tiếp tục được áp dụng.
|
|
261
|
-
- Stateful normalizer dùng chung cho live/replay: duy trì content, thinking, usage, terminal state và tool-call IDs. Replay helper cũ vẫn dùng được. Hủy reader khi abort, lỗi byte limit, lỗi protocol hoặc consumer dừng sớm; không phát thêm một started event khi lỗi xảy ra giữa stream.
|
|
262
|
-
- TUI bật SGR mouse reporting trong alternate screen. Wheel/trackpad chỉ cuộn vùng giữa; click/release không thành prompt text. Arrow keys cuộn từng dòng; PageUp/PageDown cuộn từng trang. Cập nhật vị trí theo state trước đó để nhiều wheel events trong một packet không bị mất.
|
|
263
|
-
- Auto-follow chỉ chạy khi ở cuối; người dùng đọc lịch sử không bị token mới kéo xuống. Ctrl+G trở về cuối. Ô trạng thái có dải dòng đang xem.
|
|
264
|
-
- Tắt mouse reporting và khôi phục màn hình khi thoát, kể cả đường exit đồng bộ không chạy được async finally.
|
|
265
|
-
|
|
266
|
-
### Điều kiện nghiệm thu bổ sung
|
|
267
|
-
|
|
268
|
-
1. HTTP vẫn mở nhưng UI đã hiển thị thinking và text; thêm delta sau đó cập nhật tiếp, rồi mới gửi done/EOF.
|
|
269
|
-
2. UTF-8 bị chia giữa emoji không bị hỏng; malformed stream/cancel/byte limit vẫn có lỗi rõ ràng và giải phóng reader.
|
|
270
|
-
3. Wheel lên/xuống, nhiều wheel events nối nhau, ↑/↓, PageUp/PageDown đều thay đổi viewport mà giữ header/input.
|
|
271
|
-
4. Khi người dùng cuộn lên, gửi thêm token không làm thay đổi dòng đang đọc. Draft không nhận chuỗi mã mouse.
|
|
272
|
-
5. Provider thật có nhiều frame trước completion; raw PTY ghi nhận bật/tắt mouse reporting và trả alternate screen.
|
|
273
|
-
|
|
274
|
-
Tham chiếu: [Ollama streaming](https://docs.ollama.com/api/streaming), [terminal control sequences](https://xtermjs.org/docs/api/vtfeatures/). Chi tiết tương tác với phím được đối chiếu thêm với source Ink đang cài trong workspace.
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
## 16. Composer macOS, footer và activity indicator (2026-09-24)
|
|
278
|
-
|
|
279
|
-
### Nguyên nhân và thay đổi
|
|
280
|
-
|
|
281
|
-
1. Composer cũ vẽ caret bằng inverse text nhưng không đặt con trỏ thật của terminal. Bộ gõ tiếng Việt đặt preedit tại vị trí con trỏ sau footer, rồi mới commit vào composer khi kết thúc từ. Dùng `useCursor` của Ink để đồng bộ hàng/cột thật với cửa sổ input; cột tính bằng display width, không dùng độ dài UTF-16.
|
|
282
|
-
2. Ink 6.8 nhận byte DEL `0x7f` của phím Delete macOS thành `key.delete`, khiến composer xoá tiến ở cuối câu và không thay đổi gì. Pin Ink 7.1.1, tương thích peer của assistant-ui/React hiện tại, để phân biệt backspace với CSI `3~` (Fn+Delete). Không sửa trực tiếp node_modules.
|
|
283
|
-
3. Giữ draft/cursor refs đồng bộ trong handler để nhiều sự kiện xoá/gõ trong một packet không dùng state React cũ. Dấu kết hợp và emoji được xử lý theo grapheme.
|
|
284
|
-
4. Kiểm chứng PTY phát hiện Ink 7.1.1 lệch hàng caret trong nhánh render đầy chiều cao không có newline; đặc biệt con trỏ tiếp tục trôi khi chỉ di chuyển caret. Reserve một hàng trống cuối terminal cho newline, giữ header/input cố định và tránh ANSI writer cạnh tranh với Ink. Terminal cao 8 hàng dùng input không border.
|
|
285
|
-
5. Token context giữ ý nghĩa dữ liệu cũ, chuyển xuống cùng hàng phím tắt, căn phải; phần help co lại trước token khi màn hình hẹp.
|
|
286
|
-
6. Activity chỉ animate khi run còn hoạt động: Connecting → Thinking/Responding → Running tools/Validating/Review theo event thật. Spinner 120 ms và dấu chấm đổi nhịp; thành công unmount indicator/timer, không còn nhãn Hoàn tất. Lỗi, huỷ và yêu cầu quyền vẫn có phản hồi riêng.
|
|
287
|
-
|
|
288
|
-
### Nghiệm thu
|
|
289
|
-
|
|
290
|
-
- Input hiển thị đúng ô trước khi gõ space; caret thật đi cùng ký tự kể cả khi dùng ←/→, cuộn ngang input dài, resize.
|
|
291
|
-
- Delete xoá lùi; Fn+Delete xoá tiến; dấu ghép/emoji được xoá nguyên grapheme; delete lặp không làm mất draft.
|
|
292
|
-
- Footer token căn phải tại 40/100/160 cột, không tăng chiều cao khung; activity thay đổi và dừng timer sau completion.
|
|
293
|
-
- Giữ regression HTTP streaming, scroll giữ vị trí, approval và keyboard shortcuts.
|
|
294
|
-
- `scripts/verify-tui-input.py` kiểm tra PTY thật với emulator pyte; OS IME không được tự động điều khiển, vì vậy kết quả này xác nhận terminal protocol/caret và committed Unicode, không phải kiểm chứng thủ công mọi bộ gõ macOS.
|
|
295
|
-
|
|
296
|
-
Tham chiếu: [Ink useCursor](https://github.com/vadimdemedes/ink#usecursor), [Ink 7 sửa phân biệt Backspace/Delete](https://github.com/vadimdemedes/ink/releases/tag/v7.0.0).
|
|
297
|
-
|
|
298
|
-
## 17. Bundle MCP/skills, E06 migration và C07 OAuth (2026-09-24)
|
|
299
|
-
|
|
300
|
-
### Quyết định
|
|
301
|
-
|
|
302
|
-
1. galaxy-code mặc định nạp 2 MCP server first-party (`orbit`, `nebula`) bằng `npx -y @galaxy-stack/...`; `--no-galaxy-mcp` tắt hoàn toàn. Config người dùng ghi đè mặc định.
|
|
303
|
-
2. 2 skill `orbit-framework` (từ orbit-mcp) và `galaxy-ui` (từ galaxy-design) đóng gói vào `galaxy-code/skills/`, scope `bundled/`, lazy load như skill thường.
|
|
304
|
-
3. Memory desktop (Quasar Memory Tree) chuyển qua `blackhole memory import-quasar <db>`: luôn backup nguồn vào `<state-dir>/import-backups/`, chỉ đọc bản sao, import leaf active thành confirmed với provenance `quasar:<source>`, key ổn định theo source_ref, idempotent.
|
|
305
|
-
4. OAuth MCP: dùng SDK flow (RFC 9728 discovery, dynamic registration, PKCE, refresh); callback localhost chạy trong FileOAuthProvider; `blackhole mcp login/logout` quản trị; token 0600. UI host-native để dành cho G06 qua oauthProviderFactory.
|
|
306
|
-
|
|
307
|
-
### Sửa lỗi phát hiện
|
|
308
|
-
|
|
309
|
-
- orbit-mcp 0.1.2 trên npm mất shebang → shell thực thi bundle như bash, MCP handshake chết. Build thêm guard script, publish 0.1.4 (trusted publishing), galaxy-code kết nối lại được.
|
|
310
|
-
- McpAgentClient.login mất provider khi reconnect (chỉ truyền 3 đối số) → sau login client vẫn không mang token. Đã truyền provider vào open() thứ hai.
|
|
311
|
-
- FileOAuthProvider getter sync đọc listener trước khi bind xong → race crash. Callback giờ khởi động trong constructor, mọi method async chờ `ready`, close() trả port.
|
|
312
|
-
|
|
313
|
-
### Nghiệm thu
|
|
314
|
-
|
|
315
|
-
- Live: `blackhole mcp` kết nối orbit (scaffold/graphql/security tools) + nebula (component/coverage tools); `blackhole skills` thấy và load 2 skill bundle.
|
|
316
|
-
- Core 123/123 (2 test OAuth mới: E2E fixture cục bộ + lưu trữ 0600/clear); CLI 17/17 kèm 2 test migration fixture; typecheck + build qua cả hai repo.
|
|
317
|
-
- E06 live với `~/.galaxy/desktop/memory/memory.db`: 15 notes imported, backup lưu, FTS recall được, chạy lại 0 imported/15 skipped.
|
|
318
|
-
- Chưa push/publish galaxy-code; orbit-mcp đã push và CI publish 0.1.4 thành công.
|
|
319
|
-
|
|
320
|
-
## 18. Runtime log cho CLI (2026-09-25)
|
|
321
|
-
|
|
322
|
-
### Thiết kế
|
|
323
|
-
|
|
324
|
-
- `src/logs.ts` `CliLogger`: NDJSON mỗi ngày `cli-YYYY-MM-DD.ndjson` trong `<stateDir>/logs/`, quyền 0600/0700, serialize ghi qua promise queue, xoay ở 5 MB giữ tối đa 3 đoạn, redact pattern secret trước khi ghi, `flush()` cho shutdown.
|
|
325
|
-
- Sự kiện: `cli_start`, `session_open`, `run_started`, `state`, `tool_failed` (kèm summary), `model_retry`, `completion_rejected`, `run_finished` (state + error), `mcp_connect_failed`, `signal`, `fatal`, `uncaught_exception`, `unhandled_rejection`. Không log content/thinking delta (noise + dung lượng).
|
|
326
|
-
- `blackhole logs [n]` in N mục mới nhất kèm đường dẫn file log.
|
|
327
|
-
- Crash handlers giữ trace sau khi stderr/alternate screen biến mất: `uncaughtException` log + exit(1); `unhandledRejection` log + exitCode.
|
|
328
|
-
|
|
329
|
-
### Nghiệm thu
|
|
330
|
-
|
|
331
|
-
- Unit: JSON lines hợp lệ, redact `api_key`/`token`, rotate tạo `.1`/`.2`/`.3` đúng hạn mức, `recent()` mới nhất trước.
|
|
332
|
-
- E2E spawn CLI với action sai → exit 1, log chứa `cli_start`, `session_open`, `fatal` kèm stack; demo thật `blackhole logs`.
|
|
333
|
-
- CLI check 20/20 (typecheck + build).
|
|
334
|
-
|
|
335
|
-
## 19. Chống lặp sau compact + giảm token + readOnlyHint (2026-09-25)
|
|
336
|
-
|
|
337
|
-
### Nguyên nhân (từ log thật)
|
|
338
|
-
|
|
339
|
-
Run GymFlow 11 phút có 9 chu kỳ compacting→executing. Chuỗi: tool output lớn (bun install, knowledge docs) → chạm ngưỡng 150K → compact → bản tóm lược chỉ còn "listed workspace" (không path/args) → agent inspect lại → đầy lại. Hậu quả: lặp công việc, hao token, chậm.
|
|
340
|
-
|
|
341
|
-
### Thay đổi
|
|
342
|
-
|
|
343
|
-
1. **Checkpoint digest (P1)**: `lastToolCalls` thêm `argumentDigest` = JSON đối số redact ≤160 ký tự; validator chấp nhận; restore giữ nguyên. Sau compact model đọc được chính xác đã inspect path/query nào.
|
|
344
|
-
2. **Enriched compaction summary (P1)**: `summarizeP2` mỗi item thêm `tools` (tên + args redact ≤200) và `resultTail` (300 ký tự cuối kết quả). Hết thời đại summary "listed workspace".
|
|
345
|
-
3. **Hạ cap command.run (P2)**: maxOutputTokens 12000 → 6000.
|
|
346
|
-
4. **Spill + read-back (P2)**: CLI wire `FileToolOutputSpill` (stateDir/spill, 0600) và tool `tool_output.read` (read-only) — output dài vượt hạn mức được spill ra file, context chỉ giữ head/tail + marker `artifact://<id>`; agent tự đọc lại khi cần. Đây là pattern Claude Code (persist to disk, read back).
|
|
347
|
-
5. **readOnlyHint (user feedback)**: orbit-mcp/nebula-mcp công bố `readOnlyHint: true` (đúng chuẩn MCP — chỉ trả text, không mutate); CLI đổi risk thành "read" theo hint → AgentToolExecutor tự cho phép không prompt. Tool không hint vẫn prompt.
|
|
348
|
-
|
|
349
|
-
### Nghiệm thu
|
|
350
|
-
|
|
351
|
-
- Core 124/124 (test mới: checkpoint có digest `"path":"src"`, redact, ≤161 ký tự; compacted summary chứa `tools[{name,args}]`).
|
|
352
|
-
- CLI 20/20 qua check. Live: 5 tool orbit risk=read qua npx 0.1.5; nebula 1.0.3 published.
|
|
353
|
-
- So sánh với hệ thống khác: pattern P1 tương đương todo/state P0 của Claude Code; P2 tương đương "persist to disk, read back" — cả hai là chuẩn chung của các agent ổn định.
|
|
176
|
+
- Log run GymFlow (2026-09-25 09:39): 9 lần compacting→executing trong 11 phút; checkpoint `lastToolCalls` lặp `list_files`/`read_file`/`orbit_knowledge_topics` — bằng chứng trực tiếp vòng xoáy compact-mất-ngữ-cảnh-làm-lại.
|
|
@@ -174,3 +174,16 @@ Backup trước migration có 243 file và working-tree diff; vị trí local đ
|
|
|
174
174
|
### Lưu ý chẩn đoán
|
|
175
175
|
|
|
176
176
|
- Log run GymFlow (2026-09-25 09:39): 9 lần compacting→executing trong 11 phút; checkpoint `lastToolCalls` lặp `list_files`/`read_file`/`orbit_knowledge_topics` — bằng chứng trực tiếp vòng xoáy compact-mất-ngữ-cảnh-làm-lại.
|
|
177
|
+
|
|
178
|
+
- Publish orbit-mcp 0.1.5 + nebula-mcp 1.0.3 + ai-coder-core 0.3.0-alpha.8 (tag alpha) HOÀN TẤT qua CI trusted publishing. `blackhole-cli` vẫn chờ trusted publisher trên npmjs.com (workflow publish re-run, lỗi 404 như trước).
|
|
179
|
+
|
|
180
|
+
- [x] P2 root cause: derivedDirectories chỉ khớp đường dẫn gốc — `backend/node_modules` bị phân loại durable → hàng nghìn write path + hash nhúng vào mandatory state P0 mỗi lượt → MANDATORY_CONTEXT_TOO_LARGE (1.48M tokens). Fix: match theo segment bất kỳ trong path + thêm `.bun-cache`. Cap `mandatoryState.editedFiles` (200 + total) và checkpoint `edits` (500 + editsTotal). Chứng minh bằng script diff với node_modules lồng nhau: class=derived, writes rỗng.
|
|
181
|
+
- Fix đi kèm: head/tail bounding neo tail vào cuối giá trị (tránh cắt đứt JSON như `"truncated":tru`) — regression test trong context.test.ts.
|
|
182
|
+
- [x] F25: Verify runtime budget cho deepseek 1M: soft 455,475 / compaction 637,665 / eviction-tighten scale theo tỷ lệ profile. Wire `--approval full` vào authorize (trước đó option tồn tại nhưng authorize vẫn gọi permission prompt).
|
|
183
|
+
- [x] P3: Chặn đọc source library trong dependency dirs (node_modules/.bun-cache) bằng structured error UNSUPPORTED hướng dẫn dùng MCP/docs — chặn readText/searchPaths(search)/searchText. Bằng chứng log: agent glob vào node_modules/@galaxy-stack + read_file node_modules ×4 thay vì dùng MCP. Core 125/125 + lab audit PASS.
|
|
184
|
+
- [x] F26: Dời trace sink khỏi stderr (đang đụng repaint của TUI → [trace] chớp rồi biến mất) vào CliLogger file; xem được qua `blackhole logs`. Verify: run "Nói OK" completed, 7 trace entries nằm trong log file.
|
|
185
|
+
- [x] F27: Chứng minh qua checkpoint mới nhất: MCP orbit/nebula + skills ĐÃ được đăng ký active (compat.activeToolNames có mcp_orbit_*, mcp_nebula_*, skill_list/load/read) — run 48 turns chết ở maxTurns với search_tools lặp (no-progress policy chặn). Lỗi hiển thị = completion_rejected DIFF_NOT_REVIEWED + maxTurns.
|
|
186
|
+
- [x] P4 (gốc rễ vòng lặp 48 turns): (a) `review_changes` vượt 24KiB giờ **degrade** sang bounded-summary (path + hash + size + preview 600 ký tự + previewTruncated) thay vì từ chối — workspace không Git với scaffold lớn vẫn có diff-review evidence; (b) remediation `DIFF_NOT_REVIEWED` **phân nhánh theo Git**: không Git → hướng dẫn gọi review_changes (trước đây dặn search git_operation không tồn tại → model search 12 lần → maxTurns). Regression: workspace-review test cập nhật (bounded-summary + diffHash), live-health Git test giữ nguyên.
|
|
187
|
+
- [x] P5: Bổ sung remediation cho `WORKSPACE_EVIDENCE_STALE` và `WRITE_NOT_VALIDATED` (trước đây chỉ chẩn đoán, không có next action → deepseek dính WRITE_NOT_VALIDATED 3 lần không biết phải gọi validate lại). Core 125/125, live-health 8/8.
|
|
188
|
+
- [x] P6 (npm view dư thừa): (a) prompt tool-policy thêm dòng: MCP framework docs là nguồn chính thức — không verify package bằng npm view/node_modules reads; (b) orbit-mcp 0.1.6 stamp DOCS_STAMP vào knowledge output (docs khớp orbit-core 0.2.x); (c) toolLabel parse tên model-facing `mcp_<server>_<tool>_<hash>` → badge hiển thị "Tra cứu tri thức Orbit (controller-pattern)" thay vì tên thô; humanize giữ args ngắn thay vì xóa trắng. Core 125/125; CLI 21/21.
|
|
189
|
+
- [x] P7 (framework packaging bugs mà E2E phát hiện — fix ở orbit repos): orbit-core 0.2.2 + orbit-common 0.1.14 publish kèm .d.ts (trước đây dist chỉ index.js → tsc downstream fail); orbit-mcp 0.1.8 knowledge testing-pattern khớp API thật (OrbitFactory.create(AppModule, {port:0}) + listen(0) + fetch — OrbitApplication KHÔNG có handle(), KHÔNG có OrbitTestFactory). Verify: tsc --noEmit pass với types thật từ npm 0.2.2. sync-repo.sh: inject standalone build:types + giữ scripts/build-types.sh qua packages/common/scripts.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Skill marketplace — index, ký số (trust), CLI và TUI
|
|
2
|
+
|
|
3
|
+
## Index
|
|
4
|
+
|
|
5
|
+
JSON `schemaVersion: 1`:
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"schemaVersion": 1,
|
|
10
|
+
"skills": [
|
|
11
|
+
{
|
|
12
|
+
"id": "orbit-framework",
|
|
13
|
+
"name": "Orbit Framework",
|
|
14
|
+
"description": "...",
|
|
15
|
+
"tags": ["orbit"],
|
|
16
|
+
"versions": [
|
|
17
|
+
{ "version": "0.1.0", "path": "orbit-framework/0.1.0/SKILL.md", "sha256": "<64 hex>" }
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"signature": "<base64 ed25519>"
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
- `path` tương đối theo index (hoặc `url` tuyệt đối HTTP(S)).
|
|
26
|
+
- Nội dung mỗi skill được **verify sha256** trước khi ghi (atomic, mode 0600).
|
|
27
|
+
- Semver hỗ trợ: `*`, exact, `^`, `~`.
|
|
28
|
+
|
|
29
|
+
## Ký số index (trust)
|
|
30
|
+
|
|
31
|
+
- Chữ ký Ed25519 trên **canonical JSON** (object key sắp xếp, bỏ field `signature`); cả publisher và verifier dùng chung `stableSkillIndexJson`.
|
|
32
|
+
- Host cấp public key tin cậy qua `--skills-public-key <pem>`; khi có key, index **bắt buộc** phải có chữ ký hợp lệ (thiếu/sai → từ chối), fail-closed.
|
|
33
|
+
- Không cấp key: chấp nhận index chưa ký (tương thích ngược).
|
|
34
|
+
|
|
35
|
+
Sinh khoá và ký:
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
openssl genpkey -algorithm ed25519 -out private-key.pem
|
|
39
|
+
openssl pkey -in private-key.pem -pubout -out public-key.pem
|
|
40
|
+
node scripts/sign-skill-index.mjs index.json private-key.pem signed.json
|
|
41
|
+
blackhole skills install orbit-framework --skills-index signed.json --skills-public-key public-key.pem
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## CLI
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
blackhole skills search <query> --skills-index <path-or-url>
|
|
48
|
+
blackhole skills install <id> [--skill-version <range>]
|
|
49
|
+
blackhole skills installed | update | remove <id>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Skill cài vào managed root (`<state-dir>/skills` hoặc `--skills-dir`), xuất hiện qua
|
|
53
|
+
`DirectorySkills` với namespace `managed/`.
|
|
54
|
+
|
|
55
|
+
## TUI
|
|
56
|
+
|
|
57
|
+
- `Ctrl+S`: mở/đóng panel SKILLS.
|
|
58
|
+
- Liệt kê skill đã cài (catalog) và entry từ index (nếu cấu hình `--skills-index`).
|
|
59
|
+
- `↑/↓` chọn, `Enter` cài entry index đang chọn, `Esc`/Ctrl+S đóng.
|