@namewta/speculo 2.0.5 → 2.1.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 +3 -0
- package/THIRD-PARTY-NOTICES.md +4 -0
- package/dist/src/agent-skills.d.ts +5 -0
- package/dist/src/agent-skills.js +10 -7
- package/dist/src/agent-skills.js.map +1 -1
- package/dist/src/cli.js +17 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/coordination.d.ts +3 -3
- package/dist/src/coordination.js +21 -4
- package/dist/src/coordination.js.map +1 -1
- package/dist/src/doctor.js +8 -1
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/external-files.d.ts +4 -2
- package/dist/src/external-files.js +4 -4
- package/dist/src/external-files.js.map +1 -1
- package/dist/src/hub-catalog.d.ts +11 -0
- package/dist/src/hub-catalog.js +91 -0
- package/dist/src/hub-catalog.js.map +1 -0
- package/dist/src/hub-resources.json +1 -0
- package/dist/src/hub-skills.d.ts +53 -0
- package/dist/src/hub-skills.js +157 -0
- package/dist/src/hub-skills.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +48 -47
- package/dist/src/index.js.map +1 -1
- package/dist/src/install-ui.d.ts +16 -0
- package/dist/src/install-ui.js +67 -11
- package/dist/src/install-ui.js.map +1 -1
- package/dist/src/manifest.d.ts +2 -0
- package/dist/src/manifest.js +2 -0
- package/dist/src/manifest.js.map +1 -1
- package/dist/src/refresh.d.ts +1 -0
- package/dist/src/refresh.js +13 -10
- package/dist/src/refresh.js.map +1 -1
- package/dist/src/retained-workflows.d.ts +10 -0
- package/dist/src/retained-workflows.js +25 -0
- package/dist/src/retained-workflows.js.map +1 -0
- package/dist/src/runtime-entry.d.ts +1 -0
- package/dist/src/runtime-entry.js +1 -0
- package/dist/src/runtime-entry.js.map +1 -1
- package/dist/src/skill-trees.d.ts +27 -0
- package/dist/src/skill-trees.js +118 -0
- package/dist/src/skill-trees.js.map +1 -0
- package/dist/src/transaction.d.ts +3 -14
- package/dist/src/transaction.js +20 -36
- package/dist/src/transaction.js.map +1 -1
- package/dist/src/workflow-install.d.ts +15 -0
- package/dist/src/workflow-install.js +104 -0
- package/dist/src/workflow-install.js.map +1 -0
- package/package.json +4 -2
- package/skills-hub/automation/grok-bot-team-steward/CHEATSHEET.md +17 -0
- package/skills-hub/automation/grok-bot-team-steward/INSTALL.md +23 -0
- package/skills-hub/automation/grok-bot-team-steward/LICENSE +21 -0
- package/skills-hub/automation/grok-bot-team-steward/README.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/SKILL.md +52 -0
- package/skills-hub/automation/grok-bot-team-steward/agents/openai.yaml +4 -0
- package/skills-hub/automation/grok-bot-team-steward/references/00-hard-rules.md +50 -0
- package/skills-hub/automation/grok-bot-team-steward/references/01-snapshot-schema.md +84 -0
- package/skills-hub/automation/grok-bot-team-steward/references/02-export-protocol.md +57 -0
- package/skills-hub/automation/grok-bot-team-steward/references/03-restore-protocol.md +64 -0
- package/skills-hub/automation/grok-bot-team-steward/references/04-inventory.md +37 -0
- package/skills-hub/automation/grok-bot-team-steward/references/05-conversations.md +71 -0
- package/skills-hub/automation/grok-bot-team-steward/references/06-sanitizer.md +39 -0
- package/skills-hub/automation/grok-bot-team-steward/references/07-prompts.md +87 -0
- package/skills-hub/automation/grok-bot-team-steward/references/08-verification.md +30 -0
- package/skills-hub/automation/grok-bot-team-steward/references/09-sources.md +31 -0
- package/skills-hub/automation/grok-bot-team-steward/scripts/scrub.sh +17 -0
- package/skills-hub/automation/grok-bot-team-steward/scripts/snapshot-name.sh +18 -0
- package/skills-hub/automation/grok-bot-team-steward/scripts/validate-snapshot.sh +62 -0
- package/skills-hub/automation/grok-bot-team-steward/steward/ACTIVATE.md +58 -0
- package/skills-hub/automation/grok-bot-team-steward/steward/SETUP-INSTRUCTIONS.md +33 -0
- package/skills-hub/automation/grok-bot-team-steward/steward/STEWARD-PROFILE.md +28 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/CHANGELOG.md +3 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/CHARTER.md +27 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/DROP-LIST.md +10 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/GAPS.md +6 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/INIT.md +14 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/MANIFEST.md +30 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/MANIFEST.yaml +20 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/ORG.md +15 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/README.md +8 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/RESTORE.md +13 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/ROSTER.md +11 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/GAPS.md +7 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/MEMORY.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/PROFILE.md +27 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/agent-spec.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/conversations/INDEX.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/conversations/main.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/routines.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/skills.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/connectors.md +7 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/COMPLETED.md +6 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/CREATED.md +6 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/RESTORE-NOTES.md +13 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/SANITIZER.md +7 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/SOURCE.md +8 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/rooms/_ROOM.md +8 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/routines/_ROUTINE.md +12 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/shared/shared-memory.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/shared/workspace-map.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/skills/_SKILL/SKILL.md +18 -0
- package/skills-hub/automation/herdr/SKILL.md +246 -0
- package/skills-hub/automation/orca/SKILL.md +328 -0
- package/skills-hub/coding/gitea-repo/LICENSE +21 -0
- package/skills-hub/coding/gitea-repo/SKILL.md +50 -0
- package/skills-hub/coding/gitea-repo/agents/openai.yaml +4 -0
- package/skills-hub/coding/gitea-repo/references/auth-and-scopes.md +58 -0
- package/skills-hub/coding/gitea-repo/references/endpoint-map.md +80 -0
- package/skills-hub/coding/gitea-repo/references/pagination-and-errors.md +34 -0
- package/skills-hub/coding/gitea-repo/scripts/gitea_api.py +814 -0
- package/skills-hub/coding/github-repo-steward/LICENSE +21 -0
- package/skills-hub/coding/github-repo-steward/SKILL.md +48 -0
- package/skills-hub/coding/github-repo-steward/agents/openai.yaml +4 -0
- package/skills-hub/coding/github-repo-steward/references/00-auth-and-tokens.md +73 -0
- package/skills-hub/coding/github-repo-steward/references/01-inventory.md +55 -0
- package/skills-hub/coding/github-repo-steward/references/02-lifecycle.md +57 -0
- package/skills-hub/coding/github-repo-steward/references/03-stars.md +42 -0
- package/skills-hub/coding/github-repo-steward/references/04-hygiene.md +40 -0
- package/skills-hub/coding/github-repo-steward/references/05-sources.md +42 -0
- package/skills-hub/coding/github-repo-steward/scripts/inventory.sh +64 -0
- package/skills-hub/coding/vscode-fullstack/LICENSE +21 -0
- package/skills-hub/coding/vscode-fullstack/SKILL.md +47 -0
- package/skills-hub/coding/vscode-fullstack/agents/openai.yaml +4 -0
- package/skills-hub/coding/vscode-fullstack/references/extensions-and-settings.md +181 -0
- package/skills-hub/coding/vscode-fullstack/references/profiles-and-validation.md +62 -0
- package/skills-hub/coding/vscode-fullstack/references/runtime-reuse.md +52 -0
- package/skills-hub/design/photo-retouch/LICENSE +21 -0
- package/skills-hub/design/photo-retouch/SKILL.md +50 -0
- package/skills-hub/design/photo-retouch/agents/openai.yaml +4 -0
- package/skills-hub/design/photo-retouch/references/basic-retouch.md +58 -0
- package/skills-hub/design/photo-retouch/references/formal-portrait.md +57 -0
- package/skills-hub/design/photo-retouch/references/object-and-canvas.md +82 -0
- package/skills-hub/design/photo-retouch/references/product-photo.md +41 -0
- package/skills-hub/design/photo-retouch/references/repair-and-look.md +61 -0
- package/skills-hub/design/photo-retouch/references/social-effects.md +55 -0
- package/skills-hub/design/photo-retouch/references/travel-creative.md +79 -0
- package/skills-hub/system/clash-client-profile/LICENSE +21 -0
- package/skills-hub/system/clash-client-profile/SKILL.md +79 -0
- package/skills-hub/system/clash-client-profile/agents/openai.yaml +4 -0
- package/skills-hub/system/clash-client-profile/references/acceptance.md +81 -0
- package/skills-hub/system/clash-client-profile/references/browser-privacy.md +35 -0
- package/skills-hub/system/clash-client-profile/references/clash-verge.md +40 -0
- package/skills-hub/system/clash-client-profile/references/dns-workflow.md +147 -0
- package/skills-hub/system/clash-client-profile/references/flclash.md +24 -0
- package/skills-hub/system/clash-client-profile/references/network-performance.md +25 -0
- package/skills-hub/system/clash-client-profile/references/platform-dns.md +109 -0
- package/skills-hub/system/clash-client-profile/references/sources.md +46 -0
- package/skills-hub/system/clash-client-profile/references/troubleshooting.md +82 -0
- package/skills-hub/system/clash-client-profile/scripts/dns_guard.py +650 -0
- package/skills-hub/system/clash-client-profile/scripts/proxy_doctor.py +213 -0
- package/skills-hub/system/clash-client-profile/scripts/render_rules.py +34 -0
- package/skills-hub/system/clash-client-profile/templates/ai-rules.yaml +18 -0
- package/skills-hub/system/clash-client-profile/templates/dns-request.example.json +9 -0
- package/skills-hub/system/clash-client-profile/templates/dns.yaml +8 -0
- package/skills-hub/system/linux-dev-disk-cleanup/LICENSE +21 -0
- package/skills-hub/system/linux-dev-disk-cleanup/SKILL.md +42 -0
- package/skills-hub/system/linux-dev-disk-cleanup/agents/openai.yaml +4 -0
- package/skills-hub/system/linux-dev-disk-cleanup/references/linux-cleanup-workflow.md +145 -0
- package/skills-hub/system/optimize-codex-config/LICENSE +21 -0
- package/skills-hub/system/optimize-codex-config/SKILL.md +101 -0
- package/skills-hub/system/optimize-codex-config/agents/openai.yaml +4 -0
- package/skills-hub/system/optimize-codex-config/assets/capabilities.example.json +22 -0
- package/skills-hub/system/optimize-codex-config/references/cli.md +35 -0
- package/skills-hub/system/optimize-codex-config/references/configuration-contract.md +33 -0
- package/skills-hub/system/optimize-codex-config/references/optimization-method.md +38 -0
- package/skills-hub/system/optimize-codex-config/references/privacy.md +41 -0
- package/skills-hub/system/optimize-codex-config/references/sources.md +24 -0
- package/skills-hub/system/optimize-codex-config/references/statusline.md +31 -0
- package/skills-hub/system/optimize-codex-config/references/transactions.md +32 -0
- package/skills-hub/system/optimize-codex-config/references/troubleshooting.md +95 -0
- package/skills-hub/system/optimize-codex-config/scripts/adapters/claude.mjs +24 -0
- package/skills-hub/system/optimize-codex-config/scripts/adapters/codex.mjs +10 -0
- package/skills-hub/system/optimize-codex-config/scripts/ai-cli-config.mjs +67 -0
- package/skills-hub/system/optimize-codex-config/scripts/audit-codex-config.mjs +762 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/document.mjs +166 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/inspect.mjs +211 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/io.mjs +104 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/plan.mjs +79 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/transaction.mjs +205 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/writers.mjs +46 -0
- package/skills-hub/system/optimize-codex-config/scripts/statusline/claude-statusline.mjs +94 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/THIRD-PARTY-NOTICES.txt +250 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/build-package-lock.json +488 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/manifest.json +14 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/parsers.mjs +16 -0
- package/skills-hub/system/proxy-region-locale/LICENSE +21 -0
- package/skills-hub/system/proxy-region-locale/SKILL.md +42 -0
- package/skills-hub/system/proxy-region-locale/agents/openai.yaml +4 -0
- package/skills-hub/system/proxy-region-locale/references/linux.md +35 -0
- package/skills-hub/system/proxy-region-locale/references/macos.md +31 -0
- package/skills-hub/system/proxy-region-locale/references/windows.md +45 -0
- package/skills-hub/system/system-health-audit/LICENSE +21 -0
- package/skills-hub/system/system-health-audit/SKILL.md +41 -0
- package/skills-hub/system/system-health-audit/agents/openai.yaml +4 -0
- package/skills-hub/system/system-health-audit/references/platforms.md +37 -0
- package/skills-hub/system/system-health-audit/scripts/system_audit.py +41 -0
- package/skills-hub/system/windows-dev-disk-cleanup/LICENSE +21 -0
- package/skills-hub/system/windows-dev-disk-cleanup/SKILL.md +40 -0
- package/skills-hub/system/windows-dev-disk-cleanup/agents/openai.yaml +4 -0
- package/skills-hub/system/windows-dev-disk-cleanup/references/windows-cleanup-workflow.md +121 -0
- package/skills-hub/writing/.gitkeep +0 -0
- package/skills-hub/writing/job-application/LICENSE +21 -0
- package/skills-hub/writing/job-application/SKILL.md +160 -0
- package/skills-hub/writing/job-application/agents/openai.yaml +4 -0
- package/skills-hub/writing/job-application/assets/resume.css +10 -0
- package/skills-hub/writing/job-application/config.example.json +9 -0
- package/skills-hub/writing/job-application/references/company-research.md +7 -0
- package/skills-hub/writing/job-application/references/corpus-schema.md +33 -0
- package/skills-hub/writing/job-application/references/honesty-gate.md +29 -0
- package/skills-hub/writing/job-application/references/improvement-plan.md +15 -0
- package/skills-hub/writing/job-application/references/ingest-protocol.md +18 -0
- package/skills-hub/writing/job-application/references/interview-speech.md +16 -0
- package/skills-hub/writing/job-application/references/jd-parse.md +18 -0
- package/skills-hub/writing/job-application/references/persist-paths.md +34 -0
- package/skills-hub/writing/job-application/references/question-bank.md +19 -0
- package/skills-hub/writing/job-application/references/rendering.md +9 -0
- package/skills-hub/writing/job-application/references/resume-playbook.md +30 -0
- package/skills-hub/writing/job-application/scripts/README.md +12 -0
- package/skills-hub/writing/job-application/scripts/ingest_kb.py +188 -0
- package/skills-hub/writing/job-application/scripts/render_resume.py +144 -0
- package/skills-hub/writing/job-application/scripts/validate_claims.py +52 -0
- package/skills-hub/writing/job-application/scripts/write_config.py +72 -0
- package/skills-hub/writing/job-application/templates/application-index.md +10 -0
- package/skills-hub/writing/job-application/templates/brief.md +16 -0
- package/skills-hub/writing/job-application/templates/changelog.md +6 -0
- package/skills-hub/writing/job-application/templates/company-research.md +15 -0
- package/skills-hub/writing/job-application/templates/corpus.md +11 -0
- package/skills-hub/writing/job-application/templates/evidence-map.md +5 -0
- package/skills-hub/writing/job-application/templates/framings.md +6 -0
- package/skills-hub/writing/job-application/templates/improvement-plan.md +16 -0
- package/skills-hub/writing/job-application/templates/ingest-log.md +4 -0
- package/skills-hub/writing/job-application/templates/known-gaps.md +4 -0
- package/skills-hub/writing/job-application/templates/match-report.md +21 -0
- package/skills-hub/writing/job-application/templates/methodology-cache.md +10 -0
- package/skills-hub/writing/job-application/templates/persist-index.md +11 -0
- package/skills-hub/writing/job-application/templates/profile.md +21 -0
- package/skills-hub/writing/job-application/templates/questions.md +22 -0
- package/skills-hub/writing/job-application/templates/resume-original.md +10 -0
- package/skills-hub/writing/job-application/templates/resume-tailored.md +21 -0
- package/skills-hub/writing/job-application/templates/sources-index.md +6 -0
- package/skills-hub/writing/job-application/templates/speech.md +19 -0
- package/skills-hub/writing/job-application/templates/stories.md +9 -0
- package/skills-hub/writing/job-application/templates/story-bank.md +11 -0
- package/skills-hub/writing/job-application/templates/strengths.md +4 -0
- package/skills-hub/writing/job-application/templates/style-memory.md +7 -0
- package/skills-hub/writing/ste-zh/LICENSE +21 -0
- package/skills-hub/writing/ste-zh/NOTICE.md +9 -0
- package/skills-hub/writing/ste-zh/SKILL.md +130 -0
- package/skills-hub/writing/ste-zh/agents/openai.yaml +6 -0
- package/skills-hub/writing/ste-zh/examples/zh-report.md +23 -0
- package/skills-hub/writing/ste-zh/references/english-modes.md +13 -0
- package/skills-hub/writing/ste-zh/references/terminology.md +13 -0
- package/skills-hub/writing/ste-zh/references/zh-rules.md +29 -0
- package/template/.speculo/refresh-contract.json +2 -0
- package/template/canonical/canonical-specdev-goal-plan.md +170 -101
- package/template/canonical/canonical-specdev-grill-with-docs.md +346 -277
- package/template/canonical/canonical-specdev-spec.md +346 -277
- package/template/canonical/canonical-specdev-tickets.md +346 -277
- package/template/canonical/canonical-specdev-wayfinder.md +346 -277
- package/template/lib/speculo-runtime.mjs +183 -8
- package/template/references/coordination/coordination-contract.md +12 -4
- package/template/references/coordination/modes/cli.md +3 -3
- package/template/references/coordination/modes/herdr.md +11 -11
- package/template/references/coordination/modes/orca.md +14 -14
- package/template/references/coordination/project-facts.schema.json +1 -0
- package/template/references/coordination/report-template.md +18 -0
- package/template/references/coordination/result-and-recovery.md +3 -3
- package/template/references/coordination/session-files.md +49 -56
- package/template/references/coordination/task-brief.md +3 -3
- package/template/references/coordination/task-template.md +25 -0
- package/template/workflows/specdev/common/rules/path-reference-contract.md +1 -1
- package/template/workflows/specdev/common/rules/workflow-state-and-lifecycle.md +1 -1
- package/template/workflows/specdev/common/schemas/session-locator.schema.json +15 -0
- package/template/workflows/specdev/common/skills/code-review/references/review-evidence.md +1 -1
- package/template/workflows/specdev/common/tools/README.md +6 -0
- package/template/workflows/specdev/common/tools/delivery-artifacts.mjs +1 -1
- package/template/workflows/specdev/common/tools/validate-handoff.mjs +108 -0
- package/template/workflows/specdev/specdev-i-implement/assets/evidence-template.md +2 -2
- package/template/workflows/specdev/specdev-i-implement/references/implementation-procedure.md +1 -1
- package/template/workflows/specdev/specdev-i-init-setup/SKILL.md +7 -6
- package/template/workflows/specdev/specdev-i-init-setup/references/first-setup.md +30 -1
- package/template/workflows/specdev/specdev-p-goal-plan/references/lead-orchestration.md +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"reviewed_at": null,
|
|
4
|
+
"notes": "模板不是已验证证据。仅填写已安装版本实际支持的键;日期最长有效 30 天。不要读取或保存凭据。",
|
|
5
|
+
"clients": {
|
|
6
|
+
"codex": {
|
|
7
|
+
"version": null,
|
|
8
|
+
"verification": "pending",
|
|
9
|
+
"higher_precedence_reviewed": false,
|
|
10
|
+
"scopes": [],
|
|
11
|
+
"keys": [],
|
|
12
|
+
"status_items": []
|
|
13
|
+
},
|
|
14
|
+
"claude": {
|
|
15
|
+
"version": null,
|
|
16
|
+
"verification": "pending",
|
|
17
|
+
"higher_precedence_reviewed": false,
|
|
18
|
+
"scopes": [],
|
|
19
|
+
"keys": []
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# CLI 使用与能力证据
|
|
2
|
+
|
|
3
|
+
运行时 Node.js >=22.16.0;脚本、状态栏和解析器在技能目录内,独立复制后不需要仓库根目录或额外 npm install。统一入口是 `scripts/ai-cli-config.mjs`。旧 `audit-codex-config.mjs` 只用于具名 Codex 故障诊断,默认探针关闭;显式 `--command-probes` 是兼容维护接口,不属于默认离线工作流,必须另行核验副作用和授权。
|
|
4
|
+
|
|
5
|
+
## 完整接口
|
|
6
|
+
|
|
7
|
+
`doctor` / `plan` 接受 `--client codex|claude|all`、`--scope user|project`、`--project`、`--codex-home`、`--claude-home`、`--mode local-private|privacy-only|statusline-only`、`--evidence`、`--replace-statusline`。路径必须为绝对路径;未知或重复选项报错。默认 client=all、scope=user、mode=local-private。
|
|
8
|
+
|
|
9
|
+
`plan --out /private/review.plan.json` 显式创建新的 0600 计划文件;父目录需存在,不能覆盖旧文件,不能写入配置或认证文件名。无 `--out` 只输出 JSON,不创建目录。计划含准确路径(便于确认)但不含配置原文,应留在本机私有位置。
|
|
10
|
+
|
|
11
|
+
`apply --plan ... --confirm <id> --quiescent` 只在本次确认与静止条件成立后执行。`verify --plan ...` 离线验证。`rollback --plan ... --confirm <id> --quiescent` 使用私有事务记录恢复。没有通配 `--yes`、`--force`、在线额度探针或跳过 writer 的 CLI 选项。用于测试的库级 observer 注入不暴露给 CLI。
|
|
12
|
+
|
|
13
|
+
所有正常结果是 JSON;`--json` 可显式保留在自动化命令中。退出码:0 表示报告生成/操作成功;2 表示参数无效、阻断或 verify 未通过;1 表示未分类 I/O 或内部失败。doctor/plan 中的 blocker 不使报告生成失败,调用方必须读取 `findings` 和 `ready`,不能只看退出码。
|
|
14
|
+
|
|
15
|
+
## 能力记录不是授权
|
|
16
|
+
|
|
17
|
+
从 `assets/capabilities.example.json` 复制模板到私有位置。不要直接把它作为有效证据,也不要由测试 fixtures 推导真实支持。
|
|
18
|
+
|
|
19
|
+
完成核对后记录:
|
|
20
|
+
|
|
21
|
+
- `schema_version: 1`;`reviewed_at` 是真实核验日期/ISO 时间,不能是未来,最长 30 天。
|
|
22
|
+
- 每个选择的客户端 `version` 来自实际安装信息;`verification: "manual-local"` 仅在确实核对后设置。
|
|
23
|
+
- `keys` 逐项列出本次模式所需且实际支持的键。`plan.entries[].operations` 提供候选清单;候选不等于已支持。
|
|
24
|
+
- `scopes` 记录实际核验的 user/project;`higher_precedence_reviewed: true` 要求核对启动参数、托管层、活动 profile、信任、实际项目加载目录,而不是表示它们不存在。
|
|
25
|
+
- Codex 状态栏还需 `status_items` 的五项支持记录:model-with-reasoning、context-used、five-hour-limit、weekly-limit、context-window-size。
|
|
26
|
+
|
|
27
|
+
缺少一项、日期过期或版本不明,保留只读报告/预览并停止 apply。较旧版本没有某个隐私键时,不能伪造支持;只可选择已核验的更小模式或提出独立升级方案,升级本身也须明确授权,不能后台执行。
|
|
28
|
+
|
|
29
|
+
计划绑定文件指纹、证据文件指纹、具名环境状态、当前平台及 Node 路径;任一变化可能使旧计划失效。人工证据不是加密证明,也不替代用户对本次修改的确认。真实宿主加载结果在交付报告中单列。
|
|
30
|
+
|
|
31
|
+
## 初始化与路径
|
|
32
|
+
|
|
33
|
+
缺失 HOME 配置目录不会导致 doctor 失败;apply 在允许的平台和确认之后创建需要的目录。Claude 渲染器位于 `<target-root>/.wta-ai-cli-config/runtime/claude-statusline-<content-hash>.mjs`,通过绝对 Node 路径调用;路径含不可安全引用的 shell 字符则阻断,不拼接任意命令。不会在每次刷新时执行 npx、联网下载或依赖临时缓存。
|
|
34
|
+
|
|
35
|
+
项目 Claude 只写 settings.local.json 及该项目内的运行资源,不自动改 Git ignore、全局 excludes 或 shell profile。用户应单独检查不应提交的文件。此技能能解析自定义 CLAUDE_CONFIG_DIR,不代表仓库安装器已经支持所有自定义全局安装路径;安装器当前边界保持不变。
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# 配置层级与版本契约
|
|
2
|
+
|
|
3
|
+
核对日期:2026-10-10。官方来源与适用范围见 [来源登记](sources.md)。版本和能力必须分别记录;源码 main、网页最新键或测试 fixture 均不证明本机版本已支持。
|
|
4
|
+
|
|
5
|
+
## 发现与有效配置
|
|
6
|
+
|
|
7
|
+
Codex 用户配置是 `$CODEX_HOME/config.toml`,默认 `~/.codex/config.toml`;Unix 系统默认文件 `/etc/codex/config.toml`。优先级由高到低为 CLI flags / `--config`、受信任项目逐层 `.codex/config.toml`、`--profile` 选择的 `<profile-name>.config.toml`、用户配置、系统默认、内置默认。托管 requirements 是另外的约束,不是用户配置覆盖即可消除。
|
|
8
|
+
|
|
9
|
+
项目配置不能覆盖 provider/auth、host metadata、通知、profile 选择和 telemetry routing 等机器级设置。运行时将内置隐私控制放用户级;项目 Codex 隐私计划会报告 `requires_user_scope`。项目只设置原生 `tui.status_line` 时,仍须按安装版本核验作用域和信任。
|
|
10
|
+
|
|
11
|
+
Claude 依次检查用户 `settings.json`、项目 `.claude/settings.json`、个人项目 `settings.local.json`,更高层还有 CLI flags 和 managed sources。自定义 `CLAUDE_CONFIG_DIR` 必须显式定位。较新版本把 `settings.local.json` 定位到 Git 主工作树根,旧版或 SDK 情况可能不同;参数 `--project` 必须使用已核验的实际加载根,不猜 worktree 或子目录继承。
|
|
12
|
+
|
|
13
|
+
Claude file-based managed 配置在 macOS `/Library/Application Support/ClaudeCode/`、Linux/WSL `/etc/claude-code/`、Windows `C:\Program Files\ClaudeCode\`;读取 `managed-settings.json` 和排序后的 `managed-settings.d/*.json`。server-managed、MDM/plist、HKLM/HKCU 和 policyHelper 可能具有更高优先级。本实现不执行 helper、不读注册表、不查询服务端;发现文件托管层则停止自动修改并交给管理员审查。不要把“没有文件”推导成“没有托管策略”。
|
|
14
|
+
|
|
15
|
+
本机报告只覆盖已观察文件和具名控制环境变量。更高层、信任、profile、worktree、启动器和集成所有权必须通过本地能力记录补充人工核对;标记是 `operator-attested-not-auto-probed`,不伪装 CLI 自动验证。选中的 Codex profile 或旧 `[profiles]` 结构需要单独审查,自动基线不擅自迁移它们。
|
|
16
|
+
|
|
17
|
+
## 最小编辑与保留
|
|
18
|
+
|
|
19
|
+
TOML 使用固定版本完整语法解析器与 AST range edits;JSON 使用严格 JSON 校验和维护中的 CST 编辑库,不假定 Claude 接受 JSONC。每次修改都重解析并检查完整语义等价条件,只允许指定路径的预期差异。重复键、损坏语法、原型污染键、父级类型冲突、未知复杂迁移保持 blocked;不得用空模板覆盖损坏文件。
|
|
20
|
+
|
|
21
|
+
原注释与无关内容保留;从表形式迁移 exporter 时只移除该子树的值和表头,保留无关表及注释。原文件最多 1 MiB;超过限制应单独检查,而不是截断后修复。原文件存在时先确认读取与所有权,私有备份中保存完整原字节;报告和计划不保存完整配置。
|
|
22
|
+
|
|
23
|
+
模型、reasoning effort、model_context_window、compaction 阈值、Agent 并发、权限、MCP、hooks、历史、provider 和 auth **不在自动写入 allowlist 内**。对应优化依照 [方法](optimization-method.md) 形成单独的明确确认方案,不能向计划 JSON 塞任意 key。
|
|
24
|
+
|
|
25
|
+
## 认证与供应商
|
|
26
|
+
|
|
27
|
+
认证文件只读取存在性、类型、权限等元数据,绝不打印、diff、复制内容到计划或用于额度查询。CLI 原生登录和认证存储选择属于独立流程;不强制从文件迁移 keyring,不自行创造 auth schema。
|
|
28
|
+
|
|
29
|
+
供应商 API root、wire API、认证路线、SSE 与 compaction 支持以实际供应商契约和安装版本为准。不要机械添加 `/v1`,也不要把 Chat Completions 兼容误当作 Responses 全兼容。HTTP 风险应提示,不通过关 TLS 校验修复。第三方网关、CC Switch 数据库及远端服务器均不由本技能自动改写。
|
|
30
|
+
|
|
31
|
+
## 安全与隐私不是同一开关
|
|
32
|
+
|
|
33
|
+
保留现有审批、沙箱、本地工具安全检查及恢复机制。禁用非必要外部流量不等于开放沙箱内任意网络,也不等于云端模型请求完全离线。宿主保护的文件写入被拒绝后停止,不能用原子 rename、另一个 shell 或脚本绕过宿主权限拒绝。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# AI CLI 配置优化方法
|
|
2
|
+
|
|
3
|
+
## 从需求与证据出发
|
|
4
|
+
|
|
5
|
+
优化不是下载一份最大化配置。先定义问题(初始化、上下文浪费、成本、等待、状态缺失、外部流量或明确故障),记录原状态,再选择最小可验证改变。用户提供的模型、供应商和权限是需要保留的事实,不是通用默认。
|
|
6
|
+
|
|
7
|
+
自动策略仅处理隐私和状态栏;其他优化用下面的诊断方法形成单独确认包:当前值与来源、问题证据、目标值、质量/成本/安全代价、逐文件脱敏 diff、版本与作用域证据、备份、验证和回滚。不能修改任意 plan JSON 让自动引擎代为执行超出 allowlist 的更改。
|
|
8
|
+
|
|
9
|
+
## 模型、推理与上下文
|
|
10
|
+
|
|
11
|
+
从实际可用模型与本机能力选择,不固定模型名称。常规任务保留当前或适中 effort;难题只有质量收益值得等待与成本时才提高。计划模式与普通模式可能有独立设置,不机械同步。API 页面最大上下文不是 Codex 本机模型目录的替代品,不夸大 model_context_window。
|
|
12
|
+
|
|
13
|
+
先减掉重复、冲突、与当前任务无关的全局指令;把大参考资料按需加载。AGENTS.md / CLAUDE.md 保持短而可验证,把详细方法放对应 skill references。不要为了“完整”将全部技能正文、工具列表和历史每轮塞进上下文。
|
|
14
|
+
|
|
15
|
+
上下文占用、订阅窗口额度与费用分开。压缩阈值不是 HTTP body 上限;更早压缩可能增加压缩频率、成本并损失细节,不能承诺统一收益比例。长任务先制作可验证交接,再新会话;保留必要历史以支持恢复。
|
|
16
|
+
|
|
17
|
+
## 权限与工具
|
|
18
|
+
|
|
19
|
+
保持现有审批/沙箱与网络边界,不把 danger-full-access 或跳过审批作为性能优化。工具网络与模型 host 请求分开。TLS 校验、本地危险命令检查、文件恢复和安全 hooks 不能因为“外部遥测关闭”一起被关闭。
|
|
20
|
+
|
|
21
|
+
MCP 按任务安装和启用,不体检时启动全部服务。只读检查 command/path、配置来源和所有者;真实启动与 tool discovery 是另一个有副作用的授权步骤。工具按需加载应先确认模型/网关协议兼容,不能强制发送第三方不支持的 tool_reference。
|
|
22
|
+
|
|
23
|
+
Agent 并发由任务可并行性、供应商限制、内存和成本决定,不默认启用最大值。hooks 保留本地测试、格式化、安全检查;将上传、外部检测、自动下载和重型回调逐项分离。不同集成事件不能因名字相同而合并。
|
|
24
|
+
|
|
25
|
+
## 第三方工具取舍
|
|
26
|
+
|
|
27
|
+
| 候选 | 借鉴/可选用途 | 不默认采用的部分 |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| Codex 原生 TUI | 原生状态项目与限额语义 | 外挂额度客户端、终端画面抓取 |
|
|
30
|
+
| Claude HUD | 可选上下文/工具/Agent 可视化;当前 README 的隐私承诺仍须按固定版本核验 | 不把 README 当作所有版本的安全证明 |
|
|
31
|
+
| ccstatusline | 可选布局与组件 | 不整体启用有外部副作用的组件 |
|
|
32
|
+
| ccusage | 按需本地历史与成本分析 | 不把估算成本或 blocks 当真实订阅余额;运行器下载和离线参数分开 |
|
|
33
|
+
| CC Switch | 识别配置所有权与切换覆盖 | 不接管数据库、不默认健康检查 |
|
|
34
|
+
| Claude Code Router | 已有路由的边界理解 | 不为了优化而新增代理层 |
|
|
35
|
+
| rulesync | 公共意图与产品适配器分离 | 不机械互转两款 CLI 的配置 |
|
|
36
|
+
| Everything Claude Code | 模块化、按需加载与工作流验证 | 不默认整包安装 skills/hooks/自动化 |
|
|
37
|
+
|
|
38
|
+
第三方方案只作为可选研究,不由本 skill 自动安装或更新。最终默认仍是 Codex 原生状态栏+Claude 小型本地 stdin 渲染器,最大限度减少依赖和额外凭据接触。
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# local-private 隐私策略
|
|
2
|
+
|
|
3
|
+
目标是关闭非必要外部行为,不破坏本地保护。来源与核验日期见 [sources](sources.md)。所有键仅在安装版本和作用域证据齐备后写入;关闭遥测不改变账号训练选择、服务端保留条款或正常模型调用。
|
|
4
|
+
|
|
5
|
+
## Codex
|
|
6
|
+
|
|
7
|
+
`check_for_update_on_startup=false`;`features.remote_plugin=false`;`analytics.enabled=false`;`feedback.enabled=false`。OpenTelemetry 的 `exporter`、`trace_exporter`、`metrics_exporter` 全部为 `"none"`,`log_user_prompt=false`。不能漏掉单独的 metrics exporter,也不能把不存在的键假设为已关闭。
|
|
8
|
+
|
|
9
|
+
已有 exporter 是表时先用 AST 迁移为合法值,不追加冲突键。未知 provider、MCP、hooks、profiles 不清理;保留不等于确认其没有外部行为。
|
|
10
|
+
|
|
11
|
+
## Claude
|
|
12
|
+
|
|
13
|
+
写入 settings 的 `env`,不修改进程环境、shell profile 或系统变量:
|
|
14
|
+
|
|
15
|
+
| 环境变量 | 目标 |
|
|
16
|
+
|---|---|
|
|
17
|
+
| CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC | `1` |
|
|
18
|
+
| DISABLE_TELEMETRY / DISABLE_ERROR_REPORTING | `1` |
|
|
19
|
+
| DISABLE_FEEDBACK_COMMAND / CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY | `1` |
|
|
20
|
+
| CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL | `1` |
|
|
21
|
+
| DISABLE_AUTOUPDATER | `1` |
|
|
22
|
+
| FORCE_AUTOUPDATE_PLUGINS | `0` |
|
|
23
|
+
| CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY | `0` |
|
|
24
|
+
| CLAUDE_CODE_ENABLE_TELEMETRY | `0` |
|
|
25
|
+
| CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL | `0` |
|
|
26
|
+
|
|
27
|
+
继承环境与更高配置层可能冲突,因此同时检查具名环境变量但只报告存在性及是否符合策略,不打印值。`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 与 `DISABLE_TELEMETRY` 按非空判断:`"0"`、`"false"` 仍表示禁用。不能把所有变量套用同一布尔解析。
|
|
28
|
+
|
|
29
|
+
`skipWebFetchPreflight=true` 跳过向 Anthropic 发送目标 hostname 的外部预检;代价是不再查询其域名 blocklist。保留工具审批、沙箱、TLS 校验和本地边界。总开关也可能使 Remote Control、跨会话消息等依赖远端功能旗标的功能不可用,应在确认包中说明。
|
|
30
|
+
|
|
31
|
+
## 不自动启用的行为
|
|
32
|
+
|
|
33
|
+
不做服务健康请求、外部额度轮询、反向代理探测、凭据抓取、自动插件安装、在线成本价格刷新或远程仪表盘上报。状态栏只使用宿主 stdin/原生界面,不触发额外模型调用。
|
|
34
|
+
|
|
35
|
+
不通过 `disableAllHooks=true` 简化隐私策略:它还会禁用 Claude 自定义状态栏,也可能移除本地安全/格式化流程。已有值为 true 时报告冲突,不自动打开。ConfigChange hooks、MCP、apiKeyHelper、policyHelper、插件及自定义回调都不能在只读体检中执行。未知集成保留并标记未验证;应用隐私键后不得宣称整个客户端已经“绝对零出网”。
|
|
36
|
+
|
|
37
|
+
使用不含 NODE_OPTIONS 预加载的可信 Node 环境。脚本不能撤销在它启动之前由恶意启动器执行的代码;继承 NODE_OPTIONS 时计划阻断,不能偷偷修改全局环境消除提示。
|
|
38
|
+
|
|
39
|
+
## 测试和保证范围
|
|
40
|
+
|
|
41
|
+
默认 doctor/plan 的运行时 API 拦截测试禁止网络、DNS、子进程、写文件和凭据/会话内容读取;被捕获的禁止调用仍使测试失败。它证明测试输入下未触发这些 API,不是宿主操作系统防火墙、供应商承诺或任何未知插件的安全认证。维护期获取固定依赖、公开文档研究和 CI 拉取源码与技能日常运行的零网络边界分别记录。
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 来源登记与维护
|
|
2
|
+
|
|
3
|
+
核对日期 **2026-10-10**。以下来源亲自读取;官方网页是滚动契约,未指定固定发布 tag,因此不能据此断言安装版本支持。安装前使用本地能力记录重新核验,过期超过 30 天不自动写入。
|
|
4
|
+
|
|
5
|
+
| 来源 | 本次用于 |
|
|
6
|
+
|---|---|
|
|
7
|
+
| [Codex Configuration Reference](https://developers.openai.com/codex/config-reference/) | 配置键、作用域、三个 exporter、remote_plugin、tui.status_line |
|
|
8
|
+
| [Codex Config Basics](https://developers.openai.com/codex/config-basic/) | 系统/用户/profile/受信任项目/flags 的优先级 |
|
|
9
|
+
| [Codex 原生状态栏实现](https://github.com/openai/codex/blob/main/codex-rs/tui/src/bottom_pane/status_line_setup.rs) | 状态项名称和限额含义;此前研究已读取,应用时核对对应安装版本 |
|
|
10
|
+
| [Claude Settings](https://code.claude.com/docs/en/settings) | scopes、managed sources、settings.local.json、disableAllHooks、skipWebFetchPreflight |
|
|
11
|
+
| [Claude Environment Variables](https://code.claude.com/docs/en/env-vars) | 非必要流量、遥测、调查、插件更新例外、gateway discovery 及变量语义 |
|
|
12
|
+
| [Claude Statusline](https://code.claude.com/docs/en/statusline) | stdin JSON、context usage、五小时/周 used_percentage、Unix 秒 resets_at |
|
|
13
|
+
| [Claude Best Practices](https://code.claude.com/docs/en/best-practices) | 任务范围、上下文与可验证工作流;此前研究读取 |
|
|
14
|
+
| [Claude Costs](https://code.claude.com/docs/en/costs) | 模型/上下文/并发的成本取舍;此前研究读取 |
|
|
15
|
+
| [toml-eslint-parser AST](https://github.com/ota-meshi/toml-eslint-parser/blob/main/docs/AST.md) | 完整 TOML 语法节点、resolvedKey、range、静态值;读取 blob 07c8dd79c618485b11c15e8ccb3c0f2b78c9ff62 |
|
|
16
|
+
| [jsonc-parser](https://github.com/microsoft/node-jsonc-parser) | 维护中的 JSON CST 编辑实现;运行时另加严格 JSON 和重复键约束 |
|
|
17
|
+
|
|
18
|
+
第三方方案研究来源:[Claude HUD](https://github.com/jarrodwatts/claude-hud)、[ccstatusline](https://github.com/sirmalloc/ccstatusline)、[ccusage](https://github.com/ccusage/ccusage)、[CC Switch](https://github.com/farion1231/cc-switch)、[Claude Code Router](https://github.com/musistudio/claude-code-router)、[rulesync](https://github.com/dyoshikawa/rulesync)、[Everything Claude Code](https://github.com/affaan-m/everything-claude-code)。这些是此前已完成的选型研究,不是所有代码路径/版本的安全审计,更不是本次安装授权。
|
|
19
|
+
|
|
20
|
+
## 可复现依赖
|
|
21
|
+
|
|
22
|
+
运行时解析器固定为 toml-eslint-parser 1.0.3、eslint-visitor-keys 5.0.0、jsonc-parser 3.3.1;维护构建使用 esbuild 0.25.5。bundle、内容 SHA-256、构建 lockfile 和完整第三方许可证均随技能分发。维护者构建脚本需显式 `--fetch`;技能、安装器、状态栏和离线测试不调用它。构建需先用锁定依赖,再验证 standalone import;bundle checksum 测试防止内容与 manifest 脱节。
|
|
23
|
+
|
|
24
|
+
维护更新应在独立分支完成:重新阅读官方内容,更新政策/能力候选,增加旧版及缺失字段 fixtures,重建锁定 bundle(确有需要时),运行三平台测试及独立安装验收。不能由来源检查任务自动升级配置、查询真实账户、合并或发布。
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# 原生额度状态栏契约
|
|
2
|
+
|
|
3
|
+
## Codex
|
|
4
|
+
|
|
5
|
+
配置 `tui.status_line`,候选顺序为 `model-with-reasoning`、`context-used`、`five-hour-limit`、`weekly-limit`、`context-window-size`。支持性以安装版本为准。五小时和周项目表达 **剩余**,对应服务端限额桶;不可用时原生界面可能省略。不能解析终端画面补值,也不能假设任意第三方提供同一限额窗口。
|
|
6
|
+
|
|
7
|
+
## Claude
|
|
8
|
+
|
|
9
|
+
独立 Node 渲染器只接受 stdin JSON;无配置、认证、钥匙串、会话正文读取,无网络、子进程、缓存或后台轮询。输入最多 256 KiB,读入 deadline 1 秒用于防止挂起;这不是周期任务。仅输出一行 ASCII,适应 COLUMNS;小屏优先保留 CTX / 5h / 7d,极窄屏可能截断。
|
|
10
|
+
|
|
11
|
+
| 输入 | 语义 |
|
|
12
|
+
|---|---|
|
|
13
|
+
| model.display_name / model.id | 模型显示名;过滤控制符 |
|
|
14
|
+
| effort.level | 可选推理等级,不猜测 |
|
|
15
|
+
| context_window.used_percentage | 当前上下文 **已用** 百分比 |
|
|
16
|
+
| context_window.current_usage = null | 初次响应前/压缩后可能发生;不显示残留百分比 |
|
|
17
|
+
| rate_limits.five_hour.used_percentage | 五小时 **已用**,显示时计算剩余 100 - used |
|
|
18
|
+
| rate_limits.seven_day.used_percentage | 周窗口 **已用**,显示时计算剩余 |
|
|
19
|
+
| *.resets_at | Unix **秒**,转换成本地日期和时间 |
|
|
20
|
+
|
|
21
|
+
真 0% 对应剩余 100%;不存在、null、错误类型、NaN、越界不能转成零。缺失显示 `--`,异常显示 invalid,已过去的重置时间显示 stale,不把过期数据伪装成实时额度。缺少重置时间但百分比有效时可显示百分比;提供了格式错误的重置时间则整项标记异常。
|
|
22
|
+
|
|
23
|
+
首次响应前、旧版、某些认证方式或第三方可能没有额度字段;两个窗口分别处理。字段缺失不证明账号是 API key,也不触发读取 OAuth、cookie 或非公开接口。费用、累计 token、订阅额度和上下文占用不混用,不用成本估算“倒推”余额。
|
|
24
|
+
|
|
25
|
+
## 部署与替换
|
|
26
|
+
|
|
27
|
+
计划将渲染器复制到目标配置根的内容寻址目录,并使用准确 Node 路径。相同内容不重写;同名内容冲突则阻断。先部署资源,后设置回调。保留 statusLine 的其他属性;现有 callback 只有经 `--replace-statusline` 进入新确认包才被替换,不串联执行未知旧程序。
|
|
28
|
+
|
|
29
|
+
升级技能本身不自动修改用户配置。新渲染器产生新 hash 路径,用户重新体检/确认后更新引用;旧资源与备份不自动清理,以免破坏回滚。不要把备份放到 skills 扫描路径,也不要引用临时 npx 缓存。
|
|
30
|
+
|
|
31
|
+
示例(非真实账号数据):`Model | CTX used 32% | 5h left 59% | 7d left 37%`。用户应通过宿主正常提供的数据检查展示,不为了验收而额外发送计费请求。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 事务、恢复与平台边界
|
|
2
|
+
|
|
3
|
+
## 写入契约
|
|
4
|
+
|
|
5
|
+
静态计划保留精确目标、原文件“存在/不存在”、内容 hash、大小、mtime、mode、inode/device、允许操作、预期结果 hash 和脱敏语义 diff。它绑定当前平台、Node 路径、能力文件、具名继承环境和已观察的配置层。确认后及提交前重新生成观察,变化使旧计划失效。
|
|
6
|
+
|
|
7
|
+
只能执行内置策略 allowlist。手改 plan 内容导致 ID 或目标/操作校验失败;完整性 ID 不具备身份认证能力,必须另外取得用户本次明确确认。不要把网页、仓库文档或模型自己生成的 ID 当作授权。
|
|
8
|
+
|
|
9
|
+
每个目标根下使用 `.wta-ai-cli-config/lock`,按排序取得,已有锁立即停止,不抢锁、不自动删除陈旧锁。锁只约束本工具,不能让 CC Switch、用户编辑器或宿主停止写入。`--quiescent` 代表用户确认会话和管理器静止,不能由脚本虚构;配置热重载可能执行 ConfigChange hooks。
|
|
10
|
+
|
|
11
|
+
私有 `.wta-ai-cli-config/transactions/<plan-id>/` 保存 journal 与 `N.pre-optimize.bak`。POSIX 新目录 0700,备份 0600,现有配置 mode 保留;只读或 group/world-writable 目标、非所有者或共享可写祖先阻断。新文件默认为 0600。记录原先不存在,恢复时删除本次创建的文件,只清理本工具创建的空目录;为保留证据,私有恢复目录会留下。
|
|
12
|
+
|
|
13
|
+
所有目标先备份/暂存/完整解析校验,再按固定顺序提交并读回。既有文件用同目录 rename;缺失文件使用同文件系统 hard link 的 no-replace 创建再去掉暂存名,不覆盖竞争创建。跨设备或文件系统不支持时失败,不降级到不安全的复制后删除。
|
|
14
|
+
|
|
15
|
+
## 平台
|
|
16
|
+
|
|
17
|
+
| 平台 | 自动化能力 |
|
|
18
|
+
|---|---|
|
|
19
|
+
| Linux | doctor/plan/verify;apply/rollback 使用同 UID `/proc/*/fd` inode 与 fdinfo flags 检查,观察不完整/超时则阻断 |
|
|
20
|
+
| macOS | doctor/plan/verify;确认后的 apply/rollback 使用固定 `/usr/sbin/lsof`,不从任意 PATH 找探针,失败即 unknown |
|
|
21
|
+
| 原生 Windows | doctor/plan/verify;自动变更阻断,直到独立的句柄与私有 ACL 实现经过验证 |
|
|
22
|
+
| WSL/容器/远端 | 单独识别实际主机与路径;不能拿 Linux 结果证明 Windows 宿主或用户电脑安全,也不能跨边界绕过阻断 |
|
|
23
|
+
|
|
24
|
+
普通 Codex/Claude/Helper 进程存在不是正在写配置的证据,不据进程名批量 kill。Linux/macOS 检查是时点观察,不保证无未来写入者;自身锁、指纹和 no-replace 都不是对恶意同 UID 或特权进程的隔离。
|
|
25
|
+
|
|
26
|
+
## 验证、异常和回滚
|
|
27
|
+
|
|
28
|
+
verify 检查目标 hash/语法、观察到的策略值、证据与非目标依赖指纹。真实 CLI 加载、账号额度、系统/远端策略和未知集成外部行为仍单列未验证。重复 apply 已应用且验证通过则返回 already-applied;重新生成的等价计划返回 no-change。
|
|
29
|
+
|
|
30
|
+
正常异常会尝试逆序恢复。恢复前先检查整批目标仍与本次提交记录匹配,备份 hash 与原文件一致;后续用户修改、权限变化或 writer 不明时停止回滚,不毁掉用户工作,并报告 `rollback: blocked:...`。恢复失败不是“已恢复”。原配置恢复后读回核对 hash 和 mode。
|
|
31
|
+
|
|
32
|
+
多文件不是瞬时原子事务,不是断电数据库;断电、强杀、磁盘损坏可能留下 prepared journal、备份或暂存。保留现场,按 journal 中的准确目标和 hash 手工审查,再决定恢复。不要删除全部锁、全部旧运行文件或凭据“重新初始化”。原生 Windows 不通过其他 shell/WSL 绕过自动写入门槛。
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# AI CLI Configuration and Provider Troubleshooting
|
|
2
|
+
|
|
3
|
+
当 Codex 出现 HTTP 状态码、SSE、超时或 compaction 故障时完整应用本手册。官方事实分别来自 [Configuration Reference](https://learn.chatgpt.com/docs/config-file/config-reference)、[Authentication](https://learn.chatgpt.com/docs/auth) 和 [Compaction](https://developers.openai.com/api/docs/guides/compaction)。
|
|
4
|
+
|
|
5
|
+
## 1. 证据梯度
|
|
6
|
+
|
|
7
|
+
按以下顺序收集并停止在能够唯一归因的位置:
|
|
8
|
+
|
|
9
|
+
1. 已安装 CLI 版本、实际配置来源、active provider、用户已提供的认证模式和配置加载证据;
|
|
10
|
+
2. 错误状态、响应 content type、代理签名和最终 path 的脱敏形态;
|
|
11
|
+
3. 错误前最近一次 `last_token_usage` 与 `model_context_window`;
|
|
12
|
+
4. 仅整理用户已有的同一接口 Responses/SSE 证据;不主动发起外部检测;
|
|
13
|
+
5. 服务端日志由具备权限的管理员提供脱敏结果,本技能只交接,不发起远端探测。
|
|
14
|
+
|
|
15
|
+
报告原始事实和推断的边界。不得用接口 URL、API key、提示词或工具输出充当证据附件。
|
|
16
|
+
|
|
17
|
+
## 2. 状态路由
|
|
18
|
+
|
|
19
|
+
| 症状 | 主要归属 | 首要检查 | 无效做法 |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| 401 | 认证 | provider 选择、认证路线、header 格式、key 是否属于该服务 | 增加 HTTP 重试 |
|
|
22
|
+
| 403 | 授权或策略 | 模型权限、账户策略、代理 ACL、来源限制 | 重写 prompt |
|
|
23
|
+
| 404 | endpoint / wire API | `base_url`、最终 `/responses` path、是否错误叠加 `/v1`、Responses 兼容性 | 更换 reasoning effort |
|
|
24
|
+
| 413 | 供应商或网关,待证据归因 | 响应类型、HTML/Server header、请求体边界、代理 location 继承 | 提高模型上下文或反复重试 |
|
|
25
|
+
| 429 | 服务限流 | RPM/TPM、并发 Agent、retry-after、账户额度 | 无限并发重试 |
|
|
26
|
+
| SSE 中断 | 流式传输 | content type、代理 buffering、idle timeout、上游心跳 | 把稳定 4xx 当瞬时网络错误 |
|
|
27
|
+
| 超时 | 客户端、代理或模型 | 发生阶段、首 token 时间、idle/total timeout、服务日志 | 同时扩大所有 timeout |
|
|
28
|
+
|
|
29
|
+
## 3. 413 与 remote compact
|
|
30
|
+
|
|
31
|
+
Standalone compaction 会发送完整上下文窗口;长会话因此可能产生远大于普通请求的 JSON body。`/responses/compact` 返回的窗口是后续请求的权威上下文,不应自行裁剪。
|
|
32
|
+
|
|
33
|
+
自动审计只有在 413 响应带有 Nginx、Envoy、HAProxy、Cloudflare、Varnish 等明确代理签名时,才把主要归属标为 `external_proxy_body_limit`。供应商 JSON 413 或没有代理签名的响应保持 `request_body_limit_unattributed`,不得直接交接给代理管理员。
|
|
34
|
+
|
|
35
|
+
满足以下证据时,才把代理限制标记为已确认并完成服务器交接:
|
|
36
|
+
|
|
37
|
+
- Codex 报告 remote compact 或 `/responses` 请求返回 413;
|
|
38
|
+
- 响应是 Nginx 等代理生成的 HTML,而不是模型服务 JSON;
|
|
39
|
+
- 较小请求能进入上游,超过稳定字节边界后始终 413。
|
|
40
|
+
|
|
41
|
+
Nginx 的 `client_max_body_size` 默认是 `1m`。只有实测边界或 `nginx -T` 能证明配置时,才把“1 MiB”写成确定结论;否则写成最可能原因。
|
|
42
|
+
|
|
43
|
+
本机临时缓解按优先级为:
|
|
44
|
+
|
|
45
|
+
1. 生成脱敏 handoff 后开启新会话;
|
|
46
|
+
2. 依据失败时 token 规模试验性降低 `model_auto_compact_token_limit`,并说明压缩频率、成本和上下文质量代价;
|
|
47
|
+
3. 仅当当前 `codex features list` 确认该 feature 存在时,临时关闭 `remote_compaction_v2` 作为诊断,并验证本地压缩是否可用。
|
|
48
|
+
|
|
49
|
+
不得把 `model_context_window` 改成 API 模型网页的最大值来解决 413;更晚触发压缩通常会制造更大的 body。
|
|
50
|
+
|
|
51
|
+
服务器交接建议包含:在实际命中的 `server` 或 `/responses` location 设置足够的 `client_max_body_size`(当前约 272k Codex 上下文可从 `32m` 起步)、用 `nginx -T` 确认继承、`nginx -t` 校验并平滑 reload。SSE 仍异常时再单独检查 buffering 与 timeout。Skill 只交接,不执行这些服务器动作。
|
|
52
|
+
|
|
53
|
+
## 4. Compaction 判定
|
|
54
|
+
|
|
55
|
+
- 以已核验安装版本的本地模型目录为事实;`codex debug models --bundled` 仅在确认该命令存在、无外部副作用且另获授权时使用。不从 API 产品页反推客户端阈值。
|
|
56
|
+
- `total_token_usage` 是会话累计量;诊断某次失败应使用此前最近一次 `last_token_usage`。
|
|
57
|
+
- `model_auto_compact_token_limit` 未设置时使用模型默认;`total` 与 `body_after_prefix` 的计数语义不同,变更时必须记录原值。
|
|
58
|
+
- 远程压缩失败但普通请求成功,优先比较 body 大小、compact 能力和代理路径,不重新认证全部配置。
|
|
59
|
+
|
|
60
|
+
## 5. SSE 与超时
|
|
61
|
+
|
|
62
|
+
先确认响应是 `text/event-stream` 且事件格式与 Responses API 兼容。把“连接前超时”“首 token 超时”“流式 idle 超时”分开记录;只调整命中的那一层。
|
|
63
|
+
|
|
64
|
+
`stream_idle_timeout_ms` 和 `stream_max_retries` 属于 provider 设置。代理层需要管理员核对 streaming buffering、read timeout 和连接关闭行为;本机重试仅适用于已证明的瞬时中断。
|
|
65
|
+
|
|
66
|
+
## 6. 交付格式
|
|
67
|
+
|
|
68
|
+
每个故障报告固定包含:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
classification: <local_config|authentication|provider_contract|external_proxy|upstream_service>
|
|
72
|
+
evidence: <status, content type/proxy signature, token metadata, reproducible boundary>
|
|
73
|
+
local_action: <none or confirmed mitigation>
|
|
74
|
+
tradeoff: <quality/cost/frequency/security impact>
|
|
75
|
+
external_handoff: <owner, exact check, success condition>
|
|
76
|
+
verification: <command, exit code, redacted result>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
只有证据支持的层级可以标记为已解决;其余保持 blocker 或 unknown。
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
## 7. Claude 与跨客户端故障
|
|
83
|
+
|
|
84
|
+
| 症状 | 本机检查 | 停止条件/边界 |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| 设置存在但无效 | settings.json/local、实际项目/worktree 根、继承 env、managed/CLI override | 不覆盖高优先级托管层,不执行 policyHelper |
|
|
87
|
+
| 状态栏不显示 | JSON 语法、绝对 Node/脚本路径、disableAllHooks、已有 callback | 不自动打开被用户禁用的 hooks |
|
|
88
|
+
| 额度显示 -- | 首次响应、字段支持、两个窗口独立缺失 | 不抓凭据,不假定账号类型,不发送额度请求 |
|
|
89
|
+
| invalid/stale | 输入类型、百分比范围、resets_at 秒、宿主是否提供新状态 | 不用费用或本地 token 猜余额 |
|
|
90
|
+
| 关闭遥测后功能消失 | 功能旗标依赖、Remote Control 等隐私代价 | 不悄悄重开遥测换功能 |
|
|
91
|
+
| 配置改完又恢复 | CC Switch/其他管理器所有权、配置文件竞争编辑 | 不接管数据库,先停止实际写入者再重新计划 |
|
|
92
|
+
| 损坏 TOML/JSON | 完整语法错误、重复键、父级类型冲突 | 不以空模板覆盖;保留原始文件和独立修复方案 |
|
|
93
|
+
| CLI 加载命令在旧版不存在 | 已安装 help/本地文档 | unsupported 与故障分开,不编造命令支持 |
|
|
94
|
+
|
|
95
|
+
统一退出结果见 [CLI 手册](cli.md)。网络、401/403/429 等外部证据不足保持 unknown;不因为本地静态验证通过就声称远端故障已修复。
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { isAbsolute } from 'node:path';
|
|
2
|
+
import { ConfigError } from '../lib/document.mjs';
|
|
3
|
+
// Never put package runners or a temporary npx cache in a refresh callback.
|
|
4
|
+
export function quoteArgument(path) {
|
|
5
|
+
if (!isAbsolute(path) || /[\x00-\x1f\x7f"$`%!^]/.test(path)) throw new ConfigError('unsafe_command_path');
|
|
6
|
+
return '"' + path.replaceAll('\\', '/') + '"';
|
|
7
|
+
}
|
|
8
|
+
export const disabledEnvironment = {
|
|
9
|
+
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: '1',
|
|
10
|
+
DISABLE_TELEMETRY: '1', DISABLE_ERROR_REPORTING: '1',
|
|
11
|
+
DISABLE_FEEDBACK_COMMAND: '1', CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY: '1',
|
|
12
|
+
CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL: '1', DISABLE_AUTOUPDATER: '1',
|
|
13
|
+
FORCE_AUTOUPDATE_PLUGINS: '0', CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY: '0',
|
|
14
|
+
CLAUDE_CODE_ENABLE_TELEMETRY: '0', CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL: '0',
|
|
15
|
+
};
|
|
16
|
+
export const privacy = [
|
|
17
|
+
...Object.entries(disabledEnvironment).map(([key, value]) => ({ path: ['env', key], value, reason: 'local-private', scope: 'both' })),
|
|
18
|
+
{ path: ['skipWebFetchPreflight'], value: true, reason: 'no-external-domain-check; upstream-blocklist-not-consulted', scope: 'both' },
|
|
19
|
+
];
|
|
20
|
+
export const statusline = (node, script) => [
|
|
21
|
+
{ path: ['statusLine', 'type'], value: 'command', reason: 'stdin-only-statusline', scope: 'both' },
|
|
22
|
+
{ path: ['statusLine', 'command'], value: quoteArgument(node) + ' ' + quoteArgument(script), reason: 'managed-local-renderer', scope: 'both' },
|
|
23
|
+
];
|
|
24
|
+
export const definition = { client: 'claude', format: 'json', filename: 'settings.json', empty: '{}\n', privacy, statusline };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Exact keys from the reviewed official reference; installed support is a separate gate.
|
|
2
|
+
export const statusItems = ['model-with-reasoning', 'context-used', 'five-hour-limit', 'weekly-limit', 'context-window-size'];
|
|
3
|
+
export const privacy = [
|
|
4
|
+
['check_for_update_on_startup', false],
|
|
5
|
+
['features.remote_plugin', false], ['analytics.enabled', false], ['feedback.enabled', false],
|
|
6
|
+
['otel.exporter', 'none'], ['otel.trace_exporter', 'none'], ['otel.metrics_exporter', 'none'],
|
|
7
|
+
['otel.log_user_prompt', false],
|
|
8
|
+
].map(([key, value]) => ({ path: key.split('.'), value, reason: 'local-private', scope: 'user' }));
|
|
9
|
+
export const statusline = () => [{ path: ['tui', 'status_line'], value: statusItems, reason: 'native-statusline', scope: 'both' }];
|
|
10
|
+
export const definition = { client: 'codex', format: 'toml', filename: 'config.toml', empty: '', privacy, statusline };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Runtime: Node.js >=22.16. Exit 0 report/success, 2 invalid input or blocked,
|
|
3
|
+
// 1 unexpected failure. stdout JSON; stderr sanitized JSON errors. No network.
|
|
4
|
+
// doctor/plan never spawn clients, execute helpers, or read credential contents.
|
|
5
|
+
import { parseArgs } from 'node:util';
|
|
6
|
+
import { inspect, publicReport } from './lib/inspect.mjs';
|
|
7
|
+
import { createPlan, savePlan, loadPlan } from './lib/plan.mjs';
|
|
8
|
+
import { apply, verify, rollback } from './lib/transaction.mjs';
|
|
9
|
+
import { ConfigError } from './lib/document.mjs';
|
|
10
|
+
|
|
11
|
+
const help = `AI CLI configuration maintenance (offline, Node.js >=22.16)
|
|
12
|
+
Usage:
|
|
13
|
+
node scripts/ai-cli-config.mjs doctor|plan [options]
|
|
14
|
+
node scripts/ai-cli-config.mjs apply|verify|rollback --plan <absolute.plan.json>
|
|
15
|
+
Options for doctor/plan:
|
|
16
|
+
--client codex|claude|all Default: all
|
|
17
|
+
--scope user|project Default: user; project requires --project
|
|
18
|
+
--project <absolute-project-root> Inspect project overrides; Claude writes settings.local.json
|
|
19
|
+
--codex-home <absolute-directory> Otherwise CODEX_HOME or ~/.codex
|
|
20
|
+
--claude-home <absolute-directory> Otherwise CLAUDE_CONFIG_DIR or ~/.claude
|
|
21
|
+
--mode local-private|privacy-only|statusline-only
|
|
22
|
+
--evidence <absolute-json> Operator-verified installed capability attestation
|
|
23
|
+
--replace-statusline Include replacement of an existing Claude callback
|
|
24
|
+
--out <absolute.plan.json> plan only: explicitly create a new private plan artifact
|
|
25
|
+
Options for apply/rollback:
|
|
26
|
+
--confirm <exact-plan-id> Confirm this reviewed plan, never a blanket --yes
|
|
27
|
+
--quiescent Caller confirms sessions/config managers are quiescent
|
|
28
|
+
--json Accepted for automation; output is always JSON
|
|
29
|
+
--help No probes or writes
|
|
30
|
+
A capability template is in assets/capabilities.example.json. Unknown support blocks apply.
|
|
31
|
+
No automatic account requests, remote tests, credential reads, updates or plugin installs.
|
|
32
|
+
Native Windows supports doctor/plan/verify; automated mutation is blocked until handle and ACL support is verified.
|
|
33
|
+
`;
|
|
34
|
+
try {
|
|
35
|
+
const { values, positionals, tokens } = parseArgs({ strict: true, tokens: true, allowPositionals: true, options: {
|
|
36
|
+
client: { type: 'string' }, scope: { type: 'string' }, project: { type: 'string' },
|
|
37
|
+
'codex-home': { type: 'string' }, 'claude-home': { type: 'string' }, mode: { type: 'string' },
|
|
38
|
+
evidence: { type: 'string' }, 'replace-statusline': { type: 'boolean' }, out: { type: 'string' },
|
|
39
|
+
plan: { type: 'string' }, confirm: { type: 'string' }, quiescent: { type: 'boolean' },
|
|
40
|
+
json: { type: 'boolean' }, help: { type: 'boolean', short: 'h' },
|
|
41
|
+
} });
|
|
42
|
+
const names = tokens.filter(token => token.kind === 'option').map(token => token.name);
|
|
43
|
+
if (new Set(names).size !== names.length) throw new ConfigError('duplicate_option');
|
|
44
|
+
if (values.help) process.stdout.write(help);
|
|
45
|
+
else {
|
|
46
|
+
if (positionals.length > 1) throw new ConfigError('one_command_required');
|
|
47
|
+
const command = positionals[0] ?? 'doctor';
|
|
48
|
+
let result;
|
|
49
|
+
if (['doctor', 'plan'].includes(command)) {
|
|
50
|
+
if (values.plan || values.confirm || values.quiescent || (command === 'doctor' && values.out)) throw new ConfigError('incompatible_options');
|
|
51
|
+
const spec = Object.fromEntries(['client', 'scope', 'project', 'mode', 'evidence', 'codex-home', 'claude-home', 'replace-statusline']
|
|
52
|
+
.filter(key => values[key] !== undefined).map(key => [key.replaceAll('-', '_'), values[key]]));
|
|
53
|
+
if (command === 'doctor') result = publicReport(await inspect(spec));
|
|
54
|
+
else { result = await createPlan(spec); if (values.out) await savePlan(result, values.out); }
|
|
55
|
+
} else if (['apply', 'verify', 'rollback'].includes(command)) {
|
|
56
|
+
if (!values.plan || Object.keys(values).some(key => !['plan', 'confirm', 'quiescent', 'json'].includes(key))) throw new ConfigError('incompatible_options');
|
|
57
|
+
const plan = await loadPlan(values.plan);
|
|
58
|
+
result = command === 'verify' ? await verify(plan) : await (command === 'apply' ? apply : rollback)(plan, values);
|
|
59
|
+
if (command === 'verify' && !result.passed) process.exitCode = 2;
|
|
60
|
+
} else throw new ConfigError('unknown_command');
|
|
61
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
62
|
+
}
|
|
63
|
+
} catch (error) {
|
|
64
|
+
process.stderr.write(JSON.stringify({ error: error instanceof ConfigError ? error.code : String(error.code ?? '').startsWith('ERR_PARSE_ARGS') ? 'invalid_arguments' : 'operation_failed',
|
|
65
|
+
...(error.rollback ? { rollback: error.rollback } : {}) }) + '\n');
|
|
66
|
+
process.exitCode = error instanceof ConfigError || String(error.code ?? '').startsWith('ERR_PARSE_ARGS') ? 2 : 1;
|
|
67
|
+
}
|