Commit 7867752
fix(install): sync providers.json from ~/.claude.json when repo file is empty (#150)
* docs(407): create phase plan for issue 149 - manifest-driven CLI detection with user consent
- Plan to replace hardcoded CLI detection with providers.json manifest
- Add detect+prompt UX for user consent per CLI
- Remove all CCR preset references from install.js
- Single wave, 3 tasks, autonomous execution
- Requirements: ISSUE-149-01 through ISSUE-149-06
* feat(install): remove CCR references and clean up manifest-driven detection (issue 149)
* docs(quick-407): issue 149
* docs(quick-407): update verification status
* test(install): update provider tests for post-CCR manifest-driven detection
* req(quick-407): add INST-11
* feat(providers): add Daintree Z.AI + MiniMax presets via fan-out import, rename link-canopy → link-daintree
Import Daintree claude agent presets (Z.AI and MiniMax) into providers.json
using the existing fan-out import mechanism from /nf:link-canopy. This clones
claude-1 as vanilla and creates claude-z-ai and claude-minimax slots with
preset-specific env overrides (ANTHROPIC_BASE_URL, model mappings).
Also renames the skill from nf:link-canopy to nf:link-daintree to match
the product name.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix(providers): remove Daintree presets from repo — secrets must stay local
The fan-out import wrote Z.AI and MiniMax preset entries (containing
ANTHROPIC_AUTH_TOKEN secrets) into the repo's bin/providers.json. These
are user-specific and should only exist in ~/.claude/nf/bin/providers.json
via /nf:link-daintree. Reverted providers.json to 5 vanilla providers and
restored test assertions to match.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* refactor(providers): empty providers.json in repo — populated at install time via /nf:link-daintree
The repo's bin/providers.json is now empty. Provider entries are
user-specific and get populated when the user runs /nf:link-daintree,
which discovers installed Daintree agents, vanilla CLIs, and presets.
This prevents shipping hardcoded provider configs (and potential secrets)
to all npm users. Tests use inline fixture data instead of reading
from providers.json.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* feat(install): PATH scan fallback when providers.json is empty
When the repo's providers.json is empty (no Daintree presets), install.js
now scans PATH for known CLIs (claude, codex, gemini, opencode, copilot)
using the existing resolveCli helper — no Daintree required for vanilla install.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix(install): sync providers.json from ~/.claude.json when repo file is empty
- When bin/providers.json is empty (issue 149 convention), ensureMcpSlotsFromProviders()
now syncs slots from ~/.claude.json MCP servers + PATH scan fallback
- KNOWN_CLI_PREFIXES filter excludes generic MCPs like canopy/sentry
- Fan-out slots (claude-z-ai, claude-minimax) from /nf:link-daintree are included
- Also fix River ML venv creation order — create venv BEFORE checking import
- Update nForma.test.cjs and provider-mapping.test.cjs to use FIXTURE_PROVIDERS
instead of reading empty bin/providers.json directly
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix: resolve merge conflict markers in formal model registry and related JSON files
Resolving conflict markers left in .planning/ files after the merge:
- .planning/formal/model-registry.json (restored clean version from 7bd1b00)
- .planning/formal/solve-state.json (6 conflicts resolved)
- .planning/formal/proximity-index.json (1 conflict resolved)
- .planning/formal/evidence/doc-claims.json (3 conflicts resolved)
- .planning/formal/solve-trend.jsonl (1 conflict resolved)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix(formal): give max_retries a safe default value in oauth-rotation.pm
PRISM requires all constants to be defined before model checking. The
max_retries constant was declared without a default, relying entirely on
run-oauth-rotation-prism.cjs to inject it via -const. When the runner is
invoked without -const (e.g. in CI's formal-verify pipeline that calls
the script directly), PRISM fails with "Undefined constant max_retries".
Fix: initialize max_retries = 3 as the safe default (matches the legacy
gemini-1 config). The runner still overrides it live from providers.json
when available.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
---------
Co-authored-by: jobordu <jonathan@jonathanborduas.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>1 parent 6844540 commit 7867752
17 files changed
Lines changed: 1224 additions & 1717 deletions
File tree
- .planning
- formal
- evidence
- prism
- quick/407-issue-149
- bin
- commands/nf
- test
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| 45 | + | |
45 | 46 | | |
46 | 47 | | |
47 | 48 | | |
| |||
66 | 67 | | |
67 | 68 | | |
68 | 69 | | |
69 | | - | |
| 70 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | | - | |
4 | | - | |
5 | | - | |
6 | | - | |
7 | | - | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | 2 | | |
13 | 3 | | |
14 | 4 | | |
| |||
17 | 7 | | |
18 | 8 | | |
19 | 9 | | |
20 | | - | |
21 | 10 | | |
22 | 11 | | |
23 | 12 | | |
| |||
41 | 30 | | |
42 | 31 | | |
43 | 32 | | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | 33 | | |
57 | 34 | | |
58 | 35 | | |
| |||
79 | 56 | | |
80 | 57 | | |
81 | 58 | | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | 59 | | |
95 | 60 | | |
96 | 61 | | |
| |||
569 | 534 | | |
570 | 535 | | |
571 | 536 | | |
| 537 | + | |
0 commit comments