@duetso/agent 0.1.197 → 0.1.198

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/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duetso/agent",
3
- "version": "0.1.197",
3
+ "version": "0.1.198",
4
4
  "description": "An opinionated full-stack agent turn runner with native memories, interrupts, and multi-agent orchestration",
5
5
  "keywords": [
6
6
  "agent",
@@ -63,6 +63,7 @@
63
63
  "@modelcontextprotocol/sdk": "^1.29.0",
64
64
  "@opentui/core": "^0.2.5",
65
65
  "@vscode/ripgrep": "^1.18.0",
66
+ "ai": "^7",
66
67
  "ajv": "^8.20.0",
67
68
  "dedent": "^1.7.2",
68
69
  "dotenv": "^17.4.2",
@@ -83,7 +84,7 @@
83
84
  "typescript": "^5.7.0"
84
85
  },
85
86
  "engines": {
86
- "node": ">=20"
87
+ "node": ">=22"
87
88
  },
88
89
  "packageManager": "bun@1.3.11"
89
90
  }
@@ -12,6 +12,7 @@ export declare function printSkillsHelp(): void;
12
12
  export declare function printMemoryHelp(): void;
13
13
  export declare function printMemoryAddHelp(): void;
14
14
  export declare function printMemoryReflectHelp(): void;
15
+ export declare function printModelHelp(): void;
15
16
  export declare function printTrainHelp(): void;
16
17
  export declare function printSendFeedbackHelp(): void;
17
18
  export declare function printUpgradeHelp(packageName: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/cli/help.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAqFtD;AAED,wBAAgB,cAAc,IAAI,IAAI,CA0BrC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAsBnC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAqBtC;AAED,wBAAgB,eAAe,IAAI,IAAI,CA6BtC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAyBzC;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAuC7C;AAED,wBAAgB,cAAc,IAAI,IAAI,CA+DrC;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAiB5C;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAe1D"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/cli/help.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAyFtD;AAED,wBAAgB,cAAc,IAAI,IAAI,CA0BrC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAsBnC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAqBtC;AAED,wBAAgB,eAAe,IAAI,IAAI,CA6BtC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAyBzC;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAuC7C;AAED,wBAAgB,cAAc,IAAI,IAAI,CAsCrC;AAED,wBAAgB,cAAc,IAAI,IAAI,CA+DrC;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAiB5C;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAe1D"}
@@ -16,6 +16,7 @@ USAGE
16
16
  duet env [--env-file <path>] [--import [path]|--keys]
17
17
  duet skills [--workdir <path>]
18
18
  duet memory [--db <path>]
19
+ duet model -m <model> [--type text|image|video] [prompt]
19
20
  duet send-feedback [--file <path>] [text...]
20
21
  duet upgrade [--manager npm|bun|pnpm|yarn]
21
22
  echo "prompt" | duet
@@ -25,6 +26,7 @@ COMMANDS
25
26
  env Manually create or update the shared duet env file with provider API keys
26
27
  skills List installed skills + collisions as JSON
27
28
  memory Open a TUI to view, edit, and delete observational memories (alias: memories)
29
+ model Call a gateway model directly (text/image/video) via the AI SDK
28
30
  send-feedback Send free-form markdown feedback to the Duet team
29
31
  upgrade Upgrade the global ${packageName} installation
30
32
 
@@ -87,6 +89,8 @@ EXAMPLES
87
89
  duet login
88
90
  duet env
89
91
  duet memory
92
+ duet model -m openai/gpt-5.5 "write a haiku about gateways"
93
+ duet model -m black-forest-labs/flux-1.1-pro -o art.png "a fox in snow"
90
94
  duet train ./docs/my-project
91
95
  duet send-feedback "the TUI flickers when..."
92
96
  duet upgrade
@@ -260,6 +264,45 @@ OPTIONS
260
264
  -h, --help Show this help
