initrunner 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- initrunner-0.2.0/.github/workflows/ci.yml +34 -0
- initrunner-0.2.0/.github/workflows/release.yml +71 -0
- initrunner-0.2.0/.github/workflows/testpypi.yml +147 -0
- initrunner-0.2.0/.gitignore +217 -0
- initrunner-0.2.0/.pre-commit-config.yaml +7 -0
- initrunner-0.2.0/CHANGELOG.md +38 -0
- initrunner-0.2.0/CLAUDE.md +84 -0
- initrunner-0.2.0/CONTRIBUTING.md +49 -0
- initrunner-0.2.0/LICENSE +21 -0
- initrunner-0.2.0/PKG-INFO +486 -0
- initrunner-0.2.0/README.md +430 -0
- initrunner-0.2.0/SECURITY.md +38 -0
- initrunner-0.2.0/assets/mascot.png +0 -0
- initrunner-0.2.0/docs/agents/example_tools.md +439 -0
- initrunner-0.2.0/docs/agents/registry.md +359 -0
- initrunner-0.2.0/docs/agents/role_generation.md +169 -0
- initrunner-0.2.0/docs/agents/skills_feature.md +333 -0
- initrunner-0.2.0/docs/agents/tool_creation.md +465 -0
- initrunner-0.2.0/docs/agents/tools.md +896 -0
- initrunner-0.2.0/docs/configuration/guardrails.md +43 -0
- initrunner-0.2.0/docs/configuration/ollama.md +337 -0
- initrunner-0.2.0/docs/configuration/providers.md +165 -0
- initrunner-0.2.0/docs/configuration/token_control.md +317 -0
- initrunner-0.2.0/docs/core/audit.md +349 -0
- initrunner-0.2.0/docs/core/ingestion.md +317 -0
- initrunner-0.2.0/docs/core/memory.md +303 -0
- initrunner-0.2.0/docs/core/triggers.md +234 -0
- initrunner-0.2.0/docs/getting-started/cli.md +96 -0
- initrunner-0.2.0/docs/getting-started/installation.md +75 -0
- initrunner-0.2.0/docs/getting-started/installer.md +251 -0
- initrunner-0.2.0/docs/getting-started/setup.md +236 -0
- initrunner-0.2.0/docs/interfaces/chat_endpoint.md +175 -0
- initrunner-0.2.0/docs/interfaces/dashboard.md +456 -0
- initrunner-0.2.0/docs/interfaces/facehash_avatars.md +131 -0
- initrunner-0.2.0/docs/interfaces/server.md +299 -0
- initrunner-0.2.0/docs/interfaces/tui.md +343 -0
- initrunner-0.2.0/docs/operations/cicd.md +60 -0
- initrunner-0.2.0/docs/operations/release_preparation.md +125 -0
- initrunner-0.2.0/docs/operations/smoke_tests.md +97 -0
- initrunner-0.2.0/docs/operations/testing.md +320 -0
- initrunner-0.2.0/docs/orchestration/agent_composer.md +724 -0
- initrunner-0.2.0/docs/orchestration/autonomy.md +314 -0
- initrunner-0.2.0/docs/orchestration/delegation.md +338 -0
- initrunner-0.2.0/docs/orchestration/pipelines.md +470 -0
- initrunner-0.2.0/docs/orchestration/sinks.md +230 -0
- initrunner-0.2.0/docs/security/auth.md +247 -0
- initrunner-0.2.0/docs/security/security.md +423 -0
- initrunner-0.2.0/docs/specs/dashboard-prd.md +228 -0
- initrunner-0.2.0/examples/.env.example +26 -0
- initrunner-0.2.0/examples/compose/ci-pipeline/compose.yaml +32 -0
- initrunner-0.2.0/examples/compose/ci-pipeline/roles/build-analyzer.yaml +52 -0
- initrunner-0.2.0/examples/compose/ci-pipeline/roles/notifier.yaml +90 -0
- initrunner-0.2.0/examples/compose/ci-pipeline/roles/webhook-receiver.yaml +43 -0
- initrunner-0.2.0/examples/compose/compose.yaml +34 -0
- initrunner-0.2.0/examples/compose/content-pipeline/compose.yaml +55 -0
- initrunner-0.2.0/examples/compose/content-pipeline/drafts/kubernetes-overview.md +44 -0
- initrunner-0.2.0/examples/compose/content-pipeline/roles/content-watcher.yaml +45 -0
- initrunner-0.2.0/examples/compose/content-pipeline/roles/researcher.yaml +47 -0
- initrunner-0.2.0/examples/compose/content-pipeline/roles/reviewer.yaml +44 -0
- initrunner-0.2.0/examples/compose/content-pipeline/roles/writer.yaml +44 -0
- initrunner-0.2.0/examples/compose/roles/inbox-watcher.yaml +24 -0
- initrunner-0.2.0/examples/compose/roles/researcher.yaml +20 -0
- initrunner-0.2.0/examples/compose/roles/responder.yaml +20 -0
- initrunner-0.2.0/examples/compose/roles/triager.yaml +21 -0
- initrunner-0.2.0/examples/roles/changelog-generator.yaml +56 -0
- initrunner-0.2.0/examples/roles/code-reviewer.yaml +52 -0
- initrunner-0.2.0/examples/roles/custom-tools-demo/README.md +39 -0
- initrunner-0.2.0/examples/roles/custom-tools-demo/custom-tools-demo.yaml +42 -0
- initrunner-0.2.0/examples/roles/custom-tools-demo/my_tools.py +91 -0
- initrunner-0.2.0/examples/roles/data-analyst/data-analyst.yaml +58 -0
- initrunner-0.2.0/examples/roles/data-analyst/sample.db +0 -0
- initrunner-0.2.0/examples/roles/data-analyst/setup.sql +74 -0
- initrunner-0.2.0/examples/roles/deploy-notifier.yaml +70 -0
- initrunner-0.2.0/examples/roles/deployment-checker.yaml +49 -0
- initrunner-0.2.0/examples/roles/github-tracker.yaml +202 -0
- initrunner-0.2.0/examples/roles/hello-world.yaml +26 -0
- initrunner-0.2.0/examples/roles/memory-assistant.yaml +55 -0
- initrunner-0.2.0/examples/roles/multi-agent/agents/researcher.yaml +35 -0
- initrunner-0.2.0/examples/roles/multi-agent/agents/writer.yaml +32 -0
- initrunner-0.2.0/examples/roles/multi-agent/coordinator.yaml +55 -0
- initrunner-0.2.0/examples/roles/rag-agent/docs/faq.md +44 -0
- initrunner-0.2.0/examples/roles/rag-agent/docs/getting-started.md +71 -0
- initrunner-0.2.0/examples/roles/rag-agent/rag-agent.yaml +52 -0
- initrunner-0.2.0/examples/roles/secure-api-gateway.yaml +71 -0
- initrunner-0.2.0/examples/roles/skill-demo.yaml +27 -0
- initrunner-0.2.0/examples/roles/slack-echo.yaml +20 -0
- initrunner-0.2.0/examples/roles/support-agent/knowledge-base/account-management.md +36 -0
- initrunner-0.2.0/examples/roles/support-agent/knowledge-base/billing-faq.md +30 -0
- initrunner-0.2.0/examples/roles/support-agent/knowledge-base/troubleshooting.html +42 -0
- initrunner-0.2.0/examples/roles/support-agent/support-agent.yaml +49 -0
- initrunner-0.2.0/examples/roles/uptime-monitor.yaml +70 -0
- initrunner-0.2.0/examples/roles/web-monitor.yaml +32 -0
- initrunner-0.2.0/examples/roles/web-reader.yaml +19 -0
- initrunner-0.2.0/examples/roles/webhook-processor.yaml +71 -0
- initrunner-0.2.0/examples/skills/code-tools.md +30 -0
- initrunner-0.2.0/examples/skills/web-researcher/SKILL.md +28 -0
- initrunner-0.2.0/initrunner/__init__.py +1 -0
- initrunner-0.2.0/initrunner/_compat.py +55 -0
- initrunner-0.2.0/initrunner/_examples_catalog.json +569 -0
- initrunner-0.2.0/initrunner/_graph.py +76 -0
- initrunner-0.2.0/initrunner/_html.py +55 -0
- initrunner-0.2.0/initrunner/_ids.py +10 -0
- initrunner-0.2.0/initrunner/_log.py +51 -0
- initrunner-0.2.0/initrunner/_paths.py +19 -0
- initrunner-0.2.0/initrunner/_signal.py +37 -0
- initrunner-0.2.0/initrunner/_static/app.js +283 -0
- initrunner-0.2.0/initrunner/_static/daisyui.css +19 -0
- initrunner-0.2.0/initrunner/_static/ext/sse.js +290 -0
- initrunner-0.2.0/initrunner/_static/ext/ws.js +471 -0
- initrunner-0.2.0/initrunner/_static/htmx.min.js +1 -0
- initrunner-0.2.0/initrunner/_static/style.css +73 -0
- initrunner-0.2.0/initrunner/_static/tailwindcss.js +83 -0
- initrunner-0.2.0/initrunner/_templates/_macros.html +45 -0
- initrunner-0.2.0/initrunner/_templates/_nav.html +27 -0
- initrunner-0.2.0/initrunner/_templates/audit/_detail.html +84 -0
- initrunner-0.2.0/initrunner/_templates/audit/_table.html +24 -0
- initrunner-0.2.0/initrunner/_templates/audit/list.html +77 -0
- initrunner-0.2.0/initrunner/_templates/auth/login.html +40 -0
- initrunner-0.2.0/initrunner/_templates/base.html +21 -0
- initrunner-0.2.0/initrunner/_templates/chat/_message.html +10 -0
- initrunner-0.2.0/initrunner/_templates/chat/_tool_call.html +17 -0
- initrunner-0.2.0/initrunner/_templates/chat/page.html +179 -0
- initrunner-0.2.0/initrunner/_templates/daemon/page.html +154 -0
- initrunner-0.2.0/initrunner/_templates/ingest/page.html +162 -0
- initrunner-0.2.0/initrunner/_templates/memory/page.html +81 -0
- initrunner-0.2.0/initrunner/_templates/roles/_table.html +41 -0
- initrunner-0.2.0/initrunner/_templates/roles/create.html +300 -0
- initrunner-0.2.0/initrunner/_templates/roles/detail.html +203 -0
- initrunner-0.2.0/initrunner/_templates/roles/list.html +43 -0
- initrunner-0.2.0/initrunner/_yaml.py +45 -0
- initrunner-0.2.0/initrunner/agent/__init__.py +0 -0
- initrunner-0.2.0/initrunner/agent/_env.py +19 -0
- initrunner-0.2.0/initrunner/agent/_paths.py +43 -0
- initrunner-0.2.0/initrunner/agent/_subprocess.py +180 -0
- initrunner-0.2.0/initrunner/agent/_truncate.py +14 -0
- initrunner-0.2.0/initrunner/agent/_urls.py +111 -0
- initrunner-0.2.0/initrunner/agent/api_tools.py +154 -0
- initrunner-0.2.0/initrunner/agent/delegation.py +212 -0
- initrunner-0.2.0/initrunner/agent/executor.py +450 -0
- initrunner-0.2.0/initrunner/agent/git_tools.py +220 -0
- initrunner-0.2.0/initrunner/agent/history.py +46 -0
- initrunner-0.2.0/initrunner/agent/loader.py +188 -0
- initrunner-0.2.0/initrunner/agent/memory_ops.py +165 -0
- initrunner-0.2.0/initrunner/agent/plugins.py +76 -0
- initrunner-0.2.0/initrunner/agent/policies.py +270 -0
- initrunner-0.2.0/initrunner/agent/python_tools.py +111 -0
- initrunner-0.2.0/initrunner/agent/reflection.py +38 -0
- initrunner-0.2.0/initrunner/agent/sandbox.py +355 -0
- initrunner-0.2.0/initrunner/agent/schema.py +719 -0
- initrunner-0.2.0/initrunner/agent/shell_tools.py +121 -0
- initrunner-0.2.0/initrunner/agent/skills.py +272 -0
- initrunner-0.2.0/initrunner/agent/slack_tools.py +65 -0
- initrunner-0.2.0/initrunner/agent/sql_tools.py +114 -0
- initrunner-0.2.0/initrunner/agent/tools/__init__.py +74 -0
- initrunner-0.2.0/initrunner/agent/tools/_registry.py +180 -0
- initrunner-0.2.0/initrunner/agent/tools/custom.py +270 -0
- initrunner-0.2.0/initrunner/agent/tools/datetime_tools.py +42 -0
- initrunner-0.2.0/initrunner/agent/tools/filesystem.py +78 -0
- initrunner-0.2.0/initrunner/agent/tools/http.py +44 -0
- initrunner-0.2.0/initrunner/agent/tools/memory.py +106 -0
- initrunner-0.2.0/initrunner/agent/tools/reflection.py +71 -0
- initrunner-0.2.0/initrunner/agent/tools/registry.py +88 -0
- initrunner-0.2.0/initrunner/agent/tools/retrieval.py +76 -0
- initrunner-0.2.0/initrunner/agent/tools/scheduling.py +90 -0
- initrunner-0.2.0/initrunner/agent/tools/web_reader.py +49 -0
- initrunner-0.2.0/initrunner/agent/tools/web_scraper.py +143 -0
- initrunner-0.2.0/initrunner/api/__init__.py +1 -0
- initrunner-0.2.0/initrunner/api/_helpers.py +54 -0
- initrunner-0.2.0/initrunner/api/app.py +199 -0
- initrunner-0.2.0/initrunner/api/auth.py +36 -0
- initrunner-0.2.0/initrunner/api/facehash.py +146 -0
- initrunner-0.2.0/initrunner/api/models.py +165 -0
- initrunner-0.2.0/initrunner/api/routes/__init__.py +0 -0
- initrunner-0.2.0/initrunner/api/routes/audit.py +55 -0
- initrunner-0.2.0/initrunner/api/routes/auth_ui.py +81 -0
- initrunner-0.2.0/initrunner/api/routes/chat_ui.py +277 -0
- initrunner-0.2.0/initrunner/api/routes/daemon.py +237 -0
- initrunner-0.2.0/initrunner/api/routes/daemon_ui.py +37 -0
- initrunner-0.2.0/initrunner/api/routes/ingest.py +137 -0
- initrunner-0.2.0/initrunner/api/routes/ingest_ui.py +52 -0
- initrunner-0.2.0/initrunner/api/routes/memory.py +71 -0
- initrunner-0.2.0/initrunner/api/routes/memory_ui.py +91 -0
- initrunner-0.2.0/initrunner/api/routes/pages.py +168 -0
- initrunner-0.2.0/initrunner/api/routes/roles.py +220 -0
- initrunner-0.2.0/initrunner/api/state.py +161 -0
- initrunner-0.2.0/initrunner/audit/__init__.py +0 -0
- initrunner-0.2.0/initrunner/audit/_redact.py +31 -0
- initrunner-0.2.0/initrunner/audit/logger.py +583 -0
- initrunner-0.2.0/initrunner/cli/__init__.py +0 -0
- initrunner-0.2.0/initrunner/cli/_helpers.py +147 -0
- initrunner-0.2.0/initrunner/cli/audit_cmd.py +98 -0
- initrunner-0.2.0/initrunner/cli/compose_cmd.py +388 -0
- initrunner-0.2.0/initrunner/cli/examples_cmd.py +131 -0
- initrunner-0.2.0/initrunner/cli/main.py +102 -0
- initrunner-0.2.0/initrunner/cli/mcp_cmd.py +46 -0
- initrunner-0.2.0/initrunner/cli/memory_cmd.py +68 -0
- initrunner-0.2.0/initrunner/cli/plugin_cmd.py +34 -0
- initrunner-0.2.0/initrunner/cli/registry_cmd.py +168 -0
- initrunner-0.2.0/initrunner/cli/role_cmd.py +289 -0
- initrunner-0.2.0/initrunner/cli/run_cmd.py +326 -0
- initrunner-0.2.0/initrunner/cli/server_cmd.py +337 -0
- initrunner-0.2.0/initrunner/cli/setup_cmd.py +405 -0
- initrunner-0.2.0/initrunner/cli/skill_cmd.py +133 -0
- initrunner-0.2.0/initrunner/cli/wizard.py +207 -0
- initrunner-0.2.0/initrunner/compose/__init__.py +38 -0
- initrunner-0.2.0/initrunner/compose/delegate_sink.py +399 -0
- initrunner-0.2.0/initrunner/compose/health.py +92 -0
- initrunner-0.2.0/initrunner/compose/loader.py +17 -0
- initrunner-0.2.0/initrunner/compose/orchestrator.py +457 -0
- initrunner-0.2.0/initrunner/compose/schema.py +126 -0
- initrunner-0.2.0/initrunner/compose/systemd.py +360 -0
- initrunner-0.2.0/initrunner/config.py +53 -0
- initrunner-0.2.0/initrunner/eval/__init__.py +1 -0
- initrunner-0.2.0/initrunner/eval/assertions.py +58 -0
- initrunner-0.2.0/initrunner/eval/runner.py +116 -0
- initrunner-0.2.0/initrunner/eval/schema.py +54 -0
- initrunner-0.2.0/initrunner/examples.py +166 -0
- initrunner-0.2.0/initrunner/ingestion/__init__.py +0 -0
- initrunner-0.2.0/initrunner/ingestion/chunker.py +78 -0
- initrunner-0.2.0/initrunner/ingestion/embeddings.py +127 -0
- initrunner-0.2.0/initrunner/ingestion/extractors.py +124 -0
- initrunner-0.2.0/initrunner/ingestion/pipeline.py +753 -0
- initrunner-0.2.0/initrunner/mcp/__init__.py +0 -0
- initrunner-0.2.0/initrunner/mcp/introspect.py +95 -0
- initrunner-0.2.0/initrunner/mcp/server.py +97 -0
- initrunner-0.2.0/initrunner/memory/__init__.py +0 -0
- initrunner-0.2.0/initrunner/middleware.py +203 -0
- initrunner-0.2.0/initrunner/pipeline/__init__.py +16 -0
- initrunner-0.2.0/initrunner/pipeline/executor.py +255 -0
- initrunner-0.2.0/initrunner/pipeline/loader.py +35 -0
- initrunner-0.2.0/initrunner/pipeline/schema.py +75 -0
- initrunner-0.2.0/initrunner/py.typed +0 -0
- initrunner-0.2.0/initrunner/registry.py +555 -0
- initrunner-0.2.0/initrunner/role_generator.py +274 -0
- initrunner-0.2.0/initrunner/runner/__init__.py +33 -0
- initrunner-0.2.0/initrunner/runner/autonomous.py +244 -0
- initrunner-0.2.0/initrunner/runner/budget.py +55 -0
- initrunner-0.2.0/initrunner/runner/daemon.py +228 -0
- initrunner-0.2.0/initrunner/runner/display.py +146 -0
- initrunner-0.2.0/initrunner/runner/interactive.py +104 -0
- initrunner-0.2.0/initrunner/runner/single.py +38 -0
- initrunner-0.2.0/initrunner/server/__init__.py +0 -0
- initrunner-0.2.0/initrunner/server/app.py +524 -0
- initrunner-0.2.0/initrunner/server/conversations.py +71 -0
- initrunner-0.2.0/initrunner/server/convert.py +90 -0
- initrunner-0.2.0/initrunner/server/models.py +71 -0
- initrunner-0.2.0/initrunner/server/rate_limiter.py +40 -0
- initrunner-0.2.0/initrunner/services.py +583 -0
- initrunner-0.2.0/initrunner/sinks/__init__.py +0 -0
- initrunner-0.2.0/initrunner/sinks/base.py +70 -0
- initrunner-0.2.0/initrunner/sinks/custom.py +30 -0
- initrunner-0.2.0/initrunner/sinks/dispatcher.py +105 -0
- initrunner-0.2.0/initrunner/sinks/file.py +45 -0
- initrunner-0.2.0/initrunner/sinks/webhook.py +51 -0
- initrunner-0.2.0/initrunner/stores/__init__.py +39 -0
- initrunner-0.2.0/initrunner/stores/base.py +258 -0
- initrunner-0.2.0/initrunner/stores/factory.py +69 -0
- initrunner-0.2.0/initrunner/stores/sqlite_vec.py +872 -0
- initrunner-0.2.0/initrunner/templates.py +476 -0
- initrunner-0.2.0/initrunner/triggers/__init__.py +0 -0
- initrunner-0.2.0/initrunner/triggers/base.py +40 -0
- initrunner-0.2.0/initrunner/triggers/cron.py +39 -0
- initrunner-0.2.0/initrunner/triggers/dispatcher.py +104 -0
- initrunner-0.2.0/initrunner/triggers/file_watcher.py +67 -0
- initrunner-0.2.0/initrunner/triggers/schedule_queue.py +101 -0
- initrunner-0.2.0/initrunner/triggers/webhook.py +102 -0
- initrunner-0.2.0/initrunner/tui/__init__.py +15 -0
- initrunner-0.2.0/initrunner/tui/app.py +44 -0
- initrunner-0.2.0/initrunner/tui/app.tcss +364 -0
- initrunner-0.2.0/initrunner/tui/screens/__init__.py +1 -0
- initrunner-0.2.0/initrunner/tui/screens/audit.py +148 -0
- initrunner-0.2.0/initrunner/tui/screens/base.py +95 -0
- initrunner-0.2.0/initrunner/tui/screens/daemon.py +200 -0
- initrunner-0.2.0/initrunner/tui/screens/detail.py +474 -0
- initrunner-0.2.0/initrunner/tui/screens/detail_fields.py +350 -0
- initrunner-0.2.0/initrunner/tui/screens/detail_modals.py +162 -0
- initrunner-0.2.0/initrunner/tui/screens/detail_yaml.py +49 -0
- initrunner-0.2.0/initrunner/tui/screens/help.py +116 -0
- initrunner-0.2.0/initrunner/tui/screens/ingest.py +156 -0
- initrunner-0.2.0/initrunner/tui/screens/memory.py +153 -0
- initrunner-0.2.0/initrunner/tui/screens/roles.py +303 -0
- initrunner-0.2.0/initrunner/tui/screens/run.py +444 -0
- initrunner-0.2.0/initrunner/tui/services.py +220 -0
- initrunner-0.2.0/initrunner/tui/theme.py +26 -0
- initrunner-0.2.0/initrunner/tui/widgets/__init__.py +1 -0
- initrunner-0.2.0/initrunner/tui/widgets/chat_input.py +27 -0
- initrunner-0.2.0/initrunner/tui/widgets/chat_view.py +246 -0
- initrunner-0.2.0/install.sh +599 -0
- initrunner-0.2.0/pyproject.toml +103 -0
- initrunner-0.2.0/role.yaml +23 -0
- initrunner-0.2.0/scripts/build_examples_catalog.py +372 -0
- initrunner-0.2.0/tests/__init__.py +0 -0
- initrunner-0.2.0/tests/conftest.py +103 -0
- initrunner-0.2.0/tests/installer/Dockerfile +51 -0
- initrunner-0.2.0/tests/installer/Dockerfile.interactive +51 -0
- initrunner-0.2.0/tests/installer/hello-world.yaml +26 -0
- initrunner-0.2.0/tests/installer/install.sh +599 -0
- initrunner-0.2.0/tests/installer/test-installer.sh +124 -0
- initrunner-0.2.0/tests/test_api_daemon.py +129 -0
- initrunner-0.2.0/tests/test_api_routes.py +138 -0
- initrunner-0.2.0/tests/test_api_tools.py +340 -0
- initrunner-0.2.0/tests/test_audit.py +862 -0
- initrunner-0.2.0/tests/test_audit_hooks.py +508 -0
- initrunner-0.2.0/tests/test_audit_redact.py +149 -0
- initrunner-0.2.0/tests/test_autonomous.py +357 -0
- initrunner-0.2.0/tests/test_chunker.py +49 -0
- initrunner-0.2.0/tests/test_cli.py +474 -0
- initrunner-0.2.0/tests/test_compat.py +28 -0
- initrunner-0.2.0/tests/test_compose_cli.py +419 -0
- initrunner-0.2.0/tests/test_compose_delegate_sink.py +574 -0
- initrunner-0.2.0/tests/test_compose_health.py +128 -0
- initrunner-0.2.0/tests/test_compose_orchestrator.py +782 -0
- initrunner-0.2.0/tests/test_compose_schema.py +369 -0
- initrunner-0.2.0/tests/test_compose_systemd.py +434 -0
- initrunner-0.2.0/tests/test_config.py +88 -0
- initrunner-0.2.0/tests/test_dashboard_security.py +223 -0
- initrunner-0.2.0/tests/test_delegation.py +365 -0
- initrunner-0.2.0/tests/test_dry_run.py +217 -0
- initrunner-0.2.0/tests/test_embeddings.py +130 -0
- initrunner-0.2.0/tests/test_eval_assertions.py +115 -0
- initrunner-0.2.0/tests/test_eval_runner.py +262 -0
- initrunner-0.2.0/tests/test_eval_schema.py +196 -0
- initrunner-0.2.0/tests/test_examples.py +61 -0
- initrunner-0.2.0/tests/test_examples_cmd.py +300 -0
- initrunner-0.2.0/tests/test_executor.py +331 -0
- initrunner-0.2.0/tests/test_extractors.py +103 -0
- initrunner-0.2.0/tests/test_facehash.py +101 -0
- initrunner-0.2.0/tests/test_git_tools.py +326 -0
- initrunner-0.2.0/tests/test_html.py +103 -0
- initrunner-0.2.0/tests/test_htmx_auth.py +95 -0
- initrunner-0.2.0/tests/test_htmx_pages.py +251 -0
- initrunner-0.2.0/tests/test_incremental_ingest.py +168 -0
- initrunner-0.2.0/tests/test_loader.py +318 -0
- initrunner-0.2.0/tests/test_log.py +69 -0
- initrunner-0.2.0/tests/test_memory_ops.py +101 -0
- initrunner-0.2.0/tests/test_memory_store.py +241 -0
- initrunner-0.2.0/tests/test_memory_tools.py +96 -0
- initrunner-0.2.0/tests/test_paths.py +62 -0
- initrunner-0.2.0/tests/test_pipeline.py +270 -0
- initrunner-0.2.0/tests/test_pipeline_executor.py +429 -0
- initrunner-0.2.0/tests/test_pipeline_schema.py +219 -0
- initrunner-0.2.0/tests/test_plugins.py +182 -0
- initrunner-0.2.0/tests/test_policies.py +256 -0
- initrunner-0.2.0/tests/test_python_tools.py +95 -0
- initrunner-0.2.0/tests/test_rate_limiter.py +46 -0
- initrunner-0.2.0/tests/test_reflection_tools.py +121 -0
- initrunner-0.2.0/tests/test_registry.py +858 -0
- initrunner-0.2.0/tests/test_role_api.py +205 -0
- initrunner-0.2.0/tests/test_role_generator.py +79 -0
- initrunner-0.2.0/tests/test_runner.py +325 -0
- initrunner-0.2.0/tests/test_schedule_queue.py +101 -0
- initrunner-0.2.0/tests/test_scheduling_tools.py +74 -0
- initrunner-0.2.0/tests/test_schema.py +671 -0
- initrunner-0.2.0/tests/test_server.py +1261 -0
- initrunner-0.2.0/tests/test_server_cmd.py +191 -0
- initrunner-0.2.0/tests/test_setup.py +747 -0
- initrunner-0.2.0/tests/test_shell_tools.py +350 -0
- initrunner-0.2.0/tests/test_sinks.py +394 -0
- initrunner-0.2.0/tests/test_skills.py +617 -0
- initrunner-0.2.0/tests/test_slack_tools.py +242 -0
- initrunner-0.2.0/tests/test_smoke_daemon_webhook.py +548 -0
- initrunner-0.2.0/tests/test_sql_tools.py +203 -0
- initrunner-0.2.0/tests/test_store_dimensions.py +232 -0
- initrunner-0.2.0/tests/test_store_factory.py +52 -0
- initrunner-0.2.0/tests/test_tool_discovery.py +94 -0
- initrunner-0.2.0/tests/test_tool_sandbox.py +506 -0
- initrunner-0.2.0/tests/test_tools.py +688 -0
- initrunner-0.2.0/tests/test_triggers.py +140 -0
- initrunner-0.2.0/tests/test_tui_services.py +211 -0
- initrunner-0.2.0/tests/test_urls.py +215 -0
- initrunner-0.2.0/tests/test_vectorstore.py +232 -0
- initrunner-0.2.0/tests/test_web_scraper.py +141 -0
- initrunner-0.2.0/tests/test_wizard.py +163 -0
- initrunner-0.2.0/uv.lock +4261 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
lint:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v4
|
|
13
|
+
- uses: astral-sh/setup-uv@v4
|
|
14
|
+
- uses: actions/setup-python@v5
|
|
15
|
+
with:
|
|
16
|
+
python-version: "3.13"
|
|
17
|
+
- run: uv sync --dev
|
|
18
|
+
- run: uv run ruff check .
|
|
19
|
+
- run: uv run ruff format --check .
|
|
20
|
+
- run: uv run ty check initrunner/
|
|
21
|
+
|
|
22
|
+
test:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
strategy:
|
|
25
|
+
matrix:
|
|
26
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v4
|
|
29
|
+
- uses: astral-sh/setup-uv@v4
|
|
30
|
+
- uses: actions/setup-python@v5
|
|
31
|
+
with:
|
|
32
|
+
python-version: ${{ matrix.python-version }}
|
|
33
|
+
- run: uv sync --dev
|
|
34
|
+
- run: uv run pytest tests/ -v
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
lint:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
- uses: astral-sh/setup-uv@v4
|
|
13
|
+
- uses: actions/setup-python@v5
|
|
14
|
+
with:
|
|
15
|
+
python-version: "3.13"
|
|
16
|
+
- run: uv sync --dev
|
|
17
|
+
- run: uv run ruff check .
|
|
18
|
+
- run: uv run ruff format --check .
|
|
19
|
+
- run: uv run ty check initrunner/
|
|
20
|
+
|
|
21
|
+
test:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
strategy:
|
|
24
|
+
matrix:
|
|
25
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
- uses: astral-sh/setup-uv@v4
|
|
29
|
+
- uses: actions/setup-python@v5
|
|
30
|
+
with:
|
|
31
|
+
python-version: ${{ matrix.python-version }}
|
|
32
|
+
- run: uv sync --dev
|
|
33
|
+
- run: uv run pytest tests/ -v
|
|
34
|
+
|
|
35
|
+
build:
|
|
36
|
+
needs: [lint, test]
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/checkout@v4
|
|
40
|
+
- uses: astral-sh/setup-uv@v4
|
|
41
|
+
- uses: actions/setup-python@v5
|
|
42
|
+
with:
|
|
43
|
+
python-version: "3.13"
|
|
44
|
+
|
|
45
|
+
- name: Verify tag matches package version
|
|
46
|
+
run: |
|
|
47
|
+
TAG="${GITHUB_REF#refs/tags/v}"
|
|
48
|
+
PKG_VERSION=$(uv run python -c "import importlib.metadata; print(importlib.metadata.version('initrunner'))")
|
|
49
|
+
if [ "$TAG" != "$PKG_VERSION" ]; then
|
|
50
|
+
echo "Tag v$TAG does not match package version $PKG_VERSION"
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
- run: uv build
|
|
55
|
+
- uses: actions/upload-artifact@v4
|
|
56
|
+
with:
|
|
57
|
+
name: dist
|
|
58
|
+
path: dist/
|
|
59
|
+
|
|
60
|
+
publish:
|
|
61
|
+
needs: build
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
environment: pypi
|
|
64
|
+
permissions:
|
|
65
|
+
id-token: write
|
|
66
|
+
steps:
|
|
67
|
+
- uses: actions/download-artifact@v4
|
|
68
|
+
with:
|
|
69
|
+
name: dist
|
|
70
|
+
path: dist/
|
|
71
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
name: Publish to TestPyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: read
|
|
8
|
+
id-token: write
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
lint:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
- uses: astral-sh/setup-uv@v4
|
|
16
|
+
- uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.13"
|
|
19
|
+
- run: uv sync --dev
|
|
20
|
+
- run: uv run ruff check .
|
|
21
|
+
- run: uv run ruff format --check .
|
|
22
|
+
- run: uv run ty check initrunner/
|
|
23
|
+
|
|
24
|
+
test:
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
strategy:
|
|
27
|
+
matrix:
|
|
28
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v4
|
|
31
|
+
- uses: astral-sh/setup-uv@v4
|
|
32
|
+
- uses: actions/setup-python@v5
|
|
33
|
+
with:
|
|
34
|
+
python-version: ${{ matrix.python-version }}
|
|
35
|
+
- run: uv sync --dev
|
|
36
|
+
- run: uv run pytest tests/ -v
|
|
37
|
+
|
|
38
|
+
build:
|
|
39
|
+
needs: [lint, test]
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
- uses: astral-sh/setup-uv@v4
|
|
44
|
+
- uses: actions/setup-python@v5
|
|
45
|
+
with:
|
|
46
|
+
python-version: "3.13"
|
|
47
|
+
|
|
48
|
+
- run: uv sync --dev
|
|
49
|
+
|
|
50
|
+
- name: Verify package version is a pre-release
|
|
51
|
+
run: |
|
|
52
|
+
PKG_VERSION=$(uv run python -c "import importlib.metadata; print(importlib.metadata.version('initrunner'))")
|
|
53
|
+
echo "Package version: $PKG_VERSION"
|
|
54
|
+
if [[ ! "$PKG_VERSION" =~ (rc|a|b|dev) ]]; then
|
|
55
|
+
echo "ERROR: Package version '$PKG_VERSION' is not a pre-release version."
|
|
56
|
+
echo "TestPyPI workflow should only publish pre-release versions."
|
|
57
|
+
exit 1
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
- run: uv build
|
|
61
|
+
- uses: actions/upload-artifact@v4
|
|
62
|
+
with:
|
|
63
|
+
name: dist
|
|
64
|
+
path: dist/
|
|
65
|
+
|
|
66
|
+
publish:
|
|
67
|
+
needs: build
|
|
68
|
+
runs-on: ubuntu-latest
|
|
69
|
+
environment: testpypi
|
|
70
|
+
permissions:
|
|
71
|
+
id-token: write
|
|
72
|
+
steps:
|
|
73
|
+
- uses: actions/download-artifact@v4
|
|
74
|
+
with:
|
|
75
|
+
name: dist
|
|
76
|
+
path: dist/
|
|
77
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
78
|
+
with:
|
|
79
|
+
repository-url: https://test.pypi.org/legacy/
|
|
80
|
+
|
|
81
|
+
verify-install:
|
|
82
|
+
needs: publish
|
|
83
|
+
runs-on: ubuntu-latest
|
|
84
|
+
strategy:
|
|
85
|
+
matrix:
|
|
86
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
87
|
+
steps:
|
|
88
|
+
- uses: actions/setup-python@v5
|
|
89
|
+
with:
|
|
90
|
+
python-version: ${{ matrix.python-version }}
|
|
91
|
+
|
|
92
|
+
- name: Wait for TestPyPI to index the package
|
|
93
|
+
run: sleep 30
|
|
94
|
+
|
|
95
|
+
- name: Get package version from build artifact
|
|
96
|
+
uses: actions/download-artifact@v4
|
|
97
|
+
with:
|
|
98
|
+
name: dist
|
|
99
|
+
path: dist/
|
|
100
|
+
|
|
101
|
+
- name: Extract version from wheel filename
|
|
102
|
+
id: version
|
|
103
|
+
run: |
|
|
104
|
+
WHEEL=$(ls dist/*.whl)
|
|
105
|
+
# Wheel filename format: name-version-py3-none-any.whl
|
|
106
|
+
VERSION=$(echo "$WHEEL" | sed 's/.*initrunner-\(.*\)-py3.*/\1/')
|
|
107
|
+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
108
|
+
echo "Detected version: $VERSION"
|
|
109
|
+
|
|
110
|
+
- name: Download from TestPyPI
|
|
111
|
+
run: |
|
|
112
|
+
pip download --no-deps \
|
|
113
|
+
--index-url https://test.pypi.org/simple/ \
|
|
114
|
+
-d /tmp/testpypi-pkg \
|
|
115
|
+
"initrunner==${{ steps.version.outputs.version }}"
|
|
116
|
+
|
|
117
|
+
- name: Install from local wheel with all extras
|
|
118
|
+
env:
|
|
119
|
+
PIP_INDEX_URL: ""
|
|
120
|
+
PIP_EXTRA_INDEX_URL: ""
|
|
121
|
+
run: |
|
|
122
|
+
WHEEL=$(ls /tmp/testpypi-pkg/initrunner-*.whl)
|
|
123
|
+
pip install "${WHEEL}[tui,ingest,dashboard]"
|
|
124
|
+
|
|
125
|
+
- name: Smoke test - CLI
|
|
126
|
+
run: |
|
|
127
|
+
initrunner --version
|
|
128
|
+
initrunner --help
|
|
129
|
+
|
|
130
|
+
- name: Smoke test - core imports
|
|
131
|
+
run: |
|
|
132
|
+
python -c "
|
|
133
|
+
import initrunner
|
|
134
|
+
import initrunner.agent
|
|
135
|
+
import initrunner.cli
|
|
136
|
+
import initrunner.runner
|
|
137
|
+
print('Core imports OK')
|
|
138
|
+
"
|
|
139
|
+
|
|
140
|
+
- name: Smoke test - tui extra
|
|
141
|
+
run: python -c "import initrunner.tui; print('TUI import OK')"
|
|
142
|
+
|
|
143
|
+
- name: Smoke test - ingest extra
|
|
144
|
+
run: python -c "import initrunner.ingestion; print('Ingest import OK')"
|
|
145
|
+
|
|
146
|
+
- name: Smoke test - dashboard extra
|
|
147
|
+
run: python -c "import initrunner.api; print('Dashboard import OK')"
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py.cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# UV
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
#uv.lock
|
|
102
|
+
|
|
103
|
+
# poetry
|
|
104
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
105
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
106
|
+
# commonly ignored for libraries.
|
|
107
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
108
|
+
#poetry.lock
|
|
109
|
+
#poetry.toml
|
|
110
|
+
|
|
111
|
+
# pdm
|
|
112
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
113
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
114
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
115
|
+
#pdm.lock
|
|
116
|
+
#pdm.toml
|
|
117
|
+
.pdm-python
|
|
118
|
+
.pdm-build/
|
|
119
|
+
|
|
120
|
+
# pixi
|
|
121
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
122
|
+
#pixi.lock
|
|
123
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
124
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
125
|
+
.pixi
|
|
126
|
+
|
|
127
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
128
|
+
__pypackages__/
|
|
129
|
+
|
|
130
|
+
# Celery stuff
|
|
131
|
+
celerybeat-schedule
|
|
132
|
+
celerybeat.pid
|
|
133
|
+
|
|
134
|
+
# SageMath parsed files
|
|
135
|
+
*.sage.py
|
|
136
|
+
|
|
137
|
+
# Environments
|
|
138
|
+
.env
|
|
139
|
+
.envrc
|
|
140
|
+
.venv
|
|
141
|
+
env/
|
|
142
|
+
venv/
|
|
143
|
+
ENV/
|
|
144
|
+
env.bak/
|
|
145
|
+
venv.bak/
|
|
146
|
+
|
|
147
|
+
# Spyder project settings
|
|
148
|
+
.spyderproject
|
|
149
|
+
.spyproject
|
|
150
|
+
|
|
151
|
+
# Rope project settings
|
|
152
|
+
.ropeproject
|
|
153
|
+
|
|
154
|
+
# mkdocs documentation
|
|
155
|
+
/site
|
|
156
|
+
|
|
157
|
+
# mypy
|
|
158
|
+
.mypy_cache/
|
|
159
|
+
.dmypy.json
|
|
160
|
+
dmypy.json
|
|
161
|
+
|
|
162
|
+
# Pyre type checker
|
|
163
|
+
.pyre/
|
|
164
|
+
|
|
165
|
+
# pytype static type analyzer
|
|
166
|
+
.pytype/
|
|
167
|
+
|
|
168
|
+
# Cython debug symbols
|
|
169
|
+
cython_debug/
|
|
170
|
+
|
|
171
|
+
# PyCharm
|
|
172
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
173
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
174
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
175
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
176
|
+
#.idea/
|
|
177
|
+
|
|
178
|
+
# Abstra
|
|
179
|
+
# Abstra is an AI-powered process automation framework.
|
|
180
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
181
|
+
# Learn more at https://abstra.io/docs
|
|
182
|
+
.abstra/
|
|
183
|
+
|
|
184
|
+
# Visual Studio Code
|
|
185
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
186
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
187
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
188
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
189
|
+
# .vscode/
|
|
190
|
+
|
|
191
|
+
# Ruff stuff:
|
|
192
|
+
.ruff_cache/
|
|
193
|
+
|
|
194
|
+
# PyPI configuration file
|
|
195
|
+
.pypirc
|
|
196
|
+
|
|
197
|
+
# Claude Code
|
|
198
|
+
.claude/
|
|
199
|
+
|
|
200
|
+
# Cursor
|
|
201
|
+
# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
|
|
202
|
+
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
|
|
203
|
+
# refer to https://docs.cursor.com/context/ignore-files
|
|
204
|
+
.cursorignore
|
|
205
|
+
.cursorindexingignore
|
|
206
|
+
|
|
207
|
+
# Marimo
|
|
208
|
+
marimo/_static/
|
|
209
|
+
marimo/_lsp/
|
|
210
|
+
__marimo__/
|
|
211
|
+
|
|
212
|
+
# Test artifacts (mocked file paths)
|
|
213
|
+
MagicMock/
|
|
214
|
+
|
|
215
|
+
# Dashboard build artifacts
|
|
216
|
+
initrunner/_dashboard_static/
|
|
217
|
+
package-lock.json
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
7
|
+
|
|
8
|
+
## [0.2.0] - 2026-02-15
|
|
9
|
+
|
|
10
|
+
First public release candidate.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Agent runner** with single-shot, interactive REPL (`--resume` support), and daemon modes
|
|
15
|
+
- **Role YAML schema** with Pydantic validation and discriminated unions for type-safe configs
|
|
16
|
+
- **Built-in tools**: filesystem, HTTP, web_reader, datetime, Python (subprocess isolation), SQL (read-only SQLite), git
|
|
17
|
+
- **MCP tool support** via FastMCP integration
|
|
18
|
+
- **Document ingestion pipeline**: extract (PDF/DOCX/XLSX), chunk, embed, store with batched embedding
|
|
19
|
+
- **sqlite-vec vector store** with dimension auto-detection, glob SQL pre-filtering, and auto-retrieval tool
|
|
20
|
+
- **Memory system**: remember/recall/list_memories tools with SQLite persistence and session resume
|
|
21
|
+
- **Trigger system**: cron (croniter), file watcher (watchfiles), and webhook (starlette/uvicorn) triggers
|
|
22
|
+
- **Compose orchestration**: multi-agent services via `compose.yaml` with delegate sinks, health monitoring, restart policies, and cycle detection
|
|
23
|
+
- **Audit trail**: append-only SQLite log with auto-pruning (configurable retention and max records)
|
|
24
|
+
- **TUI dashboard** (optional `[tui]` extra): Textual-based k9s-style interface with roles, chat, audit, ingest, memory, and daemon screens
|
|
25
|
+
- **Web dashboard** (optional `[dashboard]` extra): FastAPI + Next.js browser UI with WebSocket chat, SSE ingestion, and daemon event streaming
|
|
26
|
+
- **OpenAI-compatible API server** (`initrunner serve`): serve any role as a chat completions endpoint with optional API key auth
|
|
27
|
+
- **Agent pipelines** (`initrunner pipeline`): chain multiple agents in sequence
|
|
28
|
+
- **Role registry** (`initrunner install/search/update`): install roles from GitHub or the community index
|
|
29
|
+
- **Tool plugins** (`initrunner plugins`): discover and list third-party tool plugins
|
|
30
|
+
- **Test suites** (`initrunner test`): run test suites against agent roles
|
|
31
|
+
- **Agent delegation** for multi-agent workflows
|
|
32
|
+
- **Skills system** for reusable agent capabilities
|
|
33
|
+
- **Content safety policies** with configurable enforcement
|
|
34
|
+
- **Tool sandboxing** via PEP 578 audit hooks
|
|
35
|
+
- **CLI** via Typer: `run`, `validate`, `init`, `ingest`, `daemon`, `ui`, `compose up/validate`, `memory clear/export`
|
|
36
|
+
- **Multi-provider support**: OpenAI, Anthropic, Google, Groq, Mistral (via pydantic-ai-slim extras)
|
|
37
|
+
- **Context window safety**: REPL history sliding window, max_resume_messages, daemon session pruning
|
|
38
|
+
- **Security hardening**: env var scrubbing for Python/git subprocesses, SQL query_only pragma, bounded tool results
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# InitRunner
|
|
2
|
+
|
|
3
|
+
YAML-first AI agent platform. Define agents as declarative `role.yaml` files — model, tools, triggers, ingestion, guardrails — and run them as one-shot commands, interactive REPLs, trigger-driven daemons, or OpenAI-compatible API servers. Includes built-in RAG, long-term memory, multi-agent orchestration via `compose.yaml`, audit logging, and a self-registering tool system.
|
|
4
|
+
|
|
5
|
+
## Tech Stack
|
|
6
|
+
|
|
7
|
+
Python 3.11+ · PydanticAI (agent framework) · Pydantic (config/validation) · Typer + Rich (CLI) · SQLite + sqlite-vec (audit, vector stores) · Jinja2 + HTMX + DaisyUI (dashboard) · hatchling (build) · uv (package manager)
|
|
8
|
+
|
|
9
|
+
## Development Workflow
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
uv sync # install deps
|
|
13
|
+
uv run pytest tests/ -v # run tests (710 tests)
|
|
14
|
+
uv run ruff check . # lint
|
|
15
|
+
uv run ruff format . # format
|
|
16
|
+
uv run ty check # type check
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Project Layout
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
initrunner/ # main package (flat layout)
|
|
23
|
+
├── agent/ # role schema, loader, executor, tool registry
|
|
24
|
+
│ └── tools/ # self-registering tool modules
|
|
25
|
+
├── api/ # FastAPI web dashboard (server-rendered HTML + JSON API)
|
|
26
|
+
├── audit/ # append-only SQLite audit trail
|
|
27
|
+
├── cli/ # Typer CLI entry point
|
|
28
|
+
├── compose/ # multi-agent orchestration (compose.yaml)
|
|
29
|
+
├── ingestion/ # extract → chunk → embed → store pipeline
|
|
30
|
+
├── mcp/ # MCP server integration
|
|
31
|
+
├── runner/ # single-shot, REPL, autonomous, daemon modes
|
|
32
|
+
├── stores/ # DocumentStore + MemoryStore ABCs and sqlite-vec impls
|
|
33
|
+
├── triggers/ # cron, file watcher, webhook triggers
|
|
34
|
+
├── tui/ # Textual terminal UI
|
|
35
|
+
├── services.py # shared sync business logic (CLI, API, TUI all use this)
|
|
36
|
+
├── _templates/ # Jinja2 HTML templates (HTMX + DaisyUI)
|
|
37
|
+
├── _static/ # static assets (HTMX, Tailwind, DaisyUI CSS, app.js)
|
|
38
|
+
├── _compat.py # optional dependency helpers
|
|
39
|
+
└── _html.py # HTML fetch + markdown conversion
|
|
40
|
+
tests/ # pytest test suite
|
|
41
|
+
examples/ # example role and compose YAML files
|
|
42
|
+
docs/ # detailed documentation by subsystem
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Key Patterns
|
|
46
|
+
|
|
47
|
+
These rules apply to every task in this codebase:
|
|
48
|
+
|
|
49
|
+
- **Sync-first**: CLI is synchronous. Use PydanticAI's `run_sync`. Use threads (not asyncio) for concurrency (triggers, compose services).
|
|
50
|
+
- **Self-registering tools**: add a new tool by creating one file in `agent/tools/` using `@register_tool(type_name, ConfigClass)`. Auto-discovered via `pkgutil.iter_modules()`.
|
|
51
|
+
- **Lazy imports in CLI**: CLI commands use lazy imports so `--help` stays fast. Don't add top-level imports in `cli/main.py`.
|
|
52
|
+
- **`audit.log()` never raises**: audit failures must not crash agent runs.
|
|
53
|
+
- **Dataclasses for DTOs, Pydantic for config**: internal data (RunResult, AuditRecord) uses dataclasses. Role definitions and API schemas use Pydantic.
|
|
54
|
+
- **`services.py` is the shared layer**: all business logic lives here. CLI, API, and TUI are thin wrappers that call into `services.*`.
|
|
55
|
+
|
|
56
|
+
## Coding Conventions
|
|
57
|
+
|
|
58
|
+
- Run `ruff check` and `ruff format` before committing. Run `ty check` for type checking.
|
|
59
|
+
- Tests go in `tests/` mirroring the source layout. Use `pytest` fixtures and `unittest.mock`.
|
|
60
|
+
- Keep tool result sizes bounded (truncate with `[truncated]` marker). See existing tools for limits.
|
|
61
|
+
- Sensitive env vars must be scrubbed from subprocess environments (see `_SENSITIVE_ENV_KEYS` pattern).
|
|
62
|
+
|
|
63
|
+
## Documentation Index
|
|
64
|
+
|
|
65
|
+
Detailed docs live in `docs/`. Key references:
|
|
66
|
+
|
|
67
|
+
| Topic | File |
|
|
68
|
+
|---|---|
|
|
69
|
+
| CLI commands & usage | `docs/getting-started/cli.md` |
|
|
70
|
+
| Creating new tools | `docs/agents/tool_creation.md` |
|
|
71
|
+
| Tool registry internals | `docs/agents/registry.md` |
|
|
72
|
+
| Security model | `docs/security/security.md` |
|
|
73
|
+
| Ingestion pipeline | `docs/core/ingestion.md` |
|
|
74
|
+
| Memory system | `docs/core/memory.md` |
|
|
75
|
+
| Triggers (cron/file/webhook) | `docs/core/triggers.md` |
|
|
76
|
+
| Autonomous execution | `docs/orchestration/autonomy.md` |
|
|
77
|
+
| Compose orchestration | `docs/orchestration/delegation.md`, `docs/orchestration/sinks.md` |
|
|
78
|
+
| Web dashboard | `docs/interfaces/dashboard.md` |
|
|
79
|
+
| Textual TUI | `docs/interfaces/tui.md` |
|
|
80
|
+
| Testing guide | `docs/operations/testing.md` |
|
|
81
|
+
| Auth & guardrails | `docs/security/auth.md`, `docs/configuration/guardrails.md` |
|
|
82
|
+
| CI/CD & releases | `docs/operations/cicd.md`, `docs/operations/release_preparation.md` |
|
|
83
|
+
| Role generation & wizards | `docs/agents/role_generation.md` |
|
|
84
|
+
| Provider configuration | `docs/configuration/providers.md`, `docs/configuration/ollama.md` |
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Contributing to InitRunner
|
|
2
|
+
|
|
3
|
+
Thanks for your interest in contributing! This guide covers the basics.
|
|
4
|
+
|
|
5
|
+
## Reporting Issues
|
|
6
|
+
|
|
7
|
+
Open a GitHub issue with:
|
|
8
|
+
|
|
9
|
+
- A clear title and description
|
|
10
|
+
- Steps to reproduce (for bugs)
|
|
11
|
+
- Your Python version and OS
|
|
12
|
+
- The relevant role YAML (if applicable)
|
|
13
|
+
|
|
14
|
+
**Security vulnerabilities:** please see [SECURITY.md](SECURITY.md) instead of opening a public issue.
|
|
15
|
+
|
|
16
|
+
## Development Setup
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Clone and install
|
|
20
|
+
git clone https://github.com/vladkesler/initrunner.git
|
|
21
|
+
cd initrunner
|
|
22
|
+
uv sync
|
|
23
|
+
|
|
24
|
+
# Run tests
|
|
25
|
+
uv run pytest tests/ -v
|
|
26
|
+
|
|
27
|
+
# Lint and format
|
|
28
|
+
uv run ruff check .
|
|
29
|
+
uv run ruff format .
|
|
30
|
+
|
|
31
|
+
# Type check
|
|
32
|
+
uv run ty check initrunner/
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## PR Guidelines
|
|
36
|
+
|
|
37
|
+
1. Fork the repo and create a feature branch from `main`.
|
|
38
|
+
2. Keep changes focused — one logical change per PR.
|
|
39
|
+
3. Add tests for new functionality.
|
|
40
|
+
4. Ensure all checks pass: `uv run pytest tests/ -v && uv run ruff check . && uv run ruff format --check .`
|
|
41
|
+
5. Write a clear PR description explaining what and why.
|
|
42
|
+
|
|
43
|
+
## Architecture
|
|
44
|
+
|
|
45
|
+
See [CLAUDE.md](CLAUDE.md) for project structure, architecture decisions, and key conventions.
|
|
46
|
+
|
|
47
|
+
## License
|
|
48
|
+
|
|
49
|
+
By contributing, you agree that your contributions will be licensed under the [MIT License](LICENSE).
|
initrunner-0.2.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Vladimir Kesler
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|