iosm-cli 0.2.10 → 0.2.11

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 (75) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +11 -2
  3. package/dist/core/agent-session.d.ts +4 -0
  4. package/dist/core/agent-session.d.ts.map +1 -1
  5. package/dist/core/agent-session.js +123 -49
  6. package/dist/core/agent-session.js.map +1 -1
  7. package/dist/core/background-processes.d.ts +31 -0
  8. package/dist/core/background-processes.d.ts.map +1 -0
  9. package/dist/core/background-processes.js +241 -0
  10. package/dist/core/background-processes.js.map +1 -0
  11. package/dist/core/bash-executor.d.ts +6 -0
  12. package/dist/core/bash-executor.d.ts.map +1 -1
  13. package/dist/core/bash-executor.js.map +1 -1
  14. package/dist/core/extensions/types.d.ts +3 -0
  15. package/dist/core/extensions/types.d.ts.map +1 -1
  16. package/dist/core/extensions/types.js.map +1 -1
  17. package/dist/core/extensions/wrapper.d.ts +19 -2
  18. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  19. package/dist/core/extensions/wrapper.js +23 -4
  20. package/dist/core/extensions/wrapper.js.map +1 -1
  21. package/dist/core/mcp/runtime.d.ts.map +1 -1
  22. package/dist/core/mcp/runtime.js +2 -0
  23. package/dist/core/mcp/runtime.js.map +1 -1
  24. package/dist/core/messages.d.ts +1 -1
  25. package/dist/core/messages.d.ts.map +1 -1
  26. package/dist/core/messages.js +2 -1
  27. package/dist/core/messages.js.map +1 -1
  28. package/dist/core/sdk.d.ts.map +1 -1
  29. package/dist/core/sdk.js +30 -2
  30. package/dist/core/sdk.js.map +1 -1
  31. package/dist/core/settings-manager.d.ts +17 -0
  32. package/dist/core/settings-manager.d.ts.map +1 -1
  33. package/dist/core/settings-manager.js +29 -0
  34. package/dist/core/settings-manager.js.map +1 -1
  35. package/dist/core/slash-commands.d.ts.map +1 -1
  36. package/dist/core/slash-commands.js +4 -0
  37. package/dist/core/slash-commands.js.map +1 -1
  38. package/dist/core/subagents.d.ts +10 -2
  39. package/dist/core/subagents.d.ts.map +1 -1
  40. package/dist/core/subagents.js +66 -17
  41. package/dist/core/subagents.js.map +1 -1
  42. package/dist/core/system-prompt.d.ts +25 -0
  43. package/dist/core/system-prompt.d.ts.map +1 -1
  44. package/dist/core/system-prompt.js +146 -14
  45. package/dist/core/system-prompt.js.map +1 -1
  46. package/dist/core/tools/bash.d.ts +5 -0
  47. package/dist/core/tools/bash.d.ts.map +1 -1
  48. package/dist/core/tools/bash.js +28 -2
  49. package/dist/core/tools/bash.js.map +1 -1
  50. package/dist/core/tools/index.d.ts +2 -1
  51. package/dist/core/tools/index.d.ts.map +1 -1
  52. package/dist/core/tools/index.js.map +1 -1
  53. package/dist/core/tools/permissions.d.ts +3 -0
  54. package/dist/core/tools/permissions.d.ts.map +1 -1
  55. package/dist/core/tools/permissions.js.map +1 -1
  56. package/dist/core/tools/task.d.ts +3 -1
  57. package/dist/core/tools/task.d.ts.map +1 -1
  58. package/dist/core/tools/task.js +48 -23
  59. package/dist/core/tools/task.js.map +1 -1
  60. package/dist/main.d.ts.map +1 -1
  61. package/dist/main.js +93 -1
  62. package/dist/main.js.map +1 -1
  63. package/dist/modes/interactive/interactive-mode.d.ts +5 -0
  64. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  65. package/dist/modes/interactive/interactive-mode.js +252 -24
  66. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  67. package/docs/cli-reference.md +5 -0
  68. package/docs/configuration.md +57 -1
  69. package/docs/development-and-testing.md +3 -2
  70. package/docs/extensions-packages-themes.md +27 -0
  71. package/docs/interactive-mode.md +3 -0
  72. package/docs/orchestration-and-subagents.md +16 -0
  73. package/docs/rpc-json-sdk.md +14 -0
  74. package/docs/sessions-traces-export.md +7 -0
  75. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAslDH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBA4RxC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyqDH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBA6RxC"}
package/dist/main.js CHANGED
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { supportsXhigh } from "@mariozechner/pi-ai";
8
8
  import chalk from "chalk";
9
- import { writeFileSync } from "node:fs";
9
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
10
10
  import { resolve } from "node:path";
11
11
  import { createInterface } from "readline";
12
12
  import { parseArgs, printHelp } from "./cli/args.js";
@@ -20,6 +20,7 @@ import { exportFromFile } from "./core/export-html/index.js";
20
20
  import { KeybindingsManager } from "./core/keybindings.js";
21
21
  import { ModelRegistry } from "./core/model-registry.js";
22
22
  import { resolveCliModel, resolveModelScope } from "./core/model-resolver.js";
23
+ import { loadModelsDevProviderCatalog } from "./core/models-dev-provider-catalog.js";
23
24
  import { getMcpCommandHelp, getMergedServerByName, loadMergedMcpConfig, McpRuntime, parseMcpAddCommand, parseMcpTargetCommand, } from "./core/mcp/index.js";
