clinkx 1.1.2 → 1.2.0

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 (56) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +63 -12
  3. package/clinkx-workflows/dist/allowed-roots.js +2 -0
  4. package/clinkx-workflows/dist/allowed-roots.js.map +1 -1
  5. package/clinkx-workflows/dist/child-env.d.ts +3 -1
  6. package/clinkx-workflows/dist/child-env.js +6 -2
  7. package/clinkx-workflows/dist/child-env.js.map +1 -1
  8. package/clinkx-workflows/dist/config.d.ts +28 -5
  9. package/clinkx-workflows/dist/config.js +137 -20
  10. package/clinkx-workflows/dist/config.js.map +1 -1
  11. package/clinkx-workflows/dist/contained-file.js +9 -0
  12. package/clinkx-workflows/dist/contained-file.js.map +1 -1
  13. package/clinkx-workflows/dist/dashboard/session-log-identity.js +2 -1
  14. package/clinkx-workflows/dist/dashboard/session-log-identity.js.map +1 -1
  15. package/clinkx-workflows/dist/root-path-validation.d.ts +12 -0
  16. package/clinkx-workflows/dist/root-path-validation.js +63 -0
  17. package/clinkx-workflows/dist/root-path-validation.js.map +1 -0
  18. package/clinkx-workflows/dist/rosters.d.ts +1 -0
  19. package/clinkx-workflows/dist/rosters.js +16 -6
  20. package/clinkx-workflows/dist/rosters.js.map +1 -1
  21. package/clinkx-workflows/dist/server.js +5 -2
  22. package/clinkx-workflows/dist/server.js.map +1 -1
  23. package/clinkx-workflows/dist/state-schema.d.ts +13 -0
  24. package/clinkx-workflows/dist/state.d.ts +7 -1
  25. package/clinkx-workflows/dist/state.js +74 -13
  26. package/clinkx-workflows/dist/state.js.map +1 -1
  27. package/clinkx-workflows/dist/workflow-completion.d.ts +83 -0
  28. package/clinkx-workflows/dist/workflow-completion.js +250 -0
  29. package/clinkx-workflows/dist/workflow-completion.js.map +1 -0
  30. package/clinkx-workflows/dist/workflow-tools.d.ts +4 -3
  31. package/clinkx-workflows/dist/workflow-tools.js +341 -34
  32. package/clinkx-workflows/dist/workflow-tools.js.map +1 -1
  33. package/dist/allowed-roots.d.ts +1 -1
  34. package/dist/allowed-roots.js +124 -14
  35. package/dist/allowed-roots.js.map +1 -1
  36. package/dist/context-builder/config.d.ts +1 -0
  37. package/dist/context-builder/config.js +21 -9
  38. package/dist/context-builder/config.js.map +1 -1
  39. package/dist/context-builder/mutation-lock.d.ts +4 -0
  40. package/dist/context-builder/mutation-lock.js +7 -1
  41. package/dist/context-builder/mutation-lock.js.map +1 -1
  42. package/dist/context-builder/storage.d.ts +10 -2
  43. package/dist/context-builder/storage.js +213 -16
  44. package/dist/context-builder/storage.js.map +1 -1
  45. package/dist/dashboard-cli.d.ts +6 -0
  46. package/dist/dashboard-cli.js +8 -29
  47. package/dist/dashboard-cli.js.map +1 -1
  48. package/dist/registry.d.ts +1 -1
  49. package/dist/registry.js +5 -1
  50. package/dist/registry.js.map +1 -1
  51. package/dist/server.js +12 -5
  52. package/dist/server.js.map +1 -1
  53. package/docs/configuration.md +157 -12
  54. package/docs/security.md +3 -0
  55. package/package.json +1 -1
  56. package/scripts/provider-doctor-core.mjs +21 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.2.0 — 2026-10-20
