@stigmer/runner 3.0.8-dev.20260612100207 → 3.0.8-dev.20260613041848
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/dist/.build-fingerprint +1 -1
- package/dist/activities/execute-cursor/approval-state.d.ts +25 -13
- package/dist/activities/execute-cursor/approval-state.js +33 -24
- package/dist/activities/execute-cursor/approval-state.js.map +1 -1
- package/dist/activities/execute-cursor/hook-script.d.ts +16 -1
- package/dist/activities/execute-cursor/hook-script.js +50 -1
- package/dist/activities/execute-cursor/hook-script.js.map +1 -1
- package/dist/activities/execute-cursor/index.js +60 -12
- package/dist/activities/execute-cursor/index.js.map +1 -1
- package/dist/activities/execute-cursor/session-lifecycle.js +6 -0
- package/dist/activities/execute-cursor/session-lifecycle.js.map +1 -1
- package/dist/activities/execute-cursor/skill-resolver.d.ts +9 -0
- package/dist/activities/execute-cursor/skill-resolver.js +24 -1
- package/dist/activities/execute-cursor/skill-resolver.js.map +1 -1
- package/dist/activities/execute-cursor/workspace-setup.d.ts +79 -21
- package/dist/activities/execute-cursor/workspace-setup.js +171 -51
- package/dist/activities/execute-cursor/workspace-setup.js.map +1 -1
- package/dist/shared/workspace/platform-dir.d.ts +26 -5
- package/dist/shared/workspace/platform-dir.js +38 -7
- package/dist/shared/workspace/platform-dir.js.map +1 -1
- package/package.json +2 -2
- package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +4 -3
- package/src/activities/execute-cursor/__tests__/hook-script.test.ts +51 -2
- package/src/activities/execute-cursor/__tests__/workspace-setup.test.ts +204 -0
- package/src/activities/execute-cursor/approval-state.ts +33 -24
- package/src/activities/execute-cursor/hook-script.ts +54 -1
- package/src/activities/execute-cursor/index.ts +65 -16
- package/src/activities/execute-cursor/session-lifecycle.ts +6 -0
- package/src/activities/execute-cursor/skill-resolver.ts +26 -1
- package/src/activities/execute-cursor/workspace-setup.ts +228 -51
- package/src/shared/workspace/platform-dir.ts +41 -7
|
@@ -54,6 +54,12 @@ const CURSOR_SDK_STATE_DIR = ".stigmer/cursor-sdk-state";
|
|
|
54
54
|
* silently drops the hook and disables the entire approval gate. We must opt
|
|
55
55
|
* in to "project" so the hook loads and tool calls are actually gated.
|
|
56
56
|
*
|
|
57
|
+
* The hooks.json is the only file written into the workspace — kept minimal,
|
|
58
|
+
* merged with any user hooks.json, and restored when the turn ends; the gate's
|
|
59
|
+
* own artifacts live outside the repo and the hook is scoped to this runner's
|
|
60
|
+
* process, so the user's interactive IDE sharing the repo is never gated (see
|
|
61
|
+
* workspace-setup.ts / hook-script.ts and issue #173).
|
|
62
|
+
*
|
|
57
63
|
* Side effect: this also loads other workspace `.cursor/*` config (rules,
|
|
58
64
|
* mcp.json, commands). For runner-provisioned workspaces that is inert; for
|
|
59
65
|
* sessions running on a user's own repo their project config is now honored.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/session-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEzD
|
|
1
|
+
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/session-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,qBAAqB,GAAG,CAAC,SAAS,CAAU,CAAC;AAwGnD,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,gBAAwB;IAExB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,8EAA8E;YAC9E,kFAAkF;YAClF,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,iFAAiF;YACjF,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC;IAC1E,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,OAAO;QACL,YAAY,EAAE,mBAAmB,SAAS,EAAE;QAC5C,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;QAC5C,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAE1B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CACT,0BAA0B,OAAO,CAAC,SAAS,kBAAkB,QAAQ,CAAC,YAAY,IAAI;QACtF,aAAa,QAAQ,CAAC,SAAS,iBAAiB,OAAO,CAAC,GAAG,EAAE,EAAE,CAChE,CAAC;IAEF,OAAO,KAAK,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE;QAC5B,KAAK,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,GAAG,qBAAqB,CAAC,EAAE;QAC1D,UAAU,EAAE,OAAO,CAAC,UAAiC;QACrD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ;KACT,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;QAC5C,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAE1B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CACT,wBAAwB,OAAO,CAAC,OAAO,eAAe,OAAO,CAAC,SAAS,IAAI;QAC3E,gBAAgB,QAAQ,CAAC,YAAY,eAAe,QAAQ,CAAC,SAAS,IAAI;QAC1E,eAAe,OAAO,CAAC,GAAG,EAAE,EAAE,CAC/B,CAAC;IAEF,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;QACxD,sEAAsE;QACtE,kEAAkE;QAClE,sEAAsE;QACtE,4EAA4E;QAC5E,wEAAwE;QACxE,qDAAqD;QACrD,KAAK,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,GAAG,qBAAqB,CAAC,EAAE;QAC1D,UAAU,EAAE,OAAO,CAAC,UAAiC;QACrD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ;KACT,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAgC;IACrE,OAAO,CAAC,GAAG,CACT,+BAA+B,OAAO,CAAC,SAAS,IAAI;QACpD,SAAS,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtD,CAAC;IAEF,OAAO,KAAK,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;QACxD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;QAC/B,UAAU,EAAE,OAAO,CAAC,UAAiC;QACrD,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAgC;IACrE,OAAO,CAAC,GAAG,CACT,6BAA6B,OAAO,CAAC,OAAO,EAAE,CAC/C,CAAC;IAEF,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;QACxD,UAAU,EAAE,OAAO,CAAC,UAAiC;QACrD,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,cAAsB,EACtB,OAAqD,EACrD,OAA0B,OAAO;IAEjC,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO;gBAC5B,CAAC,CAAC,MAAM,gBAAgB,CAAC;oBACrB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,OAAO,EAAE,cAAc;oBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB,CAAC;gBACJ,CAAC,CAAC,MAAM,WAAW,CAAC;oBAChB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,OAAO,EAAE,cAAc;oBACvB,SAAS,EAAG,OAA8B,CAAC,SAAS;oBACpD,aAAa,EAAG,OAA8B,CAAC,aAAa;oBAC5D,gBAAgB,EAAG,OAA8B,CAAC,gBAAgB;oBAClE,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB,CAAC,CAAC;YAEP,OAAO;gBACL,KAAK;gBACL,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,IAAI;gBACb,IAAI;gBACJ,MAAM,EAAE,sBAAsB;aAC/B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CACV,mCAAmC,IAAI,WAAW,cAAc,KAAK;gBACrE,2CAA2C;gBAC3C,aAAa,OAAO,CAAC,SAAS,YAAY,MAAM,EAAE,CACnD,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO;gBAC5B,CAAC,CAAC,MAAM,gBAAgB,CAAC,OAAkC,CAAC;gBAC5D,CAAC,CAAC,MAAM,WAAW,CAAC,OAA6B,CAAC,CAAC;YAErD,OAAO,CAAC,GAAG,CACT,0BAA0B,IAAI,kBAAkB;gBAChD,cAAc,cAAc,gBAAgB,KAAK,CAAC,OAAO,IAAI;gBAC7D,aAAa,OAAO,CAAC,SAAS,EAAE,CACjC,CAAC;YAEF,OAAO;gBACL,KAAK;gBACL,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,KAAK;gBACd,IAAI;gBACJ,MAAM,EAAE,8BAA8B;gBACtC,mBAAmB,EAAE,MAAM;aAC5B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO;QAC5B,CAAC,CAAC,MAAM,gBAAgB,CAAC,OAAkC,CAAC;QAC5D,CAAC,CAAC,MAAM,WAAW,CAAC,OAA6B,CAAC,CAAC;IAErD,OAAO;QACL,KAAK;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK;QACd,IAAI;QACJ,MAAM,EAAE,yBAAyB;KAClC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,MAAc;IAChE,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,kCAAkC,OAAO,GAAG,EAC5C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -23,6 +23,15 @@ export interface SkillResolverOptions {
|
|
|
23
23
|
* with a symlink from {workspace}/.stigmer -> the platform dir.
|
|
24
24
|
*/
|
|
25
25
|
export declare function resolveSkills(client: StigmerClient, skillRefs: ApiResourceReference[], options: SkillResolverOptions): Promise<SkillMetadata[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Remove the workspace `.stigmer` symlink created by {@link resolveSkills}.
|
|
28
|
+
*
|
|
29
|
+
* Called in the activity's finally so attaching a real repo leaves no Stigmer
|
|
30
|
+
* symlink behind once the turn ends (issue #173); a multi-turn session recreates
|
|
31
|
+
* it on the next turn. Only ever removes a SYMLINK — a real `.stigmer` directory
|
|
32
|
+
* (which would be the user's own, not ours) is left untouched. Best-effort.
|
|
33
|
+
*/
|
|
34
|
+
export declare function removeStigmerSymlink(workspaceDir: string): Promise<void>;
|
|
26
35
|
/**
|
|
27
36
|
* Clean up platform-managed skill directory for a session.
|
|
28
37
|
*/
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* - Creates a symlink from the workspace to the platform dir
|
|
9
9
|
* - Returns metadata for prompt injection
|
|
10
10
|
*/
|
|
11
|
-
import { mkdir, writeFile, symlink, readlink, unlink, rm } from "node:fs/promises";
|
|
11
|
+
import { mkdir, writeFile, symlink, readlink, unlink, rm, lstat } from "node:fs/promises";
|
|
12
12
|
import { join, dirname } from "node:path";
|
|
13
13
|
import { getPlatformDir } from "../../shared/workspace/platform-dir.js";
|
|
14
14
|
import { extractZipFileEntries } from "../../shared/zip-extract.js";
|
|
@@ -119,6 +119,29 @@ async function ensureStigmerSymlink(workspaceDir, platformDir) {
|
|
|
119
119
|
}
|
|
120
120
|
await symlink(platformDir, linkPath, "dir");
|
|
121
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Remove the workspace `.stigmer` symlink created by {@link resolveSkills}.
|
|
124
|
+
*
|
|
125
|
+
* Called in the activity's finally so attaching a real repo leaves no Stigmer
|
|
126
|
+
* symlink behind once the turn ends (issue #173); a multi-turn session recreates
|
|
127
|
+
* it on the next turn. Only ever removes a SYMLINK — a real `.stigmer` directory
|
|
128
|
+
* (which would be the user's own, not ours) is left untouched. Best-effort.
|
|
129
|
+
*/
|
|
130
|
+
export async function removeStigmerSymlink(workspaceDir) {
|
|
131
|
+
const linkPath = join(workspaceDir, STIGMER_LOCAL_STATE_DIR);
|
|
132
|
+
try {
|
|
133
|
+
const stat = await lstat(linkPath);
|
|
134
|
+
if (stat.isSymbolicLink()) {
|
|
135
|
+
await unlink(linkPath);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
if (err?.code !== "ENOENT") {
|
|
140
|
+
console.warn(`removeStigmerSymlink: failed to remove ${linkPath} (non-fatal): ` +
|
|
141
|
+
`${err instanceof Error ? err.message : err}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
122
145
|
/**
|
|
123
146
|
* Clean up platform-managed skill directory for a session.
|
|
124
147
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-resolver.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/skill-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-resolver.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/skill-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,85 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
2
|
+
* Installs and tears down the Cursor HITL approval gate around an agent turn.
|
|
3
|
+
*
|
|
4
|
+
* The gate has two surfaces, kept deliberately separate (issue #173):
|
|
5
|
+
*
|
|
6
|
+
* 1. Runner-owned artifacts — the hook script, approval-state file, and denial
|
|
7
|
+
* ledger — live in the session's HITL directory OUTSIDE the user's workspace
|
|
8
|
+
* (`~/.stigmer/sessions/{id}/hitl/`). They never touch the attached repo.
|
|
9
|
+
*
|
|
10
|
+
* 2. Workspace surface — a single `.cursor/hooks.json` written into the
|
|
11
|
+
* workspace, because the Cursor SDK only loads project hooks from that
|
|
12
|
+
* hard-coded path. It is kept minimal, MERGED with any pre-existing user
|
|
13
|
+
* hooks.json, points at the hook script by ABSOLUTE path (so multi-root IDE
|
|
14
|
+
* windows can always find it instead of failing closed), and is RESTORED to
|
|
15
|
+
* its original content when the turn ends.
|
|
16
|
+
*
|
|
17
|
+
* Why this shape. The previous design wrote all four files into the workspace
|
|
18
|
+
* with a repo-relative hook command and never cleaned up. For a local-folder
|
|
19
|
+
* workspace (the user's real repo, often open in their Cursor IDE) that gated
|
|
20
|
+
* the user's own IDE, ingested the IDE's tool calls into the denial ledger,
|
|
21
|
+
* failed closed in multi-root windows (relative path → exit 127), and left the
|
|
22
|
+
* gate behind after the session. Relocating the artifacts, scoping the hook to
|
|
23
|
+
* the runner's own process (see hook-script.ts), and restoring hooks.json after
|
|
24
|
+
* every turn together leave the user's repo and tooling untouched.
|
|
25
|
+
*
|
|
26
|
+
* Durability model: the install runs before every agent create/resume (and on
|
|
27
|
+
* every HITL reinvocation / Temporal activity retry); the teardown runs in the
|
|
28
|
+
* activity's finally. Each turn snapshots and restores independently, so the
|
|
29
|
+
* repo is byte-identical between turns. If a crash skips teardown, the leftover
|
|
30
|
+
* hooks.json is inert: the scope guard allows every invocation once the runner
|
|
31
|
+
* PID is gone, and the relocated artifacts are not in the repo.
|
|
17
32
|
*/
|
|
18
33
|
import { type ApprovalStateFile } from "./approval-state.js";
|
|
19
34
|
/**
|
|
20
|
-
*
|
|
35
|
+
* Handle returned by {@link installHitlGate}, consumed by {@link removeHitlGate}
|
|
36
|
+
* to restore the workspace to its pre-turn state.
|
|
37
|
+
*/
|
|
38
|
+
export interface HitlGateHandle {
|
|
39
|
+
/** Absolute path of the workspace hooks.json this turn manages. */
|
|
40
|
+
hooksJsonPath: string;
|
|
41
|
+
/**
|
|
42
|
+
* Content to restore on teardown: the workspace's original hooks.json bytes
|
|
43
|
+
* (with any stale Stigmer entry stripped), or null when no hooks.json existed
|
|
44
|
+
* before this turn (in which case teardown deletes the file).
|
|
45
|
+
*/
|
|
46
|
+
restoreTo: string | null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Install the HITL approval gate for one agent turn.
|
|
50
|
+
*
|
|
51
|
+
* Writes the runner-owned artifacts into {@link hitlDir} and installs the merged
|
|
52
|
+
* `.cursor/hooks.json` into {@link workspaceRoot}, returning a handle that
|
|
53
|
+
* {@link removeHitlGate} uses to restore the workspace afterward.
|
|
54
|
+
*/
|
|
55
|
+
export declare function installHitlGate(params: {
|
|
56
|
+
workspaceRoot: string;
|
|
57
|
+
hitlDir: string;
|
|
58
|
+
approvalState: ApprovalStateFile;
|
|
59
|
+
runnerPid: number;
|
|
60
|
+
}): Promise<HitlGateHandle>;
|
|
61
|
+
/**
|
|
62
|
+
* Restore the workspace to its pre-turn state.
|
|
63
|
+
*
|
|
64
|
+
* Best-effort and never throws: a teardown failure must not fail the execution,
|
|
65
|
+
* and a leftover hooks.json is inert anyway (see the module doc).
|
|
66
|
+
*/
|
|
67
|
+
export declare function removeHitlGate(handle: HitlGateHandle): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Compute the merged hooks.json to write for this turn and the content to
|
|
70
|
+
* restore afterward.
|
|
71
|
+
*
|
|
72
|
+
* - No existing file → write our standalone config; restore by deleting (null).
|
|
73
|
+
* - Existing, parseable file → append our entry to `hooks.preToolUse`,
|
|
74
|
+
* preserving every other hook type and field; restore the user's original
|
|
75
|
+
* bytes. Any stale Stigmer entry from a prior crashed turn is stripped from
|
|
76
|
+
* BOTH the merged config (no duplicate) and the restore target (self-healing).
|
|
77
|
+
* - Existing, unparseable file → replace for the turn with our standalone
|
|
78
|
+
* config; restore the user's exact original bytes (we never "fix" their file).
|
|
21
79
|
*
|
|
22
|
-
*
|
|
23
|
-
* - .cursor/hooks.json (hooks configuration)
|
|
24
|
-
* - .cursor/hooks/stigmer-approval.sh (hook script, executable)
|
|
25
|
-
* - .cursor/hooks/stigmer-approval-state.json (approval state)
|
|
80
|
+
* Exported for unit testing — this is the load-bearing data transformation.
|
|
26
81
|
*/
|
|
27
|
-
export declare function
|
|
82
|
+
export declare function buildMergedConfig(originalRaw: string | null, scriptPath: string): {
|
|
83
|
+
merged: string;
|
|
84
|
+
restoreTo: string | null;
|
|
85
|
+
};
|
|
@@ -1,61 +1,181 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
|
|
18
|
-
|
|
2
|
+
* Installs and tears down the Cursor HITL approval gate around an agent turn.
|
|
3
|
+
*
|
|
4
|
+
* The gate has two surfaces, kept deliberately separate (issue #173):
|
|
5
|
+
*
|
|
6
|
+
* 1. Runner-owned artifacts — the hook script, approval-state file, and denial
|
|
7
|
+
* ledger — live in the session's HITL directory OUTSIDE the user's workspace
|
|
8
|
+
* (`~/.stigmer/sessions/{id}/hitl/`). They never touch the attached repo.
|
|
9
|
+
*
|
|
10
|
+
* 2. Workspace surface — a single `.cursor/hooks.json` written into the
|
|
11
|
+
* workspace, because the Cursor SDK only loads project hooks from that
|
|
12
|
+
* hard-coded path. It is kept minimal, MERGED with any pre-existing user
|
|
13
|
+
* hooks.json, points at the hook script by ABSOLUTE path (so multi-root IDE
|
|
14
|
+
* windows can always find it instead of failing closed), and is RESTORED to
|
|
15
|
+
* its original content when the turn ends.
|
|
16
|
+
*
|
|
17
|
+
* Why this shape. The previous design wrote all four files into the workspace
|
|
18
|
+
* with a repo-relative hook command and never cleaned up. For a local-folder
|
|
19
|
+
* workspace (the user's real repo, often open in their Cursor IDE) that gated
|
|
20
|
+
* the user's own IDE, ingested the IDE's tool calls into the denial ledger,
|
|
21
|
+
* failed closed in multi-root windows (relative path → exit 127), and left the
|
|
22
|
+
* gate behind after the session. Relocating the artifacts, scoping the hook to
|
|
23
|
+
* the runner's own process (see hook-script.ts), and restoring hooks.json after
|
|
24
|
+
* every turn together leave the user's repo and tooling untouched.
|
|
25
|
+
*
|
|
26
|
+
* Durability model: the install runs before every agent create/resume (and on
|
|
27
|
+
* every HITL reinvocation / Temporal activity retry); the teardown runs in the
|
|
28
|
+
* activity's finally. Each turn snapshots and restores independently, so the
|
|
29
|
+
* repo is byte-identical between turns. If a crash skips teardown, the leftover
|
|
30
|
+
* hooks.json is inert: the scope guard allows every invocation once the runner
|
|
31
|
+
* PID is gone, and the relocated artifacts are not in the repo.
|
|
32
|
+
*/
|
|
33
|
+
import { writeFile, readFile, mkdir, chmod, rm } from "node:fs/promises";
|
|
19
34
|
import { join } from "node:path";
|
|
20
35
|
import { generateHookScript } from "./hook-script.js";
|
|
21
36
|
import { writeApprovalStateFile, resetDenialLedger } from "./approval-state.js";
|
|
22
|
-
const
|
|
23
|
-
const HOOKS_SCRIPTS_DIR = ".cursor/hooks";
|
|
37
|
+
const CURSOR_DIR = ".cursor";
|
|
24
38
|
const HOOKS_CONFIG_FILE = "hooks.json";
|
|
25
39
|
const HOOK_SCRIPT_FILE = "stigmer-approval.sh";
|
|
40
|
+
/** preToolUse hook timeout (seconds) — the script is a quick local decision. */
|
|
41
|
+
const HOOK_TIMEOUT_SECONDS = 10;
|
|
26
42
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
* Install the HITL approval gate for one agent turn.
|
|
44
|
+
*
|
|
45
|
+
* Writes the runner-owned artifacts into {@link hitlDir} and installs the merged
|
|
46
|
+
* `.cursor/hooks.json` into {@link workspaceRoot}, returning a handle that
|
|
47
|
+
* {@link removeHitlGate} uses to restore the workspace afterward.
|
|
48
|
+
*/
|
|
49
|
+
export async function installHitlGate(params) {
|
|
50
|
+
const { workspaceRoot, hitlDir, approvalState, runnerPid } = params;
|
|
51
|
+
const scriptPath = await writeHitlArtifacts(hitlDir, approvalState, runnerPid);
|
|
52
|
+
return installWorkspaceHook(workspaceRoot, scriptPath);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Restore the workspace to its pre-turn state.
|
|
56
|
+
*
|
|
57
|
+
* Best-effort and never throws: a teardown failure must not fail the execution,
|
|
58
|
+
* and a leftover hooks.json is inert anyway (see the module doc).
|
|
59
|
+
*/
|
|
60
|
+
export async function removeHitlGate(handle) {
|
|
61
|
+
try {
|
|
62
|
+
if (handle.restoreTo === null) {
|
|
63
|
+
await rm(handle.hooksJsonPath, { force: true });
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
await writeFile(handle.hooksJsonPath, handle.restoreTo, "utf-8");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
console.warn(`removeHitlGate: failed to restore ${handle.hooksJsonPath} (non-fatal): ` +
|
|
71
|
+
`${err instanceof Error ? err.message : err}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Write the runner-owned gate artifacts (approval-state file, fresh denial
|
|
76
|
+
* ledger, hook script) into the session HITL directory and return the absolute
|
|
77
|
+
* hook-script path. The script is regenerated every turn so the current runner
|
|
78
|
+
* PID and the current state-file/ledger paths are always baked in.
|
|
79
|
+
*/
|
|
80
|
+
async function writeHitlArtifacts(hitlDir, approvalState, runnerPid) {
|
|
81
|
+
await mkdir(hitlDir, { recursive: true });
|
|
82
|
+
const stateFilePath = await writeApprovalStateFile(hitlDir, approvalState);
|
|
83
|
+
// Reset the denial ledger for this turn so the runner only reads denials
|
|
84
|
+
// produced by the current run, even across HITL reinvocations on the durable
|
|
85
|
+
// HITL directory and Temporal activity retries.
|
|
86
|
+
const ledgerFilePath = await resetDenialLedger(hitlDir);
|
|
87
|
+
const hookScriptPath = join(hitlDir, HOOK_SCRIPT_FILE);
|
|
88
|
+
await writeFile(hookScriptPath, generateHookScript(stateFilePath, ledgerFilePath, runnerPid), "utf-8");
|
|
46
89
|
await chmod(hookScriptPath, 0o755);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
90
|
+
return hookScriptPath;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Snapshot the workspace's existing `.cursor/hooks.json`, write a merged config
|
|
94
|
+
* that adds our preToolUse entry (absolute script path) while preserving the
|
|
95
|
+
* user's own hooks, and return the handle for restoration.
|
|
96
|
+
*/
|
|
97
|
+
async function installWorkspaceHook(workspaceRoot, scriptPath) {
|
|
98
|
+
const cursorDir = join(workspaceRoot, CURSOR_DIR);
|
|
99
|
+
const hooksJsonPath = join(cursorDir, HOOKS_CONFIG_FILE);
|
|
100
|
+
let originalRaw = null;
|
|
101
|
+
try {
|
|
102
|
+
originalRaw = await readFile(hooksJsonPath, "utf-8");
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
originalRaw = null;
|
|
106
|
+
}
|
|
107
|
+
const { merged, restoreTo } = buildMergedConfig(originalRaw, scriptPath);
|
|
108
|
+
await mkdir(cursorDir, { recursive: true });
|
|
109
|
+
await writeFile(hooksJsonPath, merged, "utf-8");
|
|
110
|
+
return { hooksJsonPath, restoreTo };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* The preToolUse entry the gate installs. Absolute `command` so the hook is
|
|
114
|
+
* found regardless of which workspace root a multi-root IDE resolves against.
|
|
115
|
+
*/
|
|
116
|
+
function buildHookEntry(scriptPath) {
|
|
117
|
+
return { command: scriptPath, timeout: HOOK_TIMEOUT_SECONDS, failClosed: true };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Identify a preToolUse entry the gate itself wrote (in this or a prior,
|
|
121
|
+
* crash-leftover turn) so a re-install never duplicates it and a restore strips
|
|
122
|
+
* it. Matched by the unmistakable HITL script path, never by a user's own hook.
|
|
123
|
+
*/
|
|
124
|
+
function isStigmerHookEntry(entry) {
|
|
125
|
+
if (!entry || typeof entry !== "object")
|
|
126
|
+
return false;
|
|
127
|
+
const command = entry.command;
|
|
128
|
+
return (typeof command === "string" &&
|
|
129
|
+
command.includes("/.stigmer/sessions/") &&
|
|
130
|
+
command.endsWith(`/${HOOK_SCRIPT_FILE}`));
|
|
131
|
+
}
|
|
132
|
+
const STANDALONE_CONFIG = (scriptPath) => JSON.stringify({ version: 1, hooks: { preToolUse: [buildHookEntry(scriptPath)] } }, null, 2);
|
|
133
|
+
/**
|
|
134
|
+
* Compute the merged hooks.json to write for this turn and the content to
|
|
135
|
+
* restore afterward.
|
|
136
|
+
*
|
|
137
|
+
* - No existing file → write our standalone config; restore by deleting (null).
|
|
138
|
+
* - Existing, parseable file → append our entry to `hooks.preToolUse`,
|
|
139
|
+
* preserving every other hook type and field; restore the user's original
|
|
140
|
+
* bytes. Any stale Stigmer entry from a prior crashed turn is stripped from
|
|
141
|
+
* BOTH the merged config (no duplicate) and the restore target (self-healing).
|
|
142
|
+
* - Existing, unparseable file → replace for the turn with our standalone
|
|
143
|
+
* config; restore the user's exact original bytes (we never "fix" their file).
|
|
144
|
+
*
|
|
145
|
+
* Exported for unit testing — this is the load-bearing data transformation.
|
|
146
|
+
*/
|
|
147
|
+
export function buildMergedConfig(originalRaw, scriptPath) {
|
|
148
|
+
if (originalRaw === null) {
|
|
149
|
+
return { merged: STANDALONE_CONFIG(scriptPath), restoreTo: null };
|
|
150
|
+
}
|
|
151
|
+
let parsed;
|
|
152
|
+
try {
|
|
153
|
+
parsed = JSON.parse(originalRaw);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return { merged: STANDALONE_CONFIG(scriptPath), restoreTo: originalRaw };
|
|
157
|
+
}
|
|
158
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
159
|
+
return { merged: STANDALONE_CONFIG(scriptPath), restoreTo: originalRaw };
|
|
160
|
+
}
|
|
161
|
+
const root = parsed;
|
|
162
|
+
const hooks = root.hooks && typeof root.hooks === "object" && !Array.isArray(root.hooks)
|
|
163
|
+
? root.hooks
|
|
164
|
+
: {};
|
|
165
|
+
const existingPreToolUse = Array.isArray(hooks.preToolUse) ? hooks.preToolUse : [];
|
|
166
|
+
const userEntries = existingPreToolUse.filter((e) => !isStigmerHookEntry(e));
|
|
167
|
+
const strippedStale = userEntries.length !== existingPreToolUse.length;
|
|
168
|
+
const version = typeof root.version === "number" ? root.version : 1;
|
|
169
|
+
const merged = JSON.stringify({
|
|
170
|
+
...root,
|
|
171
|
+
version,
|
|
172
|
+
hooks: { ...hooks, preToolUse: [...userEntries, buildHookEntry(scriptPath)] },
|
|
173
|
+
}, null, 2);
|
|
174
|
+
// Restore the user's exact original bytes — unless we stripped a stale Stigmer
|
|
175
|
+
// entry, in which case restore the cleaned form so our leftover never lingers.
|
|
176
|
+
const restoreTo = strippedStale
|
|
177
|
+
? JSON.stringify({ ...root, version, hooks: { ...hooks, preToolUse: userEntries } }, null, 2)
|
|
178
|
+
: originalRaw;
|
|
179
|
+
return { merged, restoreTo };
|
|
60
180
|
}
|
|
61
181
|
//# sourceMappingURL=workspace-setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-setup.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/workspace-setup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"workspace-setup.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/workspace-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Session-scoped platform directory management.
|
|
3
3
|
*
|
|
4
|
-
* Each agent execution session gets a dedicated
|
|
5
|
-
* `~/.stigmer/sessions/{sessionId}
|
|
6
|
-
* attachments, and other platform-managed files
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Each agent execution session gets a dedicated directory tree under
|
|
5
|
+
* `~/.stigmer/sessions/{sessionId}/`:
|
|
6
|
+
* - `platform/` — skills, attachments, and other platform-managed files the
|
|
7
|
+
* agent sees via the `.stigmer/` virtual namespace (WorkspaceBackend routing).
|
|
8
|
+
* - `hitl/` — the HITL approval gate's runtime artifacts (hook script, approval
|
|
9
|
+
* state, denial ledger). These live OUTSIDE the user's workspace so attaching
|
|
10
|
+
* a real repo never leaves Stigmer files behind in it (see issue #173); only
|
|
11
|
+
* a minimal, transient `.cursor/hooks.json` referencing the absolute script
|
|
12
|
+
* path is written into the workspace itself.
|
|
9
13
|
*
|
|
10
14
|
* This module replaces the duplicated `getPlatformDir` helpers in
|
|
11
15
|
* execute-cursor/skill-resolver.ts and execute-cursor/attachment-resolver.ts.
|
|
@@ -23,3 +27,20 @@ export declare function getPlatformDir(sessionId: string): string;
|
|
|
23
27
|
* safe to call multiple times for the same session.
|
|
24
28
|
*/
|
|
25
29
|
export declare function ensurePlatformDir(sessionId: string): Promise<string>;
|
|
30
|
+
/**
|
|
31
|
+
* Compute the HITL directory path for a session — the runner-owned home for the
|
|
32
|
+
* approval gate's hook script, approval-state file, and denial ledger.
|
|
33
|
+
*
|
|
34
|
+
* Kept separate from the workspace so the gate's machinery never pollutes the
|
|
35
|
+
* user's repo: the workspace only ever holds a transient `.cursor/hooks.json`
|
|
36
|
+
* that points here by absolute path. Pure function — performs no I/O.
|
|
37
|
+
*/
|
|
38
|
+
export declare function getHitlDir(sessionId: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Ensure the HITL directory exists and return its path.
|
|
41
|
+
*
|
|
42
|
+
* Creates the full directory tree if it does not exist. Idempotent —
|
|
43
|
+
* safe to call multiple times for the same session (including across HITL
|
|
44
|
+
* reinvocations and Temporal activity retries).
|
|
45
|
+
*/
|
|
46
|
+
export declare function ensureHitlDir(sessionId: string): Promise<string>;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Session-scoped platform directory management.
|
|
3
3
|
*
|
|
4
|
-
* Each agent execution session gets a dedicated
|
|
5
|
-
* `~/.stigmer/sessions/{sessionId}
|
|
6
|
-
* attachments, and other platform-managed files
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Each agent execution session gets a dedicated directory tree under
|
|
5
|
+
* `~/.stigmer/sessions/{sessionId}/`:
|
|
6
|
+
* - `platform/` — skills, attachments, and other platform-managed files the
|
|
7
|
+
* agent sees via the `.stigmer/` virtual namespace (WorkspaceBackend routing).
|
|
8
|
+
* - `hitl/` — the HITL approval gate's runtime artifacts (hook script, approval
|
|
9
|
+
* state, denial ledger). These live OUTSIDE the user's workspace so attaching
|
|
10
|
+
* a real repo never leaves Stigmer files behind in it (see issue #173); only
|
|
11
|
+
* a minimal, transient `.cursor/hooks.json` referencing the absolute script
|
|
12
|
+
* path is written into the workspace itself.
|
|
9
13
|
*
|
|
10
14
|
* This module replaces the duplicated `getPlatformDir` helpers in
|
|
11
15
|
* execute-cursor/skill-resolver.ts and execute-cursor/attachment-resolver.ts.
|
|
@@ -13,14 +17,18 @@
|
|
|
13
17
|
import { join } from "node:path";
|
|
14
18
|
import { mkdir } from "node:fs/promises";
|
|
15
19
|
import { homedir } from "node:os";
|
|
20
|
+
/** Root of a session's runner-owned directory tree (outside the workspace). */
|
|
21
|
+
function getSessionDir(sessionId) {
|
|
22
|
+
const home = process.env.HOME || process.env.USERPROFILE || homedir();
|
|
23
|
+
return join(home, ".stigmer", "sessions", sessionId);
|
|
24
|
+
}
|
|
16
25
|
/**
|
|
17
26
|
* Compute the platform directory path for a session.
|
|
18
27
|
*
|
|
19
28
|
* Pure function — does not create the directory or perform I/O.
|
|
20
29
|
*/
|
|
21
30
|
export function getPlatformDir(sessionId) {
|
|
22
|
-
|
|
23
|
-
return join(home, ".stigmer", "sessions", sessionId, "platform");
|
|
31
|
+
return join(getSessionDir(sessionId), "platform");
|
|
24
32
|
}
|
|
25
33
|
/**
|
|
26
34
|
* Ensure the platform directory exists and return its path.
|
|
@@ -33,4 +41,27 @@ export async function ensurePlatformDir(sessionId) {
|
|
|
33
41
|
await mkdir(dir, { recursive: true });
|
|
34
42
|
return dir;
|
|
35
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Compute the HITL directory path for a session — the runner-owned home for the
|
|
46
|
+
* approval gate's hook script, approval-state file, and denial ledger.
|
|
47
|
+
*
|
|
48
|
+
* Kept separate from the workspace so the gate's machinery never pollutes the
|
|
49
|
+
* user's repo: the workspace only ever holds a transient `.cursor/hooks.json`
|
|
50
|
+
* that points here by absolute path. Pure function — performs no I/O.
|
|
51
|
+
*/
|
|
52
|
+
export function getHitlDir(sessionId) {
|
|
53
|
+
return join(getSessionDir(sessionId), "hitl");
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Ensure the HITL directory exists and return its path.
|
|
57
|
+
*
|
|
58
|
+
* Creates the full directory tree if it does not exist. Idempotent —
|
|
59
|
+
* safe to call multiple times for the same session (including across HITL
|
|
60
|
+
* reinvocations and Temporal activity retries).
|
|
61
|
+
*/
|
|
62
|
+
export async function ensureHitlDir(sessionId) {
|
|
63
|
+
const dir = getHitlDir(sessionId);
|
|
64
|
+
await mkdir(dir, { recursive: true });
|
|
65
|
+
return dir;
|
|
66
|
+
}
|
|
36
67
|
//# sourceMappingURL=platform-dir.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-dir.js","sourceRoot":"","sources":["../../../src/shared/workspace/platform-dir.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"platform-dir.js","sourceRoot":"","sources":["../../../src/shared/workspace/platform-dir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,+EAA+E;AAC/E,SAAS,aAAa,CAAC,SAAiB;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,EAAE,CAAC;IACtE,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IACvD,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stigmer/runner",
|
|
3
|
-
"version": "3.0.8-dev.
|
|
3
|
+
"version": "3.0.8-dev.20260613041848",
|
|
4
4
|
"description": "Embeddable Temporal worker for the Stigmer AI agent platform — handles agent execution, workflow orchestration, and MCP server management",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"@opentelemetry/resources": "^2.0.0",
|
|
87
87
|
"@opentelemetry/sdk-trace-base": "^2.0.0",
|
|
88
88
|
"@opentelemetry/sdk-trace-node": "^2.0.0",
|
|
89
|
-
"@stigmer/protos": "3.0.8-dev.
|
|
89
|
+
"@stigmer/protos": "3.0.8-dev.20260613041848",
|
|
90
90
|
"@temporalio/activity": "^1.11.0",
|
|
91
91
|
"@temporalio/client": "^1.11.0",
|
|
92
92
|
"@temporalio/common": "^1.11.0",
|