@cliangdev/flux-plugin 0.1.0 → 0.2.0-dev.dc5e2c4

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 (100) hide show
  1. package/README.md +54 -21
  2. package/agents/coder.md +192 -0
  3. package/agents/critic.md +174 -0
  4. package/agents/researcher.md +146 -0
  5. package/agents/verifier.md +149 -0
  6. package/bin/install.cjs +369 -0
  7. package/commands/breakdown.md +1 -0
  8. package/commands/flux.md +128 -84
  9. package/commands/implement.md +1 -0
  10. package/commands/linear.md +171 -0
  11. package/commands/prd.md +1 -0
  12. package/manifest.json +15 -0
  13. package/package.json +15 -11
  14. package/skills/agent-creator/SKILL.md +2 -0
  15. package/skills/epic-template/SKILL.md +2 -0
  16. package/skills/flux-orchestrator/SKILL.md +60 -76
  17. package/skills/prd-template/SKILL.md +2 -0
  18. package/src/__tests__/version.test.ts +37 -0
  19. package/src/adapters/local/.gitkeep +0 -0
  20. package/src/server/__tests__/config.test.ts +163 -0
  21. package/src/server/adapters/__tests__/a-client-linear.test.ts +197 -0
  22. package/src/server/adapters/__tests__/adapter-factory.test.ts +230 -0
  23. package/src/server/adapters/__tests__/dependency-ops.test.ts +395 -0
  24. package/src/server/adapters/__tests__/document-ops.test.ts +306 -0
  25. package/src/server/adapters/__tests__/linear-adapter.test.ts +91 -0
  26. package/src/server/adapters/__tests__/linear-config.test.ts +425 -0
  27. package/src/server/adapters/__tests__/linear-criteria-parser.test.ts +287 -0
  28. package/src/server/adapters/__tests__/linear-description-test.ts +238 -0
  29. package/src/server/adapters/__tests__/linear-epic-crud.test.ts +496 -0
  30. package/src/server/adapters/__tests__/linear-mappers-description.test.ts +276 -0
  31. package/src/server/adapters/__tests__/linear-mappers-epic.test.ts +294 -0
  32. package/src/server/adapters/__tests__/linear-mappers-prd.test.ts +300 -0
  33. package/src/server/adapters/__tests__/linear-mappers-task.test.ts +197 -0
  34. package/src/server/adapters/__tests__/linear-prd-crud.test.ts +620 -0
  35. package/src/server/adapters/__tests__/linear-stats.test.ts +450 -0
  36. package/src/server/adapters/__tests__/linear-task-crud.test.ts +534 -0
  37. package/src/server/adapters/__tests__/linear-types.test.ts +243 -0
  38. package/src/server/adapters/__tests__/status-ops.test.ts +441 -0
  39. package/src/server/adapters/factory.ts +90 -0
  40. package/src/server/adapters/index.ts +9 -0
  41. package/src/server/adapters/linear/adapter.ts +1136 -0
  42. package/src/server/adapters/linear/client.ts +169 -0
  43. package/src/server/adapters/linear/config.ts +152 -0
  44. package/src/server/adapters/linear/helpers/criteria-parser.ts +197 -0
  45. package/src/server/adapters/linear/helpers/index.ts +7 -0
  46. package/src/server/adapters/linear/index.ts +16 -0
  47. package/src/server/adapters/linear/mappers/description.ts +136 -0
  48. package/src/server/adapters/linear/mappers/epic.ts +81 -0
  49. package/src/server/adapters/linear/mappers/index.ts +27 -0
  50. package/src/server/adapters/linear/mappers/prd.ts +178 -0
  51. package/src/server/adapters/linear/mappers/task.ts +82 -0
  52. package/src/server/adapters/linear/types.ts +264 -0
  53. package/src/server/adapters/local-adapter.ts +968 -0
  54. package/src/server/adapters/types.ts +293 -0
  55. package/src/server/config.ts +73 -0
  56. package/src/server/db/__tests__/queries.test.ts +472 -0
  57. package/src/server/db/ids.ts +17 -0
  58. package/src/server/db/index.ts +69 -0
  59. package/src/server/db/queries.ts +142 -0
  60. package/src/server/db/refs.ts +60 -0
  61. package/src/server/db/schema.ts +88 -0
  62. package/src/server/db/sqlite.ts +10 -0
  63. package/src/server/index.ts +83 -0
  64. package/src/server/tools/__tests__/crud.test.ts +301 -0
  65. package/src/server/tools/__tests__/get-version.test.ts +27 -0
  66. package/src/server/tools/__tests__/mcp-interface.test.ts +388 -0
  67. package/src/server/tools/__tests__/query.test.ts +353 -0
  68. package/src/server/tools/__tests__/z-configure-linear.test.ts +511 -0
  69. package/src/server/tools/__tests__/z-get-linear-url.test.ts +108 -0
  70. package/src/server/tools/configure-linear.ts +373 -0
  71. package/src/server/tools/create-epic.ts +35 -0
  72. package/src/server/tools/create-prd.ts +31 -0
  73. package/src/server/tools/create-task.ts +38 -0
  74. package/src/server/tools/criteria.ts +50 -0
  75. package/src/server/tools/delete-entity.ts +76 -0
  76. package/src/server/tools/dependencies.ts +55 -0
  77. package/src/server/tools/get-entity.ts +238 -0
  78. package/src/server/tools/get-linear-url.ts +28 -0
  79. package/src/server/tools/get-project-context.ts +33 -0
  80. package/src/server/tools/get-stats.ts +52 -0
  81. package/src/server/tools/get-version.ts +20 -0
  82. package/src/server/tools/index.ts +114 -0
  83. package/src/server/tools/init-project.ts +108 -0
  84. package/src/server/tools/query-entities.ts +167 -0
  85. package/src/server/tools/render-status.ts +201 -0
  86. package/src/server/tools/update-entity.ts +140 -0
  87. package/src/server/tools/update-status.ts +166 -0
  88. package/src/server/utils/__tests__/mcp-response.test.ts +331 -0
  89. package/src/server/utils/logger.ts +9 -0
  90. package/src/server/utils/mcp-response.ts +254 -0
  91. package/src/server/utils/status-transitions.ts +160 -0
  92. package/src/status-line/__tests__/status-line.test.ts +215 -0
  93. package/src/status-line/index.ts +147 -0
  94. package/src/utils/__tests__/chalk-import.test.ts +32 -0
  95. package/src/utils/__tests__/display.test.ts +97 -0
  96. package/src/utils/__tests__/status-renderer.test.ts +310 -0
  97. package/src/utils/display.ts +62 -0
  98. package/src/utils/status-renderer.ts +188 -0
  99. package/src/version.ts +5 -0
  100. package/dist/server/index.js +0 -86929
