Skip to content

Commit 27dd540

Browse files
duyetduyetbot
andcommitted
feat(agent-loop): add antigravity block and interface metadata to Antigravity manifest
- Populate antigravity capabilities and interface block in agent-loop/.antigravity-plugin/plugin.json - Update scripts/validate-plugins.sh to validate interface and mode objects for Antigravity mode Co-Authored-By: duyetbot <duyetbot@users.noreply.github.com>
1 parent a52a552 commit 27dd540

2 files changed

Lines changed: 39 additions & 3 deletions

File tree

agent-loop/.antigravity-plugin/plugin.json

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,28 @@
55
"author": { "name": "duyetbot" },
66
"license": "MIT",
77
"skills": "./skills/",
8-
"commands": "./commands/"
8+
"commands": "./commands/",
9+
"antigravity": {
10+
"skills": [
11+
"agent-loop-orchestrator",
12+
"agent-loop-triage",
13+
"agent-loop-autoreview",
14+
"agent-loop-browser"
15+
],
16+
"commands": [
17+
"agent-loop:start",
18+
"agent-loop:stop",
19+
"agent-loop:status",
20+
"agent-loop:triage",
21+
"agent-loop:autoreview",
22+
"agent-loop:resume"
23+
]
24+
},
25+
"interface": {
26+
"displayName": "Agent Loop",
27+
"shortDescription": "Continuous overnight/day repo maintenance with autonomous agent loops. Triage, autoreview, browser automation, and parallel agent work.",
28+
"developerName": "duyetbot",
29+
"category": "Automation",
30+
"capabilities": ["Skill", "Command"]
31+
}
932
}

scripts/validate-plugins.sh

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,11 @@ if mode in ("codex", "antigravity"):
8080
if not os.path.exists(target):
8181
errors.append(f"'{field}' path does not exist: {value}")
8282
83-
if mode == "codex":
83+
if mode in ("codex", "antigravity"):
8484
interface = data.get("interface")
85-
if not isinstance(interface, dict):
85+
if interface is None:
86+
errors.append("missing required field: 'interface'")
87+
elif not isinstance(interface, dict):
8688
errors.append("'interface' must be an object")
8789
else:
8890
for field in ("displayName", "shortDescription", "developerName", "category"):
@@ -93,6 +95,17 @@ if mode == "codex":
9395
if not isinstance(capabilities, list) or not all(isinstance(item, str) and item.strip() for item in capabilities):
9496
errors.append("'interface.capabilities' must be an array of non-empty strings")
9597
98+
mode_obj = data.get(mode)
99+
if mode_obj is not None:
100+
if not isinstance(mode_obj, dict):
101+
errors.append(f"'{mode}' must be an object")
102+
else:
103+
for field in ("skills", "commands"):
104+
val = mode_obj.get(field)
105+
if val is not None:
106+
if not isinstance(val, list) or not all(isinstance(item, str) and item.strip() for item in val):
107+
errors.append(f"'{mode}.{field}' must be an array of non-empty strings")
108+
96109
if errors:
97110
for error in errors:
98111
print(f" - {error}", file=sys.stderr)

0 commit comments

Comments
 (0)