maestro-flow 0.5.38 → 0.5.40

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 (163) hide show
  1. package/.agents/skills/odyssey-debug/SKILL.md +90 -269
  2. package/.agents/skills/odyssey-improve/SKILL.md +39 -240
  3. package/.agents/skills/odyssey-planex/SKILL.md +21 -105
  4. package/.agents/skills/odyssey-review-test-fix/SKILL.md +98 -318
  5. package/.agents/skills/odyssey-ui/SKILL.md +82 -265
  6. package/.agy/skills/odyssey-debug/SKILL.md +90 -269
  7. package/.agy/skills/odyssey-improve/SKILL.md +39 -240
  8. package/.agy/skills/odyssey-planex/SKILL.md +21 -105
  9. package/.agy/skills/odyssey-review-test-fix/SKILL.md +98 -318
  10. package/.agy/skills/odyssey-ui/SKILL.md +82 -265
  11. package/.claude/commands/odyssey-debug.md +90 -269
  12. package/.claude/commands/odyssey-improve.md +39 -240
  13. package/.claude/commands/odyssey-planex.md +21 -105
  14. package/.claude/commands/odyssey-review-test-fix.md +98 -318
  15. package/.claude/commands/odyssey-ui.md +82 -265
  16. package/.codex/agents/cli-explore-agent.toml +181 -0
  17. package/.codex/agents/cross-role-reviewer.toml +165 -0
  18. package/.codex/agents/impeccable-agent.toml +89 -0
  19. package/.codex/agents/role-design-author.toml +213 -0
  20. package/.codex/agents/team-worker.toml +4 -7
  21. package/.codex/agents/ui-design-agent.toml +260 -0
  22. package/.codex/agents/workflow-analyzer.toml +106 -0
  23. package/.codex/agents/workflow-codebase-mapper.toml +69 -0
  24. package/.codex/agents/workflow-collab-planner.toml +140 -0
  25. package/.codex/agents/workflow-debugger.toml +95 -0
  26. package/.codex/agents/workflow-executor.toml +124 -0
  27. package/.codex/agents/workflow-external-researcher.toml +80 -0
  28. package/.codex/agents/workflow-integration-checker.toml +76 -0
  29. package/.codex/agents/workflow-nyquist-auditor.toml +77 -0
  30. package/.codex/agents/workflow-phase-researcher.toml +76 -0
  31. package/.codex/agents/workflow-plan-checker.toml +93 -0
  32. package/.codex/agents/workflow-planner.toml +192 -0
  33. package/.codex/agents/workflow-project-researcher.toml +65 -0
  34. package/.codex/agents/workflow-research-synthesizer.toml +65 -0
  35. package/.codex/agents/workflow-reviewer.toml +75 -0
  36. package/.codex/agents/workflow-roadmapper.toml +75 -0
  37. package/.codex/agents/workflow-verifier.toml +113 -0
  38. package/.codex/skills/maestro/SKILL.md +1 -0
  39. package/.codex/skills/maestro-analyze/SKILL.md +33 -15
  40. package/.codex/skills/maestro-brainstorm/SKILL.md +13 -10
  41. package/.codex/skills/maestro-collab/SKILL.md +30 -75
  42. package/.codex/skills/maestro-execute/SKILL.md +19 -12
  43. package/.codex/skills/maestro-grill/SKILL.md +12 -11
  44. package/.codex/skills/maestro-next/SKILL.md +3 -3
  45. package/.codex/skills/maestro-overlay/SKILL.md +1 -1
  46. package/.codex/skills/maestro-plan/SKILL.md +17 -8
  47. package/.codex/skills/maestro-ralph/SKILL.md +3 -0
  48. package/.codex/skills/maestro-ralph-execute/SKILL.md +1 -0
  49. package/.codex/skills/maestro-roadmap/SKILL.md +14 -8
  50. package/.codex/skills/manage-learn/SKILL.md +1 -1
  51. package/.codex/skills/odyssey-debug/SKILL.md +185 -275
  52. package/.codex/skills/odyssey-improve/SKILL.md +216 -308
  53. package/.codex/skills/odyssey-planex/SKILL.md +317 -159
  54. package/.codex/skills/odyssey-review-test-fix/SKILL.md +137 -255
  55. package/.codex/skills/odyssey-ui/SKILL.md +183 -247
  56. package/.codex/skills/quality-review/SKILL.md +17 -10
  57. package/.codex/skills/team-lifecycle-v4/instructions/agent-instruction.md +6 -12
  58. package/.codex/skills/team-lifecycle-v4/roles/analyst/role.md +6 -14
  59. package/.codex/skills/team-lifecycle-v4/roles/executor/commands/implement.md +2 -6
  60. package/.codex/skills/team-lifecycle-v4/roles/planner/role.md +6 -14
  61. package/.codex/skills/team-lifecycle-v4/roles/writer/role.md +3 -7
  62. package/.codex/skills/team-quality-assurance/roles/scout/role.md +2 -5
  63. package/.codex/skills/team-review/roles/reviewer/role.md +2 -5
  64. package/.codex/skills/team-review/roles/scanner/role.md +2 -5
  65. package/.codex/skills/team-tech-debt/roles/executor/role.md +3 -7
  66. package/.codex/skills/team-tech-debt/roles/scanner/role.md +2 -5
  67. package/.codex/skills/team-tech-debt/roles/validator/role.md +3 -7
  68. package/.codex/skills/team-testing/roles/executor/role.md +3 -7
  69. package/.codex/skills/team-testing/roles/generator/role.md +3 -7
  70. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.d.ts +23 -2
  71. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.js +242 -26
  72. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.js.map +1 -1
  73. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.d.ts +2 -0
  74. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +92 -29
  75. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  76. package/dashboard/dist-server/src/commands/hooks.d.ts +2 -1
  77. package/dashboard/dist-server/src/commands/hooks.js +16 -9
  78. package/dashboard/dist-server/src/commands/hooks.js.map +1 -1
  79. package/dashboard/dist-server/src/commands/install-backend.js +19 -0
  80. package/dashboard/dist-server/src/commands/install-backend.js.map +1 -1
  81. package/dashboard/dist-server/src/core/manifest.d.ts +5 -0
  82. package/dashboard/dist-server/src/core/manifest.js.map +1 -1
  83. package/dashboard/dist-server/src/core/plugin-bridge.d.ts +59 -0
  84. package/dashboard/dist-server/src/core/plugin-bridge.js +355 -0
  85. package/dashboard/dist-server/src/core/plugin-bridge.js.map +1 -0
  86. package/dashboard/dist-server/src/hooks/kg-sync-hook.js +5 -0
  87. package/dashboard/dist-server/src/hooks/kg-sync-hook.js.map +1 -1
  88. package/dashboard/dist-server/src/hooks/session-context.js +276 -3
  89. package/dashboard/dist-server/src/hooks/session-context.js.map +1 -1
  90. package/dashboard/dist-server/src/search/daemon-client.d.ts +8 -3
  91. package/dashboard/dist-server/src/search/daemon-client.js +20 -0
  92. package/dashboard/dist-server/src/search/daemon-client.js.map +1 -1
  93. package/dist/src/cli.js +19 -1
  94. package/dist/src/cli.js.map +1 -1
  95. package/dist/src/commands/domain.d.ts.map +1 -1
  96. package/dist/src/commands/domain.js +12 -3
  97. package/dist/src/commands/domain.js.map +1 -1
  98. package/dist/src/commands/hooks.d.ts +2 -1
  99. package/dist/src/commands/hooks.d.ts.map +1 -1
  100. package/dist/src/commands/hooks.js +16 -9
  101. package/dist/src/commands/hooks.js.map +1 -1
  102. package/dist/src/commands/install-backend.d.ts.map +1 -1
  103. package/dist/src/commands/install-backend.js +19 -0
  104. package/dist/src/commands/install-backend.js.map +1 -1
  105. package/dist/src/commands/install.d.ts.map +1 -1
  106. package/dist/src/commands/install.js +50 -3
  107. package/dist/src/commands/install.js.map +1 -1
  108. package/dist/src/commands/plugin.d.ts +3 -0
  109. package/dist/src/commands/plugin.d.ts.map +1 -0
  110. package/dist/src/commands/plugin.js +137 -0
  111. package/dist/src/commands/plugin.js.map +1 -0
  112. package/dist/src/commands/search.d.ts.map +1 -1
  113. package/dist/src/commands/search.js +59 -6
  114. package/dist/src/commands/search.js.map +1 -1
  115. package/dist/src/commands/spec.d.ts.map +1 -1
  116. package/dist/src/commands/spec.js +15 -0
  117. package/dist/src/commands/spec.js.map +1 -1
  118. package/dist/src/commands/update.d.ts.map +1 -1
  119. package/dist/src/commands/update.js +23 -0
  120. package/dist/src/commands/update.js.map +1 -1
  121. package/dist/src/core/install-executor.d.ts +1 -1
  122. package/dist/src/core/install-executor.d.ts.map +1 -1
  123. package/dist/src/core/install-executor.js +27 -0
  124. package/dist/src/core/install-executor.js.map +1 -1
  125. package/dist/src/core/install-profile.d.ts +5 -0
  126. package/dist/src/core/install-profile.d.ts.map +1 -1
  127. package/dist/src/core/install-profile.js +8 -0
  128. package/dist/src/core/install-profile.js.map +1 -1
  129. package/dist/src/core/manifest.d.ts +5 -0
  130. package/dist/src/core/manifest.d.ts.map +1 -1
  131. package/dist/src/core/manifest.js.map +1 -1
  132. package/dist/src/core/plugin-bridge.d.ts +60 -0
  133. package/dist/src/core/plugin-bridge.d.ts.map +1 -0
  134. package/dist/src/core/plugin-bridge.js +355 -0
  135. package/dist/src/core/plugin-bridge.js.map +1 -0
  136. package/dist/src/hooks/kg-sync-hook.d.ts.map +1 -1
  137. package/dist/src/hooks/kg-sync-hook.js +5 -0
  138. package/dist/src/hooks/kg-sync-hook.js.map +1 -1
  139. package/dist/src/hooks/session-context.d.ts.map +1 -1
  140. package/dist/src/hooks/session-context.js +276 -3
  141. package/dist/src/hooks/session-context.js.map +1 -1
  142. package/dist/src/search/daemon-client.d.ts +8 -3
  143. package/dist/src/search/daemon-client.d.ts.map +1 -1
  144. package/dist/src/search/daemon-client.js +20 -0
  145. package/dist/src/search/daemon-client.js.map +1 -1
  146. package/dist/src/search/daemon.d.ts +3 -3
  147. package/dist/src/search/daemon.d.ts.map +1 -1
  148. package/dist/src/search/daemon.js +9 -3
  149. package/dist/src/search/daemon.js.map +1 -1
  150. package/dist/src/tui/install-ui/InstallFlow.d.ts.map +1 -1
  151. package/dist/src/tui/install-ui/InstallFlow.js +43 -14
  152. package/dist/src/tui/install-ui/InstallFlow.js.map +1 -1
  153. package/dist/src/tui/install-ui/types.d.ts +2 -0
  154. package/dist/src/tui/install-ui/types.d.ts.map +1 -1
  155. package/dist/src/tui/install-ui/types.js.map +1 -1
  156. package/dist/src/tui/install-ui/useInstallFlowState.d.ts.map +1 -1
  157. package/dist/src/tui/install-ui/useInstallFlowState.js +13 -1
  158. package/dist/src/tui/install-ui/useInstallFlowState.js.map +1 -1
  159. package/dist/src/utils/update-notices.js +11 -0
  160. package/dist/src/utils/update-notices.js.map +1 -1
  161. package/package.json +1 -1
  162. package/workflows/odyssey-base.md +258 -0
  163. package/workflows/shell-exec-protocol.md +30 -0
