hoomanjs 1.45.3 → 1.46.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.
Files changed (117) hide show
  1. package/dist/acp/acp-agent.js +15 -15
  2. package/dist/acp/acp-agent.js.map +1 -1
  3. package/dist/acp/prompt-invoke.d.ts +2 -1
  4. package/dist/acp/prompt-invoke.js +20 -95
  5. package/dist/acp/prompt-invoke.js.map +1 -1
  6. package/dist/chat/app.js +19 -19
  7. package/dist/chat/app.js.map +1 -1
  8. package/dist/chat/components/BottomChrome.d.ts +1 -1
  9. package/dist/chat/components/DownloadPanel.d.ts +1 -1
  10. package/dist/chat/components/DownloadPanel.js +1 -1
  11. package/dist/chat/components/DownloadPanel.js.map +1 -1
  12. package/dist/chat/components/StatusBar.js +1 -1
  13. package/dist/chat/components/StatusBar.js.map +1 -1
  14. package/dist/cli.js +5 -2
  15. package/dist/cli.js.map +1 -1
  16. package/dist/configure/app.js +292 -0
  17. package/dist/configure/app.js.map +1 -1
  18. package/dist/core/agent/gitignore-guard-plugin.d.ts +2 -0
  19. package/dist/core/agent/gitignore-guard-plugin.js +79 -0
  20. package/dist/core/agent/gitignore-guard-plugin.js.map +1 -0
  21. package/dist/core/agent/index.js +3 -0
  22. package/dist/core/agent/index.js.map +1 -1
  23. package/dist/core/config.d.ts +39 -6
  24. package/dist/core/config.js +5 -2
  25. package/dist/core/config.js.map +1 -1
  26. package/dist/core/index.js +19 -1
  27. package/dist/core/index.js.map +1 -1
  28. package/dist/core/models/anthropic.js +10 -4
  29. package/dist/core/models/anthropic.js.map +1 -1
  30. package/dist/core/models/azure.js +2 -1
  31. package/dist/core/models/azure.js.map +1 -1
  32. package/dist/core/models/bedrock.js +1 -0
  33. package/dist/core/models/bedrock.js.map +1 -1
  34. package/dist/core/models/google.js +1 -0
  35. package/dist/core/models/google.js.map +1 -1
  36. package/dist/core/models/groq.js +2 -1
  37. package/dist/core/models/groq.js.map +1 -1
  38. package/dist/core/models/llama-cpp/index.js +1 -0
  39. package/dist/core/models/llama-cpp/index.js.map +1 -1
  40. package/dist/core/models/llama-cpp/resolve-model.js +1 -1
  41. package/dist/core/models/llama-cpp/resolve-model.js.map +1 -1
  42. package/dist/core/models/minimax.js +2 -1
  43. package/dist/core/models/minimax.js.map +1 -1
  44. package/dist/core/models/mlx/index.js +2 -1
  45. package/dist/core/models/mlx/index.js.map +1 -1
  46. package/dist/core/models/mlx/resolve-model.js +1 -1
  47. package/dist/core/models/mlx/resolve-model.js.map +1 -1
  48. package/dist/core/models/mlx/strands-mlx.js +1 -1
  49. package/dist/core/models/mlx/strands-mlx.js.map +1 -1
  50. package/dist/core/models/moonshot.js +2 -1
  51. package/dist/core/models/moonshot.js.map +1 -1
  52. package/dist/core/models/ollama/index.js +7 -3
  53. package/dist/core/models/ollama/index.js.map +1 -1
  54. package/dist/core/models/openai.js +2 -1
  55. package/dist/core/models/openai.js.map +1 -1
  56. package/dist/core/models/openrouter.js +2 -1
  57. package/dist/core/models/openrouter.js.map +1 -1
  58. package/dist/core/models/types.d.ts +43 -11
  59. package/dist/core/models/types.js +15 -4
  60. package/dist/core/models/types.js.map +1 -1
  61. package/dist/core/models/xai.js +2 -1
  62. package/dist/core/models/xai.js.map +1 -1
  63. package/dist/core/prompts/modes/agent.md +1 -1
  64. package/dist/core/prompts/modes/plan.md +11 -7
  65. package/dist/core/prompts/static/browser.md +9 -0
  66. package/dist/core/prompts/system.js +3 -0
  67. package/dist/core/prompts/system.js.map +1 -1
  68. package/dist/core/ripgrep/bootstrap.js +5 -19
  69. package/dist/core/ripgrep/bootstrap.js.map +1 -1
  70. package/dist/core/skills/built-in/hooman-config/SKILL.md +22 -5
  71. package/dist/core/skills/built-in/hooman-config/providers.md +14 -12
  72. package/dist/core/skills/plugin.js +5 -1
  73. package/dist/core/skills/plugin.js.map +1 -1
  74. package/dist/core/tools/filesystem.js +9 -0
  75. package/dist/core/tools/filesystem.js.map +1 -1
  76. package/dist/core/tools/shell.js +3 -14
  77. package/dist/core/tools/shell.js.map +1 -1
  78. package/dist/core/utils/attachments.d.ts +4 -2
  79. package/dist/core/utils/attachments.js +10 -32
  80. package/dist/core/utils/attachments.js.map +1 -1
  81. package/dist/core/utils/command-path.d.ts +1 -0
  82. package/dist/core/utils/command-path.js +17 -0
  83. package/dist/core/utils/command-path.js.map +1 -0
  84. package/dist/core/utils/download-progress.js.map +1 -0
  85. package/dist/core/utils/gitignore.d.ts +11 -0
  86. package/dist/core/utils/gitignore.js +141 -0
  87. package/dist/core/utils/gitignore.js.map +1 -0
  88. package/dist/core/utils/hub-download.js.map +1 -0
  89. package/dist/core/utils/metadata.d.ts +65 -0
  90. package/dist/core/utils/{billing.js → metadata.js} +56 -73
  91. package/dist/core/utils/metadata.js.map +1 -0
  92. package/dist/core/utils/model-metadata.d.ts +39 -0
  93. package/dist/core/utils/model-metadata.js +222 -0
  94. package/dist/core/utils/model-metadata.js.map +1 -0
  95. package/dist/core/utils/paths.d.ts +1 -0
  96. package/dist/core/utils/paths.js +2 -0
  97. package/dist/core/utils/paths.js.map +1 -1
  98. package/dist/core/utils/reasoning-effort.d.ts +9 -1
  99. package/dist/core/{models → utils}/usage.js +1 -1
  100. package/dist/core/utils/usage.js.map +1 -0
  101. package/dist/daemon/index.d.ts +2 -0
  102. package/dist/daemon/index.js +6 -3
  103. package/dist/daemon/index.js.map +1 -1
  104. package/dist/index.d.ts +3 -3
  105. package/dist/index.js +2 -2
  106. package/dist/index.js.map +1 -1
  107. package/package.json +2 -1
  108. package/dist/core/models/download-progress.js.map +0 -1
  109. package/dist/core/models/hub-download.js.map +0 -1
  110. package/dist/core/models/usage.js.map +0 -1
  111. package/dist/core/utils/billing.d.ts +0 -76
  112. package/dist/core/utils/billing.js.map +0 -1
  113. /package/dist/core/{models → utils}/download-progress.d.ts +0 -0
  114. /package/dist/core/{models → utils}/download-progress.js +0 -0
  115. /package/dist/core/{models → utils}/hub-download.d.ts +0 -0
  116. /package/dist/core/{models → utils}/hub-download.js +0 -0
  117. /package/dist/core/{models → utils}/usage.d.ts +0 -0
