@duetso/agent 0.2.6 → 0.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 (221) hide show
  1. package/README.md +29 -16
  2. package/dist/package.json +8 -3
  3. package/dist/src/cli/auto-upgrade.d.ts.map +1 -1
  4. package/dist/src/cli/auto-upgrade.js +7 -54
  5. package/dist/src/cli/auto-upgrade.js.map +1 -1
  6. package/dist/src/cli/connect.d.ts +45 -0
  7. package/dist/src/cli/connect.d.ts.map +1 -0
  8. package/dist/src/cli/connect.js +265 -0
  9. package/dist/src/cli/connect.js.map +1 -0
  10. package/dist/src/cli/help.d.ts +1 -0
  11. package/dist/src/cli/help.d.ts.map +1 -1
  12. package/dist/src/cli/help.js +66 -32
  13. package/dist/src/cli/help.js.map +1 -1
  14. package/dist/src/cli/memory-add.d.ts +18 -13
  15. package/dist/src/cli/memory-add.d.ts.map +1 -1
  16. package/dist/src/cli/memory-add.js +91 -32
  17. package/dist/src/cli/memory-add.js.map +1 -1
  18. package/dist/src/cli/memory-recall.d.ts.map +1 -1
  19. package/dist/src/cli/memory-recall.js +3 -0
  20. package/dist/src/cli/memory-recall.js.map +1 -1
  21. package/dist/src/cli/memory-sources.d.ts +20 -0
  22. package/dist/src/cli/memory-sources.d.ts.map +1 -0
  23. package/dist/src/cli/memory-sources.js +40 -0
  24. package/dist/src/cli/memory-sources.js.map +1 -0
  25. package/dist/src/cli/model.d.ts +5 -0
  26. package/dist/src/cli/model.d.ts.map +1 -1
  27. package/dist/src/cli/model.js +43 -0
  28. package/dist/src/cli/model.js.map +1 -1
  29. package/dist/src/cli/route.d.ts +12 -0
  30. package/dist/src/cli/route.d.ts.map +1 -1
  31. package/dist/src/cli/route.js +39 -9
  32. package/dist/src/cli/route.js.map +1 -1
  33. package/dist/src/cli/rpc.d.ts +3 -2
  34. package/dist/src/cli/rpc.d.ts.map +1 -1
  35. package/dist/src/cli/rpc.js +3 -2
  36. package/dist/src/cli/rpc.js.map +1 -1
  37. package/dist/src/cli/run.d.ts +1 -0
  38. package/dist/src/cli/run.d.ts.map +1 -1
  39. package/dist/src/cli/run.js +1 -0
  40. package/dist/src/cli/run.js.map +1 -1
  41. package/dist/src/cli/shared.d.ts +11 -0
  42. package/dist/src/cli/shared.d.ts.map +1 -1
  43. package/dist/src/cli/shared.js +31 -0
  44. package/dist/src/cli/shared.js.map +1 -1
  45. package/dist/src/cli/train.d.ts +31 -7
  46. package/dist/src/cli/train.d.ts.map +1 -1
  47. package/dist/src/cli/train.js +233 -79
  48. package/dist/src/cli/train.js.map +1 -1
  49. package/dist/src/cli.d.ts +3 -1
  50. package/dist/src/cli.d.ts.map +1 -1
  51. package/dist/src/cli.js +9 -1
  52. package/dist/src/cli.js.map +1 -1
  53. package/dist/src/connected-providers/billing.d.ts +6 -0
  54. package/dist/src/connected-providers/billing.d.ts.map +1 -0
  55. package/dist/src/connected-providers/billing.js +11 -0
  56. package/dist/src/connected-providers/billing.js.map +1 -0
  57. package/dist/src/connected-providers/capability-probe.d.ts +17 -0
  58. package/dist/src/connected-providers/capability-probe.d.ts.map +1 -0
  59. package/dist/src/connected-providers/capability-probe.js +92 -0
  60. package/dist/src/connected-providers/capability-probe.js.map +1 -0
  61. package/dist/src/connected-providers/fake-issuer.d.ts +61 -0
  62. package/dist/src/connected-providers/fake-issuer.d.ts.map +1 -0
  63. package/dist/src/connected-providers/fake-issuer.js +161 -0
  64. package/dist/src/connected-providers/fake-issuer.js.map +1 -0
  65. package/dist/src/connected-providers/fallback-notice.d.ts +11 -0
  66. package/dist/src/connected-providers/fallback-notice.d.ts.map +1 -0
  67. package/dist/src/connected-providers/fallback-notice.js +20 -0
  68. package/dist/src/connected-providers/fallback-notice.js.map +1 -0
  69. package/dist/src/connected-providers/fallback.d.ts +11 -0
  70. package/dist/src/connected-providers/fallback.d.ts.map +1 -0
  71. package/dist/src/connected-providers/fallback.js +37 -0
  72. package/dist/src/connected-providers/fallback.js.map +1 -0
  73. package/dist/src/connected-providers/refresh.d.ts +12 -0
  74. package/dist/src/connected-providers/refresh.d.ts.map +1 -0
  75. package/dist/src/connected-providers/refresh.js +72 -0
  76. package/dist/src/connected-providers/refresh.js.map +1 -0
  77. package/dist/src/connected-providers/registry.d.ts +17 -0
  78. package/dist/src/connected-providers/registry.d.ts.map +1 -0
  79. package/dist/src/connected-providers/registry.js +30 -0
  80. package/dist/src/connected-providers/registry.js.map +1 -0
  81. package/dist/src/connected-providers/store.d.ts +41 -0
  82. package/dist/src/connected-providers/store.d.ts.map +1 -0
  83. package/dist/src/connected-providers/store.js +145 -0
  84. package/dist/src/connected-providers/store.js.map +1 -0
  85. package/dist/src/connected-providers/tokens.d.ts +42 -0
  86. package/dist/src/connected-providers/tokens.d.ts.map +1 -0
  87. package/dist/src/connected-providers/tokens.js +148 -0
  88. package/dist/src/connected-providers/tokens.js.map +1 -0
  89. package/dist/src/connected-providers/transport-preference.d.ts +26 -0
  90. package/dist/src/connected-providers/transport-preference.d.ts.map +1 -0
  91. package/dist/src/connected-providers/transport-preference.js +42 -0
  92. package/dist/src/connected-providers/transport-preference.js.map +1 -0
  93. package/dist/src/core/structured-output.d.ts.map +1 -1
  94. package/dist/src/core/structured-output.js +2 -1
  95. package/dist/src/core/structured-output.js.map +1 -1
  96. package/dist/src/file-lock.d.ts +22 -0
  97. package/dist/src/file-lock.d.ts.map +1 -0
  98. package/dist/src/file-lock.js +69 -0
  99. package/dist/src/file-lock.js.map +1 -0
  100. package/dist/src/memory/context-pack.d.ts +5 -0
  101. package/dist/src/memory/context-pack.d.ts.map +1 -1
  102. package/dist/src/memory/context-pack.js +6 -0
  103. package/dist/src/memory/context-pack.js.map +1 -1
  104. package/dist/src/memory/id.d.ts +3 -0
  105. package/dist/src/memory/id.d.ts.map +1 -0
  106. package/dist/src/memory/id.js +6 -0
  107. package/dist/src/memory/id.js.map +1 -0
  108. package/dist/src/memory/observational-prompts.d.ts +2 -0
  109. package/dist/src/memory/observational-prompts.d.ts.map +1 -1
  110. package/dist/src/memory/observational-prompts.js +4 -2
  111. package/dist/src/memory/observational-prompts.js.map +1 -1
  112. package/dist/src/memory/observational.d.ts +22 -0
  113. package/dist/src/memory/observational.d.ts.map +1 -1
  114. package/dist/src/memory/observational.js +65 -22
  115. package/dist/src/memory/observational.js.map +1 -1
  116. package/dist/src/memory/paths.d.ts +9 -0
  117. package/dist/src/memory/paths.d.ts.map +1 -0
  118. package/dist/src/memory/paths.js +11 -0
  119. package/dist/src/memory/paths.js.map +1 -0
  120. package/dist/src/memory/storage.d.ts.map +1 -1
  121. package/dist/src/memory/storage.js +1 -4
  122. package/dist/src/memory/storage.js.map +1 -1
  123. package/dist/src/memory/store/discovery.d.ts +7 -0
  124. package/dist/src/memory/store/discovery.d.ts.map +1 -0
  125. package/dist/src/memory/store/discovery.js +34 -0
  126. package/dist/src/memory/store/discovery.js.map +1 -0
  127. package/dist/src/memory/store/file.d.ts +52 -0
  128. package/dist/src/memory/store/file.d.ts.map +1 -0
  129. package/dist/src/memory/store/file.js +287 -0
  130. package/dist/src/memory/store/file.js.map +1 -0
  131. package/dist/src/memory/store/index.d.ts +5 -0
  132. package/dist/src/memory/store/index.d.ts.map +1 -0
  133. package/dist/src/memory/store/index.js +5 -0
  134. package/dist/src/memory/store/index.js.map +1 -0
  135. package/dist/src/memory/store/pack.d.ts +25 -0
  136. package/dist/src/memory/store/pack.d.ts.map +1 -0
  137. package/dist/src/memory/store/pack.js +71 -0
  138. package/dist/src/memory/store/pack.js.map +1 -0
  139. package/dist/src/memory/store/sources.d.ts +55 -0
  140. package/dist/src/memory/store/sources.d.ts.map +1 -0
  141. package/dist/src/memory/store/sources.js +85 -0
  142. package/dist/src/memory/store/sources.js.map +1 -0
  143. package/dist/src/memory/store/store.d.ts +46 -0
  144. package/dist/src/memory/store/store.d.ts.map +1 -0
  145. package/dist/src/memory/store/store.js +171 -0
  146. package/dist/src/memory/store/store.js.map +1 -0
  147. package/dist/src/memory/store.d.ts +19 -16
  148. package/dist/src/memory/store.d.ts.map +1 -1
  149. package/dist/src/memory/store.js +14 -11
  150. package/dist/src/memory/store.js.map +1 -1
  151. package/dist/src/memory-store.js +554 -0
  152. package/dist/src/model-resolution/catalog.d.ts +24 -10
  153. package/dist/src/model-resolution/catalog.d.ts.map +1 -1
  154. package/dist/src/model-resolution/catalog.js +61 -36
  155. package/dist/src/model-resolution/catalog.js.map +1 -1
  156. package/dist/src/model-resolution/duet-gateway.d.ts +2 -0
  157. package/dist/src/model-resolution/duet-gateway.d.ts.map +1 -1
  158. package/dist/src/model-resolution/duet-gateway.js +57 -4
  159. package/dist/src/model-resolution/duet-gateway.js.map +1 -1
  160. package/dist/src/model-resolution/resolver.d.ts +17 -0
  161. package/dist/src/model-resolution/resolver.d.ts.map +1 -1
  162. package/dist/src/model-resolution/resolver.js +49 -4
  163. package/dist/src/model-resolution/resolver.js.map +1 -1
  164. package/dist/src/model-routing/advisor-context.d.ts +31 -5
  165. package/dist/src/model-routing/advisor-context.d.ts.map +1 -1
  166. package/dist/src/model-routing/advisor-context.js +87 -10
  167. package/dist/src/model-routing/advisor-context.js.map +1 -1
  168. package/dist/src/model-routing/advisor-lifecycle.d.ts +14 -5
  169. package/dist/src/model-routing/advisor-lifecycle.d.ts.map +1 -1
  170. package/dist/src/model-routing/advisor-lifecycle.js +24 -7
  171. package/dist/src/model-routing/advisor-lifecycle.js.map +1 -1
  172. package/dist/src/model-routing/prompts.d.ts.map +1 -1
  173. package/dist/src/model-routing/prompts.js +18 -10
  174. package/dist/src/model-routing/prompts.js.map +1 -1
  175. package/dist/src/model-routing/table.js +18 -18
  176. package/dist/src/model-routing/table.js.map +1 -1
  177. package/dist/src/session/session-manager.d.ts +1 -4
  178. package/dist/src/session/session-manager.d.ts.map +1 -1
  179. package/dist/src/session/session-manager.js +2 -5
  180. package/dist/src/session/session-manager.js.map +1 -1
  181. package/dist/src/session/session.d.ts +2 -2
  182. package/dist/src/session/session.d.ts.map +1 -1
  183. package/dist/src/session/session.js +10 -7
  184. package/dist/src/session/session.js.map +1 -1
  185. package/dist/src/train/archive.d.ts.map +1 -1
  186. package/dist/src/train/archive.js +5 -0
  187. package/dist/src/train/archive.js.map +1 -1
  188. package/dist/src/train/types.d.ts +8 -7
  189. package/dist/src/train/types.d.ts.map +1 -1
  190. package/dist/src/tui/sidebar.d.ts.map +1 -1
  191. package/dist/src/tui/sidebar.js +40 -1
  192. package/dist/src/tui/sidebar.js.map +1 -1
  193. package/dist/src/turn-runner/agent-events.d.ts +2 -0
  194. package/dist/src/turn-runner/agent-events.d.ts.map +1 -1
  195. package/dist/src/turn-runner/agent-events.js +11 -0
  196. package/dist/src/turn-runner/agent-events.js.map +1 -1
  197. package/dist/src/turn-runner/subagent.d.ts +4 -1
  198. package/dist/src/turn-runner/subagent.d.ts.map +1 -1
  199. package/dist/src/turn-runner/subagent.js +11 -3
  200. package/dist/src/turn-runner/subagent.js.map +1 -1
  201. package/dist/src/turn-runner/tools.d.ts +3 -3
  202. package/dist/src/turn-runner/tools.d.ts.map +1 -1
  203. package/dist/src/turn-runner/tools.js +1 -1
  204. package/dist/src/turn-runner/tools.js.map +1 -1
  205. package/dist/src/turn-runner/turn-runner.d.ts +19 -3
  206. package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
  207. package/dist/src/turn-runner/turn-runner.js +162 -33
  208. package/dist/src/turn-runner/turn-runner.js.map +1 -1
  209. package/dist/src/turn-runner/usage-accounting.d.ts +5 -2
  210. package/dist/src/turn-runner/usage-accounting.d.ts.map +1 -1
  211. package/dist/src/turn-runner/usage-accounting.js +18 -6
  212. package/dist/src/turn-runner/usage-accounting.js.map +1 -1
  213. package/dist/src/turn-runner/wire-shaping.d.ts +3 -1
  214. package/dist/src/turn-runner/wire-shaping.d.ts.map +1 -1
  215. package/dist/src/turn-runner/wire-shaping.js +5 -1
  216. package/dist/src/turn-runner/wire-shaping.js.map +1 -1
  217. package/dist/src/types/config.d.ts +7 -0
  218. package/dist/src/types/config.d.ts.map +1 -1
  219. package/dist/src/types/protocol.d.ts +13 -5
  220. package/dist/src/types/protocol.d.ts.map +1 -1
  221. package/package.json +8 -3