261
265
  `);
262
266
  }
267
+ export function printModelHelp() {
268
+ console.log(`
269
+ duet model — Call a gateway model directly via the AI SDK
270
+
271
+ USAGE
272
+ duet model -m <model> [options] [prompt]
273
+ echo "prompt" | duet model -m <model>
274
+
275
+ DESCRIPTION
276
+ Talks to a model directly through the Vercel AI SDK pointed at the Duet
277
+ gateway, bypassing the agent harness. The request type is inferred from
278
+ the gateway model catalog (language→text, image→image, video→video) and
279
+ can be overridden with --type. Text streams to stdout; image and video
280
+ generations write files and print each path. Auth uses DUET_API_KEY.
281
+
282
+ OPTIONS
283
+ -m, --model <name> Gateway model id, e.g. openai/gpt-5.5 (required)
284
+ --type text|image|video Override the catalog-inferred request type
285
+ --image <path> Input image: vision context (text), edit source
286
+ (image), or still to animate (video)
287
+ -o, --out <path> Write output here; image/video auto-name when omitted
288
+ --system <text> System prompt for text/image-language models
289
+ --size <WxH> Image size, e.g. 1024x1024
290
+ --aspect <W:H> Aspect ratio, e.g. 16:9
291
+ --n <count> Number of outputs to generate
292
+ --seed <int> Generation seed
293
+ --duration <seconds> Video length
294
+ --resolution <WxH> Video resolution, e.g. 1280x720
295
+ --fps <int> Video frames per second
296
+ --env-file <path> Shared env file to load after cwd .env
297
+ -h, --help Show this help
298
+
299
+ EXAMPLES
300
+ duet model -m openai/gpt-5.5 "write a haiku about gateways"
301
+ duet model -m black-forest-labs/flux-1.1-pro -o art.png "a fox in snow"
302
+ duet model -m google/gemini-2.5-flash-image --type image --image src.png "add a hat"
303
+ duet model -m bytedance/seedance-1.0 --type video -o clip.mp4 "slow pan over dunes"
304
+ `);
305
+ }
263
306
  export function printTrainHelp() {
264
307
  console.log(`
