@smartsoft001-mobilems/claude-plugins 2.63.0 → 2.64.0
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/package.json
CHANGED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Flow Plugin for Claude Code
|
|
2
|
+
|
|
3
|
+
Development flow commands for Linear-driven development workflow.
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
| Command | Description |
|
|
8
|
+
|---------|-------------|
|
|
9
|
+
| `/commit` | Create conventional commit based on Linear task |
|
|
10
|
+
| `/impl` | Implement plans from Linear task comments |
|
|
11
|
+
| `/plan` | Create implementation plan and save to Linear |
|
|
12
|
+
| `/push` | Push changes and update Linear status |
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
### 1. Enable plugin in project's `.claude/settings.json`:
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
{
|
|
20
|
+
"enabledPlugins": {
|
|
21
|
+
"flow@mobilems": true
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 2. Merge permissions from template
|
|
27
|
+
|
|
28
|
+
Copy permissions from `settings.template.json` to your project's `.claude/settings.json`.
|
|
29
|
+
|
|
30
|
+
**Quick merge script:**
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# From project root
|
|
34
|
+
node -e "
|
|
35
|
+
const template = require('node_modules/@smartsoft001-mobilems/claude-plugins/plugins/flow/.claude-plugin/settings.template.json');
|
|
36
|
+
const settings = require('.claude/settings.json');
|
|
37
|
+
|
|
38
|
+
settings.permissions = settings.permissions || { allow: [], deny: [], ask: [] };
|
|
39
|
+
settings.permissions.allow = [...new Set([...settings.permissions.allow, ...template.permissions.allow])];
|
|
40
|
+
settings.permissions.ask = [...new Set([...settings.permissions.ask, ...template.permissions.ask])];
|
|
41
|
+
|
|
42
|
+
require('fs').writeFileSync('.claude/settings.json', JSON.stringify(settings, null, 2));
|
|
43
|
+
console.log('Permissions merged!');
|
|
44
|
+
"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Required MCP Servers
|
|
48
|
+
|
|
49
|
+
Configure these in your `.mcp.json`:
|
|
50
|
+
|
|
51
|
+
- `linear-server` - Linear API integration
|
|
52
|
+
- `playwright` - Browser automation for screenshots
|
|
53
|
+
|
|
54
|
+
## Permission Strategy
|
|
55
|
+
|
|
56
|
+
### Automatic (allow)
|
|
57
|
+
- Git read operations (status, diff, log, show)
|
|
58
|
+
- Nx commands (test, lint, build)
|
|
59
|
+
- Linear API (read/write issues, comments)
|
|
60
|
+
- Playwright (screenshots)
|
|
61
|
+
- Internal skills
|
|
62
|
+
|
|
63
|
+
### Requires Confirmation (ask)
|
|
64
|
+
- Flow commands (/commit, /impl, /plan, /push)
|
|
65
|
+
- `git commit` - creating commits
|
|
66
|
+
- `git push` - pushing to remote
|
|
67
|
+
- `gh pr create` - creating pull requests
|
|
68
|
+
|
|
69
|
+
## Skills
|
|
70
|
+
|
|
71
|
+
| Skill | Description |
|
|
72
|
+
|-------|-------------|
|
|
73
|
+
| `maia-files-upload` | Upload files to Maia API |
|
|
74
|
+
| `maia-files-delete` | Delete files from Maia API |
|
|
75
|
+
| `browser-capture` | Capture screenshots with Playwright |
|
|
76
|
+
| `linear-suggestion` | Create Linear issues for improvements |
|
|
77
|
+
| `test-unit` | Run unit tests with coverage |
|
|
78
|
+
| `a11y-audit` | Accessibility audit |
|
|
79
|
+
|
|
80
|
+
## Agents
|
|
81
|
+
|
|
82
|
+
See `agents/` directory for full list of specialized agents used by flow commands.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Merge flow plugin permissions into project's .claude/settings.json
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npx @smartsoft001-mobilems/claude-plugins flow:merge-permissions
|
|
7
|
+
*
|
|
8
|
+
* Or directly:
|
|
9
|
+
* node node_modules/@smartsoft001-mobilems/claude-plugins/plugins/flow/.claude-plugin/merge-permissions.js
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const fs = require('fs');
|
|
13
|
+
const path = require('path');
|
|
14
|
+
|
|
15
|
+
const SETTINGS_PATH = path.join(process.cwd(), '.claude', 'settings.json');
|
|
16
|
+
const TEMPLATE_PATH = path.join(__dirname, 'settings.template.json');
|
|
17
|
+
|
|
18
|
+
function loadJson(filePath) {
|
|
19
|
+
try {
|
|
20
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
21
|
+
} catch (e) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function mergeArrays(existing, template) {
|
|
27
|
+
return [...new Set([...existing, ...template])];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function main() {
|
|
31
|
+
console.log('Flow Plugin - Merge Permissions\n');
|
|
32
|
+
|
|
33
|
+
// Load template
|
|
34
|
+
const template = loadJson(TEMPLATE_PATH);
|
|
35
|
+
if (!template) {
|
|
36
|
+
console.error('ERROR: Could not load template from:', TEMPLATE_PATH);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Load or create settings
|
|
41
|
+
let settings = loadJson(SETTINGS_PATH);
|
|
42
|
+
if (!settings) {
|
|
43
|
+
console.log('Creating new .claude/settings.json...');
|
|
44
|
+
fs.mkdirSync(path.dirname(SETTINGS_PATH), { recursive: true });
|
|
45
|
+
settings = { permissions: { allow: [], deny: [], ask: [] } };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Ensure permissions structure exists
|
|
49
|
+
settings.permissions = settings.permissions || { allow: [], deny: [], ask: [] };
|
|
50
|
+
settings.permissions.allow = settings.permissions.allow || [];
|
|
51
|
+
settings.permissions.ask = settings.permissions.ask || [];
|
|
52
|
+
settings.permissions.deny = settings.permissions.deny || [];
|
|
53
|
+
|
|
54
|
+
// Count before
|
|
55
|
+
const beforeAllow = settings.permissions.allow.length;
|
|
56
|
+
const beforeAsk = settings.permissions.ask.length;
|
|
57
|
+
|
|
58
|
+
// Merge permissions
|
|
59
|
+
settings.permissions.allow = mergeArrays(settings.permissions.allow, template.permissions.allow);
|
|
60
|
+
settings.permissions.ask = mergeArrays(settings.permissions.ask, template.permissions.ask);
|
|
61
|
+
|
|
62
|
+
// Enable plugin
|
|
63
|
+
settings.enabledPlugins = settings.enabledPlugins || {};
|
|
64
|
+
settings.enabledPlugins['flow@mobilems'] = true;
|
|
65
|
+
|
|
66
|
+
// Write back
|
|
67
|
+
fs.writeFileSync(SETTINGS_PATH, JSON.stringify(settings, null, 2) + '\n');
|
|
68
|
+
|
|
69
|
+
// Report
|
|
70
|
+
const addedAllow = settings.permissions.allow.length - beforeAllow;
|
|
71
|
+
const addedAsk = settings.permissions.ask.length - beforeAsk;
|
|
72
|
+
|
|
73
|
+
console.log('Permissions merged successfully!\n');
|
|
74
|
+
console.log(` allow: ${beforeAllow} -> ${settings.permissions.allow.length} (+${addedAllow})`);
|
|
75
|
+
console.log(` ask: ${beforeAsk} -> ${settings.permissions.ask.length} (+${addedAsk})`);
|
|
76
|
+
console.log(`\nPlugin enabled: flow@mobilems`);
|
|
77
|
+
console.log(`\nFile updated: ${SETTINGS_PATH}`);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
main();
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flow",
|
|
3
|
-
"description": "Development flow",
|
|
4
|
-
"version": "2.
|
|
3
|
+
"description": "Development flow commands for Linear-driven development workflow",
|
|
4
|
+
"version": "2.64.0",
|
|
5
|
+
"settingsTemplate": "settings.template.json",
|
|
6
|
+
"commands": [
|
|
7
|
+
"commit",
|
|
8
|
+
"impl",
|
|
9
|
+
"plan",
|
|
10
|
+
"push"
|
|
11
|
+
],
|
|
12
|
+
"skills": [
|
|
13
|
+
"maia-files-upload",
|
|
14
|
+
"maia-files-delete",
|
|
15
|
+
"browser-capture",
|
|
16
|
+
"linear-suggestion",
|
|
17
|
+
"test-unit",
|
|
18
|
+
"a11y-audit"
|
|
19
|
+
],
|
|
20
|
+
"requiredMcp": [
|
|
21
|
+
"linear-server",
|
|
22
|
+
"playwright"
|
|
23
|
+
]
|
|
5
24
|
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/anthropics/claude-code/main/schemas/settings.schema.json",
|
|
3
|
+
"_description": "Template permissions for flow@mobilems plugin. Merge these into your project's .claude/settings.json",
|
|
4
|
+
"permissions": {
|
|
5
|
+
"allow": [
|
|
6
|
+
"Bash(git status:*)",
|
|
7
|
+
"Bash(git diff:*)",
|
|
8
|
+
"Bash(git log:*)",
|
|
9
|
+
"Bash(git show:*)",
|
|
10
|
+
"Bash(git add:*)",
|
|
11
|
+
"Bash(git fetch:*)",
|
|
12
|
+
"Bash(git pull:*)",
|
|
13
|
+
"Bash(gh run list:*)",
|
|
14
|
+
"Bash(gh run view:*)",
|
|
15
|
+
"Bash(gh pr list:*)",
|
|
16
|
+
"Bash(nx:*)",
|
|
17
|
+
"Bash(npx nx:*)",
|
|
18
|
+
"Bash(npx tsc:*)",
|
|
19
|
+
"Bash(npm start)",
|
|
20
|
+
"Bash(npm run format:*)",
|
|
21
|
+
"Bash(npm audit:*)",
|
|
22
|
+
"Bash(npm install:*)",
|
|
23
|
+
"Bash(source:*)",
|
|
24
|
+
"Bash(nvm use:*)",
|
|
25
|
+
"Bash(curl:*)",
|
|
26
|
+
"Bash(lsof:*)",
|
|
27
|
+
"Bash(ls:*)",
|
|
28
|
+
"Bash(find:*)",
|
|
29
|
+
"Bash(grep:*)",
|
|
30
|
+
"Bash(xargs:*)",
|
|
31
|
+
"Bash(sleep:*)",
|
|
32
|
+
"Bash(rm:*)",
|
|
33
|
+
"Bash(test:*)",
|
|
34
|
+
"Bash(for:*)",
|
|
35
|
+
"Bash(node:*)",
|
|
36
|
+
"Bash(mkdir:*)",
|
|
37
|
+
"mcp__linear-server__get_issue",
|
|
38
|
+
"mcp__linear-server__list_issues",
|
|
39
|
+
"mcp__linear-server__list_comments",
|
|
40
|
+
"mcp__linear-server__create_comment",
|
|
41
|
+
"mcp__linear-server__update_issue",
|
|
42
|
+
"mcp__linear-server__list_issue_statuses",
|
|
43
|
+
"mcp__linear-server__create_issue",
|
|
44
|
+
"mcp__playwright__browser_snapshot",
|
|
45
|
+
"mcp__playwright__browser_take_screenshot",
|
|
46
|
+
"mcp__playwright__browser_navigate",
|
|
47
|
+
"mcp__playwright__browser_close",
|
|
48
|
+
"mcp__playwright__browser_wait_for",
|
|
49
|
+
"mcp__playwright__browser_click",
|
|
50
|
+
"mcp__playwright__browser_resize",
|
|
51
|
+
"mcp__playwright__browser_evaluate",
|
|
52
|
+
"mcp__playwright__browser_console_messages",
|
|
53
|
+
"mcp__playwright__browser_press_key",
|
|
54
|
+
"mcp__playwright__browser_network_requests",
|
|
55
|
+
"Skill(flow:maia-files-upload)",
|
|
56
|
+
"Skill(flow:maia-files-delete)",
|
|
57
|
+
"Skill(flow:browser-capture)",
|
|
58
|
+
"Skill(flow:linear-suggestion)",
|
|
59
|
+
"Skill(flow:test-unit)",
|
|
60
|
+
"Skill(flow:a11y-audit)"
|
|
61
|
+
],
|
|
62
|
+
"ask": [
|
|
63
|
+
"Skill(flow:commit)",
|
|
64
|
+
"Skill(flow:impl)",
|
|
65
|
+
"Skill(flow:plan)",
|
|
66
|
+
"Skill(flow:push)",
|
|
67
|
+
"Bash(git commit:*)",
|
|
68
|
+
"Bash(git push:*)",
|
|
69
|
+
"Bash(gh pr create:*)"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"enabledPlugins": {
|
|
73
|
+
"flow@mobilems": true
|
|
74
|
+
}
|
|
75
|
+
}
|