mcp-cognition-engine 1.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +281 -0
  3. package/dist/cli.d.ts +18 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +66 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/cognition-engine/ast-constraint-solver.d.ts +67 -0
  8. package/dist/cognition-engine/ast-constraint-solver.d.ts.map +1 -0
  9. package/dist/cognition-engine/ast-constraint-solver.js +294 -0
  10. package/dist/cognition-engine/ast-constraint-solver.js.map +1 -0
  11. package/dist/cognition-engine/constraint-validator.d.ts +35 -0
  12. package/dist/cognition-engine/constraint-validator.d.ts.map +1 -0
  13. package/dist/cognition-engine/constraint-validator.js +55 -0
  14. package/dist/cognition-engine/constraint-validator.js.map +1 -0
  15. package/dist/cognition-engine/graph-traverser.d.ts +43 -0
  16. package/dist/cognition-engine/graph-traverser.d.ts.map +1 -0
  17. package/dist/cognition-engine/graph-traverser.js +205 -0
  18. package/dist/cognition-engine/graph-traverser.js.map +1 -0
  19. package/dist/cognition-engine/index.d.ts +51 -0
  20. package/dist/cognition-engine/index.d.ts.map +1 -0
  21. package/dist/cognition-engine/index.js +60 -0
  22. package/dist/cognition-engine/index.js.map +1 -0
  23. package/dist/cognition-engine/intent-recognizer.d.ts +25 -0
  24. package/dist/cognition-engine/intent-recognizer.d.ts.map +1 -0
  25. package/dist/cognition-engine/intent-recognizer.js +226 -0
  26. package/dist/cognition-engine/intent-recognizer.js.map +1 -0
  27. package/dist/cognition-engine/types.d.ts +96 -0
  28. package/dist/cognition-engine/types.d.ts.map +1 -0
  29. package/dist/cognition-engine/types.js +17 -0
  30. package/dist/cognition-engine/types.js.map +1 -0
  31. package/dist/conflict/arbitrator.d.ts +24 -0
  32. package/dist/conflict/arbitrator.d.ts.map +1 -0
  33. package/dist/conflict/arbitrator.js +43 -0
  34. package/dist/conflict/arbitrator.js.map +1 -0
  35. package/dist/index.d.ts +17 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +90 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/legacy-engine/ast-diff.d.ts +23 -0
  40. package/dist/legacy-engine/ast-diff.d.ts.map +1 -0
  41. package/dist/legacy-engine/ast-diff.js +146 -0
  42. package/dist/legacy-engine/ast-diff.js.map +1 -0
  43. package/dist/legacy-engine/ast-node.d.ts +24 -0
  44. package/dist/legacy-engine/ast-node.d.ts.map +1 -0
  45. package/dist/legacy-engine/ast-node.js +52 -0
  46. package/dist/legacy-engine/ast-node.js.map +1 -0
  47. package/dist/legacy-engine/parsers.d.ts +34 -0
  48. package/dist/legacy-engine/parsers.d.ts.map +1 -0
  49. package/dist/legacy-engine/parsers.js +134 -0
  50. package/dist/legacy-engine/parsers.js.map +1 -0
  51. package/dist/legacy-engine/regex-fallback.d.ts +23 -0
  52. package/dist/legacy-engine/regex-fallback.d.ts.map +1 -0
  53. package/dist/legacy-engine/regex-fallback.js +40 -0
  54. package/dist/legacy-engine/regex-fallback.js.map +1 -0
  55. package/dist/legacy-engine/rule-generator.d.ts +31 -0
  56. package/dist/legacy-engine/rule-generator.d.ts.map +1 -0
  57. package/dist/legacy-engine/rule-generator.js +54 -0
  58. package/dist/legacy-engine/rule-generator.js.map +1 -0
  59. package/dist/legacy-engine/rule-matcher.d.ts +28 -0
  60. package/dist/legacy-engine/rule-matcher.d.ts.map +1 -0
  61. package/dist/legacy-engine/rule-matcher.js +79 -0
  62. package/dist/legacy-engine/rule-matcher.js.map +1 -0
  63. package/dist/legacy-engine/token-controller.d.ts +31 -0
  64. package/dist/legacy-engine/token-controller.d.ts.map +1 -0
  65. package/dist/legacy-engine/token-controller.js +66 -0
  66. package/dist/legacy-engine/token-controller.js.map +1 -0
  67. package/dist/middleware/response-validation.d.ts +27 -0
  68. package/dist/middleware/response-validation.d.ts.map +1 -0
  69. package/dist/middleware/response-validation.js +50 -0
  70. package/dist/middleware/response-validation.js.map +1 -0
  71. package/dist/modes/confirm.d.ts +29 -0
  72. package/dist/modes/confirm.d.ts.map +1 -0
  73. package/dist/modes/confirm.js +27 -0
  74. package/dist/modes/confirm.js.map +1 -0
  75. package/dist/modes/silent.d.ts +24 -0
  76. package/dist/modes/silent.d.ts.map +1 -0
  77. package/dist/modes/silent.js +24 -0
  78. package/dist/modes/silent.js.map +1 -0
  79. package/dist/resources/cognition-resources.d.ts +28 -0
  80. package/dist/resources/cognition-resources.d.ts.map +1 -0
  81. package/dist/resources/cognition-resources.js +124 -0
  82. package/dist/resources/cognition-resources.js.map +1 -0
  83. package/dist/storage/client.d.ts +26 -0
  84. package/dist/storage/client.d.ts.map +1 -0
  85. package/dist/storage/client.js +45 -0
  86. package/dist/storage/client.js.map +1 -0
  87. package/dist/storage/cognition-repository.d.ts +55 -0
  88. package/dist/storage/cognition-repository.d.ts.map +1 -0
  89. package/dist/storage/cognition-repository.js +287 -0
  90. package/dist/storage/cognition-repository.js.map +1 -0
  91. package/dist/storage/cognition-types.d.ts +96 -0
  92. package/dist/storage/cognition-types.d.ts.map +1 -0
  93. package/dist/storage/cognition-types.js +41 -0
  94. package/dist/storage/cognition-types.js.map +1 -0
  95. package/dist/storage/conflict-repo.d.ts +41 -0
  96. package/dist/storage/conflict-repo.d.ts.map +1 -0
  97. package/dist/storage/conflict-repo.js +67 -0
  98. package/dist/storage/conflict-repo.js.map +1 -0
  99. package/dist/storage/diff-log-repo.d.ts +48 -0
  100. package/dist/storage/diff-log-repo.d.ts.map +1 -0
  101. package/dist/storage/diff-log-repo.js +51 -0
  102. package/dist/storage/diff-log-repo.js.map +1 -0
  103. package/dist/storage/metric-repo.d.ts +20 -0
  104. package/dist/storage/metric-repo.d.ts.map +1 -0
  105. package/dist/storage/metric-repo.js +36 -0
  106. package/dist/storage/metric-repo.js.map +1 -0
  107. package/dist/storage/rule-repo.d.ts +66 -0
  108. package/dist/storage/rule-repo.d.ts.map +1 -0
  109. package/dist/storage/rule-repo.js +188 -0
  110. package/dist/storage/rule-repo.js.map +1 -0
  111. package/dist/tools/analyze-workspace.d.ts +26 -0
  112. package/dist/tools/analyze-workspace.d.ts.map +1 -0
  113. package/dist/tools/analyze-workspace.js +147 -0
  114. package/dist/tools/analyze-workspace.js.map +1 -0
  115. package/dist/tools/capture-diff.d.ts +26 -0
  116. package/dist/tools/capture-diff.d.ts.map +1 -0
  117. package/dist/tools/capture-diff.js +58 -0
  118. package/dist/tools/capture-diff.js.map +1 -0
  119. package/dist/tools/cognition-tools.d.ts +60 -0
  120. package/dist/tools/cognition-tools.d.ts.map +1 -0
  121. package/dist/tools/cognition-tools.js +170 -0
  122. package/dist/tools/cognition-tools.js.map +1 -0
  123. package/dist/tools/config-tools.d.ts +29 -0
  124. package/dist/tools/config-tools.d.ts.map +1 -0
  125. package/dist/tools/config-tools.js +58 -0
  126. package/dist/tools/config-tools.js.map +1 -0
  127. package/dist/tools/confirm-rule.d.ts +32 -0
  128. package/dist/tools/confirm-rule.d.ts.map +1 -0
  129. package/dist/tools/confirm-rule.js +64 -0
  130. package/dist/tools/confirm-rule.js.map +1 -0
  131. package/dist/tools/injection-approval.d.ts +43 -0
  132. package/dist/tools/injection-approval.d.ts.map +1 -0
  133. package/dist/tools/injection-approval.js +102 -0
  134. package/dist/tools/injection-approval.js.map +1 -0
  135. package/dist/tools/list-rules.d.ts +24 -0
  136. package/dist/tools/list-rules.d.ts.map +1 -0
  137. package/dist/tools/list-rules.js +20 -0
  138. package/dist/tools/list-rules.js.map +1 -0
  139. package/dist/tools/query-rules.d.ts +25 -0
  140. package/dist/tools/query-rules.d.ts.map +1 -0
  141. package/dist/tools/query-rules.js +65 -0
  142. package/dist/tools/query-rules.js.map +1 -0
  143. package/dist/tools/resolve-conflict.d.ts +33 -0
  144. package/dist/tools/resolve-conflict.d.ts.map +1 -0
  145. package/dist/tools/resolve-conflict.js +35 -0
  146. package/dist/tools/resolve-conflict.js.map +1 -0
  147. package/dist/types.d.ts +190 -0
  148. package/dist/types.d.ts.map +1 -0
  149. package/dist/types.js +50 -0
  150. package/dist/types.js.map +1 -0
  151. package/docs/api-reference.md +1229 -0
  152. package/docs/community/feedback-playbook.md +94 -0
  153. package/docs/integration-snippets.md +100 -0
  154. package/docs/mcp-integration-guide.md +151 -0
  155. package/docs/phase4-mcp-feedback.md +155 -0
  156. package/docs/trust-governance-protocol.md +72 -0
  157. package/package.json +74 -0
  158. package/prisma/schema.prisma +145 -0
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Copyright 2026 熊高锐
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { existsSync, readFileSync } from "fs";
17
+ import { matchRules } from "../legacy-engine/rule-matcher.js";
18
+ import { truncateRules } from "../legacy-engine/token-controller.js";
19
+ /** Generate a <rules_enforcement> block for system prompt injection (P2 risk mitigation). */
20
+ function generateEnforcementBlock(rules) {
21
+ if (rules.length === 0)
22
+ return "";
23
+ const lines = rules.map(r => `- [${r.type}] "${r.pattern}" → "${r.suggestion}"`);
24
+ return `<rules_enforcement>\n${lines.join("\n")}\n</rules_enforcement>`;
25
+ }
26
+ export async function handleQueryRules(input, ruleRepo, metricRepo) {
27
+ const startTime = performance.now();
28
+ const ext = input.filePath.split(".").pop() ?? "";
29
+ // Read file content for pattern matching; silently continue if file is unavailable
30
+ let fileContent = "";
31
+ try {
32
+ if (existsSync(input.filePath)) {
33
+ fileContent = readFileSync(input.filePath, "utf-8");
34
+ }
35
+ }
36
+ catch { /* non-critical: content-based matching will be skipped */ }
37
+ const ctx = { language: input.language, filePath: input.filePath, fileExtension: "." + ext, projectId: input.projectId, ruleTags: input.tags, fileContent };
38
+ const rules = await ruleRepo.queryByMatch(input.language, "." + ext, input.projectId, input.tags);
39
+ const result = matchRules(rules, ctx, { topK: 10 });
40
+ if (input.taskId) {
41
+ const sess = truncateRules(result.rules.map(s => s.rule), 2000, input.taskId);
42
+ result.rules = result.rules.filter(sr => sess.rules.some(s => s.id === sr.rule.id));
43
+ result.totalTokens = sess.totalTokens;
44
+ result.truncated = sess.truncated;
45
+ }
46
+ for (const sr of result.rules)
47
+ await ruleRepo.incrementMatchCount(sr.rule.id);
48
+ const durationMs = performance.now() - startTime;
49
+ await metricRepo.track("query_rules", { language: input.language, candidates: rules.length, returned: result.rules.length, durationMs });
50
+ // Build enforcement block for system prompt injection (P2)
51
+ const enforcement = generateEnforcementBlock(result.rules.map(sr => ({ type: sr.rule.type, pattern: sr.rule.pattern, suggestion: sr.rule.suggestion })));
52
+ return {
53
+ content: [{
54
+ type: "text",
55
+ text: JSON.stringify({
56
+ rules: result.rules.map(sr => ({ id: sr.rule.id, type: sr.rule.type, pattern: sr.rule.pattern, suggestion: sr.rule.suggestion, score: sr.score, matchReasons: sr.matchReasons })),
57
+ totalTokens: result.totalTokens,
58
+ truncated: result.truncated,
59
+ queryDurationMs: durationMs,
60
+ enforcement,
61
+ }),
62
+ }],
63
+ };
64
+ }
65
+ //# sourceMappingURL=query-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-rules.js","sourceRoot":"","sources":["../../src/tools/query-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Copyright 2026 熊高锐
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ConflictRepo } from "../storage/conflict-repo.js";
17
+ import { RuleRepo } from "../storage/rule-repo.js";
18
+ import { MetricRepo } from "../storage/metric-repo.js";
19
+ import { ResolveConflictInput } from "../types.js";
20
+ export declare function handleResolveConflict(input: ResolveConflictInput, conflictRepo: ConflictRepo, ruleRepo: RuleRepo, metricRepo: MetricRepo): Promise<{
21
+ content: {
22
+ type: string;
23
+ text: string;
24
+ }[];
25
+ isError: boolean;
26
+ } | {
27
+ content: {
28
+ type: string;
29
+ text: string;
30
+ }[];
31
+ isError?: undefined;
32
+ }>;
33
+ //# sourceMappingURL=resolve-conflict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-conflict.d.ts","sourceRoot":"","sources":["../../src/tools/resolve-conflict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU;;;;;;;;;;;;GAa9I"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Copyright 2026 熊高锐
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { applyResolution } from "../conflict/arbitrator.js";
17
+ export async function handleResolveConflict(input, conflictRepo, ruleRepo, metricRepo) {
18
+ const conflict = await conflictRepo.findById(input.conflictId);
19
+ if (!conflict)
20
+ return { content: [{ type: "text", text: JSON.stringify({ error: "Conflict not found" }) }], isError: true };
21
+ const ruleA = await ruleRepo.findById(conflict.ruleAId);
22
+ const ruleB = await ruleRepo.findById(conflict.ruleBId);
23
+ if (!ruleA || !ruleB)
24
+ return { content: [{ type: "text", text: JSON.stringify({ error: "Referenced rule not found" }) }], isError: true };
25
+ const arbitration = applyResolution(ruleA, ruleB, input.resolution);
26
+ await conflictRepo.resolve(input.conflictId, input.resolution);
27
+ if (arbitration)
28
+ await ruleRepo.create({ ...arbitration, projectId: ruleA.projectId });
29
+ if (input.batchAllSession)
30
+ await conflictRepo.setBatchChoice(input.conflictId, "session:" + input.resolution);
31
+ await metricRepo.track("conflict_resolved", { conflictId: input.conflictId, resolution: input.resolution });
32
+ await metricRepo.track("conflict_resolution_distribution", { resolution: input.resolution, conflictId: input.conflictId }).catch(() => { });
33
+ return { content: [{ type: "text", text: JSON.stringify({ success: true, resolution: input.resolution, arbitrationCreated: !!arbitration }) }] };
34
+ }
35
+ //# sourceMappingURL=resolve-conflict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-conflict.js","sourceRoot":"","sources":["../../src/tools/resolve-conflict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAG5D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAA2B,EAAE,YAA0B,EAAE,QAAkB,EAAE,UAAsB;IAC7I,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5H,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1I,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/D,IAAI,WAAW;QAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IACvF,IAAI,KAAK,CAAC,eAAe;QAAE,MAAM,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9G,MAAM,UAAU,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5G,MAAM,UAAU,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC3I,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,kBAAkB,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACnJ,CAAC"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Copyright 2026 熊高锐
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ export interface ASTNode {
17
+ type: string;
18
+ text: string;
19
+ startByte: number;
20
+ endByte: number;
21
+ children: ASTNode[];
22
+ }
23
+ export interface NodeSignature {
24
+ type: string;
25
+ textHash: string;
26
+ childrenCount: number;
27
+ childTypesHash: string;
28
+ structuralHash: string;
29
+ }
30
+ export type AtomicOpType = "UPDATE" | "MOVE" | "INSERT" | "DELETE";
31
+ export interface AtomicOp {
32
+ type: AtomicOpType;
33
+ nodeType: string;
34
+ originalText?: string;
35
+ modifiedText?: string;
36
+ startByte: number;
37
+ endByte: number;
38
+ parentType?: string;
39
+ }
40
+ export interface DiffResult {
41
+ operations: AtomicOp[];
42
+ status: "success" | "fallback" | "failed";
43
+ confidence: "high" | "medium" | "low";
44
+ processedBytes: number;
45
+ durationMs: number;
46
+ error?: string;
47
+ }
48
+ export type RuleScope = "project" | "user" | "global";
49
+ export type RuleType = "replace" | "restructure" | "convention";
50
+ export type RuleConfidence = "high" | "medium" | "low";
51
+ export type RuleSource = "auto" | "manual" | "arbitration";
52
+ export type RuleStatus = "active" | "pending" | "archived";
53
+ export interface RuleSpec {
54
+ type: RuleType;
55
+ pattern: string;
56
+ suggestion: string;
57
+ language: string;
58
+ fileExtensions?: string[];
59
+ tags?: string[];
60
+ category?: string;
61
+ scope?: RuleScope;
62
+ source?: RuleSource;
63
+ confidence?: RuleConfidence;
64
+ }
65
+ export interface Rule extends RuleSpec {
66
+ id: string;
67
+ projectId?: string;
68
+ priority: number;
69
+ confidence: RuleConfidence;
70
+ source: RuleSource;
71
+ status: RuleStatus;
72
+ matchCount: number;
73
+ createdAt: Date;
74
+ updatedAt: Date;
75
+ lastUsedAt?: Date;
76
+ }
77
+ export interface MatchContext {
78
+ language: string;
79
+ filePath: string;
80
+ fileExtension: string;
81
+ projectId?: string;
82
+ ruleTags?: string[];
83
+ currentTime?: Date;
84
+ /** Optional file content for pattern matching. If empty, content-based matching is skipped. */
85
+ fileContent?: string;
86
+ }
87
+ export interface ScoredRule {
88
+ rule: Rule;
89
+ score: number;
90
+ matchReasons: string[];
91
+ }
92
+ export interface MatchResult {
93
+ rules: ScoredRule[];
94
+ totalTokens: number;
95
+ truncated: boolean;
96
+ queryDurationMs: number;
97
+ }
98
+ export type ConflictResolution = "keep_a" | "keep_b" | "merge" | "skip";
99
+ export interface ConflictInfo {
100
+ id: string;
101
+ ruleA: Rule;
102
+ ruleB: Rule;
103
+ scopeKey: string;
104
+ resolution?: ConflictResolution;
105
+ createdAt: Date;
106
+ }
107
+ export interface CaptureDiffInput {
108
+ filePath: string;
109
+ originalContent: string;
110
+ modifiedContent: string;
111
+ language: string;
112
+ projectId?: string;
113
+ }
114
+ export interface QueryRulesInput {
115
+ language: string;
116
+ filePath: string;
117
+ projectId?: string;
118
+ tags?: string[];
119
+ taskId?: string;
120
+ }
121
+ export interface ConfirmRuleInput {
122
+ ruleId: string;
123
+ action: "accept" | "reject" | "edit" | "skip";
124
+ editedPattern?: string;
125
+ editedSuggestion?: string;
126
+ }
127
+ export interface ResolveConflictInput {
128
+ conflictId: string;
129
+ resolution: ConflictResolution;
130
+ batchAllSession?: boolean;
131
+ }
132
+ export interface ListRulesInput {
133
+ language?: string;
134
+ scope?: RuleScope;
135
+ status?: RuleStatus;
136
+ projectId?: string;
137
+ limit?: number;
138
+ offset?: number;
139
+ }
140
+ export declare const DEFAULT_WEIGHTS: {
141
+ readonly typeWeight: 0.4;
142
+ readonly timeWeight: 0.3;
143
+ readonly matchWeight: 0.3;
144
+ readonly timeDecayLambda: 0.01;
145
+ };
146
+ export declare const SCOPE_PRIORITIES: Record<RuleScope, number>;
147
+ export declare const TOKEN_LIMITS: {
148
+ readonly maxInjectionTokens: 2000;
149
+ readonly maxSingleRuleTokens: 100;
150
+ readonly maxRulesPerProject: 2000;
151
+ readonly maxRulesGlobal: 3000;
152
+ };
153
+ export declare const RULE_GENERATION_THRESHOLDS: {
154
+ readonly minDistinctFiles: 3;
155
+ readonly minRepeatsInDays: 5;
156
+ readonly repeatWindowDays: 7;
157
+ };
158
+ export interface AnalyzeWorkspaceInput {
159
+ baseCommit: string;
160
+ headCommit?: string;
161
+ paths?: string[];
162
+ taskId?: string;
163
+ /** Concurrent analysis: max files processed in parallel. Defaults to 5 or CPU core count. */
164
+ concurrency?: number;
165
+ fileContents?: {
166
+ path: string;
167
+ originalContent?: string;
168
+ modifiedContent: string;
169
+ }[];
170
+ }
171
+ export interface AnalyzeResult {
172
+ analyzedFiles: number;
173
+ skippedFiles: number;
174
+ generatedRules: {
175
+ rule: RuleSpec;
176
+ filePath: string;
177
+ }[];
178
+ conflicts: {
179
+ ruleA: RuleSpec;
180
+ ruleB: RuleSpec;
181
+ reason: string;
182
+ }[];
183
+ errors: {
184
+ filePath: string;
185
+ error: string;
186
+ }[];
187
+ }
188
+ /** File extensions to skip in workspace analysis */
189
+ export declare const SKIP_PATTERNS: RegExp[];
190
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1C,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AACtD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,YAAY,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACvD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED,MAAM,WAAW,IAAK,SAAQ,QAAQ;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,cAAc,CAAC;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,+FAA+F;IAC/F,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,IAAI,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAEX,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAItD,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,eAAO,MAAM,0BAA0B;;;;CAI7B,CAAC;AAEX,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6FAA6F;IAC7F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACtF;AAEA,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvD,SAAS,EAAE;QAAE,KAAK,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClE,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C;AAED,oDAAoD;AACpD,eAAO,MAAM,aAAa,UAUzB,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Copyright 2026 熊高锐
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ export const DEFAULT_WEIGHTS = {
17
+ typeWeight: 0.4,
18
+ timeWeight: 0.3,
19
+ matchWeight: 0.3,
20
+ timeDecayLambda: 0.01,
21
+ };
22
+ export const SCOPE_PRIORITIES = {
23
+ project: 1.0,
24
+ user: 0.8,
25
+ global: 0.5,
26
+ };
27
+ export const TOKEN_LIMITS = {
28
+ maxInjectionTokens: 2000,
29
+ maxSingleRuleTokens: 100,
30
+ maxRulesPerProject: 2000,
31
+ maxRulesGlobal: 3000,
32
+ };
33
+ export const RULE_GENERATION_THRESHOLDS = {
34
+ minDistinctFiles: 3,
35
+ minRepeatsInDays: 5,
36
+ repeatWindowDays: 7,
37
+ };
38
+ /** File extensions to skip in workspace analysis */
39
+ export const SKIP_PATTERNS = [
40
+ /node_modules\//,
41
+ /\.next\//,
42
+ /dist\//,
43
+ /\.git\//,
44
+ /\.cache\//,
45
+ /\.turbo\//,
46
+ /build\//,
47
+ /coverage\//,
48
+ /\.(map|d\.ts)$/,
49
+ ];
50
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgJH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,UAAU,EAAE,GAAG;IACf,UAAU,EAAE,GAAG;IACf,WAAW,EAAE,GAAG;IAChB,eAAe,EAAE,IAAI;CACb,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD,OAAO,EAAE,GAAG;IACZ,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kBAAkB,EAAE,IAAI;IACxB,mBAAmB,EAAE,GAAG;IACxB,kBAAkB,EAAE,IAAI;IACxB,cAAc,EAAE,IAAI;CACZ,CAAC;AAEX,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,gBAAgB,EAAE,CAAC;IACnB,gBAAgB,EAAE,CAAC;IACnB,gBAAgB,EAAE,CAAC;CACX,CAAC;AAoBV,oDAAoD;AACpD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,gBAAgB;IAChB,UAAU;IACV,QAAQ;IACR,SAAS;IACT,WAAW;IACX,WAAW;IACX,SAAS;IACT,YAAY;IACZ,gBAAgB;CACjB,CAAC"}