raise-cli 2.4.0a2__tar.gz → 3.0.0a1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/.gitignore +16 -2
- raise_cli-3.0.0a1/PKG-INFO +193 -0
- raise_cli-3.0.0a1/README.md +141 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/pyproject.toml +15 -3
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/confluence_adapter.py +30 -21
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/confluence_client.py +50 -9
- raise_cli-3.0.0a1/src/raise_cli/adapters/confluence_config_gen.py +165 -0
- raise_cli-3.0.0a1/src/raise_cli/adapters/confluence_discovery.py +258 -0
- raise_cli-3.0.0a1/src/raise_cli/adapters/filesystem_adapter.py +98 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/filesystem_docs.py +55 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/jira_adapter.py +8 -1
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/jira_client.py +111 -7
- raise_cli-3.0.0a1/src/raise_cli/adapters/jira_config_gen.py +90 -0
- raise_cli-3.0.0a1/src/raise_cli/adapters/jira_discovery.py +103 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/models/pm.py +51 -1
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/registry.py +23 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/backlog/sync.py +3 -14
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/_resolve.py +9 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/discover.py +18 -18
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/docs.py +18 -4
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/graph.py +18 -1
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/info.py +1 -1
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/init.py +49 -25
- raise_cli-3.0.0a1/src/raise_cli/cli/commands/learn.py +266 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/mcp.py +16 -7
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/pattern.py +2 -2
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/profile.py +1 -1
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/release.py +20 -3
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/session.py +155 -19
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/signal.py +25 -20
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/main.py +4 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/analyzers/__init__.py +2 -1
- raise_cli-3.0.0a1/src/raise_cli/context/analyzers/signals.py +165 -0
- raise_cli-3.0.0a1/src/raise_cli/context/analyzers/typescript.py +469 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/builder.py +24 -6
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/extractors/relationships.py +12 -3
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/core/files.py +19 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/discovery/analyzer.py +1 -1
- raise_cli-3.0.0a1/src/raise_cli/doctor/checks/adapters.py +404 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/parsers/epic.py +2 -2
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/memory/__init__.py +1 -1
- raise_cli-3.0.0a1/src/raise_cli/memory/learning.py +122 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/memory/models.py +4 -0
- raise_cli-3.0.0a1/src/raise_cli/memory/push.py +101 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/memory/writer.py +9 -10
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/bootstrap.py +1 -1
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/governance.py +1 -1
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/profile.py +7 -5
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/output/formatters/skill.py +1 -1
- raise_cli-3.0.0a1/src/raise_cli/pipeline/__init__.py +32 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/_telemetry.py +61 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/cli.py +352 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/dispatch.py +307 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/engine.py +372 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/executor.py +237 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/gates.py +178 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/loader.py +143 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/mcp_server.py +1132 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/pipelines_base/bugfix.yaml +48 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/pipelines_base/epic.yaml +42 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/pipelines_base/hotfix.yaml +29 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/pipelines_base/story.yaml +121 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/prompt.py +193 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/state.py +131 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/templates/adversarial-ar.md +35 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/templates/adversarial-qr.md +44 -0
- raise_cli-3.0.0a1/src/raise_cli/pipeline/worktree.py +118 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/publish/check.py +14 -3
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/__init__.py +1 -1
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/schemas/session_state.py +61 -1
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/session/bundle.py +38 -6
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/session/bundle_formatters.py +19 -6
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/session/close.py +28 -8
- raise_cli-3.0.0a1/src/raise_cli/session/derive.py +235 -0
- raise_cli-3.0.0a1/src/raise_cli/session/doctor.py +364 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/session/index.py +9 -5
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/session/journal.py +3 -3
- raise_cli-3.0.0a1/src/raise_cli/session/monitor.py +162 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/session/prefix.py +4 -3
- raise_cli-3.0.0a1/src/raise_cli/session/protocols.py +70 -0
- raise_cli-3.0.0a1/src/raise_cli/session/registry.py +197 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/session/state.py +41 -5
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/__init__.py +32 -10
- raise_cli-3.0.0a1/src/raise_cli/skills_base/rai-adapter-setup/SKILL.md +221 -0
- raise_cli-3.0.0a1/src/raise_cli/skills_base/rai-architecture-review/SKILL.md +168 -0
- raise_cli-3.0.0a1/src/raise_cli/skills_base/rai-bugfix-analyse/SKILL.md +136 -0
- raise_cli-3.0.0a1/src/raise_cli/skills_base/rai-bugfix-close/SKILL.md +143 -0
- raise_cli-3.0.0a1/src/raise_cli/skills_base/rai-bugfix-fix/SKILL.md +114 -0
- raise_cli-3.0.0a1/src/raise_cli/skills_base/rai-bugfix-plan/SKILL.md +119 -0
- raise_cli-3.0.0a1/src/raise_cli/skills_base/rai-bugfix-review/SKILL.md +150 -0
- raise_cli-3.0.0a1/src/raise_cli/skills_base/rai-bugfix-run/SKILL.md +304 -0
- raise_cli-3.0.0a1/src/raise_cli/skills_base/rai-bugfix-start/SKILL.md +121 -0
- raise_cli-3.0.0a1/src/raise_cli/skills_base/rai-bugfix-triage/SKILL.md +138 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-debug/SKILL.md +9 -4
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-discover/SKILL.md +9 -3
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-docs-update/SKILL.md +9 -5
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-doctor/SKILL.md +6 -4
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-epic-close/SKILL.md +36 -13
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-epic-design/SKILL.md +82 -16
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-epic-docs/SKILL.md +9 -5
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-epic-plan/SKILL.md +33 -5
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-epic-run/SKILL.md +10 -6
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-epic-start/SKILL.md +31 -12
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-mcp-add/SKILL.md +9 -4
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-mcp-remove/SKILL.md +9 -3
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-mcp-status/SKILL.md +6 -5
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-problem-shape/SKILL.md +6 -4
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-project-create/SKILL.md +9 -4
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-project-onboard/SKILL.md +9 -5
- raise_cli-3.0.0a1/src/raise_cli/skills_base/rai-quality-review/SKILL.md +206 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-research/SKILL.md +9 -5
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-session-close/SKILL.md +7 -3
- raise_cli-3.0.0a1/src/raise_cli/skills_base/rai-session-diary/SKILL.md +229 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-session-start/SKILL.md +6 -3
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-story-close/SKILL.md +34 -8
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-story-design/SKILL.md +85 -17
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-story-implement/SKILL.md +49 -19
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-story-plan/SKILL.md +33 -5
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-story-review/SKILL.md +59 -22
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-story-run/SKILL.md +27 -7
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-story-start/SKILL.md +10 -5
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-welcome/SKILL.md +14 -8
- raise_cli-2.4.0a2/PKG-INFO +0 -47
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/__init__.py +2 -2
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/__main__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/composite_docs.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/confluence_config.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/confluence_exceptions.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/declarative/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/declarative/adapter.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/declarative/discovery.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/declarative/expressions.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/declarative/reference/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/declarative/reference/github.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/declarative/schema.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/filesystem.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/filesystem_models.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/jira_config.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/jira_exceptions.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/mcp_bridge.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/models/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/models/docs.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/models/governance.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/models/health.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/protocols.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/adapters/sync.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/agents/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/agents/antigravity.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/agents/claude.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/agents/copilot.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/agents/copilot_plugin.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/agents/cursor.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/agents/roo.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/agents/windsurf.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/artifacts/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/artifacts/models.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/artifacts/reader.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/artifacts/renderer.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/artifacts/story_design.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/artifacts/writer.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/backlog/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/adapters.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/artifact.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/backlog.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/base.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/doctor.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/gate.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/journal.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/memory.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/publish.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/skill.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/commands/skill_set.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/error_handler.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/cli/extensions.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/compat.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/compliance/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/compliance/controls.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/compliance/evidence.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/compliance/extractors/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/compliance/extractors/git.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/compliance/loader.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/compliance/models.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/config/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/config/agent_plugin.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/config/agent_registry.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/config/agents.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/config/ide.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/config/paths.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/config/settings.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/analyzers/models.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/analyzers/protocol.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/analyzers/python.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/diff.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/extractors/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/extractors/skills.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/extractors/structure.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/loaders/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/loaders/architecture.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/loaders/artifacts.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/loaders/components.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/loaders/identity.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/context/loaders/memory.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/core/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/core/text.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/core/tools.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/discovery/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/discovery/drift.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/discovery/scanner.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/doctor/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/doctor/checks/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/doctor/checks/developer.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/doctor/checks/environment.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/doctor/checks/project.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/doctor/fix.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/doctor/models.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/doctor/protocol.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/doctor/registry.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/doctor/report.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/doctor/runner.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/engines/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/exceptions.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/gates/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/gates/builtin/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/gates/builtin/_runner.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/gates/builtin/coverage.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/gates/builtin/format.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/gates/builtin/lint.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/gates/builtin/tests.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/gates/builtin/types.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/gates/hook.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/gates/models.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/gates/protocol.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/gates/registry.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/extractor.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/models.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/parsers/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/parsers/_convert.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/parsers/adr.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/parsers/backlog.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/parsers/constitution.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/parsers/glossary.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/parsers/guardrails.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/parsers/prd.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/parsers/roadmap.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/governance/parsers/vision.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/graph/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/graph/backends/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/graph/backends/api.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/graph/backends/dual.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/graph/backends/pending.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/handlers/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/hooks/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/hooks/builtin/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/hooks/builtin/gate_bridge.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/hooks/builtin/memory.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/hooks/builtin/telemetry.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/hooks/emitter.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/hooks/events.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/hooks/protocol.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/hooks/registry.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/mcp/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/mcp/bridge.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/mcp/models.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/mcp/registry.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/mcp/schema.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/memory/loader.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/memory/migration.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/claudemd.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/conventions.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/detection.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/instructions.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/manifest.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/memory_md.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/migration.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/profile_portability.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/skill_conflict.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/skill_manifest.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/skills.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/onboarding/workflows.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/output/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/output/console.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/output/formatters/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/output/formatters/adapters.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/output/formatters/discover.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/output/formatters/graph.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/output/symbols.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/publish/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/publish/changelog.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/publish/version.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/framework/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/framework/methodology.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/governance/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/governance/architecture/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/governance/architecture/domain-model.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/governance/architecture/domain-model.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/governance/architecture/system-context.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/governance/architecture/system-context.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/governance/architecture/system-design.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/governance/architecture/system-design.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/governance/backlog.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/governance/guardrails.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/governance/prd.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/governance/vision.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/identity/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/identity/core.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/identity/core.yaml +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/identity/perspective.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/memory/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/rai_base/memory/patterns-base.jsonl +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/schemas/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/schemas/journal.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/session/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/session/bundle_data.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/session/identity.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/session/resolver.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills/locator.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills/name_checker.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills/parser.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills/scaffold.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills/schema.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills/skillsets.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills/validator.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/contract-template.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/preamble.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-epic-close/templates/retrospective.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-epic-design/templates/design.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-epic-design/templates/scope.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-epic-plan/_references/sequencing-strategies.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-epic-plan/templates/plan-section.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-epic-start/templates/brief.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-research/references/research-prompt-template.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-story-design/references/tech-design-story-v2.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/skills_base/rai-story-start/templates/story.md +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/telemetry/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/telemetry/schemas.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/telemetry/writer.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/tier/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/tier/context.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/viz/__init__.py +0 -0
- {raise_cli-2.4.0a2 → raise_cli-3.0.0a1}/src/raise_cli/viz/generator.py +0 -0
|
@@ -15,10 +15,19 @@ CLAUDE.local.md
|
|
|
15
15
|
.claude/RAI-naming.md
|
|
16
16
|
.claude/rai.archive/
|
|
17
17
|
|
|
18
|
+
# Daemon config (contains secrets — template committed as .example)
|
|
19
|
+
daemon-team.yaml
|
|
20
|
+
daemon.yaml
|
|
21
|
+
.env.fly
|
|
22
|
+
|
|
18
23
|
# RaiSE generated/cache files
|
|
19
24
|
.raise/cache/
|
|
20
25
|
.raise/confluence-pages.yaml
|
|
21
26
|
.raise/backlog/
|
|
27
|
+
.raise/artifacts/
|
|
28
|
+
|
|
29
|
+
# Pipeline state (environment-specific, PAT-E-594)
|
|
30
|
+
.rai-state/
|
|
22
31
|
|
|
23
32
|
# RaiSE adapter configs (declarative, PII-free — identity in env vars)
|
|
24
33
|
# .raise/jira.yaml and .raise/confluence.yaml are tracked (shared config)
|
|
@@ -28,8 +37,8 @@ CLAUDE.local.md
|
|
|
28
37
|
# Dossier output (generated, not committed)
|
|
29
38
|
dev/output/
|
|
30
39
|
|
|
31
|
-
# RaiSE
|
|
32
|
-
|
|
40
|
+
# RaiSE graph index — tracked (essential for skill PRIME/JIT queries in worktrees)
|
|
41
|
+
# Rebuild with: rai graph build
|
|
33
42
|
|
|
34
43
|
# RaiSE personal directory (per-developer, not shared)
|
|
35
44
|
.raise/rai/personal/
|
|
@@ -99,6 +108,9 @@ dmypy.json
|
|
|
99
108
|
# Legacy telemetry (should be in personal/, will migrate)
|
|
100
109
|
.raise/rai/telemetry/
|
|
101
110
|
|
|
111
|
+
# Push tracking markers (per-environment, not shared)
|
|
112
|
+
.raise/rai/learnings/**/.pushed
|
|
113
|
+
|
|
102
114
|
# MCP server config (contains API tokens)
|
|
103
115
|
.mcp.json
|
|
104
116
|
|
|
@@ -117,6 +129,7 @@ credentials.json
|
|
|
117
129
|
|
|
118
130
|
# MkDocs build output
|
|
119
131
|
_site/
|
|
132
|
+
.docs-build/
|
|
120
133
|
|
|
121
134
|
# Issue analysis artifacts (PDFs, images — binary, no git value)
|
|
122
135
|
dev/issues/**/*.pdf
|
|
@@ -127,3 +140,4 @@ dev/transcripts/
|
|
|
127
140
|
|
|
128
141
|
# Prevent symlink artifacts from being tracked at root
|
|
129
142
|
/es/
|
|
143
|
+
work/research/
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: raise-cli
|
|
3
|
+
Version: 3.0.0a1
|
|
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: httpx>=0.27.0
|
|
22
|
+
Requires-Dist: logfire-api>=4.0
|
|
23
|
+
Requires-Dist: networkx>=3.6.1
|
|
24
|
+
Requires-Dist: pydantic-settings>=2.2.0
|
|
25
|
+
Requires-Dist: pydantic>=2.6.0
|
|
26
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
27
|
+
Requires-Dist: pyyaml>=6.0.1
|
|
28
|
+
Requires-Dist: raise-core
|
|
29
|
+
Requires-Dist: rich>=13.7.0
|
|
30
|
+
Requires-Dist: tree-sitter-javascript>=0.25.0
|
|
31
|
+
Requires-Dist: tree-sitter-language-pack>=0.13.0
|
|
32
|
+
Requires-Dist: tree-sitter-php>=0.24.1
|
|
33
|
+
Requires-Dist: tree-sitter-svelte>=1.0.2
|
|
34
|
+
Requires-Dist: tree-sitter-typescript>=0.23.2
|
|
35
|
+
Requires-Dist: tree-sitter>=0.25.2
|
|
36
|
+
Requires-Dist: typer>=0.12.0
|
|
37
|
+
Provides-Extra: atlassian
|
|
38
|
+
Requires-Dist: atlassian-python-api>=3.41.0; extra == 'atlassian'
|
|
39
|
+
Provides-Extra: confluence
|
|
40
|
+
Requires-Dist: atlassian-python-api>=3.41.0; extra == 'confluence'
|
|
41
|
+
Provides-Extra: csharp
|
|
42
|
+
Requires-Dist: tree-sitter-c-sharp>=0.23.1; extra == 'csharp'
|
|
43
|
+
Provides-Extra: jira
|
|
44
|
+
Requires-Dist: atlassian-python-api>=3.41.0; extra == 'jira'
|
|
45
|
+
Provides-Extra: mcp
|
|
46
|
+
Requires-Dist: mcp<2,>=1.26; extra == 'mcp'
|
|
47
|
+
Provides-Extra: observability
|
|
48
|
+
Requires-Dist: logfire>=4.0; extra == 'observability'
|
|
49
|
+
Requires-Dist: opentelemetry-api>=1.20; extra == 'observability'
|
|
50
|
+
Requires-Dist: opentelemetry-sdk>=1.20; extra == 'observability'
|
|
51
|
+
Description-Content-Type: text/markdown
|
|
52
|
+
|
|
53
|
+
# RaiSE CLI
|
|
54
|
+
|
|
55
|
+
**Reliable AI Software Engineering** — a lean methodology and deterministic CLI toolkit that turns AI coding assistants into disciplined collaborators.
|
|
56
|
+
|
|
57
|
+
[](https://pypi.org/project/raise-cli/)
|
|
58
|
+
[](https://pypi.org/project/raise-cli/)
|
|
59
|
+
[](https://github.com/humansys/raise/blob/main/LICENSE)
|
|
60
|
+
|
|
61
|
+
## What is RaiSE?
|
|
62
|
+
|
|
63
|
+
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.
|
|
64
|
+
|
|
65
|
+
The result: AI that learns from your project, follows your rules, and compounds knowledge across sessions instead of starting fresh every time.
|
|
66
|
+
|
|
67
|
+
## Install
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
pip install raise-cli
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Optional integrations:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Jira + Confluence adapters
|
|
77
|
+
pip install "raise-cli[jira,confluence]"
|
|
78
|
+
|
|
79
|
+
# MCP server support
|
|
80
|
+
pip install "raise-cli[mcp]"
|
|
81
|
+
|
|
82
|
+
# All extras
|
|
83
|
+
pip install "raise-cli[jira,confluence,mcp,csharp,observability]"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Requires Python 3.12 or 3.13.
|
|
87
|
+
|
|
88
|
+
## Quick start
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Initialize a project
|
|
92
|
+
rai init
|
|
93
|
+
|
|
94
|
+
# Start a session (loads context, memory, proposes work)
|
|
95
|
+
rai session start --project . --context
|
|
96
|
+
|
|
97
|
+
# Build the knowledge graph
|
|
98
|
+
rai graph build
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Then work through skills in your AI assistant (Claude Code, Cursor, Windsurf):
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
/rai-session-start → Load context, propose focused work
|
|
105
|
+
/rai-story-start → Scope a piece of work
|
|
106
|
+
/rai-story-plan → Decompose into tasks
|
|
107
|
+
/rai-story-implement → TDD: test, code, verify, commit
|
|
108
|
+
/rai-story-review → Extract learnings
|
|
109
|
+
/rai-story-close → Merge and clean up
|
|
110
|
+
/rai-session-close → Capture session outcomes
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Key features
|
|
114
|
+
|
|
115
|
+
### Structured workflows
|
|
116
|
+
44 skills covering the full SDLC — epic, story, bugfix, discovery, session management, documentation, and release.
|
|
117
|
+
|
|
118
|
+
### Knowledge graph
|
|
119
|
+
Project context, patterns, and cross-session memory — queryable and persistent.
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
rai graph query "testing patterns" --types pattern --limit 5
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Backlog management
|
|
126
|
+
Built-in adapters for Jira and filesystem-backed backlogs.
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
rai backlog search "project = MYPROJECT AND status = 'In Progress'"
|
|
130
|
+
rai backlog create "Fix pagination bug" -p MYPROJECT -t Bug
|
|
131
|
+
rai backlog transition MYPROJECT-123 done
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Documentation publishing
|
|
135
|
+
Publish to Confluence, local filesystem, or both (dual-write).
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
rai docs publish adr --title "ADR-045: Auth Architecture"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Quality gates
|
|
142
|
+
Automated checks before commits and releases.
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
rai gate check --all # Run all gates
|
|
146
|
+
rai release check # 10-point release checklist
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Session continuity
|
|
150
|
+
Memory that compounds across sessions — patterns, calibration, coaching corrections.
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
rai session start --context # Loads everything from prior sessions
|
|
154
|
+
rai pattern add "Always validate frontmatter before writing"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Multi-language discovery
|
|
158
|
+
Scan codebases and build knowledge graphs from: Python, TypeScript, JavaScript, C#, PHP, Dart, Svelte.
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
rai discover scan src/ --language python --output summary
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## CLI commands
|
|
165
|
+
|
|
166
|
+
72 subcommands across 17 groups:
|
|
167
|
+
|
|
168
|
+
| Group | Commands |
|
|
169
|
+
|-------|----------|
|
|
170
|
+
| `init` | Initialize project governance |
|
|
171
|
+
| `session` | start, close, context, journal, doctor |
|
|
172
|
+
| `graph` | build, query, context |
|
|
173
|
+
| `pattern` | add, query |
|
|
174
|
+
| `backlog` | create, get, search, transition, update, link, comment |
|
|
175
|
+
| `docs` | publish, get, search |
|
|
176
|
+
| `skill` | list, validate, check-name, scaffold |
|
|
177
|
+
| `discover` | scan |
|
|
178
|
+
| `adapter` | list, check, validate, status |
|
|
179
|
+
| `mcp` | list, health, tools, call, install, scaffold |
|
|
180
|
+
| `gate` | list, check |
|
|
181
|
+
| `doctor` | diagnostics with --fix auto-remediation |
|
|
182
|
+
| `release` | check, publish |
|
|
183
|
+
|
|
184
|
+
## Documentation
|
|
185
|
+
|
|
186
|
+
- **[Getting Started](https://docs.raiseframework.ai/)** — Install and run your first session
|
|
187
|
+
- **[Guides](https://docs.raiseframework.ai/guides/first-story/)** — Your First Story, Configuring Integrations, Bugfix Lifecycle
|
|
188
|
+
- **[CLI Reference](https://docs.raiseframework.ai/cli/)** — Every command, flag, and option
|
|
189
|
+
- **[Concepts](https://docs.raiseframework.ai/concepts/)** — Memory, Skills, Governance, Knowledge Graph
|
|
190
|
+
|
|
191
|
+
## License
|
|
192
|
+
|
|
193
|
+
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).
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "raise-cli"
|
|
3
|
-
version = "
|
|
3
|
+
version = "3.0.0a1"
|
|
4
4
|
description = "RaiSE CLI - Reliable AI Software Engineering governance framework"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Emilio Osorio", email = "emilio@humansys.ai"}
|
|
7
7
|
]
|
|
8
|
-
|
|
9
|
-
# (hatch resolves readme relative to build temp dir, not source dir)
|
|
8
|
+
readme = "README.md"
|
|
10
9
|
license = {text = "Apache-2.0"}
|
|
11
10
|
requires-python = ">=3.12"
|
|
12
11
|
keywords = ["ai", "governance", "cli", "software-engineering", "methodology"]
|
|
@@ -37,6 +36,7 @@ dependencies = [
|
|
|
37
36
|
"tree-sitter-svelte>=1.0.2",
|
|
38
37
|
"tree-sitter-language-pack>=0.13.0",
|
|
39
38
|
"logfire-api>=4.0",
|
|
39
|
+
"httpx>=0.27.0",
|
|
40
40
|
]
|
|
41
41
|
|
|
42
42
|
[project.optional-dependencies]
|
|
@@ -45,6 +45,8 @@ mcp = [
|
|
|
45
45
|
]
|
|
46
46
|
observability = [
|
|
47
47
|
"logfire>=4.0",
|
|
48
|
+
"opentelemetry-api>=1.20",
|
|
49
|
+
"opentelemetry-sdk>=1.20",
|
|
48
50
|
]
|
|
49
51
|
csharp = [
|
|
50
52
|
"tree-sitter-c-sharp>=0.23.1",
|
|
@@ -95,6 +97,7 @@ format = "raise_cli.gates.builtin.format:FormatGate"
|
|
|
95
97
|
environment = "raise_cli.doctor.checks.environment:EnvironmentCheck"
|
|
96
98
|
project = "raise_cli.doctor.checks.project:ProjectCheck"
|
|
97
99
|
developer = "raise_cli.doctor.checks.developer:DeveloperCheck"
|
|
100
|
+
adapters = "raise_cli.doctor.checks.adapters:AdapterDoctorCheck"
|
|
98
101
|
|
|
99
102
|
[project.entry-points."rai.adapters.pm"]
|
|
100
103
|
filesystem = "raise_cli.adapters.filesystem:FilesystemPMAdapter"
|
|
@@ -107,6 +110,15 @@ confluence = "raise_cli.adapters.confluence_adapter:PythonApiConfluenceAdapter"
|
|
|
107
110
|
[project.entry-points."rai.graph.backends"]
|
|
108
111
|
local = "raise_core.graph.backends.filesystem:FilesystemGraphBackend"
|
|
109
112
|
|
|
113
|
+
[project.entry-points."rai.session.state_deriver"]
|
|
114
|
+
git = "raise_cli.session.derive:GitStateDeriver"
|
|
115
|
+
|
|
116
|
+
[project.entry-points."rai.session.registry"]
|
|
117
|
+
local = "raise_cli.session.registry:LocalSessionRegistry"
|
|
118
|
+
|
|
119
|
+
[project.entry-points."rai.session.monitor"]
|
|
120
|
+
local = "raise_cli.session.monitor:LocalWorkstreamMonitor"
|
|
121
|
+
|
|
110
122
|
[tool.uv.sources]
|
|
111
123
|
raise-core = { workspace = true }
|
|
112
124
|
|
|
@@ -42,7 +42,13 @@ class PythonApiConfluenceAdapter:
|
|
|
42
42
|
def publish(
|
|
43
43
|
self, doc_type: str, content: str, metadata: dict[str, Any]
|
|
44
44
|
) -> PublishResult:
|
|
45
|
-
"""Publish doc: resolve
|
|
45
|
+
"""Publish doc: resolve parent and labels, find/create page.
|
|
46
|
+
|
|
47
|
+
Parent resolution priority (RAISE-605):
|
|
48
|
+
1. metadata["parent_id"] — explicit override
|
|
49
|
+
2. routing.parent_title — from config
|
|
50
|
+
3. Error — no parent available
|
|
51
|
+
"""
|
|
46
52
|
title = metadata.get("title")
|
|
47
53
|
if not title:
|
|
48
54
|
return PublishResult(
|
|
@@ -51,26 +57,29 @@ class PythonApiConfluenceAdapter:
|
|
|
51
57
|
)
|
|
52
58
|
|
|
53
59
|
routing = self._config.resolve_routing(doc_type)
|
|
54
|
-
if
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
60
|
+
labels: list[str] = routing.labels if routing else []
|
|
61
|
+
parent_id: str | None = metadata.get("parent_id")
|
|
62
|
+
|
|
63
|
+
# Resolve parent: explicit > routing > error
|
|
64
|
+
if parent_id is None:
|
|
65
|
+
if not routing:
|
|
66
|
+
return PublishResult(
|
|
67
|
+
success=False,
|
|
68
|
+
message=(
|
|
69
|
+
f"No routing configured for doc_type '{doc_type}' "
|
|
70
|
+
"and no parent_id provided in metadata."
|
|
71
|
+
),
|
|
72
|
+
)
|
|
73
|
+
parent_page = self._client.get_page_by_title(routing.parent_title)
|
|
74
|
+
if not parent_page:
|
|
75
|
+
return PublishResult(
|
|
76
|
+
success=False,
|
|
77
|
+
message=(
|
|
78
|
+
f"Parent page '{routing.parent_title}' not found in Confluence. "
|
|
79
|
+
"Create it first or fix routing config."
|
|
80
|
+
),
|
|
81
|
+
)
|
|
82
|
+
parent_id = parent_page.id
|
|
74
83
|
|
|
75
84
|
# Check if page already exists
|
|
76
85
|
existing = self._client.get_page_by_title(title)
|
|
@@ -163,10 +163,38 @@ class ConfluenceClient:
|
|
|
163
163
|
|
|
164
164
|
# ── Discovery ─────────────────────────────────────────────────────
|
|
165
165
|
|
|
166
|
+
def get_space_homepage_id(self, space_key: str) -> str | None:
|
|
167
|
+
"""Get the homepage page ID for a space. Returns None if not found."""
|
|
168
|
+
try:
|
|
169
|
+
raw: Any = self._client.get_home_page_of_space(space_key) # type: ignore[no-untyped-call]
|
|
170
|
+
if isinstance(raw, dict) and "id" in raw:
|
|
171
|
+
return str(raw["id"]) # type: ignore[no-untyped-call]
|
|
172
|
+
return None
|
|
173
|
+
except ConfluenceError:
|
|
174
|
+
raise
|
|
175
|
+
except Exception as e:
|
|
176
|
+
raise self._map_error(e, f"get_space_homepage_id({space_key})") from e
|
|
177
|
+
|
|
166
178
|
def get_spaces(self) -> list[SpaceInfo]:
|
|
167
|
-
"""List all accessible spaces.
|
|
179
|
+
"""List all accessible spaces.
|
|
180
|
+
|
|
181
|
+
Paginates through all results — ``get_all_spaces()`` returns only
|
|
182
|
+
one page (default limit=50), which misses spaces beyond that page.
|
|
183
|
+
RAISE-1187: discovered during S1130.4 dogfood.
|
|
184
|
+
"""
|
|
168
185
|
try:
|
|
169
|
-
|
|
186
|
+
all_results: list[dict[str, Any]] = []
|
|
187
|
+
start = 0
|
|
188
|
+
limit = 100
|
|
189
|
+
while True:
|
|
190
|
+
raw: dict[str, Any] = self._client.get_all_spaces( # type: ignore[no-untyped-call]
|
|
191
|
+
start=start, limit=limit
|
|
192
|
+
)
|
|
193
|
+
results: list[dict[str, Any]] = raw.get("results", [])
|
|
194
|
+
all_results.extend(results)
|
|
195
|
+
if len(results) < limit:
|
|
196
|
+
break
|
|
197
|
+
start += limit
|
|
170
198
|
return [
|
|
171
199
|
SpaceInfo(
|
|
172
200
|
key=s["key"],
|
|
@@ -174,7 +202,7 @@ class ConfluenceClient:
|
|
|
174
202
|
url=s.get("_links", {}).get("webui", ""),
|
|
175
203
|
type=s.get("type", "global"),
|
|
176
204
|
)
|
|
177
|
-
for s in
|
|
205
|
+
for s in all_results
|
|
178
206
|
]
|
|
179
207
|
except ConfluenceError:
|
|
180
208
|
raise
|
|
@@ -201,10 +229,25 @@ class ConfluenceClient:
|
|
|
201
229
|
|
|
202
230
|
# ── Search & Health ───────────────────────────────────────────────
|
|
203
231
|
|
|
232
|
+
@staticmethod
|
|
233
|
+
def _ensure_cql(query: str) -> str:
|
|
234
|
+
"""Wrap plain text in CQL siteSearch if not already CQL.
|
|
235
|
+
|
|
236
|
+
CQL queries contain operators like ~, =, AND, OR, or known
|
|
237
|
+
predicates like type=, space=, text~. Plain text does not.
|
|
238
|
+
"""
|
|
239
|
+
cql_indicators = ("~", "=", " AND ", " OR ", " ORDER BY ")
|
|
240
|
+
if any(op in query for op in cql_indicators):
|
|
241
|
+
return query
|
|
242
|
+
# Escape double quotes in user query
|
|
243
|
+
escaped = query.replace('"', '\\"')
|
|
244
|
+
return f'siteSearch ~ "{escaped}"'
|
|
245
|
+
|
|
204
246
|
def search(self, cql: str, limit: int = 10) -> list[PageSummary]:
|
|
205
|
-
"""Search using CQL."""
|
|
247
|
+
"""Search using CQL. Plain text queries are auto-wrapped."""
|
|
248
|
+
effective_cql = self._ensure_cql(cql)
|
|
206
249
|
try:
|
|
207
|
-
raw: dict[str, Any] = self._client.cql(
|
|
250
|
+
raw: dict[str, Any] = self._client.cql(effective_cql, limit=limit) # type: ignore[no-untyped-call]
|
|
208
251
|
return [
|
|
209
252
|
PageSummary(
|
|
210
253
|
id=str(r["content"]["id"]),
|
|
@@ -217,7 +260,7 @@ class ConfluenceClient:
|
|
|
217
260
|
except ConfluenceError:
|
|
218
261
|
raise
|
|
219
262
|
except Exception as e:
|
|
220
|
-
raise self._map_error(e, f"search({
|
|
263
|
+
raise self._map_error(e, f"search({effective_cql!r})") from e
|
|
221
264
|
|
|
222
265
|
def health(self) -> AdapterHealth:
|
|
223
266
|
"""Check connectivity by listing 1 space."""
|
|
@@ -225,9 +268,7 @@ class ConfluenceClient:
|
|
|
225
268
|
self._client.get_all_spaces(limit=1) # type: ignore[no-untyped-call]
|
|
226
269
|
return AdapterHealth(name="confluence", healthy=True)
|
|
227
270
|
except Exception as e:
|
|
228
|
-
return AdapterHealth(
|
|
229
|
-
name="confluence", healthy=False, message=str(e)
|
|
230
|
-
)
|
|
271
|
+
return AdapterHealth(name="confluence", healthy=False, message=str(e))
|
|
231
272
|
|
|
232
273
|
# ── Internal ──────────────────────────────────────────────────────
|
|
233
274
|
|