package/README.md CHANGED
@@ -56,7 +56,7 @@ Two things that don't get a section of their own below, but that follow from the
56
56
 
57
57
  ### Memory, woven in
58
58
 
59
- Memory and compaction are the same primitive: observational memory _is_ how context survives between turns. The runner observes its own transcript, reflects when observations grow, and writes durable rows to PGlite — text observations for messages and images alike, so screenshots and UI captures stay recallable on later turns without re-attaching bytes. Each turn's prompt prefix is a frozen two-layer pack (long-term cross-session memory + this session's compaction summary), rebuilt only at compaction events so the provider's prompt cache survives turn-over-turn. Anything that didn't make the pack stays reachable through `recall_memory` — hybrid retrieval over pgvector cosine similarity and tsvector keyword search, fused via Reciprocal Rank Fusion, with optional paraphrased query expansion. Embeddings run in a background worker so foreground turns never block.
59
+ Memory and compaction are the same primitive: observational memory _is_ how context survives between turns. The runner observes its own transcript, reflects when observations grow, and writes durable rows to PGlite — text observations for messages and images alike, so screenshots and UI captures stay recallable on later turns without re-attaching bytes. Each turn's prompt prefix is frozen between deliberate refresh points: curated memory files load from the project ancestry at session start or explicit skills reload, while long-term and current-session observations rebuild at compaction events. That separation keeps trained knowledge deterministic, prevents it from displacing observational memory, and preserves the provider's prompt cache turn-over-turn. Database observations outside the frozen prefix stay reachable through `recall_memory` — hybrid retrieval over pgvector cosine similarity and tsvector keyword search, fused via Reciprocal Rank Fusion, with optional paraphrased query expansion. Embeddings run in a background worker so foreground turns never block.
60
60
 
