@xdevops/issue-auto-finish 1.0.2 → 1.0.4

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 (135) hide show
  1. package/dist/KnowledgeAnalyzer-EZSJT2MJ.js +13 -0
  2. package/dist/KnowledgeAnalyzer-EZSJT2MJ.js.map +1 -0
  3. package/dist/KnowledgeStore-4ROC6F56.js +10 -0
  4. package/dist/KnowledgeStore-4ROC6F56.js.map +1 -0
  5. package/dist/ai-runner/AIRunner.d.ts +2 -0
  6. package/dist/ai-runner/AIRunner.d.ts.map +1 -1
  7. package/dist/ai-runner/BaseAIRunner.d.ts +9 -0
  8. package/dist/ai-runner/BaseAIRunner.d.ts.map +1 -1
  9. package/dist/ai-runner-RGAJPOOW.js +16 -0
  10. package/dist/ai-runner-RGAJPOOW.js.map +1 -0
  11. package/dist/analyze-ONQDTYCN.js +72 -0
  12. package/dist/analyze-ONQDTYCN.js.map +1 -0
  13. package/dist/chunk-3JUHZGX5.js +171 -0
  14. package/dist/chunk-3JUHZGX5.js.map +1 -0
  15. package/dist/chunk-5JYCGAU3.js +318 -0
  16. package/dist/chunk-5JYCGAU3.js.map +1 -0
  17. package/dist/chunk-5VUB3UUK.js +643 -0
  18. package/dist/chunk-5VUB3UUK.js.map +1 -0
  19. package/dist/{chunk-OWVT3Z34.js → chunk-JFYAXNNS.js} +121 -31
  20. package/dist/chunk-JFYAXNNS.js.map +1 -0
  21. package/dist/chunk-MH6LHFPB.js +188 -0
  22. package/dist/chunk-MH6LHFPB.js.map +1 -0
  23. package/dist/{chunk-TBIEB3JY.js → chunk-N5YK6YVI.js} +592 -767
  24. package/dist/chunk-N5YK6YVI.js.map +1 -0
  25. package/dist/{chunk-RIUI4ROA.js → chunk-PECYMYAK.js} +2 -2
  26. package/dist/{chunk-I3T573SU.js → chunk-PTIL5AY2.js} +65 -2
  27. package/dist/chunk-PTIL5AY2.js.map +1 -0
  28. package/dist/chunk-SWG2Y7YX.js +410 -0
  29. package/dist/chunk-SWG2Y7YX.js.map +1 -0
  30. package/dist/chunk-TZ6C7HL5.js +59 -0
  31. package/dist/chunk-TZ6C7HL5.js.map +1 -0
  32. package/dist/{chunk-IDUKWCC2.js → chunk-VFQYIC6L.js} +1151 -80
  33. package/dist/chunk-VFQYIC6L.js.map +1 -0
  34. package/dist/cli/commands/analyze.d.ts +8 -0
  35. package/dist/cli/commands/analyze.d.ts.map +1 -0
  36. package/dist/cli/commands/init.d.ts.map +1 -1
  37. package/dist/cli.js +67 -3
  38. package/dist/cli.js.map +1 -1
  39. package/dist/clients/GongfengClient.d.ts +5 -0
  40. package/dist/clients/GongfengClient.d.ts.map +1 -1
  41. package/dist/config-6GFBDMGD.js +7 -0
  42. package/dist/config-6GFBDMGD.js.map +1 -0
  43. package/dist/config.d.ts +19 -0
  44. package/dist/config.d.ts.map +1 -1
  45. package/dist/{doctor-B26Q6JWI.js → doctor-ZPGIBA5N.js} +3 -3
  46. package/dist/events/EventBus.d.ts +1 -1
  47. package/dist/events/EventBus.d.ts.map +1 -1
  48. package/dist/git/GitOperations.d.ts +12 -0
  49. package/dist/git/GitOperations.d.ts.map +1 -1
  50. package/dist/i18n/locales/en.d.ts.map +1 -1
  51. package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +11 -5
  54. package/dist/{init-L3VIWCOV.js → init-QDTII4SP.js} +10 -5
  55. package/dist/init-QDTII4SP.js.map +1 -0
  56. package/dist/knowledge/KnowledgeAnalyzer.d.ts +31 -0
  57. package/dist/knowledge/KnowledgeAnalyzer.d.ts.map +1 -0
  58. package/dist/knowledge/KnowledgeDefaults.d.ts +7 -0
  59. package/dist/knowledge/KnowledgeDefaults.d.ts.map +1 -0
  60. package/dist/knowledge/KnowledgeEntry.d.ts +30 -0
  61. package/dist/knowledge/KnowledgeEntry.d.ts.map +1 -0
  62. package/dist/knowledge/KnowledgeLoader.d.ts +18 -0
  63. package/dist/knowledge/KnowledgeLoader.d.ts.map +1 -0
  64. package/dist/knowledge/KnowledgeStore.d.ts +35 -0
  65. package/dist/knowledge/KnowledgeStore.d.ts.map +1 -0
  66. package/dist/knowledge/ProjectKnowledge.d.ts +79 -0
  67. package/dist/knowledge/ProjectKnowledge.d.ts.map +1 -0
  68. package/dist/knowledge/analyze-prompt.d.ts +2 -0
  69. package/dist/knowledge/analyze-prompt.d.ts.map +1 -0
  70. package/dist/knowledge/importers/GongfengExtractor.d.ts +27 -0
  71. package/dist/knowledge/importers/GongfengExtractor.d.ts.map +1 -0
  72. package/dist/knowledge/importers/IwikiImporter.d.ts +21 -0
  73. package/dist/knowledge/importers/IwikiImporter.d.ts.map +1 -0
  74. package/dist/knowledge/index.d.ts +12 -0
  75. package/dist/knowledge/index.d.ts.map +1 -0
  76. package/dist/lib.js +19 -10
  77. package/dist/orchestrator/PipelineOrchestrator.d.ts +5 -1
  78. package/dist/orchestrator/PipelineOrchestrator.d.ts.map +1 -1
  79. package/dist/phases/BasePhase.d.ts.map +1 -1
  80. package/dist/poller/IssuePoller.d.ts +5 -0
  81. package/dist/poller/IssuePoller.d.ts.map +1 -1
  82. package/dist/prompts/chat-templates.d.ts +4 -0
  83. package/dist/prompts/chat-templates.d.ts.map +1 -0
  84. package/dist/prompts/templates.d.ts +11 -0
  85. package/dist/prompts/templates.d.ts.map +1 -1
  86. package/dist/rules/RuleResolver.d.ts +4 -0
  87. package/dist/rules/RuleResolver.d.ts.map +1 -1
  88. package/dist/run.js +11 -5
  89. package/dist/run.js.map +1 -1
  90. package/dist/services/ChatService.d.ts +39 -0
  91. package/dist/services/ChatService.d.ts.map +1 -0
  92. package/dist/shutdown/ShutdownSignal.d.ts +3 -0
  93. package/dist/shutdown/ShutdownSignal.d.ts.map +1 -0
  94. package/dist/{start-TVN4SS6E.js → start-EDOZC5WL.js} +1 -1
  95. package/dist/tracker/IssueState.d.ts +1 -0
  96. package/dist/tracker/IssueState.d.ts.map +1 -1
  97. package/dist/tracker/IssueTracker.d.ts +2 -0
  98. package/dist/tracker/IssueTracker.d.ts.map +1 -1
  99. package/dist/updater/AutoUpdater.d.ts +33 -0
  100. package/dist/updater/AutoUpdater.d.ts.map +1 -0
  101. package/dist/updater/UpdateExecutor.d.ts +7 -0
  102. package/dist/updater/UpdateExecutor.d.ts.map +1 -0
  103. package/dist/updater/VersionChecker.d.ts +22 -0
  104. package/dist/updater/VersionChecker.d.ts.map +1 -0
  105. package/dist/web/WebServer.d.ts +4 -0
  106. package/dist/web/WebServer.d.ts.map +1 -1
  107. package/dist/web/routes/api.d.ts +4 -0
  108. package/dist/web/routes/api.d.ts.map +1 -1
  109. package/dist/web/routes/chat.d.ts +7 -0
  110. package/dist/web/routes/chat.d.ts.map +1 -0
  111. package/dist/web/routes/knowledge.d.ts +13 -0
  112. package/dist/web/routes/knowledge.d.ts.map +1 -0
  113. package/dist/web/routes/setup.d.ts.map +1 -1
  114. package/dist/webhook/CommandExecutor.d.ts +4 -0
  115. package/dist/webhook/CommandExecutor.d.ts.map +1 -1
  116. package/dist/webhook/CommandParser.d.ts +2 -2
  117. package/dist/webhook/CommandParser.d.ts.map +1 -1
  118. package/dist/webhook/WebhookHandler.d.ts +8 -0
  119. package/dist/webhook/WebhookHandler.d.ts.map +1 -1
  120. package/dist/webhook/WebhookServer.d.ts +2 -0
  121. package/dist/webhook/WebhookServer.d.ts.map +1 -1
  122. package/package.json +4 -2
  123. package/src/web/frontend/dist/assets/index-AcJ0lPIv.js +67 -0
  124. package/src/web/frontend/dist/assets/index-BbRt5BAr.css +1 -0
  125. package/src/web/frontend/dist/index.html +2 -2
  126. package/dist/chunk-I3T573SU.js.map +0 -1
  127. package/dist/chunk-IDUKWCC2.js.map +0 -1
  128. package/dist/chunk-OWVT3Z34.js.map +0 -1
  129. package/dist/chunk-TBIEB3JY.js.map +0 -1
  130. package/dist/init-L3VIWCOV.js.map +0 -1
  131. package/src/web/frontend/dist/assets/index-CQdlU9PE.js +0 -65
  132. package/src/web/frontend/dist/assets/index-CgMEkyZJ.css +0 -1
  133. /package/dist/{chunk-RIUI4ROA.js.map → chunk-PECYMYAK.js.map} +0 -0
  134. /package/dist/{doctor-B26Q6JWI.js.map → doctor-ZPGIBA5N.js.map} +0 -0
  135. /package/dist/{start-TVN4SS6E.js.map → start-EDOZC5WL.js.map} +0 -0