265
308
  duet train — Ingest a project corpus into one durable memory observation
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/cli/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAEjD,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;gDAmBkC,WAAW;;;;;;;;;;;;;gHAaqD,+BAA+B;;;;;oFAK3D,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CxG,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;wEAW0D,qBAAqB;;;;;;;;;;;;;CAa5F,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;yDAa2C,qBAAqB;;;;;;IAM1E,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;CAChC,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;CAmBb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Bb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuBb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Db,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;CAeb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO,CAAC,GAAG,CAAC;oCACsB,WAAW;;;;;;;;;;;;CAY9C,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/cli/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAEjD,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;gDAqBkC,WAAW;;;;;;;;;;;;;gHAaqD,+BAA+B;;;;;oFAK3D,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDxG,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;wEAW0D,qBAAqB;;;;;;;;;;;;;CAa5F,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;yDAa2C,qBAAqB;;;;;;IAM1E,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;CAChC,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;CAmBb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Bb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuBb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Db,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;CAeb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO,CAAC,GAAG,CAAC;oCACsB,WAAW;;;;;;;;;;;;CAY9C,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { createGateway } from "ai";
2
+ /**
3
+ * The `duet model` subcommand talks to models directly through the Vercel AI
4
+ * SDK (`ai@^7`), pointed at the Duet gateway instead of the pi harness. The
5
+ * gateway re-exposes Vercel's AI Gateway under `/api/v1/ai-gateway`; the SDK's
6
+ * gateway provider speaks the versioned `/v4/ai` protocol path, and `/v1/models`
7
+ * serves the catalog. Auth is the org-scoped `DUET_API_KEY` Bearer token.
8
+ */
9
+ export declare const DUET_API_KEY_ENV = "DUET_API_KEY";
10
+ /** Capability classes the gateway tags each model with via `/v1/models`. */
11
+ export type ModelType = "language" | "image" | "video" | "embedding" | "realtime" | "reranking" | "speech" | "transcription";
12
+ /**
13
+ * Build an AI SDK gateway provider bound to the Duet proxy. Callers resolve a
14
+ * model with `gateway('<provider>/<model>')` and pass it to `generateText`,
15
+ * `generateImage`, etc. The base URL appends `/v4/ai` to the gateway origin —
16
+ * the protocol version the duet.so proxy currently serves. The custom `fetch`
17
+ * only raises the abort timeout; everything else is the platform default.
18
+ */
19
+ export declare function createDuetModelGateway(): ReturnType<typeof createGateway>;
20
+ /**
21
+ * Fetch the gateway model catalog and return a map of model id -> capability
22
+ * type. Used to validate a requested model and route it to the right generation
23
+ * call (text vs image vs video). Hits `/v1/models` directly because the catalog
24
+ * is an org-scoped read, not a generation, so it bypasses the SDK provider.
25
+ */
26
+ export declare function fetchModelCatalog(): Promise<Map<string, ModelType>>;
27
+ //# sourceMappingURL=model-gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-gateway.d.ts","sourceRoot":"","sources":["../../../src/cli/model-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAGnC;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAM/C,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,OAAO,GACP,OAAO,GACP,WAAW,GACX,UAAU,GACV,WAAW,GACX,QAAQ,GACR,eAAe,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,UAAU,CAAC,OAAO,aAAa,CAAC,CAazE;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAazE"}
@@ -0,0 +1,51 @@
1
+ import { createGateway } from "ai";
2
+ import { getDuetGatewayBaseUrl } from "../model-resolution/duet-gateway.js";
3
+ /**
4
+ * The `duet model` subcommand talks to models directly through the Vercel AI
5
+ * SDK (`ai@^7`), pointed at the Duet gateway instead of the pi harness. The
6
+ * gateway re-exposes Vercel's AI Gateway under `/api/v1/ai-gateway`; the SDK's
7
+ * gateway provider speaks the versioned `/v4/ai` protocol path, and `/v1/models`
8
+ * serves the catalog. Auth is the org-scoped `DUET_API_KEY` Bearer token.
9
+ */
10
+ export const DUET_API_KEY_ENV = "DUET_API_KEY";
11
+ // Generation can be slow — image/video models routinely run for minutes — so
12
+ // requests get a 15-minute ceiling rather than the SDK/runtime default.
13
+ const GENERATION_TIMEOUT_MS = 15 * 60 * 1000;
14
+ /**
15
+ * Build an AI SDK gateway provider bound to the Duet proxy. Callers resolve a
16
+ * model with `gateway('<provider>/<model>')` and pass it to `generateText`,
17
+ * `generateImage`, etc. The base URL appends `/v4/ai` to the gateway origin —
18
+ * the protocol version the duet.so proxy currently serves. The custom `fetch`
19
+ * only raises the abort timeout; everything else is the platform default.
20
+ */
21
+ export function createDuetModelGateway() {
22
+ // Preserve `fetch.preconnect` so the wrapper still satisfies the platform
23
+ // fetch signature; only the abort timeout is overridden.
24
+ const longTimeoutFetch = Object.assign((input, init) => fetch(input, { ...init, signal: AbortSignal.timeout(GENERATION_TIMEOUT_MS) }), { preconnect: fetch.preconnect });
25
+ return createGateway({
26
+ baseURL: `${getDuetGatewayBaseUrl()}/v4/ai`,
27
+ apiKey: process.env[DUET_API_KEY_ENV],
28
+ fetch: longTimeoutFetch,
29
+ });
30
+ }
31
+ /**
32
+ * Fetch the gateway model catalog and return a map of model id -> capability
33
+ * type. Used to validate a requested model and route it to the right generation
34
+ * call (text vs image vs video). Hits `/v1/models` directly because the catalog
35
+ * is an org-scoped read, not a generation, so it bypasses the SDK provider.
36
+ */
37
+ export async function fetchModelCatalog() {
38
+ const response = await fetch(`${getDuetGatewayBaseUrl()}/v1/models`, {
39
+ headers: { Authorization: `Bearer ${process.env[DUET_API_KEY_ENV] ?? ""}` },
40
+ });
41
+ if (!response.ok) {
42
+ throw new Error(`Failed to fetch model catalog: ${response.status} ${response.statusText}`);
43
+ }
44
+ const body = (await response.json());
45
+ const catalog = new Map();
46
+ for (const model of body.data ?? []) {
47
+ catalog.set(model.id, model.type);
48
+ }
49
+ return catalog;
50
+ }
51
+ //# sourceMappingURL=model-gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-gateway.js","sourceRoot":"","sources":["../../../src/cli/model-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAE/C,6EAA6E;AAC7E,wEAAwE;AACxE,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAa7C;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB;IACpC,0EAA0E;IAC1E,yDAAyD;IACzD,MAAM,gBAAgB,GAAiB,MAAM,CAAC,MAAM,CAClD,CAAC,KAAkC,EAAE,IAAkC,EAAE,EAAE,CACzE,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAC/E,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CACjC,CAAC;IACF,OAAO,aAAa,CAAC;QACnB,OAAO,EAAE,GAAG,qBAAqB,EAAE,QAAQ;QAC3C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACrC,KAAK,EAAE,gBAAgB;KACxB,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,qBAAqB,EAAE,YAAY,EAAE;QACnE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE;KAC5E,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsD,CAAC;IAC1F,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { type ModelType } from "./model-gateway.js";
2
+ /**
3
+ * High-level capability the CLI routes a request to. The gateway catalog uses
4
+ * `language` for text models; everything else maps straight through. `--type`
5
+ * lets the user override routing when the catalog is missing or wrong.
6
+ */
7
+ type RequestType = "text" | "image" | "video";
8
+ /** Parsed `duet model` flags. Prompt is positional or read from stdin. */
9
+ interface ModelArgs {
10
+ model?: string;
11
+ type?: RequestType;
12
+ imagePath?: string;
13
+ out?: string;
14
+ system?: string;
15
+ size?: string;
16
+ aspect?: string;
17
+ n?: number;
18
+ seed?: number;
19
+ duration?: number;
20
+ resolution?: string;
21
+ fps?: number;
22
+ envFile?: string;
23
+ prompt?: string;
24
+ help: boolean;
25
+ }
26
+ /**
27
+ * Map a gateway catalog capability to the CLI request type. `language` covers
28
+ * text models, including the gemini `*-image` models that emit images as message
29
+ * files; those are still text completions, so `--type image` is what reroutes
30
+ * them. An unknown/missing catalog entry defaults to text.
31
+ */
32
+ export declare function requestTypeForCapability(type: ModelType | undefined): RequestType;
33
+ /** Language models emit images via result.files, not the image endpoint. */
34
+ export declare function usesLanguageImagePath(type: ModelType | undefined): boolean;
35
+ /**
36
+ * Generate a timestamped output filename like `model-20260629T141500-1.png`.
37
+ * Used when the user does not pass `--out` for image/video generations so each
38
+ * run lands a distinct, sortable file. Lives here so the image and video units
39
+ * share one naming scheme.
40
+ */
41
+ export declare function autoOutputFilename(extension: string, index?: number): string;
42
+ /** Run `duet model` — call a gateway model directly via the AI SDK. */
43
+ export declare function runModelCommand(args: string[]): Promise<void>;
44
+ export declare function parseArgs(args: string[]): ModelArgs;
45
+ export {};
46
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/cli/model.ts"],"names":[],"mappings":"AAWA,OAAO,EAA6C,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/F;;;;GAIG;AACH,KAAK,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9C,0EAA0E;AAC1E,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAIjF;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAE1E;AAWD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,CAMvE;AAED,uEAAuE;AACvE,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBnE;AAoOD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CA6DnD"}
@@ -0,0 +1,347 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { extname } from "node:path";
3
+ import { createDownload, experimental_generateVideo as generateVideo, generateImage, generateText, streamText, } from "ai";
4
+ import { createDuetModelGateway, fetchModelCatalog } from "./model-gateway.js";
5
+ import { printModelHelp } from "./help.js";
6
+ import { fail, loadCliEnvFiles, resolveUserPath } from "./shared.js";
7
+ /**
8
+ * Map a gateway catalog capability to the CLI request type. `language` covers
9
+ * text models, including the gemini `*-image` models that emit images as message
10
+ * files; those are still text completions, so `--type image` is what reroutes
11
+ * them. An unknown/missing catalog entry defaults to text.
12
+ */
13
+ export function requestTypeForCapability(type) {
14
+ if (type === "image")
15
+ return "image";
16
+ if (type === "video")
17
+ return "video";
18
+ return "text";
19
+ }
20
+ /** Language models emit images via result.files, not the image endpoint. */
21
+ export function usesLanguageImagePath(type) {
22
+ return type === "language";
23
+ }
24
+ /** Image file extension -> media type, for inlining vision input parts. */
25
+ const IMAGE_MEDIA_TYPES = {
26
+ ".png": "image/png",
27
+ ".jpg": "image/jpeg",
28
+ ".jpeg": "image/jpeg",
29
+ ".gif": "image/gif",
30
+ ".webp": "image/webp",
31
+ };
32
+ /**
33
+ * Generate a timestamped output filename like `model-20260629T141500-1.png`.
34
+ * Used when the user does not pass `--out` for image/video generations so each
35
+ * run lands a distinct, sortable file. Lives here so the image and video units
36
+ * share one naming scheme.
37
+ */
38
+ export function autoOutputFilename(extension, index = 1) {
39
+ const stamp = new Date()
40
+ .toISOString()
41
+ .replace(/[-:]/g, "")
42
+ .replace(/\.\d+Z$/, "Z");
43
+ return `model-${stamp}-${index}${extension}`;
44
+ }
45
+ /** Run `duet model` — call a gateway model directly via the AI SDK. */
46
+ export async function runModelCommand(args) {
47
+ const parsed = parseArgs(args);
48
+ if (parsed.help) {
49
+ printModelHelp();
50
+ return;
51
+ }
52
+ loadCliEnvFiles(process.cwd(), parsed.envFile);
53
+ if (!parsed.model)
54
+ fail("Missing required --model/-m");
55
+ const model = parsed.model;
56
+ const prompt = parsed.prompt ?? (await readStdin());
57
+ if (!prompt.trim())
58
+ fail("Missing prompt (pass as an argument or via stdin)");
59
+ const requestType = parsed.type ?? (await resolveType(model));
60
+ if (requestType === "image") {
61
+ await runImagePath({ ...parsed, model, prompt });
62
+ return;
63
+ }
64
+ if (requestType === "video") {
65
+ await runVideoPath({ ...parsed, model, prompt });
66
+ return;
67
+ }
68
+ await runTextPath({ ...parsed, model, prompt });
69
+ }
70
+ /** Generate one or more images, writing each to disk and reporting warnings. */
71
+ async function runImagePath(parsed) {
72
+ // Some catalog `language` models (e.g. google/gemini-2.5-flash-image) emit
73
+ // images as message files rather than via the image-generation endpoint, so a
74
+ // `--type image` request on a language model routes through generateText.
75
+ if (usesLanguageImagePath(await lookupCapability(parsed.model))) {
76
+ await runLanguageImagePath(parsed);
77
+ return;
78
+ }
79
+ const gateway = createDuetModelGateway();
80
+ const result = await generateImage({
81
+ model: gateway.imageModel(parsed.model),
82
+ prompt: await buildImagePrompt(parsed),
83
+ size: parseSize(parsed.size),
84
+ aspectRatio: parseAspect(parsed.aspect),
85
+ n: parsed.n,
86
+ seed: parsed.seed,
87
+ });
88
+ for (const warning of result.warnings) {
89
+ process.stderr.write(`warning: ${JSON.stringify(warning)}\n`);
90
+ }
91
+ const single = result.images.length === 1;
92
+ for (const [index, image] of result.images.entries()) {
93
+ const extension = mediaTypeExtension(image.mediaType);
94
+ const path = resolveImageOut(parsed.out, extension, index + 1, single);
95
+ await writeFile(path, image.uint8Array);
96
+ process.stdout.write(`${path}\n`);
97
+ }
98
+ }
99
+ /** Generate images from a language model, extracting them from result.files. */
100
+ async function runLanguageImagePath(parsed) {
101
+ const gateway = createDuetModelGateway();
102
+ const messages = [{ role: "user", content: await buildContent(parsed) }];
103
+ const result = await generateText({
104
+ model: gateway(parsed.model),
105
+ system: parsed.system,
106
+ messages,
107
+ });
108
+ const images = result.files.filter((file) => file.mediaType.startsWith("image/"));
109
+ if (images.length === 0)
110
+ fail(`Model ${parsed.model} returned no images`);
111
+ const single = images.length === 1;
112
+ for (const [index, image] of images.entries()) {
113
+ const extension = mediaTypeExtension(image.mediaType);
114
+ const path = resolveImageOut(parsed.out, extension, index + 1, single);
115
+ await writeFile(path, image.uint8Array);
116
+ process.stdout.write(`${path}\n`);
117
+ }
118
+ }
119
+ // Video files are large; cap downloads at 512 MiB rather than the SDK's 2 GiB
120
+ // default so a runaway URL response fails fast instead of filling the disk.
121
+ const VIDEO_MAX_BYTES = 512 * 1024 * 1024;
122
+ /** Generate one or more videos, writing each to disk. Supports image->video. */
123
+ async function runVideoPath(parsed) {
124
+ const gateway = createDuetModelGateway();
125
+ const result = await generateVideo({
126
+ model: gateway.video(parsed.model),
127
+ prompt: await buildVideoPrompt(parsed),
128
+ aspectRatio: parseAspect(parsed.aspect),
129
+ resolution: parseResolution(parsed.resolution),
130
+ duration: parsed.duration,
131
+ fps: parsed.fps,
132
+ n: parsed.n,
133
+ seed: parsed.seed,
134
+ // Some video models return a URL the SDK must fetch; reuse the gateway's
135
+ // 15-minute fetch indirectly and bound the body to VIDEO_MAX_BYTES.
136
+ download: createDownload({ maxBytes: VIDEO_MAX_BYTES }),
137
+ }).catch(failOnBillingError);
138
+ for (const warning of result.warnings) {
139
+ process.stderr.write(`warning: ${JSON.stringify(warning)}\n`);
140
+ }
141
+ const single = result.videos.length === 1;
142
+ for (const [index, video] of result.videos.entries()) {
143
+ const extension = mediaTypeExtension(video.mediaType);
144
+ const path = resolveImageOut(parsed.out, extension, index + 1, single);
145
+ await writeFile(path, video.uint8Array);
146
+ process.stdout.write(`${path}\n`);
147
+ }
148
+ }
149
+ /**
150
+ * Video prompt: text alone for text->video, or `{ image, text }` when `--image`
151
+ * supplies a still to animate. The AI SDK takes a single source image as bytes.
152
+ */
153
+ async function buildVideoPrompt(parsed) {
154
+ if (!parsed.imagePath)
155
+ return parsed.prompt;
156
+ const source = await readFile(resolveUserPath(parsed.imagePath));
157
+ return { image: new Uint8Array(source), text: parsed.prompt };
158
+ }
159
+ /**
160
+ * Gateway billing gates (402 video-requires-payment, 403 forbidden) carry a
161
+ * plain-English body; surface it verbatim so the user knows to pay rather than
162
+ * seeing an opaque SDK stack. Anything else rethrows unchanged.
163
+ */
164
+ function failOnBillingError(error) {
165
+ const status = error?.statusCode;
166
+ if (status === 402 || status === 403) {
167
+ const body = error.responseBody;
168
+ const message = error.message ?? "billing error";
169
+ fail(`${status}: ${body ?? message}`);
170
+ }
171
+ throw error;
172
+ }
173
+ /**
174
+ * Image prompt: the text alone for text->image, or `{ text, images }` for
175
+ * editing when `--image` supplies a source image to transform.
176
+ */
177
+ async function buildImagePrompt(parsed) {
178
+ if (!parsed.imagePath)
179
+ return parsed.prompt;
180
+ const source = await readFile(resolveUserPath(parsed.imagePath));
181
+ return { text: parsed.prompt, images: [new Uint8Array(source)] };
182
+ }
183
+ /** Pick a single `--out` path, or auto-name; suffix the index when n>1. */
184
+ function resolveImageOut(out, extension, index, single) {
185
+ if (out)
186
+ return single ? resolveUserPath(out) : resolveUserPath(suffixIndex(out, index));
187
+ return autoOutputFilename(extension, index);
188
+ }
189
+ /** Insert `-<index>` before the extension: `art.png` -> `art-2.png`. */
190
+ function suffixIndex(path, index) {
191
+ const extension = extname(path);
192
+ return `${path.slice(0, path.length - extension.length)}-${index}${extension}`;
193
+ }
194
+ /** `image/png` -> `.png`, `image/jpeg` -> `.jpg`; default to `.png`. */
195
+ function mediaTypeExtension(mediaType) {
196
+ const subtype = mediaType.split("/")[1] ?? "png";
197
+ return subtype === "jpeg" ? ".jpg" : `.${subtype}`;
198
+ }
199
+ /** Validate `--size` is `{width}x{height}`; AI SDK requires that exact shape. */
200
+ function parseSize(size) {
201
+ if (!size)
202
+ return undefined;
203
+ if (!/^\d+x\d+$/.test(size))
204
+ fail(`Invalid --size: ${size} (expected {width}x{height})`);
205
+ return size;
206
+ }
207
+ /** Validate `--aspect` is `{width}:{height}`; AI SDK requires that exact shape. */
208
+ function parseAspect(aspect) {
209
+ if (!aspect)
210
+ return undefined;
211
+ if (!/^\d+:\d+$/.test(aspect))
212
+ fail(`Invalid --aspect: ${aspect} (expected {width}:{height})`);
213
+ return aspect;
214
+ }
215
+ /** Validate `--resolution` is `{width}x{height}`; AI SDK requires that exact shape. */
216
+ function parseResolution(resolution) {
217
+ if (!resolution)
218
+ return undefined;
219
+ if (!/^\d+x\d+$/.test(resolution)) {
220
+ fail(`Invalid --resolution: ${resolution} (expected {width}x{height})`);
221
+ }
222
+ return resolution;
223
+ }
224
+ /** Stream a text completion to stdout or the `--out` file. */
225
+ async function runTextPath(parsed) {
226
+ const gateway = createDuetModelGateway();
227
+ const messages = [{ role: "user", content: await buildContent(parsed) }];
228
+ const result = streamText({
229
+ model: gateway(parsed.model),
230
+ system: parsed.system,
231
+ messages,
232
+ });
233
+ if (parsed.out) {
234
+ const text = await result.text;
235
+ process.stdout.write(text);
236
+ await writeFile(resolveUserPath(parsed.out), text);
237
+ return;
238
+ }
239
+ for await (const chunk of result.textStream) {
240
+ process.stdout.write(chunk);
241
+ }
242
+ process.stdout.write("\n");
243
+ }
244
+ /**
245
+ * Build the user message content: the prompt text plus, when `--image` is set,
246
+ * an inline image part so vision models can see the picture.
247
+ */
248
+ async function buildContent(parsed) {
249
+ if (!parsed.imagePath)
250
+ return parsed.prompt;
251
+ const path = resolveUserPath(parsed.imagePath);
252
+ const mediaType = IMAGE_MEDIA_TYPES[extname(path).toLowerCase()];
253
+ if (!mediaType)
254
+ fail(`Unsupported image type: ${path}`);
255
+ const imagePart = { type: "image", image: await readFile(path), mediaType };
256
+ return [{ type: "text", text: parsed.prompt }, imagePart];
257
+ }
258
+ /** Map a catalog capability to the CLI's request type; default to text. */
259
+ async function resolveType(model) {
260
+ return requestTypeForCapability(await lookupCapability(model));
261
+ }
262
+ async function lookupCapability(model) {
263
+ try {
264
+ return (await fetchModelCatalog()).get(model);
265
+ }
266
+ catch {
267
+ return undefined;
268
+ }
269
+ }
270
+ async function readStdin() {
271
+ if (process.stdin.isTTY)
272
+ return "";
273
+ const chunks = [];
274
+ for await (const chunk of process.stdin)
275
+ chunks.push(chunk);
276
+ return Buffer.concat(chunks).toString("utf8").trim();
277
+ }
278
+ export function parseArgs(args) {
279
+ const out = { help: false };
280
+ for (let i = 0; i < args.length; i++) {
281
+ const arg = args[i];
282
+ const next = () => {
283
+ const value = args[++i];
284
+ if (value === undefined || value.startsWith("-"))
285
+ fail(`Missing value for ${arg}`);
286
+ return value;
287
+ };
288
+ switch (arg) {
289
+ case "--model":
290
+ case "-m":
291
+ out.model = next();
292
+ break;
293
+ case "--type":
294
+ out.type = parseType(next());
295
+ break;
296
+ case "--image":
297
+ out.imagePath = next();
298
+ break;
299
+ case "--out":
300
+ case "-o":
301
+ out.out = next();
302
+ break;
303
+ case "--system":
304
+ out.system = next();
305
+ break;
306
+ case "--size":
307
+ out.size = next();
308
+ break;
309
+ case "--aspect":
310
+ out.aspect = next();
311
+ break;
312
+ case "--n":
313
+ out.n = Number(next());
314
+ break;
315
+ case "--seed":
316
+ out.seed = Number(next());
317
+ break;
318
+ case "--duration":
319
+ out.duration = Number(next());
320
+ break;
321
+ case "--resolution":
322
+ out.resolution = next();
323
+ break;
324
+ case "--fps":
325
+ out.fps = Number(next());
326
+ break;
327
+ case "--env-file":
328
+ out.envFile = next();
329
+ break;
330
+ case "--help":
331
+ case "-h":
332
+ out.help = true;
333
+ break;
334
+ default:
335
+ if (arg.startsWith("-"))
336
+ fail(`Unknown model option: ${arg}`);
337
+ out.prompt = out.prompt ? `${out.prompt} ${arg}` : arg;
338
+ }
339
+ }
340
+ return out;
341
+ }
342
+ function parseType(value) {
343
+ if (value === "text" || value === "image" || value === "video")
344
+ return value;
345
+ fail(`Invalid --type: ${value} (expected text|image|video)`);
346
+ }
347
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/cli/model.ts"],"names":[],"mappings":"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"}
package/dist/src/cli.d.ts CHANGED
@@ -21,6 +21,7 @@ export type { LoginCommandIO } from "./cli/login.js";
21
21
  export { runSkillsCommand } from "./cli/skills.js";
