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.
Files changed (54) hide show
  1. deepwork/cli/install.py +116 -71
  2. deepwork/cli/sync.py +20 -20
  3. deepwork/core/adapters.py +88 -51
  4. deepwork/core/command_executor.py +173 -0
  5. deepwork/core/generator.py +148 -31
  6. deepwork/core/hooks_syncer.py +51 -25
  7. deepwork/core/parser.py +8 -0
  8. deepwork/core/pattern_matcher.py +271 -0
  9. deepwork/core/rules_parser.py +559 -0
  10. deepwork/core/rules_queue.py +321 -0
  11. deepwork/hooks/README.md +181 -0
  12. deepwork/hooks/__init__.py +77 -1
  13. deepwork/hooks/claude_hook.sh +55 -0
  14. deepwork/hooks/gemini_hook.sh +55 -0
  15. deepwork/hooks/rules_check.py +700 -0
  16. deepwork/hooks/wrapper.py +363 -0
  17. deepwork/schemas/job_schema.py +14 -1
  18. deepwork/schemas/rules_schema.py +135 -0
  19. deepwork/standard_jobs/deepwork_jobs/job.yml +35 -53
  20. deepwork/standard_jobs/deepwork_jobs/steps/define.md +9 -6
  21. deepwork/standard_jobs/deepwork_jobs/steps/implement.md +28 -26
  22. deepwork/standard_jobs/deepwork_jobs/steps/learn.md +2 -2
  23. deepwork/standard_jobs/deepwork_rules/hooks/capture_prompt_work_tree.sh +30 -0
  24. deepwork/standard_jobs/deepwork_rules/hooks/global_hooks.yml +8 -0
  25. deepwork/standard_jobs/deepwork_rules/job.yml +47 -0
  26. deepwork/standard_jobs/deepwork_rules/rules/.gitkeep +13 -0
  27. deepwork/standard_jobs/deepwork_rules/rules/api-documentation-sync.md.example +10 -0
  28. deepwork/standard_jobs/deepwork_rules/rules/readme-documentation.md.example +10 -0
  29. deepwork/standard_jobs/deepwork_rules/rules/security-review.md.example +11 -0
  30. deepwork/standard_jobs/deepwork_rules/rules/skill-md-validation.md +46 -0
  31. deepwork/standard_jobs/deepwork_rules/rules/source-test-pairing.md.example +13 -0
  32. deepwork/standard_jobs/deepwork_rules/steps/define.md +249 -0
  33. deepwork/templates/claude/skill-job-meta.md.jinja +70 -0
  34. deepwork/templates/claude/skill-job-step.md.jinja +198 -0
  35. deepwork/templates/gemini/skill-job-meta.toml.jinja +76 -0
  36. deepwork/templates/gemini/skill-job-step.toml.jinja +147 -0
  37. {deepwork-0.2.0.dist-info → deepwork-0.3.1.dist-info}/METADATA +56 -25
  38. deepwork-0.3.1.dist-info/RECORD +62 -0
  39. deepwork/core/policy_parser.py +0 -295
  40. deepwork/hooks/evaluate_policies.py +0 -376
  41. deepwork/schemas/policy_schema.py +0 -78
  42. deepwork/standard_jobs/deepwork_policy/hooks/capture_prompt_work_tree.sh +0 -27
  43. deepwork/standard_jobs/deepwork_policy/hooks/global_hooks.yml +0 -8
  44. deepwork/standard_jobs/deepwork_policy/hooks/policy_stop_hook.sh +0 -56
  45. deepwork/standard_jobs/deepwork_policy/job.yml +0 -35
  46. deepwork/standard_jobs/deepwork_policy/steps/define.md +0 -195
  47. deepwork/templates/claude/command-job-step.md.jinja +0 -210
  48. deepwork/templates/default_policy.yml +0 -53
  49. deepwork/templates/gemini/command-job-step.toml.jinja +0 -169
  50. deepwork-0.2.0.dist-info/RECORD +0 -49
  51. /deepwork/standard_jobs/{deepwork_policy → deepwork_rules}/hooks/user_prompt_submit.sh +0 -0
  52. {deepwork-0.2.0.dist-info → deepwork-0.3.1.dist-info}/WHEEL +0 -0
  53. {deepwork-0.2.0.dist-info → deepwork-0.3.1.dist-info}/entry_points.txt +0 -0
  54. {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
- """
@@ -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,,