@yohakuforce/core 0.4.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 (511) hide show
  1. package/README.md +65 -0
  2. package/dist/adapters/dx-mcp/dx-mcp-source-adapter.d.ts +25 -0
  3. package/dist/adapters/dx-mcp/dx-mcp-source-adapter.d.ts.map +1 -0
  4. package/dist/adapters/dx-mcp/dx-mcp-source-adapter.js +45 -0
  5. package/dist/adapters/dx-mcp/dx-mcp-source-adapter.js.map +1 -0
  6. package/dist/adapters/dx-mcp/index.d.ts +3 -0
  7. package/dist/adapters/dx-mcp/index.d.ts.map +1 -0
  8. package/dist/adapters/dx-mcp/index.js +2 -0
  9. package/dist/adapters/dx-mcp/index.js.map +1 -0
  10. package/dist/adapters/local/index.d.ts +5 -0
  11. package/dist/adapters/local/index.d.ts.map +1 -0
  12. package/dist/adapters/local/index.js +3 -0
  13. package/dist/adapters/local/index.js.map +1 -0
  14. package/dist/adapters/local/local-source-adapter.d.ts +19 -0
  15. package/dist/adapters/local/local-source-adapter.d.ts.map +1 -0
  16. package/dist/adapters/local/local-source-adapter.js +214 -0
  17. package/dist/adapters/local/local-source-adapter.js.map +1 -0
  18. package/dist/adapters/local/sfdx-project.d.ts +14 -0
  19. package/dist/adapters/local/sfdx-project.d.ts.map +1 -0
  20. package/dist/adapters/local/sfdx-project.js +76 -0
  21. package/dist/adapters/local/sfdx-project.js.map +1 -0
  22. package/dist/change-summary/index.d.ts +4 -0
  23. package/dist/change-summary/index.d.ts.map +1 -0
  24. package/dist/change-summary/index.js +3 -0
  25. package/dist/change-summary/index.js.map +1 -0
  26. package/dist/change-summary/schema.json +152 -0
  27. package/dist/change-summary/types.d.ts +52 -0
  28. package/dist/change-summary/types.d.ts.map +1 -0
  29. package/dist/change-summary/types.js +18 -0
  30. package/dist/change-summary/types.js.map +1 -0
  31. package/dist/change-summary/validate.d.ts +8 -0
  32. package/dist/change-summary/validate.d.ts.map +1 -0
  33. package/dist/change-summary/validate.js +35 -0
  34. package/dist/change-summary/validate.js.map +1 -0
  35. package/dist/cli.d.ts +3 -0
  36. package/dist/cli.d.ts.map +1 -0
  37. package/dist/cli.js +945 -0
  38. package/dist/cli.js.map +1 -0
  39. package/dist/consistency/check.d.ts +4 -0
  40. package/dist/consistency/check.d.ts.map +1 -0
  41. package/dist/consistency/check.js +70 -0
  42. package/dist/consistency/check.js.map +1 -0
  43. package/dist/consistency/index.d.ts +4 -0
  44. package/dist/consistency/index.d.ts.map +1 -0
  45. package/dist/consistency/index.js +3 -0
  46. package/dist/consistency/index.js.map +1 -0
  47. package/dist/consistency/types.d.ts +29 -0
  48. package/dist/consistency/types.d.ts.map +1 -0
  49. package/dist/consistency/types.js +12 -0
  50. package/dist/consistency/types.js.map +1 -0
  51. package/dist/diff/classify-files.d.ts +9 -0
  52. package/dist/diff/classify-files.d.ts.map +1 -0
  53. package/dist/diff/classify-files.js +105 -0
  54. package/dist/diff/classify-files.js.map +1 -0
  55. package/dist/diff/diff.d.ts +11 -0
  56. package/dist/diff/diff.d.ts.map +1 -0
  57. package/dist/diff/diff.js +69 -0
  58. package/dist/diff/diff.js.map +1 -0
  59. package/dist/diff/git.d.ts +28 -0
  60. package/dist/diff/git.d.ts.map +1 -0
  61. package/dist/diff/git.js +115 -0
  62. package/dist/diff/git.js.map +1 -0
  63. package/dist/diff/index.d.ts +7 -0
  64. package/dist/diff/index.d.ts.map +1 -0
  65. package/dist/diff/index.js +5 -0
  66. package/dist/diff/index.js.map +1 -0
  67. package/dist/diff/types.d.ts +28 -0
  68. package/dist/diff/types.d.ts.map +1 -0
  69. package/dist/diff/types.js +4 -0
  70. package/dist/diff/types.js.map +1 -0
  71. package/dist/explain/block-registry.d.ts +17 -0
  72. package/dist/explain/block-registry.d.ts.map +1 -0
  73. package/dist/explain/block-registry.js +73 -0
  74. package/dist/explain/block-registry.js.map +1 -0
  75. package/dist/explain/index.d.ts +22 -0
  76. package/dist/explain/index.d.ts.map +1 -0
  77. package/dist/explain/index.js +128 -0
  78. package/dist/explain/index.js.map +1 -0
  79. package/dist/graph/builder.d.ts +9 -0
  80. package/dist/graph/builder.d.ts.map +1 -0
  81. package/dist/graph/builder.js +276 -0
  82. package/dist/graph/builder.js.map +1 -0
  83. package/dist/graph/dependencies.d.ts +5 -0
  84. package/dist/graph/dependencies.d.ts.map +1 -0
  85. package/dist/graph/dependencies.js +38 -0
  86. package/dist/graph/dependencies.js.map +1 -0
  87. package/dist/graph/extractors/apex-body.d.ts +5 -0
  88. package/dist/graph/extractors/apex-body.d.ts.map +1 -0
  89. package/dist/graph/extractors/apex-body.js +289 -0
  90. package/dist/graph/extractors/apex-body.js.map +1 -0
  91. package/dist/graph/extractors/apex-class.d.ts +5 -0
  92. package/dist/graph/extractors/apex-class.d.ts.map +1 -0
  93. package/dist/graph/extractors/apex-class.js +43 -0
  94. package/dist/graph/extractors/apex-class.js.map +1 -0
  95. package/dist/graph/extractors/apex-control-flow.d.ts +33 -0
  96. package/dist/graph/extractors/apex-control-flow.d.ts.map +1 -0
  97. package/dist/graph/extractors/apex-control-flow.js +432 -0
  98. package/dist/graph/extractors/apex-control-flow.js.map +1 -0
  99. package/dist/graph/extractors/apex-trigger.d.ts +4 -0
  100. package/dist/graph/extractors/apex-trigger.d.ts.map +1 -0
  101. package/dist/graph/extractors/apex-trigger.js +40 -0
  102. package/dist/graph/extractors/apex-trigger.js.map +1 -0
  103. package/dist/graph/extractors/approval-process.d.ts +4 -0
  104. package/dist/graph/extractors/approval-process.d.ts.map +1 -0
  105. package/dist/graph/extractors/approval-process.js +103 -0
  106. package/dist/graph/extractors/approval-process.js.map +1 -0
  107. package/dist/graph/extractors/aura-bundle.d.ts +4 -0
  108. package/dist/graph/extractors/aura-bundle.d.ts.map +1 -0
  109. package/dist/graph/extractors/aura-bundle.js +77 -0
  110. package/dist/graph/extractors/aura-bundle.js.map +1 -0
  111. package/dist/graph/extractors/custom-application.d.ts +4 -0
  112. package/dist/graph/extractors/custom-application.d.ts.map +1 -0
  113. package/dist/graph/extractors/custom-application.js +55 -0
  114. package/dist/graph/extractors/custom-application.js.map +1 -0
  115. package/dist/graph/extractors/custom-metadata-record.d.ts +4 -0
  116. package/dist/graph/extractors/custom-metadata-record.d.ts.map +1 -0
  117. package/dist/graph/extractors/custom-metadata-record.js +53 -0
  118. package/dist/graph/extractors/custom-metadata-record.js.map +1 -0
  119. package/dist/graph/extractors/field.d.ts +4 -0
  120. package/dist/graph/extractors/field.d.ts.map +1 -0
  121. package/dist/graph/extractors/field.js +36 -0
  122. package/dist/graph/extractors/field.js.map +1 -0
  123. package/dist/graph/extractors/flexi-page.d.ts +4 -0
  124. package/dist/graph/extractors/flexi-page.d.ts.map +1 -0
  125. package/dist/graph/extractors/flexi-page.js +46 -0
  126. package/dist/graph/extractors/flexi-page.js.map +1 -0
  127. package/dist/graph/extractors/flow-body.d.ts +3 -0
  128. package/dist/graph/extractors/flow-body.d.ts.map +1 -0
  129. package/dist/graph/extractors/flow-body.js +144 -0
  130. package/dist/graph/extractors/flow-body.js.map +1 -0
  131. package/dist/graph/extractors/flow.d.ts +4 -0
  132. package/dist/graph/extractors/flow.d.ts.map +1 -0
  133. package/dist/graph/extractors/flow.js +20 -0
  134. package/dist/graph/extractors/flow.js.map +1 -0
  135. package/dist/graph/extractors/index.d.ts +24 -0
  136. package/dist/graph/extractors/index.d.ts.map +1 -0
  137. package/dist/graph/extractors/index.js +23 -0
  138. package/dist/graph/extractors/index.js.map +1 -0
  139. package/dist/graph/extractors/layout.d.ts +4 -0
  140. package/dist/graph/extractors/layout.d.ts.map +1 -0
  141. package/dist/graph/extractors/layout.js +89 -0
  142. package/dist/graph/extractors/layout.js.map +1 -0
  143. package/dist/graph/extractors/lwc.d.ts +4 -0
  144. package/dist/graph/extractors/lwc.d.ts.map +1 -0
  145. package/dist/graph/extractors/lwc.js +170 -0
  146. package/dist/graph/extractors/lwc.js.map +1 -0
  147. package/dist/graph/extractors/named-credential.d.ts +9 -0
  148. package/dist/graph/extractors/named-credential.d.ts.map +1 -0
  149. package/dist/graph/extractors/named-credential.js +38 -0
  150. package/dist/graph/extractors/named-credential.js.map +1 -0
  151. package/dist/graph/extractors/object.d.ts +4 -0
  152. package/dist/graph/extractors/object.d.ts.map +1 -0
  153. package/dist/graph/extractors/object.js +16 -0
  154. package/dist/graph/extractors/object.js.map +1 -0
  155. package/dist/graph/extractors/permission-set-body.d.ts +3 -0
  156. package/dist/graph/extractors/permission-set-body.d.ts.map +1 -0
  157. package/dist/graph/extractors/permission-set-body.js +80 -0
  158. package/dist/graph/extractors/permission-set-body.js.map +1 -0
  159. package/dist/graph/extractors/permission-set.d.ts +4 -0
  160. package/dist/graph/extractors/permission-set.d.ts.map +1 -0
  161. package/dist/graph/extractors/permission-set.js +17 -0
  162. package/dist/graph/extractors/permission-set.js.map +1 -0
  163. package/dist/graph/extractors/profile.d.ts +4 -0
  164. package/dist/graph/extractors/profile.d.ts.map +1 -0
  165. package/dist/graph/extractors/profile.js +15 -0
  166. package/dist/graph/extractors/profile.js.map +1 -0
  167. package/dist/graph/extractors/record-type.d.ts +4 -0
  168. package/dist/graph/extractors/record-type.d.ts.map +1 -0
  169. package/dist/graph/extractors/record-type.js +19 -0
  170. package/dist/graph/extractors/record-type.js.map +1 -0
  171. package/dist/graph/extractors/remote-site-setting.d.ts +4 -0
  172. package/dist/graph/extractors/remote-site-setting.d.ts.map +1 -0
  173. package/dist/graph/extractors/remote-site-setting.js +15 -0
  174. package/dist/graph/extractors/remote-site-setting.js.map +1 -0
  175. package/dist/graph/extractors/sharing-rules.d.ts +8 -0
  176. package/dist/graph/extractors/sharing-rules.d.ts.map +1 -0
  177. package/dist/graph/extractors/sharing-rules.js +122 -0
  178. package/dist/graph/extractors/sharing-rules.js.map +1 -0
  179. package/dist/graph/extractors/types.d.ts +8 -0
  180. package/dist/graph/extractors/types.d.ts.map +1 -0
  181. package/dist/graph/extractors/types.js +2 -0
  182. package/dist/graph/extractors/types.js.map +1 -0
  183. package/dist/graph/extractors/validation-rule.d.ts +4 -0
  184. package/dist/graph/extractors/validation-rule.d.ts.map +1 -0
  185. package/dist/graph/extractors/validation-rule.js +19 -0
  186. package/dist/graph/extractors/validation-rule.js.map +1 -0
  187. package/dist/graph/extractors/visualforce-component.d.ts +4 -0
  188. package/dist/graph/extractors/visualforce-component.d.ts.map +1 -0
  189. package/dist/graph/extractors/visualforce-component.js +90 -0
  190. package/dist/graph/extractors/visualforce-component.js.map +1 -0
  191. package/dist/graph/extractors/visualforce-page.d.ts +4 -0
  192. package/dist/graph/extractors/visualforce-page.d.ts.map +1 -0
  193. package/dist/graph/extractors/visualforce-page.js +92 -0
  194. package/dist/graph/extractors/visualforce-page.js.map +1 -0
  195. package/dist/graph/index.d.ts +8 -0
  196. package/dist/graph/index.d.ts.map +1 -0
  197. package/dist/graph/index.js +5 -0
  198. package/dist/graph/index.js.map +1 -0
  199. package/dist/graph/parse-xml.d.ts +5 -0
  200. package/dist/graph/parse-xml.d.ts.map +1 -0
  201. package/dist/graph/parse-xml.js +39 -0
  202. package/dist/graph/parse-xml.js.map +1 -0
  203. package/dist/graph/sqlite-reader.d.ts +33 -0
  204. package/dist/graph/sqlite-reader.d.ts.map +1 -0
  205. package/dist/graph/sqlite-reader.js +445 -0
  206. package/dist/graph/sqlite-reader.js.map +1 -0
  207. package/dist/graph/sqlite-store.d.ts +78 -0
  208. package/dist/graph/sqlite-store.d.ts.map +1 -0
  209. package/dist/graph/sqlite-store.js +683 -0
  210. package/dist/graph/sqlite-store.js.map +1 -0
  211. package/dist/index.d.ts +33 -0
  212. package/dist/index.d.ts.map +1 -0
  213. package/dist/index.js +18 -0
  214. package/dist/index.js.map +1 -0
  215. package/dist/init/index.d.ts +4 -0
  216. package/dist/init/index.d.ts.map +1 -0
  217. package/dist/init/index.js +3 -0
  218. package/dist/init/index.js.map +1 -0
  219. package/dist/init/init.d.ts +9 -0
  220. package/dist/init/init.d.ts.map +1 -0
  221. package/dist/init/init.js +92 -0
  222. package/dist/init/init.js.map +1 -0
  223. package/dist/init/types.d.ts +37 -0
  224. package/dist/init/types.d.ts.map +1 -0
  225. package/dist/init/types.js +59 -0
  226. package/dist/init/types.js.map +1 -0
  227. package/dist/merge/index.d.ts +6 -0
  228. package/dist/merge/index.d.ts.map +1 -0
  229. package/dist/merge/index.js +5 -0
  230. package/dist/merge/index.js.map +1 -0
  231. package/dist/merge/markers.d.ts +8 -0
  232. package/dist/merge/markers.d.ts.map +1 -0
  233. package/dist/merge/markers.js +30 -0
  234. package/dist/merge/markers.js.map +1 -0
  235. package/dist/merge/merge.d.ts +12 -0
  236. package/dist/merge/merge.d.ts.map +1 -0
  237. package/dist/merge/merge.js +116 -0
  238. package/dist/merge/merge.js.map +1 -0
  239. package/dist/merge/parser.d.ts +5 -0
  240. package/dist/merge/parser.d.ts.map +1 -0
  241. package/dist/merge/parser.js +63 -0
  242. package/dist/merge/parser.js.map +1 -0
  243. package/dist/merge/validator.d.ts +15 -0
  244. package/dist/merge/validator.d.ts.map +1 -0
  245. package/dist/merge/validator.js +64 -0
  246. package/dist/merge/validator.js.map +1 -0
  247. package/dist/metrics/aggregate.d.ts +11 -0
  248. package/dist/metrics/aggregate.d.ts.map +1 -0
  249. package/dist/metrics/aggregate.js +51 -0
  250. package/dist/metrics/aggregate.js.map +1 -0
  251. package/dist/metrics/index.d.ts +7 -0
  252. package/dist/metrics/index.d.ts.map +1 -0
  253. package/dist/metrics/index.js +4 -0
  254. package/dist/metrics/index.js.map +1 -0
  255. package/dist/metrics/store.d.ts +19 -0
  256. package/dist/metrics/store.d.ts.map +1 -0
  257. package/dist/metrics/store.js +69 -0
  258. package/dist/metrics/store.js.map +1 -0
  259. package/dist/metrics/types.d.ts +32 -0
  260. package/dist/metrics/types.d.ts.map +1 -0
  261. package/dist/metrics/types.js +38 -0
  262. package/dist/metrics/types.js.map +1 -0
  263. package/dist/onboarding/context-map.d.ts +15 -0
  264. package/dist/onboarding/context-map.d.ts.map +1 -0
  265. package/dist/onboarding/context-map.js +138 -0
  266. package/dist/onboarding/context-map.js.map +1 -0
  267. package/dist/onboarding/faq.d.ts +24 -0
  268. package/dist/onboarding/faq.d.ts.map +1 -0
  269. package/dist/onboarding/faq.js +127 -0
  270. package/dist/onboarding/faq.js.map +1 -0
  271. package/dist/onboarding/index.d.ts +9 -0
  272. package/dist/onboarding/index.d.ts.map +1 -0
  273. package/dist/onboarding/index.js +5 -0
  274. package/dist/onboarding/index.js.map +1 -0
  275. package/dist/onboarding/state.d.ts +15 -0
  276. package/dist/onboarding/state.d.ts.map +1 -0
  277. package/dist/onboarding/state.js +92 -0
  278. package/dist/onboarding/state.js.map +1 -0
  279. package/dist/onboarding/types.d.ts +38 -0
  280. package/dist/onboarding/types.d.ts.map +1 -0
  281. package/dist/onboarding/types.js +13 -0
  282. package/dist/onboarding/types.js.map +1 -0
  283. package/dist/release/extract-manual-steps.d.ts +16 -0
  284. package/dist/release/extract-manual-steps.d.ts.map +1 -0
  285. package/dist/release/extract-manual-steps.js +164 -0
  286. package/dist/release/extract-manual-steps.js.map +1 -0
  287. package/dist/release/index.d.ts +4 -0
  288. package/dist/release/index.d.ts.map +1 -0
  289. package/dist/release/index.js +3 -0
  290. package/dist/release/index.js.map +1 -0
  291. package/dist/release/schema.json +142 -0
  292. package/dist/release/types.d.ts +39 -0
  293. package/dist/release/types.d.ts.map +1 -0
  294. package/dist/release/types.js +4 -0
  295. package/dist/release/types.js.map +1 -0
  296. package/dist/release/validate.d.ts +8 -0
  297. package/dist/release/validate.d.ts.map +1 -0
  298. package/dist/release/validate.js +35 -0
  299. package/dist/release/validate.js.map +1 -0
  300. package/dist/render/approval-mermaid.d.ts +3 -0
  301. package/dist/render/approval-mermaid.d.ts.map +1 -0
  302. package/dist/render/approval-mermaid.js +69 -0
  303. package/dist/render/approval-mermaid.js.map +1 -0
  304. package/dist/render/archive.d.ts +2 -0
  305. package/dist/render/archive.d.ts.map +1 -0
  306. package/dist/render/archive.js +32 -0
  307. package/dist/render/archive.js.map +1 -0
  308. package/dist/render/concerns.d.ts +11 -0
  309. package/dist/render/concerns.d.ts.map +1 -0
  310. package/dist/render/concerns.js +83 -0
  311. package/dist/render/concerns.js.map +1 -0
  312. package/dist/render/er-diagram.d.ts +3 -0
  313. package/dist/render/er-diagram.d.ts.map +1 -0
  314. package/dist/render/er-diagram.js +79 -0
  315. package/dist/render/er-diagram.js.map +1 -0
  316. package/dist/render/eta-engine.d.ts +2 -0
  317. package/dist/render/eta-engine.d.ts.map +1 -0
  318. package/dist/render/eta-engine.js +39 -0
  319. package/dist/render/eta-engine.js.map +1 -0
  320. package/dist/render/flow-flowchart.d.ts +4 -0
  321. package/dist/render/flow-flowchart.d.ts.map +1 -0
  322. package/dist/render/flow-flowchart.js +59 -0
  323. package/dist/render/flow-flowchart.js.map +1 -0
  324. package/dist/render/flow-sequence-table.d.ts +11 -0
  325. package/dist/render/flow-sequence-table.d.ts.map +1 -0
  326. package/dist/render/flow-sequence-table.js +88 -0
  327. package/dist/render/flow-sequence-table.js.map +1 -0
  328. package/dist/render/formula.d.ts +33 -0
  329. package/dist/render/formula.d.ts.map +1 -0
  330. package/dist/render/formula.js +381 -0
  331. package/dist/render/formula.js.map +1 -0
  332. package/dist/render/index.d.ts +6 -0
  333. package/dist/render/index.d.ts.map +1 -0
  334. package/dist/render/index.js +5 -0
  335. package/dist/render/index.js.map +1 -0
  336. package/dist/render/intra-class-call-graph.d.ts +3 -0
  337. package/dist/render/intra-class-call-graph.d.ts.map +1 -0
  338. package/dist/render/intra-class-call-graph.js +32 -0
  339. package/dist/render/intra-class-call-graph.js.map +1 -0
  340. package/dist/render/mermaid.d.ts +6 -0
  341. package/dist/render/mermaid.d.ts.map +1 -0
  342. package/dist/render/mermaid.js +99 -0
  343. package/dist/render/mermaid.js.map +1 -0
  344. package/dist/render/method-flowchart.d.ts +15 -0
  345. package/dist/render/method-flowchart.d.ts.map +1 -0
  346. package/dist/render/method-flowchart.js +232 -0
  347. package/dist/render/method-flowchart.js.map +1 -0
  348. package/dist/render/method-summary-table.d.ts +17 -0
  349. package/dist/render/method-summary-table.d.ts.map +1 -0
  350. package/dist/render/method-summary-table.js +189 -0
  351. package/dist/render/method-summary-table.js.map +1 -0
  352. package/dist/render/render.d.ts +37 -0
  353. package/dist/render/render.d.ts.map +1 -0
  354. package/dist/render/render.js +491 -0
  355. package/dist/render/render.js.map +1 -0
  356. package/dist/render/summary.d.ts +21 -0
  357. package/dist/render/summary.d.ts.map +1 -0
  358. package/dist/render/summary.js +542 -0
  359. package/dist/render/summary.js.map +1 -0
  360. package/dist/render/templates/apex-class.eta +204 -0
  361. package/dist/render/templates/apex-trigger.eta +143 -0
  362. package/dist/render/templates/approval-process.eta +118 -0
  363. package/dist/render/templates/aura-bundle.eta +47 -0
  364. package/dist/render/templates/custom-application.eta +44 -0
  365. package/dist/render/templates/custom-metadata-record.eta +37 -0
  366. package/dist/render/templates/executive-risks.eta +56 -0
  367. package/dist/render/templates/executive-summary.eta +68 -0
  368. package/dist/render/templates/flexi-page.eta +47 -0
  369. package/dist/render/templates/flow.eta +166 -0
  370. package/dist/render/templates/layout.eta +68 -0
  371. package/dist/render/templates/lwc.eta +118 -0
  372. package/dist/render/templates/named-credential.eta +30 -0
  373. package/dist/render/templates/object.eta +68 -0
  374. package/dist/render/templates/permission-set.eta +80 -0
  375. package/dist/render/templates/profile.eta +78 -0
  376. package/dist/render/templates/record-type.eta +23 -0
  377. package/dist/render/templates/remote-site-setting.eta +23 -0
  378. package/dist/render/templates/sharing-rule.eta +50 -0
  379. package/dist/render/templates/system-index.eta +52 -0
  380. package/dist/render/templates/system-overview.eta +37 -0
  381. package/dist/render/templates/validation-rule.eta +55 -0
  382. package/dist/render/templates/visualforce-component.eta +52 -0
  383. package/dist/render/templates/visualforce-page.eta +76 -0
  384. package/dist/render/trigger-processing-summary.d.ts +12 -0
  385. package/dist/render/trigger-processing-summary.d.ts.map +1 -0
  386. package/dist/render/trigger-processing-summary.js +94 -0
  387. package/dist/render/trigger-processing-summary.js.map +1 -0
  388. package/dist/sarif/index.d.ts +3 -0
  389. package/dist/sarif/index.d.ts.map +1 -0
  390. package/dist/sarif/index.js +2 -0
  391. package/dist/sarif/index.js.map +1 -0
  392. package/dist/sarif/parse.d.ts +7 -0
  393. package/dist/sarif/parse.d.ts.map +1 -0
  394. package/dist/sarif/parse.js +55 -0
  395. package/dist/sarif/parse.js.map +1 -0
  396. package/dist/sarif/types.d.ts +43 -0
  397. package/dist/sarif/types.d.ts.map +1 -0
  398. package/dist/sarif/types.js +4 -0
  399. package/dist/sarif/types.js.map +1 -0
  400. package/dist/scaffold/.agents/README.md +12 -0
  401. package/dist/scaffold/.agents/knowledge/INDEX.md +52 -0
  402. package/dist/scaffold/.agents/knowledge/README.md +29 -0
  403. package/dist/scaffold/.agents/knowledge/decisions/.gitkeep +0 -0
  404. package/dist/scaffold/.agents/knowledge/improvements/.gitkeep +0 -0
  405. package/dist/scaffold/.agents/knowledge/pitfalls/.gitkeep +0 -0
  406. package/dist/scaffold/.agents/knowledge/retrospectives/.gitkeep +0 -0
  407. package/dist/scaffold/.agents/knowledge/wins/.gitkeep +0 -0
  408. package/dist/scaffold/.agents/templates/.gitkeep +0 -0
  409. package/dist/scaffold/.agents/templates/README.md +19 -0
  410. package/dist/scaffold/.agents/templates/decision.md +39 -0
  411. package/dist/scaffold/.agents/templates/improvement.md +33 -0
  412. package/dist/scaffold/.agents/templates/pitfall.md +33 -0
  413. package/dist/scaffold/.agents/templates/retrospective.md +61 -0
  414. package/dist/scaffold/.agents/templates/win.md +28 -0
  415. package/dist/scaffold/.claude/README.md +11 -0
  416. package/dist/scaffold/.claude/agents/.gitkeep +0 -0
  417. package/dist/scaffold/.claude/agents/apex-query-tracer.md.eta +199 -0
  418. package/dist/scaffold/.claude/agents/automation-classifier.md.eta +39 -0
  419. package/dist/scaffold/.claude/agents/batch-calculator.md.eta +209 -0
  420. package/dist/scaffold/.claude/agents/cascade-tracer.md.eta +139 -0
  421. package/dist/scaffold/.claude/agents/customer-impact-explainer.md.eta +96 -0
  422. package/dist/scaffold/.claude/agents/data-model-classifier.md.eta +84 -0
  423. package/dist/scaffold/.claude/agents/explain-writer.md.eta +104 -0
  424. package/dist/scaffold/.claude/agents/flow-query-tracer.md.eta +211 -0
  425. package/dist/scaffold/.claude/agents/graph-querier.md.eta +47 -0
  426. package/dist/scaffold/.claude/agents/logic-classifier.md.eta +36 -0
  427. package/dist/scaffold/.claude/agents/manual-step-extractor.md.eta +72 -0
  428. package/dist/scaffold/.claude/agents/object-documenter.md.eta +66 -0
  429. package/dist/scaffold/.claude/agents/onboarding-guide.md.eta +77 -0
  430. package/dist/scaffold/.claude/agents/permission-classifier.md.eta +32 -0
  431. package/dist/scaffold/.claude/agents/release-advisor.md.eta +96 -0
  432. package/dist/scaffold/.claude/agents/release-composer.md.eta +106 -0
  433. package/dist/scaffold/.claude/agents/review-assistant.md.eta +72 -0
  434. package/dist/scaffold/.claude/agents/rollback-drafter.md.eta +95 -0
  435. package/dist/scaffold/.claude/agents/ui-classifier.md.eta +31 -0
  436. package/dist/scaffold/.claude/commands/.gitkeep +0 -0
  437. package/dist/scaffold/.claude/commands/analyze-batch-limits.md.eta +309 -0
  438. package/dist/scaffold/.claude/commands/change-summary.md.eta +79 -0
  439. package/dist/scaffold/.claude/commands/classify-diff.md.eta +107 -0
  440. package/dist/scaffold/.claude/commands/explain.md.eta +63 -0
  441. package/dist/scaffold/.claude/commands/impact.md.eta +67 -0
  442. package/dist/scaffold/.claude/commands/manual-steps.md.eta +62 -0
  443. package/dist/scaffold/.claude/commands/onboard.md.eta +107 -0
  444. package/dist/scaffold/.claude/commands/release-prep.md.eta +147 -0
  445. package/dist/scaffold/.claude/commands/yohaku-explain.md.eta +81 -0
  446. package/dist/scaffold/.claude/settings.json.eta +59 -0
  447. package/dist/scaffold/.yohaku/context-map.yaml.eta +56 -0
  448. package/dist/scaffold/.yohaku/secrets-rules.yaml.eta +44 -0
  449. package/dist/scaffold/AGENTS.md.eta +147 -0
  450. package/dist/scaffold/CLAUDE.md.eta +121 -0
  451. package/dist/scaffold/README.md +37 -0
  452. package/dist/schema/graph.schema.json +446 -0
  453. package/dist/schema/validate.d.ts +8 -0
  454. package/dist/schema/validate.d.ts.map +1 -0
  455. package/dist/schema/validate.js +49 -0
  456. package/dist/schema/validate.js.map +1 -0
  457. package/dist/secrets/apply.d.ts +17 -0
  458. package/dist/secrets/apply.d.ts.map +1 -0
  459. package/dist/secrets/apply.js +44 -0
  460. package/dist/secrets/apply.js.map +1 -0
  461. package/dist/secrets/index.d.ts +7 -0
  462. package/dist/secrets/index.d.ts.map +1 -0
  463. package/dist/secrets/index.js +4 -0
  464. package/dist/secrets/index.js.map +1 -0
  465. package/dist/secrets/load.d.ts +16 -0
  466. package/dist/secrets/load.d.ts.map +1 -0
  467. package/dist/secrets/load.js +136 -0
  468. package/dist/secrets/load.js.map +1 -0
  469. package/dist/secrets/mask.d.ts +15 -0
  470. package/dist/secrets/mask.d.ts.map +1 -0
  471. package/dist/secrets/mask.js +34 -0
  472. package/dist/secrets/mask.js.map +1 -0
  473. package/dist/secrets/rules.d.ts +10 -0
  474. package/dist/secrets/rules.d.ts.map +1 -0
  475. package/dist/secrets/rules.js +47 -0
  476. package/dist/secrets/rules.js.map +1 -0
  477. package/dist/types/graph.d.ts +508 -0
  478. package/dist/types/graph.d.ts.map +1 -0
  479. package/dist/types/graph.js +9 -0
  480. package/dist/types/graph.js.map +1 -0
  481. package/dist/types/render.d.ts +26 -0
  482. package/dist/types/render.d.ts.map +1 -0
  483. package/dist/types/render.js +10 -0
  484. package/dist/types/render.js.map +1 -0
  485. package/dist/types/source-adapter.d.ts +26 -0
  486. package/dist/types/source-adapter.d.ts.map +1 -0
  487. package/dist/types/source-adapter.js +11 -0
  488. package/dist/types/source-adapter.js.map +1 -0
  489. package/dist/util/build-lock.d.ts +35 -0
  490. package/dist/util/build-lock.d.ts.map +1 -0
  491. package/dist/util/build-lock.js +72 -0
  492. package/dist/util/build-lock.js.map +1 -0
  493. package/dist/util/hash.d.ts +3 -0
  494. package/dist/util/hash.d.ts.map +1 -0
  495. package/dist/util/hash.js +13 -0
  496. package/dist/util/hash.js.map +1 -0
  497. package/dist/util/path-guard.d.ts +16 -0
  498. package/dist/util/path-guard.d.ts.map +1 -0
  499. package/dist/util/path-guard.js +40 -0
  500. package/dist/util/path-guard.js.map +1 -0
  501. package/dist/util/timing-log.d.ts +28 -0
  502. package/dist/util/timing-log.d.ts.map +1 -0
  503. package/dist/util/timing-log.js +38 -0
  504. package/dist/util/timing-log.js.map +1 -0
  505. package/dist/util/walk.d.ts +10 -0
  506. package/dist/util/walk.d.ts.map +1 -0
  507. package/dist/util/walk.js +45 -0
  508. package/dist/util/walk.js.map +1 -0
  509. package/package.json +48 -0
  510. package/src/schema/graph.schema.json +446 -0
  511. package/src/schema/validate.ts +57 -0
