@vellumai/assistant 0.12.2-staging.4 → 0.12.2-staging.6

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 (57) hide show
  1. package/Dockerfile +7 -7
  2. package/openapi.yaml +151 -53
  3. package/package.json +5 -4
  4. package/scripts/bundled-plugin-packages.ts +154 -0
  5. package/scripts/generate-bundled-plugin-packages.ts +29 -0
  6. package/scripts/test.ts +15 -13
  7. package/src/__tests__/managed-store.test.ts +121 -0
  8. package/src/__tests__/scaffold-managed-skill-tool.test.ts +88 -0
  9. package/src/calls/__tests__/voice-control-protocol.test.ts +24 -2
  10. package/src/calls/__tests__/voice-session-bridge.test.ts +22 -2
  11. package/src/calls/voice-control-protocol.ts +13 -4
  12. package/src/calls/voice-session-bridge.ts +27 -6
  13. package/src/cli/commands/__tests__/plugins.test.ts +66 -0
  14. package/src/cli/commands/plugins.ts +50 -18
  15. package/src/cli/lib/__tests__/install-from-github.test.ts +67 -0
  16. package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +169 -0
  17. package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +57 -0
  18. package/src/cli/lib/__tests__/plugin-catalog-platform.test.ts +14 -0
  19. package/src/cli/lib/__tests__/plugin-catalog-resolve.test.ts +27 -1
  20. package/src/cli/lib/__tests__/plugin-details.test.ts +9 -2
  21. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +20 -0
  22. package/src/cli/lib/__tests__/plugins-install-offline.test.ts +43 -0
  23. package/src/cli/lib/__tests__/search-plugins.test.ts +31 -0
  24. package/src/cli/lib/bundled-plugin-packages.json +4 -0
  25. package/src/cli/lib/bundled-plugin-packages.ts +87 -0
  26. package/src/cli/lib/diff-plugin.ts +1 -1
  27. package/src/cli/lib/inspect-plugin.ts +80 -12
  28. package/src/cli/lib/install-from-github.ts +133 -76
  29. package/src/cli/lib/plugin-catalog-cache.ts +22 -3
  30. package/src/cli/lib/plugin-catalog-local.ts +13 -3
  31. package/src/cli/lib/plugin-catalog-platform.ts +6 -1
  32. package/src/cli/lib/plugin-catalog-resolve.ts +20 -0
  33. package/src/cli/lib/plugin-details.ts +12 -0
  34. package/src/cli/lib/plugin-marketplace.ts +121 -21
  35. package/src/cli/lib/plugin-pin-history.ts +5 -2
  36. package/src/cli/lib/search-plugins.ts +58 -16
  37. package/src/cli/lib/upgrade-plugin.ts +48 -3
  38. package/src/config/bundled-skills/skill-management/SKILL.md +1 -1
  39. package/src/config/bundled-skills/skill-management/TOOLS.json +7 -7
  40. package/src/daemon/conversation-tool-setup.ts +4 -22
  41. package/src/live-voice/__tests__/live-voice-look-follow-up.test.ts +374 -0
  42. package/src/live-voice/__tests__/live-voice-vad.test.ts +658 -3
  43. package/src/live-voice/__tests__/protocol.test.ts +48 -0
  44. package/src/live-voice/__tests__/session-controls.test.ts +43 -0
  45. package/src/live-voice/live-voice-session.ts +784 -64
  46. package/src/live-voice/protocol.ts +20 -0
  47. package/src/live-voice/session-controls.ts +61 -3
  48. package/src/monitoring/plugin-auto-update.ts +6 -0
  49. package/src/plugins/defaults/memory/__tests__/memory-retrospective-prompt.test.ts +15 -0
  50. package/src/plugins/defaults/memory/memory-retrospective-prompt.ts +1 -1
  51. package/src/runtime/routes/__tests__/plugins-routes.test.ts +102 -0
  52. package/src/runtime/routes/plugins-routes.ts +69 -49
  53. package/src/skills/managed-store.ts +153 -31
  54. package/src/tools/skills/find-similar-skills.test.ts +214 -2
  55. package/src/tools/skills/find-similar-skills.ts +62 -9
  56. package/src/tools/skills/resolve-execute-invocation.ts +24 -0
  57. package/src/tools/skills/scaffold-managed.ts +16 -13
@@ -49,9 +49,12 @@ const MISSING_CHANGE_SUMMARY =
49
49
  /**
50
50
  * Validate + normalize a string-array input (sanitize, drop blanks, dedupe).
51
51
  * Returns `{ error }` on the first invalid element, or `{ value }` holding
52
- * the normalized array (undefined when absent or empty). Shared by the
53
- * includes / activation_hints / avoid_when inputs so they behave identically;
54
- * whether an absent value is acceptable is the caller's call.
52
+ * the normalized array: undefined when the input is absent, and an empty
53
+ * array when it was passed empty, since on an overwrite the store keeps the
54
+ * current value for an absent field and clears it for an empty one. Shared by
55
+ * the includes / activation_hints / avoid_when inputs so they behave
56
+ * identically; whether an absent or empty value is acceptable is the
57
+ * caller's call.
55
58
  * Each element goes through sanitizeFrontmatterValue: activation_hints /
56
59
  * avoid_when are concatenated verbatim into capability memory text (see
57
60
  * buildSkillContent), so an embedded newline could otherwise smuggle an extra
@@ -84,7 +87,7 @@ function normalizeOptionalStringArray(
84
87
  seen.add(cleaned);
85
88
  normalized.push(cleaned);
86
89
  }
87
- return { value: normalized.length > 0 ? normalized : undefined };
90
+ return { value: normalized };
88
91
  }
89
92
 
90
93
  /**
@@ -231,9 +234,11 @@ export async function executeScaffoldManagedSkill(
231
234
  return { content: `Error: ${activationHintsResult.error}`, isError: true };
232
235
  }
233
236
  const activationHints = activationHintsResult.value;
234
- // Hints are the skill's "Use when:" retrieval text, and scaffolding rewrites
235
- // the whole SKILL.md, so a write without them leaves (or strips) none.
236
- if (!activationHints) {
237
+ // Hints are the skill's "Use when:" retrieval text and should track the
238
+ // body, so every write states them: the store would keep the current ones
239
+ // on an overwrite, but hints for a rewritten procedure are the caller's
240
+ // to restate, not the store's to assume.
241
+ if (!activationHints || activationHints.length === 0) {
237
242
  return {
238
243
  content: `Error: ${MISSING_ACTIVATION_HINTS}`,
239
244
  isError: true,
@@ -313,8 +318,9 @@ export async function executeScaffoldManagedSkill(
313
318
  }
314
319
 
315
320
  // Validate and normalize the optional category (lowercased/trimmed for
316
- // consistency with the lowercase Skills-UI sidebar buckets). Blank or
317
- // whitespace-only values become undefined so they never land in frontmatter.
321
+ // consistency with the lowercase Skills-UI sidebar buckets). A blank value
322
+ // is passed through as the store's "clear" signal; the frontmatter builder
323
+ // never writes a blank category.
318
324
  let category: string | undefined;
319
325
  if (input.category !== undefined) {
320
326
  if (typeof input.category !== "string") {
@@ -323,10 +329,7 @@ export async function executeScaffoldManagedSkill(
323
329
  isError: true,
324
330
  };
325
331
  }
326
- const normalized = input.category.trim().toLowerCase();
327
- if (normalized) {
328
- category = normalized;
329
- }
332
+ category = input.category.trim().toLowerCase();
330
333
  }
331
334
 
332
335
  // The update notice's body. Model-authored text bound for a notification