@foggy-projects/deepseek-harness-plugin 0.4.1-rc.1 → 0.4.2-rc.2

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 CHANGED
@@ -7,7 +7,7 @@ are downloaded only when the user selects **Initialize and start** (or the
7
7
  equivalent component action). Existing installations are not silently changed
8
8
  when the plugin package is upgraded.
9
9
 
10
- The `0.4.1-rc.1` compatibility candidate targets DeepSeek Harness `0.1.5-rc.2`
10
+ The `0.4.2-rc.2` compatibility candidate targets DeepSeek Harness `0.1.7-rc.2`
11
11
  and requires a system Node.js `>=24.0.0`. Foggy's Java Launcher uses a system
12
12
  Java 17+. Foggy manages its own pinned Python 3.12 runtime
13
13
  inside the per-user component directory; it does not require a system Python,
@@ -17,27 +17,32 @@ modify `PATH`, or register Python globally. Advanced users may explicitly set
17
17
  ## Local release-candidate installation
18
18
 
19
19
  ```powershell
20
- dsh plugin --profile web add --workspace-root ./foggy-projects-deepseek-harness-plugin-0.4.1-rc.1.tgz
20
+ dsh plugin --profile web add --workspace-root ./foggy-projects-deepseek-harness-plugin-0.4.2-rc.2.tgz
21
21
  ```
22
22
 
23
23
  Restart `dsh web`, use the browser it opens (or the complete printed URL,
24
24
  including `?token=...`), open Settings → Plugins → Foggy Data Analysis, and
25
25
  initialize the components from there. Do not share the launch-token URL.
26
26
 
27
- For the DSH 0.1.5-rc.2 compatibility pre-release, install the exact candidate
27
+ Install the exact DSH 0.1.7-rc.2 compatibility candidate
28
28
  so the stable `beta` channel is not changed:
29
29
 
30
30
  ```powershell
31
- dsh plugin --profile web add --workspace-root @foggy-projects/deepseek-harness-plugin@0.4.1-rc.1
31
+ dsh plugin --profile web add --workspace-root @foggy-projects/deepseek-harness-plugin@0.4.2-rc.2
32
32
  ```
33
33
 
34
- The published candidate is also available through the dedicated `dsh015` npm
35
- dist-tag:
34
+ The `dsh017` npm dist-tag points to the most recently published DSH 0.1.7
35
+ candidate (`0.4.2-rc.2` at this release). Check the resolved version before
36
+ using this moving tag:
36
37
 
37
38
  ```powershell
38
- dsh plugin --profile web add --workspace-root @foggy-projects/deepseek-harness-plugin@dsh015
39
+ dsh plugin --profile web add --workspace-root @foggy-projects/deepseek-harness-plugin@dsh017
39
40
  ```
40
41
 
42
+ The earlier DSH `0.1.5-rc.2` compatibility candidate remains available as
43
+ `@foggy-projects/deepseek-harness-plugin@dsh015`; neither candidate moves the
44
+ existing `beta` channel.
45
+
41
46
  For the existing stable beta channel, the corresponding one-line install is:
42
47
 
43
48
  ```powershell
@@ -51,12 +56,12 @@ versions. Updates are blocked while Runtime is running so the active Java
51
56
  process and the next-launcher state cannot diverge. Component-specific repair
52
57
  actions remain available under **Advanced repair**.
53
58
 
54
- DeepSeek Harness 0.1.5-rc.2 applies pnpm's minimum-release-age policy to its
55
- profile lockfile. An upgrade performed shortly after publication can therefore
56
- fail while naming either the new plugin or the previously installed Beta. This
57
- is a DSH profile-policy failure, not a damaged Foggy package. Use the exact
58
- profile directory printed in the error and rebuild its lockfile, then rerun the
59
- same `dsh plugin add` command:
59
+ DeepSeek Harness profiles can apply pnpm's minimum-release-age policy to their
60
+ lockfiles. An upgrade performed shortly after publication can therefore fail
61
+ while naming either the new plugin or a previously installed version. This is
62
+ a DSH profile-policy failure, not a damaged Foggy package. Use the exact profile
63
+ directory printed in the error and rebuild its lockfile, then rerun the same
64
+ `dsh plugin add` command:
60
65
 
61
66
  ```powershell
62
67
  Set-Location "<the DSH profile directory printed in the error>"
@@ -87,6 +92,11 @@ The Bundle registers `foggy-deepseek-onboarding` and the downloaded
87
92
  are available in every DSH workspace without copying or symlinking `.agents`.
88
93
  The current session `cwd` remains the workspace boundary for semantic drafts and
89
94
  evidence.
95
+ An existing Harness session keeps its original workspace even if another workspace
96
+ becomes the default. Create a new session in the selected workspace when testing
97
+ model-file isolation; an isolated `DSH_HOME` alone does not change a session's
98
+ `cwd`. The `--workspace-root` option in the plugin install command is a pnpm
99
+ installation option, not a Harness workspace selector.
90
100
 
