diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md index 3a946aea..39f86587 100644 --- a/.planning/REQUIREMENTS.md +++ b/.planning/REQUIREMENTS.md @@ -20,8 +20,8 @@ ## Default Provider Logic (4) -- [ ] **DFLT-01** — If no cloud provider (Claude Code, etc.) is detected, Hermes + Ollama is offered as default during onboarding -- [ ] **DFLT-02** — Default agent templates (PM, Engineer, Generalist) work correctly with Hermes runtime +- [x] **DFLT-01** — If no cloud provider (Claude Code, etc.) is detected, Hermes + Ollama is offered as default during onboarding +- [x] **DFLT-02** — Default agent templates (PM, Engineer, Generalist) work correctly with Hermes runtime - [ ] **DFLT-03** — GSD workflow functions correctly with Hermes as the agent runtime - [ ] **DFLT-04** — Fresh install with only Hermes + Ollama works end-to-end (no paid subscription or API key required) @@ -53,7 +53,7 @@ None deferred — all PRD items included in this milestone. | OLLA-03 | Phase 28 | Complete | | OLLA-04 | Phase 28 | Complete | | OLLA-05 | Phase 28 | Complete | -| DFLT-01 | Phase 29 | Pending | -| DFLT-02 | Phase 29 | Pending | +| DFLT-01 | Phase 29 | Complete | +| DFLT-02 | Phase 29 | Complete | | DFLT-03 | Phase 29 | Pending | | DFLT-04 | Phase 29 | Pending | diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index 53431049..568184b3 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -59,9 +59,9 @@ Plans: 2. Creating a PM agent or Engineer agent from the predefined templates and assigning it to a Hermes runtime produces a working agent — heartbeats execute and return meaningful results 3. Running a full GSD workflow task (create issue, assign to Engineer, execute heartbeat, mark complete) with Hermes as the sole runtime completes without errors 4. A machine with only Nexus, Hermes, and Ollama installed (no Anthropic/OpenAI key) can complete the entire onboarding-to-first-task flow with no paywalls or missing-key errors -**Plans:** 2 plans +**Plans:** 1/2 plans executed Plans: -- [ ] 29-01-PLAN.md — Adapter probe route, onboarding wizard Hermes fallback, adapter-neutral templates +- [x] 29-01-PLAN.md — Adapter probe route, onboarding wizard Hermes fallback, adapter-neutral templates - [ ] 29-02-PLAN.md — Hermes skill injection via promptTemplate, integration tests --- @@ -97,4 +97,4 @@ All 16 v1 requirements are mapped to exactly one phase. No orphans. |-------|-----------|----------------|--------|-----------| | 27. Hermes Adapter | v1.4 | 1/1 | Complete | 2026-04-02 | | 28. Ollama Integration & Agent Surface | v1.4 | 3/3 | Complete | 2026-04-02 | -| 29. Default Provider & End-to-End | v1.4 | 0/2 | In progress | - | +| 29. Default Provider & End-to-End | v1.4 | 1/2 | In Progress| | diff --git a/.planning/STATE.md b/.planning/STATE.md index 90db6965..14178e59 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -2,15 +2,15 @@ gsd_state_version: 1.0 milestone: v1.4 milestone_name: milestone -status: verifying -stopped_at: Completed 28-ollama-integration-28-02-PLAN.md -last_updated: "2026-04-02T17:09:04.787Z" +status: executing +stopped_at: Completed 29-default-provider-29-01-PLAN.md +last_updated: "2026-04-02T17:33:37.897Z" last_activity: 2026-04-02 progress: total_phases: 3 completed_phases: 2 - total_plans: 4 - completed_plans: 4 + total_plans: 6 + completed_plans: 5 percent: 0 --- @@ -21,13 +21,13 @@ progress: See: .planning/PROJECT.md (updated 2026-04-02) **Core value:** Nexus works out of the box without any paid subscription or API key. -**Current focus:** Phase 28 — ollama-integration +**Current focus:** Phase 29 — default-provider ## Current Position -Phase: 29 -Plan: Not started -Status: Phase complete — ready for verification +Phase: 29 (default-provider) — EXECUTING +Plan: 2 of 2 +Status: Ready to execute Last activity: 2026-04-02 Progress: [__________] 0% @@ -94,6 +94,7 @@ Progress: [__________] 0% | Phase 28-ollama-integration P01 | 3 | 2 tasks | 6 files | | Phase 28 P03 | 12 | 2 tasks | 3 files | | Phase 28-ollama-integration P02 | 5min | 2 tasks | 3 files | +| Phase 29-default-provider P01 | 8 | 2 tasks | 4 files | ## Accumulated Context @@ -189,6 +190,9 @@ Recent decisions affecting current work: - [Phase 28]: COALESCE jsonb concat pattern used for stateJson merge in hermes_local heartbeat — prevents overwriting existing fields - [Phase 28-ollama-integration]: Used useCompany() hook for companyId in hermes config-fields — consistent with AgentConfigForm pattern - [Phase 28-ollama-integration]: Create mode only sets model (not provider/base_url) — CreateConfigValues lacks those fields; buildHermesConfig resolves provider at runtime +- [Phase 29-default-provider]: Probe route uses board auth (no companyId) — adapter availability is instance-level, not company-level +- [Phase 29-default-provider]: hermes_local makes directory optional — Hermes runtime does not require cwd to operate +- [Phase 29-default-provider]: AGENT_TEMPLATES in NewAgentDialog are adapter-neutral — /agents/new form handles adapter default logic independently ### Pending Todos @@ -200,6 +204,6 @@ None identified yet. ## Session Continuity -Last session: 2026-04-02T17:05:50.617Z -Stopped at: Completed 28-ollama-integration-28-02-PLAN.md +Last session: 2026-04-02T17:33:37.894Z +Stopped at: Completed 29-default-provider-29-01-PLAN.md Resume file: None diff --git a/.planning/phases/29-default-provider/29-01-SUMMARY.md b/.planning/phases/29-default-provider/29-01-SUMMARY.md new file mode 100644 index 00000000..859a038f --- /dev/null +++ b/.planning/phases/29-default-provider/29-01-SUMMARY.md @@ -0,0 +1,115 @@ +--- +phase: 29-default-provider +plan: 01 +subsystem: ui +tags: [hermes, adapter, onboarding, probe, wizard, agents] + +# Dependency graph +requires: + - phase: 27-hermes-adapter + provides: hermes_local adapter with testEnvironment method + - phase: 28-ollama-integration + provides: Hermes session and heartbeat integration +provides: + - Board-auth GET /adapters/:type/probe route with no companyId required + - agentsApi.probeAdapter(type) client method + - NexusOnboardingWizard auto-detects Hermes and falls back to hermes_local + - Directory input optional when hermes_local is selected + - NewAgentDialog AGENT_TEMPLATES adapter-neutral (role+name only, no adapterType) +affects: [30-agent-templates, default-provider-ux, onboarding] + +# Tech tracking +tech-stack: + added: [] + patterns: + - Board-auth probe route pattern for adapter availability detection without companyId + - useEffect probe-on-open pattern for runtime adapter detection in wizard + - Adapter-neutral template navigation (role+name only, no adapterType in URL) + +key-files: + created: [] + modified: + - server/src/routes/agents.ts + - ui/src/api/agents.ts + - ui/src/components/NexusOnboardingWizard.tsx + - ui/src/components/NewAgentDialog.tsx + +key-decisions: + - "Probe route uses board auth (not company-scoped) — adapter availability is instance-level, not company-level" + - "graceful probe failure keeps claude_local default — network errors or missing adapter don't break onboarding" + - "hermes_local makes directory optional (not required) — Hermes doesn't need a cwd to operate" + - "AGENT_TEMPLATES in NewAgentDialog are now adapter-neutral — /agents/new form handles its own adapter default logic" + +patterns-established: + - "Probe-on-open pattern: useEffect with effectiveOnboardingOpen trigger for lazy adapter detection" + - "Board-auth adapter route: /adapters/:type/probe — no companyId, board auth guard only" + +requirements-completed: [DFLT-01, DFLT-02] + +# Metrics +duration: 8min +completed: 2026-04-02 +--- + +# Phase 29 Plan 01: Default Provider Summary + +**Board-auth hermes probe route + NexusOnboardingWizard Hermes fallback + adapter-neutral agent templates in NewAgentDialog** + +## Performance + +- **Duration:** ~8 min +- **Started:** 2026-04-02T17:29:41Z +- **Completed:** 2026-04-02T17:37:00Z +- **Tasks:** 2 +- **Files modified:** 4 + +## Accomplishments +- Added GET /adapters/:type/probe route with board auth guard — returns {available, status, checks} without requiring a companyId +- Added agentsApi.probeAdapter(type) client method that calls the new probe route +- NexusOnboardingWizard now probes for hermes_local on open and uses it as defaultAdapter when available +- Directory input is optional when hermes_local is selected; description text updated for local AI path +- NewAgentDialog AGENT_TEMPLATES no longer hardcode adapterType — handleTemplateSelect navigates with role+name only + +## Task Commits + +Each task was committed atomically: + +1. **Task 1: Add board-auth adapter probe route and frontend client** - `f85ced58` (feat) +2. **Task 2: Update NexusOnboardingWizard and NewAgentDialog** - `a2f54282` (feat) + +## Files Created/Modified +- `server/src/routes/agents.ts` - Added GET /adapters/:type/probe with board auth guard +- `ui/src/api/agents.ts` - Added agentsApi.probeAdapter(type) method +- `ui/src/components/NexusOnboardingWizard.tsx` - Hermes probe on open, defaultAdapter state, optional directory, updated UI text +- `ui/src/components/NewAgentDialog.tsx` - Removed adapterType from AGENT_TEMPLATES, updated handleTemplateSelect + +## Decisions Made +- Probe route uses board auth only (no companyId) — adapter availability is an instance-level concern +- Probe failure is silent (catches error, keeps claude_local) — graceful degradation for missing adapter or network issues +- hermes_local makes directory optional, not required — Hermes runtime doesn't need cwd +- AGENT_TEMPLATES stripped of adapterType — /agents/new form is responsible for resolving the adapter default + +## Deviations from Plan + +None - plan executed exactly as written. + +## Issues Encountered + +None. Pre-existing TypeScript module resolution errors (missing @paperclipai/shared, @paperclipai/adapter-utils etc.) were already present in the codebase and unrelated to these changes. + +## Known Stubs + +None. All data paths are wired — probeAdapter calls the real route, defaultAdapter flows into all three agent creates. + +## User Setup Required + +None - no external service configuration required. + +## Next Phase Readiness +- Probe route is ready; Plan 02 can use it for any additional default provider logic +- NexusOnboardingWizard now self-selects hermes_local when Hermes is installed +- NewAgentDialog templates are adapter-neutral and ready for any future adapter default logic in /agents/new + +--- +*Phase: 29-default-provider* +*Completed: 2026-04-02*