ww-agentic-workflows 1.0.0.dev3__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.
- ww_agentic_workflows-1.0.0.dev3/.claude/settings.json +48 -0
- ww_agentic_workflows-1.0.0.dev3/.claude/skills/noww/SKILL.md +11 -0
- ww_agentic_workflows-1.0.0.dev3/.claude/skills/update-architecture-documentation/SKILL.md +19 -0
- ww_agentic_workflows-1.0.0.dev3/.claude/skills/ww/SKILL.md +59 -0
- ww_agentic_workflows-1.0.0.dev3/.codex/hooks.json +59 -0
- ww_agentic_workflows-1.0.0.dev3/.codex/skills/noww/SKILL.md +11 -0
- ww_agentic_workflows-1.0.0.dev3/.codex/skills/update-architecture-documentation/SKILL.md +19 -0
- ww_agentic_workflows-1.0.0.dev3/.codex/skills/ww/SKILL.md +34 -0
- ww_agentic_workflows-1.0.0.dev3/.git-blame-ignore-revs +2 -0
- ww_agentic_workflows-1.0.0.dev3/.githooks/pre-commit +3 -0
- ww_agentic_workflows-1.0.0.dev3/.github/ISSUE_TEMPLATE/bug_report.yml +84 -0
- ww_agentic_workflows-1.0.0.dev3/.github/ISSUE_TEMPLATE/config.yml +8 -0
- ww_agentic_workflows-1.0.0.dev3/.github/ISSUE_TEMPLATE/feature_request.yml +38 -0
- ww_agentic_workflows-1.0.0.dev3/.github/PULL_REQUEST_TEMPLATE.md +23 -0
- ww_agentic_workflows-1.0.0.dev3/.github/workflows/dev-publish.yml +56 -0
- ww_agentic_workflows-1.0.0.dev3/.github/workflows/release-gates.yml +43 -0
- ww_agentic_workflows-1.0.0.dev3/.gitignore +19 -0
- ww_agentic_workflows-1.0.0.dev3/AGENTS.md +11 -0
- ww_agentic_workflows-1.0.0.dev3/CHANGELOG.md +744 -0
- ww_agentic_workflows-1.0.0.dev3/CLAUDE.md +1 -0
- ww_agentic_workflows-1.0.0.dev3/CODE_OF_CONDUCT.md +138 -0
- ww_agentic_workflows-1.0.0.dev3/CONTRIBUTING.md +228 -0
- ww_agentic_workflows-1.0.0.dev3/LICENSE +674 -0
- ww_agentic_workflows-1.0.0.dev3/PKG-INFO +690 -0
- ww_agentic_workflows-1.0.0.dev3/README.md +652 -0
- ww_agentic_workflows-1.0.0.dev3/SECURITY.md +69 -0
- ww_agentic_workflows-1.0.0.dev3/WW_AGENT_INSTRUCTIONS.md +49 -0
- ww_agentic_workflows-1.0.0.dev3/documentation/agent-hooks.md +270 -0
- ww_agentic_workflows-1.0.0.dev3/documentation/architecture.md +1894 -0
- ww_agentic_workflows-1.0.0.dev3/documentation/development-releases.md +97 -0
- ww_agentic_workflows-1.0.0.dev3/documentation/examples.md +879 -0
- ww_agentic_workflows-1.0.0.dev3/documentation/features.md +4639 -0
- ww_agentic_workflows-1.0.0.dev3/documentation/limitations.md +168 -0
- ww_agentic_workflows-1.0.0.dev3/documentation/python-agent-rules.md +105 -0
- ww_agentic_workflows-1.0.0.dev3/documentation/specification.md +1876 -0
- ww_agentic_workflows-1.0.0.dev3/documentation/todo.md +33 -0
- ww_agentic_workflows-1.0.0.dev3/ext/ww/git/extension.py +1728 -0
- ww_agentic_workflows-1.0.0.dev3/pyproject.toml +89 -0
- ww_agentic_workflows-1.0.0.dev3/scripts/check_distribution.py +177 -0
- ww_agentic_workflows-1.0.0.dev3/scripts/check_release_gates.py +50 -0
- ww_agentic_workflows-1.0.0.dev3/scripts/demo.sh +113 -0
- ww_agentic_workflows-1.0.0.dev3/scripts/ensure_spdx_license.py +222 -0
- ww_agentic_workflows-1.0.0.dev3/scripts/measure_pages.py +110 -0
- ww_agentic_workflows-1.0.0.dev3/scripts/run_workflow_dummy.py +83 -0
- ww_agentic_workflows-1.0.0.dev3/scripts/set_dev_version.py +50 -0
- ww_agentic_workflows-1.0.0.dev3/scripts/test +86 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/__init__.py +18 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/action_execution.py +887 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/actions/__init__.py +94 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/actions/command.py +444 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/actions/contracts.py +699 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/actions/extension.py +197 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/actions/mcp.py +84 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/actions/prompt.py +74 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/actions/skill.py +62 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/actions/slash_command.py +63 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/agents.py +151 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/amendments.py +54 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/artifacts.py +93 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assessments.py +181 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/__init__.py +2 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/agent_instructions.md +49 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/noww_skill.md +11 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/workflows/catchall.yaml +26 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/workflows/onboarding.yaml +586 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/workflows/scriptize.yaml +130 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-automate_skill.md +23 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-deduce-feedback_skill.md +38 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-feedback-rules_skill.md +48 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-learn-project_skill.md +22 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-refresh_skill.md +26 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-rule_skill.md +83 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-rules-from-artifacts_skill.md +22 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-scriptize_skill.md +33 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-setup_skill.md +94 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-solve_skill.md +23 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-suggest_skill.md +32 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww-wizard_skill.md +105 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assets/ww_skill.md +59 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/assignments.py +283 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/bootstrap.py +405 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/builtin_workflows.py +215 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/changes.py +225 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/child_coordination.py +482 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/children.py +106 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/claude_permissions.py +115 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/cli/__init__.py +7 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/cli/__main__.py +6 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/cli/audit.py +129 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/cli/catalogs.py +131 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/cli/discover.py +607 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/cli/initialization.py +898 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/cli/lookup.py +287 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/cli/main.py +1768 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/cli/parser.py +1200 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/cli/prompts.py +217 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/cli/updates.py +117 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/completion_artifacts.py +156 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/completion_inputs.py +39 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/config/__init__.py +582 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/config/actions.py +591 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/config/composition.py +571 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/config/rules.py +511 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/config/steps.py +1220 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/config/values.py +223 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/config_files.py +191 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/config_writes.py +264 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/contracts.py +155 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/control.py +41 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/defaults.py +130 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/design_docs.py +32 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/discovery.py +104 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/documents.py +217 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/errors.py +18 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/executable.py +43 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/execution_models/__init__.py +64 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/execution_models/construction.py +148 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/execution_models/decoding.py +38 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/execution_models/plan_codec.py +565 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/execution_models/records.py +1206 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/execution_models/runs.py +266 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/extensions/__init__.py +40 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/extensions/api.py +559 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/extensions/registry.py +864 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/extensions/store.py +78 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/feedback.py +342 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/handler_repairs.py +57 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/__init__.py +40 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/agents.py +380 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/install.py +168 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/notices.py +206 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/records.py +209 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/runtime.py +266 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/hooks/transcripts.py +183 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/inspect.py +896 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/__init__.py +17 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/builder.py +1682 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/commands.py +335 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/handoff.py +149 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/models.py +686 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/policy.py +219 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/instructions/text.py +168 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/interactions.py +187 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/interpolation.py +37 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/item_passes.py +167 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/items.py +99 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/locking.py +207 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/metadata_publication.py +230 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/onboarding.py +229 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/open_work.py +236 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/operations.py +193 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/operator_ui/__init__.py +16 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/operator_ui/page.html +351 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/operator_ui/server.py +215 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/operator_ui/session.py +389 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/operator_ui/sheet.py +104 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/operator_ui/view.py +109 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/output.py +339 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/output_adapters/__init__.py +12 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/output_adapters/base.py +25 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/output_adapters/json_adapter.py +37 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/output_adapters/markdown.py +2293 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/output_adapters/rule_pages.py +337 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/output_adapters/terminal.py +21 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/package_updates.py +167 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/plan/__init__.py +38 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/plan/actions.py +207 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/plan/compiler.py +1492 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/plan/constructs.py +456 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/plan/models.py +665 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/project_config.py +752 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/recovery.py +401 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/replanning.py +367 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/results.py +77 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/rule_checks.py +230 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/rule_conversion.py +331 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/rule_disputes.py +148 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/rule_store.py +456 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/rule_verification.py +714 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/rule_views.py +447 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/rule_writes.py +920 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/run_coordination.py +158 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/runtimes.py +105 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/service.py +4405 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/setup_apply.py +428 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/step_values.py +20 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/storage.py +447 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/storage_adapters/__init__.py +36 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/storage_adapters/base.py +540 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/storage_adapters/filesystem.py +370 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/storage_adapters/memory.py +195 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/storage_adapters/project_metadata.py +69 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/storage_adapters/task_document.py +484 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/task_ids.py +114 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/task_references.py +124 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/transitions.py +1619 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/updates.py +399 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/upgrade.py +95 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/validation.py +168 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/variables.py +275 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/workflow_config.py +854 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/workflow_update.py +239 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/workflow_validation.py +1260 -0
- ww_agentic_workflows-1.0.0.dev3/src/ww/workspace.py +50 -0
- ww_agentic_workflows-1.0.0.dev3/tests/action_contract_helpers.py +40 -0
- ww_agentic_workflows-1.0.0.dev3/tests/config_helpers.py +15 -0
- ww_agentic_workflows-1.0.0.dev3/tests/conftest.py +95 -0
- ww_agentic_workflows-1.0.0.dev3/tests/example_documents.py +41 -0
- ww_agentic_workflows-1.0.0.dev3/tests/fixtures/packaged_extension/ww_test_packaged_extension.py +16 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/completion.md +10 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/fix-required.md +28 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/interactive.md +53 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/item-stage.md +49 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/loop-body.md +47 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/loop-continue.md +49 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/manager-dispatch.md +23 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/operator-stop.md +31 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/step-auto-worker.md +37 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/step-rules.md +45 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/step-single.md +37 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/values-and-metadata.md +35 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/verification.md +57 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/worker-bootstrap.md +22 -0
- ww_agentic_workflows-1.0.0.dev3/tests/golden/pages/worker-handoff.md +26 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_artifact_from_containers.py +301 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_assessment_outcomes.py +557 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_assignment_tokens.py +260 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_auto_retries.py +140 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_automatic_handler_groups.py +308 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_automatic_modes.py +138 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_awaiting_operator.py +142 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_bootstrap_task_id.py +236 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_builtin_workflows.py +213 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_catchall.py +212 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_child_identity.py +234 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_child_launch_settings.py +408 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_child_stages.py +448 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_child_start_action.py +246 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_child_start_guards.py +109 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_child_tasks.py +753 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_cli.py +1262 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_command_metadata.py +165 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_complete_dispatch.py +195 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_concurrency.py +235 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_config_files.py +374 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_configuration_authority.py +55 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_discover.py +985 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_documents.py +269 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_example_behaviour.py +300 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_executable.py +179 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_extension_execution.py +1184 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_feedback_commands.py +177 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_git_extension.py +1431 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_git_variables.py +257 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_golden_pages.py +32 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_handler_repairs.py +359 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_handoff_block.py +345 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_hooks.py +1324 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_init_force.py +227 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_init_permissions.py +184 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_inspect.py +288 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_interactive.py +826 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_item_assignment.py +437 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_item_fields.py +215 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_item_pass_restarts.py +545 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_item_pass_runs.py +501 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_item_reply_reports.py +300 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_item_runtime_values.py +246 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_items.py +383 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_local_step_pages.py +43 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_loops.py +1037 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_memory_workflow_service.py +461 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_metadata_lists.py +267 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_onboarding.py +237 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_onboarding_workflows.py +614 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_pack_scenarios.py +598 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_packaged_extension.py +109 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_page_gates.py +149 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_plan_execution.py +1195 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_projects.py +739 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_recommended_workflow.py +73 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_recovery_guards.py +255 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_replanning.py +327 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_requirements_pages.py +171 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_requirements_per_session.py +196 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_restart.py +81 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_rule_commands.py +948 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_rule_conversion.py +764 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_rule_verification_flow.py +632 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_rule_write_commands.py +700 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_rules_and_checks.py +459 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_scriptize_workflow.py +651 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_setup_apply.py +436 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_setup_update.py +369 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_setup_verification.py +97 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_shared_items.py +206 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_stale_task_records.py +208 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_state_unknown_fields.py +86 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_system_scenarios.py +554 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_update_notice.py +214 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_upgrade.py +148 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_workdir.py +286 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_worker_bootstrap_text.py +23 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_worker_handoff.py +890 -0
- ww_agentic_workflows-1.0.0.dev3/tests/integration/test_workflow_service.py +415 -0
- ww_agentic_workflows-1.0.0.dev3/tests/page_catalog.py +344 -0
- ww_agentic_workflows-1.0.0.dev3/tests/plan_helpers.py +27 -0
- ww_agentic_workflows-1.0.0.dev3/tests/test_dev_version.py +68 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_action_contracts.py +770 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_action_example.py +138 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_action_phase_contexts.py +192 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_artifacts.py +56 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_assignments.py +199 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_beta_notice.py +39 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_builtin_actions.py +675 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_changes.py +158 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_checklist_prompt.py +106 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_child_stages_config.py +287 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_children_config.py +171 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_cli_prompts.py +72 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_completion_inputs.py +22 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_completion_selection.py +41 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_config.py +2167 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_config_composition.py +585 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_config_writes.py +86 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_delegation_requests.py +119 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_design_docs.py +95 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_discovery.py +39 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_examples_doc.py +118 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_execution_hints.py +352 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_extensions.py +776 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_feedback.py +189 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_handler_failure_report.py +68 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_hook_agents.py +342 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_instruction_commands.py +33 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_interactions.py +65 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_item_config.py +478 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_item_passes.py +298 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_item_validation.py +643 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_locking.py +312 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_markdown_output.py +433 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_modes.py +245 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_operator_ui.py +129 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_package_updates.py +111 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_plan.py +1368 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_project_config.py +550 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_project_metadata_storage_adapters.py +55 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_records.py +320 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_rule_disputes.py +175 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_rule_store.py +268 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_rule_verification.py +354 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_rule_writes.py +133 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_rules.py +1052 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_runtimes.py +76 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_scripts_test_bootstrap.py +190 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_step_role.py +221 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_storage.py +40 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_task_document.py +381 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_task_ids.py +136 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_task_references.py +61 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_task_storage_adapters.py +372 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_transitions.py +193 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_updates.py +253 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_validation.py +50 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_variables.py +130 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_workflow_inheritance.py +211 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_workflow_validation.py +273 -0
- ww_agentic_workflows-1.0.0.dev3/tests/unit/test_workspace.py +47 -0
- ww_agentic_workflows-1.0.0.dev3/tests/workflow_helpers.py +51 -0
- ww_agentic_workflows-1.0.0.dev3/ww.json +46 -0
- ww_agentic_workflows-1.0.0.dev3/ww.yaml +268 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"SessionStart": [
|
|
4
|
+
{
|
|
5
|
+
"hooks": [
|
|
6
|
+
{
|
|
7
|
+
"type": "command",
|
|
8
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/ww hook session-start --agent claudecode",
|
|
9
|
+
"timeout": 10
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"Stop": [
|
|
15
|
+
{
|
|
16
|
+
"hooks": [
|
|
17
|
+
{
|
|
18
|
+
"type": "command",
|
|
19
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/ww hook stop --agent claudecode",
|
|
20
|
+
"timeout": 10
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"SubagentStop": [
|
|
26
|
+
{
|
|
27
|
+
"hooks": [
|
|
28
|
+
{
|
|
29
|
+
"type": "command",
|
|
30
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/ww hook stop --agent claudecode",
|
|
31
|
+
"timeout": 10
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"SessionEnd": [
|
|
37
|
+
{
|
|
38
|
+
"hooks": [
|
|
39
|
+
{
|
|
40
|
+
"type": "command",
|
|
41
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/ww hook interrupt --agent claudecode",
|
|
42
|
+
"timeout": 5
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: noww
|
|
3
|
+
description: Work without ww. Use only when the user invokes /noww or asks not to use ww.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Work without ww
|
|
7
|
+
|
|
8
|
+
Do not use ww for the rest of this conversation, unless the user asks for it
|
|
9
|
+
again: do not run `./ww discover`, and do not start, continue, or complete a ww
|
|
10
|
+
task, `catchall` included. Carry out requests directly, as in a project without
|
|
11
|
+
ww. A ww task already in progress stays as it is; do not reset or fail it.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: update-architecture-documentation
|
|
3
|
+
description: Updates the documentation/architecture.md file with the recent changes to the architecture of this application.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Update architecture documentation
|
|
7
|
+
|
|
8
|
+
Use this skill to update the documentation of the architecture of this application.
|
|
9
|
+
Whenever explicitly asked, or if changes to the code are meaningful enough to be considered as architecture changes, keep the documentation up-to-date.
|
|
10
|
+
|
|
11
|
+
The location of the documentation is documentation/architecture.md.
|
|
12
|
+
|
|
13
|
+
The goal of that documentation is to serve an always up-to-date reference for developers/humans, and for LLM agents as well, when developing new features, or reviewing the code.
|
|
14
|
+
|
|
15
|
+
## Constraints
|
|
16
|
+
|
|
17
|
+
- Keep the documentation more high-level than deeply describing the code.
|
|
18
|
+
- Keeping the references to files/functions is acceptable.
|
|
19
|
+
- Concentrate on the "why" question more, rather than on "how" and "what" (although it is also important).
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ww
|
|
3
|
+
description: Carry out a development request through ww, this project's workflow tool. Use only when the request changes something (implement, fix, refactor, merge, edit documentation) or the user explicitly asks to work via ww, to start or continue a ww task, or to run a ww workflow; where `./ww discover` says ww is used by default, use it before changing files for any request, since every change then goes through ww. Never use it for reviews, questions, explanations, investigations, status checks or other read-only work, even when they concern ww or a ww task.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Work through ww
|
|
7
|
+
|
|
8
|
+
ww is for development: requests that change files. A review, question,
|
|
9
|
+
explanation, investigation, status check or other read-only request never
|
|
10
|
+
goes through ww; answer it directly, without these steps and without a task,
|
|
11
|
+
even where ww is used by default. When a read-only conversation turns into a
|
|
12
|
+
change, start from step 1 then.
|
|
13
|
+
|
|
14
|
+
1. Run `./ww discover` and read all of it. If it says ww is disabled, stop:
|
|
15
|
+
do not use ww, and tell the user. If it says ww is used only on request
|
|
16
|
+
and the user did not explicitly ask for ww (invoking this skill counts),
|
|
17
|
+
carry out the request without ww and do not ask.
|
|
18
|
+
2. To continue an existing task, run
|
|
19
|
+
`./ww instruction <task-id> --role manager` instead of starting a new one.
|
|
20
|
+
3. Otherwise choose the workflow that matches the request, keep its default
|
|
21
|
+
modes unless the user's wording matches another mode, and start the task
|
|
22
|
+
with the start command `discover` shows. Pass the user's requirements,
|
|
23
|
+
normalized, as `--requirements`. When the request names an external
|
|
24
|
+
ticket, such as a Jira key, use that key as the task ID; omit the ID only
|
|
25
|
+
when there is none or the workflow obtains its own.
|
|
26
|
+
When no workflow fits and you are about to change files, do not start
|
|
27
|
+
`catchall` directly: run `./ww lookup [<task>] --agent <agent>` with the
|
|
28
|
+
task the conversation works on or the request names, as written, and
|
|
29
|
+
follow its answer, then do the work as you would without ww. Read-only work
|
|
30
|
+
needs no task.
|
|
31
|
+
When the first page of `start` says rules have no check
|
|
32
|
+
yet, tell the user once and carry on: it never blocks the task, and the
|
|
33
|
+
`ww-scriptize` skill builds those checks when they want it.
|
|
34
|
+
4. Follow every ww response exactly: run each displayed command with all
|
|
35
|
+
placeholders replaced, and keep going until ww reports that the workflow
|
|
36
|
+
is complete or reports an error. On `interactive: true` steps, converse
|
|
37
|
+
naturally until intent to finish is clear, ask if ambiguous, and treat
|
|
38
|
+
"done for today" as a pause. Record and end the interaction before
|
|
39
|
+
completing it. Use the host choice tool when available; keep asynchronous
|
|
40
|
+
choices pending until an answer arrives, and do not treat timeouts or
|
|
41
|
+
preselection as answers. After completion, relay any optional
|
|
42
|
+
`ww-deduce-feedback` suggestion; do not insert learning into the plan.
|
|
43
|
+
Deduction uses ww commands and explicit existing point IDs; rule review
|
|
44
|
+
and pruning are separate, and rules require operator approval.
|
|
45
|
+
5. Never run a ww-owned handler yourself, edit ww state, or read
|
|
46
|
+
`ww.yaml` or ww's source to work out what to do next. For a handler repair
|
|
47
|
+
assignment, fix the cause and complete with an artifact; ww retries the
|
|
48
|
+
command. In `auto`, the manager dispatches the repair with `next`. When
|
|
49
|
+
ww reports `awaiting_operator` (a failed handler or work, an interrupted
|
|
50
|
+
command, a loop at its iteration limit, a changed workflow), stop and report the task, its
|
|
51
|
+
`operator_reason` and the exact error to the user (unless they gave a
|
|
52
|
+
standing authorization for routine repairs such as dependency installation,
|
|
53
|
+
formatting or retries: apply it to a stop of that kind without asking again,
|
|
54
|
+
and ask only for a material decision or an action outside it); when they
|
|
55
|
+
decide, run the recovery command ww showed, `./ww next <task-id> --retry` to run the
|
|
56
|
+
handler again, `--force --reason` to skip it or leave the loop, or
|
|
57
|
+
`--replan` / `--keep-plan` for a changed workflow. A `pass_incomplete`
|
|
58
|
+
stop is cleared by recording what it names with `./ww update-item`, then
|
|
59
|
+
`./ww next <task-id> --retry`; `--force` is refused there.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"SessionStart": [
|
|
4
|
+
{
|
|
5
|
+
"hooks": [
|
|
6
|
+
{
|
|
7
|
+
"type": "command",
|
|
8
|
+
"command": "\"$(git rev-parse --show-toplevel 2>/dev/null || pwd)\"/ww hook session-start --agent codex",
|
|
9
|
+
"timeout": 10
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"Stop": [
|
|
15
|
+
{
|
|
16
|
+
"hooks": [
|
|
17
|
+
{
|
|
18
|
+
"type": "command",
|
|
19
|
+
"command": "\"$(git rev-parse --show-toplevel 2>/dev/null || pwd)\"/ww hook stop --agent codex",
|
|
20
|
+
"timeout": 10
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"SubagentStop": [
|
|
26
|
+
{
|
|
27
|
+
"hooks": [
|
|
28
|
+
{
|
|
29
|
+
"type": "command",
|
|
30
|
+
"command": "\"$(git rev-parse --show-toplevel 2>/dev/null || pwd)\"/ww hook stop --agent codex",
|
|
31
|
+
"timeout": 10
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"Interrupt": [
|
|
37
|
+
{
|
|
38
|
+
"hooks": [
|
|
39
|
+
{
|
|
40
|
+
"type": "command",
|
|
41
|
+
"command": "\"$(git rev-parse --show-toplevel 2>/dev/null || pwd)\"/ww hook interrupt --agent codex",
|
|
42
|
+
"timeout": 3
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"SessionEnd": [
|
|
48
|
+
{
|
|
49
|
+
"hooks": [
|
|
50
|
+
{
|
|
51
|
+
"type": "command",
|
|
52
|
+
"command": "\"$(git rev-parse --show-toplevel 2>/dev/null || pwd)\"/ww hook interrupt --agent codex",
|
|
53
|
+
"timeout": 5
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: noww
|
|
3
|
+
description: Work without ww. Use only when the user invokes /noww or asks not to use ww.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Work without ww
|
|
7
|
+
|
|
8
|
+
Do not use ww for the rest of this conversation, unless the user asks for it
|
|
9
|
+
again: do not run `./ww discover`, and do not start, continue, or complete a ww
|
|
10
|
+
task, `catchall` included. Carry out requests directly, as in a project without
|
|
11
|
+
ww. A ww task already in progress stays as it is; do not reset or fail it.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: update-architecture-documentation
|
|
3
|
+
description: Updates the documentation/architecture.md file with the recent changes to the architecture of this application.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Update architecture documentation
|
|
7
|
+
|
|
8
|
+
Use this skill to update the documentation of the architecture of this application.
|
|
9
|
+
Whenever explicitly asked, or if changes to the code are meaningful enough to be considered as architecture changes, keep the documentation up-to-date.
|
|
10
|
+
|
|
11
|
+
The location of the documentation is documentation/architecture.md.
|
|
12
|
+
|
|
13
|
+
The goal of that documentation is to serve an always up-to-date reference for developers/humans, and for LLM agents as well, when developing new features, or reviewing the code.
|
|
14
|
+
|
|
15
|
+
## Constraints
|
|
16
|
+
|
|
17
|
+
- Keep the documentation more high-level than deeply describing the code.
|
|
18
|
+
- Keeping the references to files/functions is acceptable.
|
|
19
|
+
- Concentrate on the "why" question more, rather than on "how" and "what" (although it is also important).
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ww
|
|
3
|
+
description: Carry out the user's request through ww, this project's workflow tool. Use when the user asks to work via ww, to start or continue a ww task, or to run a ww workflow, and, where `./ww discover` says ww is used by default, before changing files for any request, since every change then goes through ww. Not for questions or other read-only work.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Work through ww
|
|
7
|
+
|
|
8
|
+
1. Run `./ww discover` and read all of it. If it says ww is disabled, stop:
|
|
9
|
+
do not use ww, and tell the user. If it says ww is used only on request
|
|
10
|
+
and the user did not explicitly ask for ww (invoking this skill counts),
|
|
11
|
+
carry out the request without ww and do not ask.
|
|
12
|
+
2. To continue an existing task, run
|
|
13
|
+
`./ww instruction <task-id> --role manager` instead of starting a new one.
|
|
14
|
+
3. Otherwise choose the workflow that matches the request, keep its default
|
|
15
|
+
modes unless the user's wording matches another mode, and start the task
|
|
16
|
+
with the start command `discover` shows. Pass the user's requirements,
|
|
17
|
+
normalized, as `--requirements`. When the request names an external
|
|
18
|
+
ticket, such as a Jira key, use that key as the task ID; omit the ID only
|
|
19
|
+
when there is none or the workflow obtains its own.
|
|
20
|
+
When no workflow fits and you are about to change files, do not start
|
|
21
|
+
`catchall` directly: run `./ww lookup [<task>] --agent <agent>` with the
|
|
22
|
+
task the conversation works on or the request names, as written, and
|
|
23
|
+
follow its answer, then do the work as you would without ww. Questions and
|
|
24
|
+
other read-only work need no task.
|
|
25
|
+
4. Follow every ww response exactly: run each displayed command with all
|
|
26
|
+
placeholders replaced, and keep going until ww reports that the workflow
|
|
27
|
+
is complete or reports an error.
|
|
28
|
+
5. Never run a ww-owned handler yourself, edit ww state, or read
|
|
29
|
+
`ww.yaml` or ww's source to work out what to do next. When
|
|
30
|
+
ww reports `awaiting_operator` (a failed handler or work, an interrupted
|
|
31
|
+
command, a loop at its iteration limit), stop and report the task, its
|
|
32
|
+
`operator_reason` and the exact error to the user; when they decide, run
|
|
33
|
+
the recovery command ww showed, `./ww next <task-id> --retry` to run the
|
|
34
|
+
handler again or `--force --reason` to skip it or leave the loop.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Something in ww behaved differently from what its documentation says.
|
|
3
|
+
labels: ["bug"]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: |
|
|
8
|
+
Thanks for reporting. ww is in beta, so this is genuinely useful.
|
|
9
|
+
|
|
10
|
+
**Before you paste:** `.ww/`, command output, and task state can contain
|
|
11
|
+
credentials or other private values. Sanitise anything you copy in. See
|
|
12
|
+
[Sensitive runtime data](https://github.com/from-developers-for-developers/agentic-workflows#sensitive-runtime-data).
|
|
13
|
+
|
|
14
|
+
Check [limitations.md](https://github.com/from-developers-for-developers/agentic-workflows/blob/main/documentation/limitations.md)
|
|
15
|
+
first — it lists what ww deliberately does not do yet.
|
|
16
|
+
|
|
17
|
+
- type: textarea
|
|
18
|
+
id: workflow
|
|
19
|
+
attributes:
|
|
20
|
+
label: The workflow
|
|
21
|
+
description: >
|
|
22
|
+
The relevant part of your `ww.yaml`, reduced to what still
|
|
23
|
+
reproduces the problem.
|
|
24
|
+
render: yaml
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
27
|
+
|
|
28
|
+
- type: textarea
|
|
29
|
+
id: command
|
|
30
|
+
attributes:
|
|
31
|
+
label: The command and its output
|
|
32
|
+
description: >
|
|
33
|
+
The exact command you ran, its exit code, and the exact message ww
|
|
34
|
+
printed. Sanitise it first.
|
|
35
|
+
render: console
|
|
36
|
+
validations:
|
|
37
|
+
required: true
|
|
38
|
+
|
|
39
|
+
- type: textarea
|
|
40
|
+
id: expected
|
|
41
|
+
attributes:
|
|
42
|
+
label: What you expected instead
|
|
43
|
+
validations:
|
|
44
|
+
required: true
|
|
45
|
+
|
|
46
|
+
- type: textarea
|
|
47
|
+
id: agent_account
|
|
48
|
+
attributes:
|
|
49
|
+
label: Your agent's own account of what went wrong
|
|
50
|
+
description: >
|
|
51
|
+
If you hit this while working through an agent, ask it to summarise
|
|
52
|
+
what it ran, what ww told it, and where it got stuck, and paste that
|
|
53
|
+
here. It is often the fastest route to the real cause. Leave blank if
|
|
54
|
+
you ran ww by hand.
|
|
55
|
+
validations:
|
|
56
|
+
required: false
|
|
57
|
+
|
|
58
|
+
- type: input
|
|
59
|
+
id: version
|
|
60
|
+
attributes:
|
|
61
|
+
label: ww version
|
|
62
|
+
description: Output of `ww-agentic-workflows --version`, plus the commit you are on.
|
|
63
|
+
placeholder: "0.1.0 (main @ 28e55aa)"
|
|
64
|
+
validations:
|
|
65
|
+
required: true
|
|
66
|
+
|
|
67
|
+
- type: input
|
|
68
|
+
id: environment
|
|
69
|
+
attributes:
|
|
70
|
+
label: OS, Python version, and agent
|
|
71
|
+
placeholder: "macOS 15.5, Python 3.12.14, Claude Code"
|
|
72
|
+
validations:
|
|
73
|
+
required: true
|
|
74
|
+
|
|
75
|
+
- type: dropdown
|
|
76
|
+
id: runtime
|
|
77
|
+
attributes:
|
|
78
|
+
label: Runtime
|
|
79
|
+
options:
|
|
80
|
+
- single
|
|
81
|
+
- auto
|
|
82
|
+
- not applicable
|
|
83
|
+
validations:
|
|
84
|
+
required: true
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
blank_issues_enabled: true
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Security vulnerability
|
|
4
|
+
url: https://github.com/from-developers-for-developers/agentic-workflows/security/advisories/new
|
|
5
|
+
about: Report privately through a security advisory, never as a public issue.
|
|
6
|
+
- name: Documentation
|
|
7
|
+
url: https://github.com/from-developers-for-developers/agentic-workflows/tree/main/documentation
|
|
8
|
+
about: Specification, features, examples, architecture, and known limitations.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: Suggest a capability or a change to how ww behaves.
|
|
3
|
+
labels: ["enhancement"]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: |
|
|
8
|
+
Please check
|
|
9
|
+
[limitations.md](https://github.com/from-developers-for-developers/agentic-workflows/blob/main/documentation/limitations.md)
|
|
10
|
+
first — some gaps are deliberate, and it says which.
|
|
11
|
+
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: problem
|
|
14
|
+
attributes:
|
|
15
|
+
label: The problem
|
|
16
|
+
description: >
|
|
17
|
+
What process are you trying to express, and where does ww get in the
|
|
18
|
+
way today? Describe the workflow, not only the missing feature.
|
|
19
|
+
validations:
|
|
20
|
+
required: true
|
|
21
|
+
|
|
22
|
+
- type: textarea
|
|
23
|
+
id: proposal
|
|
24
|
+
attributes:
|
|
25
|
+
label: What you would like instead
|
|
26
|
+
description: >
|
|
27
|
+
If it affects `ww.yaml`, sketch the YAML you would want to
|
|
28
|
+
write.
|
|
29
|
+
validations:
|
|
30
|
+
required: true
|
|
31
|
+
|
|
32
|
+
- type: textarea
|
|
33
|
+
id: alternatives
|
|
34
|
+
attributes:
|
|
35
|
+
label: What you tried or considered
|
|
36
|
+
description: Existing hooks, handlers, items, loops, or an extension.
|
|
37
|
+
validations:
|
|
38
|
+
required: false
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
## What this changes
|
|
2
|
+
|
|
3
|
+
<!-- The behaviour that differs afterwards, in a sentence or two. -->
|
|
4
|
+
|
|
5
|
+
## Why
|
|
6
|
+
|
|
7
|
+
<!-- The problem it solves. Link the issue if there is one. -->
|
|
8
|
+
|
|
9
|
+
## How it was verified
|
|
10
|
+
|
|
11
|
+
<!-- The checks you ran, and anything you exercised by hand. -->
|
|
12
|
+
|
|
13
|
+
- [ ] `.venv/bin/python -m pytest`
|
|
14
|
+
- [ ] `.venv/bin/python -m ruff check src tests scripts` and `ext/ww/git`
|
|
15
|
+
- [ ] `.venv/bin/python -m mypy`
|
|
16
|
+
- [ ] `.venv/bin/python scripts/check_release_gates.py` (release-facing changes)
|
|
17
|
+
- [ ] `.venv/bin/python scripts/check_distribution.py` (release-facing changes)
|
|
18
|
+
|
|
19
|
+
## Checklist
|
|
20
|
+
|
|
21
|
+
- [ ] `CHANGELOG.md` updated under today's date, if the change is user-visible.
|
|
22
|
+
- [ ] Documentation under `documentation/` updated, if behaviour or `ww.yaml` changed.
|
|
23
|
+
- [ ] Persisted-format changes carry a schema bump and are called out as incompatible.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Publish development snapshot
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [dev]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
gates:
|
|
12
|
+
uses: ./.github/workflows/release-gates.yml
|
|
13
|
+
|
|
14
|
+
build:
|
|
15
|
+
needs: gates
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
19
|
+
with:
|
|
20
|
+
persist-credentials: false
|
|
21
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
22
|
+
with:
|
|
23
|
+
python-version: "3.12"
|
|
24
|
+
- name: Stamp the upcoming release's development version
|
|
25
|
+
run: python scripts/set_dev_version.py --base-version 1.0.0 --run-number "$GITHUB_RUN_NUMBER"
|
|
26
|
+
# The distribution check imports ww from the checkout, so it needs the
|
|
27
|
+
# runtime dependencies as well as the build tools.
|
|
28
|
+
- run: python -m pip install build twine .
|
|
29
|
+
- run: python -m build
|
|
30
|
+
- run: python -m twine check --strict dist/*
|
|
31
|
+
- run: python scripts/check_distribution.py --dist-dir dist
|
|
32
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
33
|
+
with:
|
|
34
|
+
name: dev-distributions
|
|
35
|
+
path: dist/*
|
|
36
|
+
if-no-files-found: error
|
|
37
|
+
retention-days: 7
|
|
38
|
+
overwrite: true
|
|
39
|
+
|
|
40
|
+
publish:
|
|
41
|
+
needs: build
|
|
42
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/dev'
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
environment: pypi-dev
|
|
45
|
+
permissions:
|
|
46
|
+
id-token: write
|
|
47
|
+
steps:
|
|
48
|
+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
49
|
+
with:
|
|
50
|
+
name: dev-distributions
|
|
51
|
+
path: dist
|
|
52
|
+
- name: Publish the validated distributions to PyPI
|
|
53
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
54
|
+
with:
|
|
55
|
+
# A rerun keeps the version and can finish a partially uploaded release.
|
|
56
|
+
skip-existing: true
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: Release gates
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
pull_request:
|
|
6
|
+
push:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
quality-and-compatibility:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
matrix:
|
|
15
|
+
# Keep the declared minimum executable, alongside the primary CI runtime.
|
|
16
|
+
python-version: ["3.10", "3.12"]
|
|
17
|
+
steps:
|
|
18
|
+
# Pinned to commits, not tags: a tag can be repointed at new code.
|
|
19
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
20
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ matrix.python-version }}
|
|
23
|
+
cache: pip
|
|
24
|
+
- run: python -m pip install -e '.[dev]'
|
|
25
|
+
- run: python -m ruff format --check src tests scripts ext/ww/git
|
|
26
|
+
- run: python -m ruff check src tests scripts ext/ww/git
|
|
27
|
+
- run: python -m mypy
|
|
28
|
+
- run: python scripts/check_release_gates.py
|
|
29
|
+
- run: python -m pytest
|
|
30
|
+
# Build, inspect, and install artifacts without the source checkout on sys.path.
|
|
31
|
+
- run: python scripts/check_distribution.py
|
|
32
|
+
# One runtime dependency and a few dev tools, but the answer to
|
|
33
|
+
# "is any of it known-vulnerable?" should be checked every run, not when
|
|
34
|
+
# someone thinks to ask. The set is frozen before pip-audit is installed
|
|
35
|
+
# so the auditor's own dependencies are not audited too, and without the
|
|
36
|
+
# editable project, which has no release to compare against and which
|
|
37
|
+
# --strict would otherwise treat as a collection failure.
|
|
38
|
+
- name: Audit dependencies for known vulnerabilities
|
|
39
|
+
if: matrix.python-version == '3.12'
|
|
40
|
+
run: |
|
|
41
|
+
python -m pip freeze --exclude-editable > "$RUNNER_TEMP/audit-requirements.txt"
|
|
42
|
+
python -m pip install pip-audit
|
|
43
|
+
pip-audit --strict -r "$RUNNER_TEMP/audit-requirements.txt"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
.ww/*
|
|
2
|
+
!.ww/project.md
|
|
3
|
+
__pycache__/
|
|
4
|
+
.pytest_cache/
|
|
5
|
+
.ruff_cache/
|
|
6
|
+
*.egg-info/
|
|
7
|
+
.venv/
|
|
8
|
+
/ww
|
|
9
|
+
.idea
|
|
10
|
+
/tasks
|
|
11
|
+
/.codex/config.toml
|
|
12
|
+
/ww-worktrees
|
|
13
|
+
.env
|
|
14
|
+
*ww.local.yaml
|
|
15
|
+
*ww.local.json
|
|
16
|
+
ww-setup.local.yaml
|
|
17
|
+
|
|
18
|
+
# Planning notes stay local
|
|
19
|
+
/documentation/plans/
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## Codex execution boundary
|
|
2
|
+
|
|
3
|
+
Run WW CLI commands using Codex's normal sandbox policy. Do not request
|
|
4
|
+
escalation preemptively.
|
|
5
|
+
|
|
6
|
+
If a specific WW command fails because sandbox access prevents it from
|
|
7
|
+
completing, rerun only that command outside the sandbox with approval. WW
|
|
8
|
+
remains the trusted execution boundary for its handlers; do not invoke its Git
|
|
9
|
+
or other handlers separately.
|
|
10
|
+
|
|
11
|
+
@WW_AGENT_INSTRUCTIONS.md
|