@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.
Files changed (141) hide show
  1. package/README.md +80 -17
  2. package/dist/agent/AntigravityCliAdapter.d.ts +14 -1
  3. package/dist/agent/AntigravityCliAdapter.d.ts.map +1 -1
  4. package/dist/agent/AntigravityCliAdapter.js +84 -4
  5. package/dist/agent/AntigravityCliAdapter.js.map +1 -1
  6. package/dist/agent/AntigravityCliAdapter.test.d.ts +2 -0
  7. package/dist/agent/AntigravityCliAdapter.test.d.ts.map +1 -0
  8. package/dist/agent/AntigravityCliAdapter.test.js +222 -0
  9. package/dist/agent/AntigravityCliAdapter.test.js.map +1 -0
  10. package/dist/agent/adapters.d.ts.map +1 -1
  11. package/dist/agent/adapters.js +19 -1
  12. package/dist/agent/adapters.js.map +1 -1
  13. package/dist/commands/ui.d.ts +1 -0
  14. package/dist/commands/ui.d.ts.map +1 -1
  15. package/dist/commands/ui.js +24 -13
  16. package/dist/commands/ui.js.map +1 -1
  17. package/dist/commands/ui.test.d.ts +2 -0
  18. package/dist/commands/ui.test.d.ts.map +1 -0
  19. package/dist/commands/ui.test.js +58 -0
  20. package/dist/commands/ui.test.js.map +1 -0
  21. package/dist/core/workspace-skills-workflow.integration.test.d.ts +2 -0
  22. package/dist/core/workspace-skills-workflow.integration.test.d.ts.map +1 -0
  23. package/dist/core/workspace-skills-workflow.integration.test.js +162 -0
  24. package/dist/core/workspace-skills-workflow.integration.test.js.map +1 -0
  25. package/dist/core/worktree.test.js +1 -1
  26. package/dist/core/worktree.test.js.map +1 -1
  27. package/dist/generators/index.d.ts.map +1 -1
  28. package/dist/generators/index.js +4 -8
  29. package/dist/generators/index.js.map +1 -1
  30. package/dist/generators/skills-generator.d.ts +2 -2
  31. package/dist/generators/skills-generator.d.ts.map +1 -1
  32. package/dist/generators/skills-generator.js +84 -89
  33. package/dist/generators/skills-generator.js.map +1 -1
  34. package/dist/generators/skills-generator.test.d.ts +2 -0
  35. package/dist/generators/skills-generator.test.d.ts.map +1 -0
  36. package/dist/generators/skills-generator.test.js +79 -0
  37. package/dist/generators/skills-generator.test.js.map +1 -0
  38. package/dist/gui/assets/AgentsPage-C7wGK7q-.js +3 -0
  39. package/dist/gui/assets/{DashboardPage-CUspfCap.js → DashboardPage-DqZRdOF3.js} +1 -1
  40. package/dist/gui/assets/{GettingStartedPage-BqtgARZW.js → GettingStartedPage-BJvrh67p.js} +1 -1
  41. package/dist/gui/assets/ProjectsPage-B0VFV1vX.js +1 -0
  42. package/dist/gui/assets/ScaffoldRepoInline-DSt_6QLb.js +1 -0
  43. package/dist/gui/assets/SettingsPage-DO5HasvS.js +1 -0
  44. package/dist/gui/assets/SkillsPage-CvRIKdsQ.js +6 -0
  45. package/dist/gui/assets/StartWorkPage-CK5QF6Oa.js +1 -0
  46. package/dist/gui/assets/{StrategiesPage-D0Y6A4Tw.js → StrategiesPage-CWMrYI29.js} +2 -2
  47. package/dist/gui/assets/WorkspaceLauncher-EIY_u44S.js +1 -0
  48. package/dist/gui/assets/WorkspacesPage-CHUfqrA6.js +6 -0
  49. package/dist/gui/assets/alert-dialog-CroDe9HW.js +1 -0
  50. package/dist/gui/assets/bot-wH0FKlic.js +1 -0
  51. package/dist/gui/assets/chevron-down-DDmhvRLr.js +1 -0
  52. package/dist/gui/assets/code-xml-Chu1p81J.js +1 -0
  53. package/dist/gui/assets/index-Bq5NL5AJ.css +2 -0
  54. package/dist/gui/assets/index-CcIOIZ24.js +52 -0
  55. package/dist/gui/assets/{spinner-DXt6mnJk.js → spinner-BCEaGbib.js} +1 -1
  56. package/dist/gui/assets/terminal-gK6BMl3E.js +1 -0
  57. package/dist/gui/assets/{textarea-BLU5HXmZ.js → textarea-D3-elOAa.js} +1 -1
  58. package/dist/gui/assets/{useAriaLabelledBy-CjNlctb9.js → useAriaLabelledBy-DmwmZIqb.js} +1 -1
  59. package/dist/gui/assets/useCompositeListItem-CZnlZ-eF.js +1 -0
  60. package/dist/gui/assets/useValueChanged-BfI2s7NX.js +1 -0
  61. package/dist/gui/assets/zap-FQrDnrgb.js +1 -0
  62. package/dist/gui/index.html +6 -4
  63. package/dist/resources/agents-catalog.d.ts +7 -0
  64. package/dist/resources/agents-catalog.d.ts.map +1 -0
  65. package/dist/resources/agents-catalog.js +141 -0
  66. package/dist/resources/agents-catalog.js.map +1 -0
  67. package/dist/resources/agents-catalog.test.d.ts +2 -0
  68. package/dist/resources/agents-catalog.test.d.ts.map +1 -0
  69. package/dist/resources/agents-catalog.test.js +50 -0
  70. package/dist/resources/agents-catalog.test.js.map +1 -0
  71. package/dist/resources/codex-agent.d.ts +6 -0
  72. package/dist/resources/codex-agent.d.ts.map +1 -0
  73. package/dist/resources/codex-agent.js +55 -0
  74. package/dist/resources/codex-agent.js.map +1 -0
  75. package/dist/resources/codex-agent.test.d.ts +2 -0
  76. package/dist/resources/codex-agent.test.d.ts.map +1 -0
  77. package/dist/resources/codex-agent.test.js +27 -0
  78. package/dist/resources/codex-agent.test.js.map +1 -0
  79. package/dist/resources/contracts.d.ts +116 -0
  80. package/dist/resources/contracts.d.ts.map +1 -0
  81. package/dist/resources/contracts.js +103 -0
  82. package/dist/resources/contracts.js.map +1 -0
  83. package/dist/resources/fs-safety.d.ts +11 -0
  84. package/dist/resources/fs-safety.d.ts.map +1 -0
  85. package/dist/resources/fs-safety.js +77 -0
  86. package/dist/resources/fs-safety.js.map +1 -0
  87. package/dist/resources/materializer.d.ts +17 -0
  88. package/dist/resources/materializer.d.ts.map +1 -0
  89. package/dist/resources/materializer.js +439 -0
  90. package/dist/resources/materializer.js.map +1 -0
  91. package/dist/resources/materializer.test.d.ts +2 -0
  92. package/dist/resources/materializer.test.d.ts.map +1 -0
  93. package/dist/resources/materializer.test.js +149 -0
  94. package/dist/resources/materializer.test.js.map +1 -0
  95. package/dist/resources/service.d.ts +8 -0
  96. package/dist/resources/service.d.ts.map +1 -0
  97. package/dist/resources/service.js +45 -0
  98. package/dist/resources/service.js.map +1 -0
  99. package/dist/resources/service.test.d.ts +2 -0
  100. package/dist/resources/service.test.d.ts.map +1 -0
  101. package/dist/resources/service.test.js +58 -0
  102. package/dist/resources/service.test.js.map +1 -0
  103. package/dist/server.d.ts +5 -0
  104. package/dist/server.d.ts.map +1 -1
  105. package/dist/server.js +310 -4
  106. package/dist/server.js.map +1 -1
  107. package/dist/server.test.js +349 -1
  108. package/dist/server.test.js.map +1 -1
  109. package/dist/types.d.ts +107 -0
  110. package/dist/types.d.ts.map +1 -1
  111. package/dist/utils/resources.d.ts +2 -1
  112. package/dist/utils/resources.d.ts.map +1 -1
  113. package/dist/utils/resources.js +4 -3
  114. package/dist/utils/resources.js.map +1 -1
  115. package/dist/utils/session-finder.d.ts +6 -0
  116. package/dist/utils/session-finder.d.ts.map +1 -1
  117. package/dist/utils/session-finder.js +56 -0
  118. package/dist/utils/session-finder.js.map +1 -1
  119. package/dist/utils/session-finder.test.js +34 -1
  120. package/dist/utils/session-finder.test.js.map +1 -1
  121. package/dist/utils/skills-catalog.d.ts +77 -0
  122. package/dist/utils/skills-catalog.d.ts.map +1 -0
  123. package/dist/utils/skills-catalog.js +871 -0
  124. package/dist/utils/skills-catalog.js.map +1 -0
  125. package/dist/utils/skills-catalog.test.d.ts +2 -0
  126. package/dist/utils/skills-catalog.test.d.ts.map +1 -0
  127. package/dist/utils/skills-catalog.test.js +281 -0
  128. package/dist/utils/skills-catalog.test.js.map +1 -0
  129. package/package.json +4 -1
  130. package/dist/gui/assets/ProjectsPage-UBoQxI2G.js +0 -1
  131. package/dist/gui/assets/ScaffoldRepoInline-DqoourJe.js +0 -1
  132. package/dist/gui/assets/SettingsPage-BZl24tqD.js +0 -1
  133. package/dist/gui/assets/StartWorkPage-BGNFdBfj.js +0 -1
  134. package/dist/gui/assets/WorkspaceLauncher-Cxv0O_wt.js +0 -1
  135. package/dist/gui/assets/WorkspacesPage-Cvb1rOeh.js +0 -6
  136. package/dist/gui/assets/index-CllPiiFL.js +0 -52
  137. package/dist/gui/assets/index-DGCBhMAn.css +0 -2
  138. package/dist/gui/assets/useCompositeListItem-DWGFLKqA.js +0 -1
  139. /package/dist/{resources → static-resources}/workflows/plan-implement-review.md +0 -0
  140. /package/dist/{resources → static-resources}/workflows/research-verify.md +0 -0
  141. /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 / Antigravity
