guile-agent 0.1.0a4__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.
- guile_agent-0.1.0a4/.cursor/rules/guile-project.mdc +45 -0
- guile_agent-0.1.0a4/.github/ISSUE_TEMPLATE/bug_report.md +33 -0
- guile_agent-0.1.0a4/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- guile_agent-0.1.0a4/.github/workflows/build-release.yml +146 -0
- guile_agent-0.1.0a4/.github/workflows/docker-sandbox.yml +74 -0
- guile_agent-0.1.0a4/.github/workflows/publish.yml +194 -0
- guile_agent-0.1.0a4/.gitignore +100 -0
- guile_agent-0.1.0a4/.pre-commit-config.yaml +67 -0
- guile_agent-0.1.0a4/AGENTS.md +44 -0
- guile_agent-0.1.0a4/CONTRIBUTING.md +131 -0
- guile_agent-0.1.0a4/LICENSE +201 -0
- guile_agent-0.1.0a4/Makefile +95 -0
- guile_agent-0.1.0a4/PKG-INFO +52 -0
- guile_agent-0.1.0a4/README.md +11 -0
- guile_agent-0.1.0a4/benchmarks/README.md +34 -0
- guile_agent-0.1.0a4/containers/Dockerfile +312 -0
- guile_agent-0.1.0a4/containers/docker-entrypoint.sh +151 -0
- guile_agent-0.1.0a4/containers/sandbox-lock.yaml +174 -0
- guile_agent-0.1.0a4/containers/tooling/npm/package-lock.json +1887 -0
- guile_agent-0.1.0a4/containers/tooling/npm/package.json +15 -0
- guile_agent-0.1.0a4/containers/tooling/python/requirements.in +15 -0
- guile_agent-0.1.0a4/containers/tooling/python/requirements.lock +2285 -0
- guile_agent-0.1.0a4/containers/tooling/semgrep/p-python.yaml +13901 -0
- guile_agent-0.1.0a4/docs/DEPLOYMENT.md +274 -0
- guile_agent-0.1.0a4/docs/FOUNDER_STATUS.md +102 -0
- guile_agent-0.1.0a4/docs/README.md +10 -0
- guile_agent-0.1.0a4/docs/advanced/configuration.mdx +186 -0
- guile_agent-0.1.0a4/docs/advanced/skills.mdx +144 -0
- guile_agent-0.1.0a4/docs/cloud/cli.mdx +103 -0
- guile_agent-0.1.0a4/docs/cloud/overview.mdx +59 -0
- guile_agent-0.1.0a4/docs/context/ARCHITECTURE.md +136 -0
- guile_agent-0.1.0a4/docs/context/BRANDING_AUDIT.md +60 -0
- guile_agent-0.1.0a4/docs/context/CURRENT_STATE.md +97 -0
- guile_agent-0.1.0a4/docs/context/DECISIONS.md +94 -0
- guile_agent-0.1.0a4/docs/context/DEPENDENCIES.md +62 -0
- guile_agent-0.1.0a4/docs/context/EXECUTION_FLOW.md +122 -0
- guile_agent-0.1.0a4/docs/context/FORK_BASELINE.md +38 -0
- guile_agent-0.1.0a4/docs/context/KNOWN_RISKS.md +35 -0
- guile_agent-0.1.0a4/docs/context/PROJECT_CONTEXT.md +91 -0
- guile_agent-0.1.0a4/docs/context/REPOSITORY_MAP.md +86 -0
- guile_agent-0.1.0a4/docs/context/ROADMAP.md +73 -0
- guile_agent-0.1.0a4/docs/context/SANDBOX_DEPENDENCY_PINNING.md +106 -0
- guile_agent-0.1.0a4/docs/context/SANDBOX_HARDENING_PLAN.md +346 -0
- guile_agent-0.1.0a4/docs/context/SANDBOX_SECURITY.md +343 -0
- guile_agent-0.1.0a4/docs/context/SECURITY_MODEL.md +97 -0
- guile_agent-0.1.0a4/docs/contributing.mdx +113 -0
- guile_agent-0.1.0a4/docs/docs.json +133 -0
- guile_agent-0.1.0a4/docs/index.mdx +97 -0
- guile_agent-0.1.0a4/docs/integrations/ci-cd.mdx +90 -0
- guile_agent-0.1.0a4/docs/integrations/coding-agents.mdx +67 -0
- guile_agent-0.1.0a4/docs/integrations/github-actions.mdx +66 -0
- guile_agent-0.1.0a4/docs/integrations/mcp.mdx +131 -0
- guile_agent-0.1.0a4/docs/llm-providers/anthropic.mdx +24 -0
- guile_agent-0.1.0a4/docs/llm-providers/azure.mdx +37 -0
- guile_agent-0.1.0a4/docs/llm-providers/bedrock.mdx +55 -0
- guile_agent-0.1.0a4/docs/llm-providers/local.mdx +108 -0
- guile_agent-0.1.0a4/docs/llm-providers/novita.mdx +38 -0
- guile_agent-0.1.0a4/docs/llm-providers/openai.mdx +31 -0
- guile_agent-0.1.0a4/docs/llm-providers/openrouter.mdx +40 -0
- guile_agent-0.1.0a4/docs/llm-providers/overview.mdx +74 -0
- guile_agent-0.1.0a4/docs/llm-providers/vertex.mdx +53 -0
- guile_agent-0.1.0a4/docs/quickstart.mdx +79 -0
- guile_agent-0.1.0a4/docs/tools/browser.mdx +34 -0
- guile_agent-0.1.0a4/docs/tools/overview.mdx +33 -0
- guile_agent-0.1.0a4/docs/tools/proxy.mdx +135 -0
- guile_agent-0.1.0a4/docs/tools/sandbox.mdx +91 -0
- guile_agent-0.1.0a4/docs/tools/terminal.mdx +65 -0
- guile_agent-0.1.0a4/docs/usage/cli.mdx +164 -0
- guile_agent-0.1.0a4/docs/usage/instructions.mdx +113 -0
- guile_agent-0.1.0a4/docs/usage/scan-modes.mdx +62 -0
- guile_agent-0.1.0a4/docs/usage/viewer.mdx +49 -0
- guile_agent-0.1.0a4/guile/__init__.py +0 -0
- guile_agent-0.1.0a4/guile/agents/__init__.py +0 -0
- guile_agent-0.1.0a4/guile/agents/factory.py +767 -0
- guile_agent-0.1.0a4/guile/agents/prompt.py +126 -0
- guile_agent-0.1.0a4/guile/agents/prompts/system_prompt.jinja +545 -0
- guile_agent-0.1.0a4/guile/config/__init__.py +41 -0
- guile_agent-0.1.0a4/guile/config/codex.py +403 -0
- guile_agent-0.1.0a4/guile/config/loader.py +168 -0
- guile_agent-0.1.0a4/guile/config/models.py +983 -0
- guile_agent-0.1.0a4/guile/config/settings.py +177 -0
- guile_agent-0.1.0a4/guile/config/tool_call_ids.py +117 -0
- guile_agent-0.1.0a4/guile/config/tool_call_limits.py +46 -0
- guile_agent-0.1.0a4/guile/core/__init__.py +1 -0
- guile_agent-0.1.0a4/guile/core/agents.py +577 -0
- guile_agent-0.1.0a4/guile/core/execution.py +1047 -0
- guile_agent-0.1.0a4/guile/core/hooks.py +273 -0
- guile_agent-0.1.0a4/guile/core/inputs.py +383 -0
- guile_agent-0.1.0a4/guile/core/paths.py +40 -0
- guile_agent-0.1.0a4/guile/core/runner.py +673 -0
- guile_agent-0.1.0a4/guile/core/sessions.py +214 -0
- guile_agent-0.1.0a4/guile/interface/__init__.py +4 -0
- guile_agent-0.1.0a4/guile/interface/auth_cli.py +420 -0
- guile_agent-0.1.0a4/guile/interface/cli.py +240 -0
- guile_agent-0.1.0a4/guile/interface/cli_args.py +456 -0
- guile_agent-0.1.0a4/guile/interface/cloud/__init__.py +162 -0
- guile_agent-0.1.0a4/guile/interface/cloud/arguments.py +18 -0
- guile_agent-0.1.0a4/guile/interface/cloud/billing.py +718 -0
- guile_agent-0.1.0a4/guile/interface/cloud/http.py +408 -0
- guile_agent-0.1.0a4/guile/interface/cloud/payment_proxy.py +286 -0
- guile_agent-0.1.0a4/guile/interface/cloud/render.py +1759 -0
- guile_agent-0.1.0a4/guile/interface/cloud/runner.py +1132 -0
- guile_agent-0.1.0a4/guile/interface/cloud/session.py +167 -0
- guile_agent-0.1.0a4/guile/interface/cloud/source_scan.py +403 -0
- guile_agent-0.1.0a4/guile/interface/cloud/source_upload.py +734 -0
- guile_agent-0.1.0a4/guile/interface/cloud/spec.py +1148 -0
- guile_agent-0.1.0a4/guile/interface/cloud/workspaces.py +291 -0
- guile_agent-0.1.0a4/guile/interface/completions.py +373 -0
- guile_agent-0.1.0a4/guile/interface/environment.py +244 -0
- guile_agent-0.1.0a4/guile/interface/interactive.py +38 -0
- guile_agent-0.1.0a4/guile/interface/main.py +529 -0
- guile_agent-0.1.0a4/guile/interface/platform_cli.py +798 -0
- guile_agent-0.1.0a4/guile/interface/platform_identity.py +46 -0
- guile_agent-0.1.0a4/guile/interface/scan_setup.py +272 -0
- guile_agent-0.1.0a4/guile/interface/terminal_text.py +21 -0
- guile_agent-0.1.0a4/guile/interface/tui/__init__.py +6 -0
- guile_agent-0.1.0a4/guile/interface/tui/backend/__init__.py +7 -0
- guile_agent-0.1.0a4/guile/interface/tui/backend/controller.py +533 -0
- guile_agent-0.1.0a4/guile/interface/tui/backend/live_view.py +139 -0
- guile_agent-0.1.0a4/guile/interface/tui/backend/messages.py +61 -0
- guile_agent-0.1.0a4/guile/interface/tui/backend/projection.py +186 -0
- guile_agent-0.1.0a4/guile/interface/tui/backend/protocol.py +40 -0
- guile_agent-0.1.0a4/guile/interface/tui/backend/server.py +531 -0
- guile_agent-0.1.0a4/guile/interface/tui/cmd/guile-tui/main.go +35 -0
- guile_agent-0.1.0a4/guile/interface/tui/go.mod +32 -0
- guile_agent-0.1.0a4/guile/interface/tui/go.sum +61 -0
- guile_agent-0.1.0a4/guile/interface/tui/history.py +72 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/agents.go +253 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/client.go +250 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/client_test.go +284 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/findings_test.go +299 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/frame_bench_test.go +98 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/input_test.go +216 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/mcp_test.go +105 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/model.go +415 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/model_test.go +1430 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/selection.go +284 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/selection_test.go +185 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/setup.go +519 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/setup_log_test.go +117 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/setup_prompt_test.go +363 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/update.go +712 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/view.go +967 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/vuln_report.go +178 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/vulnerabilities.go +543 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/app/wire.go +473 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/protocol/protocol.go +130 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/protocol/protocol_test.go +22 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/agent_message.go +320 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/agents_graph.go +86 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/chat.go +32 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/code.go +70 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/coverage.go +194 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/coverage_test.go +221 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/dependency.go +105 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/file_edit.go +143 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/helpers.go +112 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/image.go +106 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/image_detect.go +139 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/image_detect_test.go +133 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/image_detect_unix.go +37 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/image_detect_windows.go +19 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/image_kitty.go +202 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/image_kitty_test.go +103 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/markdown_test.go +116 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/mcp.go +95 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/notes.go +111 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/proxy.go +577 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/registry.go +164 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/render_test.go +323 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/report.go +169 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/report_list.go +129 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/respond.go +18 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/scan.go +31 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/simple.go +52 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/styles.go +82 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/terminal.go +183 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/threat_model.go +119 -0
- guile_agent-0.1.0a4/guile/interface/tui/internal/render/todo.go +80 -0
- guile_agent-0.1.0a4/guile/interface/tui/live_view.py +534 -0
- guile_agent-0.1.0a4/guile/interface/tui/runtime.py +468 -0
- guile_agent-0.1.0a4/guile/interface/tui/sidecar.py +191 -0
- guile_agent-0.1.0a4/guile/interface/update_check.py +437 -0
- guile_agent-0.1.0a4/guile/interface/url_safety.py +85 -0
- guile_agent-0.1.0a4/guile/interface/utils.py +2111 -0
- guile_agent-0.1.0a4/guile/interface/viewer/__init__.py +12 -0
- guile_agent-0.1.0a4/guile/interface/viewer/auth.py +262 -0
- guile_agent-0.1.0a4/guile/interface/viewer/cli.py +158 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/index.html +14 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/package-lock.json +4219 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/package.json +35 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/App.tsx +853 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/AddRepositoryDialog.tsx +20 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/EmailReportView.tsx +371 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/EmailVerifyInline.tsx +163 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/FeedbackView.tsx +134 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/IssueSeveritySummary.tsx +77 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/PastRunsView.tsx +176 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/ProCta.tsx +89 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/RunDetails.tsx +223 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/Sidebar.tsx +521 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/TrustToast.tsx +51 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/UpgradeModal.tsx +163 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/AgentDetailModal.tsx +167 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/AgentGraph.tsx +254 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/AgentNode.tsx +48 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/AgentTranscript.tsx +311 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/GraphSkeleton.tsx +70 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/ScanPromptComposer.tsx +315 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/AgentCommsRenderer.tsx +92 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/ApplyPatchRenderer.tsx +124 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/BrowserRenderer.tsx +110 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/ChatBubble.tsx +25 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/CoverageRenderer.tsx +184 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/FallbackRenderer.tsx +36 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/FileEditRenderer.tsx +65 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/FinishRenderer.tsx +32 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/LoadSkillRenderer.tsx +21 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/Markdown.tsx +24 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/McpRenderer.tsx +174 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/NotesRenderer.tsx +93 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/ProxyRenderer.tsx +250 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/PythonRenderer.tsx +68 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/ReportListRenderer.tsx +121 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/RespondRenderer.tsx +20 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/ScanInfoRenderer.tsx +46 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/TerminalRenderer.tsx +131 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/ThinkRenderer.tsx +18 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/ThreatModelRenderer.tsx +122 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/TodoRenderer.tsx +120 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/ToolCard.tsx +100 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/ViewImageRenderer.tsx +53 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/VulnReportRenderer.tsx +114 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/WebSearchRenderer.tsx +24 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/index.ts +210 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/live/tool-renderers/utils.ts +3 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/vulnerability/CodeDiffBlock.tsx +114 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/vulnerability/ContentSection.tsx +27 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/vulnerability/IssueSidebar.tsx +277 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/vulnerability/MdCodeBlock.tsx +132 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/vulnerability/PocBlock.tsx +81 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/components/vulnerability/VulnerabilityDetail.tsx +265 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/data/serverSource.ts +284 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/index.css +326 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/lib/cta.ts +43 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/lib/display-number.ts +12 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/lib/fenced-code.ts +27 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/lib/hljs.ts +32 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/lib/local-run-parser.ts +325 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/lib/target-utils.ts +61 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/lib/utils.ts +124 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/lib/vulnerability-utils.ts +196 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/main.tsx +10 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/stores/auth.ts +16 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/types/events.ts +111 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/src/types/issues.ts +197 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/tsconfig.json +26 -0
- guile_agent-0.1.0a4/guile/interface/viewer/frontend/vite.config.ts +21 -0
- guile_agent-0.1.0a4/guile/interface/viewer/report_pdf.py +705 -0
- guile_agent-0.1.0a4/guile/interface/viewer/server.py +616 -0
- guile_agent-0.1.0a4/guile/interface/viewer/static/assets/index-50oBuhJ6.css +10 -0
- guile_agent-0.1.0a4/guile/interface/viewer/static/assets/index-S63ERJSI.js +512 -0
- guile_agent-0.1.0a4/guile/interface/viewer/static/index.html +15 -0
- guile_agent-0.1.0a4/guile/interface/viewer/transcript.py +104 -0
- guile_agent-0.1.0a4/guile/llm/__init__.py +1 -0
- guile_agent-0.1.0a4/guile/llm/compaction.py +400 -0
- guile_agent-0.1.0a4/guile/llm/compat.py +128 -0
- guile_agent-0.1.0a4/guile/llm/context_budget.py +89 -0
- guile_agent-0.1.0a4/guile/llm/warmup.py +60 -0
- guile_agent-0.1.0a4/guile/report/__init__.py +26 -0
- guile_agent-0.1.0a4/guile/report/coverage.py +443 -0
- guile_agent-0.1.0a4/guile/report/dedupe.py +416 -0
- guile_agent-0.1.0a4/guile/report/pricing.py +54 -0
- guile_agent-0.1.0a4/guile/report/sarif.py +1185 -0
- guile_agent-0.1.0a4/guile/report/state.py +1013 -0
- guile_agent-0.1.0a4/guile/report/usage.py +268 -0
- guile_agent-0.1.0a4/guile/report/writer.py +396 -0
- guile_agent-0.1.0a4/guile/runtime/__init__.py +1 -0
- guile_agent-0.1.0a4/guile/runtime/backends.py +105 -0
- guile_agent-0.1.0a4/guile/runtime/caido_bootstrap.py +115 -0
- guile_agent-0.1.0a4/guile/runtime/caido_handle.py +60 -0
- guile_agent-0.1.0a4/guile/runtime/docker_client.py +292 -0
- guile_agent-0.1.0a4/guile/runtime/proxy.py +94 -0
- guile_agent-0.1.0a4/guile/runtime/session_manager.py +425 -0
- guile_agent-0.1.0a4/guile/runtime/status.py +8 -0
- guile_agent-0.1.0a4/guile/skills/README.md +83 -0
- guile_agent-0.1.0a4/guile/skills/__init__.py +300 -0
- guile_agent-0.1.0a4/guile/skills/analysis/counterevidence.md +185 -0
- guile_agent-0.1.0a4/guile/skills/analysis/fix_verification.md +129 -0
- guile_agent-0.1.0a4/guile/skills/analysis/severity_calibration.md +130 -0
- guile_agent-0.1.0a4/guile/skills/analysis/source_aware_discovery.md +211 -0
- guile_agent-0.1.0a4/guile/skills/cloud/.gitkeep +0 -0
- guile_agent-0.1.0a4/guile/skills/cloud/aws.md +231 -0
- guile_agent-0.1.0a4/guile/skills/cloud/azure.md +262 -0
- guile_agent-0.1.0a4/guile/skills/cloud/gcp.md +194 -0
- guile_agent-0.1.0a4/guile/skills/cloud/kubernetes.md +223 -0
- guile_agent-0.1.0a4/guile/skills/coordination/root_agent.md +105 -0
- guile_agent-0.1.0a4/guile/skills/coordination/source_aware_whitebox.md +47 -0
- guile_agent-0.1.0a4/guile/skills/custom/.gitkeep +0 -0
- guile_agent-0.1.0a4/guile/skills/custom/api_spec_testing.md +61 -0
- guile_agent-0.1.0a4/guile/skills/custom/dependency_cve_scanning.md +341 -0
- guile_agent-0.1.0a4/guile/skills/custom/npx_confusion.md +233 -0
- guile_agent-0.1.0a4/guile/skills/custom/source_aware_sast.md +192 -0
- guile_agent-0.1.0a4/guile/skills/frameworks/django.md +214 -0
- guile_agent-0.1.0a4/guile/skills/frameworks/fastapi.md +191 -0
- guile_agent-0.1.0a4/guile/skills/frameworks/nestjs.md +225 -0
- guile_agent-0.1.0a4/guile/skills/frameworks/nextjs.md +228 -0
- guile_agent-0.1.0a4/guile/skills/protocols/graphql.md +276 -0
- guile_agent-0.1.0a4/guile/skills/protocols/oauth.md +185 -0
- guile_agent-0.1.0a4/guile/skills/reconnaissance/.gitkeep +0 -0
- guile_agent-0.1.0a4/guile/skills/reconnaissance/asset_discovery.md +150 -0
- guile_agent-0.1.0a4/guile/skills/reconnaissance/infrastructure_lifecycle.md +226 -0
- guile_agent-0.1.0a4/guile/skills/scan_modes/deep.md +164 -0
- guile_agent-0.1.0a4/guile/skills/scan_modes/diff.md +86 -0
- guile_agent-0.1.0a4/guile/skills/scan_modes/quick.md +68 -0
- guile_agent-0.1.0a4/guile/skills/scan_modes/standard.md +99 -0
- guile_agent-0.1.0a4/guile/skills/technologies/active_directory.md +233 -0
- guile_agent-0.1.0a4/guile/skills/technologies/auth0.md +188 -0
- guile_agent-0.1.0a4/guile/skills/technologies/electron_desktop_apps.md +181 -0
- guile_agent-0.1.0a4/guile/skills/technologies/firebase.md +263 -0
- guile_agent-0.1.0a4/guile/skills/technologies/grafana_prometheus.md +189 -0
- guile_agent-0.1.0a4/guile/skills/technologies/llm_applications.md +257 -0
- guile_agent-0.1.0a4/guile/skills/technologies/supabase.md +268 -0
- guile_agent-0.1.0a4/guile/skills/tooling/agent_browser.md +551 -0
- guile_agent-0.1.0a4/guile/skills/tooling/ffuf.md +72 -0
- guile_agent-0.1.0a4/guile/skills/tooling/httpx.md +82 -0
- guile_agent-0.1.0a4/guile/skills/tooling/hurl.md +99 -0
- guile_agent-0.1.0a4/guile/skills/tooling/hypothesis.md +100 -0
- guile_agent-0.1.0a4/guile/skills/tooling/katana.md +102 -0
- guile_agent-0.1.0a4/guile/skills/tooling/naabu.md +68 -0
- guile_agent-0.1.0a4/guile/skills/tooling/nmap.md +66 -0
- guile_agent-0.1.0a4/guile/skills/tooling/nuclei.md +67 -0
- guile_agent-0.1.0a4/guile/skills/tooling/python.md +109 -0
- guile_agent-0.1.0a4/guile/skills/tooling/semgrep.md +72 -0
- guile_agent-0.1.0a4/guile/skills/tooling/sqlmap.md +67 -0
- guile_agent-0.1.0a4/guile/skills/tooling/subfinder.md +66 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/agentic_system_security.md +207 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/argument_injection.md +157 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/authentication_jwt.md +166 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/broken_function_level_authorization.md +154 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/browser_security.md +192 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/business_logic.md +178 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/csrf.md +198 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/header_injection.md +216 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/http_request_smuggling.md +255 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/idor.md +217 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/information_disclosure.md +187 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/insecure_deserialization.md +210 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/insecure_file_uploads.md +194 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/llm_prompt_injection.md +187 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/mass_assignment.md +153 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/nosql_injection.md +288 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/open_redirect.md +165 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/path_traversal_lfi_rfi.md +218 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/prototype_pollution.md +142 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/race_conditions.md +181 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/rce.md +250 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/semantic_confusion.md +189 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/sql_injection.md +190 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/ssrf.md +186 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/ssti.md +270 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/subdomain_takeover.md +167 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/weak_password_detection.md +200 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/xss.md +206 -0
- guile_agent-0.1.0a4/guile/skills/vulnerabilities/xxe.md +223 -0
- guile_agent-0.1.0a4/guile/telemetry/README.md +37 -0
- guile_agent-0.1.0a4/guile/telemetry/__init__.py +19 -0
- guile_agent-0.1.0a4/guile/telemetry/_common.py +94 -0
- guile_agent-0.1.0a4/guile/telemetry/logging.py +183 -0
- guile_agent-0.1.0a4/guile/telemetry/posthog.py +191 -0
- guile_agent-0.1.0a4/guile/telemetry/scarf.py +150 -0
- guile_agent-0.1.0a4/guile/tools/__init__.py +11 -0
- guile_agent-0.1.0a4/guile/tools/agent_browser/README.md +12 -0
- guile_agent-0.1.0a4/guile/tools/agents_graph/__init__.py +0 -0
- guile_agent-0.1.0a4/guile/tools/agents_graph/tools.py +859 -0
- guile_agent-0.1.0a4/guile/tools/apply_patch/README.md +10 -0
- guile_agent-0.1.0a4/guile/tools/coverage/__init__.py +1 -0
- guile_agent-0.1.0a4/guile/tools/coverage/tools.py +535 -0
- guile_agent-0.1.0a4/guile/tools/finish/__init__.py +0 -0
- guile_agent-0.1.0a4/guile/tools/finish/tool.py +356 -0
- guile_agent-0.1.0a4/guile/tools/load_skill/__init__.py +0 -0
- guile_agent-0.1.0a4/guile/tools/load_skill/tool.py +36 -0
- guile_agent-0.1.0a4/guile/tools/mcp/__init__.py +63 -0
- guile_agent-0.1.0a4/guile/tools/mcp/agent_tools.py +181 -0
- guile_agent-0.1.0a4/guile/tools/mcp/client.py +374 -0
- guile_agent-0.1.0a4/guile/tools/mcp/config.py +89 -0
- guile_agent-0.1.0a4/guile/tools/mcp/failures.py +150 -0
- guile_agent-0.1.0a4/guile/tools/mcp/loader.py +133 -0
- guile_agent-0.1.0a4/guile/tools/mcp/naming.py +29 -0
- guile_agent-0.1.0a4/guile/tools/mcp/registry.py +287 -0
- guile_agent-0.1.0a4/guile/tools/mcp/session.py +810 -0
- guile_agent-0.1.0a4/guile/tools/notes/__init__.py +0 -0
- guile_agent-0.1.0a4/guile/tools/notes/tools.py +494 -0
- guile_agent-0.1.0a4/guile/tools/nullish.py +23 -0
- guile_agent-0.1.0a4/guile/tools/output_store.py +166 -0
- guile_agent-0.1.0a4/guile/tools/proxy/__init__.py +0 -0
- guile_agent-0.1.0a4/guile/tools/proxy/caido_api.py +767 -0
- guile_agent-0.1.0a4/guile/tools/proxy/tools.py +653 -0
- guile_agent-0.1.0a4/guile/tools/reporting/__init__.py +0 -0
- guile_agent-0.1.0a4/guile/tools/reporting/tool.py +2254 -0
- guile_agent-0.1.0a4/guile/tools/respond/__init__.py +6 -0
- guile_agent-0.1.0a4/guile/tools/respond/tool.py +114 -0
- guile_agent-0.1.0a4/guile/tools/shell/README.md +32 -0
- guile_agent-0.1.0a4/guile/tools/thinking/__init__.py +0 -0
- guile_agent-0.1.0a4/guile/tools/thinking/tool.py +37 -0
- guile_agent-0.1.0a4/guile/tools/threat_model/__init__.py +1 -0
- guile_agent-0.1.0a4/guile/tools/threat_model/tools.py +638 -0
- guile_agent-0.1.0a4/guile/tools/todo/__init__.py +0 -0
- guile_agent-0.1.0a4/guile/tools/todo/tools.py +606 -0
- guile_agent-0.1.0a4/guile/tools/view_image/README.md +17 -0
- guile_agent-0.1.0a4/guile/tools/web_search/__init__.py +0 -0
- guile_agent-0.1.0a4/guile/tools/web_search/tool.py +413 -0
- guile_agent-0.1.0a4/guile/utils/__init__.py +0 -0
- guile_agent-0.1.0a4/guile/utils/api_spec.py +312 -0
- guile_agent-0.1.0a4/guile/utils/resource_paths.py +13 -0
- guile_agent-0.1.0a4/guile/utils/secret_files.py +48 -0
- guile_agent-0.1.0a4/guile/version.py +79 -0
- guile_agent-0.1.0a4/guile.spec +281 -0
- guile_agent-0.1.0a4/pyproject.toml +426 -0
- guile_agent-0.1.0a4/scripts/build.sh +112 -0
- guile_agent-0.1.0a4/scripts/docker.sh +16 -0
- guile_agent-0.1.0a4/scripts/install.sh +354 -0
- guile_agent-0.1.0a4/scripts/tui_sidecar_hook.py +68 -0
- guile_agent-0.1.0a4/scripts/validate_release_candidate.py +344 -0
- guile_agent-0.1.0a4/scripts/verify-sandbox-lock.py +317 -0
- guile_agent-0.1.0a4/scripts/verify_rebrand.py +160 -0
- guile_agent-0.1.0a4/scripts/verify_release_contract.py +231 -0
- guile_agent-0.1.0a4/skills/api-security-testing/SKILL.md +61 -0
- guile_agent-0.1.0a4/skills/application-security-testing/SKILL.md +66 -0
- guile_agent-0.1.0a4/skills/ci-security-scanning-with-guile/SKILL.md +149 -0
- guile_agent-0.1.0a4/skills/find-security-vulnerabilities-in-code/SKILL.md +62 -0
- guile_agent-0.1.0a4/skills/fix-security-vulnerabilities-with-guile/SKILL.md +77 -0
- guile_agent-0.1.0a4/skills/managed-pentesting-with-guile/SKILL.md +321 -0
- guile_agent-0.1.0a4/skills/owasp-top-10-testing/SKILL.md +64 -0
- guile_agent-0.1.0a4/skills/penetration-testing-with-guile/SKILL.md +161 -0
- guile_agent-0.1.0a4/skills/web-app-penetration-testing/SKILL.md +54 -0
- guile_agent-0.1.0a4/tests/__init__.py +0 -0
- guile_agent-0.1.0a4/tests/conftest.py +53 -0
- guile_agent-0.1.0a4/tests/test_agent_factory_shell.py +117 -0
- guile_agent-0.1.0a4/tests/test_agent_factory_tool_arguments.py +237 -0
- guile_agent-0.1.0a4/tests/test_agent_graph_coordination.py +258 -0
- guile_agent-0.1.0a4/tests/test_agent_tool_registration.py +130 -0
- guile_agent-0.1.0a4/tests/test_api_spec.py +290 -0
- guile_agent-0.1.0a4/tests/test_api_spec_targets.py +152 -0
- guile_agent-0.1.0a4/tests/test_auth_cli.py +106 -0
- guile_agent-0.1.0a4/tests/test_bedrock_model_compat.py +312 -0
- guile_agent-0.1.0a4/tests/test_caido_bootstrap.py +81 -0
- guile_agent-0.1.0a4/tests/test_caido_handle.py +103 -0
- guile_agent-0.1.0a4/tests/test_cli_mcp_config.py +88 -0
- guile_agent-0.1.0a4/tests/test_cli_target_list.py +247 -0
- guile_agent-0.1.0a4/tests/test_cloud_cli.py +3639 -0
- guile_agent-0.1.0a4/tests/test_cloud_cli_runtime.py +1122 -0
- guile_agent-0.1.0a4/tests/test_cloud_idempotency.py +205 -0
- guile_agent-0.1.0a4/tests/test_cloud_payment_proxy.py +142 -0
- guile_agent-0.1.0a4/tests/test_cloud_session.py +166 -0
- guile_agent-0.1.0a4/tests/test_cloud_source_upload.py +698 -0
- guile_agent-0.1.0a4/tests/test_cloud_wallet.py +118 -0
- guile_agent-0.1.0a4/tests/test_codex_auth.py +309 -0
- guile_agent-0.1.0a4/tests/test_codex_streaming.py +225 -0
- guile_agent-0.1.0a4/tests/test_compaction.py +333 -0
- guile_agent-0.1.0a4/tests/test_completions.py +164 -0
- guile_agent-0.1.0a4/tests/test_config_loader.py +416 -0
- guile_agent-0.1.0a4/tests/test_context_budget.py +65 -0
- guile_agent-0.1.0a4/tests/test_cost_tracking.py +259 -0
- guile_agent-0.1.0a4/tests/test_coverage_tool.py +284 -0
- guile_agent-0.1.0a4/tests/test_dedupe_model.py +150 -0
- guile_agent-0.1.0a4/tests/test_disable_streaming.py +330 -0
- guile_agent-0.1.0a4/tests/test_docker_client_delete.py +92 -0
- guile_agent-0.1.0a4/tests/test_e2e_budget_lifecycle.py +372 -0
- guile_agent-0.1.0a4/tests/test_execution.py +1310 -0
- guile_agent-0.1.0a4/tests/test_execution_transient_retry.py +174 -0
- guile_agent-0.1.0a4/tests/test_fenced_code.py +78 -0
- guile_agent-0.1.0a4/tests/test_finish_coverage_gate.py +65 -0
- guile_agent-0.1.0a4/tests/test_go_tui_runtime.py +1029 -0
- guile_agent-0.1.0a4/tests/test_hooks.py +493 -0
- guile_agent-0.1.0a4/tests/test_import_warmup.py +108 -0
- guile_agent-0.1.0a4/tests/test_inputs.py +444 -0
- guile_agent-0.1.0a4/tests/test_install_script.py +154 -0
- guile_agent-0.1.0a4/tests/test_list_reports.py +462 -0
- guile_agent-0.1.0a4/tests/test_llm_extra_headers.py +97 -0
- guile_agent-0.1.0a4/tests/test_local_sources.py +249 -0
- guile_agent-0.1.0a4/tests/test_mcp_client.py +1636 -0
- guile_agent-0.1.0a4/tests/test_mcp_resilience.py +521 -0
- guile_agent-0.1.0a4/tests/test_model_retry.py +90 -0
- guile_agent-0.1.0a4/tests/test_models.py +164 -0
- guile_agent-0.1.0a4/tests/test_notes.py +133 -0
- guile_agent-0.1.0a4/tests/test_optional_deps.py +27 -0
- guile_agent-0.1.0a4/tests/test_output_store.py +156 -0
- guile_agent-0.1.0a4/tests/test_packaging.py +88 -0
- guile_agent-0.1.0a4/tests/test_pricing.py +123 -0
- guile_agent-0.1.0a4/tests/test_provider_hints.py +74 -0
- guile_agent-0.1.0a4/tests/test_proxy_bypass.py +78 -0
- guile_agent-0.1.0a4/tests/test_proxy_client.py +229 -0
- guile_agent-0.1.0a4/tests/test_report_coverage.py +264 -0
- guile_agent-0.1.0a4/tests/test_report_pdf.py +244 -0
- guile_agent-0.1.0a4/tests/test_report_writer.py +267 -0
- guile_agent-0.1.0a4/tests/test_reporting_fields.py +1759 -0
- guile_agent-0.1.0a4/tests/test_reporting_tool.py +48 -0
- guile_agent-0.1.0a4/tests/test_respond_to_user.py +94 -0
- guile_agent-0.1.0a4/tests/test_rsk010_git_env_hardening.py +321 -0
- guile_agent-0.1.0a4/tests/test_rsk011_repo_url_redaction.py +418 -0
- guile_agent-0.1.0a4/tests/test_runner_interrupt.py +108 -0
- guile_agent-0.1.0a4/tests/test_runner_mcp.py +188 -0
- guile_agent-0.1.0a4/tests/test_runner_rate_limit.py +94 -0
- guile_agent-0.1.0a4/tests/test_runner_root_prompt.py +270 -0
- guile_agent-0.1.0a4/tests/test_runner_teardown.py +93 -0
- guile_agent-0.1.0a4/tests/test_sarif.py +373 -0
- guile_agent-0.1.0a4/tests/test_sarif_stride.py +116 -0
- guile_agent-0.1.0a4/tests/test_sec008_git_clone_injection.py +319 -0
- guile_agent-0.1.0a4/tests/test_secret_files.py +65 -0
- guile_agent-0.1.0a4/tests/test_session_entries.py +377 -0
- guile_agent-0.1.0a4/tests/test_session_fd.py +144 -0
- guile_agent-0.1.0a4/tests/test_skill_dir_extension.py +273 -0
- guile_agent-0.1.0a4/tests/test_state_coverage_artifact.py +66 -0
- guile_agent-0.1.0a4/tests/test_state_repo_context.py +94 -0
- guile_agent-0.1.0a4/tests/test_stream_idle_timeout.py +173 -0
- guile_agent-0.1.0a4/tests/test_telemetry_errors.py +125 -0
- guile_agent-0.1.0a4/tests/test_telemetry_resume.py +89 -0
- guile_agent-0.1.0a4/tests/test_threat_model_tool.py +367 -0
- guile_agent-0.1.0a4/tests/test_todo.py +105 -0
- guile_agent-0.1.0a4/tests/test_tool_call_ids.py +249 -0
- guile_agent-0.1.0a4/tests/test_tool_call_limits.py +189 -0
- guile_agent-0.1.0a4/tests/test_tui_backend_controller.py +573 -0
- guile_agent-0.1.0a4/tests/test_tui_backend_server.py +586 -0
- guile_agent-0.1.0a4/tests/test_tui_protocol_conformance.py +49 -0
- guile_agent-0.1.0a4/tests/test_tui_resume_history.py +360 -0
- guile_agent-0.1.0a4/tests/test_unknown_tool_recovery.py +155 -0
- guile_agent-0.1.0a4/tests/test_unraisable_filter.py +53 -0
- guile_agent-0.1.0a4/tests/test_update_check.py +234 -0
- guile_agent-0.1.0a4/tests/test_usage_subscription.py +46 -0
- guile_agent-0.1.0a4/tests/test_version_contract.py +392 -0
- guile_agent-0.1.0a4/tests/test_viewer.py +753 -0
- guile_agent-0.1.0a4/tests/test_viewer_auth.py +167 -0
- guile_agent-0.1.0a4/tests/test_viewer_runs_gating.py +89 -0
- guile_agent-0.1.0a4/tests/test_wait_dedupe.py +128 -0
- guile_agent-0.1.0a4/tests/test_web_search.py +416 -0
- guile_agent-0.1.0a4/tests/test_workspace_files.py +115 -0
- guile_agent-0.1.0a4/uv.lock +2746 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Guile Project Rules and Agent Guidelines
|
|
3
|
+
globs: **/*
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Guile — Agent Rules & Guidelines
|
|
8
|
+
|
|
9
|
+
1. **Project Identity**: This project is **Guile**, an independent commercial hard fork of the Strix autonomous security-testing engine.
|
|
10
|
+
|
|
11
|
+
2. **Mandatory Context Reading**:
|
|
12
|
+
Before performing meaningful work, agents MUST read:
|
|
13
|
+
- `docs/context/PROJECT_CONTEXT.md`
|
|
14
|
+
- `docs/context/CURRENT_STATE.md`
|
|
15
|
+
- `docs/context/DECISIONS.md`
|
|
16
|
+
|
|
17
|
+
3. **Architecture & Security Context**:
|
|
18
|
+
For architecture, runtime, or security-related tasks, additionally read:
|
|
19
|
+
- `docs/context/ARCHITECTURE.md`
|
|
20
|
+
- `docs/context/SECURITY_MODEL.md`
|
|
21
|
+
- `docs/context/EXECUTION_FLOW.md`
|
|
22
|
+
|
|
23
|
+
4. **Execution Path Awareness**:
|
|
24
|
+
Before modifying inherited engine behavior, trace and understand the full execution path across the CLI, runner, agent coordinator, and Docker sandbox.
|
|
25
|
+
|
|
26
|
+
5. **Preserve Legal Attribution**:
|
|
27
|
+
Never remove the Apache-2.0 `LICENSE`, copyright notices, or third-party attributions merely for rebranding.
|
|
28
|
+
|
|
29
|
+
6. **No Blind String Replacement**:
|
|
30
|
+
Never perform broad, global `strix -> guile` replacements without deep dependency and AST analysis. Internal technical schemas and tool protocols must remain intact.
|
|
31
|
+
|
|
32
|
+
7. **Security & Sandbox Discipline**:
|
|
33
|
+
Never weaken sandbox, network, or capability controls without documenting the rationale and logging an architectural decision.
|
|
34
|
+
|
|
35
|
+
8. **Context Synchronization**:
|
|
36
|
+
Update context documents in `docs/context/` whenever meaningful changes occur:
|
|
37
|
+
- Product/priority changes -> `CURRENT_STATE.md` / `ROADMAP.md`
|
|
38
|
+
- Architecture changes -> `ARCHITECTURE.md` / `DECISIONS.md`
|
|
39
|
+
- Security changes -> `SECURITY_MODEL.md` / `KNOWN_RISKS.md`
|
|
40
|
+
- Dependency changes -> `DEPENDENCIES.md`
|
|
41
|
+
- Branding changes -> `BRANDING_AUDIT.md`
|
|
42
|
+
|
|
43
|
+
9. **State Integrity**:
|
|
44
|
+
- `CURRENT_STATE.md` represents current operational truth and must not become a chronological history log.
|
|
45
|
+
- `DECISIONS.md` records durable, non-speculative decisions.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Create a report to help us improve
|
|
4
|
+
title: "[BUG]"
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ''
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
**Describe the bug**
|
|
11
|
+
A clear and concise description of what the bug is.
|
|
12
|
+
|
|
13
|
+
**To Reproduce**
|
|
14
|
+
Steps to reproduce the behavior:
|
|
15
|
+
1.
|
|
16
|
+
2.
|
|
17
|
+
3.
|
|
18
|
+
4.
|
|
19
|
+
|
|
20
|
+
**Expected behavior**
|
|
21
|
+
A clear and concise description of what you expected to happen.
|
|
22
|
+
|
|
23
|
+
**Screenshots**
|
|
24
|
+
If applicable, add screenshots to help explain your problem.
|
|
25
|
+
|
|
26
|
+
**System Information:**
|
|
27
|
+
- OS: [e.g. Ubuntu 22.04]
|
|
28
|
+
- Guile Version or Commit: [e.g. 0.1.0]
|
|
29
|
+
- Python Version: [e.g. 3.12]
|
|
30
|
+
- LLM Used: [e.g. GPT-5, Claude Sonnet 4.6]
|
|
31
|
+
|
|
32
|
+
**Additional context**
|
|
33
|
+
Add any other context about the problem here.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: Suggest an idea for this project
|
|
4
|
+
title: "[FEATURE]"
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: ''
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
**Is your feature request related to a problem? Please describe.**
|
|
11
|
+
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
12
|
+
|
|
13
|
+
**Describe the solution you'd like**
|
|
14
|
+
A clear and concise description of what you want to happen.
|
|
15
|
+
|
|
16
|
+
**Describe alternatives you've considered**
|
|
17
|
+
A clear and concise description of any alternative solutions or features you've considered.
|
|
18
|
+
|
|
19
|
+
**Additional context**
|
|
20
|
+
Add any other context or screenshots about the feature request here.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
name: Build & Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build:
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: false
|
|
16
|
+
matrix:
|
|
17
|
+
include:
|
|
18
|
+
- os: macos-latest
|
|
19
|
+
target: macos-arm64
|
|
20
|
+
wheel-platform: macosx_11_0_arm64
|
|
21
|
+
- os: macos-15-intel
|
|
22
|
+
target: macos-x86_64
|
|
23
|
+
wheel-platform: macosx_11_0_x86_64
|
|
24
|
+
- os: ubuntu-22.04
|
|
25
|
+
target: linux-x86_64
|
|
26
|
+
wheel-platform: manylinux_2_17_x86_64
|
|
27
|
+
- os: ubuntu-22.04-arm
|
|
28
|
+
target: linux-arm64
|
|
29
|
+
wheel-platform: manylinux_2_17_aarch64
|
|
30
|
+
- os: windows-latest
|
|
31
|
+
target: windows-x86_64
|
|
32
|
+
wheel-platform: win_amd64
|
|
33
|
+
|
|
34
|
+
runs-on: ${{ matrix.os }}
|
|
35
|
+
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
38
|
+
with:
|
|
39
|
+
persist-credentials: false
|
|
40
|
+
|
|
41
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
42
|
+
with:
|
|
43
|
+
python-version: '3.12'
|
|
44
|
+
|
|
45
|
+
- uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
|
|
46
|
+
|
|
47
|
+
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
|
|
48
|
+
with:
|
|
49
|
+
go-version: '1.24.x'
|
|
50
|
+
check-latest: true
|
|
51
|
+
cache-dependency-path: guile/interface/tui/go.sum
|
|
52
|
+
|
|
53
|
+
- name: Verify Release Contract
|
|
54
|
+
run: |
|
|
55
|
+
uv run python scripts/verify_release_contract.py
|
|
56
|
+
|
|
57
|
+
- name: Build
|
|
58
|
+
shell: bash
|
|
59
|
+
env:
|
|
60
|
+
GUILE_WHEEL_PLATFORM_TAG: ${{ matrix.wheel-platform }}
|
|
61
|
+
run: |
|
|
62
|
+
uv sync --frozen
|
|
63
|
+
uv build --wheel
|
|
64
|
+
uv run python -c 'import glob, os, sys, zipfile; wheels = glob.glob("dist/*.whl"); assert len(wheels) == 1, wheels; archive = zipfile.ZipFile(wheels[0]); tui = "guile/bin/guile-tui.exe" if sys.platform == "win32" else "guile/bin/guile-tui"; assert tui in archive.namelist(); metadata = archive.read(next(name for name in archive.namelist() if name.endswith(".dist-info/WHEEL"))).decode(); assert "Root-Is-Purelib: false" in metadata; assert "Tag: py3-none-" + os.environ["GUILE_WHEEL_PLATFORM_TAG"] in metadata'
|
|
65
|
+
|
|
66
|
+
uv run pyinstaller guile.spec --noconfirm
|
|
67
|
+
|
|
68
|
+
if [[ "${{ runner.os }}" == "Windows" ]]; then
|
|
69
|
+
PYI_BINARY="dist/guile.exe"
|
|
70
|
+
TUI_NAME="guile-tui.exe"
|
|
71
|
+
dist/guile.exe --version
|
|
72
|
+
else
|
|
73
|
+
PYI_BINARY="dist/guile"
|
|
74
|
+
TUI_NAME="guile-tui"
|
|
75
|
+
dist/guile --version
|
|
76
|
+
fi
|
|
77
|
+
uv run pyi-archive_viewer -l "$PYI_BINARY" | grep -E "guile[/\\]+bin[/\\]+$TUI_NAME" >/dev/null
|
|
78
|
+
|
|
79
|
+
if [[ "${{ matrix.target }}" == "linux-arm64" ]]; then
|
|
80
|
+
file dist/guile
|
|
81
|
+
file dist/guile | grep -q "ARM aarch64" || {
|
|
82
|
+
echo "::error::linux-arm64 artifact is not an ARM aarch64 binary"
|
|
83
|
+
exit 1
|
|
84
|
+
}
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
VERSION=$(python3 -c "import tomllib, pathlib; print(tomllib.loads(pathlib.Path('pyproject.toml').read_text(encoding='utf-8'))['project']['version'])")
|
|
88
|
+
mkdir -p dist/release
|
|
89
|
+
|
|
90
|
+
if [[ "${{ runner.os }}" == "Windows" ]]; then
|
|
91
|
+
cp dist/guile.exe "dist/release/guile-${VERSION}-${{ matrix.target }}.exe"
|
|
92
|
+
(cd dist/release && 7z a "guile-${VERSION}-${{ matrix.target }}.zip" "guile-${VERSION}-${{ matrix.target }}.exe")
|
|
93
|
+
else
|
|
94
|
+
cp dist/guile "dist/release/guile-${VERSION}-${{ matrix.target }}"
|
|
95
|
+
chmod +x "dist/release/guile-${VERSION}-${{ matrix.target }}"
|
|
96
|
+
tar -C dist/release -czvf "dist/release/guile-${VERSION}-${{ matrix.target }}.tar.gz" "guile-${VERSION}-${{ matrix.target }}"
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
100
|
+
with:
|
|
101
|
+
name: guile-${{ matrix.target }}
|
|
102
|
+
path: |
|
|
103
|
+
dist/release/*.tar.gz
|
|
104
|
+
dist/release/*.zip
|
|
105
|
+
dist/*.whl
|
|
106
|
+
if-no-files-found: error
|
|
107
|
+
|
|
108
|
+
release:
|
|
109
|
+
needs: build
|
|
110
|
+
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
111
|
+
runs-on: ubuntu-latest
|
|
112
|
+
permissions:
|
|
113
|
+
contents: write
|
|
114
|
+
|
|
115
|
+
steps:
|
|
116
|
+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
|
|
117
|
+
with:
|
|
118
|
+
path: release
|
|
119
|
+
merge-multiple: true
|
|
120
|
+
|
|
121
|
+
- name: Create Release
|
|
122
|
+
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2.6.2
|
|
123
|
+
with:
|
|
124
|
+
prerelease: true
|
|
125
|
+
generate_release_notes: true
|
|
126
|
+
files: release/**
|
|
127
|
+
|
|
128
|
+
publish-pypi:
|
|
129
|
+
needs: build
|
|
130
|
+
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
131
|
+
runs-on: ubuntu-latest
|
|
132
|
+
permissions:
|
|
133
|
+
contents: read
|
|
134
|
+
id-token: write
|
|
135
|
+
|
|
136
|
+
steps:
|
|
137
|
+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
|
|
138
|
+
with:
|
|
139
|
+
path: dist
|
|
140
|
+
merge-multiple: true
|
|
141
|
+
|
|
142
|
+
- name: Publish to PyPI
|
|
143
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
144
|
+
with:
|
|
145
|
+
packages-dir: dist/
|
|
146
|
+
print-hash: true
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
name: Docker Sandbox CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
- 'security/*'
|
|
8
|
+
pull_request:
|
|
9
|
+
branches:
|
|
10
|
+
- main
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
validate-and-build:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
permissions:
|
|
20
|
+
contents: read
|
|
21
|
+
outputs:
|
|
22
|
+
version: ${{ steps.meta.outputs.version }}
|
|
23
|
+
short_sha: ${{ steps.meta.outputs.short_sha }}
|
|
24
|
+
is_release_tag: ${{ steps.meta.outputs.is_release_tag }}
|
|
25
|
+
|
|
26
|
+
steps:
|
|
27
|
+
- name: Checkout Code
|
|
28
|
+
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
29
|
+
with:
|
|
30
|
+
persist-credentials: false
|
|
31
|
+
|
|
32
|
+
- name: Setup Python
|
|
33
|
+
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
34
|
+
with:
|
|
35
|
+
python-version: '3.12'
|
|
36
|
+
|
|
37
|
+
- name: Setup uv
|
|
38
|
+
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
|
|
39
|
+
|
|
40
|
+
- name: Validate Sandbox Supply-Chain Lock
|
|
41
|
+
run: |
|
|
42
|
+
uv sync --frozen
|
|
43
|
+
uv run python scripts/verify-sandbox-lock.py
|
|
44
|
+
|
|
45
|
+
- name: Run Focused Release & Version Tests
|
|
46
|
+
run: |
|
|
47
|
+
uv run pytest tests/test_version_contract.py tests/test_proxy_bypass.py
|
|
48
|
+
|
|
49
|
+
- name: Verify Release Tag & Version Contract
|
|
50
|
+
id: meta
|
|
51
|
+
run: |
|
|
52
|
+
uv run python scripts/verify_release_contract.py
|
|
53
|
+
|
|
54
|
+
- name: Set up Docker Buildx
|
|
55
|
+
uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1
|
|
56
|
+
|
|
57
|
+
- name: Build Docker Image (Validation)
|
|
58
|
+
uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0
|
|
59
|
+
with:
|
|
60
|
+
context: .
|
|
61
|
+
file: containers/Dockerfile
|
|
62
|
+
push: false
|
|
63
|
+
build-args: |
|
|
64
|
+
BUILD_VERSION=${{ steps.meta.outputs.version }}
|
|
65
|
+
BUILD_REVISION=${{ github.sha }}
|
|
66
|
+
tags: |
|
|
67
|
+
ghcr.io/guile-security/guile-sandbox:${{ steps.meta.outputs.version }}
|
|
68
|
+
ghcr.io/guile-security/guile-sandbox:${{ steps.meta.outputs.short_sha }}
|
|
69
|
+
labels: |
|
|
70
|
+
org.opencontainers.image.title=Guile Sandbox
|
|
71
|
+
org.opencontainers.image.version=${{ steps.meta.outputs.version }}
|
|
72
|
+
org.opencontainers.image.revision=${{ github.sha }}
|
|
73
|
+
org.opencontainers.image.source=https://github.com/guile-security/guile
|
|
74
|
+
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
name: Publish Release (PyPI & GHCR)
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
release_tag:
|
|
10
|
+
description: "Existing release tag to publish (e.g. v0.1.0a2)"
|
|
11
|
+
required: true
|
|
12
|
+
type: string
|
|
13
|
+
publish_target:
|
|
14
|
+
description: "Release destination to publish"
|
|
15
|
+
required: true
|
|
16
|
+
type: choice
|
|
17
|
+
default: "pypi"
|
|
18
|
+
options:
|
|
19
|
+
- "pypi"
|
|
20
|
+
- "ghcr"
|
|
21
|
+
- "both"
|
|
22
|
+
|
|
23
|
+
permissions:
|
|
24
|
+
contents: read
|
|
25
|
+
|
|
26
|
+
jobs:
|
|
27
|
+
release-preflight:
|
|
28
|
+
name: Release Preflight & Version Verification
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
permissions:
|
|
31
|
+
contents: read
|
|
32
|
+
outputs:
|
|
33
|
+
version: ${{ steps.meta.outputs.version }}
|
|
34
|
+
commit_sha: ${{ steps.meta.outputs.commit_sha }}
|
|
35
|
+
short_sha: ${{ steps.meta.outputs.short_sha }}
|
|
36
|
+
ref: ${{ steps.meta.outputs.ref }}
|
|
37
|
+
is_release_tag: ${{ steps.meta.outputs.is_release_tag }}
|
|
38
|
+
publish_pypi: ${{ steps.meta.outputs.publish_pypi }}
|
|
39
|
+
publish_ghcr: ${{ steps.meta.outputs.publish_ghcr }}
|
|
40
|
+
|
|
41
|
+
steps:
|
|
42
|
+
- name: Checkout Code
|
|
43
|
+
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
44
|
+
with:
|
|
45
|
+
fetch-depth: 0
|
|
46
|
+
persist-credentials: false
|
|
47
|
+
|
|
48
|
+
- name: Setup Python
|
|
49
|
+
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
50
|
+
with:
|
|
51
|
+
python-version: '3.12'
|
|
52
|
+
|
|
53
|
+
- name: Setup uv
|
|
54
|
+
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
|
|
55
|
+
|
|
56
|
+
- name: Verify Release Tag & Version Contract
|
|
57
|
+
id: meta
|
|
58
|
+
env:
|
|
59
|
+
INPUT_RELEASE_TAG: ${{ inputs.release_tag }}
|
|
60
|
+
INPUT_PUBLISH_TARGET: ${{ inputs.publish_target }}
|
|
61
|
+
run: |
|
|
62
|
+
uv sync --frozen
|
|
63
|
+
uv run python scripts/verify_release_contract.py
|
|
64
|
+
|
|
65
|
+
- name: Switch to Exact Tag Checkout
|
|
66
|
+
run: |
|
|
67
|
+
git checkout "${{ steps.meta.outputs.ref }}"
|
|
68
|
+
uv sync --frozen
|
|
69
|
+
|
|
70
|
+
- name: Validate Rebrand Integrity
|
|
71
|
+
run: |
|
|
72
|
+
uv run python scripts/verify_rebrand.py
|
|
73
|
+
|
|
74
|
+
- name: Validate Sandbox Supply-Chain Lock
|
|
75
|
+
run: |
|
|
76
|
+
uv run python scripts/verify-sandbox-lock.py
|
|
77
|
+
|
|
78
|
+
- name: Run Focused Release Tests
|
|
79
|
+
run: |
|
|
80
|
+
uv run pytest tests/test_version_contract.py tests/test_bedrock_model_compat.py tests/test_proxy_bypass.py -q
|
|
81
|
+
|
|
82
|
+
build-python-dist:
|
|
83
|
+
name: Build Python Distribution (sdist & wheel)
|
|
84
|
+
needs: release-preflight
|
|
85
|
+
if: needs.release-preflight.outputs.is_release_tag == 'true' && needs.release-preflight.outputs.publish_pypi == 'true'
|
|
86
|
+
runs-on: ubuntu-latest
|
|
87
|
+
permissions:
|
|
88
|
+
contents: read
|
|
89
|
+
|
|
90
|
+
steps:
|
|
91
|
+
- name: Checkout Exact Tag
|
|
92
|
+
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
93
|
+
with:
|
|
94
|
+
ref: ${{ needs.release-preflight.outputs.ref }}
|
|
95
|
+
persist-credentials: false
|
|
96
|
+
|
|
97
|
+
- name: Setup Python
|
|
98
|
+
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
99
|
+
with:
|
|
100
|
+
python-version: '3.12'
|
|
101
|
+
|
|
102
|
+
- name: Setup uv
|
|
103
|
+
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
|
|
104
|
+
|
|
105
|
+
- name: Setup Go Toolchain
|
|
106
|
+
uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
|
|
107
|
+
with:
|
|
108
|
+
go-version: '1.24.x'
|
|
109
|
+
check-latest: true
|
|
110
|
+
cache-dependency-path: guile/interface/tui/go.sum
|
|
111
|
+
|
|
112
|
+
- name: Build sdist and wheel
|
|
113
|
+
env:
|
|
114
|
+
GUILE_WHEEL_PLATFORM_TAG: manylinux_2_17_x86_64
|
|
115
|
+
run: |
|
|
116
|
+
uv sync --frozen
|
|
117
|
+
rm -rf dist
|
|
118
|
+
uv build
|
|
119
|
+
uv run python -c 'import glob, zipfile; wheels = glob.glob("dist/*.whl"); assert len(wheels) == 1, wheels; archive = zipfile.ZipFile(wheels[0]); assert "guile/bin/guile-tui" in archive.namelist(); metadata = archive.read(next(name for name in archive.namelist() if name.endswith(".dist-info/WHEEL"))).decode(); assert "Root-Is-Purelib: false" in metadata'
|
|
120
|
+
|
|
121
|
+
- name: Upload Python Distributions
|
|
122
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
123
|
+
with:
|
|
124
|
+
name: python-dist
|
|
125
|
+
path: dist/*
|
|
126
|
+
if-no-files-found: error
|
|
127
|
+
|
|
128
|
+
publish-pypi:
|
|
129
|
+
name: Publish to PyPI (OIDC Trusted Publisher)
|
|
130
|
+
needs: [release-preflight, build-python-dist]
|
|
131
|
+
if: needs.release-preflight.outputs.is_release_tag == 'true' && needs.release-preflight.outputs.publish_pypi == 'true'
|
|
132
|
+
runs-on: ubuntu-latest
|
|
133
|
+
environment:
|
|
134
|
+
name: pypi
|
|
135
|
+
url: https://pypi.org/p/guile-agent
|
|
136
|
+
permissions:
|
|
137
|
+
id-token: write
|
|
138
|
+
|
|
139
|
+
steps:
|
|
140
|
+
- name: Download Python Distributions
|
|
141
|
+
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
|
|
142
|
+
with:
|
|
143
|
+
name: python-dist
|
|
144
|
+
path: dist/
|
|
145
|
+
|
|
146
|
+
- name: Publish Package to PyPI
|
|
147
|
+
uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4
|
|
148
|
+
with:
|
|
149
|
+
packages-dir: dist/
|
|
150
|
+
skip-existing: false
|
|
151
|
+
|
|
152
|
+
publish-ghcr:
|
|
153
|
+
name: Build & Publish Sandbox Image to GHCR
|
|
154
|
+
needs: release-preflight
|
|
155
|
+
if: needs.release-preflight.outputs.is_release_tag == 'true' && needs.release-preflight.outputs.publish_ghcr == 'true'
|
|
156
|
+
runs-on: ubuntu-latest
|
|
157
|
+
permissions:
|
|
158
|
+
contents: read
|
|
159
|
+
packages: write
|
|
160
|
+
|
|
161
|
+
steps:
|
|
162
|
+
- name: Checkout Exact Tag
|
|
163
|
+
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
|
164
|
+
with:
|
|
165
|
+
ref: ${{ needs.release-preflight.outputs.ref }}
|
|
166
|
+
persist-credentials: false
|
|
167
|
+
|
|
168
|
+
- name: Set up Docker Buildx
|
|
169
|
+
uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1
|
|
170
|
+
|
|
171
|
+
- name: Log in to GitHub Container Registry
|
|
172
|
+
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
|
|
173
|
+
with:
|
|
174
|
+
registry: ghcr.io
|
|
175
|
+
username: ${{ github.actor }}
|
|
176
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
177
|
+
|
|
178
|
+
- name: Build and Push Docker Image
|
|
179
|
+
uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0
|
|
180
|
+
with:
|
|
181
|
+
context: .
|
|
182
|
+
file: containers/Dockerfile
|
|
183
|
+
push: true
|
|
184
|
+
build-args: |
|
|
185
|
+
BUILD_VERSION=${{ needs.release-preflight.outputs.version }}
|
|
186
|
+
BUILD_REVISION=${{ needs.release-preflight.outputs.commit_sha }}
|
|
187
|
+
tags: |
|
|
188
|
+
ghcr.io/guile-security/guile-sandbox:${{ needs.release-preflight.outputs.version }}
|
|
189
|
+
ghcr.io/guile-security/guile-sandbox:${{ needs.release-preflight.outputs.short_sha }}
|
|
190
|
+
labels: |
|
|
191
|
+
org.opencontainers.image.title=Guile Sandbox
|
|
192
|
+
org.opencontainers.image.version=${{ needs.release-preflight.outputs.version }}
|
|
193
|
+
org.opencontainers.image.revision=${{ needs.release-preflight.outputs.commit_sha }}
|
|
194
|
+
org.opencontainers.image.source=https://github.com/guile-security/guile
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Node / local-viewer SPA source (the built bundle in
|
|
2
|
+
# guile/interface/viewer/static/ is committed and shipped; do not ignore it)
|
|
3
|
+
node_modules/
|
|
4
|
+
guile/interface/viewer/frontend/node_modules/
|
|
5
|
+
guile/interface/viewer/frontend/.vite/
|
|
6
|
+
|
|
7
|
+
# Python
|
|
8
|
+
__pycache__/
|
|
9
|
+
*.py[cod]
|
|
10
|
+
*$py.class
|
|
11
|
+
*.so
|
|
12
|
+
.Python
|
|
13
|
+
# Anchored to the repo root: these are Python build-artifact dir names, but
|
|
14
|
+
# unanchored they also match nested source dirs (e.g. the viewer's src/lib).
|
|
15
|
+
/build/
|
|
16
|
+
develop-eggs/
|
|
17
|
+
dist/
|
|
18
|
+
downloads/
|
|
19
|
+
eggs/
|
|
20
|
+
.eggs/
|
|
21
|
+
/lib/
|
|
22
|
+
/lib64/
|
|
23
|
+
parts/
|
|
24
|
+
sdist/
|
|
25
|
+
var/
|
|
26
|
+
wheels/
|
|
27
|
+
*.egg-info/
|
|
28
|
+
.installed.cfg
|
|
29
|
+
*.egg
|
|
30
|
+
|
|
31
|
+
# Virtual Environment
|
|
32
|
+
venv/
|
|
33
|
+
env/
|
|
34
|
+
ENV/
|
|
35
|
+
.env
|
|
36
|
+
.venv
|
|
37
|
+
pip-log.txt
|
|
38
|
+
pip-delete-this-directory.txt
|
|
39
|
+
|
|
40
|
+
# IDE
|
|
41
|
+
.idea/
|
|
42
|
+
.vscode/
|
|
43
|
+
*.swp
|
|
44
|
+
*.swo
|
|
45
|
+
.DS_Store
|
|
46
|
+
.project
|
|
47
|
+
.pydevproject
|
|
48
|
+
.settings/
|
|
49
|
+
|
|
50
|
+
# FastAPI
|
|
51
|
+
.env.local
|
|
52
|
+
.env.development.local
|
|
53
|
+
.env.test.local
|
|
54
|
+
.env.production.local
|
|
55
|
+
|
|
56
|
+
# MongoDB
|
|
57
|
+
/data/
|
|
58
|
+
mongod.log
|
|
59
|
+
*.mongodb
|
|
60
|
+
*.mongorc.js
|
|
61
|
+
|
|
62
|
+
# LLM and ML related
|
|
63
|
+
*.bin
|
|
64
|
+
*.pt
|
|
65
|
+
*.pth
|
|
66
|
+
*.onnx
|
|
67
|
+
*.h5
|
|
68
|
+
*.hdf5
|
|
69
|
+
*.pkl
|
|
70
|
+
*.joblib
|
|
71
|
+
wandb/
|
|
72
|
+
runs/
|
|
73
|
+
checkpoints/
|
|
74
|
+
logs/
|
|
75
|
+
tensorboard/
|
|
76
|
+
|
|
77
|
+
# Agent execution traces
|
|
78
|
+
guile_runs/
|
|
79
|
+
agent_runs/
|
|
80
|
+
|
|
81
|
+
# Misc
|
|
82
|
+
*.log
|
|
83
|
+
*.sqlite
|
|
84
|
+
*.db
|
|
85
|
+
.directory
|
|
86
|
+
*.bak
|
|
87
|
+
*.tmp
|
|
88
|
+
*.temp
|
|
89
|
+
.DS_Store
|
|
90
|
+
Thumbs.db
|
|
91
|
+
|
|
92
|
+
*.schema.graphql
|
|
93
|
+
schema.graphql
|
|
94
|
+
|
|
95
|
+
.opencode/
|
|
96
|
+
|
|
97
|
+
# Root-only local data and reference checkouts
|
|
98
|
+
/.benchmarks/
|
|
99
|
+
/references/
|
|
100
|
+
/guile_runs_main/
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Built viewer bundles are generated output, not hand-edited source.
|
|
2
|
+
exclude: ^guile/interface/viewer/static/assets/
|
|
3
|
+
|
|
4
|
+
repos:
|
|
5
|
+
# Ruff for fast linting and formatting
|
|
6
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
7
|
+
rev: v0.11.13
|
|
8
|
+
hooks:
|
|
9
|
+
- id: ruff
|
|
10
|
+
args: [--fix, --exit-non-zero-on-fix]
|
|
11
|
+
name: ruff-lint
|
|
12
|
+
- id: ruff-format
|
|
13
|
+
name: ruff-format
|
|
14
|
+
|
|
15
|
+
# MyPy for static type checking. Runs the project's own mypy from the uv
|
|
16
|
+
# environment (`make dev-install`) so it sees the same dependencies and
|
|
17
|
+
# stubs as `make check-all`.
|
|
18
|
+
- repo: local
|
|
19
|
+
hooks:
|
|
20
|
+
- id: mypy
|
|
21
|
+
name: mypy
|
|
22
|
+
entry: uv run mypy
|
|
23
|
+
language: system
|
|
24
|
+
types_or: [python, pyi]
|
|
25
|
+
files: ^(guile|tests)/
|
|
26
|
+
require_serial: true
|
|
27
|
+
|
|
28
|
+
# Built-in hooks for basic file checks
|
|
29
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
30
|
+
rev: v5.0.0
|
|
31
|
+
hooks:
|
|
32
|
+
- id: trailing-whitespace
|
|
33
|
+
- id: end-of-file-fixer
|
|
34
|
+
- id: check-toml
|
|
35
|
+
- id: check-merge-conflict
|
|
36
|
+
- id: check-added-large-files
|
|
37
|
+
args: ['--maxkb=1024']
|
|
38
|
+
- id: debug-statements
|
|
39
|
+
- id: check-case-conflict
|
|
40
|
+
- id: check-docstring-first
|
|
41
|
+
|
|
42
|
+
# Security checks with bandit
|
|
43
|
+
- repo: https://github.com/PyCQA/bandit
|
|
44
|
+
rev: 1.8.3
|
|
45
|
+
hooks:
|
|
46
|
+
- id: bandit
|
|
47
|
+
args: [-c, pyproject.toml]
|
|
48
|
+
|
|
49
|
+
# Additional Python code quality checks
|
|
50
|
+
- repo: https://github.com/asottile/pyupgrade
|
|
51
|
+
rev: v3.21.2
|
|
52
|
+
hooks:
|
|
53
|
+
- id: pyupgrade
|
|
54
|
+
args: [--py312-plus]
|
|
55
|
+
|
|
56
|
+
ci:
|
|
57
|
+
autofix_commit_msg: |
|
|
58
|
+
[pre-commit.ci] auto fixes from pre-commit.com hooks
|
|
59
|
+
|
|
60
|
+
for more information, see https://pre-commit.ci
|
|
61
|
+
autofix_prs: true
|
|
62
|
+
autoupdate_branch: ""
|
|
63
|
+
autoupdate_commit_msg: "[pre-commit.ci] pre-commit autoupdate"
|
|
64
|
+
autoupdate_schedule: weekly
|
|
65
|
+
# pre-commit.ci cannot run `language: system` hooks; mypy runs via `make check-all`.
|
|
66
|
+
skip: [mypy]
|
|
67
|
+
submodules: false
|