@spikedpunch/mast 0.1.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 (257) hide show
  1. package/LICENSE +21 -0
  2. package/MAST_SPEC.md +2926 -0
  3. package/README.md +842 -0
  4. package/assets/skill.md +45 -0
  5. package/dist/ast/extract.d.ts +65 -0
  6. package/dist/ast/extract.d.ts.map +1 -0
  7. package/dist/ast/extract.js +147 -0
  8. package/dist/ast/extract.js.map +1 -0
  9. package/dist/ast/extractor.d.ts +85 -0
  10. package/dist/ast/extractor.d.ts.map +1 -0
  11. package/dist/ast/extractor.js +2 -0
  12. package/dist/ast/extractor.js.map +1 -0
  13. package/dist/ast/extractors/markdown.d.ts +40 -0
  14. package/dist/ast/extractors/markdown.d.ts.map +1 -0
  15. package/dist/ast/extractors/markdown.js +175 -0
  16. package/dist/ast/extractors/markdown.js.map +1 -0
  17. package/dist/ast/extractors/typescript.d.ts +179 -0
  18. package/dist/ast/extractors/typescript.d.ts.map +1 -0
  19. package/dist/ast/extractors/typescript.js +1439 -0
  20. package/dist/ast/extractors/typescript.js.map +1 -0
  21. package/dist/ast/parser.d.ts +5 -0
  22. package/dist/ast/parser.d.ts.map +1 -0
  23. package/dist/ast/parser.js +21 -0
  24. package/dist/ast/parser.js.map +1 -0
  25. package/dist/ast/types.d.ts +586 -0
  26. package/dist/ast/types.d.ts.map +1 -0
  27. package/dist/ast/types.js +3 -0
  28. package/dist/ast/types.js.map +1 -0
  29. package/dist/cli/docs-cmd.d.ts +22 -0
  30. package/dist/cli/docs-cmd.d.ts.map +1 -0
  31. package/dist/cli/docs-cmd.js +100 -0
  32. package/dist/cli/docs-cmd.js.map +1 -0
  33. package/dist/cli/index-cmd.d.ts +72 -0
  34. package/dist/cli/index-cmd.d.ts.map +1 -0
  35. package/dist/cli/index-cmd.js +263 -0
  36. package/dist/cli/index-cmd.js.map +1 -0
  37. package/dist/cli/index.d.ts +3 -0
  38. package/dist/cli/index.d.ts.map +1 -0
  39. package/dist/cli/index.js +4 -0
  40. package/dist/cli/index.js.map +1 -0
  41. package/dist/cli/init.d.ts +14 -0
  42. package/dist/cli/init.d.ts.map +1 -0
  43. package/dist/cli/init.js +64 -0
  44. package/dist/cli/init.js.map +1 -0
  45. package/dist/cli/install-hooks.d.ts +3 -0
  46. package/dist/cli/install-hooks.d.ts.map +1 -0
  47. package/dist/cli/install-hooks.js +34 -0
  48. package/dist/cli/install-hooks.js.map +1 -0
  49. package/dist/cli/metrics-cmd.d.ts +3 -0
  50. package/dist/cli/metrics-cmd.d.ts.map +1 -0
  51. package/dist/cli/metrics-cmd.js +164 -0
  52. package/dist/cli/metrics-cmd.js.map +1 -0
  53. package/dist/cli/program.d.ts +14 -0
  54. package/dist/cli/program.d.ts.map +1 -0
  55. package/dist/cli/program.js +44 -0
  56. package/dist/cli/program.js.map +1 -0
  57. package/dist/cli/query.d.ts +46 -0
  58. package/dist/cli/query.d.ts.map +1 -0
  59. package/dist/cli/query.js +153 -0
  60. package/dist/cli/query.js.map +1 -0
  61. package/dist/cli/search-cmd.d.ts +33 -0
  62. package/dist/cli/search-cmd.d.ts.map +1 -0
  63. package/dist/cli/search-cmd.js +114 -0
  64. package/dist/cli/search-cmd.js.map +1 -0
  65. package/dist/cli/serve.d.ts +3 -0
  66. package/dist/cli/serve.d.ts.map +1 -0
  67. package/dist/cli/serve.js +19 -0
  68. package/dist/cli/serve.js.map +1 -0
  69. package/dist/cli/skill-install.d.ts +39 -0
  70. package/dist/cli/skill-install.d.ts.map +1 -0
  71. package/dist/cli/skill-install.js +57 -0
  72. package/dist/cli/skill-install.js.map +1 -0
  73. package/dist/cli/status.d.ts +35 -0
  74. package/dist/cli/status.d.ts.map +1 -0
  75. package/dist/cli/status.js +117 -0
  76. package/dist/cli/status.js.map +1 -0
  77. package/dist/cli/upgrade-cmd.d.ts +48 -0
  78. package/dist/cli/upgrade-cmd.d.ts.map +1 -0
  79. package/dist/cli/upgrade-cmd.js +129 -0
  80. package/dist/cli/upgrade-cmd.js.map +1 -0
  81. package/dist/cli/version.d.ts +3 -0
  82. package/dist/cli/version.d.ts.map +1 -0
  83. package/dist/cli/version.js +19 -0
  84. package/dist/cli/version.js.map +1 -0
  85. package/dist/env.d.ts +17 -0
  86. package/dist/env.d.ts.map +1 -0
  87. package/dist/env.js +17 -0
  88. package/dist/env.js.map +1 -0
  89. package/dist/graph/checker-resolver.d.ts +156 -0
  90. package/dist/graph/checker-resolver.d.ts.map +1 -0
  91. package/dist/graph/checker-resolver.js +458 -0
  92. package/dist/graph/checker-resolver.js.map +1 -0
  93. package/dist/graph/db.d.ts +318 -0
  94. package/dist/graph/db.d.ts.map +1 -0
  95. package/dist/graph/db.js +266 -0
  96. package/dist/graph/db.js.map +1 -0
  97. package/dist/graph/index.d.ts +4 -0
  98. package/dist/graph/index.d.ts.map +1 -0
  99. package/dist/graph/index.js +5 -0
  100. package/dist/graph/index.js.map +1 -0
  101. package/dist/graph/local-type-env.d.ts +45 -0
  102. package/dist/graph/local-type-env.d.ts.map +1 -0
  103. package/dist/graph/local-type-env.js +59 -0
  104. package/dist/graph/local-type-env.js.map +1 -0
  105. package/dist/graph/path-range.d.ts +40 -0
  106. package/dist/graph/path-range.d.ts.map +1 -0
  107. package/dist/graph/path-range.js +42 -0
  108. package/dist/graph/path-range.js.map +1 -0
  109. package/dist/graph/populate.d.ts +263 -0
  110. package/dist/graph/populate.d.ts.map +1 -0
  111. package/dist/graph/populate.js +984 -0
  112. package/dist/graph/populate.js.map +1 -0
  113. package/dist/graph/queries.d.ts +114 -0
  114. package/dist/graph/queries.d.ts.map +1 -0
  115. package/dist/graph/queries.js +415 -0
  116. package/dist/graph/queries.js.map +1 -0
  117. package/dist/graph/sqliteBatch.d.ts +48 -0
  118. package/dist/graph/sqliteBatch.d.ts.map +1 -0
  119. package/dist/graph/sqliteBatch.js +93 -0
  120. package/dist/graph/sqliteBatch.js.map +1 -0
  121. package/dist/indexer/freshness.d.ts +48 -0
  122. package/dist/indexer/freshness.d.ts.map +1 -0
  123. package/dist/indexer/freshness.js +72 -0
  124. package/dist/indexer/freshness.js.map +1 -0
  125. package/dist/indexer/import-resolver.d.ts +50 -0
  126. package/dist/indexer/import-resolver.d.ts.map +1 -0
  127. package/dist/indexer/import-resolver.js +318 -0
  128. package/dist/indexer/import-resolver.js.map +1 -0
  129. package/dist/indexer/index.d.ts +249 -0
  130. package/dist/indexer/index.d.ts.map +1 -0
  131. package/dist/indexer/index.js +560 -0
  132. package/dist/indexer/index.js.map +1 -0
  133. package/dist/indexer/walker.d.ts +60 -0
  134. package/dist/indexer/walker.d.ts.map +1 -0
  135. package/dist/indexer/walker.js +128 -0
  136. package/dist/indexer/walker.js.map +1 -0
  137. package/dist/indexer/watcher.d.ts +80 -0
  138. package/dist/indexer/watcher.d.ts.map +1 -0
  139. package/dist/indexer/watcher.js +151 -0
  140. package/dist/indexer/watcher.js.map +1 -0
  141. package/dist/mcp/context.d.ts +23 -0
  142. package/dist/mcp/context.d.ts.map +1 -0
  143. package/dist/mcp/context.js +2 -0
  144. package/dist/mcp/context.js.map +1 -0
  145. package/dist/mcp/register-tools.d.ts +21 -0
  146. package/dist/mcp/register-tools.d.ts.map +1 -0
  147. package/dist/mcp/register-tools.js +42 -0
  148. package/dist/mcp/register-tools.js.map +1 -0
  149. package/dist/mcp/server.d.ts +58 -0
  150. package/dist/mcp/server.d.ts.map +1 -0
  151. package/dist/mcp/server.js +177 -0
  152. package/dist/mcp/server.js.map +1 -0
  153. package/dist/mcp/staleness.d.ts +72 -0
  154. package/dist/mcp/staleness.d.ts.map +1 -0
  155. package/dist/mcp/staleness.js +213 -0
  156. package/dist/mcp/staleness.js.map +1 -0
  157. package/dist/mcp/startup.d.ts +40 -0
  158. package/dist/mcp/startup.d.ts.map +1 -0
  159. package/dist/mcp/startup.js +114 -0
  160. package/dist/mcp/startup.js.map +1 -0
  161. package/dist/mcp/tools/_helpers.d.ts +26 -0
  162. package/dist/mcp/tools/_helpers.d.ts.map +1 -0
  163. package/dist/mcp/tools/_helpers.js +54 -0
  164. package/dist/mcp/tools/_helpers.js.map +1 -0
  165. package/dist/mcp/tools/callers.d.ts +4 -0
  166. package/dist/mcp/tools/callers.d.ts.map +1 -0
  167. package/dist/mcp/tools/callers.js +112 -0
  168. package/dist/mcp/tools/callers.js.map +1 -0
  169. package/dist/mcp/tools/dependencies.d.ts +4 -0
  170. package/dist/mcp/tools/dependencies.d.ts.map +1 -0
  171. package/dist/mcp/tools/dependencies.js +36 -0
  172. package/dist/mcp/tools/dependencies.js.map +1 -0
  173. package/dist/mcp/tools/efficiency.d.ts +4 -0
  174. package/dist/mcp/tools/efficiency.d.ts.map +1 -0
  175. package/dist/mcp/tools/efficiency.js +39 -0
  176. package/dist/mcp/tools/efficiency.js.map +1 -0
  177. package/dist/mcp/tools/exports.d.ts +4 -0
  178. package/dist/mcp/tools/exports.d.ts.map +1 -0
  179. package/dist/mcp/tools/exports.js +56 -0
  180. package/dist/mcp/tools/exports.js.map +1 -0
  181. package/dist/mcp/tools/implementors.d.ts +4 -0
  182. package/dist/mcp/tools/implementors.d.ts.map +1 -0
  183. package/dist/mcp/tools/implementors.js +47 -0
  184. package/dist/mcp/tools/implementors.js.map +1 -0
  185. package/dist/mcp/tools/project-skeleton.d.ts +4 -0
  186. package/dist/mcp/tools/project-skeleton.d.ts.map +1 -0
  187. package/dist/mcp/tools/project-skeleton.js +61 -0
  188. package/dist/mcp/tools/project-skeleton.js.map +1 -0
  189. package/dist/mcp/tools/reindex.d.ts +14 -0
  190. package/dist/mcp/tools/reindex.d.ts.map +1 -0
  191. package/dist/mcp/tools/reindex.js +32 -0
  192. package/dist/mcp/tools/reindex.js.map +1 -0
  193. package/dist/mcp/tools/rename-impact.d.ts +4 -0
  194. package/dist/mcp/tools/rename-impact.d.ts.map +1 -0
  195. package/dist/mcp/tools/rename-impact.js +124 -0
  196. package/dist/mcp/tools/rename-impact.js.map +1 -0
  197. package/dist/mcp/tools/search.d.ts +4 -0
  198. package/dist/mcp/tools/search.d.ts.map +1 -0
  199. package/dist/mcp/tools/search.js +69 -0
  200. package/dist/mcp/tools/search.js.map +1 -0
  201. package/dist/mcp/tools/signature.d.ts +4 -0
  202. package/dist/mcp/tools/signature.d.ts.map +1 -0
  203. package/dist/mcp/tools/signature.js +127 -0
  204. package/dist/mcp/tools/signature.js.map +1 -0
  205. package/dist/mcp/tools/status.d.ts +4 -0
  206. package/dist/mcp/tools/status.d.ts.map +1 -0
  207. package/dist/mcp/tools/status.js +30 -0
  208. package/dist/mcp/tools/status.js.map +1 -0
  209. package/dist/search/declex.d.ts +109 -0
  210. package/dist/search/declex.d.ts.map +1 -0
  211. package/dist/search/declex.js +242 -0
  212. package/dist/search/declex.js.map +1 -0
  213. package/dist/search/fts.d.ts +77 -0
  214. package/dist/search/fts.d.ts.map +1 -0
  215. package/dist/search/fts.js +223 -0
  216. package/dist/search/fts.js.map +1 -0
  217. package/dist/search/fused.d.ts +110 -0
  218. package/dist/search/fused.d.ts.map +1 -0
  219. package/dist/search/fused.js +323 -0
  220. package/dist/search/fused.js.map +1 -0
  221. package/dist/search/potential-matches.d.ts +88 -0
  222. package/dist/search/potential-matches.d.ts.map +1 -0
  223. package/dist/search/potential-matches.js +83 -0
  224. package/dist/search/potential-matches.js.map +1 -0
  225. package/dist/search/scope.d.ts +66 -0
  226. package/dist/search/scope.d.ts.map +1 -0
  227. package/dist/search/scope.js +71 -0
  228. package/dist/search/scope.js.map +1 -0
  229. package/dist/store/config.d.ts +57 -0
  230. package/dist/store/config.d.ts.map +1 -0
  231. package/dist/store/config.js +208 -0
  232. package/dist/store/config.js.map +1 -0
  233. package/dist/store/lock.d.ts +101 -0
  234. package/dist/store/lock.d.ts.map +1 -0
  235. package/dist/store/lock.js +182 -0
  236. package/dist/store/lock.js.map +1 -0
  237. package/dist/store/lockMetrics.d.ts +52 -0
  238. package/dist/store/lockMetrics.d.ts.map +1 -0
  239. package/dist/store/lockMetrics.js +29 -0
  240. package/dist/store/lockMetrics.js.map +1 -0
  241. package/dist/store/sqliteChunkStore.d.ts +44 -0
  242. package/dist/store/sqliteChunkStore.d.ts.map +1 -0
  243. package/dist/store/sqliteChunkStore.js +135 -0
  244. package/dist/store/sqliteChunkStore.js.map +1 -0
  245. package/dist/telemetry/lockMetricsSummary.d.ts +42 -0
  246. package/dist/telemetry/lockMetricsSummary.d.ts.map +1 -0
  247. package/dist/telemetry/lockMetricsSummary.js +139 -0
  248. package/dist/telemetry/lockMetricsSummary.js.map +1 -0
  249. package/dist/telemetry/metrics.d.ts +140 -0
  250. package/dist/telemetry/metrics.d.ts.map +1 -0
  251. package/dist/telemetry/metrics.js +312 -0
  252. package/dist/telemetry/metrics.js.map +1 -0
  253. package/dist/telemetry/tokenizer.d.ts +125 -0
  254. package/dist/telemetry/tokenizer.d.ts.map +1 -0
  255. package/dist/telemetry/tokenizer.js +174 -0
  256. package/dist/telemetry/tokenizer.js.map +1 -0
  257. package/package.json +81 -0
