cgraphx 1.1.0 → 1.2.0

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 (81) hide show
  1. package/README.md +0 -1
  2. package/dist/.claude-template/skills/cgraphx/SKILL.md +3 -3
  3. package/dist/.claude-template/skills/cgraphx/agent-prompt.md +1 -1
  4. package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +94 -0
  5. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +403 -0
  6. package/dist/.claude-template/skills/clarify-requirements/SKILL.md +19 -8
  7. package/dist/.claude-template/skills/code-impact-docgen/SKILL.md +186 -176
  8. package/dist/.claude-template/skills/code-impact-docgen/template-design-html.md +357 -0
  9. package/dist/.claude-template/skills/code-impact-docgen/template-design-md.md +164 -0
  10. package/dist/.claude-template/skills/code-impact-init/SKILL.md +47 -47
  11. package/dist/.claude-template/skills/developer-timeline/SKILL.md +9 -0
  12. package/dist/.claude-template/skills/write-api-doc/SKILL.md +317 -0
  13. package/dist/.claude-template/skills/write-api-doc/template-api-html.md +422 -0
  14. package/dist/.claude-template/skills/write-plan/SKILL.md +38 -16
  15. package/dist/.claude-template/skills/write-prd/SKILL.md +32 -8
  16. package/dist/.claude-template/skills/write-spec/SKILL.md +34 -9
  17. package/dist/bin/codegraph.js +0 -100
  18. package/dist/bin/codegraph.js.map +1 -1
  19. package/dist/resolution/index.d.ts.map +1 -1
  20. package/dist/resolution/index.js +13 -0
  21. package/dist/resolution/index.js.map +1 -1
  22. package/dist/resolution/scope-index.d.ts +86 -0
  23. package/dist/resolution/scope-index.d.ts.map +1 -0
  24. package/dist/resolution/scope-index.js +143 -0
  25. package/dist/resolution/scope-index.js.map +1 -0
  26. package/dist/resolution/stdlib-blocklist.d.ts +53 -0
  27. package/dist/resolution/stdlib-blocklist.d.ts.map +1 -0
  28. package/dist/resolution/stdlib-blocklist.js +143 -0
  29. package/dist/resolution/stdlib-blocklist.js.map +1 -0
  30. package/dist/search/ast-helpers.d.ts +42 -0
  31. package/dist/search/ast-helpers.d.ts.map +1 -0
  32. package/dist/search/ast-helpers.js +106 -0
  33. package/dist/search/ast-helpers.js.map +1 -0
  34. package/dist/search/call-sites.d.ts +398 -0
  35. package/dist/search/call-sites.d.ts.map +1 -0
  36. package/dist/search/call-sites.js +1433 -0
  37. package/dist/search/call-sites.js.map +1 -0
  38. package/dist/search/context.d.ts +134 -0
  39. package/dist/search/context.d.ts.map +1 -0
  40. package/dist/search/context.js +575 -0
  41. package/dist/search/context.js.map +1 -0
  42. package/dist/search/impact.d.ts +139 -0
  43. package/dist/search/impact.d.ts.map +1 -0
  44. package/dist/search/impact.js +646 -0
  45. package/dist/search/impact.js.map +1 -0
  46. package/dist/search/related.d.ts +178 -0
  47. package/dist/search/related.d.ts.map +1 -0
  48. package/dist/search/related.js +667 -0
  49. package/dist/search/related.js.map +1 -0
  50. package/dist/search/slice.d.ts +148 -0
  51. package/dist/search/slice.d.ts.map +1 -0
  52. package/dist/search/slice.js +460 -0
  53. package/dist/search/slice.js.map +1 -0
  54. package/dist/search/snr-constants.d.ts +41 -0
  55. package/dist/search/snr-constants.d.ts.map +1 -0
  56. package/dist/search/snr-constants.js +44 -0
  57. package/dist/search/snr-constants.js.map +1 -0
  58. package/dist/search/types.d.ts +28 -0
  59. package/dist/search/types.d.ts.map +1 -0
  60. package/dist/search/types.js +12 -0
  61. package/dist/search/types.js.map +1 -0
  62. package/dist/timeline/cli.d.ts.map +1 -1
  63. package/dist/timeline/cli.js +22 -3
  64. package/dist/timeline/cli.js.map +1 -1
  65. package/dist/timeline/store.d.ts +5 -0
  66. package/dist/timeline/store.d.ts.map +1 -1
  67. package/dist/timeline/store.js +23 -3
  68. package/dist/timeline/store.js.map +1 -1
  69. package/package.json +1 -1
  70. package/scripts/agent-eval/block-cgraphx-and-gitnexus-cli-hook.sh +43 -0
  71. package/scripts/agent-eval/block-cgraphx-cli-hook.sh +32 -0
  72. package/scripts/agent-eval/block-cgraphx-cli-settings.json +16 -0
  73. package/scripts/agent-eval/cli-vs-mcp-3arm.sh +121 -0
  74. package/scripts/agent-eval/multi-tool-eval.sh +171 -0
  75. package/scripts/agent-eval/parse-cli-vs-mcp.mjs +232 -0
  76. package/scripts/agent-eval/parse-multi-tool.mjs +242 -0
  77. package/scripts/agent-eval/subagent-token-cost.py +188 -0
  78. package/dist/.claude-template/skills/code-impact-docgen/template-business-html.md +0 -242
  79. package/dist/.claude-template/skills/code-impact-docgen/template-business-md.md +0 -107
  80. package/dist/.claude-template/skills/code-impact-docgen/template-technical-html.md +0 -205
  81. package/dist/.claude-template/skills/code-impact-docgen/template-technical-md.md +0 -155
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Impact analysis — transitive callers + type references for a method.
3
+ *
4
+ * Spec input (per `docs/features/2026-07-01-impact-command/spec.md`, drafted
5
+ * from clarify-requirements):
6
+ * - Replace the existing indexed-DB `cgraphx impact` command (CLI surface only;
7
+ * the graph API `CodeGraph.getImpactRadius` stays for the MCP server until
8
+ * that's separately deprecated).
9
+ * - Input: `Class#method` or `file:line` (same as `calls --from`).
10
+ * - Output: transitive callers (BFS up to depth N) + type references to the
11
+ * enclosing class (import / extends / implements / field / param / local /
12
+ * cast / annotation / generic). All SNR-ranked, tiered-budget output.
13
+ *
14
+ * Isolation: lives entirely under `src/search/`, imports nothing from
15
+ * `src/graph/`, `src/resolution/`, `src/db/`, `src/mcp/`, or `src/extraction/`
16
+ * (beyond the grammar loader). When the indexed pipeline is eventually removed,
17
+ * this file is untouched.
18
+ */
19
+ import type { Language } from '../types';
20
+ import { type CallSite } from './call-sites';
21
+ export { searchCallSites } from './call-sites';
22
+ export interface ImpactCallSite extends CallSite {
23
+ /** 1 = direct caller, 2 = caller-of-caller, etc. */
24
+ hopDistance: number;
25
+ }
26
+ export type TypeReferenceKind = 'import' | 'extends' | 'implements' | 'field' | 'param' | 'local' | 'cast' | 'annotation' | 'generic' | 'return' | 'other';
27
+ export interface TypeReference {
28
+ /** The class name being referenced (matches input symbol's enclosing class). */
29
+ className: string;
30
+ /** File path relative to projectRoot. */
31
+ filePath: string;
32
+ /** 1-based line number of the type_identifier node. */
33
+ line: number;
34
+ /** 0-based column. */
35
+ column: number;
36
+ kind: TypeReferenceKind;
37
+ /** Enclosing class (where the reference lives), if any. */
38
+ containingClass: string | null;
39
+ /** Enclosing method, if any. */
40
+ containingMethod: string | null;
41
+ /** 1-2 line snippet around the reference. */
42
+ snippet: string;
43
+ /** SNR score (extends/implements high; import low). */
44
+ snrScore: number;
45
+ /** Tier assigned by budget allocator. */
46
+ tier?: 'essential' | 'recommended' | 'optional';
47
+ }
48
+ export interface ImpactOptions {
49
+ /** BFS depth for transitive callers. Default 2 (callers + callers-of-callers). */
50
+ depth?: number;
51
+ /** Top callers per hop (clustering). Default 10. */
52
+ topPerHop?: number;
53
+ /** Top type references overall. Default 15. */
54
+ topTypeRefs?: number;
55
+ /** Char budget for total output. Default 6000 (impact is naturally larger than calls). */
56
+ budget?: number;
57
+ /** Languages to scan. Default ['java', 'kotlin']. */
58
+ languages?: Language[];
59
+ /** Directory globs to exclude. */
60
+ excludeDirs?: string[];
61
+ /** Force recommended tier for every emitted item (alias of --snippet). */
62
+ withSnippet?: boolean;
63
+ /** Force optional tier for every emitted item (--full). */
64
+ full?: boolean;
65
+ }
66
+ export interface ImpactResult {
67
+ /** Original symbol input. */
68
+ symbol: string;
69
+ /** Resolved Class#method. */
70
+ methodQualifiedName: string;
71
+ /** Enclosing class name (the type-refs scan target). */
72
+ enclosingClass: string | null;
73
+ /** File where the method is defined (relative to projectRoot). */
74
+ filePath: string;
75
+ /** Method body range. */
76
+ startLine: number;
77
+ endLine: number;
78
+ /** BFS depth actually reached (may be less than requested if no more callers). */
79
+ depthReached: number;
80
+ /** Distinct methods in the caller chain (excluding the start method). */
81
+ totalCallers: number;
82
+ /** Distinct files where the enclosing class is referenced. */
83
+ totalTypeRefFiles: number;
84
+ /** Total type references found. */
85
+ totalTypeRefs: number;
86
+ callers: ImpactCallSite[];
87
+ typeReferences: TypeReference[];
88
+ omitted: {
89
+ callersPrunedByTopPerHop: number;
90
+ typeRefsPrunedByTopK: number;
91
+ truncatedByBudget: number;
92
+ };
93
+ }
94
+ /**
95
+ * SNR score a transitive caller. Reuses computeSnrScore for the call-site
96
+ * itself, then applies hop-distance decay (hop 1 = 1.0, hop 2 = 0.6,
97
+ * hop 3 = 0.36, ...). Direct callers always outrank indirect ones.
98
+ */
99
+ export declare function computeImpactCallSiteSnr(site: ImpactCallSite): number;
100
+ /**
101
+ * Impact SNR breakdown — reuses the call-site breakdown then layers on
102
+ * hop-distance decay. Used by the `--explain` flag on `impact`.
103
+ *
104
+ * `base` is the pre-decay score (`computeSnrScore(site)`), `decayMultiplier`
105
+ * is the hop factor (1.0 at hop 1, 0.6 at hop 2, ...), `total` is
106
+ * `Math.round(base * decayMultiplier)`. `matchedRules` is forwarded from
107
+ * the underlying call-site breakdown so the agent sees which receiver /
108
+ * method rules fired.
109
+ */
110
+ export interface ImpactSnrBreakdown {
111
+ base: number;
112
+ decayMultiplier: number;
113
+ total: number;
114
+ matchedRules: string[];
115
+ /** The underlying call-site breakdown (receiver / method split). */
116
+ receiver: number;
117
+ method: number;
118
+ }
119
+ export declare function computeImpactSnrBreakdown(site: ImpactCallSite): ImpactSnrBreakdown;
120
+ export declare function searchImpact(projectRoot: string, symbol: string, options?: ImpactOptions): Promise<ImpactResult>;
121
+ interface ImpactTieredResult {
122
+ tieredCallers: ImpactCallSite[];
123
+ tieredTypeRefs: TypeReference[];
124
+ truncatedByBudget: number;
125
+ }
126
+ /**
127
+ * Two-list tiered budget: allocate budget across callers AND type references.
128
+ * Callers get essential tier first (in SNR order), then type refs get essential
129
+ * tier. If budget remains, recommended tier fills in SNR order across both
130
+ * lists. Same for optional.
131
+ */
132
+ export declare function applyImpactTieredBudget(callers: ImpactCallSite[], typeRefs: TypeReference[], budget: number, opts?: {
133
+ forceRecommended?: boolean;
134
+ forceOptional?: boolean;
135
+ }): ImpactTieredResult;
136
+ export declare function formatImpactResult(result: ImpactResult, options?: {
137
+ explain?: boolean;
138
+ }): string;
139
+ //# sourceMappingURL=impact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact.d.ts","sourceRoot":"","sources":["../../src/search/impact.ts"],"names":[],"mappings":"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"}