@galaxy-stack/ai-coder-core 0.1.0 → 0.3.0-alpha.7

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.
Files changed (137) hide show
  1. package/CHANGELOG.d/2026-09-19-advisory-guard-policy.md +25 -0
  2. package/CHANGELOG.d/2026-09-19-research-citation-parsing.md +16 -0
  3. package/CHANGELOG.d/2026-09-19-research-rejection-evidence.md +15 -0
  4. package/CHANGELOG.d/2026-09-19-test-journal-reporter.md +8 -0
  5. package/CHANGELOG.d/2026-09-21-evidence-missing-remediation.md +15 -0
  6. package/CHANGELOG.d/2026-09-21-observation-nudge-context.md +12 -0
  7. package/CHANGELOG.d/2026-09-22-model-retry-budget.md +18 -0
  8. package/CHANGELOG.d/2026-09-22-no-progress-recovery-turn.md +19 -0
  9. package/CHANGELOG.d/2026-09-23-agent-platform.md +5 -0
  10. package/CHANGELOG.d/2026-09-23-conservative-output-reserve.md +16 -0
  11. package/CHANGELOG.d/2026-09-24-approval-workspace-review.md +7 -0
  12. package/CHANGELOG.d/2026-09-24-incremental-ollama.md +5 -0
  13. package/CHANGELOG.d/README.md +16 -0
  14. package/CHANGELOG.md +166 -0
  15. package/README.md +119 -8
  16. package/dist/adapters/node/config/manual-provider-config.d.ts +19 -0
  17. package/dist/adapters/node/config/manual-provider-config.d.ts.map +1 -0
  18. package/dist/adapters/node/config/manual-provider-config.js +91 -0
  19. package/dist/adapters/node/config/manual-provider-config.js.map +1 -0
  20. package/dist/adapters/node/host/command-containment.d.ts +45 -0
  21. package/dist/adapters/node/host/command-containment.d.ts.map +1 -0
  22. package/dist/adapters/node/host/command-containment.js +580 -0
  23. package/dist/adapters/node/host/command-containment.js.map +1 -0
  24. package/dist/adapters/node/host/content-hash.d.ts +2 -0
  25. package/dist/adapters/node/host/content-hash.d.ts.map +1 -0
  26. package/dist/adapters/node/host/content-hash.js +5 -0
  27. package/dist/adapters/node/host/content-hash.js.map +1 -0
  28. package/dist/adapters/node/host/file-run-store.d.ts +29 -0
  29. package/dist/adapters/node/host/file-run-store.d.ts.map +1 -0
  30. package/dist/adapters/node/host/file-run-store.js +94 -0
  31. package/dist/adapters/node/host/file-run-store.js.map +1 -0
  32. package/dist/adapters/node/host/host-environment.d.ts +9 -0
  33. package/dist/adapters/node/host/host-environment.d.ts.map +1 -0
  34. package/dist/adapters/node/host/host-environment.js +29 -0
  35. package/dist/adapters/node/host/host-environment.js.map +1 -0
  36. package/dist/adapters/node/host/node-command-port.d.ts +21 -0
  37. package/dist/adapters/node/host/node-command-port.d.ts.map +1 -0
  38. package/dist/adapters/node/host/node-command-port.js +281 -0
  39. package/dist/adapters/node/host/node-command-port.js.map +1 -0
  40. package/dist/adapters/node/host/node-workspace-evidence-verifier.d.ts +22 -0
  41. package/dist/adapters/node/host/node-workspace-evidence-verifier.d.ts.map +1 -0
  42. package/dist/adapters/node/host/node-workspace-evidence-verifier.js +384 -0
  43. package/dist/adapters/node/host/node-workspace-evidence-verifier.js.map +1 -0
  44. package/dist/adapters/node/host/node-workspace-port.d.ts +87 -0
  45. package/dist/adapters/node/host/node-workspace-port.d.ts.map +1 -0
  46. package/dist/adapters/node/host/node-workspace-port.js +860 -0
  47. package/dist/adapters/node/host/node-workspace-port.js.map +1 -0
  48. package/dist/adapters/node/host/node-workspace-snapshot.d.ts +61 -0
  49. package/dist/adapters/node/host/node-workspace-snapshot.d.ts.map +1 -0
  50. package/dist/adapters/node/host/node-workspace-snapshot.js +281 -0
  51. package/dist/adapters/node/host/node-workspace-snapshot.js.map +1 -0
  52. package/dist/adapters/node/host/path-scope.d.ts +17 -0
  53. package/dist/adapters/node/host/path-scope.d.ts.map +1 -0
  54. package/dist/adapters/node/host/path-scope.js +89 -0
  55. package/dist/adapters/node/host/path-scope.js.map +1 -0
  56. package/dist/adapters/node/host/project-tools.d.ts +42 -0
  57. package/dist/adapters/node/host/project-tools.d.ts.map +1 -0
  58. package/dist/adapters/node/host/project-tools.js +362 -0
  59. package/dist/adapters/node/host/project-tools.js.map +1 -0
  60. package/dist/adapters/node/mcp/mcp-client.d.ts +206 -0
  61. package/dist/adapters/node/mcp/mcp-client.d.ts.map +1 -0
  62. package/dist/adapters/node/mcp/mcp-client.js +123 -0
  63. package/dist/adapters/node/mcp/mcp-client.js.map +1 -0
  64. package/dist/adapters/node/mcp/oauth-provider.d.ts +39 -0
  65. package/dist/adapters/node/mcp/oauth-provider.d.ts.map +1 -0
  66. package/dist/adapters/node/mcp/oauth-provider.js +168 -0
  67. package/dist/adapters/node/mcp/oauth-provider.js.map +1 -0
  68. package/dist/adapters/node/memory/sqlite-memory.d.ts +22 -0
  69. package/dist/adapters/node/memory/sqlite-memory.d.ts.map +1 -0
  70. package/dist/adapters/node/memory/sqlite-memory.js +83 -0
  71. package/dist/adapters/node/memory/sqlite-memory.js.map +1 -0
  72. package/dist/adapters/node/provider/ollama-chat-stream.d.ts +17 -0
  73. package/dist/adapters/node/provider/ollama-chat-stream.d.ts.map +1 -0
  74. package/dist/adapters/node/provider/ollama-chat-stream.js +176 -0
  75. package/dist/adapters/node/provider/ollama-chat-stream.js.map +1 -0
  76. package/dist/adapters/node/provider/ollama-coding-model.d.ts +89 -0
  77. package/dist/adapters/node/provider/ollama-coding-model.d.ts.map +1 -0
  78. package/dist/adapters/node/provider/ollama-coding-model.js +464 -0
  79. package/dist/adapters/node/provider/ollama-coding-model.js.map +1 -0
  80. package/dist/adapters/node/provider/ollama-research-port.d.ts +32 -0
  81. package/dist/adapters/node/provider/ollama-research-port.d.ts.map +1 -0
  82. package/dist/adapters/node/provider/ollama-research-port.js +346 -0
  83. package/dist/adapters/node/provider/ollama-research-port.js.map +1 -0
  84. package/dist/adapters/node/skills/directory-skills.d.ts +12 -0
  85. package/dist/adapters/node/skills/directory-skills.d.ts.map +1 -0
  86. package/dist/adapters/node/skills/directory-skills.js +90 -0
  87. package/dist/adapters/node/skills/directory-skills.js.map +1 -0
  88. package/dist/adapters/node/tools/tool-executor.d.ts +91 -0
  89. package/dist/adapters/node/tools/tool-executor.d.ts.map +1 -0
  90. package/dist/adapters/node/tools/tool-executor.js +948 -0
  91. package/dist/adapters/node/tools/tool-executor.js.map +1 -0
  92. package/dist/adapters/node/tools/workspace-review.d.ts +13 -0
  93. package/dist/adapters/node/tools/workspace-review.d.ts.map +1 -0
  94. package/dist/adapters/node/tools/workspace-review.js +81 -0
  95. package/dist/adapters/node/tools/workspace-review.js.map +1 -0
  96. package/dist/agent/index.d.ts +79 -0
  97. package/dist/agent/index.d.ts.map +1 -0
  98. package/dist/agent/index.js +97 -0
  99. package/dist/agent/index.js.map +1 -0
  100. package/dist/approval/approval-policy.d.ts.map +1 -1
  101. package/dist/approval/approval-policy.js +4 -1
  102. package/dist/approval/approval-policy.js.map +1 -1
  103. package/dist/context/checkpoint.d.ts +3 -0
  104. package/dist/context/checkpoint.d.ts.map +1 -1
  105. package/dist/context/checkpoint.js +30 -1
  106. package/dist/context/checkpoint.js.map +1 -1
  107. package/dist/context/context-profile.d.ts +1 -1
  108. package/dist/context/context-profile.js +2 -2
  109. package/dist/prompt/prompt-assembler.d.ts +2 -1
  110. package/dist/prompt/prompt-assembler.d.ts.map +1 -1
  111. package/dist/prompt/prompt-assembler.js +40 -3
  112. package/dist/prompt/prompt-assembler.js.map +1 -1
  113. package/dist/runtime/completion-gate.d.ts +1 -1
  114. package/dist/runtime/completion-gate.d.ts.map +1 -1
  115. package/dist/runtime/completion-gate.js +12 -0
  116. package/dist/runtime/completion-gate.js.map +1 -1
  117. package/dist/runtime/index.d.ts +1 -0
  118. package/dist/runtime/index.d.ts.map +1 -1
  119. package/dist/runtime/index.js +1 -0
  120. package/dist/runtime/index.js.map +1 -1
  121. package/dist/runtime/research-citations.d.ts +15 -0
  122. package/dist/runtime/research-citations.d.ts.map +1 -0
  123. package/dist/runtime/research-citations.js +49 -0
  124. package/dist/runtime/research-citations.js.map +1 -0
  125. package/dist/runtime/run-controller.d.ts +6 -0
  126. package/dist/runtime/run-controller.d.ts.map +1 -1
  127. package/dist/runtime/run-controller.js +267 -62
  128. package/dist/runtime/run-controller.js.map +1 -1
  129. package/dist/runtime/runtime-types.d.ts +29 -0
  130. package/dist/runtime/runtime-types.d.ts.map +1 -1
  131. package/docs/AGENT_PLATFORM.md +91 -0
  132. package/docs/ARCHITECTURE.md +13 -2
  133. package/docs/GALAXY_AGENT_PLATFORM_PLAN.md +318 -0
  134. package/docs/GALAXY_AGENT_PLATFORM_TODO.md +158 -0
  135. package/docs/HOST_CONFORMANCE.md +38 -0
  136. package/docs/PROMPT_CONTRACT.md +9 -0
  137. package/package.json +25 -9