package/dist/cli.js CHANGED
@@ -23,17 +23,21 @@ var pkg = JSON.parse(readFileSync(findPackageJson(), "utf-8"));
23
23
  var program = new Command();
24
24
  program.name("issue-auto-finish").description("Issue Auto-Finish: AI-powered issue resolution daemon").version(pkg.version);
25
25
  program.command("init").description("Launch the interactive web setup wizard").option("-p, --port <port>", "Port for the setup wizard", "3456").option("-c, --config <path>", "Config file path to generate").action(async (opts) => {
26
- const { initCommand } = await import("./init-L3VIWCOV.js");
26
+ const { initCommand } = await import("./init-QDTII4SP.js");
27
27
  await initCommand({ port: parseInt(opts.port, 10), config: opts.config });
28
28
  });
29
29
  program.command("start").description("Start the issue-auto-finish daemon service").option("-c, --config <path>", "Path to .env config file").action(async (opts) => {
30
- const { startCommand } = await import("./start-TVN4SS6E.js");
30
+ const { startCommand } = await import("./start-EDOZC5WL.js");
31
31
  await startCommand({ config: opts.config });
32
32
  });
33
33
  program.command("doctor").description("Check environment dependencies").action(async () => {
34
- const { doctorCommand } = await import("./doctor-B26Q6JWI.js");
34
+ const { doctorCommand } = await import("./doctor-ZPGIBA5N.js");
35
35
  await doctorCommand();
36
36
  });