126
- ├── AGENTS.md # Context for OpenAI Codex
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
- └── copilot-instructions.md # Context for GitHub Copilot
137
+ ├── copilot-instructions.md # Context for GitHub Copilot
138
+ │ └── instructions/ # Scoped skill instructions for Copilot
129
139
  ├── .cursor/
130
- │ └── rules/nexusflow.mdc # Context for Cursor
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
- | **Claude Code / Antigravity** | `CLAUDE.md` | `claude` or `antigravity` in PATH |
181
- | **OpenAI Codex** | `AGENTS.md` | `codex` in PATH |
182
- | **GitHub Copilot** | `.github/copilot-instructions.md` | Always available |
183
- | **Cursor** | `.cursor/rules/nexusflow.mdc` | `cursor` in PATH |
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
- - **Open with…** launch the workspace directly in Codex Desktop, Claude Desktop, VS Code, VS Code Insiders, Cursor, JetBrains IDEs, or another detected editor; unavailable apps stay visible with a clear reason
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
- │ │ ├── codex.ts # AGENTS.md generator
446
+ │ │ ├── antigravity.ts # Antigravity AGENTS.md generator
447
+ │ │ ├── codex.ts # Codex AGENTS.md generator
392
448
  │ │ ├── copilot.ts # copilot-instructions.md generator
