@phi-code-admin/phi-code 0.85.0 → 0.87.0
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/CHANGELOG.md +83 -0
- package/README.md +92 -123
- package/config/routing.example.json +129 -0
- package/config/routing.schema.json +58 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +6 -6
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +2 -2
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +9 -8
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/pi-user-agent.d.ts.map +1 -1
- package/dist/utils/pi-user-agent.js +4 -1
- package/dist/utils/pi-user-agent.js.map +1 -1
- package/docs/compaction.md +11 -11
- package/docs/custom-provider.md +4 -4
- package/docs/development.md +2 -2
- package/docs/extensions.md +47 -47
- package/docs/fork-policy.md +81 -0
- package/docs/index.md +7 -7
- package/docs/json.md +3 -3
- package/docs/keybindings.md +5 -5
- package/docs/models.md +6 -6
- package/docs/packages.md +37 -37
- package/docs/prompt-templates.md +4 -4
- package/docs/providers.md +9 -9
- package/docs/quickstart.md +25 -25
- package/docs/rpc.md +3 -3
- package/docs/sdk.md +34 -34
- package/docs/session-format.md +4 -4
- package/docs/sessions.md +11 -11
- package/docs/settings.md +9 -9
- package/docs/shell-aliases.md +2 -2
- package/docs/skills.md +9 -9
- package/docs/terminal-setup.md +7 -7
- package/docs/termux.md +6 -6
- package/docs/themes.md +9 -9
- package/docs/tmux.md +3 -3
- package/docs/tui.md +8 -8
- package/docs/usage.md +39 -39
- package/docs/windows.md +2 -2
- package/extensions/phi/agents.ts +12 -117
- package/extensions/phi/benchmark.ts +129 -49
- package/extensions/phi/browser.ts +10 -37
- package/extensions/phi/btw/btw.ts +1 -7
- package/extensions/phi/chrome/index.ts +1283 -741
- package/extensions/phi/commit.ts +9 -14
- package/extensions/phi/goal/index.ts +10 -33
- package/extensions/phi/init.ts +37 -47
- package/extensions/phi/keys.ts +2 -7
- package/extensions/phi/mcp/callback-server.ts +162 -165
- package/extensions/phi/mcp/config.ts +122 -136
- package/extensions/phi/mcp/errors.ts +18 -23
- package/extensions/phi/mcp/index.ts +322 -355
- package/extensions/phi/mcp/oauth-provider.ts +289 -289
- package/extensions/phi/mcp/server-manager.ts +390 -413
- package/extensions/phi/mcp/tool-bridge.ts +381 -415
- package/extensions/phi/memory.ts +2 -2
- package/extensions/phi/models.ts +27 -26
- package/extensions/phi/orchestrator.ts +343 -266
- package/extensions/phi/productivity.ts +4 -2
- package/extensions/phi/providers/agent-def.ts +128 -0
- package/extensions/phi/providers/alibaba.ts +56 -7
- package/extensions/phi/providers/context-window.ts +4 -1
- package/extensions/phi/providers/live-models.ts +5 -20
- package/extensions/phi/providers/orchestrator-helpers.ts +19 -5
- package/extensions/phi/providers/phase-machine.ts +220 -0
- package/extensions/phi/setup.ts +196 -169
- package/extensions/phi/skill-loader.ts +18 -21
- package/extensions/phi/smart-router.ts +6 -6
- package/extensions/phi/web-search.ts +90 -50
- package/package.json +2 -1
package/extensions/phi/memory.ts
CHANGED
|
@@ -23,7 +23,7 @@ import { readFileSync } from "node:fs";
|
|
|
23
23
|
import { access } from "node:fs/promises";
|
|
24
24
|
import { join } from "node:path";
|
|
25
25
|
import { Type } from "@sinclair/typebox";
|
|
26
|
-
import type { ExtensionAPI
|
|
26
|
+
import type { ExtensionAPI } from "phi-code";
|
|
27
27
|
import { SigmaMemory } from "sigma-memory";
|
|
28
28
|
|
|
29
29
|
/**
|
|
@@ -717,7 +717,7 @@ violates project rules.
|
|
|
717
717
|
if (parts.length > 0) {
|
|
718
718
|
ctx.ui.notify(`🧠 Memory: ${parts.join(", ")}`, "info");
|
|
719
719
|
}
|
|
720
|
-
} catch (
|
|
720
|
+
} catch (_error) {
|
|
721
721
|
// Non-critical, don't spam errors
|
|
722
722
|
}
|
|
723
723
|
});
|
package/extensions/phi/models.ts
CHANGED
|
@@ -15,15 +15,15 @@
|
|
|
15
15
|
* it appear everywhere without restarting Phi Code.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { ApiKeyStore, type ConfigWatcher, type ExtensionAPI, getApiKeyStore, getConfigWatcher } from "phi-code";
|
|
18
|
+
import { type ApiKeyStore, type ConfigWatcher, type ExtensionAPI, getApiKeyStore, getConfigWatcher } from "phi-code";
|
|
19
19
|
import { getModels } from "phi-code-ai";
|
|
20
|
+
import { formatWindow, inferContextWindow, parseContextWindow } from "./providers/context-window.js";
|
|
21
|
+
import { fetchLiveModels, peekCache, resetLiveModelsCache, toPersistedModel } from "./providers/live-models.js";
|
|
20
22
|
import {
|
|
21
23
|
buildOpenCodeGoAnthropicProviderConfig,
|
|
22
24
|
buildOpenCodeGoProviderConfig,
|
|
23
25
|
getOpenCodeGoModels,
|
|
24
26
|
} from "./providers/opencode-go.js";
|
|
25
|
-
import { formatWindow, inferContextWindow, parseContextWindow } from "./providers/context-window.js";
|
|
26
|
-
import { fetchLiveModels, peekCache, resetLiveModelsCache, toPersistedModel } from "./providers/live-models.js";
|
|
27
27
|
|
|
28
28
|
const PROVIDER_DISPLAY: Record<string, string> = {
|
|
29
29
|
opencode: "OpenCode Zen",
|
|
@@ -159,9 +159,8 @@ async function refreshOne(
|
|
|
159
159
|
resolvedApiKey?: string,
|
|
160
160
|
): Promise<RefreshOutcome> {
|
|
161
161
|
const stored = store.getProvider(providerId);
|
|
162
|
-
const storedKey =
|
|
163
|
-
? stored.apiKey
|
|
164
|
-
: undefined;
|
|
162
|
+
const storedKey =
|
|
163
|
+
stored?.apiKey && !stored.apiKey.startsWith("$") && stored.apiKey !== "local" ? stored.apiKey : undefined;
|
|
165
164
|
// Prefer the key stored in models.json, else the one resolved from
|
|
166
165
|
// auth.json/env by the model registry (providers set up via /auth only).
|
|
167
166
|
const apiKey = storedKey ?? resolvedApiKey;
|
|
@@ -241,15 +240,9 @@ export default function modelsExtension(pi: ExtensionAPI) {
|
|
|
241
240
|
await refreshCommand(target, ctx);
|
|
242
241
|
return;
|
|
243
242
|
}
|
|
244
|
-
ctx.ui.notify(
|
|
245
|
-
"Unknown subcommand. Use: `/models [list|refresh] [provider-id]`",
|
|
246
|
-
"warning",
|
|
247
|
-
);
|
|
243
|
+
ctx.ui.notify("Unknown subcommand. Use: `/models [list|refresh] [provider-id]`", "warning");
|
|
248
244
|
} catch (err) {
|
|
249
|
-
ctx.ui.notify(
|
|
250
|
-
`/models error: ${err instanceof Error ? err.message : String(err)}`,
|
|
251
|
-
"error",
|
|
252
|
-
);
|
|
245
|
+
ctx.ui.notify(`/models error: ${err instanceof Error ? err.message : String(err)}`, "error");
|
|
253
246
|
}
|
|
254
247
|
},
|
|
255
248
|
});
|
|
@@ -306,13 +299,17 @@ export default function modelsExtension(pi: ExtensionAPI) {
|
|
|
306
299
|
writeOverrides(overrides);
|
|
307
300
|
|
|
308
301
|
// Revert the active model to the persisted/inferred window.
|
|
309
|
-
const persistedModels =
|
|
310
|
-
|
|
311
|
-
|
|
302
|
+
const persistedModels =
|
|
303
|
+
(store.getProvider(provider)?.models as Array<{ id?: string; contextWindow?: number }> | undefined) ??
|
|
304
|
+
[];
|
|
312
305
|
const persisted = persistedModels.find((m) => m?.id === modelId)?.contextWindow;
|
|
313
|
-
const reverted =
|
|
306
|
+
const reverted =
|
|
307
|
+
persisted && persisted > 0 ? persisted : inferContextWindow(modelId, undefined, provider);
|
|
314
308
|
await pi.setModel({ ...model, contextWindow: reverted });
|
|
315
|
-
ctx.ui.notify(
|
|
309
|
+
ctx.ui.notify(
|
|
310
|
+
`Cleared context override for **${modelId}**. Reverted to \`${formatWindow(reverted)}\`.`,
|
|
311
|
+
"info",
|
|
312
|
+
);
|
|
316
313
|
return;
|
|
317
314
|
}
|
|
318
315
|
|
|
@@ -344,13 +341,13 @@ export default function modelsExtension(pi: ExtensionAPI) {
|
|
|
344
341
|
},
|
|
345
342
|
});
|
|
346
343
|
|
|
347
|
-
async function listCommand(
|
|
344
|
+
async function listCommand(
|
|
345
|
+
target: string | undefined,
|
|
346
|
+
ctx: { ui: { notify: (m: string, t?: "info" | "warning" | "error") => void } },
|
|
347
|
+
): Promise<void> {
|
|
348
348
|
const providers = target ? [target] : store.listProviders();
|
|
349
349
|
if (providers.length === 0) {
|
|
350
|
-
ctx.ui.notify(
|
|
351
|
-
"No providers configured. Run `/setup` or `/phi-init` to add one.",
|
|
352
|
-
"info",
|
|
353
|
-
);
|
|
350
|
+
ctx.ui.notify("No providers configured. Run `/setup` or `/phi-init` to add one.", "info");
|
|
354
351
|
return;
|
|
355
352
|
}
|
|
356
353
|
|
|
@@ -454,7 +451,10 @@ export default function modelsExtension(pi: ExtensionAPI) {
|
|
|
454
451
|
async function refreshCommand(
|
|
455
452
|
target: string | undefined,
|
|
456
453
|
ctx: {
|
|
457
|
-
ui: {
|
|
454
|
+
ui: {
|
|
455
|
+
notify: (m: string, t?: "info" | "warning" | "error") => void;
|
|
456
|
+
setStatus?: (k: string, v?: string) => void;
|
|
457
|
+
};
|
|
458
458
|
modelRegistry: {
|
|
459
459
|
getAvailable(): Array<{ provider: string }>;
|
|
460
460
|
getApiKeyForProvider(provider: string): Promise<string | undefined>;
|
|
@@ -490,7 +490,8 @@ export default function modelsExtension(pi: ExtensionAPI) {
|
|
|
490
490
|
|
|
491
491
|
let out = "**Refresh report:**\n";
|
|
492
492
|
for (const o of outcomes) {
|
|
493
|
-
const icon =
|
|
493
|
+
const icon =
|
|
494
|
+
o.source === "live" ? "[ok]" : o.source === "fallback" ? "[fb]" : o.source === "cache" ? "[c]" : "[--]";
|
|
494
495
|
out += ` ${icon} ${displayName(o.provider)} \`${o.provider}\` — ${o.count} new model(s) (${o.source}${o.error ? `, ${o.error}` : ""})\n`;
|
|
495
496
|
}
|
|
496
497
|
out += `\nOnly models missing from the built-in catalog are persisted to \`${store.configPath}\`;\n`;
|