package/commands/flux.md CHANGED
@@ -1,112 +1,156 @@
1
1
  ---
2
+ name: flux
2
3
  description: AI-first workflow orchestration for spec-driven development
3
- allowed-tools: mcp__flux__*
4
+ allowed-tools: mcp__plugin_flux_flux__*, AskUserQuestion, Read, Write
4
5
  ---
5
6
 
6
- # Flux Orchestrator
7
+ # Flux Command
8
+
9
+ You are the Flux orchestrator. Detect project state and guide the user to the appropriate next action.
10
+
11
+ ## Subcommands
7
12
 
8
- You are the Flux orchestrator. Your job is to detect the project state and guide the user through the appropriate workflow.
13
+ - `/flux version` - Show plugin version (call `get_version`)
14
+ - `/flux linear` - Connect to Linear (delegate to `/flux:linear`)
9
15
 
10
- ## Step 0: Check for Version Subcommand
16
+ ## Main Flow
17
+
18
+ ### Step 1: Get Project Context
11
19
 
12
- First, check if the user requested version information:
13
- - `/flux version` - Show version information
20
+ Call `get_project_context` to check project state.
14
21
 
15
- If the argument is "version":
22
+ ### Step 2: Route Based on State
16
23
 
17
- 1. Call the `get_version` MCP tool
18
- 2. Display the version information in a friendly format:
19
- ```
20
- Flux Plugin v{version}
21
- Package: @cliangdev/{name}
22
- ```
23
- 3. Exit (do not proceed to project state check)
24
+ **If `initialized: false`:**
25
+ Guide through initialization (see Initialization Flow below)
24
26
 