22
22
  export { runUpgradeCommand } from "./cli/upgrade.js";
23
23
  export { runMemoryCommand } from "./cli/memory.js";
24
+ export { runModelCommand } from "./cli/model.js";
24
25
  export { runMemoryAddCommand } from "./cli/memory-add.js";
25
26
  export { runMemoryReflectCommand } from "./cli/memory-reflect.js";
26
27
  export { runTrainCommand } from "./cli/train.js";
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;GAWG;AAkBH,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAC1B,eAAe,EACf,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACjG,YAAY,EAAE,cAAc,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAO/D,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CA+C5C"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;GAWG;AAmBH,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAC1B,eAAe,EACf,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACjG,YAAY,EAAE,cAAc,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAO/D,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAmD5C"}
package/dist/src/cli.js CHANGED
@@ -16,6 +16,7 @@ import packageJson from "../package.json" with { type: "json" };
16
16
  import { runEnvCommand } from "./cli/env.js";
17
17
  import { runLoginCommand } from "./cli/login.js";
18
18
  import { runMemoryCommand } from "./cli/memory.js";
19
+ import { runModelCommand } from "./cli/model.js";
19
20
  import { runRpcCommand } from "./cli/rpc.js";
20
21
  import { runRunCommand } from "./cli/run.js";
