@laitszkin/apollo-toolkit 4.1.3 → 5.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 (205) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/bin/apollo-toolkit.ts +4 -0
  3. package/dist/bin/apollo-toolkit.js +4 -0
  4. package/package.json +7 -2
  5. package/packages/cli/dist/help-text-builder.d.ts +23 -0
  6. package/packages/cli/dist/help-text-builder.js +166 -0
  7. package/packages/cli/dist/index.d.ts +6 -17
  8. package/packages/cli/dist/index.js +52 -246
  9. package/packages/cli/dist/installer.d.ts +1 -0
  10. package/packages/cli/dist/installer.js +20 -7
  11. package/packages/cli/dist/parsers/install-parser.d.ts +15 -0
  12. package/packages/cli/dist/parsers/install-parser.js +87 -0
  13. package/packages/cli/dist/parsers/parser-utils.d.ts +9 -0
  14. package/packages/cli/dist/parsers/parser-utils.js +16 -0
  15. package/packages/cli/dist/parsers/tool-parser.d.ts +16 -0
  16. package/packages/cli/dist/parsers/tool-parser.js +58 -0
  17. package/packages/cli/dist/parsers/types.d.ts +50 -0
  18. package/packages/cli/dist/parsers/types.js +1 -0
  19. package/packages/cli/dist/parsers/uninstall-parser.d.ts +15 -0
  20. package/packages/cli/dist/parsers/uninstall-parser.js +67 -0
  21. package/packages/cli/dist/tool-registration.d.ts +2 -0
  22. package/packages/cli/dist/tool-registration.js +2 -0
  23. package/packages/cli/dist/tsconfig.tsbuildinfo +1 -1
  24. package/packages/cli/dist/types.d.ts +3 -1
  25. package/packages/cli/dist/updater.js +11 -5
  26. package/packages/cli/help-text-builder.ts +180 -0
  27. package/packages/cli/index.ts +59 -251
  28. package/packages/cli/installer.ts +19 -7
  29. package/packages/cli/package.json +6 -3
  30. package/packages/cli/parsers/install-parser.ts +94 -0
  31. package/packages/cli/parsers/parser-utils.ts +17 -0
  32. package/packages/cli/parsers/tool-parser.ts +65 -0
  33. package/packages/cli/parsers/types.ts +56 -0
  34. package/packages/cli/parsers/uninstall-parser.ts +75 -0
  35. package/packages/cli/tool-registration.ts +3 -0
  36. package/packages/cli/types.ts +6 -1
  37. package/packages/cli/updater.ts +11 -5
  38. package/packages/tool-registry/dist/registry.js +3 -4
  39. package/packages/tool-registry/dist/tsconfig.tsbuildinfo +1 -1
  40. package/packages/tool-registry/dist/types.d.ts +2 -9
  41. package/packages/tool-registry/package.json +3 -3
  42. package/packages/tool-registry/registry.ts +3 -4
  43. package/packages/tool-registry/tsconfig.json +6 -2
  44. package/packages/tool-registry/types.ts +3 -9
  45. package/packages/tool-utils/app-error.ts +97 -0
  46. package/packages/tool-utils/dist/app-error.d.ts +49 -0
  47. package/packages/tool-utils/dist/app-error.js +80 -0
  48. package/packages/tool-utils/dist/index.d.ts +5 -0
  49. package/packages/tool-utils/dist/index.js +3 -0
  50. package/packages/tool-utils/dist/platform-adapter.d.ts +48 -0
  51. package/packages/tool-utils/dist/platform-adapter.js +73 -0
  52. package/packages/tool-utils/dist/schema.d.ts +68 -0
  53. package/packages/tool-utils/dist/schema.js +67 -0
  54. package/packages/tool-utils/dist/tsconfig.tsbuildinfo +1 -1
  55. package/packages/tool-utils/index.ts +12 -0
  56. package/packages/tool-utils/package.json +3 -3
  57. package/packages/tool-utils/platform-adapter.ts +112 -0
  58. package/packages/tool-utils/schema.ts +122 -0
  59. package/packages/tools/architecture/dist/index.d.ts +13 -0
  60. package/packages/tools/architecture/dist/index.js +55 -57
  61. package/packages/tools/architecture/dist/index.test.js +17 -4
  62. package/packages/tools/architecture/dist/tsconfig.tsbuildinfo +1 -1
  63. package/packages/tools/architecture/index.test.ts +27 -14
  64. package/packages/tools/architecture/index.ts +85 -88
  65. package/packages/tools/architecture/package.json +3 -3
  66. package/packages/tools/codegraph/dist/index.js +21 -17
  67. package/packages/tools/codegraph/dist/tsconfig.tsbuildinfo +1 -1
  68. package/packages/tools/codegraph/index.ts +21 -17
  69. package/packages/tools/codegraph/package.json +3 -3
  70. package/packages/tools/create-review-report/dist/index.d.ts +1 -2
  71. package/packages/tools/create-review-report/dist/index.js +46 -77
  72. package/packages/tools/create-review-report/dist/tsconfig.tsbuildinfo +1 -1
  73. package/packages/tools/create-review-report/index.ts +52 -81
  74. package/packages/tools/create-review-report/package.json +3 -3
  75. package/packages/tools/create-specs/dist/index.d.ts +1 -2
  76. package/packages/tools/create-specs/dist/index.js +70 -123
  77. package/packages/tools/create-specs/dist/tsconfig.tsbuildinfo +1 -1
  78. package/packages/tools/create-specs/index.ts +82 -128
  79. package/packages/tools/create-specs/package.json +3 -3
  80. package/packages/tools/docs-to-voice/dist/index.d.ts +1 -2
  81. package/packages/tools/docs-to-voice/dist/index.js +116 -219
  82. package/packages/tools/docs-to-voice/dist/tsconfig.tsbuildinfo +1 -1
  83. package/packages/tools/docs-to-voice/index.ts +265 -385
  84. package/packages/tools/docs-to-voice/package.json +3 -3
  85. package/packages/tools/enforce-video-aspect-ratio/dist/index.d.ts +1 -2
  86. package/packages/tools/enforce-video-aspect-ratio/dist/index.js +77 -154
  87. package/packages/tools/enforce-video-aspect-ratio/dist/tsconfig.tsbuildinfo +1 -1
  88. package/packages/tools/enforce-video-aspect-ratio/index.ts +87 -172
  89. package/packages/tools/enforce-video-aspect-ratio/package.json +3 -3
  90. package/packages/tools/eval/dist/index.js +7 -0
  91. package/packages/tools/eval/dist/tsconfig.tsbuildinfo +1 -1
  92. package/packages/tools/eval/index.ts +8 -0
  93. package/packages/tools/eval/package.json +3 -3
  94. package/packages/tools/extract-conversations/dist/index.d.ts +1 -2
  95. package/packages/tools/extract-conversations/dist/index.js +31 -29
  96. package/packages/tools/extract-conversations/dist/tsconfig.tsbuildinfo +1 -1
  97. package/packages/tools/extract-conversations/index.ts +37 -30
  98. package/packages/tools/extract-conversations/package.json +3 -3
  99. package/packages/tools/extract-pdf-text/dist/index.d.ts +1 -2
  100. package/packages/tools/extract-pdf-text/dist/index.js +44 -65
  101. package/packages/tools/extract-pdf-text/dist/tsconfig.tsbuildinfo +1 -1
  102. package/packages/tools/extract-pdf-text/index.ts +55 -74
  103. package/packages/tools/extract-pdf-text/package.json +3 -3
  104. package/packages/tools/filter-logs/dist/index.js +60 -84
  105. package/packages/tools/filter-logs/dist/tsconfig.tsbuildinfo +1 -1
  106. package/packages/tools/filter-logs/index.ts +67 -97
  107. package/packages/tools/filter-logs/package.json +3 -3
  108. package/packages/tools/find-github-issues/dist/index.d.ts +10 -0
  109. package/packages/tools/find-github-issues/dist/index.js +34 -5
  110. package/packages/tools/find-github-issues/dist/tsconfig.tsbuildinfo +1 -1
  111. package/packages/tools/find-github-issues/index.ts +37 -5
  112. package/packages/tools/find-github-issues/package.json +3 -3
  113. package/packages/tools/generate-storyboard-images/dist/index.d.ts +1 -2
  114. package/packages/tools/generate-storyboard-images/dist/index.js +98 -173
  115. package/packages/tools/generate-storyboard-images/dist/tsconfig.tsbuildinfo +1 -1
  116. package/packages/tools/generate-storyboard-images/index.ts +100 -188
  117. package/packages/tools/generate-storyboard-images/package.json +3 -3
  118. package/packages/tools/open-github-issue/dist/index.d.ts +13 -0
  119. package/packages/tools/open-github-issue/dist/index.js +67 -68
  120. package/packages/tools/open-github-issue/dist/tsconfig.tsbuildinfo +1 -1
  121. package/packages/tools/open-github-issue/index.ts +71 -72
  122. package/packages/tools/open-github-issue/package.json +3 -3
  123. package/packages/tools/read-github-issue/dist/index.d.ts +16 -1
  124. package/packages/tools/read-github-issue/dist/index.js +32 -40
  125. package/packages/tools/read-github-issue/dist/tsconfig.tsbuildinfo +1 -1
  126. package/packages/tools/read-github-issue/index.ts +32 -45
  127. package/packages/tools/read-github-issue/package.json +3 -3
  128. package/packages/tools/render-error-book/dist/index.d.ts +1 -2
  129. package/packages/tools/render-error-book/dist/index.js +74 -95
  130. package/packages/tools/render-error-book/dist/tsconfig.tsbuildinfo +1 -1
  131. package/packages/tools/render-error-book/index.ts +88 -103
  132. package/packages/tools/render-error-book/package.json +3 -3
  133. package/packages/tools/render-katex/dist/index.d.ts +1 -2
  134. package/packages/tools/render-katex/dist/index.js +70 -157
  135. package/packages/tools/render-katex/dist/tsconfig.tsbuildinfo +1 -1
  136. package/packages/tools/render-katex/index.ts +138 -222
  137. package/packages/tools/render-katex/package.json +3 -3
  138. package/packages/tools/review-threads/dist/index.d.ts +12 -0
  139. package/packages/tools/review-threads/dist/index.js +83 -86
  140. package/packages/tools/review-threads/dist/tsconfig.tsbuildinfo +1 -1
  141. package/packages/tools/review-threads/index.ts +90 -84
  142. package/packages/tools/review-threads/package.json +3 -3
  143. package/packages/tools/search-logs/dist/index.js +100 -136
  144. package/packages/tools/search-logs/dist/tsconfig.tsbuildinfo +1 -1
  145. package/packages/tools/search-logs/index.ts +113 -145
  146. package/packages/tools/search-logs/package.json +3 -3
  147. package/packages/tools/sync-memory-index/dist/index.js +34 -28
  148. package/packages/tools/sync-memory-index/dist/tsconfig.tsbuildinfo +1 -1
  149. package/packages/tools/sync-memory-index/index.ts +37 -28
  150. package/packages/tools/sync-memory-index/package.json +3 -3
  151. package/packages/tools/validate-openai-agent-config/dist/index.js +13 -7
  152. package/packages/tools/validate-openai-agent-config/dist/tsconfig.tsbuildinfo +1 -1
  153. package/packages/tools/validate-openai-agent-config/index.ts +13 -7
  154. package/packages/tools/validate-openai-agent-config/package.json +3 -3
  155. package/packages/tools/validate-skill-frontmatter/dist/index.js +12 -6
  156. package/packages/tools/validate-skill-frontmatter/dist/tsconfig.tsbuildinfo +1 -1
  157. package/packages/tools/validate-skill-frontmatter/index.ts +12 -6
  158. package/packages/tools/validate-skill-frontmatter/package.json +3 -3
  159. package/packages/tui/dist/index.d.ts +2 -1
  160. package/packages/tui/dist/index.js +1 -0
  161. package/packages/tui/dist/stdio-adapter.d.ts +36 -0
  162. package/packages/tui/dist/stdio-adapter.js +69 -0
  163. package/packages/tui/dist/terminal.js +3 -1
  164. package/packages/tui/dist/tsconfig.tsbuildinfo +1 -1
  165. package/packages/tui/dist/types.d.ts +17 -0
  166. package/packages/tui/index.ts +2 -1
  167. package/packages/tui/package.json +6 -5
  168. package/packages/tui/stdio-adapter.ts +85 -0
  169. package/packages/tui/terminal.ts +3 -1
  170. package/packages/tui/tsconfig.json +5 -2
  171. package/packages/tui/types.ts +19 -0
  172. package/resources/project-architecture/assets/architecture.css +2 -1
  173. package/resources/project-architecture/atlas/atlas.history.log +1 -0
  174. package/resources/project-architecture/atlas/atlas.history.undo.json +13 -2
  175. package/resources/project-architecture/atlas/atlas.history.undo.stack.json +610 -0
  176. package/resources/project-architecture/atlas/atlas.index.yaml +81 -5
  177. package/resources/project-architecture/atlas/features/cli-dispatch.yaml +43 -0
  178. package/resources/project-architecture/atlas/features/terminal-ui.yaml +29 -0
  179. package/resources/project-architecture/atlas/features/tool-registry.yaml +22 -0
  180. package/resources/project-architecture/atlas/features/tool-utils.yaml +22 -0
  181. package/resources/project-architecture/features/cli-dispatch/arg-parser.html +40 -0
  182. package/resources/project-architecture/features/cli-dispatch/help-builder.html +40 -0
  183. package/resources/project-architecture/features/cli-dispatch/index.html +64 -0
  184. package/resources/project-architecture/features/cli-dispatch/installer-core.html +40 -0
  185. package/resources/project-architecture/features/cli-dispatch/tool-discovery.html +40 -0
  186. package/resources/project-architecture/features/cli-dispatch/update-checker.html +40 -0
  187. package/resources/project-architecture/features/terminal-ui/banner-display.html +40 -0
  188. package/resources/project-architecture/features/terminal-ui/index.html +50 -0
  189. package/resources/project-architecture/features/terminal-ui/interactive-prompts.html +40 -0
  190. package/resources/project-architecture/features/terminal-ui/terminal-detection.html +40 -0
  191. package/resources/project-architecture/features/tool-registry/formatter.html +40 -0
  192. package/resources/project-architecture/features/tool-registry/index.html +43 -0
  193. package/resources/project-architecture/features/tool-registry/registry-core.html +40 -0
  194. package/resources/project-architecture/features/tool-utils/index.html +43 -0
  195. package/resources/project-architecture/features/tool-utils/log-utils.html +40 -0
  196. package/resources/project-architecture/features/tool-utils/skill-discovery.html +40 -0
  197. package/resources/project-architecture/index.html +365 -121
  198. package/scripts/rewrite-imports.mjs +2 -2
  199. package/scripts/test.sh +144 -8
  200. package/skills/design/SKILL.md +57 -64
  201. package/skills/design/assets/templates/DESIGN.md +12 -0
  202. package/skills/design/references/code-smells.md +94 -0
  203. package/skills/design/references/module-boundary-adjustment.md +126 -0
  204. package/skills/design/references/module-internal-restructuring.md +132 -0
  205. package/skills/design/references/module-internal-simplification.md +164 -0