25
- ## Step 1: Check Project State
27
+ **If `initialized: true`:**
28
+ → Call `render_status` with `{view: "summary"}` to show current state
29
+ → Determine next action based on workflow state (see Workflow States)
26
30
 
27
- If no subcommand was provided, call the `get_project_context` MCP tool to check if this is a Flux project.
31
+ ## Initialization Flow
28
32
 
29
- ## Step 2: Handle Result
33
+ Use the `AskUserQuestion` tool for all questions during initialization.
30
34
 
31
- ### If `initialized: false` (New Project)
35
+ ### Step 1: Confirm Initialization
32
36
 
33
- This is a new project. Guide the user through initialization:
37
+ Use AskUserQuestion:
38
+ ```json
39
+ {
40
+ "questions": [{
41
+ "question": "No Flux project found. Would you like to initialize one?",
42
+ "header": "Initialize",
43
+ "options": [
44
+ {"label": "Yes", "description": "Create a new Flux project in this directory"},
45
+ {"label": "No", "description": "Cancel initialization"}
46
+ ],
47
+ "multiSelect": false
48
+ }]
49
+ }
50
+ ```
34
51
 
35
- 1. Ask: "No Flux project found in this directory. Would you like to initialize one?"
36
- - If no, end with: "Run `/flux` when you're ready to set up Flux."
52
+ If "No", exit with: "Run `/flux` when you're ready to set up Flux."
37
53
 
38
- 2. Ask: "What is the name of this project?"
39
- - Wait for response
54
+ ### Step 2: Collect Project Details
40
55
 
41
- 3. Ask: "Brief vision - what does this project do? (one sentence)"
42
- - Wait for response
56
+ Use AskUserQuestion with text input (user will select "Other" to type):
57
+ - Ask for project name
58
+ - Ask for project vision (brief description)
43
59
 
44
- 4. Call `init_project` tool with the name and vision
60
+ ### Step 3: Select Storage Backend
45
61
 
46
- 5. Display success message:
47
- ```
48
- Flux project initialized!
62
+ Use AskUserQuestion:
63
+ ```json
64
+ {
65
+ "questions": [{
66
+ "question": "Where should Flux store data?",
67
+ "header": "Storage",
68
+ "options": [
69
+ {"label": "Local (Recommended)", "description": "SQLite database in .flux/ - offline-first, no setup required"},
70
+ {"label": "Linear", "description": "Sync with Linear for team collaboration and issue tracking"}
71
+ ],
72
+ "multiSelect": false
73
+ }]
74
+ }
75
+ ```
49
76
 
50
- Project: {name}
51
- Vision: {vision}
52
- Reference prefix: {ref_prefix}
77
+ ### Step 4: Ask About Tool Permissions
53
78
 
54
- Created:
55
- - .flux/project.json
56
- - .flux/flux.db
79
+ Use AskUserQuestion:
80
+ ```json
81
+ {
82
+ "questions": [{
83
+ "question": "Add Flux tools to allow list? This prevents permission prompts for Flux operations.",
84
+ "header": "Permissions",
85
+ "options": [
86
+ {"label": "Yes (Recommended)", "description": "Allow all Flux MCP tools without prompting"},
87
+ {"label": "No", "description": "Ask for permission each time"}
88
+ ],
89
+ "multiSelect": false
90
+ }]
91
+ }
92
+ ```
57
93
 
58
- Next: Run /flux:prd to start planning your first PRD.
59
- ```
94
+ If "Yes", update the settings file:
60
95
 