61
61
  ### Relays: keep the agent working until the job is done
62
62
 
@@ -245,6 +245,9 @@ bun run test # runs the test suite inside Docker
245
245
 
246
246
  Use `bun run test` and `bun run eval`, not raw `bun test`, as the source of truth. File-writing tests and evals run in Docker so focused host runs cannot create `.duet`, PGlite databases, or home-directory skill fixtures in the checkout.
247
247
 
248
+ Paid evaluation infrastructure and its separate verification commands live in
249
+ the [SWE-bench benchmark](benchmarks/swebench/README.md).
250
+
248
251
  The pre-commit hook runs `format`, `check-types`, and `lint`.
249
252
 
250
253
  </details>
@@ -258,6 +261,16 @@ duet login
258
261
  duet "prospect the VP Eng at Acme, send a first-touch email about our conf talk, wait up to 14 days for a reply, and book a meeting on Calendly if they're interested"
259
262
  ```
260
263
 
264
+ **Bring your own subscription.** `duet connect chatgpt` (or `copilot`) links a
265
+ ChatGPT or GitHub Copilot plan by OAuth device code. Connected subscriptions
266
+ are transports, not extra models: the catalog stays the same, and any model
267
+ your plan covers automatically runs on it at `$0 · plan` instead of metered
268
+ credits, falling back to the gateways with a session notice when the plan is
269
+ exhausted. `duet connect --status` and `--disconnect <provider>` manage the
270
+ link; tokens live only in `~/.duet/connected-providers.json` (0600).
271
+ Design rationale and invariants: the duet repo's
272
+ `specs/connected-providers/`.
273
+
261
274
  <details>
262
275
  <summary><b>Providers, models, and CLI flags</b></summary>
263
276
 
@@ -301,7 +314,7 @@ export AI_GATEWAY_API_KEY=...
301
314
  duet -m opus-4.8 "review this repo"
302
315
  ```