@@ -0,0 +1,355 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Plugin Bridge — register maestro assets as native Claude Code / Codex plugins
3
+ //
4
+ // Builds a local staging directory with the correct layout for each platform,
5
+ // generates marketplace/plugin manifest files, then calls the official CLI
6
+ // to register the marketplace and install the plugin.
7
+ // ---------------------------------------------------------------------------
8
+ import { join } from 'node:path';
9
+ import { existsSync, mkdirSync, readdirSync, statSync, copyFileSync, writeFileSync, readFileSync, rmSync, } from 'node:fs';
10
+ import { execFileSync } from 'node:child_process';
11
+ import { paths } from '../config/paths.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Constants
14
+ // ---------------------------------------------------------------------------
15
+ const BRIDGE_DIR = join(paths.home, 'plugin-bridge');
16
+ const CLAUDE_STAGING = join(BRIDGE_DIR, 'claude');
17
+ const CODEX_STAGING = join(BRIDGE_DIR, 'codex');
18
+ const STATE_FILE = join(BRIDGE_DIR, 'state.json');
19
+ const MARKETPLACE_NAME = 'maestro-flow-bridge';
20
+ const PLUGIN_NAME = 'maestro-flow';
21
+ // ---------------------------------------------------------------------------
22
+ // State persistence
23
+ // ---------------------------------------------------------------------------
24
+ export function loadState() {
25
+ if (!existsSync(STATE_FILE))
26
+ return {};
27
+ try {
28
+ return JSON.parse(readFileSync(STATE_FILE, 'utf-8'));
29
+ }
30
+ catch {
31
+ return {};
32
+ }
33
+ }
34
+ function saveState(state) {
35
+ mkdirSync(BRIDGE_DIR, { recursive: true });
36
+ writeFileSync(STATE_FILE, JSON.stringify(state, null, 2), 'utf-8');
37
+ }
38
+ // ---------------------------------------------------------------------------
39
+ // Recursive copy helper
40
+ // ---------------------------------------------------------------------------
41
+ function copyDirRecursive(src, dest) {
42
+ if (!existsSync(src))
43
+ return 0;
44
+ const st = statSync(src);
45
+ if (st.isFile()) {
46
+ const dir = join(dest, '..');
47
+ if (!existsSync(dir))
48
+ mkdirSync(dir, { recursive: true });
49
+ copyFileSync(src, dest);
50
+ return 1;
51
+ }
52
+ if (!existsSync(dest))
53
+ mkdirSync(dest, { recursive: true });
54
+ let count = 0;
55
+ for (const entry of readdirSync(src, { withFileTypes: true })) {
56
+ const srcPath = join(src, entry.name);
57
+ const destPath = join(dest, entry.name);
58
+ if (entry.isDirectory()) {
59
+ count += copyDirRecursive(srcPath, destPath);
60
+ }
61
+ else {
62
+ copyFileSync(srcPath, destPath);
63
+ count++;
64
+ }
65
+ }
66
+ return count;
67
+ }
68
+ // ---------------------------------------------------------------------------
69
+ // Scan helpers — count skills/agents/commands
70
+ // ---------------------------------------------------------------------------
71
+ function countSubdirs(dir) {
72
+ if (!existsSync(dir))
73
+ return 0;
74
+ return readdirSync(dir, { withFileTypes: true }).filter(e => e.isDirectory()).length;
75
+ }
76
+ function countFiles(dir, ext) {
77
+ if (!existsSync(dir))
78
+ return 0;
79
+ return readdirSync(dir, { withFileTypes: true })
80
+ .filter(e => e.isFile() && (!ext || e.name.endsWith(ext)))
81
+ .length;
82
+ }
83
+ // ---------------------------------------------------------------------------
84
+ // Build Claude staging
85
+ // ---------------------------------------------------------------------------
86
+ export function buildClaudeStaging(pkgRoot, version) {
87
+ const pluginDir = join(CLAUDE_STAGING, 'plugins', PLUGIN_NAME);
88
+ // Clean existing staging
89
+ if (existsSync(CLAUDE_STAGING)) {
90
+ rmSync(CLAUDE_STAGING, { recursive: true, force: true });
91
+ }
92
+ // Create directory structure
93
+ mkdirSync(join(CLAUDE_STAGING, '.claude-plugin'), { recursive: true });
94
+ mkdirSync(pluginDir, { recursive: true });
95
+ // Copy skills, agents, commands from package
96
+ const skillsSrc = join(pkgRoot, '.claude', 'skills');
97
+ const agentsSrc = join(pkgRoot, '.claude', 'agents');
98
+ const commandsSrc = join(pkgRoot, '.claude', 'commands');
99
+ const skillFiles = copyDirRecursive(skillsSrc, join(pluginDir, 'skills'));
100
+ const agentFiles = copyDirRecursive(agentsSrc, join(pluginDir, 'agents'));
101
+ const commandFiles = copyDirRecursive(commandsSrc, join(pluginDir, 'commands'));
102
+ const skillCount = countSubdirs(join(pluginDir, 'skills'));
103
+ const agentCount = countFiles(join(pluginDir, 'agents'), '.md');
104
+ const commandCount = countFiles(join(pluginDir, 'commands'), '.md');
105
+ // Generate plugin.json
106
+ writeFileSync(join(pluginDir, 'plugin.json'), JSON.stringify({
107
+ name: PLUGIN_NAME,
108
+ version,
109
+ description: 'Maestro Flow — workflow orchestration with MCP support',
110
+ author: { name: 'maestro-flow' },
111
+ category: 'productivity',
112
+ }, null, 2), 'utf-8');
113
+ // Generate marketplace.json
114
+ writeFileSync(join(CLAUDE_STAGING, '.claude-plugin', 'marketplace.json'), JSON.stringify({
115
+ $schema: 'https://anthropic.com/claude-code/marketplace.schema.json',
116
+ name: MARKETPLACE_NAME,
117
+ description: 'Local marketplace for Maestro Flow',
118
+ owner: { name: 'maestro-flow' },
119
+ plugins: [{
120
+ name: PLUGIN_NAME,
121
+ description: `Maestro Flow v${version} — ${skillCount} skills, ${agentCount} agents, ${commandCount} commands`,
122
+ source: `./plugins/${PLUGIN_NAME}`,
123
+ category: 'productivity',
124
+ }],
125
+ }, null, 2), 'utf-8');
126
+ return { skills: skillCount, agents: agentCount, commands: commandCount };
127
+ }
128
+ // ---------------------------------------------------------------------------
129
+ // Build Codex staging
130
+ // ---------------------------------------------------------------------------
131
+ export function buildCodexStaging(pkgRoot, version) {
132
+ const pluginDir = join(CODEX_STAGING, 'plugins', PLUGIN_NAME);
133
+ // Clean existing staging
134
+ if (existsSync(CODEX_STAGING)) {
135
+ rmSync(CODEX_STAGING, { recursive: true, force: true });
136
+ }
137
+ // Create directory structure
138
+ mkdirSync(join(CODEX_STAGING, '.agents', 'plugins'), { recursive: true });
139
+ mkdirSync(join(pluginDir, '.codex-plugin'), { recursive: true });
140
+ // Copy codex skills
141
+ const skillsSrc = join(pkgRoot, '.codex', 'skills');
142
+ const skillFiles = copyDirRecursive(skillsSrc, join(pluginDir, 'skills'));
143
+ const skillCount = countSubdirs(join(pluginDir, 'skills'));
144
+ // Generate .codex-plugin/plugin.json
145
+ writeFileSync(join(pluginDir, '.codex-plugin', 'plugin.json'), JSON.stringify({
146
+ name: PLUGIN_NAME,
147
+ version,
148
+ description: `Maestro Flow — ${skillCount} skills for Codex`,
149
+ author: { name: 'maestro-flow' },
150
+ skills: './skills/',
151
+ interface: {
152
+ displayName: 'Maestro Flow',
153
+ shortDescription: 'Workflow orchestration CLI with MCP support',
154
+ category: 'Productivity',
155
+ },
156
+ }, null, 2), 'utf-8');
157
+ // Generate marketplace.json
158
+ writeFileSync(join(CODEX_STAGING, '.agents', 'plugins', 'marketplace.json'), JSON.stringify({
159
+ name: MARKETPLACE_NAME,
160
+ interface: { displayName: 'Maestro Flow' },
161
+ plugins: [{
162
+ name: PLUGIN_NAME,
163
+ source: { source: 'local', path: `./plugins/${PLUGIN_NAME}` },
164
+ policy: { installation: 'AVAILABLE', authentication: 'ON_USE' },
165
+ category: 'Productivity',
166
+ }],
167
+ }, null, 2), 'utf-8');
168
+ return { skills: skillCount, agents: 0, commands: 0 };
169
+ }
170
+ function execCli(cmd, args) {
171
+ const isWin = process.platform === 'win32';
172
+ try {
173
+ const output = execFileSync(isWin ? 'cmd' : cmd, isWin ? ['/c', cmd, ...args] : args, { encoding: 'utf-8', timeout: 30_000, stdio: ['pipe', 'pipe', 'pipe'] });
174
+ return { success: true, output: output.trim() };
175
+ }
176
+ catch (err) {
177
+ const msg = err instanceof Error ? err.stderr || err.message : String(err);
178
+ return { success: false, output: typeof msg === 'string' ? msg.trim() : String(msg) };
179
+ }
180
+ }
181
+ function cliAvailable(cmd) {
182
+ const isWin = process.platform === 'win32';
183
+ try {
184
+ execFileSync(isWin ? 'cmd' : cmd, isWin ? ['/c', cmd, '--version'] : ['--version'], { encoding: 'utf-8', timeout: 10_000, stdio: ['pipe', 'pipe', 'pipe'] });
185
+ return true;
186
+ }
187
+ catch {
188
+ return false;
189
+ }
190
+ }
191
+ // ---------------------------------------------------------------------------
192
+ // Register / Unregister — Claude Code
193
+ // ---------------------------------------------------------------------------
194
+ export function registerClaudePlugin() {
195
+ // Add local marketplace
196
+ const addResult = execCli('claude', ['plugin', 'marketplace', 'add', CLAUDE_STAGING]);
197
+ if (!addResult.success)
198
+ return addResult;
199
+ // Install plugin from marketplace
200
+ const installResult = execCli('claude', ['plugin', 'install', `${PLUGIN_NAME}@${MARKETPLACE_NAME}`]);
201
+ return installResult;
202
+ }
203
+ export function unregisterClaudePlugin() {
204
+ // Uninstall plugin
205
+ execCli('claude', ['plugin', 'uninstall', PLUGIN_NAME]);
206
+ // Remove marketplace
207
+ const result = execCli('claude', ['plugin', 'marketplace', 'remove', MARKETPLACE_NAME]);
208
+ return result;
209
+ }
210
+ // ---------------------------------------------------------------------------
211
+ // Register / Unregister — Codex
212
+ // ---------------------------------------------------------------------------
213
+ export function registerCodexPlugin() {
214
+ // Add local marketplace
215
+ const addResult = execCli('codex', ['plugin', 'marketplace', 'add', CODEX_STAGING]);
216
+ if (!addResult.success)
217
+ return addResult;
218
+ // Install plugin from marketplace
219
+ const installResult = execCli('codex', ['plugin', 'add', `${PLUGIN_NAME}@${MARKETPLACE_NAME}`]);
220
+ return installResult;
221
+ }
222
+ export function unregisterCodexPlugin() {
223
+ // Remove plugin
224
+ execCli('codex', ['plugin', 'remove', PLUGIN_NAME]);
225
+ // Remove marketplace
226
+ const result = execCli('codex', ['plugin', 'marketplace', 'remove', MARKETPLACE_NAME]);
227
+ return result;
228
+ }
229
+ export function getClaudeStatus() {
230
+ if (!cliAvailable('claude')) {
231
+ return { cliAvailable: false, marketplaceRegistered: false, pluginInstalled: false, detail: 'CLI not found' };
232
+ }
233
+ const listResult = execCli('claude', ['plugin', 'list']);
234
+ const hasPlugin = listResult.success && listResult.output.includes(PLUGIN_NAME);
235
+ const mpResult = execCli('claude', ['plugin', 'marketplace', 'list']);
236
+ const hasMp = mpResult.success && mpResult.output.includes(MARKETPLACE_NAME);
237
+ return {
238
+ cliAvailable: true,
239
+ marketplaceRegistered: hasMp,
240
+ pluginInstalled: hasPlugin,
241
+ detail: hasPlugin ? 'installed' : (hasMp ? 'marketplace registered, plugin not installed' : 'not registered'),
242
+ };
243
+ }
244
+ export function getCodexStatus() {
245
+ if (!cliAvailable('codex')) {
246
+ return { cliAvailable: false, marketplaceRegistered: false, pluginInstalled: false, detail: 'CLI not found' };
247
+ }
248
+ const listResult = execCli('codex', ['plugin', 'list']);
249
+ const hasPlugin = listResult.success && listResult.output.includes(PLUGIN_NAME) && listResult.output.includes('installed');
250
+ const mpResult = execCli('codex', ['plugin', 'marketplace', 'list']);
251
+ const hasMp = mpResult.success && mpResult.output.includes(MARKETPLACE_NAME);
252
+ return {
253
+ cliAvailable: true,
254
+ marketplaceRegistered: hasMp,
255
+ pluginInstalled: hasPlugin,
256
+ detail: hasPlugin ? 'installed' : (hasMp ? 'marketplace registered, plugin not installed' : 'not registered'),
257
+ };
258
+ }
259
+ export function installPlugin(pkgRoot, version, opts) {
260
+ const doClaude = opts?.claude ?? true;
261
+ const doCodex = opts?.codex ?? true;
262
+ const result = {
263
+ claude: { success: false, detail: '', stats: { skills: 0, agents: 0, commands: 0 } },
264
+ codex: { success: false, detail: '', stats: { skills: 0, agents: 0, commands: 0 } },
265
+ };
266
+ const state = loadState();
267
+ if (doClaude) {
268
+ if (!cliAvailable('claude')) {
269
+ result.claude.detail = 'claude CLI not found — skipped';
270
+ }
271
+ else {
272
+ // Build staging
273
+ result.claude.stats = buildClaudeStaging(pkgRoot, version);
274
+ // Unregister first (idempotent)
275
+ unregisterClaudePlugin();
276
+ // Register
277
+ const reg = registerClaudePlugin();
278
+ result.claude.success = reg.success;
279
+ result.claude.detail = reg.success
280
+ ? `${result.claude.stats.skills} skills, ${result.claude.stats.agents} agents, ${result.claude.stats.commands} commands`
281
+ : reg.output;
282
+ if (reg.success) {
283
+ state.claude = {
284
+ installed: true,
285
+ version,
286
+ installedAt: new Date().toISOString(),
287
+ stagingDir: CLAUDE_STAGING,
288
+ };
289
+ }
290
+ }
291
+ }
292
+ if (doCodex) {
293
+ if (!cliAvailable('codex')) {
294
+ result.codex.detail = 'codex CLI not found — skipped';
295
+ }
296
+ else {
297
+ // Build staging
298
+ result.codex.stats = buildCodexStaging(pkgRoot, version);
299
+ // Unregister first (idempotent)
300
+ unregisterCodexPlugin();
301
+ // Register
302
+ const reg = registerCodexPlugin();
303
+ result.codex.success = reg.success;
304
+ result.codex.detail = reg.success
305
+ ? `${result.codex.stats.skills} skills`
306
+ : reg.output;
307
+ if (reg.success) {
308
+ state.codex = {
309
+ installed: true,
310
+ version,
311
+ installedAt: new Date().toISOString(),
312
+ stagingDir: CODEX_STAGING,
313
+ };
314
+ }
315
+ }
316
+ }
317
+ saveState(state);
318
+ return result;
319
+ }
320
+ export function uninstallPlugin(opts) {
321
+ const doClaude = opts?.claude ?? true;
322
+ const doCodex = opts?.codex ?? true;
323
+ const clean = opts?.cleanStaging ?? true;
324
+ const result = { claude: '', codex: '' };
325
+ const state = loadState();
326
+ if (doClaude) {
327
+ if (!cliAvailable('claude')) {
328
+ result.claude = 'claude CLI not found — skipped';
329
+ }
330
+ else {
331
+ const res = unregisterClaudePlugin();
332
+ result.claude = res.success ? 'uninstalled' : res.output;
333
+ if (clean && existsSync(CLAUDE_STAGING)) {
334
+ rmSync(CLAUDE_STAGING, { recursive: true, force: true });
335
+ }
336
+ delete state.claude;
337
+ }
338
+ }
339
+ if (doCodex) {
340
+ if (!cliAvailable('codex')) {
341
+ result.codex = 'codex CLI not found — skipped';
342
+ }
343
+ else {
344
+ const res = unregisterCodexPlugin();
345
+ result.codex = res.success ? 'uninstalled' : res.output;
346
+ if (clean && existsSync(CODEX_STAGING)) {
347
+ rmSync(CODEX_STAGING, { recursive: true, force: true });
348
+ }
349
+ delete state.codex;
350
+ }
351
+ }
352
+ saveState(state);
353
+ return result;
354
+ }
355
+ //# sourceMappingURL=plugin-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-bridge.js","sourceRoot":"","sources":["../../../../src/core/plugin-bridge.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,9 @@
5
5
  * Uses CooldownGuard for cross-process debouncing.
6
6
  */
7
7
  import { execSync } from 'node:child_process';
8
+ import { resolve } from 'node:path';
8
9
  import { kgSyncGuard } from '../utils/cooldown-guard.js';
10
+ import { invalidateSearchIndex } from '../search/daemon-client.js';
9
11
  const SOURCE_EXTENSIONS = new Set([
10
12
  '.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs', '.java',
11
13
  ]);
@@ -31,6 +33,9 @@ export async function evaluateKgSync(projectPath, sessionId) {
31
33
  const results = await mg.sync();
32
34
  const filesChanged = results.reduce((sum, r) => sum + r.nodesAdded + r.nodesRemoved, 0);
33
35
  kgSyncGuard.markDone(sessionId);
36
+ if (filesChanged > 0) {
37
+ invalidateSearchIndex(resolve(projectPath, '.workflow')).catch(() => { });
38
+ }
34
39
  return { synced: true, filesChanged, durationMs: Date.now() - start };
35
40
  }
36
41
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"kg-sync-hook.js","sourceRoot":"","sources":["../../../../src/hooks/kg-sync-hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kg-sync-hook.js","sourceRoot":"","sources":["../../../../src/hooks/kg-sync-hook.ts"],"names":[],"mappings":"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"}