@agentikos/omega-os 0.1.0 → 0.19.5
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.
- package/README.md +56 -14
- package/bootstrap/lib/__pycache__/claude-code-settings.cpython-313.pyc +0 -0
- package/bootstrap/lib/__pycache__/llm-clis.cpython-313.pyc +0 -0
- package/bootstrap/lib/__pycache__/manifest-helpers.cpython-313.pyc +0 -0
- package/bootstrap/lib/claude-code-settings.py +176 -0
- package/bootstrap/lib/common.sh +457 -1
- package/bootstrap/lib/llm-clis.py +341 -0
- package/bootstrap/lib/manifest-helpers.py +384 -0
- package/bootstrap/lib/steps.sh +1000 -26
- package/bootstrap/manifest.example.yaml +93 -2
- package/bootstrap/templates/aisb/CLAUDE.md +305 -0
- package/bootstrap/templates/aisb/architect.md +204 -0
- package/bootstrap/templates/aisb/checkers/CLAUDE.md +9 -0
- package/bootstrap/templates/aisb/checkers/checker-architect.md +151 -0
- package/bootstrap/templates/aisb/checkers/checker-common.md +171 -0
- package/bootstrap/templates/aisb/checkers/checker-construct.md +129 -0
- package/bootstrap/templates/aisb/checkers/checker-keymaker.md +204 -0
- package/bootstrap/templates/aisb/checkers/checker-link.md +205 -0
- package/bootstrap/templates/aisb/checkers/checker-merovingian.md +219 -0
- package/bootstrap/templates/aisb/checkers/checker-morpheus.md +211 -0
- package/bootstrap/templates/aisb/checkers/checker-neo.md +177 -0
- package/bootstrap/templates/aisb/checkers/checker-niobe.md +156 -0
- package/bootstrap/templates/aisb/checkers/checker-oracle.md +164 -0
- package/bootstrap/templates/aisb/checkers/checker-seraph.md +187 -0
- package/bootstrap/templates/aisb/checkers/checker-smith.md +195 -0
- package/bootstrap/templates/aisb/checkers/checker-zion.md +113 -0
- package/bootstrap/templates/aisb/construct.md +135 -0
- package/bootstrap/templates/aisb/keymaker.md +227 -0
- package/bootstrap/templates/aisb/link.md +170 -0
- package/bootstrap/templates/aisb/lmc-protocol.md +57 -0
- package/bootstrap/templates/aisb/merovingian.md +159 -0
- package/bootstrap/templates/aisb/morpheus.md +243 -0
- package/bootstrap/templates/aisb/neo.md +147 -0
- package/bootstrap/templates/aisb/niobe.md +197 -0
- package/bootstrap/templates/aisb/oracle.md +244 -0
- package/bootstrap/templates/aisb/protocols/handoff-templates.md +204 -0
- package/bootstrap/templates/aisb/protocols/shared-protocol.md +248 -0
- package/bootstrap/templates/aisb/pythia.md +153 -0
- package/bootstrap/templates/aisb/seraph.md +315 -0
- package/bootstrap/templates/aisb/smith.md +202 -0
- package/bootstrap/templates/aisb/zion.md +172 -0
- package/bootstrap/templates/autonomous/audit-patrol.yaml +41 -0
- package/bootstrap/templates/autonomous/smith-reflect.yaml +43 -0
- package/bootstrap/templates/autonomous/ssh-key-rotate.yaml +46 -0
- package/bootstrap/templates/autonomous/support-agent.yaml +38 -0
- package/docs/AUDITS.md +85 -0
- package/docs/COMPLETION-PLAN.md +48 -0
- package/docs/GAP-ANALYSIS.md +214 -0
- package/docs/INSTALL.md +47 -9
- package/docs/MCP-AND-PLUGINS.md +31 -4
- package/docs/SIMULATION.md +171 -0
- package/docs/simulate.sh +211 -0
- package/install.sh +164 -17
- package/omega/Agentik_Engine/README.md +27 -10
- package/omega/Agentik_Engine/omega_engine/__init__.py +212 -2
- package/omega/Agentik_Engine/omega_engine/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/account.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/agent_messages.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/aisb_chat.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/audit_diff.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/audit_gate.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/auto_update.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/autonomous.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/backup.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/cadence.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/classifier.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/cleanup.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/cli.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/completions.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/costs.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/done_signal.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/envelope.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/executor.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/handoff.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/hermes.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/hermes_bootstrap.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/hermes_desktop.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/learning.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/managed_agent.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/memory.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/menu.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/mission.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/plan.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/project.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/prompts.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/provider.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/prune.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/pursue.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/reducer.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/router.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/skill_routing.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/smoke.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/store.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/sync.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/telegram_history.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/tmux.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/tools.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/understand_anything.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/updater.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/validate.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/vault.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/webhooks.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/worker.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/account.py +502 -0
- package/omega/Agentik_Engine/omega_engine/agent_messages.py +167 -0
- package/omega/Agentik_Engine/omega_engine/aisb_chat.py +128 -0
- package/omega/Agentik_Engine/omega_engine/audit_diff.py +99 -0
- package/omega/Agentik_Engine/omega_engine/audit_gate.py +149 -0
- package/omega/Agentik_Engine/omega_engine/audits/__init__.py +60 -0
- package/omega/Agentik_Engine/omega_engine/audits/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/audits/__pycache__/batcher.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/audits/__pycache__/dispatcher.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/audits/__pycache__/generator.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/audits/__pycache__/history.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/audits/__pycache__/pipeline.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/audits/batcher.py +218 -0
- package/omega/Agentik_Engine/omega_engine/audits/dispatcher.py +92 -0
- package/omega/Agentik_Engine/omega_engine/audits/generator.py +234 -0
- package/omega/Agentik_Engine/omega_engine/audits/history.py +168 -0
- package/omega/Agentik_Engine/omega_engine/audits/pipeline.py +198 -0
- package/omega/Agentik_Engine/omega_engine/auto_update.py +339 -0
- package/omega/Agentik_Engine/omega_engine/autonomous.py +538 -0
- package/omega/Agentik_Engine/omega_engine/backup.py +215 -0
- package/omega/Agentik_Engine/omega_engine/cadence.py +158 -0
- package/omega/Agentik_Engine/omega_engine/classifier.py +215 -0
- package/omega/Agentik_Engine/omega_engine/cleanup.py +673 -0
- package/omega/Agentik_Engine/omega_engine/cli.py +4564 -56
- package/omega/Agentik_Engine/omega_engine/completions.py +260 -0
- package/omega/Agentik_Engine/omega_engine/costs.py +100 -0
- package/omega/Agentik_Engine/omega_engine/daemons/__init__.py +14 -0
- package/omega/Agentik_Engine/omega_engine/daemons/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/daemons/__pycache__/autonomous.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/daemons/__pycache__/engine.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/daemons/__pycache__/telegram.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/daemons/autonomous.py +56 -0
- package/omega/Agentik_Engine/omega_engine/daemons/engine.py +236 -0
- package/omega/Agentik_Engine/omega_engine/daemons/telegram.py +315 -0
- package/omega/Agentik_Engine/omega_engine/done_signal.py +154 -0
- package/omega/Agentik_Engine/omega_engine/educators/__init__.py +51 -0
- package/omega/Agentik_Engine/omega_engine/educators/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/educators/__pycache__/artifact.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/educators/__pycache__/automation.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/educators/__pycache__/base.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/educators/__pycache__/claudecode.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/educators/__pycache__/connection.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/educators/__pycache__/coworker.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/educators/__pycache__/loop.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/educators/__pycache__/prompt.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/educators/__pycache__/skill.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/educators/artifact.py +65 -0
- package/omega/Agentik_Engine/omega_engine/educators/automation.py +76 -0
- package/omega/Agentik_Engine/omega_engine/educators/base.py +327 -0
- package/omega/Agentik_Engine/omega_engine/educators/claudecode.py +71 -0
- package/omega/Agentik_Engine/omega_engine/educators/connection.py +75 -0
- package/omega/Agentik_Engine/omega_engine/educators/coworker.py +68 -0
- package/omega/Agentik_Engine/omega_engine/educators/loop.py +82 -0
- package/omega/Agentik_Engine/omega_engine/educators/prompt.py +68 -0
- package/omega/Agentik_Engine/omega_engine/educators/skill.py +69 -0
- package/omega/Agentik_Engine/omega_engine/envelope.py +219 -0
- package/omega/Agentik_Engine/omega_engine/executor.py +195 -16
- package/omega/Agentik_Engine/omega_engine/genesis/__init__.py +134 -0
- package/omega/Agentik_Engine/omega_engine/genesis/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/genesis/__pycache__/orchestrator.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/genesis/__pycache__/phases.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/genesis/__pycache__/stack.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/genesis/__pycache__/state.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/genesis/orchestrator.py +262 -0
- package/omega/Agentik_Engine/omega_engine/genesis/phases.py +950 -0
- package/omega/Agentik_Engine/omega_engine/genesis/stack.py +324 -0
- package/omega/Agentik_Engine/omega_engine/genesis/state.py +353 -0
- package/omega/Agentik_Engine/omega_engine/handoff.py +459 -0
- package/omega/Agentik_Engine/omega_engine/hermes.py +426 -0
- package/omega/Agentik_Engine/omega_engine/hermes_bootstrap.py +382 -0
- package/omega/Agentik_Engine/omega_engine/hermes_desktop.py +469 -0
- package/omega/Agentik_Engine/omega_engine/integrations/__init__.py +30 -0
- package/omega/Agentik_Engine/omega_engine/integrations/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/integrations/__pycache__/graphify.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/integrations/graphify.py +234 -0
- package/omega/Agentik_Engine/omega_engine/learning.py +268 -0
- package/omega/Agentik_Engine/omega_engine/managed_agent.py +467 -0
- package/omega/Agentik_Engine/omega_engine/memory.py +271 -0
- package/omega/Agentik_Engine/omega_engine/menu.py +1065 -0
- package/omega/Agentik_Engine/omega_engine/migrations/__init__.py +144 -0
- package/omega/Agentik_Engine/omega_engine/migrations/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/migrations/__pycache__/v0_14_0.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/migrations/v0_14_0.py +29 -0
- package/omega/Agentik_Engine/omega_engine/mission.py +29 -14
- package/omega/Agentik_Engine/omega_engine/plan.py +846 -0
- package/omega/Agentik_Engine/omega_engine/prompts.py +158 -0
- package/omega/Agentik_Engine/omega_engine/provider.py +408 -13
- package/omega/Agentik_Engine/omega_engine/prune.py +151 -0
- package/omega/Agentik_Engine/omega_engine/pursue.py +205 -0
- package/omega/Agentik_Engine/omega_engine/rag/__init__.py +21 -0
- package/omega/Agentik_Engine/omega_engine/rag/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/rag/__pycache__/agentic.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/rag/__pycache__/base.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/rag/__pycache__/corrective.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/rag/__pycache__/graph.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/rag/__pycache__/hybrid.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/rag/__pycache__/multimodal.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/rag/__pycache__/router.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/rag/agentic.py +83 -0
- package/omega/Agentik_Engine/omega_engine/rag/base.py +42 -0
- package/omega/Agentik_Engine/omega_engine/rag/corrective.py +119 -0
- package/omega/Agentik_Engine/omega_engine/rag/graph.py +169 -0
- package/omega/Agentik_Engine/omega_engine/rag/hybrid.py +205 -0
- package/omega/Agentik_Engine/omega_engine/rag/multimodal.py +136 -0
- package/omega/Agentik_Engine/omega_engine/rag/router.py +110 -0
- package/omega/Agentik_Engine/omega_engine/reducer.py +21 -3
- package/omega/Agentik_Engine/omega_engine/router.py +28 -0
- package/omega/Agentik_Engine/omega_engine/skill_discovery/__init__.py +48 -0
- package/omega/Agentik_Engine/omega_engine/skill_discovery/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/skill_discovery/__pycache__/auditor.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/skill_discovery/__pycache__/finder.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/skill_discovery/__pycache__/installer.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/skill_discovery/__pycache__/marketplaces.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/skill_discovery/auditor.py +232 -0
- package/omega/Agentik_Engine/omega_engine/skill_discovery/finder.py +94 -0
- package/omega/Agentik_Engine/omega_engine/skill_discovery/installer.py +129 -0
- package/omega/Agentik_Engine/omega_engine/skill_discovery/marketplaces.py +80 -0
- package/omega/Agentik_Engine/omega_engine/skill_routing.py +388 -0
- package/omega/Agentik_Engine/omega_engine/smoke.py +81 -0
- package/omega/Agentik_Engine/omega_engine/store.py +132 -25
- package/omega/Agentik_Engine/omega_engine/sync.py +445 -0
- package/omega/Agentik_Engine/omega_engine/telegram_history.py +260 -0
- package/omega/Agentik_Engine/omega_engine/tmux.py +526 -0
- package/omega/Agentik_Engine/omega_engine/tools.py +272 -0
- package/omega/Agentik_Engine/omega_engine/understand_anything.py +275 -0
- package/omega/Agentik_Engine/omega_engine/updater.py +70 -0
- package/omega/Agentik_Engine/omega_engine/validate.py +186 -0
- package/omega/Agentik_Engine/omega_engine/vault.py +342 -0
- package/omega/Agentik_Engine/omega_engine/webhooks.py +262 -0
- package/omega/Agentik_Engine/omega_engine/worker.py +526 -0
- package/omega/Agentik_Engine/pyproject.toml +1 -1
- package/omega/Agentik_Engine/tests/__pycache__/test_account.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_account.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_adversarial.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_adversarial.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_agents_envelope.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_agents_envelope.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_audit_arsenal.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_audits_pipeline.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_audits_pipeline.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_auto_update_and_migrations.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_auto_update_and_migrations.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_autonomous.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_autonomous.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_educators.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_educators.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_executor.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_genesis_and_plan.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_genesis_and_plan.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_graphify.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_graphify.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_handoff.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_handoff.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_hermes_and_ua.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_hermes_and_ua.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_hermes_bootstrap_and_desktop.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_hermes_bootstrap_and_desktop.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_install_steps.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_install_steps.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_install_ux.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_install_ux.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_installer_wiring.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_installer_wiring.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_intelligence.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_intelligence.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_llm_clis_and_uninstall.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_llm_clis_and_uninstall.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_managed_agent.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_managed_agent.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_max_provider_and_menu.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_max_provider_and_menu.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_menu_coverage.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_menu_coverage.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_mission.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_progress.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_project.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_pursue_cadence.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_pursue_cadence.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_rag.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_rag.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_reducer.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_report.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_role_aliases_and_ssot.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_role_aliases_and_ssot.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_skill_discovery_and_gate.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_skill_discovery_and_gate.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_skill_power.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_skill_power.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_skill_routing.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_skill_routing.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_snapshot_partial.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_snapshot_partial.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_telegram_history.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_telegram_history.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_tmux_and_aisb_chat.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_tmux_and_aisb_chat.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_tools_and_sync.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_tools_and_sync.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_v06_features.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_v06_features.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_vault.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_vault.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_webhooks_and_readiness.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_webhooks_and_readiness.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_worker_and_cleanup.cpython-313-pytest-8.4.2.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_worker_and_cleanup.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/test_account.py +338 -0
- package/omega/Agentik_Engine/tests/test_adversarial.py +351 -0
- package/omega/Agentik_Engine/tests/test_agents_envelope.py +274 -0
- package/omega/Agentik_Engine/tests/test_audits_pipeline.py +348 -0
- package/omega/Agentik_Engine/tests/test_auto_update_and_migrations.py +394 -0
- package/omega/Agentik_Engine/tests/test_autonomous.py +361 -0
- package/omega/Agentik_Engine/tests/test_educators.py +233 -0
- package/omega/Agentik_Engine/tests/test_genesis_and_plan.py +573 -0
- package/omega/Agentik_Engine/tests/test_graphify.py +190 -0
- package/omega/Agentik_Engine/tests/test_handoff.py +311 -0
- package/omega/Agentik_Engine/tests/test_hermes_and_ua.py +387 -0
- package/omega/Agentik_Engine/tests/test_hermes_bootstrap_and_desktop.py +358 -0
- package/omega/Agentik_Engine/tests/test_install_steps.py +359 -0
- package/omega/Agentik_Engine/tests/test_install_ux.py +151 -0
- package/omega/Agentik_Engine/tests/test_installer_wiring.py +496 -0
- package/omega/Agentik_Engine/tests/test_intelligence.py +285 -0
- package/omega/Agentik_Engine/tests/test_llm_clis_and_uninstall.py +228 -0
- package/omega/Agentik_Engine/tests/test_managed_agent.py +363 -0
- package/omega/Agentik_Engine/tests/test_max_provider_and_menu.py +231 -0
- package/omega/Agentik_Engine/tests/test_menu_coverage.py +72 -0
- package/omega/Agentik_Engine/tests/test_pursue_cadence.py +217 -0
- package/omega/Agentik_Engine/tests/test_rag.py +287 -0
- package/omega/Agentik_Engine/tests/test_role_aliases_and_ssot.py +207 -0
- package/omega/Agentik_Engine/tests/test_skill_discovery_and_gate.py +337 -0
- package/omega/Agentik_Engine/tests/test_skill_power.py +259 -0
- package/omega/Agentik_Engine/tests/test_skill_routing.py +189 -0
- package/omega/Agentik_Engine/tests/test_snapshot_partial.py +172 -0
- package/omega/Agentik_Engine/tests/test_telegram_history.py +209 -0
- package/omega/Agentik_Engine/tests/test_tmux_and_aisb_chat.py +223 -0
- package/omega/Agentik_Engine/tests/test_tools_and_sync.py +312 -0
- package/omega/Agentik_Engine/tests/test_v06_features.py +370 -0
- package/omega/Agentik_Engine/tests/test_vault.py +173 -0
- package/omega/Agentik_Engine/tests/test_webhooks_and_readiness.py +277 -0
- package/omega/Agentik_Engine/tests/test_worker_and_cleanup.py +541 -0
- package/omega/Agentik_Extra/etc/secrets/.vault-key +3 -0
- package/omega/Agentik_Extra/etc/secrets/.vault-pub +1 -0
- package/omega/Agentik_Runtime/audits.db +0 -0
- package/omega/Agentik_SSOT/VERSION +1 -1
- package/omega/Agentik_SSOT/claude-plugins/claude-plugins.yaml +100 -0
- package/omega/Agentik_SSOT/docs/LAYERS.md +90 -0
- package/omega/Agentik_SSOT/docs/USER-JOURNEY.md +283 -0
- package/omega/Agentik_SSOT/marketplaces/design-discipline.yaml +86 -0
- package/omega/Agentik_SSOT/skills/a11yaudit/SKILL.md +161 -0
- package/omega/Agentik_SSOT/skills/apiaudit/SKILL.md +157 -0
- package/omega/Agentik_SSOT/skills/automationaudit/SKILL.md +161 -0
- package/omega/Agentik_SSOT/skills/cadence/SKILL.md +76 -0
- package/omega/Agentik_SSOT/skills/codeaudit/SKILL.md +153 -0
- package/omega/Agentik_SSOT/skills/copyaudit/SKILL.md +161 -0
- package/omega/Agentik_SSOT/skills/dataaudit/SKILL.md +157 -0
- package/omega/Agentik_SSOT/skills/debugaudit/SKILL.md +161 -0
- package/omega/Agentik_SSOT/skills/dispatch/SKILL.md +79 -0
- package/omega/Agentik_SSOT/skills/dxaudit/SKILL.md +161 -0
- package/omega/Agentik_SSOT/skills/featureaudit/SKILL.md +161 -0
- package/omega/Agentik_SSOT/skills/flowaudit/SKILL.md +165 -0
- package/omega/Agentik_SSOT/skills/genesis/SKILL.md +116 -0
- package/omega/Agentik_SSOT/skills/handoff/SKILL.md +117 -0
- package/omega/Agentik_SSOT/skills/logicaudit/SKILL.md +165 -0
- package/omega/Agentik_SSOT/skills/motionaudit/SKILL.md +165 -0
- package/omega/Agentik_SSOT/skills/perfaudit/SKILL.md +161 -0
- package/omega/Agentik_SSOT/skills/plan/SKILL.md +127 -0
- package/omega/Agentik_SSOT/skills/pursue/SKILL.md +68 -0
- package/omega/Agentik_SSOT/skills/rag-route.md +82 -0
- package/omega/Agentik_SSOT/skills/refontaudit/SKILL.md +165 -0
- package/omega/Agentik_SSOT/skills/retentionaudit/SKILL.md +165 -0
- package/omega/Agentik_SSOT/skills/secaudit/SKILL.md +157 -0
- package/omega/Agentik_SSOT/skills/seoaudit/SKILL.md +161 -0
- package/omega/Agentik_SSOT/skills/skill-auditor/SKILL.md +83 -0
- package/omega/Agentik_SSOT/skills/skill-finder/SKILL.md +116 -0
- package/omega/Agentik_SSOT/skills/uiuxaudit/SKILL.md +165 -0
- package/package.json +2 -2
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""`skill-educator` — generates new skill specs + maintains the catalog.
|
|
2
|
+
|
|
3
|
+
The signature: a skill spec is the contract between the engine and a unit of
|
|
4
|
+
capability (a `/command`). It declares: the trigger phrases, the inputs, the
|
|
5
|
+
steps, the artifacts it produces, the verification gate, and the failure modes.
|
|
6
|
+
|
|
7
|
+
Target SSOT path: ``Agentik_SSOT/skills/<name>.md``.
|
|
8
|
+
"""
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from omega_engine.educators.base import EducatorProposal, run_education
|
|
14
|
+
from omega_engine.provider import AgentProvider
|
|
15
|
+
|
|
16
|
+
_INSTRUCTIONS = """\
|
|
17
|
+
Produce ONE skill spec the engine will load as a runnable capability. The spec
|
|
18
|
+
MUST contain, in order, these sections:
|
|
19
|
+
|
|
20
|
+
1. Name + one-line purpose (the question the skill answers).
|
|
21
|
+
2. Trigger phrases (case-insensitive, FR + EN if applicable) — the strings
|
|
22
|
+
the router matches against. Be exhaustive: a missing trigger means the
|
|
23
|
+
skill never fires.
|
|
24
|
+
3. Inputs schema — every parameter, with type + whether it is required +
|
|
25
|
+
what the default is. No optional-and-undocumented fields.
|
|
26
|
+
4. Steps — numbered, each step one verb in imperative voice with a verify
|
|
27
|
+
checkpoint. State the input and output of each step.
|
|
28
|
+
5. Artifacts produced — the file/path the skill writes, the schema of any
|
|
29
|
+
structured output.
|
|
30
|
+
6. Verification gate — which forensic audit(s) (from the Quality Arsenal)
|
|
31
|
+
run on the artifact, and the minimum score. If none applies, state that
|
|
32
|
+
and explain why.
|
|
33
|
+
7. Failure modes — list at least 3 ways the skill can fail and what the
|
|
34
|
+
engine does in each (retry, escalate, abort).
|
|
35
|
+
|
|
36
|
+
The spec MUST NOT:
|
|
37
|
+
- paraphrase another existing skill — state the boundary if related.
|
|
38
|
+
- omit the audit gate (every skill is auditable, no exceptions).
|
|
39
|
+
- hand-wave the failure modes.
|
|
40
|
+
|
|
41
|
+
Format the artifact as Markdown.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class SkillEducator:
|
|
46
|
+
"""Generates skill specs for the SSOT skill catalog."""
|
|
47
|
+
|
|
48
|
+
name = "skill"
|
|
49
|
+
domain = "skills"
|
|
50
|
+
|
|
51
|
+
def generate(
|
|
52
|
+
self,
|
|
53
|
+
intent: str,
|
|
54
|
+
context: dict[str, Any],
|
|
55
|
+
provider: AgentProvider,
|
|
56
|
+
) -> EducatorProposal:
|
|
57
|
+
skill_name = str(context.get("skill_name", "new-skill"))
|
|
58
|
+
target_path = f"Agentik_SSOT/skills/{skill_name}.md"
|
|
59
|
+
return run_education(
|
|
60
|
+
educator_name=self.name,
|
|
61
|
+
domain=self.domain,
|
|
62
|
+
intent=intent,
|
|
63
|
+
target_kind="skill",
|
|
64
|
+
target_path=target_path,
|
|
65
|
+
domain_instructions=_INSTRUCTIONS,
|
|
66
|
+
context={**context, "skill_name": skill_name},
|
|
67
|
+
provider=provider,
|
|
68
|
+
artifact_id=skill_name,
|
|
69
|
+
)
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"""Mission envelope — the bridge between a Task and the provider's request.
|
|
2
|
+
|
|
3
|
+
The executor used to send the agent ONLY a bare prompt ("subtask 1"). That's
|
|
4
|
+
not how AISB-style orchestration works: an Oracle needs to know who it is,
|
|
5
|
+
what the user asked for verbatim, what its parent already decided, and the
|
|
6
|
+
contract for declaring completion. The envelope is that wrapper.
|
|
7
|
+
|
|
8
|
+
Two things come out of ``build_envelope``:
|
|
9
|
+
|
|
10
|
+
* ``system`` — the role's full agent prompt (from ``omega_engine.prompts``)
|
|
11
|
+
plus the orchestration contract appended at the end. This goes in the
|
|
12
|
+
provider's ``system`` parameter.
|
|
13
|
+
* ``user`` — the user-visible content: the original intent, the parent
|
|
14
|
+
context, the plan-so-far, and any role-specific data. This goes in
|
|
15
|
+
``messages``.
|
|
16
|
+
|
|
17
|
+
For programmatic roles (mock, educators, RAG sub-roles), the envelope still
|
|
18
|
+
works but the contract block is skipped — those agents don't dispatch.
|
|
19
|
+
"""
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import json
|
|
23
|
+
from dataclasses import dataclass, field
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
from typing import Any
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# Roles that DISPATCH (return a plan). They need the dispatcher contract.
|
|
29
|
+
DISPATCHER_ROLES = {
|
|
30
|
+
"aisb", "oracle", "manager", "architect", "keymaker", "morpheus",
|
|
31
|
+
}
|
|
32
|
+
# Roles that EXECUTE (return artifacts + claimed_done).
|
|
33
|
+
EXECUTOR_ROLES = {"worker", "construct", "link"}
|
|
34
|
+
# Roles that VERIFY (return a verdict).
|
|
35
|
+
VERIFIER_ROLES = {"audit", "verifier", "seraph"}
|
|
36
|
+
# Read-only roles — observe the system, propose, never act.
|
|
37
|
+
READ_ONLY_ROLES = {"pythia", "neo", "niobe", "merovingian", "zion"}
|
|
38
|
+
# Improvement / learning roles — analyse outcomes, propose tuning.
|
|
39
|
+
LEARNER_ROLES = {"smith"}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@dataclass
|
|
43
|
+
class EnvelopeContext:
|
|
44
|
+
"""Everything the envelope needs to know about a task's place in the world."""
|
|
45
|
+
|
|
46
|
+
role: str
|
|
47
|
+
intent: str # user prompt verbatim
|
|
48
|
+
mission_id: str = ""
|
|
49
|
+
task_id: str = ""
|
|
50
|
+
parent_role: str | None = None
|
|
51
|
+
parent_intent: str | None = None
|
|
52
|
+
plan_so_far: list[dict[str, Any]] = field(default_factory=list)
|
|
53
|
+
sibling_states: dict[str, str] = field(default_factory=dict)
|
|
54
|
+
available_tools: list[str] = field(default_factory=list)
|
|
55
|
+
project: dict[str, Any] | None = None # name, slug, path
|
|
56
|
+
done_json_path: str | None = None # where the worker writes done
|
|
57
|
+
verify_cmd: str | None = None
|
|
58
|
+
extras: dict[str, Any] = field(default_factory=dict)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _dispatcher_contract() -> str:
|
|
62
|
+
return (
|
|
63
|
+
"## ORCHESTRATION CONTRACT (dispatcher)\n\n"
|
|
64
|
+
"You are a DISPATCHER. You break the mission into atomic subtasks\n"
|
|
65
|
+
"and respond with a JSON array of child tasks. Format strictly:\n\n"
|
|
66
|
+
"```json\n"
|
|
67
|
+
"[\n"
|
|
68
|
+
' {"role": "worker", "spec": {\n'
|
|
69
|
+
' "task": "<one concrete actionable instruction>",\n'
|
|
70
|
+
' "verify_cmd": "<shell command that returns 0 iff the task is truly done>",\n'
|
|
71
|
+
' "files_owned": ["<path/glob>", ...],\n'
|
|
72
|
+
' "context": {<any extra data the worker will need>}\n'
|
|
73
|
+
" }},\n"
|
|
74
|
+
" ...\n"
|
|
75
|
+
"]\n"
|
|
76
|
+
"```\n\n"
|
|
77
|
+
"Rules:\n"
|
|
78
|
+
"1. Preserve the user's intent verbatim — never paraphrase it away.\n"
|
|
79
|
+
"2. Each subtask MUST be small enough to fit in one worker context.\n"
|
|
80
|
+
"3. `verify_cmd` is the ground truth — if it exits 0, the worker is done.\n"
|
|
81
|
+
"4. JSON ONLY — no prose around the array. No code fences except the one above.\n"
|
|
82
|
+
"5. Your reply IS the plan. The engine will dispatch each child as a task.\n"
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _executor_contract(done_json_path: str | None) -> str:
|
|
87
|
+
path = done_json_path or "Agentik_Runtime/sessions/<task_id>/.done.json"
|
|
88
|
+
return (
|
|
89
|
+
"## ORCHESTRATION CONTRACT (executor / worker)\n\n"
|
|
90
|
+
"You are a WORKER. You produce concrete artifacts and prove you're done.\n"
|
|
91
|
+
f"When finished, you WRITE a JSON file at `{path}` with this exact schema:\n\n"
|
|
92
|
+
"```json\n"
|
|
93
|
+
"{\n"
|
|
94
|
+
' "status": "done_clean" | "pending" | "failed",\n'
|
|
95
|
+
' "summary": "<one-paragraph what you did and why>",\n'
|
|
96
|
+
' "files_changed": ["<relative path>", ...],\n'
|
|
97
|
+
' "artifacts": {"<key>": "<value>", ...},\n'
|
|
98
|
+
' "pending_actions": ["<thing the next worker / human should do>", ...],\n'
|
|
99
|
+
' "errors": ["<actionable error>", ...]\n'
|
|
100
|
+
"}\n"
|
|
101
|
+
"```\n\n"
|
|
102
|
+
"Rules:\n"
|
|
103
|
+
"1. NEVER write `done_clean` if a `verify_cmd` would fail. Run it first.\n"
|
|
104
|
+
"2. `pending` means you did real work but more is needed — list it.\n"
|
|
105
|
+
"3. `failed` is honest. The engine prefers honesty over fake success.\n"
|
|
106
|
+
"4. The completion-verification gate reads this file. Lying = REJECTED.\n"
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def _verifier_contract() -> str:
|
|
111
|
+
return (
|
|
112
|
+
"## ORCHESTRATION CONTRACT (verifier)\n\n"
|
|
113
|
+
"You are a VERIFIER. The worker has just claimed done. Your job is to\n"
|
|
114
|
+
"prove or disprove that claim by running real checks (not just reading\n"
|
|
115
|
+
"code). Respond with a JSON object:\n\n"
|
|
116
|
+
"```json\n"
|
|
117
|
+
'{"verified": true|false, "score": 0-100, "confidence": "low|med|high",\n'
|
|
118
|
+
' "findings": [{"audit":"...","severity":"low|med|high|crit","msg":"..."}],\n'
|
|
119
|
+
' "fix_plan": ["<actionable, ordered>", ...]}\n'
|
|
120
|
+
"```\n\n"
|
|
121
|
+
"Rules:\n"
|
|
122
|
+
"1. Code lies, comments lie — only runtime tells the truth. Run things.\n"
|
|
123
|
+
"2. Bias toward `false` — earn a `true` with concrete evidence.\n"
|
|
124
|
+
"3. Every PASS must cite at least 3 concrete checks.\n"
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def _section(title: str, body: str | None) -> str:
|
|
129
|
+
if not body:
|
|
130
|
+
return ""
|
|
131
|
+
return f"\n\n## {title}\n\n{body}"
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def build_envelope(
|
|
135
|
+
omega_home: str | Path,
|
|
136
|
+
ctx: EnvelopeContext,
|
|
137
|
+
) -> dict[str, str]:
|
|
138
|
+
"""Return ``{system, user}`` strings ready to pass to a provider.
|
|
139
|
+
|
|
140
|
+
The ``system`` part loads the role's prompt from
|
|
141
|
+
``Agentik_SSOT/agents/`` and appends the appropriate orchestration
|
|
142
|
+
contract. If no agent file exists for the role, a minimal generic
|
|
143
|
+
envelope is built (one line of identity + the contract).
|
|
144
|
+
"""
|
|
145
|
+
# Local import to avoid cycles.
|
|
146
|
+
from omega_engine.prompts import load_agent_prompt
|
|
147
|
+
|
|
148
|
+
home = Path(omega_home)
|
|
149
|
+
agent_prompt = load_agent_prompt(home, ctx.role) or (
|
|
150
|
+
f"You are an Omega OS {ctx.role.upper()} agent."
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
if ctx.role in DISPATCHER_ROLES:
|
|
154
|
+
contract = _dispatcher_contract()
|
|
155
|
+
elif ctx.role in EXECUTOR_ROLES:
|
|
156
|
+
contract = _executor_contract(ctx.done_json_path)
|
|
157
|
+
elif ctx.role in VERIFIER_ROLES:
|
|
158
|
+
contract = _verifier_contract()
|
|
159
|
+
else:
|
|
160
|
+
# Programmatic / specialised roles use their own internal contract.
|
|
161
|
+
contract = ""
|
|
162
|
+
|
|
163
|
+
system_parts = [agent_prompt]
|
|
164
|
+
if contract:
|
|
165
|
+
system_parts.append(f"\n\n{contract}")
|
|
166
|
+
system = "".join(system_parts).strip()
|
|
167
|
+
|
|
168
|
+
# ---- user message ------------------------------------------------------
|
|
169
|
+
user_blocks: list[str] = []
|
|
170
|
+
|
|
171
|
+
user_blocks.append(f"# USER INTENT (verbatim)\n\n{ctx.intent.strip()}")
|
|
172
|
+
|
|
173
|
+
if ctx.parent_intent and ctx.parent_role:
|
|
174
|
+
user_blocks.append(
|
|
175
|
+
f"## Parent task ({ctx.parent_role})\n\n{ctx.parent_intent.strip()}"
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
if ctx.plan_so_far:
|
|
179
|
+
user_blocks.append(
|
|
180
|
+
"## Plan so far\n\n"
|
|
181
|
+
"```json\n" + json.dumps(ctx.plan_so_far, indent=2) + "\n```"
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
if ctx.sibling_states:
|
|
185
|
+
user_blocks.append(
|
|
186
|
+
"## Sibling states\n\n```json\n"
|
|
187
|
+
+ json.dumps(ctx.sibling_states, indent=2)
|
|
188
|
+
+ "\n```"
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
if ctx.available_tools:
|
|
192
|
+
user_blocks.append(
|
|
193
|
+
"## Available tools\n\n- " + "\n- ".join(ctx.available_tools)
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
if ctx.project:
|
|
197
|
+
user_blocks.append(
|
|
198
|
+
f"## Project context\n\nname: {ctx.project.get('name')}\n"
|
|
199
|
+
f"slug: {ctx.project.get('slug')}\n"
|
|
200
|
+
f"path: {ctx.project.get('path')}"
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
if ctx.verify_cmd:
|
|
204
|
+
user_blocks.append(
|
|
205
|
+
f"## Verify command\n\n```bash\n{ctx.verify_cmd}\n```"
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
if ctx.done_json_path and ctx.role in EXECUTOR_ROLES:
|
|
209
|
+
user_blocks.append(
|
|
210
|
+
f"## Done file\n\nWrite your completion JSON to: `{ctx.done_json_path}`"
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
if ctx.task_id:
|
|
214
|
+
user_blocks.append(f"## Task id\n\n`{ctx.task_id}`")
|
|
215
|
+
if ctx.mission_id:
|
|
216
|
+
user_blocks.append(f"## Mission id\n\n`{ctx.mission_id}`")
|
|
217
|
+
|
|
218
|
+
user = "\n\n".join(user_blocks)
|
|
219
|
+
return {"system": system, "user": user}
|
|
@@ -49,11 +49,21 @@ class Executor:
|
|
|
49
49
|
bus: EventBus,
|
|
50
50
|
router: ModelRouter,
|
|
51
51
|
audit: AuditGate,
|
|
52
|
+
partial_policy: str = "fail_up",
|
|
52
53
|
) -> None:
|
|
54
|
+
# partial_policy: how a dispatcher reacts to a PARTIAL scope (a child
|
|
55
|
+
# FAILED). One of: "fail_up" (default — the dispatcher fails too),
|
|
56
|
+
# "accept_partial" (the dispatcher completes with the verified children
|
|
57
|
+
# only), "retry_failed" (one retry pass on failed children, then
|
|
58
|
+
# fail_up if still PARTIAL). Declared per-topology in
|
|
59
|
+
# Agentik_Orchestration/topologies/<name>.yaml -> policy.on_partial.
|
|
60
|
+
if partial_policy not in ("fail_up", "accept_partial", "retry_failed"):
|
|
61
|
+
raise ValueError(f"unknown partial_policy: {partial_policy}")
|
|
53
62
|
self._store = store
|
|
54
63
|
self._bus = bus
|
|
55
64
|
self._router = router
|
|
56
65
|
self._audit = audit
|
|
66
|
+
self._partial_policy = partial_policy
|
|
57
67
|
self._tasks: dict[str, Task] = {}
|
|
58
68
|
|
|
59
69
|
# -- public ---------------------------------------------------------------
|
|
@@ -89,8 +99,17 @@ class Executor:
|
|
|
89
99
|
return reduce_task(self._store.events_for(task_id))
|
|
90
100
|
|
|
91
101
|
def _run(self, task: Task, mission_id: str) -> None:
|
|
92
|
-
|
|
93
|
-
|
|
102
|
+
# Carry the intent/task description in the CREATED payload so the
|
|
103
|
+
# event log + semantic memory have something searchable per task.
|
|
104
|
+
intent = (
|
|
105
|
+
task.spec.get("intent") or task.spec.get("task") or ""
|
|
106
|
+
)
|
|
107
|
+
self._emit(task.id, EventType.CREATED, {
|
|
108
|
+
"role": task.role,
|
|
109
|
+
"kind": task.kind.value,
|
|
110
|
+
"mission_id": mission_id,
|
|
111
|
+
"spec": {"intent": str(intent)[:500]} if intent else {},
|
|
112
|
+
})
|
|
94
113
|
self._emit(task.id, EventType.DISPATCHED)
|
|
95
114
|
self._emit(task.id, EventType.STARTED)
|
|
96
115
|
if task.kind is Kind.EXECUTOR:
|
|
@@ -102,9 +121,8 @@ class Executor:
|
|
|
102
121
|
def _run_dispatcher(self, task: Task, mission_id: str) -> None:
|
|
103
122
|
provider = self._router.resolve(task.role)
|
|
104
123
|
prompt = task.spec.get("intent") or task.spec.get("task") or task.role
|
|
105
|
-
result = provider.run(
|
|
106
|
-
|
|
107
|
-
)
|
|
124
|
+
result = provider.run(self._build_request(task, mission_id, str(prompt)))
|
|
125
|
+
self._emit_usage(task, provider, result, mission_id)
|
|
108
126
|
children: list[Task] = []
|
|
109
127
|
for item in result.plan:
|
|
110
128
|
child_role = item.get("role", "worker")
|
|
@@ -119,29 +137,59 @@ class Executor:
|
|
|
119
137
|
children.append(child)
|
|
120
138
|
|
|
121
139
|
status = scope_status([self._state(c.id) for c in children])
|
|
122
|
-
|
|
140
|
+
|
|
141
|
+
# Per-topology PARTIAL policy
|
|
142
|
+
if status is ScopeStatus.PARTIAL and self._partial_policy == "retry_failed":
|
|
143
|
+
# one retry pass for every FAILED child — children are re-spawned as
|
|
144
|
+
# fresh tasks, each with their own budget. If they all pass, the
|
|
145
|
+
# scope becomes JOINABLE; otherwise we fall through to fail_up.
|
|
146
|
+
failed_children = [c for c in children
|
|
147
|
+
if self._state(c.id) is TaskState.FAILED]
|
|
148
|
+
for failed in failed_children:
|
|
149
|
+
replacement = self._new_task(
|
|
150
|
+
kind=failed.kind, role=failed.role,
|
|
151
|
+
spec=failed.spec, parent_id=task.id, mission_id=mission_id,
|
|
152
|
+
)
|
|
153
|
+
self._run(replacement, mission_id)
|
|
154
|
+
children.append(replacement)
|
|
155
|
+
status = scope_status([self._state(c.id) for c in children])
|
|
156
|
+
|
|
157
|
+
accept_partial = (
|
|
158
|
+
status is ScopeStatus.PARTIAL
|
|
159
|
+
and self._partial_policy == "accept_partial"
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
if status is ScopeStatus.JOINABLE or accept_partial:
|
|
123
163
|
# the barrier resolved — the dispatcher may now close
|
|
124
|
-
self._emit(task.id, EventType.SCOPE_JOINABLE,
|
|
164
|
+
self._emit(task.id, EventType.SCOPE_JOINABLE,
|
|
165
|
+
{"children": len(children),
|
|
166
|
+
"partial_accepted": accept_partial})
|
|
125
167
|
self._emit(task.id, EventType.CLAIMED_DONE)
|
|
126
168
|
self._emit(task.id, EventType.VERIFYING)
|
|
127
|
-
self._emit(task.id, EventType.VERIFIED,
|
|
169
|
+
self._emit(task.id, EventType.VERIFIED,
|
|
170
|
+
{"reason": "partial accepted" if accept_partial
|
|
171
|
+
else "all children verified"})
|
|
128
172
|
self._emit(task.id, EventType.COMPLETED)
|
|
129
173
|
else:
|
|
130
|
-
# PARTIAL
|
|
131
|
-
#
|
|
174
|
+
# PARTIAL or RUNNING under fail_up. RUNNING here means recursion
|
|
175
|
+
# left non-terminal children — that is a real bug. PARTIAL under
|
|
176
|
+
# fail_up is honest failure.
|
|
132
177
|
failed = [c.id for c in children
|
|
133
178
|
if self._state(c.id) is TaskState.FAILED]
|
|
134
179
|
self._emit(task.id, EventType.FAILED,
|
|
135
|
-
{"reason": "partial scope"
|
|
180
|
+
{"reason": "partial scope" if status is ScopeStatus.PARTIAL
|
|
181
|
+
else "scope unresolved",
|
|
182
|
+
"failed_children": failed,
|
|
183
|
+
"policy": self._partial_policy})
|
|
136
184
|
|
|
137
185
|
def _run_worker(self, task: Task) -> None:
|
|
138
186
|
provider = self._router.resolve(task.role)
|
|
187
|
+
prompt = str(task.spec.get("task", task.role))
|
|
188
|
+
mission_id = task.spec.get("mission_id", "")
|
|
139
189
|
for attempt in range(task.budget.max_iterations):
|
|
140
|
-
result = provider.run(
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
context=task.spec,
|
|
144
|
-
))
|
|
190
|
+
result = provider.run(self._build_request(task, mission_id, prompt))
|
|
191
|
+
self._maybe_persist_done(task, result)
|
|
192
|
+
self._emit_usage(task, provider, result, mission_id)
|
|
145
193
|
self._emit(task.id, EventType.CLAIMED_DONE, {"attempt": attempt + 1})
|
|
146
194
|
self._emit(task.id, EventType.VERIFYING)
|
|
147
195
|
verdict = self._audit.verify({
|
|
@@ -151,6 +199,7 @@ class Executor:
|
|
|
151
199
|
"changed": result.artifacts.get("files", []),
|
|
152
200
|
"path": str(task.spec.get("path", ".")),
|
|
153
201
|
})
|
|
202
|
+
self._attach_audit_to_done(task.id, verdict)
|
|
154
203
|
if verdict.verified:
|
|
155
204
|
self._emit(task.id, EventType.VERIFIED, {
|
|
156
205
|
"score": verdict.score,
|
|
@@ -165,3 +214,133 @@ class Executor:
|
|
|
165
214
|
self._emit(task.id, EventType.STARTED)
|
|
166
215
|
# budget exhausted — honest failure, the deadman clause terminates it
|
|
167
216
|
self._emit(task.id, EventType.FAILED, {"reason": "audit budget exhausted"})
|
|
217
|
+
|
|
218
|
+
# ---- envelope + done.json plumbing -------------------------------------
|
|
219
|
+
|
|
220
|
+
def _build_request(self, task: Task, mission_id: str, prompt: str) -> AgentRequest:
|
|
221
|
+
"""Build a request enriched with the role's system prompt + context.
|
|
222
|
+
|
|
223
|
+
Failures here MUST NOT crash the executor — the engine has always
|
|
224
|
+
worked with a bare prompt, and old test providers don't read
|
|
225
|
+
``request.system``. So we fall back to the legacy AgentRequest if
|
|
226
|
+
the envelope build fails for any reason.
|
|
227
|
+
"""
|
|
228
|
+
try:
|
|
229
|
+
import os
|
|
230
|
+
from pathlib import Path
|
|
231
|
+
from omega_engine.envelope import (
|
|
232
|
+
EnvelopeContext, build_envelope,
|
|
233
|
+
)
|
|
234
|
+
from omega_engine.done_signal import done_path
|
|
235
|
+
|
|
236
|
+
omega_home = Path(os.environ.get(
|
|
237
|
+
"OMEGA_HOME", str(Path.home() / "Omega"),
|
|
238
|
+
))
|
|
239
|
+
parent = self._tasks.get(task.parent_id or "")
|
|
240
|
+
parent_role = parent.role if parent else None
|
|
241
|
+
parent_intent = (
|
|
242
|
+
parent.spec.get("intent") if parent else None
|
|
243
|
+
) or (parent.spec.get("task") if parent else None)
|
|
244
|
+
|
|
245
|
+
ctx = EnvelopeContext(
|
|
246
|
+
role=task.role,
|
|
247
|
+
intent=prompt,
|
|
248
|
+
mission_id=mission_id,
|
|
249
|
+
task_id=task.id,
|
|
250
|
+
parent_role=parent_role,
|
|
251
|
+
parent_intent=parent_intent,
|
|
252
|
+
verify_cmd=task.spec.get("verify_cmd"),
|
|
253
|
+
done_json_path=str(done_path(omega_home, task.id)),
|
|
254
|
+
project=task.spec.get("project"),
|
|
255
|
+
)
|
|
256
|
+
env = build_envelope(omega_home, ctx)
|
|
257
|
+
return AgentRequest(
|
|
258
|
+
role=task.role, prompt=env["user"], context=task.spec,
|
|
259
|
+
system=env["system"],
|
|
260
|
+
)
|
|
261
|
+
except Exception: # noqa: BLE001
|
|
262
|
+
return AgentRequest(
|
|
263
|
+
role=task.role, prompt=prompt, context=task.spec,
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
def _emit_usage(
|
|
267
|
+
self, task: Task, provider, result, mission_id: str,
|
|
268
|
+
) -> None:
|
|
269
|
+
"""Emit a ``task.usage`` event so the BillingAggregator sees real
|
|
270
|
+
per-account cost — only when the provider returned non-zero usage.
|
|
271
|
+
|
|
272
|
+
ClaudeMaxProvider returns a ``cost_usd`` from Claude Code's own
|
|
273
|
+
billing computation; we propagate it as-is. Provider id is the
|
|
274
|
+
``account_id`` fallback when the operator hasn't pinned this task
|
|
275
|
+
to a specific account.
|
|
276
|
+
"""
|
|
277
|
+
try:
|
|
278
|
+
usage = dict(getattr(result, "usage", {}) or {})
|
|
279
|
+
if not usage:
|
|
280
|
+
return
|
|
281
|
+
if not usage.get("account_id"):
|
|
282
|
+
# Best-effort: use the provider id as the account label.
|
|
283
|
+
# When the operator wires multiple Claude Max accounts,
|
|
284
|
+
# whatever picks one explicitly should also set
|
|
285
|
+
# account_id on the AgentResult.usage.
|
|
286
|
+
usage["account_id"] = getattr(provider, "id", "default")
|
|
287
|
+
self._emit(task.id, EventType.HEARTBEAT, {
|
|
288
|
+
"kind": "usage", "mission_id": mission_id,
|
|
289
|
+
"usage": usage, "role": task.role,
|
|
290
|
+
})
|
|
291
|
+
except Exception: # noqa: BLE001 — usage emit must never break the loop
|
|
292
|
+
pass
|
|
293
|
+
|
|
294
|
+
def _maybe_persist_done(self, task: Task, result) -> None:
|
|
295
|
+
"""If the provider returned a structured artifact and no done file
|
|
296
|
+
exists yet, write one so the audit gate / AISB always have something
|
|
297
|
+
to read."""
|
|
298
|
+
try:
|
|
299
|
+
import os
|
|
300
|
+
from pathlib import Path
|
|
301
|
+
from omega_engine.done_signal import (
|
|
302
|
+
DoneSignal, done_path, read_done, write_done,
|
|
303
|
+
)
|
|
304
|
+
omega_home = Path(os.environ.get(
|
|
305
|
+
"OMEGA_HOME", str(Path.home() / "Omega"),
|
|
306
|
+
))
|
|
307
|
+
# If the worker (or the provider stub) already wrote the file,
|
|
308
|
+
# respect it.
|
|
309
|
+
existing = None
|
|
310
|
+
try:
|
|
311
|
+
existing = read_done(omega_home, task.id)
|
|
312
|
+
except Exception: # noqa: BLE001
|
|
313
|
+
existing = None
|
|
314
|
+
if existing is not None:
|
|
315
|
+
return
|
|
316
|
+
# Build a synthetic done from the provider result.
|
|
317
|
+
arts = getattr(result, "artifacts", None) or {}
|
|
318
|
+
signal = DoneSignal(
|
|
319
|
+
status="done_clean" if getattr(result, "claimed_done", False)
|
|
320
|
+
else "failed",
|
|
321
|
+
summary=str(arts.get("summary") or getattr(result, "text", "")),
|
|
322
|
+
files_changed=list(arts.get("files") or []),
|
|
323
|
+
artifacts=arts,
|
|
324
|
+
)
|
|
325
|
+
write_done(omega_home, task.id, signal)
|
|
326
|
+
except Exception: # noqa: BLE001
|
|
327
|
+
pass
|
|
328
|
+
|
|
329
|
+
def _attach_audit_to_done(self, task_id: str, verdict) -> None:
|
|
330
|
+
try:
|
|
331
|
+
import os
|
|
332
|
+
from pathlib import Path
|
|
333
|
+
from omega_engine.done_signal import attach_audit_to_done
|
|
334
|
+
omega_home = Path(os.environ.get(
|
|
335
|
+
"OMEGA_HOME", str(Path.home() / "Omega"),
|
|
336
|
+
))
|
|
337
|
+
attach_audit_to_done(omega_home, task_id, {
|
|
338
|
+
"verified": bool(getattr(verdict, "verified", False)),
|
|
339
|
+
"score": int(getattr(verdict, "score", 0) or 0),
|
|
340
|
+
"findings": [
|
|
341
|
+
getattr(f, "audit", str(f))
|
|
342
|
+
for f in getattr(verdict, "findings", []) or []
|
|
343
|
+
],
|
|
344
|
+
})
|
|
345
|
+
except Exception: # noqa: BLE001
|
|
346
|
+
pass
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"""Genesis — programmatic project genesis pipeline.
|
|
2
|
+
|
|
3
|
+
The Genesis module owns the *upstream half* of a new project: from a one-line
|
|
4
|
+
intent ("a SaaS for X") through to a complete docs tree + DAG-aware feature
|
|
5
|
+
backlog ready for the v0.19 Plan executor to run for days.
|
|
6
|
+
|
|
7
|
+
Why a programmatic pipeline, not a markdown skill
|
|
8
|
+
-------------------------------------------------
|
|
9
|
+
|
|
10
|
+
The pre-v0.18 ``/new`` / ``/prd`` / ``/planner`` skills were prompt-only.
|
|
11
|
+
That worked for one-off demos but broke at scale:
|
|
12
|
+
|
|
13
|
+
* No isolation between concurrent projects (shared CWD heuristics).
|
|
14
|
+
* No state machine — the agent re-did already-done phases on restart.
|
|
15
|
+
* No DAG on features — chronological order was implicit in the markdown
|
|
16
|
+
filename, easily violated by a context-saturated agent.
|
|
17
|
+
* No quality gate — a half-written PRD landed in the same folder as a
|
|
18
|
+
finished one.
|
|
19
|
+
|
|
20
|
+
Genesis fixes the four root causes:
|
|
21
|
+
|
|
22
|
+
1. **Strict project isolation.** Every file lands under
|
|
23
|
+
``$OMEGA_HOME/Agentik_Coding/projects/<slug>/`` and nowhere else.
|
|
24
|
+
There is no ambient CWD leakage — every helper takes ``slug``
|
|
25
|
+
explicitly.
|
|
26
|
+
2. **State machine in PROJECT.yaml.** Phases are recorded; ``resume``
|
|
27
|
+
reads the file and picks up where the previous run stopped.
|
|
28
|
+
3. **DAG with explicit ``depends_on``.** Features carry a real
|
|
29
|
+
dependency graph; the v0.19 Plan reducer enforces it.
|
|
30
|
+
4. **Verified completion per phase.** Each phase has a verify_command;
|
|
31
|
+
the orchestrator refuses to advance the state until it passes.
|
|
32
|
+
|
|
33
|
+
Phases
|
|
34
|
+
------
|
|
35
|
+
|
|
36
|
+
Phase 0 Stack — pick the technical + programmatic stack
|
|
37
|
+
Phase 1 Vision — one-page product identity
|
|
38
|
+
Phase 2 Market — 5 research files (competitors, ICP, pricing,
|
|
39
|
+
channels, positioning)
|
|
40
|
+
Phase 3 Branding — 3 files (identity, design system, motion)
|
|
41
|
+
Phase 4 PRD — 9 files (PRD, tech, design, layouts, data,
|
|
42
|
+
agent playbook, testing, changelog, glossary)
|
|
43
|
+
Phase 5 Features — N files with explicit ``depends_on`` + wave +
|
|
44
|
+
estimated_minutes + files_owned + verify_cmd
|
|
45
|
+
Phase 6 Plan — handoff to v0.19 ``omega plan build``
|
|
46
|
+
|
|
47
|
+
Output tree (per project, strictly isolated)
|
|
48
|
+
--------------------------------------------
|
|
49
|
+
|
|
50
|
+
::
|
|
51
|
+
|
|
52
|
+
$OMEGA_HOME/Agentik_Coding/projects/<slug>/
|
|
53
|
+
PROJECT.yaml state machine + stack config
|
|
54
|
+
HANDOFF.md created by v0.15 handoff
|
|
55
|
+
docs/
|
|
56
|
+
00-VISION.md
|
|
57
|
+
10-market/
|
|
58
|
+
11-COMPETITORS.md
|
|
59
|
+
12-ICP.md
|
|
60
|
+
13-PRICING-STRATEGY.md
|
|
61
|
+
14-GTM-CHANNELS.md
|
|
62
|
+
15-POSITIONING.md
|
|
63
|
+
20-brand/
|
|
64
|
+
21-BRAND-IDENTITY.md
|
|
65
|
+
22-DESIGN-SYSTEM.md
|
|
66
|
+
23-MOTION-LANGUAGE.md
|
|
67
|
+
30-prd/
|
|
68
|
+
31-PRD.md
|
|
69
|
+
32-TECH-ARCHITECTURE.md
|
|
70
|
+
33-DESIGN-SYSTEM-DETAIL.md
|
|
71
|
+
34-LAYOUTS.md
|
|
72
|
+
35-DATA-MODEL.md
|
|
73
|
+
36-AGENT-PLAYBOOK.md
|
|
74
|
+
37-TESTING-STRATEGY.md
|
|
75
|
+
38-CHANGELOG.md
|
|
76
|
+
39-GLOSSARY.md
|
|
77
|
+
40-features/
|
|
78
|
+
F-001-<slug>.md
|
|
79
|
+
F-002-<slug>.md
|
|
80
|
+
...
|
|
81
|
+
plan/
|
|
82
|
+
DAG.json features → DAG for v0.19
|
|
83
|
+
|
|
84
|
+
Public API
|
|
85
|
+
----------
|
|
86
|
+
|
|
87
|
+
* :class:`GenesisState` — the dataclass mirroring PROJECT.yaml
|
|
88
|
+
* :func:`init_project` — create the skeleton + PROJECT.yaml
|
|
89
|
+
* :func:`load_state` / :func:`save_state` — atomic read/write of state
|
|
90
|
+
* :class:`GenesisOrchestrator` — runs phases sequentially with verify
|
|
91
|
+
* :func:`project_root` — strict resolver for the per-project directory
|
|
92
|
+
|
|
93
|
+
The CLI surface lives in :mod:`omega_engine.cli` as ``omega genesis``.
|
|
94
|
+
"""
|
|
95
|
+
from __future__ import annotations
|
|
96
|
+
|
|
97
|
+
from omega_engine.genesis.state import (
|
|
98
|
+
PHASES,
|
|
99
|
+
GenesisState,
|
|
100
|
+
StackConfig,
|
|
101
|
+
init_project,
|
|
102
|
+
load_state,
|
|
103
|
+
project_root,
|
|
104
|
+
save_state,
|
|
105
|
+
)
|
|
106
|
+
from omega_engine.genesis.stack import (
|
|
107
|
+
Stack,
|
|
108
|
+
StackQuestion,
|
|
109
|
+
default_stack,
|
|
110
|
+
pick_stack,
|
|
111
|
+
stack_questions,
|
|
112
|
+
)
|
|
113
|
+
from omega_engine.genesis.orchestrator import (
|
|
114
|
+
GenesisOrchestrator,
|
|
115
|
+
PhaseResult,
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
__all__ = [
|
|
120
|
+
"PHASES",
|
|
121
|
+
"GenesisState",
|
|
122
|
+
"StackConfig",
|
|
123
|
+
"Stack",
|
|
124
|
+
"StackQuestion",
|
|
125
|
+
"GenesisOrchestrator",
|
|
126
|
+
"PhaseResult",
|
|
127
|
+
"init_project",
|
|
128
|
+
"load_state",
|
|
129
|
+
"save_state",
|
|
130
|
+
"project_root",
|
|
131
|
+
"pick_stack",
|
|
132
|
+
"stack_questions",
|
|
133
|
+
"default_stack",
|
|
134
|
+
]
|