91
101
  Opaque CLI profiles remain available for users who prefer them and default to
92
102
  the private persistent `<dataRoot>/cli-profiles` directory, but they are not a
@@ -128,7 +138,9 @@ rollback plan.
128
138
 
129
139
  See [`docs/PUBLIC-BETA-READINESS.md`](./docs/PUBLIC-BETA-READINESS.md) for the
130
140
  tested public Beta scope, release gates, and stable-release blockers.
131
- The DSH 0.1.5-rc.2 compatibility candidate is documented in
141
+ The DSH 0.1.7-rc.2 compatibility candidate is documented in
142
+ [`docs/RELEASE-CANDIDATE-0.4.2-DSH-0.1.7-RC.2.md`](./docs/RELEASE-CANDIDATE-0.4.2-DSH-0.1.7-RC.2.md).
143
+ The earlier DSH 0.1.5-rc.2 candidate is documented in
132
144
  [`docs/RELEASE-CANDIDATE-0.4.1-DSH-0.1.5-RC.1.md`](./docs/RELEASE-CANDIDATE-0.4.1-DSH-0.1.5-RC.1.md).
133
145
  Native Windows acceptance instructions are in
134
146
  [`docs/WINDOWS-BETA-ACCEPTANCE.md`](./docs/WINDOWS-BETA-ACCEPTANCE.md); database
