@mison/ag-kit-cn 3.0.0-beta.0 → 3.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 (254) hide show
  1. package/CHANGELOG.md +13 -11
  2. package/README.md +70 -35
  3. package/bin/adapters/codex.js +105 -372
  4. package/bin/adapters/gemini.js +133 -13
  5. package/bin/ag-kit.js +557 -155
  6. package/bin/core/builder.js +1 -1
  7. package/bin/core/generator.js +4 -4
  8. package/bin/core/resource-loader.js +2 -2
  9. package/bin/interactive.js +36 -81
  10. package/bin/utils/manifest.js +3 -3
  11. package/bin/utils.js +8 -3
  12. package/docs/PLAN.md +39 -0
  13. package/docs/TECH.md +136 -0
  14. package/package.json +11 -10
  15. package/scripts/ci-verify.js +95 -0
  16. package/scripts/clean.js +123 -0
  17. package/scripts/health-check.js +132 -0
  18. package/scripts/health-check.sh +6 -0
  19. package/tests/atomic-writer.test.js +47 -0
  20. package/tests/clean-script.test.js +77 -0
  21. package/tests/cli-smoke.test.js +479 -0
  22. package/tests/codex-adapter.test.js +132 -0
  23. package/tests/doctor.test.js +94 -0
  24. package/tests/gemini-adapter.test.js +30 -0
  25. package/tests/generator.test.js +48 -0
  26. package/tests/git-helper.test.js +53 -0
  27. package/tests/global-sync.test.js +133 -0
  28. package/tests/health-check-script.test.js +30 -0
  29. package/tests/managed-block.test.js +41 -0
  30. package/tests/manifest.test.js +97 -0
  31. package/tests/package-tarball.test.js +27 -0
  32. package/tests/phase-c.test.js +107 -0
  33. package/tests/standards-compliance.test.js +266 -0
  34. package/tests/transformer.test.js +74 -0
  35. package/docs/codex-rules-template.md +0 -36
  36. package/docs/mapping-spec.md +0 -62
  37. package/docs/multi-target-adapter.md +0 -46
  38. package/docs/official/README.md +0 -45
  39. package/docs/official/antigravity/agent-modes-settings.md +0 -64
  40. package/docs/official/antigravity/rules-workflows.md +0 -96
  41. package/docs/official/antigravity/skills.md +0 -147
  42. package/docs/official/codex/agents-md.md +0 -119
  43. package/docs/official/codex/config-advanced.md +0 -358
  44. package/docs/official/codex/config-basic.md +0 -141
  45. package/docs/official/codex/config-reference.md +0 -223
  46. package/docs/official/codex/config-sample.md +0 -216
  47. package/docs/official/codex/mcp.md +0 -107
  48. package/docs/official/codex/rules.md +0 -79
  49. package/docs/official/codex/skills.md +0 -114
  50. package/docs/official/mechanism-compat-audit-2026-03-04.md +0 -36
  51. package/docs/official/rules-baseline.md +0 -67
  52. package/docs/official/sources-index.md +0 -79
  53. package/docs/operations.md +0 -75
  54. package/docs/terminology-style-guide.md +0 -69
  55. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/charts.csv +0 -0
  56. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/colors.csv +0 -0
  57. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/icons.csv +0 -0
  58. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/landing.csv +0 -0
  59. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/products.csv +0 -0
  60. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/prompts.csv +0 -0
  61. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/react-performance.csv +0 -0
  62. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/flutter.csv +0 -0
  63. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -0
  64. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -0
  65. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +0 -0
  66. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -0
  67. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -0
  68. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/react-native.csv +0 -0
  69. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/react.csv +0 -0
  70. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +0 -0
  71. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/svelte.csv +0 -0
  72. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +0 -0
  73. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/vue.csv +0 -0
  74. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/styles.csv +0 -0
  75. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/typography.csv +0 -0
  76. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/ui-reasoning.csv +0 -0
  77. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/ux-guidelines.csv +0 -0
  78. /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/web-interface.csv +0 -0
  79. /package/{.agent → .agents}/.shared/ui-ux-pro-max/scripts/core.py +0 -0
  80. /package/{.agent → .agents}/.shared/ui-ux-pro-max/scripts/design_system.py +0 -0
  81. /package/{.agent → .agents}/.shared/ui-ux-pro-max/scripts/search.py +0 -0
  82. /package/{.agent → .agents}/ARCHITECTURE.md +0 -0
  83. /package/{.agent → .agents}/agents/backend-specialist.md +0 -0
  84. /package/{.agent → .agents}/agents/code-archaeologist.md +0 -0
  85. /package/{.agent → .agents}/agents/database-architect.md +0 -0
  86. /package/{.agent → .agents}/agents/debugger.md +0 -0
  87. /package/{.agent → .agents}/agents/devops-engineer.md +0 -0
  88. /package/{.agent → .agents}/agents/documentation-writer.md +0 -0
  89. /package/{.agent → .agents}/agents/explorer-agent.md +0 -0
  90. /package/{.agent → .agents}/agents/frontend-specialist.md +0 -0
  91. /package/{.agent → .agents}/agents/game-developer.md +0 -0
  92. /package/{.agent → .agents}/agents/mobile-developer.md +0 -0
  93. /package/{.agent → .agents}/agents/orchestrator.md +0 -0
  94. /package/{.agent → .agents}/agents/penetration-tester.md +0 -0
  95. /package/{.agent → .agents}/agents/performance-optimizer.md +0 -0
  96. /package/{.agent → .agents}/agents/product-manager.md +0 -0
  97. /package/{.agent → .agents}/agents/product-owner.md +0 -0
  98. /package/{.agent → .agents}/agents/project-planner.md +0 -0
  99. /package/{.agent → .agents}/agents/qa-automation-engineer.md +0 -0
  100. /package/{.agent → .agents}/agents/security-auditor.md +0 -0
  101. /package/{.agent → .agents}/agents/seo-specialist.md +0 -0
  102. /package/{.agent → .agents}/agents/test-engineer.md +0 -0
  103. /package/{.agent → .agents}/mcp_config.json +0 -0
  104. /package/{.agent → .agents}/rules/GEMINI.md +0 -0
  105. /package/{.agent → .agents}/scripts/auto_preview.py +0 -0
  106. /package/{.agent → .agents}/scripts/checklist.py +0 -0
  107. /package/{.agent → .agents}/scripts/session_manager.py +0 -0
  108. /package/{.agent → .agents}/scripts/verify_all.py +0 -0
  109. /package/{.agent → .agents}/skills/api-patterns/SKILL.md +0 -0
  110. /package/{.agent → .agents}/skills/api-patterns/api-style.md +0 -0
  111. /package/{.agent → .agents}/skills/api-patterns/auth.md +0 -0
  112. /package/{.agent → .agents}/skills/api-patterns/documentation.md +0 -0
  113. /package/{.agent → .agents}/skills/api-patterns/graphql.md +0 -0
  114. /package/{.agent → .agents}/skills/api-patterns/rate-limiting.md +0 -0
  115. /package/{.agent → .agents}/skills/api-patterns/response.md +0 -0
  116. /package/{.agent → .agents}/skills/api-patterns/rest.md +0 -0
  117. /package/{.agent → .agents}/skills/api-patterns/scripts/api_validator.py +0 -0
  118. /package/{.agent → .agents}/skills/api-patterns/security-testing.md +0 -0
  119. /package/{.agent → .agents}/skills/api-patterns/trpc.md +0 -0
  120. /package/{.agent → .agents}/skills/api-patterns/versioning.md +0 -0
  121. /package/{.agent → .agents}/skills/app-builder/SKILL.md +0 -0
  122. /package/{.agent → .agents}/skills/app-builder/agent-coordination.md +0 -0
  123. /package/{.agent → .agents}/skills/app-builder/feature-building.md +0 -0
  124. /package/{.agent → .agents}/skills/app-builder/project-detection.md +0 -0
  125. /package/{.agent → .agents}/skills/app-builder/scaffolding.md +0 -0
  126. /package/{.agent → .agents}/skills/app-builder/tech-stack.md +0 -0
  127. /package/{.agent → .agents}/skills/app-builder/templates/SKILL.md +0 -0
  128. /package/{.agent → .agents}/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -0
  129. /package/{.agent → .agents}/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -0
  130. /package/{.agent → .agents}/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -0
  131. /package/{.agent → .agents}/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -0
  132. /package/{.agent → .agents}/skills/app-builder/templates/express-api/TEMPLATE.md +0 -0
  133. /package/{.agent → .agents}/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -0
  134. /package/{.agent → .agents}/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -0
  135. /package/{.agent → .agents}/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -0
  136. /package/{.agent → .agents}/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -0
  137. /package/{.agent → .agents}/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -0
  138. /package/{.agent → .agents}/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -0
  139. /package/{.agent → .agents}/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -0
  140. /package/{.agent → .agents}/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -0
  141. /package/{.agent → .agents}/skills/architecture/SKILL.md +0 -0
  142. /package/{.agent → .agents}/skills/architecture/context-discovery.md +0 -0
  143. /package/{.agent → .agents}/skills/architecture/examples.md +0 -0
  144. /package/{.agent → .agents}/skills/architecture/pattern-selection.md +0 -0
  145. /package/{.agent → .agents}/skills/architecture/patterns-reference.md +0 -0
  146. /package/{.agent → .agents}/skills/architecture/trade-off-analysis.md +0 -0
  147. /package/{.agent → .agents}/skills/bash-linux/SKILL.md +0 -0
  148. /package/{.agent → .agents}/skills/behavioral-modes/SKILL.md +0 -0
  149. /package/{.agent → .agents}/skills/brainstorming/SKILL.md +0 -0
  150. /package/{.agent → .agents}/skills/brainstorming/dynamic-questioning.md +0 -0
  151. /package/{.agent → .agents}/skills/clean-code/SKILL.md +0 -0
  152. /package/{.agent → .agents}/skills/code-review-checklist/SKILL.md +0 -0
  153. /package/{.agent → .agents}/skills/database-design/SKILL.md +0 -0
  154. /package/{.agent → .agents}/skills/database-design/database-selection.md +0 -0
  155. /package/{.agent → .agents}/skills/database-design/indexing.md +0 -0
  156. /package/{.agent → .agents}/skills/database-design/migrations.md +0 -0
  157. /package/{.agent → .agents}/skills/database-design/optimization.md +0 -0
  158. /package/{.agent → .agents}/skills/database-design/orm-selection.md +0 -0
  159. /package/{.agent → .agents}/skills/database-design/schema-design.md +0 -0
  160. /package/{.agent → .agents}/skills/database-design/scripts/schema_validator.py +0 -0
  161. /package/{.agent → .agents}/skills/deployment-procedures/SKILL.md +0 -0
  162. /package/{.agent → .agents}/skills/doc.md +0 -0
  163. /package/{.agent → .agents}/skills/documentation-templates/SKILL.md +0 -0
  164. /package/{.agent → .agents}/skills/frontend-design/SKILL.md +0 -0
  165. /package/{.agent → .agents}/skills/frontend-design/animation-guide.md +0 -0
  166. /package/{.agent → .agents}/skills/frontend-design/color-system.md +0 -0
  167. /package/{.agent → .agents}/skills/frontend-design/decision-trees.md +0 -0
  168. /package/{.agent → .agents}/skills/frontend-design/motion-graphics.md +0 -0
  169. /package/{.agent → .agents}/skills/frontend-design/scripts/accessibility_checker.py +0 -0
  170. /package/{.agent → .agents}/skills/frontend-design/scripts/ux_audit.py +0 -0
  171. /package/{.agent → .agents}/skills/frontend-design/typography-system.md +0 -0
  172. /package/{.agent → .agents}/skills/frontend-design/ux-psychology.md +0 -0
  173. /package/{.agent → .agents}/skills/frontend-design/visual-effects.md +0 -0
  174. /package/{.agent → .agents}/skills/game-development/2d-games/SKILL.md +0 -0
  175. /package/{.agent → .agents}/skills/game-development/3d-games/SKILL.md +0 -0
  176. /package/{.agent → .agents}/skills/game-development/SKILL.md +0 -0
  177. /package/{.agent → .agents}/skills/game-development/game-art/SKILL.md +0 -0
  178. /package/{.agent → .agents}/skills/game-development/game-audio/SKILL.md +0 -0
  179. /package/{.agent → .agents}/skills/game-development/game-design/SKILL.md +0 -0
  180. /package/{.agent → .agents}/skills/game-development/mobile-games/SKILL.md +0 -0
  181. /package/{.agent → .agents}/skills/game-development/multiplayer/SKILL.md +0 -0
  182. /package/{.agent → .agents}/skills/game-development/pc-games/SKILL.md +0 -0
  183. /package/{.agent → .agents}/skills/game-development/vr-ar/SKILL.md +0 -0
  184. /package/{.agent → .agents}/skills/game-development/web-games/SKILL.md +0 -0
  185. /package/{.agent → .agents}/skills/geo-fundamentals/SKILL.md +0 -0
  186. /package/{.agent → .agents}/skills/geo-fundamentals/scripts/geo_checker.py +0 -0
  187. /package/{.agent → .agents}/skills/i18n-localization/SKILL.md +0 -0
  188. /package/{.agent → .agents}/skills/i18n-localization/scripts/i18n_checker.py +0 -0
  189. /package/{.agent → .agents}/skills/intelligent-routing/SKILL.md +0 -0
  190. /package/{.agent → .agents}/skills/lint-and-validate/SKILL.md +0 -0
  191. /package/{.agent → .agents}/skills/lint-and-validate/scripts/lint_runner.py +0 -0
  192. /package/{.agent → .agents}/skills/lint-and-validate/scripts/type_coverage.py +0 -0
  193. /package/{.agent → .agents}/skills/mcp-builder/SKILL.md +0 -0
  194. /package/{.agent → .agents}/skills/mobile-design/SKILL.md +0 -0
  195. /package/{.agent → .agents}/skills/mobile-design/decision-trees.md +0 -0
  196. /package/{.agent → .agents}/skills/mobile-design/mobile-backend.md +0 -0
  197. /package/{.agent → .agents}/skills/mobile-design/mobile-color-system.md +0 -0
  198. /package/{.agent → .agents}/skills/mobile-design/mobile-debugging.md +0 -0
  199. /package/{.agent → .agents}/skills/mobile-design/mobile-design-thinking.md +0 -0
  200. /package/{.agent → .agents}/skills/mobile-design/mobile-navigation.md +0 -0
  201. /package/{.agent → .agents}/skills/mobile-design/mobile-performance.md +0 -0
  202. /package/{.agent → .agents}/skills/mobile-design/mobile-testing.md +0 -0
  203. /package/{.agent → .agents}/skills/mobile-design/mobile-typography.md +0 -0
  204. /package/{.agent → .agents}/skills/mobile-design/platform-android.md +0 -0
  205. /package/{.agent → .agents}/skills/mobile-design/platform-ios.md +0 -0
  206. /package/{.agent → .agents}/skills/mobile-design/scripts/mobile_audit.py +0 -0
  207. /package/{.agent → .agents}/skills/mobile-design/touch-psychology.md +0 -0
  208. /package/{.agent → .agents}/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -0
  209. /package/{.agent → .agents}/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -0
  210. /package/{.agent → .agents}/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -0
  211. /package/{.agent → .agents}/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -0
  212. /package/{.agent → .agents}/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -0
  213. /package/{.agent → .agents}/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -0
  214. /package/{.agent → .agents}/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -0
  215. /package/{.agent → .agents}/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -0
  216. /package/{.agent → .agents}/skills/nextjs-react-expert/SKILL.md +0 -0
  217. /package/{.agent → .agents}/skills/nextjs-react-expert/scripts/convert_rules.py +0 -0
  218. /package/{.agent → .agents}/skills/nextjs-react-expert/scripts/react_performance_checker.py +0 -0
  219. /package/{.agent → .agents}/skills/nodejs-best-practices/SKILL.md +0 -0
  220. /package/{.agent → .agents}/skills/parallel-agents/SKILL.md +0 -0
  221. /package/{.agent → .agents}/skills/performance-profiling/SKILL.md +0 -0
  222. /package/{.agent → .agents}/skills/performance-profiling/scripts/lighthouse_audit.py +0 -0
  223. /package/{.agent → .agents}/skills/plan-writing/SKILL.md +0 -0
  224. /package/{.agent → .agents}/skills/powershell-windows/SKILL.md +0 -0
  225. /package/{.agent → .agents}/skills/python-patterns/SKILL.md +0 -0
  226. /package/{.agent → .agents}/skills/red-team-tactics/SKILL.md +0 -0
  227. /package/{.agent → .agents}/skills/refactoring-patterns/SKILL.md +0 -0
  228. /package/{.agent → .agents}/skills/rust-pro/SKILL.md +0 -0
  229. /package/{.agent → .agents}/skills/seo-fundamentals/SKILL.md +0 -0
  230. /package/{.agent → .agents}/skills/seo-fundamentals/scripts/seo_checker.py +0 -0
  231. /package/{.agent → .agents}/skills/server-management/SKILL.md +0 -0
  232. /package/{.agent → .agents}/skills/systematic-debugging/SKILL.md +0 -0
  233. /package/{.agent → .agents}/skills/tailwind-patterns/SKILL.md +0 -0
  234. /package/{.agent → .agents}/skills/tdd-workflow/SKILL.md +0 -0
  235. /package/{.agent → .agents}/skills/testing-patterns/SKILL.md +0 -0
  236. /package/{.agent → .agents}/skills/testing-patterns/scripts/test_runner.py +0 -0
  237. /package/{.agent → .agents}/skills/vulnerability-scanner/SKILL.md +0 -0
  238. /package/{.agent → .agents}/skills/vulnerability-scanner/checklists.md +0 -0
  239. /package/{.agent → .agents}/skills/vulnerability-scanner/scripts/security_scan.py +0 -0
  240. /package/{.agent → .agents}/skills/web-design-guidelines/SKILL.md +0 -0
  241. /package/{.agent → .agents}/skills/webapp-testing/SKILL.md +0 -0
  242. /package/{.agent → .agents}/skills/webapp-testing/scripts/playwright_runner.py +0 -0
  243. /package/{.agent → .agents}/workflows/brainstorm.md +0 -0
  244. /package/{.agent → .agents}/workflows/create.md +0 -0
  245. /package/{.agent → .agents}/workflows/debug.md +0 -0
  246. /package/{.agent → .agents}/workflows/deploy.md +0 -0
  247. /package/{.agent → .agents}/workflows/enhance.md +0 -0
  248. /package/{.agent → .agents}/workflows/orchestrate.md +0 -0
  249. /package/{.agent → .agents}/workflows/plan.md +0 -0
  250. /package/{.agent → .agents}/workflows/preview.md +0 -0
  251. /package/{.agent → .agents}/workflows/restore-localize-compat.md +0 -0
  252. /package/{.agent → .agents}/workflows/status.md +0 -0
  253. /package/{.agent → .agents}/workflows/test.md +0 -0
  254. /package/{.agent → .agents}/workflows/ui-ux-pro-max.md +0 -0
