raise-cli 2.3.0__tar.gz → 2.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {raise_cli-2.3.0 → raise_cli-2.4.0}/.gitignore +14 -10
- raise_cli-2.4.0/PKG-INFO +190 -0
- raise_cli-2.4.0/README.md +141 -0
- raise_cli-2.4.0/pyproject.toml +135 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/__init__.py +3 -1
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/__init__.py +3 -1
- raise_cli-2.4.0/src/raise_cli/adapters/composite_docs.py +92 -0
- raise_cli-2.4.0/src/raise_cli/adapters/confluence_adapter.py +107 -0
- raise_cli-2.4.0/src/raise_cli/adapters/confluence_client.py +347 -0
- raise_cli-2.4.0/src/raise_cli/adapters/confluence_config.py +114 -0
- raise_cli-2.4.0/src/raise_cli/adapters/confluence_config_gen.py +165 -0
- raise_cli-2.4.0/src/raise_cli/adapters/confluence_discovery.py +258 -0
- raise_cli-2.4.0/src/raise_cli/adapters/confluence_exceptions.py +37 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/filesystem.py +4 -2
- raise_cli-2.4.0/src/raise_cli/adapters/filesystem_adapter.py +98 -0
- raise_cli-2.4.0/src/raise_cli/adapters/filesystem_docs.py +114 -0
- raise_cli-2.4.0/src/raise_cli/adapters/filesystem_models.py +51 -0
- raise_cli-2.4.0/src/raise_cli/adapters/jira_adapter.py +366 -0
- raise_cli-2.4.0/src/raise_cli/adapters/jira_client.py +360 -0
- raise_cli-2.4.0/src/raise_cli/adapters/jira_config.py +117 -0
- raise_cli-2.4.0/src/raise_cli/adapters/jira_config_gen.py +90 -0
- raise_cli-2.4.0/src/raise_cli/adapters/jira_discovery.py +103 -0
- raise_cli-2.4.0/src/raise_cli/adapters/jira_exceptions.py +37 -0
- raise_cli-2.4.0/src/raise_cli/adapters/models/__init__.py +61 -0
- raise_cli-2.4.0/src/raise_cli/adapters/models/docs.py +48 -0
- raise_cli-2.4.0/src/raise_cli/adapters/models/governance.py +44 -0
- raise_cli-2.4.0/src/raise_cli/adapters/models/health.py +19 -0
- raise_cli-2.4.0/src/raise_cli/adapters/models/pm.py +147 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/registry.py +23 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/backlog/sync.py +3 -14
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/_resolve.py +77 -8
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/discover.py +18 -18
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/docs.py +58 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/graph.py +18 -1
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/info.py +1 -1
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/init.py +15 -15
- raise_cli-2.4.0/src/raise_cli/cli/commands/learn.py +266 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/mcp.py +16 -7
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/pattern.py +2 -2
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/profile.py +1 -1
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/session.py +155 -19
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/signal.py +25 -20
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/main.py +2 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/analyzers/__init__.py +2 -1
- raise_cli-2.4.0/src/raise_cli/context/analyzers/signals.py +165 -0
- raise_cli-2.4.0/src/raise_cli/context/analyzers/typescript.py +469 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/builder.py +24 -6
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/extractors/relationships.py +12 -3
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/core/files.py +19 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/discovery/analyzer.py +1 -1
- raise_cli-2.4.0/src/raise_cli/doctor/checks/adapters.py +404 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/parsers/epic.py +2 -2
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/hooks/events.py +2 -2
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/memory/__init__.py +1 -1
- raise_cli-2.4.0/src/raise_cli/memory/learning.py +122 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/memory/models.py +4 -0
- raise_cli-2.4.0/src/raise_cli/memory/push.py +101 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/memory/writer.py +9 -10
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/bootstrap.py +1 -1
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/governance.py +1 -1
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/instructions.py +2 -2
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/profile.py +7 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/output/formatters/skill.py +1 -1
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/publish/check.py +14 -3
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/__init__.py +1 -1
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/schemas/session_state.py +61 -1
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/session/bundle.py +38 -6
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/session/bundle_formatters.py +19 -6
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/session/close.py +28 -8
- raise_cli-2.4.0/src/raise_cli/session/derive.py +235 -0
- raise_cli-2.4.0/src/raise_cli/session/doctor.py +364 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/session/index.py +9 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/session/journal.py +3 -3
- raise_cli-2.4.0/src/raise_cli/session/monitor.py +162 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/session/prefix.py +4 -3
- raise_cli-2.4.0/src/raise_cli/session/protocols.py +70 -0
- raise_cli-2.4.0/src/raise_cli/session/registry.py +197 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/session/state.py +41 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/__init__.py +23 -5
- raise_cli-2.4.0/src/raise_cli/skills_base/rai-adapter-setup/SKILL.md +221 -0
- raise_cli-2.4.0/src/raise_cli/skills_base/rai-bugfix-analyse/SKILL.md +136 -0
- raise_cli-2.4.0/src/raise_cli/skills_base/rai-bugfix-close/SKILL.md +143 -0
- raise_cli-2.4.0/src/raise_cli/skills_base/rai-bugfix-fix/SKILL.md +114 -0
- raise_cli-2.4.0/src/raise_cli/skills_base/rai-bugfix-plan/SKILL.md +119 -0
- raise_cli-2.4.0/src/raise_cli/skills_base/rai-bugfix-review/SKILL.md +150 -0
- raise_cli-2.4.0/src/raise_cli/skills_base/rai-bugfix-run/SKILL.md +304 -0
- raise_cli-2.4.0/src/raise_cli/skills_base/rai-bugfix-start/SKILL.md +121 -0
- raise_cli-2.4.0/src/raise_cli/skills_base/rai-bugfix-triage/SKILL.md +138 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-debug/SKILL.md +9 -4
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-discover/SKILL.md +9 -3
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-docs-update/SKILL.md +9 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-doctor/SKILL.md +6 -4
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-epic-close/SKILL.md +36 -13
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-epic-design/SKILL.md +41 -6
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-epic-docs/SKILL.md +9 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-epic-plan/SKILL.md +33 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-epic-run/SKILL.md +10 -6
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-epic-start/SKILL.md +31 -12
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-mcp-add/SKILL.md +9 -4
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-mcp-remove/SKILL.md +9 -3
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-mcp-status/SKILL.md +6 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-problem-shape/SKILL.md +6 -4
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-project-create/SKILL.md +9 -4
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-project-onboard/SKILL.md +9 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-research/SKILL.md +9 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-session-close/SKILL.md +7 -3
- raise_cli-2.4.0/src/raise_cli/skills_base/rai-session-diary/SKILL.md +229 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-session-start/SKILL.md +6 -3
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-story-close/SKILL.md +34 -8
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-story-design/SKILL.md +41 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-story-implement/SKILL.md +49 -19
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-story-plan/SKILL.md +33 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-story-review/SKILL.md +59 -22
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-story-run/SKILL.md +27 -7
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-story-start/SKILL.md +10 -5
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-welcome/SKILL.md +14 -8
- raise_cli-2.3.0/LICENSE +0 -190
- raise_cli-2.3.0/NOTICE +0 -4
- raise_cli-2.3.0/PKG-INFO +0 -374
- raise_cli-2.3.0/README.md +0 -319
- raise_cli-2.3.0/pyproject.toml +0 -321
- raise_cli-2.3.0/src/raise_cli/adapters/models.py +0 -212
- raise_cli-2.3.0/src/raise_cli/hooks/builtin/backlog.py +0 -216
- raise_cli-2.3.0/src/raise_core/__init__.py +0 -12
- raise_cli-2.3.0/src/raise_core/governance/__init__.py +0 -7
- raise_cli-2.3.0/src/raise_core/graph/__init__.py +0 -6
- raise_cli-2.3.0/src/raise_core/graph/backends/__init__.py +0 -1
- raise_cli-2.3.0/src/raise_core/graph/backends/filesystem.py +0 -79
- raise_cli-2.3.0/src/raise_core/graph/backends/models.py +0 -20
- raise_cli-2.3.0/src/raise_core/graph/backends/protocol.py +0 -27
- raise_cli-2.3.0/src/raise_core/graph/engine.py +0 -236
- raise_cli-2.3.0/src/raise_core/graph/models.py +0 -208
- raise_cli-2.3.0/src/raise_core/graph/query.py +0 -488
- raise_cli-2.3.0/src/raise_core/workflow/__init__.py +0 -9
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/__main__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/declarative/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/declarative/adapter.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/declarative/discovery.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/declarative/expressions.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/declarative/reference/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/declarative/reference/github.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/declarative/schema.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/mcp_bridge.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/protocols.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/adapters/sync.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/agents/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/agents/antigravity.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/agents/claude.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/agents/copilot.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/agents/copilot_plugin.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/agents/cursor.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/agents/roo.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/agents/windsurf.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/artifacts/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/artifacts/models.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/artifacts/reader.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/artifacts/renderer.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/artifacts/story_design.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/artifacts/writer.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/backlog/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/adapters.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/artifact.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/backlog.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/base.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/doctor.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/gate.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/journal.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/memory.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/publish.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/release.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/skill.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/commands/skill_set.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/error_handler.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/cli/extensions.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/compat.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/compliance/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/compliance/controls.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/compliance/evidence.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/compliance/extractors/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/compliance/extractors/git.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/compliance/loader.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/compliance/models.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/config/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/config/agent_plugin.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/config/agent_registry.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/config/agents.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/config/ide.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/config/paths.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/config/settings.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/analyzers/models.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/analyzers/protocol.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/analyzers/python.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/diff.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/extractors/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/extractors/skills.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/extractors/structure.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/loaders/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/loaders/architecture.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/loaders/artifacts.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/loaders/components.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/loaders/identity.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/context/loaders/memory.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/core/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/core/text.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/core/tools.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/discovery/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/discovery/drift.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/discovery/scanner.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/doctor/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/doctor/checks/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/doctor/checks/developer.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/doctor/checks/environment.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/doctor/checks/project.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/doctor/fix.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/doctor/models.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/doctor/protocol.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/doctor/registry.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/doctor/report.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/doctor/runner.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/engines/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/exceptions.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/gates/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/gates/builtin/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/gates/builtin/_runner.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/gates/builtin/coverage.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/gates/builtin/format.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/gates/builtin/lint.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/gates/builtin/tests.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/gates/builtin/types.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/gates/hook.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/gates/models.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/gates/protocol.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/gates/registry.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/extractor.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/models.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/parsers/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/parsers/_convert.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/parsers/adr.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/parsers/backlog.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/parsers/constitution.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/parsers/glossary.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/parsers/guardrails.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/parsers/prd.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/parsers/roadmap.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/governance/parsers/vision.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/graph/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/graph/backends/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/graph/backends/api.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/graph/backends/dual.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/graph/backends/pending.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/handlers/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/hooks/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/hooks/builtin/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/hooks/builtin/gate_bridge.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/hooks/builtin/memory.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/hooks/builtin/telemetry.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/hooks/emitter.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/hooks/protocol.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/hooks/registry.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/mcp/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/mcp/bridge.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/mcp/models.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/mcp/registry.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/mcp/schema.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/memory/loader.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/memory/migration.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/claudemd.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/conventions.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/detection.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/manifest.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/memory_md.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/migration.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/profile_portability.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/skill_conflict.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/skill_manifest.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/skills.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/onboarding/workflows.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/output/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/output/console.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/output/formatters/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/output/formatters/adapters.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/output/formatters/discover.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/output/formatters/graph.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/output/symbols.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/publish/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/publish/changelog.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/publish/version.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/framework/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/framework/methodology.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/governance/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/governance/architecture/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/governance/architecture/domain-model.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/governance/architecture/domain-model.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/governance/architecture/system-context.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/governance/architecture/system-context.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/governance/architecture/system-design.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/governance/architecture/system-design.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/governance/backlog.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/governance/guardrails.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/governance/prd.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/governance/vision.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/identity/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/identity/core.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/identity/core.yaml +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/identity/perspective.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/memory/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/rai_base/memory/patterns-base.jsonl +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/schemas/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/schemas/journal.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/session/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/session/bundle_data.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/session/identity.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/session/resolver.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills/locator.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills/name_checker.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills/parser.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills/scaffold.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills/schema.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills/skillsets.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills/validator.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/contract-template.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/preamble.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-epic-close/templates/retrospective.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-epic-design/templates/design.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-epic-design/templates/scope.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-epic-plan/_references/sequencing-strategies.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-epic-plan/templates/plan-section.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-epic-start/templates/brief.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-research/references/research-prompt-template.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-story-design/references/tech-design-story-v2.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/skills_base/rai-story-start/templates/story.md +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/telemetry/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/telemetry/schemas.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/telemetry/writer.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/tier/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/tier/context.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/viz/__init__.py +0 -0
- {raise_cli-2.3.0 → raise_cli-2.4.0}/src/raise_cli/viz/generator.py +0 -0
|
@@ -20,9 +20,13 @@ CLAUDE.local.md
|
|
|
20
20
|
.raise/confluence-pages.yaml
|
|
21
21
|
.raise/backlog/
|
|
22
22
|
|
|
23
|
-
# RaiSE adapter configs (
|
|
24
|
-
.raise/jira.yaml
|
|
25
|
-
.raise/
|
|
23
|
+
# RaiSE adapter configs (declarative, PII-free — identity in env vars)
|
|
24
|
+
# .raise/jira.yaml and .raise/confluence.yaml are tracked (shared config)
|
|
25
|
+
.raise/adapters/*.yaml
|
|
26
|
+
!.raise/adapters/*.yaml.example
|
|
27
|
+
|
|
28
|
+
# Dossier output (generated, not committed)
|
|
29
|
+
dev/output/
|
|
26
30
|
|
|
27
31
|
# RaiSE derived artifacts (rebuild with `rai memory build`)
|
|
28
32
|
.raise/rai/memory/index.json
|
|
@@ -95,12 +99,16 @@ dmypy.json
|
|
|
95
99
|
# Legacy telemetry (should be in personal/, will migrate)
|
|
96
100
|
.raise/rai/telemetry/
|
|
97
101
|
|
|
102
|
+
# Push tracking markers (per-environment, not shared)
|
|
103
|
+
.raise/rai/learnings/**/.pushed
|
|
104
|
+
|
|
98
105
|
# MCP server config (contains API tokens)
|
|
99
106
|
.mcp.json
|
|
100
107
|
|
|
101
108
|
# Secrets & credentials
|
|
102
109
|
.env
|
|
103
110
|
.env.*
|
|
111
|
+
!.env.example
|
|
104
112
|
*.pem
|
|
105
113
|
*.key
|
|
106
114
|
.pypirc
|
|
@@ -110,13 +118,8 @@ credentials.json
|
|
|
110
118
|
.raise/mcp/
|
|
111
119
|
!.raise/mcp/catalog.yaml
|
|
112
120
|
|
|
113
|
-
#
|
|
114
|
-
|
|
115
|
-
site/dist/
|
|
116
|
-
site/.astro/
|
|
117
|
-
site/.wrangler/
|
|
118
|
-
docs/node_modules/
|
|
119
|
-
docs/.astro/
|
|
121
|
+
# MkDocs build output
|
|
122
|
+
_site/
|
|
120
123
|
|
|
121
124
|
# Issue analysis artifacts (PDFs, images — binary, no git value)
|
|
122
125
|
dev/issues/**/*.pdf
|
|
@@ -127,3 +130,4 @@ dev/transcripts/
|
|
|
127
130
|
|
|
128
131
|
# Prevent symlink artifacts from being tracked at root
|
|
129
132
|
/es/
|
|
133
|
+
work/research/
|
raise_cli-2.4.0/PKG-INFO
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: raise-cli
|
|
3
|
+
Version: 2.4.0
|
|
4
|
+
Summary: RaiSE CLI - Reliable AI Software Engineering governance framework
|
|
5
|
+
Project-URL: Homepage, https://raiseframework.ai
|
|
6
|
+
Project-URL: Documentation, https://docs.raiseframework.ai
|
|
7
|
+
Project-URL: Repository, https://github.com/humansys/raise
|
|
8
|
+
Project-URL: Changelog, https://github.com/humansys/raise/blob/main/CHANGELOG.md
|
|
9
|
+
Author-email: Emilio Osorio <emilio@humansys.ai>
|
|
10
|
+
License: Apache-2.0
|
|
11
|
+
Keywords: ai,cli,governance,methodology,software-engineering
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
19
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
20
|
+
Requires-Python: >=3.12
|
|
21
|
+
Requires-Dist: logfire-api>=4.0
|
|
22
|
+
Requires-Dist: networkx>=3.6.1
|
|
23
|
+
Requires-Dist: pydantic-settings>=2.2.0
|
|
24
|
+
Requires-Dist: pydantic>=2.6.0
|
|
25
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
26
|
+
Requires-Dist: pyyaml>=6.0.1
|
|
27
|
+
Requires-Dist: raise-core
|
|
28
|
+
Requires-Dist: rich>=13.7.0
|
|
29
|
+
Requires-Dist: tree-sitter-javascript>=0.25.0
|
|
30
|
+
Requires-Dist: tree-sitter-language-pack>=0.13.0
|
|
31
|
+
Requires-Dist: tree-sitter-php>=0.24.1
|
|
32
|
+
Requires-Dist: tree-sitter-svelte>=1.0.2
|
|
33
|
+
Requires-Dist: tree-sitter-typescript>=0.23.2
|
|
34
|
+
Requires-Dist: tree-sitter>=0.25.2
|
|
35
|
+
Requires-Dist: typer>=0.12.0
|
|
36
|
+
Provides-Extra: atlassian
|
|
37
|
+
Requires-Dist: atlassian-python-api>=3.41.0; extra == 'atlassian'
|
|
38
|
+
Provides-Extra: confluence
|
|
39
|
+
Requires-Dist: atlassian-python-api>=3.41.0; extra == 'confluence'
|
|
40
|
+
Provides-Extra: csharp
|
|
41
|
+
Requires-Dist: tree-sitter-c-sharp>=0.23.1; extra == 'csharp'
|
|
42
|
+
Provides-Extra: jira
|
|
43
|
+
Requires-Dist: atlassian-python-api>=3.41.0; extra == 'jira'
|
|
44
|
+
Provides-Extra: mcp
|
|
45
|
+
Requires-Dist: mcp<2,>=1.26; extra == 'mcp'
|
|
46
|
+
Provides-Extra: observability
|
|
47
|
+
Requires-Dist: logfire>=4.0; extra == 'observability'
|
|
48
|
+
Description-Content-Type: text/markdown
|
|
49
|
+
|
|
50
|
+
# RaiSE CLI
|
|
51
|
+
|
|
52
|
+
**Reliable AI Software Engineering** — a lean methodology and deterministic CLI toolkit that turns AI coding assistants into disciplined collaborators.
|
|
53
|
+
|
|
54
|
+
[](https://pypi.org/project/raise-cli/)
|
|
55
|
+
[](https://pypi.org/project/raise-cli/)
|
|
56
|
+
[](https://github.com/humansys/raise/blob/main/LICENSE)
|
|
57
|
+
|
|
58
|
+
## What is RaiSE?
|
|
59
|
+
|
|
60
|
+
RaiSE provides **governance, memory, and structured workflows** for AI-assisted software engineering. You decide *what* to build. Rai (your AI partner) executes with accumulated memory and calibrated judgment. RaiSE provides the discipline that makes the collaboration reliable.
|
|
61
|
+
|
|
62
|
+
The result: AI that learns from your project, follows your rules, and compounds knowledge across sessions instead of starting fresh every time.
|
|
63
|
+
|
|
64
|
+
## Install
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pip install raise-cli
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Optional integrations:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Jira + Confluence adapters
|
|
74
|
+
pip install "raise-cli[jira,confluence]"
|
|
75
|
+
|
|
76
|
+
# MCP server support
|
|
77
|
+
pip install "raise-cli[mcp]"
|
|
78
|
+
|
|
79
|
+
# All extras
|
|
80
|
+
pip install "raise-cli[jira,confluence,mcp,csharp,observability]"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Requires Python 3.12 or 3.13.
|
|
84
|
+
|
|
85
|
+
## Quick start
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Initialize a project
|
|
89
|
+
rai init
|
|
90
|
+
|
|
91
|
+
# Start a session (loads context, memory, proposes work)
|
|
92
|
+
rai session start --project . --context
|
|
93
|
+
|
|
94
|
+
# Build the knowledge graph
|
|
95
|
+
rai graph build
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Then work through skills in your AI assistant (Claude Code, Cursor, Windsurf):
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
/rai-session-start → Load context, propose focused work
|
|
102
|
+
/rai-story-start → Scope a piece of work
|
|
103
|
+
/rai-story-plan → Decompose into tasks
|
|
104
|
+
/rai-story-implement → TDD: test, code, verify, commit
|
|
105
|
+
/rai-story-review → Extract learnings
|
|
106
|
+
/rai-story-close → Merge and clean up
|
|
107
|
+
/rai-session-close → Capture session outcomes
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Key features
|
|
111
|
+
|
|
112
|
+
### Structured workflows
|
|
113
|
+
44 skills covering the full SDLC — epic, story, bugfix, discovery, session management, documentation, and release.
|
|
114
|
+
|
|
115
|
+
### Knowledge graph
|
|
116
|
+
Project context, patterns, and cross-session memory — queryable and persistent.
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
rai graph query "testing patterns" --types pattern --limit 5
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Backlog management
|
|
123
|
+
Built-in adapters for Jira and filesystem-backed backlogs.
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
rai backlog search "project = MYPROJECT AND status = 'In Progress'"
|
|
127
|
+
rai backlog create "Fix pagination bug" -p MYPROJECT -t Bug
|
|
128
|
+
rai backlog transition MYPROJECT-123 done
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Documentation publishing
|
|
132
|
+
Publish to Confluence, local filesystem, or both (dual-write).
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
rai docs publish adr --title "ADR-045: Auth Architecture"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Quality gates
|
|
139
|
+
Automated checks before commits and releases.
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
rai gate check --all # Run all gates
|
|
143
|
+
rai release check # 10-point release checklist
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Session continuity
|
|
147
|
+
Memory that compounds across sessions — patterns, calibration, coaching corrections.
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
rai session start --context # Loads everything from prior sessions
|
|
151
|
+
rai pattern add "Always validate frontmatter before writing"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Multi-language discovery
|
|
155
|
+
Scan codebases and build knowledge graphs from: Python, TypeScript, JavaScript, C#, PHP, Dart, Svelte.
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
rai discover scan src/ --language python --output summary
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## CLI commands
|
|
162
|
+
|
|
163
|
+
72 subcommands across 17 groups:
|
|
164
|
+
|
|
165
|
+
| Group | Commands |
|
|
166
|
+
|-------|----------|
|
|
167
|
+
| `init` | Initialize project governance |
|
|
168
|
+
| `session` | start, close, context, journal, doctor |
|
|
169
|
+
| `graph` | build, query, context |
|
|
170
|
+
| `pattern` | add, query |
|
|
171
|
+
| `backlog` | create, get, search, transition, update, link, comment |
|
|
172
|
+
| `docs` | publish, get, search |
|
|
173
|
+
| `skill` | list, validate, check-name, scaffold |
|
|
174
|
+
| `discover` | scan |
|
|
175
|
+
| `adapter` | list, check, validate, status |
|
|
176
|
+
| `mcp` | list, health, tools, call, install, scaffold |
|
|
177
|
+
| `gate` | list, check |
|
|
178
|
+
| `doctor` | diagnostics with --fix auto-remediation |
|
|
179
|
+
| `release` | check, publish |
|
|
180
|
+
|
|
181
|
+
## Documentation
|
|
182
|
+
|
|
183
|
+
- **[Getting Started](https://docs.raiseframework.ai/)** — Install and run your first session
|
|
184
|
+
- **[Guides](https://docs.raiseframework.ai/guides/first-story/)** — Your First Story, Configuring Integrations, Bugfix Lifecycle
|
|
185
|
+
- **[CLI Reference](https://docs.raiseframework.ai/cli/)** — Every command, flag, and option
|
|
186
|
+
- **[Concepts](https://docs.raiseframework.ai/concepts/)** — Memory, Skills, Governance, Knowledge Graph
|
|
187
|
+
|
|
188
|
+
## License
|
|
189
|
+
|
|
190
|
+
Apache 2.0 — see [LICENSE](https://github.com/humansys/raise/blob/main/LICENSE).
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# RaiSE CLI
|
|
2
|
+
|
|
3
|
+
**Reliable AI Software Engineering** — a lean methodology and deterministic CLI toolkit that turns AI coding assistants into disciplined collaborators.
|
|
4
|
+
|
|
5
|
+
[](https://pypi.org/project/raise-cli/)
|
|
6
|
+
[](https://pypi.org/project/raise-cli/)
|
|
7
|
+
[](https://github.com/humansys/raise/blob/main/LICENSE)
|
|
8
|
+
|
|
9
|
+
## What is RaiSE?
|
|
10
|
+
|
|
11
|
+
RaiSE provides **governance, memory, and structured workflows** for AI-assisted software engineering. You decide *what* to build. Rai (your AI partner) executes with accumulated memory and calibrated judgment. RaiSE provides the discipline that makes the collaboration reliable.
|
|
12
|
+
|
|
13
|
+
The result: AI that learns from your project, follows your rules, and compounds knowledge across sessions instead of starting fresh every time.
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pip install raise-cli
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Optional integrations:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Jira + Confluence adapters
|
|
25
|
+
pip install "raise-cli[jira,confluence]"
|
|
26
|
+
|
|
27
|
+
# MCP server support
|
|
28
|
+
pip install "raise-cli[mcp]"
|
|
29
|
+
|
|
30
|
+
# All extras
|
|
31
|
+
pip install "raise-cli[jira,confluence,mcp,csharp,observability]"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Requires Python 3.12 or 3.13.
|
|
35
|
+
|
|
36
|
+
## Quick start
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Initialize a project
|
|
40
|
+
rai init
|
|
41
|
+
|
|
42
|
+
# Start a session (loads context, memory, proposes work)
|
|
43
|
+
rai session start --project . --context
|
|
44
|
+
|
|
45
|
+
# Build the knowledge graph
|
|
46
|
+
rai graph build
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Then work through skills in your AI assistant (Claude Code, Cursor, Windsurf):
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
/rai-session-start → Load context, propose focused work
|
|
53
|
+
/rai-story-start → Scope a piece of work
|
|
54
|
+
/rai-story-plan → Decompose into tasks
|
|
55
|
+
/rai-story-implement → TDD: test, code, verify, commit
|
|
56
|
+
/rai-story-review → Extract learnings
|
|
57
|
+
/rai-story-close → Merge and clean up
|
|
58
|
+
/rai-session-close → Capture session outcomes
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Key features
|
|
62
|
+
|
|
63
|
+
### Structured workflows
|
|
64
|
+
44 skills covering the full SDLC — epic, story, bugfix, discovery, session management, documentation, and release.
|
|
65
|
+
|
|
66
|
+
### Knowledge graph
|
|
67
|
+
Project context, patterns, and cross-session memory — queryable and persistent.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
rai graph query "testing patterns" --types pattern --limit 5
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Backlog management
|
|
74
|
+
Built-in adapters for Jira and filesystem-backed backlogs.
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
rai backlog search "project = MYPROJECT AND status = 'In Progress'"
|
|
78
|
+
rai backlog create "Fix pagination bug" -p MYPROJECT -t Bug
|
|
79
|
+
rai backlog transition MYPROJECT-123 done
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Documentation publishing
|
|
83
|
+
Publish to Confluence, local filesystem, or both (dual-write).
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
rai docs publish adr --title "ADR-045: Auth Architecture"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Quality gates
|
|
90
|
+
Automated checks before commits and releases.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
rai gate check --all # Run all gates
|
|
94
|
+
rai release check # 10-point release checklist
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Session continuity
|
|
98
|
+
Memory that compounds across sessions — patterns, calibration, coaching corrections.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
rai session start --context # Loads everything from prior sessions
|
|
102
|
+
rai pattern add "Always validate frontmatter before writing"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Multi-language discovery
|
|
106
|
+
Scan codebases and build knowledge graphs from: Python, TypeScript, JavaScript, C#, PHP, Dart, Svelte.
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
rai discover scan src/ --language python --output summary
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## CLI commands
|
|
113
|
+
|
|
114
|
+
72 subcommands across 17 groups:
|
|
115
|
+
|
|
116
|
+
| Group | Commands |
|
|
117
|
+
|-------|----------|
|
|
118
|
+
| `init` | Initialize project governance |
|
|
119
|
+
| `session` | start, close, context, journal, doctor |
|
|
120
|
+
| `graph` | build, query, context |
|
|
121
|
+
| `pattern` | add, query |
|
|
122
|
+
| `backlog` | create, get, search, transition, update, link, comment |
|
|
123
|
+
| `docs` | publish, get, search |
|
|
124
|
+
| `skill` | list, validate, check-name, scaffold |
|
|
125
|
+
| `discover` | scan |
|
|
126
|
+
| `adapter` | list, check, validate, status |
|
|
127
|
+
| `mcp` | list, health, tools, call, install, scaffold |
|
|
128
|
+
| `gate` | list, check |
|
|
129
|
+
| `doctor` | diagnostics with --fix auto-remediation |
|
|
130
|
+
| `release` | check, publish |
|
|
131
|
+
|
|
132
|
+
## Documentation
|
|
133
|
+
|
|
134
|
+
- **[Getting Started](https://docs.raiseframework.ai/)** — Install and run your first session
|
|
135
|
+
- **[Guides](https://docs.raiseframework.ai/guides/first-story/)** — Your First Story, Configuring Integrations, Bugfix Lifecycle
|
|
136
|
+
- **[CLI Reference](https://docs.raiseframework.ai/cli/)** — Every command, flag, and option
|
|
137
|
+
- **[Concepts](https://docs.raiseframework.ai/concepts/)** — Memory, Skills, Governance, Knowledge Graph
|
|
138
|
+
|
|
139
|
+
## License
|
|
140
|
+
|
|
141
|
+
Apache 2.0 — see [LICENSE](https://github.com/humansys/raise/blob/main/LICENSE).
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "raise-cli"
|
|
3
|
+
version = "2.4.0"
|
|
4
|
+
description = "RaiSE CLI - Reliable AI Software Engineering governance framework"
|
|
5
|
+
authors = [
|
|
6
|
+
{name = "Emilio Osorio", email = "emilio@humansys.ai"}
|
|
7
|
+
]
|
|
8
|
+
readme = "README.md"
|
|
9
|
+
license = {text = "Apache-2.0"}
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
keywords = ["ai", "governance", "cli", "software-engineering", "methodology"]
|
|
12
|
+
classifiers = [
|
|
13
|
+
"Development Status :: 4 - Beta",
|
|
14
|
+
"Intended Audience :: Developers",
|
|
15
|
+
"License :: OSI Approved :: Apache Software License",
|
|
16
|
+
"Programming Language :: Python :: 3",
|
|
17
|
+
"Programming Language :: Python :: 3.12",
|
|
18
|
+
"Programming Language :: Python :: 3.13",
|
|
19
|
+
"Topic :: Software Development :: Quality Assurance",
|
|
20
|
+
"Topic :: Software Development :: Libraries :: Application Frameworks",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
dependencies = [
|
|
24
|
+
"raise-core",
|
|
25
|
+
"typer>=0.12.0",
|
|
26
|
+
"rich>=13.7.0",
|
|
27
|
+
"pydantic>=2.6.0",
|
|
28
|
+
"pydantic-settings>=2.2.0",
|
|
29
|
+
"python-dotenv>=1.0.0",
|
|
30
|
+
"pyyaml>=6.0.1",
|
|
31
|
+
"networkx>=3.6.1",
|
|
32
|
+
"tree-sitter>=0.25.2",
|
|
33
|
+
"tree-sitter-typescript>=0.23.2",
|
|
34
|
+
"tree-sitter-javascript>=0.25.0",
|
|
35
|
+
"tree-sitter-php>=0.24.1",
|
|
36
|
+
"tree-sitter-svelte>=1.0.2",
|
|
37
|
+
"tree-sitter-language-pack>=0.13.0",
|
|
38
|
+
"logfire-api>=4.0",
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
[project.optional-dependencies]
|
|
42
|
+
mcp = [
|
|
43
|
+
"mcp>=1.26,<2",
|
|
44
|
+
]
|
|
45
|
+
observability = [
|
|
46
|
+
"logfire>=4.0",
|
|
47
|
+
]
|
|
48
|
+
csharp = [
|
|
49
|
+
"tree-sitter-c-sharp>=0.23.1",
|
|
50
|
+
]
|
|
51
|
+
atlassian = [
|
|
52
|
+
"atlassian-python-api>=3.41.0",
|
|
53
|
+
]
|
|
54
|
+
confluence = [
|
|
55
|
+
"atlassian-python-api>=3.41.0",
|
|
56
|
+
]
|
|
57
|
+
jira = [
|
|
58
|
+
"atlassian-python-api>=3.41.0",
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
[project.urls]
|
|
62
|
+
Homepage = "https://raiseframework.ai"
|
|
63
|
+
Documentation = "https://docs.raiseframework.ai"
|
|
64
|
+
Repository = "https://github.com/humansys/raise"
|
|
65
|
+
Changelog = "https://github.com/humansys/raise/blob/main/CHANGELOG.md"
|
|
66
|
+
|
|
67
|
+
[project.scripts]
|
|
68
|
+
rai = "raise_cli.cli.main:app"
|
|
69
|
+
|
|
70
|
+
[project.entry-points."rai.governance.parsers"]
|
|
71
|
+
prd = "raise_cli.governance.parsers.prd:PrdParser"
|
|
72
|
+
vision = "raise_cli.governance.parsers.vision:VisionParser"
|
|
73
|
+
constitution = "raise_cli.governance.parsers.constitution:ConstitutionParser"
|
|
74
|
+
roadmap = "raise_cli.governance.parsers.roadmap:RoadmapParser"
|
|
75
|
+
backlog = "raise_cli.governance.parsers.backlog:BacklogParser"
|
|
76
|
+
epic_scope = "raise_cli.governance.parsers.epic:EpicScopeParser"
|
|
77
|
+
adr = "raise_cli.governance.parsers.adr:AdrParser"
|
|
78
|
+
guardrails = "raise_cli.governance.parsers.guardrails:GuardrailsParser"
|
|
79
|
+
glossary = "raise_cli.governance.parsers.glossary:GlossaryParser"
|
|
80
|
+
|
|
81
|
+
[project.entry-points."rai.hooks"]
|
|
82
|
+
telemetry = "raise_cli.hooks.builtin.telemetry:TelemetryHook"
|
|
83
|
+
gate-bridge = "raise_cli.hooks.builtin.gate_bridge:GateBridgeHook"
|
|
84
|
+
memory-sync = "raise_cli.hooks.builtin.memory:MemoryMdSyncHook"
|
|
85
|
+
|
|
86
|
+
[project.entry-points."rai.gates"]
|
|
87
|
+
tests = "raise_cli.gates.builtin.tests:TestGate"
|
|
88
|
+
types = "raise_cli.gates.builtin.types:TypeGate"
|
|
89
|
+
lint = "raise_cli.gates.builtin.lint:LintGate"
|
|
90
|
+
coverage = "raise_cli.gates.builtin.coverage:CoverageGate"
|
|
91
|
+
format = "raise_cli.gates.builtin.format:FormatGate"
|
|
92
|
+
|
|
93
|
+
[project.entry-points."rai.doctor.checks"]
|
|
94
|
+
environment = "raise_cli.doctor.checks.environment:EnvironmentCheck"
|
|
95
|
+
project = "raise_cli.doctor.checks.project:ProjectCheck"
|
|
96
|
+
developer = "raise_cli.doctor.checks.developer:DeveloperCheck"
|
|
97
|
+
adapters = "raise_cli.doctor.checks.adapters:AdapterDoctorCheck"
|
|
98
|
+
|
|
99
|
+
[project.entry-points."rai.adapters.pm"]
|
|
100
|
+
filesystem = "raise_cli.adapters.filesystem:FilesystemPMAdapter"
|
|
101
|
+
jira = "raise_cli.adapters.jira_adapter:PythonApiJiraAdapter"
|
|
102
|
+
|
|
103
|
+
[project.entry-points."rai.docs.targets"]
|
|
104
|
+
filesystem = "raise_cli.adapters.filesystem_docs:FilesystemDocsTarget"
|
|
105
|
+
confluence = "raise_cli.adapters.confluence_adapter:PythonApiConfluenceAdapter"
|
|
106
|
+
|
|
107
|
+
[project.entry-points."rai.graph.backends"]
|
|
108
|
+
local = "raise_core.graph.backends.filesystem:FilesystemGraphBackend"
|
|
109
|
+
|
|
110
|
+
[project.entry-points."rai.session.state_deriver"]
|
|
111
|
+
git = "raise_cli.session.derive:GitStateDeriver"
|
|
112
|
+
|
|
113
|
+
[project.entry-points."rai.session.registry"]
|
|
114
|
+
local = "raise_cli.session.registry:LocalSessionRegistry"
|
|
115
|
+
|
|
116
|
+
[project.entry-points."rai.session.monitor"]
|
|
117
|
+
local = "raise_cli.session.monitor:LocalWorkstreamMonitor"
|
|
118
|
+
|
|
119
|
+
[tool.uv.sources]
|
|
120
|
+
raise-core = { workspace = true }
|
|
121
|
+
|
|
122
|
+
[build-system]
|
|
123
|
+
requires = ["hatchling"]
|
|
124
|
+
build-backend = "hatchling.build"
|
|
125
|
+
|
|
126
|
+
[tool.hatch.build.targets.wheel]
|
|
127
|
+
packages = ["src/raise_cli"]
|
|
128
|
+
|
|
129
|
+
[tool.hatch.build.targets.sdist]
|
|
130
|
+
include = [
|
|
131
|
+
"/src/raise_cli/",
|
|
132
|
+
"/LICENSE",
|
|
133
|
+
"/README.md",
|
|
134
|
+
"/pyproject.toml",
|
|
135
|
+
]
|
|
@@ -5,6 +5,8 @@ A governance framework for AI-assisted software development.
|
|
|
5
5
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
|
+
from importlib.metadata import version as _pkg_version
|
|
9
|
+
|
|
8
10
|
from raise_cli.exceptions import (
|
|
9
11
|
ArtifactNotFoundError,
|
|
10
12
|
ConfigurationError,
|
|
@@ -17,7 +19,7 @@ from raise_cli.exceptions import (
|
|
|
17
19
|
ValidationError,
|
|
18
20
|
)
|
|
19
21
|
|
|
20
|
-
__version__ = "
|
|
22
|
+
__version__ = _pkg_version("raise-cli")
|
|
21
23
|
__author__ = "Emilio Osorio"
|
|
22
24
|
__license__ = "MIT"
|
|
23
25
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Adapter contracts and registry for raise-cli extensibility.
|
|
2
2
|
|
|
3
|
-
Public API: 7 Protocols +
|
|
3
|
+
Public API: 7 Protocols + 16 boundary models + 2 sync wrappers
|
|
4
4
|
+ 5 registry functions + 5 group constants.
|
|
5
5
|
KnowledgeGraphBackend + BackendHealth moved to raise_core (E275).
|
|
6
6
|
|
|
@@ -22,6 +22,7 @@ from raise_cli.adapters.models import (
|
|
|
22
22
|
PageContent,
|
|
23
23
|
PageSummary,
|
|
24
24
|
PublishResult,
|
|
25
|
+
SpaceInfo,
|
|
25
26
|
)
|
|
26
27
|
from raise_cli.adapters.protocols import (
|
|
27
28
|
AsyncDocumentationTarget,
|
|
@@ -76,6 +77,7 @@ __all__ = [
|
|
|
76
77
|
"PageContent",
|
|
77
78
|
"PageSummary",
|
|
78
79
|
"PublishResult",
|
|
80
|
+
"SpaceInfo",
|
|
79
81
|
# Registry functions
|
|
80
82
|
"get_doc_targets",
|
|
81
83
|
"get_governance_parsers",
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"""Composite documentation target — delegates to multiple targets.
|
|
2
|
+
|
|
3
|
+
Publishes to ALL targets (e.g. filesystem + Confluence). Reads (get_page,
|
|
4
|
+
search, health) delegate to the remote target (last in list — typically Confluence).
|
|
5
|
+
|
|
6
|
+
Filesystem is first for durability: local copy always saved.
|
|
7
|
+
Result prefers last successful publish (remote URL over local path).
|
|
8
|
+
If remote fails, returns success with warning (local copy is the guarantee).
|
|
9
|
+
|
|
10
|
+
RAISE-1051 (S1051.7)
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import logging
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
from raise_cli.adapters.models.docs import PageContent, PageSummary, PublishResult
|
|
19
|
+
from raise_cli.adapters.models.health import AdapterHealth
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class CompositeDocTarget:
|
|
25
|
+
"""Delegates to multiple DocumentationTargets.
|
|
26
|
+
|
|
27
|
+
- publish: calls all targets; returns last successful result (remote preferred)
|
|
28
|
+
- get_page / search / health: delegate to remote (last) target
|
|
29
|
+
- Filesystem first for durability, Confluence last for the URL
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
def __init__(self, targets: list[Any]) -> None:
|
|
33
|
+
self._targets = targets
|
|
34
|
+
self._remote = targets[-1] # last target = remote (Confluence)
|
|
35
|
+
|
|
36
|
+
def can_publish(self, doc_type: str, metadata: dict[str, Any]) -> bool:
|
|
37
|
+
"""True if any wrapped target can publish."""
|
|
38
|
+
return any(t.can_publish(doc_type, metadata) for t in self._targets)
|
|
39
|
+
|
|
40
|
+
def publish(
|
|
41
|
+
self, doc_type: str, content: str, metadata: dict[str, Any]
|
|
42
|
+
) -> PublishResult:
|
|
43
|
+
"""Publish to all accepting targets. Return best result.
|
|
44
|
+
|
|
45
|
+
Prefers last successful result (remote URL). If remote fails but
|
|
46
|
+
local succeeded, returns success with sync-pending warning.
|
|
47
|
+
"""
|
|
48
|
+
results: list[PublishResult] = []
|
|
49
|
+
failures: list[str] = []
|
|
50
|
+
|
|
51
|
+
for target in self._targets:
|
|
52
|
+
if target.can_publish(doc_type, metadata):
|
|
53
|
+
try:
|
|
54
|
+
result: PublishResult = target.publish(doc_type, content, metadata)
|
|
55
|
+
results.append(result)
|
|
56
|
+
if not result.success:
|
|
57
|
+
failures.append(result.message)
|
|
58
|
+
except Exception as exc:
|
|
59
|
+
logger.warning("Composite publish failed on %s: %s", type(target).__name__, exc)
|
|
60
|
+
failures.append(str(exc))
|
|
61
|
+
|
|
62
|
+
if not results:
|
|
63
|
+
return PublishResult(
|
|
64
|
+
success=False, message="No target accepted this doc_type"
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# Prefer last successful result (remote URL over local path)
|
|
68
|
+
successful = [r for r in results if r.success]
|
|
69
|
+
if successful:
|
|
70
|
+
best = successful[-1] # last success = remote if available
|
|
71
|
+
if failures:
|
|
72
|
+
return PublishResult(
|
|
73
|
+
success=True,
|
|
74
|
+
url=best.url,
|
|
75
|
+
message=f"{best.message} (sync pending: {'; '.join(failures)})",
|
|
76
|
+
)
|
|
77
|
+
return best
|
|
78
|
+
|
|
79
|
+
# All failed — return first failure
|
|
80
|
+
return results[0]
|
|
81
|
+
|
|
82
|
+
def get_page(self, identifier: str) -> PageContent:
|
|
83
|
+
"""Delegate to remote (last) target."""
|
|
84
|
+
return self._remote.get_page(identifier)
|
|
85
|
+
|
|
86
|
+
def search(self, query: str, limit: int = 10) -> list[PageSummary]:
|
|
87
|
+
"""Delegate to remote (last) target."""
|
|
88
|
+
return self._remote.search(query, limit=limit)
|
|
89
|
+
|
|
90
|
+
def health(self) -> AdapterHealth:
|
|
91
|
+
"""Delegate to remote (last) target."""
|
|
92
|
+
return self._remote.health()
|