@@ -24,7 +24,7 @@
24
24
  <button type="button" data-pan-zoom="fit" aria-label="Reset view">Fit</button>
25
25
  </div>
26
26
  <div class="atlas-canvas__viewport" data-pan-zoom-viewport>
27
- <svg class="atlas-svg" viewBox="0 0 4335 1245" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Project architecture atlas" data-atlas-svg="macro">
27
+ <svg class="atlas-svg" viewBox="0 0 4399 1760" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Project architecture atlas" data-atlas-svg="macro">
28
28
  <defs>
29
29
  <marker id="arrow-call" class="m-arrow m-arrow--call" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 Z" /></marker>
30
30
  <marker id="arrow-return" class="m-arrow m-arrow--return" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 Z" /></marker>
@@ -33,168 +33,268 @@
33
33
  </defs>
34
34
  <g transform="translate(24,24)">
35
35
  <g class="m-cluster" data-feature="codegraph">
36
- <rect class="m-cluster__bg" x="20.00" y="318.00" width="1748.00" height="252.00" rx="14" ry="14" />
37
- <text class="m-cluster__title" x="894.00" y="344.00" text-anchor="middle">CodeGraph Integration</text>
36
+ <rect class="m-cluster__bg" x="20.00" y="975.00" width="1748.00" height="252.00" rx="14" ry="14" />
37
+ <text class="m-cluster__title" x="894.00" y="1001.00" text-anchor="middle">CodeGraph Integration</text>
38
38
  </g>
39
39
  <g class="m-cluster" data-feature="eval-optimizer">
40
- <rect class="m-cluster__bg" x="3243.00" y="227.75" width="255.00" height="405.00" rx="14" ry="14" />
41
- <text class="m-cluster__title" x="3370.50" y="253.75" text-anchor="middle">優化引擎</text>
40
+ <rect class="m-cluster__bg" x="3279.00" y="742.50" width="255.00" height="405.00" rx="14" ry="14" />
41
+ <text class="m-cluster__title" x="3406.50" y="768.50" text-anchor="middle">優化引擎</text>
42
42
  </g>
43
43
  <g class="m-cluster" data-feature="eval-cli">
44
- <rect class="m-cluster__bg" x="2129.00" y="368.00" width="291.00" height="295.00" rx="14" ry="14" />
45
- <text class="m-cluster__title" x="2274.50" y="394.00" text-anchor="middle">CLI命令</text>
44
+ <rect class="m-cluster__bg" x="2153.00" y="1061.50" width="291.00" height="295.00" rx="14" ry="14" />
45
+ <text class="m-cluster__title" x="2298.50" y="1087.50" text-anchor="middle">CLI命令</text>
46
46
  </g>
47
47
  <g class="m-cluster" data-feature="eval-ci-gate">
48
- <rect class="m-cluster__bg" x="2675.00" y="375.25" width="342.00" height="295.00" rx="14" ry="14" />
49
- <text class="m-cluster__title" x="2846.00" y="401.25" text-anchor="middle">PR閘門</text>
48
+ <rect class="m-cluster__bg" x="2711.00" y="871.25" width="342.00" height="295.00" rx="14" ry="14" />
49
+ <text class="m-cluster__title" x="2882.00" y="897.25" text-anchor="middle">PR閘門</text>
50
50
  </g>
51
51
  <g class="m-cluster" data-feature="eval-isolation">
52
- <rect class="m-cluster__bg" x="3264.00" y="991.75" width="524.00" height="185.00" rx="14" ry="14" />
53
- <text class="m-cluster__title" x="3526.00" y="1017.75" text-anchor="middle">上下文隔離與工具模擬</text>
52
+ <rect class="m-cluster__bg" x="3328.00" y="1506.50" width="524.00" height="185.00" rx="14" ry="14" />
53
+ <text class="m-cluster__title" x="3590.00" y="1532.50" text-anchor="middle">上下文隔離與工具模擬</text>
54
54
  </g>
55
55
  <g class="m-cluster" data-feature="eval-question">
