osagent 0.1.27 → 0.1.29

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/cli.js CHANGED
@@ -146180,7 +146180,7 @@ function createContentGeneratorConfig(config, authType, generationConfig) {
146180
146180
  };
146181
146181
  }
146182
146182
  async function createContentGenerator(config, gcConfig, sessionId2, isInitialAuth) {
146183
- const version2 = "0.1.27";
146183
+ const version2 = "0.1.29";
146184
146184
  const userAgent2 = `OSAgent/${version2} (${process.platform}; ${process.arch})`;
146185
146185
  const baseHeaders = {
146186
146186
  "User-Agent": userAgent2
@@ -195824,7 +195824,27 @@ function getArchitectureString(arch3) {
195824
195824
  return void 0;
195825
195825
  }
195826
195826
  }
195827
+ function getRipgrepFromPackage() {
195828
+ const platform15 = getPlatformString(process.platform);
195829
+ const arch3 = getArchitectureString(process.arch);
195830
+ if (!platform15 || !arch3) {
195831
+ return null;
195832
+ }
195833
+ const packageName = `@osagent/ripgrep-${platform15}-${arch3}`;
195834
+ try {
195835
+ const pkg2 = __require(packageName);
195836
+ if (pkg2 && typeof pkg2.getBinaryPath === "function") {
195837
+ return pkg2.getBinaryPath();
195838
+ }
195839
+ } catch {
195840
+ }
195841
+ return null;
195842
+ }
195827
195843
  function getBuiltinRipgrep() {
195844
+ const packagePath = getRipgrepFromPackage();
195845
+ if (packagePath) {
195846
+ return packagePath;
195847
+ }
195828
195848
  const platform15 = getPlatformString(process.platform);
195829
195849
  const arch3 = getArchitectureString(process.arch);
195830
195850
  if (!platform15 || !arch3) {
@@ -195945,6 +195965,7 @@ var init_ripgrepUtils = __esm({
195945
195965
  __dirname3 = path39.dirname(__filename2);
195946
195966
  __name(getPlatformString, "getPlatformString");
195947
195967
  __name(getArchitectureString, "getArchitectureString");
195968
+ __name(getRipgrepFromPackage, "getRipgrepFromPackage");
195948
195969
  __name(getBuiltinRipgrep, "getBuiltinRipgrep");
195949
195970
  __name(resolveRipgrep, "resolveRipgrep");
195950
195971
  __name(ensureRipgrepHealthy, "ensureRipgrepHealthy");
@@ -296088,6 +296109,17 @@ var SETTINGS_SCHEMA = {
296088
296109
  description: "Saved OpenAI credential profiles for quick switching via /openai-profile.",
296089
296110
  showInDialog: false,
296090
296111
  mergeStrategy: "shallow_merge" /* SHALLOW_MERGE */
296112
+ },
296113
+ // Provider-specific configurations
296114
+ providers: {
296115
+ type: "object",
296116
+ label: "Provider Configurations",
296117
+ category: "Security",
296118
+ requiresRestart: false,
296119
+ default: {},
296120
+ description: "Provider-specific configuration for each AI provider (GROQ, Ollama, OpenAI, etc.).",
296121
+ showInDialog: false,
296122
+ mergeStrategy: "shallow_merge" /* SHALLOW_MERGE */
296091
296123
  }
296092
296124
  }
296093
296125
  }
@@ -309779,7 +309811,7 @@ __name(getPackageJson, "getPackageJson");
309779
309811
  // packages/cli/src/utils/version.ts
309780
309812
  async function getCliVersion() {
309781
309813
  const pkgJson = await getPackageJson();
309782
- return "0.1.27";
309814
+ return "0.1.29";
309783
309815
  }
309784
309816
  __name(getCliVersion, "getCliVersion");
309785
309817
 
@@ -313948,8 +313980,8 @@ var formatDuration = /* @__PURE__ */ __name((milliseconds) => {
313948
313980
 
313949
313981
  // packages/cli/src/generated/git-commit.ts
313950
313982
  init_esbuild_shims();
313951
- var GIT_COMMIT_INFO2 = "fbe9649";
313952
- var CLI_VERSION2 = "0.1.27";
313983
+ var GIT_COMMIT_INFO2 = "481ebbe";
313984
+ var CLI_VERSION2 = "0.1.29";
313953
313985
 
313954
313986
  // packages/cli/src/utils/systemInfo.ts
313955
313987
  async function getNpmVersion() {
@@ -317774,6 +317806,10 @@ function getAvailableModelsForAuthType(authType) {
317774
317806
  }
317775
317807
  }
317776
317808
  __name(getAvailableModelsForAuthType, "getAvailableModelsForAuthType");
317809
+ function getAllAvailableModels() {
317810
+ return [...AVAILABLE_MODELS_OSA, ...AVAILABLE_MODELS_GROQ, ...AVAILABLE_MODELS_OLLAMA_LOCAL];
317811
+ }
317812
+ __name(getAllAvailableModels, "getAllAvailableModels");
317777
317813
  function getDefaultVisionModel() {
317778
317814
  return MAINLINE_VLM;
317779
317815
  }
@@ -317784,6 +317820,19 @@ function isVisionModel(modelId) {
317784
317820
  );
317785
317821
  }
317786
317822
  __name(isVisionModel, "isVisionModel");
317823
+ function getModelContextWindow(modelId) {
317824
+ const allModels = getAllAvailableModels();
317825
+ const model = allModels.find((m) => m.id === modelId);
317826
+ return model?.contextWindow ?? 131072;
317827
+ }
317828
+ __name(getModelContextWindow, "getModelContextWindow");
317829
+ function formatContextWindow(tokens) {
317830
+ if (tokens >= 1e6) {
317831
+ return `${Math.round(tokens / 1e6)}M`;
317832
+ }
317833
+ return `${Math.round(tokens / 1024)}K`;
317834
+ }
317835
+ __name(formatContextWindow, "formatContextWindow");
317787
317836
 
317788
317837
  // packages/cli/src/ui/commands/modelCommand.ts
317789
317838
  var modelCommand = {
@@ -317854,6 +317903,56 @@ var permissionsCommand = {
317854
317903
 
317855
317904
  // packages/cli/src/ui/commands/providerCommand.ts
317856
317905
  init_esbuild_shims();
317906
+ function getProviderApiKey(context2, providerKey, envVar) {
317907
+ const { settings } = context2.services;
317908
+ const providers = settings.merged.security?.auth?.providers;
317909
+ const providerConfig = providers?.[providerKey];
317910
+ if (providerConfig?.apiKey) {
317911
+ return providerConfig.apiKey;
317912
+ }
317913
+ return process.env[envVar];
317914
+ }
317915
+ __name(getProviderApiKey, "getProviderApiKey");
317916
+ async function persistProviderSelection(context2, authType, apiKey, model) {
317917
+ const { settings } = context2.services;
317918
+ settings.setValue("User" /* User */, "security.auth.selectedType", authType);
317919
+ if (apiKey) {
317920
+ const providerKey = authType.replace(/-/g, "_");
317921
+ const currentProviders = settings.merged.security?.auth?.providers || {};
317922
+ const updatedProviders = {
317923
+ ...currentProviders,
317924
+ [providerKey]: {
317925
+ ...currentProviders[providerKey],
317926
+ apiKey,
317927
+ model
317928
+ }
317929
+ };
317930
+ settings.setValue(
317931
+ "User" /* User */,
317932
+ "security.auth.providers",
317933
+ updatedProviders
317934
+ );
317935
+ }
317936
+ }
317937
+ __name(persistProviderSelection, "persistProviderSelection");
317938
+ function getProviderDisplayName(authType) {
317939
+ if (!authType) return "Unknown";
317940
+ switch (authType) {
317941
+ case AuthType2.USE_GROQ:
317942
+ return "GROQ";
317943
+ case AuthType2.OLLAMA_LOCAL:
317944
+ return "Ollama (Local)";
317945
+ case AuthType2.OLLAMA_CLOUD:
317946
+ return "Ollama (Cloud)";
317947
+ case AuthType2.USE_OPENAI:
317948
+ return "OpenAI Compatible";
317949
+ case AuthType2.OSA_OAUTH:
317950
+ return "OSAgent Cloud";
317951
+ default:
317952
+ return String(authType);
317953
+ }
317954
+ }
317955
+ __name(getProviderDisplayName, "getProviderDisplayName");
317857
317956
  var providerCommand = {
317858
317957
  name: "provider",
317859
317958
  get description() {
@@ -317876,7 +317975,7 @@ var providerCommand = {
317876
317975
  content: t2("Configuration not available.")
317877
317976
  };
317878
317977
  }
317879
- const apiKey = process.env["GROQ_API_KEY"];
317978
+ const apiKey = getProviderApiKey(context2, "groq", "GROQ_API_KEY");
317880
317979
  if (!apiKey) {
317881
317980
  return {
317882
317981
  type: "start_auth",
@@ -317884,7 +317983,17 @@ var providerCommand = {
317884
317983
  };
317885
317984
  }
317886
317985
  try {
317986
+ process.env["GROQ_API_KEY"] = apiKey;
317887
317987
  await config.refreshAuth(AuthType2.USE_GROQ);
317988
+ await persistProviderSelection(
317989
+ context2,
317990
+ AuthType2.USE_GROQ,
317991
+ apiKey,
317992
+ "moonshotai/kimi-k2-instruct-0905"
317993
+ );
317994
+ const contextWindow = getModelContextWindow(
317995
+ "moonshotai/kimi-k2-instruct-0905"
317996
+ );
317888
317997
  return {
317889
317998
  type: "message",
317890
317999
  messageType: "info",
@@ -317892,15 +318001,18 @@ var providerCommand = {
317892
318001
 
317893
318002
  Model: moonshotai/kimi-k2-instruct-0905
317894
318003
  Speed: ~200 tok/s
317895
- Context: 256K tokens
318004
+ Context: ${formatContextWindow(contextWindow)} tokens
317896
318005
 
317897
- Use /model to change models within GROQ.`)
318006
+ Use /model to change models within GROQ.
318007
+ Provider selection saved to settings.`)
317898
318008
  };
317899
318009
  } catch (error) {
317900
318010
  return {
317901
318011
  type: "message",
317902
318012
  messageType: "error",
317903
- content: t2(`Failed to switch to GROQ: ${error instanceof Error ? error.message : String(error)}`)
318013
+ content: t2(
318014
+ `Failed to switch to GROQ: ${error instanceof Error ? error.message : String(error)}`
318015
+ )
317904
318016
  };
317905
318017
  }
317906
318018
  }, "action")
@@ -317922,19 +318034,23 @@ Use /model to change models within GROQ.`)
317922
318034
  }
317923
318035
  try {
317924
318036
  await config.refreshAuth(AuthType2.OLLAMA_LOCAL);
318037
+ await persistProviderSelection(context2, AuthType2.OLLAMA_LOCAL);
317925
318038
  return {
317926
318039
  type: "message",
317927
318040
  messageType: "info",
317928
318041
  content: t2(`Switched to local Ollama provider.
317929
318042
 
317930
318043
  Make sure Ollama is running: ollama serve
317931
- Use /model to select a local model.`)
318044
+ Use /model to select a local model.
318045
+ Provider selection saved to settings.`)
317932
318046
  };
317933
318047
  } catch (error) {
317934
318048
  return {
317935
318049
  type: "message",
317936
318050
  messageType: "error",
317937
- content: t2(`Failed to switch to Ollama: ${error instanceof Error ? error.message : String(error)}`)
318051
+ content: t2(
318052
+ `Failed to switch to Ollama: ${error instanceof Error ? error.message : String(error)}`
318053
+ )
317938
318054
  };
317939
318055
  }
317940
318056
  }, "action")
@@ -317954,7 +318070,7 @@ Use /model to select a local model.`)
317954
318070
  content: t2("Configuration not available.")
317955
318071
  };
317956
318072
  }
317957
- const apiKey = process.env["OPENAI_API_KEY"];
318073
+ const apiKey = getProviderApiKey(context2, "openai", "OPENAI_API_KEY");
317958
318074
  if (!apiKey) {
317959
318075
  return {
317960
318076
  type: "start_auth",
@@ -317962,20 +318078,64 @@ Use /model to select a local model.`)
317962
318078
  };
