gentle-pi 4.3.0 → 4.4.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 (208) hide show
  1. package/README.md +8 -5
  2. package/assets/agents/gentle-ai-worker.md +1 -1
  3. package/assets/design-canvas/canvas.css +648 -0
  4. package/assets/design-canvas/canvas.js +1497 -0
  5. package/assets/design-canvas/index.html +88 -0
  6. package/assets/design-canvas/inspector.js +290 -0
  7. package/assets/orchestrator-delegation-reference.md +2 -2
  8. package/assets/orchestrator-verification.md +1 -1
  9. package/assets/orchestrator.md +2 -2
  10. package/bin/engram-guard +1 -1
  11. package/bin/gentle-shell.mjs +101 -151
  12. package/docs/bundled-install.md +47 -42
  13. package/docs/delegated-verification.md +6 -0
  14. package/docs/gentle-agents-activity.md +5 -1
  15. package/docs/gentle-music.md +61 -0
  16. package/docs/gentle-shell.md +77 -7
  17. package/docs/install-wizard.md +30 -6
  18. package/docs/permission-modes.md +7 -2
  19. package/docs/readme-reference.md +19 -15
  20. package/docs/session-profile-format.md +26 -0
  21. package/docs/voice.md +259 -0
  22. package/docs/yolo-mode.md +17 -2
  23. package/extensions/ask-user-choice.ts +4 -1
  24. package/extensions/gentle-agents.ts +173 -38
  25. package/extensions/gentle-ai.ts +214 -69
  26. package/extensions/gentle-design.ts +158 -0
  27. package/extensions/gentle-music.ts +289 -0
  28. package/extensions/gentle-shell.ts +332 -73
  29. package/extensions/gentle-voice.ts +11 -0
  30. package/extensions/session-scratch.ts +41 -22
  31. package/extensions/skill-registry.ts +63 -8
  32. package/lib/agent-profiles.ts +26 -0
  33. package/lib/agents-config.ts +35 -0
  34. package/lib/agents-protocol.ts +57 -1
  35. package/lib/agents-runner.ts +52 -3
  36. package/lib/agents-session-transport.ts +101 -6
  37. package/lib/agents-widget.ts +14 -1
  38. package/lib/auto-permission-memory.ts +48 -18
  39. package/lib/auto-permission-runtime.ts +21 -6
  40. package/lib/clipboard-image.ts +147 -0
  41. package/lib/command-palette-catalog.ts +2 -0
  42. package/lib/commit-slice-signal.ts +1 -1
  43. package/lib/context-backstop.ts +36 -0
  44. package/lib/design-canvas-server.ts +947 -0
  45. package/lib/design-comments.ts +437 -0
  46. package/lib/design-handoffs.ts +313 -0
  47. package/lib/design-open-browser.ts +58 -0
  48. package/lib/design-sources.ts +120 -0
  49. package/lib/external-editor.ts +31 -0
  50. package/lib/gentle-design.ts +513 -0
  51. package/lib/gentle-shell-bundled.ts +123 -49
  52. package/lib/gentle-shell-launcher.ts +9 -4
  53. package/lib/gentle-shell-startup-update.ts +61 -9
  54. package/lib/gentle-shell-uninstall.ts +33 -1
  55. package/lib/image-attachments.ts +150 -0
  56. package/lib/inprocess-reviewer.ts +33 -2
  57. package/lib/nan-provider.ts +3 -0
  58. package/lib/native-review-cli.ts +11 -4
  59. package/lib/notification-audio-native.ts +149 -13
  60. package/lib/notification-audio.ts +4 -0
  61. package/lib/notification-pulse-worker.ts +82 -18
  62. package/lib/notification-service.ts +5 -1
  63. package/lib/orchestrator-presence.ts +78 -8
  64. package/lib/orchestrator-scope.ts +10 -0
  65. package/lib/orchestrator-state.ts +11 -3
  66. package/lib/permission-mode-policy.ts +2 -2
  67. package/lib/review-host-relay.ts +11 -2
  68. package/lib/review-reminder-receipt.ts +24 -1
  69. package/lib/session-profile-append-controller.ts +713 -0
  70. package/lib/session-profile-disk-reader.ts +182 -0
  71. package/lib/session-profile-persistence.ts +15 -7
  72. package/lib/session-scratch.ts +52 -3
  73. package/lib/session-worktree-registry.ts +7 -0
  74. package/lib/shell-bar.ts +4 -3
  75. package/lib/shell-changes.ts +81 -5
  76. package/lib/shell-prompt.ts +4 -4
  77. package/lib/shell-sidebar-layout.ts +26 -6
  78. package/lib/shell-todo.ts +1 -1
  79. package/lib/verifier-admission.ts +5 -4
  80. package/lib/vim-editor-adapter.ts +11 -8
  81. package/lib/voice-artifacts.ts +188 -0
  82. package/lib/voice-command.ts +576 -0
  83. package/lib/voice-install.ts +455 -0
  84. package/lib/voice-platform.ts +99 -0
  85. package/lib/voice-push-to-talk.ts +262 -0
  86. package/lib/voice-session.ts +460 -0
  87. package/lib/voice-settings.ts +50 -0
  88. package/lib/voice-ui.ts +158 -0
  89. package/lib/yolo-session-policy.ts +58 -22
  90. package/package.json +1 -1
  91. package/runtime/gentle-shell-bundled.mjs +122 -48
  92. package/runtime/gentle-shell-launcher.mjs +9 -4
  93. package/runtime/gentle-shell-startup-update.mjs +61 -9
  94. package/runtime/gentle-shell-uninstall.mjs +33 -1
  95. package/runtime/native-review-cli.mjs +11 -4
  96. package/scripts/bundled-engram-migration.mjs +0 -6
  97. package/scripts/gentle-ai-installer.mjs +10 -10
  98. package/scripts/installer-downloads.mjs +7 -7
  99. package/scripts/installer-preflight.mjs +5 -3
  100. package/scripts/installer-windows.mjs +37 -7
  101. package/scripts/main-channel.mjs +91 -17
  102. package/scripts/pi-update.mjs +34 -6
  103. package/scripts/verify-package-files.mjs +26 -2
  104. package/scripts/voice-worker.cjs +476 -0
  105. package/skills/design/SKILL.md +110 -0
  106. package/tests/agent-profiles.test.ts +24 -0
  107. package/tests/agents-config.test.ts +61 -0
  108. package/tests/agents-fake-child.ts +8 -1
  109. package/tests/agents-protocol.test.ts +32 -0
  110. package/tests/agents-runner.test.ts +226 -5
  111. package/tests/agents-session-transport.test.ts +53 -3
  112. package/tests/ask-user-choice.test.ts +30 -0
  113. package/tests/auto-mode.test.ts +17 -0
  114. package/tests/auto-permission-memory-diagnostics.test.ts +56 -0
  115. package/tests/auto-permission-runtime.test.ts +85 -1
  116. package/tests/autonomous-guard.test.ts +20 -0
  117. package/tests/bundled-install.test.ts +3 -3
  118. package/tests/clipboard-image.test.ts +114 -0
  119. package/tests/command-palette.test.ts +1 -1
  120. package/tests/context-backstop.test.ts +70 -4
  121. package/tests/delegate-for-reason-contract.test.ts +2 -1
  122. package/tests/design-canvas-assets.test.ts +710 -0
  123. package/tests/design-canvas-server.test.ts +1096 -0
  124. package/tests/design-comments.test.ts +201 -0
  125. package/tests/design-handoffs.test.ts +282 -0
  126. package/tests/design-open-browser.test.ts +70 -0
  127. package/tests/design-sources.test.ts +132 -0
  128. package/tests/engram-safety.test.ts +132 -57
  129. package/tests/external-editor.test.ts +84 -0
  130. package/tests/fixtures/primary-session-prompt/gentleman.golden.md +3 -3
  131. package/tests/gentle-agents.test.ts +365 -20
  132. package/tests/gentle-ai-binary.test.ts +1 -1
  133. package/tests/gentle-ai-installer.test.ts +51 -51
  134. package/tests/gentle-ai.test.ts +292 -13
  135. package/tests/gentle-design.test.ts +1313 -0
  136. package/tests/gentle-music.test.ts +335 -0
  137. package/tests/gentle-shell-bundled.test.ts +301 -248
  138. package/tests/gentle-shell-launcher.test.ts +28 -2
  139. package/tests/gentle-shell-startup-update.test.ts +77 -1
  140. package/tests/gentle-shell-uninstall.test.ts +59 -0
  141. package/tests/gentle-shell.test.ts +183 -8
  142. package/tests/gentle-todo.test.ts +11 -0
  143. package/tests/image-attachments.test.ts +119 -0
  144. package/tests/image-paste-chips.test.ts +236 -0
  145. package/tests/inprocess-reviewer.test.ts +55 -2
  146. package/tests/installer-bundles.test.ts +12 -6
  147. package/tests/installer-posix-bootstrap.test.ts +8 -8
  148. package/tests/installer-preflight.test.ts +16 -0
  149. package/tests/installer-server.test.ts +2 -2
  150. package/tests/installer-windows-bootstrap.test.ts +61 -3
  151. package/tests/installer-windows-diagnostics.test.ts +111 -0
  152. package/tests/main-channel-upgrade.test.ts +232 -2
  153. package/tests/main-channel.test.ts +140 -21
  154. package/tests/nan-provider.test.ts +36 -0
  155. package/tests/native-review-capability-contract.test.ts +11 -4
  156. package/tests/native-review-parity.test.ts +1 -1
  157. package/tests/notification-audio-native.test.ts +128 -9
  158. package/tests/notification-customize.test.ts +17 -5
  159. package/tests/odd-routing-canonical-ratchet.test.ts +2 -1
  160. package/tests/orchestrator-budget.test.ts +5 -2
  161. package/tests/orchestrator-presence.test.ts +100 -2
  162. package/tests/orchestrator-rdd-ownership.test.ts +2 -2
  163. package/tests/orchestrator-scope.test.ts +14 -0
  164. package/tests/orchestrator-state.test.ts +29 -0
  165. package/tests/package-files.test.ts +34 -0
  166. package/tests/package-manifest.test.ts +6 -6
  167. package/tests/permission-mode-policy.test.ts +10 -1
  168. package/tests/pi-update.test.ts +99 -4
  169. package/tests/rdd-aware-verification-contract.test.ts +1 -1
  170. package/tests/review-host-relay-routing.test.ts +88 -1
  171. package/tests/review-host-relay.test.ts +9 -2
  172. package/tests/review-json-arguments.test.ts +20 -3
  173. package/tests/review-loadout-rdd-off-sdk.test.ts +23 -2
  174. package/tests/review-relay-transport-agent.test.ts +26 -0
  175. package/tests/review-reminder-receipt.test.ts +31 -1
  176. package/tests/session-changes.test.ts +2 -1
  177. package/tests/session-profile-append-controller-fork.test.ts +458 -0
  178. package/tests/session-profile-append-controller-pi.test.ts +290 -0
  179. package/tests/session-profile-append-controller.test.ts +731 -0
  180. package/tests/session-profile-disk-reader-pi.test.ts +183 -0
  181. package/tests/session-profile-disk-reader.test.ts +311 -0
  182. package/tests/session-scratch.test.ts +68 -2
  183. package/tests/session-worktree-registry.test.ts +13 -1
  184. package/tests/shell-bar.test.ts +14 -2
  185. package/tests/shell-changes.test.ts +148 -1
  186. package/tests/shell-prompt.test.ts +3 -3
  187. package/tests/shell-render-cache.test.ts +134 -1
  188. package/tests/shell-sidebar-layout.test.ts +50 -0
  189. package/tests/short-check-routing-contract.test.ts +1 -1
  190. package/tests/skill-collision-prefixes.test.ts +3 -1
  191. package/tests/skill-registry-watcher.test.ts +17 -5
  192. package/tests/skill-registry.test.ts +47 -3
  193. package/tests/task-size-routing-contract.test.ts +1 -1
  194. package/tests/test-strength-contract.test.ts +1 -1
  195. package/tests/verifier-admission.test.ts +18 -1
  196. package/tests/voice-command.test.ts +773 -0
  197. package/tests/voice-install.test.ts +323 -0
  198. package/tests/voice-platform.test.ts +176 -0
  199. package/tests/voice-push-to-talk.test.ts +444 -0
  200. package/tests/voice-session.test.ts +434 -0
  201. package/tests/voice-settings.test.ts +49 -0
  202. package/tests/voice-ui.test.ts +97 -0
  203. package/tests/voice-worker.test.ts +445 -0
  204. package/tests/weak-model-economy-prompt.test.ts +32 -0
  205. package/tests/windows-hidden-processes.test.ts +25 -2
  206. package/tests/yolo-customize.test.ts +5 -1
  207. package/tests/yolo-mode.test.ts +1 -1
  208. package/tests/yolo-session-policy-capture.test.ts +104 -0
