codestrate 0.6.1 → 0.6.3

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 (223) hide show
  1. package/README.md +97 -101
  2. package/dist/constants.d.ts +1 -1
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/constants.js +54 -4
  5. package/dist/constants.js.map +1 -1
  6. package/dist/index.d.ts +3 -2
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +198 -119
  9. package/dist/index.js.map +1 -1
  10. package/dist/install.d.ts +0 -0
  11. package/dist/install.d.ts.map +0 -0
  12. package/dist/install.js +2 -2
  13. package/dist/install.js.map +1 -1
  14. package/dist/profiles.d.ts +28 -0
  15. package/dist/profiles.d.ts.map +1 -0
  16. package/dist/profiles.js +89 -0
  17. package/dist/profiles.js.map +1 -0
  18. package/dist/schemas/index.d.ts +1441 -126
  19. package/dist/schemas/index.d.ts.map +1 -1
  20. package/dist/schemas/index.js +221 -10
  21. package/dist/schemas/index.js.map +1 -1
  22. package/dist/security/guard.d.ts +15 -2
  23. package/dist/security/guard.d.ts.map +1 -1
  24. package/dist/security/guard.js +42 -8
  25. package/dist/security/guard.js.map +1 -1
  26. package/dist/services/code-chunker.d.ts +50 -0
  27. package/dist/services/code-chunker.d.ts.map +1 -0
  28. package/dist/services/code-chunker.js +148 -0
  29. package/dist/services/code-chunker.js.map +1 -0
  30. package/dist/services/code-searcher.d.ts +6 -2
  31. package/dist/services/code-searcher.d.ts.map +1 -1
  32. package/dist/services/code-searcher.js +111 -17
  33. package/dist/services/code-searcher.js.map +1 -1
  34. package/dist/services/context-builder.d.ts +0 -11
  35. package/dist/services/context-builder.d.ts.map +1 -1
  36. package/dist/services/context-builder.js +74 -128
  37. package/dist/services/context-builder.js.map +1 -1
  38. package/dist/services/embedding-runtime.d.ts +41 -0
  39. package/dist/services/embedding-runtime.d.ts.map +1 -0
  40. package/dist/services/embedding-runtime.js +636 -0
  41. package/dist/services/embedding-runtime.js.map +1 -0
  42. package/dist/services/embedding.d.ts +79 -0
  43. package/dist/services/embedding.d.ts.map +1 -0
  44. package/dist/services/embedding.js +257 -0
  45. package/dist/services/embedding.js.map +1 -0
  46. package/dist/services/index-state.d.ts +74 -0
  47. package/dist/services/index-state.d.ts.map +1 -0
  48. package/dist/services/index-state.js +151 -0
  49. package/dist/services/index-state.js.map +1 -0
  50. package/dist/services/index-worker.d.ts +60 -0
  51. package/dist/services/index-worker.d.ts.map +1 -0
  52. package/dist/services/index-worker.js +182 -0
  53. package/dist/services/index-worker.js.map +1 -0
  54. package/dist/services/logger.d.ts +48 -0
  55. package/dist/services/logger.d.ts.map +1 -0
  56. package/dist/services/logger.js +106 -0
  57. package/dist/services/logger.js.map +1 -0
  58. package/dist/services/memory-store.d.ts +9 -7
  59. package/dist/services/memory-store.d.ts.map +1 -1
  60. package/dist/services/memory-store.js +93 -7
  61. package/dist/services/memory-store.js.map +1 -1
  62. package/dist/services/repository-parser.d.ts +0 -0
  63. package/dist/services/repository-parser.d.ts.map +0 -0
  64. package/dist/services/repository-parser.js +0 -0
  65. package/dist/services/repository-parser.js.map +0 -0
  66. package/dist/services/symbol-indexer.d.ts +0 -0
  67. package/dist/services/symbol-indexer.d.ts.map +1 -1
  68. package/dist/services/symbol-indexer.js +25 -13
  69. package/dist/services/symbol-indexer.js.map +1 -1
  70. package/dist/services/tree-sitter.d.ts +0 -0
  71. package/dist/services/tree-sitter.d.ts.map +0 -0
  72. package/dist/services/tree-sitter.js +0 -0
  73. package/dist/services/tree-sitter.js.map +0 -0
  74. package/dist/services/validation-runner.d.ts +0 -0
  75. package/dist/services/validation-runner.d.ts.map +1 -1
  76. package/dist/services/validation-runner.js +9 -9
  77. package/dist/services/validation-runner.js.map +1 -1
  78. package/dist/services/vector-indexer.d.ts +53 -0
  79. package/dist/services/vector-indexer.d.ts.map +1 -0
  80. package/dist/services/vector-indexer.js +230 -0
  81. package/dist/services/vector-indexer.js.map +1 -0
  82. package/dist/store/index.d.ts +0 -0
  83. package/dist/store/index.d.ts.map +0 -0
  84. package/dist/store/index.js +0 -0
  85. package/dist/store/index.js.map +0 -0
  86. package/dist/store/interface.d.ts +70 -1
  87. package/dist/store/interface.d.ts.map +1 -1
  88. package/dist/store/interface.js +0 -0
  89. package/dist/store/interface.js.map +0 -0
  90. package/dist/store/memory.d.ts +0 -0
  91. package/dist/store/memory.d.ts.map +0 -0
  92. package/dist/store/memory.js +0 -0
  93. package/dist/store/memory.js.map +0 -0
  94. package/dist/store/service.d.ts +49 -0
  95. package/dist/store/service.d.ts.map +1 -0
  96. package/dist/store/service.js +147 -0
  97. package/dist/store/service.js.map +1 -0
  98. package/dist/store/sqlite.d.ts +68 -3
  99. package/dist/store/sqlite.d.ts.map +1 -1
  100. package/dist/store/sqlite.js +708 -58
  101. package/dist/store/sqlite.js.map +1 -1
  102. package/dist/store/vector-store.d.ts +66 -0
  103. package/dist/store/vector-store.d.ts.map +1 -0
  104. package/dist/store/vector-store.js +330 -0
  105. package/dist/store/vector-store.js.map +1 -0
  106. package/dist/tools/analyze-impact.d.ts +0 -0
  107. package/dist/tools/analyze-impact.d.ts.map +1 -1
  108. package/dist/tools/analyze-impact.js +101 -39
  109. package/dist/tools/analyze-impact.js.map +1 -1
  110. package/dist/tools/deep-explore.d.ts +0 -0
  111. package/dist/tools/deep-explore.d.ts.map +1 -1
  112. package/dist/tools/deep-explore.js +18 -4
  113. package/dist/tools/deep-explore.js.map +1 -1
  114. package/dist/tools/detect-cycles.d.ts +3 -0
  115. package/dist/tools/detect-cycles.d.ts.map +1 -0
  116. package/dist/tools/detect-cycles.js +61 -0
  117. package/dist/tools/detect-cycles.js.map +1 -0
  118. package/dist/tools/detect-dead-code.d.ts +0 -0
  119. package/dist/tools/detect-dead-code.d.ts.map +1 -1
  120. package/dist/tools/detect-dead-code.js +1 -0
  121. package/dist/tools/detect-dead-code.js.map +1 -1
  122. package/dist/tools/explore.d.ts +13 -0
  123. package/dist/tools/explore.d.ts.map +1 -1
  124. package/dist/tools/explore.js +122 -88
  125. package/dist/tools/explore.js.map +1 -1
  126. package/dist/tools/get-context.d.ts +15 -0
  127. package/dist/tools/get-context.d.ts.map +1 -1
  128. package/dist/tools/get-context.js +66 -61
  129. package/dist/tools/get-context.js.map +1 -1
  130. package/dist/tools/graph-explain.d.ts +3 -0
  131. package/dist/tools/graph-explain.d.ts.map +1 -0
  132. package/dist/tools/graph-explain.js +140 -0
  133. package/dist/tools/graph-explain.js.map +1 -0
  134. package/dist/tools/graph-stats.d.ts +3 -0
  135. package/dist/tools/graph-stats.d.ts.map +1 -0
  136. package/dist/tools/graph-stats.js +73 -0
  137. package/dist/tools/graph-stats.js.map +1 -0
  138. package/dist/tools/inspect-symbol.d.ts +10 -0
  139. package/dist/tools/inspect-symbol.d.ts.map +1 -1
  140. package/dist/tools/inspect-symbol.js +112 -101
  141. package/dist/tools/inspect-symbol.js.map +1 -1
  142. package/dist/tools/ping.d.ts +0 -0
  143. package/dist/tools/ping.d.ts.map +1 -1
  144. package/dist/tools/ping.js +2 -3
  145. package/dist/tools/ping.js.map +1 -1
  146. package/dist/tools/profile.d.ts +9 -0
  147. package/dist/tools/profile.d.ts.map +1 -0
  148. package/dist/tools/profile.js +101 -0
  149. package/dist/tools/profile.js.map +1 -0
  150. package/dist/tools/query-graph.d.ts +3 -0
  151. package/dist/tools/query-graph.d.ts.map +1 -0
  152. package/dist/tools/query-graph.js +157 -0
  153. package/dist/tools/query-graph.js.map +1 -0
  154. package/dist/tools/recall-experience.d.ts +0 -0
  155. package/dist/tools/recall-experience.d.ts.map +1 -1
  156. package/dist/tools/recall-experience.js +5 -5
  157. package/dist/tools/recall-experience.js.map +1 -1
  158. package/dist/tools/record-experience.d.ts +0 -0
  159. package/dist/tools/record-experience.d.ts.map +1 -1
  160. package/dist/tools/record-experience.js +2 -5
  161. package/dist/tools/record-experience.js.map +1 -1
  162. package/dist/tools/reflect.d.ts +4 -0
  163. package/dist/tools/reflect.d.ts.map +1 -0
  164. package/dist/tools/reflect.js +99 -0
  165. package/dist/tools/reflect.js.map +1 -0
  166. package/dist/tools/register.d.ts +5 -2
  167. package/dist/tools/register.d.ts.map +1 -1
  168. package/dist/tools/register.js +31 -1
  169. package/dist/tools/register.js.map +1 -1
  170. package/dist/tools/reindex.d.ts +0 -0
  171. package/dist/tools/reindex.d.ts.map +1 -1
  172. package/dist/tools/reindex.js +102 -21
  173. package/dist/tools/reindex.js.map +1 -1
  174. package/dist/tools/repo-overview.d.ts +0 -0
  175. package/dist/tools/repo-overview.d.ts.map +1 -1
  176. package/dist/tools/repo-overview.js +8 -6
  177. package/dist/tools/repo-overview.js.map +1 -1
  178. package/dist/tools/run-validation.d.ts +0 -0
  179. package/dist/tools/run-validation.d.ts.map +1 -1
  180. package/dist/tools/run-validation.js +15 -1
  181. package/dist/tools/run-validation.js.map +1 -1
  182. package/dist/tools/search-code.d.ts +0 -0
  183. package/dist/tools/search-code.d.ts.map +1 -1
  184. package/dist/tools/search-code.js +11 -4
  185. package/dist/tools/search-code.js.map +1 -1
  186. package/dist/tools/search-history.d.ts +0 -0
  187. package/dist/tools/search-history.d.ts.map +0 -0
  188. package/dist/tools/search-history.js +0 -0
  189. package/dist/tools/search-history.js.map +0 -0
  190. package/dist/tools/session-heartbeat.d.ts +0 -0
  191. package/dist/tools/session-heartbeat.d.ts.map +1 -1
  192. package/dist/tools/session-heartbeat.js +1 -0
  193. package/dist/tools/session-heartbeat.js.map +1 -1
  194. package/dist/tools/session-status.d.ts +0 -0
  195. package/dist/tools/session-status.d.ts.map +1 -1
  196. package/dist/tools/session-status.js +1 -0
  197. package/dist/tools/session-status.js.map +1 -1
  198. package/dist/tools/status.d.ts +0 -0
  199. package/dist/tools/status.d.ts.map +1 -1
  200. package/dist/tools/status.js +87 -24
  201. package/dist/tools/status.js.map +1 -1
  202. package/dist/tools/trace-bfs.d.ts +13 -0
  203. package/dist/tools/trace-bfs.d.ts.map +1 -0
  204. package/dist/tools/trace-bfs.js +251 -0
  205. package/dist/tools/trace-bfs.js.map +1 -0
  206. package/dist/tools/trace-flow.d.ts +1 -1
  207. package/dist/tools/trace-flow.d.ts.map +1 -1
  208. package/dist/tools/trace-flow.js +113 -69
  209. package/dist/tools/trace-flow.js.map +1 -1
  210. package/dist/types.d.ts +75 -13
  211. package/dist/types.d.ts.map +1 -1
  212. package/dist/types.js +15 -0
  213. package/dist/types.js.map +1 -1
  214. package/grammars/tree-sitter-c.wasm +0 -0
  215. package/grammars/tree-sitter-cpp.wasm +0 -0
  216. package/grammars/tree-sitter-go.wasm +0 -0
  217. package/grammars/tree-sitter-java.wasm +0 -0
  218. package/grammars/tree-sitter-javascript.wasm +0 -0
  219. package/grammars/tree-sitter-python.wasm +0 -0
  220. package/grammars/tree-sitter-rust.wasm +0 -0
  221. package/grammars/tree-sitter-tsx.wasm +0 -0
  222. package/grammars/tree-sitter-typescript.wasm +0 -0
  223. package/package.json +8 -6