56
- <rect class="m-cluster__bg" x="2931.00" y="20.00" width="252.00" height="266.00" rx="14" ry="14" />
57
- <text class="m-cluster__title" x="3057.00" y="46.00" text-anchor="middle">評測題庫</text>
56
+ <rect class="m-cluster__bg" x="1790.00" y="20.00" width="252.00" height="266.00" rx="14" ry="14" />
57
+ <text class="m-cluster__title" x="1916.00" y="46.00" text-anchor="middle">評測題庫</text>
58
58
  </g>
59
59
  <g class="m-cluster" data-feature="eval-executor">
60
- <rect class="m-cluster__bg" x="2702.00" y="702.25" width="322.00" height="327.00" rx="14" ry="14" />
61
- <text class="m-cluster__title" x="2863.00" y="728.25" text-anchor="middle">評測執行器</text>
60
+ <rect class="m-cluster__bg" x="2766.00" y="1198.25" width="322.00" height="327.00" rx="14" ry="14" />
61
+ <text class="m-cluster__title" x="2927.00" y="1224.25" text-anchor="middle">評測執行器</text>
62
62
  </g>
63
63
  <g class="m-cluster" data-feature="eval-scorer">
64
- <rect class="m-cluster__bg" x="3290.00" y="664.75" width="451.00" height="295.00" rx="14" ry="14" />
65
- <text class="m-cluster__title" x="3515.50" y="690.75" text-anchor="middle">評分引擎</text>
64
+ <rect class="m-cluster__bg" x="3354.00" y="1179.50" width="451.00" height="295.00" rx="14" ry="14" />
65
+ <text class="m-cluster__title" x="3579.50" y="1205.50" text-anchor="middle">評分引擎</text>
66
66
  </g>
67
67
  <g class="m-cluster" data-feature="eval-reporter">
68
- <rect class="m-cluster__bg" x="4015.00" y="700.25" width="252.00" height="185.00" rx="14" ry="14" />
69
- <text class="m-cluster__title" x="4141.00" y="726.25" text-anchor="middle">評測報告</text>
68
+ <rect class="m-cluster__bg" x="4079.00" y="1215.00" width="252.00" height="185.00" rx="14" ry="14" />
69
+ <text class="m-cluster__title" x="4205.00" y="1241.00" text-anchor="middle">評測報告</text>
70
+ </g>
71
+ <g class="m-cluster" data-feature="cli-dispatch">
72
+ <rect class="m-cluster__bg" x="1264.00" y="318.00" width="488.00" height="625.00" rx="14" ry="14" />
73
+ <text class="m-cluster__title" x="1508.00" y="344.00" text-anchor="middle">CLI Dispatch and Install Engine</text>
74
+ </g>
75
+ <g class="m-cluster" data-feature="tool-registry">
76
+ <rect class="m-cluster__bg" x="2107.00" y="256.17" width="423.00" height="295.00" rx="14" ry="14" />
77
+ <text class="m-cluster__title" x="2318.50" y="282.17" text-anchor="middle">Tool Registry</text>
78
+ </g>
79
+ <g class="m-cluster" data-feature="tool-utils">
80
+ <rect class="m-cluster__bg" x="1682.00" y="1259.00" width="411.00" height="266.00" rx="14" ry="14" />
81
+ <text class="m-cluster__title" x="1887.50" y="1285.00" text-anchor="middle">Tool Utilities</text>
82
+ </g>
83
+ <g class="m-cluster" data-feature="terminal-ui">
84
+ <rect class="m-cluster__bg" x="2080.00" y="583.17" width="381.00" height="405.00" rx="14" ry="14" />
85
+ <text class="m-cluster__title" x="2270.50" y="609.17" text-anchor="middle">Terminal UI</text>
70
86
  </g>
71
87
  <a class="m-node m-node--service" href="features/codegraph/cg-lifecycle.html" data-feature="codegraph" data-submodule="cg-lifecycle" tabindex="0" aria-label="cg-lifecycle — Manage CodeGraph index lifecycle — init, sync, status, search — open sub-module page">
72
88
  <title>cg-lifecycle — Manage CodeGraph index lifecycle — init, sync, status, search</title>
73
- <rect x="36.00" y="447.00" width="393.00" height="94.00" rx="10" ry="10" />
74
- <text class="m-node__title" x="232.50" y="477.00" text-anchor="middle">cg-lifecycle</text>
75
- <text class="m-node__kind" x="232.50" y="493.00" text-anchor="middle">Service</text>
76
- <text class="m-node__role" x="232.50" y="513.00" text-anchor="middle">Manage CodeGraph index lifecycle — init, sync, status, search</text>
89
+ <rect x="36.00" y="1104.00" width="393.00" height="94.00" rx="10" ry="10" />
90
+ <text class="m-node__title" x="232.50" y="1134.00" text-anchor="middle">cg-lifecycle</text>
91
+ <text class="m-node__kind" x="232.50" y="1150.00" text-anchor="middle">Service</text>
92
+ <text class="m-node__role" x="232.50" y="1170.00" text-anchor="middle">Manage CodeGraph index lifecycle — init, sync, status, search</text>
77
93
  </a>
78
94
  <a class="m-node m-node--service" href="features/codegraph/cg-discovery.html" data-feature="codegraph" data-submodule="cg-discovery" tabindex="0" aria-label="cg-discovery — Explore and survey code structure — explore, survey, list-apis — open sub-module page">
79
95
  <title>cg-discovery — Explore and survey code structure — explore, survey, list-apis</title>
80
- <rect x="701.00" y="447.00" width="399.00" height="94.00" rx="10" ry="10" />
81
- <text class="m-node__title" x="900.50" y="477.00" text-anchor="middle">cg-discovery</text>
82
- <text class="m-node__kind" x="900.50" y="493.00" text-anchor="middle">Service</text>
83
- <text class="m-node__role" x="900.50" y="513.00" text-anchor="middle">Explore and survey code structure — explore, survey, list-apis</text>
96
+ <rect x="701.00" y="1104.00" width="399.00" height="94.00" rx="10" ry="10" />
97
+ <text class="m-node__title" x="900.50" y="1134.00" text-anchor="middle">cg-discovery</text>
98
+ <text class="m-node__kind" x="900.50" y="1150.00" text-anchor="middle">Service</text>
99
+ <text class="m-node__role" x="900.50" y="1170.00" text-anchor="middle">Explore and survey code structure — explore, survey, list-apis</text>
84
100
  </a>
85
101
  <a class="m-node m-node--service" href="features/codegraph/cg-validation.html" data-feature="codegraph" data-submodule="cg-validation" tabindex="0" aria-label="cg-validation — Verify architecture proposals and batch-apply atlas mutations — open sub-module page">
86
102
  <title>cg-validation — Verify architecture proposals and batch-apply atlas mutations</title>
87
- <rect x="1352.00" y="422.43" width="400.00" height="94.00" rx="10" ry="10" />
88
- <text class="m-node__title" x="1552.00" y="452.43" text-anchor="middle">cg-validation</text>
89
- <text class="m-node__kind" x="1552.00" y="468.43" text-anchor="middle">Service</text>
90
- <text class="m-node__role" x="1552.00" y="488.43" text-anchor="middle">Verify architecture proposals and batch-apply atlas mutations</text>
103
+ <rect x="1352.00" y="1079.43" width="400.00" height="94.00" rx="10" ry="10" />
104
+ <text class="m-node__title" x="1552.00" y="1109.43" text-anchor="middle">cg-validation</text>
105
+ <text class="m-node__kind" x="1552.00" y="1125.43" text-anchor="middle">Service</text>
106
+ <text class="m-node__role" x="1552.00" y="1145.43" text-anchor="middle">Verify architecture proposals and batch-apply atlas mutations</text>
91
107
  </a>
92
108
  <a class="m-node m-node--service" href="features/eval-optimizer/issue-extractor.html" data-feature="eval-optimizer" data-submodule="issue-extractor" tabindex="0" aria-label="issue-extractor — 從score.json提取問題、分類統計 — open sub-module page">
93
109
  <title>issue-extractor — 從score.json提取問題、分類統計</title>
94
- <rect x="3260.50" y="410.75" width="220.00" height="94.00" rx="10" ry="10" />
95
- <text class="m-node__title" x="3370.50" y="440.75" text-anchor="middle">issue-extractor</text>
96
- <text class="m-node__kind" x="3370.50" y="456.75" text-anchor="middle">Service</text>
97
- <text class="m-node__role" x="3370.50" y="476.75" text-anchor="middle">從score.json提取問題、分類統計</text>
110
+ <rect x="3296.50" y="925.50" width="220.00" height="94.00" rx="10" ry="10" />
111
+ <text class="m-node__title" x="3406.50" y="955.50" text-anchor="middle">issue-extractor</text>
112
+ <text class="m-node__kind" x="3406.50" y="971.50" text-anchor="middle">Service</text>
113
+ <text class="m-node__role" x="3406.50" y="991.50" text-anchor="middle">從score.json提取問題、分類統計</text>
98
114
  </a>
99
115
  <a class="m-node m-node--service" href="features/eval-optimizer/dedup-engine.html" data-feature="eval-optimizer" data-submodule="dedup-engine" tabindex="0" aria-label="dedup-engine — Jaccard+Judge語意去重 — open sub-module page">
100
116
  <title>dedup-engine — Jaccard+Judge語意去重</title>