@@ -0,0 +1,62 @@
1
+ # Foggy DeepSeek Harness plugin 0.4.2-rc.1
2
+
3
+ This isolated compatibility candidate targets DeepSeek Harness `0.1.7-rc.2`.
4
+ It requires system Node.js `>=24.0.0`. It is deliberately published under a
5
+ dedicated npm dist-tag so the existing `beta`, `rc`, and `dsh015` installation
6
+ channels remain unchanged.
7
+
8
+ ## Compatibility changes
9
+
10
+ - Adapt strict Typert codecs to the `create()` schema factory required by DSH
11
+ `0.1.7`, while retaining the `schema` property used by the earlier `0.1.5`
12
+ loader.
13
+ - Align DeepSeek Harness peer-package ranges and the onboarding manifest with
14
+ `0.1.7-rc.2`.
15
+ - Keep Foggy CLI, Launcher, Skills, Runtime behavior, and the development-only
16
+ product boundary unchanged.
17
+
18
+ ## Installation
19
+
20
+ Use Node.js 24 or newer and a separate Harness profile:
21
+
22
+ ```powershell
23
+ dsh plugin --profile web add --workspace-root @foggy-projects/deepseek-harness-plugin@0.4.2-rc.1
24
+ dsh web
25
+ ```
26
+
27
+ The same candidate is available through the dedicated `dsh017` npm dist-tag.
28
+ Do not use this candidate to replace a stable `beta` installation unless the
29
+ profile is intended to run DSH `0.1.7-rc.2`.
30
+
31
+ ## Compatibility acceptance (2026-09-25)
32
+
33
+ - `npm run check`, all 23 Node tests, and all 29 Python tests passed on Node
34
+ `24.19.0`.
35
+ - Packed and installed this exact candidate into a fresh temporary DSH Web
36
+ profile running `0.1.7-rc.2`. The package manager completed installation;
37
+ DSH emitted no plugin/Typert registration error at startup.
38
+ - The authenticated Web boot graph included the Foggy client bundle. Fetching
39
+ the served bundle returned HTTP 200 and confirmed the `settings.plugins.tab`
40
+ contribution is present.
41
+ - Invoked Foggy `status` and `plan` through DSH's Remote HTTP transport. Both
42
+ returned successful structured results with package version `0.4.2-rc.1`.
43
+ - Created a temporary session and called DSH's native `skills/list` Remote. It
44
+ returned `foggy-deepseek-onboarding` from the installed plugin package and
45
+ `modelInvocable: true`. The host also exposes separately installed user-level
46
+ Foggy skills; the package-provided onboarding Skill remained individually
47
+ discoverable.
48
+ - Used Plugin Manager to disable and re-enable the bundle. Both changes
49
+ reported `application: applied`; while disabled, the Foggy strict Remote
50
+ correctly returned `gateway/definition-unavailable`, and after re-enabling
51
+ `status` succeeded again. The final bundle state is enabled and installed.
52
+ - No Runtime was started, no component update/repair was requested, and no
53
+ database connection or query was made. The status read observed the host's
54
+ existing Foggy component state; it did not change it. Full component
55
+ installation and Runtime behavior remain outside this DSH protocol smoke
56
+ test.
57
+
58
+ ## Upstream references
59
+
60
+ - [DeepSeek Harness v0.1.7-rc.2 release](https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.7-rc.2)
61
+ - [DeepSeek Harness v0.1.7-rc.1 release](https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.7-rc.1)
62
+ - [DeepSeek Harness release history](https://github.com/deepseek-ai/deepseek-harness/releases)
@@ -0,0 +1,50 @@
1
+ # Foggy DeepSeek Harness plugin 0.4.2-rc.2
2
+
3
+ This pre-release targets DeepSeek Harness `0.1.7-rc.2` with system Node.js
4
+ `>=24.0.0` and Java 17+. It stays on the dedicated `dsh017` npm channel;
5
+ the existing `beta`, `rc`, and `dsh015` channels are unchanged.
6
+
7
+ ## Changes since 0.4.2-rc.1
8
+
9
+ - Publish each polled operation state to the settings UI so initialization and
10
+ Runtime startup progress remain visible while the operation runs. Known
11
+ progress phases now use the selected UI language instead of raw English
12
+ backend messages.
13
+ - Use the managed CLI's `wait-ready` response as Doctor's Runtime health check.
14
+ Process inspection remains diagnostic context, so an unavailable Windows
15
+ process query does not incorrectly label a healthy Runtime as stale.
16
+ - Clarify workspace behavior: an existing DSH session retains its original
17
+ `cwd` when the default workspace changes. Create a new session in the chosen
18
+ workspace to isolate new semantic-model files.
19
+
20
+ ## Acceptance
21
+
22
+ - On a fresh Windows component/data root, the settings page visibly showed
23
+ initialization progress during the private Python download (23%, step 2/7).
24
+ CLI `0.1.23`, Launcher `0.1.21`, and analysis/query Skills `0.1.18` installed.
25
+ - The default Runtime port `18166` was occupied by an earlier acceptance
26
+ Runtime. The new profile failed promptly at port preflight and displayed an
27
+ explicit red port-conflict alert. Saving port `18167` in the isolated data
28
+ root and starting the managed Launcher succeeded. Strict Doctor passed all
29
+ eight checks; CLI `wait-ready` and `capabilities` reported a healthy Java
30
+ Runtime at `http://127.0.0.1:18167`.
31
+ - A Harness chat created a separate TM/QM and a bounded 2024 monthly paid
32
+ amount query against the local demo `fact_order` table. Runtime model
33
+ describe, query validate, and query execute agreed with the four rows shown
34
+ in the chat. This remains development/test data, not production deployment.
35
+ - The candidate tarball was installed over the local `0.4.2-rc.1` test profile.
36
+ pnpm's lockfile policy passed; the installed client matched the packed source,
37
+ DSH Web restarted without plugin activation errors, and its authenticated
38
+ page returned HTTP 200. The existing component install state remained intact,
39
+ with Runtime still healthy on port `18167` and strict Doctor again passing
40
+ all eight checks.
41
+
42
+ Install the exact version with:
43
+
44
+ ```powershell
45
+ dsh plugin --profile web add --workspace-root @foggy-projects/deepseek-harness-plugin@0.4.2-rc.2
46
+ ```
47
+
48
+ Publish this pre-release under the `dsh017` dist-tag only, leaving other npm
49
+ channels unchanged. The Linux `experience/linux/prepare.sh` entry is pinned to
50
+ the matching Git tag and becomes usable once that tag is published.
@@ -1,12 +1,12 @@
1
1
  # Native Windows Beta acceptance
2
2
 
3
- This runbook validates DeepSeek Harness `0.1.2-rc.1` with Foggy plugin
4
- `0.4.0-rc.2` on a clean 64-bit Windows 10 or Windows 11 machine. Use a local
3
+ This runbook validates DeepSeek Harness `0.1.7-rc.2` with Foggy plugin
4
+ `0.4.2-rc.2` on a clean 64-bit Windows 10 or Windows 11 machine. Use a local
5
5
  directory that is not synchronized by OneDrive.
6
6
 
7
7
  ## Prerequisites
8
8
 
9
- Install a system Node.js matching `^22.19.0 || >=24.0.0` and a system Java 17+
9
+ Install a system Node.js `>=24.0.0` and a system Java 17+
10
10
  JRE/JDK. Windows must also provide `tar` (included in supported Windows 10/11
11
11
  versions). A system Python is neither required nor used by default.
12
12
 
@@ -27,11 +27,11 @@ and is not registered as a system Python.
27
27
  New-Item -ItemType Directory -Force C:\FoggyAcceptance | Out-Null
28
28
  Set-Location C:\FoggyAcceptance
29
29
 
30
- npx --yes --package=@deepseek-ai/dsh@0.1.2-rc.1 --package=pnpm@11.7.0 `
30
+ npx --yes --package=@deepseek-ai/dsh@0.1.7-rc.2 --package=pnpm@11.7.0 `
31
31
  dsh plugin --profile web add --workspace-root `
32
- "@foggy-projects/deepseek-harness-plugin@beta"
32
+ "@foggy-projects/deepseek-harness-plugin@0.4.2-rc.2"
33
33
 
34
- npx --yes --package=@deepseek-ai/dsh@0.1.2-rc.1 --package=pnpm@11.7.0 dsh web
34
+ npx --yes --package=@deepseek-ai/dsh@0.1.7-rc.2 --package=pnpm@11.7.0 dsh web
35
35
  ```
36
36
 
37
37
  If an immediate upgrade reports
@@ -49,7 +49,13 @@ token has established its local authentication cookie. Treat the launch URL as
49
49
  temporary local access material and do not paste it into chat or diagnostics.
50
50
 
51
51
  Configure an LLM provider, select the `C:\FoggyAcceptance` workspace, then open
52
- **Settings → Plugins → Foggy Data Analysis** and choose **Initialize Foggy**.
52
+ **Settings → Built-in plugins → Foggy Data Analysis** and choose
53
+ **Initialize and start**. The settings page displays the current phase and
54
+ step count while initialization runs. If an existing chat was opened before
55
+ selecting this workspace, create a new chat in the selected workspace: changing
56
+ the default workspace does not change an existing chat's working directory.
57
+ `--workspace-root` in the install command is a pnpm resolution option, not a
58
+ DSH workspace selector.
53
59
 
54
60
  Before starting Runtime, confirm the configured port in **Runtime connection
55
61
  settings**. A fresh profile defaults to `18166`. To use another port, enter an
@@ -62,13 +68,15 @@ Expected component state:
62
68
  - CLI 0.1.23;
63
69
  - Launcher 0.1.21;
64
70
  - analysis/query Skills 0.1.18;
65
- - onboarding Skill 0.4.0-rc.2;
71
+ - onboarding Skill 0.4.2-rc.2;
66
72
  - Java 17+ available;
67
73
  - native DSH Skill registration available.
68
74
 
69
75
  Runtime startup shows its current phase, elapsed time, and the 180-second
70
76
  readiness deadline. Typical startup is 15–30 seconds on the validated WSL2 host
71
77
  and may take up to 60 seconds on Windows with cold JVM or antivirus scanning.
78
+ Initialization downloads a private Python and other managed components and can
79
+ take longer than Runtime startup; follow the live phase/step display.
72
80
  The plugin monitors the Launcher PID and fails promptly when Java exits before
73
81
  readiness. On failure, export diagnostics before retrying; the report includes
74
82
  the startup phase, PID state, evidence directory, Runtime log locations, and
@@ -5,7 +5,7 @@ It has been designed for Ubuntu 22.04/24.04 x86_64 and WSL2.
5
5
 
6
6
  ## Prerequisites
7
7
 
8
- - Node.js `>=24.0.0` (the DSH 0.1.5-rc.2 compatibility candidate)
8
+ - Node.js `>=24.0.0` (the DSH 0.1.7-rc.2 compatibility candidate)
9
9
  - Java 17 or newer
10
10
  - Git, npm, and `tar`
11
11
  - At least 4 GiB free disk space and 2 GiB available memory; 4 GiB memory is recommended
@@ -22,7 +22,7 @@ bash experience/linux/prepare.sh --dry-run
22
22
  bash experience/linux/prepare.sh
23
23
  ```
24
24
 
25
- The script installs pinned pnpm and DeepSeek Harness 0.1.5-rc.2 inside
25
+ The script installs pinned pnpm and DeepSeek Harness 0.1.7-rc.2 inside
26
26
  `~/.local/share/foggy-deepseek-harness-experience`, clones and packs the public Foggy Bundle, and
27
27
  adds it to a clean DSH web profile. It does not use `sudo`, install operating-system packages, write
28
28
  model credentials, initialize Foggy components, or start the web process.
@@ -33,8 +33,8 @@ Start the prepared profile with:
33
33
  ~/.local/share/foggy-deepseek-harness-experience/run.sh
34
34
  ```
35
35
 
36
- Open the URL printed by DSH, then choose **Settings → Plugins → Foggy Data Analysis** and select
37
- **Initialize Foggy**. Private Python, the CLI, Launcher, and analysis Skill are downloaded from their
36
+ Open the URL printed by DSH, then choose **Settings → Built-in plugins → Foggy Data Analysis** and select
37
+ **Initialize and start**. Private Python, the CLI, Launcher, and analysis Skill are downloaded from their
38
38
  pinned public Releases and verified before installation. A system Python is not required.
39
39
 
40
40
  Provider configuration remains a separate DSH setup step. Store API keys in a private environment
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env bash
2
2
  set -euo pipefail
3
3
 
4
- DSH_VERSION="0.1.5-rc.2"
4
+ DSH_VERSION="0.1.7-rc.2"
5
5
  PNPM_VERSION="11.7.0"
6
- PLUGIN_VERSION="0.4.1-rc.1"
6
+ PLUGIN_VERSION="0.4.2-rc.2"
7
7
  PLUGIN_REF="v${PLUGIN_VERSION}"
8
8
  PLUGIN_REPOSITORY="https://github.com/foggy-projects/foggy-deepseek-harness-plugin.git"
9
9
 
@@ -74,7 +74,7 @@ require_command df
74
74
  require_command tar
75
75
 
76
76
  node -e 'const [major] = process.versions.node.split(".").map(Number); if (major < 24) process.exit(1)' \
77
- || fail "Node >=24 required for DeepSeek Harness 0.1.5-rc.2; detected $(node --version 2>/dev/null || echo unknown)"
77
+ || fail "Node >=24 required for DeepSeek Harness ${DSH_VERSION}; detected $(node --version 2>/dev/null || echo unknown)"
78
78
 
79
79
  java_major="$(java -version 2>&1 | awk -F'[\".]' '/version/ { print $2; exit }')"
80
80
  [[ "$java_major" =~ ^[0-9]+$ ]] || fail "could not detect Java version"
package/lib/client.js CHANGED
@@ -28,6 +28,7 @@ window.__ModuleLoader__.load({
28
28
  mode: 'strict',
29
29
  typeSymbol: '@foggy-projects/deepseek-harness-plugin#FoggyIntegrationResult',
30
30
  schema: passthroughSchema,
31
+ create: () => passthroughSchema,
31
32
  },
32
33
  sourceLocation: { file: 'lib/index.js', line: 1, column: 1 },
33
34
  })
