@foggy-projects/deepseek-harness-plugin 0.4.0-beta.6 → 0.4.0-beta.8

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 (31) hide show
  1. package/README.md +32 -6
  2. package/THIRD-PARTY-RUNTIME-NOTICES.md +16 -0
  3. package/docs/PUBLIC-BETA-READINESS.md +51 -0
  4. package/docs/WINDOWS-BETA-ACCEPTANCE.md +71 -0
  5. package/experience/linux/README.md +5 -6
  6. package/experience/linux/prepare.sh +7 -9
  7. package/lib/client.js +132 -6
  8. package/lib/index.js +157 -28
  9. package/lib/python-runtime.js +339 -0
  10. package/lib/remote-descriptor.js +1 -0
  11. package/lib/version.js +5 -0
  12. package/package.json +6 -3
  13. package/skills/foggy-deepseek-onboarding/SKILL.md +24 -5
  14. package/skills/foggy-deepseek-onboarding/assets/onboarding-state.schema.json +20 -0
  15. package/skills/foggy-deepseek-onboarding/assets/versions.json +46 -2
  16. package/skills/foggy-deepseek-onboarding/references/onboarding-workflow.md +18 -4
  17. package/skills/foggy-deepseek-onboarding/scripts/doctor.ps1 +2 -2
  18. package/skills/foggy-deepseek-onboarding/scripts/doctor.sh +1 -2
  19. package/skills/foggy-deepseek-onboarding/scripts/install.ps1 +2 -2
  20. package/skills/foggy-deepseek-onboarding/scripts/install.sh +1 -2
  21. package/skills/foggy-deepseek-onboarding/scripts/invoke-onboarding.ps1 +30 -0
  22. package/skills/foggy-deepseek-onboarding/scripts/invoke-onboarding.sh +24 -0
  23. package/skills/foggy-deepseek-onboarding/scripts/onboard.ps1 +2 -2
  24. package/skills/foggy-deepseek-onboarding/scripts/onboard.sh +1 -2
  25. package/skills/foggy-deepseek-onboarding/scripts/onboarding.py +400 -43
  26. package/skills/foggy-deepseek-onboarding/scripts/runtime-start.ps1 +2 -2
  27. package/skills/foggy-deepseek-onboarding/scripts/runtime-start.sh +1 -2
  28. package/skills/foggy-deepseek-onboarding/scripts/runtime-stop.ps1 +2 -2
  29. package/skills/foggy-deepseek-onboarding/scripts/runtime-stop.sh +1 -2
  30. package/skills/foggy-deepseek-onboarding/scripts/uninstall.ps1 +2 -2
  31. package/skills/foggy-deepseek-onboarding/scripts/uninstall.sh +1 -2
@@ -20,9 +20,13 @@ copy this Skill into the current workspace.
20
20
  workspace as `--project-root`. The absence of `foggy-runtime` from `PATH` is not evidence that the
21
21
  managed CLI is missing; the plugin intentionally installs it in an isolated environment and records
22
22
  its absolute command in the global install state.
23
+ - The plugin downloads and verifies a pinned private Python runtime before running this Skill. Do not
24
+ search for, install, or repair a system Python. Wrappers resolve the interpreter recorded in the
25
+ global install state. If private Python is missing, use the plugin's Python repair action. Only use
26
+ `FOGGY_PYTHON` or `FOGGY_ONBOARDING_PYTHON` when the user explicitly supplied an advanced override.
23
27
  - Do not independently download or reinstall the CLI. If the global install state, managed marker, or
24
28
  analysis Skill is missing or invalid, ask the user to open the Foggy plugin settings and use
25
- **Re-download / Repair**. Repair restores the global managed analysis Skill and invalidates the
29
+ the matching component repair action. Repair restores managed components and invalidates the
26
30
  native DSH Skill catalog. Reinstall or upgrade the plugin itself to restore this bundled Skill.
27
31
  - Treat the current DSH session workspace as the authoritative `projectRoot` for the whole onboarding
28
32
  run. Do not redirect semantic drafts or contracts to a different repository merely because another
@@ -71,11 +75,15 @@ For every new-database onboarding session, this Skill is the orchestration autho
71
75
 
72
76
  1. Run `scripts/doctor.ps1 --project-root <current-session-workspace>` on Windows or