4
+
5
+ ### Upgrade notes
6
+
7
+ - There is no automatic migration. Durable data now lives under `~/.clinkx`; data written by earlier builds stays under `~/.local/state/clinkx-workflows` and `~/.local/state/clinkx/context-builder/runs` until you act. Pick one path from [Migrating to `CLINKX_HOME`](docs/configuration.md#migrating-to-clinkx_home): start fresh and keep the old directories as an archive; copy workflow state and user configuration into `~/.clinkx` with producers stopped, merging rather than overwriting; or pin the old directories with `CLINKX_WORKFLOWS_STATE_DIR` and `CLINKX_CONTEXT_BUILDER_RUNS_DIR`. Do not move `context-builder/runs`.
8
+ - Runs moved from the previous default stay non-resumable because the state path is part of their resume fingerprint. `CLINKX_HOME` itself is not part of that fingerprint.
9
+ - A dashboard that still mounts or reads the old directories shows only runs written before the upgrade. Point it at the producers' current directories and recreate the dashboard companion or local stack.
10
+ - `CLINKX_ALLOWED_ROOTS` entries that are dangling symlinks, inaccessible, or neither a directory nor a regular file now fail startup instead of being kept leniently. Fix or remove them before upgrading.
11
+
12
+ ### Added
13
+
14
+ - `workflow_run_wait({run_id, expected_execution_id?})` observes a local workflow execution until its cleanup fence, for a fixed 30-second server-owned budget per call, and returns the metadata-only status projection plus `wait:{outcome, execution_id?, budget_ms, elapsed_ms}`. Outcomes are `settled`, `budget_elapsed`, `not_owned`, `orphaned`, `not_found`, `identity_changed` and `identity_unavailable`; they are observation outcomes, not new run statuses. Re-arm `budget_elapsed` with the same pin; cancelling a wait detaches only that observation.
15
+ - Workflow executions carry an opaque `execution_id`: on the async `run_workflow` acknowledgement, and in one trailing identity block `{resolved_roster?, execution_id?}` on blocking `run_workflow` and `resume_workflow` results. It is a fence, not a capability. `workflow_run_status` accepts an optional `expected_execution_id`; a pinned read of a different or unprovable execution returns `isError` `identity_changed` / `identity_unavailable` with no result, and a persistently changing active state returns the retryable `state_read_unstable`. Unpinned calls are unchanged.
16
+ - The execution id is persisted in `state.json` (optional `executionId`, `state_version` stays 1), so a pin settles from disk after a ClinkX restart or eviction from the 128-entry settled window when the run is terminal, stamped with that id, carries a matching `executionCompletedAt` witness, and its `run.lock` is released. A run last written by an older ClinkX (which carries the id forward without the witness) fails closed as `identity_unavailable` instead of settling on that build's outcome. Contract: `.ai/plans/workflow-completion-wait/CONTRACT.md`.
17
+
18
+ ### Changed
19
+
20
+ - Durable ClinkX data now defaults to `~/.clinkx`, configurable with `CLINKX_HOME` (absolute; its canonical identity must not be a filesystem root, the effective home directory, or an ancestor of that home such as `/Users`). Workflow state moves from `~/.local/state/clinkx-workflows`; context-builder runs move from `~/.local/state/clinkx/context-builder/runs` to `~/.clinkx/context-builder/runs`; user adapters and rosters search `~/.clinkx/{adapters,rosters}` before the retained XDG config tier. Per-area overrides still take precedence, and temporary scratch paths are unchanged.
21
+ - `XDG_STATE_HOME` no longer controls durable storage. Standalone workflow children receive resolved `CLINKX_HOME` and `CLINKX_WORKFLOWS_STATE_DIR` after environment scrubbing. The parent's context-run override is scrubbed; child context artifacts use `CLINKX_HOME/context-builder/runs`.
22
+ - State and artifact roots remain automatically admitted even with an explicit workspace allowlist. Under the consolidated default, direct `clink` references can read adapters, rosters and context artifacts without context-builder secret filtering. Use a separate state override to keep configuration outside the automatic state grant. Deleting the whole ClinkX home also deletes user adapters and rosters.
23
+ - `CLINKX_WORKFLOWS_STATE_DIR` and `CLINKX_WORKFLOWS_ARTIFACTS_DIR` reject a filesystem root or an alias of one at every entrypoint, including the standalone workflow server and an unset artifacts override whose TMPDIR-derived default resolves to one; before, only the root server rejected it. A relative `CLINKX_WORKFLOWS_ARTIFACTS_DIR` is now rejected instead of resolving against the process cwd. A value equal to the effective home, an alias of it, or an ancestor of it is still accepted, but both STDIO servers log one startup warning because it is auto-admitted as an artifact-only allowed root. Generic `CLINKX_ALLOWED_ROOTS` entries and `CLINKX_CONTEXT_BUILDER_RUNS_DIR` rules are unchanged. See the storage-root policy table in `docs/configuration.md`.
24
+ - A `CLINKX_ALLOWED_ROOTS` entry that names an existing regular file is an exact-file grant: it resolves to the canonical file and admits only that file, not its siblings, name prefixes, or child paths. A dangling symlink, an inaccessible path (`EACCES`, `EPERM`, `ENOTDIR`, `ELOOP`), or an entry that is neither a directory nor a regular file fails startup with `CLINKX_ALLOWED_ROOTS entry "<entry>" is unusable: <reason>. Fix or remove this entry from CLINKX_ALLOWED_ROOTS.` (`-32602` on tool paths). Nonexistent plain entries are still accepted. Automatically produced state and artifact roots stay directory-only.
25
+ - The local and companion dashboard Compose files default the state and context-run bind sources to `${HOME}/.clinkx` and `${HOME}/.clinkx/context-builder/runs`. The workspace mount stays required, the sources must already exist, and the cloud file keeps explicit sources. One gateway deployment accepts one live companion; a second gets HTTP 409. `DASHBOARD_DEPLOYMENT_SLUG` only names Docker resources on one host.
26
+ - When the adapter registry fails to load on a JSON syntax error, `provider_doctor` names the broken file by searching in registry order: `CLINKX_CONFIG_PATH` when set, otherwise `$CLINKX_HOME/adapters`, then the XDG config tier, then the packaged adapters. `scripts/verified-repair/qualify-installed.mjs` derives its state directory from `getStateDir()` instead of a fixed path.
27
+
28
+ ### Fixed
29
+
30
+ - Home validation rejects symlink aliases to the effective home or filesystem root, including aliases in the default `.clinkx` path. Valid narrow symlinks and nonexistent first-run directories remain supported; accepted spelling is preserved for resume identity.
31
+ - Individual workspace, state, artifact and context-run roots reject commas in supplied, canonical and prospective canonical paths before allow-root serialization. Relevant path checks run before reconciliation scheduling or context-directory creation. These checks are snapshots, not protection against later symlink retargeting.
32
+ - A workflow context cache entry (`wfctx-*`) moved from another runs root no longer blocks its cache id. Its manifest names the old location, so it can never be admitted; eviction or a promotion conflict now renames it to `.stale-<runId>-<epochms>-<hex>`, the call rebuilds once, and the next identical call hits. Quarantined directories are deleted after the temp TTL (`min(cache TTL, 3600s)`). `wfpre-*`, `ctx_*` and named runs are not touched.
33
+
3
34
  ## 1.1.2 — 2026-10-09
4
35
 
5
36
  ### Added
package/README.md CHANGED
@@ -66,7 +66,8 @@ ClinkX starts the Codex CLI, sends the prompt and the file references, and retur
66
66
  | `workflow_verification_attach` | Re-inspects proof with the original owner-held digest and records its historical coverage on a workflow run. |
67
67
  | `list_workflows` | Lists the available workflows, CLIs, and roster presets. |
68
68
  | `run_workflow` | Starts a multi-stage workflow. Runs in blocking mode by default, or in the background with `async: true`. |
69
- | `workflow_run_status` | Reports the progress and result of a workflow run. |
69
+ | `workflow_run_status` | Reports persisted progress and results; optional `expected_execution_id` guards the selected local execution. |
70
+ | `workflow_run_wait` | Observes local execution completion for up to 30 seconds without cancelling the worker when observation stops. |
70
71
  | `resume_workflow` | Continues a workflow run that stopped before completion. |
71
72
  | `cancel_workflow` | Cancels a workflow run. |
72
73
  | `progress_report_start`, `progress_report_update`, `progress_report_get`, `progress_report_list` | Keep a live progress report that the dashboard shows. |
@@ -114,10 +115,11 @@ The `conf/adapters/hapi/` directory in the package holds optional templates that
114
115
  ClinkX reads adapter JSON files from these locations, in this order. ClinkX uses the first file with a given `name`.
115
116
 
116
117
  1. `CLINKX_CONFIG_PATH`, a file or a directory. When you set it, ClinkX reads only this location and does not load the included adapters. The location must also contain a `codex` adapter with a `json` role, or you must set `CLINKX_WORKFLOWS_CONTEXT_PREFLIGHT_ENABLED=false`.
117
- 2. `${XDG_CONFIG_HOME:-~/.config}/clinkx/adapters/*.json`.
118
- 3. The `conf/adapters/` directory inside the installed package.
118
+ 2. `${CLINKX_HOME:-~/.clinkx}/adapters/*.json`.
119
+ 3. `${XDG_CONFIG_HOME:-~/.config}/clinkx/adapters/*.json`.
120
+ 4. The `conf/adapters/` directory inside the installed package.
119
121
 
120
- To change an included adapter, copy its file to `~/.config/clinkx/adapters/` and edit the copy. The copy replaces the included file completely. ClinkX does not merge the two files. After you upgrade ClinkX, compare your copy with the new included file. Copy the new file again if necessary.
122
+ To change an included adapter, copy its file to `${CLINKX_HOME:-~/.clinkx}/adapters/` (or `~/.config/clinkx/adapters/`) and edit the copy. The copy replaces the included file completely. ClinkX does not merge the two files. After you upgrade ClinkX, compare your copy with the new included file. Copy the new file again if necessary.
121
123
 
122
124
  To add a CLI that is not included, write a new file in the same directory. This example adapter returns the prompt unchanged:
123
125
 
@@ -138,10 +140,11 @@ These are the variables that most installations set. Every variable has a defaul
138
140
 
139
141
  | Variable | Default | Function |
140
142
  |---|---|---|
141
- | `CLINKX_ALLOWED_ROOTS` | Current directory of the server process | Comma-separated list of directories that tool calls can reference. Set it so path checks do not depend on the directory in which the client starts ClinkX. |
143
+ | `CLINKX_ALLOWED_ROOTS` | Current directory of the server process | Comma-separated list of directories that tool calls can reference. An entry that is an existing file allows only that file. An entry that is a broken symlink, that ClinkX cannot access, or that is neither a directory nor a file stops the server at startup. Set it so path checks do not depend on the directory in which the client starts ClinkX. |
142
144
  | `CLINKX_WORKFLOWS_WORKSPACE_ROOT` | Current directory of the server process | Workspace for workflows. Set it to the same directory as the allowed root. |
143
- | `CLINKX_WORKFLOWS_STATE_DIR` | `${XDG_STATE_HOME:-~/.local/state}/clinkx-workflows` | Directory for workflow runs, progress reports, and dashboard state. |
144
- | `CLINKX_CONTEXT_BUILDER_RUNS_DIR` | `${XDG_STATE_HOME:-~/.local/state}/clinkx/context-builder/runs` | Directory for `context_builder` runs and bundles. |
145
+ | `CLINKX_HOME` | `~/.clinkx` | Root directory for durable state, context-builder runs, user adapters and rosters. |
146
+ | `CLINKX_WORKFLOWS_STATE_DIR` | `${CLINKX_HOME:-~/.clinkx}` | Directory for workflow runs, progress reports, and dashboard state. |
147
+ | `CLINKX_CONTEXT_BUILDER_RUNS_DIR` | `${CLINKX_HOME:-~/.clinkx}/context-builder/runs` | Directory for `context_builder` runs and bundles. |
145
148
  | `CLINKX_CONFIG_PATH` | not set | Replaces the adapter search path. See [Adapter files](#adapter-files). |
146
149
  | `CLINKX_ROSTERS_PATH` | not set | Replaces the roster-preset search path. See [Workflows](#workflows). |
147
150
  | `CLINKX_MAX_CONCURRENT` | `5` | Maximum number of `clink` processes at one time. ClinkX returns an error when the limit is reached. It does not queue requests. |
@@ -156,6 +159,10 @@ These are the variables that most installations set. Every variable has a defaul
156
159
  | `CLINKX_APP_SERVER_ENABLED` | `false` | Set to `true` to publish the Codex app-server tools. |
157
160
  | `CLINKX_ELARIS_ENABLED` | `false` | Set to `true` to publish the Elaris tools. |
158
161
 
162
+ `CLINKX_HOME` resolves to the explicit value, then `$HOME/.clinkx`, then the OS account home plus `/.clinkx` when `HOME` is unset or empty. It must be absolute and must not be a filesystem root, the home directory itself, or a parent of the home directory (for example `/Users`). The root server validates it at startup even when per-area overrides are set. `CLINKX_WORKFLOWS_STATE_DIR` and `CLINKX_WORKFLOWS_ARTIFACTS_DIR` must be absolute and must not be a filesystem root. If one of them is the home directory or a parent of it, the server starts but logs a warning.
163
+
164
+ Earlier versions kept data in `${XDG_STATE_HOME:-~/.local/state}`. ClinkX does not move this data. To keep, copy, or pin the old data, see [Migrating to `CLINKX_HOME`](docs/configuration.md#migrating-to-clinkx_home).
165
+
159
166
  ClinkX writes only MCP JSON-RPC to stdout. All logs go to stderr. The server detects the exit of its parent process and stops.
160
167
 
161
168
  ## Workflows
@@ -211,14 +218,58 @@ A roster preset names the members, the chairman, and the context delegate of a c
211
218
  The included `default-council` preset uses Codex, Claude, and GLM as members and Codex as chairman. ClinkX reads these locations in this order and uses the first file with a given name:
212
219
 
213
220
  1. `CLINKX_ROSTERS_PATH`, a file or a directory. When you set it, ClinkX reads only this location.
214
- 2. `${XDG_CONFIG_HOME:-~/.config}/clinkx/rosters/*.json`.
215
- 3. The `conf/rosters/` directory inside the installed package.
221
+ 2. `${CLINKX_HOME:-~/.clinkx}/rosters/*.json`.
222
+ 3. `${XDG_CONFIG_HOME:-~/.config}/clinkx/rosters/*.json`.
223
+ 4. The `conf/rosters/` directory inside the installed package.
216
224
 
217
- To write your own preset, copy `conf/rosters/default-council.json` to `~/.config/clinkx/rosters/<name>.json` and edit the copy. The file name is the preset name. The preset name must match `^[a-z0-9][a-z0-9_-]{0,63}$`. A request that gives `roster` together with `members`, `chairman`, `chairman_model`, `chairman_effort`, or a non-empty `cb_delegate` returns error `-32602` and starts no run.
225
+ To write your own preset, copy `conf/rosters/default-council.json` to `${CLINKX_HOME:-~/.clinkx}/rosters/<name>.json` (or `~/.config/clinkx/rosters/<name>.json`) and edit the copy. The file name is the preset name. The preset name must match `^[a-z0-9][a-z0-9_-]{0,63}$`. A request that gives `roster` together with `members`, `chairman`, `chairman_model`, `chairman_effort`, or a non-empty `cb_delegate` returns error `-32602` and starts no run.
218
226
 
219
227
  ### Background runs
220
228
 
221
- Pass `async: true` to `run_workflow` to get a `run_id` immediately. Call `workflow_run_status` with that `run_id` to see the stage progress. Pass `include_result: true` to get the final result. Use `cancel_workflow` to stop a run. Completed runs stay on disk for the retention period given above.
229
+ Pass `async: true` to `run_workflow` to get a `run_id` and an opaque
230
+ `execution_id` immediately. Use the identity to wait for that execution:
231
+
232
+ ```json
233
+ {
234
+ "run_id": "my-council-run",
235
+ "expected_execution_id": "<execution_id from launch>"
236
+ }
237
+ ```
238
+
239
+ Call `workflow_run_wait` with those arguments. It returns persisted status metadata
240
+ and a `wait` block with `outcome`, optional `execution_id`, `budget_ms`, and
241
+ `elapsed_ms`. On `budget_elapsed`, repeat the wait with the same identity. On
242
+ `settled`, fetch `workflow_run_status` with the same arguments plus
243
+ `include_result: true` to obtain the final result. The wait has a fixed server-owned
244
+ 30-second budget; it takes no caller timeout input, and `budget_ms` always reports
245
+ that configured budget. Stopping a wait only detaches that observation. Use
246
+ `cancel_workflow` to stop the worker.
247
+
248
+ A blocking `run_workflow` and `resume_workflow` also return the `execution_id`, in
249
+ a trailing content block `{resolved_roster?, execution_id?}`. Use the returned id
250
+ as the pin. Leave the pin out of a first wait only when no id was returned; it then
251
+ binds to the latest local execution and returns its identity. The id is a fence,
252
+ not a capability: it only selects which execution a read must match.
253
+
254
+ `settled` witnesses completion and cleanup in the owning server process, followed
255
+ by an identity-checked persisted read. `not_owned`, `orphaned` and `not_found`
256
+ return immediately. `not_owned` requires explicit persisted status recovery;
257
+ `orphaned` and `not_found` require checking the run. A run that is still being
258
+ admitted can briefly report `not_found` to an unpinned wait. A rejected start or
259
+ resume never replaces an earlier execution's pin. Identity
260
+ errors (`identity_changed` or `identity_unavailable`) must be surfaced without
261
+ dropping the pin to fetch another execution's result. A pinned
262
+ `workflow_run_status` can return `state_read_unstable` when the state file keeps
263
+ changing during the read; retry it with the same pin after a short pause. The server retains up to 128
264
+ settled metadata identities without active readers, without result text. Active
265
+ executions are never evicted; active observations stay protected until their
266
+ request ends. Eligible inactive settled entries are evicted FIFO. Each run's
267
+ state also records its execution id, so after a restart or eviction a pinned
268
+ wait or status still settles once that execution's state is terminal and its
269
+ run lock is released. A pin on a run that is unfinished, or still locked (for
270
+ example by a crashed owner on another host), reports `identity_unavailable`. Waits do not keep workers alive
271
+ after server exit, and this tool does not promise unsolicited client wakeups.
272
+ Completed runs stay on disk for the retention period given above.
222
273
 
223
274
  ## Context bundles
224
275
 
@@ -247,7 +298,7 @@ npx -p clinkx clinkx-workflows-dashboard --port 4180
247
298
 
248
299
  The dashboard listens on `127.0.0.1` and `::1` and prints `http://localhost:<port>`. Passkey sign-in is the default. On the first start, the dashboard prints one enrollment code. Register a passkey with that code, then sign in. For local tests only, `CLINKX_WORKFLOWS_DASHBOARD_AUTH_MODE=none` disables sign-in.
249
300
 
250
- Point the dashboard at the same `CLINKX_WORKFLOWS_STATE_DIR` as the ClinkX server. If the two directories differ, the dashboard shows a different run set, often an empty one. If you set `CLINKX_CONTEXT_BUILDER_RUNS_DIR` for the server, set the same value for the dashboard.
301
+ Point the dashboard at the same `CLINKX_WORKFLOWS_STATE_DIR` as the ClinkX server. If the two directories differ, the dashboard shows a different run set, often an empty one. If you set `CLINKX_CONTEXT_BUILDER_RUNS_DIR` for the server, set the same value for the dashboard. If the dashboard shows only runs from before an upgrade, it still reads the old directories.
251
302
 
252
303
  The dashboard does not start, cancel, or approve anything. The data that it shows can contain prompts, outputs, and file contents from your workspace. Access is local and needs a passkey, but any process that runs as the same OS user can read the state directory.
253
304
 
@@ -1,5 +1,7 @@
1
1
  import { sep } from "node:path";
2
+ import { assertRootRepresentable } from "./root-path-validation.js";
2
3
  export function artifactOnlyEnvEntry(root) {
4
+ assertRootRepresentable(root, "Allowed root");
3
5
  return root.endsWith(sep) ? `${root}.` : `${root}${sep}.`;
4
6
  }
5
7
  //# sourceMappingURL=allowed-roots.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"allowed-roots.js","sourceRoot":"","sources":["../src/allowed-roots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"allowed-roots.js","sourceRoot":"","sources":["../src/allowed-roots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,uBAAuB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AAC5D,CAAC"}
@@ -3,7 +3,9 @@
3
3
  *
4
4
  * Builds a sanitized environment for the ClinkX child process:
5
5
  * 1. Start with process.env (inherit parent env)
6
- * 2. Scrub ALL CLINKX_* vars and config-discovery vars (XDG_CONFIG_HOME)
6
+ * 2. Scrub ALL CLINKX_* vars and config-discovery vars (XDG_CONFIG_HOME).
7
+ * The child inherits the parent's resolved CLINKX_HOME and
8
+ * CLINKX_WORKFLOWS_STATE_DIR, and CLINKX_CONFIG_PATH still replaces discovery when set.
7
9
  * 3. Re-inject ONLY explicit workflow-owned controls from config
8
10
  *
9
11
  * Baseline OS env (PATH, HOME, USER, LANG, TMPDIR) is NEVER scrubbed.
@@ -3,13 +3,15 @@
3
3
  *
4
4
  * Builds a sanitized environment for the ClinkX child process:
5
5
  * 1. Start with process.env (inherit parent env)
6
- * 2. Scrub ALL CLINKX_* vars and config-discovery vars (XDG_CONFIG_HOME)
6
+ * 2. Scrub ALL CLINKX_* vars and config-discovery vars (XDG_CONFIG_HOME).
7
+ * The child inherits the parent's resolved CLINKX_HOME and
8
+ * CLINKX_WORKFLOWS_STATE_DIR, and CLINKX_CONFIG_PATH still replaces discovery when set.
7
9
  * 3. Re-inject ONLY explicit workflow-owned controls from config
8
10
  *
9
11
  * Baseline OS env (PATH, HOME, USER, LANG, TMPDIR) is NEVER scrubbed.
10
12
  * Dead knobs (CLINKX_TIMEOUT_SECONDS, CLINKX_IDLE_TIMEOUT_*) are NEVER set.
11
13
  */
12
- import { CHILD_ENV_SCRUB_PREFIX, CHILD_ENV_SCRUB_EXTRA, DEAD_KNOBS, getChildMaxConcurrent, getChildMaxResponseChars, getChildMaxOutputBytes, getChildMaxPromptBytes, getChildConfigPath, getLogLevel, } from "./config.js";
14
+ import { CHILD_ENV_SCRUB_PREFIX, CHILD_ENV_SCRUB_EXTRA, DEAD_KNOBS, getChildMaxConcurrent, getChildMaxResponseChars, getChildMaxOutputBytes, getChildMaxPromptBytes, getChildConfigPath, getLogLevel, getClinkxHome, getStateDir, } from "./config.js";
13
15
  /**
14
16
  * Build a sanitized environment for the ClinkX child process.
15
17
  *
@@ -39,6 +41,8 @@ export function buildChildEnv(overrides) {
39
41
  env["CLINKX_MAX_PROMPT_BYTES"] = String(getChildMaxPromptBytes());
40
42
  env["CLINKX_ALLOWED_ROOTS"] = overrides.allowedRoots;
41
43
  env["CLINKX_LOG_LEVEL"] = overrides.logLevel ?? getLogLevel();
44
+ env["CLINKX_HOME"] = getClinkxHome();
45
+ env["CLINKX_WORKFLOWS_STATE_DIR"] = getStateDir();
42
46
  // Optional: workflow-owned config path
43
47
  const configPath = overrides.configPath ?? getChildConfigPath();
44
48
  if (configPath != null) {
@@ -1 +1 @@
1
- {"version":3,"file":"child-env.js","sourceRoot":"","sources":["../src/child-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,EACV,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,WAAW,GACZ,MAAM,aAAa,CAAC;AAQrB;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,SAA4B;IACxD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,UAAU,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,qBAAqB,CAAC,CAAC;IAE1D,wEAAwE;IACxE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,IAAI,IAAI;YAAE,SAAS;QAE5B,0BAA0B;QAC1B,IAAI,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC;YAAE,SAAS;QAErD,8BAA8B;QAC9B,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAElC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,+DAA+D;IAC/D,GAAG,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC/D,GAAG,CAAC,2BAA2B,CAAC,GAAG,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACtE,GAAG,CAAC,yBAAyB,CAAC,GAAG,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAClE,GAAG,CAAC,yBAAyB,CAAC,GAAG,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAClE,GAAG,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC;IACrD,GAAG,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,QAAQ,IAAI,WAAW,EAAE,CAAC;IAE9D,uCAAuC;IACvC,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,IAAI,kBAAkB,EAAE,CAAC;IAChE,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,oBAAoB,CAAC,GAAG,UAAU,CAAC;IACzC,CAAC;IAED,8CAA8C;IAC9C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"child-env.js","sourceRoot":"","sources":["../src/child-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,EACV,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAC;AAQrB;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,SAA4B;IACxD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,UAAU,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,qBAAqB,CAAC,CAAC;IAE1D,wEAAwE;IACxE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,IAAI,IAAI;YAAE,SAAS;QAE5B,0BAA0B;QAC1B,IAAI,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC;YAAE,SAAS;QAErD,8BAA8B;QAC9B,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAElC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,+DAA+D;IAC/D,GAAG,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC/D,GAAG,CAAC,2BAA2B,CAAC,GAAG,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACtE,GAAG,CAAC,yBAAyB,CAAC,GAAG,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAClE,GAAG,CAAC,yBAAyB,CAAC,GAAG,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAClE,GAAG,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC;IACrD,GAAG,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,QAAQ,IAAI,WAAW,EAAE,CAAC;IAC9D,GAAG,CAAC,aAAa,CAAC,GAAG,aAAa,EAAE,CAAC;IACrC,GAAG,CAAC,4BAA4B,CAAC,GAAG,WAAW,EAAE,CAAC;IAElD,uCAAuC;IACvC,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,IAAI,kBAAkB,EAAE,CAAC;IAChE,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,oBAAoB,CAAC,GAAG,UAAU,CAAC;IACzC,CAAC;IAED,8CAA8C;IAC9C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -71,11 +71,10 @@ export declare function observedInvocationPersistenceEnabled(env?: NodeJS.Proces
71
71
  * so the child may use them for artifact/state I/O but context_builder never
72
72
  * admits them as source roots.
73
73
  *
74
- * Performs NO validation of workspaceRoot: a cwd-derived root (see
75
- * resolveWorkspaceRoot's fallback) is passed through as-is — including "/",
76
- * which grants the child filesystem-wide reach. The only guardrail today is
77
- * the startup warning both servers emit when CLINKX_WORKFLOWS_WORKSPACE_ROOT
78
- * is unset.
74
+ * Validates directory identity and comma-separated representability, retaining
75
+ * the supplied spelling. Broad workspace roots remain accepted — including
76
+ * "/", which grants the child filesystem-wide reach. Both servers warn when
77
+ * CLINKX_WORKFLOWS_WORKSPACE_ROOT is unset.
79
78
  */
80
79
  export declare function deriveAllowedRoots(workspaceRoot: string, stateDir: string, artifactsDir: string): string;
81
80
  /** Command to spawn the owned ClinkX child. */
@@ -226,6 +225,12 @@ export declare function getMaxPromptBytes(): number;
226
225
  export declare function getLogLevel(): string;
227
226
  /** Age-based retention thresholds for persisted workflow run directories. */
228
227
  export declare function getRetentionConfig(): RetentionConfig;
228
+ export declare const CLINKX_HOME_ENV = "CLINKX_HOME";
229
+ /**
230
+ * Root directory for durable ClinkX data (default `~/.clinkx`).
231
+ * Order: `CLINKX_HOME`, then `$HOME/.clinkx`, then `userInfo().homedir/.clinkx`.
232
+ */
233
+ export declare function getClinkxHome(env?: NodeJS.ProcessEnv, accountHomeProvider?: () => string): string;
229
234
  /** Persistent workflow state directory. */
230
235
  export declare function getStateDir(env?: NodeJS.ProcessEnv, accountHomeProvider?: () => string): string;
231
236
  export declare const DASHBOARD_PROGRESS_REPORT_OVERRIDE_DIR_ENV = "CLINKX_WORKFLOWS_PROGRESS_REPORT_OVERRIDE_DIR";
@@ -243,6 +248,20 @@ export declare function getRunsDir(): string;
243
248
  export declare function getRunStateDir(runId: string): string;
244
249
  /** Disposable per-run artifacts directory. */
245
250
  export declare function getArtifactsDir(): string;
251
+ export declare const HOME_TREE_STORAGE_ROOT_ENV_VARS: readonly ["CLINKX_WORKFLOWS_STATE_DIR", "CLINKX_WORKFLOWS_ARTIFACTS_DIR"];
252
+ export interface HomeTreeStorageRootWarning {
253
+ readonly envVar: (typeof HOME_TREE_STORAGE_ROOT_ENV_VARS)[number];
254
+ readonly value: string;
255
+ readonly relation: "home" | "home_ancestor";
256
+ readonly message: string;
257
+ }
258
+ /**
259
+ * Explicit state/artifacts overrides that equal or contain the effective HOME.
260
+ * They stay accepted for compatibility, but each is auto-admitted as an
261
+ * artifact-only allowed root, so callers (the servers) warn at startup.
262
+ * Pure: config.ts cannot log (logger.ts imports it).
263
+ */
264
+ export declare function homeTreeStorageRootWarnings(env?: NodeJS.ProcessEnv, accountHomeProvider?: () => string): HomeTreeStorageRootWarning[];
246
265
  /**
247
266
  * CLINKX_* env vars to scrub from child process environment before re-injection.
248
267
  * All CLINKX_* vars are scrubbed; only explicit workflow-owned values are re-injected.
@@ -251,6 +270,8 @@ export declare const CHILD_ENV_SCRUB_PREFIX = "CLINKX_";
251
270
  /**
252
271
  * Config-discovery vars to also scrub (prevent child from inheriting parent's
253
272
  * config resolution path, which would bypass workflow-owned adapter bundles).
273
+ * The child inherits the parent's resolved CLINKX_HOME, and CLINKX_CONFIG_PATH
274
+ * still replaces discovery when set.
254
275
  */
255
276
  export declare const CHILD_ENV_SCRUB_EXTRA: readonly ["XDG_CONFIG_HOME"];
256
277
  /**
@@ -267,6 +288,8 @@ export declare const CHILD_ENV_REINJECT_MAP: {
267
288
  readonly configPath: "CLINKX_CONFIG_PATH";
268
289
  readonly allowedRoots: "CLINKX_ALLOWED_ROOTS";
269
290
  readonly logLevel: "CLINKX_LOG_LEVEL";
291
+ readonly clinkxHome: "CLINKX_HOME";
292
+ readonly stateDir: "CLINKX_WORKFLOWS_STATE_DIR";
270
293
  };
271
294
  /**
272
295
  * Baseline OS env vars that are never scrubbed from the child.
@@ -34,6 +34,7 @@ import { isIP } from "node:net";
34
34
  import { userInfo } from "node:os";
35
35
  import { isAbsolute, join, parse, resolve } from "node:path";
36
36
  import { artifactOnlyEnvEntry } from "./allowed-roots.js";
37
+ import { assertRootRepresentable, directoryIdentity, isFilesystemRootIdentity, isStrictAncestorPath, } from "./root-path-validation.js";
37
38
  export const DEFAULT_DASHBOARD_MAX_STATE_BYTES = 16_777_216;
38
39
  export const MIN_DASHBOARD_MAX_STATE_BYTES = 1_048_576;
39
40
  export const MAX_DASHBOARD_MAX_STATE_BYTES = 67_108_864;
@@ -91,6 +92,7 @@ export const DEFAULT_DASHBOARD_PORT = 4180;
91
92
  export function resolveWorkspaceRoot() {
92
93
  const explicit = process.env["CLINKX_WORKFLOWS_WORKSPACE_ROOT"];
93
94
  if (explicit != null && explicit !== "") {
95
+ assertRootRepresentable(explicit, "CLINKX_WORKFLOWS_WORKSPACE_ROOT");
94
96
  try {
95
97
  return realpathSync(resolve(explicit));
96
98
  }
@@ -101,6 +103,7 @@ export function resolveWorkspaceRoot() {
101
103
  // Silent fallback — this module cannot log (logger.ts imports config.js; circular).
102
104
  // Both servers (createServer, createWorkflowServer) warn at startup via
103
105
  // hasExplicitWorkspaceRoot() when this cwd fallback is in effect.
106
+ assertRootRepresentable(process.cwd(), "Workflow workspace root");
104
107
  return resolve(process.cwd());
105
108
  }
106
109
  /** Whether workspace root was explicitly configured. */
@@ -131,13 +134,13 @@ export function observedInvocationPersistenceEnabled(env = process.env) {
131
134
  * so the child may use them for artifact/state I/O but context_builder never
132
135
  * admits them as source roots.
133
136
  *
134
- * Performs NO validation of workspaceRoot: a cwd-derived root (see
135
- * resolveWorkspaceRoot's fallback) is passed through as-is — including "/",
136
- * which grants the child filesystem-wide reach. The only guardrail today is
137
- * the startup warning both servers emit when CLINKX_WORKFLOWS_WORKSPACE_ROOT
138
- * is unset.
137
+ * Validates directory identity and comma-separated representability, retaining
138
+ * the supplied spelling. Broad workspace roots remain accepted — including
139
+ * "/", which grants the child filesystem-wide reach. Both servers warn when
140
+ * CLINKX_WORKFLOWS_WORKSPACE_ROOT is unset.
139
141
  */
140
142
  export function deriveAllowedRoots(workspaceRoot, stateDir, artifactsDir) {
143
+ assertRootRepresentable(workspaceRoot, "CLINKX_WORKFLOWS_WORKSPACE_ROOT");
141
144
  const roots = [
142
145
  workspaceRoot,
143
146
  artifactOnlyEnvEntry(stateDir),
@@ -511,28 +514,28 @@ export function getRetentionConfig() {
511
514
  retainSucceededDays: envNonNegativeInt("CLINKX_WORKFLOWS_RETAIN_SUCCEEDED_DAYS", DEFAULT_RETAIN_SUCCEEDED_DAYS),
512
515
  };
513
516
  }
514
- /** Persistent workflow state directory. */
515
- export function getStateDir(env = process.env, accountHomeProvider = () => userInfo().homedir) {
516
- const explicit = env["CLINKX_WORKFLOWS_STATE_DIR"];
517
+ export const CLINKX_HOME_ENV = "CLINKX_HOME";
518
+ /**
519
+ * Root directory for durable ClinkX data (default `~/.clinkx`).
520
+ * Order: `CLINKX_HOME`, then `$HOME/.clinkx`, then `userInfo().homedir/.clinkx`.
521
+ */
522
+ export function getClinkxHome(env = process.env, accountHomeProvider = () => userInfo().homedir) {
523
+ const explicit = env[CLINKX_HOME_ENV];
517
524
  if (explicit != null && explicit !== "") {
518
525
  if (!isAbsolute(explicit)) {
519
- throw new Error(`CLINKX_WORKFLOWS_STATE_DIR must be an absolute path; got ${JSON.stringify(explicit)}`);
526
+ throw new Error(`CLINKX_HOME must be an absolute path; got ${JSON.stringify(explicit)}`);
520
527
  }
528
+ validateClinkxHome(explicit, effectiveHomeCandidate(env, accountHomeProvider));
521
529
  return explicit;
522
530
  }
523
- const xdgState = env["XDG_STATE_HOME"];
524
- if (xdgState != null && xdgState !== "") {
525
- if (!isAbsolute(xdgState)) {
526
- throw new Error(`XDG_STATE_HOME must be an absolute path when used for workflow state; got ${JSON.stringify(xdgState)}`);
527
- }
528
- return join(xdgState, "clinkx-workflows");
529
- }
530
531
  const configuredHome = env["HOME"];
531
532
  if (configuredHome != null && configuredHome !== "") {
532
533
  if (!isAbsolute(configuredHome)) {
533
- throw new Error(`HOME must be an absolute path when used for workflow state; got ${JSON.stringify(configuredHome)}`);
534
+ throw new Error(`HOME must be an absolute path when used for CLINKX_HOME; got ${JSON.stringify(configuredHome)}`);
534
535
  }
535
- return join(configuredHome, ".local", "state", "clinkx-workflows");
536
+ const selected = join(configuredHome, ".clinkx");
537
+ validateClinkxHome(selected, configuredHome);
538
+ return selected;
536
539
  }
537
540
  const accountHome = accountHomeProvider();
538
541
  const resolvedAccountHome = accountHome === "" ? "" : resolve(accountHome);
@@ -541,7 +544,54 @@ export function getStateDir(env = process.env, accountHomeProvider = () => userI
541
544
  resolvedAccountHome === parse(resolvedAccountHome).root) {
542
545
  throw new Error(`OS account home must be a non-empty absolute non-root path; got ${JSON.stringify(accountHome)}`);
543
546
  }
544
- return join(accountHome, ".local", "state", "clinkx-workflows");
547
+ const selected = join(accountHome, ".clinkx");
548
+ validateClinkxHome(selected, accountHome);
549
+ return selected;
550
+ }
551
+ function effectiveHomeCandidate(env, accountHomeProvider) {
552
+ const configured = env["HOME"];
553
+ if (configured != null && configured !== "" && isAbsolute(configured)) {
554
+ return configured;
555
+ }
556
+ try {
557
+ return accountHomeProvider();
558
+ }
559
+ catch {
560
+ return "";
561
+ }
562
+ }
563
+ function validateClinkxHome(selected, home) {
564
+ const identity = assertRootRepresentable(selected, "CLINKX_HOME");
565
+ if (isFilesystemRootIdentity(identity)) {
566
+ throw new Error(`CLINKX_HOME must not be a filesystem root; got ${JSON.stringify(selected)}`);
567
+ }
568
+ if (home === "" || !isAbsolute(home)) {
569
+ return;
570
+ }
571
+ const homeCanonical = directoryIdentity(home, "HOME").canonical;
572
+ if (identity.canonical === homeCanonical) {
573
+ throw new Error(`CLINKX_HOME must not be the home directory; got ${JSON.stringify(selected)}`);
574
+ }
575
+ if (isStrictAncestorPath(identity.canonical, homeCanonical)) {
576
+ throw new Error(`CLINKX_HOME must not be an ancestor of the home directory; got ${JSON.stringify(selected)}`);
577
+ }
578
+ }
579
+ function assertNotFilesystemRoot(selected, envVar) {
580
+ if (isFilesystemRootIdentity(assertRootRepresentable(selected, envVar))) {
581
+ throw new Error(`${envVar} must not be a filesystem root; use an absolute subdirectory; got ${JSON.stringify(selected)}`);
582
+ }
583
+ }
584
+ /** Persistent workflow state directory. */
585
+ export function getStateDir(env = process.env, accountHomeProvider = () => userInfo().homedir) {
586
+ const explicit = env["CLINKX_WORKFLOWS_STATE_DIR"];
587
+ if (explicit != null && explicit !== "") {
588
+ if (!isAbsolute(explicit)) {
589
+ throw new Error(`CLINKX_WORKFLOWS_STATE_DIR must be an absolute path; got ${JSON.stringify(explicit)}`);
590
+ }
591
+ assertNotFilesystemRoot(explicit, "CLINKX_WORKFLOWS_STATE_DIR");
592
+ return explicit;
593
+ }
594
+ return getClinkxHome(env, accountHomeProvider);
545
595
  }
546
596
  export const DASHBOARD_PROGRESS_REPORT_OVERRIDE_DIR_ENV = "CLINKX_WORKFLOWS_PROGRESS_REPORT_OVERRIDE_DIR";
547
597
  /**
@@ -568,8 +618,71 @@ export function getRunStateDir(runId) {
568
618
  }
569
619
  /** Disposable per-run artifacts directory. */
570
620
  export function getArtifactsDir() {
621
+ const explicit = process.env["CLINKX_WORKFLOWS_ARTIFACTS_DIR"];
622
+ if (explicit != null && explicit !== "") {
623
+ if (!isAbsolute(explicit)) {
624
+ throw new Error(`CLINKX_WORKFLOWS_ARTIFACTS_DIR must be an absolute path; got ${JSON.stringify(explicit)}`);
625
+ }
626
+ assertNotFilesystemRoot(explicit, "CLINKX_WORKFLOWS_ARTIFACTS_DIR");
627
+ return explicit;
628
+ }
571
629
  const tmpdir = process.env["TMPDIR"] ?? "/tmp";
572
- return envStr("CLINKX_WORKFLOWS_ARTIFACTS_DIR", `${tmpdir}/clinkx-workflows/artifacts`);
630
+ const selected = `${tmpdir}/clinkx-workflows/artifacts`;
631
+ if (isFilesystemRootIdentity(assertRootRepresentable(selected, "CLINKX_WORKFLOWS_ARTIFACTS_DIR"))) {
632
+ throw new Error(`CLINKX_WORKFLOWS_ARTIFACTS_DIR is unset and its TMPDIR-derived default ${JSON.stringify(selected)} ` +
633
+ "resolves to a filesystem root; set CLINKX_WORKFLOWS_ARTIFACTS_DIR to an absolute subdirectory");
634
+ }
635
+ return selected;
636
+ }
637
+ export const HOME_TREE_STORAGE_ROOT_ENV_VARS = [
638
+ "CLINKX_WORKFLOWS_STATE_DIR",
639
+ "CLINKX_WORKFLOWS_ARTIFACTS_DIR",
640
+ ];
641
+ /**
642
+ * Explicit state/artifacts overrides that equal or contain the effective HOME.
643
+ * They stay accepted for compatibility, but each is auto-admitted as an
644
+ * artifact-only allowed root, so callers (the servers) warn at startup.
645
+ * Pure: config.ts cannot log (logger.ts imports it).
646
+ */
647
+ export function homeTreeStorageRootWarnings(env = process.env, accountHomeProvider = () => userInfo().homedir) {
648
+ const home = effectiveHomeCandidate(env, accountHomeProvider);
649
+ if (home === "" || !isAbsolute(home))
650
+ return [];
651
+ let homeCanonical;
652
+ try {
653
+ homeCanonical = directoryIdentity(home, "HOME").canonical;
654
+ }
655
+ catch {
656
+ return [];
657
+ }
658
+ const warnings = [];
659
+ for (const envVar of HOME_TREE_STORAGE_ROOT_ENV_VARS) {
660
+ const value = env[envVar];
661
+ if (value == null || value === "" || !isAbsolute(value))
662
+ continue;
663
+ let canonical;
664
+ try {
665
+ canonical = directoryIdentity(value, envVar).canonical;
666
+ }
667
+ catch {
668
+ continue;
669
+ }
670
+ const relation = canonical === homeCanonical
671
+ ? "home"
672
+ : isStrictAncestorPath(canonical, homeCanonical) ? "home_ancestor" : undefined;
673
+ if (relation == null)
674
+ continue;
675
+ warnings.push({
676
+ envVar,
677
+ value,
678
+ relation,
679
+ message: `${envVar}=${JSON.stringify(value)} is ${relation === "home" ? "the home directory" : "an ancestor of the home directory"}; ` +
680
+ "it is auto-admitted as an artifact-only allowed root, so any file in that tree can be passed as a direct file reference " +
681
+ "that subprocess CLIs read, and ClinkX child processes may write anywhere in that tree. " +
682
+ "Set it to a dedicated absolute subdirectory.",
683
+ });
684
+ }
685
+ return warnings;
573
686
  }
574
687
  // ---------------------------------------------------------------------------
575
688
  // Child env scrub/reinject constants
@@ -582,6 +695,8 @@ export const CHILD_ENV_SCRUB_PREFIX = "CLINKX_";
582
695
  /**
583
696
  * Config-discovery vars to also scrub (prevent child from inheriting parent's
584
697
  * config resolution path, which would bypass workflow-owned adapter bundles).
698
+ * The child inherits the parent's resolved CLINKX_HOME, and CLINKX_CONFIG_PATH
699
+ * still replaces discovery when set.
585
700
  */
586
701
  export const CHILD_ENV_SCRUB_EXTRA = ["XDG_CONFIG_HOME"];
587
702
  /**
@@ -598,6 +713,8 @@ export const CHILD_ENV_REINJECT_MAP = {
598
713
  configPath: "CLINKX_CONFIG_PATH",
599
714
  allowedRoots: "CLINKX_ALLOWED_ROOTS",
600
715
  logLevel: "CLINKX_LOG_LEVEL",
716
+ clinkxHome: "CLINKX_HOME",
717
+ stateDir: "CLINKX_WORKFLOWS_STATE_DIR",
601
718
  };
602
719
  /**
603
720
  * Baseline OS env vars that are never scrubbed from the child.
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}