Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 19 additions & 9 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,28 @@ jobs:
with:
fetch-depth: 0

- name: Set up pnpm
uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
with:
version: 11.22.0

- name: Set up Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: docs/package-lock.json
cache: pnpm
cache-dependency-path: docs/pnpm-lock.yaml

- name: Install dependencies
run: npm ci
run: pnpm install --frozen-lockfile

- name: Check links and doc IDs
run: npm run test
run: pnpm run test

- name: Build site
env:
CI: true
run: npm run build
run: pnpm run build

deploy:
name: Deploy to GitHub Pages
Expand All @@ -78,18 +83,23 @@ jobs:
- name: Checkout repository
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4

- name: Set up pnpm
uses: pnpm/action-setup@f40ffcd9367d9f12939873eb1018b921a783ffaa # v4
with:
version: 11.22.0

- name: Set up Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: docs/package-lock.json
cache: pnpm
cache-dependency-path: docs/pnpm-lock.yaml

- name: Install dependencies
run: npm ci
run: pnpm install --frozen-lockfile

- name: Build site
run: npm run build
run: pnpm run build

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4
Expand Down
8 changes: 8 additions & 0 deletions desktop/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,14 @@ Developer mode on with missing/invalid folder → blocking error in UI; no silen

---

## Local tools (`ode` CLI)

Headless CLI for AI assistants and scripts: profiles, form definitions, data export, form validation, custom app authoring and publishing, and Agent Skills. All output is JSON. Access is gated by the per-profile **Local tools** settings (`localToolsEnabled`, `localToolsAllowData`, `localToolsAllowAuthoring`, `localToolsAllowPush`). Shared logic lives in `src-tauri/src/local_api/`, and the CLI is `src-tauri/src/bin/ode.rs`.

The CLI writes `config.json` only for new profiles and developer-mode fields. Desktop merges those edits (`merge_external_changes`, called from `persist_config` and `sync_external_config`) and never overwrites them. See [docs/LOCAL_TOOLS.md](docs/LOCAL_TOOLS.md).

---

## Bridge and bundles

- **Contract source of truth:** [`formulus/src/webview/FormulusInterfaceDefinition.ts`](../formulus/src/webview/FormulusInterfaceDefinition.ts).
Expand Down
368 changes: 368 additions & 0 deletions desktop/docs/LOCAL_TOOLS.md

Large diffs are not rendered by default.

127 changes: 127 additions & 0 deletions desktop/src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions desktop/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ version = "1.3.3"
description = "ODE Desktop"
authors = ["OpenDataEnsemble.org"]
edition = "2024"
default-run = "odedesktop"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

Expand All @@ -14,6 +15,11 @@ edition = "2024"
name = "odedesktop_lib"
crate-type = ["staticlib", "cdylib", "rlib"]

# Headless local-tools CLI (see desktop/docs/LOCAL_TOOLS.md).
[[bin]]
name = "ode"
path = "src/bin/ode.rs"

[build-dependencies]
tauri-build = { version = "2", features = [] }

Expand All @@ -39,4 +45,6 @@ tokio = { version = "1", features = ["sync", "time", "macros"] }
arrow = { version = "59", default-features = false, features = ["chrono-tz"] }
parquet = { version = "59", default-features = false, features = ["arrow", "snap"] }
jsonschema = "0.30"
clap = { version = "4", features = ["derive"] }
dirs = "6"

Loading
Loading