101
- <rect x="3260.50" y="520.75" width="220.00" height="94.00" rx="10" ry="10" />
102
- <text class="m-node__title" x="3370.50" y="550.75" text-anchor="middle">dedup-engine</text>
103
- <text class="m-node__kind" x="3370.50" y="566.75" text-anchor="middle">Service</text>
104
- <text class="m-node__role" x="3370.50" y="586.75" text-anchor="middle">Jaccard+Judge語意去重</text>
117
+ <rect x="3296.50" y="1035.50" width="220.00" height="94.00" rx="10" ry="10" />
118
+ <text class="m-node__title" x="3406.50" y="1065.50" text-anchor="middle">dedup-engine</text>
119
+ <text class="m-node__kind" x="3406.50" y="1081.50" text-anchor="middle">Service</text>
120
+ <text class="m-node__role" x="3406.50" y="1101.50" text-anchor="middle">Jaccard+Judge語意去重</text>
105
121
  </a>
106
122
  <a class="m-node m-node--service" href="features/eval-optimizer/diff-generator.html" data-feature="eval-optimizer" data-submodule="diff-generator" tabindex="0" aria-label="diff-generator — FIND/REPLACE diff生成與備份/復原 — open sub-module page">
107
123
  <title>diff-generator — FIND/REPLACE diff生成與備份/復原</title>
108
- <rect x="3259.00" y="300.75" width="223.00" height="94.00" rx="10" ry="10" />
109
- <text class="m-node__title" x="3370.50" y="330.75" text-anchor="middle">diff-generator</text>
110
- <text class="m-node__kind" x="3370.50" y="346.75" text-anchor="middle">Service</text>
111
- <text class="m-node__role" x="3370.50" y="366.75" text-anchor="middle">FIND/REPLACE diff生成與備份/復原</text>
124
+ <rect x="3295.00" y="815.50" width="223.00" height="94.00" rx="10" ry="10" />
125
+ <text class="m-node__title" x="3406.50" y="845.50" text-anchor="middle">diff-generator</text>
126
+ <text class="m-node__kind" x="3406.50" y="861.50" text-anchor="middle">Service</text>
127
+ <text class="m-node__role" x="3406.50" y="881.50" text-anchor="middle">FIND/REPLACE diff生成與備份/復原</text>
112
128
  </a>
113
129
  <a class="m-node m-node--service" href="features/eval-cli/cli-handler.html" data-feature="eval-cli" data-submodule="cli-handler" tabindex="0" aria-label="cli-handler — ToolDefinition註冊、參數解析、流程編排 — open sub-module page">
114
130
  <title>cli-handler — ToolDefinition註冊、參數解析、流程編排</title>
115
- <rect x="2145.00" y="551.00" width="259.00" height="94.00" rx="10" ry="10" />
116
- <text class="m-node__title" x="2274.50" y="581.00" text-anchor="middle">cli-handler</text>
117
- <text class="m-node__kind" x="2274.50" y="597.00" text-anchor="middle">Service</text>
118
- <text class="m-node__role" x="2274.50" y="617.00" text-anchor="middle">ToolDefinition註冊、參數解析、流程編排</text>
131
+ <rect x="2169.00" y="1134.50" width="259.00" height="94.00" rx="10" ry="10" />
132
+ <text class="m-node__title" x="2298.50" y="1164.50" text-anchor="middle">cli-handler</text>
133
+ <text class="m-node__kind" x="2298.50" y="1180.50" text-anchor="middle">Service</text>
134
+ <text class="m-node__role" x="2298.50" y="1200.50" text-anchor="middle">ToolDefinition註冊、參數解析、流程編排</text>
119
135
  </a>
120
136
  <a class="m-node m-node--ui" href="features/eval-cli/progress-display.html" data-feature="eval-cli" data-submodule="progress-display" tabindex="0" aria-label="progress-display — 終端機進度指示 — open sub-module page">
121
137
  <title>progress-display — 終端機進度指示</title>
122
- <rect x="2164.50" y="441.00" width="220.00" height="94.00" rx="10" ry="10" />
123
- <text class="m-node__title" x="2274.50" y="471.00" text-anchor="middle">progress-display</text>
124
- <text class="m-node__kind" x="2274.50" y="487.00" text-anchor="middle">UI</text>
125
- <text class="m-node__role" x="2274.50" y="507.00" text-anchor="middle">終端機進度指示</text>
138
+ <rect x="2188.50" y="1244.50" width="220.00" height="94.00" rx="10" ry="10" />
139
+ <text class="m-node__title" x="2298.50" y="1274.50" text-anchor="middle">progress-display</text>
140
+ <text class="m-node__kind" x="2298.50" y="1290.50" text-anchor="middle">UI</text>
141
+ <text class="m-node__role" x="2298.50" y="1310.50" text-anchor="middle">終端機進度指示</text>
126
142
  </a>
127
143
  <a class="m-node m-node--service" href="features/eval-ci-gate/workflow-trigger.html" data-feature="eval-ci-gate" data-submodule="workflow-trigger" tabindex="0" aria-label="workflow-trigger — GitHub Actions workflow on PR skill file change — open sub-module page">
128
144
  <title>workflow-trigger — GitHub Actions workflow on PR skill file change</title>
129
- <rect x="2691.00" y="448.25" width="310.00" height="94.00" rx="10" ry="10" />
130
- <text class="m-node__title" x="2846.00" y="478.25" text-anchor="middle">workflow-trigger</text>
131
- <text class="m-node__kind" x="2846.00" y="494.25" text-anchor="middle">Service</text>
132
- <text class="m-node__role" x="2846.00" y="514.25" text-anchor="middle">GitHub Actions workflow on PR skill file change</text>
145
+ <rect x="2727.00" y="944.25" width="310.00" height="94.00" rx="10" ry="10" />
146
+ <text class="m-node__title" x="2882.00" y="974.25" text-anchor="middle">workflow-trigger</text>
147
+ <text class="m-node__kind" x="2882.00" y="990.25" text-anchor="middle">Service</text>
148
+ <text class="m-node__role" x="2882.00" y="1010.25" text-anchor="middle">GitHub Actions workflow on PR skill file change</text>
133
149
  </a>
134
150
  <a class="m-node m-node--service" href="features/eval-ci-gate/pr-reporter.html" data-feature="eval-ci-gate" data-submodule="pr-reporter" tabindex="0" aria-label="pr-reporter — PR評論回報評測結果 — open sub-module page">
135
151
  <title>pr-reporter — PR評論回報評測結果</title>
136
- <rect x="2736.00" y="558.25" width="220.00" height="94.00" rx="10" ry="10" />
137
- <text class="m-node__title" x="2846.00" y="588.25" text-anchor="middle">pr-reporter</text>
138
- <text class="m-node__kind" x="2846.00" y="604.25" text-anchor="middle">Service</text>
139
- <text class="m-node__role" x="2846.00" y="624.25" text-anchor="middle">PR評論回報評測結果</text>
152
+ <rect x="2772.00" y="1054.25" width="220.00" height="94.00" rx="10" ry="10" />
153
+ <text class="m-node__title" x="2882.00" y="1084.25" text-anchor="middle">pr-reporter</text>
154
+ <text class="m-node__kind" x="2882.00" y="1100.25" text-anchor="middle">Service</text>
155
+ <text class="m-node__role" x="2882.00" y="1120.25" text-anchor="middle">PR評論回報評測結果</text>
140
156
  </a>
141
157
  <a class="m-node m-node--service" href="features/eval-isolation/tool-dispatcher.html" data-feature="eval-isolation" data-submodule="tool-dispatcher" tabindex="0" aria-label="tool-dispatcher — 工具調用攔截系統:讀取工具在workspace內真實執行、寫入工具模擬回傳、路徑穿越防護 — open sub-module page">
142
158
  <title>tool-dispatcher — 工具調用攔截系統:讀取工具在workspace內真實執行、寫入工具模擬回傳、路徑穿越防護</title>
143
- <rect x="3280.00" y="1064.75" width="492.00" height="94.00" rx="10" ry="10" />
144
- <text class="m-node__title" x="3526.00" y="1094.75" text-anchor="middle">tool-dispatcher</text>
145
- <text class="m-node__kind" x="3526.00" y="1110.75" text-anchor="middle">Service</text>
146
- <text class="m-node__role" x="3526.00" y="1130.75" text-anchor="middle">工具調用攔截系統:讀取工具在workspace內真實執行、寫入工具模擬回傳、路徑穿越防護</text>
159
+ <rect x="3344.00" y="1579.50" width="492.00" height="94.00" rx="10" ry="10" />
160
+ <text class="m-node__title" x="3590.00" y="1609.50" text-anchor="middle">tool-dispatcher</text>
161
+ <text class="m-node__kind" x="3590.00" y="1625.50" text-anchor="middle">Service</text>
162
+ <text class="m-node__role" x="3590.00" y="1645.50" text-anchor="middle">工具調用攔截系統:讀取工具在workspace內真實執行、寫入工具模擬回傳、路徑穿越防護</text>
147
163
  </a>
148
164
  <a class="m-node m-node--service" href="features/eval-question/question-loader.html" data-feature="eval-question" data-submodule="question-loader" tabindex="0" aria-label="question-loader — 題目載入與JSON Schema驗證 — open sub-module page">
149
165
  <title>question-loader — 題目載入與JSON Schema驗證</title>
150
- <rect x="2947.00" y="64.00" width="220.00" height="94.00" rx="10" ry="10" />
151
- <text class="m-node__title" x="3057.00" y="94.00" text-anchor="middle">question-loader</text>
152
- <text class="m-node__kind" x="3057.00" y="110.00" text-anchor="middle">Service</text>
153
- <text class="m-node__role" x="3057.00" y="130.00" text-anchor="middle">題目載入與JSON Schema驗證</text>
166
+ <rect x="1806.00" y="64.00" width="220.00" height="94.00" rx="10" ry="10" />
167
+ <text class="m-node__title" x="1916.00" y="94.00" text-anchor="middle">question-loader</text>
168
+ <text class="m-node__kind" x="1916.00" y="110.00" text-anchor="middle">Service</text>
169
+ <text class="m-node__role" x="1916.00" y="130.00" text-anchor="middle">題目載入與JSON Schema驗證</text>
154
170
  </a>