@@ -46,6 +47,7 @@ window.__ModuleLoader__.load({
46
47
  mode: 'strict',
47
48
  typeSymbol: '@foggy-projects/deepseek-harness-plugin#FoggyRuntimeSettingsInput',
48
49
  schema: runtimeSettingsInputSchema,
50
+ create: () => runtimeSettingsInputSchema,
49
51
  },
50
52
  }]),
51
53
  ],
@@ -309,7 +311,7 @@ window.__ModuleLoader__.load({
309
311
  .foggy-state{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600}.foggy-dot{width:9px;height:9px;border-radius:50%;background:var(--dsw-alias-label-tertiary)}.foggy-dot[data-state=ready],.foggy-dot[data-state=running]{background:var(--dsw-alias-state-success-primary)}.foggy-dot[data-state=degraded]{background:var(--dsw-alias-state-error-primary)}
310
312
  .foggy-actions{display:flex;gap:8px;flex-wrap:wrap}.foggy-button{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:inherit;border-radius:8px;padding:7px 12px;cursor:pointer;transition:background-color .15s ease,box-shadow .15s ease,transform .15s ease}.foggy-button:hover{background:var(--dsw-alias-interactive-bg-hover)}.foggy-button:active{transform:translateY(1px)}.foggy-button:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.foggy-button:disabled{opacity:.55;cursor:not-allowed}.foggy-button-primary{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-state-business-primary);color:white}
311
313
  .foggy-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.foggy-card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:10px;padding:13px 14px}.foggy-card-head{display:flex;justify-content:space-between;gap:8px}.foggy-card strong{font-size:13px}.foggy-badge{font-size:11px;color:var(--dsw-alias-label-secondary)}.foggy-card code{display:block;margin-top:8px;color:var(--dsw-alias-label-tertiary);font-size:11px;overflow-wrap:anywhere}
