agent-toolkit-cli 1.11.0__py3-none-win_amd64.whl
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.
- agent_toolkit/__init__.py +4 -0
- agent_toolkit/__main__.py +5 -0
- agent_toolkit/_paths.py +145 -0
- agent_toolkit/bin/.gitkeep +0 -0
- agent_toolkit/bin/agent-toolkit.exe +0 -0
- agent_toolkit/cli/__init__.py +0 -0
- agent_toolkit/cli/__main__.py +5 -0
- agent_toolkit/cli/build.py +278 -0
- agent_toolkit/cli/completion.py +297 -0
- agent_toolkit/cli/context_budget.py +455 -0
- agent_toolkit/cli/devcompanion.py +923 -0
- agent_toolkit/cli/devcompanion_queue.py +235 -0
- agent_toolkit/cli/diff.py +176 -0
- agent_toolkit/cli/doctor.py +1052 -0
- agent_toolkit/cli/insights.py +771 -0
- agent_toolkit/cli/install.py +706 -0
- agent_toolkit/cli/main.py +171 -0
- agent_toolkit/cli/mcp.py +537 -0
- agent_toolkit/cli/memory.py +739 -0
- agent_toolkit/cli/plugin.py +224 -0
- agent_toolkit/cli/project.py +459 -0
- agent_toolkit/cli/release.py +178 -0
- agent_toolkit/cli/skills.py +461 -0
- agent_toolkit/cli/uninstall.py +166 -0
- agent_toolkit/cli/update.py +298 -0
- agent_toolkit/cli/workspace.py +1713 -0
- agent_toolkit/compiler/hook_registry.py +110 -0
- agent_toolkit/compiler/loader.py +338 -0
- agent_toolkit/compiler/mcp_registry.py +87 -0
- agent_toolkit/compiler/model.py +182 -0
- agent_toolkit/compiler/provenance.py +140 -0
- agent_toolkit/compiler/registry_emit.py +263 -0
- agent_toolkit/compiler/target_registry.py +122 -0
- agent_toolkit/compiler/targets/__init__.py +1 -0
- agent_toolkit/compiler/targets/agent_plugins.py +160 -0
- agent_toolkit/compiler/targets/base.py +229 -0
- agent_toolkit/compiler/targets/claude_code.py +241 -0
- agent_toolkit/compiler/targets/codex.py +261 -0
- agent_toolkit/compiler/targets/copilot.py +275 -0
- agent_toolkit/compiler/targets/cursor.py +207 -0
- agent_toolkit/compiler/targets/gemini_cli.py +213 -0
- agent_toolkit/compiler/targets/muse_code.py +113 -0
- agent_toolkit/compiler/targets/opencode.py +204 -0
- agent_toolkit/compiler/targets/pi.py +263 -0
- agent_toolkit/compiler/targets/windsurf.py +267 -0
- agent_toolkit/compiler/tool_mapping.py +83 -0
- agent_toolkit/data/.gitignore +4 -0
- agent_toolkit/data/__init__.py +1 -0
- agent_toolkit/data/agents/agentic-security-reviewer/AGENT.md +60 -0
- agent_toolkit/data/agents/architect/AGENT.md +30 -0
- agent_toolkit/data/agents/assistant/AGENT.md +59 -0
- agent_toolkit/data/agents/build-error-resolver/AGENT.md +30 -0
- agent_toolkit/data/agents/client-workflow-bootstrap/AGENT.md +60 -0
- agent_toolkit/data/agents/code-reviewer/AGENT.md +49 -0
- agent_toolkit/data/agents/database-reviewer/AGENT.md +44 -0
- agent_toolkit/data/agents/docs-lookup/AGENT.md +28 -0
- agent_toolkit/data/agents/e2e-runner/AGENT.md +38 -0
- agent_toolkit/data/agents/performance-optimizer/AGENT.md +52 -0
- agent_toolkit/data/agents/planner/AGENT.md +41 -0
- agent_toolkit/data/agents/refactor-cleaner/AGENT.md +43 -0
- agent_toolkit/data/agents/reference-lookup/AGENT.md +33 -0
- agent_toolkit/data/agents/security-reviewer/AGENT.md +47 -0
- agent_toolkit/data/agents/tdd-guide/AGENT.md +58 -0
- agent_toolkit/data/agents/tech-assistant/AGENT.md +11 -0
- agent_toolkit/data/agents/typescript-reviewer/AGENT.md +61 -0
- agent_toolkit/data/capabilities/hooks/README.md +6 -0
- agent_toolkit/data/capabilities/hooks/pre-commit-validate.yaml +26 -0
- agent_toolkit/data/capabilities/hooks/scripts/pre-commit-validate.sh +41 -0
- agent_toolkit/data/capabilities/hooks/scripts/session-start-context.sh +11 -0
- agent_toolkit/data/capabilities/hooks/session-start-context.yaml +23 -0
- agent_toolkit/data/capabilities/targets/registry.yaml +90 -0
- agent_toolkit/data/capabilities/upstream.lock +118 -0
- agent_toolkit/data/catalogs/agent-catalog.yaml +81 -0
- agent_toolkit/data/catalogs/loop-catalog.yaml +55 -0
- agent_toolkit/data/catalogs/skill-catalog.yaml +520 -0
- agent_toolkit/data/catalogs/skills-layout.json +391 -0
- agent_toolkit/data/distributions/products.yaml +190 -0
- agent_toolkit/data/distributions/targets/claude-code.yaml +47 -0
- agent_toolkit/data/distributions/targets/cursor.yaml +42 -0
- agent_toolkit/data/distributions/targets/opencode.yaml +55 -0
- agent_toolkit/data/loops/changelog-drafter/loop.yaml +40 -0
- agent_toolkit/data/loops/ci-sweeper/loop.yaml +53 -0
- agent_toolkit/data/loops/daily-triage/loop.yaml +47 -0
- agent_toolkit/data/loops/dep-sweeper/loop.yaml +46 -0
- agent_toolkit/data/loops/issue-triage/loop.yaml +40 -0
- agent_toolkit/data/loops/oss-daily-briefing/loop.yaml +65 -0
- agent_toolkit/data/loops/oss-pr-monitor/loop.yaml +86 -0
- agent_toolkit/data/loops/oss-triage/loop.yaml +67 -0
- agent_toolkit/data/loops/post-merge-cleanup/loop.yaml +44 -0
- agent_toolkit/data/loops/pr-babysitter/loop.yaml +46 -0
- agent_toolkit/data/mcp/registry/chrome-devtools.yaml +61 -0
- agent_toolkit/data/mcp/registry/clickup.yaml +48 -0
- agent_toolkit/data/mcp/registry/figma.yaml +44 -0
- agent_toolkit/data/mcp/registry/github.yaml +52 -0
- agent_toolkit/data/mcp/registry/linear.yaml +47 -0
- agent_toolkit/data/mcp/registry/notion.yaml +48 -0
- agent_toolkit/data/mcp/registry/slack.yaml +46 -0
- agent_toolkit/data/mcp/templates/chrome-devtools/README.md +57 -0
- agent_toolkit/data/mcp/templates/chrome-devtools/config.template.json +6 -0
- agent_toolkit/data/mcp/templates/clickup/README.md +45 -0
- agent_toolkit/data/mcp/templates/clickup/config.template.json +8 -0
- agent_toolkit/data/mcp/templates/clickup/wrapper.sh +23 -0
- agent_toolkit/data/mcp/templates/figma/README.md +54 -0
- agent_toolkit/data/mcp/templates/figma/config.template.json +9 -0
- agent_toolkit/data/mcp/templates/github/README.md +16 -0
- agent_toolkit/data/mcp/templates/github/config.template.json +15 -0
- agent_toolkit/data/mcp/templates/github/wrapper.sh +6 -0
- agent_toolkit/data/mcp/templates/linear/README.md +49 -0
- agent_toolkit/data/mcp/templates/linear/config.template.json +10 -0
- agent_toolkit/data/mcp/templates/notion/README.md +7 -0
- agent_toolkit/data/mcp/templates/notion/config.template.json +8 -0
- agent_toolkit/data/mcp/templates/notion/wrapper.sh +23 -0
- agent_toolkit/data/mcp/templates/slack/README.md +8 -0
- agent_toolkit/data/mcp/templates/slack/config.template.json +9 -0
- agent_toolkit/data/mcp/templates/slack/wrapper.sh +23 -0
- agent_toolkit/data/packs/README.md +66 -0
- agent_toolkit/data/packs/agentic-security/README.md +19 -0
- agent_toolkit/data/packs/agentic-security/config.yaml +25 -0
- agent_toolkit/data/packs/architecture/README.md +22 -0
- agent_toolkit/data/packs/architecture/config.yaml +27 -0
- agent_toolkit/data/packs/code-quality/README.md +19 -0
- agent_toolkit/data/packs/code-quality/config.yaml +21 -0
- agent_toolkit/data/packs/delivery-discipline/README.md +19 -0
- agent_toolkit/data/packs/delivery-discipline/config.yaml +42 -0
- agent_toolkit/data/packs/design-engineering/README.md +19 -0
- agent_toolkit/data/packs/design-engineering/config.yaml +41 -0
- agent_toolkit/data/packs/engineering-workflow/README.md +21 -0
- agent_toolkit/data/packs/engineering-workflow/config.yaml +57 -0
- agent_toolkit/data/packs/oss-maintenance/README.md +245 -0
- agent_toolkit/data/packs/oss-maintenance/config.yaml +75 -0
- agent_toolkit/data/profiles/claude-code/CLAUDE.md +110 -0
- agent_toolkit/data/profiles/claude-code/agents/assistant.md +59 -0
- agent_toolkit/data/profiles/claude-code/agents/build-error-resolver.md +30 -0
- agent_toolkit/data/profiles/claude-code/agents/client-workflow-bootstrap.md +60 -0
- agent_toolkit/data/profiles/claude-code/agents/contribution-planner.md +39 -0
- agent_toolkit/data/profiles/claude-code/agents/database-reviewer.md +44 -0
- agent_toolkit/data/profiles/claude-code/agents/docs-lookup.md +28 -0
- agent_toolkit/data/profiles/claude-code/agents/e2e-runner.md +38 -0
- agent_toolkit/data/profiles/claude-code/agents/performance-optimizer.md +52 -0
- agent_toolkit/data/profiles/claude-code/agents/planner.md +41 -0
- agent_toolkit/data/profiles/claude-code/agents/refactor-cleaner.md +43 -0
- agent_toolkit/data/profiles/claude-code/agents/reference-lookup.md +33 -0
- agent_toolkit/data/profiles/claude-code/agents/security-reviewer.md +47 -0
- agent_toolkit/data/profiles/claude-code/agents/tdd-guide.md +58 -0
- agent_toolkit/data/profiles/claude-code/agents/typescript-reviewer.md +61 -0
- agent_toolkit/data/profiles/claude-code/settings.json +86 -0
- agent_toolkit/data/profiles/copilot/copilot-instructions.md +15 -0
- agent_toolkit/data/profiles/cursor/README.md +33 -0
- agent_toolkit/data/profiles/cursor/rules/architect.mdc +23 -0
- agent_toolkit/data/profiles/cursor/rules/assistant.mdc +61 -0
- agent_toolkit/data/profiles/cursor/rules/build-error-resolver.mdc +20 -0
- agent_toolkit/data/profiles/cursor/rules/code-reviewer.mdc +21 -0
- agent_toolkit/data/profiles/cursor/rules/database-reviewer.mdc +29 -0
- agent_toolkit/data/profiles/cursor/rules/docs-lookup.mdc +15 -0
- agent_toolkit/data/profiles/cursor/rules/e2e-runner.mdc +30 -0
- agent_toolkit/data/profiles/cursor/rules/performance-optimizer.mdc +27 -0
- agent_toolkit/data/profiles/cursor/rules/planner.mdc +28 -0
- agent_toolkit/data/profiles/cursor/rules/refactor-cleaner.mdc +26 -0
- agent_toolkit/data/profiles/cursor/rules/reference-lookup.mdc +20 -0
- agent_toolkit/data/profiles/cursor/rules/security-reviewer.mdc +20 -0
- agent_toolkit/data/profiles/cursor/rules/tdd-guide.mdc +26 -0
- agent_toolkit/data/profiles/cursor/rules/typescript-reviewer.mdc +28 -0
- agent_toolkit/data/profiles/muse-code/README.md +35 -0
- agent_toolkit/data/profiles/opencode/README.md +44 -0
- agent_toolkit/data/profiles/opencode/agents/architect.md +30 -0
- agent_toolkit/data/profiles/opencode/agents/assistant.md +96 -0
- agent_toolkit/data/profiles/opencode/agents/build-error-resolver.md +31 -0
- agent_toolkit/data/profiles/opencode/agents/client-workflow-bootstrap.md +66 -0
- agent_toolkit/data/profiles/opencode/agents/code-reviewer.md +47 -0
- agent_toolkit/data/profiles/opencode/agents/contribution-planner.md +44 -0
- agent_toolkit/data/profiles/opencode/agents/database-reviewer.md +43 -0
- agent_toolkit/data/profiles/opencode/agents/docs-lookup.md +28 -0
- agent_toolkit/data/profiles/opencode/agents/e2e-runner.md +33 -0
- agent_toolkit/data/profiles/opencode/agents/performance-optimizer.md +34 -0
- agent_toolkit/data/profiles/opencode/agents/planner.md +27 -0
- agent_toolkit/data/profiles/opencode/agents/refactor-cleaner.md +27 -0
- agent_toolkit/data/profiles/opencode/agents/reference-lookup.md +27 -0
- agent_toolkit/data/profiles/opencode/agents/security-reviewer.md +27 -0
- agent_toolkit/data/profiles/opencode/agents/tdd-guide.md +27 -0
- agent_toolkit/data/profiles/opencode/agents/typescript-reviewer.md +30 -0
- agent_toolkit/data/profiles/opencode/opencode.json +3 -0
- agent_toolkit/data/profiles/pi/skills/architect/skill.md +5 -0
- agent_toolkit/data/profiles/pi/skills/assistant/skill.md +3 -0
- agent_toolkit/data/profiles/pi/skills/code-reviewer/skill.md +5 -0
- agent_toolkit/data/profiles/pi/skills/planner/skill.md +3 -0
- agent_toolkit/data/profiles/pi/skills/security-reviewer/skill.md +3 -0
- agent_toolkit/data/profiles/windsurf/memories/global_rules.md +114 -0
- agent_toolkit/data/profiles/windsurf/rules/architect.mdc +23 -0
- agent_toolkit/data/profiles/windsurf/rules/assistant.mdc +61 -0
- agent_toolkit/data/profiles/windsurf/rules/build-error-resolver.mdc +20 -0
- agent_toolkit/data/profiles/windsurf/rules/code-reviewer.mdc +21 -0
- agent_toolkit/data/profiles/windsurf/rules/database-reviewer.mdc +29 -0
- agent_toolkit/data/profiles/windsurf/rules/docs-lookup.mdc +15 -0
- agent_toolkit/data/profiles/windsurf/rules/e2e-runner.mdc +30 -0
- agent_toolkit/data/profiles/windsurf/rules/performance-optimizer.mdc +27 -0
- agent_toolkit/data/profiles/windsurf/rules/planner.mdc +28 -0
- agent_toolkit/data/profiles/windsurf/rules/refactor-cleaner.mdc +26 -0
- agent_toolkit/data/profiles/windsurf/rules/reference-lookup.mdc +20 -0
- agent_toolkit/data/profiles/windsurf/rules/security-reviewer.mdc +20 -0
- agent_toolkit/data/profiles/windsurf/rules/tdd-guide.mdc +26 -0
- agent_toolkit/data/profiles/windsurf/rules/typescript-reviewer.mdc +28 -0
- agent_toolkit/data/skills/accessibility/review/SKILL.md +116 -0
- agent_toolkit/data/skills/accessibility/review/references/a11y-checklist.md +25 -0
- agent_toolkit/data/skills/accessibility/review/references/a11y-findings-template.md +56 -0
- agent_toolkit/data/skills/accessibility/review/references/research.md +47 -0
- agent_toolkit/data/skills/agentic-security/mcp-audit/SKILL.md +116 -0
- agent_toolkit/data/skills/agentic-security/mcp-audit/references/mcp-audit-template.md +51 -0
- agent_toolkit/data/skills/agentic-security/owasp-agentic-review/SKILL.md +73 -0
- agent_toolkit/data/skills/agentic-security/owasp-agentic-review/references/owasp-agentic-template.md +32 -0
- agent_toolkit/data/skills/agentic-security/supply-chain-audit/SKILL.md +142 -0
- agent_toolkit/data/skills/agentic-security/threat-modeling/SKILL.md +100 -0
- agent_toolkit/data/skills/agentic-security/threat-modeling/references/threat-model-template.md +55 -0
- agent_toolkit/data/skills/architecture/c4-model/SKILL.md +49 -0
- agent_toolkit/data/skills/cloud/aws-well-architected-review/SKILL.md +37 -0
- agent_toolkit/data/skills/cloud/cloud-design-patterns/SKILL.md +38 -0
- agent_toolkit/data/skills/core/assistant/SKILL.md +216 -0
- agent_toolkit/data/skills/core/assistant/references/AGENTS_TEMPLATE.md +0 -0
- agent_toolkit/data/skills/core/assistant/references/ORCHESTRATION.md +0 -0
- agent_toolkit/data/skills/core/assistant/references/REPO_INSPECTION.md +0 -0
- agent_toolkit/data/skills/core/dev-companion/SKILL.md +65 -0
- agent_toolkit/data/skills/core/dev-companion/references/LOOP_GUARDRAILS.md +0 -0
- agent_toolkit/data/skills/core/onboarding/SKILL.md +122 -0
- agent_toolkit/data/skills/core/output-handshake/SKILL.md +26 -0
- agent_toolkit/data/skills/core/pr-fallback/SKILL.md +35 -0
- agent_toolkit/data/skills/core/pr-fallback/references/pr-body-default.md +0 -0
- agent_toolkit/data/skills/core/project/SKILL.md +89 -0
- agent_toolkit/data/skills/core/workspace/SKILL.md +103 -0
- agent_toolkit/data/skills/core/workspace-knowledge-sync/SKILL.md +140 -0
- agent_toolkit/data/skills/data/dbt-validation/SKILL.md +41 -0
- agent_toolkit/data/skills/data/snowflake-validation/SKILL.md +38 -0
- agent_toolkit/data/skills/delivery/adr/SKILL.md +56 -0
- agent_toolkit/data/skills/delivery/adr/references/default-template.md +35 -0
- agent_toolkit/data/skills/delivery/adr/references/example-001-graphql-adoption.md +66 -0
- agent_toolkit/data/skills/delivery/agreement/SKILL.md +24 -0
- agent_toolkit/data/skills/delivery/agreement/references/default-template.md +17 -0
- agent_toolkit/data/skills/delivery/agreement/references/example-api-versioning.md +29 -0
- agent_toolkit/data/skills/delivery/bug/SKILL.md +26 -0
- agent_toolkit/data/skills/delivery/bug/references/default-template.md +26 -0
- agent_toolkit/data/skills/delivery/bug/references/example-search-filter-bug.md +58 -0
- agent_toolkit/data/skills/delivery/decision-log/SKILL.md +28 -0
- agent_toolkit/data/skills/delivery/decision-log/references/default-template.md +17 -0
- agent_toolkit/data/skills/delivery/decision-log/references/example-repository-pattern.md +27 -0
- agent_toolkit/data/skills/delivery/development-workflow/SKILL.md +34 -0
- agent_toolkit/data/skills/delivery/development-workflow/references/default-workflow-checklist.md +44 -0
- agent_toolkit/data/skills/delivery/epic/SKILL.md +22 -0
- agent_toolkit/data/skills/delivery/epic/references/default-template.md +26 -0
- agent_toolkit/data/skills/delivery/epic/references/example-unified-dashboard.md +40 -0
- agent_toolkit/data/skills/delivery/incident/SKILL.md +24 -0
- agent_toolkit/data/skills/delivery/incident/references/default-template.md +29 -0
- agent_toolkit/data/skills/delivery/incident/references/example-payment-outage.md +62 -0
- agent_toolkit/data/skills/delivery/management-unit-assessment/SKILL.md +104 -0
- agent_toolkit/data/skills/delivery/management-unit-assessment/references/default-template.md +24 -0
- agent_toolkit/data/skills/delivery/management-unit-assessment/references/example-team-assessment.md +126 -0
- agent_toolkit/data/skills/delivery/meeting-minutes/SKILL.md +25 -0
- agent_toolkit/data/skills/delivery/meeting-minutes/references/default-template.md +22 -0
- agent_toolkit/data/skills/delivery/meeting-minutes/references/example-weekly-sync.md +72 -0
- agent_toolkit/data/skills/delivery/planning/SKILL.md +31 -0
- agent_toolkit/data/skills/delivery/planning/references/default-template.md +25 -0
- agent_toolkit/data/skills/delivery/planning/references/example-sprint-planning.md +62 -0
- agent_toolkit/data/skills/delivery/prd/SKILL.md +46 -0
- agent_toolkit/data/skills/delivery/prd/references/default-template.md +31 -0
- agent_toolkit/data/skills/delivery/prd/references/example-unified-api.md +71 -0
- agent_toolkit/data/skills/delivery/project-assessment/SKILL.md +90 -0
- agent_toolkit/data/skills/delivery/project-assessment/references/default-template.md +26 -0
- agent_toolkit/data/skills/delivery/project-assessment/references/example-platform-assessment.md +122 -0
- agent_toolkit/data/skills/delivery/project-assessment-evidence/SKILL.md +88 -0
- agent_toolkit/data/skills/delivery/project-assessment-evidence/references/default-template.md +24 -0
- agent_toolkit/data/skills/delivery/project-assessment-evidence/references/example-evidence-map.md +46 -0
- agent_toolkit/data/skills/delivery/spike/SKILL.md +24 -0
- agent_toolkit/data/skills/delivery/spike/references/default-template.md +29 -0
- agent_toolkit/data/skills/delivery/spike/references/example-graphql-federation.md +79 -0
- agent_toolkit/data/skills/delivery/task/SKILL.md +21 -0
- agent_toolkit/data/skills/delivery/task/references/default-template.md +21 -0
- agent_toolkit/data/skills/delivery/task/references/example-nav-system.md +33 -0
- agent_toolkit/data/skills/delivery/technical-unit-assessment/SKILL.md +58 -0
- agent_toolkit/data/skills/delivery/technical-unit-assessment/references/default-template.md +26 -0
- agent_toolkit/data/skills/delivery/technical-unit-assessment/references/example-frontend-assessment.md +112 -0
- agent_toolkit/data/skills/delivery/technical-unit-assessment/references/indicator-groups.md +65 -0
- agent_toolkit/data/skills/delivery/trd/SKILL.md +49 -0
- agent_toolkit/data/skills/delivery/trd/references/default-template.md +31 -0
- agent_toolkit/data/skills/delivery/trd/references/example-api-migration.md +122 -0
- agent_toolkit/data/skills/delivery/user-story/SKILL.md +21 -0
- agent_toolkit/data/skills/delivery/user-story/references/default-template.md +21 -0
- agent_toolkit/data/skills/delivery/user-story/references/example-advanced-filtering.md +37 -0
- agent_toolkit/data/skills/delivery/work-item/SKILL.md +31 -0
- agent_toolkit/data/skills/delivery/work-item/references/default-template.md +21 -0
- agent_toolkit/data/skills/delivery/work-item/references/example-routing-dashboard.md +23 -0
- agent_toolkit/data/skills/delivery/workflow-client-bootstrap/SKILL.md +148 -0
- agent_toolkit/data/skills/delivery/workflow-client-bootstrap/questions.yaml +165 -0
- agent_toolkit/data/skills/delivery/workflow-generic-project/SKILL.md +79 -0
- agent_toolkit/data/skills/design/design-assessment/SKILL.md +150 -0
- agent_toolkit/data/skills/design/design-assessment/references/design-scorecard-template.md +78 -0
- agent_toolkit/data/skills/design/design-improvement/SKILL.md +167 -0
- agent_toolkit/data/skills/design/design-improvement/references/improvement-plan-template.md +113 -0
- agent_toolkit/data/skills/design/figma/LICENSE.txt +2 -0
- agent_toolkit/data/skills/design/figma/NOTICE.txt +25 -0
- agent_toolkit/data/skills/design/figma/SKILL.md +98 -0
- agent_toolkit/data/skills/design/figma/references/figma-mcp-config.md +82 -0
- agent_toolkit/data/skills/design/figma/references/figma-tools-and-prompts.md +34 -0
- agent_toolkit/data/skills/design/figma-code-connect-components/LICENSE.txt +2 -0
- agent_toolkit/data/skills/design/figma-code-connect-components/NOTICE.txt +18 -0
- agent_toolkit/data/skills/design/figma-code-connect-components/SKILL.md +354 -0
- agent_toolkit/data/skills/design/figma-code-connect-components/references/mapping-checklist.md +7 -0
- agent_toolkit/data/skills/design/figma-code-connect-components/scripts/normalize_node_id.py +25 -0
- agent_toolkit/data/skills/design/figma-create-design-system-rules/LICENSE.txt +2 -0
- agent_toolkit/data/skills/design/figma-create-design-system-rules/NOTICE.txt +19 -0
- agent_toolkit/data/skills/design/figma-create-design-system-rules/SKILL.md +554 -0
- agent_toolkit/data/skills/design/figma-create-design-system-rules/references/rule-template.md +15 -0
- agent_toolkit/data/skills/design/figma-create-design-system-rules/scripts/check_agents_md.sh +9 -0
- agent_toolkit/data/skills/design/figma-create-new-file/LICENSE.txt +2 -0
- agent_toolkit/data/skills/design/figma-create-new-file/NOTICE.txt +17 -0
- agent_toolkit/data/skills/design/figma-create-new-file/SKILL.md +72 -0
- agent_toolkit/data/skills/design/figma-implement-design/LICENSE.txt +2 -0
- agent_toolkit/data/skills/design/figma-implement-design/NOTICE.txt +19 -0
- agent_toolkit/data/skills/design/figma-implement-design/SKILL.md +268 -0
- agent_toolkit/data/skills/design/frontend-design/LICENSE.txt +177 -0
- agent_toolkit/data/skills/design/frontend-design/SKILL.md +82 -0
- agent_toolkit/data/skills/design/frontend-design/UPSTREAM.md +14 -0
- agent_toolkit/data/skills/design/frontend-design-review/LICENSE +21 -0
- agent_toolkit/data/skills/design/frontend-design-review/SKILL.md +194 -0
- agent_toolkit/data/skills/design/frontend-design-review/references/pattern-examples.md +21 -0
- agent_toolkit/data/skills/design/frontend-design-review/references/quick-checklist.md +38 -0
- agent_toolkit/data/skills/design/frontend-design-review/references/review-output-format.md +68 -0
- agent_toolkit/data/skills/design/frontend-design-review/references/review-type-modifiers.md +31 -0
- agent_toolkit/data/skills/design/web-design-guidelines/SKILL.md +78 -0
- agent_toolkit/data/skills/design/web-design-guidelines/references/LICENSE +21 -0
- agent_toolkit/data/skills/design/web-design-guidelines/references/web-interface-guidelines.md +180 -0
- agent_toolkit/data/skills/forge/gh-address-comments/LICENSE.txt +202 -0
- agent_toolkit/data/skills/forge/gh-address-comments/NOTICE.txt +20 -0
- agent_toolkit/data/skills/forge/gh-address-comments/SKILL.md +72 -0
- agent_toolkit/data/skills/forge/gh-address-comments/scripts/fetch_comments.py +239 -0
- agent_toolkit/data/skills/forge/gh-contribution-planner/SKILL.md +160 -0
- agent_toolkit/data/skills/forge/gh-contribution-planner/scripts/inspect_contributions.py +818 -0
- agent_toolkit/data/skills/forge/gh-fix-ci/LICENSE.txt +201 -0
- agent_toolkit/data/skills/forge/gh-fix-ci/NOTICE.txt +20 -0
- agent_toolkit/data/skills/forge/gh-fix-ci/SKILL.md +74 -0
- agent_toolkit/data/skills/forge/gh-fix-ci/scripts/inspect_pr_checks.py +509 -0
- agent_toolkit/data/skills/forge/github-cli-workflow/SKILL.md +49 -0
- agent_toolkit/data/skills/forge/gitlab-cli-workflow/SKILL.md +44 -0
- agent_toolkit/data/skills/forge/workflow-client-bootstrap/SKILL.md +14 -0
- agent_toolkit/data/skills/forge/workflow-generic-project/SKILL.md +14 -0
- agent_toolkit/data/skills/forge/worktree/SKILL.md +113 -0
- agent_toolkit/data/skills/integrations/clickup-cli/SKILL.md +78 -0
- agent_toolkit/data/skills/integrations/clickup-cli/references/docs-management.md +57 -0
- agent_toolkit/data/skills/integrations/clickup-cli/references/task-management.md +131 -0
- agent_toolkit/data/skills/integrations/clickup-cli/references/time-tracking.md +38 -0
- agent_toolkit/data/skills/integrations/linear/LICENSE.txt +202 -0
- agent_toolkit/data/skills/integrations/linear/NOTICE.txt +23 -0
- agent_toolkit/data/skills/integrations/linear/SKILL.md +134 -0
- agent_toolkit/data/skills/integrations/mcp/SKILL.md +88 -0
- agent_toolkit/data/skills/integrations/slack-assistant/SKILL.md +138 -0
- agent_toolkit/data/skills/integrations/slack-cli/SKILL.md +109 -0
- agent_toolkit/data/skills/integrations/slack-cli/references/INSTALLATION.md +42 -0
- agent_toolkit/data/skills/loops/loop-runner/SKILL.md +92 -0
- agent_toolkit/data/skills/ops/docs-generator/SKILL.md +120 -0
- agent_toolkit/data/skills/ops/llm-cost-advisor/SKILL.md +87 -0
- agent_toolkit/data/skills/ops/swarm/SKILL.md +108 -0
- agent_toolkit/data/skills/ops/swarm-handoff/SKILL.md +112 -0
- agent_toolkit/data/skills/ops/swarm-observer/SKILL.md +102 -0
- agent_toolkit/data/skills/ops/triage/SKILL.md +119 -0
- agent_toolkit/data/skills/quality/codeql/SKILL.md +106 -0
- agent_toolkit/data/skills/quality/codeql/references/codeql-queries.md +43 -0
- agent_toolkit/data/skills/quality/megalinter/SKILL.md +162 -0
- agent_toolkit/data/skills/quality/megalinter/references/megalinter-images.md +36 -0
- agent_toolkit/data/skills/quality/megalinter/references/megalinter-license.md +41 -0
- agent_toolkit/data/skills/quality/megalinter/references/megalinter-targets.md +66 -0
- agent_toolkit/data/skills/tooling/chrome-devtools/SKILL.md +146 -0
- agent_toolkit/data/skills/tooling/herdr/SKILL.md +109 -0
- agent_toolkit/data/skills/tooling/inventory/SKILL.md +81 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/LICENSE.txt +201 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/NOTICE.txt +27 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/SKILL.md +145 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/assets/experiment-template.ipynb +117 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/assets/tutorial-template.ipynb +115 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/references/experiment-patterns.md +10 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/references/notebook-structure.md +17 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/references/quality-checklist.md +11 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/references/tutorial-patterns.md +9 -0
- agent_toolkit/data/skills/tooling/jupyter-notebook/scripts/new_notebook.py +132 -0
- agent_toolkit/data/skills/tooling/mermaid/SKILL.md +36 -0
- agent_toolkit/data/skills/tooling/playwright-cli/LICENSE.txt +201 -0
- agent_toolkit/data/skills/tooling/playwright-cli/NOTICE.txt +29 -0
- agent_toolkit/data/skills/tooling/playwright-cli/SKILL.md +154 -0
- agent_toolkit/data/skills/tooling/playwright-cli/references/cli.md +116 -0
- agent_toolkit/data/skills/tooling/playwright-cli/references/workflows.md +98 -0
- agent_toolkit/data/skills/tooling/playwright-cli/scripts/executable_playwright_cli.sh +25 -0
- agent_toolkit/data_cache.py +79 -0
- agent_toolkit/data_sync.py +144 -0
- agent_toolkit/installer/__init__.py +0 -0
- agent_toolkit/installer/merge.py +59 -0
- agent_toolkit/installer/receipt.py +89 -0
- agent_toolkit/installer/sources.py +92 -0
- agent_toolkit/installer/tracking.py +63 -0
- agent_toolkit/launcher.py +69 -0
- agent_toolkit/loop/__init__.py +0 -0
- agent_toolkit/loop/budget.py +107 -0
- agent_toolkit/loop/gh_gate.py +923 -0
- agent_toolkit/loop/loop-gh-gate +923 -0
- agent_toolkit/loop/pack.py +65 -0
- agent_toolkit/loop/runner.py +2722 -0
- agent_toolkit/runner/__init__.py +0 -0
- agent_toolkit/runner/dispatcher.py +163 -0
- agent_toolkit/runner/policy.py +356 -0
- agent_toolkit/runner/providers/__init__.py +21 -0
- agent_toolkit/runner/providers/anthropic_provider.py +109 -0
- agent_toolkit/runner/providers/base.py +53 -0
- agent_toolkit/runner/providers/ollama_provider.py +108 -0
- agent_toolkit/runner/providers/openai_provider.py +103 -0
- agent_toolkit/runner/providers/opencode_provider.py +127 -0
- agent_toolkit/swarm/__init__.py +5 -0
- agent_toolkit/swarm/approvals.py +121 -0
- agent_toolkit/swarm/backends/__init__.py +596 -0
- agent_toolkit/swarm/budget.py +83 -0
- agent_toolkit/swarm/cli.py +2448 -0
- agent_toolkit/swarm/config.py +351 -0
- agent_toolkit/swarm/handoff.py +174 -0
- agent_toolkit/swarm/models.py +230 -0
- agent_toolkit/swarm/prompts.py +177 -0
- agent_toolkit/swarm/recipes.py +304 -0
- agent_toolkit/swarm/runner.py +267 -0
- agent_toolkit/swarm/state.py +93 -0
- agent_toolkit/swarm/store.py +148 -0
- agent_toolkit/swarm/worktree.py +105 -0
- agent_toolkit/templates/workspace/.gitignore +19 -0
- agent_toolkit/templates/workspace/AGENTS.md +82 -0
- agent_toolkit/templates/workspace/knowledge/README.md +22 -0
- agent_toolkit/templates/workspace/knowledge/learnings/general.md +3 -0
- agent_toolkit/templates/workspace/knowledge/todos/pending.md +7 -0
- agent_toolkit/templates/workspace/packs/README.md +24 -0
- agent_toolkit/templates/workspace/personas/architect.md +12 -0
- agent_toolkit/templates/workspace/personas/implementer.md +12 -0
- agent_toolkit/templates/workspace/personas/researcher.md +12 -0
- agent_toolkit/templates/workspace/personas/reviewer.md +12 -0
- agent_toolkit_cli-1.11.0.dist-info/METADATA +363 -0
- agent_toolkit_cli-1.11.0.dist-info/RECORD +438 -0
- agent_toolkit_cli-1.11.0.dist-info/WHEEL +4 -0
- agent_toolkit_cli-1.11.0.dist-info/entry_points.txt +4 -0
- agent_toolkit_cli-1.11.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playwright-cli
|
|
3
|
+
description: Drive a real browser from the terminal using the Playwright CLI (snapshot, click, fill, screenshots,
|
|
4
|
+
traces). Use when the task is CLI-first browser automation (data extraction, UI debugging, form fills,
|
|
5
|
+
multi-tab work). For Playwright **test specs**, use `e2e-runner` instead.
|
|
6
|
+
origin:
|
|
7
|
+
type: first-party
|
|
8
|
+
---
|
|
9
|
+
# Playwright CLI
|
|
10
|
+
|
|
11
|
+
Drive a real browser from the terminal using `playwright-cli`. The bundled
|
|
12
|
+
wrapper script runs the CLI through `npx`, so a global install is not required.
|
|
13
|
+
|
|
14
|
+
> Treat this skill as **CLI-first automation**. Do NOT pivot to
|
|
15
|
+
> `@playwright/test` test files unless the user explicitly asks for them — for
|
|
16
|
+
> Playwright tests use [`e2e-runner`](../../../agents/e2e-runner/AGENT.md).
|
|
17
|
+
|
|
18
|
+
## When to use
|
|
19
|
+
|
|
20
|
+
- Quick, one-off browser automation from the shell (snapshot → interact →
|
|
21
|
+
screenshot/trace).
|
|
22
|
+
- Reproducing a UI bug step-by-step with persistent sessions.
|
|
23
|
+
- Extracting data from a page that requires JS rendering.
|
|
24
|
+
- Smoke-checking a deployment without authoring a test suite.
|
|
25
|
+
|
|
26
|
+
## Prerequisites
|
|
27
|
+
|
|
28
|
+
- `npx` on `PATH` (provided by Node.js / `volta` from `bootstrap`).
|
|
29
|
+
- Optional but recommended: a global install for faster startup —
|
|
30
|
+
`npm install -g @playwright/cli@latest`.
|
|
31
|
+
- Outbound HTTPS access to npm and to the target sites.
|
|
32
|
+
|
|
33
|
+
`skills check playwright-cli` validates `npx` is present.
|
|
34
|
+
|
|
35
|
+
## Wrapper script (set once per shell)
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
export PWCLI="$HOME/.local/share/agent-toolkit/skills/playwright-cli/scripts/playwright_cli.sh"
|
|
39
|
+
alias pwcli="$PWCLI"
|
|
40
|
+
pwcli --help
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The wrapper uses `npx --yes --package @playwright/cli playwright-cli`, so even
|
|
44
|
+
without a global install the first call will fetch the package and cache it.
|
|
45
|
+
|
|
46
|
+
If `PLAYWRIGHT_CLI_SESSION` is set, the wrapper passes it as `--session`
|
|
47
|
+
automatically — handy to keep separate browser contexts per project.
|
|
48
|
+
|
|
49
|
+
## Quick start
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
pwcli open https://playwright.dev --headed
|
|
53
|
+
pwcli snapshot
|
|
54
|
+
pwcli click e15
|
|
55
|
+
pwcli type "Playwright"
|
|
56
|
+
pwcli press Enter
|
|
57
|
+
pwcli screenshot
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Core workflow
|
|
61
|
+
|
|
62
|
+
1. `open` the page.
|
|
63
|
+
2. `snapshot` to get stable element refs (e.g. `e3`).
|
|
64
|
+
3. Interact using refs from the **latest** snapshot.
|
|
65
|
+
4. Re-snapshot after navigation or significant DOM changes.
|
|
66
|
+
5. Capture artifacts (`screenshot`, `pdf`, `tracing-start`/`tracing-stop`)
|
|
67
|
+
when useful.
|
|
68
|
+
|
|
69
|
+
Minimal loop:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
pwcli open https://example.com
|
|
73
|
+
pwcli snapshot
|
|
74
|
+
pwcli click e3
|
|
75
|
+
pwcli snapshot
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## When to snapshot again
|
|
79
|
+
|
|
80
|
+
After:
|
|
81
|
+
|
|
82
|
+
- navigation
|
|
83
|
+
- clicking elements that change the UI substantially
|
|
84
|
+
- opening/closing modals or menus
|
|
85
|
+
- tab switches
|
|
86
|
+
|
|
87
|
+
Refs go stale silently. When a command fails due to a missing ref, snapshot
|
|
88
|
+
again — do not bypass with `run-code`/`eval` unless explicitly justified.
|
|
89
|
+
|
|
90
|
+
## Recommended patterns
|
|
91
|
+
|
|
92
|
+
### Form fill and submit
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
pwcli open https://example.com/form
|
|
96
|
+
pwcli snapshot
|
|
97
|
+
pwcli fill e1 "user@example.com"
|
|
98
|
+
pwcli fill e2 "password123"
|
|
99
|
+
pwcli click e3
|
|
100
|
+
pwcli snapshot
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Debug a UI flow with traces
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
pwcli open https://example.com --headed
|
|
107
|
+
pwcli tracing-start
|
|
108
|
+
# ...interactions...
|
|
109
|
+
pwcli tracing-stop
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Multi-tab work
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
pwcli tab-new https://example.com
|
|
116
|
+
pwcli tab-list
|
|
117
|
+
pwcli tab-select 0
|
|
118
|
+
pwcli snapshot
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Sessions
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
pwcli --session todo open https://demo.playwright.dev/todomvc
|
|
125
|
+
pwcli --session todo snapshot
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Or set the env var once:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
export PLAYWRIGHT_CLI_SESSION=todo
|
|
132
|
+
pwcli open https://demo.playwright.dev/todomvc
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Boundaries
|
|
136
|
+
|
|
137
|
+
- This skill is **read/interact** on real browsers. No test framework, no test
|
|
138
|
+
files. For test suites, hand off to `e2e-runner`.
|
|
139
|
+
- When this skill captures artifacts inside a project, write them under
|
|
140
|
+
`output/playwright/` (or whatever the repo defines) — never introduce new
|
|
141
|
+
top-level artifact folders.
|
|
142
|
+
- For sandboxed AI tools that block `npx`/network, ask the user to authorize
|
|
143
|
+
outbound network for this skill rather than disabling sandboxing globally.
|
|
144
|
+
|
|
145
|
+
## References
|
|
146
|
+
|
|
147
|
+
- [`references/cli.md`](references/cli.md) — CLI command reference.
|
|
148
|
+
- [`references/workflows.md`](references/workflows.md) — practical workflows
|
|
149
|
+
and troubleshooting.
|
|
150
|
+
|
|
151
|
+
## See also
|
|
152
|
+
|
|
153
|
+
- [`e2e-runner`](../../../agents/e2e-runner/AGENT.md) — Playwright **test**
|
|
154
|
+
authoring & execution (different mental model than this skill).
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Playwright CLI Reference
|
|
2
|
+
|
|
3
|
+
Use the wrapper script unless `playwright-cli` is already installed globally:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
export PWCLI="$HOME/.local/share/agent-toolkit/skills/playwright-cli/scripts/playwright_cli.sh"
|
|
7
|
+
"$PWCLI" --help
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Optional convenience alias:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
alias pwcli="$PWCLI"
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The wrapper uses `npx --yes --package @playwright/cli playwright-cli`, so the
|
|
17
|
+
first invocation will fetch the package on demand and cache it.
|
|
18
|
+
|
|
19
|
+
## Core
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pwcli open https://example.com
|
|
23
|
+
pwcli close
|
|
24
|
+
pwcli snapshot
|
|
25
|
+
pwcli click e3
|
|
26
|
+
pwcli dblclick e7
|
|
27
|
+
pwcli type "search terms"
|
|
28
|
+
pwcli press Enter
|
|
29
|
+
pwcli fill e5 "user@example.com"
|
|
30
|
+
pwcli drag e2 e8
|
|
31
|
+
pwcli hover e4
|
|
32
|
+
pwcli select e9 "option-value"
|
|
33
|
+
pwcli upload ./document.pdf
|
|
34
|
+
pwcli check e12
|
|
35
|
+
pwcli uncheck e12
|
|
36
|
+
pwcli eval "document.title"
|
|
37
|
+
pwcli eval "el => el.textContent" e5
|
|
38
|
+
pwcli dialog-accept
|
|
39
|
+
pwcli dialog-accept "confirmation text"
|
|
40
|
+
pwcli dialog-dismiss
|
|
41
|
+
pwcli resize 1920 1080
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Navigation
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
pwcli go-back
|
|
48
|
+
pwcli go-forward
|
|
49
|
+
pwcli reload
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Keyboard
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
pwcli press Enter
|
|
56
|
+
pwcli press ArrowDown
|
|
57
|
+
pwcli keydown Shift
|
|
58
|
+
pwcli keyup Shift
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Mouse
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
pwcli mousemove 150 300
|
|
65
|
+
pwcli mousedown
|
|
66
|
+
pwcli mousedown right
|
|
67
|
+
pwcli mouseup
|
|
68
|
+
pwcli mouseup right
|
|
69
|
+
pwcli mousewheel 0 100
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Save as
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
pwcli screenshot
|
|
76
|
+
pwcli screenshot e5
|
|
77
|
+
pwcli pdf
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Tabs
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
pwcli tab-list
|
|
84
|
+
pwcli tab-new
|
|
85
|
+
pwcli tab-new https://example.com/page
|
|
86
|
+
pwcli tab-close
|
|
87
|
+
pwcli tab-close 2
|
|
88
|
+
pwcli tab-select 0
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## DevTools
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
pwcli console
|
|
95
|
+
pwcli console warning
|
|
96
|
+
pwcli network
|
|
97
|
+
pwcli run-code "await page.waitForTimeout(1000)"
|
|
98
|
+
pwcli tracing-start
|
|
99
|
+
pwcli tracing-stop
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Sessions
|
|
103
|
+
|
|
104
|
+
Use a named session to isolate work:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
pwcli --session todo open https://demo.playwright.dev/todomvc
|
|
108
|
+
pwcli --session todo snapshot
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Or set an environment variable once:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
export PLAYWRIGHT_CLI_SESSION=todo
|
|
115
|
+
pwcli open https://demo.playwright.dev/todomvc
|
|
116
|
+
```
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Playwright CLI Workflows
|
|
2
|
+
|
|
3
|
+
Use the wrapper script and snapshot often.
|
|
4
|
+
Assume `PWCLI` is set and `pwcli` is an alias for `"$PWCLI"`.
|
|
5
|
+
When running inside a project, contain artifacts under `output/playwright/<label>/`.
|
|
6
|
+
|
|
7
|
+
## Standard interaction loop
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pwcli open https://example.com
|
|
11
|
+
pwcli snapshot
|
|
12
|
+
pwcli click e3
|
|
13
|
+
pwcli snapshot
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Form submission
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pwcli open https://example.com/form --headed
|
|
20
|
+
pwcli snapshot
|
|
21
|
+
pwcli fill e1 "user@example.com"
|
|
22
|
+
pwcli fill e2 "password123"
|
|
23
|
+
pwcli click e3
|
|
24
|
+
pwcli snapshot
|
|
25
|
+
pwcli screenshot
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Data extraction
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pwcli open https://example.com
|
|
32
|
+
pwcli snapshot
|
|
33
|
+
pwcli eval "document.title"
|
|
34
|
+
pwcli eval "el => el.textContent" e12
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Debugging and inspection
|
|
38
|
+
|
|
39
|
+
Capture console messages and network activity after reproducing an issue:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pwcli console warning
|
|
43
|
+
pwcli network
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Record a trace around a suspicious flow:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
pwcli tracing-start
|
|
50
|
+
# reproduce the issue
|
|
51
|
+
pwcli tracing-stop
|
|
52
|
+
pwcli screenshot
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Sessions
|
|
56
|
+
|
|
57
|
+
Use sessions to isolate work across projects:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
pwcli --session marketing open https://example.com
|
|
61
|
+
pwcli --session marketing snapshot
|
|
62
|
+
pwcli --session checkout open https://example.com/checkout
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Or set the session once:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
export PLAYWRIGHT_CLI_SESSION=checkout
|
|
69
|
+
pwcli open https://example.com/checkout
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Configuration file
|
|
73
|
+
|
|
74
|
+
By default the CLI reads `playwright-cli.json` from the current directory. Use
|
|
75
|
+
`--config` to point at a specific file.
|
|
76
|
+
|
|
77
|
+
Minimal example:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"browser": {
|
|
82
|
+
"launchOptions": {
|
|
83
|
+
"headless": false
|
|
84
|
+
},
|
|
85
|
+
"contextOptions": {
|
|
86
|
+
"viewport": { "width": 1280, "height": 720 }
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Troubleshooting
|
|
93
|
+
|
|
94
|
+
- If an element ref fails, run `pwcli snapshot` again and retry.
|
|
95
|
+
- If the page looks wrong, re-open with `--headed` and resize the window.
|
|
96
|
+
- If a flow depends on prior state, use a named `--session`.
|
|
97
|
+
- If `npx` is blocked by your AI tool's sandbox, authorize outbound network
|
|
98
|
+
for this skill rather than disabling sandboxing globally.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
if ! command -v npx >/dev/null 2>&1; then
|
|
5
|
+
echo "Error: npx is required but not found on PATH." >&2
|
|
6
|
+
exit 1
|
|
7
|
+
fi
|
|
8
|
+
|
|
9
|
+
has_session_flag="false"
|
|
10
|
+
for arg in "$@"; do
|
|
11
|
+
case "$arg" in
|
|
12
|
+
--session | --session=*)
|
|
13
|
+
has_session_flag="true"
|
|
14
|
+
break
|
|
15
|
+
;;
|
|
16
|
+
esac
|
|
17
|
+
done
|
|
18
|
+
|
|
19
|
+
cmd=(npx --yes --package @playwright/cli playwright-cli)
|
|
20
|
+
if [[ ${has_session_flag} != "true" && -n ${PLAYWRIGHT_CLI_SESSION:-} ]]; then
|
|
21
|
+
cmd+=(--session "${PLAYWRIGHT_CLI_SESSION}")
|
|
22
|
+
fi
|
|
23
|
+
cmd+=("$@")
|
|
24
|
+
|
|
25
|
+
exec "${cmd[@]}"
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""GitHub Release data cache for lighter wheel installs."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import os
|
|
7
|
+
import urllib.request
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
from agent_toolkit import __version__
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _xdg_cache_home() -> Path:
|
|
14
|
+
return Path(os.environ.get("XDG_CACHE_HOME", str(Path.home() / ".cache")))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def cache_dir() -> Path:
|
|
18
|
+
return _xdg_cache_home() / "agent-toolkit"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
CACHE_DIR = cache_dir() # default at import; tests should patch cache_dir()
|
|
22
|
+
CACHE_VERSION_FILE = cache_dir() / "cached_version.json"
|
|
23
|
+
GITHUB_RELEASES_API = "https://api.github.com/repos/ulises-jeremias/agent-toolkit/releases/latest"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def cached_version() -> str | None:
|
|
27
|
+
version_file = cache_dir() / "cached_version.json"
|
|
28
|
+
if not version_file.is_file():
|
|
29
|
+
return None
|
|
30
|
+
try:
|
|
31
|
+
data = json.loads(version_file.read_text())
|
|
32
|
+
return str(data.get("version", "")) or None
|
|
33
|
+
except (json.JSONDecodeError, OSError):
|
|
34
|
+
return None
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def is_cache_current() -> bool:
|
|
38
|
+
cached = cached_version()
|
|
39
|
+
return cached is not None and cached == __version__
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def ensure_cached_data(*, offline: bool = False, force: bool = False) -> Path | None:
|
|
43
|
+
"""Ensure toolkit data exists in XDG cache. Returns cache path or None."""
|
|
44
|
+
dest = cache_dir()
|
|
45
|
+
dest.mkdir(parents=True, exist_ok=True)
|
|
46
|
+
|
|
47
|
+
if not force and is_cache_current() and (dest / "profiles").is_dir():
|
|
48
|
+
return dest
|
|
49
|
+
|
|
50
|
+
if offline:
|
|
51
|
+
if (dest / "profiles").is_dir():
|
|
52
|
+
return dest
|
|
53
|
+
return None
|
|
54
|
+
|
|
55
|
+
try:
|
|
56
|
+
req = urllib.request.Request(
|
|
57
|
+
GITHUB_RELEASES_API,
|
|
58
|
+
headers={"User-Agent": "agent-toolkit-data-cache/1"},
|
|
59
|
+
)
|
|
60
|
+
with urllib.request.urlopen(req, timeout=15) as resp:
|
|
61
|
+
release = json.loads(resp.read())
|
|
62
|
+
tag = str(release.get("tag_name", __version__)).lstrip("v")
|
|
63
|
+
tarball_url = release.get("tarball_url")
|
|
64
|
+
if not tarball_url:
|
|
65
|
+
return None
|
|
66
|
+
version_file = dest / "cached_version.json"
|
|
67
|
+
version_file.write_text(
|
|
68
|
+
json.dumps({"version": tag, "source": "github-release", "url": tarball_url}, indent=2)
|
|
69
|
+
+ "\n"
|
|
70
|
+
)
|
|
71
|
+
return dest
|
|
72
|
+
except Exception:
|
|
73
|
+
return dest if (dest / "profiles").is_dir() else None
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def refresh_cache() -> bool:
|
|
77
|
+
"""Force refresh cache metadata from GitHub Releases."""
|
|
78
|
+
result = ensure_cached_data(force=True)
|
|
79
|
+
return result is not None
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"""Download and cache agent-toolkit capability data from GitHub Releases."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import os
|
|
7
|
+
import shutil
|
|
8
|
+
import tarfile
|
|
9
|
+
import tempfile
|
|
10
|
+
import urllib.error
|
|
11
|
+
import urllib.request
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
from agent_toolkit import __version__
|
|
15
|
+
|
|
16
|
+
GITHUB_REPO = "ulises-jeremias/agent-toolkit"
|
|
17
|
+
DATA_SUBDIRS = ("skills", "agents", "loops", "profiles", "mcp", "catalogs")
|
|
18
|
+
VERSION_FILE = ".version"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def data_cache_dir() -> Path:
|
|
22
|
+
"""XDG data directory for downloaded capability trees."""
|
|
23
|
+
xdg = os.environ.get("XDG_DATA_HOME", "").strip()
|
|
24
|
+
base = Path(xdg).expanduser() if xdg else Path.home() / ".local" / "share"
|
|
25
|
+
return base / "agent-toolkit" / "data"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def is_valid_data_root(path: Path) -> bool:
|
|
29
|
+
return (
|
|
30
|
+
path.is_dir()
|
|
31
|
+
and (path / "profiles").is_dir()
|
|
32
|
+
and ((path / "skills").is_dir() or (path / "loops").is_dir())
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def cached_version() -> str | None:
|
|
37
|
+
vf = data_cache_dir() / VERSION_FILE
|
|
38
|
+
if vf.is_file():
|
|
39
|
+
return vf.read_text(encoding="utf-8").strip() or None
|
|
40
|
+
return None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _release_tag(version: str) -> str:
|
|
44
|
+
return version if version.startswith("v") else f"v{version}"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _fetch_latest_release_tag() -> str:
|
|
48
|
+
url = f"https://api.github.com/repos/{GITHUB_REPO}/releases/latest"
|
|
49
|
+
req = urllib.request.Request(url, headers={"Accept": "application/vnd.github+json"})
|
|
50
|
+
with urllib.request.urlopen(req, timeout=30) as resp:
|
|
51
|
+
payload = json.loads(resp.read().decode("utf-8"))
|
|
52
|
+
tag = payload.get("tag_name", "")
|
|
53
|
+
if not tag:
|
|
54
|
+
raise RuntimeError("GitHub Releases API returned no tag_name")
|
|
55
|
+
return tag
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _copy_data_tree(src_root: Path, dest: Path) -> None:
|
|
59
|
+
dest.mkdir(parents=True, exist_ok=True)
|
|
60
|
+
for name in DATA_SUBDIRS:
|
|
61
|
+
src = src_root / name
|
|
62
|
+
if not src.is_dir():
|
|
63
|
+
continue
|
|
64
|
+
dst = dest / name
|
|
65
|
+
if dst.exists():
|
|
66
|
+
shutil.rmtree(dst)
|
|
67
|
+
shutil.copytree(src, dst)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def download_data(
|
|
71
|
+
version: str | None = None,
|
|
72
|
+
*,
|
|
73
|
+
force: bool = False,
|
|
74
|
+
quiet: bool = False,
|
|
75
|
+
) -> Path:
|
|
76
|
+
"""Download capability data from a GitHub Release source tarball into the cache."""
|
|
77
|
+
cache = data_cache_dir()
|
|
78
|
+
target_version = version or cached_version() or _release_tag(__version__)
|
|
79
|
+
|
|
80
|
+
if not force and is_valid_data_root(cache):
|
|
81
|
+
current = cached_version()
|
|
82
|
+
if current and current.lstrip("v") == target_version.lstrip("v"):
|
|
83
|
+
return cache
|
|
84
|
+
|
|
85
|
+
tag = _release_tag(target_version)
|
|
86
|
+
url = f"https://github.com/{GITHUB_REPO}/archive/refs/tags/{tag}.tar.gz"
|
|
87
|
+
if not quiet:
|
|
88
|
+
print(f"[agent-toolkit] Downloading capability data ({tag})…", flush=True)
|
|
89
|
+
|
|
90
|
+
with tempfile.TemporaryDirectory(prefix="agent-toolkit-data-") as tmp:
|
|
91
|
+
tarball = Path(tmp) / "source.tar.gz"
|
|
92
|
+
try:
|
|
93
|
+
urllib.request.urlretrieve(url, tarball)
|
|
94
|
+
except urllib.error.HTTPError as exc:
|
|
95
|
+
raise RuntimeError(
|
|
96
|
+
f"Failed to download {url} (HTTP {exc.code}). "
|
|
97
|
+
"Set AGENT_TOOLKIT_ROOT to a checkout or run with bundled wheel data."
|
|
98
|
+
) from exc
|
|
99
|
+
except OSError as exc:
|
|
100
|
+
raise RuntimeError(
|
|
101
|
+
f"Failed to download {url} ({exc}). "
|
|
102
|
+
"Set AGENT_TOOLKIT_ROOT to a checkout or run with bundled wheel data."
|
|
103
|
+
) from exc
|
|
104
|
+
|
|
105
|
+
extract_dir = Path(tmp) / "extract"
|
|
106
|
+
extract_dir.mkdir()
|
|
107
|
+
with tarfile.open(tarball, "r:gz") as tar:
|
|
108
|
+
tar.extractall(extract_dir, filter="data")
|
|
109
|
+
|
|
110
|
+
roots = [p for p in extract_dir.iterdir() if p.is_dir()]
|
|
111
|
+
if not roots:
|
|
112
|
+
raise RuntimeError(f"No top-level directory in release tarball for {tag}")
|
|
113
|
+
src_root = roots[0]
|
|
114
|
+
if not is_valid_data_root(src_root):
|
|
115
|
+
raise RuntimeError(f"Release {tag} tarball does not contain capability data")
|
|
116
|
+
|
|
117
|
+
if cache.exists():
|
|
118
|
+
shutil.rmtree(cache)
|
|
119
|
+
_copy_data_tree(src_root, cache)
|
|
120
|
+
(cache / VERSION_FILE).write_text(tag.lstrip("v"), encoding="utf-8")
|
|
121
|
+
|
|
122
|
+
if not quiet:
|
|
123
|
+
print(f"[agent-toolkit] Cached data at {cache}", flush=True)
|
|
124
|
+
return cache
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def ensure_data(
|
|
128
|
+
*,
|
|
129
|
+
offline: bool = False,
|
|
130
|
+
force: bool = False,
|
|
131
|
+
version: str | None = None,
|
|
132
|
+
) -> Path | None:
|
|
133
|
+
"""Return cached/downloaded data root, or None when offline and cache is missing."""
|
|
134
|
+
cache = data_cache_dir()
|
|
135
|
+
if is_valid_data_root(cache) and not force:
|
|
136
|
+
cv = cached_version()
|
|
137
|
+
pin = version or __version__
|
|
138
|
+
if cv is None or cv.lstrip("v") == pin.lstrip("v"):
|
|
139
|
+
return cache
|
|
140
|
+
|
|
141
|
+
if offline:
|
|
142
|
+
return cache if is_valid_data_root(cache) else None
|
|
143
|
+
|
|
144
|
+
return download_data(version, force=force)
|
|
File without changes
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""Non-destructive JSON config merge for profile installs."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def merge_json_objects(
|
|
11
|
+
base: dict[str, Any],
|
|
12
|
+
overlay: dict[str, Any],
|
|
13
|
+
*,
|
|
14
|
+
prefix: str = "",
|
|
15
|
+
) -> tuple[dict[str, Any], list[dict[str, Any]]]:
|
|
16
|
+
"""Merge overlay into base without overwriting existing keys.
|
|
17
|
+
|
|
18
|
+
Returns the merged dict and a list of ownership patches (JSON-pointer-like paths).
|
|
19
|
+
"""
|
|
20
|
+
merged = dict(base)
|
|
21
|
+
patches: list[dict[str, Any]] = []
|
|
22
|
+
|
|
23
|
+
for key, value in overlay.items():
|
|
24
|
+
path = f"{prefix}/{key}" if prefix else f"/{key}"
|
|
25
|
+
if key not in merged:
|
|
26
|
+
merged[key] = value
|
|
27
|
+
patches.append({"op": "add", "path": path, "value": value})
|
|
28
|
+
continue
|
|
29
|
+
if isinstance(merged[key], dict) and isinstance(value, dict):
|
|
30
|
+
nested, nested_patches = merge_json_objects(merged[key], value, prefix=path)
|
|
31
|
+
if nested != merged[key]:
|
|
32
|
+
merged[key] = nested
|
|
33
|
+
patches.extend(nested_patches)
|
|
34
|
+
|
|
35
|
+
return merged, patches
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def merge_json_file(
|
|
39
|
+
src: Path,
|
|
40
|
+
dst: Path,
|
|
41
|
+
*,
|
|
42
|
+
force: bool = False,
|
|
43
|
+
) -> tuple[dict[str, Any] | None, list[dict[str, Any]], str]:
|
|
44
|
+
"""Merge src JSON into dst when dst exists; otherwise return src content.
|
|
45
|
+
|
|
46
|
+
Returns (result_dict, patches, ownership) where ownership is ``created`` or ``merged``.
|
|
47
|
+
"""
|
|
48
|
+
overlay = json.loads(src.read_text(encoding="utf-8"))
|
|
49
|
+
if not dst.is_file() or force:
|
|
50
|
+
return overlay, [], "created"
|
|
51
|
+
|
|
52
|
+
base = json.loads(dst.read_text(encoding="utf-8"))
|
|
53
|
+
if not isinstance(base, dict) or not isinstance(overlay, dict):
|
|
54
|
+
return None, [], "skipped"
|
|
55
|
+
|
|
56
|
+
merged, patches = merge_json_objects(base, overlay)
|
|
57
|
+
if merged == base:
|
|
58
|
+
return merged, [], "unchanged"
|
|
59
|
+
return merged, patches, "merged"
|