@ffschrattenecker/tm1-mcp-server 6.0.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 (475) hide show
  1. package/CHANGELOG.md +1211 -0
  2. package/LICENSE +21 -0
  3. package/NOTICE +34 -0
  4. package/README.md +276 -0
  5. package/dist/config.d.ts +35 -0
  6. package/dist/config.js +238 -0
  7. package/dist/http-transport.d.ts +8 -0
  8. package/dist/http-transport.js +132 -0
  9. package/dist/index.d.ts +18 -0
  10. package/dist/index.js +164 -0
  11. package/dist/lib/callgraph/callGraph.d.ts +124 -0
  12. package/dist/lib/callgraph/callGraph.js +334 -0
  13. package/dist/lib/callgraph/choreGraph.d.ts +23 -0
  14. package/dist/lib/callgraph/choreGraph.js +102 -0
  15. package/dist/lib/callgraph/dataFlow.d.ts +74 -0
  16. package/dist/lib/callgraph/dataFlow.js +271 -0
  17. package/dist/lib/callgraph/datasourceMembership.d.ts +31 -0
  18. package/dist/lib/callgraph/datasourceMembership.js +142 -0
  19. package/dist/lib/callgraph/lintTypes.d.ts +28 -0
  20. package/dist/lib/callgraph/lintTypes.js +2 -0
  21. package/dist/lib/callgraph/mdxMembers.d.ts +29 -0
  22. package/dist/lib/callgraph/mdxMembers.js +97 -0
  23. package/dist/lib/callgraph/referenceIndex.d.ts +179 -0
  24. package/dist/lib/callgraph/referenceIndex.js +584 -0
  25. package/dist/lib/callgraph/rulesLinter.d.ts +55 -0
  26. package/dist/lib/callgraph/rulesLinter.js +776 -0
  27. package/dist/lib/callgraph/rulesParser.d.ts +26 -0
  28. package/dist/lib/callgraph/rulesParser.js +71 -0
  29. package/dist/lib/callgraph/subsetUsage.d.ts +16 -0
  30. package/dist/lib/callgraph/subsetUsage.js +134 -0
  31. package/dist/lib/callgraph/tiParser.d.ts +21 -0
  32. package/dist/lib/callgraph/tiParser.js +672 -0
  33. package/dist/lib/callgraph/tiSignatures.d.ts +32 -0
  34. package/dist/lib/callgraph/tiSignatures.js +6185 -0
  35. package/dist/lib/callgraph/tm1-adapter.d.ts +32 -0
  36. package/dist/lib/callgraph/tm1-adapter.js +159 -0
  37. package/dist/lib/callgraph/types.d.ts +53 -0
  38. package/dist/lib/callgraph/types.js +2 -0
  39. package/dist/lib/callgraph/variableEnv.d.ts +86 -0
  40. package/dist/lib/callgraph/variableEnv.js +214 -0
  41. package/dist/lib/cell-address.d.ts +12 -0
  42. package/dist/lib/cell-address.js +71 -0
  43. package/dist/lib/complexity/antipatterns.d.ts +22 -0
  44. package/dist/lib/complexity/antipatterns.js +302 -0
  45. package/dist/lib/complexity/comment-classifier.d.ts +24 -0
  46. package/dist/lib/complexity/comment-classifier.js +43 -0
  47. package/dist/lib/complexity/cross-process.d.ts +78 -0
  48. package/dist/lib/complexity/cross-process.js +114 -0
  49. package/dist/lib/complexity/process-metrics.d.ts +78 -0
  50. package/dist/lib/complexity/process-metrics.js +278 -0
  51. package/dist/lib/complexity/rules-metrics.d.ts +31 -0
  52. package/dist/lib/complexity/rules-metrics.js +99 -0
  53. package/dist/lib/concurrency.d.ts +11 -0
  54. package/dist/lib/concurrency.js +27 -0
  55. package/dist/lib/control-name.d.ts +10 -0
  56. package/dist/lib/control-name.js +10 -0
  57. package/dist/lib/coordinate-error.d.ts +3 -0
  58. package/dist/lib/coordinate-error.js +29 -0
  59. package/dist/lib/credential-format.d.ts +23 -0
  60. package/dist/lib/credential-format.js +25 -0
  61. package/dist/lib/cube-stats/fetcher.d.ts +106 -0
  62. package/dist/lib/cube-stats/fetcher.js +194 -0
  63. package/dist/lib/feeders/brackets.d.ts +47 -0
  64. package/dist/lib/feeders/brackets.js +195 -0
  65. package/dist/lib/feeders/element-type-cache.d.ts +42 -0
  66. package/dist/lib/feeders/element-type-cache.js +86 -0
  67. package/dist/lib/feeders/static-heuristics.d.ts +101 -0
  68. package/dist/lib/feeders/static-heuristics.js +202 -0
  69. package/dist/lib/git-process.d.ts +67 -0
  70. package/dist/lib/git-process.js +243 -0
  71. package/dist/lib/mask-secrets.d.ts +10 -0
  72. package/dist/lib/mask-secrets.js +99 -0
  73. package/dist/lib/mdx.d.ts +3 -0
  74. package/dist/lib/mdx.js +13 -0
  75. package/dist/lib/naming/odata-filter.d.ts +15 -0
  76. package/dist/lib/naming/odata-filter.js +81 -0
  77. package/dist/lib/naming/rules.d.ts +34 -0
  78. package/dist/lib/naming/rules.js +215 -0
  79. package/dist/lib/pro-parser.d.ts +19 -0
  80. package/dist/lib/pro-parser.js +260 -0
  81. package/dist/lib/pro-serializer.d.ts +19 -0
  82. package/dist/lib/pro-serializer.js +170 -0
  83. package/dist/lib/process-parts-schema.d.ts +45 -0
  84. package/dist/lib/process-parts-schema.js +46 -0
  85. package/dist/lib/process-refs.d.ts +88 -0
  86. package/dist/lib/process-refs.js +441 -0
  87. package/dist/lib/rules-outline.d.ts +29 -0
  88. package/dist/lib/rules-outline.js +68 -0
  89. package/dist/lib/rules-patch.d.ts +6 -0
  90. package/dist/lib/rules-patch.js +59 -0
  91. package/dist/lib/safe-regex.d.ts +15 -0
  92. package/dist/lib/safe-regex.js +37 -0
  93. package/dist/lib/sample-cells.d.ts +48 -0
  94. package/dist/lib/sample-cells.js +146 -0
  95. package/dist/lib/slim-json-schema.d.ts +20 -0
  96. package/dist/lib/slim-json-schema.js +68 -0
  97. package/dist/lib/strip-comments.d.ts +23 -0
  98. package/dist/lib/strip-comments.js +61 -0
  99. package/dist/lib/tm1-events.d.ts +16 -0
  100. package/dist/lib/tm1-events.js +29 -0
  101. package/dist/lib/v12-compat/deprecated-ti.d.ts +17 -0
  102. package/dist/lib/v12-compat/deprecated-ti.js +257 -0
  103. package/dist/lib/v12-compat/scanner.d.ts +10 -0
  104. package/dist/lib/v12-compat/scanner.js +43 -0
  105. package/dist/lib/variables-ui-data.d.ts +26 -0
  106. package/dist/lib/variables-ui-data.js +77 -0
  107. package/dist/load-env.d.ts +2 -0
  108. package/dist/load-env.js +29 -0
  109. package/dist/logger.d.ts +4 -0
  110. package/dist/logger.js +60 -0
  111. package/dist/prompts/index.d.ts +3 -0
  112. package/dist/prompts/index.js +141 -0
  113. package/dist/resources/index.d.ts +5 -0
  114. package/dist/resources/index.js +237 -0
  115. package/dist/resources/list-handler.d.ts +40 -0
  116. package/dist/resources/list-handler.js +86 -0
  117. package/dist/resources/subscriptions.d.ts +19 -0
  118. package/dist/resources/subscriptions.js +80 -0
  119. package/dist/schemas/cells.d.ts +17 -0
  120. package/dist/schemas/cells.js +13 -0
  121. package/dist/schemas/common.d.ts +16 -0
  122. package/dist/schemas/common.js +14 -0
  123. package/dist/schemas/index.d.ts +10 -0
  124. package/dist/schemas/index.js +23 -0
  125. package/dist/schemas/metadata.d.ts +70 -0
  126. package/dist/schemas/metadata.js +47 -0
  127. package/dist/schemas/monitoring.d.ts +95 -0
  128. package/dist/schemas/monitoring.js +69 -0
  129. package/dist/schemas/processes.d.ts +74 -0
  130. package/dist/schemas/processes.js +66 -0
  131. package/dist/schemas/scheduling.d.ts +13 -0
  132. package/dist/schemas/scheduling.js +13 -0
  133. package/dist/schemas/security.d.ts +19 -0
  134. package/dist/schemas/security.js +16 -0
  135. package/dist/schemas/subsets.d.ts +12 -0
  136. package/dist/schemas/subsets.js +12 -0
  137. package/dist/schemas/views.d.ts +9 -0
  138. package/dist/schemas/views.js +9 -0
  139. package/dist/session-manager.d.ts +79 -0
  140. package/dist/session-manager.js +281 -0
  141. package/dist/tm1-client/connection/profile.d.ts +13 -0
  142. package/dist/tm1-client/connection/profile.js +99 -0
  143. package/dist/tm1-client/dispatcher.d.ts +5 -0
  144. package/dist/tm1-client/dispatcher.js +31 -0
  145. package/dist/tm1-client/http.d.ts +81 -0
  146. package/dist/tm1-client/http.js +547 -0
  147. package/dist/tm1-client/services/batch-service.d.ts +123 -0
  148. package/dist/tm1-client/services/batch-service.js +455 -0
  149. package/dist/tm1-client/services/cell-service.d.ts +71 -0
  150. package/dist/tm1-client/services/cell-service.js +333 -0
  151. package/dist/tm1-client/services/cellset-transform.d.ts +26 -0
  152. package/dist/tm1-client/services/cellset-transform.js +80 -0
  153. package/dist/tm1-client/services/chore-service.d.ts +68 -0
  154. package/dist/tm1-client/services/chore-service.js +179 -0
  155. package/dist/tm1-client/services/chore-status.d.ts +11 -0
  156. package/dist/tm1-client/services/chore-status.js +127 -0
  157. package/dist/tm1-client/services/cube-service.d.ts +134 -0
  158. package/dist/tm1-client/services/cube-service.js +294 -0
  159. package/dist/tm1-client/services/dimension-service.d.ts +118 -0
  160. package/dist/tm1-client/services/dimension-service.js +249 -0
  161. package/dist/tm1-client/services/element-service.d.ts +245 -0
  162. package/dist/tm1-client/services/element-service.js +809 -0
  163. package/dist/tm1-client/services/fallback.d.ts +44 -0
  164. package/dist/tm1-client/services/fallback.js +72 -0
  165. package/dist/tm1-client/services/file-service.d.ts +53 -0
  166. package/dist/tm1-client/services/file-service.js +218 -0
  167. package/dist/tm1-client/services/hierarchy-service.d.ts +129 -0
  168. package/dist/tm1-client/services/hierarchy-service.js +332 -0
  169. package/dist/tm1-client/services/monitoring-service.d.ts +34 -0
  170. package/dist/tm1-client/services/monitoring-service.js +123 -0
  171. package/dist/tm1-client/services/odata-page.d.ts +71 -0
  172. package/dist/tm1-client/services/odata-page.js +87 -0
  173. package/dist/tm1-client/services/process-service.d.ts +278 -0
  174. package/dist/tm1-client/services/process-service.js +874 -0
  175. package/dist/tm1-client/services/process-status.d.ts +21 -0
  176. package/dist/tm1-client/services/process-status.js +89 -0
  177. package/dist/tm1-client/services/security-service.d.ts +50 -0
  178. package/dist/tm1-client/services/security-service.js +93 -0
  179. package/dist/tm1-client/services/server-service.d.ts +116 -0
  180. package/dist/tm1-client/services/server-service.js +504 -0
  181. package/dist/tm1-client/services/subset-service.d.ts +37 -0
  182. package/dist/tm1-client/services/subset-service.js +122 -0
  183. package/dist/tm1-client/services/view-service.d.ts +46 -0
  184. package/dist/tm1-client/services/view-service.js +287 -0
  185. package/dist/tm1-client.d.ts +56 -0
  186. package/dist/tm1-client.js +126 -0
  187. package/dist/tools/analysis/analyze-callgraph.d.ts +28 -0
  188. package/dist/tools/analysis/analyze-callgraph.js +350 -0
  189. package/dist/tools/analysis/analyze-chore-graph.d.ts +2 -0
  190. package/dist/tools/analysis/analyze-chore-graph.js +148 -0
  191. package/dist/tools/analysis/analyze-object-usage.d.ts +2 -0
  192. package/dist/tools/analysis/analyze-object-usage.js +143 -0
  193. package/dist/tools/analysis/audit-complexity.d.ts +2 -0
  194. package/dist/tools/analysis/audit-complexity.js +255 -0
  195. package/dist/tools/analysis/audit-feeders.d.ts +2 -0
  196. package/dist/tools/analysis/audit-feeders.js +417 -0
  197. package/dist/tools/analysis/audit-naming.d.ts +2 -0
  198. package/dist/tools/analysis/audit-naming.js +379 -0
  199. package/dist/tools/analysis/check-v12-readiness.d.ts +2 -0
  200. package/dist/tools/analysis/check-v12-readiness.js +136 -0
  201. package/dist/tools/analysis/find-orphan-dimensions.d.ts +2 -0
  202. package/dist/tools/analysis/find-orphan-dimensions.js +55 -0
  203. package/dist/tools/analysis/invalidate-callgraph-cache.d.ts +2 -0
  204. package/dist/tools/analysis/invalidate-callgraph-cache.js +40 -0
  205. package/dist/tools/analysis/trace-data-flow.d.ts +2 -0
  206. package/dist/tools/analysis/trace-data-flow.js +138 -0
  207. package/dist/tools/annotations.d.ts +12 -0
  208. package/dist/tools/annotations.js +61 -0
  209. package/dist/tools/celldata/check-feeders.d.ts +2 -0
  210. package/dist/tools/celldata/check-feeders.js +48 -0
  211. package/dist/tools/celldata/check-writable-coords.d.ts +2 -0
  212. package/dist/tools/celldata/check-writable-coords.js +126 -0
  213. package/dist/tools/celldata/execute-mdx.d.ts +17 -0
  214. package/dist/tools/celldata/execute-mdx.js +126 -0
  215. package/dist/tools/celldata/get-cell-value.d.ts +2 -0
  216. package/dist/tools/celldata/get-cell-value.js +30 -0
  217. package/dist/tools/celldata/get-view-definition.d.ts +2 -0
  218. package/dist/tools/celldata/get-view-definition.js +29 -0
  219. package/dist/tools/celldata/get-view.d.ts +2 -0
  220. package/dist/tools/celldata/get-view.js +55 -0
  221. package/dist/tools/celldata/sample-cells.d.ts +2 -0
  222. package/dist/tools/celldata/sample-cells.js +101 -0
  223. package/dist/tools/celldata/trace-cell-calculation.d.ts +2 -0
  224. package/dist/tools/celldata/trace-cell-calculation.js +53 -0
  225. package/dist/tools/celldata/trace-feeders.d.ts +2 -0
  226. package/dist/tools/celldata/trace-feeders.js +44 -0
  227. package/dist/tools/celldata/write-cells.d.ts +2 -0
  228. package/dist/tools/celldata/write-cells.js +65 -0
  229. package/dist/tools/confirm.d.ts +10 -0
  230. package/dist/tools/confirm.js +64 -0
  231. package/dist/tools/define-tool.d.ts +51 -0
  232. package/dist/tools/define-tool.js +49 -0
  233. package/dist/tools/dimension-management/bulk-upsert-elements.d.ts +2 -0
  234. package/dist/tools/dimension-management/bulk-upsert-elements.js +103 -0
  235. package/dist/tools/dimension-management/create-dimension.d.ts +2 -0
  236. package/dist/tools/dimension-management/create-dimension.js +22 -0
  237. package/dist/tools/dimension-management/create-element-attribute.d.ts +2 -0
  238. package/dist/tools/dimension-management/create-element-attribute.js +26 -0
  239. package/dist/tools/dimension-management/create-element.d.ts +2 -0
  240. package/dist/tools/dimension-management/create-element.js +31 -0
  241. package/dist/tools/dimension-management/create-hierarchy.d.ts +2 -0
  242. package/dist/tools/dimension-management/create-hierarchy.js +22 -0
  243. package/dist/tools/dimension-management/delete-dimension.d.ts +2 -0
  244. package/dist/tools/dimension-management/delete-dimension.js +25 -0
  245. package/dist/tools/dimension-management/delete-element.d.ts +2 -0
  246. package/dist/tools/dimension-management/delete-element.js +26 -0
  247. package/dist/tools/dimension-management/delete-elements.d.ts +2 -0
  248. package/dist/tools/dimension-management/delete-elements.js +44 -0
  249. package/dist/tools/dimension-management/delete-hierarchy.d.ts +2 -0
  250. package/dist/tools/dimension-management/delete-hierarchy.js +35 -0
  251. package/dist/tools/dimension-management/get-element-attribute-values.d.ts +2 -0
  252. package/dist/tools/dimension-management/get-element-attribute-values.js +77 -0
  253. package/dist/tools/dimension-management/list-element-attributes.d.ts +2 -0
  254. package/dist/tools/dimension-management/list-element-attributes.js +31 -0
  255. package/dist/tools/dimension-management/move-element.d.ts +2 -0
  256. package/dist/tools/dimension-management/move-element.js +28 -0
  257. package/dist/tools/dimension-management/update-element-attribute-value.d.ts +2 -0
  258. package/dist/tools/dimension-management/update-element-attribute-value.js +80 -0
  259. package/dist/tools/dimension-management/update-element.d.ts +2 -0
  260. package/dist/tools/dimension-management/update-element.js +35 -0
  261. package/dist/tools/error-format.d.ts +22 -0
  262. package/dist/tools/error-format.js +130 -0
  263. package/dist/tools/fileops/delete-file.d.ts +2 -0
  264. package/dist/tools/fileops/delete-file.js +32 -0
  265. package/dist/tools/fileops/get-file-content.d.ts +2 -0
  266. package/dist/tools/fileops/get-file-content.js +76 -0
  267. package/dist/tools/fileops/list-files.d.ts +2 -0
  268. package/dist/tools/fileops/list-files.js +43 -0
  269. package/dist/tools/fileops/search-files.d.ts +2 -0
  270. package/dist/tools/fileops/search-files.js +76 -0
  271. package/dist/tools/fileops/upload-file.d.ts +2 -0
  272. package/dist/tools/fileops/upload-file.js +69 -0
  273. package/dist/tools/format.d.ts +57 -0
  274. package/dist/tools/format.js +157 -0
  275. package/dist/tools/hierarchy.d.ts +6 -0
  276. package/dist/tools/hierarchy.js +27 -0
  277. package/dist/tools/index.d.ts +4 -0
  278. package/dist/tools/index.js +263 -0
  279. package/dist/tools/local-file.d.ts +16 -0
  280. package/dist/tools/local-file.js +88 -0
  281. package/dist/tools/metadata/get-ancestors.d.ts +2 -0
  282. package/dist/tools/metadata/get-ancestors.js +36 -0
  283. package/dist/tools/metadata/get-descendants.d.ts +2 -0
  284. package/dist/tools/metadata/get-descendants.js +64 -0
  285. package/dist/tools/metadata/get-hierarchy.d.ts +2 -0
  286. package/dist/tools/metadata/get-hierarchy.js +130 -0
  287. package/dist/tools/metadata/list-chores.d.ts +2 -0
  288. package/dist/tools/metadata/list-chores.js +62 -0
  289. package/dist/tools/metadata/list-cubes.d.ts +2 -0
  290. package/dist/tools/metadata/list-cubes.js +128 -0
  291. package/dist/tools/metadata/list-dimensions.d.ts +2 -0
  292. package/dist/tools/metadata/list-dimensions.js +131 -0
  293. package/dist/tools/metadata/list-processes-grouped.d.ts +2 -0
  294. package/dist/tools/metadata/list-processes-grouped.js +96 -0
  295. package/dist/tools/metadata/list-processes.d.ts +2 -0
  296. package/dist/tools/metadata/list-processes.js +108 -0
  297. package/dist/tools/metadata/resolve-default-members.d.ts +2 -0
  298. package/dist/tools/metadata/resolve-default-members.js +46 -0
  299. package/dist/tools/model-building/check-cube-rule.d.ts +2 -0
  300. package/dist/tools/model-building/check-cube-rule.js +51 -0
  301. package/dist/tools/model-building/clear-cube.d.ts +2 -0
  302. package/dist/tools/model-building/clear-cube.js +46 -0
  303. package/dist/tools/model-building/create-cube.d.ts +2 -0
  304. package/dist/tools/model-building/create-cube.js +34 -0
  305. package/dist/tools/model-building/delete-cube.d.ts +2 -0
  306. package/dist/tools/model-building/delete-cube.js +27 -0
  307. package/dist/tools/model-building/get-all-cube-rules.d.ts +2 -0
  308. package/dist/tools/model-building/get-all-cube-rules.js +149 -0
  309. package/dist/tools/model-building/get-cube-rules.d.ts +2 -0
  310. package/dist/tools/model-building/get-cube-rules.js +69 -0
  311. package/dist/tools/model-building/rules-source.d.ts +21 -0
  312. package/dist/tools/model-building/rules-source.js +49 -0
  313. package/dist/tools/model-building/search-rules.d.ts +2 -0
  314. package/dist/tools/model-building/search-rules.js +132 -0
  315. package/dist/tools/model-building/set-cube-rules.d.ts +2 -0
  316. package/dist/tools/model-building/set-cube-rules.js +81 -0
  317. package/dist/tools/model-building/unload-cube.d.ts +2 -0
  318. package/dist/tools/model-building/unload-cube.js +23 -0
  319. package/dist/tools/operations/diagnose-process-error.d.ts +2 -0
  320. package/dist/tools/operations/diagnose-process-error.js +178 -0
  321. package/dist/tools/operations/error-log-helpers.d.ts +25 -0
  322. package/dist/tools/operations/error-log-helpers.js +57 -0
  323. package/dist/tools/operations/get-audit-log.d.ts +2 -0
  324. package/dist/tools/operations/get-audit-log.js +70 -0
  325. package/dist/tools/operations/get-cube-stats.d.ts +2 -0
  326. package/dist/tools/operations/get-cube-stats.js +107 -0
  327. package/dist/tools/operations/get-error-log-content.d.ts +2 -0
  328. package/dist/tools/operations/get-error-log-content.js +164 -0
  329. package/dist/tools/operations/get-jobs.d.ts +3 -0
  330. package/dist/tools/operations/get-jobs.js +51 -0
  331. package/dist/tools/operations/get-message-log.d.ts +2 -0
  332. package/dist/tools/operations/get-message-log.js +63 -0
  333. package/dist/tools/operations/get-server-info.d.ts +2 -0
  334. package/dist/tools/operations/get-server-info.js +180 -0
  335. package/dist/tools/operations/get-server-state.d.ts +2 -0
  336. package/dist/tools/operations/get-server-state.js +129 -0
  337. package/dist/tools/operations/get-sessions.d.ts +2 -0
  338. package/dist/tools/operations/get-sessions.js +76 -0
  339. package/dist/tools/operations/get-threads.d.ts +3 -0
  340. package/dist/tools/operations/get-threads.js +50 -0
  341. package/dist/tools/operations/get-transaction-log.d.ts +2 -0
  342. package/dist/tools/operations/get-transaction-log.js +63 -0
  343. package/dist/tools/operations/list-error-logs.d.ts +8 -0
  344. package/dist/tools/operations/list-error-logs.js +157 -0
  345. package/dist/tools/operations/save-data.d.ts +2 -0
  346. package/dist/tools/operations/save-data.js +50 -0
  347. package/dist/tools/pagination.d.ts +32 -0
  348. package/dist/tools/pagination.js +116 -0
  349. package/dist/tools/scheduling/create-chore.d.ts +2 -0
  350. package/dist/tools/scheduling/create-chore.js +93 -0
  351. package/dist/tools/scheduling/delete-chore.d.ts +2 -0
  352. package/dist/tools/scheduling/delete-chore.js +22 -0
  353. package/dist/tools/scheduling/execute-chore.d.ts +2 -0
  354. package/dist/tools/scheduling/execute-chore.js +52 -0
  355. package/dist/tools/scheduling/toggle-chore.d.ts +2 -0
  356. package/dist/tools/scheduling/toggle-chore.js +22 -0
  357. package/dist/tools/scheduling/update-chore.d.ts +2 -0
  358. package/dist/tools/scheduling/update-chore.js +71 -0
  359. package/dist/tools/schemas/common.d.ts +10 -0
  360. package/dist/tools/schemas/common.js +23 -0
  361. package/dist/tools/schemas/items-analysis.d.ts +394 -0
  362. package/dist/tools/schemas/items-analysis.js +419 -0
  363. package/dist/tools/schemas/items-cells.d.ts +70 -0
  364. package/dist/tools/schemas/items-cells.js +65 -0
  365. package/dist/tools/schemas/items-common.d.ts +18 -0
  366. package/dist/tools/schemas/items-common.js +39 -0
  367. package/dist/tools/schemas/items-fileops.d.ts +11 -0
  368. package/dist/tools/schemas/items-fileops.js +13 -0
  369. package/dist/tools/schemas/items-metadata.d.ts +262 -0
  370. package/dist/tools/schemas/items-metadata.js +184 -0
  371. package/dist/tools/schemas/items-monitoring.d.ts +79 -0
  372. package/dist/tools/schemas/items-monitoring.js +78 -0
  373. package/dist/tools/schemas/items-processes.d.ts +279 -0
  374. package/dist/tools/schemas/items-processes.js +235 -0
  375. package/dist/tools/schemas/items-scheduling.d.ts +25 -0
  376. package/dist/tools/schemas/items-scheduling.js +26 -0
  377. package/dist/tools/schemas/items-security.d.ts +19 -0
  378. package/dist/tools/schemas/items-security.js +12 -0
  379. package/dist/tools/schemas/items-subsets.d.ts +2 -0
  380. package/dist/tools/schemas/items-subsets.js +4 -0
  381. package/dist/tools/schemas/items-views.d.ts +38 -0
  382. package/dist/tools/schemas/items-views.js +26 -0
  383. package/dist/tools/schemas/items.d.ts +12 -0
  384. package/dist/tools/schemas/items.js +23 -0
  385. package/dist/tools/schemas/markdown-capable.d.ts +21 -0
  386. package/dist/tools/schemas/markdown-capable.js +58 -0
  387. package/dist/tools/schemas/output-schema.d.ts +24 -0
  388. package/dist/tools/schemas/output-schema.js +25 -0
  389. package/dist/tools/security/assign-client-group.d.ts +2 -0
  390. package/dist/tools/security/assign-client-group.js +20 -0
  391. package/dist/tools/security/create-client.d.ts +2 -0
  392. package/dist/tools/security/create-client.js +28 -0
  393. package/dist/tools/security/delete-client.d.ts +2 -0
  394. package/dist/tools/security/delete-client.js +22 -0
  395. package/dist/tools/security/get-client.d.ts +2 -0
  396. package/dist/tools/security/get-client.js +20 -0
  397. package/dist/tools/security/list-clients.d.ts +2 -0
  398. package/dist/tools/security/list-clients.js +86 -0
  399. package/dist/tools/security/list-groups.d.ts +2 -0
  400. package/dist/tools/security/list-groups.js +43 -0
  401. package/dist/tools/security/remove-client-group.d.ts +2 -0
  402. package/dist/tools/security/remove-client-group.js +27 -0
  403. package/dist/tools/security/update-client.d.ts +2 -0
  404. package/dist/tools/security/update-client.js +22 -0
  405. package/dist/tools/subsets/create-subset.d.ts +2 -0
  406. package/dist/tools/subsets/create-subset.js +44 -0
  407. package/dist/tools/subsets/delete-subset.d.ts +2 -0
  408. package/dist/tools/subsets/delete-subset.js +26 -0
  409. package/dist/tools/subsets/get-subset.d.ts +2 -0
  410. package/dist/tools/subsets/get-subset.js +29 -0
  411. package/dist/tools/subsets/list-subsets.d.ts +2 -0
  412. package/dist/tools/subsets/list-subsets.js +36 -0
  413. package/dist/tools/subsets/update-subset.d.ts +2 -0
  414. package/dist/tools/subsets/update-subset.js +33 -0
  415. package/dist/tools/ti-development/check-process-code.d.ts +2 -0
  416. package/dist/tools/ti-development/check-process-code.js +96 -0
  417. package/dist/tools/ti-development/compile-process.d.ts +2 -0
  418. package/dist/tools/ti-development/compile-process.js +32 -0
  419. package/dist/tools/ti-development/copy-process.d.ts +2 -0
  420. package/dist/tools/ti-development/copy-process.js +32 -0
  421. package/dist/tools/ti-development/delete-process.d.ts +2 -0
  422. package/dist/tools/ti-development/delete-process.js +26 -0
  423. package/dist/tools/ti-development/diff-process-with-file.d.ts +2 -0
  424. package/dist/tools/ti-development/diff-process-with-file.js +208 -0
  425. package/dist/tools/ti-development/diff-processes.d.ts +2 -0
  426. package/dist/tools/ti-development/diff-processes.js +312 -0
  427. package/dist/tools/ti-development/execute-process.d.ts +8 -0
  428. package/dist/tools/ti-development/execute-process.js +109 -0
  429. package/dist/tools/ti-development/export-process-to-git.d.ts +2 -0
  430. package/dist/tools/ti-development/export-process-to-git.js +113 -0
  431. package/dist/tools/ti-development/export-process-to-pro.d.ts +2 -0
  432. package/dist/tools/ti-development/export-process-to-pro.js +117 -0
  433. package/dist/tools/ti-development/get-all-processes-code.d.ts +2 -0
  434. package/dist/tools/ti-development/get-all-processes-code.js +131 -0
  435. package/dist/tools/ti-development/get-process-code.d.ts +2 -0
  436. package/dist/tools/ti-development/get-process-code.js +100 -0
  437. package/dist/tools/ti-development/get-process-datasource.d.ts +2 -0
  438. package/dist/tools/ti-development/get-process-datasource.js +20 -0
  439. package/dist/tools/ti-development/get-process-parameters.d.ts +2 -0
  440. package/dist/tools/ti-development/get-process-parameters.js +25 -0
  441. package/dist/tools/ti-development/get-process-variables.d.ts +2 -0
  442. package/dist/tools/ti-development/get-process-variables.js +38 -0
  443. package/dist/tools/ti-development/get-process.d.ts +2 -0
  444. package/dist/tools/ti-development/get-process.js +163 -0
  445. package/dist/tools/ti-development/import-pro-file.d.ts +2 -0
  446. package/dist/tools/ti-development/import-pro-file.js +153 -0
  447. package/dist/tools/ti-development/import-process-from-git.d.ts +2 -0
  448. package/dist/tools/ti-development/import-process-from-git.js +198 -0
  449. package/dist/tools/ti-development/install-pro-bundle.d.ts +2 -0
  450. package/dist/tools/ti-development/install-pro-bundle.js +288 -0
  451. package/dist/tools/ti-development/preflight.d.ts +39 -0
  452. package/dist/tools/ti-development/preflight.js +56 -0
  453. package/dist/tools/ti-development/process-backup.d.ts +29 -0
  454. package/dist/tools/ti-development/process-backup.js +118 -0
  455. package/dist/tools/ti-development/search-code.d.ts +2 -0
  456. package/dist/tools/ti-development/search-code.js +208 -0
  457. package/dist/tools/ti-development/upsert-process.d.ts +2 -0
  458. package/dist/tools/ti-development/upsert-process.js +167 -0
  459. package/dist/tools/ti-development/validate-process-refs.d.ts +2 -0
  460. package/dist/tools/ti-development/validate-process-refs.js +73 -0
  461. package/dist/tools/views/create-mdx-view.d.ts +2 -0
  462. package/dist/tools/views/create-mdx-view.js +21 -0
  463. package/dist/tools/views/create-native-view.d.ts +2 -0
  464. package/dist/tools/views/create-native-view.js +81 -0
  465. package/dist/tools/views/delete-view.d.ts +2 -0
  466. package/dist/tools/views/delete-view.js +23 -0
  467. package/dist/tools/views/list-views.d.ts +2 -0
  468. package/dist/tools/views/list-views.js +32 -0
  469. package/dist/tools/with-annotations.d.ts +6 -0
  470. package/dist/tools/with-annotations.js +339 -0
  471. package/dist/types.d.ts +409 -0
  472. package/dist/types.js +91 -0
  473. package/dist/version.d.ts +4 -0
  474. package/dist/version.js +18 -0
  475. package/package.json +107 -0