@@ -1,7 +1,6 @@
1
- import { basename } from "node:path";
2
1
  import { readFile, stat } from "node:fs/promises";
3
- import { DocumentBlock, ImageBlock, TextBlock, VideoBlock, } from "@strands-agents/sdk";
4
- import { detectDocumentFormat, detectImageFormat, detectVideoFormat, } from "./file-formats.js";
2
+ import { TextBlock } from "@strands-agents/sdk";
3
+ import { attachmentPathToPromptBlocks } from "./model-metadata.js";
5
4
  const DEFAULT_MAX_ATTACHMENT_BYTES = 1024 * 1024;
6
5
  export function normalizeAttachmentPaths(input) {
7
6
  if (!Array.isArray(input)) {
@@ -56,36 +55,15 @@ export async function readAttachmentAsBlocksOrBase64(filePath, options) {
56
55
  }
57
56
  const buffer = await readFile(trimmedPath);
58
57
  const bytes = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
59
- const metadata = (kind, format) => new TextBlock(JSON.stringify({
58
+ const blocks = attachmentPathToPromptBlocks({
60
59
  path: trimmedPath,
61
- kind,
62
- format,
63
- size_bytes: info.size,
64
- }));
65
- const imageFormat = detectImageFormat(trimmedPath);
66
- if (imageFormat) {
67
- return [
68
- ...(includeMetadata ? [metadata("image", imageFormat)] : []),
69
- new ImageBlock({ format: imageFormat, source: { bytes } }),
70
- ];
71
- }
72
- const videoFormat = detectVideoFormat(trimmedPath);
73
- if (videoFormat) {
74
- return [
75
- ...(includeMetadata ? [metadata("video", videoFormat)] : []),
76
- new VideoBlock({ format: videoFormat, source: { bytes } }),
77
- ];
78
- }
79
- const documentFormat = detectDocumentFormat(trimmedPath);
80
- if (documentFormat) {
81
- return [
82
- ...(includeMetadata ? [metadata("document", documentFormat)] : []),
83
- new DocumentBlock({
84
- name: basename(trimmedPath),
85
- format: documentFormat,
86
- source: { bytes },
87
- }),
88
- ];
60
+ bytes,
61
+ sizeBytes: info.size,
62
+ metadata: options?.metadata,
63
+ includeMetadata,
64
+ });
65
+ if (blocks.length > 0) {
66
+ return blocks;
89
67
  }
90
68
  if (unsupportedFormat === "diagnostic") {
91
69
  return asDiagnostic("Unsupported attachment format.", {
@@ -1 +1 @@
1
- {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../../src/core/utils/attachments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../../src/core/utils/attachments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function lookupCommandPath(command: string): string | undefined;
@@ -0,0 +1,17 @@
1
+ import { spawnSync } from "node:child_process";
2
+ export function lookupCommandPath(command) {
3
+ const lookup = process.platform === "win32" ? "where" : "which";
4
+ const result = spawnSync(lookup, [command], {
5
+ encoding: "utf8",
6
+ stdio: ["ignore", "pipe", "ignore"],
7
+ });
8
+ if (result.status !== 0) {
9
+ return undefined;
10
+ }
11
+ const first = result.stdout
12
+ .split(/\r?\n/)
13
+ .map((line) => line.trim())
14
+ .find(Boolean);
15
+ return first || undefined;
16
+ }
17
+ //# sourceMappingURL=command-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-path.js","sourceRoot":"","sources":["../../../src/core/utils/command-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAChE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE;QAC1C,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;KACpC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM;SACxB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,IAAI,CAAC,OAAO,CAAC,CAAC;IAEjB,OAAO,KAAK,IAAI,SAAS,CAAC;AAC5B,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download-progress.js","sourceRoot":"","sources":["../../../src/core/utils/download-progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ type GitignoreProbeOptions = {
2
+ isDirectory?: boolean;
3
+ };
4
+ export declare function clearGitignoreMatcherCache(): void;
5
+ export declare function isPathGitignored(targetPath: string, options?: GitignoreProbeOptions): Promise<boolean>;
6
+ export declare function assertPathNotGitignored(targetPath: string, options?: GitignoreProbeOptions): Promise<void>;
7
+ export declare function createGitignorePredicate(rootPath: string): Promise<{
8
+ root: string;
9
+ ignoresPath(targetPath: string, options?: GitignoreProbeOptions): boolean;
10
+ }>;
11
+ export {};
@@ -0,0 +1,141 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import ignore from "ignore";
4
+ import { findGitRoot } from "./discover-files.js";
5
+ const GITIGNORE_FILENAME = ".gitignore";
6
+ const gitignoreMatcherCache = new Map();
7
+ function normalizeRelativePath(input) {
8
+ const normalized = input.replaceAll("\\", "/");
9
+ return normalized === "." ? "" : normalized;
10
+ }
11
+ async function fileSignature(filePath) {
12
+ try {
13
+ const stat = await fs.stat(filePath);
14
+ return `${filePath}:${stat.mtimeMs}:${stat.size}`;
15
+ }
16
+ catch {
17
+ return null;
18
+ }
19
+ }
20
+ async function listGitignoreFiles(targetPath, options) {
21
+ const resolvedTarget = path.resolve(targetPath);
22
+ const targetDirectory = options?.isDirectory
23
+ ? resolvedTarget
24
+ : path.dirname(resolvedTarget);
25
+ const root = findGitRoot(targetDirectory);
26
+ const files = [];
27
+ let current = root;
28
+ for (;;) {
29
+ files.push(path.join(current, GITIGNORE_FILENAME));
30
+ if (current === targetDirectory) {
31
+ break;
32
+ }
33
+ const relative = path.relative(current, targetDirectory);
34
+ if (relative === "" ||
35
+ relative.startsWith("..") ||
36
+ path.isAbsolute(relative)) {
37
+ break;
38
+ }
39
+ current = path.join(current, relative.split(path.sep)[0]);
40
+ }
41
+ return { root, files };
42
+ }
43
+ async function buildMatcher(targetPath, options) {
44
+ const { root, files } = await listGitignoreFiles(targetPath, options);
45
+ const matcher = ignore();
46
+ matcher.add(".git/");
47
+ const loadedFiles = [];
48
+ const signatureParts = [];
49
+ for (const filePath of files) {
50
+ const signature = await fileSignature(filePath);
51
+ if (!signature) {
52
+ continue;
53
+ }
54
+ const contents = await fs.readFile(filePath, "utf8");
55
+ const parent = path.dirname(filePath);
56
+ const baseRelative = normalizeRelativePath(path.relative(root, parent));
57
+ if (baseRelative.length === 0) {
58
+ matcher.add(contents);
59
+ }
60
+ else {
61
+ const scoped = contents
62
+ .split(/\r?\n/)
63
+ .map((line) => {
64
+ if (line.length === 0 || line.startsWith("#")) {
65
+ return line;
66
+ }
67
+ const isNegated = line.startsWith("!");
68
+ const raw = isNegated ? line.slice(1) : line;
69
+ if (raw.startsWith("/")) {
70
+ return `${isNegated ? "!" : ""}${baseRelative}${raw}`;
71
+ }
72
+ return `${isNegated ? "!" : ""}${baseRelative}/${raw}`;
73
+ })
74
+ .join("\n");
75
+ matcher.add(scoped);
76
+ }
77
+ loadedFiles.push(filePath);
78
+ signatureParts.push(signature);
79
+ }
80
+ return {
81
+ root,
82
+ matcher,
83
+ loadedFiles,
84
+ signature: signatureParts.join("|"),
85
+ };
86
+ }
87
+ async function getMatcher(targetPath, options) {
88
+ const resolvedTarget = path.resolve(targetPath);
89
+ const targetDirectory = options?.isDirectory
90
+ ? resolvedTarget
91
+ : path.dirname(resolvedTarget);
92
+ const root = findGitRoot(targetDirectory);
93
+ const cached = gitignoreMatcherCache.get(root);
94
+ const next = await buildMatcher(resolvedTarget, options);
95
+ if (cached && cached.signature === next.signature) {
96
+ return cached;
97
+ }
98
+ gitignoreMatcherCache.set(root, next);
99
+ return next;
100
+ }
101
+ export function clearGitignoreMatcherCache() {
102
+ gitignoreMatcherCache.clear();
103
+ }
104
+ export async function isPathGitignored(targetPath, options) {
105
+ const resolvedTarget = path.resolve(targetPath);
106
+ const { matcher, root } = await getMatcher(resolvedTarget, options);
107
+ let relative = normalizeRelativePath(path.relative(root, resolvedTarget));
108
+ if (relative.length === 0) {
109
+ return false;
110
+ }
111
+ if (options?.isDirectory && !relative.endsWith("/")) {
112
+ relative = `${relative}/`;
113
+ }
114
+ return matcher.ignores(relative);
115
+ }
116
+ export async function assertPathNotGitignored(targetPath, options) {
117
+ if (await isPathGitignored(targetPath, options)) {
118
+ throw new Error(`Access denied: path is ignored by .gitignore: ${targetPath}`);
119
+ }
120
+ }
121
+ export async function createGitignorePredicate(rootPath) {
122
+ const resolvedRoot = path.resolve(rootPath);
123
+ const { matcher, root } = await getMatcher(resolvedRoot, {
124
+ isDirectory: true,
125
+ });
126
+ return {
127
+ root,
128
+ ignoresPath(targetPath, options) {
129
+ const resolvedTarget = path.resolve(targetPath);
130
+ let relative = normalizeRelativePath(path.relative(root, resolvedTarget));
131
+ if (relative.length === 0) {
132
+ return false;
133
+ }
134
+ if (options?.isDirectory && !relative.endsWith("/")) {
135
+ relative = `${relative}/`;
136
+ }
137
+ return matcher.ignores(relative);
138
+ },
139
+ };
140
+ }
141
+ //# sourceMappingURL=gitignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../../src/core/utils/gitignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAuB,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAalD,MAAM,kBAAkB,GAAG,YAAY,CAAC;AACxC,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAA4B,CAAC;AAElE,SAAS,qBAAqB,CAAC,KAAa;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/C,OAAO,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,UAAkB,EAClB,OAA+B;IAK/B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,OAAO,EAAE,WAAW;QAC1C,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,SAAS,CAAC;QACR,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACnD,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;YAChC,MAAM;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACzD,IACE,QAAQ,KAAK,EAAE;YACf,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EACzB,CAAC;YACD,MAAM;QACR,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,UAAkB,EAClB,OAA+B;IAE/B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACxE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,QAAQ;iBACpB,KAAK,CAAC,OAAO,CAAC;iBACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACZ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC9C,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACvC,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC7C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,GAAG,GAAG,EAAE,CAAC;gBACxD,CAAC;gBACD,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,IAAI,GAAG,EAAE,CAAC;YACzD,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,OAAO;QACL,IAAI;QACJ,OAAO;QACP,WAAW;QACX,SAAS,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,UAAkB,EAClB,OAA+B;IAE/B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,OAAO,EAAE,WAAW;QAC1C,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACzD,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,qBAAqB,CAAC,KAAK,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,OAA+B;IAE/B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACpE,IAAI,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IAE1E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,EAAE,WAAW,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,QAAQ,GAAG,GAAG,QAAQ,GAAG,CAAC;IAC5B,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,OAA+B;IAE/B,IAAI,MAAM,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,iDAAiD,UAAU,EAAE,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,QAAgB;IAI7D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE;QACvD,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IAEH,OAAO;QACL,IAAI;QACJ,WAAW,CAAC,UAAkB,EAAE,OAA+B;YAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAChD,IAAI,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;YAC1E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,OAAO,EAAE,WAAW,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpD,QAAQ,GAAG,GAAG,QAAQ,GAAG,CAAC;YAC5B,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub-download.js","sourceRoot":"","sources":["../../../src/core/utils/hub-download.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { LlmProvider } from "../models/types.js";
2
+ import type { LlmMetadata, ProviderOptions } from "../models/types.js";
3
+ /** Resolved per-million-token USD prices (cache tiers fall back to `inputPerM`). */
4
+ export type ResolvedMetadataCosts = {
5
+ inputPerM: number;
6
+ cacheReadPerM?: number;
7
+ cacheWritePerM?: number;
8
+ outputPerM: number;
9
+ };
10
+ export type ResolvedLlmModality = {
11
+ text: boolean;
12
+ image: boolean;
13
+ pdf: boolean;
14
+ audio: boolean;
15
+ video: boolean;
16
+ };
17
+ /**
18
+ * Model metadata for the active model, merged from the LLM config's
19
+ * `metadata` block (which wins per field) and the models.dev catalog. Fields
20
+ * that could not be resolved from either source stay `undefined` — consumers
21
+ * must not report context usage without `context` or cost without `costs`.
22
+ * Modality always resolves, defaulting to text-only when unset.
23
+ */
24
+ export type ResolvedLlmMetadata = {
25
+ name: string;
26
+ context?: number;
27
+ costs?: ResolvedMetadataCosts;
28
+ modality: ResolvedLlmModality;
29
+ };
30
+ export declare function configuredLlmContext(llm: {
31
+ provider: LlmProvider;
32
+ providerOptions: ProviderOptions;
33
+ llmOptions: {
34
+ context?: number;
35
+ };
36
+ }): number | undefined;
37
+ /**
38
+ * Resolve model metadata: config-provided `metadata` fields win, anything
39
+ * missing is filled from the models.dev catalog, and the metadata name
40
+ * defaults to the raw model id when no `metadata` block is configured.
41
+ * Returns `null` when neither source yields a context size nor prices — in
42
+ * that case nothing cost/context-related should be reported or displayed.
43
+ *
44
+ * When `provider` is a local provider (llama.cpp, Ollama), catalog costs are
45
+ * discarded — the catalog prices the hosted API for the same model id, not
46
+ * the free local inference — so only the context window resolves (config
47
+ * `metadata.costs`, if explicitly set, is still honored).
48
+ *
49
+ * `configuredContext` (the runtime context actually configured on the LLM
50
+ * entry — see {@link configuredLlmContext}) sits between the two sources:
51
+ * an explicit `metadata.context` wins over it, and it wins over the catalog.
52
+ * Modality always resolves, defaulting to text-only when unset.
53
+ */
54
+ export declare function resolveLlmMetadata(metadata: LlmMetadata | null | undefined, modelId: string, provider?: LlmProvider, configuredContext?: number): Promise<ResolvedLlmMetadata | null>;
55
+ export declare function computeUsageCostUsd(usage: {
56
+ inputTokens?: number;
57
+ outputTokens?: number;
58
+ cacheReadInputTokens?: number;
59
+ cacheWriteInputTokens?: number;
60
+ }, costs: ResolvedMetadataCosts): number;
61
+ export declare function contextTokensFromUsage(usage: {
62
+ inputTokens?: number;
63
+ cacheReadInputTokens?: number;
64
+ cacheWriteInputTokens?: number;
65
+ }): number;
@@ -3,7 +3,7 @@ import { join } from "node:path";
3
3
  import { cachePath } from "./paths.js";
4
4
  import { LlmProvider } from "../models/types.js";
5
5
  /**
6
- * Billing metadata resolution backed by the models.dev catalog.
6
+ * Model metadata resolution backed by the models.dev catalog.
7
7
  *
8
8
  * The catalog (`https://models.dev/catalog.json`) is cached on disk under
9
9
  * `~/.hooman/cache/models-dev.json` and refreshed at most once per day; a
@@ -11,11 +11,12 @@ import { LlmProvider } from "../models/types.js";
11
11
  * offline once the catalog has been fetched at least once.
12
12
  *
13
13
  * `catalog.providers` is keyed by provider id and carries per-provider model
14
- * entries with `limit.context` and `cost` (USD per million tokens);
15
- * `catalog.models` is keyed by `lab/model-id` and identifies each model's
16
- * canonical lab. When several providers serve a matching model, the provider
17
- * whose id equals the lab (e.g. `anthropic` for `anthropic/claude-*`) wins;
18
- * otherwise the first matching provider's metrics are used.
14
+ * entries with `limit.context`, `cost` (USD per million tokens), and optional
15
+ * `modalities.input`; `catalog.models` is keyed by `lab/model-id` and
16
+ * identifies each model's canonical lab. When several providers serve a
17
+ * matching model, the provider whose id equals the lab (e.g. `anthropic` for
18
+ * `anthropic/claude-*`) wins; otherwise the first matching provider's metrics
19
+ * are used.
19
20
  */
20
21
  const CATALOG_URL = "https://models.dev/catalog.json";
21
22
  const CACHE_FILE = "models-dev.json";
@@ -67,11 +68,6 @@ async function writeDiskCache(envelope) {
67
68
  /* best effort */
68
69
  }
69
70
  }
70
- /**
71
- * Load the models.dev catalog: in-memory copy while fresh, then the disk
72
- * cache (refreshed once older than a day), then the network. Returns `null`
73
- * when nothing has ever been fetched and the network is unavailable.
74
- */
75
71
  async function loadCatalog() {
76
72
  if (memory && isFresh(memory.envelope)) {
77
73
  return memory.envelope.catalog;
@@ -114,14 +110,12 @@ async function loadCatalog() {
114
110
  inflight = null;
115
111
  }
116
112
  }
117
- /** Collapse separators so `claude-haiku-4.5` matches models.dev's `claude-haiku-4-5`. */
118
113
  function normalizeModelId(value) {
119
114
  return value
120
115
  .toLowerCase()
121
116
  .replace(/[^a-z0-9]+/g, "-")
122
117
  .replace(/^-+|-+$/g, "");
123
118
  }
124
- /** Candidate forms of the billing name: as-is plus the last `/` segment (OpenRouter-style ids). */
125
119
  function targetForms(name) {
126
120
  const forms = new Set();
127
121
  const normalized = normalizeModelId(name);
@@ -137,12 +131,6 @@ function targetForms(name) {
137
131
  }
138
132
  return [...forms];
139
133
  }
140
- /**
141
- * Match quality between the billing name and a catalog model id.
142
- * Tier 1: normalized equality. Tier 2: one normalized id contains the other
143
- * (e.g. a Bedrock region-prefixed id vs. the catalog's bare id); the length
144
- * difference breaks ties toward the closest candidate.
145
- */
146
134
  function matchModelId(targets, candidateId) {
147
135
  const candidate = normalizeModelId(candidateId);
148
136
  if (!candidate) {
@@ -155,9 +143,6 @@ function matchModelId(targets, candidateId) {
155
143
  }
156
144
  const shorter = target.length < candidate.length ? target : candidate;
157
145
  const longer = target.length < candidate.length ? candidate : target;
158
- // Containment only counts on separator boundaries, so `gpt-5` does not
159
- // swallow `gpt-5-mini` but `anthropic-claude-haiku-4-5-...-v1-0` still
160
- // matches a `us.`-prefixed configured id.
161
146
  if (shorter.length >= 4 && longer.includes(shorter)) {
162
147
  const index = longer.indexOf(shorter);
163
148
  const before = index === 0 || longer[index - 1] === "-";
@@ -173,7 +158,26 @@ function matchModelId(targets, candidateId) {
173
158
  }
174
159
  return best;
175
160
  }
176
- function catalogEntryToBilling(model) {
161
+ function catalogModalitiesToResolved(modalities) {
162
+ const inputs = new Set((modalities?.input ?? []).map((value) => value.toLowerCase()));
163
+ return {
164
+ text: inputs.size === 0 || inputs.has("text"),
165
+ image: inputs.has("image"),
166
+ pdf: inputs.has("pdf"),
167
+ audio: inputs.has("audio"),
168
+ video: inputs.has("video"),
169
+ };
170
+ }
171
+ function mergeResolvedModality(configured, resolved) {
172
+ return {
173
+ text: configured?.text ?? resolved?.text ?? true,
174
+ image: configured?.image ?? resolved?.image ?? false,
175
+ pdf: configured?.pdf ?? resolved?.pdf ?? false,
176
+ audio: configured?.audio ?? resolved?.audio ?? false,
177
+ video: configured?.video ?? resolved?.video ?? false,
178
+ };
179
+ }
180
+ function catalogEntryToMetadata(model) {
177
181
  const context = typeof model.limit?.context === "number" && model.limit.context > 0
178
182
  ? model.limit.context
179
183
  : undefined;
@@ -190,16 +194,14 @@ function catalogEntryToBilling(model) {
190
194
  outputPerM: cost.output,
191
195
  }
192
196
  : undefined;
193
- return { context, costs };
197
+ return {
198
+ context,
199
+ costs,
200
+ modality: catalogModalitiesToResolved(model.modalities),
201
+ };
194
202
  }
195
- /**
196
- * Find the best models.dev entry for a billing name. Providers are ranked by
197
- * match tier, then by whether the provider is the model's canonical lab
198
- * (`catalog.models` is keyed `lab/model-id`), then by closeness of the id
199
- * match, then by catalog order.
200
- */
201
- function lookupInCatalog(catalog, billingName) {
202
- const targets = targetForms(billingName);
203
+ function lookupInCatalog(catalog, metadataName) {
204
+ const targets = targetForms(metadataName);
203
205
  if (targets.length === 0) {
204
206
  return null;
205
207
  }
@@ -230,9 +232,9 @@ function lookupInCatalog(catalog, billingName) {
230
232
  const candidates = matches.filter((match) => match.tier === bestTier);
231
233
  const preferred = candidates.find((match) => labs.has(match.providerId)) ??
232
234
  candidates.reduce((best, match) => match.lengthDiff < best.lengthDiff ? match : best);
233
- const resolved = catalogEntryToBilling(preferred.model);
235
+ const resolved = catalogEntryToMetadata(preferred.model);
234
236
  return resolved.context === undefined && resolved.costs === undefined
235
- ? null
237
+ ? { ...resolved, modality: resolved.modality }
236
238
  : resolved;
237
239
  }
238
240
  function configCostsToResolved(costs) {
@@ -242,26 +244,11 @@ function configCostsToResolved(costs) {
242
244
  outputPerM: costs["output/m"],
243
245
  };
244
246
  }
245
- /**
246
- * Providers that run inference locally: their token usage costs nothing, so
247
- * catalog prices (which belong to the hosted API serving the same model)
248
- * must never be applied to them.
249
- */
250
247
  const LOCAL_PROVIDERS = new Set([
251
248
  LlmProvider.LlamaCpp,
252
249
  LlmProvider.Mlx,
253
250
  LlmProvider.Ollama,
254
251
  ]);
255
- /**
256
- * The context size configured on a resolved LLM entry, when the provider
257
- * actually honors one: for the local `llama-cpp` and `mlx` providers this is
258
- * the per-LLM `options.context` (falling back to the provider-level
259
- * `context`). Other providers' windows are fixed server-side, so config
260
- * context is ignored for them. Feed the result into
261
- * {@link resolveLlmBilling}'s `configuredContext` so the context gauge
262
- * reflects the actual runtime window rather than the catalog's training
263
- * window.
264
- */
265
252
  export function configuredLlmContext(llm) {
266
253
  if (llm.provider !== LlmProvider.LlamaCpp &&
267
254
  llm.provider !== LlmProvider.Mlx) {
@@ -271,27 +258,33 @@ export function configuredLlmContext(llm) {
271
258
  return llm.llmOptions.context ?? providerContext;
272
259
  }
273
260
  /**
274
- * Resolve billing metadata for a model: config-provided `billing` fields win,
275
- * anything missing is filled from the models.dev catalog, and the billing
276
- * name defaults to the raw model id when no `billing` block is configured.
261
+ * Resolve model metadata: config-provided `metadata` fields win, anything
262
+ * missing is filled from the models.dev catalog, and the metadata name
263
+ * defaults to the raw model id when no `metadata` block is configured.
277
264
  * Returns `null` when neither source yields a context size nor prices — in
278
- * that case nothing billing-related should be reported or displayed.
265
+ * that case nothing cost/context-related should be reported or displayed.
279
266
  *
280
267
  * When `provider` is a local provider (llama.cpp, Ollama), catalog costs are
281
268
  * discarded — the catalog prices the hosted API for the same model id, not
282
269
  * the free local inference — so only the context window resolves (config
283
- * `billing.costs`, if explicitly set, is still honored).
270
+ * `metadata.costs`, if explicitly set, is still honored).
284
271
  *
285
272
  * `configuredContext` (the runtime context actually configured on the LLM
286
273
  * entry — see {@link configuredLlmContext}) sits between the two sources:
287
- * an explicit `billing.context` wins over it, and it wins over the catalog.
274
+ * an explicit `metadata.context` wins over it, and it wins over the catalog.
275
+ * Modality always resolves, defaulting to text-only when unset.
288
276
  */
289
- export async function resolveLlmBilling(billing, modelId, provider, configuredContext) {
290
- const name = billing?.name ?? modelId;
277
+ export async function resolveLlmMetadata(metadata, modelId, provider, configuredContext) {
278
+ const name = metadata?.name ?? modelId;
291
279
  const isLocal = provider !== undefined && LOCAL_PROVIDERS.has(provider);
292
- let context = billing?.context ?? configuredContext;
293
- let costs = billing?.costs ? configCostsToResolved(billing.costs) : undefined;
294
- if (context === undefined || (costs === undefined && !isLocal)) {
280
+ let context = metadata?.context ?? configuredContext;
281
+ let costs = metadata?.costs
282
+ ? configCostsToResolved(metadata.costs)
283
+ : undefined;
284
+ let modality = mergeResolvedModality(metadata?.modality);
285
+ if (context === undefined ||
286
+ (costs === undefined && !isLocal) ||
287
+ metadata?.modality === undefined) {
295
288
  const catalog = await loadCatalog();
296
289
  const fromCatalog = catalog ? lookupInCatalog(catalog, name) : null;
297
290
  if (fromCatalog) {
@@ -299,19 +292,14 @@ export async function resolveLlmBilling(billing, modelId, provider, configuredCo
299
292
  if (!isLocal) {
300
293
  costs ??= fromCatalog.costs;
301
294
  }
295
+ modality = mergeResolvedModality(metadata?.modality, fromCatalog.modality);
302
296
  }
303
297
  }
304
298
  if (context === undefined && costs === undefined) {
305
299
  return null;
306
300
  }
307
- return { name, context, costs };
301
+ return { name, context, costs, modality };
308
302
  }
309
- /**
310
- * USD cost of one request's token usage. Expects usage already normalized to
311
- * the additive shape (see `toAdditiveUsage`): cache reads/writes are separate
312
- * from `inputTokens`. Cache tiers without an explicit price fall back to the
313
- * plain input rate.
314
- */
315
303
  export function computeUsageCostUsd(usage, costs) {
316
304
  const input = usage.inputTokens ?? 0;
317
305
  const output = usage.outputTokens ?? 0;
@@ -323,14 +311,9 @@ export function computeUsageCostUsd(usage, costs) {
323
311
  output * costs.outputPerM) /
324
312
  1_000_000);
325
313
  }
326
- /**
327
- * Context tokens occupied by a request, from its additive-shape usage: the
328
- * full prompt (uncached input + cache reads/writes). Used as the "tokens
329
- * currently in context" figure for context-window utilization.
330
- */
331
314
  export function contextTokensFromUsage(usage) {
332
315
  return ((usage.inputTokens ?? 0) +
333
316
  (usage.cacheReadInputTokens ?? 0) +
334
317
  (usage.cacheWriteInputTokens ?? 0));
335
318
  }
336
- //# sourceMappingURL=billing.js.map
319
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/core/utils/metadata.ts"],"names":[],"mappings":"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"}