@@ -1,36 +1,156 @@
1
+ const fs = require("fs");
2
+ const os = require("os");
3
+ const path = require("path");
1
4
  const BaseAdapter = require("./base");
2
- const CodexAdapter = require("./codex");
5
+ const { cloneBranchAgentDir } = require("../utils");
6
+ const GitHelper = require("../utils/git-helper");
3
7
 
4
8
  class GeminiAdapter extends BaseAdapter {
5
9
  get targetName() {
6
10
  return "gemini";
7
11
  }
8
12
 
9
- _delegate() {
10
- return new CodexAdapter(this.workspaceRoot, {
11
- ...this.options,
12
- compatibilityEntry: "gemini",
13
- });
13
+ getInstalledVersion() {
14
+ const agentDir = path.join(this.workspaceRoot, ".agent");
15
+ if (fs.existsSync(agentDir)) {
16
+ return null;
17
+ }
18
+ return null;
14
19
  }
15
20
 
16
- getInstalledVersion() {
17
- return this._delegate().getInstalledVersion();
21
+ _copyDir(src, dest) {
22
+ fs.mkdirSync(dest, { recursive: true });
23
+ const entries = fs.readdirSync(src, { withFileTypes: true });
24
+
25
+ for (const entry of entries) {
26
+ const srcPath = path.join(src, entry.name);
27
+ const destPath = path.join(dest, entry.name);
28
+
29
+ if (entry.isDirectory()) {
30
+ this._copyDir(srcPath, destPath);
31
+ } else {
32
+ fs.copyFileSync(srcPath, destPath);
33
+ }
34
+ }
35
+ }
36
+
37
+ // Remove old _removeAgentIgnoreRules implementation
38
+ _removeAgentIgnoreRules() {
39
+ // Deprecated, using GitHelper
40
+ return { fileExists: false, removedCount: 0 };
41
+ }
42
+
43
+ _samePath(a, b) {
44
+ const left = path.resolve(a);
45
+ const right = path.resolve(b);
46
+ if (process.platform === "win32") {
47
+ return left.toLowerCase() === right.toLowerCase();
48
+ }
49
+ return left === right;
18
50
  }
19
51
 
20
52
  install(sourceDir) {
21
- this._delegate().install(sourceDir);
53
+ let installSource = sourceDir;
54
+ let cleanup = null;
55
+
56
+ if (this.options.branch) {
57
+ const remote = cloneBranchAgentDir(this.options.branch, {
58
+ quiet: this.options.quiet,
59
+ logger: this.log.bind(this)
60
+ });
61
+ installSource = remote.agentDir;
62
+ cleanup = remote.cleanup;
63
+ }
64
+
65
+ try {
66
+ const targetDir = path.join(this.workspaceRoot, ".agent");
67
+
68
+ if (!fs.existsSync(installSource)) {
69
+ throw new Error(`未找到模板目录: ${installSource}`);
70
+ }
71
+
72
+ if (this._samePath(installSource, targetDir) && !this.options.dryRun) {
73
+ const tempSource = fs.mkdtempSync(path.join(os.tmpdir(), "ag-kit-gemini-src-"));
74
+ this._copyDir(installSource, tempSource);
75
+ const oldCleanup = cleanup;
76
+ cleanup = () => {
77
+ if (oldCleanup) oldCleanup();
78
+ fs.rmSync(tempSource, { recursive: true, force: true });
79
+ };
80
+ installSource = tempSource;
81
+ this.log("ℹ️ 检测到源目录与目标目录相同,已切换为临时副本执行覆盖更新。");
82
+ }
83
+
84
+ // Log logic handled by caller mostly, but validation here
85
+ if (fs.existsSync(targetDir)) {
86
+ if (!this.options.force) {
87
+ throw new Error(".agent 目录已存在。请使用 --force 覆盖。");
88
+ }
89
+ if (this.options.dryRun) {
90
+ this.log(`[dry-run] 将删除: ${targetDir}`);
91
+ } else {
92
+ fs.rmSync(targetDir, { recursive: true, force: true });
93
+ this.log(`🗑️ 已删除旧目录: ${targetDir}`);
94
+ }
95
+ }
96
+
97
+ if (this.options.dryRun) {
98
+ this.log(`[dry-run] 将复制: ${installSource} -> ${targetDir}`);
99
+ const cleanupGit = GitHelper.removeIgnoreRules(this.workspaceRoot, [".agent"], this.options);
100
+ if(cleanupGit.removedCount > 0) this.log(`[dry-run] 将移除 .gitignore 规则`);
101
+ return;
102
+ }
103
+
104
+ fs.mkdirSync(this.workspaceRoot, { recursive: true });
105
+ this._copyDir(installSource, targetDir);
106
+ const cleanupResult = GitHelper.removeIgnoreRules(this.workspaceRoot, [".agent"], this.options);
107
+ if(cleanupResult.removedCount > 0) {
108
+ this.log(`🧹 已从 .gitignore 移除 ${cleanupResult.removedCount} 条规则`);
109
+ }
110
+
111
+ this.log("✅ [Gemini] 安装完成 (.agent)");
112
+ } finally {
113
+ if (cleanup) cleanup();
114
+ }
22
115
  }
23
116
 
24
117
  update(sourceDir) {
25
- this._delegate().update(sourceDir);
118
+ this.options.force = true; // Updates are forced installs
119
+ this.install(sourceDir);
26
120
  }
27
-
121
+
28
122
  checkIntegrity() {
29
- return this._delegate().checkIntegrity();
123
+ const agentDir = path.join(this.workspaceRoot, ".agent");
124
+ if (!fs.existsSync(agentDir)) {
125
+ return { status: "missing", issues: [".agent directory missing"] };
126
+ }
127
+
128
+ const issues = [];
129
+ const requiredDirs = ["agents", "skills", "rules", "workflows"];
130
+ for (const relPath of requiredDirs) {
131
+ const absPath = path.join(agentDir, relPath);
132
+ if (!fs.existsSync(absPath) || !fs.statSync(absPath).isDirectory()) {
133
+ issues.push(`Missing required directory: .agent/${relPath}`);
134
+ }
135
+ }
136
+
137
+ const requiredFiles = ["rules/GEMINI.md", "agents/orchestrator.md"];
138
+ for (const relPath of requiredFiles) {
139
+ const absPath = path.join(agentDir, relPath);
140
+ if (!fs.existsSync(absPath) || !fs.statSync(absPath).isFile()) {
141
+ issues.push(`Missing required file: .agent/${relPath}`);
142
+ }
143
+ }
144
+
145
+ if (issues.length > 0) {
146
+ return { status: "broken", issues };
147
+ }
148
+
149
+ return { status: "ok", issues: [] };
30
150
  }
31
151
 
32
152
  fixIntegrity() {
33
- return this._delegate().fixIntegrity();
153
+ return { fixed: false, summary: "Gemini Adapter does not support self-healing yet. Please run update." };
34
154
  }
35
155
  }
36
156