@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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartsoft001-mobilems/claude-plugins",
3
- "version": "2.63.0",
3
+ "version": "2.64.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -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.63.0"
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
+ }