317963
318079
  }
317964
318080
  try {
318081
+ process.env["OPENAI_API_KEY"] = apiKey;
317965
318082
  await config.refreshAuth(AuthType2.USE_OPENAI);
318083
+ await persistProviderSelection(context2, AuthType2.USE_OPENAI, apiKey);
317966
318084
  return {
317967
318085
  type: "message",
317968
318086
  messageType: "info",
317969
318087
  content: t2(`Switched to OpenAI provider.
317970
318088
 
317971
318089
  Set OPENAI_BASE_URL for custom endpoints.
317972
- Use /model to select a model.`)
318090
+ Use /model to select a model.
318091
+ Provider selection saved to settings.`)
318092
+ };
318093
+ } catch (error) {
318094
+ return {
318095
+ type: "message",
318096
+ messageType: "error",
318097
+ content: t2(
318098
+ `Failed to switch to OpenAI: ${error instanceof Error ? error.message : String(error)}`
318099
+ )
318100
+ };
318101
+ }
318102
+ }, "action")
318103
+ },
318104
+ {
318105
+ name: "osa",
318106
+ altNames: ["osagent", "cloud"],
318107
+ get description() {
318108
+ return t2("Switch to OSAgent Cloud (default)");
318109
+ },
318110
+ kind: "built-in" /* BUILT_IN */,
318111
+ action: /* @__PURE__ */ __name(async (context2) => {
318112
+ const { config } = context2.services;
318113
+ if (!config) {
318114
+ return {
318115
+ type: "message",
318116
+ messageType: "error",
318117
+ content: t2("Configuration not available.")
318118
+ };
318119
+ }
318120
+ try {
318121
+ await config.refreshAuth(AuthType2.OSA_OAUTH);
318122
+ await persistProviderSelection(context2, AuthType2.OSA_OAUTH);
318123
+ return {
318124
+ type: "message",
318125
+ messageType: "info",
318126
+ content: t2(`Switched to OSAgent Cloud provider.
318127
+
318128
+ Model: qwen3-coder:480b-cloud
318129
+ Use /model to change models.
318130
+ Provider selection saved to settings.`)
317973
318131
  };
317974
318132
  } catch (error) {
317975
318133
  return {
317976
318134
  type: "message",
317977
318135
  messageType: "error",
317978
- content: t2(`Failed to switch to OpenAI: ${error instanceof Error ? error.message : String(error)}`)
318136
+ content: t2(
318137
+ `Failed to switch to OSAgent Cloud: ${error instanceof Error ? error.message : String(error)}`
318138
+ )
317979
318139
  };
317980
318140
  }
317981
318141
  }, "action")
@@ -317987,7 +318147,7 @@ Use /model to select a model.`)
317987
318147
  },
