@pi-orca/models 0.0.2-dev.20260413162335

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # pi-orca-models
2
+
3
+ **Model Alias Management**
4
+
5
+ Version: 0.0.1 (Phase 0 - Stub)
6
+ License: MIT
7
+
8
+ ## Overview
9
+
10
+ Model alias management (fast, balanced, thinker, coder) with user and project overrides.
11
+
12
+ **Status:** Phase 0 scaffold complete. Full implementation pending.
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install pi-orca-models
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ This package is currently in stub mode. Tools and commands are registered but return "Not implemented yet" messages.
23
+
24
+ ## Development Status
25
+
26
+ - [x] Package scaffold
27
+ - [x] TypeScript configuration
28
+ - [x] Tool registration (stub)
29
+ - [x] Command registration (stub)
30
+ - [x] Event emission (ready signal)
31
+ - [ ] Full implementation (pending)
32
+
33
+ ## Dependencies
34
+
35
+ - `pi-orca-core` — Shared types and utilities
36
+
37
+ ## Documentation
38
+
39
+ See the [Pi Orca specification](../../docs/spec-v0.3.0.md) for the complete design.
40
+
41
+ ## License
42
+
43
+ MIT License — see [LICENSE](../../LICENSE) for details.
@@ -0,0 +1,27 @@
1
+ # Pi Orca Model Aliases
2
+ # Spec: §8.2 — Model Alias Configuration
3
+ #
4
+ # Maps semantic tier names to provider-qualified model IDs.
5
+ # Override at project level: <project>/.pi/orca/models.yaml
6
+ # Session overrides: /models set <alias> <provider>/<model>
7
+
8
+ aliases:
9
+ fast:
10
+ provider: anthropic
11
+ model: claude-haiku-4-5
12
+ description: "Lowest latency, lowest cost"
13
+
14
+ balanced:
15
+ provider: anthropic
16
+ model: claude-sonnet-4-6
17
+ description: "Good all-rounder"
18
+
19
+ thinker:
20
+ provider: anthropic
21
+ model: claude-opus-4-6
22
+ description: "Deep reasoning, higher cost"
23
+
24
+ coder:
25
+ provider: anthropic
26
+ model: claude-sonnet-4-6
27
+ description: "Best available for code generation"
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Slash command implementations for pi-orca-models.
3
+ * Spec: §8.8 — Slash Commands
4
+ */
5
+ /**
6
+ * /models (no args) — return widget string
7
+ */
8
+ export declare function cmdModelsToggle(projectRoot?: string): Promise<string>;
9
+ /**
10
+ * /models set <alias> <provider>/<model> — set session override
11
+ */
12
+ export declare function cmdModelsSet(alias: string, modelId: string): Promise<string>;
13
+ /**
14
+ * /models reset — clear session overrides
15
+ */
16
+ export declare function cmdModelsReset(): string;
17
+ /**
18
+ * /models setup — interactive guided configuration stub
19
+ * Full interactive version requires Pi TUI access.
20
+ */
21
+ export declare function cmdModelsSetup(): Promise<string>;
22
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAclF;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CASvC;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAqBtD"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Slash command implementations for pi-orca-models.
3
+ * Spec: §8.8 — Slash Commands
4
+ */
5
+ import { listAllAliases, setSessionAlias, clearSessionOverrides, getSessionOverrides, getUserModelsPath, bootstrapModels, } from "./resolver.js";
6
+ import { renderModelsWidget } from "./widget.js";
7
+ /**
8
+ * /models (no args) — return widget string
9
+ */
10
+ export async function cmdModelsToggle(projectRoot) {
11
+ return renderModelsWidget(projectRoot);
12
+ }
13
+ /**
14
+ * /models set <alias> <provider>/<model> — set session override
15
+ */
16
+ export async function cmdModelsSet(alias, modelId) {
17
+ if (!alias || !modelId) {
18
+ return "Usage: /models set <alias> <provider>/<model>";
19
+ }
20
+ if (!modelId.includes("/")) {
21
+ return `Error: model must be in 'provider/model' format (e.g., anthropic/claude-haiku-4-5)`;
22
+ }
23
+ const [provider, ...modelParts] = modelId.split("/");
24
+ const model = modelParts.join("/");
25
+ setSessionAlias(alias, provider, model);
26
+ return `Set session alias '${alias}' → ${modelId}`;
27
+ }
28
+ /**
29
+ * /models reset — clear session overrides
30
+ */
31
+ export function cmdModelsReset() {
32
+ const overrides = getSessionOverrides();
33
+ const count = overrides.size;
34
+ clearSessionOverrides();
35
+ if (count === 0) {
36
+ return "No session overrides to clear.";
37
+ }
38
+ return `Cleared ${count} session override(s). Reverted to config-based resolution.`;
39
+ }
40
+ /**
41
+ * /models setup — interactive guided configuration stub
42
+ * Full interactive version requires Pi TUI access.
43
+ */
44
+ export async function cmdModelsSetup() {
45
+ const userPath = getUserModelsPath();
46
+ // Bootstrap if missing
47
+ const created = await bootstrapModels(false);
48
+ if (created) {
49
+ return `Created default model aliases at ${userPath}\n\nTo customize, edit the file directly or run:\n /models set <alias> <provider>/<model>`;
50
+ }
51
+ const aliases = await listAllAliases();
52
+ const lines = [
53
+ `Current model aliases (${userPath}):`,
54
+ "",
55
+ ...aliases.map((a) => ` ${a.alias.padEnd(12)} → ${a.modelId} [${a.source}]`),
56
+ "",
57
+ "To change an alias for this session: /models set <alias> <provider>/<model>",
58
+ "To permanently change, edit the file: " + userPath,
59
+ ];
60
+ return lines.join("\n");
61
+ }
62
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAoB;IACxD,OAAO,kBAAkB,CAAC,WAAW,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,OAAe;IAC/D,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,+CAA+C,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,oFAAoF,CAAC;IAC9F,CAAC;IAED,MAAM,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAExC,OAAO,sBAAsB,KAAK,OAAO,OAAO,EAAE,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC;IAC7B,qBAAqB,EAAE,CAAC;IAExB,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IACD,OAAO,WAAW,KAAK,4DAA4D,CAAC;AACtF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IAErC,uBAAuB;IACvB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;IAE7C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,oCAAoC,QAAQ,4FAA4F,CAAC;IAClJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG;QACZ,0BAA0B,QAAQ,IAAI;QACtC,EAAE;QACF,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;QAC/E,EAAE;QACF,6EAA6E;QAC7E,wCAAwC,GAAG,QAAQ;KACpD,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Pi Orca Models Extension
3
+ * Model alias management.
4
+ * Spec: §8 — pi-orca-models Extension
5
+ */
6
+ export { executeModelAliasTool } from "./tool.js";
7
+ export * from "./resolver.js";
8
+ export * from "./types.js";
9
+ export * from "./commands.js";
10
+ export declare function register(pi: any): void;
11
+ export default register;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AA+Q9B,wBAAgB,QAAQ,CAAC,EAAE,EAAE,GAAG,QA4I/B;AAED,eAAe,QAAQ,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,349 @@
1
+ /**
2
+ * Pi Orca Models Extension
3
+ * Model alias management.
4
+ * Spec: §8 — pi-orca-models Extension
5
+ */
6
+ import { executeModelAliasTool } from "./tool.js";
7
+ import { bootstrapModels, resolveAlias, listAllAliases, setSessionAlias, } from "./resolver.js";
8
+ import { cmdModelsSet, cmdModelsReset, cmdModelsSetup, } from "./commands.js";
9
+ import { DynamicBorder } from "@mariozechner/pi-coding-agent";
10
+ import { resolveCompletions } from "@pi-orca/core";
11
+ import { SelectList, Container, Text, Spacer, Input } from "@mariozechner/pi-tui";
12
+ export { executeModelAliasTool } from "./tool.js";
13
+ export * from "./resolver.js";
14
+ export * from "./types.js";
15
+ export * from "./commands.js";
16
+ // ─── completion cache (updated on session_start) ─────────────────────────────
17
+ // getArgumentCompletions is synchronous — cache aliases here for quick lookup.
18
+ let _cachedAliases = [];
19
+ let _cachedModels = [];
20
+ function buildModelsTree() {
21
+ return {
22
+ items: [
23
+ { value: "set", label: "set", description: "Set alias -> provider/model" },
24
+ { value: "reset", label: "reset", description: "Clear session overrides" },
25
+ { value: "setup", label: "setup", description: "Setup default aliases" },
26
+ ],
27
+ children: {
28
+ set: {
29
+ dynamicItems: () => _cachedAliases.map((a) => ({
30
+ value: a.alias,
31
+ label: a.alias,
32
+ description: `-> ${a.modelId} [${a.source}]`,
33
+ })),
34
+ children: {
35
+ "*": {
36
+ dynamicItems: () => _cachedModels.map((m) => ({ value: m, label: m })),
37
+ },
38
+ },
39
+ },
40
+ },
41
+ };
42
+ }
43
+ // ─── helpers ────────────────────────────────────────────────────────────────
44
+ /**
45
+ * Register all current aliases as models under the synthetic "orca-aliases"
46
+ * provider. For each alias we look up the real model in the registry and copy
47
+ * its `reasoning` and `input` fields so Pi treats the entry correctly.
48
+ */
49
+ async function registerAliasProvider(pi, ctx) {
50
+ const aliases = await listAllAliases();
51
+ if (aliases.length === 0)
52
+ return;
53
+ const models = aliases.map((a) => {
54
+ const [providerName, ...rest] = a.modelId.split("/");
55
+ const modelId = rest.join("/");
56
+ const real = ctx.modelRegistry?.find(providerName, modelId);
57
+ return {
58
+ id: a.modelId,
59
+ name: `[orca] ${a.alias}`,
60
+ reasoning: real?.reasoning ?? false,
61
+ input: (real?.input ?? ["text", "image"]),
62
+ contextWindow: real?.contextWindow ?? 200_000,
63
+ maxTokens: real?.maxTokens ?? 16_384,
64
+ cost: real?.cost ?? { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
65
+ };
66
+ });
67
+ pi.registerProvider("orca-aliases", {
68
+ baseUrl: "https://orca-aliases.local", // never called — resolved via model_select
69
+ apiKey: "ANTHROPIC_API_KEY", // reuse key so availability check passes
70
+ api: "anthropic-messages",
71
+ models,
72
+ });
73
+ console.log(`pi-orca-models: registered ${models.length} alias(es) in /model selector`);
74
+ }
75
+ // ─── interactive /models UI ──────────────────────────────────────────────────
76
+ /**
77
+ * Single-overlay interactive UI with internal state machine:
78
+ * "alias" — pick which alias to edit (esc → close)
79
+ * "model" — filter + pick real model (esc → back to alias)
80
+ *
81
+ * After a model is assigned the overlay stays open on the alias screen
82
+ * so the user can reassign more aliases before closing.
83
+ */
84
+ async function openModelsUI(pi, ctx) {
85
+ // ── collect data ────────────────────────────────────────────────────────
86
+ const allModels = (ctx.modelRegistry?.getAvailable?.() ?? ctx.modelRegistry?.getAll?.() ?? []).filter((m) => m.provider !== "orca-aliases");
87
+ if (allModels.length === 0) {
88
+ ctx.ui.notify("No models found in registry.", "warning");
89
+ return;
90
+ }
91
+ const modelItems = allModels.map((m) => ({
92
+ value: `${m.provider}/${m.id}`,
93
+ label: m.name,
94
+ description: `${m.provider}/${m.id}`,
95
+ }));
96
+ await ctx.ui.custom((tui, theme, _kb, done) => {
97
+ // ── shared theme shorthand ─────────────────────────────────────────
98
+ const ac = (s) => theme.fg("accent", s);
99
+ const dim = (s) => theme.fg("dim", s);
100
+ const mut = (s) => theme.fg("muted", s);
101
+ const wrn = (s) => theme.fg("warning", s);
102
+ const listTheme = {
103
+ selectedPrefix: ac,
104
+ selectedText: ac,
105
+ description: mut,
106
+ scrollInfo: dim,
107
+ noMatch: wrn,
108
+ };
109
+ let screen = "alias";
110
+ let chosenAlias = "";
111
+ // ── alias screen ───────────────────────────────────────────────────
112
+ let aliasList;
113
+ let aliasContainer;
114
+ function buildAliasScreen() {
115
+ // Rebuild every time so description reflects latest assignment
116
+ return listAllAliases().then((aliases) => {
117
+ const items = aliases.map((a) => ({
118
+ value: a.alias,
119
+ label: a.alias,
120
+ description: `→ ${a.modelId} [${a.source}]`,
121
+ }));
122
+ aliasContainer = new Container();
123
+ aliasContainer.addChild(new DynamicBorder(ac));
124
+ aliasContainer.addChild(new Text(ac(" Model Aliases — select to reassign"), 1, 0));
125
+ aliasContainer.addChild(new Spacer(1));
126
+ aliasList = new SelectList(items, Math.min(items.length + 2, 12), listTheme);
127
+ aliasList.onSelect = (item) => {
128
+ chosenAlias = item.value;
129
+ screen = "model";
130
+ filterInput.setValue("");
131
+ // Rebuild model list unfiltered
132
+ modelList = new SelectList(applyFilter(""), Math.min(modelItems.length + 2, 16), listTheme);
133
+ attachModelListHandlers();
134
+ tui.requestRender();
135
+ };
136
+ aliasList.onCancel = () => done(undefined);
137
+ aliasContainer.addChild(aliasList);
138
+ aliasContainer.addChild(new Spacer(1));
139
+ aliasContainer.addChild(new Text(dim(" ↑↓ navigate • enter select • esc close"), 1, 0));
140
+ aliasContainer.addChild(new DynamicBorder(ac));
141
+ });
142
+ }
143
+ // ── model screen ───────────────────────────────────────────────────
144
+ const filterInput = new Input();
145
+ filterInput.focused = true;
146
+ // Case-insensitive substring match across label (model name) and value (provider/id)
147
+ function applyFilter(filterText) {
148
+ const q = filterText.toLowerCase();
149
+ return q
150
+ ? modelItems.filter((m) => m.label.toLowerCase().includes(q) || m.value.toLowerCase().includes(q))
151
+ : modelItems;
152
+ }
153
+ let modelList = new SelectList(applyFilter(""), Math.min(modelItems.length + 2, 16), listTheme);
154
+ function attachModelListHandlers() {
155
+ modelList.onSelect = async (item) => {
156
+ const [provider, ...rest] = item.value.split("/");
157
+ setSessionAlias(chosenAlias, provider, rest.join("/"));
158
+ await registerAliasProvider(pi, ctx);
159
+ ctx.ui.notify(`"${chosenAlias}" → ${item.value}`, "info");
160
+ screen = "alias";
161
+ await buildAliasScreen();
162
+ tui.requestRender();
163
+ };
164
+ modelList.onCancel = () => {
165
+ screen = "alias";
166
+ tui.requestRender();
167
+ };
168
+ }
169
+ attachModelListHandlers();
170
+ filterInput.onSubmit = () => {
171
+ modelList.handleInput("\r");
172
+ };
173
+ filterInput.onEscape = () => {
174
+ screen = "alias";
175
+ tui.requestRender();
176
+ };
177
+ // ── component ──────────────────────────────────────────────────────
178
+ // Build alias screen initially then return component
179
+ let ready = false;
180
+ buildAliasScreen().then(() => {
181
+ ready = true;
182
+ tui.requestRender();
183
+ });
184
+ return {
185
+ render(w) {
186
+ if (!ready)
187
+ return [ac(" Loading…")];
188
+ if (screen === "alias") {
189
+ return aliasContainer.render(w);
190
+ }
191
+ // Model screen — rebuild container each render so filter label is live
192
+ const mc = new Container();
193
+ mc.addChild(new DynamicBorder(ac));
194
+ mc.addChild(new Text(ac(` Set "${chosenAlias}" — type to filter, ↑↓ navigate, enter select`), 1, 0));
195
+ mc.addChild(new Spacer(1));
196
+ mc.addChild(new Text(dim(" Filter: ") + filterInput.render(w > 20 ? w - 10 : w)[0], 0, 0));
197
+ mc.addChild(new Spacer(1));
198
+ mc.addChild(modelList);
199
+ mc.addChild(new Spacer(1));
200
+ mc.addChild(new Text(dim(" esc → back to aliases"), 1, 0));
201
+ mc.addChild(new DynamicBorder(ac));
202
+ return mc.render(w);
203
+ },
204
+ invalidate() {
205
+ aliasContainer?.invalidate();
206
+ modelList.invalidate();
207
+ filterInput.invalidate();
208
+ },
209
+ handleInput(data) {
210
+ if (screen === "alias") {
211
+ aliasList.handleInput(data);
212
+ }
213
+ else {
214
+ // On the model screen, typing goes to the filter input;
215
+ // arrow keys / enter go to the model list.
216
+ const isNav = [
217
+ "\x1b[A", "\x1b[B", "\x1b[C", "\x1b[D", // arrows
218
+ "\r", "\n", // enter
219
+ ].includes(data);
220
+ if (isNav) {
221
+ modelList.handleInput(data);
222
+ }
223
+ else {
224
+ const before = filterInput.getValue();
225
+ filterInput.handleInput(data);
226
+ const after = filterInput.getValue();
227
+ if (after !== before) {
228
+ // Rebuild SelectList with fresh filtered items
229
+ modelList = new SelectList(applyFilter(after), Math.min(modelItems.length + 2, 16), listTheme);
230
+ attachModelListHandlers();
231
+ }
232
+ }
233
+ }
234
+ tui.requestRender();
235
+ },
236
+ };
237
+ }, { overlay: true, overlayOptions: { width: "70%", minWidth: 60 } });
238
+ }
239
+ // ─── extension entry point ───────────────────────────────────────────────────
240
+ export function register(pi) {
241
+ console.log("pi-orca-models: Registering extension");
242
+ // ── tool ──────────────────────────────────────────────────────────────────
243
+ pi.registerTool?.({
244
+ name: "model_alias",
245
+ label: "Model Aliases",
246
+ description: "Manage model aliases (fast, balanced, thinker, coder). Actions: list, set, resolve",
247
+ parameters: {
248
+ type: "object",
249
+ properties: {
250
+ action: {
251
+ type: "string",
252
+ enum: ["list", "set", "resolve"],
253
+ description: "Action to perform",
254
+ },
255
+ alias: {
256
+ type: "string",
257
+ description: "Alias name (e.g., fast, balanced, thinker, coder)",
258
+ },
259
+ provider: { type: "string", description: "Provider name (e.g., anthropic)" },
260
+ model: {
261
+ type: "string",
262
+ description: "Model name or provider/model-id (e.g., claude-haiku-4-5 or anthropic/claude-haiku-4-5)",
263
+ },
264
+ },
265
+ required: ["action"],
266
+ },
267
+ async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
268
+ return executeModelAliasTool({ ...params });
269
+ },
270
+ });
271
+ // ── slash command ──────────────────────────────────────────────────────────
272
+ pi.registerCommand("models", {
273
+ description: "Manage model aliases (no args → /models widget)",
274
+ getArgumentCompletions(prefix) {
275
+ return resolveCompletions(prefix, buildModelsTree());
276
+ },
277
+ handler: async (args, ctx) => {
278
+ const parts = args ? args.trim().split(/\s+/) : [];
279
+ const subcommand = parts[0];
280
+ // No subcommand → open interactive overlay
281
+ if (!subcommand) {
282
+ await openModelsUI(pi, ctx);
283
+ return;
284
+ }
285
+ switch (subcommand.toLowerCase()) {
286
+ case "set": {
287
+ const alias = parts[1];
288
+ const modelId = parts[2];
289
+ const result = await cmdModelsSet(alias, modelId);
290
+ const isErr = result.startsWith("Error") || result.startsWith("Usage");
291
+ ctx.ui.notify(result, isErr ? "error" : "info");
292
+ if (!isErr) {
293
+ await registerAliasProvider(pi, ctx);
294
+ }
295
+ break;
296
+ }
297
+ case "reset": {
298
+ const result = cmdModelsReset();
299
+ ctx.ui.notify(result, "info");
300
+ await registerAliasProvider(pi, ctx);
301
+ break;
302
+ }
303
+ case "setup": {
304
+ const result = await cmdModelsSetup();
305
+ ctx.ui.notify(result, "info");
306
+ break;
307
+ }
308
+ default:
309
+ ctx.ui.notify(`Unknown subcommand '${subcommand}'. Available: set, reset, setup`, "error");
310
+ }
311
+ },
312
+ });
313
+ // ── lifecycle ──────────────────────────────────────────────────────────────
314
+ pi.on("session_start", async (_event, ctx) => {
315
+ await bootstrapModels(true);
316
+ _cachedAliases = await listAllAliases();
317
+ // Populate model cache from registry for completions
318
+ const allModels = (ctx.modelRegistry?.getAvailable?.() ?? ctx.modelRegistry?.getAll?.() ?? []).filter((m) => m.provider !== "orca-aliases");
319
+ _cachedModels = allModels.map((m) => `${m.provider}/${m.id}`);
320
+ await registerAliasProvider(pi, ctx);
321
+ pi.events?.on("orca:models:resolve", async (data) => {
322
+ return resolveAlias(data.alias);
323
+ });
324
+ pi.events?.on("orca:models:list", async () => {
325
+ return listAllAliases();
326
+ });
327
+ pi.events?.emit("orca:models:ready", {});
328
+ console.log("pi-orca-models: Ready");
329
+ });
330
+ // When user picks an orca alias from /model, resolve to the real model
331
+ pi.on("model_select", async (event, ctx) => {
332
+ if (event.model?.provider !== "orca-aliases")
333
+ return;
334
+ const realModelId = event.model.id;
335
+ const [realProvider, ...rest] = realModelId.split("/");
336
+ const realModel = rest.join("/");
337
+ const found = ctx.modelRegistry?.find(realProvider, realModel);
338
+ if (found) {
339
+ await pi.setModel(found);
340
+ ctx.ui.notify(`Alias '${event.model.name}' → ${realModelId}`, "info");
341
+ }
342
+ else {
343
+ ctx.ui.notify(`Alias '${event.model.name}': model ${realModelId} not found in registry`, "warning");
344
+ }
345
+ });
346
+ console.log("pi-orca-models: Registered");
347
+ }
348
+ export default register;
349
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Model alias resolution with four-level cascade.
3
+ * Spec: §8.3 — Override Cascade, §8.4 — First-Run Setup
4
+ */
5
+ import { ModelAlias, ResolvedAlias } from "./types.js";
6
+ /**
7
+ * Get path to user-level models.yaml.
8
+ */
9
+ export declare function getUserModelsPath(): string;
10
+ /**
11
+ * Get path to project-level models.yaml.
12
+ */
13
+ export declare function getProjectModelsPath(projectRoot?: string): string;
14
+ /**
15
+ * Bootstrap user-level models.yaml from defaults if missing.
16
+ * Spec: §8.4 — First-Run Setup
17
+ */
18
+ export declare function bootstrapModels(notify?: boolean): Promise<boolean>;
19
+ /**
20
+ * Resolve a model alias through the four-level cascade.
21
+ * Returns null if the input is not a known alias (treat as literal model ID).
22
+ * Spec: §8.3
23
+ */
24
+ export declare function resolveAlias(alias: string, projectRoot?: string): Promise<ResolvedAlias | null>;
25
+ /**
26
+ * Resolve a model field — alias or literal provider/model-id.
27
+ * Spec: §3.2.3
28
+ */
29
+ export declare function resolveModel(modelField: string, projectRoot?: string): Promise<string>;
30
+ /**
31
+ * Set a session-level alias override (Level 4).
32
+ * Spec: §8.3 — Session Override
33
+ */
34
+ export declare function setSessionAlias(alias: string, provider: string, model: string): void;
35
+ /**
36
+ * Clear all session-level overrides.
37
+ * Spec: §3.6.5 — /models reset
38
+ */
39
+ export declare function clearSessionOverrides(): void;
40
+ /**
41
+ * Get all current session overrides.
42
+ */
43
+ export declare function getSessionOverrides(): Map<string, ModelAlias>;
44
+ /**
45
+ * List all aliases through the full cascade.
46
+ * Returns a map of alias → resolved info + source.
47
+ */
48
+ export declare function listAllAliases(projectRoot?: string): Promise<Array<{
49
+ alias: string;
50
+ provider: string;
51
+ model: string;
52
+ modelId: string;
53
+ source: string;
54
+ }>>;
55
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,UAAU,EAAoB,aAAa,EAAE,MAAM,YAAY,CAAC;AAqBzE;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjE;AAWD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,MAAM,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CA4CrE;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAsC/B;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEpF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAE7D;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CACR,KAAK,CAAC;IACJ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CACH,CA8CA"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Model alias resolution with four-level cascade.
3
+ * Spec: §8.3 — Override Cascade, §8.4 — First-Run Setup
4
+ */
5
+ import { readFile, writeFile } from "fs/promises";
6
+ import { existsSync } from "fs";
7
+ import { join, dirname } from "path";
8
+ import { fileURLToPath } from "url";
9
+ import YAML from "yaml";
10
+ import { ensureDir, getUserOrcaDir, getProjectOrcaDir } from "@pi-orca/core";
11
+ // Session-level overrides (Level 4 — most specific)
12
+ const sessionOverrides = new Map();
13
+ /**
14
+ * Load models.yaml from a path. Returns empty config if not found.
15
+ */
16
+ async function loadModelsYaml(filePath) {
17
+ if (!existsSync(filePath)) {
18
+ return { aliases: {} };
19
+ }
20
+ try {
21
+ const content = await readFile(filePath, "utf-8");
22
+ const parsed = YAML.parse(content);
23
+ return parsed ?? { aliases: {} };
24
+ }
25
+ catch {
26
+ return { aliases: {} };
27
+ }
28
+ }
29
+ /**
30
+ * Get path to user-level models.yaml.
31
+ */
32
+ export function getUserModelsPath() {
33
+ return join(getUserOrcaDir(), "models.yaml");
34
+ }
35
+ /**
36
+ * Get path to project-level models.yaml.
37
+ */
38
+ export function getProjectModelsPath(projectRoot) {
39
+ return join(getProjectOrcaDir(projectRoot), "models.yaml");
40
+ }
41
+ /**
42
+ * Get path to bundled default models.yaml.
43
+ */
44
+ function getDefaultModelsPath() {
45
+ // Resolve relative to this file's location
46
+ const __dirname = dirname(fileURLToPath(import.meta.url));
47
+ return join(__dirname, "..", "defaults", "models.yaml");
48
+ }
49
+ /**
50
+ * Bootstrap user-level models.yaml from defaults if missing.
51
+ * Spec: §8.4 — First-Run Setup
52
+ */
53
+ export async function bootstrapModels(notify = true) {
54
+ const userPath = getUserModelsPath();
55
+ if (existsSync(userPath)) {
56
+ return false;
57
+ }
58
+ await ensureDir(getUserOrcaDir());
59
+ // Read default content
60
+ const defaultPath = getDefaultModelsPath();
61
+ let defaultContent;
62
+ if (existsSync(defaultPath)) {
63
+ defaultContent = await readFile(defaultPath, "utf-8");
64
+ }
65
+ else {
66
+ // Fallback inline defaults
67
+ defaultContent = `aliases:
68
+ fast:
69
+ provider: anthropic
70
+ model: claude-haiku-4-5
71
+ description: "Lowest latency, lowest cost"
72
+ balanced:
73
+ provider: anthropic
74
+ model: claude-sonnet-4-6
75
+ description: "Good all-rounder"
76
+ thinker:
77
+ provider: anthropic
78
+ model: claude-opus-4-6
79
+ description: "Deep reasoning, higher cost"
80
+ coder:
81
+ provider: anthropic
82
+ model: claude-sonnet-4-6
83
+ description: "Best available for code generation"
84
+ `;
85
+ }
86
+ await writeFile(userPath, defaultContent, "utf-8");
87
+ if (notify) {
88
+ console.log(`Created default model aliases at ${userPath} — run /models setup to customize.`);
89
+ }
90
+ return true;
91
+ }
92
+ /**
93
+ * Resolve a model alias through the four-level cascade.
94
+ * Returns null if the input is not a known alias (treat as literal model ID).
95
+ * Spec: §8.3
96
+ */
97
+ export async function resolveAlias(alias, projectRoot) {
98
+ // Level 4: Session overrides (most specific)
99
+ if (sessionOverrides.has(alias)) {
100
+ const override = sessionOverrides.get(alias);
101
+ return {
102
+ provider: override.provider,
103
+ model: override.model,
104
+ modelId: `${override.provider}/${override.model}`,
105
+ };
106
+ }
107
+ // Level 3: CLI flag (not easily available here — skip for now, handled by environment)
108
+ const cliOverride = process.env[`PI_MODEL_ALIAS_${alias.toUpperCase()}`];
109
+ if (cliOverride) {
110
+ const [provider, ...modelParts] = cliOverride.split("/");
111
+ const model = modelParts.join("/");
112
+ if (provider && model) {
113
+ return { provider, model, modelId: cliOverride };
114
+ }
115
+ }
116
+ // Level 2: Project override
117
+ const projectPath = getProjectModelsPath(projectRoot);
118
+ const projectConfig = await loadModelsYaml(projectPath);
119
+ if (projectConfig.aliases[alias]) {
120
+ const a = projectConfig.aliases[alias];
121
+ return { provider: a.provider, model: a.model, modelId: `${a.provider}/${a.model}` };
122
+ }
123
+ // Level 1: User defaults
124
+ const userPath = getUserModelsPath();
125
+ const userConfig = await loadModelsYaml(userPath);
126
+ if (userConfig.aliases[alias]) {
127
+ const a = userConfig.aliases[alias];
128
+ return { provider: a.provider, model: a.model, modelId: `${a.provider}/${a.model}` };
129
+ }
130
+ return null;
131
+ }
132
+ /**
133
+ * Resolve a model field — alias or literal provider/model-id.
134
+ * Spec: §3.2.3
135
+ */
136
+ export async function resolveModel(modelField, projectRoot) {
137
+ // Try alias first
138
+ const resolved = await resolveAlias(modelField, projectRoot);
139
+ if (resolved) {
140
+ return resolved.modelId;
141
+ }
142
+ // If it contains '/', treat as literal provider/model-id
143
+ if (modelField.includes("/")) {
144
+ return modelField;
145
+ }
146
+ // Unknown — return as-is with warning
147
+ return modelField;
148
+ }
149
+ /**
150
+ * Set a session-level alias override (Level 4).
151
+ * Spec: §8.3 — Session Override
152
+ */
153
+ export function setSessionAlias(alias, provider, model) {
154
+ sessionOverrides.set(alias, { provider, model });
155
+ }
156
+ /**
157
+ * Clear all session-level overrides.
158
+ * Spec: §3.6.5 — /models reset
159
+ */
160
+ export function clearSessionOverrides() {
161
+ sessionOverrides.clear();
162
+ }
163
+ /**
164
+ * Get all current session overrides.
165
+ */
166
+ export function getSessionOverrides() {
167
+ return new Map(sessionOverrides);
168
+ }
169
+ /**
170
+ * List all aliases through the full cascade.
171
+ * Returns a map of alias → resolved info + source.
172
+ */
173
+ export async function listAllAliases(projectRoot) {
174
+ // Gather all alias names from all levels
175
+ const allAliasNames = new Set();
176
+ // Session overrides
177
+ for (const key of sessionOverrides.keys()) {
178
+ allAliasNames.add(key);
179
+ }
180
+ // Project overrides
181
+ const projectConfig = await loadModelsYaml(getProjectModelsPath(projectRoot));
182
+ for (const key of Object.keys(projectConfig.aliases)) {
183
+ allAliasNames.add(key);
184
+ }
185
+ // User defaults
186
+ const userConfig = await loadModelsYaml(getUserModelsPath());
187
+ for (const key of Object.keys(userConfig.aliases)) {
188
+ allAliasNames.add(key);
189
+ }
190
+ const results = [];
191
+ for (const alias of allAliasNames) {
192
+ // Determine source
193
+ let source = "user defaults";
194
+ if (sessionOverrides.has(alias)) {
195
+ source = "session override";
196
+ }
197
+ else if (process.env[`PI_MODEL_ALIAS_${alias.toUpperCase()}`]) {
198
+ source = "CLI flag";
199
+ }
200
+ else if (projectConfig.aliases[alias]) {
201
+ source = "project override";
202
+ }
203
+ const resolved = await resolveAlias(alias, projectRoot);
204
+ if (resolved) {
205
+ results.push({
206
+ alias,
207
+ provider: resolved.provider,
208
+ model: resolved.model,
209
+ modelId: resolved.modelId,
210
+ source,
211
+ });
212
+ }
213
+ }
214
+ return results;
215
+ }
216
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
package/dist/tool.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Model alias tool dispatcher.
3
+ * Spec: §8.7 — Tool Schema
4
+ */
5
+ export interface ModelAliasToolParams {
6
+ action: "set" | "resolve";
7
+ alias?: string;
8
+ provider?: string;
9
+ model?: string;
10
+ projectRoot?: string;
11
+ }
12
+ export declare function executeModelAliasTool(params: ModelAliasToolParams): Promise<Record<string, unknown>>;
13
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA6DlC"}
package/dist/tool.js ADDED
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Model alias tool dispatcher.
3
+ * Spec: §8.7 — Tool Schema
4
+ */
5
+ import { resolveAlias, setSessionAlias } from "./resolver.js";
6
+ export async function executeModelAliasTool(params) {
7
+ switch (params.action) {
8
+ case "set": {
9
+ if (!params.alias) {
10
+ return { success: false, error: "The 'alias' parameter is required for set action" };
11
+ }
12
+ if (!params.provider || !params.model) {
13
+ // Try parsing from model as "provider/model"
14
+ if (params.model?.includes("/")) {
15
+ const [prov, ...modelParts] = params.model.split("/");
16
+ setSessionAlias(params.alias, prov, modelParts.join("/"));
17
+ return {
18
+ success: true,
19
+ message: `Set session alias '${params.alias}' → ${params.model}`,
20
+ };
21
+ }
22
+ return {
23
+ success: false,
24
+ error: "Both 'provider' and 'model' are required, or 'model' as 'provider/model-id'",
25
+ };
26
+ }
27
+ setSessionAlias(params.alias, params.provider, params.model);
28
+ return {
29
+ success: true,
30
+ message: `Set session alias '${params.alias}' → ${params.provider}/${params.model}`,
31
+ };
32
+ }
33
+ case "resolve": {
34
+ if (!params.alias) {
35
+ return { success: false, error: "The 'alias' parameter is required for resolve action" };
36
+ }
37
+ const resolved = await resolveAlias(params.alias, params.projectRoot);
38
+ if (resolved) {
39
+ return {
40
+ success: true,
41
+ alias: params.alias,
42
+ provider: resolved.provider,
43
+ model: resolved.model,
44
+ modelId: resolved.modelId,
45
+ };
46
+ }
47
+ // Not an alias — check if literal model ID
48
+ if (params.alias.includes("/")) {
49
+ return {
50
+ success: true,
51
+ alias: params.alias,
52
+ modelId: params.alias,
53
+ literal: true,
54
+ message: "Input is a literal provider/model-id, not an alias",
55
+ };
56
+ }
57
+ return {
58
+ success: false,
59
+ error: `Unknown alias '${params.alias}'. Use /models to see available aliases.`,
60
+ };
61
+ }
62
+ default:
63
+ return { success: false, error: `Unknown action: ${params.action}` };
64
+ }
65
+ }
66
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAkB,MAAM,eAAe,CAAC;AAU9E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAA4B;IAE5B,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kDAAkD,EAAE,CAAC;YACvF,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACtC,6CAA6C;gBAC7C,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,MAAM,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACtD,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1D,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,sBAAsB,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,KAAK,EAAE;qBACjE,CAAC;gBACJ,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,6EAA6E;iBACrF,CAAC;YACJ,CAAC;YACD,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,sBAAsB,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE;aACpF,CAAC;QACJ,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sDAAsD,EAAE,CAAC;YAC3F,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YACtE,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B,CAAC;YACJ,CAAC;YACD,2CAA2C;YAC3C,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,KAAK;oBACrB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,oDAAoD;iBAC9D,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,kBAAkB,MAAM,CAAC,KAAK,0CAA0C;aAChF,CAAC;QACJ,CAAC;QAED;YACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAoB,MAAc,CAAC,MAAM,EAAE,EAAE,CAAC;IAClF,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Type definitions for pi-orca-models.
3
+ * Spec: §8.2 — Model Alias Configuration
4
+ */
5
+ export interface ModelAlias {
6
+ provider: string;
7
+ model: string;
8
+ description?: string;
9
+ }
10
+ export interface ModelAliasConfig {
11
+ aliases: Record<string, ModelAlias>;
12
+ }
13
+ export interface ResolvedAlias {
14
+ provider: string;
15
+ model: string;
16
+ /** Full provider/model-id string */
17
+ modelId: string;
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Type definitions for pi-orca-models.
3
+ * Spec: §8.2 — Model Alias Configuration
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Models widget renderer.
3
+ * Spec: §8.9 — Widget
4
+ */
5
+ /**
6
+ * Render the models widget as a string.
7
+ * Spec: §8.9
8
+ */
9
+ export declare function renderModelsWidget(projectRoot?: string): Promise<string>;
10
+ //# sourceMappingURL=widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB9E"}
package/dist/widget.js ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Models widget renderer.
3
+ * Spec: §8.9 — Widget
4
+ */
5
+ import { listAllAliases } from "./resolver.js";
6
+ /**
7
+ * Render the models widget as a string.
8
+ * Spec: §8.9
9
+ */
10
+ export async function renderModelsWidget(projectRoot) {
11
+ const aliases = await listAllAliases(projectRoot);
12
+ const lines = ["🎯 Model Aliases"];
13
+ if (aliases.length === 0) {
14
+ lines.push(" (no aliases configured — run /models setup to configure)");
15
+ return lines.join("\n");
16
+ }
17
+ const sources = new Set(aliases.map((a) => a.source));
18
+ const sourceLabel = Array.from(sources).join(" + ");
19
+ for (const alias of aliases) {
20
+ const aliasStr = alias.alias.padEnd(10);
21
+ const modelStr = alias.modelId.padEnd(44);
22
+ lines.push(` ${aliasStr} → ${modelStr} ✓`);
23
+ }
24
+ lines.push(" " + "─".repeat(50));
25
+ lines.push(` Source: ${sourceLabel}`);
26
+ return lines.join("\n");
27
+ }
28
+ //# sourceMappingURL=widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget.js","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAoB;IAC3D,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IAElD,MAAM,KAAK,GAAa,CAAC,kBAAkB,CAAC,CAAC;IAE7C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEpD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,MAAM,QAAQ,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC;IAEvC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@pi-orca/models",
3
+ "version": "0.0.2-dev.20260413162335",
4
+ "description": "Model alias management",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "defaults"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc -p tsconfig.json",
20
+ "clean": "rm -rf dist *.tsbuildinfo",
21
+ "typecheck": "tsc --noEmit",
22
+ "test": "vitest run",
23
+ "test:watch": "vitest"
24
+ },
25
+ "keywords": [
26
+ "pi-package",
27
+ "pi-orca",
28
+ "pi-agent",
29
+ "pi-extension"
30
+ ],
31
+ "author": "Bindu / Ba",
32
+ "license": "MIT",
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/bwavell/pi-orca.git",
39
+ "directory": "packages/pi-orca-models"
40
+ },
41
+ "dependencies": {
42
+ "@pi-orca/core": "0.0.2-dev.20260413162335"
43
+ }
44
+ }