24
25
  import { getSemanticCommandHelp, parseSemanticCliCommand, SemanticConfigMissingError, SemanticIndexRequiredError, SemanticRebuildRequiredError, SemanticSearchRuntime, } from "./core/semantic/index.js";
25
26
  import { DefaultPackageManager } from "./core/package-manager.js";
@@ -55,6 +56,95 @@ async function readPipedStdin() {
55
56
  process.stdin.resume();
56
57
  });
57
58
  }
59
+ function resolveModelsDevApi(modelNpm) {
60
+ const npm = modelNpm?.toLowerCase() ?? "";
61
+ if (npm.includes("anthropic"))
62
+ return "anthropic-messages";
63
+ if (npm.includes("google-vertex"))
64
+ return "google-vertex";
65
+ if (npm.includes("google"))
66
+ return "google-generative-ai";
67
+ if (npm.includes("amazon-bedrock"))
68
+ return "bedrock-converse-stream";
69
+ if (npm.includes("mistral"))
70
+ return "mistral-conversations";
71
+ if (npm.includes("@ai-sdk/openai") && !npm.includes("compatible"))
72
+ return "openai-responses";
73
+ return "openai-completions";
74
+ }
75
+ function buildModelsDevProviderConfig(providerInfo) {
76
+ const baseUrl = providerInfo.api ?? providerInfo.models.find((model) => !!model.api)?.api;
77
+ if (!baseUrl)
78
+ return undefined;
79
+ if (providerInfo.models.length === 0)
80
+ return undefined;
81
+ const models = providerInfo.models.map((model) => ({
82
+ id: model.id,
83
+ name: model.name,
84
+ api: resolveModelsDevApi(model.npm ?? providerInfo.npm),
85
+ reasoning: model.reasoning,
86
+ input: [...model.input],
87
+ cost: model.cost,
88
+ contextWindow: model.contextWindow,
89
+ maxTokens: model.maxTokens,
90
+ headers: Object.keys(model.headers).length > 0 ? model.headers : undefined,
91
+ }));
92
+ return {
93
+ baseUrl,
94
+ models,
95
+ };
96
+ }
97
+ function isProviderConfiguredInModelsJson(providerId, modelsPath) {
98
+ if (!existsSync(modelsPath))
99
+ return false;
100
+ try {
101
+ const parsed = JSON.parse(readFileSync(modelsPath, "utf-8"));
102
+ const providers = parsed?.providers;
103
+ if (!providers || typeof providers !== "object" || Array.isArray(providers))
104
+ return false;
105
+ return Object.prototype.hasOwnProperty.call(providers, providerId);
106
+ }
107
+ catch {
108
+ return false;
109
+ }
110
+ }
111
+ async function hydrateAuthenticatedProviderModelsOnStartup(modelRegistry) {
112
+ if (isTruthyEnvFlag(process.env[ENV_OFFLINE]) || isTruthyEnvFlag(process.env.PI_OFFLINE))
113
+ return;
114
+ const providersToRefresh = new Set(modelRegistry.authStorage.list());
115
+ for (const model of modelRegistry.getAll()) {
116
+ if (modelRegistry.authStorage.hasAuth(model.provider)) {
117
+ providersToRefresh.add(model.provider);
118
+ }
119
+ }
120
+ if (providersToRefresh.size === 0)
121
+ return;
122
+ const modelsPath = getModelsPath();
123
+ let catalog;
124
+ try {
125
+ catalog = await loadModelsDevProviderCatalog();
126
+ }
127
+ catch {
128
+ return;
129
+ }
130
+ for (const providerId of providersToRefresh) {
131
+ if (isProviderConfiguredInModelsJson(providerId, modelsPath)) {
132
+ continue;
133
+ }
134
+ const providerInfo = catalog.get(providerId);
135
+ if (!providerInfo)
136
+ continue;
137
+ const config = buildModelsDevProviderConfig(providerInfo);
138
+ if (!config)
139
+ continue;
140
+ try {
141
+ modelRegistry.registerProvider(providerId, config);
142
+ }
143
+ catch {
144
+ // Best effort only.
145
+ }
146
+ }
147
+ }
58
148
  function reportSettingsErrors(settingsManager, context) {
59
149
  const errors = settingsManager.drainErrors();
60
150
  for (const { scope, error } of errors) {
@@ -310,6 +400,7 @@ async function runIosmInitAgentVerification(targetDir, result) {
310
400
  reportSettingsErrors(settingsManager, "iosm init verify");
311
401
  const authStorage = AuthStorage.create();
312
402
  const modelRegistry = new ModelRegistry(authStorage, getModelsPath());
403
+ await hydrateAuthenticatedProviderModelsOnStartup(modelRegistry);
313
404
  const resourceLoader = new DefaultResourceLoader({
314
405
  cwd: targetDir,
315
406
  agentDir,
@@ -1395,6 +1486,7 @@ export async function main(args) {
1395
1486
  reportSettingsErrors(settingsManager, "startup");
1396
1487
  const authStorage = AuthStorage.create();
1397
1488
  const modelRegistry = new ModelRegistry(authStorage, getModelsPath());
1489
+ await hydrateAuthenticatedProviderModelsOnStartup(modelRegistry);
1398
1490
  const resourceLoader = new DefaultResourceLoader({
1399
1491
  cwd,
1400
1492
  agentDir,