73
77
  `bash scripts/doctor.sh --project-root <current-session-workspace>` on Linux.
74
- 2. If the pinned CLI, Launcher, or global managed analysis Skill is missing, use the Foggy
75
- plugin's Repair action. Use the matching install script only when the plugin UI is unavailable;
76
- use `--dry-run` first when paths or permissions are uncertain.
78
+ 2. If private Python, the pinned CLI, Launcher, or global managed analysis Skill is missing, use the
79
+ Foggy plugin's matching Repair action. First-time Python bootstrap requires the plugin UI unless
80
+ the user explicitly supplies `FOGGY_ONBOARDING_PYTHON`. Use a matching install script only after
81
+ private Python exists and the plugin UI is unavailable; use `--dry-run` first when paths or
82
+ permissions are uncertain.
77
83
  3. Run `runtime-start` and require successful `wait-ready` plus `capabilities`. Record engine,
78
- Runtime API version, schema version, security mode, URL, namespace, PID, and evidence path.
84
+ Runtime API version, schema version, security mode, URL, namespace, PID, and evidence path. If the
85
+ recorded Runtime is already running, `runtime-start` verifies and reuses it instead of starting a
86
+ second process.
79
87
  4. Load `foggy-ai-analysis` from the native DSH Skill registry. Do not require a workspace copy.
80
88
  5. For a new business database, read [references/onboarding-workflow.md](references/onboarding-workflow.md)
81
89
  and prefer its two composite `onboard-datasource-run` / `onboard-semantic-run` commands. Require the
@@ -84,6 +92,9 @@ For every new-database onboarding session, this Skill is the orchestration autho
84
92
  (`<dataRoot>/cli-profiles`), never `/tmp`. Accept only the opaque profile
85
93
  ID, exact revision, datasource name/type, and namespace; never request JDBC URL, username,
86
94
  password, or password environment-variable name in Harness.
95
+ If plugin settings report a legacy temporary profile, use the explicit migration action before
96
+ onboarding. It moves only validated connection metadata and environment-variable references; it
97
+ never copies a password value and leaves a recoverable private backup below the Foggy data root.
87
98
  6. After schema discovery, use `foggy-ai-analysis` only to author TM/QM files in the standard project-local
88
99
  draft directory. Register, validate, publish, and verify them through this Skill's wrapper using the deterministic commands in
89
100
  [references/onboarding-workflow.md](references/onboarding-workflow.md). Do not publish, prune, replace
@@ -114,5 +125,13 @@ publication, and verification phases when the approved contract and draft digest
114
125
  query payload in place and rerun the same semantic composite command; do not remove a successfully
115
126
  published bundle merely to recover from a later query-validation failure.
116
127
 
128
+ An already-completed profile may be reused from another DSH workspace when the approved connection
129
+ contract is byte-for-byte equivalent. Run the datasource composite in the new workspace first; it adds
130
+ that workspace as a non-destructive binding and reuses datasource/schema checkpoints. Then pass the
131
+ current workspace explicitly as `--project-root` to the semantic composite. A secondary workspace may
132
+ reuse an identical published semantic digest and run its own bounded verification query, but it cannot
133
+ replace the published semantic layer; changes must be published from the original workspace or a new
134
+ profile.
135
+
117
136
  Keep user business data separate from the sales-drop SQLite demo. Prefer a read-only database account,
118
137
  opaque CLI profile references, and bounded query limits.
@@ -13,6 +13,26 @@
13
13
  "installRoot": {"type": "string"},
14
14
  "dataRoot": {"type": "string"},
15
15
  "projectRoot": {"type": "string"},
16
+ "workspaceBindings": {
17
+ "type": "array",
18
+ "items": {"type": "string"},
19
+ "uniqueItems": true
20
+ },
21
+ "workspaceVerifications": {
22
+ "type": "array",
23
+ "items": {
24
+ "type": "object",
25
+ "required": ["projectRoot", "queryModel", "queryPayloadDigest", "verifiedAt"],
26
+ "properties": {
27
+ "projectRoot": {"type": "string"},
28
+ "queryModel": {"type": "string"},
29
+ "queryPayloadDigest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
30
+ "rowCount": {"type": ["integer", "null"], "minimum": 0},
31
+ "verifiedAt": {"type": "string", "format": "date-time"}
32
+ },
33
+ "additionalProperties": false
34
+ }
35
+ },
16
36
  "runtime": {"type": "object"},
