one-code-extension 0.4.0 → 0.5.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/README.md +219 -219
- package/agents/general-purpose.md +2 -2
- package/docs/guide/README.md +2 -1
- package/docs/guide/bring-your-claude-code-setup.md +60 -9
- package/docs/guide/configuration.md +48 -14
- package/docs/guide/differences-from-claude-code.md +32 -23
- package/docs/guide/doctor.md +20 -13
- package/docs/guide/hooks.md +18 -3
- package/docs/guide/installation.md +27 -4
- package/docs/guide/permissions-modes-and-auto-mode.md +225 -49
- package/docs/guide/providers-and-models.md +137 -54
- package/docs/guide/reference.md +27 -15
- package/docs/guide/sessions-and-context.md +69 -16
- package/docs/guide/skills-plugins-and-mcp.md +57 -20
- package/docs/guide/subagents-and-workflows.md +95 -29
- package/docs/guide/tasks-and-background-work.md +101 -26
- package/docs/guide/terminal-interface.md +24 -12
- package/docs/guide/tools.md +46 -5
- package/docs/guide/troubleshooting.md +13 -9
- package/docs/guide/windows.md +66 -34
- package/extensions/artifacts/gallery.ts +227 -0
- package/extensions/artifacts/index.ts +288 -0
- package/extensions/artifacts/store.ts +570 -0
- package/extensions/artifacts/viewer.ts +199 -0
- package/extensions/ask-user/description.ts +67 -0
- package/extensions/ask-user/dialogs.ts +80 -0
- package/extensions/ask-user/index.ts +37 -33
- package/extensions/ask-user/questions.ts +32 -7
- package/extensions/ask-user/widget.ts +45 -25
- package/extensions/auto-mode/actions.ts +6 -0
- package/extensions/auto-mode/cache.ts +88 -0
- package/extensions/auto-mode/classifier-prompt.ts +5 -4
- package/extensions/auto-mode/classifier.ts +290 -65
- package/extensions/auto-mode/config.ts +72 -20
- package/extensions/auto-mode/decision-log.ts +2 -0
- package/extensions/auto-mode/defaults.ts +1 -1
- package/extensions/auto-mode/denials.ts +123 -0
- package/extensions/auto-mode/git-checkout-programs.ts +187 -0
- package/extensions/auto-mode/git-status-meta.ts +159 -0
- package/extensions/auto-mode/history.ts +189 -0
- package/extensions/auto-mode/instructions.ts +58 -52
- package/extensions/auto-mode/model-select.ts +159 -134
- package/extensions/auto-mode/paths.ts +57 -5
- package/extensions/auto-mode/pause.ts +57 -2
- package/extensions/auto-mode/prompt.ts +37 -21
- package/extensions/auto-mode/read-only-options.ts +724 -0
- package/extensions/auto-mode/resolved-paths-meta.ts +133 -0
- package/extensions/auto-mode/rules.ts +18 -1
- package/extensions/auto-mode/safety-floor.ts +361 -18
- package/extensions/auto-mode/setup-run.ts +20 -14
- package/extensions/auto-mode/shell-analysis.ts +764 -490
- package/extensions/auto-mode/shell-parse.ts +885 -0
- package/extensions/auto-mode/system-note.ts +33 -0
- package/extensions/auto-mode/transcript.ts +80 -51
- package/extensions/background/cron.ts +515 -0
- package/extensions/background/index.ts +514 -236
- package/extensions/background/loop-fire.ts +136 -0
- package/extensions/background/loop-preamble.ts +59 -0
- package/extensions/background/loop-skill.ts +163 -0
- package/extensions/background/monitor-batch.ts +53 -0
- package/extensions/background/noop-fold.ts +128 -0
- package/extensions/background/switch-guard.ts +52 -0
- package/extensions/background/wakeup.ts +159 -55
- package/extensions/bash/background.ts +53 -17
- package/extensions/bash/child.ts +7 -0
- package/extensions/bash/description.ts +188 -0
- package/extensions/bash/guards.ts +15 -67
- package/extensions/bash/index.ts +88 -35
- package/extensions/branding/compaction-keep.ts +63 -0
- package/extensions/branding/declined.ts +22 -0
- package/extensions/branding/index.ts +133 -9
- package/extensions/branding/prompt-editor.ts +53 -6
- package/extensions/branding/queued-edit.ts +31 -0
- package/extensions/branding/replaced-builtins.ts +68 -0
- package/extensions/branding/startup.ts +33 -71
- package/extensions/btw/index.ts +229 -71
- package/extensions/btw/panel.ts +228 -100
- package/extensions/btw/prompt.ts +41 -4
- package/extensions/claude-compat/index.ts +7 -11
- package/extensions/claude-context/index.ts +446 -58
- package/extensions/compaction/cut.ts +157 -0
- package/extensions/compaction/index.ts +216 -75
- package/extensions/compaction/kept-thinking.ts +62 -0
- package/extensions/compaction/prompt.ts +15 -12
- package/extensions/context-budget/index.ts +24 -5
- package/extensions/context-management/index.ts +25 -0
- package/extensions/doctor/build.ts +59 -8
- package/extensions/doctor/builtins.ts +84 -0
- package/extensions/doctor/cli.ts +7 -1
- package/extensions/doctor/compat.ts +88 -23
- package/extensions/doctor/dependencies.ts +41 -5
- package/extensions/doctor/fix-prompt.ts +9 -2
- package/extensions/doctor/index.ts +102 -58
- package/extensions/doctor/models.ts +102 -63
- package/extensions/doctor/presets.ts +42 -27
- package/extensions/doctor/report.ts +19 -2
- package/extensions/doctor/viewer.ts +49 -27
- package/extensions/effort/index.ts +72 -19
- package/extensions/effort/settings.ts +21 -0
- package/extensions/effort/slider.ts +24 -20
- package/extensions/exit/index.ts +32 -1
- package/extensions/file-tracker/index.ts +337 -26
- package/extensions/file-tracker/replay.ts +96 -10
- package/extensions/file-tracker/restore.ts +63 -0
- package/extensions/file-tracker/results.ts +66 -0
- package/extensions/file-tracker/shell-reads.ts +211 -0
- package/extensions/file-tracker/tracker.ts +32 -15
- package/extensions/footer/footer-line.ts +45 -24
- package/extensions/footer/index.ts +47 -2
- package/extensions/footer/pr.ts +34 -5
- package/extensions/hooks/compaction.ts +7 -0
- package/extensions/hooks/executor.ts +32 -30
- package/extensions/hooks/index.ts +198 -31
- package/extensions/hooks/matcher.ts +3 -0
- package/extensions/hooks/protocol.ts +41 -3
- package/extensions/hooks/settings.ts +50 -19
- package/extensions/hooks/subagent-bridge.ts +2 -0
- package/extensions/hooks/trust.ts +13 -5
- package/extensions/idle-compact/index.ts +119 -0
- package/extensions/idle-compact/policy.ts +143 -0
- package/extensions/init/index.ts +11 -10
- package/extensions/init/prompt.ts +25 -32
- package/extensions/interrupted/index.ts +13 -1
- package/extensions/kept-thinking/index.ts +27 -0
- package/extensions/lib/agent-cron.ts +130 -0
- package/extensions/lib/agent-loader.ts +15 -1
- package/extensions/lib/agent-view.ts +85 -0
- package/extensions/lib/anthropic-payload.ts +82 -1
- package/extensions/lib/anthropic-server-call.ts +230 -0
- package/extensions/lib/anthropic-server-tools.ts +485 -0
- package/extensions/lib/app-launch.mjs +94 -0
- package/extensions/lib/argument-hints.ts +190 -0
- package/extensions/lib/atomic-write.ts +6 -2
- package/extensions/lib/auto-memory.ts +75 -0
- package/extensions/lib/bash-parser.ts +84 -0
- package/extensions/lib/btw-fork.ts +93 -0
- package/extensions/lib/child-extensions.ts +42 -0
- package/extensions/lib/child-writes.ts +45 -0
- package/extensions/lib/claude-context.ts +515 -100
- package/extensions/lib/claude-external-includes.ts +68 -0
- package/extensions/lib/claude-id.ts +22 -0
- package/extensions/lib/claude-rules.ts +323 -0
- package/extensions/lib/claude-settings.ts +76 -4
- package/extensions/lib/compaction-boundary.ts +36 -0
- package/extensions/lib/compaction-keep.mjs +83 -0
- package/extensions/lib/config-mode.ts +112 -0
- package/extensions/lib/consent-dialogs.ts +63 -0
- package/extensions/lib/consent-preview.ts +5 -1
- package/extensions/lib/consent-stores.ts +48 -0
- package/extensions/lib/context-facts.ts +78 -0
- package/extensions/lib/context-stack.ts +81 -0
- package/extensions/lib/deferred.ts +219 -25
- package/extensions/lib/dock-rows.ts +60 -0
- package/extensions/lib/empty-tool-result.ts +27 -0
- package/extensions/lib/environment-block.ts +76 -0
- package/extensions/lib/fetch-timeout.ts +24 -6
- package/extensions/{system-prompt → lib}/git-status.ts +51 -13
- package/extensions/lib/git.ts +75 -13
- package/extensions/lib/grammars/LICENSE-tree-sitter-bash +21 -0
- package/extensions/lib/grammars/README.md +2 -0
- package/extensions/lib/grammars/tree-sitter-bash.wasm +0 -0
- package/extensions/lib/guide-docs.ts +45 -0
- package/extensions/lib/headless-output.ts +46 -0
- package/extensions/lib/hook-gate.ts +7 -7
- package/extensions/lib/interrupt.ts +20 -4
- package/extensions/lib/key-input.ts +455 -0
- package/extensions/lib/keys.ts +14 -1
- package/extensions/lib/local-command.ts +47 -13
- package/extensions/lib/mcp-overrides.ts +1 -1
- package/extensions/lib/mcp-share.ts +46 -0
- package/extensions/lib/memory-content.ts +146 -0
- package/extensions/lib/memory-index.ts +18 -0
- package/extensions/lib/memory.ts +134 -123
- package/extensions/lib/model-catalog/huggingface.json +174 -0
- package/extensions/lib/model-catalog/models-dev.json +18297 -0
- package/extensions/lib/model-catalog/openrouter.json +5252 -0
- package/extensions/lib/model-catalog-data.ts +513 -0
- package/extensions/lib/model-catalog.ts +462 -0
- package/extensions/lib/model-choice-warnings.ts +137 -0
- package/extensions/lib/model-pairings.ts +152 -0
- package/extensions/{auto-mode → lib}/model-picker.ts +26 -43
- package/extensions/lib/model-policy.ts +112 -15
- package/extensions/lib/model-tier.ts +283 -355
- package/extensions/lib/model-unusable.ts +1 -1
- package/extensions/lib/newer-model.ts +100 -0
- package/extensions/lib/notices.ts +87 -0
- package/extensions/lib/notifications.ts +308 -64
- package/extensions/lib/one-code-settings.ts +74 -8
- package/extensions/lib/open-browser.ts +63 -0
- package/extensions/lib/openrouter-generation.ts +94 -0
- package/extensions/lib/operation-deadline.ts +30 -0
- package/extensions/lib/original-command.ts +4 -4
- package/extensions/lib/package-version.ts +1 -1
- package/extensions/lib/panel-focus.ts +134 -0
- package/extensions/lib/paths.ts +17 -2
- package/extensions/lib/permission-gate.ts +72 -6
- package/extensions/lib/persisted-output.ts +60 -8
- package/extensions/lib/pi-ai-estimate.ts +19 -3
- package/extensions/lib/pi-version.ts +21 -2
- package/extensions/lib/plan-mode-channels.ts +20 -5
- package/extensions/lib/plugins.ts +26 -17
- package/extensions/lib/powershell-parse-script.ts +208 -0
- package/extensions/lib/powershell-parser.ts +344 -0
- package/extensions/lib/process-tree.ts +131 -8
- package/extensions/lib/prompt-options.ts +82 -0
- package/extensions/lib/queued-delivery.ts +44 -0
- package/extensions/lib/reminders.ts +364 -58
- package/extensions/lib/replaced-builtins.mjs +199 -0
- package/extensions/lib/replay-call.ts +70 -0
- package/extensions/lib/request-replay.ts +439 -0
- package/extensions/lib/scratchpad.ts +81 -14
- package/extensions/lib/send-now-channel.ts +7 -0
- package/extensions/lib/session-model-tier.ts +51 -0
- package/extensions/lib/session-work.ts +64 -0
- package/extensions/lib/settings-channels.ts +4 -4
- package/extensions/lib/shell-exit-semantics.ts +170 -0
- package/extensions/lib/shell-quote.ts +11 -0
- package/extensions/lib/shell-result.ts +70 -0
- package/extensions/lib/shell-spawn.ts +70 -6
- package/extensions/lib/shell-tool.ts +75 -25
- package/extensions/lib/side-call-cache.ts +124 -0
- package/extensions/lib/side-call-run.ts +96 -0
- package/extensions/lib/side-call-usage.ts +38 -0
- package/extensions/lib/side-call.ts +13 -1
- package/extensions/lib/single-flight.ts +18 -0
- package/extensions/lib/skill-body.ts +42 -0
- package/extensions/lib/skill-scan.ts +63 -24
- package/extensions/lib/spill-file.ts +140 -0
- package/extensions/lib/subagent-handback.ts +113 -0
- package/extensions/lib/system-role.ts +156 -0
- package/extensions/lib/terminal-text.ts +114 -0
- package/extensions/lib/text-width.ts +47 -16
- package/extensions/lib/timer-ops.ts +20 -0
- package/extensions/lib/tool-additions.ts +149 -0
- package/extensions/lib/tool-call-corruption.ts +134 -0
- package/extensions/lib/tool-path.ts +66 -0
- package/extensions/lib/tool-variants.ts +69 -0
- package/extensions/lib/tui-render.ts +255 -27
- package/extensions/lib/turn-budget-layout.ts +143 -0
- package/extensions/lib/update-check.mjs +15 -2
- package/extensions/lib/usage-bus.ts +1 -1
- package/extensions/lib/user-denial.ts +38 -0
- package/extensions/lib/workspace-channel.ts +16 -0
- package/extensions/lib/worktree-channel.ts +31 -3
- package/extensions/lib/worktree-isolation.ts +40 -10
- package/extensions/lsp/client.ts +8 -9
- package/extensions/lsp/index.ts +70 -4
- package/extensions/lsp/keep-alive.ts +1 -1
- package/extensions/lsp/trust.ts +119 -0
- package/extensions/lsp/watcher.ts +1 -1
- package/extensions/mcp/announce.ts +87 -5
- package/extensions/mcp/client.ts +161 -48
- package/extensions/mcp/config.ts +132 -8
- package/extensions/mcp/discovery.ts +19 -0
- package/extensions/mcp/index.ts +209 -71
- package/extensions/mcp/oauth/browser.ts +38 -17
- package/extensions/mcp/oauth/flow.ts +25 -17
- package/extensions/mcp/oauth/provider.ts +14 -8
- package/extensions/mcp/oauth/store.ts +34 -16
- package/extensions/mcp/panel/keys.ts +12 -11
- package/extensions/mcp/panel/render.ts +9 -6
- package/extensions/mcp/schema.ts +104 -5
- package/extensions/mcp/trust.ts +151 -67
- package/extensions/memory/entries.ts +23 -14
- package/extensions/memory/index.ts +134 -28
- package/extensions/memory/open-external.ts +33 -18
- package/extensions/memory/panel.ts +135 -26
- package/extensions/newer-model/index.ts +31 -0
- package/extensions/notebook/description.ts +18 -0
- package/extensions/notebook/index.ts +6 -5
- package/extensions/notebook/notebook.ts +1 -1
- package/extensions/permissions/index.ts +1300 -381
- package/extensions/permissions/matcher.ts +425 -74
- package/extensions/permissions/modes.ts +6 -4
- package/extensions/permissions/panel/host.ts +130 -0
- package/extensions/permissions/panel/keys.ts +48 -0
- package/extensions/permissions/panel/render.ts +450 -0
- package/extensions/permissions/panel/state.ts +550 -0
- package/extensions/permissions/powershell-cmdlets.ts +198 -0
- package/extensions/permissions/powershell-paths.ts +197 -0
- package/extensions/permissions/powershell-rules.ts +207 -280
- package/extensions/permissions/powershell-tree.ts +557 -0
- package/extensions/permissions/project-trust.ts +27 -11
- package/extensions/permissions/protected-paths.ts +14 -2
- package/extensions/permissions/session-grant.ts +6 -0
- package/extensions/permissions/settings.ts +166 -31
- package/extensions/permissions/subagent-gate.ts +25 -0
- package/extensions/permissions/workspace.ts +78 -0
- package/extensions/plan-mode/index.ts +156 -69
- package/extensions/plan-mode/reminder.ts +89 -21
- package/extensions/plan-mode/texts.ts +177 -0
- package/extensions/plan-mode/viewer.ts +92 -27
- package/extensions/plugins/counts.ts +3 -3
- package/extensions/plugins/index.ts +61 -46
- package/extensions/plugins/install/install.ts +16 -0
- package/extensions/plugins/marketplace/sync.ts +9 -3
- package/extensions/plugins/marketplace/types.ts +3 -1
- package/extensions/plugins/panel/keys.ts +21 -24
- package/extensions/plugins/panel/render.ts +12 -6
- package/extensions/plugins/shell-expand.ts +107 -0
- package/extensions/plugins/template.ts +32 -15
- package/extensions/powershell/child.ts +7 -0
- package/extensions/powershell/description.ts +38 -6
- package/extensions/powershell/guards.ts +1 -1
- package/extensions/powershell/index.ts +12 -7
- package/extensions/recap/index.ts +65 -60
- package/extensions/recap/prompt.ts +2 -2
- package/extensions/recap/scheduler.ts +3 -5
- package/extensions/search-tools/grep-merge.ts +39 -0
- package/extensions/search-tools/index.ts +0 -0
- package/extensions/send-now/chord.ts +62 -0
- package/extensions/send-now/index.ts +133 -0
- package/extensions/session-title/index.ts +3 -0
- package/extensions/session-title/title.ts +4 -1
- package/extensions/skill/code-review.ts +97 -0
- package/extensions/skill/index.ts +421 -101
- package/extensions/skill/invoke.ts +128 -18
- package/extensions/skill/listing.ts +133 -9
- package/extensions/skill/panel/keys.ts +15 -16
- package/extensions/skill/panel/render.ts +5 -2
- package/extensions/skill/panel/state.ts +12 -1
- package/extensions/subagents/agent-args.ts +39 -0
- package/extensions/subagents/agent-description.ts +132 -0
- package/extensions/subagents/agents.ts +116 -23
- package/extensions/subagents/announce.ts +69 -0
- package/extensions/subagents/default-model.ts +2 -3
- package/extensions/subagents/delegation-steer.ts +4 -4
- package/extensions/subagents/fork-cache.ts +76 -0
- package/extensions/subagents/guide-agent.ts +189 -0
- package/extensions/subagents/hand-back-review.ts +3 -0
- package/extensions/subagents/index.ts +1493 -824
- package/extensions/subagents/live-runs.ts +26 -6
- package/extensions/subagents/model-select.ts +38 -25
- package/extensions/subagents/outcome.ts +2 -2
- package/extensions/subagents/panel-keys.ts +73 -31
- package/extensions/subagents/panel-render.ts +120 -96
- package/extensions/subagents/panel-widget.ts +60 -89
- package/extensions/subagents/runner.ts +108 -80
- package/extensions/subagents/runs.ts +39 -5
- package/extensions/subagents/send-to-main-tool.ts +1 -1
- package/extensions/subagents/session-turns.ts +32 -8
- package/extensions/subagents/shell-panel.ts +36 -178
- package/extensions/subagents/tasks-dialog.ts +170 -0
- package/extensions/subagents/viewport-mirror.ts +95 -0
- package/extensions/subagents/worktree.ts +57 -13
- package/extensions/system-prompt/environment.ts +19 -19
- package/extensions/system-prompt/idle-turn.ts +65 -0
- package/extensions/system-prompt/index.ts +131 -47
- package/extensions/system-prompt/template.ts +24 -50
- package/extensions/system-prompt/tiers/common.ts +23 -64
- package/extensions/system-prompt/tiers/frontier.ts +32 -11
- package/extensions/system-prompt/tiers/low.ts +67 -45
- package/extensions/system-prompt/tiers/mid.ts +96 -38
- package/extensions/system-reminder/index.ts +175 -13
- package/extensions/tasks/descriptions.ts +190 -0
- package/extensions/tasks/index.ts +120 -41
- package/extensions/tasks/store.ts +83 -16
- package/extensions/tool-call-corruption/child.ts +7 -0
- package/extensions/tool-call-corruption/index.ts +237 -0
- package/extensions/tool-search/announce.ts +16 -0
- package/extensions/tool-search/index.ts +189 -41
- package/extensions/tool-style/index.ts +68 -10
- package/extensions/tool-style/write-description.ts +40 -0
- package/extensions/tool-style/write-render.ts +237 -0
- package/extensions/turn-duration/index.ts +7 -3
- package/extensions/turn-duration/line.ts +47 -4
- package/extensions/web/backends.ts +6 -9
- package/extensions/web/description.ts +50 -0
- package/extensions/web/index.ts +118 -53
- package/extensions/web/native-call.ts +15 -0
- package/extensions/web/native-results.ts +41 -0
- package/extensions/web-fetch/description.ts +42 -0
- package/extensions/web-fetch/extract.ts +53 -6
- package/extensions/web-fetch/index.ts +125 -76
- package/extensions/web-fetch/page-content.ts +19 -0
- package/extensions/web-fetch/response.ts +49 -0
- package/extensions/web-fetch/summarize.ts +9 -10
- package/extensions/workflow/agent-session.ts +105 -18
- package/extensions/workflow/args.ts +24 -0
- package/extensions/workflow/description.ts +67 -0
- package/extensions/workflow/globals.ts +17 -3
- package/extensions/workflow/index.ts +145 -162
- package/extensions/workflow/records.ts +1 -0
- package/extensions/workflow/run-manager.ts +29 -6
- package/extensions/workflow/saved-workflows.ts +3 -2
- package/extensions/workflow/types.ts +22 -1
- package/extensions/workflow/viewer.ts +54 -24
- package/extensions/workflow/widget.ts +20 -0
- package/extensions/worktree/descriptions.ts +91 -0
- package/extensions/worktree/guards.ts +316 -54
- package/extensions/worktree/index.ts +121 -39
- package/extensions/worktree/powershell-guards.ts +167 -0
- package/extensions/worktree/rewrite.ts +14 -16
- package/package.json +19 -7
- package/skills/artifact-design/SKILL.md +85 -0
- package/skills/code-review/SKILL.md +20 -20
- package/skills/code-review/cells/arguments-and-flags.md +19 -0
- package/skills/code-review/cells/high-3x5-recall-verify.md +137 -0
- package/skills/code-review/cells/high-8-inline.md +122 -0
- package/skills/code-review/cells/low-1-pass-max4.md +27 -0
- package/skills/code-review/cells/low-1-pass-min-files-4.md +28 -0
- package/skills/code-review/cells/max-5x5-verify-sweep.md +162 -0
- package/skills/code-review/cells/medium-3x5-verify.md +132 -0
- package/skills/code-review/cells/minimal-prompt.md +32 -0
- package/skills/code-review/cells/xhigh-10-inline-sweep.md +149 -0
- package/skills/code-review/cells/xhigh-5x5-verify-sweep.md +162 -0
- package/skills/fewer-permission-prompts/SKILL.md +1 -1
- package/skills/loop/SKILL.md +11 -0
- package/skills/security-review/SKILL.md +2 -5
- package/skills/simplify/SKILL.md +7 -5
- package/skills/workflow-authoring/SKILL.md +143 -0
- package/themes/onecode-light.json +1 -1
- package/themes/onecode.json +1 -1
- package/types/app.d.ts +58 -0
- package/types/community-packages.d.ts +26 -1
- package/extensions/auto-mode/recoverability.ts +0 -229
- package/extensions/lib/capability-index.ts +0 -466
- package/extensions/lib/model-facts.generated.json +0 -2675
- package/extensions/lib/model-facts.ts +0 -162
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* borrows) and the keys it leaves alone. "Leaves alone" is stated per file
|
|
9
9
|
* because the answer differs by scope on purpose — a repository's own
|
|
10
10
|
* `.claude/settings.json` may not grant itself `auto` mode or configure the
|
|
11
|
-
* auto-mode classifier (docs/decisions/modes.md, auto-mode.md) — and a user
|
|
11
|
+
* auto-mode classifier (working-docs/decisions/modes.md, auto-mode.md) — and a user
|
|
12
12
|
* reading "works unchanged" must see exactly where it does not.
|
|
13
13
|
*
|
|
14
14
|
* Findings are the things silent elsewhere: a settings file that fails to
|
|
@@ -19,19 +19,22 @@
|
|
|
19
19
|
|
|
20
20
|
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
21
21
|
import { basename, join } from "node:path";
|
|
22
|
-
import { managedSettingsPaths } from "../auto-mode/config.ts";
|
|
23
22
|
import { loadPluginHooks } from "../hooks/plugin-hooks.ts";
|
|
24
23
|
import { type HooksSource, loadHookSettings } from "../hooks/settings.ts";
|
|
25
|
-
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
24
|
+
// Claude Code's auto-memory switch, read through the whole settings ladder.
|
|
25
|
+
import { AUTO_MEMORY_KEY as AUTO_MEMORY } from "../lib/auto-memory.ts";
|
|
26
|
+
import { CONFIG_MODE_KEY, claudeSourcesOn } from "../lib/config-mode.ts";
|
|
27
|
+
import { claudeJsonPath, claudeUserDir, oneCodeStateDir } from "../lib/paths.ts";
|
|
28
|
+
import { claudeUserSettingsPath, managedSettingsPaths, settingsPaths } from "../lib/claude-settings.ts";
|
|
29
|
+
import { discoverContextFilePaths, instructionRule } from "../lib/claude-context.ts";
|
|
30
|
+
import { CLAUDE_MD_CHAR_LIMIT, claudeMdLimitWarning, projectMemoryDir } from "../lib/memory.ts";
|
|
31
|
+
import { indexLimitStatus } from "../lib/memory-content.ts";
|
|
29
32
|
import { readDisabledMcpServers } from "../lib/mcp-overrides.ts";
|
|
30
33
|
import { oneCodeProjectSettingsPath, oneCodeSettingsPath } from "../lib/one-code-settings.ts";
|
|
31
34
|
import { parseFrontmatterLoosely } from "../lib/frontmatter.ts";
|
|
32
35
|
import { defaultDiscoverRoots, discoverPlugins, type DiscoveredPlugins } from "../lib/plugins.ts";
|
|
33
36
|
import { BUNDLED_SKILLS_DIR, promptTemplateNames, scanSkills } from "../lib/skill-scan.ts";
|
|
34
|
-
import { loadServers, type McpServer } from "../mcp/config.ts";
|
|
37
|
+
import { loadServers, type McpServer, piMcpConfigPaths, type RegisteredServer } from "../mcp/config.ts";
|
|
35
38
|
import type { PermissionMode } from "../permissions/matcher.ts";
|
|
36
39
|
import { MODES_NEVER_FROM_PROJECT } from "../permissions/settings.ts";
|
|
37
40
|
import { agentDirs, parseAgentFile } from "../subagents/agents.ts";
|
|
@@ -84,14 +87,43 @@ export interface CompatReport {
|
|
|
84
87
|
* (a checked-in env block must not route subagents).
|
|
85
88
|
*/
|
|
86
89
|
const MCP_POLICY_KEYS = ["enableAllProjectMcpServers", "enabledMcpjsonServers", "disabledMcpjsonServers"];
|
|
87
|
-
|
|
90
|
+
/** One Code's workflow keys, read from its user and project files (lib/one-code-settings.ts). */
|
|
91
|
+
const WORKFLOW_KEYS = ["enableWorkflows", "disableWorkflows", "workflowSizeGuideline"];
|
|
92
|
+
const CLAUDE_PROJECT_KEYS = new Set(["permissions", "hooks", "enabledPlugins", AUTO_MEMORY, ...MCP_POLICY_KEYS]);
|
|
88
93
|
const SCOPE_KEYS: Record<SettingsScope, ReadonlySet<string>> = {
|
|
89
|
-
"claude-user": new Set(["permissions", "hooks", "env", "enabledPlugins", "autoMode", ...MCP_POLICY_KEYS]),
|
|
94
|
+
"claude-user": new Set(["permissions", "hooks", "env", "enabledPlugins", "autoMode", AUTO_MEMORY, ...MCP_POLICY_KEYS]),
|
|
90
95
|
"claude-project": CLAUDE_PROJECT_KEYS,
|
|
91
96
|
"claude-local": CLAUDE_PROJECT_KEYS,
|
|
92
|
-
managed: new Set(["permissions", "hooks", "env", "autoMode", "enabledPlugins"]),
|
|
93
|
-
"onecode-user": new Set([
|
|
94
|
-
|
|
97
|
+
managed: new Set(["permissions", "hooks", "env", "autoMode", "enabledPlugins", AUTO_MEMORY]),
|
|
98
|
+
"onecode-user": new Set([
|
|
99
|
+
"subagentModel",
|
|
100
|
+
"subagentModelSetFor",
|
|
101
|
+
"autoMode",
|
|
102
|
+
"permissions",
|
|
103
|
+
"webSearch",
|
|
104
|
+
"disabledMcpServers",
|
|
105
|
+
// The /memory panel's two rows (lib/config-mode.ts, lib/auto-memory.ts).
|
|
106
|
+
CONFIG_MODE_KEY,
|
|
107
|
+
AUTO_MEMORY,
|
|
108
|
+
"modelTiers",
|
|
109
|
+
"suggestNewerModels",
|
|
110
|
+
"refreshModelCatalog",
|
|
111
|
+
"artifacts",
|
|
112
|
+
...WORKFLOW_KEYS,
|
|
113
|
+
// Remembered "No" answers to startup questions (branding/declined.ts).
|
|
114
|
+
"compactionKeepDeclined",
|
|
115
|
+
"piBuiltinsTurnOffDeclined",
|
|
116
|
+
]),
|
|
117
|
+
"onecode-project": new Set([
|
|
118
|
+
"permissions",
|
|
119
|
+
"disabledMcpServers",
|
|
120
|
+
AUTO_MEMORY,
|
|
121
|
+
...WORKFLOW_KEYS,
|
|
122
|
+
// The external CLAUDE.md includes answer, per repository (lib/claude-external-includes.ts).
|
|
123
|
+
"hasClaudeMdExternalIncludesApproved",
|
|
124
|
+
"hasClaudeMdExternalIncludesWarningShown",
|
|
125
|
+
"claudeMdExternalIncludesRoot",
|
|
126
|
+
]),
|
|
95
127
|
"claude-json": new Set(),
|
|
96
128
|
};
|
|
97
129
|
/** Never worth reporting as "ignored". */
|
|
@@ -146,7 +178,11 @@ function permissionsSummary(perms: unknown, scope: SettingsScope, findings: Find
|
|
|
146
178
|
}
|
|
147
179
|
}
|
|
148
180
|
if (p.disableBypassPermissionsMode === "disable") parts.push("bypass mode disabled");
|
|
149
|
-
if (p.additionalDirectories
|
|
181
|
+
if (Array.isArray(p.additionalDirectories) && p.additionalDirectories.length > 0) {
|
|
182
|
+
const dirs = p.additionalDirectories.length;
|
|
183
|
+
const fromRepo = scope === "claude-project" || scope === "claude-local";
|
|
184
|
+
parts.push(`${dirs} workspace director${dirs === 1 ? "y" : "ies"}${fromRepo ? " (applied once you trust the repository's settings)" : ""}`);
|
|
185
|
+
}
|
|
150
186
|
return { used: parts.length ? `permissions: ${parts.join("; ")}` : undefined, refused };
|
|
151
187
|
}
|
|
152
188
|
|
|
@@ -208,12 +244,13 @@ function summarizeFile(scope: SettingsScope, label: string, path: string, home:
|
|
|
208
244
|
const auto = file.autoMode as Json;
|
|
209
245
|
const keys = Object.keys(auto);
|
|
210
246
|
if (known.has("autoMode")) {
|
|
247
|
+
// `classifierModel` is One Code's own key, read from ~/.onecode only.
|
|
211
248
|
if (scope === "claude-user" && ("classifierModel" in auto || "classifierModelSetFor" in auto)) {
|
|
212
249
|
report.refused.push("autoMode.classifierModel — One Code's own key, read from ~/.onecode/settings.json only");
|
|
213
250
|
findings.push({
|
|
214
251
|
level: "warn",
|
|
215
|
-
text: `${shortenHome(path, home)} carries autoMode.classifierModel, a One Code key
|
|
216
|
-
fix: "
|
|
252
|
+
text: `${shortenHome(path, home)} carries autoMode.classifierModel, a One Code key read only from ~/.onecode/settings.json; the value here is ignored.`,
|
|
253
|
+
fix: "Set it with /auto-mode model (which writes ~/.onecode/settings.json) and delete the stale key from ~/.claude/settings.json.",
|
|
217
254
|
});
|
|
218
255
|
}
|
|
219
256
|
const consumed = keys.filter((k) => !(scope === "claude-user" && (k === "classifierModel" || k === "classifierModelSetFor")));
|
|
@@ -237,6 +274,7 @@ function summarizeFile(scope: SettingsScope, label: string, path: string, home:
|
|
|
237
274
|
});
|
|
238
275
|
}
|
|
239
276
|
if (scope === "onecode-user") {
|
|
277
|
+
if (typeof file.configMode === "string") report.used.push(`configMode "${file.configMode}" (/memory config sources)`);
|
|
240
278
|
if (typeof file.subagentModel === "string") report.used.push(`subagentModel "${file.subagentModel}"`);
|
|
241
279
|
if (file.webSearch && typeof file.webSearch === "object") report.used.push("webSearch (keys/order for the search fallback)");
|
|
242
280
|
}
|
|
@@ -244,6 +282,7 @@ function summarizeFile(scope: SettingsScope, label: string, path: string, home:
|
|
|
244
282
|
if (key in file && known.has(key)) report.used.push(`${key}: ${Array.isArray(file[key]) ? count(file[key]) : String(file[key])}`);
|
|
245
283
|
}
|
|
246
284
|
if ("disabledMcpServers" in file && known.has("disabledMcpServers")) report.used.push(`disabledMcpServers: ${count(file.disabledMcpServers)} (via /mcp disable)`);
|
|
285
|
+
if (typeof file[AUTO_MEMORY] === "boolean" && known.has(AUTO_MEMORY)) report.used.push(`${AUTO_MEMORY}: ${file[AUTO_MEMORY]}`);
|
|
247
286
|
|
|
248
287
|
for (const key of Object.keys(file)) {
|
|
249
288
|
if (known.has(key) || SILENT_KEYS.has(key) || handled.has(key)) continue;
|
|
@@ -279,6 +318,10 @@ export interface CompatInput {
|
|
|
279
318
|
env: NodeJS.ProcessEnv;
|
|
280
319
|
/** `<package>/agents`, so bundled agents are counted. */
|
|
281
320
|
bundledAgentsDir?: string;
|
|
321
|
+
/** pi's `CONFIG_DIR_NAME` (`.pi` when absent): where the project's pi `mcp.json` is. */
|
|
322
|
+
piConfigDirName?: string;
|
|
323
|
+
/** MCP servers other extensions registered, as the session loads them. */
|
|
324
|
+
registeredMcpServers?: readonly RegisteredServer[];
|
|
282
325
|
}
|
|
283
326
|
|
|
284
327
|
export function collectCompat(input: CompatInput): CompatReport {
|
|
@@ -287,22 +330,38 @@ export function collectCompat(input: CompatInput): CompatReport {
|
|
|
287
330
|
const claudeDir = claudeUserDir(home, env);
|
|
288
331
|
const claude = settingsPaths(cwd, home);
|
|
289
332
|
|
|
333
|
+
// Independent mode (lib/config-mode.ts) reads none of Claude Code's files, so
|
|
334
|
+
// none is opened here; an organisation's policy file it ignores is named.
|
|
335
|
+
const independent = !claudeSourcesOn();
|
|
290
336
|
const files: SettingsFileReport[] = [
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
337
|
+
...(independent
|
|
338
|
+
? []
|
|
339
|
+
: [
|
|
340
|
+
summarizeFile("claude-user", "Claude Code user settings", claudeUserSettingsPath(home), home, findings),
|
|
341
|
+
summarizeFile("claude-project", "project settings (checked in)", claude.project, home, findings),
|
|
342
|
+
summarizeFile("claude-local", "project settings (local)", claude.local, home, findings),
|
|
343
|
+
...managedSettingsPaths().map((path) => summarizeFile("managed", "managed settings (organisation policy)", path, home, findings)),
|
|
344
|
+
summarizeFile("claude-json", "Claude Code's .claude.json", claudeJsonPath(home, env), home, findings),
|
|
345
|
+
]),
|
|
296
346
|
summarizeFile("onecode-user", "One Code user settings", oneCodeSettingsPath(home, env), home, findings),
|
|
297
347
|
summarizeFile("onecode-project", "One Code per-repository settings", oneCodeProjectSettingsPath(cwd, home, env), home, findings),
|
|
298
348
|
];
|
|
349
|
+
if (independent) {
|
|
350
|
+
for (const path of managedSettingsPaths().filter((managed) => existsSync(managed))) {
|
|
351
|
+
findings.push({
|
|
352
|
+
level: "warn",
|
|
353
|
+
text: `An organisation policy file exists at ${path}, and independent mode does not apply it.`,
|
|
354
|
+
fix: "Switch config sources to Claude-compatible in /memory if this machine's policy must hold.",
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
}
|
|
299
358
|
|
|
300
359
|
// Context files, sized — the block every turn pays for.
|
|
301
360
|
const contextFiles: ContextFileReport[] = discoverContextFilePaths({
|
|
302
361
|
cwd,
|
|
303
362
|
homeClaudeDir: claudeDir,
|
|
304
|
-
homeOneCodeDir:
|
|
305
|
-
|
|
363
|
+
homeOneCodeDir: oneCodeStateDir(env, home),
|
|
364
|
+
rule: instructionRule(home),
|
|
306
365
|
}).map(({ path, descriptor }) => {
|
|
307
366
|
let chars = 0;
|
|
308
367
|
try {
|
|
@@ -401,7 +460,8 @@ export function collectCompat(input: CompatInput): CompatReport {
|
|
|
401
460
|
const hookDiagnostics: string[] = [];
|
|
402
461
|
const hooksLoaded = loadHookSettings(claudeDir, cwd);
|
|
403
462
|
hookDiagnostics.push(...hooksLoaded.diagnostics);
|
|
404
|
-
|
|
463
|
+
// Runtime dispatch skips plugin hooks when settings disable hooks; report what runs.
|
|
464
|
+
const pluginHooks = discovered && !hooksLoaded.disabled ? loadPluginHooks(defaultDiscoverRoots(agentDir, cwd, home), hookDiagnostics) : [];
|
|
405
465
|
const hookSources = [...hooksLoaded.sources, ...pluginHooks];
|
|
406
466
|
const hookCommands = hookSources.reduce(
|
|
407
467
|
(n, source) => n + Object.values(source.config).reduce((m, groups) => m + (groups ?? []).reduce((k, g) => k + g.hooks.length, 0), 0),
|
|
@@ -411,11 +471,16 @@ export function collectCompat(input: CompatInput): CompatReport {
|
|
|
411
471
|
|
|
412
472
|
// MCP.
|
|
413
473
|
const configErrors: string[] = [];
|
|
474
|
+
const configNotes: string[] = [];
|
|
414
475
|
const servers = loadServers(cwd, home, env, discovered?.mcpConfigs ?? [], {
|
|
415
476
|
pluginNames: discovered?.mcpConfigPlugins,
|
|
416
477
|
onError: (path, message) => configErrors.push(`${shortenHome(path, home)}: ${message}`),
|
|
478
|
+
piConfigs: piMcpConfigPaths(agentDir, cwd, input.piConfigDirName),
|
|
479
|
+
onNote: (message) => configNotes.push(message),
|
|
480
|
+
registered: input.registeredMcpServers,
|
|
417
481
|
});
|
|
418
482
|
for (const error of configErrors) findings.push({ level: "error", text: `MCP config ${error} — its servers are not loaded.`, fix: "Fix the JSON and run /mcp reconnect." });
|
|
483
|
+
for (const note of configNotes) findings.push({ level: "warn", text: note });
|
|
419
484
|
for (const server of servers) {
|
|
420
485
|
if (server.missingEnv?.length) {
|
|
421
486
|
findings.push({
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
* providers it depends on a third-party key.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import { existsSync } from "node:fs";
|
|
14
|
+
import { type Dirent, existsSync, readdirSync } from "node:fs";
|
|
15
15
|
import { join } from "node:path";
|
|
16
16
|
import { whichOnPath } from "../lib/which.ts";
|
|
17
17
|
import type { Api, Model } from "@earendil-works/pi-ai";
|
|
18
18
|
import { getProviderKind } from "pi-web-search/src/api.ts";
|
|
19
19
|
import { installHint, serverInstallHint } from "../lsp/install-hints.ts";
|
|
20
|
-
import { SERVERS } from "../lsp/servers.ts";
|
|
20
|
+
import { languageIdForPath, SERVERS } from "../lsp/servers.ts";
|
|
21
21
|
import { typescriptPreflight } from "../lsp/servers.ts";
|
|
22
22
|
import type { McpServer } from "../mcp/config.ts";
|
|
23
23
|
import { BRAVE_KEY_ENV, resolveChain, TAVILY_KEY_ENV, type WebSearchSettings } from "../web/backends.ts";
|
|
@@ -44,13 +44,49 @@ export interface DependencyReport {
|
|
|
44
44
|
findings: Finding[];
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
/**
|
|
47
|
+
/** Folders the language scan never enters: dependencies, build output, virtual environments. */
|
|
48
|
+
const SCAN_SKIP = new Set(["node_modules", "vendor", "dist", "build", "out", "target", "venv", "env", "__pycache__", "coverage"]);
|
|
49
|
+
const SCAN_MAX_DEPTH = 4;
|
|
50
|
+
const SCAN_MAX_ENTRIES = 5000;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Languages the working directory contains: by the LSP table's own root
|
|
54
|
+
* markers, or by a source file the language server would open. The file scan
|
|
55
|
+
* is bounded (a few levels deep, a few thousand entries, no dot, dependency
|
|
56
|
+
* or build folders), so a project with `.py` files and no `pyproject.toml`,
|
|
57
|
+
* or TypeScript under `web/src`, still counts.
|
|
58
|
+
*/
|
|
48
59
|
export function projectLanguages(cwd: string): string[] {
|
|
49
60
|
const seen = new Map<string, string>(); // command → languageId (one per server binary)
|
|
50
61
|
for (const [languageId, config] of Object.entries(SERVERS)) {
|
|
51
62
|
if (seen.has(config.command)) continue;
|
|
52
63
|
if (config.rootMarkers.some((marker) => existsSync(join(cwd, marker)))) seen.set(config.command, languageId);
|
|
53
64
|
}
|
|
65
|
+
// One entry per server binary: the walk stops once every one is accounted for.
|
|
66
|
+
const servers = new Set(Object.values(SERVERS).map((config) => config.command)).size;
|
|
67
|
+
if (seen.size < servers) {
|
|
68
|
+
let visited = 0;
|
|
69
|
+
const walk = (dir: string, depth: number): void => {
|
|
70
|
+
let entries: Dirent[];
|
|
71
|
+
try {
|
|
72
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
73
|
+
} catch {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
for (const entry of entries) {
|
|
77
|
+
if (++visited > SCAN_MAX_ENTRIES || seen.size === servers) return;
|
|
78
|
+
if (entry.name.startsWith(".")) continue;
|
|
79
|
+
if (entry.isDirectory()) {
|
|
80
|
+
if (depth < SCAN_MAX_DEPTH && !SCAN_SKIP.has(entry.name)) walk(join(dir, entry.name), depth + 1);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const languageId = languageIdForPath(entry.name);
|
|
84
|
+
const config = languageId ? SERVERS[languageId] : undefined;
|
|
85
|
+
if (languageId && config && !seen.has(config.command)) seen.set(config.command, languageId);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
walk(cwd, 0);
|
|
89
|
+
}
|
|
54
90
|
return [...seen.values()];
|
|
55
91
|
}
|
|
56
92
|
|
|
@@ -112,8 +148,8 @@ export function checkDependencies(input: DependencyInput): DependencyReport {
|
|
|
112
148
|
const which = (command: string) => whichOnPath(command, env, platform);
|
|
113
149
|
|
|
114
150
|
const git = which("git");
|
|
115
|
-
checks.push({ name: "git", found: !!git, path: git, need: "required", reason: "repository detection, auto mode's
|
|
116
|
-
if (!git) findings.push({ level: "warn", text: "git is not on PATH: worktree isolation and auto mode's git
|
|
151
|
+
checks.push({ name: "git", found: !!git, path: git, need: "required", reason: "repository detection, auto mode's git status line for the classifier, worktree isolation", hint: "https://git-scm.com/downloads" });
|
|
152
|
+
if (!git) findings.push({ level: "warn", text: "git is not on PATH: worktree isolation and auto mode's git status line for the classifier are unavailable.", fix: "Install git and make sure it is on the PATH used to launch One Code." });
|
|
117
153
|
|
|
118
154
|
// pi downloads ripgrep into <agentDir>/bin on first run when PATH has none
|
|
119
155
|
// and puts that dir on the shell tools' PATH, so a copy there is "found".
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* - settings writes go to One Code's OWN files (`~/.onecode/settings.json`,
|
|
10
10
|
* `~/.onecode/projects/<slug>/settings.json`), never to `~/.claude`, which
|
|
11
|
-
* One Code treats as read-only (docs/decisions/memory-state.md);
|
|
11
|
+
* One Code treats as read-only (working-docs/decisions/memory-state.md);
|
|
12
12
|
* - session transcripts are pi's JSONL under `<agentDir>/sessions/`, not
|
|
13
13
|
* Claude Code's `~/.claude/projects/`, and there are no usage counters, so
|
|
14
14
|
* transcripts are the only usage signal;
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* Claude Code's ground rules (propose → confirm → apply in at most two
|
|
20
20
|
* questions; key-scoped reads; never inline harvested names into shell
|
|
21
21
|
* commands; transcripts are untrusted data; write for a first-time user) are
|
|
22
|
-
* kept in substance. Rationale: docs/decisions/doctor.md.
|
|
22
|
+
* kept in substance. Rationale: working-docs/decisions/doctor.md.
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
25
|
import { modeCycleKey } from "../lib/keys.ts";
|
|
@@ -38,8 +38,14 @@ export interface FixPromptInput {
|
|
|
38
38
|
oneCodeProjectSettingsPath: string;
|
|
39
39
|
/** True when auto mode is writing `auto-mode-decisions.jsonl` next to the session files. */
|
|
40
40
|
decisionLogEnabled: boolean;
|
|
41
|
+
/** True in independent mode (lib/config-mode.ts), where none of Claude Code's files are read. */
|
|
42
|
+
independent?: boolean;
|
|
41
43
|
}
|
|
42
44
|
|
|
45
|
+
/** The ground rule that maps the Claude Code paths the prompt names to independent mode's own. */
|
|
46
|
+
const INDEPENDENT_RULE =
|
|
47
|
+
"- **This session runs in independent mode.** One Code reads none of the Claude Code locations named below (`~/.claude`, `.claude/`, `CLAUDE.md`, `CLAUDE.local.md`, `~/.claude.json`, `.mcp.json`, managed settings). Read each as its One Code counterpart: instructions are `AGENTS.md` and `ONECODE.md`, skills come from `.agents/skills` and pi's skill folders, agents, commands and workflows from `.onecode/` and `~/.onecode/`, settings and hooks from One Code's two settings files, and MCP servers from pi's `mcp.json` files. Propose changes only to those.\n";
|
|
48
|
+
|
|
43
49
|
export function doctorFixPrompt(input: FixPromptInput): string {
|
|
44
50
|
const versionCommand =
|
|
45
51
|
input.install === "app"
|
|
@@ -64,6 +70,7 @@ Treat every line of that report as measured fact. Your job on those sections is
|
|
|
64
70
|
|
|
65
71
|
## Ground rules
|
|
66
72
|
|
|
73
|
+
${input.independent ? INDEPENDENT_RULE : ""}
|
|
67
74
|
- **Propose, then confirm, then apply — and recommend, don't just offer.** Run every check read-only first and present the full report. Then confirm in at most TWO questions with the \`ask_user_question\` tool — never a question per check. (1) ONE consolidated cleanup question covering checks 0-4 and 7: options "Clean up everything (recommended)" first, "Let me pick" second, "No, keep everything" last; only if the user picks "Let me pick", ask one follow-up multi-select with an option per action group (at most 4 options per question — split if there are more groups). (2) A SEPARATE permission question for check 9, never folded into the cleanup bundle: it changes what runs without asking, so it names every allow rule string it would add, and is skipped when nothing was proposed. Put the recommended action FIRST with "(recommended)" in its label and the decline option last. Never edit any file before its group is confirmed.
|
|
68
75
|
- **One Code never writes Claude Code's files.** \`~/.claude/settings.json\`, \`~/.claude.json\`, \`~/.claude/CLAUDE.md\` and the rest of \`~/.claude\` are a read-only compatibility surface here. Settings you change go to One Code's own files: \`${input.oneCodeSettingsPath}\` (user scope) and \`${input.oneCodeProjectSettingsPath}\` (this repository). Skills, plugins and MCP servers are toggled with One Code's commands (\`/skills\`, \`/plugins\`, \`/mcp\`), which persist under One Code's own state, not by editing Claude Code's settings. Only the CLAUDE.md checks (3 and 4) may propose edits to checked-in files, applied as ordinary working-tree edits the user reviews in \`git diff\` — never commit them yourself. \`CLAUDE.local.md\` and the project's own \`.claude/settings.local.json\` are local, uncommitted files and may be edited after confirmation.
|
|
69
76
|
- Token figures are estimates: tokens ≈ characters / 4. Label them "est." everywhere.
|