@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.
- package/README.md +32 -6
- package/THIRD-PARTY-RUNTIME-NOTICES.md +16 -0
- package/docs/PUBLIC-BETA-READINESS.md +51 -0
- package/docs/WINDOWS-BETA-ACCEPTANCE.md +71 -0
- package/experience/linux/README.md +5 -6
- package/experience/linux/prepare.sh +7 -9
- package/lib/client.js +132 -6
- package/lib/index.js +157 -28
- package/lib/python-runtime.js +339 -0
- package/lib/remote-descriptor.js +1 -0
- package/lib/version.js +5 -0
- package/package.json +6 -3
- package/skills/foggy-deepseek-onboarding/SKILL.md +24 -5
- package/skills/foggy-deepseek-onboarding/assets/onboarding-state.schema.json +20 -0
- package/skills/foggy-deepseek-onboarding/assets/versions.json +46 -2
- package/skills/foggy-deepseek-onboarding/references/onboarding-workflow.md +18 -4
- package/skills/foggy-deepseek-onboarding/scripts/doctor.ps1 +2 -2
- package/skills/foggy-deepseek-onboarding/scripts/doctor.sh +1 -2
- package/skills/foggy-deepseek-onboarding/scripts/install.ps1 +2 -2
- package/skills/foggy-deepseek-onboarding/scripts/install.sh +1 -2
- package/skills/foggy-deepseek-onboarding/scripts/invoke-onboarding.ps1 +30 -0
- package/skills/foggy-deepseek-onboarding/scripts/invoke-onboarding.sh +24 -0
- package/skills/foggy-deepseek-onboarding/scripts/onboard.ps1 +2 -2
- package/skills/foggy-deepseek-onboarding/scripts/onboard.sh +1 -2
- package/skills/foggy-deepseek-onboarding/scripts/onboarding.py +400 -43
- package/skills/foggy-deepseek-onboarding/scripts/runtime-start.ps1 +2 -2
- package/skills/foggy-deepseek-onboarding/scripts/runtime-start.sh +1 -2
- package/skills/foggy-deepseek-onboarding/scripts/runtime-stop.ps1 +2 -2
- package/skills/foggy-deepseek-onboarding/scripts/runtime-stop.sh +1 -2
- package/skills/foggy-deepseek-onboarding/scripts/uninstall.ps1 +2 -2
- 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
|
-
|
|
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
|
|
75
|
-
plugin's Repair action.
|
|
76
|
-
|
|
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.
|
|
4
|
-
"validatedAt": "2026-09-
|
|
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 --
|
|
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 --
|
|
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
|
-
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3
|
-
|
|
2
|
+
& (Join-Path $PSScriptRoot 'invoke-onboarding.ps1') @args
|
|
3
|
+
exit $LASTEXITCODE
|
|
4
4
|
exit $LASTEXITCODE
|