@syncended/dsh-automations 0.5.1 → 0.6.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.
package/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # DeepSeek Harness Automations
2
2
 
3
- A DeepSeek Harness plugin for durable, configurable cron jobs. Each occurrence starts a fresh persisted Harness Agent in a selected project with an explicit model route, agent preset, and permission preset.
3
+ A DeepSeek Harness plugin for durable, configurable cron jobs. Each occurrence starts a fresh persisted Harness Agent in a selected workspace with an explicit model route, agent preset, and permission preset.
4
4
 
5
5
  > **Status:** MVP for `@deepseek-ai/dsh` `0.1.1-rc.2`. The current worker is single-host. Cron admission and run history are durable; an already-started run is deliberately **not** retried after a host crash.
6
6
 
7
7
  ## What works
8
8
 
9
9
  - Standard five-field cron expressions with `UTC` or IANA timezones.
10
- - Per-job project directory, provider/model, reasoning effort, agent preset, permission preset, and timeout.
10
+ - Per-job workspace, provider/model, reasoning effort, agent preset, permission preset, and timeout.
11
11
  - Enable/disable, Run now, edit, delete, cancel, and recent run history from a full center workspace opened by the main **Automations** sidebar action, or from **Settings → Automations**.
12
12
  - Overlap policies:
13
13
  - `skip` — record and skip an occurrence while the job has queued/running work.
@@ -20,7 +20,7 @@ A DeepSeek Harness plugin for durable, configurable cron jobs. Each occurrence s
20
20
  - Immutable execution snapshots and occurrence keys for replay-safe admission.
21
21
  - Extensible executor registry: the MVP ships `agent`; future `workflow` and task-graph executors do not need scheduler changes.
22
22
 
23
- The in-box `@deepseek-ai/dsh-schedule` plugin remains the right tool for reminders attached to one live Session. This plugin owns deployment-level jobs that can start a fresh project Session while no chat is open.
23
+ The in-box `@deepseek-ai/dsh-schedule` plugin remains the right tool for reminders attached to one live Session. This plugin owns deployment-level jobs that can start a fresh workspace Session while no chat is open.
24
24
 
25
25
  ## Install
26
26
 
@@ -57,7 +57,7 @@ dsh plugin --profile web remove @syncended/dsh-automations
57
57
  | Name | Human-readable job name. |
58
58
  | Cron | Five fields: `minute hour day-of-month month day-of-week`. Example: `0 9 * * 1-5`. |
59
59
  | Time zone | Search by city or region in the picker, or enter `UTC` / an IANA name such as `Europe/Berlin`. Current UTC offsets are shown; DST is handled by `cron-parser`. |
60
- | Project | Existing absolute directory. Its canonical filesystem identity becomes the Session cwd and `workspace-write` root. |
60
+ | Workspace | Choose an existing Harness workspace or enter an absolute directory manually. Its canonical filesystem identity becomes the Session cwd and `workspace-write` root. |
61
61
  | Prompt | The user message sent to a fresh Harness Agent. |
62
62
  | Provider / model | Choose a configured provider in the searchable picker or enter an unlisted adapter route, then choose or enter its model. Leave both blank to resolve the current Harness default at dispatch time. |
63
63
  | Reasoning effort | Choose `Default` or an exact-model effort advertised by the adapter. If capability lookup is unavailable, common IDs are shown as advisory fallbacks; custom IDs remain editable and are validated when the run starts. |
@@ -101,7 +101,7 @@ This is not exactly-once execution. Exactly-once external side effects require i
101
101
  ## Security
102
102
 
103
103
  - State files are replaced atomically with mode `0600`; created directories use `0700`.
104
- - Project paths are resolved through `realpath`; optional allowed roots are checked against that canonical identity.
104
+ - Workspace paths are resolved through `realpath`; optional allowed roots are checked against that canonical identity.
105
105
  - Background work uses a normal DSH permission preset. `workspace-write` cannot silently widen itself; unattended approval failures remain fail-closed.
106
106
  - `danger-full-access` is intentionally available only when the job author selects a configured preset that grants it.
107
107
  - The management API requires JSON plus a custom same-origin mutation header. It inherits the trust boundary of the DSH Web server, which has no standalone authentication layer.
