@pellux/goodvibes-agent 1.1.7 → 1.3.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 (274) hide show
  1. package/CHANGELOG.md +329 -0
  2. package/README.md +46 -30
  3. package/dist/package/{ast-grep-napi.linux-x64-gnu-mkk8xwww.node → ast-grep-napi.linux-x64-gnu-swtppvy9.node} +0 -0
  4. package/dist/package/{ast-grep-napi.linux-x64-musl-ryqtgdv6.node → ast-grep-napi.linux-x64-musl-ttfcdtap.node} +0 -0
  5. package/dist/package/main.js +138903 -91477
  6. package/docs/README.md +14 -7
  7. package/docs/channels-remote-and-api.md +8 -5
  8. package/docs/connected-host.md +14 -12
  9. package/docs/getting-started.md +58 -30
  10. package/docs/knowledge-artifacts-and-multimodal.md +7 -5
  11. package/docs/project-planning.md +2 -2
  12. package/docs/providers-and-routing.md +11 -3
  13. package/docs/tools-and-commands.md +116 -45
  14. package/docs/voice-and-live-tts.md +3 -1
  15. package/package.json +3 -2
  16. package/release/release-notes.md +142 -5
  17. package/release/release-readiness.json +124 -94
  18. package/src/agent/assistant-cockpit.ts +247 -0
  19. package/src/agent/autonomy-schedule-format.ts +96 -0
  20. package/src/agent/autonomy-schedule.ts +514 -0
  21. package/src/agent/channel-delivery-receipts.ts +292 -0
  22. package/src/agent/competitive-feature-inventory.ts +294 -0
  23. package/src/agent/document-registry-types.ts +106 -0
  24. package/src/agent/document-registry.ts +734 -0
  25. package/src/agent/harness-control.ts +2 -2
  26. package/src/agent/memory-prompt.ts +2 -2
  27. package/src/agent/operator-actions.ts +50 -6
  28. package/src/agent/persona-registry.ts +8 -0
  29. package/src/agent/project-context-files.ts +273 -0
  30. package/src/agent/prompt-context-receipts.ts +502 -0
  31. package/src/agent/reminder-schedule-format.ts +16 -2
  32. package/src/agent/research-run-registry.ts +582 -0
  33. package/src/agent/research-source-registry.ts +441 -0
  34. package/src/agent/routine-registry.ts +19 -3
  35. package/src/agent/routine-schedule-format.ts +27 -2
  36. package/src/agent/runtime-profile-starters.ts +7 -0
  37. package/src/agent/runtime-profile.ts +106 -4
  38. package/src/agent/schedule-edit-format.ts +129 -0
  39. package/src/agent/schedule-edit.ts +496 -0
  40. package/src/agent/schedule-next-routes.ts +42 -0
  41. package/src/agent/setup-wizard-artifact-receipts.ts +366 -0
  42. package/src/agent/setup-wizard-checkpoint.ts +140 -0
  43. package/src/agent/setup-wizard.ts +683 -0
  44. package/src/agent/skill-registry-types.ts +102 -0
  45. package/src/agent/skill-registry.ts +81 -107
  46. package/src/agent/vibe-confirmation-routes.ts +62 -0
  47. package/src/agent/vibe-file.ts +285 -0
  48. package/src/cli/agent-knowledge-command.ts +45 -2
  49. package/src/cli/help.ts +3 -0
  50. package/src/cli/profiles-command.ts +25 -11
  51. package/src/config/agent-settings-policy.ts +1 -18
  52. package/src/input/agent-workspace-activation.ts +53 -0
  53. package/src/input/agent-workspace-artifact-browser-editor.ts +494 -0
  54. package/src/input/agent-workspace-artifact-metadata.ts +17 -0
  55. package/src/input/agent-workspace-basic-command-editors.ts +5 -1
  56. package/src/input/agent-workspace-categories.ts +153 -155
  57. package/src/input/agent-workspace-channel-triage.ts +481 -0
  58. package/src/input/agent-workspace-channels.ts +263 -0
  59. package/src/input/agent-workspace-command-editor.ts +152 -0
  60. package/src/input/agent-workspace-context-snapshot.ts +349 -0
  61. package/src/input/agent-workspace-delegation-editor-submission.ts +8 -0
  62. package/src/input/agent-workspace-document-editor.ts +502 -0
  63. package/src/input/agent-workspace-document-ops-editor.ts +523 -0
  64. package/src/input/agent-workspace-host-category.ts +1 -1
  65. package/src/input/agent-workspace-local-library-snapshot.ts +167 -0
  66. package/src/input/agent-workspace-model-compare-editor.ts +376 -0
  67. package/src/input/agent-workspace-model-compare-prompt-submission.ts +552 -0
  68. package/src/input/agent-workspace-model-compare-types.ts +82 -0
  69. package/src/input/agent-workspace-model-compare-utils.ts +35 -0
  70. package/src/input/agent-workspace-onboarding-categories.ts +141 -0
  71. package/src/input/agent-workspace-operations-command-editor-submission.ts +53 -0
  72. package/src/input/agent-workspace-operations-command-editors.ts +22 -0
  73. package/src/input/agent-workspace-research-report-editor.ts +212 -0
  74. package/src/input/agent-workspace-research-run-editor.ts +144 -0
  75. package/src/input/agent-workspace-research-source-editor.ts +167 -0
  76. package/src/input/agent-workspace-review-packet-snapshot.ts +593 -0
  77. package/src/input/agent-workspace-review-packet-utils.ts +265 -0
  78. package/src/input/agent-workspace-settings.ts +313 -30
  79. package/src/input/agent-workspace-setup-checkpoint-action.ts +127 -0
  80. package/src/input/agent-workspace-setup-snapshot.ts +217 -0
  81. package/src/input/agent-workspace-setup.ts +61 -1
  82. package/src/input/agent-workspace-snapshot.ts +184 -149
  83. package/src/input/agent-workspace-types.ts +287 -2
  84. package/src/input/agent-workspace.ts +23 -1
  85. package/src/input/command-registry.ts +9 -2
  86. package/src/input/commands/agent-runtime-profile-runtime.ts +28 -13
  87. package/src/input/commands/channels-runtime.ts +102 -114
  88. package/src/input/commands/delegation-runtime.ts +87 -24
  89. package/src/input/commands/knowledge-browser-flags.ts +12 -0
  90. package/src/input/commands/knowledge.ts +28 -14
  91. package/src/input/commands/operator-actions-runtime.ts +6 -3
  92. package/src/input/commands/schedule-runtime.ts +71 -14
  93. package/src/input/commands/session-content.ts +2 -2
  94. package/src/input/commands/shell-core.ts +2 -0
  95. package/src/input/commands/vibe-runtime.ts +140 -0
  96. package/src/input/commands.ts +2 -0
  97. package/src/input/connected-host-routes.ts +123 -0
  98. package/src/input/settings-modal-types.ts +14 -0
  99. package/src/input/setup-wizard-live-receipts.ts +76 -0
  100. package/src/main.ts +15 -15
  101. package/src/panels/qr-panel.ts +2 -2
  102. package/src/renderer/agent-workspace-context-lines.ts +701 -0
  103. package/src/renderer/agent-workspace.ts +68 -421
  104. package/src/renderer/settings-modal-helpers.ts +12 -0
  105. package/src/renderer/settings-modal.ts +12 -0
  106. package/src/runtime/bootstrap-command-context.ts +11 -1
  107. package/src/runtime/bootstrap-command-parts.ts +14 -3
  108. package/src/runtime/bootstrap-core.ts +39 -1
  109. package/src/runtime/bootstrap-shell.ts +6 -0
  110. package/src/runtime/bootstrap.ts +113 -30
  111. package/src/runtime/connected-host-auth.ts +3 -2
  112. package/src/runtime/execution-ledger.ts +231 -0
  113. package/src/runtime/services.ts +88 -10
  114. package/src/runtime/tool-permission-safety.ts +199 -5
  115. package/src/shell/session-continuity-hints.ts +39 -0
  116. package/src/tools/agent-artifacts-tool.ts +606 -0
  117. package/src/tools/agent-audit-tool.ts +155 -0
  118. package/src/tools/agent-autonomy-schedule-tool.ts +238 -0
  119. package/src/tools/agent-autonomy-tool.ts +140 -0
  120. package/src/tools/agent-channel-send-tool.ts +24 -2
  121. package/src/tools/agent-channels-tool.ts +140 -0
  122. package/src/tools/agent-computer-tool.ts +168 -0
  123. package/src/tools/agent-context-policy.ts +137 -7
  124. package/src/tools/agent-context-tool.ts +143 -0
  125. package/src/tools/agent-delegation-tool.ts +128 -0
  126. package/src/tools/agent-device-tool.ts +240 -0
  127. package/src/tools/agent-documents-tool.ts +684 -0
  128. package/src/tools/agent-execution-tool.ts +230 -0
  129. package/src/tools/agent-harness-agent-orchestration-policy.ts +75 -0
  130. package/src/tools/agent-harness-agent-orchestration.ts +791 -0
  131. package/src/tools/agent-harness-autonomy-intake.ts +785 -0
  132. package/src/tools/agent-harness-autonomy-live-records.ts +742 -0
  133. package/src/tools/agent-harness-autonomy-queue-types.ts +88 -0
  134. package/src/tools/agent-harness-autonomy-queue.ts +571 -0
  135. package/src/tools/agent-harness-autonomy-watcher-read-models.ts +509 -0
  136. package/src/tools/agent-harness-background-processes-types.ts +35 -0
  137. package/src/tools/agent-harness-background-processes.ts +798 -0
  138. package/src/tools/agent-harness-browser-cockpit-route.ts +373 -0
  139. package/src/tools/agent-harness-browser-control.ts +346 -0
  140. package/src/tools/agent-harness-browser-pwa-read-models.ts +622 -0
  141. package/src/tools/agent-harness-channel-metadata.ts +168 -10
  142. package/src/tools/agent-harness-cli-command-policy.ts +110 -0
  143. package/src/tools/agent-harness-command-catalog.ts +4 -2
  144. package/src/tools/agent-harness-command-runner.ts +42 -0
  145. package/src/tools/agent-harness-connected-host-status.ts +7 -4
  146. package/src/tools/agent-harness-delegation-posture.ts +234 -19
  147. package/src/tools/agent-harness-device-live-read-models.ts +366 -0
  148. package/src/tools/agent-harness-document-ops-reviewer-readiness.ts +234 -0
  149. package/src/tools/agent-harness-document-ops-types.ts +72 -0
  150. package/src/tools/agent-harness-document-ops.ts +671 -0
  151. package/src/tools/agent-harness-execution-history.ts +489 -0
  152. package/src/tools/agent-harness-execution-posture.ts +385 -0
  153. package/src/tools/agent-harness-file-recovery.ts +135 -0
  154. package/src/tools/agent-harness-interactive-runtime-records.ts +421 -0
  155. package/src/tools/agent-harness-keybinding-metadata.ts +16 -12
  156. package/src/tools/agent-harness-learning-curator-common.ts +102 -0
  157. package/src/tools/agent-harness-learning-curator-consolidation.ts +295 -0
  158. package/src/tools/agent-harness-learning-curator-proposals.ts +606 -0
  159. package/src/tools/agent-harness-learning-curator-types.ts +151 -0
  160. package/src/tools/agent-harness-learning-curator.ts +417 -0
  161. package/src/tools/agent-harness-local-model-benchmarks.ts +269 -0
  162. package/src/tools/agent-harness-local-model-cookbook.ts +238 -0
  163. package/src/tools/agent-harness-local-model-endpoints.ts +788 -0
  164. package/src/tools/agent-harness-local-model-smoke.ts +277 -0
  165. package/src/tools/agent-harness-local-model-url.ts +78 -0
  166. package/src/tools/agent-harness-media-posture.ts +223 -2
  167. package/src/tools/agent-harness-memory-external-providers.ts +796 -0
  168. package/src/tools/agent-harness-memory-posture.ts +672 -0
  169. package/src/tools/agent-harness-memory-provider-certification.ts +219 -0
  170. package/src/tools/agent-harness-memory-refinement.ts +340 -0
  171. package/src/tools/agent-harness-metadata.ts +100 -168
  172. package/src/tools/agent-harness-mode-catalog.ts +86 -33
  173. package/src/tools/agent-harness-model-catalog.ts +162 -0
  174. package/src/tools/agent-harness-model-provider-health.ts +283 -0
  175. package/src/tools/agent-harness-model-readiness.ts +432 -0
  176. package/src/tools/agent-harness-model-routing-types.ts +327 -0
  177. package/src/tools/agent-harness-model-routing-utils.ts +30 -0
  178. package/src/tools/agent-harness-model-routing.ts +165 -193
  179. package/src/tools/agent-harness-operator-methods.ts +115 -133
  180. package/src/tools/agent-harness-pairing-posture.ts +452 -18
  181. package/src/tools/agent-harness-personal-ops-certification.ts +116 -0
  182. package/src/tools/agent-harness-personal-ops-discovery.ts +533 -0
  183. package/src/tools/agent-harness-personal-ops-intake.ts +385 -0
  184. package/src/tools/agent-harness-personal-ops-lanes.ts +270 -0
  185. package/src/tools/agent-harness-personal-ops-operations.ts +225 -0
  186. package/src/tools/agent-harness-personal-ops-provider-records.ts +358 -0
  187. package/src/tools/agent-harness-personal-ops-provider-task-records.ts +321 -0
  188. package/src/tools/agent-harness-personal-ops-records.ts +684 -0
  189. package/src/tools/agent-harness-personal-ops-runner.ts +637 -0
  190. package/src/tools/agent-harness-personal-ops-types.ts +240 -0
  191. package/src/tools/agent-harness-personal-ops.ts +613 -0
  192. package/src/tools/agent-harness-project-context.ts +144 -0
  193. package/src/tools/agent-harness-prompt-context.ts +589 -0
  194. package/src/tools/agent-harness-provider-account-metadata.ts +2 -2
  195. package/src/tools/agent-harness-release-evidence.ts +9 -7
  196. package/src/tools/agent-harness-release-readiness.ts +9 -7
  197. package/src/tools/agent-harness-remote-read-models.ts +541 -0
  198. package/src/tools/agent-harness-research-briefing.ts +446 -0
  199. package/src/tools/agent-harness-research-live-read-models.ts +500 -0
  200. package/src/tools/agent-harness-research-queue.ts +250 -0
  201. package/src/tools/agent-harness-research-runs.ts +307 -0
  202. package/src/tools/agent-harness-research-workflow.ts +395 -0
  203. package/src/tools/agent-harness-security-posture.ts +2 -2
  204. package/src/tools/agent-harness-service-posture.ts +9 -9
  205. package/src/tools/agent-harness-session-metadata.ts +3 -3
  206. package/src/tools/agent-harness-setup-connected-host.ts +501 -0
  207. package/src/tools/agent-harness-setup-describe.ts +557 -0
  208. package/src/tools/agent-harness-setup-handoffs.ts +502 -0
  209. package/src/tools/agent-harness-setup-model-helpers.ts +102 -0
  210. package/src/tools/agent-harness-setup-plan.ts +253 -0
  211. package/src/tools/agent-harness-setup-posture-types.ts +218 -0
  212. package/src/tools/agent-harness-setup-posture-utils.ts +173 -0
  213. package/src/tools/agent-harness-setup-posture.ts +449 -221
  214. package/src/tools/agent-harness-setup-smoke.ts +533 -0
  215. package/src/tools/agent-harness-sudo-posture.ts +114 -0
  216. package/src/tools/agent-harness-tool-schema.ts +142 -7
  217. package/src/tools/agent-harness-tool-types.ts +83 -0
  218. package/src/tools/agent-harness-tool-utils.ts +43 -0
  219. package/src/tools/agent-harness-tool.ts +319 -370
  220. package/src/tools/agent-harness-ui-surface-metadata.ts +76 -69
  221. package/src/tools/agent-harness-ui-surface-types.ts +46 -0
  222. package/src/tools/agent-harness-vibe-health.ts +105 -0
  223. package/src/tools/agent-harness-workspace-action-runner.ts +149 -0
  224. package/src/tools/agent-harness-workspace-actions.ts +114 -8
  225. package/src/tools/agent-harness-workspace-editor-execution.ts +214 -0
  226. package/src/tools/agent-harness-workspace-editor-runner.ts +755 -0
  227. package/src/tools/agent-host-tool.ts +159 -0
  228. package/src/tools/agent-knowledge-ingest-tool.ts +34 -1
  229. package/src/tools/agent-learning-consolidation-core.ts +327 -0
  230. package/src/tools/agent-learning-consolidation-tool.ts +758 -0
  231. package/src/tools/agent-memory-tool.ts +253 -0
  232. package/src/tools/agent-model-compare-export.ts +315 -0
  233. package/src/tools/agent-model-compare-handoff.ts +592 -0
  234. package/src/tools/agent-model-compare-judgment.ts +633 -0
  235. package/src/tools/agent-model-compare-run.ts +735 -0
  236. package/src/tools/agent-model-compare-tool.ts +698 -0
  237. package/src/tools/agent-model-compare-types.ts +191 -0
  238. package/src/tools/agent-model-compare-utils.ts +93 -0
  239. package/src/tools/agent-models-tool.ts +208 -0
  240. package/src/tools/agent-operator-action-tool.ts +1 -1
  241. package/src/tools/agent-operator-method-tool.ts +643 -0
  242. package/src/tools/agent-personal-ops-tool.ts +197 -0
  243. package/src/tools/agent-policy-explanation.ts +415 -0
  244. package/src/tools/agent-research-report-tool.ts +608 -0
  245. package/src/tools/agent-research-runner.ts +367 -0
  246. package/src/tools/agent-research-runs-tool.ts +434 -0
  247. package/src/tools/agent-research-sources-tool.ts +443 -0
  248. package/src/tools/agent-research-tool.ts +515 -0
  249. package/src/tools/agent-review-packet-presets-core.ts +757 -0
  250. package/src/tools/agent-review-packet-presets-tool.ts +466 -0
  251. package/src/tools/agent-review-packet-share-tool.ts +305 -0
  252. package/src/tools/agent-route-planner-candidates-setup.ts +411 -0
  253. package/src/tools/agent-route-planner-candidates-surfaces.ts +432 -0
  254. package/src/tools/agent-route-planner-candidates-work.ts +251 -0
  255. package/src/tools/agent-route-planner-helpers.ts +667 -0
  256. package/src/tools/agent-route-planner.ts +185 -0
  257. package/src/tools/agent-route-tool.ts +105 -0
  258. package/src/tools/agent-schedule-edit-tool.ts +210 -0
  259. package/src/tools/agent-schedule-tool.ts +282 -0
  260. package/src/tools/agent-security-tool.ts +145 -0
  261. package/src/tools/agent-sessions-tool.ts +122 -0
  262. package/src/tools/agent-settings-import-tool.ts +104 -0
  263. package/src/tools/agent-settings-tool.ts +176 -0
  264. package/src/tools/agent-setup-tool.ts +226 -0
  265. package/src/tools/agent-support-tool.ts +122 -0
  266. package/src/tools/agent-terminal-process-tools.ts +167 -0
  267. package/src/tools/agent-tool-policy-guard-types.ts +77 -0
  268. package/src/tools/agent-tool-policy-guard.ts +106 -85
  269. package/src/tools/agent-vibe-tool.ts +297 -0
  270. package/src/tools/agent-work-plan-tool.ts +265 -6
  271. package/src/tools/agent-workspace-tool.ts +305 -0
  272. package/src/tools/artifact-archive.ts +169 -0
  273. package/src/tools/tool-definition-compaction.ts +36 -0
  274. package/src/version.ts +1 -1