155
171
  <a class="m-node m-node--service" href="features/eval-question/variant-generator.html" data-feature="eval-question" data-submodule="variant-generator" tabindex="0" aria-label="variant-generator — LLM變體生成,保留評分標準 — open sub-module page">
156
172
  <title>variant-generator — LLM變體生成,保留評分標準</title>
157
- <rect x="2947.00" y="174.00" width="220.00" height="94.00" rx="10" ry="10" />
158
- <text class="m-node__title" x="3057.00" y="204.00" text-anchor="middle">variant-generator</text>
159
- <text class="m-node__kind" x="3057.00" y="220.00" text-anchor="middle">Service</text>
160
- <text class="m-node__role" x="3057.00" y="240.00" text-anchor="middle">LLM變體生成,保留評分標準</text>
173
+ <rect x="1806.00" y="174.00" width="220.00" height="94.00" rx="10" ry="10" />
174
+ <text class="m-node__title" x="1916.00" y="204.00" text-anchor="middle">variant-generator</text>
175
+ <text class="m-node__kind" x="1916.00" y="220.00" text-anchor="middle">Service</text>
176
+ <text class="m-node__role" x="1916.00" y="240.00" text-anchor="middle">LLM變體生成,保留評分標準</text>
161
177
  </a>
162
178
  <a class="m-node m-node--service" href="features/eval-executor/trace-recorder.html" data-feature="eval-executor" data-submodule="trace-recorder" tabindex="0" aria-label="trace-recorder — 多輪tool-use loop軌跡記錄:tool_call/tool_result事件序列、JSONL行號標記、.done完成標記 — open sub-module page">
163
179
  <title>trace-recorder — 多輪tool-use loop軌跡記錄:tool_call/tool_result事件序列、JSONL行號標記、.done完成標記</title>
164
- <rect x="2718.00" y="885.25" width="290.00" height="126.00" rx="10" ry="10" />
165
- <text class="m-node__title" x="2863.00" y="915.25" text-anchor="middle">trace-recorder</text>
166
- <text class="m-node__kind" x="2863.00" y="931.25" text-anchor="middle">Service</text>
167
- <text class="m-node__role" x="2863.00" y="951.25" text-anchor="middle">多輪tool-use loop軌跡記錄:</text>
168
- <text class="m-node__role" x="2863.00" y="967.25" text-anchor="middle">tool_call/tool_result事件序列、JSONL行號標</text>
169
- <text class="m-node__role" x="2863.00" y="983.25" text-anchor="middle">記、.done完成標記</text>
180
+ <rect x="2782.00" y="1271.25" width="290.00" height="126.00" rx="10" ry="10" />
181
+ <text class="m-node__title" x="2927.00" y="1301.25" text-anchor="middle">trace-recorder</text>
182
+ <text class="m-node__kind" x="2927.00" y="1317.25" text-anchor="middle">Service</text>
183
+ <text class="m-node__role" x="2927.00" y="1337.25" text-anchor="middle">多輪tool-use loop軌跡記錄:</text>
184
+ <text class="m-node__role" x="2927.00" y="1353.25" text-anchor="middle">tool_call/tool_result事件序列、JSONL行號標</text>
185
+ <text class="m-node__role" x="2927.00" y="1369.25" text-anchor="middle">記、.done完成標記</text>
170
186
  </a>
171
187
  <a class="m-node m-node--api" href="features/eval-executor/exec-api-client.html" data-feature="eval-executor" data-submodule="exec-api-client" tabindex="0" aria-label="exec-api-client — Exec Model HTTP client with retry — open sub-module page">
172
188
  <title>exec-api-client — Exec Model HTTP client with retry</title>
173
- <rect x="2749.50" y="775.25" width="227.00" height="94.00" rx="10" ry="10" />
174
- <text class="m-node__title" x="2863.00" y="805.25" text-anchor="middle">exec-api-client</text>
175
- <text class="m-node__kind" x="2863.00" y="821.25" text-anchor="middle">API</text>
176
- <text class="m-node__role" x="2863.00" y="841.25" text-anchor="middle">Exec Model HTTP client with retry</text>
189
+ <rect x="2813.50" y="1413.25" width="227.00" height="94.00" rx="10" ry="10" />
190
+ <text class="m-node__title" x="2927.00" y="1443.25" text-anchor="middle">exec-api-client</text>
191
+ <text class="m-node__kind" x="2927.00" y="1459.25" text-anchor="middle">API</text>
192
+ <text class="m-node__role" x="2927.00" y="1479.25" text-anchor="middle">Exec Model HTTP client with retry</text>
177
193
  </a>
178
194
  <a class="m-node m-node--service" href="features/eval-scorer/judge-prompt-builder.html" data-feature="eval-scorer" data-submodule="judge-prompt-builder" tabindex="0" aria-label="judge-prompt-builder — 評分提示詞構建:trace事件摘要含JSONL行號(L{N})引用、三維度評分指示 — open sub-module page">
179
195
  <title>judge-prompt-builder — 評分提示詞構建:trace事件摘要含JSONL行號(L{N})引用、三維度評分指示</title>
180
- <rect x="3306.00" y="737.75" width="419.00" height="94.00" rx="10" ry="10" />
181
- <text class="m-node__title" x="3515.50" y="767.75" text-anchor="middle">judge-prompt-builder</text>
182
- <text class="m-node__kind" x="3515.50" y="783.75" text-anchor="middle">Service</text>
183
- <text class="m-node__role" x="3515.50" y="803.75" text-anchor="middle">評分提示詞構建:trace事件摘要含JSONL行號(L{N})引用、三維度評分指示</text>
196
+ <rect x="3370.00" y="1252.50" width="419.00" height="94.00" rx="10" ry="10" />
197
+ <text class="m-node__title" x="3579.50" y="1282.50" text-anchor="middle">judge-prompt-builder</text>
198
+ <text class="m-node__kind" x="3579.50" y="1298.50" text-anchor="middle">Service</text>
199
+ <text class="m-node__role" x="3579.50" y="1318.50" text-anchor="middle">評分提示詞構建:trace事件摘要含JSONL行號(L{N})引用、三維度評分指示</text>
184
200
  </a>
185
201
  <a class="m-node m-node--api" href="features/eval-scorer/judge-api-client.html" data-feature="eval-scorer" data-submodule="judge-api-client" tabindex="0" aria-label="judge-api-client — Judge Model HTTP client with parse fallback — open sub-module page">
186
202
  <title>judge-api-client — Judge Model HTTP client with parse fallback</title>
187
- <rect x="3372.00" y="847.75" width="287.00" height="94.00" rx="10" ry="10" />
188
- <text class="m-node__title" x="3515.50" y="877.75" text-anchor="middle">judge-api-client</text>
189
- <text class="m-node__kind" x="3515.50" y="893.75" text-anchor="middle">API</text>
190
- <text class="m-node__role" x="3515.50" y="913.75" text-anchor="middle">Judge Model HTTP client with parse fallback</text>
203
+ <rect x="3436.00" y="1362.50" width="287.00" height="94.00" rx="10" ry="10" />
204
+ <text class="m-node__title" x="3579.50" y="1392.50" text-anchor="middle">judge-api-client</text>
205
+ <text class="m-node__kind" x="3579.50" y="1408.50" text-anchor="middle">API</text>
206
+ <text class="m-node__role" x="3579.50" y="1428.50" text-anchor="middle">Judge Model HTTP client with parse fallback</text>
191
207
  </a>
192
208
  <a class="m-node m-node--service" href="features/eval-reporter/report-composer.html" data-feature="eval-reporter" data-submodule="report-composer" tabindex="0" aria-label="report-composer — Markdown報告組合與渲染 — open sub-module page">
193
209
  <title>report-composer — Markdown報告組合與渲染</title>
