claude-code-best
09fc515edb
feat: 远程群控 ( #243 )
...
* feat: restore pipe IPC, LAN pipes, monitor tool, and PR-package features
Core IPC system (UDS_INBOX):
- PipeServer/PipeClient with UDS + TCP dual transport, NDJSON protocol
- PipeRegistry: machineId-based role assignment, file locking
- Master/slave attach, prompt relay, permission forwarding
- Heartbeat lifecycle with parallel isPipeAlive probes
- Commands: /pipes, /attach, /detach, /send, /claim-main, /pipe-status
LAN Pipes (LAN_PIPES):
- UDP multicast beacon (224.0.71.67:7101) for zero-config LAN discovery
- PipeServer TCP listener, PipeClient TCP connect mode
- Heartbeat auto-attaches LAN peers via TCP
- Cross-machine attach allowed regardless of role
- /pipes shows [LAN] peers with role + hostname/IP
- SendMessageTool supports tcp: scheme with user consent
Architecture — extracted hooks from REPL.tsx (~830 lines → ~20 lines):
- usePipeIpc: lifecycle (bootstrap, handlers, heartbeat, cleanup)
- usePipeRelay: slave→master message relay via module singleton
- usePipePermissionForward: permission request/cancel forwarding
- usePipeRouter: selected pipe input routing with role+IP labels
- Shared ndjsonFramer.ts replaces 3 duplicate NDJSON parsers
Key fixes applied during development:
- Multicast binds to correct LAN interface (not WSL/Docker)
- Beacon ref stored as module singleton (not Zustand state mutation)
- Heartbeat preserves LAN peers in discoveredPipes and selectedPipes
- Disconnect handler calls removeSlaveClient (fixes listener leak)
- cleanupStaleEntries probes without lock, writes briefly under lock
- getMachineId uses async execFile (not blocking execSync)
- globalThis.__pipeSendToMaster replaced with setPipeRelay singleton
- M key only toggles route mode when selector panel is expanded
- User prompt displayed in message list on pipe broadcast
- Broadcast notifications show [role] + hostname/IP for LAN peers
Other restored features:
- Monitor tool: /monitor command, MonitorTool, MonitorMcpTask lifecycle
- Daemon supervisor and remoteControlServer command
- Tools: SnipTool, SleepTool, ListPeersTool, SendUserFileTool,
WebBrowserTool, WorkflowTool, and 10+ stub→implementation rewrites
- Feature flags: UDS_INBOX, LAN_PIPES, MONITOR_TOOL, FORK_SUBAGENT,
KAIROS, COORDINATOR_MODE, WORKFLOW_SCRIPTS, HISTORY_SNIP
Tests: 2190 pass / 0 fail (15 new: lanBeacon 7, peerAddress 8)
* fix: resolve merge conflicts and fix all tsc/test errors after main merge
- Export ToolResultBlockParam from Tool.ts (14 tool files fixed)
- Migrate ink imports from ../../ink.js to @anthropic/ink (7 files)
- Fix toolUseID → toolUseId typo in monitor.ts and MonitorTool.tsx
- Add fallback values for string|undefined type errors (8 locations)
- Fix AppState type in assistant.ts, add NewInstallWizard stubs
- Fix ParsedRepository.repo → .name in subscribe-pr.ts
- Fix AgentId/string type mismatch in BackgroundTasksDialog.tsx
- Fix PipeRelayFn return type in pipePermissionRelay.ts
- Use PipeMessage type in usePipeRelay.ts
- Fix lanBeacon.test.ts mock type assertions
- Create missing MouseActionEvent class for ink package
- Use ansi: color format instead of bare "green"/"red"
- Resolve theme.permission access via getTheme()
Result: 0 tsc errors, 2496 tests pass, 0 fail
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* fix: 恢复 /poor 的说明
---------
Co-authored-by: unraid <local@unraid.local >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-11 23:22:55 +08:00
claude-code-best
6a70056910
feat: 全部类型问题解决
2026-04-11 10:24:00 +08:00
claude-code-best
7088fe3c8b
Merge remote-tracking branch 'guunergooner/fix/openai-stop-reason-usage'
2026-04-10 22:27:16 +08:00
guunergooner
c82f59943c
fix(openai): fix stop_reason null, zero usage fields and max_tokens forwarding
...
- Fix stop_reason always null in assembled AssistantMessage by applying
the value captured from message_delta event
- Reset partialMessage to null after message_stop to prevent duplicate
AssistantMessage emission causing doubled content in next API request
- Forward computed maxTokens into buildOpenAIRequestBody as max_tokens
so OpenAI-compatible endpoints receive the intended output cap
- Extract assembleFinalAssistantOutputs helper to deduplicate message
assembly logic between message_stop handler and post-loop fallback
- Fix test helper to use events parameter instead of hidden global
- Add regression test for max_tokens request forwarding
Signed-off-by: guunergooner <tongchao0923@gmail.com >
2026-04-10 12:17:52 +08:00
claude-code-best
a14d3dc8f0
fix(types): clean type fixes across 92 files
...
Apply proper TypeScript type corrections without any unsafe casts:
- Fix unknown/never/{} types from decompilation
- Correct function signatures and parameter types
- Add missing type declarations and interfaces
- Fix Ink component prop types
- Update API client/provider type annotations
Test files with mock data casts are included as-is (acceptable pattern).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-09 23:45:56 +08:00
claude-code-best
e5782e732c
Revert "Revert "feat: 第一个可以用的 ink 组件抽象 ( #158 )" ( #175 )"
...
This reverts commit 88d4c3ba24 .
2026-04-07 16:17:48 +08:00
claude-code-best
88d4c3ba24
Revert "feat: 第一个可以用的 ink 组件抽象 ( #158 )" ( #175 )
...
This reverts commit c445f43f8d .
2026-04-07 15:05:03 +08:00
claude-code-best
c445f43f8d
feat: 第一个可以用的 ink 组件抽象 ( #158 )
2026-04-06 23:56:45 +08:00
SaltedFish555
0da5ec09e8
feat: 添加gemini协议适配 ( #125 )
...
* feat: 添加gemini协议适配
* Remove unrelated local files from Gemini PR
2026-04-06 09:55:20 +08:00
JiayuWang(王嘉宇)
fdb2442ad4
test: add coverage for toRelativePath and getDirectoryForPath ( #95 )
...
These two exported functions in src/utils/path.ts lacked unit tests.
toRelativePath wraps Node's path.relative() and keeps the absolute
path when the result would start with '..' (i.e. the target is outside
the CWD). Four tests cover: child-of-cwd, outside-cwd, cwd-itself,
and the type-safety invariant.
getDirectoryForPath uses statSync to distinguish directories from files,
falling back to dirname() for non-existent paths and bypassing the
filesystem for UNC paths (NTLM credential-leak prevention). Three tests
cover: existing directory, known file, and non-existent path.
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 23:36:19 +08:00
JiayuWang(王嘉宇)
465e9f01c6
test: add coverage for formatRelativeTimeAgo and formatLogMetadata ( #94 )
...
These two exported functions in src/utils/format.ts had no test
coverage. formatRelativeTimeAgo wraps formatRelativeTime and forces
numeric:'always' for past dates; formatLogMetadata assembles parts
(time, branch, size/count, tag, agentSetting, prNumber) into a
' · '-separated string.
Added 8 tests for formatRelativeTimeAgo covering past dates, future
dates, equal-to-now, and the no-'ago'-for-future invariant. Added
9 tests for formatLogMetadata covering all optional fields and the
separator format.
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 22:17:58 +08:00
claude-code-best
ce29527a67
test: 添加一大堆测试文件
2026-04-02 20:28:08 +08:00
claude-code-best
8697c91668
feat: 完成测试 16-17
2026-04-02 16:03:20 +08:00
claude-code-best
006ad97fbb
test: 新增测试代码文件
2026-04-02 14:44:56 +08:00
claude-code-best
4f323efb61
test: Phase 5 — 添加 12 个测试文件 (+209 tests, 1177 total)
...
新增覆盖: effort, tokenBudget, displayTags, taggedId,
controlMessageCompat, MCP normalization/envExpansion,
gitConfigParser, formatBriefTimestamp, hyperlink, windowsPaths, notebook
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-02 10:11:43 +08:00
claude-code-best
21ac9e441f
test: Phase 2-4 — 添加 12 个测试文件 (+321 tests, 968 total)
...
Phase 2 (轻 Mock): envUtils, sleep/sequential, memoize, groupToolUses, dangerousPatterns, outputLimits
Phase 3 (补全): zodToJsonSchema, PermissionMode, envValidation
Phase 4 (工具模块): mcpStringUtils, destructiveCommandWarning, commandSemantics
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-02 09:29:01 +08:00
claude-code-best
acfaac5f14
test: Phase 1 — 添加 8 个纯函数测试文件 (+134 tests)
...
- errors.test.ts: 28 tests (isAbortError, toError, errorMessage, getErrnoCode, isFsInaccessible, classifyAxiosError 等)
- shellRuleMatching.test.ts: 22 tests (permissionRuleExtractPrefix, hasWildcards, matchWildcardPattern, parsePermissionRule 等)
- argumentSubstitution.test.ts: 18 tests (parseArguments, parseArgumentNames, generateProgressiveArgumentHint, substituteArguments)
- CircularBuffer.test.ts: 12 tests (add, addAll, getRecent, toArray, clear, length)
- sanitization.test.ts: 14 tests (partiallySanitizeUnicode, recursivelySanitizeUnicode)
- slashCommandParsing.test.ts: 8 tests (parseSlashCommand)
- contentArray.test.ts: 6 tests (insertBlockAfterToolResults)
- objectGroupBy.test.ts: 5 tests (objectGroupBy)
总计:781 tests / 40 files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-02 08:50:29 +08:00
claude-code-best
43af260322
test: 添加 json/truncate/path/tokens 模块测试
...
- json.test.ts: 27 tests (safeParseJSON, safeParseJSONC, parseJSONL, addItemToJSONCArray)
- truncate.test.ts: 24 tests (truncateToWidth, truncateStartToWidth, truncatePathMiddle, truncate, wrapText)
- path.test.ts: 15 tests (containsPathTraversal, normalizePathForConfigKey)
- tokens.test.ts: 22 tests (getTokenCountFromUsage, getTokenUsage, tokenCountFromLastAPIResponse, etc.)
使用 mock.module() 切断 log.ts/tokenEstimation.ts/slowOperations.ts 重依赖链
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-01 23:56:37 +08:00
claude-code-best
c57950e15e
test: 添加消息处理单元测试 (测试计划 06)
...
为消息创建、查询、文本提取、规范化等函数添加 56 个测试用例,
覆盖 createAssistantMessage、createUserMessage、isSyntheticMessage、
extractTag、isNotEmptyMessage、normalizeMessages 等核心功能。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-01 22:43:31 +08:00
claude-code-best
3df4b95ff9
test: 添加 Git 工具函数单元测试 (测试计划 08)
...
为 normalizeGitRemoteUrl 添加 18 个测试用例,覆盖 SSH、HTTPS、
ssh://、CCR 代理 URL 格式、大小写规范化及边界条件。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-01 22:30:45 +08:00
claude-code-best
f81a767f83
test: 添加 Cron 调度单元测试 (测试计划 07)
...
覆盖 parseCronExpression、computeNextCronRun、cronToHuman,
包含有效/无效表达式、字段范围验证、下次运行计算、人类可读描述,
共 38 个测试用例。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-01 22:23:26 +08:00
claude-code-best
c4344c4df0
test: 添加 Context 构建单元测试 (测试计划 03)
...
覆盖 stripHtmlComments、isMemoryFilePath、getLargeMemoryFiles、
buildEffectiveSystemPrompt 等函数,共 25 个测试用例全部通过。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-01 22:14:23 +08:00
claude-code-best
cad6409bfe
test: 添加 Utils 纯函数单元测试 (测试计划 02)
...
覆盖 xml, hash, stringUtils, semver, uuid, format, frontmatterParser,
file, glob, diff 共 10 个模块的纯函数测试。
json.ts 因模块加载链路过重暂跳过。
共 190 个测试用例(含已有 array/set)全部通过。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-01 22:03:02 +08:00
claude-code-best
e443a8fa51
feat: 搭建单元测试基础设施 — Bun test runner + 示例测试
...
添加 bunfig.toml 配置、test script,以及三组示例测试:
- src/utils/array.ts (intersperse, count, uniq)
- src/utils/set.ts (difference, intersects, every, union)
- packages/color-diff-napi (ansi256FromRgb, colorToEscape, detectLanguage 等)
41 tests, 0 failures.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-01 02:08:38 +08:00