simt-dev 0.7.1 → 0.8.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 +36 -1
- package/README.md +169 -80
- package/docs/decisions/ADR-014-workspace-is-configuration.md +1 -1
- package/docs/decisions/ADR-025-a-baseline-is-a-region-in-a-file-the-repo-owns.md +1 -1
- package/docs/decisions/ADR-026-a-config-without-a-region-is-a-file-the-repo-owns.md +1 -1
- package/docs/decisions/ADR-027-the-one-gitattributes-line-that-is-neither-dangerous-nor-empty.md +1 -1
- package/docs/decisions/ADR-028-a-base-file-is-a-floor-so-the-disagreement-it-cannot-repair-becomes-a-check.md +1 -1
- package/docs/decisions/ADR-029-the-pins-a-repository-declares-are-its-own.md +1 -1
- package/docs/decisions/ADR-030-what-a-plan-does-not-ship-is-a-decision-with-a-record.md +1 -1
- package/docs/decisions/ADR-048-a-baseline-carries-only-keys-a-reader-honours.md +1 -1
- package/docs/decisions/ADR-082-the-tracker-override-is-a-manifest-key.md +1 -1
- package/docs/decisions/ADR-126-the-mcp-surface-stays-a-reader-so-there-is-no-write-path-to-build.md +68 -0
- package/docs/decisions/ADR-127-the-mcp-tool-list-is-written-by-hand-and-roots-is-not-asked-for.md +65 -0
- package/docs/decisions/ADR-128-a-research-plan-is-a-plan-and-the-tracker-reads-it.md +42 -0
- package/ecosystems/bun.json +6 -0
- package/ecosystems/cargo.json +25 -0
- package/ecosystems/composer.json +6 -0
- package/ecosystems/dart.json +24 -0
- package/ecosystems/deno.json +21 -0
- package/ecosystems/devcontainers.json +6 -0
- package/ecosystems/docker-compose.json +6 -0
- package/ecosystems/docker.json +6 -0
- package/ecosystems/dotnet.json +25 -0
- package/ecosystems/elixir.json +23 -0
- package/ecosystems/gitsubmodule.json +6 -0
- package/ecosystems/go.json +25 -0
- package/ecosystems/gradle.json +13 -0
- package/ecosystems/maven.json +23 -0
- package/ecosystems/node.json +25 -0
- package/ecosystems/python.json +20 -0
- package/ecosystems/ruby.json +23 -0
- package/ecosystems/swift.json +25 -0
- package/ecosystems/terraform.json +6 -0
- package/ecosystems/uv.json +6 -0
- package/harnesses/antigravity.json +162 -0
- package/harnesses/claude.json +206 -0
- package/harnesses/codex.json +136 -0
- package/harnesses/copilot.json +88 -0
- package/harnesses/cursor.json +140 -0
- package/harnesses/deepseek.json +99 -0
- package/harnesses/gemini.json +122 -0
- package/harnesses/opencode.json +173 -0
- package/package.json +3 -1
- package/rules/mdc/intake-questions.mdc +8 -0
- package/src/advice/advice.mjs +3 -2
- package/src/agenthooks/render.mjs +86 -180
- package/src/agents/render.mjs +15 -18
- package/src/api.mjs +7 -5
- package/src/argv.mjs +19 -0
- package/src/bench/ablate.mjs +3 -4
- package/src/bench/adapters.json +155 -113
- package/src/bench/adapters.mjs +466 -0
- package/src/bench/arms.mjs +333 -0
- package/src/bench/grade.mjs +12 -26
- package/src/bench/graders.mjs +42 -0
- package/src/bench/mine.mjs +17 -535
- package/src/bench/probe-ledger.mjs +149 -0
- package/src/bench/probes.catalog.mjs +918 -0
- package/src/bench/probes.mjs +15 -1037
- package/src/bench/render.mjs +111 -0
- package/src/bench/report.mjs +116 -971
- package/src/bench/run.mjs +164 -881
- package/src/bench/variants.mjs +4 -5
- package/src/bench/workspace.mjs +160 -0
- package/src/brief/assemble.mjs +11 -13
- package/src/ci/dependabot.mjs +25 -55
- package/src/commands/agent.mjs +1 -9
- package/src/commands/agenthook.mjs +66 -35
- package/src/commands/bench.mjs +2 -2
- package/src/commands/ci.mjs +11 -13
- package/src/commands/docs.mjs +88 -0
- package/src/commands/gate.mjs +10 -13
- package/src/commands/harness.mjs +3 -3
- package/src/commands/help.mjs +44 -3
- package/src/commands/hooks.mjs +20 -20
- package/src/commands/ignore.mjs +11 -7
- package/src/commands/impact.mjs +4 -8
- package/src/commands/index.mjs +49 -9
- package/src/commands/init-scan.mjs +90 -0
- package/src/commands/init.mjs +122 -104
- package/src/commands/lease.mjs +67 -18
- package/src/commands/map.mjs +10 -5
- package/src/commands/mcp.mjs +2 -17
- package/src/commands/repoindex.mjs +8 -8
- package/src/commands/rules.mjs +8 -4
- package/src/commands/shared.mjs +12 -16
- package/src/commands/skills.mjs +5 -6
- package/src/commands/skillscompile.mjs +3 -3
- package/src/commands/skillsinstall.mjs +5 -4
- package/src/commands/slice.mjs +199 -64
- package/src/commands/spec.mjs +78 -62
- package/src/commands/status.mjs +24 -12
- package/src/commands/sync.mjs +14 -14
- package/src/commands/tests.mjs +12 -12
- package/src/commands/tokens.mjs +19 -24
- package/src/commands/upgrade.mjs +8 -4
- package/src/commands/why.mjs +6 -13
- package/src/compare/hooksstate.mjs +2 -6
- package/src/compare/learn.mjs +3 -1
- package/src/decisions/index.mjs +3 -2
- package/src/docs/commands.mjs +65 -0
- package/src/ecosystem/records.mjs +219 -0
- package/src/explain.mjs +31 -0
- package/src/gates/index.mjs +385 -0
- package/src/graph/compile.mjs +8 -4
- package/src/graph/load.mjs +2 -1
- package/src/graph/spec.mjs +10 -8
- package/src/harness/records.mjs +143 -0
- package/src/hooks/capability.mjs +5 -3
- package/src/hooks/dispatcher.mjs +26 -32
- package/src/hooks/gates.mjs +12 -2
- package/src/hooks/resolve.mjs +2 -7
- package/src/hooks/where.mjs +2 -7
- package/src/identity.mjs +2 -11
- package/src/index/coverage.mjs +58 -0
- package/src/index/extract.mjs +6 -16
- package/src/index/gate.mjs +1 -1
- package/src/index/govern.mjs +26 -9
- package/src/index/impact.mjs +4 -8
- package/src/index/map.mjs +14 -15
- package/src/index/open.mjs +173 -0
- package/src/index/persist.mjs +224 -57
- package/src/index/store.mjs +82 -39
- package/src/index/tests.mjs +2 -6
- package/src/journal.mjs +16 -11
- package/src/kernel/card.mjs +37 -63
- package/src/kernel/checks.mjs +4 -10
- package/src/lease.mjs +102 -7
- package/src/ledger/index.mjs +124 -17
- package/src/mcp/paginate.mjs +33 -0
- package/src/mcp/schemas.mjs +512 -0
- package/src/mcp/server.mjs +49 -9
- package/src/mcp/tools-facts.mjs +326 -0
- package/src/mcp/tools-read.mjs +221 -0
- package/src/mcp/tools.mjs +4 -1005
- package/src/{bench → measure}/corpus.mjs +1 -1
- package/src/measure/metrics.mjs +236 -0
- package/src/measure/records.mjs +211 -0
- package/src/measure/stats.mjs +538 -0
- package/src/measure/task-schema.mjs +125 -0
- package/src/measure/tasks.mjs +69 -0
- package/src/memory/decide.mjs +6 -15
- package/src/memory/lesson-text.mjs +61 -0
- package/src/memory/lessons.mjs +29 -82
- package/src/name.mjs +7 -0
- package/src/output/index.mjs +122 -31
- package/src/packs/manage.mjs +15 -9
- package/src/plan/index.mjs +1 -1
- package/src/plugins.mjs +22 -16
- package/src/prbody.mjs +7 -11
- package/src/projection/loaders.mjs +7 -692
- package/src/projection/manifest.mjs +10 -435
- package/src/projection/mdc.mjs +7 -8
- package/src/projection/project.mjs +126 -221
- package/src/projection/region.mjs +561 -0
- package/src/projection/rules.mjs +16 -547
- package/src/projection/surfaces.mjs +43 -210
- package/src/projection/targets.mjs +5 -5
- package/src/repo-root.mjs +13 -1
- package/src/resolve/eval.mjs +2 -1
- package/src/resolve/fingerprint.mjs +0 -7
- package/src/resolve/resolve.mjs +1 -41
- package/src/review/critic.mjs +8 -12
- package/src/run.mjs +98 -0
- package/src/secrets.mjs +14 -22
- package/src/state/events.mjs +129 -0
- package/src/status-snapshot.mjs +233 -0
- package/src/status.mjs +2 -6
- package/src/sys/git.mjs +82 -0
- package/src/{bench/process.mjs → sys/proc.mjs} +28 -5
- package/src/testing/parsers.mjs +265 -0
- package/src/testing/patches.mjs +23 -0
- package/src/testing/paths.mjs +49 -0
- package/src/testing/runners.mjs +186 -0
- package/src/testing/vault.mjs +68 -0
- package/src/text/frontmatter.mjs +49 -0
- package/src/text/tokens.mjs +52 -0
- package/src/toolwords.mjs +1 -1
- package/src/util/fs.mjs +20 -0
- package/src/util/sort.mjs +12 -0
- package/src/workspace.mjs +3 -1
- package/src/write/plan.mjs +82 -0
- package/templates/plan/tracker.json +1 -0
- package/docs/decisions/ADR-033-three-plan-rows-closed-by-decision-not-by-authoring.md +0 -82
- package/docs/decisions/ADR-102-the-two-queued-review-rows-are-closed-by-ruling.md +0 -49
- package/src/bench/tasks.mjs +0 -36
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "dart",
|
|
3
|
+
"facts": ["has-pubspec"],
|
|
4
|
+
"tool": "dart",
|
|
5
|
+
"manifestOrder": 7,
|
|
6
|
+
"gates": {
|
|
7
|
+
"preCommit": ["format", "lint"],
|
|
8
|
+
"prePush": ["test"],
|
|
9
|
+
"commands": {
|
|
10
|
+
"format": "dart format --output=none --set-exit-if-changed .",
|
|
11
|
+
"lint": "dart analyze",
|
|
12
|
+
"test": "dart test"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"card": {
|
|
16
|
+
"focused": [
|
|
17
|
+
{ "order": 12, "kind": "Dart", "condition": { "fact": "has-pubspec" }, "template": "dart test {file}" }
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"dependabot": [
|
|
21
|
+
{ "order": 16, "fact": "has-pubspec", "value": "pub", "manifest": "pubspec.yaml" }
|
|
22
|
+
],
|
|
23
|
+
"languages": [{ "lang": "dart", "exts": [".dart"] }]
|
|
24
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "deno",
|
|
3
|
+
"facts": ["has-deno-config"],
|
|
4
|
+
"tool": "deno",
|
|
5
|
+
"manifestOrder": 5,
|
|
6
|
+
"gates": {
|
|
7
|
+
"preCommit": ["format", "lint"],
|
|
8
|
+
"prePush": ["test", "typecheck"],
|
|
9
|
+
"commands": {
|
|
10
|
+
"format": "deno fmt --check",
|
|
11
|
+
"lint": "deno lint",
|
|
12
|
+
"test": "deno test",
|
|
13
|
+
"typecheck": "deno check ."
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"card": {
|
|
17
|
+
"focused": [
|
|
18
|
+
{ "order": 10, "kind": "Deno", "condition": { "fact": "has-deno-config" }, "template": "deno test {file}" }
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "dotnet",
|
|
3
|
+
"facts": ["has-nuget"],
|
|
4
|
+
"tool": "dotnet",
|
|
5
|
+
"manifestOrder": 3,
|
|
6
|
+
"gates": {
|
|
7
|
+
"preCommit": ["format"],
|
|
8
|
+
"prePush": ["test", "typecheck"],
|
|
9
|
+
"commands": {
|
|
10
|
+
"format": "dotnet format --verify-no-changes",
|
|
11
|
+
"test": "dotnet test",
|
|
12
|
+
"typecheck": "dotnet build -warnaserror"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"card": {
|
|
16
|
+
"build": { "order": 3, "condition": { "fact": "has-nuget" }, "command": "dotnet build" },
|
|
17
|
+
"focused": [
|
|
18
|
+
{ "order": 8, "kind": ".NET", "condition": { "fact": "has-nuget" }, "template": "dotnet test --filter {test}" }
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"dependabot": [
|
|
22
|
+
{ "order": 15, "fact": "has-nuget", "value": "nuget", "manifest": "*.csproj" }
|
|
23
|
+
],
|
|
24
|
+
"languages": [{ "lang": "csharp", "exts": [".cs"] }]
|
|
25
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "elixir",
|
|
3
|
+
"facts": ["has-mix"],
|
|
4
|
+
"tool": "mix",
|
|
5
|
+
"manifestOrder": 8,
|
|
6
|
+
"gates": {
|
|
7
|
+
"preCommit": ["format"],
|
|
8
|
+
"prePush": ["test"],
|
|
9
|
+
"commands": {
|
|
10
|
+
"format": "mix format --check-formatted",
|
|
11
|
+
"test": "mix test"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"card": {
|
|
15
|
+
"build": { "order": 5, "condition": { "fact": "has-mix" }, "command": "mix compile" },
|
|
16
|
+
"focused": [
|
|
17
|
+
{ "order": 13, "kind": "Elixir", "condition": { "fact": "has-mix" }, "template": "mix test {file}" }
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"dependabot": [
|
|
21
|
+
{ "order": 18, "fact": "has-mix", "value": "mix", "manifest": "mix.exs" }
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "go",
|
|
3
|
+
"facts": ["has-go-mod"],
|
|
4
|
+
"tool": "go",
|
|
5
|
+
"manifestOrder": 2,
|
|
6
|
+
"gates": {
|
|
7
|
+
"preCommit": ["format", "lint"],
|
|
8
|
+
"prePush": ["test"],
|
|
9
|
+
"commands": {
|
|
10
|
+
"format": "test -z \"$(gofmt -l .)\"",
|
|
11
|
+
"lint": "go vet ./...",
|
|
12
|
+
"test": "go test ./..."
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"card": {
|
|
16
|
+
"build": { "order": 2, "condition": { "fact": "has-go-mod" }, "command": "go build ./..." },
|
|
17
|
+
"focused": [
|
|
18
|
+
{ "order": 4, "kind": "Go package", "condition": { "fact": "has-go-mod" }, "template": "go test ./{pkg} -run {Test}" }
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"dependabot": [
|
|
22
|
+
{ "order": 5, "fact": "has-go-mod", "value": "gomod", "manifest": "go.mod" }
|
|
23
|
+
],
|
|
24
|
+
"languages": [{ "lang": "go", "exts": [".go"] }]
|
|
25
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "gradle",
|
|
3
|
+
"card": {
|
|
4
|
+
"build": { "order": 6, "condition": { "stack": "gradle" }, "command": "./gradlew build" },
|
|
5
|
+
"focused": [
|
|
6
|
+
{ "order": 1, "kind": "Android", "condition": { "fact": "has-android-manifest" }, "template": "./gradlew :{module}:testDebugUnitTest --tests {class}" },
|
|
7
|
+
{ "order": 2, "kind": "JVM", "condition": { "stack": "gradle" }, "template": "./gradlew test --tests {class}" }
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
"dependabot": [
|
|
11
|
+
{ "order": 13, "stack": "gradle", "value": "gradle", "manifest": "build.gradle" }
|
|
12
|
+
]
|
|
13
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "maven",
|
|
3
|
+
"facts": ["has-maven-pom"],
|
|
4
|
+
"tool": "mvnw",
|
|
5
|
+
"file": true,
|
|
6
|
+
"manifestOrder": 9,
|
|
7
|
+
"gates": {
|
|
8
|
+
"prePush": ["test"],
|
|
9
|
+
"commands": { "test": "./mvnw -q verify" }
|
|
10
|
+
},
|
|
11
|
+
"card": {
|
|
12
|
+
"focused": [
|
|
13
|
+
{ "order": 3, "kind": "Maven", "condition": { "fact": "has-maven-pom" }, "template": "./mvnw test -Dtest={class}" }
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"dependabot": [
|
|
17
|
+
{ "order": 9, "fact": "has-maven-pom", "value": "maven", "manifest": "pom.xml" }
|
|
18
|
+
],
|
|
19
|
+
"languages": [
|
|
20
|
+
{ "lang": "java", "exts": [".java"], "testConventions": { "base": ["Tests?\\.(?:java|kt)$"] } },
|
|
21
|
+
{ "lang": "kotlin", "exts": [".kt", ".kts"], "testConventions": { "base": ["Tests?\\.(?:java|kt)$"] } }
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "node",
|
|
3
|
+
"card": {
|
|
4
|
+
"focused": [
|
|
5
|
+
{
|
|
6
|
+
"order": 14,
|
|
7
|
+
"kind": "Node",
|
|
8
|
+
"condition": { "stack": "node" },
|
|
9
|
+
"template": {
|
|
10
|
+
"static": "node --test {file}",
|
|
11
|
+
"ifScriptMatches": "vitest|jest",
|
|
12
|
+
"dynamic": "{runner} test -- {file}"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"dependabot": [
|
|
18
|
+
{ "order": 1, "stack": "node", "value": "npm", "manifest": "package.json" },
|
|
19
|
+
{ "order": 2, "stack": "typescript", "value": "npm", "manifest": "package.json" }
|
|
20
|
+
],
|
|
21
|
+
"languages": [
|
|
22
|
+
{ "lang": "javascript", "exts": [".js", ".mjs", ".cjs", ".jsx", ".ts", ".tsx"], "canonical": [".js", ".mjs", ".cjs", ".jsx"] },
|
|
23
|
+
{ "lang": "typescript", "exts": [".ts", ".tsx", ".js", ".mjs", ".jsx"], "canonical": [".ts", ".tsx"] }
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "python",
|
|
3
|
+
"card": {
|
|
4
|
+
"focused": [
|
|
5
|
+
{ "order": 6, "kind": "Python", "condition": { "fact": "has-uv-lock" }, "template": "uv run -m pytest {file}::{test}" },
|
|
6
|
+
{ "order": 7, "kind": "Python", "condition": { "facts": ["has-pyproject", "has-requirements"] }, "template": "pytest {file}::{test}" }
|
|
7
|
+
],
|
|
8
|
+
"fallback": [
|
|
9
|
+
{ "order": 1, "condition": { "fact": "has-uv-lock" }, "commands": { "test": "uv run -m pytest" } },
|
|
10
|
+
{ "order": 2, "condition": { "facts": ["has-pyproject", "has-requirements"] }, "commands": { "test": "pytest" } }
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
"dependabot": [
|
|
14
|
+
{ "order": 3, "fact": "has-pyproject", "value": "pip", "manifest": "pyproject.toml" },
|
|
15
|
+
{ "order": 4, "fact": "has-requirements", "value": "pip", "manifest": "requirements.txt" }
|
|
16
|
+
],
|
|
17
|
+
"languages": [
|
|
18
|
+
{ "lang": "python", "exts": [".py"], "testConventions": { "base": ["^test_[^/]+\\.py$"] } }
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "ruby",
|
|
3
|
+
"facts": ["has-gemfile"],
|
|
4
|
+
"tool": "bundle",
|
|
5
|
+
"manifestOrder": 6,
|
|
6
|
+
"gates": {
|
|
7
|
+
"preCommit": ["format"],
|
|
8
|
+
"prePush": ["test"],
|
|
9
|
+
"commands": {
|
|
10
|
+
"format": "bundle exec rubocop",
|
|
11
|
+
"test": "bundle exec rspec"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"card": {
|
|
15
|
+
"focused": [
|
|
16
|
+
{ "order": 11, "kind": "Ruby", "condition": { "fact": "has-gemfile" }, "template": "bundle exec rspec {file}" }
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"dependabot": [
|
|
20
|
+
{ "order": 7, "fact": "has-gemfile", "value": "bundler", "manifest": "Gemfile" }
|
|
21
|
+
],
|
|
22
|
+
"languages": [{ "lang": "ruby", "exts": [".rb"] }]
|
|
23
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "swift",
|
|
3
|
+
"facts": ["has-swift-package"],
|
|
4
|
+
"tool": "swift",
|
|
5
|
+
"manifestOrder": 4,
|
|
6
|
+
"gates": {
|
|
7
|
+
"preCommit": ["format"],
|
|
8
|
+
"prePush": ["test", "typecheck"],
|
|
9
|
+
"commands": {
|
|
10
|
+
"format": "swift format lint -r .",
|
|
11
|
+
"test": "swift test",
|
|
12
|
+
"typecheck": "swift build"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"card": {
|
|
16
|
+
"build": { "order": 4, "condition": { "fact": "has-swift-package" }, "command": "swift build" },
|
|
17
|
+
"focused": [
|
|
18
|
+
{ "order": 9, "kind": "Swift", "condition": { "fact": "has-swift-package" }, "template": "swift test --filter {test}" }
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"dependabot": [
|
|
22
|
+
{ "order": 17, "fact": "has-swift-package", "value": "swift", "manifest": "Package.swift" }
|
|
23
|
+
],
|
|
24
|
+
"languages": [{ "lang": "swift", "exts": [".swift"] }]
|
|
25
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "antigravity",
|
|
3
|
+
"loaderOrder": 5,
|
|
4
|
+
"surfaceOrder": 4,
|
|
5
|
+
"surface": {
|
|
6
|
+
"id": "antigravity",
|
|
7
|
+
"label": "Antigravity workspace rules",
|
|
8
|
+
"readers": "Antigravity IDE, Antigravity CLI",
|
|
9
|
+
"primary": null,
|
|
10
|
+
"kind": "file",
|
|
11
|
+
"rule": ".agents/rules/{name}.md",
|
|
12
|
+
"readsAgentsMd": "all",
|
|
13
|
+
"configDirs": [
|
|
14
|
+
".agents"
|
|
15
|
+
],
|
|
16
|
+
"documentedKeys": [
|
|
17
|
+
"trigger",
|
|
18
|
+
"description",
|
|
19
|
+
"globs",
|
|
20
|
+
"glob"
|
|
21
|
+
],
|
|
22
|
+
"readsPrimary": true,
|
|
23
|
+
"verified": "Google Antigravity docs, \"Rules\" — .agents/rules/*.md, YAML frontmatter with trigger: always_on | model_decision | glob | manual; missing or invalid frontmatter silently discards the rule; trigger: glob takes comma-separated globs, which the docs require to be quoted so YAML does not read a leading * as an alias anchor; a 24 KB per-file limit and a 20,000-token budget for always_on rules, with automatic demotion to pointers past it",
|
|
24
|
+
"note": "This is why frontmatter is mandatory here and why the trigger value is not guessed: an unrecognised trigger means the rule is dropped with no message."
|
|
25
|
+
},
|
|
26
|
+
"pointerOrder": 2,
|
|
27
|
+
"pointer": {
|
|
28
|
+
"id": "gemini-md",
|
|
29
|
+
"surface": "antigravity",
|
|
30
|
+
"path": "GEMINI.md",
|
|
31
|
+
"to": "AGENTS.md",
|
|
32
|
+
"readers": "Gemini CLI, Antigravity",
|
|
33
|
+
"verified": "Google Antigravity docs, \"Rules\": workspace rules are AGENTS.md or GEMINI.md in the root or any subdirectory; Copilot CLI also discovers GEMINI.md. Gemini CLI, read today: its own docs (core memory index, and the configuration reference) say the memory service loads GEMINI.md hierarchically from the working directory up to the project root and the home directory and also into subdirectories, and that `context.fileName` in settings.json \"accepts either a single string or an array of strings\" naming the context file(s) to load, default undefined",
|
|
34
|
+
"note": "Covers Gemini CLI and gives Antigravity a second, equally-native name for the same file. A repository can also point Gemini CLI at AGENTS.md itself with `context.fileName: [\"AGENTS.md\"]` and need no pointer at all, which is the reason there is no separate Gemini CLI row here: this pointer and a native row would be two ways to hand one reader the same rule."
|
|
35
|
+
},
|
|
36
|
+
"loader": {
|
|
37
|
+
"id": "antigravity",
|
|
38
|
+
"label": "Antigravity",
|
|
39
|
+
"readers": "Antigravity IDE, Antigravity CLI",
|
|
40
|
+
"surface": "antigravity",
|
|
41
|
+
"start": [
|
|
42
|
+
{
|
|
43
|
+
"scope": "project",
|
|
44
|
+
"path": ".agents/rules/{name}.md",
|
|
45
|
+
"tree": "flat",
|
|
46
|
+
"dir": ".agents/rules",
|
|
47
|
+
"suffix": ".md",
|
|
48
|
+
"frontmatter": {
|
|
49
|
+
"trigger": "always_on"
|
|
50
|
+
},
|
|
51
|
+
"atStart": true,
|
|
52
|
+
"why": "Antigravity rules docs: trigger is one of always_on, model_decision, glob, manual; model_decision injects only the path and description"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"scope": "project",
|
|
56
|
+
"path": "AGENTS.md",
|
|
57
|
+
"tree": "chain",
|
|
58
|
+
"atStart": true,
|
|
59
|
+
"why": "Antigravity rules docs: AGENTS.md, GEMINI.md and .agents/AGENTS.md in the root or any subdirectory are always-on workspace rules, and they take no frontmatter"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"scope": "user",
|
|
63
|
+
"path": "~/.gemini/config/rules/*.md",
|
|
64
|
+
"tree": "flat",
|
|
65
|
+
"dir": ".gemini/config/rules",
|
|
66
|
+
"atStart": true,
|
|
67
|
+
"why": "Antigravity rules docs: global modular rules at ~/.gemini/config/rules/*.md, alongside ~/.gemini/AGENTS.md and ~/.gemini/config/AGENTS.md"
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"alsoReads": [
|
|
71
|
+
{
|
|
72
|
+
"what": ".agents/rules/*.md with trigger: model_decision",
|
|
73
|
+
"atStart": false,
|
|
74
|
+
"why": "Antigravity rules docs: progressive disclosure — the path and description are injected and the body is opened on demand"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"what": ".agents/rules/*.md in nested directories",
|
|
78
|
+
"atStart": false,
|
|
79
|
+
"why": "Antigravity rules docs: .agents/rules/ is scanned flat — nested files are ignored unless registered in .agents/rules.json"
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"order": "rules are cumulative across the global, workspace and directory scopes; directory scope is resolved by walking up from the edited file to the workspace root",
|
|
83
|
+
"cap": {
|
|
84
|
+
"bytes": 24000,
|
|
85
|
+
"scope": "file",
|
|
86
|
+
"config": "none — a fixed limit",
|
|
87
|
+
"why": "Antigravity rules docs: a rule file is truncated at 24,000 bytes, counted after @[label](path) includes are expanded"
|
|
88
|
+
},
|
|
89
|
+
"alsoCaps": [
|
|
90
|
+
{
|
|
91
|
+
"bytes": 20000,
|
|
92
|
+
"scope": "tokens",
|
|
93
|
+
"appliesTo": "global plus always_on rules combined",
|
|
94
|
+
"why": "Antigravity rules docs: past a 20,000-token budget the largest rules are demoted to a pointer line, \"- <path>: <description>\""
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"imports": {
|
|
98
|
+
"syntax": "@[label](path)",
|
|
99
|
+
"depth": 0,
|
|
100
|
+
"why": "Antigravity rules docs: @[label](path) inlines the file before the size limits are checked, with its frontmatter stripped; a bare @filename only rewrites to a canonical absolute path"
|
|
101
|
+
},
|
|
102
|
+
"nested": "cumulative — a rule applies to its directory and every subdirectory; the .agents/rules/ scan itself is flat",
|
|
103
|
+
"skills": [],
|
|
104
|
+
"skillsNote": "no skill directory is documented for Antigravity",
|
|
105
|
+
"hooks": {
|
|
106
|
+
"path": ".agents/hooks.json",
|
|
107
|
+
"verified": "Antigravity hooks docs: workspace level .agents/hooks.json, global ~/.gemini/config/hooks.json"
|
|
108
|
+
},
|
|
109
|
+
"agents": {
|
|
110
|
+
"dir": ".agents/agents",
|
|
111
|
+
"ext": ".md",
|
|
112
|
+
"verified": "Google Antigravity subagents docs (antigravity.google/docs/subagents, read 2026-10-30): project subagents are markdown files with name and description frontmatter under .agents/agents/"
|
|
113
|
+
},
|
|
114
|
+
"mcp": {
|
|
115
|
+
"path": ".agents/mcp_config.json",
|
|
116
|
+
"key": null,
|
|
117
|
+
"verified": "Antigravity MCP docs (read 2026-10-14): \"Configured in your workspace under .agents/mcp_config.json\""
|
|
118
|
+
},
|
|
119
|
+
"verified": "Google Antigravity rules documentation (antigravity.google/docs/rules/, read 2026-10-14) — rules are cumulative across global, workspace and directory scope; .agents/rules/*.md requires frontmatter with trigger, and an invalid block silently discards the rule; the directory is scanned flat and nested files are ignored unless registered in .agents/rules.json; each rule file is truncated at 24,000 bytes after includes are expanded, and global plus always_on rules share a 20,000-token budget past which the largest are demoted to pointers",
|
|
120
|
+
"note": "The flat scan is the fact that made the meter wrong before this table existed: a recursive walk of .agents/rules/ counts bytes for files Antigravity never reads."
|
|
121
|
+
},
|
|
122
|
+
"scopeKey": true,
|
|
123
|
+
"hooks": {
|
|
124
|
+
"id": "antigravity",
|
|
125
|
+
"event": "PreToolUse",
|
|
126
|
+
"matcher": "run_command|write_to_file|replace_file_content|multi_replace_file_content",
|
|
127
|
+
"denyExit": 0,
|
|
128
|
+
"verified": "antigravity.google/docs/hooks, read 2026-10-16",
|
|
129
|
+
"prompt": null,
|
|
130
|
+
"post": null,
|
|
131
|
+
"deny": {
|
|
132
|
+
"decision": "deny",
|
|
133
|
+
"reason": "__SIMT_TEXT__"
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"payload": {
|
|
137
|
+
"toolKey": "toolCall",
|
|
138
|
+
"toolNameKey": "name",
|
|
139
|
+
"inputSubKey": "args",
|
|
140
|
+
"shellTools": [
|
|
141
|
+
"run_command"
|
|
142
|
+
],
|
|
143
|
+
"commandKey": "CommandLine",
|
|
144
|
+
"writeTools": [
|
|
145
|
+
"write_to_file",
|
|
146
|
+
"replace_file_content",
|
|
147
|
+
"multi_replace_file_content"
|
|
148
|
+
],
|
|
149
|
+
"pathKeys": [
|
|
150
|
+
"TargetFile"
|
|
151
|
+
],
|
|
152
|
+
"rootKeys": [
|
|
153
|
+
[
|
|
154
|
+
"workspacePaths",
|
|
155
|
+
0
|
|
156
|
+
],
|
|
157
|
+
[
|
|
158
|
+
"cwd"
|
|
159
|
+
]
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
}
|