194
- <rect x="4031.00" y="773.25" width="220.00" height="94.00" rx="10" ry="10" />
195
- <text class="m-node__title" x="4141.00" y="803.25" text-anchor="middle">report-composer</text>
196
- <text class="m-node__kind" x="4141.00" y="819.25" text-anchor="middle">Service</text>
197
- <text class="m-node__role" x="4141.00" y="839.25" text-anchor="middle">Markdown報告組合與渲染</text>
210
+ <rect x="4095.00" y="1288.00" width="220.00" height="94.00" rx="10" ry="10" />
211
+ <text class="m-node__title" x="4205.00" y="1318.00" text-anchor="middle">report-composer</text>
212
+ <text class="m-node__kind" x="4205.00" y="1334.00" text-anchor="middle">Service</text>
213
+ <text class="m-node__role" x="4205.00" y="1354.00" text-anchor="middle">Markdown報告組合與渲染</text>
214
+ </a>
215
+ <a class="m-node m-node--service" href="features/cli-dispatch/arg-parser.html" data-feature="cli-dispatch" data-submodule="arg-parser" tabindex="0" aria-label="arg-parser — parseArguments: CLI argument parsing and dispatch — open sub-module page">
216
+ <title>arg-parser — parseArguments: CLI argument parsing and dispatch</title>
217
+ <rect x="1389.00" y="501.00" width="327.00" height="94.00" rx="10" ry="10" />
218
+ <text class="m-node__title" x="1552.50" y="531.00" text-anchor="middle">arg-parser</text>
219
+ <text class="m-node__kind" x="1552.50" y="547.00" text-anchor="middle">Service</text>
220
+ <text class="m-node__role" x="1552.50" y="567.00" text-anchor="middle">parseArguments: CLI argument parsing and dispatch</text>
221
+ </a>
222
+ <a class="m-node m-node--service" href="features/cli-dispatch/help-builder.html" data-feature="cli-dispatch" data-submodule="help-builder" tabindex="0" aria-label="help-builder — buildHelpText family: command help text generation — open sub-module page">
223
+ <title>help-builder — buildHelpText family: command help text generation</title>
224
+ <rect x="1382.00" y="611.00" width="334.00" height="94.00" rx="10" ry="10" />
225
+ <text class="m-node__title" x="1549.00" y="641.00" text-anchor="middle">help-builder</text>
226
+ <text class="m-node__kind" x="1549.00" y="657.00" text-anchor="middle">Service</text>
227
+ <text class="m-node__role" x="1549.00" y="677.00" text-anchor="middle">buildHelpText family: command help text generation</text>
228
+ </a>
229
+ <a class="m-node m-node--service" href="features/cli-dispatch/installer-core.html" data-feature="cli-dispatch" data-submodule="installer-core" tabindex="0" aria-label="installer-core — installLinks/syncToolkitHome/uninstallSkills: installation engine — open sub-module page">
230
+ <title>installer-core — installLinks/syncToolkitHome/uninstallSkills: installation engine</title>
231
+ <rect x="1280.00" y="721.00" width="436.00" height="94.00" rx="10" ry="10" />
232
+ <text class="m-node__title" x="1498.00" y="751.00" text-anchor="middle">installer-core</text>
233
+ <text class="m-node__kind" x="1498.00" y="767.00" text-anchor="middle">Service</text>
234
+ <text class="m-node__role" x="1498.00" y="787.00" text-anchor="middle">installLinks/syncToolkitHome/uninstallSkills: installation engine</text>
235
+ </a>
236
+ <a class="m-node m-node--service" href="features/cli-dispatch/tool-discovery.html" data-feature="cli-dispatch" data-submodule="tool-discovery" tabindex="0" aria-label="tool-discovery — registerAllTools/isKnownToolName: dynamic tool loading — open sub-module page">
237
+ <title>tool-discovery — registerAllTools/isKnownToolName: dynamic tool loading</title>
238
+ <rect x="1352.00" y="391.00" width="364.00" height="94.00" rx="10" ry="10" />
239
+ <text class="m-node__title" x="1534.00" y="421.00" text-anchor="middle">tool-discovery</text>
240
+ <text class="m-node__kind" x="1534.00" y="437.00" text-anchor="middle">Service</text>
241
+ <text class="m-node__role" x="1534.00" y="457.00" text-anchor="middle">registerAllTools/isKnownToolName: dynamic tool loading</text>
242
+ </a>
243
+ <a class="m-node m-node--service" href="features/cli-dispatch/update-checker.html" data-feature="cli-dispatch" data-submodule="update-checker" tabindex="0" aria-label="update-checker — checkForPackageUpdate/execCommand: npm version check — open sub-module page">
244
+ <title>update-checker — checkForPackageUpdate/execCommand: npm version check</title>
245
+ <rect x="1364.00" y="831.00" width="352.00" height="94.00" rx="10" ry="10" />
246
+ <text class="m-node__title" x="1540.00" y="861.00" text-anchor="middle">update-checker</text>
247
+ <text class="m-node__kind" x="1540.00" y="877.00" text-anchor="middle">Service</text>
248
+ <text class="m-node__role" x="1540.00" y="897.00" text-anchor="middle">checkForPackageUpdate/execCommand: npm version check</text>
249
+ </a>
250
+ <a class="m-node m-node--service" href="features/tool-registry/registry-core.html" data-feature="tool-registry" data-submodule="registry-core" tabindex="0" aria-label="registry-core — registerTool/getTool/listTools/runTool: in-memory registry — open sub-module page">
251
+ <title>registry-core — registerTool/getTool/listTools/runTool: in-memory registry</title>
252
+ <rect x="2123.00" y="329.17" width="391.00" height="94.00" rx="10" ry="10" />
253
+ <text class="m-node__title" x="2318.50" y="359.17" text-anchor="middle">registry-core</text>
254
+ <text class="m-node__kind" x="2318.50" y="375.17" text-anchor="middle">Service</text>
255
+ <text class="m-node__role" x="2318.50" y="395.17" text-anchor="middle">registerTool/getTool/listTools/runTool: in-memory registry</text>
256
+ </a>
257
+ <a class="m-node m-node--service" href="features/tool-registry/formatter.html" data-feature="tool-registry" data-submodule="formatter" tabindex="0" aria-label="formatter — formatToolList/buildToolDiscoveryHelp: tool list display — open sub-module page">
258
+ <title>formatter — formatToolList/buildToolDiscoveryHelp: tool list display</title>
259
+ <rect x="2123.00" y="439.17" width="377.00" height="94.00" rx="10" ry="10" />
260
+ <text class="m-node__title" x="2311.50" y="469.17" text-anchor="middle">formatter</text>
261
+ <text class="m-node__kind" x="2311.50" y="485.17" text-anchor="middle">Service</text>
262
+ <text class="m-node__role" x="2311.50" y="505.17" text-anchor="middle">formatToolList/buildToolDiscoveryHelp: tool list display</text>
263
+ </a>
264
+ <a class="m-node m-node--service" href="features/tool-utils/log-utils.html" data-feature="tool-utils" data-submodule="log-utils" tabindex="0" aria-label="log-utils — extractTimestamp/parseCliTimestamp/inWindow: log parsing — open sub-module page">
265
+ <title>log-utils — extractTimestamp/parseCliTimestamp/inWindow: log parsing</title>
266
+ <rect x="1698.00" y="1303.00" width="379.00" height="94.00" rx="10" ry="10" />
267
+ <text class="m-node__title" x="1887.50" y="1333.00" text-anchor="middle">log-utils</text>
268
+ <text class="m-node__kind" x="1887.50" y="1349.00" text-anchor="middle">Service</text>
269
+ <text class="m-node__role" x="1887.50" y="1369.00" text-anchor="middle">extractTimestamp/parseCliTimestamp/inWindow: log parsing</text>
270
+ </a>
271
+ <a class="m-node m-node--service" href="features/tool-utils/skill-discovery.html" data-feature="tool-utils" data-submodule="skill-discovery" tabindex="0" aria-label="skill-discovery — iterSkillDirs: skill directory enumeration — open sub-module page">
272
+ <title>skill-discovery — iterSkillDirs: skill directory enumeration</title>
273
+ <rect x="1698.00" y="1413.00" width="289.00" height="94.00" rx="10" ry="10" />
274
+ <text class="m-node__title" x="1842.50" y="1443.00" text-anchor="middle">skill-discovery</text>
275
+ <text class="m-node__kind" x="1842.50" y="1459.00" text-anchor="middle">Service</text>
276
+ <text class="m-node__role" x="1842.50" y="1479.00" text-anchor="middle">iterSkillDirs: skill directory enumeration</text>
277
+ </a>
278
+ <a class="m-node m-node--service" href="features/terminal-ui/terminal-detection.html" data-feature="terminal-ui" data-submodule="terminal-detection" tabindex="0" aria-label="terminal-detection — isInteractive/supportsColor: TTY and color detection — open sub-module page">
279
+ <title>terminal-detection — isInteractive/supportsColor: TTY and color detection</title>
280
+ <rect x="2096.00" y="876.17" width="349.00" height="94.00" rx="10" ry="10" />
281
+ <text class="m-node__title" x="2270.50" y="906.17" text-anchor="middle">terminal-detection</text>
282
+ <text class="m-node__kind" x="2270.50" y="922.17" text-anchor="middle">Service</text>
283
+ <text class="m-node__role" x="2270.50" y="942.17" text-anchor="middle">isInteractive/supportsColor: TTY and color detection</text>
284
+ </a>
285
+ <a class="m-node m-node--service" href="features/terminal-ui/banner-display.html" data-feature="terminal-ui" data-submodule="banner-display" tabindex="0" aria-label="banner-display — buildBanner/buildWordmark: branding display — open sub-module page">
286
+ <title>banner-display — buildBanner/buildWordmark: branding display</title>
287
+ <rect x="2096.00" y="656.17" width="298.00" height="94.00" rx="10" ry="10" />
288
+ <text class="m-node__title" x="2245.00" y="686.17" text-anchor="middle">banner-display</text>
289
+ <text class="m-node__kind" x="2245.00" y="702.17" text-anchor="middle">Service</text>
290
+ <text class="m-node__role" x="2245.00" y="722.17" text-anchor="middle">buildBanner/buildWordmark: branding display</text>
291
+ </a>
292
+ <a class="m-node m-node--service" href="features/terminal-ui/interactive-prompts.html" data-feature="terminal-ui" data-submodule="interactive-prompts" tabindex="0" aria-label="interactive-prompts — promptForModes/promptYesNo: user prompts — open sub-module page">
293
+ <title>interactive-prompts — promptForModes/promptYesNo: user prompts</title>
294
+ <rect x="2096.00" y="766.17" width="279.00" height="94.00" rx="10" ry="10" />
295
+ <text class="m-node__title" x="2235.50" y="796.17" text-anchor="middle">interactive-prompts</text>
296
+ <text class="m-node__kind" x="2235.50" y="812.17" text-anchor="middle">Service</text>
297
+ <text class="m-node__role" x="2235.50" y="832.17" text-anchor="middle">promptForModes/promptYesNo: user prompts</text>
198
298
  </a>
199
299
  <g class="m-edge m-edge--data-row m-edge--cross" data-edge="cg-e-001">
