@mrpatronz/nexusflow 2.2.1 → 2.3.1
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/README.md +80 -17
- package/dist/agent/AntigravityCliAdapter.d.ts +14 -1
- package/dist/agent/AntigravityCliAdapter.d.ts.map +1 -1
- package/dist/agent/AntigravityCliAdapter.js +84 -4
- package/dist/agent/AntigravityCliAdapter.js.map +1 -1
- package/dist/agent/AntigravityCliAdapter.test.d.ts +2 -0
- package/dist/agent/AntigravityCliAdapter.test.d.ts.map +1 -0
- package/dist/agent/AntigravityCliAdapter.test.js +222 -0
- package/dist/agent/AntigravityCliAdapter.test.js.map +1 -0
- package/dist/agent/adapters.d.ts.map +1 -1
- package/dist/agent/adapters.js +19 -1
- package/dist/agent/adapters.js.map +1 -1
- package/dist/commands/ui.d.ts +1 -0
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +24 -13
- package/dist/commands/ui.js.map +1 -1
- package/dist/commands/ui.test.d.ts +2 -0
- package/dist/commands/ui.test.d.ts.map +1 -0
- package/dist/commands/ui.test.js +58 -0
- package/dist/commands/ui.test.js.map +1 -0
- package/dist/core/workspace-skills-workflow.integration.test.d.ts +2 -0
- package/dist/core/workspace-skills-workflow.integration.test.d.ts.map +1 -0
- package/dist/core/workspace-skills-workflow.integration.test.js +162 -0
- package/dist/core/workspace-skills-workflow.integration.test.js.map +1 -0
- package/dist/core/worktree.test.js +1 -1
- package/dist/core/worktree.test.js.map +1 -1
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +4 -8
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/skills-generator.d.ts +2 -2
- package/dist/generators/skills-generator.d.ts.map +1 -1
- package/dist/generators/skills-generator.js +84 -89
- package/dist/generators/skills-generator.js.map +1 -1
- package/dist/generators/skills-generator.test.d.ts +2 -0
- package/dist/generators/skills-generator.test.d.ts.map +1 -0
- package/dist/generators/skills-generator.test.js +79 -0
- package/dist/generators/skills-generator.test.js.map +1 -0
- package/dist/gui/assets/AgentsPage-C7wGK7q-.js +3 -0
- package/dist/gui/assets/{DashboardPage-CUspfCap.js → DashboardPage-DqZRdOF3.js} +1 -1
- package/dist/gui/assets/{GettingStartedPage-BqtgARZW.js → GettingStartedPage-BJvrh67p.js} +1 -1
- package/dist/gui/assets/ProjectsPage-B0VFV1vX.js +1 -0
- package/dist/gui/assets/ScaffoldRepoInline-DSt_6QLb.js +1 -0
- package/dist/gui/assets/SettingsPage-DO5HasvS.js +1 -0
- package/dist/gui/assets/SkillsPage-CvRIKdsQ.js +6 -0
- package/dist/gui/assets/StartWorkPage-CK5QF6Oa.js +1 -0
- package/dist/gui/assets/{StrategiesPage-D0Y6A4Tw.js → StrategiesPage-CWMrYI29.js} +2 -2
- package/dist/gui/assets/WorkspaceLauncher-EIY_u44S.js +1 -0
- package/dist/gui/assets/WorkspacesPage-CHUfqrA6.js +6 -0
- package/dist/gui/assets/alert-dialog-CroDe9HW.js +1 -0
- package/dist/gui/assets/bot-wH0FKlic.js +1 -0
- package/dist/gui/assets/chevron-down-DDmhvRLr.js +1 -0
- package/dist/gui/assets/code-xml-Chu1p81J.js +1 -0
- package/dist/gui/assets/index-Bq5NL5AJ.css +2 -0
- package/dist/gui/assets/index-CcIOIZ24.js +52 -0
- package/dist/gui/assets/{spinner-DXt6mnJk.js → spinner-BCEaGbib.js} +1 -1
- package/dist/gui/assets/terminal-gK6BMl3E.js +1 -0
- package/dist/gui/assets/{textarea-BLU5HXmZ.js → textarea-D3-elOAa.js} +1 -1
- package/dist/gui/assets/{useAriaLabelledBy-CjNlctb9.js → useAriaLabelledBy-DmwmZIqb.js} +1 -1
- package/dist/gui/assets/useCompositeListItem-CZnlZ-eF.js +1 -0
- package/dist/gui/assets/useValueChanged-BfI2s7NX.js +1 -0
- package/dist/gui/assets/zap-FQrDnrgb.js +1 -0
- package/dist/gui/index.html +6 -4
- package/dist/resources/agents-catalog.d.ts +7 -0
- package/dist/resources/agents-catalog.d.ts.map +1 -0
- package/dist/resources/agents-catalog.js +141 -0
- package/dist/resources/agents-catalog.js.map +1 -0
- package/dist/resources/agents-catalog.test.d.ts +2 -0
- package/dist/resources/agents-catalog.test.d.ts.map +1 -0
- package/dist/resources/agents-catalog.test.js +50 -0
- package/dist/resources/agents-catalog.test.js.map +1 -0
- package/dist/resources/codex-agent.d.ts +6 -0
- package/dist/resources/codex-agent.d.ts.map +1 -0
- package/dist/resources/codex-agent.js +55 -0
- package/dist/resources/codex-agent.js.map +1 -0
- package/dist/resources/codex-agent.test.d.ts +2 -0
- package/dist/resources/codex-agent.test.d.ts.map +1 -0
- package/dist/resources/codex-agent.test.js +27 -0
- package/dist/resources/codex-agent.test.js.map +1 -0
- package/dist/resources/contracts.d.ts +116 -0
- package/dist/resources/contracts.d.ts.map +1 -0
- package/dist/resources/contracts.js +103 -0
- package/dist/resources/contracts.js.map +1 -0
- package/dist/resources/fs-safety.d.ts +11 -0
- package/dist/resources/fs-safety.d.ts.map +1 -0
- package/dist/resources/fs-safety.js +77 -0
- package/dist/resources/fs-safety.js.map +1 -0
- package/dist/resources/materializer.d.ts +17 -0
- package/dist/resources/materializer.d.ts.map +1 -0
- package/dist/resources/materializer.js +439 -0
- package/dist/resources/materializer.js.map +1 -0
- package/dist/resources/materializer.test.d.ts +2 -0
- package/dist/resources/materializer.test.d.ts.map +1 -0
- package/dist/resources/materializer.test.js +149 -0
- package/dist/resources/materializer.test.js.map +1 -0
- package/dist/resources/service.d.ts +8 -0
- package/dist/resources/service.d.ts.map +1 -0
- package/dist/resources/service.js +45 -0
- package/dist/resources/service.js.map +1 -0
- package/dist/resources/service.test.d.ts +2 -0
- package/dist/resources/service.test.d.ts.map +1 -0
- package/dist/resources/service.test.js +58 -0
- package/dist/resources/service.test.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +310 -4
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +349 -1
- package/dist/server.test.js.map +1 -1
- package/dist/types.d.ts +107 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/resources.d.ts +2 -1
- package/dist/utils/resources.d.ts.map +1 -1
- package/dist/utils/resources.js +4 -3
- package/dist/utils/resources.js.map +1 -1
- package/dist/utils/session-finder.d.ts +6 -0
- package/dist/utils/session-finder.d.ts.map +1 -1
- package/dist/utils/session-finder.js +56 -0
- package/dist/utils/session-finder.js.map +1 -1
- package/dist/utils/session-finder.test.js +34 -1
- package/dist/utils/session-finder.test.js.map +1 -1
- package/dist/utils/skills-catalog.d.ts +77 -0
- package/dist/utils/skills-catalog.d.ts.map +1 -0
- package/dist/utils/skills-catalog.js +871 -0
- package/dist/utils/skills-catalog.js.map +1 -0
- package/dist/utils/skills-catalog.test.d.ts +2 -0
- package/dist/utils/skills-catalog.test.d.ts.map +1 -0
- package/dist/utils/skills-catalog.test.js +281 -0
- package/dist/utils/skills-catalog.test.js.map +1 -0
- package/package.json +4 -1
- package/dist/gui/assets/ProjectsPage-UBoQxI2G.js +0 -1
- package/dist/gui/assets/ScaffoldRepoInline-DqoourJe.js +0 -1
- package/dist/gui/assets/SettingsPage-BZl24tqD.js +0 -1
- package/dist/gui/assets/StartWorkPage-BGNFdBfj.js +0 -1
- package/dist/gui/assets/WorkspaceLauncher-Cxv0O_wt.js +0 -1
- package/dist/gui/assets/WorkspacesPage-Cvb1rOeh.js +0 -6
- package/dist/gui/assets/index-CllPiiFL.js +0 -52
- package/dist/gui/assets/index-DGCBhMAn.css +0 -2
- package/dist/gui/assets/useCompositeListItem-DWGFLKqA.js +0 -1
- /package/dist/{resources → static-resources}/workflows/plan-implement-review.md +0 -0
- /package/dist/{resources → static-resources}/workflows/research-verify.md +0 -0
- /package/dist/{resources → static-resources}/workflows/solo-developer.md +0 -0
package/README.md
CHANGED
|
@@ -23,8 +23,11 @@ NexusFlow combines multiple Git repositories into a single feature workspace and
|
|
|
23
23
|
- **AI context generation** — automatically writes `CLAUDE.md`, `AGENTS.md`, `.github/copilot-instructions.md`, and `.cursor/rules/nexusflow.mdc`
|
|
24
24
|
- **Drive it from your assistant** — an MCP server exposes the whole loop (status, diff, commit, sync, refresh, doctor, knowledge, finish) so your AI can run it without leaving the session
|
|
25
25
|
- **Smart codebase analysis** — detects tech stacks, ports, API endpoints, dependencies, and existing AI configs across all projects
|
|
26
|
+
- **Resource Library** — create and administer reusable Agent Skill folders and Codex-native custom agents, then assign them to workspaces
|
|
27
|
+
- **Owned Resource Deployment** — installs portable skills to native discovery folders and Codex agents to `.codex/agents/`, refusing unmanaged collisions and preserving locally modified files
|
|
26
28
|
- **Teamwork Strategy Workflows** — predefine coordination flows and subagent behaviors (e.g. plan-implement-review) and inspect them with local AI coding assistant harnesses
|
|
27
29
|
- **Session history & resumption** — browse past conversation transcripts from Antigravity, Claude Code, OpenAI Codex, and GitHub Copilot, then resume where you left off
|
|
30
|
+
|
|
28
31
|
- **Incremental, token-efficient refresh** — an analysis cache fingerprints each repo (HEAD + dirty files), so `refresh`/`sync` only re-analyze repos that changed and unchanged maps stay byte-identical (keeping your AI assistant's prompt cache warm)
|
|
29
32
|
- **Scheduled workspace jobs** — recurring `sync`/`refresh` per workspace (e.g. every 2h) that run while the dashboard server is up, so context files stay fresh without manual runs
|
|
30
33
|
- **Service orchestration** — start, stop, and tail logs for all services in a workspace with a single command
|
|
@@ -122,21 +125,29 @@ In isolated worktree mode:
|
|
|
122
125
|
|
|
123
126
|
```
|
|
124
127
|
~/dev/workspaces/feature/user-auth/
|
|
125
|
-
├── CLAUDE.md # Context for Claude
|
|
126
|
-
├── AGENTS.md #
|
|
128
|
+
├── CLAUDE.md # Context for Claude Code
|
|
129
|
+
├── AGENTS.md # Canonical context for Antigravity, Codex & agents
|
|
130
|
+
├── .agents/
|
|
131
|
+
│ └── skills/ # Skills for Google Antigravity (SKILL.md + assets)
|
|
132
|
+
├── .claude/
|
|
133
|
+
│ └── skills/ # Skills for Claude Code (SKILL.md + assets)
|
|
134
|
+
├── .codex/
|
|
135
|
+
│ └── skills/ # Skills for OpenAI Codex (SKILL.md + assets)
|
|
127
136
|
├── .github/
|
|
128
|
-
│
|
|
137
|
+
│ ├── copilot-instructions.md # Context for GitHub Copilot
|
|
138
|
+
│ └── instructions/ # Scoped skill instructions for Copilot
|
|
129
139
|
├── .cursor/
|
|
130
|
-
│ └── rules/
|
|
140
|
+
│ └── rules/ # Context & rules for Cursor (.mdc)
|
|
131
141
|
├── nexusflow.json # Feature config (branch, repos, etc.)
|
|
132
142
|
├── nexusflow-overview.md # AI-generated workspace analysis
|
|
143
|
+
├── nexusflow-knowledge.md # Persistent workspace memory (decisions & gotchas)
|
|
133
144
|
├── my-api/ # ← Git worktree on feature branch
|
|
134
145
|
└── my-frontend/ # ← Git worktree on feature branch
|
|
135
146
|
```
|
|
136
147
|
|
|
137
|
-
In-place workspaces keep the manifest and generated AI context files in the workspace directory while the code stays in the source repositories.
|
|
148
|
+
In-place workspaces keep the manifest, skills, and generated AI context files in the workspace directory while the code stays in the source repositories.
|
|
138
149
|
|
|
139
|
-
Open this folder in your editor → your AI assistant picks up the context → it understands *all* your repos.
|
|
150
|
+
Open this folder in your editor → your AI assistant picks up the context and skills → it understands *all* your repos.
|
|
140
151
|
|
|
141
152
|
## 🖥️ Commands
|
|
142
153
|
|
|
@@ -173,14 +184,16 @@ Open this folder in your editor → your AI assistant picks up the context → i
|
|
|
173
184
|
|
|
174
185
|
## 🤖 Supported AI Assistants
|
|
175
186
|
|
|
176
|
-
NexusFlow auto-detects which assistants are available on your machine and generates the right context files for each:
|
|
187
|
+
NexusFlow auto-detects which assistants are available on your machine and generates the right context files and skills for each:
|
|
177
188
|
|
|
178
|
-
| Assistant | Config File | How It's Detected |
|
|
189
|
+
| Assistant | Config File & Skills Target | How It's Detected |
|
|
179
190
|
|:---|:---|:---|
|
|
180
|
-
| **
|
|
181
|
-
| **
|
|
182
|
-
| **
|
|
183
|
-
| **
|
|
191
|
+
| **Google Antigravity** | `AGENTS.md` & `.agents/skills/` | `antigravity` in PATH |
|
|
192
|
+
| **Claude Code** | `CLAUDE.md` & `.claude/skills/` | `claude` in PATH |
|
|
193
|
+
| **OpenAI Codex** | `AGENTS.md`, `.agents/skills/` & `.codex/agents/` | `codex` in PATH |
|
|
194
|
+
| **GitHub Copilot** | `.github/copilot-instructions.md` & `.agents/skills/` | Always available |
|
|
195
|
+
| **Cursor** | `.cursor/rules/nexusflow.mdc` & `.agents/skills/` | `cursor` in PATH |
|
|
196
|
+
|
|
184
197
|
|
|
185
198
|
## 🔁 The Feature Loop: create → work → learn → finish
|
|
186
199
|
|
|
@@ -298,6 +311,45 @@ Jobs are stored in `~/.nexusflow/schedules.json` and executed while a NexusFlow
|
|
|
298
311
|
|
|
299
312
|
Scheduled runs are **token-efficient by design**: they use the same analysis cache as `nexusflow refresh`, so only repos whose content changed are re-analyzed, and unchanged context files are left byte-identical (no git churn, no invalidated AI prompt caches). The dashboard API exposes the same functionality under `/api/schedules`.
|
|
300
313
|
|
|
314
|
+
## 🧩 Resource Library
|
|
315
|
+
|
|
316
|
+
NexusFlow provides separate libraries for portable Agent Skills and Codex-native custom agents. Skills are complete directories; agents are validated native TOML definitions rather than skills disguised as personas.
|
|
317
|
+
|
|
318
|
+
Skills bundle metadata triggers (for AI autonomous discovery) with full Markdown execution playbooks, auxiliary reference runbooks (`references/`), and automation scripts (`scripts/`).
|
|
319
|
+
|
|
320
|
+
### Category Boxes & Visual Drag-and-Drop
|
|
321
|
+
|
|
322
|
+
Skills are grouped into clear visual accordion boxes by category. You can drag and drop skill cards between category boxes to re-categorize them, or use the quick menu on touch and mobile devices.
|
|
323
|
+
|
|
324
|
+
#### Built-in Category Templates & Skills:
|
|
325
|
+
- 🔀 **Pull Requests & Review**: `pr-review-toolkit`, `pr-description-gen`, `merge-conflict-resolver`
|
|
326
|
+
- 🧪 **Testing & Quality Assurance**: `verifier-workspace`, `e2e-runner`, `unit-test-coverage`
|
|
327
|
+
- 📦 **Cross-Repo & Release Ordering**: `nexusflow-local-package-loop`, `nexusflow-release-ordering`
|
|
328
|
+
- 🗄️ **Database & Migrations**: `schema-migration-validator`, `sql-fluff-linter`
|
|
329
|
+
- 🛡️ **Security & Auditing**: `secret-scanner`, `security-auditor`
|
|
330
|
+
|
|
331
|
+
#### Custom Categories & Workspace Scoping
|
|
332
|
+
- **Custom Categories**: Users can create, customize (colors, icons, descriptions), or delete custom categories. Custom overrides to built-in templates can be deleted at any time to restore default values.
|
|
333
|
+
- **Workspace Scoping**: Switch the scope dropdown to a feature workspace, edit a local draft, and save the complete selection with an optimistic revision check. Refresh the workspace to reconcile the saved selection.
|
|
334
|
+
|
|
335
|
+
### Codex Agent Administration
|
|
336
|
+
|
|
337
|
+
The Codex Agent Library supports creating, editing, importing, and deleting basic native agents with `name`, `description`, and `developer_instructions`, plus optional model, reasoning, and sandbox defaults. Selected agents are installed at `.codex/agents/<name>.toml`. Provider-neutral agent translation, agent teams, and collaboration kits are intentionally outside this feature.
|
|
338
|
+
|
|
339
|
+
### Cross-Harness Deployment
|
|
340
|
+
|
|
341
|
+
When a workspace is refreshed, NexusFlow reconciles enabled resources through `.nexusflow/resources.lock.json`. It refuses unmanaged target collisions, removes only unchanged NexusFlow-owned outputs, and reports modified-file conflicts instead of overwriting them.
|
|
342
|
+
|
|
343
|
+
| Assistant Harness | Deployment Path | Format |
|
|
344
|
+
|:---|:---|:---|
|
|
345
|
+
| **Google Antigravity** | `.agents/skills/<name>/SKILL.md` | YAML frontmatter + Markdown body + `references/` + `scripts/` |
|
|
346
|
+
| **Claude Code** | `.claude/skills/<name>/SKILL.md` | YAML frontmatter + Markdown body + `references/` + `scripts/` |
|
|
347
|
+
| **OpenAI Codex** | `.agents/skills/<name>/SKILL.md` | Complete portable Agent Skill directory |
|
|
348
|
+
| **Cursor** | `.agents/skills/<name>/SKILL.md` | Complete portable Agent Skill directory |
|
|
349
|
+
| **GitHub Copilot** | `.agents/skills/<name>/SKILL.md` | Complete portable Agent Skill directory |
|
|
350
|
+
|
|
351
|
+
Codex custom agents are separate resources and deploy to `.codex/agents/<name>.toml`.
|
|
352
|
+
|
|
301
353
|
## 👥 Teamwork Strategy Workflows
|
|
302
354
|
|
|
303
355
|
NexusFlow allows you to predefine orchestration workflows and cooperation rules that govern how multiple AI subagents coordinate when solving complex, multi-repo software engineering tasks.
|
|
@@ -322,12 +374,15 @@ The dashboard integrates an **AI Strategy Analysis** inspector:
|
|
|
322
374
|
The primary GUI is the Electron desktop app in `desktop/` (`npm install && npm start` there). It embeds the same dashboard the browser sees. For browser access, run `nexusflow dashboard`; `nexusflow ui` starts the underlying server without opening anything (add `--open` to launch a browser). For the platform rationale (Electron vs Tauri and friends), see [docs/desktop-platform.md](docs/desktop-platform.md). The dashboard is a full-featured dark-themed GUI:
|
|
323
375
|
|
|
324
376
|
- **Workspaces tab** — create, browse, and manage feature workspaces
|
|
325
|
-
- **
|
|
377
|
+
- **Skills & Agents tab** — manage reusable skills, categories, drag-and-drop boxes, and workspace skill assignments
|
|
378
|
+
- **Team Strategies tab** — inspect and author coordination workflows and multi-agent roles
|
|
379
|
+
- **Open with…** — launch the workspace directly in a detected Codex Desktop, Claude Desktop, VS Code, VS Code Insiders, Cursor, JetBrains IDE, or other supported editor; unavailable apps stay out of the primary picker
|
|
326
380
|
- **Chat tab** — use local CLI harnesses directly; Codex reuses `codex login` for workspace-write chat and GitHub Copilot reuses `copilot login` for read-only ACP chat, so NexusFlow does not need their API keys
|
|
327
381
|
- **Sessions tab** — view past AI conversation transcripts and resume sessions
|
|
328
382
|
- **Logs panel** — real-time aggregated service log output
|
|
329
383
|
- **Config panel** — edit NexusFlow settings from the browser
|
|
330
384
|
|
|
385
|
+
|
|
331
386
|
The deprecated `POST /api/open-editor` endpoint remains available to older GUI clients only for recognized graphical editors. Interactive terminal editors such as Vim, Neovim, Nano, and Emacs are not supported by that detached HTTP launch route because it cannot provide a TTY.
|
|
332
387
|
|
|
333
388
|
The dashboard runs a local [Hono](https://hono.dev) server on port 3000 and serves a [React](https://react.dev) + [Vite](https://vite.dev) frontend.
|
|
@@ -385,14 +440,17 @@ NexusFlow/
|
|
|
385
440
|
│ │ ├── detect-deps.ts # Dependency analysis
|
|
386
441
|
│ │ ├── detect-existing.ts# Existing AI config detection
|
|
387
442
|
│ │ └── readme-summarizer.ts# README content extraction
|
|
388
|
-
│ ├── generators/ # AI context file generators
|
|
443
|
+
│ ├── generators/ # AI context file & skill generators
|
|
389
444
|
│ │ ├── base.ts # Shared context builder
|
|
390
445
|
│ │ ├── claude.ts # CLAUDE.md generator
|
|
391
|
-
│ │ ├──
|
|
446
|
+
│ │ ├── antigravity.ts # Antigravity AGENTS.md generator
|
|
447
|
+
│ │ ├── codex.ts # Codex AGENTS.md generator
|
|
392
448
|
│ │ ├── copilot.ts # copilot-instructions.md generator
|
|
393
|
-
│ │
|
|
449
|
+
│ │ ├── cursor.ts # nexusflow.mdc generator
|
|
450
|
+
│ │ └── skills-generator.ts # Cross-harness skill deployment (.agents, .claude, .cursor, .codex)
|
|
394
451
|
│ ├── orchestration/ # Service start/stop/log management
|
|
395
452
|
│ └── utils/ # Helper utilities
|
|
453
|
+
│ ├── skills-catalog.ts # Skills & Categories catalog manager (~/.nexusflow/)
|
|
396
454
|
│ ├── git.ts # Git operations
|
|
397
455
|
│ ├── detect-ai.ts # AI assistant detection
|
|
398
456
|
│ ├── detect-editors.ts # Editor detection
|
|
@@ -400,11 +458,16 @@ NexusFlow/
|
|
|
400
458
|
│ └── prompts.ts # Interactive prompts
|
|
401
459
|
├── gui/ # React + Vite Web Dashboard
|
|
402
460
|
│ └── src/
|
|
403
|
-
│
|
|
461
|
+
│ ├── pages/
|
|
462
|
+
│ │ ├── WorkspacesPage.tsx # Workspaces & launch targets
|
|
463
|
+
│ │ ├── SkillsPage.tsx # Skills & Agents categorized drag-and-drop hub
|
|
464
|
+
│ │ └── StrategiesPage.tsx # Teamwork strategy inspector
|
|
465
|
+
│ └── App.tsx # Main application routing & layout
|
|
404
466
|
├── package.json
|
|
405
467
|
└── tsconfig.json
|
|
406
468
|
```
|
|
407
469
|
|
|
470
|
+
|
|
408
471
|
## 🤝 Contributing
|
|
409
472
|
|
|
410
473
|
Contributions are welcome! Here's how to get set up:
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
import { CliAdapterBase } from './CliAdapterBase.js';
|
|
2
|
+
import { type AgentSession } from './session.js';
|
|
3
|
+
import type { AgentExecutionProfile } from './ProviderRegistry.js';
|
|
4
|
+
export declare function getAntigravityHistoryPath(): string;
|
|
5
|
+
/**
|
|
6
|
+
* Searches Antigravity's history.jsonl for the newest session matching cwd and started at or after turnStartTime.
|
|
7
|
+
*/
|
|
8
|
+
export declare function findAntigravitySessionIdForWorkspace(cwd: string, sinceEpochMs: number, historyPath?: string): string | null;
|
|
9
|
+
export declare function buildAntigravityTurnArgs(isFirstTurn: boolean, prompt: string, session?: AgentSession, executionProfile?: AgentExecutionProfile): string[];
|
|
2
10
|
export declare class AntigravityCliAdapter extends CliAdapterBase {
|
|
3
11
|
protected readonly binary = "agy";
|
|
4
12
|
protected readonly label = "agy CLI";
|
|
5
|
-
|
|
13
|
+
private session?;
|
|
14
|
+
private turnStartTime;
|
|
15
|
+
start(cwd: string, session?: AgentSession): Promise<void>;
|
|
16
|
+
send(data: string, executionProfile?: AgentExecutionProfile): Promise<void>;
|
|
17
|
+
protected finishStdout(_exitCode: number | null): boolean;
|
|
18
|
+
protected buildArgs(isFirstTurn: boolean, prompt: string, executionProfile?: AgentExecutionProfile): string[];
|
|
6
19
|
}
|
|
7
20
|
//# sourceMappingURL=AntigravityCliAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AntigravityCliAdapter.d.ts","sourceRoot":"","sources":["../../src/agent/AntigravityCliAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AntigravityCliAdapter.d.ts","sourceRoot":"","sources":["../../src/agent/AntigravityCliAdapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,wBAAgB,yBAAyB,IAAI,MAAM,CAGlD;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAClD,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,WAAW,SAA8B,GACxC,MAAM,GAAG,IAAI,CA6Bf;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,YAAY,EACtB,gBAAgB,GAAE,qBAAgC,GACjD,MAAM,EAAE,CAiBV;AAED,qBAAa,qBAAsB,SAAQ,cAAc;IACvD,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAS;IAClC,SAAS,CAAC,QAAQ,CAAC,KAAK,aAAa;IAIrC,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,aAAa,CAAa;IAErB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;cAK9E,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAalE,SAAS,CAAC,SAAS,CACjB,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,MAAM,EACd,gBAAgB,CAAC,EAAE,qBAAqB,GACvC,MAAM,EAAE;CAGZ"}
|
|
@@ -1,13 +1,93 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import * as os from 'node:os';
|
|
1
4
|
import { CliAdapterBase } from './CliAdapterBase.js';
|
|
5
|
+
import { isValidSessionUuid } from './session.js';
|
|
6
|
+
export function getAntigravityHistoryPath() {
|
|
7
|
+
const agDir = process.env.ANTIGRAVITY_HOME || path.join(os.homedir(), '.gemini', 'antigravity-cli');
|
|
8
|
+
return path.join(agDir, 'history.jsonl');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Searches Antigravity's history.jsonl for the newest session matching cwd and started at or after turnStartTime.
|
|
12
|
+
*/
|
|
13
|
+
export function findAntigravitySessionIdForWorkspace(cwd, sinceEpochMs, historyPath = getAntigravityHistoryPath()) {
|
|
14
|
+
try {
|
|
15
|
+
if (!fs.existsSync(historyPath))
|
|
16
|
+
return null;
|
|
17
|
+
const content = fs.readFileSync(historyPath, 'utf-8');
|
|
18
|
+
const lines = content.split('\n').filter(Boolean);
|
|
19
|
+
const normalize = (p) => path.normalize(p).toLowerCase();
|
|
20
|
+
const normCwd = normalize(cwd);
|
|
21
|
+
// Scan backwards from newest entry
|
|
22
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
23
|
+
try {
|
|
24
|
+
const entry = JSON.parse(lines[i]);
|
|
25
|
+
if (!entry.conversationId || !isValidSessionUuid(entry.conversationId))
|
|
26
|
+
continue;
|
|
27
|
+
if (!entry.workspace)
|
|
28
|
+
continue;
|
|
29
|
+
const normEntryWs = normalize(entry.workspace);
|
|
30
|
+
const matchesWs = normEntryWs === normCwd ||
|
|
31
|
+
normEntryWs.startsWith(normCwd + path.sep) ||
|
|
32
|
+
normCwd.startsWith(normEntryWs + path.sep);
|
|
33
|
+
if (!matchesWs)
|
|
34
|
+
continue;
|
|
35
|
+
const timestamp = typeof entry.timestamp === 'number' ? entry.timestamp : new Date(entry.timestamp).getTime();
|
|
36
|
+
if (!Number.isNaN(timestamp) && timestamp >= sinceEpochMs - 10000) {
|
|
37
|
+
return entry.conversationId;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch { }
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch { }
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
export function buildAntigravityTurnArgs(isFirstTurn, prompt, session, executionProfile = 'review') {
|
|
47
|
+
const args = [];
|
|
48
|
+
// --conversation only loads an existing provider-owned conversation. It is
|
|
49
|
+
// not a caller-assigned session id, so a new chat must let agy create one.
|
|
50
|
+
if (session?.resume) {
|
|
51
|
+
args.push('--conversation', session.id);
|
|
52
|
+
}
|
|
53
|
+
else if (!isFirstTurn) {
|
|
54
|
+
args.push('-c');
|
|
55
|
+
}
|
|
56
|
+
// Never inherit agy's persisted global mode. The profile selected for this
|
|
57
|
+
// turn is the authority for whether the harness may edit the workspace.
|
|
58
|
+
args.push('--mode', executionProfile === 'workspace-write' ? 'accept-edits' : 'plan');
|
|
59
|
+
args.push('-p', prompt);
|
|
60
|
+
return args;
|
|
61
|
+
}
|
|
2
62
|
export class AntigravityCliAdapter extends CliAdapterBase {
|
|
3
63
|
binary = 'agy';
|
|
4
64
|
label = 'agy CLI';
|
|
5
65
|
// agy is a native binary: reads the prompt from argv and needs no shell
|
|
6
66
|
// (argv is passed literally, so multi-word prompts are safe without quoting).
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
67
|
+
session;
|
|
68
|
+
turnStartTime = 0;
|
|
69
|
+
async start(cwd, session) {
|
|
70
|
+
this.session = session;
|
|
71
|
+
this.turnStartTime = 0;
|
|
72
|
+
await super.start(cwd);
|
|
73
|
+
}
|
|
74
|
+
async send(data, executionProfile) {
|
|
75
|
+
this.turnStartTime = Date.now();
|
|
76
|
+
return super.send(data, executionProfile);
|
|
77
|
+
}
|
|
78
|
+
finishStdout(_exitCode) {
|
|
79
|
+
if (this.session?.id && this.session.resume) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
const capturedId = findAntigravitySessionIdForWorkspace(this.cwd, this.turnStartTime);
|
|
83
|
+
if (capturedId) {
|
|
84
|
+
this.session = { id: capturedId, resume: true };
|
|
85
|
+
this.emit('session', capturedId);
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
buildArgs(isFirstTurn, prompt, executionProfile) {
|
|
90
|
+
return buildAntigravityTurnArgs(isFirstTurn, prompt, this.session, executionProfile);
|
|
11
91
|
}
|
|
12
92
|
}
|
|
13
93
|
//# sourceMappingURL=AntigravityCliAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AntigravityCliAdapter.js","sourceRoot":"","sources":["../../src/agent/AntigravityCliAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"AntigravityCliAdapter.js","sourceRoot":"","sources":["../../src/agent/AntigravityCliAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AntigravityCliAdapter.test.d.ts","sourceRoot":"","sources":["../../src/agent/AntigravityCliAdapter.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import * as os from 'node:os';
|
|
4
|
+
import { EventEmitter } from 'node:events';
|
|
5
|
+
import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest';
|
|
6
|
+
import { AntigravityCliAdapter, buildAntigravityTurnArgs, findAntigravitySessionIdForWorkspace, } from './AntigravityCliAdapter.js';
|
|
7
|
+
const SESSION_ID = '123e4567-e89b-42d3-a456-426614174000';
|
|
8
|
+
const CAPTURED_SESSION_ID = '987fcdeb-51a2-43d7-b654-321098765432';
|
|
9
|
+
class FakeChild extends EventEmitter {
|
|
10
|
+
stdin = { write: vi.fn(), end: vi.fn() };
|
|
11
|
+
stdout = new EventEmitter();
|
|
12
|
+
stderr = new EventEmitter();
|
|
13
|
+
killed = false;
|
|
14
|
+
exitCode = null;
|
|
15
|
+
pid;
|
|
16
|
+
}
|
|
17
|
+
class TestAntigravityCliAdapter extends AntigravityCliAdapter {
|
|
18
|
+
processes = [];
|
|
19
|
+
spawnProcess(args) {
|
|
20
|
+
const child = new FakeChild();
|
|
21
|
+
this.processes.push({ args, child });
|
|
22
|
+
return child;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
describe('buildAntigravityTurnArgs', () => {
|
|
26
|
+
it('builds first turn arguments without session', () => {
|
|
27
|
+
expect(buildAntigravityTurnArgs(true, 'hello world')).toEqual([
|
|
28
|
+
'--mode',
|
|
29
|
+
'plan',
|
|
30
|
+
'-p',
|
|
31
|
+
'hello world',
|
|
32
|
+
]);
|
|
33
|
+
});
|
|
34
|
+
it('builds subsequent turn arguments without session', () => {
|
|
35
|
+
expect(buildAntigravityTurnArgs(false, 'next prompt')).toEqual([
|
|
36
|
+
'-c',
|
|
37
|
+
'--mode',
|
|
38
|
+
'plan',
|
|
39
|
+
'-p',
|
|
40
|
+
'next prompt',
|
|
41
|
+
]);
|
|
42
|
+
});
|
|
43
|
+
it('does not treat a caller-provided ID as a new Antigravity conversation', () => {
|
|
44
|
+
expect(buildAntigravityTurnArgs(true, 'hello world', { id: SESSION_ID, resume: false })).toEqual([
|
|
45
|
+
'--mode',
|
|
46
|
+
'plan',
|
|
47
|
+
'-p',
|
|
48
|
+
'hello world',
|
|
49
|
+
]);
|
|
50
|
+
});
|
|
51
|
+
it('builds resumed session arguments', () => {
|
|
52
|
+
expect(buildAntigravityTurnArgs(true, 'resumed prompt', { id: SESSION_ID, resume: true })).toEqual([
|
|
53
|
+
'--conversation',
|
|
54
|
+
SESSION_ID,
|
|
55
|
+
'--mode',
|
|
56
|
+
'plan',
|
|
57
|
+
'-p',
|
|
58
|
+
'resumed prompt',
|
|
59
|
+
]);
|
|
60
|
+
});
|
|
61
|
+
it('applies workspace-write execution profile with session', () => {
|
|
62
|
+
expect(buildAntigravityTurnArgs(true, 'edit prompt', { id: SESSION_ID, resume: true }, 'workspace-write')).toEqual([
|
|
63
|
+
'--conversation',
|
|
64
|
+
SESSION_ID,
|
|
65
|
+
'--mode',
|
|
66
|
+
'accept-edits',
|
|
67
|
+
'-p',
|
|
68
|
+
'edit prompt',
|
|
69
|
+
]);
|
|
70
|
+
});
|
|
71
|
+
it('applies workspace-write execution profile without session', () => {
|
|
72
|
+
expect(buildAntigravityTurnArgs(true, 'edit prompt', undefined, 'workspace-write')).toEqual([
|
|
73
|
+
'--mode',
|
|
74
|
+
'accept-edits',
|
|
75
|
+
'-p',
|
|
76
|
+
'edit prompt',
|
|
77
|
+
]);
|
|
78
|
+
expect(buildAntigravityTurnArgs(false, 'edit prompt 2', undefined, 'workspace-write')).toEqual([
|
|
79
|
+
'-c',
|
|
80
|
+
'--mode',
|
|
81
|
+
'accept-edits',
|
|
82
|
+
'-p',
|
|
83
|
+
'edit prompt 2',
|
|
84
|
+
]);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('findAntigravitySessionIdForWorkspace', () => {
|
|
88
|
+
let tmpDir;
|
|
89
|
+
let historyFile;
|
|
90
|
+
beforeEach(() => {
|
|
91
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ag-test-'));
|
|
92
|
+
historyFile = path.join(tmpDir, 'history.jsonl');
|
|
93
|
+
});
|
|
94
|
+
afterEach(() => {
|
|
95
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
96
|
+
});
|
|
97
|
+
it('returns null if history file does not exist', () => {
|
|
98
|
+
expect(findAntigravitySessionIdForWorkspace('/my/workspace', Date.now(), historyFile)).toBeNull();
|
|
99
|
+
});
|
|
100
|
+
it('locates the newest session matching the workspace directory within timestamp window', () => {
|
|
101
|
+
const now = Date.now();
|
|
102
|
+
const ws = path.join(tmpDir, 'workspace');
|
|
103
|
+
const lines = [
|
|
104
|
+
JSON.stringify({
|
|
105
|
+
display: 'old session',
|
|
106
|
+
timestamp: now - 50000,
|
|
107
|
+
workspace: ws,
|
|
108
|
+
conversationId: '00000000-0000-0000-0000-000000000001',
|
|
109
|
+
}),
|
|
110
|
+
JSON.stringify({
|
|
111
|
+
display: 'other workspace',
|
|
112
|
+
timestamp: now,
|
|
113
|
+
workspace: path.join(tmpDir, 'other'),
|
|
114
|
+
conversationId: '00000000-0000-0000-0000-000000000002',
|
|
115
|
+
}),
|
|
116
|
+
JSON.stringify({
|
|
117
|
+
display: 'new matching session',
|
|
118
|
+
timestamp: now + 50,
|
|
119
|
+
workspace: ws,
|
|
120
|
+
conversationId: CAPTURED_SESSION_ID,
|
|
121
|
+
}),
|
|
122
|
+
];
|
|
123
|
+
fs.writeFileSync(historyFile, lines.join('\n'), 'utf-8');
|
|
124
|
+
const result = findAntigravitySessionIdForWorkspace(ws, now, historyFile);
|
|
125
|
+
expect(result).toBe(CAPTURED_SESSION_ID);
|
|
126
|
+
});
|
|
127
|
+
it('ignores invalid conversation IDs', () => {
|
|
128
|
+
const now = Date.now();
|
|
129
|
+
const ws = path.join(tmpDir, 'workspace');
|
|
130
|
+
const lines = [
|
|
131
|
+
JSON.stringify({
|
|
132
|
+
display: 'bad id session',
|
|
133
|
+
timestamp: now,
|
|
134
|
+
workspace: ws,
|
|
135
|
+
conversationId: 'not-a-uuid',
|
|
136
|
+
}),
|
|
137
|
+
];
|
|
138
|
+
fs.writeFileSync(historyFile, lines.join('\n'), 'utf-8');
|
|
139
|
+
expect(findAntigravitySessionIdForWorkspace(ws, now, historyFile)).toBeNull();
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('AntigravityCliAdapter lifecycle', () => {
|
|
143
|
+
let tmpHome;
|
|
144
|
+
const originalAgHome = process.env.ANTIGRAVITY_HOME;
|
|
145
|
+
beforeEach(() => {
|
|
146
|
+
tmpHome = fs.mkdtempSync(path.join(os.tmpdir(), 'ag-home-'));
|
|
147
|
+
process.env.ANTIGRAVITY_HOME = tmpHome;
|
|
148
|
+
});
|
|
149
|
+
afterEach(() => {
|
|
150
|
+
if (originalAgHome !== undefined) {
|
|
151
|
+
process.env.ANTIGRAVITY_HOME = originalAgHome;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
delete process.env.ANTIGRAVITY_HOME;
|
|
155
|
+
}
|
|
156
|
+
fs.rmSync(tmpHome, { recursive: true, force: true });
|
|
157
|
+
});
|
|
158
|
+
it('resumes an existing provider-assigned session', async () => {
|
|
159
|
+
const adapter = new TestAntigravityCliAdapter();
|
|
160
|
+
const sessionEvents = [];
|
|
161
|
+
adapter.on('session', (id) => sessionEvents.push(id));
|
|
162
|
+
await adapter.start('/workspace', { id: SESSION_ID, resume: true });
|
|
163
|
+
await adapter.send('first message', 'workspace-write');
|
|
164
|
+
expect(sessionEvents).toHaveLength(0);
|
|
165
|
+
expect(adapter.processes).toHaveLength(1);
|
|
166
|
+
expect(adapter.processes[0].args).toEqual([
|
|
167
|
+
'--conversation',
|
|
168
|
+
SESSION_ID,
|
|
169
|
+
'--mode',
|
|
170
|
+
'accept-edits',
|
|
171
|
+
'-p',
|
|
172
|
+
'first message',
|
|
173
|
+
]);
|
|
174
|
+
});
|
|
175
|
+
it('starts a new conversation, captures session identity from history, and pins turn 2 to --conversation', async () => {
|
|
176
|
+
const adapter = new TestAntigravityCliAdapter();
|
|
177
|
+
const sessionEvents = [];
|
|
178
|
+
adapter.on('session', (id) => sessionEvents.push(id));
|
|
179
|
+
const workspaceDir = path.join(tmpHome, 'workspace');
|
|
180
|
+
await adapter.start(workspaceDir);
|
|
181
|
+
await adapter.send('first message');
|
|
182
|
+
expect(adapter.processes[0].args).toEqual(['--mode', 'plan', '-p', 'first message']);
|
|
183
|
+
// Simulate agy writing to history.jsonl during turn 1
|
|
184
|
+
const historyFile = path.join(tmpHome, 'history.jsonl');
|
|
185
|
+
fs.writeFileSync(historyFile, JSON.stringify({
|
|
186
|
+
display: 'first message',
|
|
187
|
+
timestamp: Date.now(),
|
|
188
|
+
workspace: workspaceDir,
|
|
189
|
+
conversationId: CAPTURED_SESSION_ID,
|
|
190
|
+
}), 'utf-8');
|
|
191
|
+
// Complete turn 1
|
|
192
|
+
adapter.processes[0].child.emit('close', 0);
|
|
193
|
+
// Should have captured and emitted the session ID
|
|
194
|
+
expect(sessionEvents).toEqual([CAPTURED_SESSION_ID]);
|
|
195
|
+
// Second turn must now use --conversation <CAPTURED_SESSION_ID>
|
|
196
|
+
await adapter.send('second message');
|
|
197
|
+
expect(adapter.processes).toHaveLength(2);
|
|
198
|
+
expect(adapter.processes[1].args).toEqual([
|
|
199
|
+
'--conversation',
|
|
200
|
+
CAPTURED_SESSION_ID,
|
|
201
|
+
'--mode',
|
|
202
|
+
'plan',
|
|
203
|
+
'-p',
|
|
204
|
+
'second message',
|
|
205
|
+
]);
|
|
206
|
+
});
|
|
207
|
+
it('gracefully falls back to -c on turn 2 if history is absent', async () => {
|
|
208
|
+
const adapter = new TestAntigravityCliAdapter();
|
|
209
|
+
const sessionEvents = [];
|
|
210
|
+
adapter.on('session', (id) => sessionEvents.push(id));
|
|
211
|
+
await adapter.start('/workspace');
|
|
212
|
+
await adapter.send('first message');
|
|
213
|
+
expect(sessionEvents).toHaveLength(0);
|
|
214
|
+
expect(adapter.processes[0].args).toEqual(['--mode', 'plan', '-p', 'first message']);
|
|
215
|
+
// Complete turn 1 without writing history
|
|
216
|
+
adapter.processes[0].child.emit('close', 0);
|
|
217
|
+
// Second turn uses -c
|
|
218
|
+
await adapter.send('second message');
|
|
219
|
+
expect(adapter.processes[1].args).toEqual(['-c', '--mode', 'plan', '-p', 'second message']);
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
//# sourceMappingURL=AntigravityCliAdapter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AntigravityCliAdapter.test.js","sourceRoot":"","sources":["../../src/agent/AntigravityCliAdapter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/agent/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA0B,MAAM,uBAAuB,CAAC;AAiDjF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG;IAAE,UAAU,IAAI,IAAI,CAAA;CAAE,CAAC;AAEvE,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,SAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAuBrF;
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/agent/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA0B,MAAM,uBAAuB,CAAC;AAiDjF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG;IAAE,UAAU,IAAI,IAAI,CAAA;CAAE,CAAC;AAEvE,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,SAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAuBrF;AAuHD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
package/dist/agent/adapters.js
CHANGED
|
@@ -108,9 +108,27 @@ ProviderRegistry.register({
|
|
|
108
108
|
name: 'Antigravity (Local CLI)',
|
|
109
109
|
icon: 'Terminal',
|
|
110
110
|
accessLabel: 'Harness-managed access',
|
|
111
|
-
|
|
111
|
+
executionProfiles: [
|
|
112
|
+
{ id: 'review', label: 'Review only', description: 'Reads and plans; no source edits.' },
|
|
113
|
+
{
|
|
114
|
+
id: 'workspace-write',
|
|
115
|
+
label: 'Edit workspace',
|
|
116
|
+
description: 'Auto-accepts in-workspace file edits and common filesystem actions.',
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
defaultExecutionProfile: 'review',
|
|
120
|
+
capabilities: {
|
|
121
|
+
transport: 'cli-print',
|
|
122
|
+
// agy assigns ids for new conversations; --conversation only resumes an
|
|
123
|
+
// id that already exists in the provider's workspace-scoped history.
|
|
124
|
+
sessionIdentity: 'provider-assigned',
|
|
125
|
+
workspaceAccess: 'harness-managed',
|
|
126
|
+
sessionIdFormat: 'uuid',
|
|
127
|
+
},
|
|
112
128
|
isConfigured: () => antigravityCliStatus().usable,
|
|
113
129
|
getStatusMessage: () => antigravityCliStatus().message,
|
|
130
|
+
getSetupHelp: () => setupHelp(antigravityCliStatus()),
|
|
131
|
+
invalidateStatus: () => antigravityCliStatus.invalidate(),
|
|
114
132
|
createInstance: () => new AntigravityCliAdapter()
|
|
115
133
|
});
|
|
116
134
|
ProviderRegistry.register({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/agent/adapters.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/agent/adapters.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/ui.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Starts the Hono dashboard server (the backend the desktop app embeds).
|
|
4
4
|
* Opening a browser is opt-in via --open.
|
|
5
5
|
*/
|
|
6
|
+
export declare function findAvailablePort(startPort: number): Promise<number>;
|
|
6
7
|
/**
|
|
7
8
|
* Starts the local dashboard server. Pass `open: true` to also launch the
|
|
8
9
|
* default browser. `serverOnly` is deprecated (server-only is the default)
|