@cliangdev/flux-plugin 0.1.0 → 0.2.0-dev.359209a

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 (113) hide show
  1. package/README.md +55 -22
  2. package/agents/coder.md +317 -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 +390 -0
  7. package/commands/breakdown.md +48 -10
  8. package/commands/dashboard.md +29 -0
  9. package/commands/flux.md +218 -94
  10. package/commands/implement.md +167 -17
  11. package/commands/linear.md +172 -0
  12. package/commands/prd.md +997 -82
  13. package/manifest.json +16 -0
  14. package/package.json +17 -11
  15. package/skills/agent-creator/SKILL.md +2 -0
  16. package/skills/epic-template/SKILL.md +2 -0
  17. package/skills/flux-orchestrator/SKILL.md +68 -76
  18. package/skills/prd-writer/SKILL.md +761 -0
  19. package/skills/ux-ui-design/SKILL.md +346 -0
  20. package/skills/ux-ui-design/references/design-tokens.md +359 -0
  21. package/src/__tests__/version.test.ts +37 -0
  22. package/src/adapters/local/.gitkeep +0 -0
  23. package/src/dashboard/__tests__/api.test.ts +211 -0
  24. package/src/dashboard/browser.ts +35 -0
  25. package/src/dashboard/public/app.js +869 -0
  26. package/src/dashboard/public/index.html +90 -0
  27. package/src/dashboard/public/styles.css +807 -0
  28. package/src/dashboard/public/vendor/highlight.css +10 -0
  29. package/src/dashboard/public/vendor/highlight.min.js +8422 -0
  30. package/src/dashboard/public/vendor/marked.min.js +2210 -0
  31. package/src/dashboard/server.ts +296 -0
  32. package/src/dashboard/watchers.ts +83 -0
  33. package/src/server/__tests__/config.test.ts +163 -0
  34. package/src/server/adapters/__tests__/a-client-linear.test.ts +197 -0
  35. package/src/server/adapters/__tests__/adapter-factory.test.ts +230 -0
  36. package/src/server/adapters/__tests__/dependency-ops.test.ts +429 -0
  37. package/src/server/adapters/__tests__/document-ops.test.ts +306 -0
  38. package/src/server/adapters/__tests__/linear-adapter.test.ts +91 -0
  39. package/src/server/adapters/__tests__/linear-config.test.ts +425 -0
  40. package/src/server/adapters/__tests__/linear-criteria-parser.test.ts +287 -0
  41. package/src/server/adapters/__tests__/linear-description-test.ts +238 -0
  42. package/src/server/adapters/__tests__/linear-epic-crud.test.ts +496 -0
  43. package/src/server/adapters/__tests__/linear-mappers-description.test.ts +276 -0
  44. package/src/server/adapters/__tests__/linear-mappers-epic.test.ts +294 -0
  45. package/src/server/adapters/__tests__/linear-mappers-prd.test.ts +300 -0
  46. package/src/server/adapters/__tests__/linear-mappers-task.test.ts +197 -0
  47. package/src/server/adapters/__tests__/linear-prd-crud.test.ts +620 -0
  48. package/src/server/adapters/__tests__/linear-stats.test.ts +450 -0
  49. package/src/server/adapters/__tests__/linear-task-crud.test.ts +534 -0
  50. package/src/server/adapters/__tests__/linear-types.test.ts +243 -0
  51. package/src/server/adapters/__tests__/status-ops.test.ts +441 -0
  52. package/src/server/adapters/factory.ts +90 -0
  53. package/src/server/adapters/index.ts +9 -0
  54. package/src/server/adapters/linear/adapter.ts +1141 -0
  55. package/src/server/adapters/linear/client.ts +169 -0
  56. package/src/server/adapters/linear/config.ts +152 -0
  57. package/src/server/adapters/linear/helpers/criteria-parser.ts +197 -0
  58. package/src/server/adapters/linear/helpers/index.ts +7 -0
  59. package/src/server/adapters/linear/index.ts +16 -0
  60. package/src/server/adapters/linear/mappers/description.ts +136 -0
  61. package/src/server/adapters/linear/mappers/epic.ts +81 -0
  62. package/src/server/adapters/linear/mappers/index.ts +27 -0
  63. package/src/server/adapters/linear/mappers/prd.ts +178 -0
  64. package/src/server/adapters/linear/mappers/task.ts +82 -0
  65. package/src/server/adapters/linear/types.ts +264 -0
  66. package/src/server/adapters/local-adapter.ts +1009 -0
  67. package/src/server/adapters/types.ts +293 -0
  68. package/src/server/config.ts +73 -0
  69. package/src/server/db/__tests__/queries.test.ts +473 -0
  70. package/src/server/db/ids.ts +17 -0
  71. package/src/server/db/index.ts +69 -0
  72. package/src/server/db/queries.ts +142 -0
  73. package/src/server/db/refs.ts +60 -0
  74. package/src/server/db/schema.ts +97 -0
  75. package/src/server/db/sqlite.ts +10 -0
  76. package/src/server/index.ts +81 -0
  77. package/src/server/tools/__tests__/crud.test.ts +411 -0
  78. package/src/server/tools/__tests__/get-version.test.ts +27 -0
  79. package/src/server/tools/__tests__/mcp-interface.test.ts +479 -0
  80. package/src/server/tools/__tests__/query.test.ts +405 -0
  81. package/src/server/tools/__tests__/z-configure-linear.test.ts +511 -0
  82. package/src/server/tools/__tests__/z-get-linear-url.test.ts +108 -0
  83. package/src/server/tools/configure-linear.ts +373 -0
  84. package/src/server/tools/create-epic.ts +44 -0
  85. package/src/server/tools/create-prd.ts +40 -0
  86. package/src/server/tools/create-task.ts +47 -0
  87. package/src/server/tools/criteria.ts +50 -0
  88. package/src/server/tools/delete-entity.ts +76 -0
  89. package/src/server/tools/dependencies.ts +55 -0
  90. package/src/server/tools/get-entity.ts +240 -0
  91. package/src/server/tools/get-linear-url.ts +28 -0
  92. package/src/server/tools/get-stats.ts +52 -0
  93. package/src/server/tools/get-version.ts +20 -0
  94. package/src/server/tools/index.ts +158 -0
  95. package/src/server/tools/init-project.ts +108 -0
  96. package/src/server/tools/query-entities.ts +167 -0
  97. package/src/server/tools/render-status.ts +219 -0
  98. package/src/server/tools/update-entity.ts +140 -0
  99. package/src/server/tools/update-status.ts +166 -0
  100. package/src/server/utils/__tests__/mcp-response.test.ts +331 -0
  101. package/src/server/utils/logger.ts +9 -0
  102. package/src/server/utils/mcp-response.ts +254 -0
  103. package/src/server/utils/status-transitions.ts +160 -0
  104. package/src/status-line/__tests__/status-line.test.ts +215 -0
  105. package/src/status-line/index.ts +147 -0
  106. package/src/utils/__tests__/chalk-import.test.ts +32 -0
  107. package/src/utils/__tests__/display.test.ts +97 -0
  108. package/src/utils/__tests__/status-renderer.test.ts +310 -0
  109. package/src/utils/display.ts +62 -0
  110. package/src/utils/status-renderer.ts +214 -0
  111. package/src/version.ts +5 -0
  112. package/dist/server/index.js +0 -86929
  113. package/skills/prd-template/SKILL.md +0 -240