312
- .foggy-progress{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:10px;padding:13px 14px}.foggy-progress-head{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13px}.foggy-progress-head strong{font-weight:600}.foggy-progress-percent{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums}.foggy-progress-track{height:8px;margin-top:10px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);overflow:hidden}.foggy-progress-fill{height:100%;border-radius:inherit;background:var(--dsw-alias-state-business-primary);transition:width .25s ease}.foggy-progress-meta{display:flex;justify-content:space-between;gap:12px;margin-top:8px;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.foggy-progress-file{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
314
+ .foggy-progress{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:10px;padding:13px 14px}.foggy-progress-head{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13px}.foggy-progress-head strong{font-weight:600}.foggy-progress-percent{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums}.foggy-progress-track{height:8px;margin-top:10px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);overflow:hidden}.foggy-progress-fill{height:100%;border-radius:inherit;background:var(--dsw-alias-state-business-primary);transition:width .25s ease}.foggy-progress-meta{display:flex;justify-content:flex-end;gap:12px;margin-top:8px;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.foggy-progress-file{justify-content:flex-start;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
313
315
  .foggy-runtime-settings{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:10px;padding:14px}.foggy-runtime-settings h4{margin:0;font-size:13px}.foggy-runtime-settings-row{display:grid;grid-template-columns:minmax(150px,220px) minmax(0,1fr) auto;align-items:end;gap:10px;margin-top:10px}.foggy-field{display:flex;flex-direction:column;gap:6px}.foggy-field label{font-size:12px;font-weight:600}.foggy-input{width:100%;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:inherit;font-variant-numeric:tabular-nums;padding:8px 10px;outline:none}.foggy-input:focus{border-color:var(--dsw-alias-state-business-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--dsw-alias-state-business-primary) 18%,transparent)}.foggy-input[aria-invalid=true]{border-color:var(--dsw-alias-state-error-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--dsw-alias-state-error-primary) 14%,transparent)}.foggy-setting-meta{display:flex;flex-direction:column;gap:4px;min-width:0;color:var(--dsw-alias-label-tertiary);font-size:11px}.foggy-setting-meta code{overflow-wrap:anywhere;color:var(--dsw-alias-label-secondary)}
314
316
  .foggy-update-banner{border:1px solid color-mix(in srgb,var(--dsw-alias-state-warning-primary) 55%,var(--dsw-alias-border-l2));background:color-mix(in srgb,var(--dsw-alias-state-warning-primary) 9%,transparent);border-radius:10px;padding:11px 13px;color:var(--dsw-alias-label-primary);font-size:12px;line-height:18px}.foggy-update-banner strong{color:var(--dsw-alias-state-warning-primary)}.foggy-update-list{margin:6px 0 0;padding-left:18px;color:var(--dsw-alias-label-secondary)}
315
317
  .foggy-resources{border-top:1px solid var(--dsw-alias-border-l2);padding-top:14px}.foggy-resources h4{margin:0 0 9px;font-size:13px}.foggy-resource-links{display:flex;gap:8px;flex-wrap:wrap}.foggy-resource-link{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:7px 10px;color:var(--dsw-alias-label-secondary);font-size:12px;text-decoration:none}.foggy-resource-link:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.foggy-resource-link:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}
