@melite/harness-provisioner 0.2.0-alpha → 0.2.2-alpha
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 +14 -17
- package/bin/infer-provision.mjs +15 -40
- package/cordis.patch.yml +13 -9
- package/package.json +26 -14
package/README.md
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: The vanilla-DSH provisioner — mounts the Melite estate bundle and renders ready-to-boot profiles into any DSH_HOME.
|
|
3
|
-
kind: package-bundle
|
|
4
|
-
---
|
|
5
|
-
|
|
6
1
|
# @melite/harness-provisioner
|
|
7
2
|
|
|
8
3
|
The provisioner mounts the Melite estate into a vanilla DSH installation and
|
|
@@ -31,19 +26,21 @@ Declared exports: `.` (the workspace-linked bundle row) and `./package.json`.
|
|
|
31
26
|
```sh
|
|
32
27
|
node packages/harness/provisioner/bin/infer-provision.mjs all
|
|
33
28
|
node packages/harness/provisioner/bin/infer-provision.mjs profile melite-test
|
|
34
|
-
node packages/harness/provisioner/bin/infer-provision.mjs profile
|
|
29
|
+
node packages/harness/provisioner/bin/infer-provision.mjs profile estate --dsh-home /tmp/melite-dsh
|
|
35
30
|
```
|
|
36
31
|
|
|
37
|
-
`all` renders `
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
`all` renders `melite-test` and `estate`, then runs pnpm in each rendered
|
|
33
|
+
profile. The output is machine-local state; the source of truth is this
|
|
34
|
+
package and the workspace.
|
|
40
35
|
|
|
41
36
|
## Interfaces
|
|
42
37
|
|
|
43
|
-
- `
|
|
44
|
-
- `
|
|
45
|
-
|
|
46
|
-
|
|
38
|
+
- `melite-test` mounts the web app and the browser card UI.
|
|
39
|
+
- `estate` mounts the SDK app as a job-server lane.
|
|
40
|
+
- Headless one-shot runs are DSH's own surface: `dsh headless "task brief"`
|
|
41
|
+
rides DSH's shipped `headless` profile. Melite renders no parallel headless
|
|
42
|
+
mount; the run doors (`melite_flow` / `run_status`) seat from the home's
|
|
43
|
+
persisted `/melite-runs` record in every profile.
|
|
47
44
|
|
|
48
45
|
The tool transport is in-process through the mounted estate row. Do not add a
|
|
49
46
|
`MELITE_GATEWAY` setting or a second HTTP service.
|
|
@@ -61,7 +58,7 @@ profile is not a substitute for reading that reference.
|
|
|
61
58
|
## Verification
|
|
62
59
|
|
|
63
60
|
```sh
|
|
64
|
-
pnpm --dir packages/harness/provisioner exec infer-provision profile
|
|
61
|
+
pnpm --dir packages/harness/provisioner exec infer-provision profile estate --dsh-home /tmp/melite-dsh
|
|
65
62
|
pnpm run test
|
|
66
63
|
pnpm run lint
|
|
67
64
|
```
|
|
@@ -92,6 +89,6 @@ Independent — no conversation state.
|
|
|
92
89
|
|
|
93
90
|
- **Rendered profiles are machine-local state** — they are not a source of
|
|
94
91
|
truth; re-render after manifest or workspace changes.
|
|
95
|
-
- **
|
|
96
|
-
|
|
97
|
-
|
|
92
|
+
- **There is no melite headless profile** — HEADLESS IS DSH'S
|
|
93
|
+
(`dsh headless "task"`); `profile headless` refuses loud, and run-door
|
|
94
|
+
seating follows the home's `/melite-runs` record, not a render flag.
|
package/bin/infer-provision.mjs
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* The bundle patch (cordis.patch.yml) covers the ROWS; this bin covers
|
|
6
6
|
* the PROFILES: renders ready-to-boot profile dirs (melite-test /
|
|
7
|
-
*
|
|
7
|
+
* estate) and installs their link deps. Every render
|
|
8
8
|
* stamps render-provenance.json (F5: who/what/when/flags) and holds
|
|
9
9
|
* the profile's render lock across render+install (F6).
|
|
10
10
|
* Self-locating — every path derives from this file's own location
|
|
@@ -32,8 +32,9 @@
|
|
|
32
32
|
* brain — plus any operator rows spliced verbatim by --profile-rows
|
|
33
33
|
* (llm provider rows ride the profile layer the same way the web
|
|
34
34
|
* profile's own patch carries them; the file is never re-serialized).
|
|
35
|
-
* The template pins: our bundle + the dsh web base for 'melite-test'
|
|
36
|
-
*
|
|
35
|
+
* The template pins: our bundle + the dsh web base for 'melite-test'.
|
|
36
|
+
* There is no melite headless profile: HEADLESS IS DSH'S (`dsh headless`,
|
|
37
|
+
* its own shipped `headless` profile) — melite renders no parallel mount.
|
|
37
38
|
*/
|
|
38
39
|
|
|
39
40
|
import { execSync } from 'node:child_process'
|
|
@@ -208,23 +209,12 @@ const PROFILE_BASES = {
|
|
|
208
209
|
'@melite/harness-tools', '@melite-plugin/dsh-estate', '@melite/card-base', '@melite/three-client',
|
|
209
210
|
'@melite-plugin/dsh-card-view', '@melite-plugin/dsh-card-deck', '@melite-plugin/dsh-gallery',
|
|
210
211
|
'@melite/video-h3-timeline', '@melite/motion-motion', '@melite/image-input-prep'],
|
|
211
|
-
// headless = the agent server: one-shot task runner + the tools
|
|
212
|
-
// plane (harness-tools self-registers its melite-tools row; the
|
|
213
|
-
// renderer disables the web-plane doors row in this mount).
|
|
214
|
-
// dsh-estate rides here too: a headless task that composes media
|
|
215
|
-
// reaches the same runs/queue/drafts seats through melite_flow —
|
|
216
|
-
// without the bundle the tool answers ABSENCE (the estate-drive
|
|
217
|
-
|
|
218
|
-
// unpinned queue seat refuses loud by design).
|
|
219
|
-
headless: ['@deepseek-ai/dsh-base', '@deepseek-ai/dsh-headless', '@melite/harness-provisioner',
|
|
220
|
-
'@melite/harness-tools', '@melite-plugin/dsh-estate'],
|
|
221
212
|
// estate = the job server: the SDK JSON-RPC base (estate-drive
|
|
222
213
|
|
|
223
214
|
// in-process — no second app, no HTTP). dsh-estate bundles the
|
|
224
215
|
// runs/queue/drafts seats — without it melite_flow answers
|
|
225
216
|
// ABSENCE ("no seat of that family is mounted on this lane"),
|
|
226
217
|
|
|
227
|
-
// tools row's HEADLESS interface by its self-registration id.
|
|
228
218
|
estate: ['@deepseek-ai/dsh-base', '@deepseek-ai/dsh-sdk-app', '@melite/harness-provisioner',
|
|
229
219
|
'@melite/harness-tools', '@melite-plugin/dsh-estate'],
|
|
230
220
|
}
|
|
@@ -275,7 +265,7 @@ function renderProfile(name) { // In-box bundles (@deepseek-ai/*) resolve from
|
|
|
275
265
|
// from a registry - only OUR link goes in dependencies. Mirrors what
|
|
276
266
|
// `dsh plugin` itself initializes (PROFILE_TEMPLATES + reconcile).
|
|
277
267
|
|
|
278
|
-
// old
|
|
268
|
+
// old default-to-first-base fallback turned a typo into a
|
|
279
269
|
// bootable-looking directory with the wrong rows and exit 0.
|
|
280
270
|
if (!(name in PROFILE_BASES)) {
|
|
281
271
|
console.error(`infer-provision: unknown profile '${name}' — known: ${Object.keys(PROFILE_BASES).join(', ')}`)
|
|
@@ -290,7 +280,7 @@ function renderProfile(name) { // In-box bundles (@deepseek-ai/*) resolve from
|
|
|
290
280
|
// deps — every plugin package the bundle rows name must become a
|
|
291
281
|
// DIRECT link: dep here. The provisioner's manifest declares them
|
|
292
282
|
// as workspace:* specs; a link:-only scan dropped them, so the
|
|
293
|
-
//
|
|
283
|
+
// server profile mounted @melite/harness-tools as a
|
|
294
284
|
// bundle row with NO installed package — the tool lane could not
|
|
295
285
|
// load (ledger li-headless-profile-deps). workspace specs resolve
|
|
296
286
|
// by scanning this repository's own pnpm workspace globs
|
|
@@ -384,14 +374,14 @@ function renderProfile(name) { // In-box bundles (@deepseek-ai/*) resolve from
|
|
|
384
374
|
pkg.dsh = { profile: { bundles: [...new Set(bundles)] } }
|
|
385
375
|
writeFileAtomic(join(dst, 'package.json'), JSON.stringify(pkg, null, 2) + String.fromCharCode(10))
|
|
386
376
|
// The cordis.yml USER layer stays EMPTY — the bundle patch owns every
|
|
387
|
-
// melite row (no drift). NON-web mounts (
|
|
377
|
+
// melite row (no drift). NON-web mounts (SDK) get the
|
|
388
378
|
// web-surface rows mechanically DISABLED in the profile patch (by the
|
|
389
379
|
|
|
390
380
|
// exists to activate them. The bundle owns the rows; the renderer
|
|
391
381
|
// owns the per-app mount shape and the seat pins below.
|
|
392
382
|
const webMount = bundles.includes('@deepseek-ai/dsh-web-app')
|
|
393
383
|
// melite-tools-doors is web-profiles-only by its own contract (the
|
|
394
|
-
// ✦ doors need webServer+llm — absent in sdk
|
|
384
|
+
// ✦ doors need webServer+llm — absent in sdk mounts); the
|
|
395
385
|
// renderer disables it with the other web rows in non-web mounts.
|
|
396
386
|
const webRows = ['melite-tools-doors',
|
|
397
387
|
'infer-card-view', 'ray-card-deck', 'infer-gallery']
|
|
@@ -407,9 +397,9 @@ function renderProfile(name) { // In-box bundles (@deepseek-ai/*) resolve from
|
|
|
407
397
|
|
|
408
398
|
// downloads-stream audit): the lane is the long-lived process that
|
|
409
399
|
// owns fetch lifetimes — its durable claim ticker claims requested
|
|
410
|
-
// rows and stamps the claimer heartbeat, so a
|
|
400
|
+
// rows and stamps the claimer heartbeat, so a task press's
|
|
411
401
|
// wanted download survives its own session dying. A non-web mount
|
|
412
|
-
// (
|
|
402
|
+
// (estate job server) is short-lived: a claimer in
|
|
413
403
|
// it would orphan every fetch it died mid-flight, so its presses
|
|
414
404
|
// take their own wire, exactly as before.
|
|
415
405
|
const estateRow = bundles.includes('@melite-plugin/dsh-estate')
|
|
@@ -464,23 +454,7 @@ function renderProfile(name) { // In-box bundles (@deepseek-ai/*) resolve from
|
|
|
464
454
|
+ '# No webServer service in this mount: the four web-surface rows\n'
|
|
465
455
|
+ '# are disabled so activation cannot pend forever.\n'
|
|
466
456
|
+ webRows.map(id => '- id: ' + id + '\n disabled: true\n').join('')
|
|
467
|
-
+ estateRow + operatorRows
|
|
468
|
-
// DELEGATED-OPERATOR MOUNTS (estate | headless): this mount
|
|
469
|
-
// RUNS jobs — the tools row selects the HEADLESS interface
|
|
470
|
-
// (the melite_flow + run_status run doors). Pinned in the
|
|
471
|
-
// render (not ambient env) because the interface is profile
|
|
472
|
-
// state: browser mounts compose, the job server executes.
|
|
473
|
-
// The 'headless' agent server rides the same pin — its base
|
|
474
|
-
// list promises melite_flow ("a headless task that composes
|
|
475
|
-
// media reaches the same runs/queue/drafts seats"), and the
|
|
476
|
-
|
|
477
|
-
// compose-only mount: benches composed and validated, every
|
|
478
|
-
// execution refused at the absent verb. Every other mount
|
|
479
|
-
// keeps the browser default.
|
|
480
|
-
+ (name === 'estate' || name === 'headless'
|
|
481
|
-
? '# HEADLESS interface: the delegated operator runs jobs here.\n'
|
|
482
|
-
+ '- id: melite-tools\n config:\n headless: true\n'
|
|
483
|
-
: ''))
|
|
457
|
+
+ estateRow + operatorRows)
|
|
484
458
|
writeFileAtomic(join(dst, 'cordis.yml'), '# rendered by infer-provision' + '\n' + '[]' + '\n')
|
|
485
459
|
const ws = join(dst, 'pnpm-workspace.yaml')
|
|
486
460
|
if (!existsSync(ws)) writeFileAtomic(ws, 'packages:' + '\n' + ' - node_modules/*' + '\n')
|
|
@@ -559,7 +533,7 @@ switch (cmd) {
|
|
|
559
533
|
// command renders + installs every profile (the gateway health
|
|
560
534
|
// check died with the gateway — there is no second process to
|
|
561
535
|
// probe anymore).
|
|
562
|
-
for (const name of ['melite-test', '
|
|
536
|
+
for (const name of ['melite-test', 'estate']) {
|
|
563
537
|
renderInstall(name)
|
|
564
538
|
}
|
|
565
539
|
log('boot with:')
|
|
@@ -569,13 +543,14 @@ switch (cmd) {
|
|
|
569
543
|
log(' launch — binary pin, version floor, home, and unit. The shapes below')
|
|
570
544
|
log(' are what the door runs UNDER THE HOOD, never a hand-run shortcut:)')
|
|
571
545
|
log(' dsh --profile melite-test # the studio GUI + TEST lane (one process, no :33081)')
|
|
572
|
-
log(' dsh --profile headless "<task>" # one-shot agent with card tools')
|
|
573
546
|
log(' dsh --profile estate # the SDK job server (estate row)')
|
|
547
|
+
log(' one-shot agents ride DSH itself: dsh headless "<task>" (DSH ships the')
|
|
548
|
+
log(' headless profile; melite maintains no parallel mount)')
|
|
574
549
|
break
|
|
575
550
|
}
|
|
576
551
|
case 'profile': {
|
|
577
552
|
renderInstall(PROFILE)
|
|
578
|
-
log('boot with: dsh --profile ' + PROFILE
|
|
553
|
+
log('boot with: dsh --profile ' + PROFILE)
|
|
579
554
|
break
|
|
580
555
|
}
|
|
581
556
|
// the `preset` arm died with installPreset (undefined since the
|
package/cordis.patch.yml
CHANGED
|
@@ -4,13 +4,16 @@
|
|
|
4
4
|
# Installing this bundle into ANY profile (dsh plugin --profile <name>
|
|
5
5
|
# add <repo>/packages/harness/dsh/provisioner) mounts:
|
|
6
6
|
#
|
|
7
|
-
# infer-tools the tool registry,
|
|
8
|
-
#
|
|
9
|
-
# (
|
|
10
|
-
# (
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
7
|
+
# infer-tools the tool registry, ONE interface: BASE =
|
|
8
|
+
# discovery (melite_discover, melite_load), the
|
|
9
|
+
# bench (melite_construct), management
|
|
10
|
+
# (comfy_manage), craft (skill_index,
|
|
11
|
+
# skill_read), audit (ledger_tail). The run
|
|
12
|
+
# doors melite_flow / run_status seat from the
|
|
13
|
+
# home's persisted /melite-runs record — there
|
|
14
|
+
# is no config or env selector (HEADLESS IS
|
|
15
|
+
# DSH'S: `dsh headless "task"` is DSH's own
|
|
16
|
+
# shipped profile).
|
|
14
17
|
# enhance_prompt is AD HOC (MELITE_ADHOC), never base.
|
|
15
18
|
# infer-card-view-* editable action cards rendered in the
|
|
16
19
|
# conversation (host row serves the editor bundle
|
|
@@ -47,8 +50,9 @@
|
|
|
47
50
|
# melite_load → skill_read), never a pre-loaded catalog. The pin
|
|
48
51
|
# silences the HOST layer only: a preset that genuinely wants local
|
|
49
52
|
# skill discovery still mounts its OWN preset-layer row. Without this
|
|
50
|
-
# pin the
|
|
51
|
-
# host row, and
|
|
53
|
+
# pin the agent-server profiles auto-inject (only dsh-web-app disables
|
|
54
|
+
# the host row, and the server profiles do not bundle it). The row
|
|
55
|
+
# below is an
|
|
52
56
|
# OVERRIDE (column-0 `- id:`, no `insert:`): it patches the dsh-base
|
|
53
57
|
# row and mounts nothing.
|
|
54
58
|
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@melite/harness-provisioner",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2-alpha",
|
|
4
4
|
"license": "AGPL-3.0-or-later",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "The vanilla-DSH provisioner — mounts the Melite estate bundle and renders ready-to-boot profiles into any DSH_HOME.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": {
|
|
@@ -21,20 +21,16 @@
|
|
|
21
21
|
"bin": {
|
|
22
22
|
"infer-provision": "./bin/infer-provision.mjs"
|
|
23
23
|
},
|
|
24
|
-
"devDependencies": {
|
|
25
|
-
"@types/node": "^22.20.0",
|
|
26
|
-
"typescript": "^5.9.3"
|
|
27
|
-
},
|
|
28
24
|
"dependencies": {
|
|
29
25
|
"@deepseek-ai/dsh-llm-pi-ai": "0.2.1-rc.2",
|
|
30
|
-
"@melite-plugin/dsh-
|
|
31
|
-
"@melite
|
|
32
|
-
"@melite/
|
|
33
|
-
"@melite
|
|
34
|
-
"@melite/
|
|
35
|
-
"@melite-plugin/dsh-
|
|
36
|
-
"@melite/
|
|
37
|
-
"@melite/
|
|
26
|
+
"@melite-plugin/dsh-card-deck": "0.2.2-alpha",
|
|
27
|
+
"@melite/3d-img-to-mesh": "0.2.2-alpha",
|
|
28
|
+
"@melite-plugin/dsh-estate": "0.2.2-alpha",
|
|
29
|
+
"@melite/harness-tools": "0.2.2-alpha",
|
|
30
|
+
"@melite-plugin/dsh-card-view": "0.2.2-alpha",
|
|
31
|
+
"@melite-plugin/dsh-gallery": "0.2.2-alpha",
|
|
32
|
+
"@melite/video-h3-timeline": "0.2.2-alpha",
|
|
33
|
+
"@melite/motion-motion": "0.2.2-alpha"
|
|
38
34
|
},
|
|
39
35
|
"dsh": {
|
|
40
36
|
"bundle": {
|
|
@@ -44,10 +40,26 @@
|
|
|
44
40
|
"peerDependencies": {
|
|
45
41
|
"@deepseek-ai/dsh": ">=0.2.1-rc.2 <0.3.0"
|
|
46
42
|
},
|
|
43
|
+
"repository": {
|
|
44
|
+
"type": "git",
|
|
45
|
+
"url": "https://github.com/JayDataEngineer/melite.git",
|
|
46
|
+
"directory": "packages/harness/provisioner"
|
|
47
|
+
},
|
|
48
|
+
"keywords": [
|
|
49
|
+
"melite",
|
|
50
|
+
"comfyui",
|
|
51
|
+
"cordis",
|
|
52
|
+
"agent",
|
|
53
|
+
"media-generation",
|
|
54
|
+
"dsh-bundle"
|
|
55
|
+
],
|
|
47
56
|
"scripts": {
|
|
48
57
|
"build": "tsc -p tsconfig.build.json",
|
|
49
58
|
"typecheck": "tsc --noEmit"
|
|
50
59
|
},
|
|
60
|
+
"engines": {
|
|
61
|
+
"node": ">=22.18.0"
|
|
62
|
+
},
|
|
51
63
|
"publishConfig": {
|
|
52
64
|
"access": "public"
|
|
53
65
|
}
|