@morscherlab/mint-sdk 1.0.63 → 1.1.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -6
- package/dist/EmptyState-DgBRoYAy.js +647 -0
- package/dist/EmptyState-DgBRoYAy.js.map +1 -0
- package/dist/{ExperimentPopover-BbPkIFsI.js → ExperimentPopover-BFw3QX8L.js} +10 -9
- package/dist/{ExperimentPopover-BbPkIFsI.js.map → ExperimentPopover-BFw3QX8L.js.map} +1 -1
- package/dist/{ExperimentSelectorModal-DZeSd-yr.js → ExperimentSelectorModal-BBWXC7KW.js} +12 -216
- package/dist/ExperimentSelectorModal-BBWXC7KW.js.map +1 -0
- package/dist/{SettingsModal-CJgLadsN.js → SettingsModal-Dpg-X1OM.js} +12 -9
- package/dist/{SettingsModal-CJgLadsN.js.map → SettingsModal-Dpg-X1OM.js.map} +1 -1
- package/dist/__tests__/components/BaseToggle.test.d.ts +1 -0
- package/dist/__tests__/components/GeneratedPathInput.test.d.ts +1 -0
- package/dist/__tests__/components/GeneratedPlotlyResult.test.d.ts +1 -0
- package/dist/__tests__/components/GeneratedPluginView.test.d.ts +1 -0
- package/dist/__tests__/components/GeneratedResultRenderer.test.d.ts +1 -0
- package/dist/__tests__/components/InstrumentAlertLog.test.d.ts +1 -0
- package/dist/__tests__/components/SectionCard.test.d.ts +1 -0
- package/dist/__tests__/composables/useGeneratedAnalysis.test.d.ts +1 -0
- package/dist/__tests__/generatedUi.test.d.ts +1 -0
- package/dist/__tests__/types/GeneratedJsonSchema.test.d.ts +1 -0
- package/dist/{analysisArtifactTypes-Cu40dzSG.js → analysisArtifactTypes-ejqR8MX3.js} +1 -1
- package/dist/{analysisArtifactTypes-Cu40dzSG.js.map → analysisArtifactTypes-ejqR8MX3.js.map} +1 -1
- package/dist/{auth-DZAwEeis.js → auth-B87xM--s.js} +1 -1
- package/dist/{auth-DZAwEeis.js.map → auth-B87xM--s.js.map} +1 -1
- package/dist/chunk-BoAXSpZd.js +33 -0
- package/dist/components/AppSidebar.vue.d.ts +1 -1
- package/dist/components/AutoGroupModal.vue.d.ts +2 -2
- package/dist/components/BaseSelect.vue.d.ts +1 -1
- package/dist/components/BaseToggle.vue.d.ts +2 -0
- package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +2 -2
- package/dist/components/CollapsibleCard.vue.d.ts +1 -1
- package/dist/components/ComponentBindingRenderer.vue.d.ts +1 -1
- package/dist/components/ConfirmDialog.vue.d.ts +1 -1
- package/dist/components/ExperimentDataViewer.vue.d.ts +1 -1
- package/dist/components/ExperimentTimeline.vue.d.ts +1 -1
- package/dist/components/FileUploader.vue.d.ts +4 -2
- package/dist/components/FitPanel.vue.d.ts +2 -2
- package/dist/components/FormActions.vue.d.ts +1 -1
- package/dist/components/FormBuilder.vue.d.ts +1 -1
- package/dist/components/GeneratedPathInput.vue.d.ts +12 -0
- package/dist/components/GeneratedPlotlyResult.vue.d.ts +11 -0
- package/dist/components/GeneratedPluginView.vue.d.ts +10 -0
- package/dist/components/GeneratedResultRenderer.vue.d.ts +6 -0
- package/dist/components/JobsStatusTray.vue.d.ts +5 -1
- package/dist/components/LcmsSequenceTable.vue.d.ts +1 -1
- package/dist/components/PluginWorkspaceView.props.d.ts +1 -1
- package/dist/components/SampleLegend.vue.d.ts +1 -1
- package/dist/components/SampleSelector.vue.d.ts +2 -2
- package/dist/components/SectionCard.vue.d.ts +47 -0
- package/dist/components/SettingsModal.vue.d.ts +1 -1
- package/dist/components/SmartGroupFieldRecipe.vue.d.ts +2 -2
- package/dist/components/index.d.ts +5 -0
- package/dist/components/index.js +8 -9
- package/dist/components/internal/PlateMapEditorToolbarInternal.vue.d.ts +2 -2
- package/dist/{components-DdzHh3a_.js → components-Ci_BTx00.js} +2322 -2292
- package/dist/components-Ci_BTx00.js.map +1 -0
- package/dist/composables/index.d.ts +3 -2
- package/dist/composables/index.js +10 -11
- package/dist/composables/useGeneratedAnalysis.d.ts +62 -0
- package/dist/composables/useJobsStatusTray.d.ts +48 -4
- package/dist/composables/usePlatformContext.d.ts +3 -0
- package/dist/composables/usePluginClient.d.ts +17 -8
- package/dist/{composables-BUUphBqg.js → composables-C0VEJ73O.js} +154 -38
- package/dist/composables-C0VEJ73O.js.map +1 -0
- package/dist/experiment-utils-CxkruZ3G.js +392 -0
- package/dist/experiment-utils-CxkruZ3G.js.map +1 -0
- package/dist/generated/schema.d.ts +7 -0
- package/dist/generated-ui/main.d.ts +0 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +15 -18
- package/dist/index.js.map +1 -1
- package/dist/install.js +7 -8
- package/dist/install.js.map +1 -1
- package/dist/plotly.min-BR53hja4.js +180634 -0
- package/dist/plotly.min-BR53hja4.js.map +1 -0
- package/dist/stores/auth.d.ts +2 -2
- package/dist/stores/index.js +1 -1
- package/dist/styles.css +8657 -8217
- package/dist/tailwind.preset.d.ts +5 -0
- package/dist/tailwind.preset.js +7 -2
- package/dist/tailwind.preset.js.map +1 -1
- package/dist/templates/index.js +4 -3
- package/dist/templates/packs.d.ts +0 -1
- package/dist/{templates-CNbPQNID.js → templates-Cdj93S9C.js} +2 -4
- package/dist/templates-Cdj93S9C.js.map +1 -0
- package/dist/types/components.d.ts +2 -0
- package/dist/types/form-builder.d.ts +1 -1
- package/dist/types/generated-ui.d.ts +183 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.js +1 -1
- package/dist/types/instrument.d.ts +1 -0
- package/dist/types/jobs.d.ts +7 -1
- package/dist/types/platform.d.ts +2 -0
- package/dist/{useControlSchema-BZNdalmL.js → useControlSchema-B_qgU4rW.js} +1882 -172
- package/dist/useControlSchema-B_qgU4rW.js.map +1 -0
- package/dist/{useDropdownState-Bb-c_PeE.js → useDropdownState-gVaMXtwW.js} +2 -2
- package/dist/{useDropdownState-Bb-c_PeE.js.map → useDropdownState-gVaMXtwW.js.map} +1 -1
- package/dist/{useExperimentSelector-DRbj6vse.js → useExperimentSelector-BuQZRgMt.js} +4 -255
- package/dist/useExperimentSelector-BuQZRgMt.js.map +1 -0
- package/dist/{useFormBuilder-DKekvXRs.js → useFormBuilder-D1G5J5Z5.js} +2 -2
- package/dist/{useFormBuilder-DKekvXRs.js.map → useFormBuilder-D1G5J5Z5.js.map} +1 -1
- package/dist/{useAnalysisArtifacts-C3l0a0vu.js → useProtocolTemplates-DeaOmMaw.js} +307 -475
- package/dist/useProtocolTemplates-DeaOmMaw.js.map +1 -0
- package/package.json +7 -3
- package/src/__tests__/components/BaseSelect.test.ts +52 -0
- package/src/__tests__/components/BaseToggle.test.ts +40 -0
- package/src/__tests__/components/GeneratedPathInput.test.ts +132 -0
- package/src/__tests__/components/GeneratedPlotlyResult.test.ts +117 -0
- package/src/__tests__/components/GeneratedPluginView.test.ts +240 -0
- package/src/__tests__/components/GeneratedResultRenderer.test.ts +93 -0
- package/src/__tests__/components/InstrumentAlertLog.test.ts +59 -0
- package/src/__tests__/components/PluginWorkspaceView.test.ts +68 -14
- package/src/__tests__/components/SectionCard.test.ts +181 -0
- package/src/__tests__/composables/formBuilderRegistry.test.ts +5 -1
- package/src/__tests__/composables/useApi.test.ts +8 -0
- package/src/__tests__/composables/useGeneratedAnalysis.test.ts +1742 -0
- package/src/__tests__/composables/useJobsStatusTray.test.ts +179 -1
- package/src/__tests__/composables/usePlatformContext.test.ts +28 -0
- package/src/__tests__/composables/usePluginClient.test.ts +402 -21
- package/src/__tests__/composables/usePluginConfig.test.ts +323 -7
- package/src/__tests__/docs/extractDocsTemplates.test.ts +0 -1
- package/src/__tests__/generatedUi.test.ts +119 -0
- package/src/__tests__/templates/templates.test.ts +1 -1
- package/src/__tests__/types/GeneratedJsonSchema.test.ts +62 -0
- package/src/components/BaseSelect.vue +16 -2
- package/src/components/BaseToggle.vue +3 -1
- package/src/components/FileUploader.vue +49 -11
- package/src/components/GeneratedPathInput.vue +218 -0
- package/src/components/GeneratedPlotlyResult.vue +87 -0
- package/src/components/GeneratedPluginView.vue +279 -0
- package/src/components/GeneratedResultRenderer.vue +137 -0
- package/src/components/InstrumentAlertLog.vue +2 -2
- package/src/components/JobsStatusTray.vue +14 -8
- package/src/components/PluginWorkspaceView.props.ts +1 -1
- package/src/components/PluginWorkspaceView.vue +1 -5
- package/src/components/SectionCard.story.vue +163 -0
- package/src/components/SectionCard.vue +98 -0
- package/src/components/index.ts +5 -0
- package/src/composables/formBuilderRegistry.ts +2 -0
- package/src/composables/index.ts +19 -0
- package/src/composables/useApi.ts +1 -0
- package/src/composables/useGeneratedAnalysis.ts +1270 -0
- package/src/composables/useJobsStatusTray.ts +234 -45
- package/src/composables/usePluginClient.ts +164 -30
- package/src/composables/usePluginConfig.ts +156 -20
- package/src/generated/schema.ts +130 -0
- package/src/generated-ui/main.ts +21 -0
- package/src/index.ts +3 -0
- package/src/jobs.ts +5 -0
- package/src/plotly-dist.d.ts +3 -0
- package/src/styles/components/section-card.css +161 -0
- package/src/styles/index.css +1 -0
- package/src/styles/variables.css +25 -0
- package/src/tailwind.preset.ts +5 -0
- package/src/templates/packs.ts +0 -3
- package/src/types/components.ts +12 -0
- package/src/types/form-builder.ts +1 -0
- package/src/types/generated-ui.ts +189 -0
- package/src/types/index.ts +4 -0
- package/src/types/instrument.ts +1 -0
- package/src/types/jobs.ts +10 -1
- package/src/types/platform.ts +2 -0
- package/dist/BaseButton-Dgqrze41.js +0 -74
- package/dist/BaseButton-Dgqrze41.js.map +0 -1
- package/dist/BaseModal-B9UA8Y_I.js +0 -165
- package/dist/BaseModal-B9UA8Y_I.js.map +0 -1
- package/dist/BaseSelect-ekgr9fDo.js +0 -179
- package/dist/BaseSelect-ekgr9fDo.js.map +0 -1
- package/dist/ExperimentPopover-Ryusjrhv.js +0 -4
- package/dist/ExperimentSelectorModal-Cg4-LXBD.js +0 -5
- package/dist/ExperimentSelectorModal-DZeSd-yr.js.map +0 -1
- package/dist/SettingsModal-Bl_9w2Y3.js +0 -5
- package/dist/components-DdzHh3a_.js.map +0 -1
- package/dist/composables-BUUphBqg.js.map +0 -1
- package/dist/experiment-utils-Bfa7CwPU.js +0 -108
- package/dist/experiment-utils-Bfa7CwPU.js.map +0 -1
- package/dist/templates-CNbPQNID.js.map +0 -1
- package/dist/useAnalysisArtifacts-C3l0a0vu.js.map +0 -1
- package/dist/useControlSchema-BZNdalmL.js.map +0 -1
- package/dist/useEventListener-CfVkP9Xz.js +0 -57
- package/dist/useEventListener-CfVkP9Xz.js.map +0 -1
- package/dist/useExperimentSelector-DRbj6vse.js.map +0 -1
package/README.md
CHANGED
|
@@ -105,16 +105,31 @@ const result = await pluginClient.analyze(
|
|
|
105
105
|
)
|
|
106
106
|
```
|
|
107
107
|
|
|
108
|
-
Generated files also expose typed plugin settings when the backend declares
|
|
109
|
-
|
|
108
|
+
Generated files also expose typed plugin settings when the backend declares
|
|
109
|
+
`@mint_plugin(config=PluginConfig)`:
|
|
110
110
|
|
|
111
111
|
```typescript
|
|
112
|
-
import {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
112
|
+
import {
|
|
113
|
+
pluginSettingsFormSchema,
|
|
114
|
+
pluginSettingsValueSchema,
|
|
115
|
+
useGeneratedPluginSettings,
|
|
116
|
+
} from './generated/mint-plugin'
|
|
117
|
+
|
|
118
|
+
const pluginSettings = useGeneratedPluginSettings()
|
|
119
|
+
const threshold = pluginSettings.settings.value?.threshold
|
|
120
|
+
const settingsConfig = pluginSettings.settingsConfig
|
|
116
121
|
```
|
|
117
122
|
|
|
123
|
+
Pass `settingsConfig` to `PluginWorkspaceView` or `AppTopBar`.
|
|
124
|
+
`pluginSettingsValueSchema` is the Pydantic JSON Schema used for generated
|
|
125
|
+
TypeScript values. `pluginSettingsFormSchema` is the SDK
|
|
126
|
+
`SettingsModalSchema` used to render controls; they are deliberately separate.
|
|
127
|
+
|
|
128
|
+
When `.env`, process-environment, or startup values override a field, saving
|
|
129
|
+
still updates its backing value. The effective override remains active, while
|
|
130
|
+
the saved value is returned in `stored_settings` and marked `inactive` until
|
|
131
|
+
that higher-priority override is removed.
|
|
132
|
+
|
|
118
133
|
The generated client is built from backend plugin metadata, FastAPI routes, and Pydantic schemas, and uses the frontend SDK to resolve the API prefix automatically.
|
|
119
134
|
FastAPI request or response content declared as standard
|
|
120
135
|
`application/octet-stream` is generated as a raw binary transport: request
|
|
@@ -345,6 +360,104 @@ replacement path.
|
|
|
345
360
|
|
|
346
361
|
## Composables
|
|
347
362
|
|
|
363
|
+
### `usePluginJobs(options)`
|
|
364
|
+
|
|
365
|
+
Generated plugin contracts wrap this composable with definition-specific
|
|
366
|
+
input, job, and output types. For a component dedicated to one generated job,
|
|
367
|
+
bind the definition once with `forDefinition()`:
|
|
368
|
+
|
|
369
|
+
```typescript
|
|
370
|
+
import { usePluginJobs } from './generated/mint-plugin'
|
|
371
|
+
|
|
372
|
+
const jobs = usePluginJobs()
|
|
373
|
+
await jobs.ready()
|
|
374
|
+
|
|
375
|
+
const analyzeJobs = jobs.forDefinition('analyze')
|
|
376
|
+
const job = await analyzeJobs.submit({
|
|
377
|
+
source: new File(['peak\n1'], 'peaks.csv'),
|
|
378
|
+
threshold: 0.1,
|
|
379
|
+
})
|
|
380
|
+
const result = await analyzeJobs.loadResult(job)
|
|
381
|
+
const canonicalJob = await analyzeJobs.getJob(job.job_id)
|
|
382
|
+
const completedJob = await analyzeJobs.waitForJob(canonicalJob, {
|
|
383
|
+
signal: abortController.signal,
|
|
384
|
+
rejectOnFailure: true,
|
|
385
|
+
})
|
|
386
|
+
|
|
387
|
+
await analyzeJobs.cancelJob(canonicalJob)
|
|
388
|
+
|
|
389
|
+
// Releases only finished `analyze` jobs and their retained results.
|
|
390
|
+
await analyzeJobs.clearFinishedJobs()
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
The returned scope exposes a typed `jobs` getter, `isJob()` type guard,
|
|
394
|
+
`submit()`, `getJob()`, `waitForJob()`, `loadResult()`, `cancelJob()`, `deleteJob()`, and
|
|
395
|
+
definition-scoped `clearFinishedJobs()`. It also exposes the generated
|
|
396
|
+
`lifecycle` and `profile` literals for that definition without adding runtime
|
|
397
|
+
requests. Passing a job from another definition
|
|
398
|
+
fails instead of crossing the scope. Capability fields are presentation hints;
|
|
399
|
+
the server remains authoritative when scoped cancel/delete methods are called.
|
|
400
|
+
The root wrapper still supports dynamic definition IDs through `submit()` and
|
|
401
|
+
`jobsFor()`. Its no-argument `clearFinishedJobs()` intentionally clears
|
|
402
|
+
terminal jobs across every definition.
|
|
403
|
+
|
|
404
|
+
The underlying frontend composable accepts an optional definition ID in
|
|
405
|
+
`clearFinishedJobs(definitionId)`; generated clients expose the scoped method
|
|
406
|
+
so static definition IDs retain their generated input, job, and output types.
|
|
407
|
+
`getJob()` fetches one fresh canonical job without refreshing the list.
|
|
408
|
+
`waitForJob()` settles from the same SSE/poll-backed canonical source and
|
|
409
|
+
cleans up on abort, deletion, or disposal, so callers do not need a second
|
|
410
|
+
event stream or Promise registry. A call made while the runtime is paused
|
|
411
|
+
rejects immediately. Waiting on a known active job tolerates a transient direct
|
|
412
|
+
lookup failure and continues through SSE/poll updates; pausing an existing wait
|
|
413
|
+
suspends those updates until `resume()`.
|
|
414
|
+
`cancelJob()` updates active work, while `deleteJob()` releases one terminal
|
|
415
|
+
job and its retained result. Background work can be `pause()`d and `resume()`d,
|
|
416
|
+
while `dispose()` is idempotent and also runs automatically with the owning Vue
|
|
417
|
+
effect scope.
|
|
418
|
+
|
|
419
|
+
Both ordinary `uploadPath({ ..., signal })` and a staged scope's
|
|
420
|
+
`uploadPart(job, { ..., signal })` forward the supplied `AbortSignal` to the
|
|
421
|
+
authenticated multipart request. Abort stops the client-side transfer, but the
|
|
422
|
+
caller should refresh job/staging state before retrying because the server may
|
|
423
|
+
already have committed the upload.
|
|
424
|
+
Automatic submission binds ordinary Path uploads to its job definition. When
|
|
425
|
+
uploading manually for an administrator-protected definition, call
|
|
426
|
+
`uploadPath(input, definitionId)` so the server can authorize and bind the
|
|
427
|
+
upload before reading its body.
|
|
428
|
+
|
|
429
|
+
`cancelJob()` and `deleteJob()` accept either a canonical job object or its ID.
|
|
430
|
+
|
|
431
|
+
Pass the runtime's canonical source directly to standard job UI. The job center
|
|
432
|
+
derives its groups from the same jobs ref and does not mirror it with a watcher:
|
|
433
|
+
|
|
434
|
+
```vue
|
|
435
|
+
<script setup lang="ts">
|
|
436
|
+
import { JobsStatusTray } from '@morscherlab/mint-sdk'
|
|
437
|
+
import { usePluginJobs } from './generated/mint-plugin'
|
|
438
|
+
|
|
439
|
+
const jobs = usePluginJobs()
|
|
440
|
+
</script>
|
|
441
|
+
|
|
442
|
+
<template>
|
|
443
|
+
<JobsStatusTray :source="jobs" />
|
|
444
|
+
</template>
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
The older `jobs` plus `adapter` tray inputs remain available for compatibility.
|
|
448
|
+
New integrations should pass the runtime itself so polling, SSE updates, and
|
|
449
|
+
job actions continue to have exactly one state owner.
|
|
450
|
+
|
|
451
|
+
When an incremental migration temporarily has more than one owner, use
|
|
452
|
+
`combinePluginJobSources([sdkJobs, legacyJobs])`. It preserves each source's
|
|
453
|
+
live jobs getter, fans out refresh/clear operations, routes per-job actions to
|
|
454
|
+
the owning source, and rejects duplicate IDs instead of guessing.
|
|
455
|
+
|
|
456
|
+
Job state exposes `definition_id`, `result_status`, and `result_expires_at`.
|
|
457
|
+
Managed file results carry a short-lived, result-scoped `download_url` instead
|
|
458
|
+
of embedded base64 data or the user's bearer token, so regular browser
|
|
459
|
+
downloads work through an integrated plugin proxy.
|
|
460
|
+
|
|
348
461
|
### `useApi(options?)`
|
|
349
462
|
Generic API client with auth interceptor.
|
|
350
463
|
|