@@ -401,8 +403,9 @@ window.__ModuleLoader__.load({
401
403
  'runtime-state': 'progressRuntimeState',
402
404
  'runtime-complete': 'progressRuntimeComplete',
403
405
  }
404
- const phase = t(phaseKeys[progress.phase] || 'progressWorking')
405
- const headline = String(progress.phase || '').startsWith('runtime-') ? phase : progress.message || phase
406
+ const phaseKey = phaseKeys[progress.phase]
407
+ const phase = t(phaseKey || 'progressWorking')
408
+ const headline = phaseKey ? phase : progress.message || phase
406
409
  const step = progress.step?.index && progress.step?.total
407
410
  ? `${progress.step.index}/${progress.step.total}`
408
411
  : ''
@@ -414,6 +417,7 @@ window.__ModuleLoader__.load({
414
417
  const timing = Number.isFinite(elapsed)
415
418
  ? `${t('progressElapsed')} ${elapsed}${t('progressSeconds')}${Number.isFinite(timeout) ? ` / ${t('progressTimeout')} ${timeout}${t('progressSeconds')}` : ''}`
416
419
  : ''
420
+ const meta = [step, files, timing].filter(Boolean).join(' · ')
417
421
  return jsxs('div', {
418
422
  className: 'foggy-progress',
419
423
  role: 'status',
@@ -432,10 +436,7 @@ window.__ModuleLoader__.load({
432
436
  'aria-label': phase,
433
437
  children: jsx('div', { className: 'foggy-progress-fill', style: { width: `${percent}%` } }),
434
438
  }),
435
- jsxs('div', { className: 'foggy-progress-meta', children: [
436
- jsx('span', { children: phase }),
437
- jsx('span', { children: [step, files, timing].filter(Boolean).join(' · ') }),
438
- ] }),
439
+ meta ? jsx('div', { className: 'foggy-progress-meta', children: meta }) : null,
439
440
  progress.currentFile ? jsx('div', { className: 'foggy-progress-meta foggy-progress-file', title: progress.currentFile, children: progress.currentFile }) : null,
440
441
  ],
441
442
  })
@@ -552,7 +553,10 @@ window.__ModuleLoader__.load({
552
553
  for (let attempt = 0; attempt < 900; attempt += 1) {
553
554
  const status = unwrap(await api.status(), 'status')
554
555
  const operation = status.operation
555
- if (operation?.id === operationId && operation.state !== 'running') return status
556
+ if (operation?.id === operationId) {
557
+ setView((current) => ({ ...current, phase: 'ready', status }))
558
+ if (operation.state !== 'running') return status
559
+ }
556
560
  await new Promise((resolve) => setTimeout(resolve, 1000))
557
561
  }
558
562
  throw new Error(t('operationTimeout'))
package/lib/index.js CHANGED
@@ -155,7 +155,7 @@ async function runOnboarding(args, timeout = 15 * 60_000, options = {}) {
155
155
 
156
156
  async function assertSystemPrerequisites(kind) {
157
157
  if (kind === 'initialize' && !compatibleNode(process.versions.node)) {
158
- throw new Error(`DeepSeek Harness 0.1.5-rc.2 requires Node.js >=24.0.0; detected ${process.versions.node}`)
158
+ throw new Error(`This DeepSeek Harness plugin requires Node.js >=24.0.0; detected ${process.versions.node}`)
159
159
  }
160
160
  if (kind === 'initialize' || kind === 'runtime-start') {
161
161
  const java = compatible(await commandVersion(process.env.JAVA_EXE || 'java', ['-version']), '17.0')
@@ -5,6 +5,16 @@ const runtimeSettingsInputSchema = z.object({
5
5
  port: z.number().int().min(1024).max(65535),
6
6
  }).strict()
7
7
 
8
+ function strictCodec(typeSymbol, schema) {
9
+ return {
10
+ mode: 'strict',
11
+ typeSymbol,
12
+ // DSH 0.1.5 consumes `schema`; DSH 0.1.7 materializes it through `create()`.
13
+ schema,
14
+ create: () => schema,
15
+ }
16
+ }
17
+
8
18
  function descriptor(method, parameters = []) {
9
19
  return {
10
20
  id: `@foggy-projects/deepseek-harness-plugin#foggyIntegration/${method}`,
@@ -13,11 +23,7 @@ function descriptor(method, parameters = []) {
13
23
  method,
14
24
  invocation: { kind: 'direct' },
15
25
  parameters,
16
- result: {
17
- mode: 'strict',
18
- typeSymbol: '@foggy-projects/deepseek-harness-plugin#FoggyIntegrationResult',
19
- schema: resultSchema,
20
- },
26
+ result: strictCodec('@foggy-projects/deepseek-harness-plugin#FoggyIntegrationResult', resultSchema),
21
27
  sourceLocation: { file: 'lib/index.js', line: 1, column: 1 },
22
28
  }
23
29
  }
@@ -37,10 +43,6 @@ export const descriptors = [
37
43
  name: 'input',
38
44
  wire: 'input',
39
45
  source: 'json',
40
- codec: {
41
- mode: 'strict',
42
- typeSymbol: '@foggy-projects/deepseek-harness-plugin#FoggyRuntimeSettingsInput',
43
- schema: runtimeSettingsInputSchema,
44
- },
46
+ codec: strictCodec('@foggy-projects/deepseek-harness-plugin#FoggyRuntimeSettingsInput', runtimeSettingsInputSchema),
45
47
  }]),
46
48
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foggy-projects/deepseek-harness-plugin",
3
- "version": "0.4.1-rc.1",
3
+ "version": "0.4.2-rc.2",
4
4
  "description": "Foggy Java data analysis engine integration for DeepSeek Harness",
5
5
  "keywords": [
6
6
  "deepseek-harness",
@@ -40,6 +40,8 @@
40
40
  "docs/RELEASE-CANDIDATE-0.4.0-RC.2.md",
41
41
  "docs/RELEASE-CANDIDATE-0.4.0-RC.3.md",
42
42
  "docs/RELEASE-CANDIDATE-0.4.1-DSH-0.1.5-RC.1.md",
43
+ "docs/RELEASE-CANDIDATE-0.4.2-DSH-0.1.7-RC.2.md",
44
+ "docs/RELEASE-CANDIDATE-0.4.2-DSH-0.1.7-RC.1.md",
43
45
  "docs/COMMUNITY-MARKETPLACES.md",
44
46
  "docs/WINDOWS-BETA-ACCEPTANCE.md",
45
47
  "THIRD-PARTY-RUNTIME-NOTICES.md",
@@ -68,12 +70,12 @@
68
70
  },
69
71
  "peerDependencies": {
70
72
  "@deepseek-ai/cordis": "^4.0.2",
71
- "@deepseek-ai/dsh-api-remotes": "^0.1.5-rc.2",
72
- "@deepseek-ai/dsh-client-locale": "^0.1.5-rc.2",
73
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.5-rc.2",
74
- "@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.5-rc.2",
75
- "@deepseek-ai/dsh-skill": "^0.1.5-rc.2",
76
- "@deepseek-ai/dsh-typert-protocol": "^0.1.5-rc.2"
73
+ "@deepseek-ai/dsh-api-remotes": "^0.1.7-rc.2",
74
+ "@deepseek-ai/dsh-client-locale": "^0.1.7-rc.2",
75
+ "@deepseek-ai/dsh-client-ui-settings": "^0.1.7-rc.2",
76
+ "@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.7-rc.2",
77
+ "@deepseek-ai/dsh-skill": "^0.1.7-rc.2",
78
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.7-rc.2"
77
79
  },
78
80
  "scripts": {
79
81
  "check": "node --check lib/index.js && node --check lib/atomic-json.js && node --check lib/diagnostics.js && node --check lib/python-runtime.js && node --check lib/runtime-settings.js && node --check lib/skill-provider.js && node --check lib/client.js && node --check lib/typert.js && node --check lib/remote.js",
@@ -40,8 +40,9 @@ are authoritative; do not copy the Skill into the current workspace.
40
40
 
41
41
  ## Development workflow
42
42
 
43
- 1. Run `doctor`. Start Runtime only if it is not already healthy; require `wait-ready` and
44
- `capabilities` after a new start.
43
+ 1. Run `doctor`. Runtime health is established by the managed CLI's read-only `wait-ready` check;
44
+ process visibility alone does not prove HTTP readiness. Start Runtime only if it is not already
45
+ healthy; require `wait-ready` and `capabilities` after a new start.
45
46
  2. Accept datasource connection details from the user's message, a user-supplied local JSON file, an
46
47
  environment variable, or Runtime Console. Direct `password` is supported for local development.
47
48
  The wrapper submits it to the public Runtime API without copying it into onboarding state or
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "schemaVersion": "foggy-deepseek-onboarding-versions/v1",
3
- "packageVersion": "0.4.1-rc.1",
4
- "validatedAt": "2026-09-13",
3
+ "packageVersion": "0.4.2-rc.2",
4
+ "validatedAt": "2026-09-27",
5
5
  "components": {
6
6
  "deepseekHarness": {
7
- "version": "0.1.5-rc.2",
7
+ "version": "0.1.7-rc.2",
8
8
  "minimumNodeVersion": "24.0.0"
9
9
  },
10
10
  "python": {
@@ -1790,8 +1790,9 @@ def onboarding_context(args: argparse.Namespace, require_runtime: bool = False)
1790
1790
  if require_runtime:
1791
1791
  if not runtime_state:
1792
1792
  raise OnboardingError("Runtime is not started; run runtime-start first")
1793
- if not process_info(int(runtime_state.get("pid", 0)))["running"]:
1794
- raise OnboardingError("Runtime state is stale; restart Runtime before continuing")
1793
+ health = runtime_health(install_state, runtime_state)
1794
+ if health["status"] != "running":
1795
+ raise OnboardingError("Runtime readiness could not be verified; run doctor and inspect Runtime health before continuing")
1795
1796
  return install_root, install_state, data_root, runtime_state
1796
1797
 
1797
1798
 
@@ -1814,6 +1815,52 @@ def cli_json(install_state: dict, runtime_state: dict, namespace: str, command:
1814
1815
  return payload
1815
1816
 
1816
1817
 
1818
+ def runtime_health(install_state: dict, runtime_state: dict) -> dict:
1819
+ """Use Runtime API readiness as the health signal; process inspection is diagnostic only."""
1820
+ pid = runtime_state.get("pid")
1821
+ info = process_info(int(pid or 0))
1822
+ base = {
1823
+ "pid": pid,
1824
+ "runtimeUrl": runtime_state.get("runtimeUrl"),
1825
+ "identity": runtime_state.get("identity"),
1826
+ }
1827
+
1828
+ try:
1829
+ probe = cli_json(
1830
+ install_state,
1831
+ runtime_state,
1832
+ runtime_state.get("namespace") or "default",
1833
+ ["wait-ready", "--timeout-seconds", "2", "--interval-seconds", "1"],
1834
+ "Runtime readiness probe",
1835
+ timeout=5,
1836
+ )
1837
+ except OnboardingError:
1838
+ return {
1839
+ **base,
1840
+ "status": "unverified",
1841
+ "verifiedBy": "none",
1842
+ "processInspection": "confirmed" if info["running"] else "not-confirmed",
1843
+ "readiness": "failed",
1844
+ }
1845
+
1846
+ data = probe.get("data")
1847
+ if isinstance(data, dict) and data.get("ready") is True:
1848
+ return {
1849
+ **base,
1850
+ "status": "running",
1851
+ "verifiedBy": "runtime-api",
1852
+ "processInspection": "confirmed" if info["running"] else "not-confirmed",
1853
+ "readiness": "ready",
1854
+ }
1855
+ return {
1856
+ **base,
1857
+ "status": "unverified",
1858
+ "verifiedBy": "none",
1859
+ "processInspection": "confirmed" if info["running"] else "not-confirmed",
1860
+ "readiness": "not-ready",
1861
+ }
1862
+
1863
+
1817
1864
  TRANSIENT_DATASOURCE_TEST_MARKERS = (
1818
1865
  "connection is not available",
1819
1866
  "connection pool",
@@ -2741,7 +2788,7 @@ def next_onboarding_action(state: dict) -> dict:
2741
2788
 
2742
2789
  def onboarding_status_command(args: argparse.Namespace) -> dict:
2743
2790
  state, _install_state, _data_root, runtime_state = require_profile(args, require_runtime=False)
2744
- runtime_running = bool(runtime_state and process_info(int(runtime_state.get("pid", 0)))["running"])
2791
+ runtime_running = bool(runtime_state and runtime_health(_install_state, runtime_state)["status"] == "running")
2745
2792
  connection = state["connection"]
2746
2793
  password_env = connection.get("passwordEnv")
2747
2794
  return {
@@ -3356,8 +3403,7 @@ def doctor_command(args: argparse.Namespace) -> dict:
3356
3403
  runtime_state_path = data_root / "runtime-state.json"
3357
3404
  if runtime_state_path.is_file():
3358
3405
  runtime_state = json.loads(runtime_state_path.read_text(encoding="utf-8"))
3359
- info = process_info(int(runtime_state.get("pid", 0)))
3360
- runtime = {"status": "running" if info["running"] else "stale", "pid": runtime_state.get("pid"), "runtimeUrl": runtime_state.get("runtimeUrl"), "identity": runtime_state.get("identity")}
3406
+ runtime = runtime_health(state, runtime_state)
3361
3407
  required = {
3362
3408
  "python": python_ok,
3363
3409
  "java": java_ok,