@@ -0,0 +1,157 @@
1
+ import { registerCiTool } from "./register.js";
2
+ import { QueryGraphSchema, QueryGraphOutputSchema } from "../schemas/index.js";
3
+ import { getStore } from "../store/sqlite.js";
4
+ import { asStructured } from "../types.js";
5
+ /**
6
+ * Simple term-extraction from a natural language question.
7
+ * Splits on whitespace, lowercases, drops stop words and short tokens.
8
+ */
9
+ function extractTerms(question) {
10
+ const stopWords = new Set([
11
+ "the", "a", "an", "in", "of", "to", "for", "on", "and", "or",
12
+ "is", "are", "was", "were", "be", "been", "being", "has", "have", "had",
13
+ "how", "what", "why", "when", "where", "which", "who", "whom",
14
+ "does", "did", "can", "could", "would", "should", "will", "shall",
15
+ "this", "that", "these", "those", "it", "its", "they", "them",
16
+ "with", "without", "from", "about", "all", "any", "some", "not",
17
+ "connect", "connects", "connection", "show", "find", "tell", "give",
18
+ "list", "get", "do", "does", "did", "doing", "work", "works", "working",
19
+ ]);
20
+ return question
21
+ .toLowerCase()
22
+ .split(/[^a-zA-Z0-9_]+/)
23
+ .filter(t => t.length > 2 && !stopWords.has(t));
24
+ }
25
+ export function registerQueryGraph(server) {
26
+ registerCiTool(server, "ci_query_graph", {
27
+ title: "Query Graph",
28
+ description: "Query the dependency graph using natural language. Extracts key terms, finds matching nodes, and returns a scoped subgraph with the relevant context.",
29
+ inputSchema: QueryGraphSchema,
30
+ outputSchema: QueryGraphOutputSchema,
31
+ annotations: { readOnlyHint: true, idempotentHint: true },
32
+ }, async (params) => {
33
+ try {
34
+ const store = getStore();
35
+ // Extract search terms from the question
36
+ const terms = extractTerms(params.question);
37
+ if (terms.length === 0) {
38
+ return {
39
+ content: [{ type: "text", text: `Could not extract meaningful search terms from: "${params.question}"` }],
40
+ isError: true,
41
+ };
42
+ }
43
+ // Search for matching nodes via FTS
44
+ const ftsQuery = terms.map(t => `"${t}"`).join(" OR ");
45
+ const matchedNodes = store.searchGraphNodesFTS(ftsQuery, params.maxResults);
46
+ // If no FTS matches, try LIKE fallback
47
+ let finalMatched = matchedNodes;
48
+ if (matchedNodes.length === 0) {
49
+ // Try camelCase segmented search
50
+ const camelTerms = terms.flatMap(t => {
51
+ // Split camelCase: "userAuth" -> ["user", "auth"]
52
+ const parts = t.split(/(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/);
53
+ return parts.length > 1 ? parts : [t];
54
+ });
55
+ const likeResults = new Map();
56
+ for (const term of [...new Set([...terms, ...camelTerms])]) {
57
+ const nodes = store.searchGraphNodes(term, 10);
58
+ for (const n of nodes) {
59
+ if (!likeResults.has(n.name)) {
60
+ likeResults.set(n.name, n);
61
+ }
62
+ }
63
+ }
64
+ finalMatched = [...likeResults.values()].slice(0, params.maxResults);
65
+ }
66
+ // Run BFS from the top matching nodes for context
67
+ let subgraphNodes = [];
68
+ let subgraphEdges = [];
69
+ if (finalMatched.length > 0) {
70
+ const seenNodeIds = new Set();
71
+ const seenEdgeIds = new Set();
72
+ // Explore from the top 3 matched nodes
73
+ for (const match of finalMatched.slice(0, 3)) {
74
+ const result = store.traverseBFS(match.name, {
75
+ maxDepth: params.depth,
76
+ limit: params.maxResults,
77
+ });
78
+ for (const n of result.nodes) {
79
+ if (!seenNodeIds.has(n.id)) {
80
+ seenNodeIds.add(n.id);
81
+ subgraphNodes.push({
82
+ id: n.id, name: n.name, kind: n.kind, file: n.file,
83
+ line: n.line, column: n.column, signature: n.signature,
84
+ });
85
+ }
86
+ }
87
+ for (const e of result.edges) {
88
+ if (!seenEdgeIds.has(e.id)) {
89
+ seenEdgeIds.add(e.id);
90
+ subgraphEdges.push({
91
+ id: e.id, sourceNodeId: e.sourceNodeId,
92
+ targetNodeId: e.targetNodeId, kind: e.kind,
93
+ confidence: e.confidence,
94
+ });
95
+ }
96
+ }
97
+ }
98
+ }
99
+ // Build markdown output
100
+ const lines = [
101
+ `# Query Graph: "${params.question}"`,
102
+ ``,
103
+ `**Search terms:** \`${terms.join("`, `")}\``,
104
+ `**Matched nodes:** ${finalMatched.length}`,
105
+ `**Subgraph:** ${subgraphNodes.length} nodes, ${subgraphEdges.length} edges`,
106
+ ``,
107
+ ];
108
+ if (finalMatched.length === 0) {
109
+ lines.push("_No matching symbols found. Try different terms or run ci_repo_overview / ci_reindex first._");
110
+ }
111
+ else {
112
+ lines.push(`## Matched Symbols`, ``);
113
+ for (const n of finalMatched.slice(0, 15)) {
114
+ lines.push(`- **\`${n.name}\`** — ${n.kind} (\`${n.file}\`${n.line ? `:${n.line}` : ""})`);
115
+ }
116
+ if (subgraphNodes.length > 0) {
117
+ lines.push(``, `## Subgraph Context (${subgraphNodes.length} nodes)`, ``);
118
+ for (const n of subgraphNodes) {
119
+ const isMatch = finalMatched.some(m => m.id === n.id);
120
+ lines.push(`- ${isMatch ? "★" : " "} **\`${n.name}\`** — ${n.kind} (${n.file})`);
121
+ }
122
+ lines.push(``, `## Edges (${subgraphEdges.length})`, ``);
123
+ for (const e of subgraphEdges.slice(0, 20)) {
124
+ // Resolve names
125
+ const srcNode = subgraphNodes.find(n => n.id === e.sourceNodeId);
126
+ const tgtNode = subgraphNodes.find(n => n.id === e.targetNodeId);
127
+ if (srcNode && tgtNode) {
128
+ lines.push(`- \`${srcNode.name}\` —${e.kind}→ \`${tgtNode.name}\` [${e.confidence}]`);
129
+ }
130
+ }
131
+ }
132
+ }
133
+ return {
134
+ content: [{ type: "text", text: lines.join("\n") }],
135
+ structuredContent: asStructured({
136
+ question: params.question,
137
+ matchedNodes: finalMatched.map(n => ({
138
+ id: n.id, name: n.name, kind: n.kind, file: n.file,
139
+ line: n.line, column: n.column, signature: n.signature,
140
+ })),
141
+ subgraph: subgraphNodes.length > 0
142
+ ? { nodes: subgraphNodes, edges: subgraphEdges }
143
+ : undefined,
144
+ totalNodes: finalMatched.length,
145
+ }),
146
+ };
147
+ }
148
+ catch (error) {
149
+ const msg = error instanceof Error ? error.message : String(error);
150
+ return {
151
+ content: [{ type: "text", text: `Query graph error: ${msg}` }],
152
+ isError: true,
153
+ };
154
+ }
155
+ });
156
+ }
157
+ //# sourceMappingURL=query-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-graph.js","sourceRoot":"","sources":["../../src/tools/query-graph.ts"],"names":[],"mappings":"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"}
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"recall-experience.d.ts","sourceRoot":"","sources":["../../src/tools/recall-experience.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6CpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwHhE"}
1
+ {"version":3,"file":"recall-experience.d.ts","sourceRoot":"","sources":["../../src/tools/recall-experience.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8CpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuHhE"}
@@ -1,8 +1,9 @@
1
1
  import { registerCiTool } from "./register.js";
2
2
  import { RecallExperienceSchema, RecallExperienceOutputSchema, ResponseFormat, } from "../schemas/index.js";
3
- import { hybridRecall, loadMemoryStore } from "../services/memory-store.js";
3
+ import { hybridRecall } from "../services/memory-store.js";
4
4
  import { loadConfig, getOutputBudget } from "../constants.js";
5
- import { getIndex } from "../store/index.js";
5
+ import { getStore } from "../store/sqlite.js";
6
+ import { getSnapshot } from "../store/service.js";
6
7
  import { asStructured } from "../types.js";
7
8
  // ─── Phân biệt kiểu ────────────────────────────────────────
8
9
  // `in` không narrow được union type có optional property nên
@@ -43,8 +44,7 @@ export function registerRecallExperience(server) {
43
44
  }, async (params) => {
44
45
  try {
45
46
  const config = loadConfig();
46
- loadMemoryStore(config.storePath);
47
- const repo = params.repo ?? (getIndex().repoFingerprint || undefined);
47
+ const repo = params.repo ?? (getStore().getRepoFingerprint() || undefined);
48
48
  const results = hybridRecall(params.task, repo, params.topK, params.memoryTypes);
49
49
  if (params.responseFormat === ResponseFormat.JSON) {
50
50
  const output = results;
@@ -120,7 +120,7 @@ export function registerRecallExperience(server) {
120
120
  lines.push("---");
121
121
  lines.push("");
122
122
  }
123
- const fileCount = getIndex().snapshot?.files?.length ?? null;
123
+ const fileCount = getSnapshot()?.files?.length ?? null;
124
124
  const budget = getOutputBudget(config.maxResponseChars, fileCount);
125
125
  const output = lines.join("\n");
126
126
  const truncated = output.length > budget
@@ -1 +1 @@
1
- {"version":3,"file":"recall-experience.js","sourceRoot":"","sources":["../../src/tools/recall-experience.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recall-experience.js","sourceRoot":"","sources":["../../src/tools/recall-experience.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,8DAA8D;AAC9D,6DAA6D;AAC7D,0CAA0C;AAE1C,SAAS,YAAY,CAAC,CAAsB;IAC1C,OAAO,UAAU,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,QAAQ,CAAC,CAAsB;IACtC,OAAO,SAAS,IAAI,CAAC,CAAC;AACxB,CAAC;AACD,8DAA8D;AAE9D,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC;AACxF,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAChD,CAAC;AAED,SAAS,eAAe,CAAC,EAAU;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,8DAA8D;AAE9D,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,cAAc,CAAC,MAAM,EAAE,sBAAsB,EAC7C;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,+EAA+E;QAC5F,YAAY,EAAE,4BAA4B;QAC1C,WAAW,EAAE,sBAAsB;QACnC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,kBAAkB,EAAE,IAAI,SAAS,CAAC,CAAC;YAE3E,MAAM,OAAO,GAAG,YAAY,CAC1B,MAAM,CAAC,IAAI,EACX,IAAI,EACJ,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,WAAuC,CAC/C,CAAC;YAEF,IAAI,MAAM,CAAC,cAAc,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;gBAClD,MAAM,MAAM,GAAG,OAAO,CAAC;gBACvB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC3E,iBAAiB,EAAE,YAAY,CAAC,MAAM,CAAC;iBACxC,CAAC;YACJ,CAAC;YAED,yDAAyD;YACzD,MAAM,KAAK,GAAa;gBACtB,kBAAkB,MAAM,CAAC,IAAI,GAAG;gBAChC,EAAE;gBACF,WAAW,OAAO,CAAC,MAAM,eAAe,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE;gBACrF,KAAK;gBACL,EAAE;aACH,CAAC;YAEF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpB,MAAM,GAAG,GAAG,CAAe,CAAC;oBAC5B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;oBAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACf,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;oBACpC,KAAK,CAAC,IAAI,CAAC,gBAAgB,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5D,KAAK,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtD,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;oBACpC,KAAK,CAAC,IAAI,CAAC,kBAAkB,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;oBAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACf,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAChC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;wBACjC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;4BACjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBAC3B,CAAC;wBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACjB,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;oBACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAChC,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACf,KAAK,CAAC,IAAI,CAAC,wBAAwB,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC;qBAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvB,MAAM,GAAG,GAAG,CAAW,CAAC;oBACxB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE;wBACrC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;wBAChC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;oBAChB,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;oBAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;oBACtC,KAAK,CAAC,IAAI,CAAC,gBAAgB,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5D,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;oBACpC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;oBACpC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;wBACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACxD,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;oBAC/D,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC7D,CAAC;oBACD,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBACzB,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;4BAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBAC3B,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YAED,MAAM,SAAS,GAAG,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC;YACvD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM;gBACtC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,mBAAmB;gBAC/C,CAAC,CAAC,MAAM,CAAC;YAEX,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBACrD,iBAAiB,EAAE,YAAY,CAAC,OAAO,CAAC;aACzC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,gCAAgC,OAAO,EAAE,EAAE,CAAC;gBACrF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAE,CAAC;AACN,CAAC"}
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"record-experience.d.ts","sourceRoot":"","sources":["../../src/tools/record-experience.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,QA0EzD"}
1
+ {"version":3,"file":"record-experience.d.ts","sourceRoot":"","sources":["../../src/tools/record-experience.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,QAuEzD"}
@@ -1,7 +1,7 @@
1
1
  import { registerCiTool } from "./register.js";
2
2
  import { asStructured } from "../types.js";
3
3
  import { RecordExperienceSchema, RecordExperienceOutputSchema } from "../schemas/index.js";
4
- import { storeExperience, loadMemoryStore, saveMemoryStore } from "../services/memory-store.js";
4
+ import { storeExperience } from "../services/memory-store.js";
5
5
  import { getRepoFingerprint } from "../services/validation-runner.js";
6
6
  import { loadConfig, MAX_RESPONSE_CHARS } from "../constants.js";
7
7
  export function registerRecordExperience(server) {
@@ -15,11 +15,11 @@ export function registerRecordExperience(server) {
15
15
  destructiveHint: false,
16
16
  idempotentHint: true,
17
17
  },
18
+ profile: "full",
18
19
  }, async (params) => {
19
20
  const config = loadConfig();
20
21
  const maxChars = config.maxResponseChars ?? MAX_RESPONSE_CHARS;
21
22
  try {
22
- loadMemoryStore(config.storePath);
23
23
  const repoFingerprint = getRepoFingerprint(config.repoPath);
24
24
  const evidence = {
25
25
  commitSha: params.commit,
@@ -37,9 +37,6 @@ export function registerRecordExperience(server) {
37
37
  commit: params.commit,
38
38
  failedAttempts: params.failedAttempts ?? [],
39
39
  }, evidence, repoFingerprint);
40
- // addExperience lưu store nội bộ nhưng dùng DEFAULT_STORE_PATH;
41
- // lưu lại với storePath đúng từ config
42
- saveMemoryStore(config.storePath);
43
40
  const output = {
44
41
  id: result.id,
45
42
  quality: result.quality,
@@ -1 +1 @@
1
- {"version":3,"file":"record-experience.js","sourceRoot":"","sources":["../../src/tools/record-experience.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"record-experience.js","sourceRoot":"","sources":["../../src/tools/record-experience.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerReflect(server: McpServer): void;
3
+ export declare function registerReflectHistory(server: McpServer): void;
4
+ //# sourceMappingURL=reflect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflect.d.ts","sourceRoot":"","sources":["../../src/tools/reflect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkDvD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmD9D"}
@@ -0,0 +1,99 @@
1
+ import { registerCiTool } from "./register.js";
2
+ import { ReflectSchema, ReflectOutputSchema, SessionReflectionsSchema, SessionReflectionsOutputSchema, } from "../schemas/index.js";
3
+ import { getStore } from "../store/sqlite.js";
4
+ import { asStructured } from "../types.js";
5
+ export function registerReflect(server) {
6
+ registerCiTool(server, "ci_reflect", {
7
+ title: "Record Work Reflection",
8
+ description: "Record structured context about what you're currently working on. Use this to persist session memory across tool calls — goal, task, symbols, and files involved. Later retrieve via ci_reflect_history.",
9
+ inputSchema: ReflectSchema,
10
+ outputSchema: ReflectOutputSchema,
11
+ annotations: { readOnlyHint: false, idempotentHint: false },
12
+ profile: "full",
13
+ }, async (params) => {
14
+ try {
15
+ const store = getStore();
16
+ store.recordReflection(params.sessionId, params.goal, params.task, params.symbols, params.files);
17
+ return {
18
+ content: [{
19
+ type: "text",
20
+ text: [
21
+ `## Reflection Recorded`,
22
+ ``,
23
+ `**Session:** \`${params.sessionId}\``,
24
+ `**Goal:** ${params.goal}`,
25
+ `**Task:** ${params.task}`,
26
+ params.symbols?.length ? `**Symbols:** ${params.symbols.join(", ")}` : "",
27
+ params.files?.length ? `**Files:** ${params.files.join(", ")}` : "",
28
+ ].filter(Boolean).join("\n"),
29
+ }],
30
+ structuredContent: asStructured({
31
+ id: Date.now(),
32
+ sessionId: params.sessionId,
33
+ goal: params.goal,
34
+ task: params.task,
35
+ timestamp: new Date().toISOString(),
36
+ }),
37
+ };
38
+ }
39
+ catch (error) {
40
+ const msg = error instanceof Error ? error.message : String(error);
41
+ return {
42
+ content: [{ type: "text", text: `Reflection error: ${msg}` }],
43
+ isError: true,
44
+ };
45
+ }
46
+ });
47
+ }
48
+ export function registerReflectHistory(server) {
49
+ registerCiTool(server, "ci_reflect_history", {
50
+ title: "Work Reflection History",
51
+ description: "Retrieve previously recorded session reflections. Filters by session ID and limits results. Useful for understanding what was being worked on in prior steps.",
52
+ inputSchema: SessionReflectionsSchema,
53
+ outputSchema: SessionReflectionsOutputSchema,
54
+ annotations: { readOnlyHint: true, idempotentHint: true },
55
+ profile: "full",
56
+ }, async (params) => {
57
+ try {
58
+ const store = getStore();
59
+ const reflections = store.getSessionReflections(params.sessionId, params.limit);
60
+ const lines = [
61
+ `# Reflection History`,
62
+ ``,
63
+ `**Total:** ${reflections.length} reflections`,
64
+ params.sessionId ? `**Filtered by session:** \`${params.sessionId}\`` : "",
65
+ ``,
66
+ ];
67
+ if (reflections.length === 0) {
68
+ lines.push("_No reflections found._");
69
+ }
70
+ else {
71
+ for (const r of reflections) {
72
+ const symbols = JSON.parse(r.symbols);
73
+ const files = JSON.parse(r.files);
74
+ lines.push(`### ${r.timestamp}`);
75
+ lines.push(`**Session:** \`${r.sessionId}\``);
76
+ lines.push(`**Goal:** ${r.goal}`);
77
+ lines.push(`**Task:** ${r.task}`);
78
+ if (symbols.length > 0)
79
+ lines.push(`**Symbols:** ${symbols.join(", ")}`);
80
+ if (files.length > 0)
81
+ lines.push(`**Files:** ${files.join(", ")}`);
82
+ lines.push(``);
83
+ }
84
+ }
85
+ return {
86
+ content: [{ type: "text", text: lines.join("\n") }],
87
+ structuredContent: asStructured({ reflections }),
88
+ };
89
+ }
90
+ catch (error) {
91
+ const msg = error instanceof Error ? error.message : String(error);
92
+ return {
93
+ content: [{ type: "text", text: `Reflection history error: ${msg}` }],
94
+ isError: true,
95
+ };
96
+ }
97
+ });
98
+ }
99
+ //# sourceMappingURL=reflect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../src/tools/reflect.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,13 @@
5
5
  * type inference cho callback, và trả về RegisteredTool
6
6
  * để hỗ trợ lifecycle management.
7
7
  *
8
- * Lưu ý: outputSchema được truyền dưới dạng AnySchema để tránh xung đột
9
- * inference generic với InputArgs.
8
+ * Profile gating: each tool checks the active profile before executing.
9
+ * Tools outside the current profile return a gate error instead of running.
10
10
  */
11
11
  import type { McpServer, RegisteredTool, ToolCallback } from "@modelcontextprotocol/sdk/server/mcp.js";
12
12
  import type { ZodRawShapeCompat, AnySchema } from "@modelcontextprotocol/sdk/server/zod-compat.js";
13
13
  import type { ToolAnnotations } from "@modelcontextprotocol/sdk/types.js";
14
+ import { type ToolProfile } from "../profiles.js";
14
15
  export interface CiToolConfig<InputArgs extends undefined | ZodRawShapeCompat | AnySchema> {
15
16
  title?: string;
16
17
  description?: string;
@@ -18,6 +19,8 @@ export interface CiToolConfig<InputArgs extends undefined | ZodRawShapeCompat |
18
19
  outputSchema?: AnySchema;
19
20
  annotations?: ToolAnnotations;
20
21
  _meta?: Record<string, unknown>;
22
+ /** Profile requirement: set to restrict this tool to a specific profile (default: all profiles) */
23
+ profile?: ToolProfile;
21
24
  }
22
25
  export declare function registerCiTool<InputArgs extends undefined | ZodRawShapeCompat | AnySchema = undefined>(server: McpServer, name: string, config: CiToolConfig<InputArgs>, cb: ToolCallback<InputArgs>): RegisteredTool;
23
26
  //# sourceMappingURL=register.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvG,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAC;AACnG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E,MAAM,WAAW,YAAY,CAAC,SAAS,SAAS,SAAS,GAAG,iBAAiB,GAAG,SAAS;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,SAAS,SAAS,SAAS,GAAG,iBAAiB,GAAG,SAAS,GAAG,SAAS,EACpG,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,EAC/B,EAAE,EAAE,YAAY,CAAC,SAAS,CAAC,GAC1B,cAAc,CAEhB"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvG,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAC;AACnG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E,OAAO,EAA+B,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE/E,MAAM,WAAW,YAAY,CAAC,SAAS,SAAS,SAAS,GAAG,iBAAiB,GAAG,SAAS;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,mGAAmG;IACnG,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,SAAS,SAAS,SAAS,GAAG,iBAAiB,GAAG,SAAS,GAAG,SAAS,EACpG,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,EAC/B,EAAE,EAAE,YAAY,CAAC,SAAS,CAAC,GAC1B,cAAc,CAkChB"}
@@ -1,4 +1,34 @@
1
+ import { loadConfig } from "../constants.js";
2
+ import { isToolInProfile, getProfile } from "../profiles.js";
1
3
  export function registerCiTool(server, name, config, cb) {
2
- return server.registerTool(name, config, cb);
4
+ // Cast is needed because ToolCallback's return type varies with InputArgs
5
+ // but we return a uniform CallToolResult shape.
6
+ const gatedCb = (async (args, extra) => {
7
+ const cfg = loadConfig();
8
+ const activeProfile = cfg.profile ?? "core";
9
+ // If tool specifies a required profile, check it
10
+ if (config.profile && config.profile !== activeProfile) {
11
+ return {
12
+ content: [{
13
+ type: "text",
14
+ text: `Tool \`${name}\` requires profile "${config.profile}". Current profile: "${activeProfile}".\n\nSwitch profile via \`ci_profile\` tool or set \`"profile": "${config.profile}"\` in .ci-mcp.json.`,
15
+ }],
16
+ isError: true,
17
+ };
18
+ }
19
+ // Also gate by the active profile's tool list
20
+ if (!isToolInProfile(name, activeProfile)) {
21
+ const profileDef = getProfile(activeProfile);
22
+ return {
23
+ content: [{
24
+ type: "text",
25
+ text: `Tool \`${name}\` is not available in the "${activeProfile}" profile.\n\nAvailable tools:\n\`\`\`\n${profileDef.tools.map(t => ` - ${t}`).join("\n")}\n\`\`\`\n\nSwitch profile via \`ci_profile\` tool or set \`"profile": "${profileDef.name}"\` in .ci-mcp.json.`,
26
+ }],
27
+ isError: true,
28
+ };
29
+ }
30
+ return cb(args, extra);
31
+ });
32
+ return server.registerTool(name, config, gatedCb);
3
33
  }
4
34
  //# sourceMappingURL=register.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AAuBA,MAAM,UAAU,cAAc,CAC5B,MAAiB,EACjB,IAAY,EACZ,MAA+B,EAC/B,EAA2B;IAE3B,OAAO,MAAM,CAAC,YAAY,CAAuB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAoB,MAAM,gBAAgB,CAAC;AAa/E,MAAM,UAAU,cAAc,CAC5B,MAAiB,EACjB,IAAY,EACZ,MAA+B,EAC/B,EAA2B;IAE3B,0EAA0E;IAC1E,gDAAgD;IAChD,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,IAAS,EAAE,KAAU,EAAE,EAAE;QAC/C,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,MAAM,aAAa,GAAgB,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC;QAEzD,iDAAiD;QACjD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;YACvD,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,IAAI,wBAAwB,MAAM,CAAC,OAAO,wBAAwB,aAAa,qEAAqE,MAAM,CAAC,OAAO,sBAAsB;qBACzM,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;YAC7C,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,IAAI,+BAA+B,aAAa,2CAA2C,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,2EAA2E,UAAU,CAAC,IAAI,sBAAsB;qBAC5Q,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,CAAC,IAAW,EAAE,KAAY,CAAC,CAAC;IACvC,CAAC,CAA4B,CAAC;IAE9B,OAAO,MAAM,CAAC,YAAY,CAAuB,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC"}
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"reindex.d.ts","sourceRoot":"","sources":["../../src/tools/reindex.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkGvD"}
1
+ {"version":3,"file":"reindex.d.ts","sourceRoot":"","sources":["../../src/tools/reindex.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuLvD"}