61
- ### If Project Exists (Initialized)
96
+ 1. Read `.claude/settings.local.json` (create if doesn't exist)
97
+ 2. Parse JSON (or start with `{"permissions": {"allow": []}}` if empty/missing)
98
+ 3. Add `"mcp__plugin_flux_flux__*"` to `permissions.allow` array if not already present
99
+ 4. Write back to `.claude/settings.local.json`
62
100
 
63
- This is an existing Flux project. Show status and suggest next action:
101
+ Example result:
102
+ ```json
103
+ {
104
+ "permissions": {
105
+ "allow": ["mcp__plugin_flux_flux__*"]
106
+ }
107
+ }
108
+ ```
64
109
 
65
- 1. Call `get_stats` to get entity counts
66
-
67
- 2. Display status summary:
68
- ```
69
- Project: {name}
70
- Vision: {vision}
71
-
72
- Status:
73
- - PRDs: {total} ({draft} draft, {pending_review} in review, {approved} approved)
74
- - Epics: {total} ({pending} pending, {in_progress} active, {completed} done)
75
- - Tasks: {total} ({pending} pending, {in_progress} active, {completed} done)
76
- ```
77
-
78
- 3. Determine and suggest next action based on state:
79
-
80
- **If no PRDs exist:**
81
- > "No PRDs yet. Run `/flux:prd` to create your first product requirements document."
82
-
83
- **If PRDs exist with DRAFT status:**
84
- > "You have draft PRDs. Review them and run `/flux:prd refine` or submit for review."
85
-
86
- **If PRDs in PENDING_REVIEW:**
87
- > "PRDs pending review. The critique agent will analyze feasibility and risks."
88
-
89
- **If PRDs in REVIEWED status:**
90
- > "Critique complete. Review feedback, then approve or revise the PRD."
91
-
92
- **If PRDs APPROVED but no epics:**
93
- > "PRDs approved! Run `/flux:breakdown` to break them into epics and tasks."
94
-
95
- **If PRDs BREAKDOWN_READY with epics/tasks:**
96
- > "Ready to implement! Run `/flux:implement` to start working on tasks."
97
-
98
- **If tasks exist with PENDING status:**
99
- > "Tasks ready. Run `/flux:implement` to start working."
100
-
101
- **If tasks IN_PROGRESS:**
102
- > "Implementation in progress. Run `/flux:implement` to continue."
103
-
104
- **If all tasks COMPLETED:**
105
- > "All tasks complete! Review your work and create a PR."
110
+ Confirm to user: "Flux tools added to allow list. No more permission prompts for Flux operations."
111
+
112
+ ### Step 5: Initialize Project
113
+
114
+ Call `init_project` with collected values:
115
+ - `name`: project name
116
+ - `vision`: project vision
117
+ - `adapter`: "local" or "linear"
118
+
119
+ ### Step 6: Next Steps
120
+
121
+ Display success message, then:
122
+
123
+ - **If Local**: "Project initialized! Run `/flux:prd` to create your first PRD."
124
+ - **If Linear**: "Project initialized! Now run `/flux:linear` to connect to Linear."
125
+
126
+ ## Workflow States
127
+
128
+ Detect current state and suggest the appropriate next action:
129
+
130
+ | State | Detection | Next Action |
131
+ |-------|-----------|-------------|
132
+ | No PRDs | `prds.total == 0` | `/flux:prd` to create first PRD |
133
+ | Draft PRDs | PRDs in DRAFT | Review and refine or submit for review |
134
+ | Pending Review | PRDs in PENDING_REVIEW | Critique agent will analyze |
135
+ | Reviewed | PRDs in REVIEWED | Address feedback, approve or revise |
136
+ | Approved | PRDs in APPROVED, no epics | `/flux:breakdown` to create epics |
137
+ | Breakdown Ready | PRDs in BREAKDOWN_READY | `/flux:implement` to start coding |
138
+ | In Progress | Tasks IN_PROGRESS | Continue with `/flux:implement` |
139
+ | Complete | All tasks COMPLETED | Create PR |
140
+
141
+ ## Confidence-Based Autonomy
142
+
143
+ When determining actions:
144
+
145
+ | Confidence | Behavior |
146
+ |------------|----------|
147
+ | > 80% | Auto-execute, inform user |
148
+ | 50-80% | Suggest action, wait for confirmation |
149
+ | < 50% | Ask clarifying question |
106
150
 
107
151
  ## Guidelines
108
152
 
109
- - Be concise - users want quick status, not essays
110
- - One question at a time during initialization
111
- - Show actionable next steps
112
- - Use the MCP tools, don't read filesystem directly
153
+ - Use `AskUserQuestion` tool for all user choices during initialization
154
+ - Be concise - show status and one clear next action
155
+ - Use `render_status` for visual project overview
156
+ - Apply confidence-based autonomy for decisions
@@ -1,4 +1,5 @@
1
1
  ---
2
+ name: flux:implement
2
3
  description: Implement epics and tasks with orchestrator/subagent architecture
3
4
  allowed-tools: mcp__flux__*, Read, Bash, Task, AskUserQuestion
4
5
  ---
@@ -0,0 +1,171 @@
1
+ ---
2
+ name: flux:linear
3
+ description: Connect Flux project to Linear for issue tracking
4
+ allowed-tools: mcp__plugin_flux_flux__*, AskUserQuestion
5
+ ---
6
+
7
+ # Linear Integration Setup
8
+
9
+ Connect a Flux project to Linear using the interactive configuration flow.
10
+
11
+ ## How Interactive Mode Works
12
+
13
+ The `configure_linear` tool supports progressive discovery:
14
+
15
+ | Call | Response |
16
+ |------|----------|
17
+ | `{interactive: true}` | Returns `{step: "select_team", teams: [...], user: {...}}` |
18
+ | `{interactive: true, teamId: "xxx"}` | Returns `{step: "select_project", projects: [...], team: {...}}` |
19
+ | `{teamId: "xxx", projectName: "..."}` | Creates new project and configures |
20
+ | `{teamId: "xxx", existingProjectId: "..."}` | Uses existing project and configures |
21
+
22
+ ## Flow
23
+
24
+ ### Step 1: Verify Project
25
+
26
+ Call `get_project_context`.
27
+
28
+ - If `initialized: false` → Tell user to run `/flux` first, then exit.
29
+ - If `adapter.type === "linear"` and config exists → Already configured, show info and exit.
30
+ - Otherwise → Continue to Step 2.
31
+
32
+ ### Step 2: Fetch Teams
33
+
34
+ **IMPORTANT**: Call `configure_linear` with ONLY `interactive: true`. Do NOT pass teamId, projectName, or any other params.
35
+
36
+ ```json
37
+ {"interactive": true}
38
+ ```
39
+
40
+ This is the ONLY parameter needed for the first call. The tool will return available teams.
41
+
42
+ **If error** (e.g., "Linear API key not found"):
43
+ ```
44
+ Linear API key required.
45
+
46
+ 1. Get your key: Linear → Settings → API → Personal API keys
47
+ 2. Set it: export LINEAR_API_KEY=lin_api_xxx
48
+ 3. Run /flux:linear again
49
+ ```
50
+ Then exit.
51
+
52
+ **If success**, response will be:
53
+ ```json
54
+ {
55
+ "step": "select_team",
56
+ "user": {"name": "...", "email": "..."},
57
+ "teams": [
58
+ {"id": "team-abc", "name": "Engineering", "key": "ENG"},
59
+ {"id": "team-def", "name": "Product", "key": "PROD"}
60
+ ]
61
+ }
62
+ ```
63
+
64
+ Display: "Connected as {user.name} ({user.email})"
65
+
66
+ Use AskUserQuestion to let user select a team:
67
+ ```json
68
+ {
69
+ "questions": [{
70
+ "question": "Which Linear team should Flux use?",
71
+ "header": "Team",
72
+ "options": [
73
+ {"label": "Engineering (ENG)", "description": "team-abc"},
74
+ {"label": "Product (PROD)", "description": "team-def"}
75
+ ],
76
+ "multiSelect": false
77
+ }]
78
+ }
79
+ ```
80
+
81
+ Note: Put the team ID in the description field so you can retrieve it from the response.
82
+
83
+ ### Step 3: Fetch Projects
84
+
85
+ Call `configure_linear` with:
86
+ ```json
87
+ {"interactive": true, "teamId": "<selected_team_id>"}
88
+ ```
89
+
90
+ Response will be:
91
+ ```json
92
+ {
93
+ "step": "select_project",
94
+ "team": {"id": "...", "name": "...", "key": "..."},
95
+ "projects": [
96
+ {"id": "proj-123", "name": "Q1 Sprint", "state": "started"},
97
+ {"id": "proj-456", "name": "Backlog", "state": "planned"}
98
+ ]
99
+ }
100
+ ```
101
+
102
+ Use AskUserQuestion:
103
+ ```json
104
+ {
105
+ "questions": [{
106
+ "question": "Which project should Flux sync to?",
107
+ "header": "Project",
108
+ "options": [
109
+ {"label": "Create New Project", "description": "new"},
110
+ {"label": "Q1 Sprint", "description": "proj-123"},
111
+ {"label": "Backlog", "description": "proj-456"}
112
+ ],
113
+ "multiSelect": false
114
+ }]
115
+ }
116
+ ```
117
+
118
+ ### Step 4: Configure
119
+
120
+ **If user selected "Create New Project":**
121
+
122
+ Ask for project name, then call:
123
+ ```json
124
+ {
125
+ "teamId": "<team_id>",
126
+ "projectName": "<user_provided_name>"
127
+ }
128
+ ```
129
+
130
+ **If user selected existing project:**
131
+
132
+ Call:
133
+ ```json
134
+ {
135
+ "teamId": "<team_id>",
136
+ "existingProjectId": "<project_id>"
137
+ }
138
+ ```
139
+
140
+ ### Step 5: Success
141
+
142
+ Response will include:
143
+ ```json
144
+ {
145
+ "success": true,
146
+ "team": "Engineering",
147
+ "project": {"id": "...", "name": "..."},
148
+ "labels": {...},
149
+ "view": {"created": "...", "setup_hint": "..."}
150
+ }
151
+ ```
152
+
153
+ Display:
154
+ ```
155
+ Linear connected!
156
+
157
+ Team: {team}
158
+ Project: {project.name}
159
+
160
+ All PRDs, epics, and tasks will sync to Linear.
161
+ Run /flux:prd to create your first PRD.
162
+ ```
163
+
164
+ If `view.setup_hint` exists, show it as a tip.
165
+
166
+ ## Key Points
167
+
168
+ - Always use `{"interactive": true}` (boolean) not a string
169
+ - The response `step` field tells you what stage you're at
170
+ - Use AskUserQuestion for team/project selection
171
+ - Store the selected IDs from previous responses to use in next calls
package/commands/prd.md CHANGED
@@ -1,4 +1,5 @@
1
1
  ---
2
+ name: flux:prd
2
3
  description: Create or refine PRDs through guided interview
3
4
  allowed-tools: mcp__flux__*, AskUserQuestion
4
5
  ---
package/manifest.json ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "./manifest.schema.json",
3
+ "version": "1.0.0",
4
+ "structure": {
5
+ "commands": ["flux.md", "prd.md", "breakdown.md", "implement.md"],
6
+ "skills": [
7
+ "agent-creator",
8
+ "epic-template",
9
+ "flux-orchestrator",
10
+ "prd-template"
11
+ ],
12
+ "agents": ["coder.md", "critic.md", "researcher.md", "verifier.md"],
13
+ "hooks": []
14
+ }
15
+ }
package/package.json CHANGED
@@ -1,32 +1,36 @@
1
1
  {
2
2
  "name": "@cliangdev/flux-plugin",
3
- "version": "0.1.0",
3
+ "version": "0.2.0-dev.dc5e2c4",
4
4
  "description": "Claude Code plugin for AI-first workflow orchestration with MCP server",
5
5
  "type": "module",
6
6
  "main": "./dist/server/index.js",
7
7
  "bin": {
8
- "flux-plugin": "./dist/server/index.js"
8
+ "flux-plugin": "./bin/install.cjs"
9
9
  },
10
10
  "files": [
11
- "dist/",
11
+ "bin/install.cjs",
12
+ "src/",
12
13
  "skills/",
13
- "commands/"
14
+ "commands/",
15
+ "agents/",
16
+ "manifest.json"
14
17
  ],
15
18
  "scripts": {
16
19
  "dev": "bun run src/server/index.ts",
17
- "build": "bun build src/server/index.ts --outdir dist/server --target node",
18
- "postbuild": "node -e \"const fs=require('fs');const f='dist/server/index.js';const c=fs.readFileSync(f,'utf-8');if(!c.startsWith('#!/usr/bin/env node')){fs.writeFileSync(f,'#!/usr/bin/env node\\n'+c)}\"",
19
- "build:compile": "bun build --compile --outfile bin/flux-server src/server/index.ts && bun build --compile --outfile bin/flux-status src/status-line/index.ts",
20
- "build:compile:server": "bun build --compile --outfile bin/flux-server src/server/index.ts",
21
- "build:compile:status": "bun build --compile --outfile bin/flux-status src/status-line/index.ts",
22
- "prepublishOnly": "bun run build",
20
+ "build": "bun build --compile --outfile bin/flux-server src/server/index.ts && bun build --compile --outfile bin/flux-status src/status-line/index.ts",
21
+ "build:server": "bun build --compile --outfile bin/flux-server src/server/index.ts",
22
+ "build:status": "bun build --compile --outfile bin/flux-status src/status-line/index.ts",
23
+ "validate": "node scripts/validate-structure.cjs",
24
+ "test:integration": "bun test scripts/__tests__/integration.test.ts --timeout 120000",
25
+ "prepublishOnly": "bun run validate && bun run test:integration",
23
26
  "test": "bun test",
24
27
  "test:linear-description": "bun run src/server/adapters/__tests__/linear-description-test.ts",
25
28
  "typecheck": "tsc --noEmit",
26
29
  "lint": "biome check .",
27
30
  "lint:fix": "biome check --write .",
28
31
  "format": "biome format --write .",
29
- "verify-release": "bun run scripts/verify-release.ts"
32
+ "verify-release": "bun run scripts/verify-release.ts",
33
+ "release": "./scripts/release.sh"
30
34
  },
31
35
  "repository": {
32
36
  "type": "git",
@@ -1,5 +1,7 @@
1
1
  ---
2
+ name: flux:agent-creator
2
3
  description: Guide for creating effective subagents. Use when users want to create a new agent that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
4
+ user-invocable: false
3
5
  ---
4
6
 
5
7
  # Agent Creator Skill
@@ -1,5 +1,7 @@
1
1
  ---
2
+ name: flux:epic-template
2
3
  description: Epic and task structure patterns for Flux. Use when breaking PRDs into epics and tasks. Epics should be self-contained with clear acceptance criteria.
4
+ user-invocable: false
3
5
  ---
4
6
 
5
7
  # Epic Template Skill