200
300
  <path d="M409.00,185.40 L419.00,185.40 L419.00,182.77 L663.00,182.77 L663.00,191.67 L681.00,191.67" fill="none" marker-end="url(#arrow-data-row)" />
@@ -209,63 +309,111 @@
209
309
  </text>
210
310
  </g>
211
311
  <g class="m-edge m-edge--call m-edge--cross" data-edge="cg-e-003">
212
- <path d="M429.00,522.20 L439.00,522.20 L439.00,551.00 L2129.00,551.00" fill="none" marker-end="url(#arrow-call)" />
213
- <text class="m-edge__label" x="1951.00" y="569.00" text-anchor="middle">
214
- <tspan x="1951.00">codegraph init --index 與 eval-cli 共用</tspan>
215
- <tspan x="1951.00" dy="14">CLI 工具基礎架構</tspan>
312
+ <path d="M429.00,1179.20 L439.00,1179.20 L439.00,1208.00 L2153.00,1208.00" fill="none" marker-end="url(#arrow-call)" />
313
+ <text class="m-edge__label" x="1975.00" y="1226.00" text-anchor="middle">
314
+ <tspan x="1975.00">codegraph init --index 與 eval-cli 共用</tspan>
315
+ <tspan x="1975.00" dy="14">CLI 工具基礎架構</tspan>
216
316
  </text>
217
317
  </g>
218
318
  <g class="m-edge m-edge--call m-edge--cross" data-edge="eval-cli-exec">
219
- <path d="M2404.00,598.00 L2435.00,598.00 L2435.00,948.25 L2718.00,948.25" fill="none" marker-end="url(#arrow-call)" />
220
- <text class="m-edge__label" x="2541.00" y="966.25" text-anchor="middle">
221
- <tspan x="2541.00">evalHandler 觸發 runSingleTest</tspan>
319
+ <path d="M2428.00,1181.50 L2499.00,1181.50 L2499.00,1334.25 L2782.00,1334.25" fill="none" marker-end="url(#arrow-call)" />
320
+ <text class="m-edge__label" x="2605.00" y="1352.25" text-anchor="middle">
321
+ <tspan x="2605.00">evalHandler 觸發 runSingleTest</tspan>
222
322
  </text>
223
323
  </g>
224
324
  <g class="m-edge m-edge--call m-edge--cross" data-edge="eval-exec-iso">
225
- <path d="M3008.00,969.25 L3039.00,969.25 L3039.00,1111.75 L3280.00,1111.75" fill="none" marker-end="url(#arrow-call)" />
226
- <text class="m-edge__label" x="3124.00" y="1129.75" text-anchor="middle">
227
- <tspan x="3124.00">執行隔離環境中的工具調用</tspan>
325
+ <path d="M3072.00,1355.25 L3103.00,1355.25 L3103.00,1626.50 L3344.00,1626.50" fill="none" marker-end="url(#arrow-call)" />
326
+ <text class="m-edge__label" x="3188.00" y="1644.50" text-anchor="middle">
327
+ <tspan x="3188.00">執行隔離環境中的工具調用</tspan>
228
328
  </text>
229
329
  </g>
230
330
  <g class="m-edge m-edge--data-row m-edge--cross" data-edge="eval-exec-scorer">
231
- <path d="M3008.00,927.25 L3049.00,927.25 L3049.00,784.75 L3306.00,784.75" fill="none" marker-end="url(#arrow-data-row)" />
232
- <text class="m-edge__label" x="3157.00" y="802.75" text-anchor="middle">
233
- <tspan x="3157.00">trace events 送入評分</tspan>
331
+ <path d="M3072.00,1313.25 L3113.00,1313.25 L3113.00,1299.50 L3370.00,1299.50" fill="none" marker-end="url(#arrow-data-row)" />
332
+ <text class="m-edge__label" x="3221.00" y="1317.50" text-anchor="middle">
333
+ <tspan x="3221.00">trace events 送入評分</tspan>
234
334
  </text>
235
335
  </g>
236
336
  <g class="m-edge m-edge--data-row m-edge--cross" data-edge="eval-scorer-reporter">
237
- <path d="M3741.00,792.75 L4015.00,792.75" fill="none" marker-end="url(#arrow-data-row)" />
238
- <text class="m-edge__label" x="3878.00" y="810.75" text-anchor="middle">
239
- <tspan x="3878.00">ScoreResult 送入報告組合</tspan>
337
+ <path d="M3805.00,1307.50 L4079.00,1307.50" fill="none" marker-end="url(#arrow-data-row)" />
338
+ <text class="m-edge__label" x="3942.00" y="1325.50" text-anchor="middle">
339
+ <tspan x="3942.00">ScoreResult 送入報告組合</tspan>
240
340
  </text>
241
341
  </g>
242
342
  <g class="m-edge m-edge--data-row m-edge--cross" data-edge="eval-exec-optimizer">
243
- <path d="M3024.00,917.25 L3039.00,917.25 L3039.00,430.25 L3243.00,430.25" fill="none" marker-end="url(#arrow-data-row)" />
244
- <text class="m-edge__label" x="3130.00" y="448.25" text-anchor="middle">
245
- <tspan x="3130.00">執行結果觸發優化</tspan>
343
+ <path d="M3088.00,1303.25 L3103.00,1303.25 L3103.00,945.00 L3279.00,945.00" fill="none" marker-end="url(#arrow-data-row)" />
344
+ <text class="m-edge__label" x="3166.00" y="963.00" text-anchor="middle">
345
+ <tspan x="3166.00">執行結果觸發優化</tspan>
246
346
  </text>
247
347
  </g>
248
348
  <g class="m-edge m-edge--call m-edge--cross" data-edge="eval-cli-ci">
249
- <path d="M2420.00,588.00 L2475.00,588.00 L2475.00,522.75 L2675.00,522.75" fill="none" marker-end="url(#arrow-call)" />
250
- <text class="m-edge__label" x="2550.00" y="512.75" text-anchor="middle">
251
- <tspan x="2550.00">CI 模式下觸發 PR 回報</tspan>
349
+ <path d="M2444.00,1171.50 L2511.00,1171.50 L2511.00,1018.75 L2711.00,1018.75" fill="none" marker-end="url(#arrow-call)" />
350
+ <text class="m-edge__label" x="2586.00" y="1008.75" text-anchor="middle">
351
+ <tspan x="2586.00">CI 模式下觸發 PR 回報</tspan>
352
+ </text>
353
+ </g>
354
+ <g class="m-edge m-edge--call m-edge--cross" data-edge="cli-edge-001">
355
+ <path d="M1716.00,548.00 L1894.00,548.00 L1894.00,394.17 L2052.00,394.17 L2052.00,391.83 L2123.00,391.83" fill="none" marker-end="url(#arrow-call)" />
356
+ <text class="m-edge__label" x="1973.00" y="412.17" text-anchor="middle">
357
+ <tspan x="1973.00">run() calls runTool()</tspan>
358
+ </text>
359
+ </g>
360
+ <g class="m-edge m-edge--call m-edge--cross" data-edge="cli-edge-002">
361
+ <path d="M1716.00,744.50 L1767.00,744.50 L1767.00,724.50 L2001.00,724.50 L2001.00,718.83 L2096.00,718.83" fill="none" marker-end="url(#arrow-call)" />
362
+ <text class="m-edge__label" x="1904.00" y="742.50" text-anchor="middle">
363
+ <tspan x="1904.00">install summary uses banner</tspan>
364
+ </text>
365
+ </g>
366
+ <g class="m-edge m-edge--call m-edge--cross" data-edge="cli-edge-003">
367
+ <path d="M1716.00,768.00 L1767.00,768.00 L1767.00,813.17 L2096.00,813.17" fill="none" marker-end="url(#arrow-call)" />
368
+ <text class="m-edge__label" x="1907.00" y="831.17" text-anchor="middle">
369
+ <tspan x="1907.00">install prompts use inquirer</tspan>
370
+ </text>
371
+ </g>
372
+ <g class="m-edge m-edge--call m-edge--cross" data-edge="cli-edge-004">
373
+ <path d="M1716.00,673.67 L1767.00,673.67 L1767.00,676.00 L1995.00,676.00 L1995.00,687.50 L2096.00,687.50" fill="none" marker-end="url(#arrow-call)" />
374
+ <text class="m-edge__label" x="1901.00" y="694.00" text-anchor="middle">
375
+ <tspan x="1901.00">help text uses buildBanner</tspan>
376
+ </text>
377
+ </g>
378
+ <g class="m-edge m-edge--call m-edge--cross" data-edge="cli-edge-005">
379
+ <path d="M1716.00,642.33 L1767.00,642.33 L1767.00,568.83 L2013.00,568.83 L2013.00,486.17 L2123.00,486.17" fill="none" marker-end="url(#arrow-call)" />
380
+ <text class="m-edge__label" x="1910.00" y="586.83" text-anchor="middle">
381
+ <tspan x="1910.00">help text uses formatToolList</tspan>
382
+ </text>
383
+ </g>
384
+ <g class="m-edge m-edge--call m-edge--cross" data-edge="cli-edge-006">
385
+ <path d="M1716.00,438.00 L1807.00,438.00 L1807.00,358.17 L2052.00,358.17 L2052.00,360.50 L2123.00,360.50" fill="none" marker-end="url(#arrow-call)" />
386
+ <text class="m-edge__label" x="1929.50" y="376.17" text-anchor="middle">
387
+ <tspan x="1929.50">registerAllTools calls registerTool</tspan>
388
+ </text>
389
+ </g>
390
+ <g class="m-edge m-edge--call m-edge--cross" data-edge="cli-edge-007">
391
+ <path d="M1716.00,878.00 L1807.00,878.00 L1807.00,905.17 L2025.00,905.17 L2025.00,907.50 L2096.00,907.50" fill="none" marker-end="url(#arrow-call)" />
392
+ <text class="m-edge__label" x="1916.00" y="923.17" text-anchor="middle">
393
+ <tspan x="1916.00">update check uses isInteractive</tspan>
394
+ </text>
395
+ </g>
396
+ <g class="m-edge m-edge--call m-edge--cross" data-edge="cli-edge-008">
397
+ <path d="M1716.00,791.50 L1726.00,791.50 L1726.00,888.00 L1797.00,888.00 L1797.00,941.17 L2025.00,941.17 L2025.00,938.83 L2096.00,938.83" fill="none" marker-end="url(#arrow-call)" />
398
+ <text class="m-edge__label" x="1924.00" y="959.17" text-anchor="middle">
399
+ <tspan x="1924.00">installer uses supportsColor</tspan>
252
400
  </text>