@@ -0,0 +1,172 @@
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 & Fetch Teams
25
+
26
+ Call `configure_linear` with `{interactive: true}`.
27
+
28
+ - If error with `code: "PROJECT_NOT_INITIALIZED"` → Tell user to run `/flux` first, then exit.
29
+ - If error about Linear API key → Show instructions (see Step 2 error handling).
30
+ - If success with `step: "already_configured"` → Already configured, show info and exit.
31
+ - Otherwise → Continue with team selection (response contains teams list).
32
+
33
+ ### Step 2: Fetch Teams
34
+
35
+ **IMPORTANT**: Call `configure_linear` with ONLY `interactive: true`. Do NOT pass teamId, projectName, or any other params.
36
+
37
+ ```json
38
+ {"interactive": true}
39
+ ```
40
+
41
+ This is the ONLY parameter needed for the first call. The tool will return available teams.
42
+
43
+ **If error** (e.g., "Linear API key not found"):
44
+ ```
45
+ Linear API key required.
46
+
47
+ 1. Get your key: Linear → Settings → API → Personal API keys
48
+ 2. Set it: export LINEAR_API_KEY=lin_api_xxx
49
+ 3. Run /flux:linear again
50
+ ```
51
+ Then exit.
52
+
53
+ **If success**, response will be:
54
+ ```json
55
+ {
56
+ "step": "select_team",
57
+ "user": {"name": "...", "email": "..."},
58
+ "teams": [
59
+ {"id": "team-abc", "name": "Engineering", "key": "ENG"},
60
+ {"id": "team-def", "name": "Product", "key": "PROD"}
61
+ ]
62
+ }
63
+ ```
64
+
65
+ Display: "Connected as {user.name} ({user.email})"
66
+
67
+ Use AskUserQuestion to let user select a team:
68
+ ```json
69
+ {
70
+ "questions": [{
71
+ "question": "Which Linear team should Flux use?",
72
+ "header": "Team",
73
+ "options": [
74
+ {"label": "Engineering (ENG)", "description": "team-abc"},
75
+ {"label": "Product (PROD)", "description": "team-def"}
76
+ ],
77
+ "multiSelect": false
78
+ }]
79
+ }
80
+ ```
81
+
82
+ Note: Put the team ID in the description field so you can retrieve it from the response.
83
+
84
+ ### Step 3: Fetch Projects
85
+
86
+ Call `configure_linear` with:
87
+ ```json
88
+ {"interactive": true, "teamId": "<selected_team_id>"}
89
+ ```
90
+
91
+ Response will be:
92
+ ```json
93
+ {
94
+ "step": "select_project",
95
+ "team": {"id": "...", "name": "...", "key": "..."},
96
+ "projects": [
97
+ {"id": "proj-123", "name": "Q1 Sprint", "state": "started"},
98
+ {"id": "proj-456", "name": "Backlog", "state": "planned"}
99
+ ]
100
+ }
101
+ ```
102
+
103
+ Use AskUserQuestion:
104
+ ```json
105
+ {
106
+ "questions": [{
107
+ "question": "Which project should Flux sync to?",
108
+ "header": "Project",
109
+ "options": [
110
+ {"label": "Create New Project", "description": "new"},
111
+ {"label": "Q1 Sprint", "description": "proj-123"},
112
+ {"label": "Backlog", "description": "proj-456"}
113
+ ],
114
+ "multiSelect": false
115
+ }]
116
+ }
117
+ ```
118
+
119
+ ### Step 4: Configure
120
+
121
+ **If user selected "Create New Project":**
122
+
123
+ Ask for project name, then call:
124
+ ```json
125
+ {
126
+ "teamId": "<team_id>",
127
+ "projectName": "<user_provided_name>"
128
+ }
129
+ ```
130
+
131
+ **If user selected existing project:**
132
+
133
+ Call:
134
+ ```json
135
+ {
136
+ "teamId": "<team_id>",
137
+ "existingProjectId": "<project_id>"
138
+ }
139
+ ```
140
+
141
+ ### Step 5: Success
142
+
143
+ Response will include:
144
+ ```json
145
+ {
146
+ "success": true,
147
+ "team": "Engineering",
148
+ "project": {"id": "...", "name": "..."},
149
+ "labels": {...},
150
+ "view": {"created": "...", "setup_hint": "..."}
151
+ }
152
+ ```
153
+
154
+ Display:
155
+ ```
156
+ Linear connected!
157
+
158
+ Team: {team}
159
+ Project: {project.name}
160
+
161
+ All PRDs, epics, and tasks will sync to Linear.
162
+ Run /flux:prd to create your first PRD.
163
+ ```
164
+
165
+ If `view.setup_hint` exists, show it as a tip.
166
+
167
+ ## Key Points
168
+
169
+ - Always use `{"interactive": true}` (boolean) not a string
170
+ - The response `step` field tells you what stage you're at
171
+ - Use AskUserQuestion for team/project selection
172
+ - Store the selected IDs from previous responses to use in next calls