303
316
 
304
- Model names can be a virtual tier (`frontier`, `balanced`, `economy` — routed per prompt), full `provider:modelId` syntax, or concrete shorthand names such as `opus-4.8`, `sonnet-4.6`, `haiku-4.5`, and `gpt-5.5`. Concrete shorthands resolve to the first configured gateway; use full `provider:modelId` syntax — or `--provider <name>` — to pin a specific gateway.
317
+ Model names can be a virtual tier (`frontier`, `balanced`, `economy` — routed per prompt), a versionless family (`opus`, `sonnet`, `haiku`, `sol`, and others), full `provider:modelId` syntax, or a versioned shorthand such as `opus-4.8` or `gpt-5.6-sol`. Family names resolve to the latest curated version, while concrete shorthands resolve to the first configured gateway; use full `provider:modelId` syntax — or `--provider <name>` — to pin a specific gateway.
305
318
 
306
319
  </details>
307
320
 
@@ -332,7 +345,7 @@ Tool calls render with custom per-tool headers (e.g. `$ <command>`, `read <path>
332
345
 
333
346
  Type `/` in the composer to open the command picker, or send any of these as a message:
334
347
 
335
- - **`/model <name>`** — switch the model used for **subsequent** turns. Accepts virtual tiers and the same shorthands and `provider:modelId` forms as the `--model` flag (e.g. `/model frontier`, `/model sonnet-4.6`, `/model duet:openai/gpt-5.5`). A concrete name pins the model and suspends routing; a tier resumes it. Unknown shorthands or missing provider credentials surface an error and leave the current model in place. The in-flight turn (if any) keeps the model it started with. **`/route`** inspects the live routing state.
348
+ - **`/model <name>`** — switch the model used for **subsequent** turns. Accepts virtual tiers and the same family, versioned shorthand, and `provider:modelId` forms as the `--model` flag (e.g. `/model frontier`, `/model sonnet`, `/model duet:openai/gpt-5.6-sol`). A concrete name pins the model and suspends routing; a tier resumes it. Unknown shorthands or missing provider credentials surface an error and leave the current model in place. The in-flight turn (if any) keeps the model it started with. **`/route`** inspects the live routing state.
336
349
  - **`/thinking <level>`** — switch the thinking level for the **next** turn. One of `minimal`, `low`, `medium`, `high`, `xhigh`. The runner clamps to the active model's supported range at use-time. The in-flight turn (if any) keeps its level.
337
350
  - **`/feedback <message>`** — send free-form feedback to the Duet team.
338
351
  - **`/clear`** — dispose the current session and start a fresh one.
@@ -340,9 +353,9 @@ Type `/` in the composer to open the command picker, or send any of these as a m
340
353
  - **`/paste`**, **`/image <path>`**, **`/clear-images`** — image-attachment helpers, covered in the next section.
341
354
  - **`/diag`** — toggle key and selection event logging when triaging terminal-specific issues.
342
355
 
343
- `/model`, `/thinking`, `/clear`, `/paste`, `/clear-images`, and `/diag` also work **anywhere inside a longer prompt**. `hey can you review this /model gpt-5.5` swaps the model for the very turn that delivers the message; the slash form is stripped from what the agent sees, so the model receives `hey can you review this`. When the whole prompt is just slash commands, no agent turn runs at all. Commands that take rest-of-line arguments (`/feedback`, `/copy`, `/image`) only fire when they own the whole message.
356
+ `/model`, `/thinking`, `/clear`, `/paste`, `/clear-images`, and `/diag` also work **anywhere inside a longer prompt**. `hey can you review this /model sol` swaps the model for the very turn that delivers the message; the slash form is stripped from what the agent sees, so the model receives `hey can you review this`. When the whole prompt is just slash commands, no agent turn runs at all. Commands that take rest-of-line arguments (`/feedback`, `/copy`, `/image`) only fire when they own the whole message.
344
357
 
345
- The inline form also works for the non-TUI one-shot CLI: `duet "hey can you review this /model gpt-5.5"` swaps the model and dispatches the stripped prompt to the agent; `duet "/model gpt-5.5"` applies the swap and exits without dispatching a turn.
358
+ The inline form also works for the non-TUI one-shot CLI: `duet "hey can you review this /model sol"` swaps the model and dispatches the stripped prompt to the agent; `duet "/model sol"` applies the swap and exits without dispatching a turn.
346
359
 
347
360
  Slash commands are intercepted locally; they never reach the model unless the picker inserts a `/skill-name` skill reference, in which case the runner expands it into the matching skill's full SKILL.md inline for that turn.
348
361
 
@@ -385,16 +398,16 @@ All three share one **canonical memory JSON object** (`--json`), so a consumer p
385
398
 
386
399
  - Timestamps are ISO 8601 strings (e.g. `2026-07-06T00:00:00.000Z`); date-only fields (`observedDate`, `referencedDate`) stay `YYYY-MM-DD`.
387
400
  - `source` is a flat string — one of `user | agent | system | api | import` (`system` is the training-origin value).
388
- - `sessionId` is the session that authored the row: writable on `add` via `--session <id>`, filterable on `memory`/`recall` via `--session`, and echoed on output (absent on legacy rows).
389
- - Two ranking scores are always named explicitly, never a generic `score`: `packScore` (recency × priority × kind bias, present everywhere) and `relevanceScore` (query-relevance, RRF-fused — present only in `memory recall` results).
401
+ - `sessionId` is the session that authored an observational row: writable on DB-backed `add`, filterable on `memory`/`recall`, and echoed on DB output (absent on legacy rows and file memories).
402
+ - Observational JSON names both ranking axes explicitly: `packScore` (recency × priority × kind bias) and `relevanceScore` (query relevance, present only in `memory recall`). File-store JSON reports its slug and store path instead because those records are inherited context, not ranked recall rows.
390
403
 
391
404
  Command-specific notes:
392
405
 
393
406
  - **`duet memory` (query):** `--json` emits a bare array ordered by pack score; `--source` and `--session` narrow the set alongside `--type`, `--priority`, `--from`, and `--to`.
394
407
  - **`duet memory recall`:** query text comes from `--query <q>` or positional args. `--scope session|global` requires `--session <id>` to compare against; `all` (default) ignores it. `--json` emits a bare array ordered best-first, each row carrying both `packScore` and `relevanceScore`.
395
- - **`duet memory add`:** added rows are always `note` kind. `--source` defaults to `user`; `--session <id>` stamps the row (omit to leave it global). Content comes from positional args or stdin, and empty input is a usage error. `--json` emits one canonical object (`packScore` and `lastUsedAt` present, `relevanceScore` absent).
408
+ - **`duet memory add`:** added memories are always `note` kind. Flagless writes go to the nearest ancestor `.agents/memories`; pass `--db` to retain observational-row ranking, embedding, and session attribution. Content comes from positional args or stdin, and empty input is a usage error.
396
409
 
397
- Every memory command accepts `--db <absolute-path>` (default `~/.duet/memory.db`) and `--wait <seconds>` (lock-wait budget, default 30; `0` fails immediately). Exit codes are stable for scripting: `0` success, `64` usage or validation error (unknown flag, bad value, empty input), `75` memory-DB lock-wait budget exhausted, and `1` for anything else.
410
+ DB-backed memory commands accept `--db <absolute-path>` and `--wait <seconds>`. `memory add` also accepts a single `--store`; `memory recall` deliberately rejects stores because file memories are already loaded into agent context. Exit codes are stable for scripting: `0` success, `64` usage or validation error, `75` memory-DB lock-wait budget exhausted, and `1` for anything else.
398
411
 
399
412
  </details>
400
413
 
@@ -403,21 +416,21 @@ Every memory command accepts `--db <absolute-path>` (default `~/.duet/memory.db`
403
416
 
404
417
  `duet train <folder>` launches a sub-agent inside the folder, lets it read whatever is there with its native tools (markdown, CSVs, PDFs, spreadsheets, screenshots, source — anything the agent can open), and produces two artifacts:
405
418
 
406
- - **One high-priority manual (user-curated) row** in `~/.duet/memory.db`, tagged `train` and `train:<slug>`. Fresh `duet` sessions load it into their initial memory pack with a ranking boost (via `manualBias`), and writing it as a `manual` row means `duet memory reflect` never compacts it away.
407
- - **`~/.duet/train/<memory-id>/`** — a hidden archive: a copy of every source file plus a `manifest.json`. Provenance only; the DB row is the source of truth. Deleting the memory via `duet memory` removes the archive too.
419
+ - **One inherited markdown memory** in the nearest ancestor `.agents/memories` store. Explicit `--store` selects a different file store; explicit `--db` retains the legacy high-priority manual-row behavior.
420
+ - **`~/.duet/train/<memory-id>/`** — a hidden archive containing source copies and private provenance. Shareable memory frontmatter references the archive id but never embeds the absolute source folder.
408
421
 
409
422
  ```bash
410
- duet train ./snowflake-notes # writes to ~/.duet/memory.db
423
+ duet train ./snowflake-notes # writes to the nearest .agents/memories
411
424
  duet train ./snowflake-notes --slug snow # custom slug (default: folder basename)
412
425
  duet train ./snowflake-notes --model opus-4.8
413
426
  duet train ./snowflake-notes --db /tmp/scratch.db # write to a throwaway DB instead
414
427
  ```
415
428
 
416
- Re-running `train` on the same slug **replaces** the prior row and its archive there is at most one `train:<slug>` observation at a time.
429
+ Re-running `train` on the same slug **replaces** the prior entry and its archive in the selected backend.
417
430
 
418
431
  Three things to know:
419
432
 
420
- - **The current session won't see the new memory.** Memory loads at session start. Start a fresh `duet` session to test recall.
433
+ - **The current session won't watch the new memory file.** It appears in a fresh `duet` session, or after a programmatic `reloadSkills()` refreshes disk-backed context.
421
434
  - **Synthesis needs an API key.** `DUET_API_KEY` (recommended), or any of the provider keys covered above.
422
435
  - **The corpus folder's `.env` is loaded** (so a project folder can supply its own provider credentials). Check folders you didn't author before training them.
423
436
 
@@ -539,7 +552,7 @@ The parent runner transcript stays linear across the lifecycle. State-machine co
539
552
 
540
553
  `TurnRunner` owns memory at runtime. It holds a `MemoryStore` in process, hydrates durable observations from PGlite before the first turn, and subscribes to memory-store events to write future observation changes. After each pi-agent run, the runner observes the latest unobserved transcript suffix, reflects oversized observation logs, emits memory events with generated observation payloads, and waits for durable writes before continuing. Raw conversation messages stay in `TurnState.agent.messages`; memory persistence stores only derived observations/reflections.
541
554
 
542
- The rendered memory section above the message tail is a _frozen_ two-layer pack long-term cross-session memory ranked into an 8k-token budget and the current session's chronological compaction summary. The pack is rebuilt only at compaction events (initial load, reflector completion, wire-shaping eviction) so observations the observer writes mid-session do not invalidate the prompt cache. The model can still pull specific facts on demand through the default `recall_memory` tool, which runs hybrid vector + keyword search over the same database with optional query expansion.
555
+ The rendered memory section above the message tail is a frozen pack with two independent sources. Curated memory files discovered from the working directory's project ancestry are pinned first and refreshed only at session start or explicit skills reload. Database-backed memory follows as ranked cross-session observations and the current session's chronological compaction summary; those layers rebuild only at compaction events so ordinary observer writes do not invalidate the prompt cache. File memory never enters database ranking, reflection, usage-bump, or recall paths. The model can still pull non-pinned database facts on demand through the default `recall_memory` tool, which runs hybrid vector + keyword search with optional query expansion.
543
556
 
544
557
  ```typescript
545
558
  import { TurnRunner } from "@duetso/agent";
@@ -550,7 +563,7 @@ const turnRunner = new TurnRunner({
550
563
  });
551
564
  ```
552
565
 
553
- By default, both `duet` (TUI/run) and `duet --rpc` store durable observations in `~/.duet/memory.db`. Override the path with `--db <path>` (the flag is accepted in both modes and is ignored when `--incognito` is also set), or run with `--incognito` (or `-i`) to set `memoryDbPath: false`, which disables observational memory and compaction for that session. `duet --rpc` bypasses `SessionManager`, so it has no session of its own; pass `duet --rpc --session <id>` to attribute every observation written during the RPC process to a caller-owned session (one RPC process is one logical session). Omit it to leave those writes unattributed. Programmatic callers can pass `memoryDbPath: false` or provide a custom `memoryDbPath`. The CLI's `SessionManager` is a convenience layer that stores session snapshots under `~/.duet/sessions`, but the runner owns memory hydration, pi-turn observation/reflection, compaction, and observation persistence.
566
+ By default, both `duet` (TUI/run) and `duet --rpc` store durable observations in `~/.duet/memory.db`. Override the path with `--db <path>` (the flag is accepted in both modes and is ignored when `--incognito` is also set), or run with `--incognito` (or `-i`) to disable both observational database memory and curated file memory for that session. `duet --rpc` bypasses `SessionManager`, so it has no session of its own; pass `duet --rpc --session <id>` to attribute every observation written during the RPC process to a caller-owned session (one RPC process is one logical session). Omit it to leave those writes unattributed. Programmatic callers can control the two sources independently with `memoryDbPath` and `memoryStores`. The CLI's `SessionManager` is a convenience layer that stores session snapshots under `~/.duet/sessions`, but the runner owns memory hydration, pi-turn observation/reflection, compaction, and observation persistence.
554
567
 
555
568
  > [!WARNING]
556
569
  > We strongly recommend running with a `memoryDbPath` (the default). Compaction is implemented as part of the observational memory pipeline: raw transcript content is replaced by observations/reflections that the observer and reflector write to the durable store. Without a database, the runner skips that pipeline entirely — there is no compaction, the transcript grows unbounded against the raw model context window, and long sessions will eventually hit a provider context-length error. `memoryDbPath: false` is appropriate for short-lived scripts, tests, and incognito runs that stay well under the model window.
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duetso/agent",
3
- "version": "0.2.6",
3
+ "version": "0.3.1",
4
4
  "description": "An opinionated full-stack agent turn runner with native memories, interrupts, and multi-agent orchestration",
5
5
  "keywords": [
6
6
  "agent",
@@ -32,6 +32,10 @@
32
32
  "types": "./dist/src/index.d.ts",
33
33
  "import": "./dist/src/index.js"
34
34
  },
35
+ "./memory-store": {
36
+ "types": "./dist/src/memory/store/index.d.ts",
37
+ "import": "./dist/src/memory-store.js"
38
+ },
35
39
  "./package.json": "./package.json"
36
40
  },
37
41
  "publishConfig": {
@@ -39,11 +43,11 @@
39
43
  },
40
44
  "scripts": {
41
45
  "setup": "bash scripts/setup-docker.sh",
42
- "build": "tsc",
46
+ "build": "tsc && bun build src/memory/store/index.ts --target node --format esm --outfile dist/src/memory-store.js",
43
47
  "check-types": "tsc --noEmit",
44
48
  "cli": "bun src/cli.ts",
45
49
  "dev": "tsc --watch",
46
- "eval": "docker run --rm -v \"$PWD:/src:ro\" -w /work -e HOME=/tmp/home -e DUET_TEST_IN_DOCKER=1 -e DUET_API_KEY -e ANTHROPIC_API_KEY -e OPENAI_API_KEY -e EVAL_MODEL -e JUDGE_MODEL -e COVERAGE_THRESHOLD oven/bun:1.3.11 sh -lc 'cp -R /src/. /work && bun install --frozen-lockfile && bun test ./evals/*.eval.ts'",
50
+ "eval": "docker run --rm -v \"$PWD:/src:ro\" -w /work -e HOME=/tmp/home -e DUET_TEST_IN_DOCKER=1 -e DUET_API_KEY -e ANTHROPIC_API_KEY -e OPENAI_API_KEY -e EVAL_MODEL -e EVAL_ADVISOR_THINKING -e JUDGE_MODEL -e COVERAGE_THRESHOLD oven/bun:1.3.11 sh -lc 'cp -R /src/. /work && bun install --frozen-lockfile && bun test ./evals/*.eval.ts'",
47
51
  "format": "oxfmt --write --no-error-on-unmatched-pattern",
48
52
  "format:check": "oxfmt --check --no-error-on-unmatched-pattern",
49
53
  "lint": "oxlint src/",
@@ -51,6 +55,7 @@
51
55
  "test": "docker run --rm -v \"$PWD:/src:ro\" -w /work -e HOME=/tmp/home -e DUET_TEST_IN_DOCKER=1 oven/bun:1.3.11 sh -lc 'apt-get update -qq && apt-get install -y -qq git >/dev/null && cp -R /src/. /work && bun install --frozen-lockfile && bun test ./test/*.test.ts'",
52
56
  "test:swebench": "bash benchmarks/swebench/test.sh",
53
57
  "example": "bun examples/basic.ts",
58
+ "example:memory-store": "bun examples/memory-store.ts",
54
59
  "example:state-machine": "bun examples/state-machine.ts",
55
60
  "example:tui-playground": "bun examples/tui-playground.ts",
56
61
  "prepare": "husky",
@@ -1 +1 @@
1
- {"version":3,"file":"auto-upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/auto-upgrade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/auto-upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAa9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAG9B;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,yBAAyB,CAAC;AAU1D;;;;GAIG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GACvE;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EACF,UAAU,GACV,iBAAiB,GACjB,sBAAsB;IACxB;;;;;;OAMG;OACD,eAAe,CAAC;CACrB,CAAC;AAEN,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAAC;IACvD,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,oEAAoE;IACpE,OAAO,IAAI,aAAa,GAAG,SAAS,CAAC;CACtC;AAED,wBAAgB,yBAAyB,IAAI,mBAAmB,CA6B/D;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,iEAAiE;IACjE,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACnE,yEAAyE;IACzE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9E,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,cAAc,CAAC;IACrC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,qBAAqB,CAAC;CACjD;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAsGvF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAiBjE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB,MAAM,GAAG,SAAS,CAiBpB;AAED,wDAAwD;AACxD,iBAAS,YAAY,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAO9E;AAUD;;;;;;GAMG;AACH,iBAAS,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAwBvD;AAiBD;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAExE,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,KAAK,YAAY,CAAC;AAW/F;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,GAAE,OAAmB,GACzB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA4C3C;AAgCD,eAAO,MAAM,SAAS;;;;CAIrB,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import { spawn as nodeSpawn } from "node:child_process";
2
- import { appendFileSync, closeSync, mkdirSync, openSync, readdirSync, readFileSync, readSync, rmSync, statSync, unlinkSync, writeSync, } from "node:fs";
2
+ import { appendFileSync, closeSync, mkdirSync, openSync, readdirSync, readSync, rmSync, statSync, } from "node:fs";
3
3
  import { homedir } from "node:os";
4
4
  import { join } from "node:path";
5
5
  import { peekOpenLockHolderPid } from "../memory/pglite.js";
6
6
  import { DEFAULT_MEMORY_DB_PATH } from "../session/session-manager.js";
7
+ import { acquireFileLock, DEFAULT_STALE_LOCK_MS, releaseFileLock } from "../file-lock.js";
7
8
  import { detectPackageManagerFromContext, globalUpgradeCommand, } from "./package-manager.js";
8
9
  import { compareSemverVersions, fetchLatestPackageVersion } from "./version-check.js";
9
10
  /**
@@ -30,7 +31,7 @@ import { compareSemverVersions, fetchLatestPackageVersion } from "./version-chec
30
31
  /** Env var users set to disable the auto-upgrade entirely. */
31
32
  export const NO_AUTO_UPGRADE_ENV = "DUET_NO_AUTO_UPGRADE";
32
33
  /** A lock held longer than this is treated as abandoned and replaced. */
33
- const STALE_LOCK_MS = 10 * 60 * 1000;
34
+ const STALE_LOCK_MS = DEFAULT_STALE_LOCK_MS;
34
35
  /** How long to wait on the registry. The TUI is already up and showing a
35
36
  * "checking…" placeholder, so we can wait longer than the legacy inline
36
37
  * notice without making the user feel the call. */
@@ -106,7 +107,9 @@ export async function runAutoUpgrade(input) {
106
107
  return emit({ kind: "skipped", reason: "memory-in-use" });
107
108
  }
108
109
  const now = input.now ?? (() => Date.now());
109
- const handle = acquireLock(now());
110
+ const { duetDir, lockPath } = upgradePaths();
111
+ ensureDir(duetDir);
112
+ const handle = acquireFileLock(lockPath, { now: now(), staleAfterMs: STALE_LOCK_MS });
110
113
  if (handle === null) {
111
114
  appendLog(`skip locked package=${input.packageName} current=${input.currentVersion}`);
112
115
  return emit({ kind: "locked" });
@@ -160,7 +163,7 @@ export async function runAutoUpgrade(input) {
160
163
  return emit({ kind: "failed", from: input.currentVersion, to: latest, manager, error });
161
164
  }
162
165
  finally {
163
- releaseLock(handle);
166
+ releaseFileLock(handle);
164
167
  }
165
168
  }
166
169
  /**
@@ -218,56 +221,6 @@ function upgradePaths() {
218
221
  logPath: join(duetDir, "logs", "upgrade.log"),
219
222
  };
220
223
  }
221
- function acquireLock(now) {
222
- const { duetDir, lockPath } = upgradePaths();
223
- ensureDir(duetDir);
224
- for (let attempt = 0; attempt < 2; attempt++) {
225
- try {
226
- const fd = openSync(lockPath, "wx");
227
- writeSync(fd, JSON.stringify({ pid: process.pid, startedAt: now }));
228
- return { fd, lockPath };
229
- }
230
- catch (error) {
231
- if (error?.code !== "EEXIST")
232
- return null;
233
- if (!isStaleLock(lockPath, now))
234
- return null;
235
- try {
236
- unlinkSync(lockPath);
237
- }
238
- catch {
239
- return null;
240
- }
241
- }
242
- }
243
- return null;
244
- }
245
- function isStaleLock(lockPath, now) {
246
- try {
247
- const raw = readFileSync(lockPath, "utf8");
248
- const payload = JSON.parse(raw);
249
- if (typeof payload.startedAt !== "number")
250
- return true;
251
- return now - payload.startedAt > STALE_LOCK_MS;
252
- }
253
- catch {
254
- return true;
255
- }
256
- }
257
- function releaseLock(handle) {
258
- try {
259
- closeSync(handle.fd);
260
- }
261
- catch {
262
- // ignore
263
- }
264
- try {
265
- unlinkSync(handle.lockPath);
266
- }
267
- catch {
268
- // ignore
269
- }
270
- }
271
224
  function ensureDir(path) {
272
225
  try {
273
226
  mkdirSync(path, { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"file":"auto-upgrade.js","sourceRoot":"","sources":["../../../src/cli/auto-upgrade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-upgrade.js","sourceRoot":"","sources":["../../../src/cli/auto-upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { probeConnectedProvider } from "../connected-providers/capability-probe.js";
2
+ import { type ConnectedProviderId, type ConnectedProviderStore } from "../connected-providers/store.js";
3
+ export interface ConnectCommandIO {
4
+ /** Credential-store seam used by the CLI and replaced with an in-memory store in tests. */
5
+ store?: ConnectedProviderStore;
6
+ /** Write human output or protocol-only JSON to stdout. */
7
+ write?: (text: string) => void;
8
+ /** Write human progress to stderr, independently capturable from protocol stdout. */
9
+ writeError?: (text: string) => void;
10
+ /** Override the help printer without intercepting global stdout. */
11
+ printHelp?: () => void;
12
+ /** Environment seam that gates fake-issuer registration in tests and staging. */
13
+ env?: Record<string, string | undefined>;
14
+ /** Override TTY detection; non-interactive calls always use device-code login. */
15
+ interactive?: boolean;
16
+ /** Override browser launch without changing which OAuth flow runs. */
17
+ openUrl?: (url: string) => void;
18
+ /** Read browser-flow fallback input or Copilot enterprise-domain input. */
19
+ prompt?: (message: string) => Promise<string>;
20
+ /** Capability seam; production performs a real one-token provider completion. */
21
+ probe?: typeof probeConnectedProvider;
22
+ /** Clock used for persisted timestamps and device-code expiry events. */
23
+ now?: () => number;
24
+ }
25
+ export type ConnectedProviderCliEvent = {
26
+ type: "device_code";
27
+ provider: ConnectedProviderId;
28
+ verificationUri: string;
29
+ userCode: string;
30
+ expiresAt: number;
31
+ } | {
32
+ type: "progress";
33
+ provider: ConnectedProviderId;
34
+ code: string;
35
+ } | {
36
+ type: "complete";
37
+ provider: ConnectedProviderId;
38
+ state: "connected" | "plan_ineligible" | "disconnected";
39
+ } | {
40
+ type: "error";
41
+ provider: ConnectedProviderId;
42
+ code: string;
43
+ };
44
+ export declare function runConnectCommand(args: string[], io?: ConnectCommandIO): Promise<void>;
45
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/cli/connect.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,sBAAsB,EAEvB,MAAM,4CAA4C,CAAC;AAMpD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAE5B,MAAM,iCAAiC,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,2FAA2F;IAC3F,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,qFAAqF;IACrF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,2EAA2E;IAC3E,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,sBAAsB,CAAC;IACtC,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAOD,MAAM,MAAM,yBAAyB,GACjC;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjE;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,KAAK,EAAE,WAAW,GAAG,iBAAiB,GAAG,cAAc,CAAC;CACzD,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4FhG"}