raise-cli 3.0.0a4__tar.gz → 3.0.0a5__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-3.0.0a4 → raise_cli-3.0.0a5}/.gitignore +13 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/PKG-INFO +4 -4
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/pyproject.toml +20 -9
- raise_cli-3.0.0a5/src/raise_cli/_agent_session.py +139 -0
- raise_cli-3.0.0a5/src/raise_cli/_cc_session.py +8 -0
- raise_cli-3.0.0a5/src/raise_cli/adapters/backlog_config.py +190 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/composite_docs.py +30 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/composite_pm.py +148 -23
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/confluence_adapter.py +30 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/confluence_client.py +43 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/declarative/adapter.py +64 -4
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/filesystem.py +94 -27
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/filesystem_docs.py +32 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/filesystem_models.py +1 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/jira_adapter.py +207 -92
- raise_cli-3.0.0a5/src/raise_cli/adapters/jira_adf.py +397 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/jira_client.py +162 -15
- raise_cli-3.0.0a5/src/raise_cli/adapters/jira_config.py +13 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/jira_config_gen.py +18 -21
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/ledger_aware.py +41 -4
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/models/__init__.py +12 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/models/docs.py +7 -0
- raise_cli-3.0.0a5/src/raise_cli/adapters/models/pm.py +316 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/pending_ops.py +19 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/protocols.py +88 -7
- raise_cli-3.0.0a5/src/raise_cli/adapters/resolve.py +215 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/sync.py +66 -4
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/agents/claude.yaml +2 -1
- raise_cli-3.0.0a5/src/raise_cli/agents/codex.yaml +10 -0
- raise_cli-3.0.0a5/src/raise_cli/agents/codex_plugin.py +207 -0
- raise_cli-3.0.0a5/src/raise_cli/agents/hermes.yaml +8 -0
- raise_cli-3.0.0a5/src/raise_cli/backlog/ledger.py +294 -0
- raise_cli-3.0.0a5/src/raise_cli/cli/commands/_resolve.py +228 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/adapter_setup.py +2 -2
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/backlog.py +421 -5
- raise_cli-3.0.0a5/src/raise_cli/cli/commands/db.py +144 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/discover.py +250 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/docs.py +54 -0
- raise_cli-3.0.0a5/src/raise_cli/cli/commands/drift.py +424 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/gate.py +49 -14
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/graph.py +183 -5
- raise_cli-3.0.0a5/src/raise_cli/cli/commands/hud.py +21 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/init.py +79 -4
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/journal.py +12 -18
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/memory.py +84 -0
- raise_cli-3.0.0a5/src/raise_cli/cli/commands/mission.py +345 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/pattern.py +20 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/session.py +244 -11
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/signal.py +270 -42
- raise_cli-3.0.0a5/src/raise_cli/cli/commands/telemetry.py +120 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/extensions.py +0 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/main.py +10 -4
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/config/agent_registry.py +12 -9
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/config/agents.py +25 -3
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/config/paths.py +84 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/config/settings.py +16 -8
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/builder.py +35 -9
- raise_cli-3.0.0a5/src/raise_cli/context/loaders/missions.py +71 -0
- raise_cli-3.0.0a5/src/raise_cli/context/loaders/symbols.py +467 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/discovery/__init__.py +48 -0
- raise_cli-3.0.0a5/src/raise_cli/discovery/check.py +340 -0
- raise_cli-3.0.0a5/src/raise_cli/discovery/clone.py +280 -0
- raise_cli-3.0.0a5/src/raise_cli/discovery/corpus.py +198 -0
- raise_cli-3.0.0a5/src/raise_cli/discovery/metric.py +304 -0
- raise_cli-3.0.0a5/src/raise_cli/discovery/sast.py +306 -0
- raise_cli-3.0.0a5/src/raise_cli/discovery/temporal.py +391 -0
- raise_cli-3.0.0a5/src/raise_cli/discovery/thresholds.py +272 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/doctor/checks/adapters.py +7 -7
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/doctor/checks/project.py +43 -0
- raise_cli-3.0.0a5/src/raise_cli/doctor/checks/runtimes.py +69 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/doctor/runner.py +1 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/exceptions.py +16 -0
- raise_cli-3.0.0a5/src/raise_cli/gates/ar/__init__.py +6 -0
- raise_cli-3.0.0a5/src/raise_cli/gates/ar/bugfix_gate.py +21 -0
- raise_cli-3.0.0a5/src/raise_cli/gates/ar/story_gate.py +88 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/gates/builtin/_runner.py +22 -3
- raise_cli-3.0.0a5/src/raise_cli/gates/drift/__init__.py +38 -0
- raise_cli-3.0.0a5/src/raise_cli/gates/drift/_base.py +101 -0
- raise_cli-3.0.0a5/src/raise_cli/gates/drift/auth_fan_out.py +87 -0
- raise_cli-3.0.0a5/src/raise_cli/gates/drift/dead_public_api.py +127 -0
- raise_cli-3.0.0a5/src/raise_cli/gates/drift/epic_close.py +113 -0
- raise_cli-3.0.0a5/src/raise_cli/gates/drift/import_fan_in.py +73 -0
- raise_cli-3.0.0a5/src/raise_cli/gates/drift/linter_suppression.py +49 -0
- raise_cli-3.0.0a5/src/raise_cli/gates/drift/parallel_siblings.py +70 -0
- raise_cli-3.0.0a5/src/raise_cli/gates/drift/post_refactor_orphan.py +65 -0
- raise_cli-3.0.0a5/src/raise_cli/gates/drift/story_accretion.py +50 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/gates/models.py +4 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/models.py +1 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/graph/backends/__init__.py +4 -2
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/hooks/builtin/memory.py +1 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/hooks/events.py +5 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/__init__.py +0 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/app.py +176 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/data.py +221 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/hud.tcss +38 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/panels/__init__.py +0 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/panels/_events_utils.py +124 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/panels/_insights_utils.py +246 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/panels/_missions_utils.py +156 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/panels/events.py +203 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/panels/insights.py +129 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/panels/missions.py +147 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/panels/pipeline.py +189 -0
- raise_cli-3.0.0a5/src/raise_cli/hud/panels/session.py +226 -0
- raise_cli-3.0.0a5/src/raise_cli/memory/memory_index.py +184 -0
- raise_cli-3.0.0a5/src/raise_cli/memory/migrate_claude.py +168 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/memory/patterns_backend.py +1 -2
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/memory/writer.py +89 -57
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/bootstrap.py +54 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/instructions.py +7 -7
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/skill_conflict.py +19 -2
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/skills.py +24 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/__init__.py +12 -2
- raise_cli-3.0.0a5/src/raise_cli/pipeline/_mcp_instance.py +11 -0
- raise_cli-3.0.0a5/src/raise_cli/pipeline/_telemetry.py +123 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/dispatch.py +1 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/engine.py +26 -18
- raise_cli-3.0.0a5/src/raise_cli/pipeline/mcp_server.py +73 -0
- raise_cli-3.0.0a5/src/raise_cli/pipeline/mcp_tools_backlog.py +118 -0
- raise_cli-3.0.0a5/src/raise_cli/pipeline/mcp_tools_gate.py +56 -0
- raise_cli-3.0.0a5/src/raise_cli/pipeline/mcp_tools_graph.py +39 -0
- raise_cli-3.0.0a5/src/raise_cli/pipeline/mcp_tools_pattern.py +87 -0
- raise_cli-3.0.0a4/src/raise_cli/pipeline/mcp_server.py → raise_cli-3.0.0a5/src/raise_cli/pipeline/mcp_tools_pipeline.py +218 -555
- raise_cli-3.0.0a5/src/raise_cli/pipeline/mcp_tools_session.py +346 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/pipelines_base/bugfix.yaml +11 -0
- raise_cli-3.0.0a5/src/raise_cli/pipeline/pipelines_base/epic.yaml +61 -0
- raise_cli-3.0.0a5/src/raise_cli/pipeline/run_store.py +336 -0
- raise_cli-3.0.0a5/src/raise_cli/project.py +57 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/publish/check.py +66 -0
- raise_cli-3.0.0a5/src/raise_cli/session/__init__.py +131 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/bundle.py +77 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/bundle_data.py +118 -8
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/bundle_formatters.py +167 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/close.py +67 -49
- raise_cli-3.0.0a5/src/raise_cli/session/context_env.py +64 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/derive.py +22 -17
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/doctor.py +3 -103
- raise_cli-3.0.0a5/src/raise_cli/session/index.py +305 -0
- raise_cli-3.0.0a5/src/raise_cli/session/journal.py +152 -0
- raise_cli-3.0.0a5/src/raise_cli/session/measure.py +74 -0
- raise_cli-3.0.0a5/src/raise_cli/session/mission.py +109 -0
- raise_cli-3.0.0a5/src/raise_cli/session/mission_binding.py +42 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/protocols.py +40 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/registry.py +1 -61
- raise_cli-3.0.0a5/src/raise_cli/session/state.py +250 -0
- raise_cli-3.0.0a5/src/raise_cli/session/terminal.py +145 -0
- raise_cli-3.0.0a5/src/raise_cli/skills_base/rai-adapter-setup/SKILL.md +169 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-bugfix-analyse/SKILL.md +10 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-bugfix-close/SKILL.md +11 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-bugfix-fix/SKILL.md +12 -4
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-bugfix-plan/SKILL.md +10 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-bugfix-review/SKILL.md +10 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-bugfix-start/SKILL.md +11 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-bugfix-triage/SKILL.md +47 -6
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-epic-close/SKILL.md +48 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-epic-design/SKILL.md +10 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-epic-plan/SKILL.md +10 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-epic-start/SKILL.md +34 -3
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-session-close/SKILL.md +55 -5
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-story-close/SKILL.md +130 -23
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-story-design/SKILL.md +74 -54
- raise_cli-3.0.0a5/src/raise_cli/skills_base/rai-story-implement/SKILL.md +215 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-story-plan/SKILL.md +27 -13
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-story-review/SKILL.md +9 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-story-run/SKILL.md +1 -1
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-story-start/SKILL.md +17 -2
- raise_cli-3.0.0a5/src/raise_cli/storage/__init__.py +10 -0
- raise_cli-3.0.0a5/src/raise_cli/storage/connection.py +128 -0
- raise_cli-3.0.0a5/src/raise_cli/storage/counter.py +58 -0
- raise_cli-3.0.0a5/src/raise_cli/storage/migrate.py +596 -0
- raise_cli-3.0.0a5/src/raise_cli/storage/missions.py +259 -0
- raise_cli-3.0.0a5/src/raise_cli/storage/schema.py +224 -0
- raise_cli-3.0.0a5/src/raise_cli/telemetry/phase_map.py +48 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/telemetry/schemas.py +73 -9
- raise_cli-3.0.0a5/src/raise_cli/telemetry/session_tokens.py +112 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/telemetry/writer.py +64 -76
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/work_events/emitter.py +5 -5
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/work_events/schemas.py +2 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/work_events/translator.py +12 -14
- raise_cli-3.0.0a4/src/raise_cli/_cc_session.py +0 -30
- raise_cli-3.0.0a4/src/raise_cli/adapters/jira_config.py +0 -123
- raise_cli-3.0.0a4/src/raise_cli/adapters/models/pm.py +0 -147
- raise_cli-3.0.0a4/src/raise_cli/artifacts/__init__.py +0 -30
- raise_cli-3.0.0a4/src/raise_cli/artifacts/models.py +0 -43
- raise_cli-3.0.0a4/src/raise_cli/artifacts/reader.py +0 -55
- raise_cli-3.0.0a4/src/raise_cli/artifacts/renderer.py +0 -102
- raise_cli-3.0.0a4/src/raise_cli/artifacts/story_design.py +0 -69
- raise_cli-3.0.0a4/src/raise_cli/artifacts/writer.py +0 -45
- raise_cli-3.0.0a4/src/raise_cli/cli/commands/_resolve.py +0 -342
- raise_cli-3.0.0a4/src/raise_cli/cli/commands/artifact.py +0 -144
- raise_cli-3.0.0a4/src/raise_cli/context/loaders/artifacts.py +0 -72
- raise_cli-3.0.0a4/src/raise_cli/pipeline/_telemetry.py +0 -100
- raise_cli-3.0.0a4/src/raise_cli/pipeline/cli.py +0 -370
- raise_cli-3.0.0a4/src/raise_cli/pipeline/pipelines_base/epic.yaml +0 -42
- raise_cli-3.0.0a4/src/raise_cli/pipeline/run_store.py +0 -154
- raise_cli-3.0.0a4/src/raise_cli/pipeline/state.py +0 -131
- raise_cli-3.0.0a4/src/raise_cli/session/__init__.py +0 -5
- raise_cli-3.0.0a4/src/raise_cli/session/index.py +0 -225
- raise_cli-3.0.0a4/src/raise_cli/session/journal.py +0 -119
- raise_cli-3.0.0a4/src/raise_cli/session/state.py +0 -248
- raise_cli-3.0.0a4/src/raise_cli/skills_base/rai-adapter-setup/SKILL.md +0 -135
- raise_cli-3.0.0a4/src/raise_cli/skills_base/rai-story-implement/SKILL.md +0 -162
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/README.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/__main__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/confluence_config.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/confluence_config_gen.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/confluence_discovery.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/confluence_exceptions.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/confluence_markdown.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/declarative/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/declarative/discovery.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/declarative/expressions.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/declarative/reference/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/declarative/reference/github.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/declarative/schema.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/filesystem_adapter.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/jira_discovery.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/jira_exceptions.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/mcp_bridge.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/models/governance.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/models/health.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/registry.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/adapters/sync_ledger.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/agents/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/agents/antigravity.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/agents/copilot.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/agents/copilot_plugin.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/agents/cursor.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/agents/roo.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/agents/windsurf.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/backlog/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/backlog/reconcile.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/backlog/scanner.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/backlog/sync.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/adapters.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/base.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/doctor.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/info.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/learn.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/mcp.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/profile.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/release.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/skill.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/commands/skill_set.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/cli/error_handler.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/compat.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/compliance/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/compliance/controls.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/compliance/evidence.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/compliance/extractors/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/compliance/extractors/git.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/compliance/loader.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/compliance/models.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/config/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/config/agent_plugin.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/config/ide.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/analyzers/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/analyzers/models.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/analyzers/protocol.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/analyzers/python.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/analyzers/signals.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/analyzers/typescript.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/diff.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/extractors/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/extractors/relationships.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/extractors/skills.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/extractors/structure.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/loaders/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/loaders/architecture.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/loaders/components.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/loaders/documents.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/loaders/identity.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/context/loaders/memory.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/core/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/core/files.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/core/text.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/core/tools.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/discovery/analyzer.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/discovery/drift.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/discovery/scanner.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/docs/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/docs/migrate.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/doctor/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/doctor/checks/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/doctor/checks/developer.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/doctor/checks/environment.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/doctor/fix.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/doctor/models.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/doctor/protocol.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/doctor/registry.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/doctor/report.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/engines/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/gates/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/gates/builtin/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/gates/builtin/coverage.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/gates/builtin/format.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/gates/builtin/lint.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/gates/builtin/tests.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/gates/builtin/types.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/gates/hook.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/gates/protocol.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/gates/registry.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/extractor.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/parsers/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/parsers/_convert.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/parsers/adr.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/parsers/backlog.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/parsers/constitution.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/parsers/epic.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/parsers/glossary.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/parsers/guardrails.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/parsers/prd.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/parsers/roadmap.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/governance/parsers/vision.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/graph/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/graph/backends/api.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/graph/backends/dual.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/graph/backends/pending.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/graph/query_backend.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/handlers/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/hooks/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/hooks/builtin/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/hooks/builtin/gate_bridge.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/hooks/builtin/telemetry.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/hooks/emitter.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/hooks/protocol.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/hooks/registry.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/mcp/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/mcp/bridge.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/mcp/models.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/mcp/registry.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/mcp/schema.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/memory/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/memory/learning.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/memory/loader.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/memory/migration.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/memory/models.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/memory/push.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/claudemd.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/conventions.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/detection.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/governance.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/manifest.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/memory_md.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/migration.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/profile.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/profile_portability.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/skill_manifest.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/onboarding/workflows.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/output/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/output/console.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/output/formatters/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/output/formatters/adapters.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/output/formatters/discover.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/output/formatters/graph.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/output/formatters/skill.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/output/symbols.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/executor.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/gates.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/loader.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/pipelines_base/hotfix.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/pipelines_base/story.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/prompt.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/templates/adversarial-ar.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/templates/adversarial-qr.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/pipeline/worktree.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/publish/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/publish/changelog.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/publish/version.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/framework/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/framework/methodology.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/governance/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/governance/architecture/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/governance/architecture/domain-model.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/governance/architecture/domain-model.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/governance/architecture/system-context.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/governance/architecture/system-context.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/governance/architecture/system-design.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/governance/architecture/system-design.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/governance/backlog.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/governance/guardrails.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/governance/prd.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/governance/vision.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/identity/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/identity/core.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/identity/core.yaml +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/identity/perspective.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/memory/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/rai_base/memory/patterns-base.jsonl +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/schemas/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/schemas/journal.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/schemas/session_state.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/context_backend.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/identity.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/monitor.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/prefix.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/session/resolver.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills/locator.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills/name_checker.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills/parser.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills/scaffold.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills/schema.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills/skillsets.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills/validator.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/contract-template.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/preamble.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-architecture-review/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-bugfix-run/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-debug/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-discover/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-docs-update/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-doctor/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-epic-close/templates/retrospective.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-epic-design/templates/design.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-epic-design/templates/scope.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-epic-docs/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-epic-plan/_references/sequencing-strategies.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-epic-plan/templates/plan-section.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-epic-run/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-epic-start/templates/brief.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-mcp-add/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-mcp-remove/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-mcp-status/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-problem-shape/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-project-create/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-project-onboard/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-quality-review/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-research/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-research/references/research-prompt-template.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-session-diary/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-session-start/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-skill-create/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-skillset-manage/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-story-design/references/tech-design-story-v2.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-story-start/templates/story.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/skills_base/rai-welcome/SKILL.md +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/telemetry/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/tier/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/tier/context.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/viz/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/viz/generator.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/work_events/__init__.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/work_events/backfill.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/work_events/ref_resolver.py +0 -0
- {raise_cli-3.0.0a4 → raise_cli-3.0.0a5}/src/raise_cli/work_events/retry_queue.py +0 -0
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
.claude/worktrees/
|
|
10
10
|
.claude/projects/
|
|
11
11
|
|
|
12
|
+
# Hermes Agent worktrees (auto-created by hermes -w)
|
|
13
|
+
.worktrees/
|
|
14
|
+
|
|
12
15
|
# Claude Code legacy files (superseded, prevent re-addition)
|
|
13
16
|
.claude/RAI.md
|
|
14
17
|
.claude/RAI-naming.md
|
|
@@ -25,6 +28,13 @@ daemon.yaml
|
|
|
25
28
|
.raise/backlog/
|
|
26
29
|
# .raise/artifacts/ — tracked (story-design YAMLs are versioned artifacts)
|
|
27
30
|
|
|
31
|
+
# Drift detection pipeline outputs (computed, machine-specific paths, high churn)
|
|
32
|
+
.raise/drift/
|
|
33
|
+
packages/*/.raise/drift/
|
|
34
|
+
packages/*/.raise/pending_sync.json
|
|
35
|
+
packages/*/.raise/rai/personal/
|
|
36
|
+
packages/*/.raise/rai/sessions/
|
|
37
|
+
|
|
28
38
|
# Pipeline state (environment-specific, PAT-E-594)
|
|
29
39
|
.rai-state/
|
|
30
40
|
|
|
@@ -161,3 +171,6 @@ work/research/
|
|
|
161
171
|
# See dev/sops/raise-server-local.md § Running e2e tests locally.
|
|
162
172
|
/docker-compose.override.yaml
|
|
163
173
|
/docker-compose.override.yml
|
|
174
|
+
.worktrees/
|
|
175
|
+
.venv
|
|
176
|
+
.venv
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: raise-cli
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.0a5
|
|
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: atlassian-python-api>=3.41.0
|
|
21
22
|
Requires-Dist: httpx<1.0,>=0.27.0
|
|
22
23
|
Requires-Dist: logfire-api>=4.0
|
|
23
24
|
Requires-Dist: markdown>=3.6
|
|
@@ -37,13 +38,12 @@ Requires-Dist: tree-sitter-typescript>=0.23.2
|
|
|
37
38
|
Requires-Dist: tree-sitter>=0.25.2
|
|
38
39
|
Requires-Dist: typer>=0.12.0
|
|
39
40
|
Provides-Extra: atlassian
|
|
40
|
-
Requires-Dist: atlassian-python-api>=3.41.0; extra == 'atlassian'
|
|
41
41
|
Provides-Extra: confluence
|
|
42
|
-
Requires-Dist: atlassian-python-api>=3.41.0; extra == 'confluence'
|
|
43
42
|
Provides-Extra: csharp
|
|
44
43
|
Requires-Dist: tree-sitter-c-sharp>=0.23.1; extra == 'csharp'
|
|
44
|
+
Provides-Extra: hud
|
|
45
|
+
Requires-Dist: textual<1.0,>=0.86; extra == 'hud'
|
|
45
46
|
Provides-Extra: jira
|
|
46
|
-
Requires-Dist: atlassian-python-api>=3.41.0; extra == 'jira'
|
|
47
47
|
Provides-Extra: observability
|
|
48
48
|
Requires-Dist: logfire>=4.0; extra == 'observability'
|
|
49
49
|
Requires-Dist: opentelemetry-api>=1.20; extra == 'observability'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "raise-cli"
|
|
3
|
-
version = "3.0.
|
|
3
|
+
version = "3.0.0a5"
|
|
4
4
|
description = "RaiSE CLI - Reliable AI Software Engineering governance framework"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Emilio Osorio", email = "emilio@humansys.ai"}
|
|
@@ -39,6 +39,7 @@ dependencies = [
|
|
|
39
39
|
"httpx>=0.27.0,<1.0",
|
|
40
40
|
"mcp>=1.26,<2",
|
|
41
41
|
"markdown>=3.6",
|
|
42
|
+
"atlassian-python-api>=3.41.0",
|
|
42
43
|
]
|
|
43
44
|
|
|
44
45
|
[project.optional-dependencies]
|
|
@@ -50,15 +51,13 @@ observability = [
|
|
|
50
51
|
csharp = [
|
|
51
52
|
"tree-sitter-c-sharp>=0.23.1",
|
|
52
53
|
]
|
|
53
|
-
|
|
54
|
-
"
|
|
55
|
-
]
|
|
56
|
-
confluence = [
|
|
57
|
-
"atlassian-python-api>=3.41.0",
|
|
58
|
-
]
|
|
59
|
-
jira = [
|
|
60
|
-
"atlassian-python-api>=3.41.0",
|
|
54
|
+
hud = [
|
|
55
|
+
"textual>=0.86,<1.0",
|
|
61
56
|
]
|
|
57
|
+
# Backwards-compat aliases — atlassian-python-api is now installed by default (RAISE-1912).
|
|
58
|
+
atlassian = []
|
|
59
|
+
confluence = []
|
|
60
|
+
jira = []
|
|
62
61
|
|
|
63
62
|
[project.urls]
|
|
64
63
|
Homepage = "https://raiseframework.ai"
|
|
@@ -68,6 +67,7 @@ Changelog = "https://github.com/humansys/raise/blob/main/CHANGELOG.md"
|
|
|
68
67
|
|
|
69
68
|
[project.scripts]
|
|
70
69
|
rai = "raise_cli.cli.main:app"
|
|
70
|
+
rai-mcp-pipeline = "raise_cli.pipeline.mcp_server:main"
|
|
71
71
|
|
|
72
72
|
[project.entry-points."rai.governance.parsers"]
|
|
73
73
|
prd = "raise_cli.governance.parsers.prd:PrdParser"
|
|
@@ -91,12 +91,23 @@ types = "raise_cli.gates.builtin.types:TypeGate"
|
|
|
91
91
|
lint = "raise_cli.gates.builtin.lint:LintGate"
|
|
92
92
|
coverage = "raise_cli.gates.builtin.coverage:CoverageGate"
|
|
93
93
|
format = "raise_cli.gates.builtin.format:FormatGate"
|
|
94
|
+
drift-post-refactor-orphan = "raise_cli.gates.drift.post_refactor_orphan:PostRefactorOrphanGate"
|
|
95
|
+
drift-dead-public-api = "raise_cli.gates.drift.dead_public_api:DeadPublicApiGate"
|
|
96
|
+
drift-linter-suppression = "raise_cli.gates.drift.linter_suppression:LinterSuppressionGate"
|
|
97
|
+
drift-story-accretion = "raise_cli.gates.drift.story_accretion:StoryAccretionGate"
|
|
98
|
+
drift-import-fan-in = "raise_cli.gates.drift.import_fan_in:ImportFanInGate"
|
|
99
|
+
drift-parallel-siblings = "raise_cli.gates.drift.parallel_siblings:ParallelSiblingGate"
|
|
100
|
+
drift-auth-fan-out = "raise_cli.gates.drift.auth_fan_out:AuthorizationFanOutGate"
|
|
101
|
+
ar-story = "raise_cli.gates.ar.story_gate:ArchitectureReviewGate"
|
|
102
|
+
ar-bugfix = "raise_cli.gates.ar.bugfix_gate:BugfixArchitectureReviewGate"
|
|
103
|
+
epic-close-drift = "raise_cli.gates.drift.epic_close:EpicCloseGate"
|
|
94
104
|
|
|
95
105
|
[project.entry-points."rai.doctor.checks"]
|
|
96
106
|
environment = "raise_cli.doctor.checks.environment:EnvironmentCheck"
|
|
97
107
|
project = "raise_cli.doctor.checks.project:ProjectCheck"
|
|
98
108
|
developer = "raise_cli.doctor.checks.developer:DeveloperCheck"
|
|
99
109
|
adapters = "raise_cli.doctor.checks.adapters:AdapterDoctorCheck"
|
|
110
|
+
runtimes = "raise_cli.doctor.checks.runtimes:RuntimesCheck"
|
|
100
111
|
|
|
101
112
|
[project.entry-points."rai.adapters.pm"]
|
|
102
113
|
filesystem = "raise_cli.adapters.filesystem:FilesystemPMAdapter"
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"""Discover agent session_id via runtime-agnostic priority chain.
|
|
2
|
+
|
|
3
|
+
Resolution order:
|
|
4
|
+
1. RAISE_AGENT_SESSION_ID (explicit, set by any runtime adapter)
|
|
5
|
+
2. RAISE_CC_SESSION_ID (Claude Code backward compat)
|
|
6
|
+
3. CC port discovery (CLAUDE_CODE_SSE_PORT → cc.port, unambiguous match only)
|
|
7
|
+
4. Terminal bindings (PPID ancestry → _terminal_bindings.json)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import json
|
|
13
|
+
import os
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
_SESSIONS_DIR = Path(".raise") / "rai" / "sessions"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def discover_agent_session_id() -> str | None:
|
|
20
|
+
"""Resolve session ID from any supported runtime.
|
|
21
|
+
|
|
22
|
+
Priority chain ensures backward compatibility while enabling
|
|
23
|
+
new runtimes (Hermes, Codex) to participate in session correlation.
|
|
24
|
+
"""
|
|
25
|
+
agent_sid = os.environ.get("RAISE_AGENT_SESSION_ID", "").strip()
|
|
26
|
+
if agent_sid:
|
|
27
|
+
return agent_sid
|
|
28
|
+
|
|
29
|
+
cc_sid = os.environ.get("RAISE_CC_SESSION_ID", "").strip()
|
|
30
|
+
if cc_sid:
|
|
31
|
+
return cc_sid
|
|
32
|
+
|
|
33
|
+
port_sid = _discover_via_cc_port()
|
|
34
|
+
if port_sid:
|
|
35
|
+
return port_sid
|
|
36
|
+
|
|
37
|
+
return _discover_via_terminal_bindings()
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def discover_mission_for_session(cc_session_id: str) -> str | None:
|
|
41
|
+
"""Return the mission bound to *cc_session_id* in SQLite, or None.
|
|
42
|
+
|
|
43
|
+
Uses the shared raise.db so the lookup works across worktrees and
|
|
44
|
+
concurrent CC sessions without PID navigation.
|
|
45
|
+
"""
|
|
46
|
+
try:
|
|
47
|
+
from pathlib import Path as _Path
|
|
48
|
+
|
|
49
|
+
from raise_cli.session.mission_binding import get_mission_for_session
|
|
50
|
+
|
|
51
|
+
return get_mission_for_session(_Path.cwd(), cc_session_id)
|
|
52
|
+
except Exception:
|
|
53
|
+
return None
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def discover_agent_runtime() -> str:
|
|
57
|
+
"""Resolve the active agent runtime identifier.
|
|
58
|
+
|
|
59
|
+
Resolution: $RAISE_AGENT_RUNTIME > CC-specific env detection > "unknown".
|
|
60
|
+
"""
|
|
61
|
+
explicit = os.environ.get("RAISE_AGENT_RUNTIME", "").strip()
|
|
62
|
+
if explicit:
|
|
63
|
+
return explicit
|
|
64
|
+
|
|
65
|
+
if os.environ.get("RAISE_CC_SESSION_ID", "").strip():
|
|
66
|
+
return "claude_code"
|
|
67
|
+
|
|
68
|
+
if _discover_via_cc_port():
|
|
69
|
+
return "claude_code"
|
|
70
|
+
|
|
71
|
+
if _discover_via_terminal_bindings():
|
|
72
|
+
return "claude_code"
|
|
73
|
+
|
|
74
|
+
return "unknown"
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _discover_via_cc_port() -> str | None:
|
|
78
|
+
"""CC-specific: match CLAUDE_CODE_SSE_PORT to session dir's cc.port file.
|
|
79
|
+
|
|
80
|
+
Returns the matching session ID only when exactly one session matches the
|
|
81
|
+
port. Returns None when the match is ambiguous (multiple sessions share the
|
|
82
|
+
same port, which happens during multi-agent runs where each subagent session
|
|
83
|
+
also writes cc.port). Ambiguous cases are resolved by the terminal-bindings
|
|
84
|
+
fallback instead.
|
|
85
|
+
"""
|
|
86
|
+
port = os.environ.get("CLAUDE_CODE_SSE_PORT", "").strip()
|
|
87
|
+
if not port:
|
|
88
|
+
return None
|
|
89
|
+
sessions_dir = Path.cwd() / _SESSIONS_DIR
|
|
90
|
+
if not sessions_dir.exists():
|
|
91
|
+
return None
|
|
92
|
+
matches: list[str] = []
|
|
93
|
+
for sess_dir in sessions_dir.iterdir():
|
|
94
|
+
if not sess_dir.is_dir():
|
|
95
|
+
continue
|
|
96
|
+
port_file = sess_dir / "cc.port"
|
|
97
|
+
if port_file.exists() and port_file.read_text().strip() == port:
|
|
98
|
+
matches.append(sess_dir.name)
|
|
99
|
+
return matches[0] if len(matches) == 1 else None
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def _get_parent_pid(pid: int) -> int | None:
|
|
103
|
+
"""Return the parent PID of *pid* via /proc (Linux only)."""
|
|
104
|
+
try:
|
|
105
|
+
status = Path(f"/proc/{pid}/status").read_text()
|
|
106
|
+
for line in status.splitlines():
|
|
107
|
+
if line.startswith("PPid:"):
|
|
108
|
+
return int(line.split()[1])
|
|
109
|
+
return None
|
|
110
|
+
except (FileNotFoundError, ValueError, PermissionError, OSError):
|
|
111
|
+
return None
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def _discover_via_terminal_bindings() -> str | None:
|
|
115
|
+
"""Resolve session ID by walking the PID ancestry to the CC process.
|
|
116
|
+
|
|
117
|
+
The SessionStart hook writes ``{cc_pid: {session_id: ...}}`` to
|
|
118
|
+
``_terminal_bindings.json``. From within a Bash tool call the CC process is
|
|
119
|
+
the grandparent: ``rai`` → ``bash`` → ``CC``. Reading the grandparent PID
|
|
120
|
+
and looking it up in the bindings gives the correct session even when
|
|
121
|
+
multiple sessions share the same SSE port.
|
|
122
|
+
"""
|
|
123
|
+
try:
|
|
124
|
+
bash_pid = os.getppid()
|
|
125
|
+
cc_pid = _get_parent_pid(bash_pid)
|
|
126
|
+
if cc_pid is None:
|
|
127
|
+
return None
|
|
128
|
+
bindings_file = Path.cwd() / _SESSIONS_DIR / "_terminal_bindings.json"
|
|
129
|
+
if not bindings_file.exists():
|
|
130
|
+
return None
|
|
131
|
+
bindings: dict[str, dict[str, object]] = json.loads(bindings_file.read_text())
|
|
132
|
+
entry = bindings.get(str(cc_pid))
|
|
133
|
+
if entry:
|
|
134
|
+
sid = entry.get("session_id")
|
|
135
|
+
if sid:
|
|
136
|
+
return str(sid)
|
|
137
|
+
return None
|
|
138
|
+
except Exception:
|
|
139
|
+
return None
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"""Backward compat stub — use _agent_session instead (RAISE-2779)."""
|
|
2
|
+
|
|
3
|
+
from raise_cli._agent_session import discover_agent_session_id
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def discover_cc_session_id() -> str | None:
|
|
7
|
+
"""Deprecated: use discover_agent_session_id() instead."""
|
|
8
|
+
return discover_agent_session_id()
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"""Generic backlog adapter config I/O — reads/writes .raise/backlog.yaml.
|
|
2
|
+
|
|
3
|
+
Replaces jira_config.save_jira_config and load_jira_config for CLI use.
|
|
4
|
+
The CLI never imports from jira_config directly (PAT-F-167).
|
|
5
|
+
|
|
6
|
+
S2503.12 (RAISE-2723)
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import re
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
import yaml
|
|
16
|
+
|
|
17
|
+
from raise_cli.adapters.models.pm import BacklogAdapterConfig
|
|
18
|
+
|
|
19
|
+
_BACKLOG_YAML_PATH = Path(".raise") / "backlog.yaml"
|
|
20
|
+
_JIRA_YAML_PATH = Path(".raise") / "jira.yaml"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def save_backlog_config(
|
|
24
|
+
project_root: Path,
|
|
25
|
+
adapter_name: str,
|
|
26
|
+
updates: dict[str, Any],
|
|
27
|
+
) -> None:
|
|
28
|
+
"""Merge updates into .raise/backlog.yaml under adapter_name section.
|
|
29
|
+
|
|
30
|
+
For each top-level key in updates:
|
|
31
|
+
- If the key already exists as a dict, shallow-merges so sibling sub-keys
|
|
32
|
+
(e.g. custom_fields.bug vs .story) survive.
|
|
33
|
+
- Replaces only the matching block in the raw file; other sections untouched.
|
|
34
|
+
- Appends if section doesn't exist yet.
|
|
35
|
+
"""
|
|
36
|
+
config_path = project_root / _BACKLOG_YAML_PATH
|
|
37
|
+
config_path.parent.mkdir(parents=True, exist_ok=True)
|
|
38
|
+
|
|
39
|
+
content = ""
|
|
40
|
+
root_data: dict[str, Any] = {}
|
|
41
|
+
if config_path.exists():
|
|
42
|
+
content = config_path.read_text(encoding="utf-8")
|
|
43
|
+
root_data = yaml.safe_load(content) or {}
|
|
44
|
+
|
|
45
|
+
adapter_data: dict[str, Any] = root_data.get(adapter_name) or {}
|
|
46
|
+
|
|
47
|
+
# Merge each update key into the adapter section
|
|
48
|
+
for key, value in updates.items():
|
|
49
|
+
existing = adapter_data.get(key)
|
|
50
|
+
if isinstance(existing, dict) and isinstance(value, dict):
|
|
51
|
+
adapter_data[key] = {**existing, **value}
|
|
52
|
+
else:
|
|
53
|
+
adapter_data[key] = value
|
|
54
|
+
|
|
55
|
+
# Serialize full adapter section as YAML
|
|
56
|
+
section_yaml = yaml.dump(
|
|
57
|
+
{adapter_name: adapter_data},
|
|
58
|
+
default_flow_style=False,
|
|
59
|
+
allow_unicode=True,
|
|
60
|
+
sort_keys=False,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
# Surgically replace the adapter_name block (key + all indented/blank lines)
|
|
64
|
+
pattern = re.compile(
|
|
65
|
+
rf"^{re.escape(adapter_name)}:\n(?:[ \t][^\n]*\n|[ \t]*\n)*",
|
|
66
|
+
re.MULTILINE,
|
|
67
|
+
)
|
|
68
|
+
if pattern.search(content):
|
|
69
|
+
content = pattern.sub(section_yaml, content)
|
|
70
|
+
else:
|
|
71
|
+
if content and not content.endswith("\n"):
|
|
72
|
+
content += "\n"
|
|
73
|
+
content += "\n" + section_yaml if content else section_yaml
|
|
74
|
+
|
|
75
|
+
config_path.write_text(content, encoding="utf-8")
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def load_backlog_config(
|
|
79
|
+
project_root: Path,
|
|
80
|
+
adapter_name: str,
|
|
81
|
+
) -> BacklogAdapterConfig:
|
|
82
|
+
"""Load and validate backlog.yaml section for adapter_name.
|
|
83
|
+
|
|
84
|
+
Runs migrate_jira_yaml_if_needed() first so projects with only jira.yaml
|
|
85
|
+
continue working without manual migration.
|
|
86
|
+
|
|
87
|
+
Raises:
|
|
88
|
+
FileNotFoundError: If neither backlog.yaml nor jira.yaml exists.
|
|
89
|
+
KeyError: If adapter_name section is missing.
|
|
90
|
+
pydantic.ValidationError: If section doesn't match BacklogAdapterConfig.
|
|
91
|
+
"""
|
|
92
|
+
migrate_jira_yaml_if_needed(project_root)
|
|
93
|
+
config_path = project_root / _BACKLOG_YAML_PATH
|
|
94
|
+
if not config_path.exists():
|
|
95
|
+
msg = f"Backlog config not found: {config_path}"
|
|
96
|
+
raise FileNotFoundError(msg)
|
|
97
|
+
|
|
98
|
+
root_data: dict[str, Any] = (
|
|
99
|
+
yaml.safe_load(config_path.read_text(encoding="utf-8")) or {}
|
|
100
|
+
)
|
|
101
|
+
if adapter_name not in root_data:
|
|
102
|
+
msg = f"Adapter '{adapter_name}' not configured in {config_path}"
|
|
103
|
+
raise KeyError(msg)
|
|
104
|
+
|
|
105
|
+
return BacklogAdapterConfig.model_validate(root_data[adapter_name])
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def migrate_jira_yaml_if_needed(project_root: Path) -> bool:
|
|
109
|
+
"""Migrate .raise/jira.yaml → .raise/backlog.yaml[jira] with generic field names.
|
|
110
|
+
|
|
111
|
+
Applies renames:
|
|
112
|
+
instances → organizations
|
|
113
|
+
instance.site → organization.url
|
|
114
|
+
default_instance → default_org
|
|
115
|
+
project.instance → project.org
|
|
116
|
+
link_types → relation_types
|
|
117
|
+
|
|
118
|
+
Returns True if migration ran, False if no-op.
|
|
119
|
+
Idempotent: no-op if backlog.yaml already exists.
|
|
120
|
+
Preserves jira.yaml (does not delete it).
|
|
121
|
+
"""
|
|
122
|
+
backlog_path = project_root / _BACKLOG_YAML_PATH
|
|
123
|
+
jira_path = project_root / _JIRA_YAML_PATH
|
|
124
|
+
|
|
125
|
+
if backlog_path.exists():
|
|
126
|
+
return False
|
|
127
|
+
if not jira_path.exists():
|
|
128
|
+
return False
|
|
129
|
+
|
|
130
|
+
raw: dict[str, Any] = yaml.safe_load(jira_path.read_text(encoding="utf-8")) or {}
|
|
131
|
+
migrated = _rename_jira_to_generic(raw)
|
|
132
|
+
|
|
133
|
+
backlog_path.parent.mkdir(parents=True, exist_ok=True)
|
|
134
|
+
content = yaml.dump(
|
|
135
|
+
{"jira": migrated},
|
|
136
|
+
default_flow_style=False,
|
|
137
|
+
allow_unicode=True,
|
|
138
|
+
sort_keys=False,
|
|
139
|
+
)
|
|
140
|
+
backlog_path.write_text(content, encoding="utf-8")
|
|
141
|
+
return True
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def _rename_jira_to_generic(raw: dict[str, Any]) -> dict[str, Any]:
|
|
145
|
+
"""Apply field renames from jira.yaml format to backlog.yaml[jira] format."""
|
|
146
|
+
result: dict[str, Any] = {}
|
|
147
|
+
|
|
148
|
+
for key, value in raw.items():
|
|
149
|
+
if key == "default_instance":
|
|
150
|
+
result["default_org"] = value
|
|
151
|
+
elif key == "instances":
|
|
152
|
+
organizations: dict[str, Any] = {}
|
|
153
|
+
instances_raw: dict[str, Any] = value or {}
|
|
154
|
+
for org_name, inst in instances_raw.items():
|
|
155
|
+
org: dict[str, Any] = {}
|
|
156
|
+
inst_dict: dict[str, Any] = inst or {}
|
|
157
|
+
for ikey, ival in inst_dict.items():
|
|
158
|
+
org["url" if ikey == "site" else ikey] = ival
|
|
159
|
+
organizations[org_name] = org
|
|
160
|
+
result["organizations"] = organizations
|
|
161
|
+
elif key == "projects":
|
|
162
|
+
projects: dict[str, Any] = {}
|
|
163
|
+
projects_raw: dict[str, Any] = value or {}
|
|
164
|
+
for pkey, proj in projects_raw.items():
|
|
165
|
+
p: dict[str, Any] = {}
|
|
166
|
+
proj_dict: dict[str, Any] = proj or {}
|
|
167
|
+
for pk, pv in proj_dict.items():
|
|
168
|
+
p["org" if pk == "instance" else pk] = pv
|
|
169
|
+
projects[pkey] = p
|
|
170
|
+
result["projects"] = projects
|
|
171
|
+
elif key == "link_types":
|
|
172
|
+
result["relation_types"] = value
|
|
173
|
+
else:
|
|
174
|
+
result[key] = value
|
|
175
|
+
|
|
176
|
+
return result
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def get_configured_adapters(project_root: Path) -> set[str]:
|
|
180
|
+
"""Return set of adapter names with a section in backlog.yaml.
|
|
181
|
+
|
|
182
|
+
Returns empty set if backlog.yaml doesn't exist.
|
|
183
|
+
"""
|
|
184
|
+
config_path = project_root / _BACKLOG_YAML_PATH
|
|
185
|
+
if not config_path.exists():
|
|
186
|
+
return set()
|
|
187
|
+
root_data: dict[str, Any] = (
|
|
188
|
+
yaml.safe_load(config_path.read_text(encoding="utf-8")) or {}
|
|
189
|
+
)
|
|
190
|
+
return {k for k in root_data if isinstance(root_data[k], dict)}
|
|
@@ -20,7 +20,12 @@ from __future__ import annotations
|
|
|
20
20
|
import logging
|
|
21
21
|
from typing import Any
|
|
22
22
|
|
|
23
|
-
from raise_cli.adapters.models.docs import
|
|
23
|
+
from raise_cli.adapters.models.docs import (
|
|
24
|
+
CommentSummary,
|
|
25
|
+
PageContent,
|
|
26
|
+
PageSummary,
|
|
27
|
+
PublishResult,
|
|
28
|
+
)
|
|
24
29
|
from raise_cli.adapters.models.health import AdapterHealth
|
|
25
30
|
from raise_cli.adapters.pending_ops import PendingOpsLog
|
|
26
31
|
|
|
@@ -178,3 +183,27 @@ class CompositeDocTarget:
|
|
|
178
183
|
def health(self) -> AdapterHealth:
|
|
179
184
|
"""Delegate to remote (last) target."""
|
|
180
185
|
return self._remote.health()
|
|
186
|
+
|
|
187
|
+
def add_label(self, page_id: str, name: str) -> None:
|
|
188
|
+
"""Delegate to remote (last) target."""
|
|
189
|
+
self._remote.add_label(page_id, name)
|
|
190
|
+
|
|
191
|
+
def get_labels(self, page_id: str) -> list[str]:
|
|
192
|
+
"""Delegate to remote (last) target."""
|
|
193
|
+
return self._remote.get_labels(page_id)
|
|
194
|
+
|
|
195
|
+
def get_page_children(self, page_id: str) -> list[PageSummary]:
|
|
196
|
+
"""Delegate to remote (last) target."""
|
|
197
|
+
return self._remote.get_page_children(page_id)
|
|
198
|
+
|
|
199
|
+
def delete_page(self, page_id: str) -> None:
|
|
200
|
+
"""Delegate to remote (last) target."""
|
|
201
|
+
self._remote.delete_page(page_id)
|
|
202
|
+
|
|
203
|
+
def add_comment(self, page_id: str, body: str) -> None:
|
|
204
|
+
"""Delegate to remote (last) target."""
|
|
205
|
+
self._remote.add_comment(page_id, body)
|
|
206
|
+
|
|
207
|
+
def get_comments(self, page_id: str) -> list[CommentSummary]:
|
|
208
|
+
"""Delegate to remote (last) target."""
|
|
209
|
+
return self._remote.get_comments(page_id)
|