agent-notes 2.32.0__tar.gz → 2.33.0__tar.gz
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.
- {agent_notes-2.32.0 → agent_notes-2.33.0}/PKG-INFO +15 -3
- {agent_notes-2.32.0 → agent_notes-2.33.0}/README.md +14 -2
- agent_notes-2.33.0/agent_notes/VERSION +1 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/cli.py +1 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/build.py +46 -19
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/config.py +173 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/install.py +17 -2
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/regenerate.py +7 -3
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/__init__.py +102 -28
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/_common.py +10 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/execute.py +95 -16
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/orchestrator.py +47 -11
- agent_notes-2.33.0/agent_notes/data/models/claude-fable-5.yaml +15 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-haiku-4-5.yaml +1 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-8.yaml +1 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-sonnet-4-6.yaml +1 -1
- agent_notes-2.33.0/agent_notes/data/models/claude-sonnet-5.yaml +15 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/pricing.yaml +8 -0
- agent_notes-2.33.0/agent_notes/data/providers/anthropic.yaml +3 -0
- agent_notes-2.33.0/agent_notes/data/providers/openai.yaml +3 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/roles/orchestrator.yaml +3 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/roles/reasoner.yaml +3 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/roles/scout.yaml +3 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/roles/worker.yaml +3 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/code-review/SKILL.md +1 -1
- agent_notes-2.33.0/agent_notes/data/templates/__pycache__/__init__.cpython-312.pyc +0 -0
- agent_notes-2.33.0/agent_notes/data/templates/__pycache__/__init__.cpython-314.pyc +0 -0
- agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-312.pyc +0 -0
- agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-314.pyc +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/base.cpython-314.pyc +0 -0
- agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-312.pyc +0 -0
- agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
- agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-312.pyc +0 -0
- agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-314.pyc +0 -0
- agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-312.pyc +0 -0
- agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/claude.py +4 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/codex.py +5 -11
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/opencode.py +9 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/model.py +1 -1
- agent_notes-2.33.0/agent_notes/domain/provider.py +11 -0
- agent_notes-2.33.0/agent_notes/domain/role.py +20 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/state.py +1 -0
- agent_notes-2.33.0/agent_notes/registries/provider_registry.py +62 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/role_registry.py +3 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/fs.py +6 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/install_executor.py +7 -3
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/install_plan.py +15 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/install_state_builder.py +9 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/installer.py +4 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/model_resolver.py +11 -3
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/rendering.py +176 -20
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/state_store.py +3 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes.egg-info/PKG-INFO +15 -3
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes.egg-info/SOURCES.txt +22 -1
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes.egg-info/top_level.txt +1 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_config_command.py +63 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_regenerate_command.py +45 -0
- agent_notes-2.33.0/tests/unit/commands/test_install_profile_rerender.py +53 -0
- agent_notes-2.33.0/tests/unit/commands/test_wizard_confirm_build_order.py +158 -0
- agent_notes-2.33.0/tests/unit/commands/test_wizard_effort_selection.py +61 -0
- agent_notes-2.33.0/tests/unit/commands/test_wizard_install_summary_display.py +71 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_orchestrator_skip.py +3 -3
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_preflight.py +112 -11
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_role_model_default.py +1 -1
- agent_notes-2.33.0/tests/unit/commands/test_wizard_role_ordering.py +137 -0
- agent_notes-2.33.0/tests/unit/registries/test_provider_registry.py +57 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/registries/test_registries.py +52 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_build_functions.py +37 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_fs.py +35 -0
- agent_notes-2.33.0/tests/unit/services/test_generate_agent_files_pins.py +226 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_plan.py +59 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_model_resolver_characterization.py +9 -6
- agent_notes-2.33.0/tests/unit/services/test_resolve_effort.py +383 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_state_store.py +45 -0
- agent_notes-2.33.0/tests/unit/templates/test_claude_frontmatter.py +46 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/templates/test_codex_frontmatter.py +28 -9
- agent_notes-2.33.0/tests/unit/templates/test_opencode_frontmatter.py +33 -0
- agent_notes-2.32.0/agent_notes/VERSION +0 -1
- agent_notes-2.32.0/agent_notes/data/templates/__pycache__/__init__.cpython-314.pyc +0 -0
- agent_notes-2.32.0/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-314.pyc +0 -0
- agent_notes-2.32.0/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
- agent_notes-2.32.0/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-314.pyc +0 -0
- agent_notes-2.32.0/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
- agent_notes-2.32.0/agent_notes/domain/role.py +0 -13
- {agent_notes-2.32.0 → agent_notes-2.33.0}/LICENSE +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/__main__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/_install_helpers.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/doctor.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/hook.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/info.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/list.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/_common.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/migrate.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/notes.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/reset.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/transfer.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/vault.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/wiki.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/set_role.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/uninstall.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/validate.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/cost_report.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/config.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/constants.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/agents.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/analyst.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/api-reviewer.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/architect.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/coder.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/database-specialist.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/debugger.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/devil.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/devops.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/explorer.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/integrations.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/lead.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/performance-profiler.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/refactorer.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/reviewer.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/security-auditor.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/cost_reporting.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/execution.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/guardrails.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/hard_limits.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/phase0.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/pipelines.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/review.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/verification.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/wiki_compile.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/system-auditor.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/tech-writer.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/test-runner.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/test-writer.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/wiki-compiler.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/cli/claude.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/cli/codex.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/cli/copilot.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/cli/opencode.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/commands/brainstorm.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/commands/debug.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/commands/review.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/global-claude.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/global-codex.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/global-copilot.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/global-opencode.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/hooks/session-context.md.tpl +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-1.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-5.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-6.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-7.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-sonnet-4-5.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-sonnet-4.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/gpt-5-4-mini.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/gpt-5-4.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/gpt-5-5.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/plugin/claude.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/plugin/opencode-index.js.template +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/plugin/opencode.yaml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/rules/code-quality.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/rules/no-ai-attribution.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/rules/safety.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/brainstorming/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/chrome-test/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/codebase-design/DEEPENING.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/codebase-design/DESIGN-IT-TWICE.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/codebase-design/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/diagnosing-bugs/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/docker/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/docker/compose.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/docker/dockerfile.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/domain-modeling/ADR-FORMAT.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/domain-modeling/CONTEXT-FORMAT.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/domain-modeling/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/git/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/grill-me/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/grill-with-docs/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/grilling/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/handoff/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/improve-codebase-architecture/HTML-REPORT.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/improve-codebase-architecture/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/ingest/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/migrate-memory/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/obsidian-memory/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/prototype/LOGIC.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/prototype/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/prototype/UI.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/controllers.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/frontend.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/infra.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/models.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/testing.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/views.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/refactoring-protocol/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/research/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rsi/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/setup-agent-tracker/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/setup-agent-tracker/domain.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/setup-agent-tracker/issue-tracker-github.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/setup-agent-tracker/issue-tracker-gitlab.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/setup-agent-tracker/issue-tracker-local.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/setup-agent-tracker/triage-labels.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/tdd/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/tdd/mocking.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/tdd/tests.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/to-spec/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/to-tickets/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/triage/AGENT-BRIEF.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/triage/OUT-OF-SCOPE.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/triage/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/wayfinder/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/writing-great-skills/GLOSSARY.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/writing-great-skills/SKILL.md +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/base.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/doctor_checks.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/agent.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/cli_backend.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/diagnostics.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/diff.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/rule.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/skill.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/_base.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/agent_registry.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/cli_registry.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/model_registry.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/rule_registry.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/skill_registry.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/scripts/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/scripts/_claude_backend.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/scripts/_formatting.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/scripts/_opencode_backend.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/scripts/_pricing.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/scripts/cost_report.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/_memory_utils.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/counts.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/credentials.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/_checks.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/_display.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/_fix.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/diff.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/local_backend.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/memory_backend.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/memory_router.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/migrations/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/obsidian_backend.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/session_context.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/settings_writer.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/ui.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/user_config.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/validation.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/_wiki_utils.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_index.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_ingest.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_lint.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_query.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_storage.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki_backend.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes.egg-info/dependency_links.txt +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes.egg-info/entry_points.txt +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes.egg-info/requires.txt +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/pyproject.toml +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/setup.cfg +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/conftest.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_doctor_command.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_info_command.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_install_command.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_install_roundtrip.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_list_command.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_uninstall_command.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_uninstall_full_hooks.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_validate_command.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_validate_path_filter.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_wizard_happy_path.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/memory/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/memory/test_memory_add_local_backend.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/memory/test_memory_command.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/scripts/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/scripts/test_release_script.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/build_output/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/build_output/test_build_output.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/install/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/install/test_install_methods.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/plugin_builders/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/plugin_builders/test_plugin_builders.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/plugins/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/plugins/claude/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/plugins/claude/test_agents.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/plugins/codex/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/plugins/codex/test_agents.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/plugins/test_skills.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_cost_report_subcommand.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_count_agents.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_guard_credentials.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_info.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_memory_add_description.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_memory_imports.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_memory_migrate.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_precompact_memory_bridge.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_imports.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_steps.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/wizard/test_cost_report_step.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/registries/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/registries/test_cli_registry.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_cache_write_pricing.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_cost_report.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_cost_report_scoping.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_formatting_tty.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_opencode_backend_connection.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_opencode_backend_pricing.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_time_aggregation.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_credential_filter.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_credentials.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_codex.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_credential_guard.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_hook_quoting.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_hooks.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_precompact_hook.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_local_backend.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_memory_backend.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_memory_backend_io.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_memory_router.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_rendering_includes.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_session_context.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_settings_writer.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_skill_filtering.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_user_config_cost_report.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_validation.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_wiki_atomic_write.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_wiki_backend.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_wiki_imports.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/templates/__init__.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/test_import_health.py +0 -0
- {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/test_memory_dir_for_backend.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-notes
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.33.0
|
|
4
4
|
Summary: AI agent configuration manager for Claude Code, OpenCode, and Copilot
|
|
5
5
|
Author-email: Eugene Naumov <min.verkligheten@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -170,7 +170,7 @@ If you configured agent-notes to access your memory vault (Obsidian or local), t
|
|
|
170
170
|
<details>
|
|
171
171
|
<summary>Agent Team</summary>
|
|
172
172
|
|
|
173
|
-
Specialized subagents with hierarchical model strategy: **Opus 4.
|
|
173
|
+
Specialized subagents with hierarchical model strategy: **Opus 4.8 reasons (high effort), Sonnet 5 executes (medium effort), Haiku 4.5 scouts (low effort).**
|
|
174
174
|
|
|
175
175
|
| Agent | Role | Model Tier | Purpose |
|
|
176
176
|
|---|---|---|---|
|
|
@@ -194,7 +194,7 @@ Specialized subagents with hierarchical model strategy: **Opus 4.6 reasons, Sonn
|
|
|
194
194
|
| analyst | scout | haiku | Requirements translation, acceptance criteria |
|
|
195
195
|
| tech-writer | scout | haiku | READMEs, API docs, changelogs |
|
|
196
196
|
|
|
197
|
-
**4 roles, 19 agents, 3 model tiers.** The tiered model strategy optimizes cost: Opus reasons ($
|
|
197
|
+
**4 roles, 19 agents, 3 model tiers.** The tiered model strategy optimizes cost: Opus reasons ($5/$25 per 1M tokens in/out), Sonnet executes ($3/$15), Haiku scouts ($1/$5). A premium `fable` tier ($10/$50) is available for explicit pinning, but no role defaults to it.
|
|
198
198
|
|
|
199
199
|
### Delegation rules
|
|
200
200
|
|
|
@@ -216,6 +216,18 @@ Specialized subagents with hierarchical model strategy: **Opus 4.6 reasons, Sonn
|
|
|
216
216
|
- **tech-writer** — Documentation, READMEs, API docs
|
|
217
217
|
- **devil** — Challenges assumptions and plans
|
|
218
218
|
|
|
219
|
+
### Reconfiguring roles, models, and effort
|
|
220
|
+
|
|
221
|
+
During `agent-notes install`, wizard step 2 asks you to pick a model per role, and — for models served by a provider with a known effort vocabulary (currently `anthropic`, `openai`) — a follow-up effort prompt, pre-selected to the role's typical effort when that value is valid for the chosen provider. Providers with no effort registry entry (`github-copilot`, `openrouter`, `google`, `moonshot`) skip the effort prompt entirely.
|
|
222
|
+
|
|
223
|
+
To change these after install:
|
|
224
|
+
```bash
|
|
225
|
+
agent-notes config role-model [--cli <cli>] <role> <model> # e.g. role-model worker claude-sonnet-5
|
|
226
|
+
agent-notes config role-effort [--cli <cli>] <role> <effort> # e.g. role-effort worker high
|
|
227
|
+
agent-notes config wizard # interactive menu for both
|
|
228
|
+
```
|
|
229
|
+
`role-effort` validates the effort against the role's currently-assigned model's provider — an invalid value prints that provider's name and its valid effort list. There's no cross-provider mapping: each provider (anthropic, openai) has its own independent effort vocabulary and default.
|
|
230
|
+
|
|
219
231
|
</details>
|
|
220
232
|
|
|
221
233
|
---
|
|
@@ -138,7 +138,7 @@ If you configured agent-notes to access your memory vault (Obsidian or local), t
|
|
|
138
138
|
<details>
|
|
139
139
|
<summary>Agent Team</summary>
|
|
140
140
|
|
|
141
|
-
Specialized subagents with hierarchical model strategy: **Opus 4.
|
|
141
|
+
Specialized subagents with hierarchical model strategy: **Opus 4.8 reasons (high effort), Sonnet 5 executes (medium effort), Haiku 4.5 scouts (low effort).**
|
|
142
142
|
|
|
143
143
|
| Agent | Role | Model Tier | Purpose |
|
|
144
144
|
|---|---|---|---|
|
|
@@ -162,7 +162,7 @@ Specialized subagents with hierarchical model strategy: **Opus 4.6 reasons, Sonn
|
|
|
162
162
|
| analyst | scout | haiku | Requirements translation, acceptance criteria |
|
|
163
163
|
| tech-writer | scout | haiku | READMEs, API docs, changelogs |
|
|
164
164
|
|
|
165
|
-
**4 roles, 19 agents, 3 model tiers.** The tiered model strategy optimizes cost: Opus reasons ($
|
|
165
|
+
**4 roles, 19 agents, 3 model tiers.** The tiered model strategy optimizes cost: Opus reasons ($5/$25 per 1M tokens in/out), Sonnet executes ($3/$15), Haiku scouts ($1/$5). A premium `fable` tier ($10/$50) is available for explicit pinning, but no role defaults to it.
|
|
166
166
|
|
|
167
167
|
### Delegation rules
|
|
168
168
|
|
|
@@ -184,6 +184,18 @@ Specialized subagents with hierarchical model strategy: **Opus 4.6 reasons, Sonn
|
|
|
184
184
|
- **tech-writer** — Documentation, READMEs, API docs
|
|
185
185
|
- **devil** — Challenges assumptions and plans
|
|
186
186
|
|
|
187
|
+
### Reconfiguring roles, models, and effort
|
|
188
|
+
|
|
189
|
+
During `agent-notes install`, wizard step 2 asks you to pick a model per role, and — for models served by a provider with a known effort vocabulary (currently `anthropic`, `openai`) — a follow-up effort prompt, pre-selected to the role's typical effort when that value is valid for the chosen provider. Providers with no effort registry entry (`github-copilot`, `openrouter`, `google`, `moonshot`) skip the effort prompt entirely.
|
|
190
|
+
|
|
191
|
+
To change these after install:
|
|
192
|
+
```bash
|
|
193
|
+
agent-notes config role-model [--cli <cli>] <role> <model> # e.g. role-model worker claude-sonnet-5
|
|
194
|
+
agent-notes config role-effort [--cli <cli>] <role> <effort> # e.g. role-effort worker high
|
|
195
|
+
agent-notes config wizard # interactive menu for both
|
|
196
|
+
```
|
|
197
|
+
`role-effort` validates the effort against the role's currently-assigned model's provider — an invalid value prints that provider's name and its valid effort list. There's no cross-provider mapping: each provider (anthropic, openai) has its own independent effort vocabulary and default.
|
|
198
|
+
|
|
187
199
|
</details>
|
|
188
200
|
|
|
189
201
|
---
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.33.0
|
|
@@ -302,7 +302,7 @@ def main():
|
|
|
302
302
|
# config
|
|
303
303
|
p_config = subparsers.add_parser("config", help="Reconfigure role/agent/model/memory/skill assignments after install")
|
|
304
304
|
p_config.add_argument("action", nargs="?", default="wizard",
|
|
305
|
-
choices=["wizard", "show", "role-model", "role-agent", "provider", "providers", "memory", "cost-report"],
|
|
305
|
+
choices=["wizard", "show", "role-model", "role-agent", "role-effort", "provider", "providers", "memory", "cost-report"],
|
|
306
306
|
help="Config action (default: wizard)")
|
|
307
307
|
p_config.add_argument("extra", nargs="*", help="Additional positional args (role, model, agent)")
|
|
308
308
|
p_config.add_argument("--cli", help="Target CLI (claude / opencode / both)")
|
|
@@ -89,10 +89,43 @@ def count_lines(file_path: Path) -> int:
|
|
|
89
89
|
return 0
|
|
90
90
|
|
|
91
91
|
|
|
92
|
-
def
|
|
93
|
-
"""
|
|
92
|
+
def count_dist_clis(files: list[Path], dist_dir: Path, cli_names: set[str]) -> int:
|
|
93
|
+
"""Count distinct CLI backends among generated files (dist/<cli>/... paths).
|
|
94
|
+
|
|
95
|
+
Files outside dist_dir or under non-CLI top-level dirs (rules/, skills/)
|
|
96
|
+
are ignored."""
|
|
97
|
+
found = set()
|
|
98
|
+
for f in files:
|
|
99
|
+
try:
|
|
100
|
+
rel = f.relative_to(dist_dir)
|
|
101
|
+
except ValueError:
|
|
102
|
+
continue
|
|
103
|
+
if rel.parts and rel.parts[0] in cli_names:
|
|
104
|
+
found.add(rel.parts[0])
|
|
105
|
+
return len(found)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def format_build_summary(n_files: int, n_lines: int, n_clis: int) -> str:
|
|
109
|
+
"""One-line build summary, e.g. 'Generated 96 files (13,748 lines) across 4 CLIs'."""
|
|
110
|
+
file_word = "file" if n_files == 1 else "files"
|
|
111
|
+
cli_word = "CLI" if n_clis == 1 else "CLIs"
|
|
112
|
+
return f"Generated {n_files} {file_word} ({n_lines:,} lines) across {n_clis} {cli_word}"
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def build(role_models=None, role_efforts=None, scope='global', project_path=None,
|
|
116
|
+
profile_label: str = "") -> None:
|
|
117
|
+
"""Build agent configuration files from source.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
role_models: Optional explicit {cli: {role: model_id}} pins that override
|
|
121
|
+
persisted state (e.g. wizard selections not yet written to state.json)
|
|
122
|
+
role_efforts: Optional explicit {cli: {role: effort}} pins, same semantics
|
|
123
|
+
scope: which state.json scope's pins drive the render ('global' or 'local')
|
|
124
|
+
project_path: project path for scope='local'
|
|
125
|
+
profile_label: named profile whose pins drive the render ("" = default profile)
|
|
126
|
+
"""
|
|
94
127
|
from ..services.state_store import load_state
|
|
95
|
-
from ..
|
|
128
|
+
from ..registries.cli_registry import load_registry
|
|
96
129
|
|
|
97
130
|
# Read configuration
|
|
98
131
|
try:
|
|
@@ -103,10 +136,13 @@ def build() -> None:
|
|
|
103
136
|
|
|
104
137
|
# Load state if present (no error if missing)
|
|
105
138
|
state = load_state()
|
|
106
|
-
|
|
139
|
+
|
|
107
140
|
# Generate agent files (state=None is backward compatible)
|
|
108
141
|
print("Generating agent files...")
|
|
109
|
-
agent_files = generate_agent_files(agents_config, tiers, state=state
|
|
142
|
+
agent_files = generate_agent_files(agents_config, tiers, state=state,
|
|
143
|
+
scope=scope, project_path=project_path,
|
|
144
|
+
role_models=role_models, role_efforts=role_efforts,
|
|
145
|
+
profile_label=profile_label)
|
|
110
146
|
|
|
111
147
|
# Copy global files
|
|
112
148
|
print("Copying global files...")
|
|
@@ -120,21 +156,12 @@ def build() -> None:
|
|
|
120
156
|
print("Copying commands...")
|
|
121
157
|
command_files = copy_commands()
|
|
122
158
|
|
|
123
|
-
# Report results
|
|
159
|
+
# Report results — one-line summary (per-file listing was too noisy)
|
|
124
160
|
all_files = agent_files + global_files + skill_files + command_files
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
try:
|
|
130
|
-
rel_path = file_path.relative_to(ROOT)
|
|
131
|
-
except ValueError:
|
|
132
|
-
rel_path = file_path # absolute path if outside the package tree
|
|
133
|
-
lines = count_lines(file_path)
|
|
134
|
-
total_lines += lines
|
|
135
|
-
print(f" {rel_path} ({lines} lines)")
|
|
136
|
-
|
|
137
|
-
print(f"\nTotal: {total_lines} lines across {len(all_files)} files")
|
|
161
|
+
total_lines = sum(count_lines(f) for f in all_files)
|
|
162
|
+
cli_names = {b.name for b in load_registry().all()}
|
|
163
|
+
n_clis = count_dist_clis(all_files, DIST_DIR, cli_names)
|
|
164
|
+
print(f"\n{format_build_summary(len(all_files), total_lines, n_clis)}")
|
|
138
165
|
|
|
139
166
|
|
|
140
167
|
if __name__ == '__main__':
|
|
@@ -68,6 +68,65 @@ def _validate_role(role_name: str):
|
|
|
68
68
|
sys.exit(1)
|
|
69
69
|
|
|
70
70
|
|
|
71
|
+
def _check_effort_valid(scope_state, cli_name: str, role_name: str, effort: str) -> bool:
|
|
72
|
+
"""Check effort against the role's currently-assigned model's provider on
|
|
73
|
+
cli_name. Prints the provider name and its valid effort list on failure.
|
|
74
|
+
Returns True/False — does not exit (callers decide fatal vs. non-fatal).
|
|
75
|
+
|
|
76
|
+
NO cross-provider mapping/translation — the value is checked against exactly
|
|
77
|
+
the provider that serves the role's current model, nothing more.
|
|
78
|
+
"""
|
|
79
|
+
from ..registries.model_registry import load_model_registry
|
|
80
|
+
from ..registries.cli_registry import load_registry
|
|
81
|
+
from ..registries.provider_registry import load_provider_registry
|
|
82
|
+
|
|
83
|
+
model_id = scope_state.clis[cli_name].role_models.get(role_name)
|
|
84
|
+
if not model_id:
|
|
85
|
+
print(f"No model assigned to role '{role_name}' for CLI '{cli_name}'.")
|
|
86
|
+
print("Set a model first with `agent-notes config role-model`.")
|
|
87
|
+
return False
|
|
88
|
+
|
|
89
|
+
model_registry = load_model_registry()
|
|
90
|
+
try:
|
|
91
|
+
model = model_registry.get(model_id)
|
|
92
|
+
except KeyError:
|
|
93
|
+
print(f"Unknown model '{model_id}' assigned to role '{role_name}'.")
|
|
94
|
+
return False
|
|
95
|
+
|
|
96
|
+
cli_registry = load_registry()
|
|
97
|
+
try:
|
|
98
|
+
backend = cli_registry.get(cli_name)
|
|
99
|
+
except KeyError:
|
|
100
|
+
print(f"Unknown CLI '{cli_name}'.")
|
|
101
|
+
return False
|
|
102
|
+
|
|
103
|
+
resolved = backend.first_alias_for(model.aliases)
|
|
104
|
+
if resolved is None:
|
|
105
|
+
print(f"Model '{model_id}' has no compatible provider for CLI '{cli_name}'.")
|
|
106
|
+
return False
|
|
107
|
+
provider_name, _alias = resolved
|
|
108
|
+
|
|
109
|
+
provider_registry = load_provider_registry()
|
|
110
|
+
try:
|
|
111
|
+
provider = provider_registry.get(provider_name)
|
|
112
|
+
except KeyError:
|
|
113
|
+
print(f"Provider '{provider_name}' does not support effort configuration.")
|
|
114
|
+
return False
|
|
115
|
+
|
|
116
|
+
if effort not in provider.efforts:
|
|
117
|
+
print(f"Invalid effort '{effort}' for provider '{provider_name}'.")
|
|
118
|
+
print(f"Valid efforts for {provider_name}: {', '.join(provider.efforts)}")
|
|
119
|
+
return False
|
|
120
|
+
|
|
121
|
+
return True
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def _validate_effort(scope_state, cli_name: str, role_name: str, effort: str) -> None:
|
|
125
|
+
"""Validate effort, exiting with the printed error on failure."""
|
|
126
|
+
if not _check_effort_valid(scope_state, cli_name, role_name, effort):
|
|
127
|
+
sys.exit(1)
|
|
128
|
+
|
|
129
|
+
|
|
71
130
|
def _state_snapshot(state) -> str:
|
|
72
131
|
"""Return a compact JSON snapshot of state for diffing."""
|
|
73
132
|
from ..services.state_store import _state_to_dict
|
|
@@ -156,6 +215,37 @@ def role_model(role_name: str, model_id: str, cli_filter: Optional[str] = None)
|
|
|
156
215
|
_apply_and_regenerate(state, before)
|
|
157
216
|
|
|
158
217
|
|
|
218
|
+
def role_effort(role_name: str, effort: str, cli_filter: Optional[str] = None) -> None:
|
|
219
|
+
"""Set role→effort for one or both CLIs. Validates against the role's current
|
|
220
|
+
model's provider, diffs, prompts, applies."""
|
|
221
|
+
state = _load_state()
|
|
222
|
+
before = _state_snapshot(state)
|
|
223
|
+
|
|
224
|
+
_validate_role(role_name)
|
|
225
|
+
|
|
226
|
+
scope, project_path, scope_state = _get_scope_state(state)
|
|
227
|
+
|
|
228
|
+
if cli_filter and cli_filter not in ("both",):
|
|
229
|
+
# Single CLI
|
|
230
|
+
target_clis = [cli_filter]
|
|
231
|
+
for cli_name in target_clis:
|
|
232
|
+
if cli_name not in scope_state.clis:
|
|
233
|
+
print(f"CLI '{cli_name}' not in {scope} installation.")
|
|
234
|
+
print(f"Installed CLIs: {', '.join(scope_state.clis.keys())}")
|
|
235
|
+
sys.exit(1)
|
|
236
|
+
else:
|
|
237
|
+
target_clis = list(scope_state.clis.keys())
|
|
238
|
+
|
|
239
|
+
for cli_name in target_clis:
|
|
240
|
+
_validate_effort(scope_state, cli_name, role_name, effort)
|
|
241
|
+
|
|
242
|
+
for cli_name in target_clis:
|
|
243
|
+
scope_state.clis[cli_name].role_efforts[role_name] = effort
|
|
244
|
+
print(f"Set {cli_name}: {role_name} -> {effort}")
|
|
245
|
+
|
|
246
|
+
_apply_and_regenerate(state, before)
|
|
247
|
+
|
|
248
|
+
|
|
159
249
|
def role_agent(role_name: str, agent_name: str, cli_filter: Optional[str] = None) -> None:
|
|
160
250
|
"""Set role→agent assignment (which agent files carry a given role)."""
|
|
161
251
|
# Note: in the current data model, agent-to-role mapping is in agents.yaml (source)
|
|
@@ -243,6 +333,17 @@ def show(state=None) -> None:
|
|
|
243
333
|
else:
|
|
244
334
|
print(" (no role assignments)")
|
|
245
335
|
|
|
336
|
+
if backend_state.role_efforts:
|
|
337
|
+
print(" Effort:")
|
|
338
|
+
for role_name in sorted(backend_state.role_efforts):
|
|
339
|
+
effort = backend_state.role_efforts[role_name]
|
|
340
|
+
try:
|
|
341
|
+
role = role_registry.get(role_name)
|
|
342
|
+
role_label = role.label
|
|
343
|
+
except KeyError:
|
|
344
|
+
role_label = role_name
|
|
345
|
+
print(f" {role_label:<20} {effort}")
|
|
346
|
+
|
|
246
347
|
|
|
247
348
|
# ── Interactive wizard ───────────────────────────────────────────────────────
|
|
248
349
|
|
|
@@ -313,6 +414,68 @@ def _wizard_role_model(state, before: str) -> bool:
|
|
|
313
414
|
return True
|
|
314
415
|
|
|
315
416
|
|
|
417
|
+
def _wizard_role_effort(state, before: str) -> bool:
|
|
418
|
+
"""Branch 7: interactive role→effort reassignment. Returns True if changes were applied."""
|
|
419
|
+
from ..registries.cli_registry import load_registry
|
|
420
|
+
from ..registries.role_registry import load_role_registry
|
|
421
|
+
from ..services.ui import _safe_input
|
|
422
|
+
|
|
423
|
+
scope, project_path, scope_state = _get_scope_state(state)
|
|
424
|
+
|
|
425
|
+
cli_registry = load_registry()
|
|
426
|
+
role_registry = load_role_registry()
|
|
427
|
+
|
|
428
|
+
# Show current
|
|
429
|
+
print("\nCurrent effort assignments:")
|
|
430
|
+
for cli_name, backend_state in sorted(scope_state.clis.items()):
|
|
431
|
+
try:
|
|
432
|
+
label = cli_registry.get(cli_name).label
|
|
433
|
+
except KeyError:
|
|
434
|
+
label = cli_name
|
|
435
|
+
print(f" {label.upper()}:")
|
|
436
|
+
for role_name in sorted(backend_state.role_efforts):
|
|
437
|
+
effort = backend_state.role_efforts[role_name]
|
|
438
|
+
print(f" {role_name:<20} {effort}")
|
|
439
|
+
|
|
440
|
+
cli_names = list(scope_state.clis.keys())
|
|
441
|
+
if len(cli_names) > 1:
|
|
442
|
+
cli_choice = _safe_input("\nWhich CLI? (claude / opencode / both) [both]: ", "both").strip().lower()
|
|
443
|
+
if cli_choice in ("both", ""):
|
|
444
|
+
target_clis = cli_names
|
|
445
|
+
elif cli_choice in cli_names:
|
|
446
|
+
target_clis = [cli_choice]
|
|
447
|
+
else:
|
|
448
|
+
print(f"Unknown CLI '{cli_choice}'. No changes made.")
|
|
449
|
+
return False
|
|
450
|
+
else:
|
|
451
|
+
target_clis = cli_names
|
|
452
|
+
|
|
453
|
+
role_names = role_registry.names()
|
|
454
|
+
role_choice = _safe_input(
|
|
455
|
+
f"Which role? ({'/'.join(role_names)}): ", ""
|
|
456
|
+
).strip().lower()
|
|
457
|
+
if role_choice not in role_names:
|
|
458
|
+
print(f"Unknown role '{role_choice}'. No changes made.")
|
|
459
|
+
return False
|
|
460
|
+
|
|
461
|
+
effort_choice = _safe_input(f"New effort: ", "").strip().lower()
|
|
462
|
+
if not effort_choice:
|
|
463
|
+
print("No effort entered. No changes made.")
|
|
464
|
+
return False
|
|
465
|
+
|
|
466
|
+
for cli_name in target_clis:
|
|
467
|
+
if not _check_effort_valid(scope_state, cli_name, role_choice, effort_choice):
|
|
468
|
+
print("No changes made.")
|
|
469
|
+
return False
|
|
470
|
+
|
|
471
|
+
for cli_name in target_clis:
|
|
472
|
+
scope_state.clis[cli_name].role_efforts[role_choice] = effort_choice
|
|
473
|
+
print(f"Set {cli_name}: {role_choice} -> {effort_choice}")
|
|
474
|
+
|
|
475
|
+
_apply_and_regenerate(state, before)
|
|
476
|
+
return True
|
|
477
|
+
|
|
478
|
+
|
|
316
479
|
def _wizard_memory(state, before: str) -> bool:
|
|
317
480
|
"""Branch 3: interactive memory backend change."""
|
|
318
481
|
from ..services.ui import _safe_input, _path_input
|
|
@@ -427,6 +590,7 @@ def interactive_config() -> None:
|
|
|
427
590
|
print(" 4) Skill bundles")
|
|
428
591
|
print(" 5) Show full configuration (read-only)")
|
|
429
592
|
print(" 6) API keys / providers")
|
|
593
|
+
print(" 7) Role -> effort assignments")
|
|
430
594
|
print(" q) Quit")
|
|
431
595
|
|
|
432
596
|
try:
|
|
@@ -447,6 +611,8 @@ def interactive_config() -> None:
|
|
|
447
611
|
show(state)
|
|
448
612
|
elif choice == "6":
|
|
449
613
|
_wizard_providers()
|
|
614
|
+
elif choice == "7":
|
|
615
|
+
_wizard_role_effort(state, before)
|
|
450
616
|
elif choice == "q":
|
|
451
617
|
print("Quit.")
|
|
452
618
|
else:
|
|
@@ -493,6 +659,12 @@ def config(action: str = "wizard", args: Optional[list] = None, cli_filter: Opti
|
|
|
493
659
|
print("Usage: agent-notes config role-agent <role> <agent>")
|
|
494
660
|
sys.exit(1)
|
|
495
661
|
role_agent(args[0], args[1], cli_filter=cli_filter)
|
|
662
|
+
elif action == "role-effort":
|
|
663
|
+
# args: [role_name, effort]
|
|
664
|
+
if len(args) < 2:
|
|
665
|
+
print("Usage: agent-notes config role-effort [--cli <cli>] <role> <effort>")
|
|
666
|
+
sys.exit(1)
|
|
667
|
+
role_effort(args[0], args[1], cli_filter=cli_filter)
|
|
496
668
|
elif action == "providers":
|
|
497
669
|
_wizard_providers()
|
|
498
670
|
elif action == "provider":
|
|
@@ -510,5 +682,5 @@ def config(action: str = "wizard", args: Optional[list] = None, cli_filter: Opti
|
|
|
510
682
|
cost_report_toggle(args[0])
|
|
511
683
|
else:
|
|
512
684
|
print(f"Unknown config action: {action}")
|
|
513
|
-
print("Actions: wizard, show, role-model, role-agent, providers, provider, memory, cost-report")
|
|
685
|
+
print("Actions: wizard, show, role-model, role-agent, role-effort, providers, provider, memory, cost-report")
|
|
514
686
|
sys.exit(1)
|
|
@@ -48,6 +48,20 @@ def install(local: bool = False, copy: bool = False, reconfigure: bool = False,
|
|
|
48
48
|
print(f" CLIs: {', '.join(cli_labels)}")
|
|
49
49
|
print(f" Mode: {existing.mode}")
|
|
50
50
|
print()
|
|
51
|
+
# Re-render dist/ from the persisted state pins before verifying.
|
|
52
|
+
# After a pipx upgrade/reinstall the shipped dist/ carries package
|
|
53
|
+
# defaults; installed symlinks point into dist/, so without this
|
|
54
|
+
# rebuild the user's role_models/role_efforts pins would silently
|
|
55
|
+
# revert to defaults until the next build/regenerate.
|
|
56
|
+
print("Refreshing rendered files from saved configuration ...")
|
|
57
|
+
try:
|
|
58
|
+
from ..commands.build import build
|
|
59
|
+
from ..services.fs import silent_ops
|
|
60
|
+
with silent_ops():
|
|
61
|
+
build(scope=scope, project_path=project_path, profile_label=profile_label)
|
|
62
|
+
except Exception as e:
|
|
63
|
+
print(f"{Color.YELLOW}Warning: rebuild failed: {e}{Color.NC}")
|
|
64
|
+
print()
|
|
51
65
|
print("Verifying ...")
|
|
52
66
|
issues = _verify_install(existing, scope, project_path, registry)
|
|
53
67
|
if not issues:
|
|
@@ -78,11 +92,12 @@ def install(local: bool = False, copy: bool = False, reconfigure: bool = False,
|
|
|
78
92
|
print("Global installs always use symlinks.")
|
|
79
93
|
return
|
|
80
94
|
|
|
81
|
-
# Build first
|
|
95
|
+
# Build first — scope-aware so an existing state pin set for this scope
|
|
96
|
+
# (e.g. local install after a previous local wizard run) drives the render.
|
|
82
97
|
print("Building from source...")
|
|
83
98
|
try:
|
|
84
99
|
from ..commands.build import build
|
|
85
|
-
build()
|
|
100
|
+
build(scope=scope, project_path=project_path, profile_label=profile_label)
|
|
86
101
|
except Exception as e:
|
|
87
102
|
print(f"{Color.RED}Build failed: {e}{Color.NC}")
|
|
88
103
|
return
|
|
@@ -104,7 +104,8 @@ def regenerate(scope: Optional[str] = None, cli: Optional[str] = None, local: bo
|
|
|
104
104
|
{}, # empty tiers - state-driven only
|
|
105
105
|
state=current_state,
|
|
106
106
|
scope=scope,
|
|
107
|
-
project_path=project_path
|
|
107
|
+
project_path=project_path,
|
|
108
|
+
profile_label=profile_label
|
|
108
109
|
)
|
|
109
110
|
# Count files for this CLI
|
|
110
111
|
try:
|
|
@@ -136,24 +137,27 @@ def regenerate(scope: Optional[str] = None, cli: Optional[str] = None, local: bo
|
|
|
136
137
|
|
|
137
138
|
# Update installed manifest to reflect current state
|
|
138
139
|
try:
|
|
139
|
-
# Get current role_models and overrides from state to preserve them
|
|
140
|
+
# Get current role_models/role_efforts and overrides from state to preserve them
|
|
140
141
|
existing_role_models = {}
|
|
142
|
+
existing_role_efforts = {}
|
|
141
143
|
folder_overrides = {}
|
|
142
144
|
global_home_override = None
|
|
143
145
|
for cli_name, backend_state in scope_state.clis.items():
|
|
144
146
|
existing_role_models[cli_name] = backend_state.role_models
|
|
147
|
+
existing_role_efforts[cli_name] = backend_state.role_efforts
|
|
145
148
|
if backend_state.local_dir_override:
|
|
146
149
|
folder_overrides[cli_name] = backend_state.local_dir_override
|
|
147
150
|
if backend_state.global_home_override:
|
|
148
151
|
global_home_override = backend_state.global_home_override
|
|
149
152
|
|
|
150
|
-
# Build new state with current files but preserve role_models
|
|
153
|
+
# Build new state with current files but preserve role_models/role_efforts
|
|
151
154
|
new_state = build_install_state(
|
|
152
155
|
mode=scope_state.mode,
|
|
153
156
|
scope=scope,
|
|
154
157
|
repo_root=PKG_DIR.parent,
|
|
155
158
|
project_path=project_path,
|
|
156
159
|
role_models=existing_role_models,
|
|
160
|
+
role_efforts=existing_role_efforts,
|
|
157
161
|
profile_label=profile_label,
|
|
158
162
|
folder_overrides=folder_overrides or None,
|
|
159
163
|
global_home_override=global_home_override,
|