deepwork 0.2.0__py3-none-any.whl → 0.3.1__py3-none-any.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.
- deepwork/cli/install.py +116 -71
- deepwork/cli/sync.py +20 -20
- deepwork/core/adapters.py +88 -51
- deepwork/core/command_executor.py +173 -0
- deepwork/core/generator.py +148 -31
- deepwork/core/hooks_syncer.py +51 -25
- deepwork/core/parser.py +8 -0
- deepwork/core/pattern_matcher.py +271 -0
- deepwork/core/rules_parser.py +559 -0
- deepwork/core/rules_queue.py +321 -0
- deepwork/hooks/README.md +181 -0
- deepwork/hooks/__init__.py +77 -1
- deepwork/hooks/claude_hook.sh +55 -0
- deepwork/hooks/gemini_hook.sh +55 -0
- deepwork/hooks/rules_check.py +700 -0
- deepwork/hooks/wrapper.py +363 -0
- deepwork/schemas/job_schema.py +14 -1
- deepwork/schemas/rules_schema.py +135 -0
- deepwork/standard_jobs/deepwork_jobs/job.yml +35 -53
- deepwork/standard_jobs/deepwork_jobs/steps/define.md +9 -6
- deepwork/standard_jobs/deepwork_jobs/steps/implement.md +28 -26
- deepwork/standard_jobs/deepwork_jobs/steps/learn.md +2 -2
- deepwork/standard_jobs/deepwork_rules/hooks/capture_prompt_work_tree.sh +30 -0
- deepwork/standard_jobs/deepwork_rules/hooks/global_hooks.yml +8 -0
- deepwork/standard_jobs/deepwork_rules/job.yml +47 -0
- deepwork/standard_jobs/deepwork_rules/rules/.gitkeep +13 -0
- deepwork/standard_jobs/deepwork_rules/rules/api-documentation-sync.md.example +10 -0
- deepwork/standard_jobs/deepwork_rules/rules/readme-documentation.md.example +10 -0
- deepwork/standard_jobs/deepwork_rules/rules/security-review.md.example +11 -0
- deepwork/standard_jobs/deepwork_rules/rules/skill-md-validation.md +46 -0
- deepwork/standard_jobs/deepwork_rules/rules/source-test-pairing.md.example +13 -0
- deepwork/standard_jobs/deepwork_rules/steps/define.md +249 -0
- deepwork/templates/claude/skill-job-meta.md.jinja +70 -0
- deepwork/templates/claude/skill-job-step.md.jinja +198 -0
- deepwork/templates/gemini/skill-job-meta.toml.jinja +76 -0
- deepwork/templates/gemini/skill-job-step.toml.jinja +147 -0
- {deepwork-0.2.0.dist-info → deepwork-0.3.1.dist-info}/METADATA +56 -25
- deepwork-0.3.1.dist-info/RECORD +62 -0
- deepwork/core/policy_parser.py +0 -295
- deepwork/hooks/evaluate_policies.py +0 -376
- deepwork/schemas/policy_schema.py +0 -78
- deepwork/standard_jobs/deepwork_policy/hooks/capture_prompt_work_tree.sh +0 -27
- deepwork/standard_jobs/deepwork_policy/hooks/global_hooks.yml +0 -8
- deepwork/standard_jobs/deepwork_policy/hooks/policy_stop_hook.sh +0 -56
- deepwork/standard_jobs/deepwork_policy/job.yml +0 -35
- deepwork/standard_jobs/deepwork_policy/steps/define.md +0 -195
- deepwork/templates/claude/command-job-step.md.jinja +0 -210
- deepwork/templates/default_policy.yml +0 -53
- deepwork/templates/gemini/command-job-step.toml.jinja +0 -169
- deepwork-0.2.0.dist-info/RECORD +0 -49
- /deepwork/standard_jobs/{deepwork_policy → deepwork_rules}/hooks/user_prompt_submit.sh +0 -0
- {deepwork-0.2.0.dist-info → deepwork-0.3.1.dist-info}/WHEEL +0 -0
- {deepwork-0.2.0.dist-info → deepwork-0.3.1.dist-info}/entry_points.txt +0 -0
- {deepwork-0.2.0.dist-info → deepwork-0.3.1.dist-info}/licenses/LICENSE.md +0 -0
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
# Define Policy
|
|
2
|
-
|
|
3
|
-
## Objective
|
|
4
|
-
|
|
5
|
-
Create or update policy entries in the `.deepwork.policy.yml` file to enforce team guidelines, documentation requirements, or other constraints when specific files change.
|
|
6
|
-
|
|
7
|
-
## Task
|
|
8
|
-
|
|
9
|
-
Guide the user through defining a new policy by asking clarifying questions. **Do not create the policy without first understanding what they want to enforce.**
|
|
10
|
-
|
|
11
|
-
### Step 1: Understand the Policy Purpose
|
|
12
|
-
|
|
13
|
-
Start by asking questions to understand what the user wants to enforce:
|
|
14
|
-
|
|
15
|
-
1. **What guideline or constraint should this policy enforce?**
|
|
16
|
-
- What situation triggers the need for action?
|
|
17
|
-
- What files or directories, when changed, should trigger this policy?
|
|
18
|
-
- Examples: "When config files change", "When API code changes", "When database schema changes"
|
|
19
|
-
|
|
20
|
-
2. **What action should be taken?**
|
|
21
|
-
- What should the agent do when the policy triggers?
|
|
22
|
-
- Update documentation? Perform a security review? Update tests?
|
|
23
|
-
- Is there a specific file or process that needs attention?
|
|
24
|
-
|
|
25
|
-
3. **Are there any "safety" conditions?**
|
|
26
|
-
- Are there files that, if also changed, mean the policy doesn't need to fire?
|
|
27
|
-
- For example: If config changes AND install_guide.md changes, assume docs are already updated
|
|
28
|
-
- This prevents redundant prompts when the user has already done the right thing
|
|
29
|
-
|
|
30
|
-
### Step 2: Define the Trigger Patterns
|
|
31
|
-
|
|
32
|
-
Help the user define glob patterns for files that should trigger the policy:
|
|
33
|
-
|
|
34
|
-
**Common patterns:**
|
|
35
|
-
- `src/**/*.py` - All Python files in src directory (recursive)
|
|
36
|
-
- `app/config/**/*` - All files in app/config directory
|
|
37
|
-
- `*.md` - All markdown files in root
|
|
38
|
-
- `src/api/**/*` - All files in the API directory
|
|
39
|
-
- `migrations/**/*.sql` - All SQL migrations
|
|
40
|
-
|
|
41
|
-
**Pattern syntax:**
|
|
42
|
-
- `*` - Matches any characters within a single path segment
|
|
43
|
-
- `**` - Matches any characters across multiple path segments (recursive)
|
|
44
|
-
- `?` - Matches a single character
|
|
45
|
-
|
|
46
|
-
### Step 3: Define Safety Patterns (Optional)
|
|
47
|
-
|
|
48
|
-
If there are files that, when also changed, mean the policy shouldn't fire:
|
|
49
|
-
|
|
50
|
-
**Examples:**
|
|
51
|
-
- Policy: "Update install guide when config changes"
|
|
52
|
-
- Trigger: `app/config/**/*`
|
|
53
|
-
- Safety: `docs/install_guide.md` (if already updated, don't prompt)
|
|
54
|
-
|
|
55
|
-
- Policy: "Security review for auth changes"
|
|
56
|
-
- Trigger: `src/auth/**/*`
|
|
57
|
-
- Safety: `SECURITY.md`, `docs/security_review.md`
|
|
58
|
-
|
|
59
|
-
### Step 3b: Choose the Comparison Mode (Optional)
|
|
60
|
-
|
|
61
|
-
The `compare_to` field controls what baseline is used when detecting "changed files":
|
|
62
|
-
|
|
63
|
-
**Options:**
|
|
64
|
-
- `base` (default) - Compares to the base of the current branch (merge-base with main/master). This is the most common choice for feature branches, as it shows all changes made on the branch.
|
|
65
|
-
- `default_tip` - Compares to the current tip of the default branch (main/master). Useful when you want to see the difference from what's currently in production.
|
|
66
|
-
- `prompt` - Compares to the state at the start of each prompt. Useful for policies that should only fire based on changes made during a single agent response.
|
|
67
|
-
|
|
68
|
-
**When to use each:**
|
|
69
|
-
- **base**: Best for most policies. "Did this branch change config files?" → trigger docs review
|
|
70
|
-
- **default_tip**: For policies about what's different from production/main
|
|
71
|
-
- **prompt**: For policies that should only consider very recent changes within the current session
|
|
72
|
-
|
|
73
|
-
Most policies should use the default (`base`) and don't need to specify `compare_to`.
|
|
74
|
-
|
|
75
|
-
### Step 4: Write the Instructions
|
|
76
|
-
|
|
77
|
-
Create clear, actionable instructions for what the agent should do when the policy fires.
|
|
78
|
-
|
|
79
|
-
**Good instructions include:**
|
|
80
|
-
- What to check or review
|
|
81
|
-
- What files might need updating
|
|
82
|
-
- Specific actions to take
|
|
83
|
-
- Quality criteria for completion
|
|
84
|
-
|
|
85
|
-
**Example:**
|
|
86
|
-
```
|
|
87
|
-
Configuration files have changed. Please:
|
|
88
|
-
1. Review docs/install_guide.md for accuracy
|
|
89
|
-
2. Update any installation steps that reference changed config
|
|
90
|
-
3. Verify environment variable documentation is current
|
|
91
|
-
4. Test that installation instructions still work
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### Step 5: Create the Policy Entry
|
|
95
|
-
|
|
96
|
-
Create or update `.deepwork.policy.yml` in the project root.
|
|
97
|
-
|
|
98
|
-
**File Location**: `.deepwork.policy.yml` (root of project)
|
|
99
|
-
|
|
100
|
-
**Format**:
|
|
101
|
-
```yaml
|
|
102
|
-
- name: "[Friendly name for the policy]"
|
|
103
|
-
trigger: "[glob pattern]" # or array: ["pattern1", "pattern2"]
|
|
104
|
-
safety: "[glob pattern]" # optional, or array
|
|
105
|
-
compare_to: "base" # optional: "base" (default), "default_tip", or "prompt"
|
|
106
|
-
instructions: |
|
|
107
|
-
[Multi-line instructions for the agent...]
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
**Alternative with instructions_file**:
|
|
111
|
-
```yaml
|
|
112
|
-
- name: "[Friendly name for the policy]"
|
|
113
|
-
trigger: "[glob pattern]"
|
|
114
|
-
safety: "[glob pattern]"
|
|
115
|
-
compare_to: "base" # optional
|
|
116
|
-
instructions_file: "path/to/instructions.md"
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### Step 6: Verify the Policy
|
|
120
|
-
|
|
121
|
-
After creating the policy:
|
|
122
|
-
|
|
123
|
-
1. **Check the YAML syntax** - Ensure valid YAML formatting
|
|
124
|
-
2. **Test trigger patterns** - Verify patterns match intended files
|
|
125
|
-
3. **Review instructions** - Ensure they're clear and actionable
|
|
126
|
-
4. **Check for conflicts** - Ensure the policy doesn't conflict with existing ones
|
|
127
|
-
|
|
128
|
-
## Example Policies
|
|
129
|
-
|
|
130
|
-
### Update Documentation on Config Changes
|
|
131
|
-
```yaml
|
|
132
|
-
- name: "Update install guide on config changes"
|
|
133
|
-
trigger: "app/config/**/*"
|
|
134
|
-
safety: "docs/install_guide.md"
|
|
135
|
-
instructions: |
|
|
136
|
-
Configuration files have been modified. Please review docs/install_guide.md
|
|
137
|
-
and update it if any installation instructions need to change based on the
|
|
138
|
-
new configuration.
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Security Review for Auth Code
|
|
142
|
-
```yaml
|
|
143
|
-
- name: "Security review for authentication changes"
|
|
144
|
-
trigger:
|
|
145
|
-
- "src/auth/**/*"
|
|
146
|
-
- "src/security/**/*"
|
|
147
|
-
safety:
|
|
148
|
-
- "SECURITY.md"
|
|
149
|
-
- "docs/security_audit.md"
|
|
150
|
-
instructions: |
|
|
151
|
-
Authentication or security code has been changed. Please:
|
|
152
|
-
1. Review for hardcoded credentials or secrets
|
|
153
|
-
2. Check input validation on user inputs
|
|
154
|
-
3. Verify access control logic is correct
|
|
155
|
-
4. Update security documentation if needed
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### API Documentation Sync
|
|
159
|
-
```yaml
|
|
160
|
-
- name: "API documentation update"
|
|
161
|
-
trigger: "src/api/**/*.py"
|
|
162
|
-
safety: "docs/api/**/*.md"
|
|
163
|
-
instructions: |
|
|
164
|
-
API code has changed. Please verify that API documentation in docs/api/
|
|
165
|
-
is up to date with the code changes. Pay special attention to:
|
|
166
|
-
- New or changed endpoints
|
|
167
|
-
- Modified request/response schemas
|
|
168
|
-
- Updated authentication requirements
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
## Output Format
|
|
172
|
-
|
|
173
|
-
### .deepwork.policy.yml
|
|
174
|
-
Create or update this file at the project root with the new policy entry.
|
|
175
|
-
|
|
176
|
-
## Quality Criteria
|
|
177
|
-
|
|
178
|
-
- Policy name is clear and descriptive
|
|
179
|
-
- Trigger patterns accurately match the intended files
|
|
180
|
-
- Safety patterns prevent unnecessary triggering
|
|
181
|
-
- Instructions are actionable and specific
|
|
182
|
-
- YAML is valid and properly formatted
|
|
183
|
-
|
|
184
|
-
## Context
|
|
185
|
-
|
|
186
|
-
Policies are evaluated automatically when you finish working on a task. The system:
|
|
187
|
-
1. Determines which files have changed based on each policy's `compare_to` setting:
|
|
188
|
-
- `base` (default): Files changed since the branch diverged from main/master
|
|
189
|
-
- `default_tip`: Files different from the current main/master branch
|
|
190
|
-
- `prompt`: Files changed since the last prompt submission
|
|
191
|
-
2. Checks if any changes match policy trigger patterns
|
|
192
|
-
3. Skips policies where safety patterns also matched
|
|
193
|
-
4. Prompts you with instructions for any triggered policies
|
|
194
|
-
|
|
195
|
-
You can mark a policy as addressed by including `<promise>✓ Policy Name</promise>` in your response (replace Policy Name with the actual policy name). This tells the system you've already handled that policy's requirements.
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: {{ step_description }}
|
|
3
|
-
{% if hooks %}
|
|
4
|
-
hooks:
|
|
5
|
-
{% for event_name, event_hooks in hooks.items() %}
|
|
6
|
-
{{ event_name }}:
|
|
7
|
-
- hooks:
|
|
8
|
-
{% for hook in event_hooks %}
|
|
9
|
-
{% if hook.type == "script" %}
|
|
10
|
-
- type: command
|
|
11
|
-
command: ".deepwork/jobs/{{ job_name }}/{{ hook.path }}"
|
|
12
|
-
{% else %}
|
|
13
|
-
- type: prompt
|
|
14
|
-
prompt: |
|
|
15
|
-
{% if event_name == "Stop" %}
|
|
16
|
-
You must evaluate whether Claude has met all the below quality criteria for the request.
|
|
17
|
-
|
|
18
|
-
## Quality Criteria
|
|
19
|
-
|
|
20
|
-
{{ hook.content | indent(12) }}
|
|
21
|
-
|
|
22
|
-
## Instructions
|
|
23
|
-
|
|
24
|
-
Review the conversation and determine if ALL quality criteria above have been satisfied.
|
|
25
|
-
Look for evidence that each criterion has been addressed.
|
|
26
|
-
|
|
27
|
-
If the agent has included `<promise>✓ Quality Criteria Met</promise>` in their response AND
|
|
28
|
-
all criteria appear to be met, respond with: {"ok": true}
|
|
29
|
-
|
|
30
|
-
If criteria are NOT met AND the promise tag is missing, respond with:
|
|
31
|
-
{"ok": false, "reason": "Continue working. [specific feedback on what's wrong]"}
|
|
32
|
-
{% else %}
|
|
33
|
-
{{ hook.content | indent(12) }}
|
|
34
|
-
{% endif %}
|
|
35
|
-
{% endif %}
|
|
36
|
-
{% endfor %}
|
|
37
|
-
{% endfor %}
|
|
38
|
-
{% endif %}
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
# {{ job_name }}.{{ step_id }}
|
|
42
|
-
|
|
43
|
-
{% if is_standalone %}
|
|
44
|
-
**Standalone command** in the **{{ job_name }}** job - can be run anytime
|
|
45
|
-
{% else %}
|
|
46
|
-
**Step {{ step_number }} of {{ total_steps }}** in the **{{ job_name }}** workflow
|
|
47
|
-
{% endif %}
|
|
48
|
-
|
|
49
|
-
**Summary**: {{ job_summary }}
|
|
50
|
-
|
|
51
|
-
{% if job_description %}
|
|
52
|
-
## Job Overview
|
|
53
|
-
|
|
54
|
-
{{ job_description }}
|
|
55
|
-
{% endif %}
|
|
56
|
-
|
|
57
|
-
{% if dependencies %}
|
|
58
|
-
## Prerequisites
|
|
59
|
-
|
|
60
|
-
This step requires completion of the following step(s):
|
|
61
|
-
{% for dep in dependencies %}
|
|
62
|
-
- `/{{ job_name }}.{{ dep }}`
|
|
63
|
-
{% endfor %}
|
|
64
|
-
|
|
65
|
-
Please ensure these steps have been completed before proceeding.
|
|
66
|
-
{% endif %}
|
|
67
|
-
|
|
68
|
-
## Instructions
|
|
69
|
-
|
|
70
|
-
{{ instructions_content }}
|
|
71
|
-
|
|
72
|
-
{% if user_inputs or file_inputs %}
|
|
73
|
-
## Inputs
|
|
74
|
-
|
|
75
|
-
{% if user_inputs %}
|
|
76
|
-
### User Parameters
|
|
77
|
-
|
|
78
|
-
Please gather the following information from the user:
|
|
79
|
-
{% for input in user_inputs %}
|
|
80
|
-
- **{{ input.name }}**: {{ input.description }}
|
|
81
|
-
{% endfor %}
|
|
82
|
-
{% endif %}
|
|
83
|
-
|
|
84
|
-
{% if file_inputs %}
|
|
85
|
-
### Required Files
|
|
86
|
-
|
|
87
|
-
This step requires the following files from previous steps:
|
|
88
|
-
{% for input in file_inputs %}
|
|
89
|
-
- `{{ input.file }}` (from step `{{ input.from_step }}`)
|
|
90
|
-
{% endfor %}
|
|
91
|
-
|
|
92
|
-
Make sure to read and use these files as context for this step.
|
|
93
|
-
{% endif %}
|
|
94
|
-
{% endif %}
|
|
95
|
-
|
|
96
|
-
## Work Branch Management
|
|
97
|
-
|
|
98
|
-
All work for this job should be done on a dedicated work branch:
|
|
99
|
-
|
|
100
|
-
1. **Check current branch**:
|
|
101
|
-
- If already on a work branch for this job (format: `deepwork/{{ job_name }}-[instance]-[date]`), continue using it
|
|
102
|
-
- If on main/master, create a new work branch
|
|
103
|
-
|
|
104
|
-
2. **Create work branch** (if needed):
|
|
105
|
-
```bash
|
|
106
|
-
git checkout -b deepwork/{{ job_name }}-[instance]-$(date +%Y%m%d)
|
|
107
|
-
```
|
|
108
|
-
Replace `[instance]` with a descriptive identifier (e.g., `acme`, `q1-launch`, etc.)
|
|
109
|
-
|
|
110
|
-
## Output Requirements
|
|
111
|
-
|
|
112
|
-
{% if outputs %}
|
|
113
|
-
Create the following output(s):
|
|
114
|
-
{% for output in outputs %}
|
|
115
|
-
- `{{ output }}`{% if output.endswith('/') %} (directory){% endif %}
|
|
116
|
-
{% endfor %}
|
|
117
|
-
|
|
118
|
-
Ensure all outputs are:
|
|
119
|
-
- Well-formatted and complete
|
|
120
|
-
- Ready for review or use by subsequent steps
|
|
121
|
-
{% else %}
|
|
122
|
-
No specific files are output by this command.
|
|
123
|
-
{% endif %}
|
|
124
|
-
|
|
125
|
-
{% if stop_hooks %}
|
|
126
|
-
## Quality Validation Loop
|
|
127
|
-
|
|
128
|
-
This step uses an iterative quality validation loop. After completing your work, stop hook(s) will evaluate whether the outputs meet quality criteria. If criteria are not met, you will be prompted to continue refining.
|
|
129
|
-
|
|
130
|
-
{% for hook in stop_hooks %}
|
|
131
|
-
{% if hook.type == "script" %}
|
|
132
|
-
**Validation Script**: `.deepwork/jobs/{{ job_name }}/{{ hook.path }}`
|
|
133
|
-
|
|
134
|
-
The validation script will be executed automatically when you attempt to complete this step.
|
|
135
|
-
{% else %}
|
|
136
|
-
### Quality Criteria{% if stop_hooks | length > 1 %} ({{ loop.index }}){% endif %}
|
|
137
|
-
|
|
138
|
-
{{ hook.content }}
|
|
139
|
-
{% endif %}
|
|
140
|
-
{% endfor %}
|
|
141
|
-
|
|
142
|
-
### Completion Promise
|
|
143
|
-
|
|
144
|
-
To signal that all quality criteria have been met, include this tag in your final response:
|
|
145
|
-
|
|
146
|
-
```
|
|
147
|
-
<promise>✓ Quality Criteria Met</promise>
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
**Important**: Only include this promise tag when you have verified that ALL quality criteria above are satisfied. The validation loop will continue until this promise is detected.
|
|
151
|
-
|
|
152
|
-
{% endif %}
|
|
153
|
-
## Completion
|
|
154
|
-
|
|
155
|
-
After completing this step:
|
|
156
|
-
|
|
157
|
-
1. **Verify outputs**: Confirm all required files have been created
|
|
158
|
-
|
|
159
|
-
2. **Inform the user**:
|
|
160
|
-
{% if is_standalone %}
|
|
161
|
-
- The {{ step_id }} command is complete
|
|
162
|
-
{% if outputs %}
|
|
163
|
-
- Outputs created: {{ outputs | join(', ') }}
|
|
164
|
-
{% endif %}
|
|
165
|
-
- This command can be run again anytime to make further changes
|
|
166
|
-
{% else %}
|
|
167
|
-
- Step {{ step_number }} of {{ total_steps }} is complete
|
|
168
|
-
{% if outputs %}
|
|
169
|
-
- Outputs created: {{ outputs | join(', ') }}
|
|
170
|
-
{% endif %}
|
|
171
|
-
{% if next_step %}
|
|
172
|
-
- Ready to proceed to next step: `/{{ job_name }}.{{ next_step }}`
|
|
173
|
-
{% else %}
|
|
174
|
-
- This is the final step - the job is complete!
|
|
175
|
-
{% endif %}
|
|
176
|
-
{% endif %}
|
|
177
|
-
|
|
178
|
-
{% if is_standalone %}
|
|
179
|
-
## Command Complete
|
|
180
|
-
|
|
181
|
-
This is a standalone command that can be run anytime. The outputs are ready for use.
|
|
182
|
-
|
|
183
|
-
Consider:
|
|
184
|
-
- Reviewing the outputs
|
|
185
|
-
- Running `deepwork sync` if job definitions were changed
|
|
186
|
-
- Re-running this command later if further changes are needed
|
|
187
|
-
{% elif next_step %}
|
|
188
|
-
## Next Step
|
|
189
|
-
|
|
190
|
-
To continue the workflow, run:
|
|
191
|
-
```
|
|
192
|
-
/{{ job_name }}.{{ next_step }}
|
|
193
|
-
```
|
|
194
|
-
{% else %}
|
|
195
|
-
## Workflow Complete
|
|
196
|
-
|
|
197
|
-
This is the final step in the {{ job_name }} workflow. All outputs should now be complete and ready for review.
|
|
198
|
-
|
|
199
|
-
Consider:
|
|
200
|
-
- Reviewing all work products
|
|
201
|
-
- Creating a pull request to merge the work branch
|
|
202
|
-
- Documenting any insights or learnings
|
|
203
|
-
{% endif %}
|
|
204
|
-
|
|
205
|
-
---
|
|
206
|
-
|
|
207
|
-
## Context Files
|
|
208
|
-
|
|
209
|
-
- Job definition: `.deepwork/jobs/{{ job_name }}/job.yml`
|
|
210
|
-
- Step instructions: `.deepwork/jobs/{{ job_name }}/{{ instructions_file }}`
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# DeepWork Policy Configuration
|
|
2
|
-
#
|
|
3
|
-
# Policies are automated guardrails that trigger when specific files change.
|
|
4
|
-
# They help ensure documentation stays current, security reviews happen, etc.
|
|
5
|
-
#
|
|
6
|
-
# Use /deepwork_policy.define to create new policies interactively.
|
|
7
|
-
#
|
|
8
|
-
# Format:
|
|
9
|
-
# - name: "Friendly name for the policy"
|
|
10
|
-
# trigger: "glob/pattern/**/*" # or array: ["pattern1", "pattern2"]
|
|
11
|
-
# safety: "pattern/**/*" # optional - if these also changed, skip the policy
|
|
12
|
-
# compare_to: "base" # optional: "base" (default), "default_tip", or "prompt"
|
|
13
|
-
# instructions: |
|
|
14
|
-
# Multi-line instructions for the AI agent...
|
|
15
|
-
#
|
|
16
|
-
# Example policies (uncomment and customize):
|
|
17
|
-
#
|
|
18
|
-
# - name: "README Documentation"
|
|
19
|
-
# trigger: "src/**/*"
|
|
20
|
-
# safety: "README.md"
|
|
21
|
-
# instructions: |
|
|
22
|
-
# Source code has been modified. Please review README.md for accuracy:
|
|
23
|
-
# 1. Verify the project overview reflects current functionality
|
|
24
|
-
# 2. Check that usage examples are still correct
|
|
25
|
-
# 3. Ensure installation/setup instructions remain valid
|
|
26
|
-
#
|
|
27
|
-
# - name: "API Documentation Sync"
|
|
28
|
-
# trigger: "src/api/**/*"
|
|
29
|
-
# safety: "docs/api/**/*.md"
|
|
30
|
-
# instructions: |
|
|
31
|
-
# API code has changed. Please verify that API documentation is up to date:
|
|
32
|
-
# - New or changed endpoints
|
|
33
|
-
# - Modified request/response schemas
|
|
34
|
-
# - Updated authentication requirements
|
|
35
|
-
#
|
|
36
|
-
# - name: "Security Review for Auth Changes"
|
|
37
|
-
# trigger:
|
|
38
|
-
# - "src/auth/**/*"
|
|
39
|
-
# - "src/security/**/*"
|
|
40
|
-
# instructions: |
|
|
41
|
-
# Authentication or security code has been changed. Please:
|
|
42
|
-
# 1. Review for hardcoded credentials or secrets
|
|
43
|
-
# 2. Check input validation on user inputs
|
|
44
|
-
# 3. Verify access control logic is correct
|
|
45
|
-
#
|
|
46
|
-
# - name: "Test Coverage for New Code"
|
|
47
|
-
# trigger: "src/**/*.py"
|
|
48
|
-
# safety: "tests/**/*.py"
|
|
49
|
-
# instructions: |
|
|
50
|
-
# New source code was added. Please ensure appropriate test coverage:
|
|
51
|
-
# 1. Add unit tests for new functions/methods
|
|
52
|
-
# 2. Update integration tests if behavior changed
|
|
53
|
-
# 3. Verify all new code paths are tested
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
# {{ job_name }}:{{ step_id }}
|
|
2
|
-
#
|
|
3
|
-
# {{ step_description }}
|
|
4
|
-
#
|
|
5
|
-
# Generated by DeepWork - do not edit manually
|
|
6
|
-
|
|
7
|
-
description = "{{ step_description | replace('"', '\\"') }}"
|
|
8
|
-
|
|
9
|
-
prompt = """
|
|
10
|
-
# {{ job_name }}:{{ step_id }}
|
|
11
|
-
|
|
12
|
-
{% if is_standalone %}
|
|
13
|
-
**Standalone command** in the **{{ job_name }}** job - can be run anytime
|
|
14
|
-
{% else %}
|
|
15
|
-
**Step {{ step_number }} of {{ total_steps }}** in the **{{ job_name }}** workflow
|
|
16
|
-
{% endif %}
|
|
17
|
-
|
|
18
|
-
**Summary**: {{ job_summary }}
|
|
19
|
-
|
|
20
|
-
{% if job_description %}
|
|
21
|
-
## Job Overview
|
|
22
|
-
|
|
23
|
-
{{ job_description }}
|
|
24
|
-
{% endif %}
|
|
25
|
-
|
|
26
|
-
{% if dependencies %}
|
|
27
|
-
## Prerequisites
|
|
28
|
-
|
|
29
|
-
This step requires completion of the following step(s):
|
|
30
|
-
{% for dep in dependencies %}
|
|
31
|
-
- `/{{ job_name }}:{{ dep }}`
|
|
32
|
-
{% endfor %}
|
|
33
|
-
|
|
34
|
-
Please ensure these steps have been completed before proceeding.
|
|
35
|
-
{% endif %}
|
|
36
|
-
|
|
37
|
-
## Instructions
|
|
38
|
-
|
|
39
|
-
{{ instructions_content }}
|
|
40
|
-
|
|
41
|
-
{% if user_inputs or file_inputs %}
|
|
42
|
-
## Inputs
|
|
43
|
-
|
|
44
|
-
{% if user_inputs %}
|
|
45
|
-
### User Parameters
|
|
46
|
-
|
|
47
|
-
Please gather the following information from the user:
|
|
48
|
-
{% for input in user_inputs %}
|
|
49
|
-
- **{{ input.name }}**: {{ input.description }}
|
|
50
|
-
{% endfor %}
|
|
51
|
-
{% endif %}
|
|
52
|
-
|
|
53
|
-
{% if file_inputs %}
|
|
54
|
-
### Required Files
|
|
55
|
-
|
|
56
|
-
This step requires the following files from previous steps:
|
|
57
|
-
{% for input in file_inputs %}
|
|
58
|
-
- `{{ input.file }}` (from step `{{ input.from_step }}`)
|
|
59
|
-
{% endfor %}
|
|
60
|
-
|
|
61
|
-
Make sure to read and use these files as context for this step.
|
|
62
|
-
{% endif %}
|
|
63
|
-
{% endif %}
|
|
64
|
-
|
|
65
|
-
## Work Branch Management
|
|
66
|
-
|
|
67
|
-
All work for this job should be done on a dedicated work branch:
|
|
68
|
-
|
|
69
|
-
1. **Check current branch**:
|
|
70
|
-
- If already on a work branch for this job (format: `deepwork/{{ job_name }}-[instance]-[date]`), continue using it
|
|
71
|
-
- If on main/master, create a new work branch
|
|
72
|
-
|
|
73
|
-
2. **Create work branch** (if needed):
|
|
74
|
-
```bash
|
|
75
|
-
git checkout -b deepwork/{{ job_name }}-[instance]-$(date +%Y%m%d)
|
|
76
|
-
```
|
|
77
|
-
Replace `[instance]` with a descriptive identifier (e.g., `acme`, `q1-launch`, etc.)
|
|
78
|
-
|
|
79
|
-
## Output Requirements
|
|
80
|
-
|
|
81
|
-
{% if outputs %}
|
|
82
|
-
Create the following output(s):
|
|
83
|
-
{% for output in outputs %}
|
|
84
|
-
- `{{ output }}`{% if output.endswith('/') %} (directory){% endif %}
|
|
85
|
-
|
|
86
|
-
{% endfor %}
|
|
87
|
-
|
|
88
|
-
Ensure all outputs are:
|
|
89
|
-
- Well-formatted and complete
|
|
90
|
-
- Ready for review or use by subsequent steps
|
|
91
|
-
{% else %}
|
|
92
|
-
No specific files are output by this command.
|
|
93
|
-
{% endif %}
|
|
94
|
-
|
|
95
|
-
{% if stop_hooks %}
|
|
96
|
-
## Quality Validation
|
|
97
|
-
|
|
98
|
-
This step has quality criteria that should be verified before completion.
|
|
99
|
-
|
|
100
|
-
{% for hook in stop_hooks %}
|
|
101
|
-
{% if hook.type != "script" %}
|
|
102
|
-
### Quality Criteria{% if stop_hooks | length > 1 %} ({{ loop.index }}){% endif %}
|
|
103
|
-
|
|
104
|
-
{{ hook.content }}
|
|
105
|
-
{% endif %}
|
|
106
|
-
{% endfor %}
|
|
107
|
-
|
|
108
|
-
**Note**: Gemini CLI does not support automated validation hooks. Please manually verify the criteria above before proceeding.
|
|
109
|
-
|
|
110
|
-
{% endif %}
|
|
111
|
-
## Completion
|
|
112
|
-
|
|
113
|
-
After completing this step:
|
|
114
|
-
|
|
115
|
-
1. **Verify outputs**: Confirm all required files have been created
|
|
116
|
-
|
|
117
|
-
2. **Inform the user**:
|
|
118
|
-
{% if is_standalone %}
|
|
119
|
-
- The {{ step_id }} command is complete
|
|
120
|
-
{% if outputs %}
|
|
121
|
-
- Outputs created: {{ outputs | join(', ') }}
|
|
122
|
-
{% endif %}
|
|
123
|
-
- This command can be run again anytime to make further changes
|
|
124
|
-
{% else %}
|
|
125
|
-
- Step {{ step_number }} of {{ total_steps }} is complete
|
|
126
|
-
{% if outputs %}
|
|
127
|
-
- Outputs created: {{ outputs | join(', ') }}
|
|
128
|
-
{% endif %}
|
|
129
|
-
{% if next_step %}
|
|
130
|
-
- Ready to proceed to next step: `/{{ job_name }}:{{ next_step }}`
|
|
131
|
-
{% else %}
|
|
132
|
-
- This is the final step - the job is complete!
|
|
133
|
-
{% endif %}
|
|
134
|
-
{% endif %}
|
|
135
|
-
|
|
136
|
-
{% if is_standalone %}
|
|
137
|
-
## Command Complete
|
|
138
|
-
|
|
139
|
-
This is a standalone command that can be run anytime. The outputs are ready for use.
|
|
140
|
-
|
|
141
|
-
Consider:
|
|
142
|
-
- Reviewing the outputs
|
|
143
|
-
- Running `deepwork sync` if job definitions were changed
|
|
144
|
-
- Re-running this command later if further changes are needed
|
|
145
|
-
{% elif next_step %}
|
|
146
|
-
## Next Step
|
|
147
|
-
|
|
148
|
-
To continue the workflow, run:
|
|
149
|
-
```
|
|
150
|
-
/{{ job_name }}:{{ next_step }}
|
|
151
|
-
```
|
|
152
|
-
{% else %}
|
|
153
|
-
## Workflow Complete
|
|
154
|
-
|
|
155
|
-
This is the final step in the {{ job_name }} workflow. All outputs should now be complete and ready for review.
|
|
156
|
-
|
|
157
|
-
Consider:
|
|
158
|
-
- Reviewing all work products
|
|
159
|
-
- Creating a pull request to merge the work branch
|
|
160
|
-
- Documenting any insights or learnings
|
|
161
|
-
{% endif %}
|
|
162
|
-
|
|
163
|
-
---
|
|
164
|
-
|
|
165
|
-
## Context Files
|
|
166
|
-
|
|
167
|
-
- Job definition: `.deepwork/jobs/{{ job_name }}/job.yml`
|
|
168
|
-
- Step instructions: `.deepwork/jobs/{{ job_name }}/{{ instructions_file }}`
|
|
169
|
-
"""
|
deepwork-0.2.0.dist-info/RECORD
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
deepwork/__init__.py,sha256=vcMnJioxhfoL6kGh4FM51Vk9UoLnQ76g6Ms7XDUItYA,748
|
|
2
|
-
deepwork/cli/__init__.py,sha256=3SqmfcP2xqutiCYAbajFDJTjr2pOLydqTN0NN-FTsIE,33
|
|
3
|
-
deepwork/cli/install.py,sha256=EnsegIjj-ZYkXMGER0iJXHuN2vVzFhzDUbNLL0ZU5bk,11366
|
|
4
|
-
deepwork/cli/main.py,sha256=m6tVnfSy03azI9Ky6ySEMat_UdLEMzVT3SsRKQWigvA,471
|
|
5
|
-
deepwork/cli/sync.py,sha256=lGgT9Tz_vPQx4z4Bkqk5LfkcT2hTn9nPvdWJVSeKhmM,6303
|
|
6
|
-
deepwork/core/__init__.py,sha256=1g869QuwsYzNjQONneng2OMc6HKt-tlBCaxJbMMfoho,36
|
|
7
|
-
deepwork/core/adapters.py,sha256=wvK4_dSPzRppk7tXuHWIqftqFllYwR-h5YWFZjwcxbY,12908
|
|
8
|
-
deepwork/core/detector.py,sha256=PThpFLH-ZVL8UqjVdGSnGA0mFbhc6_rp6V3_Yzw97kI,2466
|
|
9
|
-
deepwork/core/generator.py,sha256=jMd0uTcym_zozksL3NAHIklaiMNotOvoUsqm-xA_pr0,9935
|
|
10
|
-
deepwork/core/hooks_syncer.py,sha256=GY4XI4VaQLucuU_zPHsDmEUCfgStHIsD558qpWan2bs,5817
|
|
11
|
-
deepwork/core/parser.py,sha256=y1YnOrbKtQEtpv-kPTJHE_A7M3MGaUZhrE59RFcp778,9573
|
|
12
|
-
deepwork/core/policy_parser.py,sha256=wLte32h_uUaJPNTuH2p4pL-EYg1ntSymEdArX-x7GcU,9384
|
|
13
|
-
deepwork/hooks/__init__.py,sha256=dEadpnlsP9ZOGHuyvXxhCb84q9ogmSQH7gL_hQp3q7Y,74
|
|
14
|
-
deepwork/hooks/evaluate_policies.py,sha256=hGi6lDcldGj7MYoUqViB9ObtTRrUHJvkjJeNJbl5lmI,11482
|
|
15
|
-
deepwork/schemas/__init__.py,sha256=PpydKb_oaTv8lYapN_nV-Tl_OUCoSM_okvsEJ8gNTpI,41
|
|
16
|
-
deepwork/schemas/job_schema.py,sha256=MpcUsk2pH7y-uNANFTeNlTDwyKwALAAf57VmJeK-JwE,8755
|
|
17
|
-
deepwork/schemas/policy_schema.py,sha256=Y6P3YkiEza-W8WwqjTBinNCPreCgMz2OUShmVGx4OBo,3099
|
|
18
|
-
deepwork/standard_jobs/deepwork_jobs/AGENTS.md,sha256=Y6I4jZ8DfN0RFY3UF5bgQRZvL7wQD9P0lgE7EZM6CGI,2252
|
|
19
|
-
deepwork/standard_jobs/deepwork_jobs/job.yml,sha256=aY2V-ReMuZ2VxqVT14H1euX_cB9ZvWibAzO81oXI-o8,5924
|
|
20
|
-
deepwork/standard_jobs/deepwork_jobs/make_new_job.sh,sha256=JArfFU9lEaJPRsXRL3rU1IMt2p6Bq0s2C9f98aJ7Mxg,3878
|
|
21
|
-
deepwork/standard_jobs/deepwork_jobs/steps/define.md,sha256=6CYM7LB1Vx7tD76QP65s2wdTCcPk15ZVFLx6TZndbyg,12819
|
|
22
|
-
deepwork/standard_jobs/deepwork_jobs/steps/implement.md,sha256=Wh7ZJGNSyejSgICPFzhbTBaH2bF288YGWqkhKQEmyH4,10313
|
|
23
|
-
deepwork/standard_jobs/deepwork_jobs/steps/learn.md,sha256=yyB6ManHblOOxEM_Odbx0tvPVFVwqlmnwxiC7lZ7txU,10185
|
|
24
|
-
deepwork/standard_jobs/deepwork_jobs/steps/supplemental_file_references.md,sha256=uKDEwB3TxMLK-Zim3QQfkvaW5W6AVWHjWnH25aY6wCw,1478
|
|
25
|
-
deepwork/standard_jobs/deepwork_jobs/templates/agents.md.template,sha256=SUJL862C6-DnT9lK3sNIZ5T2wVgXN4YRph4FrKtFnLo,739
|
|
26
|
-
deepwork/standard_jobs/deepwork_jobs/templates/job.yml.example,sha256=roRi6sIGFGmPCkoVW26HfuTBjAO8-pPsxI5-Gfg3rc0,2361
|
|
27
|
-
deepwork/standard_jobs/deepwork_jobs/templates/job.yml.template,sha256=3I-VQvqXVJNZ_Vb5Ik28JsrEbGKbyLTZcuKxdEmV5s0,1789
|
|
28
|
-
deepwork/standard_jobs/deepwork_jobs/templates/step_instruction.md.example,sha256=HXcjVaQz2HsDiA4ClnIeLvysVOGrFJ_5Tr-pm6dhdwc,2706
|
|
29
|
-
deepwork/standard_jobs/deepwork_jobs/templates/step_instruction.md.template,sha256=6n9jFFuda4r549Oo-LBPKixFD3NvDl5MwEg5V7ItQBg,1286
|
|
30
|
-
deepwork/standard_jobs/deepwork_policy/job.yml,sha256=6pxyEiHZ7fThd4CjpkkROKXGlRqaH4odinLc-ttfork,1377
|
|
31
|
-
deepwork/standard_jobs/deepwork_policy/hooks/capture_prompt_work_tree.sh,sha256=D6Ozo9oDqsL7YBh-ebQK1S8ED9hfIi_0Z8khFjC6wZY,973
|
|
32
|
-
deepwork/standard_jobs/deepwork_policy/hooks/global_hooks.yml,sha256=AS8wzWz7Q4s7iUdhjUwjm9t91Z7QZZw3JCBH81IqKRg,166
|
|
33
|
-
deepwork/standard_jobs/deepwork_policy/hooks/policy_stop_hook.sh,sha256=HFLTheh3VCphhtMCKpPN4a54lrNWlrOffuC23_-QY34,2122
|
|
34
|
-
deepwork/standard_jobs/deepwork_policy/hooks/user_prompt_submit.sh,sha256=TxwYb7kBW-cfHmcQoruJBjCTWvdWbQVQIMplNgzMuOs,498
|
|
35
|
-
deepwork/standard_jobs/deepwork_policy/steps/define.md,sha256=p16fcPSc_6g4WvBzCBJ5l32Uaasp8lew5e6LaDPjpNI,7430
|
|
36
|
-
deepwork/templates/__init__.py,sha256=APvjx_u7eRUerw9yA_fJ1ZqCzYA-FWUCV9HCz0RgjOc,50
|
|
37
|
-
deepwork/templates/default_policy.yml,sha256=nOJtFzV6SPDwNvzNcDKL-679CTXq6hgIBTaxnUKSdVs,2049
|
|
38
|
-
deepwork/templates/claude/command-job-step.md.jinja,sha256=hrOR6WqUVJ8aX_qIptVUuGd4BAe439Dx6gMv-MeCk40,5795
|
|
39
|
-
deepwork/templates/gemini/command-job-step.toml.jinja,sha256=UlhljjJlwNO9D_NrG6MNZ7IKozrdjy2DkPkj9E7hKxU,4196
|
|
40
|
-
deepwork/utils/__init__.py,sha256=AtvE49IFI8Rg36O4cNIlzB-oxvkW3apFgXExn8GSk6s,38
|
|
41
|
-
deepwork/utils/fs.py,sha256=94OUvUrqGebjHVtnjd5vXL6DalKNdpRu-iAPsHvAPjI,3499
|
|
42
|
-
deepwork/utils/git.py,sha256=J4tAB1zE6-WMAEHbarevhmSvvPLkeKBpiRv1UxUVwYk,3748
|
|
43
|
-
deepwork/utils/validation.py,sha256=SyFg9fIu1JCDMbssQgJRCTUNToDNcINccn8lje-tjts,851
|
|
44
|
-
deepwork/utils/yaml_utils.py,sha256=X8c9yEqxEgw5CdPQ23f1Wz8SSP783MMGKyGV_2SKaNU,2454
|
|
45
|
-
deepwork-0.2.0.dist-info/METADATA,sha256=z00l55xdxJKzjQxc0d7m293oGNaEAnfa0gzkPOi1UGk,11216
|
|
46
|
-
deepwork-0.2.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
47
|
-
deepwork-0.2.0.dist-info/entry_points.txt,sha256=RhJBySzm619kh-yIdsAyfFXInAlY8Jm-39FLIBcOj2s,51
|
|
48
|
-
deepwork-0.2.0.dist-info/licenses/LICENSE.md,sha256=W0EtJVYf0cQ_awukOCW1ETwNSpV2RKqnAGfoOjyz_K8,4126
|
|
49
|
-
deepwork-0.2.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|