@@ -0,0 +1,78 @@
1
+ # Profile: <%= it.pf.fullyQualifiedName %>
2
+
3
+ <!-- DETERMINISTIC_START id="quick-summary" -->
4
+ > <%~ it.quickSummary %>
5
+ <!-- DETERMINISTIC_END id="quick-summary" -->
6
+
7
+ <!-- DETERMINISTIC_START id="overview" -->
8
+ - API Name: `<%= it.pf.fullyQualifiedName %>`
9
+ <% if (it.pf.userLicense) { %>- User License: <%= it.pf.userLicense %><% } %>
10
+ - Source: `<%= it.pf.sourcePath %>`
11
+ - Content hash: `<%= it.pf.contentHash %>`
12
+ <!-- DETERMINISTIC_END id="overview" -->
13
+
14
+ <!-- DETERMINISTIC_START id="object-permissions" -->
15
+ ## オブジェクト権限 (<%= it.pf.body ? it.pf.body.objectPermissions.length : 0 %>)
16
+
17
+ <% if (!it.pf.body || it.pf.body.objectPermissions.length === 0) { %>
18
+ (なし)
19
+ <% } else { %>
20
+ | オブジェクト | C | R | U | D | View All | Modify All |
21
+ |---|---|---|---|---|---|---|
22
+ <% it.pf.body.objectPermissions.forEach(function(p){ %>
23
+ | `<%= p.object %>` | <%= p.create ? "✓" : "—" %> | <%= p.read ? "✓" : "—" %> | <%= p.edit ? "✓" : "—" %> | <%= p.delete ? "✓" : "—" %> | <%= p.viewAll ? "✓" : "—" %> | <%= p.modifyAll ? "✓" : "—" %> |
24
+ <% }) %>
25
+ <% } %>
26
+ <!-- DETERMINISTIC_END id="object-permissions" -->
27
+
28
+ <!-- DETERMINISTIC_START id="field-permissions" -->
29
+ ## フィールド権限 (<%= it.pf.body ? it.pf.body.fieldPermissions.length : 0 %>)
30
+
31
+ <% if (!it.pf.body || it.pf.body.fieldPermissions.length === 0) { %>
32
+ (なし)
33
+ <% } else { %>
34
+ | フィールド | Read | Edit |
35
+ |---|---|---|
36
+ <% it.pf.body.fieldPermissions.forEach(function(p){ %>
37
+ | `<%= p.field %>` | <%= p.readable ? "✓" : "—" %> | <%= p.editable ? "✓" : "—" %> |
38
+ <% }) %>
39
+ <% } %>
40
+ <!-- DETERMINISTIC_END id="field-permissions" -->
41
+
42
+ <!-- DETERMINISTIC_START id="class-accesses" -->
43
+ ## Apex クラス アクセス (<%= it.pf.body ? it.pf.body.classAccesses.length : 0 %>)
44
+
45
+ <% if (!it.pf.body || it.pf.body.classAccesses.length === 0) { %>
46
+ (なし)
47
+ <% } else { %>
48
+ <% it.pf.body.classAccesses.forEach(function(c){ %>
49
+ - `<%= c.apexClass %>` <%= c.enabled ? "✓ enabled" : "✗ disabled" %>
50
+ <% }) %>
51
+ <% } %>
52
+ <!-- DETERMINISTIC_END id="class-accesses" -->
53
+
54
+ <!-- DETERMINISTIC_START id="user-permissions" -->
55
+ ## ユーザ権限 (システム権限) (<%= it.pf.body ? it.pf.body.userPermissions.length : 0 %>)
56
+
57
+ <% if (!it.pf.body || it.pf.body.userPermissions.length === 0) { %>
58
+ (なし)
59
+ <% } else { %>
60
+ <% it.pf.body.userPermissions.forEach(function(u){ %>
61
+ - `<%= u %>`
62
+ <% }) %>
63
+ <% } %>
64
+ <!-- DETERMINISTIC_END id="user-permissions" -->
65
+
66
+ <!-- AI_MANAGED_START id="purpose" -->
67
+ この Profile の業務的役割 (AI 推測)。
68
+ <!-- AI_MANAGED_END id="purpose" -->
69
+
70
+ <!-- AI_MANAGED_START id="concerns" -->
71
+ ## 気になる点 (AI 推測)
72
+ <!-- - 廃止予定 Profile (Min Access 推奨) -->
73
+ <!-- - PermissionSet への移行余地 -->
74
+ <!-- AI_MANAGED_END id="concerns" -->
75
+
76
+ <!-- HUMAN_MANAGED_START id="business-context" -->
77
+ <!-- 想定ユーザ・運用上の留意点を人手記述。AI は上書きしません。 -->
78
+ <!-- HUMAN_MANAGED_END id="business-context" -->
@@ -0,0 +1,23 @@
1
+ # RecordType: <%= it.rt.fullyQualifiedName %>
2
+
3
+ <!-- DETERMINISTIC_START id="quick-summary" -->
4
+ > <%~ it.quickSummary %>
5
+ <!-- DETERMINISTIC_END id="quick-summary" -->
6
+
7
+ <!-- DETERMINISTIC_START id="overview" -->
8
+ - API Name: `<%= it.rt.fullyQualifiedName %>`
9
+ - Object: `<%= it.rt.object %>`
10
+ <% if (it.rt.label) { %>- Label: <%= it.rt.label %><% } %>
11
+ - Active: <%= it.rt.active ? "✓" : "—" %>
12
+ <% if (it.rt.description) { %>- Description: <%= it.rt.description %><% } %>
13
+ - Source: `<%= it.rt.sourcePath %>`
14
+ - Content hash: `<%= it.rt.contentHash %>`
15
+ <!-- DETERMINISTIC_END id="overview" -->
16
+
17
+ <!-- AI_MANAGED_START id="purpose" -->
18
+ このレコードタイプの役割と業務文脈 (AI 推測、再生成で上書き)。
19
+ <!-- AI_MANAGED_END id="purpose" -->
20
+
21
+ <!-- HUMAN_MANAGED_START id="business-context" -->
22
+ <!-- 業務文脈・運用上の留意点をここに記述。AI は上書きしません。 -->
23
+ <!-- HUMAN_MANAGED_END id="business-context" -->
@@ -0,0 +1,23 @@
1
+ # RemoteSiteSetting: <%= it.rss.fullyQualifiedName %>
2
+
3
+ <!-- DETERMINISTIC_START id="quick-summary" -->
4
+ > <%~ it.quickSummary %>
5
+ <!-- DETERMINISTIC_END id="quick-summary" -->
6
+
7
+ <!-- DETERMINISTIC_START id="overview" -->
8
+ - API Name: `<%= it.rss.fullyQualifiedName %>`
9
+ <% if (it.rss.url) { %>- URL: `<%= it.rss.url %>`<% } %>
10
+ - Active: <%= it.rss.active ? "✓ true" : "false" %>
11
+ - Disable Protocol Security: <%= it.rss.disableProtocolSecurity ? "⚠ true (HTTP 許容)" : "false" %>
12
+ <% if (it.rss.description) { %>- Description: <%= it.rss.description %><% } %>
13
+ - Source: `<%= it.rss.sourcePath %>`
14
+ - Content hash: `<%= it.rss.contentHash %>`
15
+ <!-- DETERMINISTIC_END id="overview" -->
16
+
17
+ <!-- AI_MANAGED_START id="purpose" -->
18
+ この Remote Site Setting の利用用途 (AI 推測)。
19
+ <!-- AI_MANAGED_END id="purpose" -->
20
+
21
+ <!-- HUMAN_MANAGED_START id="business-context" -->
22
+ <!-- 連携先システムや運用窓口を人手記述。 -->
23
+ <!-- HUMAN_MANAGED_END id="business-context" -->
@@ -0,0 +1,50 @@
1
+ # SharingRule: <%= it.sr.fullyQualifiedName %>
2
+
3
+ <!-- DETERMINISTIC_START id="quick-summary" -->
4
+ > <%~ it.quickSummary %>
5
+ <!-- DETERMINISTIC_END id="quick-summary" -->
6
+
7
+ <!-- DETERMINISTIC_START id="overview" -->
8
+ - API Name: `<%= it.sr.fullyQualifiedName %>`
9
+ - Object: `<%= it.sr.object %>`
10
+ - Kind: <%= it.sr.kind === "criteriaBased" ? "条件ベース (criteriaBased)" : "オーナーベース (ownerBased)" %>
11
+ <% if (it.sr.label) { %>- Label: <%= it.sr.label %><% } %>
12
+ - Access Level: `<%= it.sr.accessLevel %>`
13
+ - Shared To: `<%= it.sr.sharedTo.type %>`<%= it.sr.sharedTo.target ? ` → ${it.sr.sharedTo.target}` : "" %>
14
+ <% if (it.sr.ownerSource) { %>- Owner Source: `<%= it.sr.ownerSource %>`<% } %>
15
+ <% if (it.sr.description) { %>- Description: <%= it.sr.description %><% } %>
16
+ - Source: `<%= it.sr.sourcePath %>`
17
+ - Content hash: `<%= it.sr.contentHash %>`
18
+ <!-- DETERMINISTIC_END id="overview" -->
19
+
20
+ <!-- DETERMINISTIC_START id="conditions" -->
21
+ ## 条件
22
+
23
+ <% if (it.sr.kind === "criteriaBased") { %>
24
+ <% if (it.sr.criteriaItems.length === 0) { %>
25
+ (条件なし — 全レコードが対象)
26
+ <% } else { %>
27
+ <% if (it.sr.criteriaBooleanFilter) { %>**Boolean filter:** `<%= it.sr.criteriaBooleanFilter %>`<% } %>
28
+
29
+ | # | フィールド | 演算子 | 値 |
30
+ |---|---|---|---|
31
+ <% it.sr.criteriaItems.forEach(function(c, i){ %>
32
+ | <%= i + 1 %> | `<%= c.field %>` | `<%= c.operation %>` | `<%= c.value %>` |
33
+ <% }) %>
34
+
35
+ **自然語**
36
+
37
+ <%~ it.conditionsNatural %>
38
+ <% } %>
39
+ <% } else { %>
40
+ オーナーベース共有: `<%= it.sr.ownerSource ?? "(unknown)" %>` のレコードを `<%= it.sr.sharedTo.type %>` に共有 (<%= it.sr.accessLevel %>)。
41
+ <% } %>
42
+ <!-- DETERMINISTIC_END id="conditions" -->
43
+
44
+ <!-- AI_MANAGED_START id="purpose" -->
45
+ この共有ルールの業務的役割 (AI 推測)。
46
+ <!-- AI_MANAGED_END id="purpose" -->
47
+
48
+ <!-- HUMAN_MANAGED_START id="business-context" -->
49
+ <!-- 過剰共有の懸念や運用上の引き継ぎ事項を人手記述。 -->
50
+ <!-- HUMAN_MANAGED_END id="business-context" -->
@@ -0,0 +1,52 @@
1
+ # <%= it.title %>
2
+
3
+ <!-- DETERMINISTIC_START id="overview" -->
4
+ - 生成日時: <%= it.builtAt %>
5
+ - yohaku version: <%= it.yohakuVersion %>
6
+ - Salesforce API version: <%= it.salesforceApiVersion %>
7
+ - Source adapter: <%= it.sourceAdapter %>
8
+ - Source hash: `<%= it.sourceHash %>`
9
+ <!-- DETERMINISTIC_END id="overview" -->
10
+
11
+ <!-- DETERMINISTIC_START id="counts" -->
12
+ | カテゴリ | 件数 |
13
+ |---|---|
14
+ | Objects | <%= it.counts.objects %> |
15
+ | Fields | <%= it.counts.fields %> |
16
+ | Validation Rules | <%= it.counts.validationRules %> |
17
+ | Flows | <%= it.counts.flows %> |
18
+ | Apex Classes | <%= it.counts.apexClasses %> |
19
+ | Apex Triggers | <%= it.counts.apexTriggers %> |
20
+ | Permission Sets | <%= it.counts.permissionSets %> |
21
+ | Profiles | <%= it.counts.profiles %> |
22
+ | Record Types | <%= it.counts.recordTypes %> |
23
+ | Approval Processes | <%= it.counts.approvalProcesses %> |
24
+ | Sharing Rules | <%= it.counts.sharingRules %> |
25
+ | Layouts | <%= it.counts.layouts %> |
26
+ | Custom Metadata Records | <%= it.counts.customMetadataRecords %> |
27
+ | Named Credentials | <%= it.counts.namedCredentials %> |
28
+ | Remote Site Settings | <%= it.counts.remoteSiteSettings %> |
29
+ | LWC | <%= it.counts.lwcs %> |
30
+ | Aura Bundles | <%= it.counts.auraBundles %> |
31
+ | FlexiPages | <%= it.counts.flexiPages %> |
32
+ | Visualforce Pages | <%= it.counts.visualforcePages %> |
33
+ | Visualforce Components | <%= it.counts.visualforceComponents %> |
34
+ | Lightning Apps | <%= it.counts.customApplications %> |
35
+ | Dependencies | <%= it.counts.dependencies %> |
36
+ <!-- DETERMINISTIC_END id="counts" -->
37
+
38
+ <!-- DETERMINISTIC_START id="objects-list" -->
39
+ ## Objects (<%= it.objectsList.length %>)
40
+
41
+ <% it.objectsList.forEach(function(o){ %>
42
+ - [<%= o.label %> (<%= o.fullyQualifiedName %>)](./objects/<%= o.fullyQualifiedName %>.md)<%= o.isCustom ? " — Custom" : "" %>
43
+ <% }) %>
44
+ <!-- DETERMINISTIC_END id="objects-list" -->
45
+
46
+ <!-- AI_MANAGED_START id="summary" -->
47
+ 本プロジェクト全体の概要 (AI 生成、再生成で上書きされます)。
48
+ <!-- AI_MANAGED_END id="summary" -->
49
+
50
+ <!-- HUMAN_MANAGED_START id="business-overview" -->
51
+ <!-- 業務的な全体像をここに記述してください。AI は上書きしません。 -->
52
+ <!-- HUMAN_MANAGED_END id="business-overview" -->
@@ -0,0 +1,37 @@
1
+ # <%= it.title %>
2
+
3
+ <!-- DETERMINISTIC_START id="meta" -->
4
+ - Built at: <%= it.builtAt %>
5
+ - Triggers: <%= it.triggerCount %>
6
+ - Flows: <%= it.flowCount %>
7
+ - Apex Classes: <%= it.apexCount %>
8
+ - Objects: <%= it.objectCount %>
9
+ <!-- DETERMINISTIC_END id="meta" -->
10
+
11
+ <!-- DETERMINISTIC_START id="diagram" -->
12
+ ## システム全体の起点 → オブジェクト関係
13
+
14
+ ```mermaid
15
+ <%~ it.diagram %>
16
+ ```
17
+ <!-- DETERMINISTIC_END id="diagram" -->
18
+
19
+ <!-- DETERMINISTIC_START id="er-diagram" -->
20
+ ## ER 図 (オブジェクト関係性)
21
+
22
+ <% if (!it.erDiagram || it.erDiagram === "") { %>
23
+ (referenceTo を持つフィールドが検出されませんでした)
24
+ <% } else { %>
25
+ ```mermaid
26
+ <%~ it.erDiagram %>
27
+ ```
28
+ <% } %>
29
+ <!-- DETERMINISTIC_END id="er-diagram" -->
30
+
31
+ <!-- AI_MANAGED_START id="narrative" -->
32
+ このシステム全体の流れと注目すべき経路 (AI 推測、再生成で上書き)。
33
+ <!-- AI_MANAGED_END id="narrative" -->
34
+
35
+ <!-- HUMAN_MANAGED_START id="business-context" -->
36
+ <!-- 主要 KPI や運用上の留意点をここに記述。AI は上書きしません。 -->
37
+ <!-- HUMAN_MANAGED_END id="business-context" -->
@@ -0,0 +1,55 @@
1
+ # ValidationRule: <%= it.vr.fullyQualifiedName %>
2
+
3
+ <!-- DETERMINISTIC_START id="quick-summary" -->
4
+ > <%~ it.quickSummary %>
5
+ <!-- DETERMINISTIC_END id="quick-summary" -->
6
+
7
+ <!-- DETERMINISTIC_START id="overview" -->
8
+ - API Name: `<%= it.vr.fullyQualifiedName %>`
9
+ - Object: `<%= it.vr.object %>`
10
+ - Active: <%= it.vr.active ? "✓ true" : "false (無効)" %>
11
+ <% if (it.vr.errorDisplayField) { %>- Error Display Field: `<%= it.vr.errorDisplayField %>`<% } %>
12
+ - Source: `<%= it.vr.sourcePath %>`
13
+ - Content hash: `<%= it.vr.contentHash %>`
14
+ <!-- DETERMINISTIC_END id="overview" -->
15
+
16
+ <!-- DETERMINISTIC_START id="rule" -->
17
+ ## 条件式
18
+
19
+ <% if (it.vr.errorConditionFormula) { %>
20
+ **自然語**
21
+
22
+ <%~ it.formulaNatural %>
23
+
24
+ **原文**
25
+
26
+ ```
27
+ <%= it.vr.errorConditionFormula %>
28
+ ```
29
+ <% } else { %>
30
+ (条件式が取得できませんでした)
31
+ <% } %>
32
+
33
+ ## エラーメッセージ
34
+
35
+ <% if (it.vr.errorMessage) { %>
36
+ > <%= it.vr.errorMessage %>
37
+ <% } else { %>
38
+ (エラーメッセージが取得できませんでした)
39
+ <% } %>
40
+ <!-- DETERMINISTIC_END id="rule" -->
41
+
42
+ <!-- AI_MANAGED_START id="purpose" -->
43
+ このバリデーションが守るビジネスルール (AI 推測、業務用語)。
44
+ <!-- AI_MANAGED_END id="purpose" -->
45
+
46
+ <!-- AI_MANAGED_START id="concerns" -->
47
+ ## 気になる点 (AI 推測 / Phase 7-D で精度向上)
48
+ <!-- - active=false なら無効化中 → 復活忘れ -->
49
+ <!-- - 条件式の冗長さ / Picklist 値ハードコード -->
50
+ <!-- - 国際化 (errorMessage 多言語対応) -->
51
+ <!-- AI_MANAGED_END id="concerns" -->
52
+
53
+ <!-- HUMAN_MANAGED_START id="business-context" -->
54
+ <!-- なぜこのルールが必要か、業務上の意図を人手記述。AI は上書きしません。 -->
55
+ <!-- HUMAN_MANAGED_END id="business-context" -->
@@ -0,0 +1,52 @@
1
+ # Visualforce Component: <%= it.vfc.fullyQualifiedName %>
2
+
3
+ <!-- DETERMINISTIC_START id="quick-summary" -->
4
+ > <%~ it.quickSummary %>
5
+ <!-- DETERMINISTIC_END id="quick-summary" -->
6
+
7
+ <!-- DETERMINISTIC_START id="overview" -->
8
+ - API Name: `<%= it.vfc.fullyQualifiedName %>`
9
+ <% if (it.vfc.label) { %>- Label: <%= it.vfc.label %><% } %>
10
+ <% if (it.vfc.apiVersion) { %>- API Version: <%= it.vfc.apiVersion %><% } %>
11
+ <% if (it.vfc.controller) { %>- Controller: `<%= it.vfc.controller %>`<% } %>
12
+ - Markup ファイル: <%= it.vfc.hasMarkup ? "✓ あり" : "(なし)" %>
13
+ <% if (it.vfc.description) { %>- Description: <%= it.vfc.description %><% } %>
14
+ - Source: `<%= it.vfc.sourcePath %>`
15
+ - Content hash: `<%= it.vfc.contentHash %>`
16
+ <!-- DETERMINISTIC_END id="overview" -->
17
+
18
+ <!-- DETERMINISTIC_START id="attributes" -->
19
+ ## 公開属性 (<%= it.vfc.attributes ? it.vfc.attributes.length : 0 %>)
20
+
21
+ <% if (!it.vfc.attributes || it.vfc.attributes.length === 0) { %>
22
+ (`<apex:attribute>` 検出なし)
23
+ <% } else { %>
24
+ | name | type | required | description |
25
+ |---|---|---|---|
26
+ <% it.vfc.attributes.forEach(function(a){ %>
27
+ | `<%= a.name %>` | <%= a.type ? "`"+a.type+"`" : "—" %> | <%= a.required ? "✓" : "—" %> | <%= a.description || "—" %> |
28
+ <% }) %>
29
+ <% } %>
30
+ <!-- DETERMINISTIC_END id="attributes" -->
31
+
32
+ <!-- DETERMINISTIC_START id="markup-tags" -->
33
+ ## Markup タグ件数 (<%= it.vfc.markupCounts ? it.vfc.markupCounts.length : 0 %>)
34
+
35
+ <% if (!it.vfc.markupCounts || it.vfc.markupCounts.length === 0) { %>
36
+ (検出 markup なし)
37
+ <% } else { %>
38
+ | タグ | 出現回数 |
39
+ |---|---|
40
+ <% it.vfc.markupCounts.forEach(function(m){ %>
41
+ | `<%= m.tag %>` | <%= m.count %> |
42
+ <% }) %>
43
+ <% } %>
44
+ <!-- DETERMINISTIC_END id="markup-tags" -->
45
+
46
+ <!-- AI_MANAGED_START id="purpose" -->
47
+ このコンポーネントの再利用シーン (AI 推測)。
48
+ <!-- AI_MANAGED_END id="purpose" -->
49
+
50
+ <!-- HUMAN_MANAGED_START id="business-context" -->
51
+ <!-- どのページから呼ばれるか、運用上の留意点を人手で記述。 -->
52
+ <!-- HUMAN_MANAGED_END id="business-context" -->
@@ -0,0 +1,76 @@
1
+ # Visualforce Page: <%= it.vfp.fullyQualifiedName %>
2
+
3
+ <!-- DETERMINISTIC_START id="quick-summary" -->
4
+ > <%~ it.quickSummary %>
5
+ <!-- DETERMINISTIC_END id="quick-summary" -->
6
+
7
+ <!-- DETERMINISTIC_START id="overview" -->
8
+ - API Name: `<%= it.vfp.fullyQualifiedName %>`
9
+ <% if (it.vfp.label) { %>- Label: <%= it.vfp.label %><% } %>
10
+ <% if (it.vfp.apiVersion) { %>- API Version: <%= it.vfp.apiVersion %><% } %>
11
+ <% if (it.vfp.controller) { %>- Controller: `<%= it.vfp.controller %>`<% } %>
12
+ <% if (it.vfp.standardController) { %>- Standard Controller: `<%= it.vfp.standardController %>`<% } %>
13
+ <% if (it.vfp.renderAs) { %>- Render As: `<%= it.vfp.renderAs %>`<% } %>
14
+ <% if (it.vfp.availableInTouch !== undefined) { %>- Available In Touch: <%= it.vfp.availableInTouch ? "✓" : "—" %><% } %>
15
+ - Markup ファイル: <%= it.vfp.hasMarkup ? "✓ あり" : "(なし)" %>
16
+ <% if (it.vfp.description) { %>- Description: <%= it.vfp.description %><% } %>
17
+ - Source: `<%= it.vfp.sourcePath %>`
18
+ - Content hash: `<%= it.vfp.contentHash %>`
19
+ <!-- DETERMINISTIC_END id="overview" -->
20
+
21
+ <!-- DETERMINISTIC_START id="extensions" -->
22
+ ## Apex Controller / Extensions
23
+
24
+ <% if (!it.vfp.controller && (!it.vfp.extensions || it.vfp.extensions.length === 0) && !it.vfp.standardController) { %>
25
+ (controller / extensions / standardController いずれも未指定)
26
+ <% } else { %>
27
+ <% if (it.vfp.controller) { %>- Controller: `<%= it.vfp.controller %>`
28
+ <% } %>
29
+ <% if (it.vfp.standardController) { %>- Standard Controller: `<%= it.vfp.standardController %>`
30
+ <% } %>
31
+ <% if (it.vfp.extensions && it.vfp.extensions.length > 0) { %>- Extensions:
32
+ <% it.vfp.extensions.forEach(function(e){ %> - `<%= e %>`
33
+ <% }) %>
34
+ <% } %>
35
+ <% } %>
36
+ <!-- DETERMINISTIC_END id="extensions" -->
37
+
38
+ <!-- DETERMINISTIC_START id="markup-tags" -->
39
+ ## Markup タグ件数 (<%= it.vfp.markupCounts ? it.vfp.markupCounts.length : 0 %>)
40
+
41
+ <% if (!it.vfp.markupCounts || it.vfp.markupCounts.length === 0) { %>
42
+ (検出 markup なし)
43
+ <% } else { %>
44
+ | タグ | 出現回数 |
45
+ |---|---|
46
+ <% it.vfp.markupCounts.forEach(function(m){ %>
47
+ | `<%= m.tag %>` | <%= m.count %> |
48
+ <% }) %>
49
+ <% } %>
50
+ <!-- DETERMINISTIC_END id="markup-tags" -->
51
+
52
+ <!-- DETERMINISTIC_START id="method-references" -->
53
+ ## メソッド参照 (`{!...}`) (<%= it.vfp.methodReferences ? it.vfp.methodReferences.length : 0 %>)
54
+
55
+ <% if (!it.vfp.methodReferences || it.vfp.methodReferences.length === 0) { %>
56
+ (検出参照なし)
57
+ <% } else { %>
58
+ <% it.vfp.methodReferences.forEach(function(r){ %>
59
+ - `<%= r %>`
60
+ <% }) %>
61
+ <% } %>
62
+ <!-- DETERMINISTIC_END id="method-references" -->
63
+
64
+ <!-- AI_MANAGED_START id="purpose" -->
65
+ このページの業務的役割と利用シーン (AI 推測、再生成で上書き)。
66
+ <!-- AI_MANAGED_END id="purpose" -->
67
+
68
+ <!-- AI_MANAGED_START id="narrative" -->
69
+ ## このページは何で、なぜ存在するか
70
+
71
+ このページが解いている業務上の課題 (例: PDF 帳票生成、印刷用整形、レガシー入力 UI) と、なぜ Visualforce で実装されているかを 2〜3 段落で記述する (AI 生成)。
72
+ <!-- AI_MANAGED_END id="narrative" -->
73
+
74
+ <!-- HUMAN_MANAGED_START id="business-context" -->
75
+ <!-- 想定ユーザ・出力先・運用上の留意点を人手で記述。 -->
76
+ <!-- HUMAN_MANAGED_END id="business-context" -->
@@ -0,0 +1,12 @@
1
+ import type { ApexTrigger } from "../types/graph.js";
2
+ export interface TriggerProcessingSummary {
3
+ readonly events: readonly string[];
4
+ readonly soqlCount: number;
5
+ readonly dmlCount: number;
6
+ readonly branchCount: number;
7
+ readonly loopCount: number;
8
+ readonly tryCount: number;
9
+ readonly delegations: readonly string[];
10
+ }
11
+ export declare function buildTriggerProcessingSummary(trigger: ApexTrigger): TriggerProcessingSummary;
12
+ //# sourceMappingURL=trigger-processing-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-processing-summary.d.ts","sourceRoot":"","sources":["../../src/render/trigger-processing-summary.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAqC,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAExF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,WAAW,GAAG,wBAAwB,CAY5F"}
@@ -0,0 +1,94 @@
1
+ // Trigger 処理サマリ表 builder (Phase 13-C)
2
+ // Trigger は通常 1 メソッド (= execute) 相当なので、controlFlows を統合して 1 行にまとめる。
3
+ export function buildTriggerProcessingSummary(trigger) {
4
+ const body = trigger.body;
5
+ const stats = body !== undefined ? aggregateBody(body) : zero();
6
+ return {
7
+ events: trigger.events,
8
+ soqlCount: stats.soql,
9
+ dmlCount: stats.dml,
10
+ branchCount: stats.branch,
11
+ loopCount: stats.loop,
12
+ tryCount: stats.tryBlocks,
13
+ delegations: collectDelegations(body),
14
+ };
15
+ }
16
+ function zero() {
17
+ return { soql: 0, dml: 0, branch: 0, loop: 0, tryBlocks: 0 };
18
+ }
19
+ function aggregateBody(body) {
20
+ // controlFlows があれば優先、なければ body 直の集計
21
+ const flows = body.controlFlows ?? [];
22
+ if (flows.length === 0) {
23
+ return {
24
+ soql: body.soqlQueries.length,
25
+ dml: body.dmlOperations.length,
26
+ branch: 0,
27
+ loop: 0,
28
+ tryBlocks: body.hasTryCatch ? 1 : 0,
29
+ };
30
+ }
31
+ const total = zero();
32
+ for (const f of flows) {
33
+ const s = walkNodes(f.nodes);
34
+ total.soql += s.soql;
35
+ total.dml += s.dml;
36
+ total.branch += s.branch;
37
+ total.loop += s.loop;
38
+ total.tryBlocks += s.tryBlocks;
39
+ }
40
+ return total;
41
+ }
42
+ function walkNodes(nodes) {
43
+ const stats = zero();
44
+ for (const n of nodes) {
45
+ switch (n.kind) {
46
+ case "soql":
47
+ stats.soql += 1;
48
+ break;
49
+ case "dml":
50
+ stats.dml += 1;
51
+ break;
52
+ case "if": {
53
+ stats.branch += 1;
54
+ addInPlace(stats, walkNodes(n.thenNodes));
55
+ addInPlace(stats, walkNodes(n.elseNodes));
56
+ break;
57
+ }
58
+ case "for":
59
+ case "while": {
60
+ stats.loop += 1;
61
+ addInPlace(stats, walkNodes(n.body));
62
+ break;
63
+ }
64
+ case "try": {
65
+ stats.tryBlocks += 1;
66
+ addInPlace(stats, walkNodes(n.tryNodes));
67
+ for (const c of n.catches)
68
+ addInPlace(stats, walkNodes(c.nodes));
69
+ addInPlace(stats, walkNodes(n.finallyNodes));
70
+ break;
71
+ }
72
+ default:
73
+ break;
74
+ }
75
+ }
76
+ return stats;
77
+ }
78
+ function addInPlace(target, src) {
79
+ target.soql += src.soql;
80
+ target.dml += src.dml;
81
+ target.branch += src.branch;
82
+ target.loop += src.loop;
83
+ target.tryBlocks += src.tryBlocks;
84
+ }
85
+ function collectDelegations(body) {
86
+ if (body === undefined)
87
+ return [];
88
+ const out = [];
89
+ for (const ref of body.classReferences) {
90
+ out.push(ref.className);
91
+ }
92
+ return [...new Set(out)].toSorted((a, b) => a.localeCompare(b));
93
+ }
94
+ //# sourceMappingURL=trigger-processing-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-processing-summary.js","sourceRoot":"","sources":["../../src/render/trigger-processing-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { parseSarifFile, normalizeSarif, SarifParseError } from "./parse.js";
2
+ export type { NormalizedFinding, SarifLog, SarifResult, SarifLevel } from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sarif/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7E,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { parseSarifFile, normalizeSarif, SarifParseError } from "./parse.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sarif/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { NormalizedFinding } from "./types.js";
2
+ export declare class SarifParseError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare function parseSarifFile(path: string): readonly NormalizedFinding[];
6
+ export declare function normalizeSarif(parsed: unknown): readonly NormalizedFinding[];
7
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/sarif/parse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAyB,MAAM,YAAY,CAAC;AAE3E,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,iBAAiB,EAAE,CAczE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,iBAAiB,EAAE,CAY5E"}
@@ -0,0 +1,55 @@
1
+ import { readFileSync } from "node:fs";
2
+ export class SarifParseError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = "SarifParseError";
6
+ }
7
+ }
8
+ export function parseSarifFile(path) {
9
+ let raw;
10
+ try {
11
+ raw = readFileSync(path, "utf8");
12
+ }
13
+ catch (err) {
14
+ throw new SarifParseError(`Failed to read SARIF file ${path}: ${err.message}`);
15
+ }
16
+ let parsed;
17
+ try {
18
+ parsed = JSON.parse(raw);
19
+ }
20
+ catch (err) {
21
+ throw new SarifParseError(`Invalid JSON in SARIF file: ${err.message}`);
22
+ }
23
+ return normalizeSarif(parsed);
24
+ }
25
+ export function normalizeSarif(parsed) {
26
+ if (parsed === null || typeof parsed !== "object")
27
+ return [];
28
+ const log = parsed;
29
+ const findings = [];
30
+ for (const run of log.runs ?? []) {
31
+ const tool = run.tool?.driver?.name;
32
+ for (const result of run.results ?? []) {
33
+ const finding = toNormalized(result, tool);
34
+ if (finding !== undefined)
35
+ findings.push(finding);
36
+ }
37
+ }
38
+ return findings;
39
+ }
40
+ function toNormalized(result, tool) {
41
+ const ruleId = result.ruleId ?? "unknown-rule";
42
+ const level = result.level ?? "warning";
43
+ const message = result.message?.text ?? "";
44
+ const locations = (result.locations ?? [])
45
+ .map((loc) => loc.physicalLocation?.artifactLocation?.uri)
46
+ .filter((u) => typeof u === "string");
47
+ return {
48
+ ruleId,
49
+ level,
50
+ message,
51
+ locations,
52
+ ...(tool !== undefined ? { tool } : {}),
53
+ };
54
+ }
55
+ //# sourceMappingURL=parse.js.map