@@ -58,9 +58,9 @@ function failureFromReason(reason) {
58
58
  async function assertCanonicalDirectory(cwd) {
59
59
  const [metadata, canonical] = await Promise.all([stat(cwd), realpath(cwd)]);
60
60
  if (!metadata.isDirectory())
61
- throw new AgentRunError(`Project path is not a directory: ${cwd}`, 'PROJECT_NOT_DIRECTORY');
61
+ throw new AgentRunError(`Workspace path is not a directory: ${cwd}`, 'PROJECT_NOT_DIRECTORY');
62
62
  if (canonical !== cwd) {
63
- throw new AgentRunError(`Project path no longer resolves to its saved filesystem identity: expected ${cwd}, found ${canonical}`, 'PROJECT_IDENTITY_CHANGED');
63
+ throw new AgentRunError(`Workspace path no longer resolves to its saved filesystem identity: expected ${cwd}, found ${canonical}`, 'PROJECT_IDENTITY_CHANGED');
64
64
  }
65
65
  }
66
66
  function resolveSelection(ctx, run) {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-executor.js","sourceRoot":"","sources":["../src/agent-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAKjD,OAAO,EAAE,qBAAqB,EAAuB,MAAM,wBAAwB,CAAA;AACnF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAyC,MAAM,0BAA0B,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAA2D,MAAM,YAAY,CAAA;AAE1G,MAAM,aAAc,SAAQ,KAAK;IACtB,IAAI,CAAQ;IAErB,YAAY,OAAe,EAAE,IAAY,EAAE,OAAsB;QAC/D,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAA;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAOD,SAAS,SAAS,CAAC,MAA+B,EAAE,QAAgB;IAClE,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,IAAI,MAAiC,CAAA;IACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,GAAG,GAAG,QAAQ;YAAE,SAAQ;QAClC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,OAAO,GAAG,IAAI,CAAA;YACd,SAAQ;QACV,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,SAAQ;QACtB,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;iBACtC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;iBACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC1B,IAAI,CAAC,EAAE,CAAC,CAAA;YACX,IAAI,MAAM,KAAK,EAAE;gBAAE,IAAI,GAAG,MAAM,CAAA;QAClC,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAA;IAC3D,CAAC;IACD,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AAC3D,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAiC;IAC1D,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,aAAa,CAAC,8CAA8C,EAAE,sBAAsB,CAAC,CAAA;IAC1H,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,aAAa,CAAC,6BAA6B,EAAE,cAAc,CAAC,CAAA;IACtG,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,aAAa,CAAC,2CAA2C,EAAE,iBAAiB,CAAC,CAAA;IAC1H,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,aAAa,CAAC,6BAA6B,EAAE,cAAc,CAAC,CAAA;IACtG,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,IAAI,aAAa,CAAC,0DAA0D,EAAE,kBAAkB,CAAC,CAAA;IAC3I,OAAO,IAAI,aAAa,CAAC,4CAA4C,MAAM,CAAE,MAA2B,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;AACpI,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,GAAW;IACjD,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC3E,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;QAAE,MAAM,IAAI,aAAa,CAAC,oCAAoC,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAA;IACxH,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACtB,MAAM,IAAI,aAAa,CACrB,8EAA8E,GAAG,WAAW,SAAS,EAAE,EACvG,0BAA0B,CAC3B,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAY,EAAE,GAAqC;IAC3E,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAA;IACxC,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAA;IACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAA;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAA;IAC9C,MAAM,eAAe,GAAG,SAAS,CAAC,eAAe,KAAK,SAAS;QAC7D,CAAC,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS;YAChC,CAAC,CAAC,OAAO,CAAC,eAAe;YACzB,CAAC,CAAC,SAAS;QACb,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;IAChD,OAAO;QACL,QAAQ;QACR,KAAK;QACL,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;KAC9D,CAAA;AACH,CAAC;AAED,8FAA8F;AAC9F,MAAM,OAAO,oBAAoB;IACtB,IAAI,GAAG,OAAO,CAAA;IACN,GAAG,CAAS;IACZ,aAAa,CAAe;IAE7C,YAAY,GAAY,EAAE,aAA4B;QACpD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAkC;QAC9C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;QAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAA;QACxC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QACvE,MAAM,wBAAwB,CAAC,aAAa,CAAC,CAAA;QAC7C,IAAI,MAAM,CAAC,OAAO;YAAE,MAAM,MAAM,CAAC,MAAM,CAAA;QAEvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QACzE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,aAAa,CAAC,iBAAiB,MAAM,CAAC,EAAE,gBAAgB,MAAM,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAA;QAC3G,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;QAC9D,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACjD,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,UAAU,EAAE,EAAE,CAAC,CAAA;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YAC1C,SAAS;YACT,IAAI,EAAE;gBACJ,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,WAAW,EAAE,MAAM,CAAC,EAAE;aACvB;YACD,YAAY,EAAE;gBACZ,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB;YACD,MAAM;YACN,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACxB,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;gBACtD,qBAAqB,CAAC,QAAQ,EAAE;oBAC9B,OAAO,EAAE,SAAS;oBAClB,SAAS,EAAE,SAAS;iBACrB,CAAC,CAAA;gBACF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;gBAC5B,IAAI,KAAK,KAAK,SAAS;oBAAE,MAAM,IAAI,aAAa,CAAC,mCAAmC,EAAE,oBAAoB,CAAC,CAAA;gBAC3G,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAA;YAC3E,CAAC;SACF,CAAC,CAAA;QAEF,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;QACxB,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,KAAK,CAAC,MAAM,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aAC1F,CAAC,CAAA;QACJ,CAAC,CAAA;QACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACxD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;YAC9C,IAAI,MAAM,CAAC,OAAO;gBAAE,MAAM,MAAM,CAAC,MAAM,CAAA;YACvC,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAA;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAA;YAClC,KAAK,CAAC,QAAQ,CACZ,iBAAiB,CAAC;gBAChB,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM;qBAC/B;iBACF;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,oBAAoB;iBAC7B;aACF,CAAC,CACH,CAAA;YACD,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAA;YACtB,IAAI,MAAM,CAAC,OAAO;gBAAE,MAAM,MAAM,CAAC,MAAM,CAAA;YACvC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YACzD,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,KAAK,WAAW;gBAAE,MAAM,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACjF,OAAO;gBACL,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;gBAC5B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;aACzD,CAAA;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YAC3C,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YACnE,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"agent-executor.js","sourceRoot":"","sources":["../src/agent-executor.ts"],"names":[],"mappings":"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"}
@@ -33,16 +33,16 @@ export class ProjectPolicy {
33
33
  const roots = [];
34
34
  for (const configured of configuredRoots) {
35
35
  const path = resolve(expandHomePath(configured));
36
- roots.push(await canonicalDirectory(path, 'allowed project root'));
36
+ roots.push(await canonicalDirectory(path, 'allowed workspace root'));
37
37
  }
38
38
  return new ProjectPolicy([...new Set(roots)]);
39
39
  }
40
40
  async authorize(cwd) {
41
41
  if (!isAbsolute(cwd))
42
- throw new AutomationInputError('project cwd must be absolute');
43
- const canonical = await canonicalDirectory(cwd, 'project cwd');
42
+ throw new AutomationInputError('workspace path must be absolute');
43
+ const canonical = await canonicalDirectory(cwd, 'workspace path');
44
44
  if (this.roots.length > 0 && !this.roots.some((root) => isWithin(root, canonical))) {
45
- throw new AutomationInputError(`project cwd is outside allowedProjectRoots: ${canonical}`, 'PROJECT_NOT_ALLOWED', 403);
45
+ throw new AutomationInputError(`workspace path is outside allowedProjectRoots: ${canonical}`, 'PROJECT_NOT_ALLOWED', 403);
46
46
  }
47
47
  return canonical;
48
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"project-policy.js","sourceRoot":"","sources":["../src/project-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEtD,SAAS,QAAQ,CAAC,IAAY,EAAE,SAAiB;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACtC,OAAO,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;AACrE,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAa;IAC3D,IAAI,QAAQ,CAAA;IACZ,IAAI,SAAS,CAAA;IACb,IAAI,CAAC;QACH,CAAC;QAAA,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,oBAAoB,CAAC,GAAG,KAAK,oCAAoC,IAAI,EAAE,EAAE,qBAAqB,EAAE,GAAG,EAAE;YAC7G,KAAK;SACN,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,oBAAoB,CAAC,GAAG,KAAK,wBAAwB,IAAI,EAAE,EAAE,uBAAuB,CAAC,CAAA;IACjG,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,oFAAoF;AACpF,MAAM,OAAO,aAAa;IACP,KAAK,CAAU;IAEhC,YAAoB,KAAe;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,eAAkC;QACpD,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAA;YAChD,KAAK,CAAC,IAAI,CAAC,MAAM,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAA;QACpE,CAAC;QACD,OAAO,IAAI,aAAa,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,oBAAoB,CAAC,8BAA8B,CAAC,CAAA;QACpF,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;QAC9D,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,IAAI,oBAAoB,CAC5B,+CAA+C,SAAS,EAAE,EAC1D,qBAAqB,EACrB,GAAG,CACJ,CAAA;QACH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF"}
1
+ {"version":3,"file":"project-policy.js","sourceRoot":"","sources":["../src/project-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEtD,SAAS,QAAQ,CAAC,IAAY,EAAE,SAAiB;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACtC,OAAO,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;AACrE,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAa;IAC3D,IAAI,QAAQ,CAAA;IACZ,IAAI,SAAS,CAAA;IACb,IAAI,CAAC;QACH,CAAC;QAAA,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,oBAAoB,CAAC,GAAG,KAAK,oCAAoC,IAAI,EAAE,EAAE,qBAAqB,EAAE,GAAG,EAAE;YAC7G,KAAK;SACN,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,oBAAoB,CAAC,GAAG,KAAK,wBAAwB,IAAI,EAAE,EAAE,uBAAuB,CAAC,CAAA;IACjG,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,oFAAoF;AACpF,MAAM,OAAO,aAAa;IACP,KAAK,CAAU;IAEhC,YAAoB,KAAe;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,eAAkC;QACpD,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAA;YAChD,KAAK,CAAC,IAAI,CAAC,MAAM,kBAAkB,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAA;QACtE,CAAC;QACD,OAAO,IAAI,aAAa,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,oBAAoB,CAAC,iCAAiC,CAAC,CAAA;QACvF,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;QACjE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,IAAI,oBAAoB,CAC5B,kDAAkD,SAAS,EAAE,EAC7D,qBAAqB,EACrB,GAAG,CACJ,CAAA;QACH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF"}
package/dist/types.d.ts CHANGED
@@ -12,7 +12,7 @@ export interface CronSchedule {
12
12
  timezone: string;
13
13
  }
14
14
  export interface AgentExecutionSpec {
15
- /** Absolute project directory and immutable session workspace root. */
15
+ /** Absolute workspace directory and immutable Session cwd/root. */
16
16
  cwd: string;
17
17
  /** Omitted provider and model resolve from the current Harness default at dispatch time. */
18
18
  provider?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -32,11 +32,11 @@ Sidebar / Center workspace / Settings UI / HTTP API
32
32
 
33
33
  The same automation page is available through Settings and a dedicated center workspace. `settings.section` keeps configuration available inside Settings; `sidebar.footer.action` activates a temporary, higher-priority `conversation` entry that replaces the current center occupant. This provides a split-screen-like full-center experience while using the single-slot election directly rather than Split Screen's internal view contributions. Closing Automations disposes its entry immediately, revealing whichever center surface was previously active. A small client-only disclosure store coordinates the sidebar trigger and dynamic registration; neither surface owns scheduler state, and both read the same package HTTP API.
34
34
 
35
- Interactive chrome uses the ambient `@deepseek-ai/dsh-client-ui-primitives` `Button`, `Menu`, and icon components. Package CSS is limited to the automation-specific layout and composes only public DSH semantic tokens, so theme, menu, focus, and button behavior stay aligned with the host UI.
35
+ Interactive chrome uses the ambient `@deepseek-ai/dsh-client-ui-primitives` `Button`, `Menu`, and icon components. The Workspace selector subscribes to `ctx.workspaces.list`, projecting the Host's live workspace order while retaining manual absolute-path entry. Package CSS is limited to the automation-specific layout and composes only public DSH semantic tokens, so theme, menu, focus, and button behavior stay aligned with the host UI.
36
36
 
37
37
  ### AutomationService
38
38
 
39
- Cordis service `ctx.automations`. It owns input validation, canonical project authorization, metadata discovery, the Web route, and the public executor-registration seam.
39
+ Cordis service `ctx.automations`. It owns input validation, canonical workspace-path authorization, metadata discovery, the Web route, and the public executor-registration seam.
40
40
 
41
41
  ### AutomationStateStore
42
42
 
@@ -72,7 +72,7 @@ It never knows how an Agent, workflow, or code task works.
72
72
 
73
73
  The `agent` executor:
74
74
 
75
- 1. re-authorizes the canonical project;
75
+ 1. re-authorizes the canonical workspace path;
76
76
  2. resolves the job's agent and permission presets;
77
77
  3. resolves the current default model or the pinned provider/model route;
78
78
  4. creates a fresh Session and Agent through `ctx.agents.create`;
@@ -123,7 +123,7 @@ A queued run must not change when a user edits or deletes its source job. The sn
123
123
  - job id/version and name;
124
124
  - schedule/policy values used at admission;
125
125
  - prompt and execution settings;
126
- - project/model/preset/permission/timeout values.
126
+ - workspace/model/preset/permission/timeout values.
127
127
 
128
128
  Deleting a job marks its still-queued runs skipped; already-running work drains against its snapshot.
129
129
 
package/docs/security.md CHANGED
@@ -16,7 +16,7 @@ The custom header forces a cross-origin browser request through CORS preflight,
16
16
 
17
17
  ## Filesystem authority
18
18
 
19
- A job's project is canonicalized with `realpath` before storage. `workspace-write` uses that Session cwd as its DSH sandbox root. `allowedProjectRoots`, when configured, are canonicalized and checked with path-segment containment rather than string prefixes.
19
+ A job's workspace path is canonicalized with `realpath` before storage. `workspace-write` uses that Session cwd as its DSH sandbox root. `allowedProjectRoots`, when configured, are canonicalized and checked with path-segment containment rather than string prefixes.
20
20
 
21
21
  The executor repeats authorization at dispatch, catching deleted paths and symlink retargeting after configuration.
22
22
 
@@ -32,7 +32,7 @@ Scheduled Agents are not attached to an interactive browser ownership chain. A p
32
32
 
33
33
  ## Secrets and persisted data
34
34
 
35
- `state.json` contains job prompts, project paths, model/preset selections, run metadata, and bounded final assistant text. It is atomically replaced with mode `0600`; parent directories created by the plugin use `0700`. Session transcripts are persisted by the configured Harness Session backend and may contain substantially more data.
35
+ `state.json` contains job prompts, workspace paths, model/preset selections, run metadata, and bounded final assistant text. It is atomically replaced with mode `0600`; parent directories created by the plugin use `0700`. Session transcripts are persisted by the configured Harness Session backend and may contain substantially more data.
36
36
 
37
37
  Do not put API keys directly in prompts. Use normal Harness credential providers and environment policy.
38
38
 
package/lib/client.js CHANGED
@@ -24,6 +24,7 @@ window.__ModuleLoader__.load({
24
24
  IconChevronDownOutline14,
25
25
  IconChevronLeftOutline14,
26
26
  IconEditOutline16,
27
+ IconFolderClose16,
27
28
  IconGlobeOutline14,
28
29
  IconPlayOutline16,
29
30
  IconPlusOutline16,
@@ -33,7 +34,7 @@ window.__ModuleLoader__.load({
33
34
  IconTrashOutline16,
34
35
  IconWarningOutline16,
35
36
  } = require("@deepseek-ai/dsh-client-ui-primitives");
36
- const inject = ["slots"];
37
+ const inject = ["slots", "workspaces"];
37
38
 
38
39
  const API_PREFIX = "/api/automations";
39
40
  const POLL_MS = 5000;
@@ -132,6 +133,12 @@ window.__ModuleLoader__.load({
132
133
  { id: "high", name: "High", description: "Use a deeper reasoning level." },
133
134
  { id: "max", name: "Max", description: "Use the strongest available reasoning level." },
134
135
  ];
136
+ const EMPTY_WORKSPACE_SNAPSHOT = Object.freeze({
137
+ items: Object.freeze([]),
138
+ state: "idle",
139
+ phase: "pending",
140
+ error: null,
141
+ });
135
142
  const OVERLAP_OPTIONS = [
136
143
  { value: "skip", label: "skip", hint: "Skip the run if a previous run is still active." },
137
144
  { value: "queue", label: "queue", hint: "Defer the run until the previous run finishes." },
@@ -699,6 +706,7 @@ window.__ModuleLoader__.load({
699
706
  const {
700
707
  id,
701
708
  value,
709
+ displayValue,
702
710
  onChange,
703
711
  optionsForQuery,
704
712
  selectedId,
@@ -939,7 +947,7 @@ window.__ModuleLoader__.load({
939
947
  className: "dsh-auto-combobox-input",
940
948
  type: "text",
941
949
  role: "combobox",
942
- value,
950
+ value: !searching && displayValue !== undefined ? displayValue : value,
943
951
  placeholder,
944
952
  disabled,
945
953
  autoComplete: "off",
@@ -1026,6 +1034,105 @@ window.__ModuleLoader__.load({
1026
1034
  });
1027
1035
  }
1028
1036
 
1037
+ function looksLikeAbsolutePath(value) {
1038
+ const path = String(value || "").trim();
1039
+ return path.charAt(0) === "/" || /^[A-Za-z]:[\\/]/.test(path) || path.startsWith("\\\\");
1040
+ }
1041
+
1042
+ function workspacePathName(path) {
1043
+ const withoutTrailingSeparators = String(path || "").replace(/[\\/]+$/, "");
1044
+ const segments = withoutTrailingSeparators.split(/[\\/]/).filter(Boolean);
1045
+ return segments[segments.length - 1] || String(path || "");
1046
+ }
1047
+
1048
+ function normalizedWorkspaces(workspaces) {
1049
+ const seenPaths = new Set();
1050
+ return (Array.isArray(workspaces) ? workspaces : [])
1051
+ .map((workspace, index) => {
1052
+ if (!workspace || typeof workspace.path !== "string" || workspace.path.trim() === "") return null;
1053
+ const path = workspace.path.trim();
1054
+ if (seenPaths.has(path)) return null;
1055
+ seenPaths.add(path);
1056
+ const rawTitle = typeof workspace.title === "string" ? workspace.title.trim() : "";
1057
+ return {
1058
+ id: String(workspace.workspaceId || workspace.id || "workspace-" + index),
1059
+ path,
1060
+ title: rawTitle || workspacePathName(path),
1061
+ sessionCount: Array.isArray(workspace.sessionIds) ? workspace.sessionIds.length : 0,
1062
+ };
1063
+ })
1064
+ .filter(Boolean);
1065
+ }
1066
+
1067
+ function preferredWorkspacePath(workspaceSnapshot) {
1068
+ const catalog = normalizedWorkspaces(workspaceSnapshot?.items);
1069
+ const recentId = workspaceSnapshot?.recentWorkspaceId;
1070
+ const recent = recentId === undefined
1071
+ ? null
1072
+ : catalog.find((workspace) => workspace.id === String(recentId));
1073
+ return (recent || catalog[0] || {}).path || "";
1074
+ }
1075
+
1076
+ function WorkspacePicker({ id, value, workspaceSnapshot, onChange }) {
1077
+ const catalog = normalizedWorkspaces(workspaceSnapshot?.items);
1078
+ const exactValue = value.trim();
1079
+ const selected = catalog.find((workspace) => workspace.path === exactValue) || null;
1080
+ const custom = exactValue !== "" && selected === null && looksLikeAbsolutePath(exactValue);
1081
+ const options = [
1082
+ ...catalog.map((workspace) => ({
1083
+ id: "workspace:" + workspace.id,
1084
+ value: workspace.path,
1085
+ label: workspace.title,
1086
+ detail: workspace.path + " · " + workspace.sessionCount + (workspace.sessionCount === 1 ? " session" : " sessions"),
1087
+ aliases: [workspace.id, workspacePathName(workspace.path)],
1088
+ Icon: IconFolderClose16,
1089
+ })),
1090
+ ...(custom
1091
+ ? [{
1092
+ id: "custom-workspace:" + exactValue,
1093
+ value: exactValue,
1094
+ label: workspacePathName(exactValue) || exactValue,
1095
+ detail: exactValue + " · Custom absolute path",
1096
+ aliases: [exactValue],
1097
+ custom: true,
1098
+ Icon: IconFolderClose16,
1099
+ }]
1100
+ : []),
1101
+ ];
1102
+ let panelNotice = null;
1103
+ if (workspaceSnapshot?.state === "error") {
1104
+ panelNotice = "Harness workspaces are unavailable. You can still enter an absolute directory path.";
1105
+ } else if (workspaceSnapshot?.phase !== "ready" && catalog.length === 0) {
1106
+ panelNotice = "Loading Harness workspaces. You can still enter an absolute directory path.";
1107
+ }
1108
+ return h(EditableCombobox, {
1109
+ id,
1110
+ value,
1111
+ displayValue: selected ? selected.title : undefined,
1112
+ onChange,
1113
+ optionsForQuery: (query) => comboboxSearchResults(options, query),
1114
+ selectedId: selected ? "workspace:" + selected.id : custom ? "custom-workspace:" + exactValue : null,
1115
+ commitExactValue: (raw) => {
1116
+ const path = raw.trim();
1117
+ return looksLikeAbsolutePath(path) ? path : null;
1118
+ },
1119
+ placeholder: "Choose a Harness workspace or enter a path",
1120
+ Icon: IconFolderClose16,
1121
+ listboxLabel: "Harness workspaces",
1122
+ initialTitle: "Harness workspaces",
1123
+ searchTitle: "Matching workspaces",
1124
+ emptyText: catalog.length === 0
1125
+ ? "No Harness workspaces are registered. Enter an absolute directory path."
1126
+ : "No matching workspaces. Enter an absolute directory path to use it directly.",
1127
+ hintText: "Choose a registered workspace or enter an absolute path without registering it.",
1128
+ resultNoun: "workspace",
1129
+ invalidMessage: "Enter an absolute workspace path.",
1130
+ invalid: exactValue !== "" && !looksLikeAbsolutePath(exactValue),
1131
+ resumeSearch: custom,
1132
+ panelNotice,
1133
+ });
1134
+ }
1135
+
1029
1136
  function providerFallbackName(id) {
1030
1137
  return humanizePresetId(id)
1031
1138
  .replace(/^Openai\b/, "OpenAI")
@@ -1399,7 +1506,7 @@ window.__ModuleLoader__.load({
1399
1506
  }
1400
1507
 
1401
1508
  function JobForm(props) {
1402
- const { meta, draft, editing, saving, error, onChange, onIdTouched, onSubmit, onCancel } = props;
1509
+ const { meta, workspaceSnapshot, draft, editing, saving, error, onChange, onIdTouched, onSubmit, onCancel } = props;
1403
1510
  const providers = normalizedProviders(meta && Array.isArray(meta.providers) ? meta.providers : []);
1404
1511
  const providerModels = providers.find((provider) => provider.id === draft.provider);
1405
1512
  const models = providerModels ? providerModels.models : [];
@@ -1634,15 +1741,18 @@ window.__ModuleLoader__.load({
1634
1741
  ),
1635
1742
  h(
1636
1743
  Field,
1637
- { label: "Working directory", htmlFor: fieldId("cwd"), required: true, full: true, hint: "Absolute project directory the agent runs in." },
1638
- h("input", {
1744
+ {
1745
+ label: "Workspace",
1746
+ htmlFor: fieldId("cwd"),
1747
+ required: true,
1748
+ full: true,
1749
+ hint: "Choose a Harness workspace or enter the absolute directory where the agent runs.",
1750
+ },
1751
+ h(WorkspacePicker, {
1639
1752
  id: fieldId("cwd"),
1640
- className: "dsh-auto-input",
1641
- type: "text",
1642
1753
  value: draft.cwd,
1643
- spellCheck: false,
1644
- placeholder: "/home/you/workspace/project",
1645
- onChange: (event) => onChange("cwd", event.target.value),
1754
+ workspaceSnapshot,
1755
+ onChange: (value) => onChange("cwd", value),
1646
1756
  }),
1647
1757
  ),
1648
1758
  h(
@@ -1934,7 +2044,21 @@ window.__ModuleLoader__.load({
1934
2044
  );
1935
2045
  }
1936
2046
 
1937
- function AutomationsSection({ centerMode = false } = {}) {
2047
+ function useHarnessWorkspaceSnapshot(workspaceRuntime) {
2048
+ const list = workspaceRuntime?.list;
2049
+ const subscribe = useCallback(
2050
+ (listener) => list ? list.subscribe(listener) : () => {},
2051
+ [list],
2052
+ );
2053
+ const getSnapshot = useCallback(
2054
+ () => list ? list.getSnapshot() : EMPTY_WORKSPACE_SNAPSHOT,
2055
+ [list],
2056
+ );
2057
+ return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
2058
+ }
2059
+
2060
+ function AutomationsSection({ centerMode = false, workspaceRuntime = null } = {}) {
2061
+ const workspaceSnapshot = useHarnessWorkspaceSnapshot(workspaceRuntime);
1938
2062
  const [meta, setMeta] = useState(null);
1939
2063
  const [snapshot, setSnapshot] = useState(null);
1940
2064
  const [loading, setLoading] = useState(true);
@@ -1953,6 +2077,7 @@ window.__ModuleLoader__.load({
1953
2077
  const pollRef = useRef(false);
1954
2078
  const hasDataRef = useRef(false);
1955
2079
  const idTouchedRef = useRef(false);
2080
+ const workspaceTouchedRef = useRef(false);
1956
2081
  const flashTimerRef = useRef(null);
1957
2082
 
1958
2083
  const loadMeta = useCallback(async () => {
@@ -2098,14 +2223,16 @@ window.__ModuleLoader__.load({
2098
2223
  const openCreate = useCallback(() => {
2099
2224
  setEditing(null);
2100
2225
  idTouchedRef.current = false;
2101
- setDraft(emptyDraft(meta));
2226
+ workspaceTouchedRef.current = false;
2227
+ setDraft(Object.assign(emptyDraft(meta), { cwd: preferredWorkspacePath(workspaceSnapshot) }));
2102
2228
  setFormError(null);
2103
2229
  setFormOpen(true);
2104
- }, [meta]);
2230
+ }, [meta, workspaceSnapshot]);
2105
2231
 
2106
2232
  const openEdit = useCallback((job) => {
2107
2233
  setEditing(job);
2108
2234
  idTouchedRef.current = true;
2235
+ workspaceTouchedRef.current = true;
2109
2236
  setDraft(draftFromJob(job));
2110
2237
  setFormError(null);
2111
2238
  setFormOpen(true);
@@ -2117,8 +2244,16 @@ window.__ModuleLoader__.load({
2117
2244
  setFormError(null);
2118
2245
  }, []);
2119
2246
 
2247
+ useEffect(() => {
2248
+ if (!formOpen || editing !== null || workspaceTouchedRef.current || draft.cwd !== "") return;
2249
+ const preferred = preferredWorkspacePath(workspaceSnapshot);
2250
+ if (preferred === "") return;
2251
+ setDraft((previous) => previous.cwd === "" ? Object.assign({}, previous, { cwd: preferred }) : previous);
2252
+ }, [formOpen, editing, draft.cwd, workspaceSnapshot]);
2253
+
2120
2254
  const handleDraftChange = useCallback(
2121
2255
  (key, value) => {
2256
+ if (key === "cwd") workspaceTouchedRef.current = true;
2122
2257
  setDraft((previous) => {
2123
2258
  let next = Object.assign({}, previous, { [key]: value });
2124
2259
  if (key === "name" && editing === null && !idTouchedRef.current) {
@@ -2151,10 +2286,9 @@ window.__ModuleLoader__.load({
2151
2286
  const timezone = draft.timezone.trim();
2152
2287
  if (timezone === "") return setFormError("A timezone is required.");
2153
2288
  const cwd = draft.cwd.trim();
2154
- if (cwd === "") return setFormError("The working directory is required.");
2155
- const looksAbsolute = cwd.charAt(0) === "/" || /^[A-Za-z]:[\\/]/.test(cwd) || cwd.startsWith("\\\\");
2156
- if (!looksAbsolute) {
2157
- return setFormError("The working directory must be an absolute filesystem path.");
2289
+ if (cwd === "") return setFormError("A workspace is required.");
2290
+ if (!looksLikeAbsolutePath(cwd)) {
2291
+ return setFormError("The workspace must be an absolute filesystem path.");
2158
2292
  }
2159
2293
  const prompt = draft.prompt.trim();
2160
2294
  if (prompt === "") return setFormError("A prompt is required.");
@@ -2256,6 +2390,7 @@ window.__ModuleLoader__.load({
2256
2390
  formOpen
2257
2391
  ? h(JobForm, {
2258
2392
  meta,
2393
+ workspaceSnapshot,
2259
2394
  draft,
2260
2395
  editing,
2261
2396
  saving: busy.save === true,
@@ -2425,7 +2560,7 @@ window.__ModuleLoader__.load({
2425
2560
  );
2426
2561
  }
2427
2562
 
2428
- function AutomationsWorkspace({ disclosure }) {
2563
+ function AutomationsWorkspace({ disclosure, workspaceRuntime }) {
2429
2564
  const workspaceRef = useRef(null);
2430
2565
  const titleId = useId();
2431
2566
 
@@ -2473,7 +2608,7 @@ window.__ModuleLoader__.load({
2473
2608
  "Exit Automations",
2474
2609
  ),
2475
2610
  ),
2476
- h("div", { className: "dsh-auto-workspace-scroll" }, h(AutomationsSection, { centerMode: true })),
2611
+ h("div", { className: "dsh-auto-workspace-scroll" }, h(AutomationsSection, { centerMode: true, workspaceRuntime })),
2477
2612
  );
2478
2613
  }
2479
2614
 
@@ -2637,7 +2772,7 @@ window.__ModuleLoader__.load({
2637
2772
  disposeCenter = ctx.slots.register({
2638
2773
  name: "conversation",
2639
2774
  priority: -200,
2640
- inject: () => ({ disclosure }),
2775
+ inject: () => ({ disclosure, workspaceRuntime: ctx.workspaces }),
2641
2776
  }, AutomationsWorkspace);
2642
2777
  } catch (error) {
2643
2778
  console.error("dsh automations: could not mount center workspace", error);
@@ -2681,6 +2816,7 @@ window.__ModuleLoader__.load({
2681
2816
  id: "automations",
2682
2817
  order: 25,
2683
2818
  label: "Automations",
2819
+ inject: () => ({ workspaceRuntime: ctx.workspaces }),
2684
2820
  }, AutomationsSection));
2685
2821
  ctx.slots.inject("sidebar.footer.action", () => ctx.slots.register({
2686
2822
  name: "sidebar.footer.action",
@@ -2695,6 +2831,7 @@ window.__ModuleLoader__.load({
2695
2831
  exports.permissionPresetPresentation = permissionPresetPresentation;
2696
2832
  exports.PermissionPresetPicker = PermissionPresetPicker;
2697
2833
  exports.EditableCombobox = EditableCombobox;
2834
+ exports.WorkspacePicker = WorkspacePicker;
2698
2835
  exports.ProviderPicker = ProviderPicker;
2699
2836
  exports.ReasoningEffortPicker = ReasoningEffortPicker;
2700
2837
  exports.TimeZonePicker = TimeZonePicker;
@@ -2702,6 +2839,9 @@ window.__ModuleLoader__.load({
2702
2839
  nextFormInstancePrefix,
2703
2840
  canonicalTimezone,
2704
2841
  comboboxSearchResults,
2842
+ looksLikeAbsolutePath,
2843
+ normalizedWorkspaces,
2844
+ preferredWorkspacePath,
2705
2845
  normalizedProviders,
2706
2846
  providerFallbackName,
2707
2847
  reasoningEffortsForState,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncended/dsh-automations",
3
- "version": "0.5.1",
3
+ "version": "0.6.0",
4
4
  "description": "Durable cron automations for DeepSeek Harness",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",