Repository navigation
Conversation
code-yeongyu
force-pushed
the
main
branch
2 times, most recently
from
April 9, 2026 12:55
8cadf36 to
0e12d15
Compare
338: resume help now uses 'message' field consistent with top-level help 410: mcp and skills list now expose 'count' field for polymorphic consumption Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
#327: mcp help now includes .claw.json in documented sources list #328: agents help now includes ~/.codex/agents in documented sources list #408: added is_clean boolean to status JSON workspace for unambiguous dirty-state detection; changed_files documented as total non-clean count #338: resume help field consistency (committed earlier) Also marked 52 items with explicit done/verified evidence as DONE in ROADMAP.md, including product principles (1-6) and items with confirmed fix text (13-75, 96, 200). Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
327: mcp help now includes .claw.json in sources list 328: agents help now includes ~/.codex/agents in sources list 408: status JSON now has is_clean boolean field 6: terminal is transport principle — implementation tracked by #810-#816 Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
78: plugins CLI wired as CliAction::Plugins (verified runtime) 84: dump-manifests fixed 2026-06-03 103: agents discovery handles .md with YAML frontmatter (#442) 107: hook validation in doctor JSON (verified runtime) 108: CLI typos → command_not_found (verified runtime) 110: ConfigLoader discovers project/user/local configs 116: unknown keys now emit warnings not errors (#441) 119: bare_slash_command_guidance checks aliases (#772) Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
124: validate_model_syntax already rejects empty, spaces, and invalid formats 127: subcommand --json already routes to local JSON handlers Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
Changed resumed_help_command_emits_structured_json to assert 'message' field instead of 'text', matching the #338 fix for help JSON field consistency. Also marked ROADMAP #340 and #345 DONE with direct runtime evidence: 340: resume /session help now routes JSON to stdout (verified) 345: resume /config <section> now returns section-specific JSON (verified) Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
80: session lookup error now returns session_not_found with hint 86: .claw.json invalid JSON handled gracefully by config loader 100: binary_provenance exposes git_sha, build_date in status JSON Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
105: status reads model from .claw.json config (model_source: config) 118: /stats and /tokens both route to stats handler Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
81: project_root correctly reports per-CWD paths 82: sandbox correctly reports macOS degraded state (filesystem_active + unsupported) 83: system-prompt --date parameter works correctly 87: default permission_mode is workspace-write from config 91: permission mode aliases resolve to valid modes 102: config-time MCP check is by design for local preflight 117: -p flag parses single token correctly 128: validate_model_syntax rejects malformed models with hints Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
--cwd now validates the path exists and is a directory before passing it to the system prompt renderer. --date rejects values with newlines or >20 chars to prevent prompt injection. Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
97: empty --allowedTools is unrestricted (no restrictions = default mode) Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
bootstrap-plan --output-format json now returns phases as structured objects with id, label, description, and order fields instead of raw Rust enum variant name strings. Also exposes total_phases count. Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
status/doctor JSON now reports git_state:'no_git_repo' when project_root is None, instead of the misleading 'clean' which implied a git repo was present with zero changes. Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
85: skills discovery bounded by git root (nearest_git_root in prompt.rs) 88: instruction file discovery bounded by git root 125: git_state reports 'no_git_repo' when not in git repo 126: config section exposes 'merged' key-value pairs Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
93: --resume /tmp returns typed invalid_resume_argument error 109: config validation emits structured ConfigDiagnostic + warnings[] Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
101: RUSTY_CLAUDE_PERMISSION_MODE normalize maps aliases to valid modes 104: export CLI path and slash command both return kind:export Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
111: /providers routes to doctor slash command 115: init generates acceptEdits not dontAsk Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
32: OpenAI model passthrough verified (model: openai/gpt-4, source: flag) 43: Hook ingress opacity fixed (hook_validation structured in status JSON) Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
MCP server details JSON now redacts args (shows count only), strips URL query params which may contain tokens, and shows headers_helper as configured/not-configured boolean instead of the raw command string. env_keys and header_keys still exposed (key names only, not values). Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
120: config parse errors now surfaced via load_error with hint 121: hooks already uses PreToolUse/PostToolUse/Claude Code format Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
The --cwd validation added in #99 rejects non-existent paths, but the test used /tmp/project which doesn't exist on CI Linux runners. Changed to /tmp which exists everywhere. Also marks ROADMAP #123 DONE (--allowedTools normalization verified). Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
--base-commit now rejects non-hex strings and strings outside 7-64 character range. Matches the pattern used by --reasoning-effort. Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
Add GitOperation enum to detect mid-operation git states from the branch header in git status --short --branch output. - Rebase: 'rebasing ...' in branch header - Merge: '[merge-in-progress]' tag - Cherry-pick: 'cherry-pick-in-progress' tag - Bisect: 'bisect-in-progress' tag Operation state appears in: - status text: 'rebase-in-progress, dirty · 3 files · ...' - status JSON: 'git_operation' field (null when no operation) - git_state headline includes operation prefix Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
129: MCP server startup does not block credential validation - credentials are resolved via resolve_cli_auth_source() before build_runtime() which is where MCP state discovery happens. Generated with https://github.com/Yeachan-Heo/gajae-code Co-authored-by: Gajae Code <dev@gajae-code.com>
…ation (#3346) Implement issue #3325 (Slice 3.1) Config: Settings Override & Schema Validation Additions: - Setting schema registry with support for multiple value types - SessionSettings struct with three-level hierarchy (global, session, request) - SettingApplicator for merging and applying settings - ConfigHotreloadMonitor for filesystem monitoring - 36 comprehensive tests covering: - Schema validation with allowed values - Override hierarchy (request > session > global > default) - Permission mode overrides per-session - Temperature/token overrides work correctly - Dynamic setting application mid-session - Settings propagation to all tools - Config hotreload detection - Default values and type validation - Non-overridable settings Size: ~750 LOC with tests References: - Issue #3325: [Slice 3.1] Config: Settings Override & Schema Validation - Crate: runtime (enhance existing config.rs) Co-authored-by: clawdbot <clawdbot@ultraworkers.dev>
docs: GJC compatibility gap matrix (updated)
…ion-registry feat(sdk): add operation registry and schema validation (#3321)
…ry-chaining feat(skills): implement bundled skills registry and chaining (#3324)
…ment pollution (#3347) The test explicit_model_provider_hint_controls_runtime_provider_dispatch was failing when OPENAI_BASE_URL was set in the environment to a non-standard URL (e.g., api.layofflabs.com). The test expects the OpenAI provider to use the default base URL (api.openai.com) when no explicit base_url is provided in the ProviderConfig. This fix adds an EnvVarGuard struct to the tests module and uses it to ensure OPENAI_BASE_URL is unset before running the test, preventing environment pollution from affecting the test result. Fixes: #3345 Co-authored-by: clawdbot <clawdbot@ultraworkers.dev>
style: cargo fmt (main red after #3346)
Co-authored-by: clawdbot <clawdbot@ultraworkers.dev>
…s test - Update client_integration.rs user-agent assertion to expect version 0.1.5 - Fix output_format_contract.rs /sandbox status expectation from 'warn' to 'ok'
The /sandbox status can be 'ok' (with namespace isolation) or 'warn' (in restricted environments like CI without unshare support). Update the test to accept either value rather than hard-coding an expectation.
release: v0.1.5
* feat(sdk): implement session lifecycle and reconciliation * fix(sdk): serialize session lifecycle recovery * fix(sdk): preserve lifecycle outcomes and output --------- Co-authored-by: clawdbot <clawdbot@ultraworkers.dev>
release: v0.1.6
The English README migrated the star-history chart/link from star-history.com / api.star-history.com to star-history.dera.page, but README.zh.md (last synced at d229a9b) still used the old domains. Update the 4 URLs so both language versions stay consistent.
push_output_block recorded a thinking event at content_block_start (an empty placeholder) and the stream loop recorded the full block again at content_block_stop. The empty duplicate was replayed on the next request and rejected with 400 "each thinking block must contain thinking". Only emit the event from the non-streaming path.
* fix(runtime): update model pricing table to current rates Align pricing_for_model with the published Anthropic pricing table: - default_sonnet_tier was $15/$75 (the old Opus rate); it is now the Sonnet 4.x rate of $3/$15, which is what the `sonnet` alias resolves to. - Add Sonnet 5 / 5.5, Haiku 5.5, Haiku 3.5, and Fable / Mythos rates. - Opus 4.5+ is $5/$25 and Opus 5.5 is $4/$20; Opus 4/4.1 keep the $15/$75 tier they are still billed at on Bedrock and Google Cloud. Versions are parsed from the model id so dated, provider-prefixed, and Vertex-style ids resolve to the right tier. Haiku 5.5's >100K-token tier is not modeled because usage is aggregated across requests. * fix(runtime): add DeepSeek API pricing DeepSeek models fell back to default_sonnet_tier ($3/$15 per MTok), overestimating V4 Flash by about 10x on input and 12x on output. Price the ids served by the DeepSeek API at peak rates: deepseek-v4-pro at $1.32/$3.96, and deepseek-flash, deepseek-v4-flash and the retired deepseek-chat / deepseek-reasoner aliases at $0.30/$1.20. Off-peak usage is billed at half. Other DeepSeek models on third-party hosts keep the default because their prices vary by host.
…ng (#3356) std::env::vars() panics on any non-UTF-8 value. zsh exports a metafied $_ when the command path contains non-ASCII characters (e.g. 下載), so claw panicked on startup. Use vars_os() and skip entries that are not valid UTF-8.
…ial hint Merge PR #3360 from c01dsummer/claw-code (fix/roadmap-835-838) Four fixes addressing issues #3361 and #3360: 1. Parallel tool-result pairing (835): The Anthropic Messages API requires all tool results of a turn to be in a single message. When a turn issued two tool calls at once, the results were sent in separate messages, causing a 400 error. Fixed by merging adjacent tool-result-only messages into one. 2. Terminal-scope path limit (836): Correlation keys up to 512 bytes expanded to 1024+ hex characters, exceeding APFS's 1024-byte total path limit. Fixed by using SHA256 digest (32 hex chars) for path components while storing the full key in the record for exact matching. 3. Credential hint (838): When ANTHROPIC_BASE_URL points to a non-Anthropic endpoint (DeepSeek, corporate gateways), the missing-credentials error now explains that the endpoint expects its own credentials, not Anthropic's. 4. ROADMAP entries: Documents all three fixes with verification details. All tests pass (370+ for rusty-claude-cli, 240+ for sdk, 122+ for tools, 209+ for api). Formatting verified with cargo fmt. CI checks approved and passed. Fixes #3361, #3360
Models from the OpenAI-compatible providers fell back to default_sonnet_tier ($3/$15 per MTok), so e.g. gpt-5.4-nano was estimated at 15x its input price and qwen-plus at about 26x. Add a table of published rates keyed by model id, matching dated snapshots and -latest aliases: - OpenAI standard tier for current gpt-6 / gpt-5.x / gpt-4.1 / gpt-4o and o-series models (Responses-only pro models are omitted). - xAI grok-4.x and grok-build. Slugs retired on 2026-05-15 (grok-3, grok-4-0709, grok-4-fast-*, grok-4-1-fast-*) are billed at grok-4.3 rates, and grok-code-fast-* is served as grok-build. - DashScope qwen-max, qwen-plus, qwen-flash and kimi-k2.5 at China (Beijing) rates, which is claw's default DashScope endpoint, with non-thinking output and the 20% implicit-cache hit rate. Long-context and higher input tiers use the base rate because usage is aggregated across requests.
The environment section rendered "Model family: Claude Opus 4.6" for every Anthropic model, so claude-opus-5-5, claude-sonnet-4-6, and any other Claude model told users it was Opus 4.6. Render a neutral "Claude" family label followed by the resolved model ID, and rebuild the system prompt on /model so the line follows a mid-session switch instead of keeping the startup model.
release: v0.1.7
…r search engine self-links (#3365) * Fix issue #3364: web search returns error on non-2xx response and filters search engine self-links - Add HTTP status code check to execute_web_search: return error if response is not 2xx instead of proceeding with potentially junk results (e.g., DuckDuckGo challenge pages) - Filter out links pointing back to the search engine host in extract_search_hits_from_generic_links to avoid returning search engine self-links when no proper search results are found - Add regression tests for both scenarios Refs #3364 * fix: implement registrable domain filtering and error on 202/blocked responses - Replace exact host matching with registrable domain comparison to properly filter search engine self-links across subdomains (e.g., html.duckduckgo.com vs duckduckgo.com) - Add error handling for 2xx responses with no search results (e.g., 202 challenge pages from blocked search providers) - Add regression tests for both 202 challenge page and mixed self-link scenarios - Remove unrelated Cargo.lock version bumps (revert to 0.1.6) Fixes #3364 * fix(tools): reject DuckDuckGo 202 challenge pages and drop search-engine links The challenge page arrives as HTTP 202, which is_success() accepts, and its links point at duckduckgo.com while the request goes to html.duckduckgo.com, so the previous filter kept them. Only a 200 page is parsed now, and the generic fallback drops any duckduckgo.com link or link to the configured search host. Removes the registrable-domain heuristic and the 'no hits is an error' path (a real query can legitimately return nothing), and replaces tests that never exercised a self-link with ones that fail on the old code. Refs #3364 --------- Co-authored-by: clawdbot <clawdbot@ultraworkers.dev>
release: v0.1.8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )