@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.
- package/CHANGELOG.md +13 -11
- package/README.md +70 -35
- package/bin/adapters/codex.js +105 -372
- package/bin/adapters/gemini.js +133 -13
- package/bin/ag-kit.js +557 -155
- package/bin/core/builder.js +1 -1
- package/bin/core/generator.js +4 -4
- package/bin/core/resource-loader.js +2 -2
- package/bin/interactive.js +36 -81
- package/bin/utils/manifest.js +3 -3
- package/bin/utils.js +8 -3
- package/docs/PLAN.md +39 -0
- package/docs/TECH.md +136 -0
- package/package.json +11 -10
- package/scripts/ci-verify.js +95 -0
- package/scripts/clean.js +123 -0
- package/scripts/health-check.js +132 -0
- package/scripts/health-check.sh +6 -0
- package/tests/atomic-writer.test.js +47 -0
- package/tests/clean-script.test.js +77 -0
- package/tests/cli-smoke.test.js +479 -0
- package/tests/codex-adapter.test.js +132 -0
- package/tests/doctor.test.js +94 -0
- package/tests/gemini-adapter.test.js +30 -0
- package/tests/generator.test.js +48 -0
- package/tests/git-helper.test.js +53 -0
- package/tests/global-sync.test.js +133 -0
- package/tests/health-check-script.test.js +30 -0
- package/tests/managed-block.test.js +41 -0
- package/tests/manifest.test.js +97 -0
- package/tests/package-tarball.test.js +27 -0
- package/tests/phase-c.test.js +107 -0
- package/tests/standards-compliance.test.js +266 -0
- package/tests/transformer.test.js +74 -0
- package/docs/codex-rules-template.md +0 -36
- package/docs/mapping-spec.md +0 -62
- package/docs/multi-target-adapter.md +0 -46
- package/docs/official/README.md +0 -45
- package/docs/official/antigravity/agent-modes-settings.md +0 -64
- package/docs/official/antigravity/rules-workflows.md +0 -96
- package/docs/official/antigravity/skills.md +0 -147
- package/docs/official/codex/agents-md.md +0 -119
- package/docs/official/codex/config-advanced.md +0 -358
- package/docs/official/codex/config-basic.md +0 -141
- package/docs/official/codex/config-reference.md +0 -223
- package/docs/official/codex/config-sample.md +0 -216
- package/docs/official/codex/mcp.md +0 -107
- package/docs/official/codex/rules.md +0 -79
- package/docs/official/codex/skills.md +0 -114
- package/docs/official/mechanism-compat-audit-2026-03-04.md +0 -36
- package/docs/official/rules-baseline.md +0 -67
- package/docs/official/sources-index.md +0 -79
- package/docs/operations.md +0 -75
- package/docs/terminology-style-guide.md +0 -69
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/charts.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/colors.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/icons.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/landing.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/products.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/prompts.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/react-performance.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/flutter.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/react-native.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/react.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/svelte.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/stacks/vue.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/styles.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/typography.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/ui-reasoning.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/ux-guidelines.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/data/web-interface.csv +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/scripts/core.py +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/scripts/design_system.py +0 -0
- /package/{.agent → .agents}/.shared/ui-ux-pro-max/scripts/search.py +0 -0
- /package/{.agent → .agents}/ARCHITECTURE.md +0 -0
- /package/{.agent → .agents}/agents/backend-specialist.md +0 -0
- /package/{.agent → .agents}/agents/code-archaeologist.md +0 -0
- /package/{.agent → .agents}/agents/database-architect.md +0 -0
- /package/{.agent → .agents}/agents/debugger.md +0 -0
- /package/{.agent → .agents}/agents/devops-engineer.md +0 -0
- /package/{.agent → .agents}/agents/documentation-writer.md +0 -0
- /package/{.agent → .agents}/agents/explorer-agent.md +0 -0
- /package/{.agent → .agents}/agents/frontend-specialist.md +0 -0
- /package/{.agent → .agents}/agents/game-developer.md +0 -0
- /package/{.agent → .agents}/agents/mobile-developer.md +0 -0
- /package/{.agent → .agents}/agents/orchestrator.md +0 -0
- /package/{.agent → .agents}/agents/penetration-tester.md +0 -0
- /package/{.agent → .agents}/agents/performance-optimizer.md +0 -0
- /package/{.agent → .agents}/agents/product-manager.md +0 -0
- /package/{.agent → .agents}/agents/product-owner.md +0 -0
- /package/{.agent → .agents}/agents/project-planner.md +0 -0
- /package/{.agent → .agents}/agents/qa-automation-engineer.md +0 -0
- /package/{.agent → .agents}/agents/security-auditor.md +0 -0
- /package/{.agent → .agents}/agents/seo-specialist.md +0 -0
- /package/{.agent → .agents}/agents/test-engineer.md +0 -0
- /package/{.agent → .agents}/mcp_config.json +0 -0
- /package/{.agent → .agents}/rules/GEMINI.md +0 -0
- /package/{.agent → .agents}/scripts/auto_preview.py +0 -0
- /package/{.agent → .agents}/scripts/checklist.py +0 -0
- /package/{.agent → .agents}/scripts/session_manager.py +0 -0
- /package/{.agent → .agents}/scripts/verify_all.py +0 -0
- /package/{.agent → .agents}/skills/api-patterns/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/api-patterns/api-style.md +0 -0
- /package/{.agent → .agents}/skills/api-patterns/auth.md +0 -0
- /package/{.agent → .agents}/skills/api-patterns/documentation.md +0 -0
- /package/{.agent → .agents}/skills/api-patterns/graphql.md +0 -0
- /package/{.agent → .agents}/skills/api-patterns/rate-limiting.md +0 -0
- /package/{.agent → .agents}/skills/api-patterns/response.md +0 -0
- /package/{.agent → .agents}/skills/api-patterns/rest.md +0 -0
- /package/{.agent → .agents}/skills/api-patterns/scripts/api_validator.py +0 -0
- /package/{.agent → .agents}/skills/api-patterns/security-testing.md +0 -0
- /package/{.agent → .agents}/skills/api-patterns/trpc.md +0 -0
- /package/{.agent → .agents}/skills/api-patterns/versioning.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/agent-coordination.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/feature-building.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/project-detection.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/scaffolding.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/tech-stack.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/express-api/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -0
- /package/{.agent → .agents}/skills/architecture/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/architecture/context-discovery.md +0 -0
- /package/{.agent → .agents}/skills/architecture/examples.md +0 -0
- /package/{.agent → .agents}/skills/architecture/pattern-selection.md +0 -0
- /package/{.agent → .agents}/skills/architecture/patterns-reference.md +0 -0
- /package/{.agent → .agents}/skills/architecture/trade-off-analysis.md +0 -0
- /package/{.agent → .agents}/skills/bash-linux/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/behavioral-modes/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/brainstorming/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/brainstorming/dynamic-questioning.md +0 -0
- /package/{.agent → .agents}/skills/clean-code/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/code-review-checklist/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/database-design/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/database-design/database-selection.md +0 -0
- /package/{.agent → .agents}/skills/database-design/indexing.md +0 -0
- /package/{.agent → .agents}/skills/database-design/migrations.md +0 -0
- /package/{.agent → .agents}/skills/database-design/optimization.md +0 -0
- /package/{.agent → .agents}/skills/database-design/orm-selection.md +0 -0
- /package/{.agent → .agents}/skills/database-design/schema-design.md +0 -0
- /package/{.agent → .agents}/skills/database-design/scripts/schema_validator.py +0 -0
- /package/{.agent → .agents}/skills/deployment-procedures/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/doc.md +0 -0
- /package/{.agent → .agents}/skills/documentation-templates/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/frontend-design/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/frontend-design/animation-guide.md +0 -0
- /package/{.agent → .agents}/skills/frontend-design/color-system.md +0 -0
- /package/{.agent → .agents}/skills/frontend-design/decision-trees.md +0 -0
- /package/{.agent → .agents}/skills/frontend-design/motion-graphics.md +0 -0
- /package/{.agent → .agents}/skills/frontend-design/scripts/accessibility_checker.py +0 -0
- /package/{.agent → .agents}/skills/frontend-design/scripts/ux_audit.py +0 -0
- /package/{.agent → .agents}/skills/frontend-design/typography-system.md +0 -0
- /package/{.agent → .agents}/skills/frontend-design/ux-psychology.md +0 -0
- /package/{.agent → .agents}/skills/frontend-design/visual-effects.md +0 -0
- /package/{.agent → .agents}/skills/game-development/2d-games/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/game-development/3d-games/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/game-development/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/game-development/game-art/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/game-development/game-audio/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/game-development/game-design/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/game-development/mobile-games/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/game-development/multiplayer/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/game-development/pc-games/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/game-development/vr-ar/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/game-development/web-games/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/geo-fundamentals/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/geo-fundamentals/scripts/geo_checker.py +0 -0
- /package/{.agent → .agents}/skills/i18n-localization/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/i18n-localization/scripts/i18n_checker.py +0 -0
- /package/{.agent → .agents}/skills/intelligent-routing/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/lint-and-validate/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/lint-and-validate/scripts/lint_runner.py +0 -0
- /package/{.agent → .agents}/skills/lint-and-validate/scripts/type_coverage.py +0 -0
- /package/{.agent → .agents}/skills/mcp-builder/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/decision-trees.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/mobile-backend.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/mobile-color-system.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/mobile-debugging.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/mobile-design-thinking.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/mobile-navigation.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/mobile-performance.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/mobile-testing.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/mobile-typography.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/platform-android.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/platform-ios.md +0 -0
- /package/{.agent → .agents}/skills/mobile-design/scripts/mobile_audit.py +0 -0
- /package/{.agent → .agents}/skills/mobile-design/touch-psychology.md +0 -0
- /package/{.agent → .agents}/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -0
- /package/{.agent → .agents}/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -0
- /package/{.agent → .agents}/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -0
- /package/{.agent → .agents}/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -0
- /package/{.agent → .agents}/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -0
- /package/{.agent → .agents}/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -0
- /package/{.agent → .agents}/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -0
- /package/{.agent → .agents}/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -0
- /package/{.agent → .agents}/skills/nextjs-react-expert/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/nextjs-react-expert/scripts/convert_rules.py +0 -0
- /package/{.agent → .agents}/skills/nextjs-react-expert/scripts/react_performance_checker.py +0 -0
- /package/{.agent → .agents}/skills/nodejs-best-practices/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/parallel-agents/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/performance-profiling/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/performance-profiling/scripts/lighthouse_audit.py +0 -0
- /package/{.agent → .agents}/skills/plan-writing/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/powershell-windows/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/python-patterns/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/red-team-tactics/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/refactoring-patterns/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/rust-pro/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/seo-fundamentals/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/seo-fundamentals/scripts/seo_checker.py +0 -0
- /package/{.agent → .agents}/skills/server-management/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/systematic-debugging/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/tailwind-patterns/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/tdd-workflow/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/testing-patterns/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/testing-patterns/scripts/test_runner.py +0 -0
- /package/{.agent → .agents}/skills/vulnerability-scanner/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/vulnerability-scanner/checklists.md +0 -0
- /package/{.agent → .agents}/skills/vulnerability-scanner/scripts/security_scan.py +0 -0
- /package/{.agent → .agents}/skills/web-design-guidelines/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/webapp-testing/SKILL.md +0 -0
- /package/{.agent → .agents}/skills/webapp-testing/scripts/playwright_runner.py +0 -0
- /package/{.agent → .agents}/workflows/brainstorm.md +0 -0
- /package/{.agent → .agents}/workflows/create.md +0 -0
- /package/{.agent → .agents}/workflows/debug.md +0 -0
- /package/{.agent → .agents}/workflows/deploy.md +0 -0
- /package/{.agent → .agents}/workflows/enhance.md +0 -0
- /package/{.agent → .agents}/workflows/orchestrate.md +0 -0
- /package/{.agent → .agents}/workflows/plan.md +0 -0
- /package/{.agent → .agents}/workflows/preview.md +0 -0
- /package/{.agent → .agents}/workflows/restore-localize-compat.md +0 -0
- /package/{.agent → .agents}/workflows/status.md +0 -0
- /package/{.agent → .agents}/workflows/test.md +0 -0
- /package/{.agent → .agents}/workflows/ui-ux-pro-max.md +0 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
const { test, describe } = require('node:test');
|
|
2
|
+
const assert = require('node:assert');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
const REF_ROOT = path.resolve('reference/antigravity-kit');
|
|
7
|
+
const REF_AGENTS_ROOT = path.resolve('reference/antigravity-kit/.agents');
|
|
8
|
+
const REF_LEGACY_AGENT_ROOT = path.resolve('reference/antigravity-kit/.agent');
|
|
9
|
+
const REF_SCRIPTS_ROOT = fs.existsSync(REF_AGENTS_ROOT) ? REF_AGENTS_ROOT : REF_LEGACY_AGENT_ROOT;
|
|
10
|
+
const HAS_REF_SCRIPTS_ROOT = fs.existsSync(REF_SCRIPTS_ROOT);
|
|
11
|
+
|
|
12
|
+
function collectTokens(content, regex) {
|
|
13
|
+
const tokens = new Set();
|
|
14
|
+
for (const match of String(content || "").matchAll(regex)) {
|
|
15
|
+
tokens.add(match[1] || match[0]);
|
|
16
|
+
}
|
|
17
|
+
return tokens;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
describe('Standards Compliance', () => {
|
|
21
|
+
test('all skill directories should include SKILL.md', () => {
|
|
22
|
+
const skillsRoot = path.resolve('.agents/skills');
|
|
23
|
+
assert.ok(fs.existsSync(skillsRoot), 'missing .agents/skills');
|
|
24
|
+
|
|
25
|
+
const skillDirs = fs
|
|
26
|
+
.readdirSync(skillsRoot, { withFileTypes: true })
|
|
27
|
+
.filter((entry) => entry.isDirectory())
|
|
28
|
+
.map((entry) => path.join(skillsRoot, entry.name));
|
|
29
|
+
|
|
30
|
+
for (const dir of skillDirs) {
|
|
31
|
+
const skillMd = path.join(dir, 'SKILL.md');
|
|
32
|
+
assert.ok(fs.existsSync(skillMd), `missing SKILL.md in ${path.relative(process.cwd(), dir)}`);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test('deprecated .codex primary-layout wording should be removed from user-facing docs and generator', () => {
|
|
37
|
+
const targets = [
|
|
38
|
+
'README.md',
|
|
39
|
+
'docs/PLAN.md',
|
|
40
|
+
'docs/TECH.md',
|
|
41
|
+
'bin/core/generator.js',
|
|
42
|
+
];
|
|
43
|
+
const skipped = [];
|
|
44
|
+
|
|
45
|
+
for (const rel of targets) {
|
|
46
|
+
const abs = path.resolve(rel);
|
|
47
|
+
if (!fs.existsSync(abs)) {
|
|
48
|
+
skipped.push(rel);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const content = fs.readFileSync(abs, 'utf8');
|
|
52
|
+
assert.ok(!content.includes('Managed resources are synchronized under `.codex/`.'), `${rel} still contains deprecated .codex guidance`);
|
|
53
|
+
assert.ok(!content.includes('Do not edit files under `.codex/` directly.'), `${rel} still contains deprecated .codex guidance`);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (skipped.length > 0) {
|
|
57
|
+
console.warn(`[standards-compliance] skipped missing optional files: ${skipped.join(', ')}`);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test('critical mechanism tokens should remain aligned with reference snapshot', { skip: !fs.existsSync(REF_ROOT) }, () => {
|
|
62
|
+
const refRoot = REF_ROOT;
|
|
63
|
+
const tokenRegex = /(ag-kit|python3?|checklist\.py|verify_all\.py|security_scan\.py|ux_audit\.py|accessibility_checker\.py|schema_validator\.py|lint_runner\.py|type_coverage\.py|playwright_runner\.py|lighthouse_audit\.py|api_validator\.py|mobile_audit\.py|seo_checker\.py|geo_checker\.py|i18n_checker\.py|\.agent\/|\.agents\/|\.agents-backup\/|\.codex\/|AGENTS\.md|antigravity\.rules|manifest\.json|--target|--targets|--fix|--path|--no-index|--dry-run|--quiet|--force)/g;
|
|
64
|
+
const slashCommandRegex = /(?:^|[\s`"'(\[])(\/(?:brainstorm|create|debug|deploy|enhance|orchestrate|plan|preview|status|test|ui-ux-pro-max))(?=$|[\s`"',。,.::)\]])/gm;
|
|
65
|
+
|
|
66
|
+
const markdownFiles = [];
|
|
67
|
+
const stack = [refRoot];
|
|
68
|
+
while (stack.length > 0) {
|
|
69
|
+
const current = stack.pop();
|
|
70
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
|
|
71
|
+
const abs = path.join(current, entry.name);
|
|
72
|
+
if (entry.isDirectory()) {
|
|
73
|
+
stack.push(abs);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (/\.(md|mdx|txt)$/i.test(entry.name)) {
|
|
77
|
+
markdownFiles.push(abs);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const mismatches = [];
|
|
83
|
+
for (const refFile of markdownFiles) {
|
|
84
|
+
const rel = path.relative(refRoot, refFile);
|
|
85
|
+
const localFile = path.resolve(rel);
|
|
86
|
+
if (!fs.existsSync(localFile)) continue;
|
|
87
|
+
|
|
88
|
+
const refContent = fs.readFileSync(refFile, 'utf8');
|
|
89
|
+
const refTokens = new Set([
|
|
90
|
+
...collectTokens(refContent, tokenRegex),
|
|
91
|
+
...collectTokens(refContent, slashCommandRegex),
|
|
92
|
+
]);
|
|
93
|
+
if (refTokens.size === 0) continue;
|
|
94
|
+
|
|
95
|
+
const localContent = fs.readFileSync(localFile, 'utf8');
|
|
96
|
+
const localTokens = new Set([
|
|
97
|
+
...collectTokens(localContent, tokenRegex),
|
|
98
|
+
...collectTokens(localContent, slashCommandRegex),
|
|
99
|
+
]);
|
|
100
|
+
|
|
101
|
+
const missing = [...refTokens].filter((token) => !localTokens.has(token));
|
|
102
|
+
if (missing.length > 0) {
|
|
103
|
+
mismatches.push({ rel, missing });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
assert.strictEqual(
|
|
108
|
+
mismatches.length,
|
|
109
|
+
0,
|
|
110
|
+
`critical mechanism tokens drifted:\n${mismatches
|
|
111
|
+
.slice(0, 10)
|
|
112
|
+
.map((item) => `${item.rel} -> ${item.missing.join(', ')}`)
|
|
113
|
+
.join('\n')}`,
|
|
114
|
+
);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test('user-facing docs should track current repo and global skill locations', () => {
|
|
118
|
+
const file = path.resolve('docs/TECH.md');
|
|
119
|
+
const content = fs.readFileSync(file, 'utf8');
|
|
120
|
+
|
|
121
|
+
assert.ok(content.includes('$HOME/.codex/skills/'), 'missing global skill path: $HOME/.codex/skills/');
|
|
122
|
+
assert.ok(content.includes('$HOME/.gemini/skills/'), 'missing global skill path: $HOME/.gemini/skills/');
|
|
123
|
+
assert.ok(content.includes('$HOME/.gemini/antigravity/skills/'), 'missing global skill path: $HOME/.gemini/antigravity/skills/');
|
|
124
|
+
assert.ok(content.includes('.agents/skills'), 'missing repo skill path: .agents/skills');
|
|
125
|
+
assert.ok(!content.includes('$HOME/.agents/skills/'), 'should not contain deprecated global path: $HOME/.agents/skills/');
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
test('.agents script files should stay identical to reference snapshot', { skip: !HAS_REF_SCRIPTS_ROOT }, () => {
|
|
129
|
+
const refScriptsRoot = REF_SCRIPTS_ROOT;
|
|
130
|
+
const mismatches = [];
|
|
131
|
+
|
|
132
|
+
const stack = [refScriptsRoot];
|
|
133
|
+
while (stack.length > 0) {
|
|
134
|
+
const current = stack.pop();
|
|
135
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
|
|
136
|
+
const abs = path.join(current, entry.name);
|
|
137
|
+
if (entry.isDirectory()) {
|
|
138
|
+
stack.push(abs);
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (!abs.includes(`${path.sep}scripts${path.sep}`)) continue;
|
|
142
|
+
if (abs.includes(`${path.sep}__pycache__${path.sep}`) || abs.endsWith('.pyc')) continue;
|
|
143
|
+
|
|
144
|
+
const rel = path.relative(refScriptsRoot, abs);
|
|
145
|
+
const localFile = path.resolve('.agents', rel);
|
|
146
|
+
if (!fs.existsSync(localFile)) {
|
|
147
|
+
mismatches.push(`${rel} (missing local file)`);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const refContent = fs.readFileSync(abs, 'utf8');
|
|
152
|
+
const localContent = fs.readFileSync(localFile, 'utf8');
|
|
153
|
+
if (refContent !== localContent) {
|
|
154
|
+
mismatches.push(rel);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
assert.strictEqual(
|
|
160
|
+
mismatches.length,
|
|
161
|
+
0,
|
|
162
|
+
`script content drifted:\n${mismatches.slice(0, 20).join('\n')}`,
|
|
163
|
+
);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test('critical path handling should avoid hardcoded platform separators in managed paths', () => {
|
|
167
|
+
const adapterFile = path.resolve('bin/adapters/codex.js');
|
|
168
|
+
const content = fs.readFileSync(adapterFile, 'utf8');
|
|
169
|
+
|
|
170
|
+
// Keep this focused on managed path constants that must remain path.join-driven.
|
|
171
|
+
assert.ok(content.includes('path.join'), 'codex adapter should use path.join for managed paths');
|
|
172
|
+
assert.ok(content.includes('os.tmpdir()'), 'codex adapter should use os.tmpdir() for temp paths');
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
test('official antigravity docs baselines should be present in localized pages', () => {
|
|
176
|
+
const checks = [
|
|
177
|
+
{
|
|
178
|
+
file: 'web/src/app/docs/skills/page.tsx',
|
|
179
|
+
required: [
|
|
180
|
+
'SKILL.md',
|
|
181
|
+
'workspace-root',
|
|
182
|
+
'~/.gemini/antigravity/skills',
|
|
183
|
+
'description',
|
|
184
|
+
'scripts/',
|
|
185
|
+
'examples/',
|
|
186
|
+
'resources/',
|
|
187
|
+
'Discovery',
|
|
188
|
+
'Activation',
|
|
189
|
+
'Execution',
|
|
190
|
+
'--help',
|
|
191
|
+
],
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
file: 'web/src/app/docs/rules-workflows/page.tsx',
|
|
195
|
+
required: [
|
|
196
|
+
'12,000',
|
|
197
|
+
'~/.gemini/GEMINI.md',
|
|
198
|
+
'.agent/rules',
|
|
199
|
+
'Manual',
|
|
200
|
+
'Always On',
|
|
201
|
+
'Model Decision',
|
|
202
|
+
'Glob',
|
|
203
|
+
'@filename',
|
|
204
|
+
'/workflow-name',
|
|
205
|
+
],
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
file: 'web/src/app/docs/task-groups/page.tsx',
|
|
209
|
+
required: ['规划模式', '总体目标', '已编辑文件', '待处理区'],
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
file: 'web/src/app/docs/strict-mode/page.tsx',
|
|
213
|
+
required: ['Allowlist/Denylist', 'Request Review', '.gitignore', '工作区隔离'],
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
file: 'web/src/app/docs/sandbox-mode/page.tsx',
|
|
217
|
+
required: [
|
|
218
|
+
'sandbox-exec',
|
|
219
|
+
'Enable Terminal Sandboxing',
|
|
220
|
+
'Sandbox Allow Network',
|
|
221
|
+
'Bypass Sandbox',
|
|
222
|
+
'Strict Mode',
|
|
223
|
+
],
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
file: 'web/src/app/docs/mcp/page.tsx',
|
|
227
|
+
required: [
|
|
228
|
+
'Model Context Protocol',
|
|
229
|
+
'MCP Store',
|
|
230
|
+
'Manage MCP Servers',
|
|
231
|
+
'View raw config',
|
|
232
|
+
'mcp_config.json',
|
|
233
|
+
],
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
file: 'web/src/app/docs/command/page.tsx',
|
|
237
|
+
required: ['Command + I', 'Ctrl + I'],
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
file: 'web/src/app/docs/allowlist-denylist/page.tsx',
|
|
241
|
+
required: ['BadUrlsChecker', 'always allow', 'localhost'],
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
file: 'web/src/app/docs/browser-subagent/page.tsx',
|
|
245
|
+
required: ['DOM 捕获', '截图', '蓝色边框'],
|
|
246
|
+
},
|
|
247
|
+
];
|
|
248
|
+
|
|
249
|
+
const missing = [];
|
|
250
|
+
for (const { file, required } of checks) {
|
|
251
|
+
const abs = path.resolve(file);
|
|
252
|
+
const content = fs.readFileSync(abs, 'utf8');
|
|
253
|
+
for (const token of required) {
|
|
254
|
+
if (!content.includes(token)) {
|
|
255
|
+
missing.push(`${file} -> ${token}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
assert.strictEqual(
|
|
261
|
+
missing.length,
|
|
262
|
+
0,
|
|
263
|
+
`localized docs missing official baseline tokens:\n${missing.join('\n')}`,
|
|
264
|
+
);
|
|
265
|
+
});
|
|
266
|
+
});
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
const { test, describe, beforeEach, afterEach } = require("node:test");
|
|
2
|
+
const assert = require("node:assert");
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const os = require("os");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const ResourceTransformer = require("../bin/core/transformer");
|
|
7
|
+
|
|
8
|
+
describe("ResourceTransformer", () => {
|
|
9
|
+
let tempDir;
|
|
10
|
+
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "ag-kit-transformer-test-"));
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
function transformWorkflow(markdown) {
|
|
20
|
+
const workflowPath = path.join(tempDir, "workflow.md");
|
|
21
|
+
fs.writeFileSync(workflowPath, markdown, "utf8");
|
|
22
|
+
|
|
23
|
+
const result = ResourceTransformer.transform({
|
|
24
|
+
skills: [],
|
|
25
|
+
workflows: [{ name: "demo", path: workflowPath, type: "workflow" }],
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
return result.mappedFiles.find((item) => item.destPath.endsWith("/SKILL.md"));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
test("workflow frontmatter should parse CRLF and keep colon in description", () => {
|
|
32
|
+
const mapped = transformWorkflow([
|
|
33
|
+
"---\r",
|
|
34
|
+
"description: \"Run /debug: inspect failures\"\r",
|
|
35
|
+
"---\r",
|
|
36
|
+
"",
|
|
37
|
+
"# Workflow body",
|
|
38
|
+
].join("\n"));
|
|
39
|
+
|
|
40
|
+
assert.ok(mapped);
|
|
41
|
+
assert.ok(mapped.content.includes("description: \"Run /debug: inspect failures\""));
|
|
42
|
+
assert.ok(mapped.content.includes("# Workflow body"));
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test("workflow frontmatter should parse folded multiline description", () => {
|
|
46
|
+
const mapped = transformWorkflow([
|
|
47
|
+
"---",
|
|
48
|
+
"description: >",
|
|
49
|
+
" 先执行 /plan",
|
|
50
|
+
" 再执行 /debug",
|
|
51
|
+
"---",
|
|
52
|
+
"",
|
|
53
|
+
"# Workflow body",
|
|
54
|
+
].join("\n"));
|
|
55
|
+
|
|
56
|
+
assert.ok(mapped);
|
|
57
|
+
assert.ok(mapped.content.includes("description: \"先执行 /plan 再执行 /debug\""));
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test("workflow frontmatter should parse indented multiline description", () => {
|
|
61
|
+
const mapped = transformWorkflow([
|
|
62
|
+
"---",
|
|
63
|
+
"description:",
|
|
64
|
+
" 统一排查流程: 先收集日志",
|
|
65
|
+
" 再定位根因",
|
|
66
|
+
"---",
|
|
67
|
+
"",
|
|
68
|
+
"# Workflow body",
|
|
69
|
+
].join("\n"));
|
|
70
|
+
|
|
71
|
+
assert.ok(mapped);
|
|
72
|
+
assert.ok(mapped.content.includes("description: \"统一排查流程: 先收集日志 再定位根因\""));
|
|
73
|
+
});
|
|
74
|
+
});
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# Codex `.rules` 模板(手动配置)
|
|
2
|
-
|
|
3
|
-
> 用途:给 Codex 官方规则引擎提供命令审批策略。
|
|
4
|
-
> 注意:这不是 `antigravity.rules` 的替代品,二者职责不同。
|
|
5
|
-
|
|
6
|
-
## 路径约定
|
|
7
|
-
|
|
8
|
-
- 全局默认路径:`~/.codex/rules/default.rules`
|
|
9
|
-
- 本项目不会自动写入该文件,请按需手动创建。
|
|
10
|
-
|
|
11
|
-
## 最小模板(Starlark)
|
|
12
|
-
|
|
13
|
-
```python
|
|
14
|
-
# default.rules
|
|
15
|
-
# 允许常见只读命令直接执行,其余命令走人工审批
|
|
16
|
-
|
|
17
|
-
load("builtin://rules/rules.star", "prefix_rule")
|
|
18
|
-
|
|
19
|
-
rules = [
|
|
20
|
-
prefix_rule(["ls"], action="allow"),
|
|
21
|
-
prefix_rule(["cat"], action="allow"),
|
|
22
|
-
prefix_rule(["rg"], action="allow"),
|
|
23
|
-
prefix_rule(["git", "status"], action="allow"),
|
|
24
|
-
]
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## 建议策略
|
|
28
|
-
|
|
29
|
-
1. 先放行只读命令(`ls`/`cat`/`rg`/`git status`)。
|
|
30
|
-
2. 对写操作、网络请求、脚本执行保持 `review` 或 `deny`。
|
|
31
|
-
3. 团队场景下,将策略文件纳入内部安全评审流程。
|
|
32
|
-
|
|
33
|
-
## 与 `antigravity.rules` 的关系
|
|
34
|
-
|
|
35
|
-
- `antigravity.rules`:本仓库在工作区注入的托管说明内容,用于记录受管资源与运维约束。
|
|
36
|
-
- `.rules`:Codex 官方可执行审批规则(Starlark),影响命令放行策略。
|
package/docs/mapping-spec.md
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# Full 模式资源映射规范
|
|
2
|
-
|
|
3
|
-
本文描述 v3 统一目录体系下的资源映射。
|
|
4
|
-
|
|
5
|
-
## 1. Canonical 与 Projection
|
|
6
|
-
|
|
7
|
-
- Canonical:`.agents/**`
|
|
8
|
-
- Projection:`.agent/**`、`.gemini/**`、根 `AGENTS.md`/`antigravity.rules` 托管区块
|
|
9
|
-
|
|
10
|
-
## 2. 关键映射规则
|
|
11
|
-
|
|
12
|
-
### 2.1 Skills
|
|
13
|
-
- Canonical 路径:`.agents/skills/<name>/SKILL.md`
|
|
14
|
-
- Antigravity 兼容:投影到 `.agent/skills/<name>/SKILL.md`
|
|
15
|
-
- Codex 兼容:直接读取 `.agents/skills/*`
|
|
16
|
-
|
|
17
|
-
### 2.2 Workflows
|
|
18
|
-
- Canonical 路径:`.agents/workflows/<name>.md`
|
|
19
|
-
- Codex 兼容增强:额外生成 `workflow-<name>` 的技能桥接(位于 `.agents/skills/`)
|
|
20
|
-
|
|
21
|
-
### 2.3 Agents
|
|
22
|
-
- Canonical 路径:`.agents/agents/*.md`
|
|
23
|
-
- Gemini 兼容:写入 `.gemini/agents/ag-kit-*.md`(追加模式,保留用户文件)
|
|
24
|
-
|
|
25
|
-
### 2.4 MCP
|
|
26
|
-
- Canonical:`.agents/mcp_config.json`
|
|
27
|
-
- Gemini 兼容:合并到 `.gemini/settings.json#mcpServers`
|
|
28
|
-
- Context7:同步 `context7` 与 `context7_backup`
|
|
29
|
-
|
|
30
|
-
## 3. 托管清单 manifest
|
|
31
|
-
|
|
32
|
-
`manifest.json`(v3)用于:
|
|
33
|
-
- 受管文件哈希校验
|
|
34
|
-
- 漂移检测
|
|
35
|
-
- 覆盖前冲突备份判定
|
|
36
|
-
|
|
37
|
-
示例:
|
|
38
|
-
|
|
39
|
-
```json
|
|
40
|
-
{
|
|
41
|
-
"version": 3,
|
|
42
|
-
"target": "full",
|
|
43
|
-
"kitVersion": "3.0.0-beta.0",
|
|
44
|
-
"files": {
|
|
45
|
-
"skills/example/SKILL.md": {
|
|
46
|
-
"hash": "sha256...",
|
|
47
|
-
"source": "bundled:full/skills/example/SKILL.md"
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## 4. Legacy 迁移边界
|
|
54
|
-
|
|
55
|
-
1. 托管 `.codex`:迁移到 `.agents` 后清理。
|
|
56
|
-
2. 非托管 `.codex`:保留不删。
|
|
57
|
-
3. `.agent`/`.gemini`:用于迁移输入或投影冲突处理,不作为主源。
|
|
58
|
-
|
|
59
|
-
## 5. 官方规则边界
|
|
60
|
-
|
|
61
|
-
- `antigravity.rules` 是本项目托管说明文件,不是 Codex 官方 `.rules`。
|
|
62
|
-
- Codex 官方审批规则仍在 `~/.codex/rules/default.rules`(参考 `docs/codex-rules-template.md`)。
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# 多目标适配器(v3 Full)
|
|
2
|
-
|
|
3
|
-
当前版本采用统一 full 架构:`.agents` 为唯一主目录,`.agent` 与 `.gemini` 为兼容投影。
|
|
4
|
-
|
|
5
|
-
## 架构概览
|
|
6
|
-
|
|
7
|
-
```mermaid
|
|
8
|
-
graph TD
|
|
9
|
-
CLI[ag-kit CLI] --> Full[Full Adapter]
|
|
10
|
-
Full --> Canonical[.agents Canonical]
|
|
11
|
-
Full --> AgentProj[.agent Projection]
|
|
12
|
-
Full --> GeminiProj[.gemini Projection]
|
|
13
|
-
Full --> RootManaged[AGENTS.md / antigravity.rules Managed Block]
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## 设计原则
|
|
17
|
-
|
|
18
|
-
1. 单一事实源:只维护 `.agents`。
|
|
19
|
-
2. 兼容投影:对 Antigravity/Gemini/Codex 做最小兼容输出。
|
|
20
|
-
3. 只处理托管文件:非托管 `.codex`、用户 `.gemini` 自定义文件不被覆盖删除。
|
|
21
|
-
4. 冲突可恢复:覆盖前统一备份到 `.agents-backup/<timestamp>/`。
|
|
22
|
-
|
|
23
|
-
## 命令语义
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
ag-kit init
|
|
27
|
-
ag-kit update
|
|
28
|
-
ag-kit update-all --targets full
|
|
29
|
-
ag-kit doctor --fix
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
- `--target gemini|codex` 仍兼容,但归一到 full 流程。
|
|
33
|
-
- `status` 显示 canonical/projection/legacy 状态。
|
|
34
|
-
|
|
35
|
-
## Legacy 迁移
|
|
36
|
-
|
|
37
|
-
- 支持读取历史 `.agent`、托管 `.codex`、`.gemini` 并收敛到 `.agents`。
|
|
38
|
-
- 非托管 `.codex` 保留,仅做提示。
|
|
39
|
-
|
|
40
|
-
## MCP 双通道
|
|
41
|
-
|
|
42
|
-
`.agents/mcp_config.json` 与 `.gemini/settings.json` 会同步主备 Context7:
|
|
43
|
-
- `context7`(官方)
|
|
44
|
-
- `context7_backup`(备用)
|
|
45
|
-
|
|
46
|
-
官方不可用时可改走备用。
|
package/docs/official/README.md
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# 官方规则文档索引
|
|
2
|
-
|
|
3
|
-
本目录用于记录 Antigravity、Codex、Gemini CLI 的官方规则约定,作为本仓库的对照基线。
|
|
4
|
-
|
|
5
|
-
## 记录原则
|
|
6
|
-
|
|
7
|
-
1. 以官方文档原始地址为准,不编造机制。
|
|
8
|
-
2. 本目录可做中文整理,但不应改变官方规则语义。
|
|
9
|
-
3. 每次核对都写入证据索引(URL、时间、SHA/提交记录)。
|
|
10
|
-
|
|
11
|
-
## 当前基线
|
|
12
|
-
|
|
13
|
-
- 规则汇总:`docs/official/rules-baseline.md`
|
|
14
|
-
- 证据索引:`docs/official/sources-index.md`
|
|
15
|
-
- 兼容审查:`docs/official/mechanism-compat-audit-2026-03-04.md`
|
|
16
|
-
- 最近集中核对日期:2026-03-04(UTC)
|
|
17
|
-
|
|
18
|
-
## 覆盖范围
|
|
19
|
-
|
|
20
|
-
### Antigravity
|
|
21
|
-
|
|
22
|
-
- Skills:`https://antigravity.google/assets/docs/agent/skills.md`
|
|
23
|
-
- Rules / Workflows:`https://antigravity.google/assets/docs/agent/rules-workflows.md`
|
|
24
|
-
- Agent Modes / Settings:`https://antigravity.google/assets/docs/agent/agent-modes-settings.md`
|
|
25
|
-
- Strict Mode:`https://antigravity.google/assets/docs/agent/strict-mode.md`
|
|
26
|
-
- Sandboxing:`https://antigravity.google/assets/docs/agent/sandbox-mode.md`
|
|
27
|
-
- MCP:`https://antigravity.google/assets/docs/tools/mcp.md`
|
|
28
|
-
|
|
29
|
-
### Codex
|
|
30
|
-
|
|
31
|
-
- Skills:`https://developers.openai.com/codex/skills.md`
|
|
32
|
-
- Rules:`https://developers.openai.com/codex/rules.md`
|
|
33
|
-
- AGENTS.md:`https://developers.openai.com/codex/guides/agents-md.md`
|
|
34
|
-
- MCP:`https://developers.openai.com/codex/mcp.md`
|
|
35
|
-
- Workflows:`https://developers.openai.com/codex/workflows.md`
|
|
36
|
-
- Security:`https://developers.openai.com/codex/security.md`
|
|
37
|
-
|
|
38
|
-
### Gemini CLI
|
|
39
|
-
|
|
40
|
-
- Skills:`https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/skills.md`
|
|
41
|
-
- Gemini.md:`https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/gemini-md.md`
|
|
42
|
-
- Plan Mode:`https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/plan-mode.md`
|
|
43
|
-
- Subagents:`https://github.com/google-gemini/gemini-cli/blob/main/docs/core/subagents.md`
|
|
44
|
-
- MCP Server:`https://github.com/google-gemini/gemini-cli/blob/main/docs/tools/mcp-server.md`
|
|
45
|
-
- Policy Engine(规则引擎):`https://github.com/google-gemini/gemini-cli/blob/main/docs/reference/policy-engine.md`
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
slug: agent-modes-settings
|
|
3
|
-
section: 代理
|
|
4
|
-
title: Agent 模式与设置
|
|
5
|
-
path:
|
|
6
|
-
- 代理
|
|
7
|
-
- 模式与设置
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Agent 模式与设置(中文整理)
|
|
11
|
-
|
|
12
|
-
> 来源:`https://antigravity.google/docs/agent-modes-settings`
|
|
13
|
-
> 同步日期:2026-02-12
|
|
14
|
-
> 说明:本文件为官方内容的中文整理版,采用标准 Markdown 语法。
|
|
15
|
-
|
|
16
|
-
## 会话级模式
|
|
17
|
-
|
|
18
|
-
开始新的 Agent 会话时,用户可以选择不同模式:
|
|
19
|
-
|
|
20
|
-
- `Planning`:先规划后执行,适合深度研究、复杂任务、协作任务。该模式下,Agent 会使用任务分组、产出 Artifacts,并在执行前进行更充分的分析与规划。
|
|
21
|
-
- `Fast`:直接执行,适合简单且局部的任务,例如重命名变量、执行少量命令等,强调速度。
|
|
22
|
-
|
|
23
|
-
## 全局设置
|
|
24
|
-
|
|
25
|
-
全局设置位于设置面板的 `Agent` 标签页,影响所有会话。重点配置如下。
|
|
26
|
-
|
|
27
|
-
### Artifact 审阅策略
|
|
28
|
-
|
|
29
|
-
可选项:
|
|
30
|
-
|
|
31
|
-
- `Always Proceed`:Agent 不等待人工审阅,继续执行。
|
|
32
|
-
- `Request Review`:Agent 在请求审阅后停止,等待用户确认和补充意见。
|
|
33
|
-
|
|
34
|
-
适用建议:
|
|
35
|
-
|
|
36
|
-
- 需要严格把关实施计划时,使用 `Request Review`。
|
|
37
|
-
- 追求流程速度且信任当前指令时,使用 `Always Proceed`。
|
|
38
|
-
|
|
39
|
-
### 终端命令自动执行
|
|
40
|
-
|
|
41
|
-
针对终端命令生成工具:
|
|
42
|
-
|
|
43
|
-
- `Request Review`:默认不自动执行命令(允许名单中的命令可自动执行)。
|
|
44
|
-
- `Always Proceed`:默认自动执行命令(拒绝名单中的命令例外)。
|
|
45
|
-
|
|
46
|
-
补充规则:
|
|
47
|
-
|
|
48
|
-
- 允许名单(Allow list)和拒绝名单(Deny list)可在 `Agent` 设置中配置。
|
|
49
|
-
- 设置变更仅对后续新消息生效,不影响当前正在进行的回复。
|
|
50
|
-
- 在 Unix shell 中,规则按“命令 token 前缀匹配”。
|
|
51
|
-
- 在 PowerShell 中,规则可匹配命令 token 的任意连续子序列。
|
|
52
|
-
|
|
53
|
-
### 非工作区文件访问
|
|
54
|
-
|
|
55
|
-
该选项控制 Agent 是否可访问和编辑当前工作区之外的文件。
|
|
56
|
-
|
|
57
|
-
默认情况下,Agent 仅能访问:
|
|
58
|
-
|
|
59
|
-
- 当前工作区文件
|
|
60
|
-
- 应用根目录 `~/.antigravity/` 下的 Antigravity 相关数据(如 Artifacts、Knowledge Items)
|
|
61
|
-
|
|
62
|
-
风险提示:
|
|
63
|
-
|
|
64
|
-
- 开启该能力可能暴露本地敏感信息或密钥,请谨慎使用。
|