@@ -160,19 +160,36 @@ export type AiCoderRuntimeClock = Readonly<{
160
160
  now: () => number;
161
161
  timestamp: () => string;
162
162
  }>;
163
+ /**
164
+ * Observation no-progress handling. `advisory` dispatches repeated read-only
165
+ * observations with escalating nudges at `observationNudgeThresholds` and
166
+ * blocks only beyond the final threshold. `strict` preserves the older
167
+ * behavior where the first exceedance nudges and counts a no-progress episode.
168
+ */
169
+ export type AiCoderNoProgressPolicy = "advisory" | "strict";
163
170
  export type AiCoderRunBudget = Readonly<{
164
171
  deadlineMs: number;
165
172
  maxCompletionRejections: number;
166
173
  maxNoProgressEpisodes: number;
167
174
  maxObservationRepeats: number;
168
175
  maxModelRetries: number;
176
+ /** Backoff schedule (ms) between model request retries, consumed in order by retry attempt. */
177
+ modelRetryDelaysMs: readonly number[];
169
178
  maxRepeatedToolRequests: number;
170
179
  maxToolCalls: number;
171
180
  maxTurns: number;
181
+ noProgressPolicy: AiCoderNoProgressPolicy;
182
+ /** Attempt counts that trigger an advisory observation nudge; strictly increasing after normalization. */
183
+ observationNudgeThresholds: readonly number[];
172
184
  persistenceGraceMs: number;
173
185
  toolOutput: AiCoderToolOutputLimits;
174
186
  }>;
