@fro.bot/systematic 2.33.3 → 3.0.1

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 (112) hide show
  1. package/ATTRIBUTIONS.md +1 -1
  2. package/agents/design/design-iterator.md +1 -0
  3. package/agents/research/best-practices-researcher.md +6 -8
  4. package/agents/review/pattern-recognition-specialist.md +1 -1
  5. package/agents/workflow/systematic-implementer.md +1 -0
  6. package/dist/cli.js +348 -53
  7. package/dist/{index-vyzhzvap.js → index-yskzf7vh.js} +587 -386
  8. package/dist/index.js +100 -155
  9. package/dist/lib/agent-overlays.d.ts +0 -1
  10. package/dist/lib/agent-resolver.d.ts +28 -0
  11. package/dist/lib/bootstrap.d.ts +8 -1
  12. package/dist/lib/bundled-names.d.ts +3 -3
  13. package/dist/lib/pi-delegate-session.d.ts +31 -0
  14. package/dist/lib/pi-delegate-tool.d.ts +42 -0
  15. package/dist/lib/removed-names.d.ts +3 -3
  16. package/dist/lib/setup.d.ts +36 -0
  17. package/dist/lib/skill-loader.d.ts +1 -2
  18. package/dist/lib/skill-resolver.d.ts +39 -0
  19. package/dist/lib/skill-tool.d.ts +2 -11
  20. package/dist/lib/skills.d.ts +1 -9
  21. package/dist/lib/source-model-defaults.d.ts +1 -1
  22. package/dist/pi.d.ts +7 -0
  23. package/dist/pi.js +3641 -0
  24. package/dist/schemas/systematic-config.schema.json +47 -242
  25. package/package.json +29 -6
  26. package/skills/ce-brainstorm/references/handoff.md +5 -26
  27. package/skills/ce-brainstorm/references/universal-brainstorming.md +0 -1
  28. package/skills/ce-compound/SKILL.md +8 -12
  29. package/skills/ce-ideate/references/post-ideation-workflow.md +21 -85
  30. package/skills/ce-plan/SKILL.md +6 -6
  31. package/skills/ce-plan/references/deepening-workflow.md +6 -7
  32. package/skills/ce-plan/references/plan-handoff.md +1 -17
  33. package/skills/ce-plan/references/universal-planning.md +0 -4
  34. package/skills/ce-review/SKILL.md +10 -19
  35. package/skills/ce-review/references/persona-catalog.md +2 -7
  36. package/skills/ce-review/references/review-output-template.md +0 -1
  37. package/skills/ce-work/SKILL.md +1 -1
  38. package/skills/deepen-plan/SKILL.md +6 -7
  39. package/skills/document-review/SKILL.md +2 -2
  40. package/skills/git-commit-push-pr/SKILL.md +1 -2
  41. package/skills/lfg/SKILL.md +1 -1
  42. package/skills/onboarding/SKILL.md +1 -12
  43. package/skills/orchestrating-subagents/SKILL.md +2 -2
  44. package/skills/slfg/SKILL.md +2 -3
  45. package/skills/test-browser/SKILL.md +2 -2
  46. package/skills/todos/SKILL.md +239 -0
  47. package/skills/writing-skills/SKILL.md +102 -1
  48. package/skills/{writing-systematic-skills → writing-skills}/references/foundation-conventions.md +5 -5
  49. package/agents/design/design-implementation-reviewer.md +0 -95
  50. package/agents/design/figma-design-sync.md +0 -173
  51. package/agents/docs/ankane-readme-writer.md +0 -51
  52. package/agents/review/cli-agent-readiness-reviewer.md +0 -418
  53. package/agents/review/data-integrity-guardian.md +0 -72
  54. package/agents/review/data-migration-expert.md +0 -99
  55. package/agents/review/dhh-rails-reviewer.md +0 -46
  56. package/agents/review/julik-frontend-races-reviewer.md +0 -49
  57. package/agents/review/kieran-python-reviewer.md +0 -47
  58. package/agents/review/kieran-rails-reviewer.md +0 -47
  59. package/agents/review/performance-oracle.md +0 -112
  60. package/agents/review/schema-drift-detector.md +0 -143
  61. package/agents/review/security-sentinel.md +0 -95
  62. package/agents/workflow/lint.md +0 -17
  63. package/dist/lib/converter.d.ts +0 -14
  64. package/skills/andrew-kane-gem-writer/SKILL.md +0 -184
  65. package/skills/andrew-kane-gem-writer/references/database-adapters.md +0 -231
  66. package/skills/andrew-kane-gem-writer/references/module-organization.md +0 -121
  67. package/skills/andrew-kane-gem-writer/references/rails-integration.md +0 -183
  68. package/skills/andrew-kane-gem-writer/references/resources.md +0 -119
  69. package/skills/andrew-kane-gem-writer/references/testing-patterns.md +0 -261
  70. package/skills/changelog/SKILL.md +0 -139
  71. package/skills/claude-permissions-optimizer/SKILL.md +0 -166
  72. package/skills/claude-permissions-optimizer/scripts/extract-commands.mjs +0 -655
  73. package/skills/claude-permissions-optimizer/scripts/normalize.mjs +0 -151
  74. package/skills/dhh-rails-style/SKILL.md +0 -186
  75. package/skills/dhh-rails-style/references/architecture.md +0 -653
  76. package/skills/dhh-rails-style/references/controllers.md +0 -303
  77. package/skills/dhh-rails-style/references/frontend.md +0 -510
  78. package/skills/dhh-rails-style/references/gems.md +0 -266
  79. package/skills/dhh-rails-style/references/models.md +0 -359
  80. package/skills/dhh-rails-style/references/testing.md +0 -338
  81. package/skills/dspy-ruby/SKILL.md +0 -737
  82. package/skills/dspy-ruby/assets/config-template.rb +0 -187
  83. package/skills/dspy-ruby/assets/module-template.rb +0 -300
  84. package/skills/dspy-ruby/assets/signature-template.rb +0 -221
  85. package/skills/dspy-ruby/references/core-concepts.md +0 -674
  86. package/skills/dspy-ruby/references/observability.md +0 -366
  87. package/skills/dspy-ruby/references/optimization.md +0 -603
  88. package/skills/dspy-ruby/references/providers.md +0 -418
  89. package/skills/dspy-ruby/references/toolsets.md +0 -502
  90. package/skills/every-style-editor/SKILL.md +0 -135
  91. package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +0 -529
  92. package/skills/feature-video/SKILL.md +0 -383
  93. package/skills/gemini-imagegen/SKILL.md +0 -237
  94. package/skills/gemini-imagegen/requirements.txt +0 -2
  95. package/skills/gemini-imagegen/scripts/compose_images.py +0 -157
  96. package/skills/gemini-imagegen/scripts/edit_image.py +0 -144
  97. package/skills/gemini-imagegen/scripts/gemini_images.py +0 -263
  98. package/skills/gemini-imagegen/scripts/generate_image.py +0 -133
  99. package/skills/gemini-imagegen/scripts/multi_turn_chat.py +0 -216
  100. package/skills/generate_command/SKILL.md +0 -164
  101. package/skills/orchestrating-swarms/SKILL.md +0 -1723
  102. package/skills/proof/SKILL.md +0 -291
  103. package/skills/proof/references/hitl-review.md +0 -368
  104. package/skills/rclone/SKILL.md +0 -150
  105. package/skills/rclone/scripts/check_setup.sh +0 -60
  106. package/skills/setup/SKILL.md +0 -22
  107. package/skills/test-xcode/SKILL.md +0 -214
  108. package/skills/todo-create/SKILL.md +0 -109
  109. package/skills/todo-resolve/SKILL.md +0 -68
  110. package/skills/todo-triage/SKILL.md +0 -70
  111. package/skills/writing-systematic-skills/SKILL.md +0 -119
  112. /package/skills/{todo-create → todos}/assets/todo-template.md +0 -0
