@cliangdev/flux-plugin 0.3.1-dev.bdbaeae → 0.3.1

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 (29) hide show
  1. package/commands/dashboard.md +1 -1
  2. package/package.json +1 -3
  3. package/src/server/adapters/factory.ts +28 -6
  4. package/src/server/adapters/types.ts +1 -1
  5. package/src/server/index.ts +0 -2
  6. package/src/server/tools/__tests__/mcp-interface.test.ts +0 -6
  7. package/src/server/tools/index.ts +1 -2
  8. package/src/server/tools/init-project.ts +12 -26
  9. package/src/server/adapters/github/__tests__/criteria-deps.test.ts +0 -579
  10. package/src/server/adapters/github/__tests__/documents-stats.test.ts +0 -789
  11. package/src/server/adapters/github/__tests__/epic-task-crud.test.ts +0 -1072
  12. package/src/server/adapters/github/__tests__/foundation.test.ts +0 -537
  13. package/src/server/adapters/github/__tests__/index-store.test.ts +0 -319
  14. package/src/server/adapters/github/__tests__/prd-crud.test.ts +0 -836
  15. package/src/server/adapters/github/adapter.ts +0 -1552
  16. package/src/server/adapters/github/client.ts +0 -33
  17. package/src/server/adapters/github/config.ts +0 -59
  18. package/src/server/adapters/github/helpers/criteria.ts +0 -157
  19. package/src/server/adapters/github/helpers/index-store.ts +0 -75
  20. package/src/server/adapters/github/helpers/meta.ts +0 -26
  21. package/src/server/adapters/github/index.ts +0 -5
  22. package/src/server/adapters/github/mappers/epic.ts +0 -21
  23. package/src/server/adapters/github/mappers/index.ts +0 -15
  24. package/src/server/adapters/github/mappers/prd.ts +0 -50
  25. package/src/server/adapters/github/mappers/task.ts +0 -37
  26. package/src/server/adapters/github/types.ts +0 -27
  27. package/src/server/tools/__tests__/z-configure-github.test.ts +0 -509
  28. package/src/server/tools/__tests__/z-init-project.test.ts +0 -168
  29. package/src/server/tools/configure-github.ts +0 -411
@@ -13,7 +13,7 @@ Launch the Flux Dashboard web interface to visualize project status.
13
13
  Run the dashboard server:
14
14
 
15
15
  ```bash
16
- bunx --force @cliangdev/flux-plugin@latest dashboard
16
+ bunx @cliangdev/flux-plugin dashboard
17
17
  ```
18
18
 
19
19
  This will:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cliangdev/flux-plugin",
3
- "version": "0.3.1-dev.bdbaeae",
3
+ "version": "0.3.1",
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",
@@ -59,8 +59,6 @@
59
59
  "dependencies": {
60
60
  "@linear/sdk": "^70.0.0",
61
61
  "@modelcontextprotocol/sdk": "^1.25.2",
62
- "@octokit/graphql": "^9.0.3",
63
- "@octokit/rest": "^22.0.1",
64
62
  "chalk": "^5.4.1",
65
63
  "zod": "^4.3.5"
66
64
  },
@@ -1,7 +1,12 @@
1
+ /**
2
+ * Adapter Factory
3
+ *
4
+ * Creates the appropriate adapter based on project configuration.
5
+ * Supports LocalAdapter and LinearAdapter; future adapters will be added here.
6
+ */
7
+
1
8
  import { existsSync, readFileSync } from "node:fs";
2
9
  import { config } from "../config.js";
3
- import { GitHubAdapter } from "./github/adapter.js";
4
- import { loadGithubConfig } from "./github/config.js";
5
10
  import { LinearAdapter } from "./linear/adapter.js";
6
11
  import { linearConfigExists, loadLinearConfig } from "./linear/config.js";
7
12
  import { LocalAdapter } from "./local-adapter.js";