175
187
  export type AiCoderRunRequest = Readonly<{
188
+ /** Bounded host-supplied recall/history; always wrapped as untrusted data. */
189
+ contextData?: readonly Readonly<{
190
+ source: string;
191
+ content: string;
192
+ }>[];
176
193
  acceptanceCriteria?: readonly Readonly<{
177
194
  id: string;
178
195
  required?: boolean;
@@ -215,7 +232,19 @@ export type AiCoderRuntimeEventPayload = Readonly<{
215
232
  reason: AiCoderCheckpointReason;
216
233
  type: "checkpoint";
217
234
  }> | Readonly<{
235
+ candidate: string;
218
236
  issues: readonly string[];
237
+ researchEvidence: Readonly<{
238
+ fetchedUrls: readonly string[];
239
+ searchOnlyUrls: readonly string[];
240
+ sources: readonly Readonly<{
241
+ contentHash: string | null;
242
+ kind: "fetch" | "search";
243
+ toolCallId: string;
244
+ url: string;
245
+ }>[];
246
+ unsupportedCitations: readonly string[];
247
+ }>;
219
248
  type: "completion_rejected";
220
249
  }> | Readonly<{
221
250
  pressure: AiCoderContextPressure;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-types.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-types.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ # Shared Galaxy Agent platform
2
+
3
+ Implementation baseline: 2026-09-23. Existing repo/npm identities are preserved.
4
+
5
+ ## Dependency direction
6
+
7
+ ```mermaid
8
+ flowchart TD
9
+ CLI[Galaxy Code CLI / Ink TUI] --> APP[Host application and permissions]
10
+ VS[VS Code host - rollout pending] --> CORE[Platform-neutral agent runtime]
11
+ Q[Quasar host - rollout pending] --> CORE
12
+ APP --> CORE
13
+ APP --> AD[Optional Node adapters]
14
+ LAB[Private core/testing lab] --> CORE
15
+ LAB --> AD
16
+ AD --> PORT[Core ports and tool contracts]
17
+ AD --> MCP[MCP stdio / HTTP]
18
+ AD --> SK[Skill directories]
19
+ AD --> MEM[Scoped SQLite + FTS]
20
+ AD --> O[Ollama / Node workspace]
21
+ ```
22
+
23
+ Root imports must not load Node adapters, MCP SDK, SQLite or React. Optional adapters are separate subpath exports within the existing npm package to avoid creating new repository/trusted-publisher bindings before module boundaries stabilize. This does not make provider I/O part of the runtime's responsibility: the host chooses and constructs each adapter.
24
+
25
+ ## Entry points
26
+
27
+ | Import suffix after `@galaxy-stack/ai-coder-core/` | API |
28
+ |---|---|
29
+ | `agent` | AgentMemoryPort, AgentSkillsPort, AgentToolExecutor, CompositeToolExecutor, agentFunction, memoryTools, skillTools |
30
+ | `adapters/node/tools/tool-executor` | NodeToolExecutor, existing workspace/command/project tools; optional approvalTimeoutMs |
31
+ | `adapters/node/tools/workspace-review` | NodeWorkspaceReviewExecutor for bounded text-change review in non-Git scratch workspaces |
32
+ | `adapters/node/provider/ollama-coding-model` | OllamaCodingModel, provider-specific thinking option |
33
+ | `adapters/node/mcp/mcp-client` | McpAgentClient.connect, tools, list/read resources, list/get prompts, close |
34
+ | `adapters/node/skills/directory-skills` | DirectorySkills, qualified catalog IDs, lazy load/readResource |
35
+ | `adapters/node/memory/sqlite-memory` | SqliteAgentMemory(path, hostScope), search/remember/history/forget/close |
36
+ | `adapters/node/host/file-run-store` | Trusted checkpoint/final-report store |
37
+
38
+ ## Runtime integration
39
+
40
+ Compose `NodeToolExecutor` and `AgentToolExecutor` with `CompositeToolExecutor`. Duplicate model tool names fail instead of shadowing one another. Agent tool authorization is supplied by the host and checked before dispatch. Adapter results remain external/workspace data and have no host-attested completion effects. MCP uses SDK JSON Schema validation; local tools use the core schema validator.
41
+
42
+ Core `contextData` accepts up to 32 items, each with a source up to 1024 characters and content up to 32000 characters. It is wrapped as untrusted data in the user-task envelope and bound to checkpoint integrity. Do not pass historical notes through `trustedWorkspaceInstructions`.
43
+
44
+ `agentProfile: "assistant"` and `"research"` default `completion.requireInspection` to false. A host can explicitly require inspection for a repository task. Coding remains the default and existing completion guarantees remain in place. Research-specific citation criteria can still be explicitly configured on the run request.
45
+
46
+ ## Approval and scratch workspace review
47
+
48
+ Approval callbacks receive a request-scoped signal. The policy aborts that signal when the request completes, times out or is canceled so the host can dismiss its prompt. A timeout cannot accept a late approval and does not abort the parent run. NodeToolExecutor forwards an optional `approvalTimeoutMs`; defaults remain 30 seconds, while the interactive CLI selects five minutes.
49
+
50
+ `NodeWorkspaceReviewExecutor.create(workspace, context)` captures a stable baseline before model execution. Compose it when Git is unavailable and disable the Git catalog. It exposes `review_changes`, compares actual before/after content and hashes, and alone attests its `inspect`/`diff_review` effects. It is not an untrusted MCP/AgentTool wrapper. No validation requirement is waived. Large, binary/special or concurrently changed files fail closed; current limits are an 8 MiB baseline text cache, 128 KiB reads and 24 KiB serialized changes. Task-scoped baselines are not persisted for crash resume.
51
+
52
+ ## Memory v1 semantics
53
+
54
+ A memory port instance is bound to a host scope. The model cannot choose another scope through tool arguments. CLI scopes hash canonical workspace paths; different worktrees are isolated.
55
+
56
+ Rows retain key, ID, revision, content, source, content hash, active/superseded status, candidate/confirmed trust and update time. `(scope, key, revision)` is unique; writes use an immediate transaction and optional expectedRevision. Identical content/source/trust is idempotent. A candidate cannot replace a confirmed record. The active revision supersedes older revisions under the same key; history remains until explicit forget.
57
+
58
+ FTS uses tokenized, quoted input rather than interpolated SQL. Automatic recall excludes candidates/superseded rows and is bounded to four records by the CLI. Search results are context, not current evidence. Forget deletes all key revisions plus FTS rows and checkpoints the WAL. Backups owned by the user are not erased.
59
+
60
+ Schema v1 is initialized idempotently. SQLite is an optional Node adapter, not a required backend for browser/extension hosts. Current storage is separate from Quasar Memory Tree; no existing desktop memory DB was migrated or modified. Kind/conditions, source commit anchoring, graph/embedding ranking, TTL, autonomous consolidation and a schema upgrade from the desktop engine are future phases with their own tests.
61
+
62
+ ## MCP and skills
63
+
64
+ MCP supports stdio and Streamable HTTP, bounded catalog/schema/output sizes, timeout/cancellation, namespaced tools, resources/prompts APIs and transport cleanup. All MCP tools require host permission regardless of annotations. OAuth and automatic reconnect/catalog refresh during an active run remain future work. Explicit calls to resources/prompts return data; hosts must not elevate their text to system instructions.
65
+
66
+ Skills support YAML frontmatter, user/workspace qualified IDs, a 256-entry catalog, 64 KiB regular-file reads, hash validation between discovery/loading and canonical path checks. Skill instructions do not grant shell/network permissions. Marketplace installation and skill dependency resolution are not implemented.
67
+
68
+ ## Lab and validation
69
+
70
+ ```sh
71
+ npm ci
72
+ npm run verify
73
+ cd testing
74
+ npm ci
75
+ npm run typecheck:local
76
+ npm run test:local
77
+ npm run dev -- run --fixture fixtures/write-and-validate.json --json
78
+ npm run dev -- health --live --scenario live/scenarios/01-write-and-validate.json --json
79
+ ```
80
+
81
+ Fixtures, recordings, contract doubles, runners and tests live under `testing/`. Production adapters live under `src/adapters/node`. Lab wrapper imports reference those exact exports, so fixes are tested against the implementation shipped to hosts.
82
+
83
+ ## Rollout and release
84
+
85
+ 1. Verify core, private lab and CLI independently; retain live versus mock evidence separately.
86
+ 2. Release a compatible core version through its existing publisher.
87
+ 3. Replace the CLI's local `file:` dependency with the released version before standalone npm publishing.
88
+ 4. Adapt VS Code/Quasar to the new contracts incrementally and run host conformance tests.
89
+ 5. Migrate Quasar memory only with a backup, dry-run scope mapping and rollback validation.
90
+
91
+ No new repo/package is required for this stage. Local execution and tests do not publish npm packages or modify GitHub.
@@ -129,8 +129,19 @@ their call JSON is not byte-identical:
129
129
  fingerprint;
130
130
  - a bounded suffix cycle of two to six successful tool calls whose names,
131
131
  arguments, and semantic runtime state repeat.
132
- - the same stable read/research observation requested more than twice anywhere
133
- in one execution segment, even when unrelated calls are interleaved.
132
+ - the same stable read/research observation repeated anywhere in one execution
133
+ segment, even when unrelated calls are interleaved.
134
+
135
+ Observation handling follows the configured `noProgressPolicy`. The default
136
+ `advisory` policy dispatches repeated read-only observations and adds trusted
137
+ corrective feedback at each `observationNudgeThreshold` attempt (default
138
+ 3/5/8, borrowed from DeepSeek Harness's repeat-tool-reminder design); it blocks
139
+ only when an identical observation is requested beyond the final threshold.
140
+ Advisory nudges do not count as no-progress episodes. The `strict` policy
141
+ preserves the older behavior: the first exceedance nudges and counts one
142
+ no-progress episode, and consecutive identical calls block at
143
+ `maxRepeatedToolRequests`. Mutation, approval, failed-mutation-family, and
144
+ unknown-outcome guards stay deterministic in both policies.
134
145
 
135
146
  The first incidents add trusted corrective feedback. Two no-progress episodes
136
147
  without a materially different inspection or state transition pause the run
@@ -0,0 +1,318 @@
1
+ # Galaxy Agent Platform — kế hoạch phát triển
2
+
3
+ Ngày bắt đầu: 2026-09-23. Trạng thái: **P1 nền tảng đã triển khai và kiểm chứng; các phase rollout/memory nâng cao theo TODO**.
4
+
5
+ ## 1. Mục tiêu và quyết định đã được đồng ý
6
+
7
+ - `galaxy-ai-coder-core` trở thành nền tảng agent dùng chung cho CLI, VS Code và Quasar.
8
+ - Coding là một profile trên runtime chung; các bảo đảm về chỉnh sửa code, validation và resume vẫn được giữ.
9
+ - `galaxy-code` trở thành sản phẩm terminal có CLI không tương tác và TUI.
10
+ - Lab deterministic/live/replay chuyển về repo core và có entrypoint riêng.
11
+ - MCP, skills, memory có contract chung; I/O thực hiện ở adapter. UI không tự triển khai agent loop.
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.
14
+
15
+ ## 2. Hiện trạng đã kiểm tra
16
+
17
+ Core hiện có run controller, tool registry, prompt assembly, context manager, checkpoint, completion gate và host ports. Code vẫn thiên về coding ở identity, prompt modules và completion evidence.
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.