raise-cli 2.4.0__tar.gz → 2.4.1__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.
- {raise_cli-2.4.0 → raise_cli-2.4.1}/.gitignore +0 -1
- {raise_cli-2.4.0 → raise_cli-2.4.1}/PKG-INFO +2 -1
- {raise_cli-2.4.0 → raise_cli-2.4.1}/pyproject.toml +2 -2
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/jira_adapter.py +2 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/init.py +247 -19
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/journal.py +32 -11
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/release.py +6 -8
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/session.py +6 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/main.py +2 -3
- raise_cli-2.4.1/src/raise_cli/hooks/builtin/memory.py +38 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/publish/check.py +46 -45
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/identity/core.yaml +1 -1
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/__init__.py +10 -9
- raise_cli-2.4.1/src/raise_cli/skills_base/rai-architecture-review/SKILL.md +168 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-epic-design/SKILL.md +41 -10
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-epic-docs/SKILL.md +1 -1
- raise_cli-2.4.1/src/raise_cli/skills_base/rai-quality-review/SKILL.md +206 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-session-diary/SKILL.md +6 -5
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-story-design/SKILL.md +44 -12
- raise_cli-2.4.0/src/raise_cli/cli/commands/publish.py +0 -80
- raise_cli-2.4.0/src/raise_cli/hooks/builtin/memory.py +0 -116
- {raise_cli-2.4.0 → raise_cli-2.4.1}/README.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/__main__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/composite_docs.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/confluence_adapter.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/confluence_client.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/confluence_config.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/confluence_config_gen.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/confluence_discovery.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/confluence_exceptions.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/declarative/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/declarative/adapter.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/declarative/discovery.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/declarative/expressions.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/declarative/reference/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/declarative/reference/github.yaml +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/declarative/schema.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/filesystem.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/filesystem_adapter.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/filesystem_docs.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/filesystem_models.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/jira_client.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/jira_config.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/jira_config_gen.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/jira_discovery.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/jira_exceptions.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/mcp_bridge.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/models/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/models/docs.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/models/governance.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/models/health.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/models/pm.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/protocols.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/registry.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/adapters/sync.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/agents/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/agents/antigravity.yaml +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/agents/claude.yaml +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/agents/copilot.yaml +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/agents/copilot_plugin.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/agents/cursor.yaml +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/agents/roo.yaml +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/agents/windsurf.yaml +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/artifacts/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/artifacts/models.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/artifacts/reader.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/artifacts/renderer.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/artifacts/story_design.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/artifacts/writer.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/backlog/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/backlog/sync.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/_resolve.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/adapters.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/artifact.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/backlog.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/base.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/discover.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/docs.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/doctor.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/gate.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/graph.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/info.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/learn.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/mcp.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/memory.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/pattern.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/profile.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/signal.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/skill.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/commands/skill_set.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/error_handler.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/cli/extensions.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/compat.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/compliance/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/compliance/controls.yaml +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/compliance/evidence.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/compliance/extractors/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/compliance/extractors/git.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/compliance/loader.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/compliance/models.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/config/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/config/agent_plugin.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/config/agent_registry.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/config/agents.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/config/ide.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/config/paths.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/config/settings.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/analyzers/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/analyzers/models.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/analyzers/protocol.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/analyzers/python.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/analyzers/signals.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/analyzers/typescript.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/builder.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/diff.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/extractors/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/extractors/relationships.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/extractors/skills.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/extractors/structure.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/loaders/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/loaders/architecture.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/loaders/artifacts.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/loaders/components.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/loaders/identity.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/context/loaders/memory.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/core/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/core/files.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/core/text.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/core/tools.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/discovery/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/discovery/analyzer.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/discovery/drift.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/discovery/scanner.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/doctor/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/doctor/checks/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/doctor/checks/adapters.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/doctor/checks/developer.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/doctor/checks/environment.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/doctor/checks/project.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/doctor/fix.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/doctor/models.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/doctor/protocol.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/doctor/registry.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/doctor/report.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/doctor/runner.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/engines/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/exceptions.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/gates/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/gates/builtin/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/gates/builtin/_runner.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/gates/builtin/coverage.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/gates/builtin/format.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/gates/builtin/lint.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/gates/builtin/tests.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/gates/builtin/types.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/gates/hook.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/gates/models.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/gates/protocol.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/gates/registry.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/extractor.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/models.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/parsers/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/parsers/_convert.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/parsers/adr.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/parsers/backlog.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/parsers/constitution.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/parsers/epic.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/parsers/glossary.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/parsers/guardrails.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/parsers/prd.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/parsers/roadmap.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/governance/parsers/vision.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/graph/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/graph/backends/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/graph/backends/api.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/graph/backends/dual.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/graph/backends/pending.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/handlers/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/hooks/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/hooks/builtin/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/hooks/builtin/gate_bridge.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/hooks/builtin/telemetry.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/hooks/emitter.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/hooks/events.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/hooks/protocol.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/hooks/registry.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/mcp/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/mcp/bridge.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/mcp/models.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/mcp/registry.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/mcp/schema.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/memory/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/memory/learning.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/memory/loader.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/memory/migration.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/memory/models.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/memory/push.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/memory/writer.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/bootstrap.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/claudemd.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/conventions.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/detection.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/governance.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/instructions.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/manifest.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/memory_md.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/migration.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/profile.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/profile_portability.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/skill_conflict.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/skill_manifest.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/skills.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/onboarding/workflows.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/output/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/output/console.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/output/formatters/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/output/formatters/adapters.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/output/formatters/discover.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/output/formatters/graph.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/output/formatters/skill.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/output/symbols.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/publish/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/publish/changelog.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/publish/version.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/framework/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/framework/methodology.yaml +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/governance/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/governance/architecture/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/governance/architecture/domain-model.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/governance/architecture/domain-model.yaml +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/governance/architecture/system-context.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/governance/architecture/system-context.yaml +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/governance/architecture/system-design.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/governance/architecture/system-design.yaml +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/governance/backlog.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/governance/guardrails.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/governance/prd.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/governance/vision.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/identity/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/identity/core.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/identity/perspective.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/memory/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/rai_base/memory/patterns-base.jsonl +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/schemas/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/schemas/journal.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/schemas/session_state.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/bundle.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/bundle_data.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/bundle_formatters.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/close.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/derive.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/doctor.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/identity.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/index.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/journal.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/monitor.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/prefix.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/protocols.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/registry.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/resolver.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/session/state.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills/locator.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills/name_checker.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills/parser.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills/scaffold.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills/schema.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills/skillsets.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills/validator.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/contract-template.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/preamble.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-adapter-setup/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-bugfix-analyse/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-bugfix-close/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-bugfix-fix/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-bugfix-plan/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-bugfix-review/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-bugfix-run/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-bugfix-start/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-bugfix-triage/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-debug/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-discover/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-docs-update/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-doctor/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-epic-close/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-epic-close/templates/retrospective.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-epic-design/templates/design.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-epic-design/templates/scope.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-epic-plan/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-epic-plan/_references/sequencing-strategies.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-epic-plan/templates/plan-section.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-epic-run/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-epic-start/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-epic-start/templates/brief.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-mcp-add/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-mcp-remove/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-mcp-status/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-problem-shape/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-project-create/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-project-onboard/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-research/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-research/references/research-prompt-template.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-session-close/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-session-start/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-story-close/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-story-design/references/tech-design-story-v2.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-story-implement/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-story-plan/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-story-review/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-story-run/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-story-start/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-story-start/templates/story.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/skills_base/rai-welcome/SKILL.md +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/telemetry/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/telemetry/schemas.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/telemetry/writer.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/tier/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/tier/context.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/viz/__init__.py +0 -0
- {raise_cli-2.4.0 → raise_cli-2.4.1}/src/raise_cli/viz/generator.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: raise-cli
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.1
|
|
4
4
|
Summary: RaiSE CLI - Reliable AI Software Engineering governance framework
|
|
5
5
|
Project-URL: Homepage, https://raiseframework.ai
|
|
6
6
|
Project-URL: Documentation, https://docs.raiseframework.ai
|
|
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
18
18
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
19
19
|
Classifier: Topic :: Software Development :: Quality Assurance
|
|
20
20
|
Requires-Python: >=3.12
|
|
21
|
+
Requires-Dist: httpx>=0.27.0
|
|
21
22
|
Requires-Dist: logfire-api>=4.0
|
|
22
23
|
Requires-Dist: networkx>=3.6.1
|
|
23
24
|
Requires-Dist: pydantic-settings>=2.2.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "raise-cli"
|
|
3
|
-
version = "2.4.
|
|
3
|
+
version = "2.4.1"
|
|
4
4
|
description = "RaiSE CLI - Reliable AI Software Engineering governance framework"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Emilio Osorio", email = "emilio@humansys.ai"}
|
|
@@ -36,6 +36,7 @@ dependencies = [
|
|
|
36
36
|
"tree-sitter-svelte>=1.0.2",
|
|
37
37
|
"tree-sitter-language-pack>=0.13.0",
|
|
38
38
|
"logfire-api>=4.0",
|
|
39
|
+
"httpx>=0.27.0",
|
|
39
40
|
]
|
|
40
41
|
|
|
41
42
|
[project.optional-dependencies]
|
|
@@ -81,7 +82,6 @@ glossary = "raise_cli.governance.parsers.glossary:GlossaryParser"
|
|
|
81
82
|
[project.entry-points."rai.hooks"]
|
|
82
83
|
telemetry = "raise_cli.hooks.builtin.telemetry:TelemetryHook"
|
|
83
84
|
gate-bridge = "raise_cli.hooks.builtin.gate_bridge:GateBridgeHook"
|
|
84
|
-
memory-sync = "raise_cli.hooks.builtin.memory:MemoryMdSyncHook"
|
|
85
85
|
|
|
86
86
|
[project.entry-points."rai.gates"]
|
|
87
87
|
tests = "raise_cli.gates.builtin.tests:TestGate"
|
|
@@ -212,6 +212,8 @@ class PythonApiJiraAdapter:
|
|
|
212
212
|
fields["description"] = issue.description
|
|
213
213
|
if issue.labels:
|
|
214
214
|
fields["labels"] = issue.labels
|
|
215
|
+
if issue.metadata.get("parent"):
|
|
216
|
+
fields["parent"] = {"key": issue.metadata["parent"]}
|
|
215
217
|
|
|
216
218
|
result = client.create_issue(fields)
|
|
217
219
|
key = result.get("key", "")
|
|
@@ -511,32 +511,67 @@ def _create_and_save_manifest(
|
|
|
511
511
|
detection: DetectionResult,
|
|
512
512
|
valid_agent_types: list[str],
|
|
513
513
|
) -> ProjectManifest:
|
|
514
|
-
"""Create project manifest from detection results and save it.
|
|
514
|
+
"""Create project manifest from detection results and save it.
|
|
515
|
+
|
|
516
|
+
When an existing manifest is present, preserve user-configured values
|
|
517
|
+
and only update detection-derived fields (RAISE-1431, RAISE-1320).
|
|
518
|
+
|
|
519
|
+
Preserved on re-init: name, ide, agents, language (if set), detected_at,
|
|
520
|
+
toolchain commands (if user-configured), branches, tier, backlog.
|
|
521
|
+
Updated on re-init: project_type, code_file_count (always re-scanned).
|
|
522
|
+
"""
|
|
515
523
|
existing_manifest = load_manifest(project_path)
|
|
524
|
+
ep = existing_manifest.project if existing_manifest else None
|
|
525
|
+
|
|
526
|
+
# Preserve existing name if caller got it from directory (no --name flag)
|
|
527
|
+
effective_name = project_name
|
|
528
|
+
if ep and ep.name and project_name == project_path.name:
|
|
529
|
+
effective_name = ep.name
|
|
530
|
+
|
|
531
|
+
# Preserve user-configured language; fall back to detection (RAISE-1320)
|
|
532
|
+
effective_language = ep.language if ep and ep.language else detection.language
|
|
533
|
+
|
|
534
|
+
# Preserve user-configured toolchain commands; fall back to detection
|
|
535
|
+
detected_test = detection.toolchain.test_command if detection.toolchain else None
|
|
536
|
+
detected_lint = detection.toolchain.lint_command if detection.toolchain else None
|
|
537
|
+
detected_type = detection.toolchain.type_check_command if detection.toolchain else None
|
|
538
|
+
detected_format = detection.toolchain.format_command if detection.toolchain else None
|
|
516
539
|
|
|
517
540
|
project_info = ProjectInfo(
|
|
518
|
-
name=
|
|
541
|
+
name=effective_name,
|
|
519
542
|
project_type=detection.project_type,
|
|
520
543
|
code_file_count=detection.code_file_count,
|
|
521
|
-
language=
|
|
522
|
-
test_command=
|
|
523
|
-
lint_command=
|
|
524
|
-
type_check_command=
|
|
525
|
-
|
|
526
|
-
)
|
|
544
|
+
language=effective_language,
|
|
545
|
+
test_command=ep.test_command if ep and ep.test_command else detected_test,
|
|
546
|
+
lint_command=ep.lint_command if ep and ep.lint_command else detected_lint,
|
|
547
|
+
type_check_command=ep.type_check_command if ep and ep.type_check_command else detected_type,
|
|
548
|
+
format_command=ep.format_command if ep and ep.format_command else detected_format,
|
|
549
|
+
# Preserve original detected_at timestamp on re-init (RAISE-1320)
|
|
550
|
+
**({"detected_at": ep.detected_at} if ep else {}),
|
|
527
551
|
)
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
552
|
+
|
|
553
|
+
# Preserve existing agents/ide if present, merge new detections (RAISE-1431)
|
|
554
|
+
if existing_manifest:
|
|
555
|
+
existing_agents = existing_manifest.agents.types if existing_manifest.agents else []
|
|
556
|
+
merged_agents = list(dict.fromkeys(existing_agents + valid_agent_types))
|
|
557
|
+
effective_agents = merged_agents
|
|
558
|
+
effective_ide = existing_manifest.ide
|
|
559
|
+
else:
|
|
560
|
+
effective_agents = valid_agent_types
|
|
561
|
+
primary = valid_agent_types[0] if valid_agent_types else "claude"
|
|
562
|
+
try:
|
|
563
|
+
effective_ide = IdeManifest(type=primary) # type: ignore[arg-type]
|
|
564
|
+
except Exception:
|
|
565
|
+
effective_ide = IdeManifest()
|
|
566
|
+
|
|
534
567
|
manifest = ProjectManifest(
|
|
535
568
|
project=project_info,
|
|
536
|
-
agents=AgentsManifest(types=
|
|
537
|
-
ide=
|
|
569
|
+
agents=AgentsManifest(types=effective_agents),
|
|
570
|
+
ide=effective_ide,
|
|
538
571
|
branches=existing_manifest.branches if existing_manifest else BranchConfig(),
|
|
539
572
|
tier=existing_manifest.tier if existing_manifest else None,
|
|
573
|
+
# Preserve backlog config on re-init (RAISE-1320)
|
|
574
|
+
backlog=existing_manifest.backlog if existing_manifest else None,
|
|
540
575
|
)
|
|
541
576
|
save_manifest(manifest, project_path)
|
|
542
577
|
return manifest
|
|
@@ -678,6 +713,14 @@ def _detect_and_generate_guardrails(
|
|
|
678
713
|
guardrails_dir = project_path / "governance"
|
|
679
714
|
guardrails_dir.mkdir(parents=True, exist_ok=True)
|
|
680
715
|
guardrails_path = guardrails_dir / "guardrails.md"
|
|
716
|
+
|
|
717
|
+
# Never overwrite user-customized guardrails on re-init (RAISE-1320/Gustavo).
|
|
718
|
+
# Allow overwrite of empty scaffold templates (contain "fill with" marker).
|
|
719
|
+
if guardrails_path.exists():
|
|
720
|
+
existing = guardrails_path.read_text(encoding="utf-8")
|
|
721
|
+
if "fill with /rai-project-create" not in existing:
|
|
722
|
+
return
|
|
723
|
+
|
|
681
724
|
guardrails_path.write_text(guardrails_content, encoding="utf-8")
|
|
682
725
|
|
|
683
726
|
instructions_path = project_path / instructions_file
|
|
@@ -799,19 +842,32 @@ def init_command(
|
|
|
799
842
|
) -> None:
|
|
800
843
|
"""Initialize a RaiSE project in the current directory.
|
|
801
844
|
|
|
802
|
-
|
|
803
|
-
|
|
845
|
+
First-time setup only. If the project is already initialized (.raise/ exists),
|
|
846
|
+
use ``rai upgrade`` instead to update skills, framework files, and configuration.
|
|
804
847
|
|
|
805
848
|
Examples:
|
|
806
849
|
$ rai init # defaults to claude
|
|
807
850
|
$ rai init --agent cursor # single agent
|
|
808
851
|
$ rai init --agent claude --agent cursor # multi-agent
|
|
809
852
|
$ rai init --detect # auto-detect agents
|
|
810
|
-
$ rai init --
|
|
853
|
+
$ rai init --force # re-init (destructive)
|
|
811
854
|
"""
|
|
812
855
|
project_path = (path if path is not None else Path.cwd()).resolve()
|
|
813
856
|
project_name = name if name is not None else project_path.name
|
|
814
857
|
|
|
858
|
+
# Guard: already initialized? Suggest rai upgrade (RAISE-1462)
|
|
859
|
+
raise_dir = project_path / ".raise"
|
|
860
|
+
if raise_dir.is_dir() and not force:
|
|
861
|
+
console.print(
|
|
862
|
+
"[yellow]Project already initialized[/yellow] "
|
|
863
|
+
f"(.raise/ exists at {project_path}).\n\n"
|
|
864
|
+
"To update skills and framework files, run:\n"
|
|
865
|
+
" [bold]rai upgrade[/bold]\n\n"
|
|
866
|
+
"To re-initialize from scratch, run:\n"
|
|
867
|
+
" [bold]rai init --force[/bold]"
|
|
868
|
+
)
|
|
869
|
+
raise typer.Exit(code=1)
|
|
870
|
+
|
|
815
871
|
# Load or create developer profile
|
|
816
872
|
profile, created_profile = _load_or_create_profile(project_path)
|
|
817
873
|
|
|
@@ -900,3 +956,175 @@ def init_command(
|
|
|
900
956
|
_detect_and_generate_guardrails(
|
|
901
957
|
project_path, project_name, profile, first_config.instructions_file
|
|
902
958
|
)
|
|
959
|
+
|
|
960
|
+
|
|
961
|
+
# =============================================================================
|
|
962
|
+
# rai upgrade — re-init with merge strategy (RAISE-1462)
|
|
963
|
+
# =============================================================================
|
|
964
|
+
|
|
965
|
+
|
|
966
|
+
def upgrade_command(
|
|
967
|
+
path: Annotated[
|
|
968
|
+
Path | None,
|
|
969
|
+
typer.Option(
|
|
970
|
+
"--path",
|
|
971
|
+
"-p",
|
|
972
|
+
help="Project root directory (defaults to current directory).",
|
|
973
|
+
),
|
|
974
|
+
] = None,
|
|
975
|
+
detect: Annotated[
|
|
976
|
+
bool,
|
|
977
|
+
typer.Option(
|
|
978
|
+
"--detect",
|
|
979
|
+
"-d",
|
|
980
|
+
help="Re-detect installed agents and update AGENTS.md.",
|
|
981
|
+
),
|
|
982
|
+
] = False,
|
|
983
|
+
dry_run: Annotated[
|
|
984
|
+
bool,
|
|
985
|
+
typer.Option(
|
|
986
|
+
"--dry-run",
|
|
987
|
+
help="Preview skill updates without writing files.",
|
|
988
|
+
),
|
|
989
|
+
] = False,
|
|
990
|
+
force: Annotated[
|
|
991
|
+
bool,
|
|
992
|
+
typer.Option(
|
|
993
|
+
"--force",
|
|
994
|
+
help="Overwrite all skill files without prompting.",
|
|
995
|
+
),
|
|
996
|
+
] = False,
|
|
997
|
+
skip_updates: Annotated[
|
|
998
|
+
bool,
|
|
999
|
+
typer.Option(
|
|
1000
|
+
"--skip-updates",
|
|
1001
|
+
help="Keep all existing skills, only install new ones.",
|
|
1002
|
+
),
|
|
1003
|
+
] = False,
|
|
1004
|
+
skill_set: Annotated[
|
|
1005
|
+
str | None,
|
|
1006
|
+
typer.Option(
|
|
1007
|
+
"--skill-set",
|
|
1008
|
+
help="Overlay a skill set from .raise/skills/{name}/ on top of builtins.",
|
|
1009
|
+
),
|
|
1010
|
+
] = None,
|
|
1011
|
+
) -> None:
|
|
1012
|
+
"""Update an existing RaiSE project to the latest version.
|
|
1013
|
+
|
|
1014
|
+
Updates skills, framework files, and regenerates CLAUDE.md while preserving
|
|
1015
|
+
user-configured values (manifest fields, governance docs, custom skills).
|
|
1016
|
+
|
|
1017
|
+
Use ``rai init`` for first-time project setup.
|
|
1018
|
+
|
|
1019
|
+
Examples:
|
|
1020
|
+
$ rai upgrade # update skills + framework
|
|
1021
|
+
$ rai upgrade --detect # also re-detect agents
|
|
1022
|
+
$ rai upgrade --dry-run # preview changes
|
|
1023
|
+
$ rai upgrade --skip-updates # only install new skills
|
|
1024
|
+
"""
|
|
1025
|
+
project_path = (path if path is not None else Path.cwd()).resolve()
|
|
1026
|
+
|
|
1027
|
+
# Guard: must be initialized
|
|
1028
|
+
raise_dir = project_path / ".raise"
|
|
1029
|
+
if not raise_dir.is_dir():
|
|
1030
|
+
console.print(
|
|
1031
|
+
"[red]Project not initialized[/red] "
|
|
1032
|
+
f"(no .raise/ at {project_path}).\n\n"
|
|
1033
|
+
"Run [bold]rai init[/bold] first to set up the project."
|
|
1034
|
+
)
|
|
1035
|
+
raise typer.Exit(code=1)
|
|
1036
|
+
|
|
1037
|
+
# Load existing manifest for project name
|
|
1038
|
+
existing_manifest = load_manifest(project_path)
|
|
1039
|
+
project_name = (
|
|
1040
|
+
existing_manifest.project.name if existing_manifest else project_path.name
|
|
1041
|
+
)
|
|
1042
|
+
|
|
1043
|
+
# Load developer profile (never create on upgrade)
|
|
1044
|
+
_profile, _created = _load_or_create_profile(project_path)
|
|
1045
|
+
|
|
1046
|
+
# Detect project type
|
|
1047
|
+
detection = detect_project_type(project_path)
|
|
1048
|
+
|
|
1049
|
+
# Load agent registry and resolve agent types
|
|
1050
|
+
registry = load_registry(project_root=project_path)
|
|
1051
|
+
if detect:
|
|
1052
|
+
agent_types = _resolve_agent_types(None, None, True, project_path, registry)
|
|
1053
|
+
elif existing_manifest:
|
|
1054
|
+
agent_types = existing_manifest.agents.types if existing_manifest.agents else ["claude"]
|
|
1055
|
+
else:
|
|
1056
|
+
agent_types = ["claude"]
|
|
1057
|
+
|
|
1058
|
+
valid_agent_types = _validate_agent_types(agent_types, registry)
|
|
1059
|
+
|
|
1060
|
+
# Update manifest with merge strategy (preserves user config)
|
|
1061
|
+
manifest = _create_and_save_manifest(
|
|
1062
|
+
project_path, project_name, detection, valid_agent_types
|
|
1063
|
+
)
|
|
1064
|
+
|
|
1065
|
+
# Bootstrap (idempotent — skips existing files)
|
|
1066
|
+
_bootstrap_result, _governance_result, memory_content = _bootstrap_project_assets(
|
|
1067
|
+
project_path, project_name, manifest
|
|
1068
|
+
)
|
|
1069
|
+
|
|
1070
|
+
# Update skills (diff/merge UX)
|
|
1071
|
+
first_config = registry.get_config(valid_agent_types[0])
|
|
1072
|
+
first_skills_result = _scaffold_per_agent(
|
|
1073
|
+
project_path,
|
|
1074
|
+
valid_agent_types,
|
|
1075
|
+
registry,
|
|
1076
|
+
memory_content,
|
|
1077
|
+
force=force,
|
|
1078
|
+
skip_updates=skip_updates,
|
|
1079
|
+
dry_run=dry_run,
|
|
1080
|
+
skill_set=skill_set,
|
|
1081
|
+
)
|
|
1082
|
+
|
|
1083
|
+
# Dry-run: show summary and exit
|
|
1084
|
+
if dry_run and first_skills_result is not None:
|
|
1085
|
+
_print_skill_sync_summary(first_skills_result)
|
|
1086
|
+
has_updates = bool(
|
|
1087
|
+
first_skills_result.skills_updated
|
|
1088
|
+
or first_skills_result.skills_installed
|
|
1089
|
+
or first_skills_result.skills_conflicted
|
|
1090
|
+
)
|
|
1091
|
+
raise typer.Exit(code=0 if not has_updates else 1)
|
|
1092
|
+
|
|
1093
|
+
# Regenerate CLAUDE.md (it's generated, safe to overwrite)
|
|
1094
|
+
if raise_dir.is_dir():
|
|
1095
|
+
instructions_content = generate_instructions(
|
|
1096
|
+
project_name=project_name,
|
|
1097
|
+
detection=detection,
|
|
1098
|
+
project_path=project_path,
|
|
1099
|
+
)
|
|
1100
|
+
instructions_path = project_path / first_config.instructions_file
|
|
1101
|
+
instructions_path.parent.mkdir(parents=True, exist_ok=True)
|
|
1102
|
+
instructions_path.write_text(instructions_content, encoding="utf-8")
|
|
1103
|
+
|
|
1104
|
+
# Emit event
|
|
1105
|
+
emitter = create_emitter()
|
|
1106
|
+
emitter.emit(
|
|
1107
|
+
InitCompleteEvent(
|
|
1108
|
+
project_path=project_path,
|
|
1109
|
+
project_name=project_name,
|
|
1110
|
+
)
|
|
1111
|
+
)
|
|
1112
|
+
|
|
1113
|
+
# AGENTS.md on --detect
|
|
1114
|
+
if detect:
|
|
1115
|
+
_generate_agents_md(project_path, valid_agent_types, project_name)
|
|
1116
|
+
|
|
1117
|
+
# Output
|
|
1118
|
+
console.print(
|
|
1119
|
+
f"\n[bold green]Upgrade complete[/bold green] — {project_name}\n"
|
|
1120
|
+
)
|
|
1121
|
+
if first_skills_result:
|
|
1122
|
+
installed = len(first_skills_result.skills_installed)
|
|
1123
|
+
updated = len(first_skills_result.skills_updated)
|
|
1124
|
+
kept = len(first_skills_result.skills_kept)
|
|
1125
|
+
if installed or updated:
|
|
1126
|
+
console.print(
|
|
1127
|
+
f" Skills: {installed} new, {updated} updated, {kept} unchanged"
|
|
1128
|
+
)
|
|
1129
|
+
else:
|
|
1130
|
+
console.print(" Skills: all up to date")
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
"""CLI commands for session journal —
|
|
1
|
+
"""CLI commands for session journal — DEPRECATED.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
The journal system is deprecated as of v3.0.0a1 (RAISE-1433). The append-only
|
|
4
|
+
journal relied on Claude Code hook injection for post-compaction recovery,
|
|
5
|
+
which is broken (CC bugs #12671, #15174). Commands remain functional for
|
|
6
|
+
backward compatibility but will be removed in v3.1.
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
$ rai session journal add "Use JSONL for persistence" --type decision
|
|
8
|
-
$ rai session journal show --last 5
|
|
9
|
-
$ rai session journal show --compact
|
|
8
|
+
Use ``/rai-session-close`` skill for full session continuity instead.
|
|
10
9
|
"""
|
|
11
10
|
|
|
12
11
|
from __future__ import annotations
|
|
@@ -97,11 +96,26 @@ def add(
|
|
|
97
96
|
) -> None:
|
|
98
97
|
"""Add a journal entry to the current session.
|
|
99
98
|
|
|
99
|
+
.. deprecated:: 3.0.0a1
|
|
100
|
+
Journal is deprecated (RAISE-1433). Use /rai-session-close for continuity.
|
|
101
|
+
|
|
100
102
|
Examples:
|
|
101
103
|
$ rai session journal add "Use JSONL for journal" --type decision
|
|
102
104
|
$ rai session journal add "T1 complete" --type task_done
|
|
103
|
-
$ rai session journal add "Compaction loses rationale" --type insight --tags "compaction,memory"
|
|
104
105
|
"""
|
|
106
|
+
import warnings
|
|
107
|
+
|
|
108
|
+
warnings.warn(
|
|
109
|
+
"rai session journal is deprecated (RAISE-1433). "
|
|
110
|
+
"Use /rai-session-close skill for session continuity.",
|
|
111
|
+
DeprecationWarning,
|
|
112
|
+
stacklevel=1,
|
|
113
|
+
)
|
|
114
|
+
typer.echo(
|
|
115
|
+
"Warning: journal is deprecated (RAISE-1433). "
|
|
116
|
+
"Use /rai-session-close for session continuity.",
|
|
117
|
+
err=True,
|
|
118
|
+
)
|
|
105
119
|
session_dir = _resolve_session_dir(project)
|
|
106
120
|
tag_list = [t.strip() for t in tags.split(",") if t.strip()] if tags else []
|
|
107
121
|
|
|
@@ -143,14 +157,21 @@ def show(
|
|
|
143
157
|
) -> None:
|
|
144
158
|
"""Show journal entries for the current session.
|
|
145
159
|
|
|
146
|
-
|
|
147
|
-
|
|
160
|
+
.. deprecated:: 3.0.0a1
|
|
161
|
+
Journal is deprecated (RAISE-1433). Use /rai-session-close for continuity.
|
|
148
162
|
|
|
149
163
|
Examples:
|
|
150
164
|
$ rai session journal show
|
|
151
|
-
$ rai session journal show --last 5
|
|
152
165
|
$ rai session journal show --compact
|
|
153
166
|
"""
|
|
167
|
+
import warnings
|
|
168
|
+
|
|
169
|
+
warnings.warn(
|
|
170
|
+
"rai session journal is deprecated (RAISE-1433). "
|
|
171
|
+
"Use /rai-session-close skill for session continuity.",
|
|
172
|
+
DeprecationWarning,
|
|
173
|
+
stacklevel=1,
|
|
174
|
+
)
|
|
154
175
|
session_dir = _resolve_session_dir(project)
|
|
155
176
|
entries = read_journal(session_dir, last_n=last)
|
|
156
177
|
|
|
@@ -42,12 +42,11 @@ GRAPH_REL_PATH = Path(".raise") / "rai" / "memory" / "index.json"
|
|
|
42
42
|
# =============================================================================
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
def _find_project_paths(project: Path) -> tuple[Path, Path
|
|
46
|
-
"""Find pyproject.toml
|
|
45
|
+
def _find_project_paths(project: Path) -> tuple[Path, Path]:
|
|
46
|
+
"""Find pyproject.toml and CHANGELOG.md paths."""
|
|
47
47
|
pyproject_path = project / "pyproject.toml"
|
|
48
48
|
changelog_path = project / "CHANGELOG.md"
|
|
49
|
-
|
|
50
|
-
return pyproject_path, init_path, changelog_path
|
|
49
|
+
return pyproject_path, changelog_path
|
|
51
50
|
|
|
52
51
|
|
|
53
52
|
def _read_current_version(pyproject_path: Path) -> str:
|
|
@@ -180,12 +179,11 @@ def check_command(
|
|
|
180
179
|
$ rai release check
|
|
181
180
|
$ rai release check --project /path/to/project
|
|
182
181
|
"""
|
|
183
|
-
pyproject_path,
|
|
182
|
+
pyproject_path, changelog_path = _find_project_paths(project)
|
|
184
183
|
|
|
185
184
|
results = run_checks(
|
|
186
185
|
project_root=project,
|
|
187
186
|
pyproject_path=pyproject_path,
|
|
188
|
-
init_path=init_path,
|
|
189
187
|
changelog_path=changelog_path,
|
|
190
188
|
)
|
|
191
189
|
|
|
@@ -319,13 +317,13 @@ def publish_command(
|
|
|
319
317
|
console.print("[red]Either --bump or --version is required[/red]")
|
|
320
318
|
raise typer.Exit(1)
|
|
321
319
|
|
|
322
|
-
pyproject_path,
|
|
320
|
+
pyproject_path, changelog_path = _find_project_paths(project)
|
|
321
|
+
init_path = project / "src" / "raise_cli" / "__init__.py"
|
|
323
322
|
|
|
324
323
|
if not skip_check:
|
|
325
324
|
results = run_checks(
|
|
326
325
|
project_root=project,
|
|
327
326
|
pyproject_path=pyproject_path,
|
|
328
|
-
init_path=init_path,
|
|
329
327
|
changelog_path=changelog_path,
|
|
330
328
|
)
|
|
331
329
|
all_passed = _display_results(results)
|
|
@@ -627,6 +627,12 @@ def close( # noqa: C901
|
|
|
627
627
|
summary=summary or "",
|
|
628
628
|
session_type=session_type or "feature",
|
|
629
629
|
)
|
|
630
|
+
typer.echo(
|
|
631
|
+
"Warning: --summary close captures only a summary. "
|
|
632
|
+
"For full session continuity (narrative, patterns, next-session prompt), "
|
|
633
|
+
"use the /rai-session-close skill instead.",
|
|
634
|
+
err=True,
|
|
635
|
+
)
|
|
630
636
|
|
|
631
637
|
# Coherence validation: reject if state file session_id
|
|
632
638
|
# doesn't match the target session. Prevents race condition where
|
|
@@ -20,13 +20,12 @@ from raise_cli.cli.commands.doctor import doctor_app
|
|
|
20
20
|
from raise_cli.cli.commands.gate import gate_app
|
|
21
21
|
from raise_cli.cli.commands.graph import graph_app
|
|
22
22
|
from raise_cli.cli.commands.info import info_command
|
|
23
|
-
from raise_cli.cli.commands.init import init_command
|
|
23
|
+
from raise_cli.cli.commands.init import init_command, upgrade_command
|
|
24
24
|
from raise_cli.cli.commands.learn import learn_app
|
|
25
25
|
from raise_cli.cli.commands.mcp import mcp_app
|
|
26
26
|
from raise_cli.cli.commands.memory import memory_app
|
|
27
27
|
from raise_cli.cli.commands.pattern import pattern_app
|
|
28
28
|
from raise_cli.cli.commands.profile import profile_app
|
|
29
|
-
from raise_cli.cli.commands.publish import publish_app
|
|
30
29
|
from raise_cli.cli.commands.release import release_app
|
|
31
30
|
from raise_cli.cli.commands.session import session_app
|
|
32
31
|
from raise_cli.cli.commands.signal import signal_app
|
|
@@ -69,7 +68,6 @@ app.add_typer(mcp_app, name="mcp")
|
|
|
69
68
|
app.add_typer(memory_app, name="memory")
|
|
70
69
|
app.add_typer(pattern_app, name="pattern")
|
|
71
70
|
app.add_typer(profile_app, name="profile")
|
|
72
|
-
app.add_typer(publish_app, name="publish")
|
|
73
71
|
app.add_typer(release_app, name="release")
|
|
74
72
|
app.add_typer(session_app, name="session")
|
|
75
73
|
app.add_typer(signal_app, name="signal")
|
|
@@ -78,6 +76,7 @@ app.add_typer(skill_app, name="skill")
|
|
|
78
76
|
# Register standalone commands
|
|
79
77
|
app.command("info")(info_command)
|
|
80
78
|
app.command("init")(init_command)
|
|
79
|
+
app.command("upgrade")(upgrade_command)
|
|
81
80
|
|
|
82
81
|
# Register CLI extensions from external packages
|
|
83
82
|
discover_cli_extensions(app)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Built-in MemoryMdSyncHook — DISABLED.
|
|
2
|
+
|
|
3
|
+
Previously regenerated MEMORY.md after graph build. Disabled because
|
|
4
|
+
MEMORY.md is owned by Claude Code's auto-memory system (see RAISE-1459).
|
|
5
|
+
|
|
6
|
+
CLAUDE.md (user-managed) is the correct place for always-on context.
|
|
7
|
+
MEMORY.md and memory/*.md are Claude-managed auto-memory files.
|
|
8
|
+
|
|
9
|
+
Architecture: E1132 Wave 4, CC source memoryFileDetection.ts:127-131.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import logging
|
|
15
|
+
from typing import ClassVar
|
|
16
|
+
|
|
17
|
+
from raise_cli.hooks.events import HookEvent, HookResult
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class MemoryMdSyncHook:
|
|
23
|
+
"""DISABLED — MEMORY.md is owned by Claude auto-memory.
|
|
24
|
+
|
|
25
|
+
Kept as a stub to avoid import errors from any code that references
|
|
26
|
+
this class. The entry point has been removed from pyproject.toml
|
|
27
|
+
so this hook is never discovered or invoked by the hook system.
|
|
28
|
+
|
|
29
|
+
See: RAISE-1459, E1132 Wave 4 (CC reverse engineering)
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
events: ClassVar[list[str]] = ["graph:build"]
|
|
33
|
+
priority: ClassVar[int] = 0
|
|
34
|
+
|
|
35
|
+
def handle(self, event: HookEvent) -> HookResult:
|
|
36
|
+
"""No-op. Returns ok without writing any files."""
|
|
37
|
+
logger.debug("MemoryMdSyncHook disabled (RAISE-1459)")
|
|
38
|
+
return HookResult(status="ok", message="disabled — MEMORY.md owned by Claude auto-memory")
|