@@ -0,0 +1,327 @@
1
+ import type { ArtifactDescriptor } from '@pellux/goodvibes-sdk/platform/artifacts';
2
+
3
+ export interface AgentHarnessModelRoutingArgs {
4
+ readonly modelRouteId?: unknown;
5
+ readonly target?: unknown;
6
+ readonly query?: unknown;
7
+ readonly fields?: unknown;
8
+ readonly includeParameters?: unknown;
9
+ readonly limit?: unknown;
10
+ readonly timeoutMs?: unknown;
11
+ }
12
+
13
+ export type ModelRouteResolution =
14
+ | { readonly status: 'found'; readonly route: Record<string, unknown> }
15
+ | { readonly status: 'ambiguous'; readonly input: string; readonly candidates: readonly Record<string, unknown>[] }
16
+ | { readonly status: 'missing_lookup'; readonly usage: string };
17
+
18
+ export type ModelRouteLookupSource = 'modelRouteId' | 'target' | 'query';
19
+
20
+ export interface ModelCandidate {
21
+ readonly kind: 'model';
22
+ readonly id: string;
23
+ readonly registryKey: string;
24
+ readonly modelId: string;
25
+ readonly providerId: string;
26
+ readonly displayName: string;
27
+ readonly current: boolean;
28
+ readonly contextWindow: number | null;
29
+ readonly reasoningEffort: readonly string[];
30
+ readonly capabilities: unknown;
31
+ readonly tier?: string;
32
+ readonly benchmarkCompositeScore?: number | null;
33
+ readonly benchmarkQualityTier?: string;
34
+ readonly localBenchmarkLatency?: LocalModelBenchmarkRouteLatency | null;
35
+ readonly pinned: boolean;
36
+ }
37
+
38
+ export interface RouteCandidate {
39
+ readonly kind: 'route';
40
+ readonly id: string;
41
+ readonly label: string;
42
+ readonly detail: string;
43
+ readonly currentValue: unknown;
44
+ readonly settingKeys: readonly string[];
45
+ readonly commands: readonly string[];
46
+ readonly uiSurfaces: readonly string[];
47
+ }
48
+
49
+ export interface LocalModelDetection {
50
+ readonly providerIds: readonly string[];
51
+ readonly modelRoutes: readonly string[];
52
+ readonly stacks: readonly string[];
53
+ }
54
+
55
+ export interface LocalModelHardwareProfile {
56
+ readonly platform: string;
57
+ readonly arch: string;
58
+ readonly cpuModel: string;
59
+ readonly cpuThreads: number;
60
+ readonly ramGb: number;
61
+ readonly freeRamGb: number;
62
+ readonly memoryTier: 'constrained' | 'starter' | 'comfortable' | 'large';
63
+ readonly acceleratorHint: 'apple-silicon' | 'cuda-env' | 'none-detected';
64
+ readonly privacy: 'local-only';
65
+ readonly caveat: string;
66
+ }
67
+
68
+ export interface LocalModelRecipe {
69
+ readonly id: string;
70
+ readonly label: string;
71
+ readonly fit: string;
72
+ readonly bestFor: string;
73
+ readonly hardware: string;
74
+ readonly setup: readonly string[];
75
+ readonly modelExamples: readonly string[];
76
+ readonly cautions: readonly string[];
77
+ }
78
+
79
+ export interface LocalModelRecipeFit {
80
+ readonly score: number;
81
+ readonly level: 'weak' | 'usable' | 'good' | 'strong';
82
+ readonly reasons: readonly string[];
83
+ }
84
+
85
+ export interface ModelReadinessDimension {
86
+ readonly id: 'latency' | 'context-window' | 'tool-support' | 'vision' | 'cost' | 'privacy';
87
+ readonly label: string;
88
+ readonly score: number;
89
+ readonly weight: number;
90
+ readonly summary: string;
91
+ }
92
+
93
+ export interface ModelProviderHealthSignal {
94
+ readonly status: 'not-reachable-in-command-context' | 'read-model-empty' | 'read-model-error' | 'record-found';
95
+ readonly providerId: string;
96
+ readonly modelRouteId?: string;
97
+ readonly sourceRecordId?: string;
98
+ readonly sdkContract: {
99
+ readonly providerHealthTypes: 'available';
100
+ readonly importSurface: string;
101
+ readonly note: string;
102
+ };
103
+ readonly daemonPublication: {
104
+ readonly status: 'not-published' | 'published-read-model';
105
+ readonly requiredPath: string;
106
+ readonly evidence: string;
107
+ };
108
+ readonly agentConsumption: {
109
+ readonly status: 'waiting-for-published-feed' | 'consumed';
110
+ readonly readModelPath: string | null;
111
+ readonly evidence: string;
112
+ };
113
+ readonly healthStatus?: string;
114
+ readonly isConfigured?: boolean;
115
+ readonly isActive?: boolean;
116
+ readonly avgLatencyMs?: number;
117
+ readonly minLatencyMs?: number;
118
+ readonly maxLatencyMs?: number;
119
+ readonly lastSuccessAt?: string | null;
120
+ readonly lastErrorAt?: string | null;
121
+ readonly lastErrorMessage?: string;
122
+ readonly errorRate?: number;
123
+ readonly consecutiveErrors?: number;
124
+ readonly lastCheckedAt?: string | null;
125
+ readonly rateLimitResetAt?: string | null;
126
+ readonly rateLimitRemaining?: number;
127
+ readonly rateLimitLimit?: number;
128
+ readonly missingSignals: readonly string[];
129
+ readonly policy: string;
130
+ }
131
+
132
+ export interface ModelReadinessScore {
133
+ readonly score: number;
134
+ readonly level: 'risky' | 'usable' | 'good' | 'excellent';
135
+ readonly confidence: 'estimated' | 'metadata-backed' | 'provider-health-backed' | 'measured';
136
+ readonly dimensions: readonly ModelReadinessDimension[];
137
+ readonly missingSignals: readonly string[];
138
+ readonly providerHealth?: ModelProviderHealthSignal;
139
+ readonly nextStep: string;
140
+ }
141
+
142
+ export interface ModelRouteReadinessScore extends ModelReadinessScore {
143
+ readonly providerHealth: ModelProviderHealthSignal;
144
+ }
145
+
146
+ export interface LocalModelBenchmarkPlan {
147
+ readonly status: 'plan-ready';
148
+ readonly prompt: string;
149
+ readonly measurements: readonly string[];
150
+ readonly workspaceActionRoute: string;
151
+ readonly compareRoute: string;
152
+ readonly refreshRoute: string;
153
+ readonly notes: readonly string[];
154
+ }
155
+
156
+ export interface LocalModelBenchmarkWinner {
157
+ readonly judgmentArtifactId: string;
158
+ readonly sourceArtifactId: string | null;
159
+ readonly registryKey: string;
160
+ readonly stack: string | null;
161
+ readonly promptPreview: string;
162
+ readonly reviewRoute: string;
163
+ readonly exportRoute: string;
164
+ readonly applyRoute: string;
165
+ }
166
+
167
+ export interface LocalModelBenchmarkRouteLatency {
168
+ readonly registryKey: string;
169
+ readonly providerId: string;
170
+ readonly modelId: string;
171
+ readonly displayName: string;
172
+ readonly blindId: string;
173
+ readonly latencyMs: number;
174
+ readonly status: string;
175
+ readonly artifactId: string;
176
+ readonly comparisonId: string | null;
177
+ readonly createdAt: string | null;
178
+ readonly reviewRoute: string;
179
+ }
180
+
181
+ export interface LocalModelBenchmarkEvidence {
182
+ readonly status: 'unavailable' | 'unmeasured' | 'comparison-saved' | 'reviewed-winner';
183
+ readonly comparisonCount: number;
184
+ readonly completedCandidateCount: number;
185
+ readonly revealedJudgmentCount: number;
186
+ readonly hiddenJudgmentCount: number;
187
+ readonly winnerStacks: readonly string[];
188
+ readonly winnerModels: readonly LocalModelBenchmarkWinner[];
189
+ readonly routeLatencies: readonly LocalModelBenchmarkRouteLatency[];
190
+ readonly summary: string;
191
+ readonly confidence: 'estimated' | 'measured';
192
+ }
193
+
194
+ export type LocalModelEndpointSource = 'provider-registry' | 'model-registry' | 'environment';
195
+
196
+ export interface LocalModelServerEndpoint {
197
+ readonly kind: 'local-server-endpoint';
198
+ readonly id: string;
199
+ readonly providerId: string | null;
200
+ readonly stack: string | null;
201
+ readonly baseUrl: string;
202
+ readonly modelsUrl: string;
203
+ readonly diagnosticStatus: 'registered-route-needs-smoke' | 'needs-provider-after-smoke';
204
+ readonly inspectRoute: string;
205
+ readonly sources: readonly LocalModelEndpointSource[];
206
+ readonly sourceDetails: readonly string[];
207
+ readonly modelRoutes: readonly string[];
208
+ readonly smokeCommand: string;
209
+ readonly smokeRoute: string;
210
+ readonly refreshRoute: string;
211
+ readonly addProviderRoute: string | null;
212
+ readonly notes: readonly string[];
213
+ readonly servingDiagnostics?: LocalModelServerServingDiagnostics;
214
+ readonly diagnostics?: {
215
+ readonly liveProbe: 'not-run';
216
+ readonly successCriteria: readonly string[];
217
+ readonly failureTriage: readonly string[];
218
+ readonly afterSmoke: readonly string[];
219
+ readonly policy: string;
220
+ };
221
+ }
222
+
223
+ export interface LocalModelServerServingDiagnostics {
224
+ readonly status: 'ready' | 'attention' | 'blocked' | 'unknown';
225
+ readonly source: string;
226
+ readonly summary: string;
227
+ readonly schemaStatus?: 'certified' | 'legacy';
228
+ readonly schemaVersion?: string;
229
+ readonly provenance?: readonly string[];
230
+ readonly publicationGuarantee?: string;
231
+ readonly publisher?: string;
232
+ readonly serverVersion?: string;
233
+ readonly loadedModelCount?: number;
234
+ readonly loadedModels: readonly string[];
235
+ readonly contextWindowTokens?: number;
236
+ readonly toolSupport?: boolean;
237
+ readonly resourcePressure: 'low' | 'moderate' | 'high' | 'unknown';
238
+ readonly resourceSummary?: string;
239
+ readonly lastCheckedAt?: string | null;
240
+ readonly startReceiptId?: string;
241
+ readonly repairReceiptId?: string;
242
+ readonly receiptStatus?: string;
243
+ readonly startRoute?: string;
244
+ readonly repairRoute?: string;
245
+ readonly inspectRoute: string;
246
+ readonly missingSignals: readonly string[];
247
+ readonly policy: string;
248
+ }
249
+
250
+ export interface LocalModelServerDiagnosticsPublication {
251
+ readonly status: 'not-published' | 'published-read-model' | 'read-model-empty' | 'read-model-error';
252
+ readonly requiredPaths: readonly string[];
253
+ readonly sourcePaths: readonly string[];
254
+ readonly recordCount: number;
255
+ readonly matchedEndpointCount: number;
256
+ readonly missingSignals: readonly string[];
257
+ readonly policy: string;
258
+ }
259
+
260
+ export interface LocalModelServerDefaultEndpoint {
261
+ readonly id: string;
262
+ readonly label: string;
263
+ readonly stack: string;
264
+ readonly baseUrl: string;
265
+ readonly modelsUrl: string;
266
+ readonly smokeCommand: string;
267
+ readonly addProviderRoute: string;
268
+ readonly startHint: string;
269
+ }
270
+
271
+ export interface LocalModelServerHealthMap {
272
+ readonly status: 'candidate-endpoints' | 'no-local-endpoints';
273
+ readonly liveProbe: 'not-run';
274
+ readonly endpointCount: number;
275
+ readonly returnedEndpoints: number;
276
+ readonly endpoints: readonly LocalModelServerEndpoint[];
277
+ readonly suggestedDefaults: readonly LocalModelServerDefaultEndpoint[];
278
+ readonly daemonDiagnostics: LocalModelServerDiagnosticsPublication;
279
+ readonly nextActions: readonly string[];
280
+ readonly policy: string;
281
+ }
282
+
283
+ export interface LocalModelSmokeTarget {
284
+ readonly kind: 'local-server-endpoint' | 'suggested-local-server';
285
+ readonly id: string;
286
+ readonly label: string;
287
+ readonly providerId: string | null;
288
+ readonly stack: string | null;
289
+ readonly baseUrl: string;
290
+ readonly modelsUrl: string;
291
+ readonly smokeCommand: string;
292
+ readonly smokeRoute: string;
293
+ readonly refreshRoute: string;
294
+ readonly addProviderRoute: string | null;
295
+ readonly source: string;
296
+ readonly notes: readonly string[];
297
+ }
298
+
299
+ export interface MutableLocalModelServerEndpoint {
300
+ providerId: string | null;
301
+ stack: string | null;
302
+ readonly baseUrl: string;
303
+ readonly sources: Set<LocalModelEndpointSource>;
304
+ readonly sourceDetails: Set<string>;
305
+ readonly modelRoutes: Set<string>;
306
+ readonly notes: Set<string>;
307
+ }
308
+
309
+ export interface LocalModelSetupPlan {
310
+ readonly status: 'detected' | 'ready-to-try' | 'needs-hardware-review';
311
+ readonly priority: number;
312
+ readonly downloadGuidance: readonly string[];
313
+ readonly providerRoutes: readonly string[];
314
+ readonly benchmarkPlan: LocalModelBenchmarkPlan;
315
+ readonly confirmationBoundary: string;
316
+ }
317
+
318
+ export interface ArtifactListLike {
319
+ readonly list?: (limit?: number) => readonly ArtifactDescriptor[];
320
+ }
321
+
322
+ export interface ProviderApiLike {
323
+ readonly getFavorites: () => Promise<unknown>;
324
+ readonly getCurrentModel: () => Promise<unknown>;
325
+ readonly listModels: (options?: { readonly selectableOnly?: boolean }) => Promise<readonly unknown[]>;
326
+ readonly listProviderIds: () => readonly string[];
327
+ }
@@ -0,0 +1,30 @@
1
+ export function readString(value: unknown): string {
2
+ return typeof value === 'string' ? value.trim() : '';
3
+ }
4
+
5
+ export function readLimit(value: unknown, fallback: number): number {
6
+ const parsed = typeof value === 'string' && value.trim() ? Number(value) : value;
7
+ if (typeof parsed !== 'number' || !Number.isFinite(parsed)) return fallback;
8
+ return Math.max(1, Math.min(500, Math.trunc(parsed)));
9
+ }
10
+
11
+ export function readRecord(value: unknown): Record<string, unknown> {
12
+ return value && typeof value === 'object' ? value as Record<string, unknown> : {};
13
+ }
14
+
15
+ export function readFiniteNumber(value: unknown): number | undefined {
16
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
17
+ }
18
+
19
+ export function readBoolean(value: unknown): boolean | undefined {
20
+ return typeof value === 'boolean' ? value : undefined;
21
+ }
22
+
23
+ export function readStringArray(value: unknown): readonly string[] {
24
+ return Array.isArray(value) ? value.map((entry) => readString(entry)).filter(Boolean) : [];
25
+ }
26
+
27
+ export function safeIso(value: number | null | undefined): string | null {
28
+ if (typeof value !== 'number' || !Number.isFinite(value)) return null;
29
+ return new Date(value).toISOString();
30
+ }