@@ -0,0 +1,586 @@
1
+ /** All domain types shared across MAST subsystems. */
2
+ export type ChunkType = 'function' | 'method' | 'class_shell' | 'interface' | 'type' | 'export' | 'block'
3
+ /** Markdown document section (heading-based chunking, §10.1). */
4
+ | 'doc';
5
+ export type Language = 'typescript' | 'javascript' | 'markdown';
6
+ /**
7
+ * A single indexed code chunk — maps to one AST declaration (or a sub-chunk
8
+ * when the declaration exceeds `chunk_split_threshold` lines).
9
+ *
10
+ * `start_line` / `end_line` always reflect AST declaration boundaries.
11
+ * `content` may extend `context_lines` beyond those boundaries for display.
12
+ */
13
+ export interface Chunk {
14
+ readonly chunk_id: string;
15
+ readonly file_path: string;
16
+ readonly start_line: number;
17
+ readonly end_line: number;
18
+ readonly content: string;
19
+ readonly chunk_type: ChunkType;
20
+ readonly symbol_name: string | null;
21
+ /** Enclosing class name for `method` chunks; null for all others. */
22
+ readonly parent_symbol: string | null;
23
+ readonly is_exported: boolean;
24
+ readonly language: Language;
25
+ readonly file_mtime: number;
26
+ /**
27
+ * sha256 of the symbol's signature (declaration up to, not including, the
28
+ * body). Transient: computed from the AST during extraction and consumed by
29
+ * `symbolsFromChunks`; NOT persisted to chunks.lance. Undefined on
30
+ * `block` chunks and on chunks reconstructed from the store.
31
+ */
32
+ readonly declaration_hash?: string;
33
+ /**
34
+ * sha256 of the symbol's body. For `class_shell`, the sorted member
35
+ * signatures (no method bodies), per §10.1. Transient — see `declaration_hash`.
36
+ */
37
+ readonly body_hash?: string;
38
+ }
39
+ /** Stability hashes stored per chunk for incremental reindex optimisation. */
40
+ export interface ChunkHashes {
41
+ readonly chunk_id: string;
42
+ /** sha256 of signature text only (excludes body). */
43
+ readonly declaration_hash: string;
44
+ /** sha256 of body text; for class_shell, over sorted member signatures. */
45
+ readonly body_hash: string;
46
+ }
47
+ export interface SymbolRecord {
48
+ readonly name: string;
49
+ /** `function | class | interface | type | const | method` */
50
+ readonly kind: string;
51
+ readonly line: number;
52
+ readonly isExported: boolean;
53
+ /** sha256 of signature text only (excludes body). */
54
+ readonly declarationHash: string | null;
55
+ /** sha256 of body text; for class_shell, over sorted member signatures. */
56
+ readonly bodyHash: string | null;
57
+ }
58
+ export interface ImportRecord {
59
+ readonly module: string;
60
+ readonly symbols: readonly string[];
61
+ readonly isExternal: boolean;
62
+ /** Resolved relative path for intra-monorepo imports; null for external. */
63
+ readonly resolvedPath: string | null;
64
+ }
65
+ export interface EdgeRecord {
66
+ readonly fromName: string;
67
+ readonly toName: string;
68
+ readonly edgeType: string;
69
+ /** How a POTENTIAL_CALL receiver was statically linked (§10.3.1). */
70
+ readonly resolution?: CallerResolution;
71
+ /** 1-indexed source line of the call site (POTENTIAL_CALL only). */
72
+ readonly callLine?: number;
73
+ /** Trimmed source text of the call-site line (POTENTIAL_CALL only). */
74
+ readonly context?: string;
75
+ /**
76
+ * RE_EXPORTS only: the re-export's own module specifier resolved to a real
77
+ * indexed file (null for an external/unresolvable module). This is the file
78
+ * evidence `insertEdges` must use to pick the target when two files export a
79
+ * same-named symbol — without it, resolution falls back to a bare-name match
80
+ * across the whole graph, which races on insertion order (the RE_EXPORTS
81
+ * sibling of the POTENTIAL_CALL false-green fixed in `populate.ts`;
82
+ * IMPLEMENTATION_PLAN_VEXP.md §P, "Sibling false-green"). Undefined for
83
+ * every other edge type.
84
+ */
85
+ readonly toResolvedPath?: string | null;
86
+ }
87
+ export interface MastConfig {
88
+ readonly state_dir: string;
89
+ readonly project_root: string;
90
+ readonly file_extensions: readonly string[];
91
+ readonly exclude_patterns: readonly string[];
92
+ /** Reciprocal Rank Fusion constant k (default 60). */
93
+ readonly rrf_k: number;
94
+ /**
95
+ * F18 kill-switch (M2 decision memo condition 3): fuses the declaration-exact
96
+ * ranker (ranker D, `src/search/declex.ts`) into `mast_search` ranking as a
97
+ * third RRF input. Default true. Set false to restore pre-F18 ranking
98
+ * without a code change.
99
+ */
100
+ readonly declaration_exact_ranker: boolean;
101
+ /** Lines above which a declaration is split into overlapping sub-chunks. */
102
+ readonly chunk_split_threshold: number;
103
+ /** Source lines before/after AST boundaries included in stored content. */
104
+ readonly context_lines: number;
105
+ /**
106
+ * Maximum ATX heading level that starts a new markdown doc chunk (§10.1).
107
+ * Headings deeper than this fold into their enclosing section. Default 2 —
108
+ * "one chunk per `##` section".
109
+ */
110
+ readonly markdown_heading_depth: number;
111
+ }
112
+ export interface IndexMeta {
113
+ schema_version: string;
114
+ last_indexed: string | null;
115
+ file_count: number;
116
+ chunk_count: number;
117
+ parse_errors?: number;
118
+ write_errors?: number;
119
+ seed_commit?: string;
120
+ }
121
+ /** Attached to every read-tool response to track token savings. */
122
+ export interface ToolStats {
123
+ readonly tool: string;
124
+ readonly tokens_returned: number;
125
+ readonly tokens_full_file_upper_bound: number;
126
+ readonly files_referenced: readonly string[];
127
+ /** 1 - (tokens_returned / tokens_full_file_upper_bound) */
128
+ readonly efficiency_ratio: number;
129
+ readonly duration_ms: number;
130
+ }
131
+ export interface SearchInput {
132
+ readonly query: string;
133
+ readonly limit?: number;
134
+ readonly language?: Language | null;
135
+ readonly file_pattern?: string | null;
136
+ readonly chunk_type?: ChunkType | null;
137
+ readonly only_exported?: boolean;
138
+ }
139
+ /**
140
+ * Presentation hint attached by the post-RRF shell/method dedup pass
141
+ * (§9 mast_search). Exactly one shape:
142
+ * - a surviving `method` whose class shell was suppressed carries
143
+ * `{ parent_symbol }` — "the class outline also matched";
144
+ * - a surviving `class_shell` whose methods were suppressed carries
145
+ * `{ methods_matched }` — the qualified method names that also matched.
146
+ */
147
+ export type RelatedHint = {
148
+ readonly parent_symbol: string;
149
+ } | {
150
+ readonly methods_matched: readonly string[];
151
+ };
152
+ export interface SearchResult {
153
+ readonly file_path: string;
154
+ readonly start_line: number;
155
+ readonly end_line: number;
156
+ readonly content: string;
157
+ readonly chunk_type: ChunkType;
158
+ readonly symbol_name: string | null;
159
+ readonly parent_symbol: string | null;
160
+ readonly is_exported: boolean;
161
+ readonly match_score: number | null;
162
+ readonly rank: number;
163
+ readonly match_snippet: string | null;
164
+ /** Present only when the shell/method dedup pass suppressed a counterpart. */
165
+ readonly related?: RelatedHint;
166
+ /**
167
+ * Stat-and-flag staleness (F7, split into its own field by C1). Set when
168
+ * this result's `file_path` stat'd newer-on-disk than its indexed mtime,
169
+ * or the stat failed (file deleted/renamed) — `mast_search` can return
170
+ * results spanning dozens of files, so unlike the single-file JIT-refresh
171
+ * tools (whose `file_busy_returning_stale_cache` field means a refresh was
172
+ * ATTEMPTED and lost to contention) no refresh is ever attempted here: no
173
+ * lock is taken, no re-parse happens, only a `statSync`. Treat this
174
+ * result's line coordinates as untrustworthy until a `mast_reindex` call,
175
+ * or any JIT-refreshing tool call against the file, heals it — staleness
176
+ * is NOT self-healing across repeated `mast_search` calls on its own.
177
+ * Omitted when false, never present-and-false. See MAST_SPEC.md §9.0's
178
+ * "Confidence signals (C1)" table for how this relates to the other
179
+ * confidence fields.
180
+ */
181
+ readonly stale?: true;
182
+ }
183
+ /**
184
+ * A "did you mean" candidate surfaced when a search returns no results.
185
+ * Advisory only — suggestions are never counted as results (§9 mast_search).
186
+ */
187
+ export interface SearchSuggestion {
188
+ readonly symbol: string;
189
+ readonly file_path: string;
190
+ /**
191
+ * Why this symbol is a candidate — e.g. "similar symbol name",
192
+ * "matched split query terms", "identifier near-miss".
193
+ */
194
+ readonly reason: string;
195
+ }
196
+ export interface SearchResponse {
197
+ readonly results: readonly SearchResult[];
198
+ /**
199
+ * Present (possibly empty) only when `results` is empty — the zero-result
200
+ * assist path ran. Omitted entirely when results were found.
201
+ */
202
+ readonly suggestions?: readonly SearchSuggestion[];
203
+ /**
204
+ * M6 (`eval/GITNEXUS_COMPARISON.md` §13.8 item 4, MAST_SPEC.md §9.0 "Empty-index
205
+ * signal"). Present (`true`) only when the primary result set (`results`
206
+ * here) came back empty AND the `chunks` table has zero rows at that
207
+ * moment — i.e. this response's emptiness is explained (at least in part)
208
+ * by "nothing is indexed yet, or you pointed at the wrong state dir", not
209
+ * merely "no match". An ordinary zero-result query against a populated
210
+ * index never carries this flag. Independent of `suggestions` — a truly
211
+ * empty index yields no suggestions either, but the two fields are not
212
+ * coupled; either may be present without the other. Omitted entirely when
213
+ * false, never present-and-false (the `stale` field's omitted-when-false
214
+ * convention, §9.0). Computed by `mcp/tools/_helpers.ts`'s `isIndexEmpty`,
215
+ * called only on the empty-result path so a non-empty response pays
216
+ * nothing extra.
217
+ */
218
+ readonly index_empty?: true;
219
+ readonly _stats: ToolStats;
220
+ }
221
+ export interface ProjectSkeletonInput {
222
+ readonly directory?: string | null;
223
+ readonly max_depth?: number;
224
+ readonly file_pattern?: string | null;
225
+ }
226
+ export interface FileSkeleton {
227
+ readonly file_path: string;
228
+ readonly exports: readonly string[];
229
+ }
230
+ export interface ProjectSkeletonResponse {
231
+ readonly files: readonly FileSkeleton[];
232
+ /** @see {@link SearchResponse.index_empty} — same empty-index signal, keyed on `files`. */
233
+ readonly index_empty?: true;
234
+ readonly _stats: ToolStats;
235
+ }
236
+ export interface ExportsInput {
237
+ readonly file_path: string;
238
+ }
239
+ export interface ExportEntry {
240
+ readonly name: string;
241
+ readonly kind: string;
242
+ readonly signature: string;
243
+ readonly line: number;
244
+ readonly doc: string | null;
245
+ }
246
+ export interface ExportsResponse {
247
+ readonly file_path: string;
248
+ readonly exports: readonly ExportEntry[];
249
+ /**
250
+ * §9.0 TOCTOU policy. `mast_exports` describes exactly one file and JITs it
251
+ * with a single `checkAndRefreshIfStale` call, so staleness is a property
252
+ * of the whole response, not of any one `ExportEntry` — set here rather
253
+ * than per-entry. Present (`true`) only when the file was stale and the
254
+ * JIT re-parse could not acquire `structure.lock`; omitted otherwise.
255
+ */
256
+ readonly file_busy_returning_stale_cache?: true;
257
+ /** @see {@link SearchResponse.index_empty} — same empty-index signal, keyed on `exports`. */
258
+ readonly index_empty?: true;
259
+ readonly _stats: ToolStats;
260
+ }
261
+ export interface SignatureInput {
262
+ readonly symbol: string;
263
+ readonly file_path?: string | null;
264
+ }
265
+ export interface ParamEntry {
266
+ readonly name: string;
267
+ readonly type: string;
268
+ }
269
+ export interface TypeContextEntry {
270
+ readonly name: string;
271
+ readonly signature: string;
272
+ readonly file_path: string;
273
+ readonly line: number;
274
+ readonly truncated: boolean;
275
+ }
276
+ export interface SignatureResult {
277
+ readonly symbol: string;
278
+ readonly file_path: string;
279
+ readonly line: number;
280
+ readonly signature: string;
281
+ readonly doc: string | null;
282
+ readonly params: readonly ParamEntry[];
283
+ readonly return_type: string | null;
284
+ readonly type_context: readonly TypeContextEntry[];
285
+ readonly file_busy_returning_stale_cache?: true;
286
+ }
287
+ export interface SignatureResponse {
288
+ readonly results: readonly SignatureResult[];
289
+ /**
290
+ * §9.0 TOCTOU policy, empty-result case (F14). The busy signal normally
291
+ * rides on each {@link SignatureResult}; with zero results it has no
292
+ * carrier, and "no results" from a stale, un-refreshable file would read
293
+ * as "symbol doesn't exist". Present (`true`) only when a
294
+ * `file_path`-narrowed query returned no results AND that file's JIT
295
+ * re-parse could not acquire `structure.lock`; omitted otherwise —
296
+ * non-empty responses carry the flag per-result, never here.
297
+ */
298
+ readonly file_busy_returning_stale_cache?: true;
299
+ /** @see {@link SearchResponse.index_empty} — same empty-index signal, keyed on `results`. Independent of the `file_busy_returning_stale_cache` envelope flag above; either, both, or neither may be present. */
300
+ readonly index_empty?: true;
301
+ readonly _stats: ToolStats;
302
+ }
303
+ export interface CallersInput {
304
+ readonly symbol: string;
305
+ readonly file_path?: string | null;
306
+ readonly transitive?: boolean;
307
+ readonly include_potential?: boolean;
308
+ }
309
+ export type CallerResolution = 'import' | 'field_type' | 'parameter_type' | 'new_expression' | 'same_file'
310
+ /**
311
+ * Additive (Stage 1.2, `mast index --checker`): the tree-sitter heuristic
312
+ * left this call site as a `potential_match` (no static resolution rule
313
+ * applied), and an opt-in TypeScript-checker pass resolved it to the
314
+ * queried declaration via `ts.TypeChecker.getSymbolAtLocation` (following
315
+ * alias chains). See MAST_SPEC §10.3.2.
316
+ */
317
+ | 'checker'
318
+ /**
319
+ * Additive (F4, Stage 3): `this.foo()` inside a class method body,
320
+ * resolved to the enclosing class's qualified method via a receiver
321
+ * binding seeded per method (`emitClassEdges`), not inference. Excludes
322
+ * calls inside a nested non-arrow function/generator body — those have
323
+ * their own dynamic `this` and are never seeded (§10.3.1). See
324
+ * MAST_SPEC.md §10.3.1 "Method calls on super and this".
325
+ */
326
+ | 'this_method'
327
+ /**
328
+ * Additive (F4, Stage 3): `super.foo()` inside a class method body,
329
+ * resolved to the parent class named in the `extends` clause. Only seeded
330
+ * when an `extends` clause exists; a class with no parent never produces
331
+ * this resolution (falls to the `identifier_fts` potential set instead).
332
+ * See MAST_SPEC.md §10.3.1 "Method calls on super and this".
333
+ */
334
+ | 'super_method';
335
+ export interface VerifiedCaller {
336
+ readonly file_path: string;
337
+ readonly line: number;
338
+ readonly caller_symbol: string;
339
+ readonly context: string;
340
+ readonly resolution: CallerResolution;
341
+ readonly file_busy_returning_stale_cache?: true;
342
+ }
343
+ export interface PotentialMatch {
344
+ readonly file_path: string;
345
+ readonly line: number;
346
+ readonly context: string;
347
+ readonly reason: 'identifier_match_no_resolved_edge';
348
+ }
349
+ export interface CallersResponse {
350
+ readonly verified_callers: readonly VerifiedCaller[];
351
+ readonly potential_matches: readonly PotentialMatch[];
352
+ /**
353
+ * §9.0 TOCTOU policy. `mast_callers` JITs only the FILE THAT DECLARES the
354
+ * queried symbol (when `file_path` disambiguates it) — not the files each
355
+ * caller lives in. Staleness there means the target-symbol resolution
356
+ * itself may be stale, which taints the whole response (which edges were
357
+ * even considered), not one caller's line number. That is a different
358
+ * file than `VerifiedCaller.file_path`, so `VerifiedCaller`'s own
359
+ * (currently unused) per-entry flag would misleadingly imply the CALLER's
360
+ * file is stale — set here at the envelope instead. Present (`true`) only
361
+ * when that JIT re-parse could not acquire `structure.lock`.
362
+ */
363
+ readonly file_busy_returning_stale_cache?: true;
364
+ /** @see {@link SearchResponse.index_empty} — same empty-index signal; set only when BOTH `verified_callers` and `potential_matches` are empty. */
365
+ readonly index_empty?: true;
366
+ readonly summary: {
367
+ readonly verified_count: number;
368
+ readonly potential_count: number;
369
+ readonly transitive: boolean;
370
+ /**
371
+ * Candidates the checker pass classified as NOT a call site (comment,
372
+ * string, or type position) and dropped out of `potential_matches` —
373
+ * additive, always 0 when `mast index --checker` has never run.
374
+ */
375
+ readonly checker_classified_non_call_site: number;
376
+ /**
377
+ * Candidates the checker pass resolved to a DIFFERENT declaration (a
378
+ * same-name collision) and dropped out of `potential_matches` — additive,
379
+ * always 0 when `mast index --checker` has never run.
380
+ */
381
+ readonly checker_classified_different_declaration: number;
382
+ /**
383
+ * F10 (Stage 3): present ONLY when the raw `identifier_fts` match count
384
+ * for this symbol exceeded the capped fetch (50 entries) — carries the
385
+ * real, uncapped count. See MAST_SPEC.md §9.0's Confidence signals (C1)
386
+ * table.
387
+ *
388
+ * **Precision note**: this reports RAW FTS-match truncation only.
389
+ * `potential_matches` itself may still be smaller than the fetch cap even
390
+ * when this field is present — verified-overlap exclusion and
391
+ * checker-verdict filtering both run AFTER the capped fetch. Those are
392
+ * *filtering*, not truncation, and are already visible via
393
+ * `checker_classified_non_call_site` / `checker_classified_different_declaration`
394
+ * above. Omitted when the fetch came back under the cap (the fetch count
395
+ * already IS the real count) — same omitted-when-false convention as
396
+ * `file_busy_returning_stale_cache` / `index_empty` above.
397
+ */
398
+ readonly potential_truncated?: number;
399
+ };
400
+ readonly _stats: ToolStats;
401
+ }
402
+ export interface RenameImpactInput {
403
+ readonly symbol: string;
404
+ readonly file_path?: string | null;
405
+ }
406
+ export interface DeclarationSite {
407
+ readonly file_path: string;
408
+ readonly line: number;
409
+ readonly kind: string;
410
+ readonly is_exported: boolean;
411
+ }
412
+ export interface BarrelExportSite {
413
+ readonly file_path: string;
414
+ /** Line of the re-export specifier; null for star barrels (file-level). */
415
+ readonly line: number | null;
416
+ /** Name the barrel exposes — differs from the symbol name when aliased. */
417
+ readonly exported_as: string;
418
+ readonly via: 'named' | 'star';
419
+ }
420
+ /**
421
+ * Composed refactor checklist for renaming a symbol (§9 mast_rename_impact).
422
+ * Every section reuses an existing query capability — declarations from the
423
+ * symbols table, callers from POTENTIAL_CALL edges, review sites from
424
+ * identifier_fts, barrels from RE_EXPORTS + re_export_files.
425
+ */
426
+ export interface RenameImpactResponse {
427
+ readonly symbol: string;
428
+ readonly declaration_sites: readonly DeclarationSite[];
429
+ readonly verified_callers: readonly VerifiedCaller[];
430
+ readonly potential_matches: readonly PotentialMatch[];
431
+ readonly barrel_exports: readonly BarrelExportSite[];
432
+ /** See {@link CallersResponse.file_busy_returning_stale_cache} — same envelope-vs-per-entry reasoning; `mast_rename_impact` shares `mast_callers`' JIT policy. */
433
+ readonly file_busy_returning_stale_cache?: true;
434
+ /** @see {@link SearchResponse.index_empty} — same empty-index signal; set only when ALL FOUR of `declaration_sites`, `verified_callers`, `potential_matches`, and `barrel_exports` are empty. */
435
+ readonly index_empty?: true;
436
+ readonly summary: {
437
+ readonly declaration_count: number;
438
+ readonly verified_count: number;
439
+ readonly potential_count: number;
440
+ readonly barrel_count: number;
441
+ /** Human-readable framing: "N verified…, M review-required…, K barrel…". */
442
+ readonly checklist: string;
443
+ /** See {@link CallersResponse.summary.checker_classified_non_call_site}. */
444
+ readonly checker_classified_non_call_site: number;
445
+ /** See {@link CallersResponse.summary.checker_classified_different_declaration}. */
446
+ readonly checker_classified_different_declaration: number;
447
+ /** See {@link CallersResponse.summary.potential_truncated} — same signal, same precision note. */
448
+ readonly potential_truncated?: number;
449
+ };
450
+ readonly _stats: ToolStats;
451
+ }
452
+ export interface DependenciesInput {
453
+ readonly file_path: string;
454
+ }
455
+ export interface DependencyEntry {
456
+ readonly module: string;
457
+ readonly symbols: readonly string[];
458
+ readonly is_external: boolean;
459
+ readonly resolved_path?: string;
460
+ }
461
+ export interface DependenciesResponse {
462
+ readonly file_path: string;
463
+ readonly imports: readonly DependencyEntry[];
464
+ /** See {@link ExportsResponse.file_busy_returning_stale_cache} — same single-file envelope reasoning. */
465
+ readonly file_busy_returning_stale_cache?: true;
466
+ /** @see {@link SearchResponse.index_empty} — same empty-index signal, keyed on `imports`. */
467
+ readonly index_empty?: true;
468
+ readonly _stats: ToolStats;
469
+ }
470
+ export interface ImplementorsInput {
471
+ readonly interface_name: string;
472
+ }
473
+ export interface ImplementorResult {
474
+ readonly class_name: string;
475
+ readonly file_path: string;
476
+ readonly line: number;
477
+ readonly methods: readonly string[];
478
+ /**
479
+ * Stat-and-flag staleness (F7, split into its own field by C1). Set when
480
+ * this result's `file_path` stat'd newer-on-disk than its indexed mtime,
481
+ * or the stat failed (file deleted/renamed) — `mast_implementors` can
482
+ * return implementors spanning many files, so unlike the single-file
483
+ * JIT-refresh tools (whose `file_busy_returning_stale_cache` field means a
484
+ * refresh was ATTEMPTED and lost to contention) no refresh is ever
485
+ * attempted here: no lock is taken and the line coordinates are not
486
+ * re-parsed, only flagged via `statSync`. Refreshing here would mean up to
487
+ * ~50 `structure.lock` acquisitions per call and could invalidate the
488
+ * graph query that already selected these results (§9.0;
489
+ * `eval/GITNEXUS_COMPARISON.md` §13.7). Treat this result's coordinates as
490
+ * untrustworthy until a `mast_reindex` call, or any JIT-refreshing tool
491
+ * call against the file, heals it. Omitted when false, never
492
+ * present-and-false. See MAST_SPEC.md §9.0's "Confidence signals (C1)"
493
+ * table.
494
+ */
495
+ readonly stale?: true;
496
+ }
497
+ export interface ImplementorsResponse {
498
+ readonly results: readonly ImplementorResult[];
499
+ /** @see {@link SearchResponse.index_empty} — same empty-index signal, keyed on `results`. */
500
+ readonly index_empty?: true;
501
+ readonly _stats: ToolStats;
502
+ }
503
+ export interface ReindexInput {
504
+ readonly full?: boolean;
505
+ }
506
+ export interface ReindexResult {
507
+ readonly files_indexed: number;
508
+ readonly files_skipped: number;
509
+ readonly chunks_added: number;
510
+ readonly chunks_removed: number;
511
+ readonly parse_errors: number;
512
+ readonly write_errors: number;
513
+ /**
514
+ * Files whose write was refused by the monotonic write-guard because the
515
+ * stored row already carried a newer mtime. NOT a failure — the index is
516
+ * correct — but the file was not written by THIS run, so it is excluded
517
+ * from `files_indexed` and reported here instead of vanishing from the
518
+ * accounting entirely (D039).
519
+ */
520
+ readonly stale_write_rejections: number;
521
+ /**
522
+ * Count of imports that resolved only because the filesystem ignored their
523
+ * casing — broken on a case-sensitive filesystem. The count alone travels on
524
+ * the wire; `mast index` prints the offending files.
525
+ */
526
+ readonly miscased_imports: number;
527
+ readonly duration_ms: number;
528
+ }
529
+ /**
530
+ * Why the index is not fully fresh (null when it is). Stage 7.2
531
+ * (IMPLEMENTATION_PLAN.md "Stage 7: Vector-store deletion") removed
532
+ * `'embedding_backlog'`/`'both'` — the Phase 2 embedder that could produce a
533
+ * backlog distinct from Phase 1 (chunk line coordinates lagging disk,
534
+ * corrected by JIT on read) no longer exists, so a two-cause union asserted a
535
+ * distinction the code can no longer draw.
536
+ */
537
+ export type FreshnessCause = 'phase1_stale' | null;
538
+ export interface StatusResult {
539
+ readonly state_dir: string;
540
+ /**
541
+ * `CURRENT_SCHEMA_VERSION` as compiled into the **running binary** — not the
542
+ * value stored in `index.json`.
543
+ *
544
+ * After a normal startup the two are equal, because §7.4 Step 2's guard wipes
545
+ * derived state on a mismatch. They diverge in exactly the case worth
546
+ * detecting (D8): a long-lived process still executing an older build while
547
+ * the state directory it holds open has since been migrated by a newer one.
548
+ * Sourcing this from disk would report the migrated value and hide that
549
+ * divergence, so it is deliberately read from the binary's own constant.
550
+ */
551
+ readonly schema_version: string;
552
+ readonly last_indexed: string | null;
553
+ readonly indexed_files: number;
554
+ readonly chunk_count: number;
555
+ /**
556
+ * Files whose on-disk state the index does not reflect: content changed
557
+ * since it was indexed, plus files present on disk but absent from the index
558
+ * (never indexed, or lost to a failed run), plus files the index still knows
559
+ * about that are gone from disk. Produced by `indexer/freshness.ts`
560
+ * `measureFreshness`, which `mast status` shares — the two surfaces answer
561
+ * one question and computed it differently until 2026-08-20
562
+ * (`docs/defects/LEDGER.md` D035).
563
+ */
564
+ readonly stale_files: number;
565
+ readonly parse_errors: number;
566
+ readonly write_errors: number;
567
+ readonly index_fresh: boolean;
568
+ readonly freshness_cause: FreshnessCause;
569
+ readonly seed_commit?: string;
570
+ }
571
+ export interface EfficiencyInput {
572
+ readonly scope: 'session' | 'global';
573
+ readonly since_minutes?: number;
574
+ }
575
+ export interface EfficiencyResult {
576
+ readonly scope: 'session' | 'global';
577
+ readonly window_started_at: string;
578
+ readonly tokens_returned: number;
579
+ readonly tokens_full_file_upper_bound: number;
580
+ readonly efficiency_ratio: number;
581
+ readonly calls_total: number;
582
+ readonly calls_by_tool: Readonly<Record<string, number>>;
583
+ readonly tokenizer: string;
584
+ readonly counterfactual: string;
585
+ }
586
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ast/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** All domain types shared across MAST subsystems. */
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ast/types.ts"],"names":[],"mappings":"AAAA,sDAAsD"}
@@ -0,0 +1,22 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * `mast docs` and `mast skill` — documentation that is version-matched by construction.
4
+ *
5
+ * Both read files shipped inside the installed package rather than pointing at a
6
+ * website, so what a user (or an agent) reads is what their binary does. Looking up
7
+ * "which release am I on, and which docs go with it" is exactly the step this removes,
8
+ * and it is the step where a reader silently ends up on docs for a different version.
9
+ */
10
+ export declare class DocsError extends Error {
11
+ }
12
+ export interface DocTopic {
13
+ readonly name: string;
14
+ readonly file: string;
15
+ readonly summary: string;
16
+ }
17
+ export declare const DOC_TOPICS: readonly DocTopic[];
18
+ export declare function readDoc(name: string): string;
19
+ export declare function listDocs(): string;
20
+ export declare function registerDocsCommand(program: Command): void;
21
+ export declare function registerSkillCommand(program: Command): void;
22
+ //# sourceMappingURL=docs-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-cmd.d.ts","sourceRoot":"","sources":["../../src/cli/docs-cmd.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC;;;;;;;GAOG;AACH,qBAAa,SAAU,SAAQ,KAAK;CAAG;AAMvC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,UAAU,EAAE,SAAS,QAAQ,EAIzC,CAAC;AAEF,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc5C;AAED,wBAAgB,QAAQ,IAAI,MAAM,CASjC;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAY1D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwC3D"}