@aidotnet/nextcowork-device-service 2.8.1 → 2.8.4

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/RUNTIME.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "entry": "bin.mjs",
3
3
  "node": ">=24",
4
- "version": "2.8.1",
4
+ "version": "2.8.4",
5
5
  "note": "Dependencies are external; install them with the repository package.json before running.",
6
6
  "files": [
7
7
  "BUNDLE_IMPORTS.json",
package/bin.mjs CHANGED
@@ -5455,6 +5455,11 @@ function shellDialect(shell) {
5455
5455
  if (name === "powershell" || name === "pwsh" || name === "pwsh-preview") return "powershell";
5456
5456
  return name === "fish" ? "fish" : "posix";
5457
5457
  }
5458
+ function terminalShellArgs(shell, platform = process.platform) {
5459
+ if (platform === "win32") return [];
5460
+ const name = shell.split("/").pop()?.toLowerCase();
5461
+ return name !== void 0 && ["sh", "bash", "zsh", "dash", "ksh", "mksh", "fish"].includes(name) ? ["-l"] : [];
5462
+ }
5458
5463
  function quoteShellArg(shell, arg) {
5459
5464
  switch (shellDialect(shell)) {
5460
5465
  case "cmd":
@@ -7433,6 +7438,21 @@ const PROVIDER_PRESETS = [
7433
7438
  notes: "模型列表需要 API Key,可用模型取决于密钥的分组与权限。使用模型列表返回的完整 ID(如 gpt-6.1-sol),无需添加厂商前缀。",
7434
7439
  verification: "probed"
7435
7440
  },
7441
+ {
7442
+ id: "atlascloud",
7443
+ name: "Atlas Cloud",
7444
+ category: "aggregator",
7445
+ endpoints: [
7446
+ oa("https://api.atlascloud.ai/v1", true, true),
7447
+ resp("https://api.atlascloud.ai/v1", true),
7448
+ anth$1("https://api.atlascloud.ai")
7449
+ ],
7450
+ docsUrl: "https://www.atlascloud.ai/docs",
7451
+ apiKeyUrl: "https://console.atlascloud.ai/api-keys",
7452
+ suggestedModels: ["deepseek-ai/deepseek-v4-flash", "moonshotai/kimi-k3", "zai-org/glm-5.2"],
7453
+ notes: "模型 ID 带厂商前缀(如 deepseek-ai/deepseek-v4-flash),请使用模型列表返回的完整 ID。模型列表免鉴权就能拉,没填 key 也能先看有哪些模型(因此列表能拉到不代表 key 有效)。同一个 key 也可走 OpenAI Responses 与 Anthropic 协议。",
7454
+ verification: "documented"
7455
+ },
7436
7456
  {
7437
7457
  id: "siliconflow",
7438
7458
  name: "硅基流动(国内)",
@@ -28749,6 +28769,24 @@ const DEEPSEEK$1 = [
28749
28769
  source: source$1("https://api-docs.deepseek.com/"),
28750
28770
  verificationStatus: "unverified"
28751
28771
  }),
28772
+ // NextCoWork 内置渠道的极速档。规格取自 https://nextco.work/models/deepseek-v4.1-flash-ultrafast
28773
+ // (1M 上下文 / 384K 输出、视觉输入、函数调用、结构化输出、prompt 缓存);页面未列思考档位,
28774
+ // 沿用 V4 系的方言。
28775
+ model("deepseek", "deepseek-v4.1-flash-ultrafast", "DeepSeek V4.1 Flash Ultrafast", {
28776
+ capabilities: visionCapabilities({
28777
+ thinking: true,
28778
+ tools: true,
28779
+ caching: true,
28780
+ structuredOutput: true,
28781
+ streaming: true
28782
+ }),
28783
+ contextWindow: 1e6,
28784
+ maxOutputTokens: 384e3,
28785
+ thinkingConfig: DEEPSEEK_EFFORT_THINKING,
28786
+ reasoningEfforts: ["none", "low", "high", "max"],
28787
+ source: source$1("https://nextco.work/models/deepseek-v4.1-flash-ultrafast"),
28788
+ verificationStatus: "unverified"
28789
+ }),
28752
28790
  model("deepseek", "deepseek-v4-pro", "DeepSeek V4 Pro", {
28753
28791
  capabilities: textCapabilities({
28754
28792
  thinking: true,
@@ -31861,6 +31899,9 @@ const DEEPSEEK = [
31861
31899
  ds("deepseek-v4-flash", "DeepSeek V4 Flash", one({ input: 0.22, output: 0.66, cacheRead: 7e-3 }), {
31862
31900
  windows: PEAK_WINDOWS
31863
31901
  }),
31902
+ ds("deepseek-v4.1-flash-ultrafast", "DeepSeek V4.1 Flash Ultrafast", one({ input: 0.3, output: 1.2, cacheRead: 6e-3 }), {
31903
+ source: "https://nextco.work/models/deepseek-v4.1-flash-ultrafast"
31904
+ }),
31864
31905
  ds("deepseek-v4-pro", "DeepSeek V4 Pro", one({ input: 0.66, output: 1.98, cacheRead: 0.022 }), {
31865
31906
  windows: PEAK_WINDOWS
31866
31907
  }),
@@ -33517,7 +33558,7 @@ function localEnvironment(host2, rootPath) {
33517
33558
  },
33518
33559
  openTerminal: async (options) => {
33519
33560
  const pty = await import("node-pty");
33520
- return pty.spawn(terminalShell, [], {
33561
+ return pty.spawn(terminalShell, terminalShellArgs(terminalShell), {
33521
33562
  ...options,
33522
33563
  name: "xterm-256color",
33523
33564
  env: { ...process.env, TERM: "xterm-256color", ...options.env ?? {} }
@@ -43405,7 +43446,7 @@ async function main() {
43405
43446
  try {
43406
43447
  service = await runDeviceService(parseArgs(process.argv.slice(2)), io);
43407
43448
  } catch (error) {
43408
- io.err(error instanceof UsageError ? `usage: ${error.message}` : "device service failed to start");
43449
+ io.err(error instanceof UsageError ? `usage: ${error.message}` : `device service failed to start${error instanceof Error ? `: ${error.message}` : ""}`);
43409
43450
  process.exitCode = error instanceof UsageError ? 64 : 1;
43410
43451
  return;
43411
43452
  }