37
+ program.command("analyze").description("Analyze target repository and generate knowledge.json").option("-d, --dir <path>", "Project directory to analyze (defaults to PROJECT_WORK_DIR)").option("-o, --output <path>", "Output path for knowledge.json").option("-f, --force", "Overwrite existing knowledge.json").action(async (opts) => {
38
+ const { analyzeCommand } = await import("./analyze-ONQDTYCN.js");
39
+ await analyzeCommand({ dir: opts.dir, output: opts.output, force: opts.force });
40
+ });
37
41
  program.command("status").description("Show service status").option("-p, --port <port>", "Web UI port to query", "3000").action(async (opts) => {
38
42
  const port = parseInt(opts.port, 10);
39
43
  try {
@@ -69,5 +73,65 @@ function formatUptime(ms) {
69
73
  if (m > 0) return `${m}m ${s % 60}s`;
70
74
  return `${s}s`;
71
75
  }
76
+ program.command("update").description("Check for updates or trigger an update").option("--check", "Only check for a new version without updating").option("-p, --port <port>", "Web UI port to query", "3000").action(async (opts) => {
77
+ const port = parseInt(opts.port, 10);
78
+ const checkOnly = !!opts.check;
79
+ try {
80
+ if (checkOnly) {
81
+ const resp = await fetch(`http://localhost:${port}/api/system/update-check`, {
82
+ method: "POST",
83
+ signal: AbortSignal.timeout(2e4)
84
+ });
85
+ if (!resp.ok) {
86
+ const body = await resp.json();
87
+ console.error(` Check failed: ${body.error ?? resp.statusText}`);
88
+ process.exitCode = 1;
89
+ return;
90
+ }
91
+ const result = await resp.json();
92
+ console.log(`
93
+ Current version: ${result.currentVersion}`);
94
+ console.log(` Latest version: ${result.latestVersion}`);
95
+ console.log(` Update available: ${result.hasUpdate ? "Yes" : "No"}
96
+ `);
97
+ } else {
98
+ const checkResp = await fetch(`http://localhost:${port}/api/system/update-check`, {
99
+ method: "POST",
100
+ signal: AbortSignal.timeout(2e4)
101
+ });
102
+ if (!checkResp.ok) {
103
+ const body = await checkResp.json();
104
+ console.error(` Check failed: ${body.error ?? checkResp.statusText}`);
105
+ process.exitCode = 1;
106
+ return;
107
+ }
108
+ const result = await checkResp.json();
109
+ if (!result.hasUpdate) {
110
+ console.log(`
111
+ Already up to date (v${result.currentVersion})
112
+ `);
113
+ return;
114
+ }
115
+ console.log(`
116
+ Updating from v${result.currentVersion} to v${result.latestVersion}...`);
117
+ const updateResp = await fetch(`http://localhost:${port}/api/system/update`, {
118
+ method: "POST",
119
+ signal: AbortSignal.timeout(1e4)
120
+ });
121
+ if (!updateResp.ok) {
122
+ const body = await updateResp.json();
123
+ console.error(` Update trigger failed: ${body.error ?? updateResp.statusText}`);
124
+ process.exitCode = 1;
125
+ return;
126
+ }
127
+ console.log(" Update triggered. The service will restart automatically via PM2.\n");
128
+ }
129
+ } catch {
130
+ console.error(`
131
+ Cannot connect to service at localhost:${port}.`);
132
+ console.error(" Is the service running? Start with: issue-auto-finish start\n");
133
+ process.exitCode = 1;
134
+ }
135
+ });
72
136
  program.parse();
73
137
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport path from 'node:path';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nfunction findPackageJson(): string {\n for (let dir = __dirname; dir !== path.dirname(dir); dir = path.dirname(dir)) {\n const candidate = path.join(dir, 'package.json');\n if (existsSync(candidate)) {\n try {\n const content = JSON.parse(readFileSync(candidate, 'utf-8'));\n if (content.name === 'issue-auto-finish') return candidate;\n } catch { /* skip */ }\n }\n }\n return path.resolve(__dirname, '../package.json');\n}\n\nconst pkg = JSON.parse(readFileSync(findPackageJson(), 'utf-8'));\n\nconst program = new Command();\n\nprogram\n .name('issue-auto-finish')\n .description('Issue Auto-Finish: AI-powered issue resolution daemon')\n .version(pkg.version);\n\nprogram\n .command('init')\n .description('Launch the interactive web setup wizard')\n .option('-p, --port <port>', 'Port for the setup wizard', '3456')\n .option('-c, --config <path>', 'Config file path to generate')\n .action(async (opts) => {\n const { initCommand } = await import('./commands/init.js');\n await initCommand({ port: parseInt(opts.port, 10), config: opts.config });\n });\n\nprogram\n .command('start')\n .description('Start the issue-auto-finish daemon service')\n .option('-c, --config <path>', 'Path to .env config file')\n .action(async (opts) => {\n const { startCommand } = await import('./commands/start.js');\n await startCommand({ config: opts.config });\n });\n\nprogram\n .command('doctor')\n .description('Check environment dependencies')\n .action(async () => {\n const { doctorCommand } = await import('./commands/doctor.js');\n await doctorCommand();\n });\n\nprogram\n .command('status')\n .description('Show service status')\n .option('-p, --port <port>', 'Web UI port to query', '3000')\n .action(async (opts) => {\n const port = parseInt(opts.port, 10);\n try {\n const resp = await fetch(`http://localhost:${port}/api/system/status`, {\n signal: AbortSignal.timeout(5000),\n });\n if (!resp.ok) {\n console.error(` Service returned HTTP ${resp.status}`);\n process.exitCode = 1;\n return;\n }\n const status = await resp.json() as Record<string, unknown>;\n console.log('\\n Issue Auto-Finish Status\\n');\n const cfg = status.config as Record<string, unknown> | undefined;\n const issues = status.issues as Record<string, unknown> | undefined;\n console.log(` Uptime: ${formatUptime(status.uptime as number)}`);\n console.log(` AI Mode: ${cfg?.aiMode ?? 'unknown'}`);\n console.log(` Pipeline: ${cfg?.pipelineMode ?? 'unknown'}`);\n console.log(` Issues: ${issues?.total ?? 0} total, ${issues?.active ?? 0} active`);\n console.log('');\n } catch {\n console.error(`\\n Cannot connect to service at localhost:${port}.`);\n console.error(' Is the service running? Start with: issue-auto-finish start\\n');\n process.exitCode = 1;\n }\n });\n\nfunction formatUptime(ms: number): string {\n const s = Math.floor(ms / 1000);\n const h = Math.floor(s / 3600);\n const m = Math.floor((s % 3600) / 60);\n if (h > 0) return `${h}h ${m}m`;\n if (m > 0) return `${m}m ${s % 60}s`;\n return `${s}s`;\n}\n\nprogram.parse();\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport path from 'node:path';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nfunction findPackageJson(): string {\n for (let dir = __dirname; dir !== path.dirname(dir); dir = path.dirname(dir)) {\n const candidate = path.join(dir, 'package.json');\n if (existsSync(candidate)) {\n try {\n const content = JSON.parse(readFileSync(candidate, 'utf-8'));\n if (content.name === 'issue-auto-finish') return candidate;\n } catch { /* skip */ }\n }\n }\n return path.resolve(__dirname, '../package.json');\n}\n\nconst pkg = JSON.parse(readFileSync(findPackageJson(), 'utf-8'));\n\nconst program = new Command();\n\nprogram\n .name('issue-auto-finish')\n .description('Issue Auto-Finish: AI-powered issue resolution daemon')\n .version(pkg.version);\n\nprogram\n .command('init')\n .description('Launch the interactive web setup wizard')\n .option('-p, --port <port>', 'Port for the setup wizard', '3456')\n .option('-c, --config <path>', 'Config file path to generate')\n .action(async (opts) => {\n const { initCommand } = await import('./commands/init.js');\n await initCommand({ port: parseInt(opts.port, 10), config: opts.config });\n });\n\nprogram\n .command('start')\n .description('Start the issue-auto-finish daemon service')\n .option('-c, --config <path>', 'Path to .env config file')\n .action(async (opts) => {\n const { startCommand } = await import('./commands/start.js');\n await startCommand({ config: opts.config });\n });\n\nprogram\n .command('doctor')\n .description('Check environment dependencies')\n .action(async () => {\n const { doctorCommand } = await import('./commands/doctor.js');\n await doctorCommand();\n });\n\nprogram\n .command('analyze')\n .description('Analyze target repository and generate knowledge.json')\n .option('-d, --dir <path>', 'Project directory to analyze (defaults to PROJECT_WORK_DIR)')\n .option('-o, --output <path>', 'Output path for knowledge.json')\n .option('-f, --force', 'Overwrite existing knowledge.json')\n .action(async (opts) => {\n const { analyzeCommand } = await import('./commands/analyze.js');\n await analyzeCommand({ dir: opts.dir, output: opts.output, force: opts.force });\n });\n\nprogram\n .command('status')\n .description('Show service status')\n .option('-p, --port <port>', 'Web UI port to query', '3000')\n .action(async (opts) => {\n const port = parseInt(opts.port, 10);\n try {\n const resp = await fetch(`http://localhost:${port}/api/system/status`, {\n signal: AbortSignal.timeout(5000),\n });\n if (!resp.ok) {\n console.error(` Service returned HTTP ${resp.status}`);\n process.exitCode = 1;\n return;\n }\n const status = await resp.json() as Record<string, unknown>;\n console.log('\\n Issue Auto-Finish Status\\n');\n const cfg = status.config as Record<string, unknown> | undefined;\n const issues = status.issues as Record<string, unknown> | undefined;\n console.log(` Uptime: ${formatUptime(status.uptime as number)}`);\n console.log(` AI Mode: ${cfg?.aiMode ?? 'unknown'}`);\n console.log(` Pipeline: ${cfg?.pipelineMode ?? 'unknown'}`);\n console.log(` Issues: ${issues?.total ?? 0} total, ${issues?.active ?? 0} active`);\n console.log('');\n } catch {\n console.error(`\\n Cannot connect to service at localhost:${port}.`);\n console.error(' Is the service running? Start with: issue-auto-finish start\\n');\n process.exitCode = 1;\n }\n });\n\nfunction formatUptime(ms: number): string {\n const s = Math.floor(ms / 1000);\n const h = Math.floor(s / 3600);\n const m = Math.floor((s % 3600) / 60);\n if (h > 0) return `${h}h ${m}m`;\n if (m > 0) return `${m}m ${s % 60}s`;\n return `${s}s`;\n}\n\nprogram\n .command('update')\n .description('Check for updates or trigger an update')\n .option('--check', 'Only check for a new version without updating')\n .option('-p, --port <port>', 'Web UI port to query', '3000')\n .action(async (opts) => {\n const port = parseInt(opts.port, 10);\n const checkOnly = !!opts.check;\n\n try {\n if (checkOnly) {\n const resp = await fetch(`http://localhost:${port}/api/system/update-check`, {\n method: 'POST',\n signal: AbortSignal.timeout(20_000),\n });\n if (!resp.ok) {\n const body = await resp.json() as { error?: string };\n console.error(` Check failed: ${body.error ?? resp.statusText}`);\n process.exitCode = 1;\n return;\n }\n const result = await resp.json() as { currentVersion: string; latestVersion: string; hasUpdate: boolean };\n console.log(`\\n Current version: ${result.currentVersion}`);\n console.log(` Latest version: ${result.latestVersion}`);\n console.log(` Update available: ${result.hasUpdate ? 'Yes' : 'No'}\\n`);\n } else {\n // First check\n const checkResp = await fetch(`http://localhost:${port}/api/system/update-check`, {\n method: 'POST',\n signal: AbortSignal.timeout(20_000),\n });\n if (!checkResp.ok) {\n const body = await checkResp.json() as { error?: string };\n console.error(` Check failed: ${body.error ?? checkResp.statusText}`);\n process.exitCode = 1;\n return;\n }\n const result = await checkResp.json() as { currentVersion: string; latestVersion: string; hasUpdate: boolean };\n if (!result.hasUpdate) {\n console.log(`\\n Already up to date (v${result.currentVersion})\\n`);\n return;\n }\n\n console.log(`\\n Updating from v${result.currentVersion} to v${result.latestVersion}...`);\n const updateResp = await fetch(`http://localhost:${port}/api/system/update`, {\n method: 'POST',\n signal: AbortSignal.timeout(10_000),\n });\n if (!updateResp.ok) {\n const body = await updateResp.json() as { error?: string };\n console.error(` Update trigger failed: ${body.error ?? updateResp.statusText}`);\n process.exitCode = 1;\n return;\n }\n console.log(' Update triggered. The service will restart automatically via PM2.\\n');\n }\n } catch {\n console.error(`\\n Cannot connect to service at localhost:${port}.`);\n console.error(' Is the service running? Start with: issue-auto-finish start\\n');\n process.exitCode = 1;\n }\n });\n\nprogram.parse();\n"],"mappings":"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","names":[]}
@@ -32,6 +32,10 @@ export interface GongfengMergeRequest {
32
32
  source_branch?: string;
33
33
  target_branch?: string;
34
34
  }
35
+ export interface GongfengMergeRequestDetail extends GongfengMergeRequest {
36
+ has_conflicts: boolean;
37
+ merge_status: string;
38
+ }
35
39
  export interface UploadResult {
36
40
  alt: string;
37
41
  url: string;
@@ -81,6 +85,7 @@ export declare class GongfengClient {
81
85
  listIssueNotes(issueId: number): Promise<GongfengNote[]>;
82
86
  deleteIssueNote(issueId: number, noteId: number): Promise<void>;
83
87
  cleanupAgentNotes(issueId: number): Promise<number>;
88
+ getMergeRequestDetail(mrIid: number): Promise<GongfengMergeRequestDetail>;
84
89
  addLabel(issueId: number, label: string): Promise<void>;
85
90
  }
86
91
  //# sourceMappingURL=GongfengClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GongfengClient.d.ts","sourceRoot":"","sources":["../../src/clients/GongfengClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GongfengClient.d.ts","sourceRoot":"","sources":["../../src/clients/GongfengClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import {
2
+ loadConfig
3
+ } from "./chunk-MH6LHFPB.js";
4
+ export {
5
+ loadConfig
6
+ };
7
+ //# sourceMappingURL=config-6GFBDMGD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/config.d.ts CHANGED
@@ -79,7 +79,25 @@ export interface Config {
79
79
  generator: BrainstormAgentConfig;
80
80
  reviewer: BrainstormAgentConfig;
81
81
  };
82
+ chat: {
83
+ enabled: boolean;
84
+ timeoutMs: number;
85
+ maxSessionMessages: number;
86
+ agent: ChatAgentConfig;
87
+ };
88
+ autoUpdate: {
89
+ enabled: boolean;
90
+ intervalMs: number;
91
+ registry: string;
92
+ drainTimeoutMs: number;
93
+ };
94
+ iwiki?: {
95
+ authCookie?: string;
96
+ authToken?: string;
97
+ baseUrl?: string;
98
+ };
82
99
  locale: 'zh-CN' | 'en';
100
+ knowledgePath?: string;
83
101
  }
84
102
  export type AIRunnerMode = 'claude-internal' | 'cursor-agent' | 'codebuddy';
85
103
  export interface BrainstormAgentConfig {
@@ -88,5 +106,6 @@ export interface BrainstormAgentConfig {
88
106
  nvmNodeVersion: string;
89
107
  model?: string;
90
108
  }
109
+ export type ChatAgentConfig = BrainstormAgentConfig;
91
110
  export declare function loadConfig(): Config;
92
111
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  DependencyChecker
3
- } from "./chunk-RIUI4ROA.js";
4
- import "./chunk-OWVT3Z34.js";
3
+ } from "./chunk-PECYMYAK.js";
4
+ import "./chunk-JFYAXNNS.js";
5
5
 
6
6
  // src/cli/commands/doctor.ts
7
7
  async function doctorCommand() {
@@ -30,4 +30,4 @@ async function doctorCommand() {
30
30
  export {
31
31
  doctorCommand
32
32
  };
33
- //# sourceMappingURL=doctor-B26Q6JWI.js.map
33
+ //# sourceMappingURL=doctor-ZPGIBA5N.js.map
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from 'node:events';
2
- export type EventType = 'issue:created' | 'issue:stateChanged' | 'issue:failed' | 'issue:deleted' | 'issue:resetForRetry' | 'issue:restarted' | 'issue:retryFromPhase' | 'poll:tick' | 'heartbeat' | 'agent:output' | 'pipeline:progress' | 'review:requested' | 'review:approved' | 'review:rejected';
2
+ export type EventType = 'issue:created' | 'issue:stateChanged' | 'issue:failed' | 'issue:deleted' | 'issue:resetForRetry' | 'issue:restarted' | 'issue:retryFromPhase' | 'poll:tick' | 'heartbeat' | 'agent:output' | 'pipeline:progress' | 'review:requested' | 'review:approved' | 'review:rejected' | 'conflict:started' | 'conflict:resolved' | 'conflict:failed' | 'update:checking' | 'update:available' | 'update:downloading' | 'update:completed' | 'update:failed';
3
3
  export interface EventPayload {
4
4
  type: EventType;
5
5
  data: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"EventBus.d.ts","sourceRoot":"","sources":["../../src/events/EventBus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,SAAS,GACjB,eAAe,GACf,oBAAoB,GACpB,cAAc,GACd,eAAe,GACf,qBAAqB,GACrB,iBAAiB,GACjB,sBAAsB,GACtB,WAAW,GACX,WAAW,GACX,cAAc,GACd,mBAAmB,GACnB,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,cAAM,YAAa,SAAQ,YAAY;IACrC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO;IAKzD,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;CAQhD;AAED,eAAO,MAAM,QAAQ,cAAqB,CAAC"}
1
+ {"version":3,"file":"EventBus.d.ts","sourceRoot":"","sources":["../../src/events/EventBus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,SAAS,GACjB,eAAe,GACf,oBAAoB,GACpB,cAAc,GACd,eAAe,GACf,qBAAqB,GACrB,iBAAiB,GACjB,sBAAsB,GACtB,WAAW,GACX,WAAW,GACX,cAAc,GACd,mBAAmB,GACnB,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GACpB,kBAAkB,GAClB,eAAe,CAAC;AAEpB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,cAAM,YAAa,SAAQ,YAAY;IACrC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO;IAKzD,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;CAQhD;AAED,eAAO,MAAM,QAAQ,cAAqB,CAAC"}
@@ -26,5 +26,17 @@ export declare class GitOperations {
26
26
  worktreeRemove(dir: string, force?: boolean): Promise<void>;
27
27
  worktreeList(): Promise<string[]>;
28
28
  showFile(ref: string, filePath: string): Promise<string | null>;
29
+ getConflictFiles(): Promise<string[]>;
30
+ rebase(targetRef: string): Promise<{
31
+ success: boolean;
32
+ conflictFiles: string[];
33
+ }>;
34
+ rebaseContinue(): Promise<{
35
+ done: boolean;
36
+ conflictFiles: string[];
37
+ }>;
38
+ rebaseAbort(): Promise<void>;
39
+ isRebaseInProgress(): Promise<boolean>;
40
+ forcePush(branch: string): Promise<void>;
29
41
  }
30
42
  //# sourceMappingURL=GitOperations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GitOperations.d.ts","sourceRoot":"","sources":["../../src/git/GitOperations.ts"],"names":[],"mappings":"AAOA,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;YAIb,IAAI;IAUZ,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASlD,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAK9B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjF,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9E,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQjC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAOtE"}
1
+ {"version":3,"file":"GitOperations.d.ts","sourceRoot":"","sources":["../../src/git/GitOperations.ts"],"names":[],"mappings":"AAOA,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;YAIb,IAAI;IAUZ,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASlD,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAK9B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjF,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9E,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQjC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQ/D,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAMrC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAcjF,cAAc,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAcrE,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAKtC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwYrC,CAAC"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwbrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"zh-CN.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/zh-CN.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwYvC,CAAC"}
1
+ {"version":3,"file":"zh-CN.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/zh-CN.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwbvC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA6D1C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuBA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA0G1C"}
package/dist/index.js CHANGED
@@ -1,11 +1,17 @@
1
1
  import {
2
2
  main
3
- } from "./chunk-IDUKWCC2.js";
4
- import "./chunk-TBIEB3JY.js";
5
- import "./chunk-I3T573SU.js";
3
+ } from "./chunk-VFQYIC6L.js";
4
+ import "./chunk-PTIL5AY2.js";
6
5
  import "./chunk-HCHEFK4Z.js";
7
- import "./chunk-RIUI4ROA.js";
8
- import "./chunk-OWVT3Z34.js";
6
+ import "./chunk-PECYMYAK.js";
7
+ import "./chunk-N5YK6YVI.js";
8
+ import "./chunk-3JUHZGX5.js";
9
+ import "./chunk-JFYAXNNS.js";
10
+ import "./chunk-5VUB3UUK.js";
11
+ import "./chunk-5JYCGAU3.js";
12
+ import "./chunk-MH6LHFPB.js";
13
+ import "./chunk-SWG2Y7YX.js";
14
+ import "./chunk-TZ6C7HL5.js";
9
15
  export {
10
16
  main
11
17
  };
@@ -1,9 +1,13 @@
1
1
  import {
2
2
  createSetupRouter
3
- } from "./chunk-I3T573SU.js";
3
+ } from "./chunk-PTIL5AY2.js";
4
4
  import "./chunk-HCHEFK4Z.js";
5
- import "./chunk-RIUI4ROA.js";
6
- import "./chunk-OWVT3Z34.js";
5
+ import "./chunk-PECYMYAK.js";
6
+ import "./chunk-3JUHZGX5.js";
7
+ import "./chunk-JFYAXNNS.js";
8
+ import "./chunk-5VUB3UUK.js";
9
+ import "./chunk-5JYCGAU3.js";
10
+ import "./chunk-TZ6C7HL5.js";
7
11
 
8
12
  // src/cli/commands/init.ts
9
13
  import express from "express";
@@ -28,7 +32,8 @@ async function initCommand(options) {
28
32
  }
29
33
  });
30
34
  app.use(setupRouter);
31
- const publicDir = path.resolve(process.cwd(), "src/web/frontend/dist");
35
+ const packageRoot = path.resolve(__dirname, "..");
36
+ const publicDir = path.resolve(packageRoot, "src/web/frontend/dist");
32
37
  if (fs.existsSync(publicDir)) {
33
38
  app.use(express.static(publicDir));
34
39
  app.get("{*path}", (_req, res) => {
@@ -62,4 +67,4 @@ async function initCommand(options) {
62
67
  export {
63
68
  initCommand
64
69
  };
65
- //# sourceMappingURL=init-L3VIWCOV.js.map
70
+ //# sourceMappingURL=init-QDTII4SP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/init.ts"],"sourcesContent":["import express from 'express';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createSetupRouter } from '../../web/routes/setup.js';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport interface InitOptions {\n port: number;\n config?: string;\n}\n\nexport async function initCommand(options: InitOptions): Promise<void> {\n const app = express();\n app.use(express.json());\n\n let serverRef: ReturnType<typeof app.listen> | null = null;\n\n const setupRouter = createSetupRouter({\n configPath: options.config,\n onComplete: (configPath) => {\n console.log(`\\n Configuration saved to: ${configPath}`);\n console.log(' Run \"issue-auto-finish start\" to start the service.\\n');\n setTimeout(() => {\n serverRef?.close();\n process.exit(0);\n }, 1000);\n },\n });\n\n app.use(setupRouter);\n\n const packageRoot = path.resolve(__dirname, '..');\n const publicDir = path.resolve(packageRoot, 'src/web/frontend/dist');\n\n if (fs.existsSync(publicDir)) {\n app.use(express.static(publicDir));\n app.get('{*path}', (_req, res) => {\n res.sendFile(path.join(publicDir, 'index.html'));\n });\n } else {\n app.get('/', (_req, res) => {\n res.type('html').send(`<!DOCTYPE html>\n<html><head><title>Issue Auto-Finish Setup</title></head>\n<body style=\"font-family:system-ui;max-width:600px;margin:60px auto;padding:20px\">\n<h1>Issue Auto-Finish Setup</h1>\n<p>Frontend assets not found. Please build the frontend first:</p>\n<pre>cd issue-auto-finish && pnpm web:build</pre>\n<p>Or use the API directly at <code>/api/setup/*</code></p>\n</body></html>`);\n });\n }\n\n serverRef = app.listen(options.port, async () => {\n const url = `http://localhost:${options.port}`;\n console.log(`\\n Issue Auto-Finish Setup Wizard`);\n console.log(` Open: ${url}\\n`);\n\n try {\n const open = (await import('open')).default;\n await open(url);\n } catch {\n // Browser open failed, user can manually navigate\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;AAAA,OAAO,aAAa;AACpB,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAG9B,IAAM,YAAY,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAO7D,eAAsB,YAAY,SAAqC;AACrE,QAAM,MAAM,QAAQ;AACpB,MAAI,IAAI,QAAQ,KAAK,CAAC;AAEtB,MAAI,YAAkD;AAEtD,QAAM,cAAc,kBAAkB;AAAA,IACpC,YAAY,QAAQ;AAAA,IACpB,YAAY,CAAC,eAAe;AAC1B,cAAQ,IAAI;AAAA,4BAA+B,UAAU,EAAE;AACvD,cAAQ,IAAI,yDAAyD;AACrE,iBAAW,MAAM;AACf,mBAAW,MAAM;AACjB,gBAAQ,KAAK,CAAC;AAAA,MAChB,GAAG,GAAI;AAAA,IACT;AAAA,EACF,CAAC;AAED,MAAI,IAAI,WAAW;AAEnB,QAAM,cAAc,KAAK,QAAQ,WAAW,IAAI;AAChD,QAAM,YAAY,KAAK,QAAQ,aAAa,uBAAuB;AAEnE,MAAI,GAAG,WAAW,SAAS,GAAG;AAC5B,QAAI,IAAI,QAAQ,OAAO,SAAS,CAAC;AACjC,QAAI,IAAI,WAAW,CAAC,MAAM,QAAQ;AAChC,UAAI,SAAS,KAAK,KAAK,WAAW,YAAY,CAAC;AAAA,IACjD,CAAC;AAAA,EACH,OAAO;AACL,QAAI,IAAI,KAAK,CAAC,MAAM,QAAQ;AAC1B,UAAI,KAAK,MAAM,EAAE,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOb;AAAA,IACX,CAAC;AAAA,EACH;AAEA,cAAY,IAAI,OAAO,QAAQ,MAAM,YAAY;AAC/C,UAAM,MAAM,oBAAoB,QAAQ,IAAI;AAC5C,YAAQ,IAAI;AAAA,iCAAoC;AAChD,YAAQ,IAAI,WAAW,GAAG;AAAA,CAAI;AAE9B,QAAI;AACF,YAAM,QAAQ,MAAM,OAAO,MAAM,GAAG;AACpC,YAAM,KAAK,GAAG;AAAA,IAChB,QAAQ;AAAA,IAER;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1,31 @@
1
+ import type { AIRunner } from '../ai-runner/index.js';
2
+ import type { ProjectKnowledge } from './ProjectKnowledge.js';
3
+ import type { KnowledgeStore } from './KnowledgeStore.js';
4
+ export interface AnalyzeOptions {
5
+ workDir: string;
6
+ aiRunner: AIRunner;
7
+ timeoutMs?: number;
8
+ outputPath?: string;
9
+ }
10
+ export interface IncrementalAnalyzeOptions {
11
+ workDir: string;
12
+ aiRunner: AIRunner;
13
+ store: KnowledgeStore;
14
+ timeoutMs?: number;
15
+ }
16
+ /**
17
+ * Collect static project info (no AI needed).
18
+ */
19
+ export declare function collectStaticInfo(workDir: string): Promise<string>;
20
+ /**
21
+ * Analyze a project with AI and generate knowledge.json.
22
+ */
23
+ export declare function analyze(options: AnalyzeOptions): Promise<ProjectKnowledge>;
24
+ /**
25
+ * Incremental analysis: detect changes since last analysis and update project-meta.
26
+ */
27
+ export declare function analyzeIncremental(options: IncrementalAnalyzeOptions): Promise<{
28
+ knowledge: ProjectKnowledge;
29
+ changedFiles: string[];
30
+ } | null>;
31
+ //# sourceMappingURL=KnowledgeAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeAnalyzer.d.ts","sourceRoot":"","sources":["../../src/knowledge/KnowledgeAnalyzer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAM1D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuBD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqPxE;AAqCD;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuChF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC;IAAE,SAAS,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CAmEzE"}
@@ -0,0 +1,7 @@
1
+ import type { ProjectKnowledge } from './ProjectKnowledge.js';
2
+ /**
3
+ * Default knowledge matching current hardcoded behavior.
4
+ * Used as fallback when knowledge.json does not exist.
5
+ */
6
+ export declare const KNOWLEDGE_DEFAULTS: ProjectKnowledge;
7
+ //# sourceMappingURL=KnowledgeDefaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeDefaults.d.ts","sourceRoot":"","sources":["../../src/knowledge/KnowledgeDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAoFhC,CAAC"}
@@ -0,0 +1,30 @@
1
+ export type KnowledgeEntryType = 'project-meta' | 'custom' | 'iwiki' | 'gongfeng';
2
+ export interface KnowledgeEntrySource {
3
+ url?: string;
4
+ kind?: 'iwiki-page' | 'gongfeng-issue' | 'gongfeng-mr';
5
+ syncEnabled?: boolean;
6
+ lastSyncAt?: string;
7
+ }
8
+ export interface KnowledgeEntryMeta {
9
+ id: string;
10
+ type: KnowledgeEntryType;
11
+ title: string;
12
+ tags: string[];
13
+ source?: KnowledgeEntrySource;
14
+ createdAt: string;
15
+ updatedAt: string;
16
+ }
17
+ export interface KnowledgeEntry extends KnowledgeEntryMeta {
18
+ content: string;
19
+ }
20
+ export interface KnowledgeIndex {
21
+ version: 1;
22
+ lastAnalyzedAt?: string;
23
+ entries: KnowledgeEntryMeta[];
24
+ }
25
+ export interface KnowledgeStats {
26
+ total: number;
27
+ byType: Record<KnowledgeEntryType, number>;
28
+ lastAnalyzedAt?: string;
29
+ }
30
+ //# sourceMappingURL=KnowledgeEntry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeEntry.d.ts","sourceRoot":"","sources":["../../src/knowledge/KnowledgeEntry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAElF,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,YAAY,GAAG,gBAAgB,GAAG,aAAa,CAAC;IACvD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,CAAC;IACX,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,18 @@
1
+ import type { ProjectKnowledge } from './ProjectKnowledge.js';
2
+ /**
3
+ * Load knowledge from knowledge.json, merging with defaults for any missing fields.
4
+ */
5
+ export declare function loadKnowledge(explicitPath?: string): ProjectKnowledge | null;
6
+ /**
7
+ * Get cached knowledge (or null if not loaded or file not found).
8
+ */
9
+ export declare function getProjectKnowledge(): ProjectKnowledge | null;
10
+ /**
11
+ * Clear cache and reload.
12
+ */
13
+ export declare function reloadKnowledge(explicitPath?: string): ProjectKnowledge | null;
14
+ /**
15
+ * Reset the cache (for testing).
16
+ */
17
+ export declare function resetKnowledgeCache(): void;
18
+ //# sourceMappingURL=KnowledgeLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeLoader.d.ts","sourceRoot":"","sources":["../../src/knowledge/KnowledgeLoader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAkD9D;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CA0B5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAK7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAG9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
@@ -0,0 +1,35 @@
1
+ import type { KnowledgeEntry, KnowledgeEntryMeta, KnowledgeEntryType, KnowledgeStats } from './KnowledgeEntry.js';
2
+ import type { ProjectKnowledge } from './ProjectKnowledge.js';
3
+ export declare class KnowledgeStore {
4
+ private dataDir;
5
+ private indexPath;
6
+ private entriesDir;
7
+ private index;
8
+ constructor(dataDir: string);
9
+ list(type?: KnowledgeEntryType): KnowledgeEntryMeta[];
10
+ get(id: string): KnowledgeEntry | null;
11
+ create(input: {
12
+ type: KnowledgeEntryType;
13
+ title: string;
14
+ content: string;
15
+ tags?: string[];
16
+ source?: KnowledgeEntry['source'];
17
+ }): KnowledgeEntry;
18
+ update(id: string, patch: Partial<Pick<KnowledgeEntry, 'title' | 'content' | 'tags' | 'source'>>): KnowledgeEntry | null;
19
+ delete(id: string): boolean;
20
+ search(query: string): KnowledgeEntryMeta[];
21
+ getProjectMeta(): KnowledgeEntry | null;
22
+ upsertProjectMeta(content: string, knowledge?: ProjectKnowledge): KnowledgeEntry;
23
+ setLastAnalyzedAt(time: string): void;
24
+ getStats(): KnowledgeStats;
25
+ getAllEntries(): KnowledgeEntry[];
26
+ migrateFromLegacy(legacyPath: string): void;
27
+ private ensureDirs;
28
+ private loadIndex;
29
+ private saveIndex;
30
+ private readContent;
31
+ private writeContent;
32
+ private toMeta;
33
+ }
34
+ export declare function projectKnowledgeToMarkdown(k: ProjectKnowledge): string;
35
+ //# sourceMappingURL=KnowledgeStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeStore.d.ts","sourceRoot":"","sources":["../../src/knowledge/KnowledgeStore.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAElB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAA+B;gBAEhC,OAAO,EAAE,MAAM;IAM3B,IAAI,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,EAAE;IAMrD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAOtC,MAAM,CAAC,KAAK,EAAE;QACZ,IAAI,EAAE,kBAAkB,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;KACnC,GAAG,cAAc;IAuBlB,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,GAC5E,cAAc,GAAG,IAAI;IAuBxB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAc3B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAS3C,cAAc,IAAI,cAAc,GAAG,IAAI;IAOvC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,gBAAgB,GAAG,cAAc;IAehF,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMrC,QAAQ,IAAI,cAAc;IAkB1B,aAAa,IAAI,cAAc,EAAE;IAQjC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAiB3C,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,MAAM;CAIf;AAED,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CA8ItE"}
@@ -0,0 +1,79 @@
1
+ export interface RuleTriggerConfig {
2
+ filename: string;
3
+ keywords: string[];
4
+ description?: string;
5
+ }
6
+ export interface KnownIssueConfig {
7
+ description: string;
8
+ pattern?: string;
9
+ advice: string;
10
+ }
11
+ export interface KeyModuleConfig {
12
+ name: string;
13
+ path: string;
14
+ responsibility: string;
15
+ }
16
+ export interface DomainConceptConfig {
17
+ term: string;
18
+ definition: string;
19
+ }
20
+ export interface CursorRuleKnowledge {
21
+ filename: string;
22
+ purpose: string;
23
+ keyPoints: string[];
24
+ }
25
+ export interface ProjectKnowledge {
26
+ version: 1;
27
+ generatedAt: string;
28
+ repoPath: string;
29
+ structure: {
30
+ primaryLanguage: string;
31
+ frameworks: string[];
32
+ isMonorepo: boolean;
33
+ hasFrontendBackendSplit: boolean;
34
+ frontendDir?: string;
35
+ e2eDir?: string;
36
+ e2eTool?: string;
37
+ description?: string;
38
+ };
39
+ toolchain: {
40
+ packageManager: string;
41
+ installCommand: string;
42
+ installFallbackCommand?: string;
43
+ lintCommand?: string;
44
+ buildCommand?: string;
45
+ testCommand?: string;
46
+ testFilesCommand?: string;
47
+ dependencyCheckPath?: string;
48
+ };
49
+ codeStyle: {
50
+ indentStyle: 'spaces' | 'tabs';
51
+ indentSize: number;
52
+ lineWidth: number;
53
+ additionalRules?: string[];
54
+ };
55
+ businessContext: {
56
+ purpose: string;
57
+ targetUsers: string;
58
+ domain: string;
59
+ coreFeatures: string[];
60
+ };
61
+ architecture: {
62
+ overview: string;
63
+ keyModules: KeyModuleConfig[];
64
+ dataFlow: string;
65
+ designPatterns: string[];
66
+ externalDependencies: string[];
67
+ };
68
+ domainConcepts: DomainConceptConfig[];
69
+ agentKnowledge: {
70
+ summary: string;
71
+ cursorRules: CursorRuleKnowledge[];
72
+ claudeMdSummary?: string;
73
+ conventions: string[];
74
+ };
75
+ ruleTriggers: RuleTriggerConfig[];
76
+ knownIssues: KnownIssueConfig[];
77
+ custom?: Record<string, unknown>;
78
+ }
79
+ //# sourceMappingURL=ProjectKnowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectKnowledge.d.ts","sourceRoot":"","sources":["../../src/knowledge/ProjectKnowledge.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE;QACT,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,UAAU,EAAE,OAAO,CAAC;QACpB,uBAAuB,EAAE,OAAO,CAAC;QACjC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAS,EAAE;QACT,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,SAAS,EAAE;QACT,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF,eAAe,EAAE;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,YAAY,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,EAAE,CAAC;QAC9B,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,oBAAoB,EAAE,MAAM,EAAE,CAAC;KAChC,CAAC;IACF,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,cAAc,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,mBAAmB,EAAE,CAAC;QACnC,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC"}
@@ -0,0 +1,2 @@
1
+ export declare function buildAnalyzePrompt(staticInfo: string): string;
2
+ //# sourceMappingURL=analyze-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-prompt.d.ts","sourceRoot":"","sources":["../../src/knowledge/analyze-prompt.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAwH7D"}