@@ -0,0 +1,350 @@
1
+ import { z } from "zod";
2
+ import { buildIndexFromTM1 } from "../../lib/callgraph/tm1-adapter.js";
3
+ import { buildCallGraph, } from "../../lib/callgraph/callGraph.js";
4
+ import { isSecretName, MASK, maskCodeLine, resolveMaskSecrets, } from "../../lib/mask-secrets.js";
5
+ import { CallgraphResultSchema } from "../schemas/items.js";
6
+ import { READ_ONLY } from "../annotations.js";
7
+ import { defineTool } from "../define-tool.js";
8
+ function maskParams(params) {
9
+ return params.map((p) => isSecretName(p.name)
10
+ ? {
11
+ ...p,
12
+ valueRaw: MASK,
13
+ resolution: p.resolution.kind === "literal"
14
+ ? { kind: "literal", value: MASK }
15
+ : p.resolution,
16
+ }
17
+ : p);
18
+ }
19
+ function maskEffective(eff) {
20
+ return eff.map((e) => isSecretName(e.name)
21
+ ? {
22
+ ...e,
23
+ valueRaw: MASK,
24
+ effective: e.effective.kind === "literal"
25
+ ? { kind: "literal", value: MASK }
26
+ : e.effective,
27
+ }
28
+ : e);
29
+ }
30
+ function maskEnv(env) {
31
+ const out = {};
32
+ for (const [k, v] of env.entries()) {
33
+ out[k] =
34
+ isSecretName(k) && v.kind === "literal"
35
+ ? { kind: "literal", value: MASK }
36
+ : v;
37
+ }
38
+ return out;
39
+ }
40
+ function serializeCompact(node) {
41
+ const out = {
42
+ process: node.process,
43
+ children: node.children.map(serializeCompact),
44
+ };
45
+ if (node.cycle)
46
+ out.cycle = true;
47
+ if (node.depthLimitReached)
48
+ out.depthLimitReached = true;
49
+ if (node.unresolvedCalls && node.unresolvedCalls.length > 0) {
50
+ out.unresolvedCalls = node.unresolvedCalls.map((u) => ({
51
+ section: u.section,
52
+ line: u.line,
53
+ funcName: u.funcName,
54
+ expr: u.expr,
55
+ reason: u.reason,
56
+ }));
57
+ }
58
+ return out;
59
+ }
60
+ function serializeNode(node, mask) {
61
+ return {
62
+ process: node.process,
63
+ cycle: node.cycle,
64
+ depthLimitReached: node.depthLimitReached,
65
+ incomingEdge: node.incomingEdge
66
+ ? {
67
+ caller: node.incomingEdge.caller,
68
+ callee: node.incomingEdge.callee,
69
+ section: node.incomingEdge.section,
70
+ line: node.incomingEdge.line,
71
+ funcName: node.incomingEdge.funcName,
72
+ snippet: mask
73
+ ? maskCodeLine(node.incomingEdge.snippet)
74
+ : node.incomingEdge.snippet,
75
+ params: mask
76
+ ? maskParams(node.incomingEdge.params)
77
+ : node.incomingEdge.params,
78
+ effectiveParams: node.incomingEdge.effectiveParams
79
+ ? mask
80
+ ? maskEffective(node.incomingEdge.effectiveParams)
81
+ : node.incomingEdge.effectiveParams
82
+ : undefined,
83
+ }
84
+ : null,
85
+ env: node.env
86
+ ? mask
87
+ ? maskEnv(node.env)
88
+ : Object.fromEntries(node.env.entries())
89
+ : undefined,
90
+ unresolvedCalls: node.unresolvedCalls
91
+ ? node.unresolvedCalls.map((u) => ({
92
+ section: u.section,
93
+ line: u.line,
94
+ funcName: u.funcName,
95
+ expr: u.expr,
96
+ snippet: mask ? maskCodeLine(u.snippet) : u.snippet,
97
+ reason: u.reason,
98
+ }))
99
+ : undefined,
100
+ children: node.children.map((c) => serializeNode(c, mask)),
101
+ };
102
+ }
103
+ function summarize(root) {
104
+ const map = new Map();
105
+ let totalNodes = 0;
106
+ let maxDepth = 0;
107
+ let cyclesDetected = 0;
108
+ let depthLimitsHit = 0;
109
+ function walk(node, depth) {
110
+ totalNodes++;
111
+ if (depth > maxDepth)
112
+ maxDepth = depth;
113
+ const isCycle = !!node.cycle;
114
+ const isDepthLimit = !!node.depthLimitReached;
115
+ if (isCycle)
116
+ cyclesDetected++;
117
+ if (isDepthLimit)
118
+ depthLimitsHit++;
119
+ const existing = map.get(node.process);
120
+ if (existing) {
121
+ existing.occurrences++;
122
+ if (depth < existing.depthMin)
123
+ existing.depthMin = depth;
124
+ if (depth > existing.depthMax)
125
+ existing.depthMax = depth;
126
+ existing.cycle = existing.cycle || isCycle;
127
+ existing.depthLimitReached = existing.depthLimitReached || isDepthLimit;
128
+ }
129
+ else {
130
+ map.set(node.process, {
131
+ process: node.process,
132
+ depthMin: depth,
133
+ depthMax: depth,
134
+ occurrences: 1,
135
+ cycle: isCycle,
136
+ depthLimitReached: isDepthLimit,
137
+ unresolvedCount: node.unresolvedCalls?.length ?? 0,
138
+ });
139
+ }
140
+ for (const child of node.children)
141
+ walk(child, depth + 1);
142
+ }
143
+ walk(root, 0);
144
+ const processes = Array.from(map.values()).sort((a, b) => {
145
+ if (a.depthMin !== b.depthMin)
146
+ return a.depthMin - b.depthMin;
147
+ return b.occurrences - a.occurrences;
148
+ });
149
+ return {
150
+ root: root.process,
151
+ totalNodes,
152
+ uniqueProcesses: map.size,
153
+ maxDepth,
154
+ cyclesDetected,
155
+ depthLimitsHit,
156
+ processes,
157
+ };
158
+ }
159
+ /**
160
+ * Global fan-out/fan-in ranking across ALL processes — answers "which process
161
+ * triggers (or is triggered by) the most others" without a per-process traversal.
162
+ * Counts ExecuteProcess/RunProcess edges (targetKind='process') from the flat ref index.
163
+ */
164
+ export function globalRanking(index, opts) {
165
+ const { rankBy, topN, includeSystem } = opts;
166
+ const isSystem = (name) => name.startsWith("}");
167
+ const acc = new Map();
168
+ const ensure = (name) => {
169
+ const key = name.toLowerCase();
170
+ let e = acc.get(key);
171
+ if (!e) {
172
+ e = {
173
+ process: name,
174
+ outgoingCalls: 0,
175
+ incomingCalls: 0,
176
+ callees: new Set(),
177
+ callers: new Set(),
178
+ };
179
+ acc.set(key, e);
180
+ }
181
+ return e;
182
+ };
183
+ let totalCallEdges = 0;
184
+ for (const ref of index.all) {
185
+ if (ref.targetKind !== "process")
186
+ continue;
187
+ const src = ref.sourceName;
188
+ const tgt = ref.targetName;
189
+ if (!includeSystem && (isSystem(src) || isSystem(tgt)))
190
+ continue;
191
+ totalCallEdges++;
192
+ const s = ensure(src);
193
+ const t = ensure(tgt);
194
+ s.outgoingCalls++;
195
+ s.callees.add(tgt.toLowerCase());
196
+ t.incomingCalls++;
197
+ t.callers.add(src.toLowerCase());
198
+ }
199
+ let totalProcessesIndexed = 0;
200
+ for (const lc of index.processParams.keys()) {
201
+ if (!includeSystem && isSystem(lc))
202
+ continue;
203
+ totalProcessesIndexed++;
204
+ }
205
+ const all = Array.from(acc.values()).map((e) => ({
206
+ process: e.process,
207
+ outgoingCalls: e.outgoingCalls,
208
+ outgoingDistinct: e.callees.size,
209
+ incomingCalls: e.incomingCalls,
210
+ incomingDistinct: e.callers.size,
211
+ }));
212
+ all.sort((a, b) => {
213
+ const primary = rankBy === "incoming"
214
+ ? b.incomingCalls - a.incomingCalls
215
+ : b.outgoingCalls - a.outgoingCalls;
216
+ if (primary !== 0)
217
+ return primary;
218
+ const secondary = rankBy === "incoming"
219
+ ? b.outgoingCalls - a.outgoingCalls
220
+ : b.incomingCalls - a.incomingCalls;
221
+ if (secondary !== 0)
222
+ return secondary;
223
+ return a.process.localeCompare(b.process);
224
+ });
225
+ const ranking = all.slice(0, topN);
226
+ return {
227
+ rankBy,
228
+ totalProcessesIndexed,
229
+ processesWithEdges: all.length,
230
+ totalCallEdges,
231
+ truncated: all.length > ranking.length,
232
+ ranking,
233
+ };
234
+ }
235
+ export const registerAnalyzeCallgraph = defineTool({
236
+ name: "tm1_analyze_callgraph",
237
+ description: "Build a process call graph (ExecuteProcess/RunProcess) for a TI process. direction='downstream' shows what `start` calls (with parameter env propagation: literal/passthrough/dynamic). direction='upstream' shows callers. Returns nested JSON tree. Omit `start` for a global ranking: every process ranked by outgoing (fan-out) or incoming (fan-in) call counts — answers 'which process triggers/is triggered by the most others' without a per-process traversal. ExecuteProcess/RunProcess calls whose target is a computed expression or process parameter (not statically resolvable) are surfaced per node via `unresolvedCalls` (full/compact) or `unresolvedCount` (summary) — flagged, not resolved.",
238
+ annotations: READ_ONLY,
239
+ output: CallgraphResultSchema,
240
+ input: {
241
+ start: z
242
+ .string()
243
+ .optional()
244
+ .describe("Process name to start traversal from. Omit for global ranking across all processes."),
245
+ direction: z.enum(["downstream", "upstream"]).default("downstream"),
246
+ maxDepth: z.number().int().min(1).max(50).optional().default(20),
247
+ includeSystem: z
248
+ .boolean()
249
+ .optional()
250
+ .default(false)
251
+ .describe("Include TM1 control objects (names starting with '}') in graph. Default: false."),
252
+ includeControl: z
253
+ .boolean()
254
+ .optional()
255
+ .default(false)
256
+ .describe("Index control processes/cubes/chores (broader graph). Default: false."),
257
+ mode: z
258
+ .enum(["full", "summary", "compact"])
259
+ .optional()
260
+ .default("full")
261
+ .describe("Output mode. 'full' returns nested tree with incomingEdge/env/effectiveParams (large for deep graphs). 'summary' returns flat per-process aggregates (occurrences, depthMin/Max, cycle/depthLimit flags) for triage. 'compact' returns the nested tree but only {process, cycle?, depthLimitReached?, children[]} — drops params, env, snippets, effectiveParams. Use compact for structural overviews where call shape matters but param values do not."),
262
+ maskSecrets: z
263
+ .boolean()
264
+ .optional()
265
+ .default(true)
266
+ .describe("Redact param values whose name matches /pass|pwd|secret|token|key|credential|auth/i to '***'. Also masks the inline snippet. Default: true. Set false only when debugging credential propagation locally."),
267
+ rankBy: z
268
+ .enum(["outgoing", "incoming"])
269
+ .optional()
270
+ .default("outgoing")
271
+ .describe("Global-ranking mode only (when `start` is omitted). 'outgoing' ranks by fan-out (most ExecuteProcess call sites), 'incoming' by fan-in (most called). Default: outgoing."),
272
+ topN: z
273
+ .number()
274
+ .int()
275
+ .positive()
276
+ .max(1000)
277
+ .optional()
278
+ .default(50)
279
+ .describe("Global-ranking mode only: cap on ranked processes returned (default 50)."),
280
+ },
281
+ handler: async ({ start, direction, maxDepth, includeSystem, includeControl, mode, maskSecrets: maskSecretsRequested, rankBy, topN, }, tm1Client) => {
282
+ // A model-supplied `maskSecrets:false` only takes effect when the
283
+ // operator allowed it via TM1_ALLOW_UNMASKED_SECRETS.
284
+ const maskSecrets = resolveMaskSecrets(maskSecretsRequested);
285
+ const index = await buildIndexFromTM1(tm1Client, { includeControl });
286
+ if (start === undefined || start === "") {
287
+ const result = globalRanking(index, { rankBy, topN, includeSystem });
288
+ return {
289
+ content: [
290
+ {
291
+ type: "text",
292
+ text: JSON.stringify({ mode: "globalRanking", ...result }),
293
+ },
294
+ ],
295
+ };
296
+ }
297
+ const lc = start.toLowerCase();
298
+ if (!index.processParams.has(lc) &&
299
+ !index.bySourceProcess.has(lc) &&
300
+ !index.byProcess.has(lc)) {
301
+ return {
302
+ content: [
303
+ {
304
+ type: "text",
305
+ text: JSON.stringify({
306
+ warning: `Process "${start}" not found in index.`,
307
+ indexedProcessCount: index.processParams.size,
308
+ }),
309
+ },
310
+ ],
311
+ };
312
+ }
313
+ const tree = buildCallGraph(index, start, {
314
+ direction,
315
+ maxDepth,
316
+ includeSystem,
317
+ });
318
+ let payload;
319
+ if (mode === "summary") {
320
+ payload = {
321
+ start,
322
+ direction,
323
+ mode,
324
+ maskSecrets,
325
+ summary: summarize(tree),
326
+ };
327
+ }
328
+ else if (mode === "compact") {
329
+ payload = { start, direction, mode, tree: serializeCompact(tree) };
330
+ }
331
+ else {
332
+ payload = {
333
+ start,
334
+ direction,
335
+ mode,
336
+ maskSecrets,
337
+ tree: serializeNode(tree, maskSecrets),
338
+ };
339
+ }
340
+ return {
341
+ content: [
342
+ {
343
+ type: "text",
344
+ text: JSON.stringify(payload),
345
+ },
346
+ ],
347
+ };
348
+ },
349
+ });
350
+ //# sourceMappingURL=analyze-callgraph.js.map
@@ -0,0 +1,2 @@
1
+ export declare const registerAnalyzeChoreGraph: import("../define-tool.js").ToolRegistrar;
2
+ //# sourceMappingURL=analyze-chore-graph.d.ts.map
@@ -0,0 +1,148 @@
1
+ import { z } from "zod";
2
+ import { buildIndexFromTM1 } from "../../lib/callgraph/tm1-adapter.js";
3
+ import { buildChoreGraph } from "../../lib/callgraph/choreGraph.js";
4
+ import { isSecretName, MASK, maskCodeLine, resolveMaskSecrets, } from "../../lib/mask-secrets.js";
5
+ import { ChoreGraphResultSchema } from "../schemas/items.js";
6
+ import { READ_ONLY } from "../annotations.js";
7
+ import { defineTool } from "../define-tool.js";
8
+ function maskParams(params) {
9
+ return params.map((p) => isSecretName(p.name)
10
+ ? {
11
+ ...p,
12
+ valueRaw: MASK,
13
+ resolution: p.resolution.kind === "literal"
14
+ ? { kind: "literal", value: MASK }
15
+ : p.resolution,
16
+ }
17
+ : p);
18
+ }
19
+ function maskEffective(eff) {
20
+ return eff.map((e) => isSecretName(e.name)
21
+ ? {
22
+ ...e,
23
+ valueRaw: MASK,
24
+ effective: e.effective.kind === "literal"
25
+ ? { kind: "literal", value: MASK }
26
+ : e.effective,
27
+ }
28
+ : e);
29
+ }
30
+ function maskEnv(env) {
31
+ const out = {};
32
+ for (const [k, v] of env.entries()) {
33
+ out[k] =
34
+ isSecretName(k) && v.kind === "literal"
35
+ ? { kind: "literal", value: MASK }
36
+ : v;
37
+ }
38
+ return out;
39
+ }
40
+ function maskChoreParams(params) {
41
+ if (!params)
42
+ return params;
43
+ return params.map((p) => {
44
+ const name = (p.Name ?? p.name);
45
+ return name && isSecretName(name) ? { ...p, Value: MASK, value: MASK } : p;
46
+ });
47
+ }
48
+ function serializeNode(node, mask) {
49
+ return {
50
+ process: node.process,
51
+ cycle: node.cycle,
52
+ depthLimitReached: node.depthLimitReached,
53
+ incomingEdge: node.incomingEdge
54
+ ? {
55
+ caller: node.incomingEdge.caller,
56
+ callee: node.incomingEdge.callee,
57
+ section: node.incomingEdge.section,
58
+ line: node.incomingEdge.line,
59
+ funcName: node.incomingEdge.funcName,
60
+ snippet: mask
61
+ ? maskCodeLine(node.incomingEdge.snippet)
62
+ : node.incomingEdge.snippet,
63
+ params: mask
64
+ ? maskParams(node.incomingEdge.params)
65
+ : node.incomingEdge.params,
66
+ effectiveParams: node.incomingEdge.effectiveParams
67
+ ? mask
68
+ ? maskEffective(node.incomingEdge.effectiveParams)
69
+ : node.incomingEdge.effectiveParams
70
+ : undefined,
71
+ }
72
+ : null,
73
+ env: node.env
74
+ ? mask
75
+ ? maskEnv(node.env)
76
+ : Object.fromEntries(node.env.entries())
77
+ : undefined,
78
+ children: node.children.map((c) => serializeNode(c, mask)),
79
+ };
80
+ }
81
+ export const registerAnalyzeChoreGraph = defineTool({
82
+ name: "tm1_analyze_chore_graph",
83
+ description: "Build downstream call graphs for every task of a TM1 chore. Each task's tree is seeded with the chore's task params (literals) which propagate through ExecuteProcess calls. Returns one tree per task plus the chore's own params per task.",
84
+ annotations: READ_ONLY,
85
+ output: ChoreGraphResultSchema,
86
+ input: {
87
+ choreName: z.string().describe("Chore name (case-insensitive)"),
88
+ includeSystem: z
89
+ .boolean()
90
+ .optional()
91
+ .default(false)
92
+ .describe("Include TM1 control objects in the graph. Default: false."),
93
+ includeControl: z
94
+ .boolean()
95
+ .optional()
96
+ .default(false)
97
+ .describe("Index control objects when building the index. Default: false."),
98
+ maskSecrets: z
99
+ .boolean()
100
+ .optional()
101
+ .default(true)
102
+ .describe("Redact param values whose name matches /pass|pwd|secret|token|key|credential|auth/i to '***'. Includes chore-task params, edge params, env, and snippet. Default: true."),
103
+ },
104
+ handler: async ({ choreName, includeSystem, includeControl, maskSecrets: maskSecretsRequested, }, tm1Client) => {
105
+ // A model-supplied `maskSecrets:false` only takes effect when the
106
+ // operator allowed it via TM1_ALLOW_UNMASKED_SECRETS.
107
+ const maskSecrets = resolveMaskSecrets(maskSecretsRequested);
108
+ const index = await buildIndexFromTM1(tm1Client, { includeControl });
109
+ const graph = buildChoreGraph(index, choreName, { includeSystem });
110
+ if (!graph) {
111
+ return {
112
+ content: [
113
+ {
114
+ type: "text",
115
+ text: JSON.stringify({
116
+ // Same top-level shape as the success branch so the strict
117
+ // output schema accepts the not-found payload.
118
+ choreName,
119
+ tasks: [],
120
+ warning: `Chore "${choreName}" not found.`,
121
+ indexedChoreCount: index.choreTasks.size,
122
+ }),
123
+ },
124
+ ],
125
+ };
126
+ }
127
+ return {
128
+ content: [
129
+ {
130
+ type: "text",
131
+ text: JSON.stringify({
132
+ choreName: graph.choreName,
133
+ maskSecrets,
134
+ tasks: graph.tasks.map((t) => ({
135
+ step: t.step,
136
+ processName: t.processName,
137
+ choreParams: maskSecrets
138
+ ? maskChoreParams(t.choreParams)
139
+ : t.choreParams,
140
+ tree: serializeNode(t.tree, maskSecrets),
141
+ })),
142
+ }, null, 2),
143
+ },
144
+ ],
145
+ };
146
+ },
147
+ });
148
+ //# sourceMappingURL=analyze-chore-graph.js.map
@@ -0,0 +1,2 @@
1
+ export declare const registerAnalyzeObjectUsage: import("../define-tool.js").ToolRegistrar;
2
+ //# sourceMappingURL=analyze-object-usage.d.ts.map
@@ -0,0 +1,143 @@
1
+ import { z } from "zod";
2
+ import { buildIndexFromTM1 } from "../../lib/callgraph/tm1-adapter.js";
3
+ import { buildCubeOrDimUsages } from "../../lib/callgraph/callGraph.js";
4
+ import { ObjectUsageResultSchema } from "../schemas/items.js";
5
+ import { READ_ONLY } from "../annotations.js";
6
+ import { defineTool } from "../define-tool.js";
7
+ // Backstop for the bulk/audit path, mirroring UNBOUNDED_MAX_ITEMS in
8
+ // pagination.ts. Usage rows are small, so this sits higher than the list-tool
9
+ // cap — but it is a bound, which "omit limit for everything" was not.
10
+ const USAGE_MAX_ITEMS = 5000;
11
+ export const registerAnalyzeObjectUsage = defineTool({
12
+ name: "tm1_analyze_object_usage",
13
+ description: [
14
+ "Find every reference to a cube or dimension across all TI processes (CellGet/Put, ViewExtract, ZeroOut, …) and cube rules (DB(), [dim].[el]).",
15
+ "Returns a flat list sorted by source; excludes a cube's self-references inside its own rules. accessMode picks read vs write (data-flow) analysis; mode='summary' collapses per-source and drops snippets.",
16
+ ],
17
+ annotations: READ_ONLY,
18
+ output: ObjectUsageResultSchema,
19
+ input: {
20
+ kind: z.enum(["cube", "dimension"]).describe("Object kind to look up"),
21
+ objectName: z
22
+ .string()
23
+ .describe("Cube or dimension name (case-insensitive)"),
24
+ accessMode: z
25
+ .enum(["all", "read", "write"])
26
+ .optional()
27
+ .default("all")
28
+ .describe("Filter by access type. 'write': CellPut*/ViewZeroOut/CubeClearData/… (data-flow analysis). " +
29
+ "'read': CellGet*/DB()-rules (consumption analysis). 'all' (default): every reference."),
30
+ includeSystem: z
31
+ .boolean()
32
+ .optional()
33
+ .default(false)
34
+ .describe("Include sources whose names start with '}' (control objects). Default: false."),
35
+ includeControl: z
36
+ .boolean()
37
+ .optional()
38
+ .default(false)
39
+ .describe("Index control processes/cubes when building the index. Default: false."),
40
+ limit: z
41
+ .number()
42
+ .int()
43
+ .positive()
44
+ .max(USAGE_MAX_ITEMS)
45
+ .optional()
46
+ .describe(`Cap the number of returned usages (or sources in summary mode). Omit for bulk load (audit use-case) — still bounded at ${USAGE_MAX_ITEMS}, truncated=true says the bound bit.`),
47
+ mode: z
48
+ .enum(["full", "summary"])
49
+ .optional()
50
+ .default("full")
51
+ .describe("'full' (default): individual usage lines with snippets. 'summary': aggregate per source " +
52
+ "({sourceKind, sourceName, accessTypes[], sections[], funcNames[], count}), sorted by count desc, " +
53
+ "snippets dropped. Use summary for compact data-flow overviews on heavily-referenced objects."),
54
+ },
55
+ handler: async ({ kind, objectName, accessMode, includeSystem, includeControl, limit, mode, }, tm1Client) => {
56
+ // An omitted `limit` used to mean "no limit at all" — on a large model
57
+ // that is a full-model dump into one response. It now means "as much as
58
+ // is still readable", and `truncated` says when that bound bit, so the
59
+ // audit use-case still gets bulk output without an unbounded worst case.
60
+ const effectiveLimit = limit ?? USAGE_MAX_ITEMS;
61
+ const index = await buildIndexFromTM1(tm1Client, { includeControl });
62
+ const all = buildCubeOrDimUsages(index, kind, objectName, {
63
+ includeSystem,
64
+ accessMode,
65
+ });
66
+ if (mode === "summary") {
67
+ // Aggregate per source (process or rule). Key by kind+name so a process
68
+ // and a cube-rule sharing a name don't collapse into one row.
69
+ const bySource = new Map();
70
+ for (const u of all) {
71
+ const key = `${u.sourceKind}\x00${u.sourceName}`;
72
+ let s = bySource.get(key);
73
+ if (!s) {
74
+ s = {
75
+ sourceKind: u.sourceKind,
76
+ sourceName: u.sourceName,
77
+ accessTypes: new Set(),
78
+ sections: new Set(),
79
+ funcNames: new Set(),
80
+ count: 0,
81
+ };
82
+ bySource.set(key, s);
83
+ }
84
+ s.accessTypes.add(u.accessType);
85
+ s.sections.add(u.section);
86
+ if (u.funcName)
87
+ s.funcNames.add(u.funcName);
88
+ s.count++;
89
+ }
90
+ const allSources = [...bySource.values()]
91
+ .map((s) => ({
92
+ sourceKind: s.sourceKind,
93
+ sourceName: s.sourceName,
94
+ accessTypes: [...s.accessTypes].sort(),
95
+ sections: [...s.sections].sort(),
96
+ funcNames: [...s.funcNames].sort(),
97
+ count: s.count,
98
+ }))
99
+ .sort((a, b) => b.count - a.count || a.sourceName.localeCompare(b.sourceName));
100
+ const sumTruncated = allSources.length > effectiveLimit;
101
+ const sources = sumTruncated
102
+ ? allSources.slice(0, effectiveLimit)
103
+ : allSources;
104
+ return {
105
+ content: [
106
+ {
107
+ type: "text",
108
+ text: JSON.stringify({
109
+ kind,
110
+ name: objectName,
111
+ accessMode,
112
+ mode,
113
+ count: all.length,
114
+ sourceCount: allSources.length,
115
+ returned: sources.length,
116
+ truncated: sumTruncated,
117
+ sources,
118
+ }),
119
+ },
120
+ ],
121
+ };
122
+ }
123
+ const truncated = all.length > effectiveLimit;
124
+ const usages = truncated ? all.slice(0, effectiveLimit) : all;
125
+ return {
126
+ content: [
127
+ {
128
+ type: "text",
129
+ text: JSON.stringify({
130
+ kind,
131
+ name: objectName,
132
+ accessMode,
133
+ count: all.length,
134
+ returned: usages.length,
135
+ truncated,
136
+ usages,
137
+ }),
138
+ },
139
+ ],
140
+ };
141
+ },
142
+ });
143
+ //# sourceMappingURL=analyze-object-usage.js.map
@@ -0,0 +1,2 @@
1
+ export declare const registerAuditComplexity: import("../define-tool.js").ToolRegistrar;
2
+ //# sourceMappingURL=audit-complexity.d.ts.map