@@ -1,216 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Interactive multi-turn image generation and refinement using Gemini API.
4
-
5
- Usage:
6
- python multi_turn_chat.py [--model MODEL] [--output-dir DIR]
7
-
8
- This starts an interactive session where you can:
9
- - Generate images from prompts
10
- - Iteratively refine images through conversation
11
- - Load existing images for editing
12
- - Save images at any point
13
-
14
- Commands:
15
- /save [filename] - Save current image
16
- /load <path> - Load an image into the conversation
17
- /clear - Start fresh conversation
18
- /quit - Exit
19
-
20
- Environment:
21
- GEMINI_API_KEY - Required API key
22
- """
23
-
24
- import argparse
25
- import os
26
- import sys
27
- from datetime import datetime
28
- from pathlib import Path
29
-
30
- from PIL import Image
31
- from google import genai
32
- from google.genai import types
33
-
34
-
35
- class ImageChat:
36
- """Interactive chat session for image generation and refinement."""
37
-
38
- def __init__(
39
- self,
40
- model: str = "gemini-2.5-flash-image",
41
- output_dir: str = ".",
42
- ):
43
- api_key = os.environ.get("GEMINI_API_KEY")
44
- if not api_key:
45
- raise EnvironmentError("GEMINI_API_KEY environment variable not set")
46
-
47
- self.client = genai.Client(api_key=api_key)
48
- self.model = model
49
- self.output_dir = Path(output_dir)
50
- self.output_dir.mkdir(parents=True, exist_ok=True)
51
-
52
- self.chat = None
53
- self.current_image = None
54
- self.image_count = 0
55
-
56
- self._init_chat()
57
-
58
- def _init_chat(self):
59
- """Initialize or reset the chat session."""
60
- config = types.GenerateContentConfig(
61
- response_modalities=["TEXT", "IMAGE"]
62
- )
63
- self.chat = self.client.chats.create(
64
- model=self.model,
65
- config=config,
66
- )
67
- self.current_image = None
68
-
69
- def send_message(self, message: str, image: Image.Image | None = None) -> tuple[str | None, Image.Image | None]:
70
- """Send a message and optionally an image, return response text and image."""
71
- contents = []
72
- if message:
73
- contents.append(message)
74
- if image:
75
- contents.append(image)
76
-
77
- if not contents:
78
- return None, None
79
-
80
- response = self.chat.send_message(contents)
81
-
82
- text_response = None
83
- image_response = None
84
-
85
- for part in response.parts:
86
- if part.text is not None:
87
- text_response = part.text
88
- elif part.inline_data is not None:
89
- image_response = part.as_image()
90
- self.current_image = image_response
91
-
92
- return text_response, image_response
93
-
94
- def save_image(self, filename: str | None = None) -> str | None:
95
- """Save the current image to a file."""
96
- if self.current_image is None:
97
- return None
98
-
99
- if filename is None:
100
- self.image_count += 1
101
- timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
102
- filename = f"image_{timestamp}_{self.image_count}.png"
103
-
104
- filepath = self.output_dir / filename
105
- self.current_image.save(filepath)
106
- return str(filepath)
107
-
108
- def load_image(self, path: str) -> Image.Image:
109
- """Load an image from disk."""
110
- img = Image.open(path)
111
- self.current_image = img
112
- return img
113
-
114
-
115
- def main():
116
- parser = argparse.ArgumentParser(
117
- description="Interactive multi-turn image generation",
118
- formatter_class=argparse.RawDescriptionHelpFormatter,
119
- epilog=__doc__
120
- )
121
- parser.add_argument(
122
- "--model", "-m",
123
- default="gemini-2.5-flash-image",
124
- choices=["gemini-2.5-flash-image", "gemini-3-pro-image-preview"],
125
- help="Model to use"
126
- )
127
- parser.add_argument(
128
- "--output-dir", "-o",
129
- default=".",
130
- help="Directory to save images"
131
- )
132
-
133
- args = parser.parse_args()
134
-
135
- try:
136
- chat = ImageChat(model=args.model, output_dir=args.output_dir)
137
- except Exception as e:
138
- print(f"Error initializing: {e}", file=sys.stderr)
139
- sys.exit(1)
140
-
141
- print(f"Gemini Image Chat ({args.model})")
142
- print("Commands: /save [name], /load <path>, /clear, /quit")
143
- print("-" * 50)
144
-
145
- while True:
146
- try:
147
- user_input = input("\nYou: ").strip()
148
- except (EOFError, KeyboardInterrupt):
149
- print("\nGoodbye!")
150
- break
151
-
152
- if not user_input:
153
- continue
154
-
155
- # Handle commands
156
- if user_input.startswith("/"):
157
- parts = user_input.split(maxsplit=1)
158
- cmd = parts[0].lower()
159
- arg = parts[1] if len(parts) > 1 else None
160
-
161
- if cmd == "/quit":
162
- print("Goodbye!")
163
- break
164
-
165
- elif cmd == "/clear":
166
- chat._init_chat()
167
- print("Conversation cleared.")
168
- continue
169
-
170
- elif cmd == "/save":
171
- path = chat.save_image(arg)
172
- if path:
173
- print(f"Image saved to: {path}")
174
- else:
175
- print("No image to save.")
176
- continue
177
-
178
- elif cmd == "/load":
179
- if not arg:
180
- print("Usage: /load <path>")
181
- continue
182
- try:
183
- chat.load_image(arg)
184
- print(f"Loaded: {arg}")
185
- print("You can now describe edits to make.")
186
- except Exception as e:
187
- print(f"Error loading image: {e}")
188
- continue
189
-
190
- else:
191
- print(f"Unknown command: {cmd}")
192
- continue
193
-
194
- # Send message to model
195
- try:
196
- # If we have a loaded image and this is first message, include it
197
- image_to_send = None
198
- if chat.current_image and not chat.chat.history:
199
- image_to_send = chat.current_image
200
-
201
- text, image = chat.send_message(user_input, image_to_send)
202
-
203
- if text:
204
- print(f"\nGemini: {text}")
205
-
206
- if image:
207
- # Auto-save
208
- path = chat.save_image()
209
- print(f"\n[Image generated: {path}]")
210
-
211
- except Exception as e:
212
- print(f"\nError: {e}")
213
-
214
-
215
- if __name__ == "__main__":
216
- main()
@@ -1,164 +0,0 @@
1
- ---
2
- name: generate_command
3
- description: Create a new custom slash command following conventions and best practices
4
- argument-hint: '[command purpose and requirements]'
5
- disable-model-invocation: true
6
- ---
7
-
8
- # Create a Custom OpenCode Command
9
-
10
- Create a new skill in `.opencode/skills/` for the requested task.
11
-
12
- ## Goal
13
-
14
- #$ARGUMENTS
15
-
16
- ## Key Capabilities to Leverage
17
-
18
- **File Operations:**
19
- - Read, Edit, Write - modify files precisely
20
- - Glob, Grep - search codebase
21
- - MultiEdit - atomic multi-part changes
22
-
23
- **Development:**
24
- - Bash - run commands (git, tests, linters)
25
- - Task - launch specialized agents for complex tasks
26
- - todowrite - track progress with todo lists
27
-
28
- **Web & APIs:**
29
- - webfetch, google_search - research documentation
30
- - GitHub (gh cli) - PRs, issues, reviews
31
- - Playwright - browser automation, screenshots
32
-
33
- **Integrations:**
34
- - AppSignal - logs and monitoring
35
- - Context7 - framework docs
36
- - Stripe, Todoist, Featurebase (if relevant)
37
-
38
- ## Best Practices
39
-
40
- 1. **Be specific and clear** - detailed instructions yield better results
41
- 2. **Break down complex tasks** - use step-by-step plans
42
- 3. **Use examples** - reference existing code patterns
43
- 4. **Include success criteria** - tests pass, linting clean, etc.
44
- 5. **Think first** - use "think hard" or "plan" keywords for complex problems
45
- 6. **Iterate** - guide the process step by step
46
-
47
- ## Required: YAML Frontmatter
48
-
49
- **EVERY command MUST start with YAML frontmatter:**
50
-
51
- ```yaml
52
- ---
53
- name: command-name
54
- description: Brief description of what this command does (max 100 chars)
55
- argument-hint: "[what arguments the command accepts]"
56
- ---
57
- ```
58
-
59
- **Fields:**
60
- - `name`: Lowercase command identifier (used internally)
61
- - `description`: Clear, concise summary of command purpose
62
- - `argument-hint`: Shows user what arguments are expected (e.g., `[file path]`, `[PR number]`, `[optional: format]`)
63
-
64
- ## Structure Your Command
65
-
66
- ```markdown
67
- # [Command Name]
68
-
69
- [Brief description of what this command does]
70
-
71
- ## Steps
72
-
73
- 1. [First step with specific details]
74
- - Include file paths, patterns, or constraints
75
- - Reference existing code if applicable
76
-
77
- 2. [Second step]
78
- - Use parallel tool calls when possible
79
- - Check/verify results
80
-
81
- 3. [Final steps]
82
- - Run tests
83
- - Lint code
84
- - Commit changes (if appropriate)
85
-
86
- ## Success Criteria
87
-
88
- - [ ] Tests pass
89
- - [ ] Code follows style guide
90
- - [ ] Documentation updated (if needed)
91
- ```
92
-
93
- ## Tips for Effective Commands
94
-
95
- - **Use $ARGUMENTS** placeholder for dynamic inputs
96
- - **Reference AGENTS.md** patterns and conventions
97
- - **Include verification steps** - tests, linting, visual checks
98
- - **Be explicit about constraints** - don't modify X, use pattern Y
99
- - **Use XML tags** for structured prompts: `<task>`, `<requirements>`, `<constraints>`
100
-
101
- ## Example Pattern
102
-
103
- ```markdown
104
- Implement #$ARGUMENTS following these steps:
105
-
106
- 1. Research existing patterns
107
- - Search for similar code using Grep
108
- - Read relevant files to understand approach
109
-
110
- 2. Plan the implementation
111
- - Think through edge cases and requirements
112
- - Consider test cases needed
113
-
114
- 3. Implement
115
- - Follow existing code patterns (reference specific files)
116
- - Write tests first if doing TDD
117
- - Ensure code follows AGENTS.md conventions
118
-
119
- 4. Verify
120
- - Run tests: `bin/rails test`
121
- - Run linter: `bundle exec standardrb`
122
- - Check changes with git diff
123
-
124
- 5. Commit (optional)
125
- - Stage changes
126
- - Write clear commit message
127
- ```
128
-
129
- ## Creating the Command File
130
-
131
- 1. **Create the directory** at `.opencode/skills/[name]/SKILL.md`
132
- 2. **Start with YAML frontmatter** (see section above)
133
- 3. **Structure the skill** using the template above
134
- 4. **Test the skill** by using it with appropriate arguments
135
-
136
- ## Command File Template
137
-
138
- ```markdown
139
- ---
140
- name: command-name
141
- description: What this command does
142
- argument-hint: "[expected arguments]"
143
- ---
144
-
145
- # Command Title
146
-
147
- Brief introduction of what the command does and when to use it.
148
-
149
- ## Workflow
150
-
151
- ### Step 1: [First Major Step]
152
-
153
- Details about what to do.
154
-
155
- ### Step 2: [Second Major Step]
156
-
157
- Details about what to do.
158
-
159
- ## Success Criteria
160
-
161
- - [ ] Expected outcome 1
162
- - [ ] Expected outcome 2
163
- ```
164
-