@@ -32,6 +32,8 @@ interface PrivateEditor {
32
32
  onChange?: (text: string) => void;
33
33
  pastes: Map<number, string>;
34
34
  pasteCounter: number;
35
+ /** Host-owned atomic spans (gentle-shell#2464 image chips) that NORMAL motions must not split. */
36
+ atomicSpans?(line: string): Array<{ start: number; end: number }>;
35
37
  undoStack: Stack;
36
38
  history: string[];
37
39
  historyIndex: number;
@@ -151,12 +153,13 @@ function highlightRenderedRow(row: string, chunk: LayoutLine, left: number, righ
151
153
  return result;
152
154
  }
153
155
 
154
- function boundaries(line: string, pastes: Map<number, string>): number[] {
156
+ function boundaries(line: string, editor: Pick<PrivateEditor, "pastes" | "atomicSpans">): number[] {
155
157
  const units = [...segmenter.segment(line)].map((part) => part.index);
156
- for (const match of line.matchAll(marker)) {
157
- if (!pastes.has(Number(match[1]))) continue;
158
- const start = match.index;
159
- const end = start + match[0].length;
158
+ const spans = [...line.matchAll(marker)]
159
+ .filter((match) => editor.pastes.has(Number(match[1])))
160
+ .map((match) => ({ start: match.index, end: match.index + match[0].length }));
161
+ if (typeof editor.atomicSpans === "function") spans.push(...editor.atomicSpans(line));
162
+ for (const { start, end } of spans) {
160
163
  for (let i = units.length - 1; i >= 0; i--) {
161
164
  if (units[i]! > start && units[i]! < end) units.splice(i, 1);
162
165
  }
@@ -177,7 +180,7 @@ function assertUniquePastes(editor: PrivateEditor): void {
177
180
  function assertPosition(editor: PrivateEditor, pos: Position): void {
178
181
  assertUniquePastes(editor);
179
182
  const line = editor.state.lines[pos.line];
180
- if (line === undefined || !Number.isInteger(pos.col) || !boundaries(line, editor.pastes).includes(pos.col)) {
183
+ if (line === undefined || !Number.isInteger(pos.col) || !boundaries(line, editor).includes(pos.col)) {
181
184
  throw new Error("Cursor must be on a valid grapheme or paste boundary");
182
185
  }
183
186
  }
@@ -265,7 +268,7 @@ export function createVimEditorAdapter(value: unknown, version: string, editorCl
265
268
  },
266
269
  motionBoundaries(): number[][] {
267
270
  assertUniquePastes(editor);
268
- return editor.state.lines.map((line) => boundaries(line, editor.pastes));
271
+ return editor.state.lines.map((line) => boundaries(line, editor));
269
272
  },
270
273
  move(pos: Position): void {
271
274
  assertPosition(editor, pos);
@@ -277,7 +280,7 @@ export function createVimEditorAdapter(value: unknown, version: string, editorCl
277
280
  moveByGraphemes(delta: number): void {
278
281
  if (!Number.isInteger(delta)) throw new Error("Invalid motion");
279
282
  const positions = editor.state.lines.flatMap((line, index) =>
280
- boundaries(line, editor.pastes).map((col) => ({ line: index, col })));
283
+ boundaries(line, editor).map((col) => ({ line: index, col })));
281
284
  const current = editor.getCursor();
282
285
  const at = positions.findIndex((p) => p.line === current.line && p.col === current.col);
283
286
  if (at < 0) throw new Error("Invalid cursor boundary");
@@ -0,0 +1,188 @@
1
+ // Pinned artifacts for the optional local voice dictation (S1-S3). Nothing here is
2
+ // fetched or resolved at runtime: every version, size and digest below was read
3
+ // from the public npm registry and Hugging Face metadata for the exact versions,
4
+ // and the tarball layouts were inspected for the facts the comments state.
5
+ // Installation lives in voice-install.ts; this module is data only.
6
+
7
+ export type VoiceTarget = "darwin-x64" | "darwin-arm64" | "linux-x64" | "linux-arm64" | "win32-x64";
8
+
9
+ export const VOICE_TARGETS: readonly VoiceTarget[] = ["darwin-x64", "darwin-arm64", "linux-x64", "linux-arm64", "win32-x64"];
10
+
11
+ // A redirect hop is followed only when its URL is HTTPS on this origin and its
12
+ // path starts with the prefix. Anything else ends the download.
13
+ export interface VoiceRedirectRule {
14
+ origin: string;
15
+ pathPrefix: string;
16
+ }
17
+
18
+ export interface VoiceNpmPackage {
19
+ name: string;
20
+ version: string;
21
+ license: string;
22
+ tarball: string;
23
+ // The packed tarball size in bytes and its registry `dist.integrity`.
24
+ size: number;
25
+ integrity: string;
26
+ // Registry `dist.unpackedSize` and `dist.fileCount`: hard limits for extraction.
27
+ unpackedSize: number;
28
+ fileCount: number;
29
+ // Paths relative to the package root that must be present after extraction.
30
+ requiredFiles: string[];
31
+ }
32
+
33
+ export interface VoiceRuntimeManifest {
34
+ // The installed directory name; also part of the install marker.
35
+ id: string;
36
+ target: VoiceTarget;
37
+ packages: VoiceNpmPackage[];
38
+ redirects: VoiceRedirectRule[];
39
+ }
40
+
41
+ export interface VoiceModelFile {
42
+ name: string;
43
+ size: number;
44
+ sha256: string;
45
+ }
46
+
47
+ export interface VoiceModelManifest {
48
+ id: string;
49
+ revision: string;
50
+ // Files are fetched from `${baseUrl}/${name}`.
51
+ baseUrl: string;
52
+ files: VoiceModelFile[];
53
+ redirects: VoiceRedirectRule[];
54
+ }
55
+
56
+ const SHERPA_VERSION = "1.13.8";
57
+
58
+ const npmTarball = (name: string, version: string) => `https://registry.npmjs.org/${name}/-/${name}-${version}.tgz`;
59
+
60
+ // sherpa-onnx-node holds only JavaScript. Its addon-static-import.js loads
61
+ // `../sherpa-onnx-<platform>-<arch>/sherpa-onnx.node` (Windows spelled `win`), so the
62
+ // platform package must be installed as a sibling directory under node_modules.
63
+ export const SHERPA_ONNX_NODE: VoiceNpmPackage = {
64
+ name: "sherpa-onnx-node",
65
+ version: SHERPA_VERSION,
66
+ license: "Apache-2.0",
67
+ tarball: npmTarball("sherpa-onnx-node", SHERPA_VERSION),
68
+ size: 11954,
69
+ integrity: "sha512-MsDMBdhLFTZ1GwvcGSSQhnS7g/EA8OMH6IYysCVUOM7j8Icty9KRc0E6YT1A5fWBsZwRfKOeh88QC95aRvS8ag==",
70
+ unpackedSize: 61221,
71
+ fileCount: 19,
72
+ requiredFiles: ["package.json", "sherpa-onnx.js", "addon.js", "addon-static-import.js", "non-streaming-asr.js"],
73
+ };
74
+
75
+ function sherpaPlatform(target: VoiceTarget, size: number, integrity: string, unpackedSize: number, fileCount: number): VoiceNpmPackage {
76
+ const name = `sherpa-onnx-${target.replace(/^win32-/, "win-")}`;
77
+ return {
78
+ name,
79
+ version: SHERPA_VERSION,
80
+ license: "Apache-2.0",
81
+ tarball: npmTarball(name, SHERPA_VERSION),
82
+ size,
83
+ integrity,
84
+ unpackedSize,
85
+ fileCount,
86
+ requiredFiles: ["package.json", "sherpa-onnx.node"],
87
+ };
88
+ }
89
+
90
+ // Each platform package bundles sherpa-onnx.node, the sherpa-onnx C/C++ API
91
+ // libraries and onnxruntime, all built for the named architecture.
92
+ export const SHERPA_ONNX_PLATFORM_PACKAGES: Readonly<Record<VoiceTarget, VoiceNpmPackage>> = {
93
+ "darwin-x64": sherpaPlatform("darwin-x64", 11191481, "sha512-7BLRpjM6w4f9W46/nmkmq8lEKUayhebvcpslCVQ+6QN2uReYlZEMDZlSpXMjme+hUFrPfRz8P3UNq8ep/4d19g==", 37678686, 7),
94
+ "darwin-arm64": sherpaPlatform("darwin-arm64", 10047754, "sha512-FPNgJMgnWVl/KhRTIhG3KL3A4Om63Rn4YKXc9/uHY7SzLcvqLJLc/h7UBWJwduXvv7K18t5NpxHR6XgXn4sjWw==", 34089738, 7),
95
+ "linux-x64": sherpaPlatform("linux-x64", 11089653, "sha512-6plnhjagsSeTntCgnlag86hWbs/uZE9Crms1LgOb68/1nKsIQjMd+WG519m+aPwT6TrsBOiEMzrx41t8sL5L5g==", 33381117, 7),
96
+ "linux-arm64": sherpaPlatform("linux-arm64", 13910679, "sha512-Tlg7a70b/Wge3OF8IgTHF9jhSVCsLyKQKhwc4BsJ5A+dL/SrFtGBjzuHp4XeLhiiOT7afCxX5PdSn/D4c8Lnuw==", 40306856, 7),
97
+ "win32-x64": sherpaPlatform("win32-x64", 8894875, "sha512-oZF1c9VPOKtMwn83Bboc5XSWL+76BRoyB3eUuVnCknBKxwSULZU2Foia9VHWzU+n4I12rPsP6z6H9Rp1hD9o8g==", 23453246, 8),
98
+ };
99
+
100
+ // node-cpal has no dependencies or install scripts and needs Node >= 22. Its
101
+ // tarball ships every prebuilt binary; the default backend loads
102
+ // bin/<platform>-<arch>/index.node through facade.js. The five binary headers were
103
+ // inspected (not loaded) and each is built for its own architecture. Published
104
+ // from saeta-eth/node-cpal tag v1.0.0, commit 20e2ac8d1922de7c4af50431e2ddc21a421cf764.
105
+ // 0.1.1 is not used: its darwin-x64 and linux-arm64 binaries were built for the
106
+ // other architecture.
107
+ const NODE_CPAL_VERSION = "1.0.0";
108
+
109
+ export const NODE_CPAL: VoiceNpmPackage = {
110
+ name: "node-cpal",
111
+ version: NODE_CPAL_VERSION,
112
+ license: "ISC",
113
+ tarball: npmTarball("node-cpal", NODE_CPAL_VERSION),
114
+ size: 7723259,
115
+ integrity: "sha512-d71jIzKDjw1HepqaJQMPd+/k3ZLqYZWhLAv6a8aafIGnYoA1QWlShA5iB5CgijIJtQxq9PdQAk99JQKspqlnTA==",
116
+ unpackedSize: 20363834,
117
+ fileCount: 40,
118
+ requiredFiles: ["package.json", "index.js", "facade.js", "cpal-values.js"],
119
+ };
120
+
121
+ // The oldest glibc the pinned Linux native binaries accept.
122
+ export const VOICE_LINUX_MIN_GLIBC = "2.34";
123
+
124
+ export function voiceRuntimeManifest(target: VoiceTarget): VoiceRuntimeManifest {
125
+ const packages = [
126
+ SHERPA_ONNX_NODE,
127
+ SHERPA_ONNX_PLATFORM_PACKAGES[target],
128
+ { ...NODE_CPAL, requiredFiles: [...NODE_CPAL.requiredFiles, `bin/${target}/index.node`] },
129
+ ];
130
+ // The id names both native versions, so a runtime installed with other pins
131
+ // lives in another directory and is never reported as this one.
132
+ // npm serves these tarballs directly; no redirect is expected or followed.
133
+ return { id: `sherpa-onnx-${SHERPA_VERSION}-node-cpal-${NODE_CPAL_VERSION}-${target}`, target, packages, redirects: [] };
134
+ }
135
+
136
+ const PARAKEET_REPO = "csukuangfj/sherpa-onnx-nemo-parakeet-tdt-0.6b-v3-int8";
137
+ const PARAKEET_REVISION = "2bda32ec70b097a55adaa07d9a7173915b43cc78";
138
+
139
+ // The int8 sherpa-onnx export of NVIDIA Parakeet TDT 0.6B v3 at a fixed commit.
140
+ // Observed redirects: tokens.txt answers 307 with a same-origin resolve-cache path,
141
+ // the LFS/Xet files answer 302 to us.aws.cdn.hf.co/xet-bridge-us/. Other CDN
142
+ // regions were not observed, so they are refused rather than guessed.
143
+ export const PARAKEET_MODEL_MANIFEST: VoiceModelManifest = {
144
+ id: `parakeet-tdt-0.6b-v3-int8-${PARAKEET_REVISION.slice(0, 12)}`,
145
+ revision: PARAKEET_REVISION,
146
+ baseUrl: `https://huggingface.co/${PARAKEET_REPO}/resolve/${PARAKEET_REVISION}`,
147
+ files: [
148
+ { name: "encoder.int8.onnx", size: 652184281, sha256: "acfc2b4456377e15d04f0243af540b7fe7c992f8d898d751cf134c3a55fd2247" },
149
+ { name: "decoder.int8.onnx", size: 11845275, sha256: "179e50c43d1a9de79c8a24149a2f9bac6eb5981823f2a2ed88d655b24248db4e" },
150
+ { name: "joiner.int8.onnx", size: 6355277, sha256: "3164c13fc2821009440d20fcb5fdc78bff28b4db2f8d0f0b329101719c0948b3" },
151
+ { name: "tokens.txt", size: 93939, sha256: "d58544679ea4bc6ac563d1f545eb7d474bd6cfa467f0a6e2c1dc1c7d37e3c35d" },
152
+ ],
153
+ redirects: [
154
+ { origin: "https://huggingface.co", pathPrefix: `/api/resolve-cache/models/${PARAKEET_REPO}/${PARAKEET_REVISION}/` },
155
+ { origin: "https://us.aws.cdn.hf.co", pathPrefix: "/xet-bridge-us/" },
156
+ ],
157
+ };
158
+
159
+ export interface VoiceNotice {
160
+ component: string;
161
+ license: string;
162
+ source: string;
163
+ attribution?: string;
164
+ // What is known to be missing from the distributed artifact, stated plainly.
165
+ unresolved?: string;
166
+ }
167
+
168
+ export const VOICE_NOTICES: readonly VoiceNotice[] = [
169
+ {
170
+ component: "parakeet-tdt-0.6b-v3",
171
+ license: "CC-BY-4.0",
172
+ source: "https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3",
173
+ attribution: "Parakeet TDT 0.6B v3 by NVIDIA, licensed under CC-BY-4.0; int8 sherpa-onnx export by csukuangfj.",
174
+ unresolved: `The ${PARAKEET_REPO} export has no license file or model card license of its own; the license is taken from the upstream NVIDIA model.`,
175
+ },
176
+ {
177
+ component: "sherpa-onnx-node",
178
+ license: "Apache-2.0",
179
+ source: "https://github.com/k2-fsa/sherpa-onnx",
180
+ unresolved: "The sherpa-onnx npm tarballs ship no LICENSE or NOTICE file, and the platform packages bundle onnxruntime (MIT) without its license text.",
181
+ },
182
+ {
183
+ component: "node-cpal",
184
+ license: "ISC",
185
+ source: "https://github.com/saeta-eth/node-cpal",
186
+ unresolved: "The node-cpal@1.0.0 tarball ships no LICENSE or NOTICE file, and its prebuilt binaries link Rust crates whose notices are not included.",
187
+ },
188
+ ];