393
- │ │ └── cursor.ts # nexusflow.mdc generator
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
- └── App.tsx # Main dashboard component
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
- protected buildArgs(isFirstTurn: boolean, prompt: string): string[];
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":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,qBAAa,qBAAsB,SAAQ,cAAc;IACvD,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAS;IAClC,SAAS,CAAC,QAAQ,CAAC,KAAK,aAAa;IAMrC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;CAGpE"}
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
- // -p runs a single prompt; -c continues the conversation for later turns.
8
- // agy has no resume-by-id, so no fallback.
9
- buildArgs(isFirstTurn, prompt) {
10
- return isFirstTurn ? ['-p', prompt] : ['-c', '-p', prompt];
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;AAErD,MAAM,OAAO,qBAAsB,SAAQ,cAAc;IACpC,MAAM,GAAG,KAAK,CAAC;IACf,KAAK,GAAG,SAAS,CAAC;IACrC,wEAAwE;IACxE,8EAA8E;IAE9E,0EAA0E;IAC1E,2CAA2C;IACjC,SAAS,CAAC,WAAoB,EAAE,MAAc;QACtD,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;CACF"}
1
+ {"version":3,"file":"AntigravityCliAdapter.js","sourceRoot":"","sources":["../../src/agent/AntigravityCliAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AntigravityCliAdapter.test.d.ts.map
@@ -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;AAqGD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
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"}
@@ -108,9 +108,27 @@ ProviderRegistry.register({
108
108
  name: 'Antigravity (Local CLI)',
109
109
  icon: 'Terminal',
110
110
  accessLabel: 'Harness-managed access',
111
- capabilities: { transport: 'cli-print', sessionIdentity: 'none', workspaceAccess: 'harness-managed' },
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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"}
@@ -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)