253
401
  </g>
254
402
  <g class="m-edge m-edge--data-row" data-edge="cg-fe-001">
255
- <path d="M429.00,484.60 L439.00,484.60 L439.00,478.33 L701.00,478.33" fill="none" marker-end="url(#arrow-data-row)" />
256
- <text class="m-edge__label" x="565.00" y="468.33" text-anchor="middle">
403
+ <path d="M429.00,1141.60 L439.00,1141.60 L439.00,1135.33 L701.00,1135.33" fill="none" marker-end="url(#arrow-data-row)" />
404
+ <text class="m-edge__label" x="565.00" y="1125.33" text-anchor="middle">
257
405
  <tspan x="565.00">survey/list-apis 依賴已索引的資料庫</tspan>
258
406
  </text>
259
407
  </g>
260
408
  <g class="m-edge m-edge--data-row" data-edge="cg-fe-002">
261
- <path d="M1100.00,478.33 L1334.00,478.33 L1334.00,469.43 L1352.00,469.43" fill="none" marker-end="url(#arrow-data-row)" />
262
- <text class="m-edge__label" x="1226.00" y="468.33" text-anchor="middle">
409
+ <path d="M1100.00,1135.33 L1334.00,1135.33 L1334.00,1126.43 L1352.00,1126.43" fill="none" marker-end="url(#arrow-data-row)" />
410
+ <text class="m-edge__label" x="1226.00" y="1125.33" text-anchor="middle">
263
411
  <tspan x="1226.00">verify 使用 discovery 的搜尋能力</tspan>
264
412
  </text>
265
413
  </g>
266
414
  <g class="m-edge m-edge--data-row" data-edge="cg-fe-003">
267
- <path d="M1352.00,445.93 L1334.00,445.93 L1334.00,430.00 L439.00,430.00 L439.00,465.80 L429.00,465.80" fill="none" marker-end="url(#arrow-data-row)" />
268
- <text class="m-edge__label" x="900.50" y="406.00" text-anchor="middle">
415
+ <path d="M1352.00,1102.93 L1334.00,1102.93 L1334.00,1087.00 L439.00,1087.00 L439.00,1122.80 L429.00,1122.80" fill="none" marker-end="url(#arrow-data-row)" />
416
+ <text class="m-edge__label" x="900.50" y="1063.00" text-anchor="middle">
269
417
  <tspan x="900.50">apply 非索引操作,不需 lifecycle — 但</tspan>
270
418
  <tspan x="900.50" dy="14">template 可搭配 list-apis</tspan>
271
419
  </text>
@@ -427,6 +575,102 @@
427
575
  </a>
428
576
  <p class="atlas-submodule-index__role">Markdown報告組合與渲染</p>
429
577
  </li>
578
+ <li class="atlas-submodule-index__item">
579
+ <a href="features/cli-dispatch/arg-parser.html">
580
+ <span class="atlas-submodule-index__feature">CLI Dispatch and Install Engine</span>
581
+ <span class="atlas-submodule-index__sub">arg-parser</span>
582
+ <span class="atlas-submodule-index__kind">Service</span>
583
+ </a>
584
+ <p class="atlas-submodule-index__role">parseArguments: CLI argument parsing and dispatch</p>
585
+ </li>
586
+ <li class="atlas-submodule-index__item">
587
+ <a href="features/cli-dispatch/help-builder.html">
588
+ <span class="atlas-submodule-index__feature">CLI Dispatch and Install Engine</span>
589
+ <span class="atlas-submodule-index__sub">help-builder</span>
590
+ <span class="atlas-submodule-index__kind">Service</span>
591
+ </a>
592
+ <p class="atlas-submodule-index__role">buildHelpText family: command help text generation</p>
593
+ </li>
594
+ <li class="atlas-submodule-index__item">
595
+ <a href="features/cli-dispatch/installer-core.html">
596
+ <span class="atlas-submodule-index__feature">CLI Dispatch and Install Engine</span>
597
+ <span class="atlas-submodule-index__sub">installer-core</span>
598
+ <span class="atlas-submodule-index__kind">Service</span>
599
+ </a>
600
+ <p class="atlas-submodule-index__role">installLinks/syncToolkitHome/uninstallSkills: installation engine</p>
601
+ </li>
602
+ <li class="atlas-submodule-index__item">
603
+ <a href="features/cli-dispatch/tool-discovery.html">
604
+ <span class="atlas-submodule-index__feature">CLI Dispatch and Install Engine</span>
605
+ <span class="atlas-submodule-index__sub">tool-discovery</span>
606
+ <span class="atlas-submodule-index__kind">Service</span>
607
+ </a>
608
+ <p class="atlas-submodule-index__role">registerAllTools/isKnownToolName: dynamic tool loading</p>
609
+ </li>
610
+ <li class="atlas-submodule-index__item">
611
+ <a href="features/cli-dispatch/update-checker.html">
612
+ <span class="atlas-submodule-index__feature">CLI Dispatch and Install Engine</span>
613
+ <span class="atlas-submodule-index__sub">update-checker</span>
614
+ <span class="atlas-submodule-index__kind">Service</span>
615
+ </a>
616
+ <p class="atlas-submodule-index__role">checkForPackageUpdate/execCommand: npm version check</p>
617
+ </li>
618
+ <li class="atlas-submodule-index__item">
619
+ <a href="features/tool-registry/registry-core.html">
620
+ <span class="atlas-submodule-index__feature">Tool Registry</span>
621
+ <span class="atlas-submodule-index__sub">registry-core</span>
622
+ <span class="atlas-submodule-index__kind">Service</span>
623
+ </a>
624
+ <p class="atlas-submodule-index__role">registerTool/getTool/listTools/runTool: in-memory registry</p>
625
+ </li>
626
+ <li class="atlas-submodule-index__item">
627
+ <a href="features/tool-registry/formatter.html">
628
+ <span class="atlas-submodule-index__feature">Tool Registry</span>
629
+ <span class="atlas-submodule-index__sub">formatter</span>
630
+ <span class="atlas-submodule-index__kind">Service</span>
631
+ </a>
632
+ <p class="atlas-submodule-index__role">formatToolList/buildToolDiscoveryHelp: tool list display</p>
633
+ </li>
634
+ <li class="atlas-submodule-index__item">
635
+ <a href="features/tool-utils/log-utils.html">
636
+ <span class="atlas-submodule-index__feature">Tool Utilities</span>
637
+ <span class="atlas-submodule-index__sub">log-utils</span>
638
+ <span class="atlas-submodule-index__kind">Service</span>
639
+ </a>
640
+ <p class="atlas-submodule-index__role">extractTimestamp/parseCliTimestamp/inWindow: log parsing</p>
641
+ </li>
642
+ <li class="atlas-submodule-index__item">
643
+ <a href="features/tool-utils/skill-discovery.html">
644
+ <span class="atlas-submodule-index__feature">Tool Utilities</span>
645
+ <span class="atlas-submodule-index__sub">skill-discovery</span>
646
+ <span class="atlas-submodule-index__kind">Service</span>
647
+ </a>
648
+ <p class="atlas-submodule-index__role">iterSkillDirs: skill directory enumeration</p>
649
+ </li>
650
+ <li class="atlas-submodule-index__item">
651
+ <a href="features/terminal-ui/terminal-detection.html">
652
+ <span class="atlas-submodule-index__feature">Terminal UI</span>
653
+ <span class="atlas-submodule-index__sub">terminal-detection</span>
654
+ <span class="atlas-submodule-index__kind">Service</span>
655
+ </a>
656
+ <p class="atlas-submodule-index__role">isInteractive/supportsColor: TTY and color detection</p>
657
+ </li>
658
+ <li class="atlas-submodule-index__item">
659
+ <a href="features/terminal-ui/banner-display.html">
660
+ <span class="atlas-submodule-index__feature">Terminal UI</span>
661
+ <span class="atlas-submodule-index__sub">banner-display</span>
662
+ <span class="atlas-submodule-index__kind">Service</span>
663
+ </a>
664
+ <p class="atlas-submodule-index__role">buildBanner/buildWordmark: branding display</p>
665
+ </li>
666
+ <li class="atlas-submodule-index__item">
667
+ <a href="features/terminal-ui/interactive-prompts.html">
668
+ <span class="atlas-submodule-index__feature">Terminal UI</span>
669
+ <span class="atlas-submodule-index__sub">interactive-prompts</span>
670
+ <span class="atlas-submodule-index__kind">Service</span>
671
+ </a>
672
+ <p class="atlas-submodule-index__role">promptForModes/promptYesNo: user prompts</p>
673
+ </li>
430
674
  </ul>
431
675
  </section>
432
676
  </main>