21
22
  import { runSendFeedbackCommand } from "./cli/send-feedback.js";
@@ -29,6 +30,7 @@ export { runLoginCommand } from "./cli/login.js";
29
30
  export { runSkillsCommand } from "./cli/skills.js";
30
31
  export { runUpgradeCommand } from "./cli/upgrade.js";
31
32
  export { runMemoryCommand } from "./cli/memory.js";
33
+ export { runModelCommand } from "./cli/model.js";
32
34
  export { runMemoryAddCommand } from "./cli/memory-add.js";
33
35
  export { runMemoryReflectCommand } from "./cli/memory-reflect.js";
34
36
  export { runTrainCommand } from "./cli/train.js";
@@ -65,6 +67,10 @@ export async function runCli() {
65
67
  await runMemoryCommand(args.slice(1));
66
68
  return;
67
69
  }
70
+ if (subcommand === "model") {
71
+ await runModelCommand(args.slice(1));
72
+ return;
73
+ }
68
74
  if (subcommand === "train") {
69
75
  await runTrainCommand(args.slice(1));
70
76
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duetso/agent",
3
- "version": "0.1.197",
3
+ "version": "0.1.198",
4
4
  "description": "An opinionated full-stack agent turn runner with native memories, interrupts, and multi-agent orchestration",
5
5
  "keywords": [
6
6
  "agent",
@@ -63,6 +63,7 @@
63
63
  "@modelcontextprotocol/sdk": "^1.29.0",
64
64
  "@opentui/core": "^0.2.5",
65
65
  "@vscode/ripgrep": "^1.18.0",
66
+ "ai": "^7",
66
67
  "ajv": "^8.20.0",
67
68
  "dedent": "^1.7.2",
68
69
  "dotenv": "^17.4.2",
@@ -83,7 +84,7 @@
83
84
  "typescript": "^5.7.0"
84
85
  },
85
86
  "engines": {
86
- "node": ">=20"
87
+ "node": ">=22"
87
88
  },
88
89
  "packageManager": "bun@1.3.11"
89
90
  }