opencodekit 0.20.7 → 0.20.8
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.
- package/dist/index.js +1 -1
- package/dist/template/.opencode/AGENTS.md +48 -0
- package/dist/template/.opencode/agent/build.md +3 -2
- package/dist/template/.opencode/agent/explore.md +14 -14
- package/dist/template/.opencode/agent/general.md +1 -1
- package/dist/template/.opencode/agent/plan.md +1 -1
- package/dist/template/.opencode/agent/review.md +1 -1
- package/dist/template/.opencode/agent/vision.md +0 -9
- package/dist/template/.opencode/memory.db +0 -0
- package/dist/template/.opencode/memory.db-shm +0 -0
- package/dist/template/.opencode/memory.db-wal +0 -0
- package/dist/template/.opencode/opencode.json +0 -5
- package/dist/template/.opencode/package.json +1 -1
- package/dist/template/.opencode/pnpm-lock.yaml +791 -9
- package/dist/template/.opencode/skill/api-and-interface-design/SKILL.md +162 -0
- package/dist/template/.opencode/skill/beads/SKILL.md +10 -9
- package/dist/template/.opencode/skill/beads/references/MULTI_AGENT.md +10 -10
- package/dist/template/.opencode/skill/ci-cd-and-automation/SKILL.md +202 -0
- package/dist/template/.opencode/skill/code-search-patterns/SKILL.md +253 -0
- package/dist/template/.opencode/skill/code-simplification/SKILL.md +211 -0
- package/dist/template/.opencode/skill/condition-based-waiting/SKILL.md +12 -0
- package/dist/template/.opencode/skill/defense-in-depth/SKILL.md +16 -6
- package/dist/template/.opencode/skill/deprecation-and-migration/SKILL.md +189 -0
- package/dist/template/.opencode/skill/development-lifecycle/SKILL.md +12 -48
- package/dist/template/.opencode/skill/documentation-and-adrs/SKILL.md +220 -0
- package/dist/template/.opencode/skill/incremental-implementation/SKILL.md +191 -0
- package/dist/template/.opencode/skill/performance-optimization/SKILL.md +236 -0
- package/dist/template/.opencode/skill/receiving-code-review/SKILL.md +11 -0
- package/dist/template/.opencode/skill/security-and-hardening/SKILL.md +296 -0
- package/dist/template/.opencode/skill/structured-edit/SKILL.md +10 -0
- package/dist/template/.opencode/skill/swarm-coordination/SKILL.md +66 -1
- package/package.json +1 -1
- package/dist/template/.opencode/skill/beads-bridge/SKILL.md +0 -321
- package/dist/template/.opencode/skill/code-navigation/SKILL.md +0 -130
- package/dist/template/.opencode/skill/mqdh/SKILL.md +0 -171
- package/dist/template/.opencode/skill/obsidian/SKILL.md +0 -192
- package/dist/template/.opencode/skill/obsidian/mcp.json +0 -22
- package/dist/template/.opencode/skill/pencil/SKILL.md +0 -72
- package/dist/template/.opencode/skill/ralph/SKILL.md +0 -296
- package/dist/template/.opencode/skill/tilth-cli/SKILL.md +0 -207
- package/dist/template/.opencode/skill/tool-priority/SKILL.md +0 -299
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: obsidian
|
|
3
|
-
description: Use when working with Obsidian vault via MCP - read/write notes, search, tag management, and vault operations
|
|
4
|
-
version: 1.0.0
|
|
5
|
-
tags: [integration, documentation]
|
|
6
|
-
dependencies: []
|
|
7
|
-
mcp:
|
|
8
|
-
server: @mauricio.wolff/mcp-obsidian
|
|
9
|
-
args: ["{env:OBSIDIAN_VAULT_PATH}"]
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Obsidian Vault (MCP)
|
|
13
|
-
|
|
14
|
-
## When to Use
|
|
15
|
-
|
|
16
|
-
- When you need MCP-based read/write/search operations in an Obsidian vault.
|
|
17
|
-
|
|
18
|
-
## When NOT to Use
|
|
19
|
-
|
|
20
|
-
- When the task does not involve an Obsidian vault or MCP access.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
## Available Tools
|
|
24
|
-
|
|
25
|
-
### Read Operations
|
|
26
|
-
|
|
27
|
-
| Tool | Purpose | Arguments |
|
|
28
|
-
| --------------------- | --------------------------------- | ------------------------------------------------- |
|
|
29
|
-
| `read_note` | Read note with parsed frontmatter | `path`, `prettyPrint` |
|
|
30
|
-
| `read_multiple_notes` | Batch read (max 10) | `paths[]`, `includeContent`, `includeFrontmatter` |
|
|
31
|
-
| `get_frontmatter` | Extract only frontmatter | `path` |
|
|
32
|
-
| `get_notes_info` | Get metadata without content | `paths[]` |
|
|
33
|
-
| `list_directory` | List files and directories | `path` |
|
|
34
|
-
|
|
35
|
-
### Write Operations
|
|
36
|
-
|
|
37
|
-
| Tool | Purpose | Arguments |
|
|
38
|
-
| -------------------- | ------------------------------------- | ---------------------------------------- |
|
|
39
|
-
| `write_note` | Write note (overwrite/append/prepend) | `path`, `content`, `frontmatter`, `mode` |
|
|
40
|
-
| `update_frontmatter` | Update frontmatter only | `path`, `frontmatter`, `merge` |
|
|
41
|
-
| `delete_note` | Delete note (requires confirmation) | `path`, `confirmPath` |
|
|
42
|
-
| `move_note` | Move/rename note | `oldPath`, `newPath`, `overwrite` |
|
|
43
|
-
|
|
44
|
-
### Search & Tags
|
|
45
|
-
|
|
46
|
-
| Tool | Purpose | Arguments |
|
|
47
|
-
| -------------- | ----------------------------- | ------------------------------------------------------ |
|
|
48
|
-
| `search_notes` | Search by content/frontmatter | `query`, `limit`, `searchContent`, `searchFrontmatter` |
|
|
49
|
-
| `manage_tags` | Add/remove/list tags | `path`, `operation`, `tags[]` |
|
|
50
|
-
|
|
51
|
-
## Write Modes
|
|
52
|
-
|
|
53
|
-
| Mode | Description |
|
|
54
|
-
| ----------- | ------------------------------------- |
|
|
55
|
-
| `overwrite` | Replace entire file content (default) |
|
|
56
|
-
| `append` | Add content to end of file |
|
|
57
|
-
| `prepend` | Add content to beginning of file |
|
|
58
|
-
|
|
59
|
-
## Usage Examples
|
|
60
|
-
|
|
61
|
-
### Read Notes
|
|
62
|
-
|
|
63
|
-
```typescript
|
|
64
|
-
// Read a single note
|
|
65
|
-
skill_mcp({
|
|
66
|
-
skill_name: "obsidian",
|
|
67
|
-
tool_name: "read_note",
|
|
68
|
-
arguments: '{"path": "projects/project-ideas.md"}',
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
// Read multiple notes
|
|
72
|
-
skill_mcp({
|
|
73
|
-
skill_name: "obsidian",
|
|
74
|
-
tool_name: "read_multiple_notes",
|
|
75
|
-
arguments: '{"paths": ["note1.md", "note2.md"], "includeContent": true}',
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
// List directory
|
|
79
|
-
skill_mcp({
|
|
80
|
-
skill_name: "obsidian",
|
|
81
|
-
tool_name: "list_directory",
|
|
82
|
-
arguments: '{"path": "Projects"}',
|
|
83
|
-
});
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### Write Notes
|
|
87
|
-
|
|
88
|
-
```typescript
|
|
89
|
-
// Create new note (overwrite)
|
|
90
|
-
skill_mcp({
|
|
91
|
-
skill_name: "obsidian",
|
|
92
|
-
tool_name: "write_note",
|
|
93
|
-
arguments: `{
|
|
94
|
-
"path": "meeting-notes.md",
|
|
95
|
-
"content": "# Team Meeting\\n\\n## Agenda\\n- Project updates",
|
|
96
|
-
"frontmatter": {"title": "Team Meeting", "date": "2025-02-13", "tags": ["meetings", "team"]},
|
|
97
|
-
"mode": "overwrite"
|
|
98
|
-
}`,
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
// Append to existing note
|
|
102
|
-
skill_mcp({
|
|
103
|
-
skill_name: "obsidian",
|
|
104
|
-
tool_name: "write_note",
|
|
105
|
-
arguments:
|
|
106
|
-
'{"path": "daily-log.md", "content": "\\n\\n## 3:00 PM\\n- Completed review", "mode": "append"}',
|
|
107
|
-
});
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Search & Tags
|
|
111
|
-
|
|
112
|
-
```typescript
|
|
113
|
-
// Search notes
|
|
114
|
-
skill_mcp({
|
|
115
|
-
skill_name: "obsidian",
|
|
116
|
-
tool_name: "search_notes",
|
|
117
|
-
arguments: '{"query": "machine learning", "limit": 5, "searchContent": true}',
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
// Add tags
|
|
121
|
-
skill_mcp({
|
|
122
|
-
skill_name: "obsidian",
|
|
123
|
-
tool_name: "manage_tags",
|
|
124
|
-
arguments: '{"path": "research-notes.md", "operation": "add", "tags": ["important", "ai"]}',
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
// List tags
|
|
128
|
-
skill_mcp({
|
|
129
|
-
skill_name: "obsidian",
|
|
130
|
-
tool_name: "manage_tags",
|
|
131
|
-
arguments: '{"path": "research-notes.md", "operation": "list"}',
|
|
132
|
-
});
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### Delete (Safe)
|
|
136
|
-
|
|
137
|
-
```typescript
|
|
138
|
-
// Delete requires confirmation (both paths must match)
|
|
139
|
-
skill_mcp({
|
|
140
|
-
skill_name: "obsidian",
|
|
141
|
-
tool_name: "delete_note",
|
|
142
|
-
arguments: '{"path": "old-draft.md", "confirmPath": "old-draft.md"}',
|
|
143
|
-
});
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
## Configuration
|
|
147
|
-
|
|
148
|
-
### Environment Variable
|
|
149
|
-
|
|
150
|
-
Set your vault path:
|
|
151
|
-
|
|
152
|
-
```bash
|
|
153
|
-
export OBSIDIAN_VAULT_PATH="/path/to/your/obsidian/vault"
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
Or configure in opencode.json:
|
|
157
|
-
|
|
158
|
-
```json
|
|
159
|
-
{
|
|
160
|
-
"mcp": {
|
|
161
|
-
"obsidian": {
|
|
162
|
-
"command": "npx",
|
|
163
|
-
"args": ["@mauricio.wolff/mcp-obsidian", "/path/to/vault"]
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## Security
|
|
170
|
-
|
|
171
|
-
- Path traversal protection: prevents access outside vault
|
|
172
|
-
- Auto-excludes: `.obsidian`, `.git`, `node_modules`
|
|
173
|
-
- Frontmatter validation: blocks dangerous objects
|
|
174
|
-
- Confirmation required for deletions
|
|
175
|
-
|
|
176
|
-
## Common Use Cases
|
|
177
|
-
|
|
178
|
-
| Task | Tool | Example |
|
|
179
|
-
| -------------------- | ---------------- | ----------------------------------------------------------------------------- |
|
|
180
|
-
| List vault files | `list_directory` | `list_directory({ path: "" })` |
|
|
181
|
-
| Read specific note | `read_note` | `read_note({ path: "tasks/project.md" })` |
|
|
182
|
-
| Create/update note | `write_note` | `write_note({ path: "new.md", content: "...", mode: "overwrite" })` |
|
|
183
|
-
| Search notes | `search_notes` | `search_notes({ query: "API", limit: 10 })` |
|
|
184
|
-
| Add tags | `manage_tags` | `manage_tags({ path: "note.md", operation: "add", tags: ["urgent"] })` |
|
|
185
|
-
| Append to daily note | `write_note` | `write_note({ path: "daily/2025-02-13.md", content: "...", mode: "append" })` |
|
|
186
|
-
|
|
187
|
-
## Tips
|
|
188
|
-
|
|
189
|
-
- Use `prettyPrint: true` for debugging, `false` (default) for production
|
|
190
|
-
- Batch reads with `read_multiple_notes` (max 10)
|
|
191
|
-
- Search supports content and frontmatter filtering
|
|
192
|
-
- Frontmatter is auto-parsed on read
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"obsidian": {
|
|
3
|
-
"command": "npx",
|
|
4
|
-
"args": ["-y", "@mauricio.wolff/mcp-obsidian", "{env:OBSIDIAN_VAULT_PATH}"],
|
|
5
|
-
"env": {
|
|
6
|
-
"OBSIDIAN_VAULT_PATH": "{env:OBSIDIAN_VAULT_PATH}"
|
|
7
|
-
},
|
|
8
|
-
"includeTools": [
|
|
9
|
-
"read_note",
|
|
10
|
-
"read_multiple_notes",
|
|
11
|
-
"get_frontmatter",
|
|
12
|
-
"get_notes_info",
|
|
13
|
-
"list_directory",
|
|
14
|
-
"write_note",
|
|
15
|
-
"update_frontmatter",
|
|
16
|
-
"delete_note",
|
|
17
|
-
"move_note",
|
|
18
|
-
"search_notes",
|
|
19
|
-
"manage_tags"
|
|
20
|
-
]
|
|
21
|
-
}
|
|
22
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pencil
|
|
3
|
-
description: Use when working with OpenPencil .op design files — creating, editing, or exporting code from designs. MUST load before any OpenPencil workflow. Requires desktop app (npm CLI does not provide openpencil-mcp).
|
|
4
|
-
version: 1.0.0
|
|
5
|
-
tags: [design, openpencil, mcp, cli]
|
|
6
|
-
mcp:
|
|
7
|
-
pencil:
|
|
8
|
-
command: openpencil-mcp
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# OpenPencil Skill
|
|
12
|
-
|
|
13
|
-
Legacy skill name: `pencil`.
|
|
14
|
-
|
|
15
|
-
## When to Use
|
|
16
|
-
|
|
17
|
-
- Create or modify UI designs as code using `.op` files.
|
|
18
|
-
- Export production code or visuals from the terminal.
|
|
19
|
-
- Use OpenPencil's desktop-bundled MCP server after installing the app.
|
|
20
|
-
|
|
21
|
-
## Prerequisites
|
|
22
|
-
|
|
23
|
-
### Install CLI
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
npm install -g @zseven-w/openpencil
|
|
27
|
-
op status
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
### Install Desktop App for MCP
|
|
31
|
-
|
|
32
|
-
- Install the OpenPencil desktop app from the ZSeven-W/openpencil releases page.
|
|
33
|
-
- Open **Agent Settings** inside OpenPencil and use the one-click MCP install for OpenCode/Claude Code/Codex/etc.
|
|
34
|
-
- The npm CLI install does **not** provide `openpencil-mcp`; that binary is bundled with the desktop app.
|
|
35
|
-
|
|
36
|
-
### MCP Server
|
|
37
|
-
|
|
38
|
-
- OpenPencil ships a built-in MCP server for agent tooling.
|
|
39
|
-
- The server command is `openpencil-mcp` once the desktop app has installed/exposed it.
|
|
40
|
-
- Keep MCP disabled in template config until OpenPencil desktop is installed locally.
|
|
41
|
-
|
|
42
|
-
## Quick Start
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
# Create new design
|
|
46
|
-
op design @landing.txt
|
|
47
|
-
|
|
48
|
-
# Start the desktop app
|
|
49
|
-
op start
|
|
50
|
-
|
|
51
|
-
# Export code
|
|
52
|
-
op export react --out .
|
|
53
|
-
|
|
54
|
-
# Import a Figma file
|
|
55
|
-
op import:figma design.fig
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## Core CLI Commands
|
|
59
|
-
|
|
60
|
-
- `op design @brief.txt`
|
|
61
|
-
- `op design:skeleton`
|
|
62
|
-
- `op design:content`
|
|
63
|
-
- `op design:refine --root-id <id>`
|
|
64
|
-
- `op export react --out .`
|
|
65
|
-
- `op import:figma design.fig`
|
|
66
|
-
|
|
67
|
-
## Notes
|
|
68
|
-
|
|
69
|
-
- OpenPencil uses `.op` files as the source of truth.
|
|
70
|
-
- CLI install is published on npm as `@zseven-w/openpencil` and exposes the `op` binary.
|
|
71
|
-
- MCP is a desktop-app-bundled feature, not a standalone npm package.
|
|
72
|
-
- Use taste-skill for design quality, OpenPencil for execution.
|
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ralph
|
|
3
|
-
description: Use when running autonomous agent loops for extended task completion without human intervention - handles PRD-driven development, migration tasks, or batch operations
|
|
4
|
-
version: 1.0.0
|
|
5
|
-
tags: [workflow, automation]
|
|
6
|
-
dependencies: []
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Ralph Wiggum - Autonomous Agent Loop
|
|
10
|
-
|
|
11
|
-
## When to Use
|
|
12
|
-
|
|
13
|
-
- **PRD-driven development**: Work through a product requirements document task by task
|
|
14
|
-
- **Migration tasks**: "Migrate all Jest tests to Vitest" - agent works until done
|
|
15
|
-
- **Batch operations**: Process multiple files/components with the same pattern
|
|
16
|
-
- **Away-from-keyboard work**: Let the agent work autonomously while you're away
|
|
17
|
-
|
|
18
|
-
## When NOT to Use
|
|
19
|
-
|
|
20
|
-
- Simple single-step tasks (just do them directly)
|
|
21
|
-
- Tasks requiring frequent human decisions
|
|
22
|
-
- Exploratory work where the goal isn't clear
|
|
23
|
-
- Critical production changes (requires human oversight)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
## Quick Start
|
|
27
|
-
|
|
28
|
-
Invoke the workflow with:
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
/ralph Migrate all Jest tests to Vitest --prd PRD.md
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Or manually follow the loop pattern below.
|
|
35
|
-
|
|
36
|
-
## The Loop Pattern
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
┌─────────────────────────────────────────────────┐
|
|
40
|
-
│ 1. Read PRD/task list + progress.txt │
|
|
41
|
-
│ 2. Pick highest-priority incomplete task │
|
|
42
|
-
│ 3. Implement ONE feature only │
|
|
43
|
-
│ 4. Run feedback: test → typecheck → lint │
|
|
44
|
-
│ 5. If pass → commit + update progress.txt │
|
|
45
|
-
│ 6. If all done → output <promise>COMPLETE │
|
|
46
|
-
│ 7. Otherwise → repeat from step 1 │
|
|
47
|
-
└─────────────────────────────────────────────────┘
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Using LSP Tools (Experimental)
|
|
51
|
-
|
|
52
|
-
OpenCode provides LSP tools for code intelligence.
|
|
53
|
-
|
|
54
|
-
### Available Operations
|
|
55
|
-
|
|
56
|
-
```typescript
|
|
57
|
-
// Understand file structure before editing
|
|
58
|
-
lsp({
|
|
59
|
-
operation: "documentSymbol",
|
|
60
|
-
filePath: "src/auth.ts",
|
|
61
|
-
line: 1,
|
|
62
|
-
character: 1,
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
// Find where a symbol is defined
|
|
66
|
-
lsp({
|
|
67
|
-
operation: "goToDefinition",
|
|
68
|
-
filePath: "src/auth.ts",
|
|
69
|
-
line: 42,
|
|
70
|
-
character: 10,
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
// Find all usages of a symbol (impact analysis)
|
|
74
|
-
lsp({
|
|
75
|
-
operation: "findReferences",
|
|
76
|
-
filePath: "src/auth.ts",
|
|
77
|
-
line: 42,
|
|
78
|
-
character: 10,
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
// Get type info and documentation
|
|
82
|
-
lsp({ operation: "hover", filePath: "src/auth.ts", line: 42, character: 10 });
|
|
83
|
-
|
|
84
|
-
// Find implementations of interface/abstract
|
|
85
|
-
lsp({
|
|
86
|
-
operation: "goToImplementation",
|
|
87
|
-
filePath: "src/types.ts",
|
|
88
|
-
line: 15,
|
|
89
|
-
character: 10,
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
// Search symbols across entire workspace
|
|
93
|
-
lsp({
|
|
94
|
-
operation: "workspaceSymbol",
|
|
95
|
-
filePath: "src/index.ts",
|
|
96
|
-
line: 1,
|
|
97
|
-
character: 1,
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
// Call hierarchy analysis
|
|
101
|
-
lsp({
|
|
102
|
-
operation: "prepareCallHierarchy",
|
|
103
|
-
filePath: "src/api.ts",
|
|
104
|
-
line: 20,
|
|
105
|
-
character: 5,
|
|
106
|
-
});
|
|
107
|
-
lsp({
|
|
108
|
-
operation: "incomingCalls",
|
|
109
|
-
filePath: "src/api.ts",
|
|
110
|
-
line: 20,
|
|
111
|
-
character: 5,
|
|
112
|
-
});
|
|
113
|
-
lsp({
|
|
114
|
-
operation: "outgoingCalls",
|
|
115
|
-
filePath: "src/api.ts",
|
|
116
|
-
line: 20,
|
|
117
|
-
character: 5,
|
|
118
|
-
});
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### LSP-First Workflow
|
|
122
|
-
|
|
123
|
-
Before editing ANY file in the loop:
|
|
124
|
-
|
|
125
|
-
```
|
|
126
|
-
1. Read the file
|
|
127
|
-
2. Use documentSymbol to understand structure
|
|
128
|
-
3. Use findReferences to check impact
|
|
129
|
-
4. Use hover for type info
|
|
130
|
-
5. THEN make edits
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
This prevents breaking changes and ensures you understand the code before modifying it.
|
|
134
|
-
|
|
135
|
-
## Smart Language Detection
|
|
136
|
-
|
|
137
|
-
OpenCode auto-detects languages via LSP based on file extensions. Use this to determine the project type:
|
|
138
|
-
|
|
139
|
-
### Primary Detection (File Extensions)
|
|
140
|
-
|
|
141
|
-
| Language | Extensions | LSP Server |
|
|
142
|
-
| ---------- | ----------------------------- | ------------- |
|
|
143
|
-
| TypeScript | `.ts`, `.tsx`, `.mts`, `.cts` | typescript |
|
|
144
|
-
| JavaScript | `.js`, `.jsx`, `.mjs`, `.cjs` | typescript |
|
|
145
|
-
| Python | `.py`, `.pyi` | pyright |
|
|
146
|
-
| Rust | `.rs` | rust-analyzer |
|
|
147
|
-
| Go | `.go` | gopls |
|
|
148
|
-
| C/C++ | `.c`, `.cpp`, `.h`, `.hpp` | clangd |
|
|
149
|
-
| Java | `.java` | jdtls |
|
|
150
|
-
| C# | `.cs` | csharp |
|
|
151
|
-
| Ruby | `.rb`, `.rake` | ruby-lsp |
|
|
152
|
-
| PHP | `.php` | intelephense |
|
|
153
|
-
| Swift | `.swift` | sourcekit-lsp |
|
|
154
|
-
| Kotlin | `.kt`, `.kts` | kotlin-ls |
|
|
155
|
-
| Elixir | `.ex`, `.exs` | elixir-ls |
|
|
156
|
-
| Dart | `.dart` | dart |
|
|
157
|
-
| Zig | `.zig` | zls |
|
|
158
|
-
| Gleam | `.gleam` | gleam |
|
|
159
|
-
| Lua | `.lua` | lua-ls |
|
|
160
|
-
| Clojure | `.clj`, `.cljs`, `.cljc` | clojure-lsp |
|
|
161
|
-
| OCaml | `.ml`, `.mli` | ocaml-lsp |
|
|
162
|
-
| Svelte | `.svelte` | svelte |
|
|
163
|
-
| Vue | `.vue` | vue |
|
|
164
|
-
| Astro | `.astro` | astro |
|
|
165
|
-
|
|
166
|
-
### Secondary Detection (Lock Files → Package Manager)
|
|
167
|
-
|
|
168
|
-
| Lock File | Package Manager | Runtime |
|
|
169
|
-
| ------------------- | --------------- | ------- |
|
|
170
|
-
| `bun.lockb` | Bun | Bun |
|
|
171
|
-
| `yarn.lock` | Yarn | Node |
|
|
172
|
-
| `pnpm-lock.yaml` | pnpm | Node |
|
|
173
|
-
| `package-lock.json` | npm | Node |
|
|
174
|
-
| `deno.json` | Deno | Deno |
|
|
175
|
-
| `Cargo.toml` | Cargo | Rust |
|
|
176
|
-
| `go.mod` | Go Modules | Go |
|
|
177
|
-
| `pyproject.toml` | Poetry/pip | Python |
|
|
178
|
-
| `Gemfile.lock` | Bundler | Ruby |
|
|
179
|
-
| `composer.lock` | Composer | PHP |
|
|
180
|
-
| `Package.swift` | SwiftPM | Swift |
|
|
181
|
-
| `mix.lock` | Mix | Elixir |
|
|
182
|
-
| `pubspec.lock` | Pub | Dart |
|
|
183
|
-
|
|
184
|
-
### Validation Commands by Language
|
|
185
|
-
|
|
186
|
-
```bash
|
|
187
|
-
# TypeScript/JavaScript (Bun)
|
|
188
|
-
bun test && bun run typecheck && bun run lint
|
|
189
|
-
|
|
190
|
-
# TypeScript/JavaScript (npm)
|
|
191
|
-
npm test && npm run typecheck && npm run lint
|
|
192
|
-
|
|
193
|
-
# TypeScript/JavaScript (Deno)
|
|
194
|
-
deno test && deno check . && deno lint
|
|
195
|
-
|
|
196
|
-
# Python
|
|
197
|
-
pytest && ruff check . && mypy .
|
|
198
|
-
|
|
199
|
-
# Rust
|
|
200
|
-
cargo test && cargo check && cargo clippy --all-targets
|
|
201
|
-
|
|
202
|
-
# Go
|
|
203
|
-
go test ./... && go vet ./... && golangci-lint run
|
|
204
|
-
|
|
205
|
-
# Ruby
|
|
206
|
-
bundle exec rspec && bundle exec rubocop
|
|
207
|
-
|
|
208
|
-
# PHP
|
|
209
|
-
composer test && composer phpstan && composer phpcs
|
|
210
|
-
|
|
211
|
-
# Swift
|
|
212
|
-
swift test && swift build
|
|
213
|
-
|
|
214
|
-
# Elixir
|
|
215
|
-
mix test && mix credo && mix dialyzer
|
|
216
|
-
|
|
217
|
-
# Dart
|
|
218
|
-
dart test && dart analyze
|
|
219
|
-
|
|
220
|
-
# Java (Maven)
|
|
221
|
-
mvn test && mvn compile && mvn checkstyle:check
|
|
222
|
-
|
|
223
|
-
# Java (Gradle)
|
|
224
|
-
./gradlew test && ./gradlew check
|
|
225
|
-
|
|
226
|
-
# C# (.NET)
|
|
227
|
-
dotnet test && dotnet build && dotnet format --verify-no-changes
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
## Required Files
|
|
231
|
-
|
|
232
|
-
### PRD File (Recommended)
|
|
233
|
-
|
|
234
|
-
Create a `PRD.md` with clear task list:
|
|
235
|
-
|
|
236
|
-
```markdown
|
|
237
|
-
# Migration PRD
|
|
238
|
-
|
|
239
|
-
## Tasks
|
|
240
|
-
|
|
241
|
-
- [ ] Convert test-utils.test.js
|
|
242
|
-
- [ ] Convert api.test.js
|
|
243
|
-
- [ ] Update CI config
|
|
244
|
-
- [ ] Remove Jest dependencies
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
### Progress File (Agent-maintained)
|
|
248
|
-
|
|
249
|
-
Agent creates/updates `progress.txt`:
|
|
250
|
-
|
|
251
|
-
```markdown
|
|
252
|
-
# Progress Log
|
|
253
|
-
|
|
254
|
-
## Session Started: 2026-01-10
|
|
255
|
-
|
|
256
|
-
### Project: TypeScript with Bun
|
|
257
|
-
|
|
258
|
-
### Commands: bun test | bun run typecheck | bun run lint
|
|
259
|
-
|
|
260
|
-
### Completed Tasks
|
|
261
|
-
|
|
262
|
-
- [x] test-utils.test.js - migrated, 12 tests passing
|
|
263
|
-
- [x] api.test.js - migrated, 8 tests passing
|
|
264
|
-
|
|
265
|
-
### Notes for Next Iteration
|
|
266
|
-
|
|
267
|
-
- CI config needs Vitest runner update
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
## Completion Signal
|
|
271
|
-
|
|
272
|
-
The loop ends when agent outputs:
|
|
273
|
-
|
|
274
|
-
```
|
|
275
|
-
<promise>COMPLETE</promise>
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
## Best Practices
|
|
279
|
-
|
|
280
|
-
1. **Use LSP for detection**: Check file extensions, not just lock files
|
|
281
|
-
2. **Small steps**: ONE feature per iteration (prevents context rot)
|
|
282
|
-
3. **Quality gates**: Test, typecheck, lint MUST pass before commit
|
|
283
|
-
4. **Prioritize risk**: Hard tasks first, easy wins last
|
|
284
|
-
5. **Track progress**: Update progress.txt every iteration
|
|
285
|
-
6. **Explicit scope**: Vague tasks loop forever
|
|
286
|
-
7. **Graceful fallbacks**: If a command doesn't exist, skip and note it
|
|
287
|
-
|
|
288
|
-
## Troubleshooting
|
|
289
|
-
|
|
290
|
-
| Issue | Solution |
|
|
291
|
-
| -------------------- | ------------------------------------------- |
|
|
292
|
-
| Loop not progressing | Break task into smaller pieces |
|
|
293
|
-
| Tests failing | Fix before continuing, don't skip |
|
|
294
|
-
| Context getting long | Summarize progress, restart session |
|
|
295
|
-
| Stuck on decision | Note in progress.txt, ask user next session |
|
|
296
|
-
| Unknown language | Check file extensions against LSP table |
|