@@ -9,8 +14,12 @@ import type { AdapterConfig, BackendAdapter } from "./types.js";
9
14
 
10
15
  let cachedAdapter: BackendAdapter | null = null;
11
16
 
17
+ /**
18
+ * Get the adapter configuration from project.json
19
+ */
12
20
  function getAdapterConfig(): AdapterConfig {
13
21
  if (!existsSync(config.projectJsonPath)) {
22
+ // Default to local adapter if project not initialized
14
23
  return { type: "local" };
15
24
  }
16
25
 
@@ -23,6 +32,12 @@ function getAdapterConfig(): AdapterConfig {
23
32
  }
24
33
  }
25
34
 
35
+ /**
36
+ * Create an adapter instance based on configuration.
37
+ *
38
+ * @param adapterConfig - Optional override for adapter configuration
39
+ * @returns The appropriate BackendAdapter implementation
40
+ */
26
41
  export function createAdapter(adapterConfig?: AdapterConfig): BackendAdapter {
27
42
  const cfg = adapterConfig ?? getAdapterConfig();
28
43
 
@@ -45,10 +60,6 @@ export function createAdapter(adapterConfig?: AdapterConfig): BackendAdapter {
45
60
  case "notion":
46
61
  // TODO: Implement NotionAdapter
47
62
  throw new Error("Notion adapter not yet implemented");
48
- case "github": {
49
- const githubConfig = loadGithubConfig();
50
- return new GitHubAdapter(githubConfig);
51
- }
52
63
  default: {
53
64
  const _exhaustive: never = cfg.type;
54
65
  throw new Error(`Unknown adapter type: ${cfg.type}`);
@@ -56,6 +67,13 @@ export function createAdapter(adapterConfig?: AdapterConfig): BackendAdapter {
56
67
  }
57
68
  }
58
69
 
70
+ /**
71
+ * Get or create a cached adapter instance.
72
+ * Uses singleton pattern to avoid creating multiple adapter instances.
73
+ *
74
+ * @param forceNew - If true, creates a new adapter even if one is cached
75
+ * @returns The cached or newly created adapter
76
+ */
59
77
  export function getAdapter(forceNew = false): BackendAdapter {
60
78
  if (forceNew || !cachedAdapter) {
61
79
  cachedAdapter = createAdapter();
@@ -63,6 +81,10 @@ export function getAdapter(forceNew = false): BackendAdapter {
63
81
  return cachedAdapter;
64
82
  }
65
83
 
84
+ /**
85
+ * Clear the cached adapter instance.
86
+ * Useful for testing or when project configuration changes.
87
+ */
66
88
  export function clearAdapterCache(): void {
67
89
  cachedAdapter = null;
68
90
  }
@@ -288,6 +288,6 @@ export interface CascadeResult {
288
288
  * Adapter configuration stored in project.json
289
289
  */
290
290
  export interface AdapterConfig {
291
- type: "local" | "specflux" | "linear" | "notion" | "github";
291
+ type: "local" | "specflux" | "linear" | "notion";
292
292
  config?: Record<string, unknown>;
293
293
  }
@@ -5,7 +5,6 @@ import { fluxProjectExists, initDb } from "./db/index.js";
5
5
  import {
6
6
  addCriteriaTool,
7
7
  addDependencyTool,
8
- configureGithubTool,
9
8
  configureLinearTool,
10
9
  createEpicTool,
11
10
  createPrdTool,
@@ -51,7 +50,6 @@ const tools: ToolDefinition[] = [
51
50
  getStatsTool,
52
51
  getVersionTool,
53
52
  // Configuration tools
54
- configureGithubTool,
55
53
  configureLinearTool,
56
54
  // Display tools
57
55
  renderStatusTool,
@@ -84,12 +84,6 @@ describe("MCP Interface", () => {
84
84
  expect(toolOption?.params?.vision).toBeDefined();
85
85
  expect(toolOption?.params?.adapter).toBeDefined();
86
86
  });
87
-
88
- test("adapter param includes github option", () => {
89
- const error = createProjectNotInitializedError("/cwd", "/root");
90
- const toolOption = error.setup.options.find((o) => o.method === "tool");
91
- expect(toolOption?.params?.adapter).toContain("github");
92
- });
93
87
  });
94
88
 
95
89
  describe("registerTools", () => {
@@ -64,7 +64,7 @@ export function createProjectNotInitializedError(
64
64
  params: {
65
65
  name: "Project name (required)",
66
66
  vision: "Brief project description (required)",
67
- adapter: "local | linear | github (default: local)",
67
+ adapter: "local | linear (default: local)",
68
68
  },
69
69
  },
70
70
  ],
@@ -140,7 +140,6 @@ export function registerTools(server: Server, tools: ToolDefinition[]) {
140
140
  });
141
141
  }
142
142
 
143
- export { configureGithubTool } from "./configure-github.js";
144
143
  export { configureLinearTool } from "./configure-linear.js";
145
144
  export { createEpicTool } from "./create-epic.js";
146
145
  export { createPrdTool } from "./create-prd.js";
@@ -48,13 +48,7 @@ function setupClaudeSettings(projectRoot: string): void {
48
48
  }
49
49
  }
50
50
 
51
- const adapterTypes = [
52
- "local",
53
- "specflux",
54
- "linear",
55
- "notion",
56
- "github",
57
- ] as const;
51
+ const adapterTypes = ["local", "specflux", "linear", "notion"] as const;
58
52
 
59
53
  const inputSchema = z.object({
60
54
  name: z.string().min(1, "Project name is required"),
@@ -86,37 +80,29 @@ async function handler(input: unknown) {
86
80
  writeFileSync(config.projectJsonPath, JSON.stringify(projectJson, null, 2));
87
81
  config.clearCache();
88
82
 
89
- if (parsed.adapter === "local") {
90
- initDb();
91
- const projectId = generateId("proj");
92
- const db = getDb();
93
- insert(db, "projects", {
94
- id: projectId,
95
- name: parsed.name,
96
- ref_prefix: refPrefix,
97
- });
98
- }
83
+ initDb();
99
84
 
100
- setupClaudeSettings(config.projectRoot);
85
+ const projectId = generateId("proj");
86
+ const db = getDb();
87
+ insert(db, "projects", {
88
+ id: projectId,
89
+ name: parsed.name,
90
+ ref_prefix: refPrefix,
91
+ });
101
92
 
102
- const nextStep =
103
- parsed.adapter === "github"
104
- ? "Run configure_github to connect your GitHub tracking repository."
105
- : parsed.adapter === "linear"
106
- ? "Run configure_linear to connect your Linear workspace."
107
- : "Run /flux:prd to start planning.";
93
+ setupClaudeSettings(config.projectRoot);
108
94
 
109
95
  return {
110
96
  success: true,
111
97
  project: projectJson,
112
- message: `Flux project initialized. ${nextStep}`,
98
+ message: `Flux project initialized. Run /flux:prd to start planning.`,
113
99
  };
114
100
  }
115
101
 
116
102
  export const initProjectTool: ToolDefinition = {
117
103
  name: "init_project",
118
104
  description:
119
- "Initialize a new Flux project. Required: name, vision. Optional: adapter (local|linear|github, default 'local'). Creates .flux/ directory with project.json. For local adapter, also initializes SQLite database. For github or linear, run configure_github or configure_linear next. Returns {success, project, message}. Fails if .flux/ already exists.",
105
+ "Initialize a new Flux project. Required: name, vision. Optional: adapter (local|specflux|linear|notion, default 'local'). Creates .flux/ directory with project.json and SQLite database. Returns {success, project, message}. Fails if .flux/ already exists.",
120
106
  inputSchema,
121
107
  handler,
122
108
  };