17
37
  "connection": {"$ref": "connection.schema.json"},
18
38
  "semantic": {"type": "object"},
@@ -1,12 +1,56 @@
1
1
  {
2
2
  "schemaVersion": "foggy-deepseek-onboarding-versions/v1",
3
- "packageVersion": "0.4.0-beta.6",
4
- "validatedAt": "2026-09-01",
3
+ "packageVersion": "0.4.0-beta.8",
4
+ "validatedAt": "2026-09-03",
5
5
  "components": {
6
6
  "deepseekHarness": {
7
7
  "version": "0.1.1-rc.2",
8
8
  "minimumNodeVersion": "22.19.0"
9
9
  },
10
+ "python": {
11
+ "version": "3.12.13",
12
+ "distribution": "astral-sh/python-build-standalone",
13
+ "buildRelease": "20260718",
14
+ "license": "Python-2.0 AND MPL-2.0",
15
+ "assets": {
16
+ "win32-x64": {
17
+ "file": "cpython-3.12.13+20260718-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
18
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260718/cpython-3.12.13%2B20260718-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
19
+ "sha256": "0d422a1439ec308e03f47df551bc30f5994727c456e414b026d202bcda9b7c1c",
20
+ "size": 21932298
21
+ },
22
+ "win32-arm64": {
23
+ "file": "cpython-3.12.13+20260718-aarch64-pc-windows-msvc-install_only_stripped.tar.gz",
24
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260718/cpython-3.12.13%2B20260718-aarch64-pc-windows-msvc-install_only_stripped.tar.gz",
25
+ "sha256": "596808d2592a282c45921a324d5503ef0d4f488d104c1c1f12a1d5e7dea9d463",
26
+ "size": 20652311
27
+ },
28
+ "linux-x64": {
29
+ "file": "cpython-3.12.13+20260718-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
30
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260718/cpython-3.12.13%2B20260718-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
31
+ "sha256": "5854aa6ec71cad00334d5065633c210b2e7feb40956767a59a91791cadcf0b79",
32
+ "size": 34199823
33
+ },
34
+ "linux-arm64": {
35
+ "file": "cpython-3.12.13+20260718-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
36
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260718/cpython-3.12.13%2B20260718-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
37
+ "sha256": "f226576b91491ffa5739aa85726521e9031f4d87f80627d64ed348ac77cb31e9",
38
+ "size": 29195696
39
+ },
40
+ "darwin-x64": {
41
+ "file": "cpython-3.12.13+20260718-x86_64-apple-darwin-install_only_stripped.tar.gz",
42
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260718/cpython-3.12.13%2B20260718-x86_64-apple-darwin-install_only_stripped.tar.gz",
43
+ "sha256": "8e6b7e6533bdf746287008edf91102e7bee0a6ca1d24f16c4514237cafd706c5",
44
+ "size": 24685843
45
+ },
46
+ "darwin-arm64": {
47
+ "file": "cpython-3.12.13+20260718-aarch64-apple-darwin-install_only_stripped.tar.gz",
48
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20260718/cpython-3.12.13%2B20260718-aarch64-apple-darwin-install_only_stripped.tar.gz",
49
+ "sha256": "9a1e9e06175c10efd8378b904b07fa21bd791ab3345d7cdffeb4a76c9ff55903",
50
+ "size": 25000146
51
+ }
52
+ }
53
+ },
10
54
  "cli": {
11
55
  "version": "0.1.23",
12
56
  "minimumPythonVersion": "3.11.0",
@@ -33,6 +33,12 @@ The wrapper defaults `FOGGY_RUNTIME_PROFILE_STORE` to the private persistent dir
33
33
  `<dataRoot>/cli-profiles`. An explicit operator-provided value still wins. Do not use `/tmp` for a profile
34
34
  that must survive a WSL or Harness restart.
35
35
 
36
+ If plugin settings detect profiles in the legacy temporary store, use **Move to persistent store**.
37
+ Migration validates the opaque profile schema, rejects embedded passwords and conflicts, writes the
38
+ destination with private permissions, verifies it, and moves the legacy JSON to a recoverable private
39
+ backup below the Foggy data root.
40
+ Do not manually copy or edit opaque profile JSON.
41
+
36
42
  Treat every user-supplied identifier and bound as immutable input: profile, datasource, namespace,
37
43
  models directory, bundle name, TM/QM name, query fields, and limit. Do not swap in demo names, add
38
44
  fields, raise the limit, or introduce replacement flags. If one of these inputs is missing, pause for
@@ -52,11 +58,13 @@ For Harness-driven onboarding, use the two composite commands below. Each writes
52
58
  evidence internally and refuses to cross an unapproved mutation gate:
53
59
 
54
60
  ```text
55
- onboard-datasource-run --connection-file <approved-json> \
61
+ onboard-datasource-run --project-root <current-session-workspace> \
62
+ --connection-file <approved-json> \
56
63
  --approve-configure --approve-bind --include-indexes
57
64
 
58
65
  # After authoring the registered TM/QM draft from schema metadata:
59
- onboard-semantic-run --semantic-plan <approved-json> --query-payload <approved-json> \
66
+ onboard-semantic-run --project-root <current-session-workspace> \
67
+ --semantic-plan <approved-json> --query-payload <approved-json> \
60
68
  --approve-validate --approve-publish --approve-execute
61
69
  ```
62
70
 
@@ -70,6 +78,12 @@ payload and rerun `onboard-semantic-run`; it resumes at query verification and l
70
78
  place. A same-name datasource is accepted idempotently only when its public name and database type match
71
79
  the approved plan; otherwise replacement still requires explicit approval.
72
80
 
81
+ When a completed profile already belongs to another workspace, the datasource composite may add the
82
+ current workspace as a binding only if the approved connection contract is identical and the datasource,
83
+ schema, and semantic publication checkpoints are complete. The semantic composite then accepts the same
84
+ published draft digest from the bound workspace and performs a workspace-specific bounded verification
85
+ query. It refuses semantic replacement from the secondary workspace.
86
+
73
87
  The granular commands below remain available for manual troubleshooting and resumption. Do not expand
74
88
  the composite commands into this list during a normal Harness turn.
75
89
 
@@ -85,8 +99,8 @@ semantic-validate --profile <profile>
85
99
  semantic-validate --profile <profile> --apply
86
100
  semantic-publish --profile <profile>
87
101
  semantic-publish --profile <profile> --apply
88
- semantic-verify --profile <profile> --query-payload <json>
89
- semantic-verify --profile <profile> --query-payload <json> --execute
102
+ semantic-verify --profile <profile> --project-root <current-session-workspace> --query-payload <json>
103
+ semantic-verify --profile <profile> --project-root <current-session-workspace> --query-payload <json> --execute
90
104
  onboard-status --profile <profile>
91
105
  ```
92
106
 
@@ -1,4 +1,4 @@
1
1
  $ErrorActionPreference = "Stop"
2
- $pythonCommand = if ($env:FOGGY_ONBOARDING_PYTHON) { $env:FOGGY_ONBOARDING_PYTHON } else { "python" }
3
- & $pythonCommand (Join-Path $PSScriptRoot "onboarding.py") doctor @args
2
+ & (Join-Path $PSScriptRoot 'invoke-onboarding.ps1') doctor @args
3
+ exit $LASTEXITCODE
4
4
  exit $LASTEXITCODE
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env bash
2
2
  set -euo pipefail
3
3
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
4
- PYTHON_COMMAND="${FOGGY_ONBOARDING_PYTHON:-python3}"
5
- exec "$PYTHON_COMMAND" "$SCRIPT_DIR/onboarding.py" doctor "$@"
4
+ exec bash "$SCRIPT_DIR/invoke-onboarding.sh" doctor "$@"
@@ -1,4 +1,4 @@
1
1
  $ErrorActionPreference = "Stop"
2
- $pythonCommand = if ($env:FOGGY_ONBOARDING_PYTHON) { $env:FOGGY_ONBOARDING_PYTHON } else { "python" }
3
- & $pythonCommand (Join-Path $PSScriptRoot "onboarding.py") install @args
2
+ & (Join-Path $PSScriptRoot 'invoke-onboarding.ps1') install @args
3
+ exit $LASTEXITCODE
4
4
  exit $LASTEXITCODE
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env bash
2
2
  set -euo pipefail
3
3
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
4
- PYTHON_COMMAND="${FOGGY_ONBOARDING_PYTHON:-python3}"
5
- exec "$PYTHON_COMMAND" "$SCRIPT_DIR/onboarding.py" install "$@"
4
+ exec bash "$SCRIPT_DIR/invoke-onboarding.sh" install "$@"
@@ -0,0 +1,30 @@
1
+ param(
2
+ [Parameter(ValueFromRemainingArguments = $true)]
3
+ [string[]]$OnboardingArgs
4
+ )
5
+
6
+ $pythonCommand = $env:FOGGY_ONBOARDING_PYTHON
7
+ if (-not $pythonCommand) {
8
+ $installRoot = if ($env:FOGGY_INSTALL_ROOT) {
9
+ $env:FOGGY_INSTALL_ROOT
10
+ } elseif ($env:LOCALAPPDATA) {
11
+ Join-Path $env:LOCALAPPDATA 'Foggy\DeepSeekHarness'
12
+ }
13
+ if ($installRoot) {
14
+ $statePath = Join-Path $installRoot 'install-state.json'
15
+ if (Test-Path -LiteralPath $statePath) {
16
+ try {
17
+ $state = Get-Content -Raw -LiteralPath $statePath | ConvertFrom-Json
18
+ $pythonCommand = $state.python.command
19
+ } catch {}
20
+ }
21
+ }
22
+ }
23
+
24
+ if (-not $pythonCommand -or -not (Test-Path -LiteralPath $pythonCommand)) {
25
+ Write-Error 'Foggy private Python is unavailable. Initialize or repair it in DeepSeek Harness plugin settings, or set FOGGY_ONBOARDING_PYTHON explicitly.'
26
+ exit 1
27
+ }
28
+
29
+ & $pythonCommand (Join-Path $PSScriptRoot 'onboarding.py') @OnboardingArgs
30
+ exit $LASTEXITCODE
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ python_command="${FOGGY_ONBOARDING_PYTHON:-}"
5
+ if [[ -z "$python_command" ]]; then
6
+ if [[ -n "${FOGGY_INSTALL_ROOT:-}" ]]; then
7
+ install_root="$FOGGY_INSTALL_ROOT"
8
+ elif [[ -n "${XDG_DATA_HOME:-}" ]]; then
9
+ install_root="$XDG_DATA_HOME/foggy/deepseek-harness"
10
+ else
11
+ install_root="$HOME/.local/share/foggy/deepseek-harness"
12
+ fi
13
+ state_path="$install_root/install-state.json"
14
+ if [[ -f "$state_path" ]]; then
15
+ python_command="$(node -e 'const fs=require("node:fs"); const state=JSON.parse(fs.readFileSync(process.argv[1],"utf8")); process.stdout.write(state.python?.command || "")' "$state_path")"
16
+ fi
17
+ fi
18
+
19
+ if [[ -z "$python_command" || ! -x "$python_command" ]]; then
20
+ echo 'Foggy private Python is unavailable. Initialize or repair it in DeepSeek Harness plugin settings, or set FOGGY_ONBOARDING_PYTHON explicitly.' >&2
21
+ exit 1
22
+ fi
23
+
24
+ exec "$python_command" "$(dirname "$0")/onboarding.py" "$@"
@@ -1,4 +1,4 @@
1
1
  $ErrorActionPreference = "Stop"
2
- $pythonCommand = if ($env:FOGGY_ONBOARDING_PYTHON) { $env:FOGGY_ONBOARDING_PYTHON } else { "python" }
3
- & $pythonCommand (Join-Path $PSScriptRoot "onboarding.py") @args
2
+ & (Join-Path $PSScriptRoot 'invoke-onboarding.ps1') @args
3
+ exit $LASTEXITCODE
4
4
  exit $LASTEXITCODE
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env bash
2
2
  set -euo pipefail
3
3
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
4
- PYTHON_COMMAND="${FOGGY_ONBOARDING_PYTHON:-python3}"
5
- exec "$PYTHON_COMMAND" "$SCRIPT_DIR/onboarding.py" "$@"
4
+ exec bash "$SCRIPT_DIR/invoke-onboarding.sh" "$@"