Monorepo with centralized build props, npm workspaces, LlamaSharp AI, SQLite/SQLCipher storage, Svelte frontend, and unified smoke tests. Co-Authored-By: Oz <oz-agent@warp.dev>
678 lines
16 KiB
Plaintext
678 lines
16 KiB
Plaintext
{
|
|
"name": "Project Journal",
|
|
"version": "0.1.0",
|
|
"targets": [],
|
|
"workflows": [
|
|
{
|
|
"id": "sidecar",
|
|
"label": "Publish Sidecar",
|
|
"description": "Build Journal.Sidecar as self-contained exe \u2192 output/",
|
|
"group": "Build",
|
|
"dependsOn": [],
|
|
"steps": [
|
|
{
|
|
"id": "sidecar:run",
|
|
"label": "Publish Sidecar",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/publish-sidecar.ps1",
|
|
"-Configuration",
|
|
"Release",
|
|
"-Runtime",
|
|
"win-x64"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "dotnet",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "web",
|
|
"label": "Build Web UI",
|
|
"description": "Build SvelteKit bundle \u2192 Journal.App/build/",
|
|
"group": "Build",
|
|
"dependsOn": [],
|
|
"steps": [
|
|
{
|
|
"id": "web:run",
|
|
"label": "Build Web UI",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/publish-app.ps1",
|
|
"-Target",
|
|
"web"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "node",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "npm",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "sync-output",
|
|
"label": "Sync Build Assets to Output",
|
|
"description": "Sweep repo for newest builds (Web/Sidecar/Gateway/Tauri) and copy them to the output dir",
|
|
"group": "Build",
|
|
"dependsOn": [],
|
|
"steps": [
|
|
{
|
|
"id": "sync-output:run",
|
|
"label": "Sync Build Assets to Output",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/sync-output.ps1"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "webgateway",
|
|
"label": "Publish WebGateway",
|
|
"description": "Publish ASP.NET host with embedded web UI \u2192 output/webgateway/",
|
|
"group": "Build",
|
|
"dependsOn": [
|
|
"web"
|
|
],
|
|
"steps": [
|
|
{
|
|
"id": "webgateway:run",
|
|
"label": "Publish WebGateway",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/publish-webgateway.ps1",
|
|
"-Configuration",
|
|
"Release",
|
|
"-Runtime",
|
|
"win-x64"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "dotnet",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "node",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "npm",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "tauri",
|
|
"label": "Build Tauri Desktop App",
|
|
"description": "Build desktop exe (no installer) \u2192 Journal.App/src-tauri/target/release/",
|
|
"group": "Build",
|
|
"dependsOn": [
|
|
"sidecar"
|
|
],
|
|
"steps": [
|
|
{
|
|
"id": "tauri:run",
|
|
"label": "Build Tauri Desktop App",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/publish-app.ps1",
|
|
"-Target",
|
|
"tauri",
|
|
"-TauriBundles",
|
|
"none"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "node",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "npm",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "cargo",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "tauri-nsis",
|
|
"label": "Build Tauri \u002B NSIS Installer",
|
|
"description": "Build desktop exe with NSIS installer package",
|
|
"group": "Build",
|
|
"dependsOn": [
|
|
"sidecar"
|
|
],
|
|
"steps": [
|
|
{
|
|
"id": "tauri-nsis:run",
|
|
"label": "Build Tauri \u002B NSIS Installer",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/publish-app.ps1",
|
|
"-Target",
|
|
"tauri",
|
|
"-TauriBundles",
|
|
"nsis"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "node",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "npm",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "cargo",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "build-dotnet",
|
|
"label": "Build .NET Projects",
|
|
"description": "dotnet build \u2014 all C# projects in solution",
|
|
"group": "Build",
|
|
"dependsOn": [],
|
|
"steps": [
|
|
{
|
|
"id": "build-dotnet:run",
|
|
"label": "Build .NET Projects",
|
|
"command": "dotnet",
|
|
"args": [
|
|
"build"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "dotnet",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "all",
|
|
"label": "Full Release Build \u2726",
|
|
"description": "Sidecar \u2192 Web \u2192 WebGateway \u2192 Tauri, in dependency order",
|
|
"group": "Build",
|
|
"dependsOn": [
|
|
"sidecar",
|
|
"web",
|
|
"webgateway",
|
|
"tauri"
|
|
],
|
|
"steps": []
|
|
},
|
|
{
|
|
"id": "run-gateway-dev",
|
|
"label": "Run WebGateway Server (Dev)",
|
|
"description": "Start HTTP gateway via \u0027dotnet run\u0027 at http://localhost:5180",
|
|
"group": "Dev",
|
|
"dependsOn": [],
|
|
"steps": [
|
|
{
|
|
"id": "run-gateway-dev:run",
|
|
"label": "Run WebGateway Server (Dev)",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/run-webgateway.ps1",
|
|
"-Mode",
|
|
"Dev"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "dotnet",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "run-gateway-prod",
|
|
"label": "Run WebGateway Server (Output)",
|
|
"description": "Start compiled gateway from output/webgateway at http://localhost:5180",
|
|
"group": "Dev",
|
|
"dependsOn": [],
|
|
"steps": [
|
|
{
|
|
"id": "run-gateway-prod:run",
|
|
"label": "Run WebGateway Server (Output)",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/run-webgateway.ps1",
|
|
"-Mode",
|
|
"Output"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "dotnet",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "test",
|
|
"label": "Run Smoke Tests",
|
|
"description": "Run all ~80 integration tests in Journal.SmokeTests",
|
|
"group": "Test",
|
|
"dependsOn": [],
|
|
"steps": [
|
|
{
|
|
"id": "test:run",
|
|
"label": "Run Smoke Tests",
|
|
"command": "dotnet",
|
|
"args": [
|
|
"run",
|
|
"--project",
|
|
"Journal.SmokeTests/Journal.SmokeTests.csproj"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "dotnet",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "gate",
|
|
"label": "Run Migration Gate",
|
|
"description": "Full build \u002B smoke tests \u002B parity check",
|
|
"group": "Test",
|
|
"dependsOn": [],
|
|
"steps": [
|
|
{
|
|
"id": "gate:run",
|
|
"label": "Run Migration Gate",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/migration-gate.ps1"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "dotnet",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "nuget-export",
|
|
"label": "Export NuGet Cache",
|
|
"description": "Prime and export .nuget cache to zip for offline use",
|
|
"group": "Cache",
|
|
"dependsOn": [],
|
|
"steps": [
|
|
{
|
|
"id": "nuget-export:run",
|
|
"label": "Export NuGet Cache",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/nuget-export-cache.ps1"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "dotnet",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "nuget-import",
|
|
"label": "Import NuGet Cache",
|
|
"description": "Import cache zip and validate restore",
|
|
"group": "Cache",
|
|
"dependsOn": [],
|
|
"steps": [
|
|
{
|
|
"id": "nuget-import:run",
|
|
"label": "Import NuGet Cache",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/nuget-import-cache.ps1"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "dotnet",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "npm-clean",
|
|
"label": "Clean Node Modules",
|
|
"description": "Remove Journal.App node_modules (kills node/tauri first)",
|
|
"group": "System",
|
|
"dependsOn": [],
|
|
"steps": [
|
|
{
|
|
"id": "npm-clean:run",
|
|
"label": "Clean Node Modules",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/npm-clean.ps1"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "node",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "npm",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "stage-output",
|
|
"label": "Stage Output Bundle",
|
|
"description": "Publish sidecar \u002B web \u002B webgateway \u002B tauri, then stage journalapp.exe into output/",
|
|
"group": "Build",
|
|
"dependsOn": [],
|
|
"steps": [
|
|
{
|
|
"id": "stage-output:run",
|
|
"label": "Stage Output Bundle",
|
|
"command": "pwsh",
|
|
"args": [
|
|
"-NoProfile",
|
|
"-ExecutionPolicy",
|
|
"Bypass",
|
|
"-File",
|
|
"scripts/publish-output.ps1"
|
|
],
|
|
"workingDir": ".",
|
|
"action": null,
|
|
"actionArgs": [],
|
|
"requires": [
|
|
{
|
|
"tool": "python",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "dotnet",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "node",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "npm",
|
|
"installPolicy": "Prompt"
|
|
},
|
|
{
|
|
"tool": "cargo",
|
|
"installPolicy": "Prompt"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"env": [
|
|
{
|
|
"key": "JOURNAL_AI_PROVIDER",
|
|
"description": "AI provider bridge mode",
|
|
"default": "none",
|
|
"options": [
|
|
"none",
|
|
"python-sidecar"
|
|
]
|
|
},
|
|
{
|
|
"key": "JOURNAL_LOG_LEVEL",
|
|
"description": "Log verbosity for C# backend",
|
|
"default": "warning",
|
|
"options": [
|
|
"trace",
|
|
"debug",
|
|
"information",
|
|
"warning",
|
|
"error",
|
|
"critical"
|
|
]
|
|
},
|
|
{
|
|
"key": "JOURNAL_NLP_BACKEND",
|
|
"description": "Python NLP backend selection",
|
|
"default": "auto",
|
|
"options": [
|
|
"auto",
|
|
"spacy",
|
|
"fallback"
|
|
]
|
|
},
|
|
{
|
|
"key": "JOURNAL_PROJECT_ROOT",
|
|
"description": "Override project root path (blank = auto-detect)",
|
|
"default": "",
|
|
"options": []
|
|
},
|
|
{
|
|
"key": "JOURNAL_VAULT_DIR",
|
|
"description": "Override vault directory path",
|
|
"default": "",
|
|
"options": []
|
|
},
|
|
{
|
|
"key": "JOURNAL_DATA_DIR",
|
|
"description": "Override decrypted data directory path",
|
|
"default": "",
|
|
"options": []
|
|
}
|
|
],
|
|
"toolchains": {
|
|
"python": {
|
|
"executable": "python3.14",
|
|
"windowsExecutable": "py",
|
|
"launcherVersion": "-3.14",
|
|
"venvDir": ".venv",
|
|
"profiles": [
|
|
{
|
|
"id": "cpu",
|
|
"label": "CPU only (default)",
|
|
"requirementsFile": "requirements_cpu_only.txt",
|
|
"extraIndexUrl": "https://download.pytorch.org/whl/cpu",
|
|
"postInstallCommands": []
|
|
},
|
|
{
|
|
"id": "gpu",
|
|
"label": "GPU / CUDA",
|
|
"requirementsFile": "requirements_gpu.txt",
|
|
"extraIndexUrl": null,
|
|
"postInstallCommands": []
|
|
},
|
|
{
|
|
"id": "nlp",
|
|
"label": "NLP / spaCy (optional)",
|
|
"requirementsFile": "requirements_nlp_optional.txt",
|
|
"extraIndexUrl": null,
|
|
"postInstallCommands": [
|
|
"spacy download en_core_web_sm"
|
|
]
|
|
}
|
|
],
|
|
"pipScript": "scripts/pip-min.ps1"
|
|
},
|
|
"node": {
|
|
"packageManager": "npm",
|
|
"workingDir": "Journal.App"
|
|
}
|
|
},
|
|
"tooling": null,
|
|
"project": null,
|
|
"debug": null
|
|
}
|