317988
318148
  kind: "built-in" /* BUILT_IN */,
317989
318149
  action: /* @__PURE__ */ __name(async (context2) => {
317990
- const { config } = context2.services;
318150
+ const { config, settings } = context2.services;
317991
318151
  if (!config) {
317992
318152
  return {
317993
318153
  type: "message",
@@ -317999,39 +318159,43 @@ Use /model to select a model.`)
317999
318159
  const contentGeneratorConfig = config.getContentGeneratorConfig();
318000
318160
  const model = contentGeneratorConfig?.model || "unknown";
318001
318161
  const baseUrl = contentGeneratorConfig?.baseUrl || "default";
318002
- let providerName = "Unknown";
318003
- switch (authType) {
318004
- case AuthType2.USE_GROQ:
318005
- providerName = "GROQ";
318006
- break;
318007
- case AuthType2.OLLAMA_LOCAL:
318008
- providerName = "Ollama (Local)";
318009
- break;
318010
- case AuthType2.OLLAMA_CLOUD:
318011
- providerName = "Ollama (Cloud)";
318012
- break;
318013
- case AuthType2.USE_OPENAI:
318014
- providerName = "OpenAI Compatible";
318015
- break;
318016
- case AuthType2.OSA_OAUTH:
318017
- providerName = "OSAgent Cloud";
318018
- break;
318019
- default:
318020
- providerName = String(authType);
318162
+ const providerName = getProviderDisplayName(authType);
318163
+ const contextWindow = getModelContextWindow(model);
318164
+ const savedAuthType = settings.merged.security?.auth?.selectedType;
318165
+ const providers = settings.merged.security?.auth?.providers;
318166
+ const providerStatuses = [];
318167
+ const providerList = [
318168
+ { key: "groq", name: "GROQ", envVar: "GROQ_API_KEY" },
318169
+ { key: "openai", name: "OpenAI", envVar: "OPENAI_API_KEY" },
318170
+ { key: "ollama_local", name: "Ollama Local", envVar: null },
318171
+ { key: "osa_oauth", name: "OSAgent Cloud", envVar: null }
318172
+ ];
318173
+ for (const p of providerList) {
318174
+ const hasSettingsKey = !!providers?.[p.key]?.apiKey;
318175
+ const hasEnvKey = p.envVar ? !!process.env[p.envVar] : true;
318176
+ const configured = hasSettingsKey || hasEnvKey;
318177
+ const status = configured ? "\u2713" : "\u25CB";
318178
+ providerStatuses.push(` ${status} ${p.name}`);
318021
318179
  }
318022
318180
  return {
318023
318181
  type: "message",
318024
318182
  messageType: "info",
318025
318183
  content: t2(`Provider Status
318026
318184
  \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
318027
- Provider: ${providerName}
318185
+ Active: ${providerName}
318028
318186
  Model: ${model}
318187
+ Context: ${formatContextWindow(contextWindow)} tokens
318029
318188
  Base URL: ${baseUrl}
318189
+ Saved in Settings: ${savedAuthType ? "Yes" : "No"}
318190
+
318191
+ Configured Providers:
318192
+ ${providerStatuses.join("\n")}
318030
318193
 
318031
318194
  Commands:
318032
318195
  /provider groq - Switch to GROQ (Kimi K2)
318033
318196
  /provider ollama - Switch to local Ollama
318034
318197
  /provider openai - Switch to OpenAI compatible
318198
+ /provider osa - Switch to OSAgent Cloud
318035
318199
  /model - Change model within current provider`)
318036
318200
  };
318037
318201
  }, "action")
@@ -318047,26 +318211,7 @@ Commands:
318047
318211
  };
318048
318212
  }
318049
318213
  const authType = config.getAuthType();
318050
- let providerName = "Unknown";
318051
- switch (authType) {
318052
- case AuthType2.USE_GROQ:
318053
- providerName = "GROQ";
318054
- break;
318055
- case AuthType2.OLLAMA_LOCAL:
318056
- providerName = "Ollama (Local)";
318057
- break;
318058
- case AuthType2.OLLAMA_CLOUD:
318059
- providerName = "Ollama (Cloud)";
318060
- break;
318061
- case AuthType2.USE_OPENAI:
318062
- providerName = "OpenAI Compatible";
318063
- break;
318064
- case AuthType2.OSA_OAUTH:
318065
- providerName = "OSAgent Cloud";
318066
- break;
318067
- default:
318068
- providerName = String(authType);
318069
- }
318214
+ const providerName = getProviderDisplayName(authType);
318070
318215
  return {
318071
318216
  type: "message",
318072
318217
  messageType: "info",
@@ -318079,8 +318224,13 @@ Available Providers:
318079
318224
  /provider groq - GROQ (Kimi K2, ~200 tok/s, 256K context)
318080
318225
  /provider ollama - Local Ollama (qwen2.5-coder, etc.)
318081
318226
  /provider openai - OpenAI compatible APIs
318227
+ /provider osa - OSAgent Cloud (default)
318082
318228
  /provider status - Show detailed status
318083
318229
 
318230
+ Configuration:
318231
+ API keys can be set via environment variables or saved in settings.
318232
+ Use the provider commands to configure and save your preferences.
318233
+
318084
318234
  Environment Variables:
318085
318235
  GROQ_API_KEY - For GROQ provider
318086
318236
  OPENAI_API_KEY - For OpenAI provider
@@ -363233,7 +363383,8 @@ ${queuedText}` : queuedText;
363233
363383
  refreshStatic();
363234
363384
  }, [historyManager, clearConsoleMessagesState, refreshStatic]);
363235
363385
  const { handleInput: vimHandleInput } = useVim(buffer, handleFinalSubmit);
363236
- const isInputActive = !initError && !isProcessing && (streamingState === "idle" /* Idle */ || streamingState === "responding" /* Responding */) && !proQuotaRequest;
363386
+ const anyDialogOpen = showWelcomeBackDialog || showWorkspaceMigrationDialog || !!shellConfirmationRequest || !!confirmationRequest || confirmUpdateExtensionRequests.length > 0 || !!loopDetectionConfirmationRequest || !!quitConfirmationRequest || isThemeDialogOpen || isSettingsDialogOpen || isModelDialogOpen || isVisionSwitchDialogOpen || isPermissionsDialogOpen || isAuthDialogOpen || isAuthenticating || isEditorDialogOpen || isSubagentCreateDialogOpen || isAgentsManagerDialogOpen || isApprovalModeDialogOpen;
363387
+ const isInputActive = !initError && !isProcessing && (streamingState === "idle" /* Idle */ || streamingState === "responding" /* Responding */) && !proQuotaRequest && !anyDialogOpen;
363237
363388
  const [controlsHeight, setControlsHeight] = (0, import_react139.useState)(0);
363238
363389
  (0, import_react139.useLayoutEffect)(() => {
363239
363390
  if (mainControlsRef.current) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "osagent",
3
- "version": "0.1.27",
3
+ "version": "0.1.29",
4
4
  "description": "OS Agent - AI-powered CLI for autonomous coding with Ollama Cloud and Qwen models",
5
5
  "author": "Roberto Luna",
6
6
  "license": "Apache-2.0",
@@ -23,7 +23,10 @@
23
23
  },
24
24
  "type": "module",
25
25
  "workspaces": [
26
- "packages/*"
26
+ "packages/cli",
27
+ "packages/core",
28
+ "packages/test-utils",
29
+ "packages/vscode-ide-companion"
27
30
  ],
28
31
  "repository": {
29
32
  "type": "git",
@@ -140,7 +143,12 @@
140
143
  "@lydell/node-pty-linux-x64": "1.1.0",
141
144
  "@lydell/node-pty-win32-arm64": "1.1.0",
142
145
  "@lydell/node-pty-win32-x64": "1.1.0",
143
- "node-pty": "^1.0.0"
146
+ "node-pty": "^1.0.0",
147
+ "@osagent/ripgrep-darwin-arm64": "0.1.0",
148
+ "@osagent/ripgrep-darwin-x64": "0.1.0",
149
+ "@osagent/ripgrep-linux-arm64": "0.1.0",
150
+ "@osagent/ripgrep-linux-x64": "0.1.0",
151
+ "@osagent/ripgrep-win32-x64": "0.1.0"
144
152
  },
145
153
  "lint-staged": {
146
154
  "*.{js,jsx,ts,tsx}": [
@@ -1,3 +0,0 @@
1
- This project is dual-licensed under the Unlicense and MIT licenses.
2
-
3
- You may use this code under the terms of either license.
Binary file
Binary file
Binary file
Binary file