@clipboard-health/groundcrew 4.2.2 → 4.2.4
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/clearance-allow-hosts +0 -2
- package/dist/commands/setupWorkspace.d.ts.map +1 -1
- package/dist/commands/setupWorkspace.js +18 -9
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +2 -1
- package/dist/lib/launchCommand.d.ts.map +1 -1
- package/dist/lib/launchCommand.js +52 -25
- package/dist/lib/stagedLaunch.d.ts +1 -0
- package/dist/lib/stagedLaunch.d.ts.map +1 -1
- package/dist/lib/stagedLaunch.js +2 -1
- package/package.json +1 -1
package/clearance-allow-hosts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupWorkspace.d.ts","sourceRoot":"","sources":["../../src/commands/setupWorkspace.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiBnE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"setupWorkspace.d.ts","sourceRoot":"","sources":["../../src/commands/setupWorkspace.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiBnE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAuBD,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,qBAAqB,EAC9B,UAAU,GAAE,wBAA6B,GACxC,OAAO,CAAC,IAAI,CAAC,CAyGf;AAiHD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC,IAAI,CAAC,CAwCf"}
|
|
@@ -20,6 +20,7 @@ function stagePrompt(input) {
|
|
|
20
20
|
worktree: input.worktreeName,
|
|
21
21
|
title: input.ticketDetails.title,
|
|
22
22
|
description: input.ticketDetails.description,
|
|
23
|
+
workspaceContinuationInstruction: input.workspaceContinuationInstruction,
|
|
23
24
|
},
|
|
24
25
|
});
|
|
25
26
|
}
|
|
@@ -63,7 +64,14 @@ export async function setupWorkspace(config, options, runOptions = {}) {
|
|
|
63
64
|
let promptDir;
|
|
64
65
|
try {
|
|
65
66
|
const ticketDetails = options.details;
|
|
66
|
-
const
|
|
67
|
+
const accessHint = await workspaces.accessHint(config, ticket, signal);
|
|
68
|
+
const stagedPrompt = stagePrompt({
|
|
69
|
+
config,
|
|
70
|
+
ticket,
|
|
71
|
+
ticketDetails,
|
|
72
|
+
worktreeName,
|
|
73
|
+
workspaceContinuationInstruction: renderWorkspaceContinuationInstruction(accessHint),
|
|
74
|
+
});
|
|
67
75
|
promptDir = stagedPrompt.directory;
|
|
68
76
|
const secretsFile = stageBuildSecrets(promptDir);
|
|
69
77
|
const launchCommand = buildLaunchCommand({
|
|
@@ -98,7 +106,9 @@ export async function setupWorkspace(config, options, runOptions = {}) {
|
|
|
98
106
|
log(`Workspace "${ticket}" launched (${model})`);
|
|
99
107
|
log(` Worktree: ${launchDir}`);
|
|
100
108
|
log(` Branch: ${branchName}`);
|
|
101
|
-
|
|
109
|
+
if (accessHint !== undefined) {
|
|
110
|
+
logAccessHint(accessHint);
|
|
111
|
+
}
|
|
102
112
|
}
|
|
103
113
|
catch (error) {
|
|
104
114
|
await rollbackWorktree({ config, entry: created, promptDir });
|
|
@@ -136,16 +146,15 @@ async function logAccessHintForExistingWorkspace(arguments_) {
|
|
|
136
146
|
}
|
|
137
147
|
logAccessHint(accessHint);
|
|
138
148
|
}
|
|
139
|
-
async function logWorkspaceAccessHint(arguments_) {
|
|
140
|
-
const accessHint = await workspaces.accessHint(arguments_.config, arguments_.ticket, arguments_.signal);
|
|
141
|
-
if (accessHint === undefined) {
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
logAccessHint(accessHint);
|
|
145
|
-
}
|
|
146
149
|
function logAccessHint(accessHint) {
|
|
147
150
|
log(` Attach: ${accessHint.command}`);
|
|
148
151
|
}
|
|
152
|
+
function renderWorkspaceContinuationInstruction(accessHint) {
|
|
153
|
+
if (accessHint === undefined) {
|
|
154
|
+
return "";
|
|
155
|
+
}
|
|
156
|
+
return `7. Include this workspace continuation note in the PR body: Workspace attach: \`${accessHint.command}\`.`;
|
|
157
|
+
}
|
|
149
158
|
function recordRunStateBestEffort(arguments_) {
|
|
150
159
|
try {
|
|
151
160
|
recordRunState({
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAIrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAEpE;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5D,eAAO,MAAM,uBAAuB,EAAE,SAAS,oBAAoB,EAIzD,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,MAAM,CAAC;AAEtD,eAAO,MAAM,qBAAqB,EAAE,SAAS,kBAAkB,EAKrD,CAAC;AAEX;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;;;OAOG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QACN,QAAQ,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACjD,CAAC;IACF;;;;OAIG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,KAAK,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,CAAC;AAC/D,KAAK,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,GAAG;IAC1E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB,CAAC;AACF,UAAU,2BAA2B;IACnC,QAAQ,EAAE,IAAI,CAAC;CAChB;AACD,KAAK,mBAAmB,GAAG,0BAA0B,GAAG,2BAA2B,CAAC;AAEpF;;;;;;;;;GASG;AACH,MAAM,WAAW,MAAM;IACrB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,YAAY,CAAC,EAAE;QACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB;;;;;WAKG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;KACnD,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;;OAIG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC;;;;OAIG;IACH,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,kBAAkB,CAAC;KAC7B,CAAC;IACF,OAAO,CAAC,EAAE;QACR;;;;;WAKG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,GAAG,EAAE;QACH,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,YAAY,EAAE;QACZ,iBAAiB,EAAE,MAAM,CAAC;QAC1B,wBAAwB,EAAE,MAAM,CAAC;QACjC,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;KAC9C,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF;;;OAGG;IACH,aAAa,EAAE,oBAAoB,CAAC;IACpC;;;;OAIG;IACH,KAAK,EAAE;QACL,MAAM,EAAE,kBAAkB,CAAC;KAC5B,CAAC;IACF,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -65,7 +65,7 @@ const DEFAULT_PROMPT_INITIAL = [
|
|
|
65
65
|
"4. Review your own diff before stopping. Look for bugs, regressions, missing tests, security issues, and convention violations, then fix any issues you find.",
|
|
66
66
|
"5. If this repository uses GitHub and the `gh` CLI is available and authenticated, open a pull request. If you cannot open one, leave the branch ready and record the blocker.",
|
|
67
67
|
"6. Include `Closes {{ticket}}` in the PR description.",
|
|
68
|
-
"
|
|
68
|
+
"{{workspaceContinuationInstruction}}",
|
|
69
69
|
"",
|
|
70
70
|
"Stop after the branch is ready or the PR is open.",
|
|
71
71
|
].join("\n");
|
|
@@ -74,6 +74,7 @@ const ALLOWED_PROMPT_PLACEHOLDERS = new Set([
|
|
|
74
74
|
"{{worktree}}",
|
|
75
75
|
"{{title}}",
|
|
76
76
|
"{{description}}",
|
|
77
|
+
"{{workspaceContinuationInstruction}}",
|
|
77
78
|
]);
|
|
78
79
|
const PROMPT_PLACEHOLDER_RE = /{{[^{}]*}}/g;
|
|
79
80
|
const PERCENT_MIN_EXCLUSIVE = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launchCommand.d.ts","sourceRoot":"","sources":["../../src/lib/launchCommand.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsB,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAGzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,GAAE,MAAwB,GAAG,MAAM,CAcvF;AAID;;;GAGG;AACH,eAAO,MAAM,aAAa,mFACwD,CAAC;AAiCnF,UAAU,sBAAsB;IAC9B,UAAU,EAAE,eAAe,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;;OAIG;IACH,MAAM,EAAE,WAAW,CAAC;IACpB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,sBAAsB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"launchCommand.d.ts","sourceRoot":"","sources":["../../src/lib/launchCommand.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsB,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAGzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,GAAE,MAAwB,GAAG,MAAM,CAcvF;AAID;;;GAGG;AACH,eAAO,MAAM,aAAa,mFACwD,CAAC;AAiCnF,UAAU,sBAAsB;IAC9B,UAAU,EAAE,eAAe,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;;OAIG;IACH,MAAM,EAAE,WAAW,CAAC;IACpB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,sBAAsB,GAAG,MAAM,CAQ7E"}
|
|
@@ -65,20 +65,35 @@ export function buildLaunchCommand(arguments_) {
|
|
|
65
65
|
if (arguments_.runner === "sdx") {
|
|
66
66
|
return buildSdxLaunchCommand(arguments_);
|
|
67
67
|
}
|
|
68
|
-
|
|
68
|
+
if (shouldWrapWithSafehouse(arguments_)) {
|
|
69
|
+
return buildSafehouseLaunchCommand(arguments_);
|
|
70
|
+
}
|
|
71
|
+
return buildUnwrappedHostLaunchCommand(arguments_);
|
|
69
72
|
}
|
|
70
|
-
|
|
73
|
+
/**
|
|
74
|
+
* The Safehouse wrap applies only when `runner === "safehouse"` and `cmd` does
|
|
75
|
+
* not already invoke `safehouse` itself. A `safehouse …` cmd owns its own
|
|
76
|
+
* sandbox flags, and we can't splice setup into a command we don't control, so
|
|
77
|
+
* those (and the `none` runner) fall through to the unwrapped host path.
|
|
78
|
+
*/
|
|
79
|
+
function shouldWrapWithSafehouse(arguments_) {
|
|
80
|
+
if (arguments_.runner !== "safehouse") {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
return !/^safehouse(\s|$)/.test(arguments_.definition.cmd);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Unsandboxed host launch (`runner === "none"`, or a `safehouse …` cmd that
|
|
87
|
+
* brings its own wrap). Setup, secret sourcing, and the agent all run on the
|
|
88
|
+
* host shell because there is no groundcrew-managed sandbox to run them inside.
|
|
89
|
+
*/
|
|
90
|
+
function buildUnwrappedHostLaunchCommand(arguments_) {
|
|
71
91
|
const promptDir = dirname(arguments_.promptFile);
|
|
72
92
|
const agentCmd = renderAgentCommand({
|
|
73
93
|
agentCmd: arguments_.definition.cmd,
|
|
74
94
|
worktreeDir: arguments_.worktreeDir,
|
|
75
95
|
sandboxName: "",
|
|
76
96
|
});
|
|
77
|
-
const wrapped = wrapAgentForHostRunner({
|
|
78
|
-
runner: arguments_.runner,
|
|
79
|
-
rawCmd: arguments_.definition.cmd,
|
|
80
|
-
agentCmd,
|
|
81
|
-
});
|
|
82
97
|
const lines = [`cd ${shellSingleQuote(arguments_.worktreeDir)}`];
|
|
83
98
|
if (arguments_.secretsFile !== undefined) {
|
|
84
99
|
lines.push(sourceSecretsLine(arguments_.secretsFile));
|
|
@@ -87,28 +102,40 @@ function buildHostLaunchCommand(arguments_) {
|
|
|
87
102
|
if (arguments_.secretsFile !== undefined) {
|
|
88
103
|
lines.push(unsetSecretsLine());
|
|
89
104
|
}
|
|
90
|
-
lines.push(`_p=$(cat ${shellSingleQuote(arguments_.promptFile)})`, `rm -rf ${shellSingleQuote(promptDir)}`, `exec ${
|
|
105
|
+
lines.push(`_p=$(cat ${shellSingleQuote(arguments_.promptFile)})`, `rm -rf ${shellSingleQuote(promptDir)}`, `exec ${agentCmd} "$_p"`);
|
|
91
106
|
return lines.join(" && ");
|
|
92
107
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Safehouse launch. Setup runs *inside* the `safehouse-clearance` wrap (mirroring
|
|
110
|
+
* the sdx runner) so the repo's `.groundcrew/setup.sh` and its `npm install` are
|
|
111
|
+
* filesystem-isolated and egress-restricted, rather than running on the bare host.
|
|
112
|
+
*
|
|
113
|
+
* Build secrets are sourced into the host launch shell so Safehouse can forward
|
|
114
|
+
* them into the sandbox via `--env-pass` (Safehouse's `--env=FILE` mode otherwise
|
|
115
|
+
* strips them); they're `unset` inside the wrap after setup so the agent process
|
|
116
|
+
* never inherits them. The host keeps only `cd`, the prompt read, and the wrap exec.
|
|
117
|
+
*/
|
|
118
|
+
function buildSafehouseLaunchCommand(arguments_) {
|
|
119
|
+
const promptDir = dirname(arguments_.promptFile);
|
|
120
|
+
const agentCmd = renderAgentCommand({
|
|
121
|
+
agentCmd: arguments_.definition.cmd,
|
|
122
|
+
worktreeDir: arguments_.worktreeDir,
|
|
123
|
+
sandboxName: "",
|
|
124
|
+
});
|
|
125
|
+
const innerParts = [setupWithStatusReporting(SETUP_COMMAND)];
|
|
126
|
+
if (arguments_.secretsFile !== undefined) {
|
|
127
|
+
innerParts.push(unsetSecretsLine());
|
|
104
128
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
129
|
+
innerParts.push(`exec ${agentCmd} "$@"`);
|
|
130
|
+
const innerCommand = innerParts.join("; ");
|
|
131
|
+
// Trailing space keeps the flag and `sh` separated; empty when no secrets.
|
|
132
|
+
const envPassFlag = arguments_.secretsFile === undefined ? "" : `--env-pass=${BUILD_SECRET_NAMES.join(",")} `;
|
|
133
|
+
const lines = [`cd ${shellSingleQuote(arguments_.worktreeDir)}`];
|
|
134
|
+
if (arguments_.secretsFile !== undefined) {
|
|
135
|
+
lines.push(sourceSecretsLine(arguments_.secretsFile));
|
|
110
136
|
}
|
|
111
|
-
|
|
137
|
+
lines.push(`_p=$(cat ${shellSingleQuote(arguments_.promptFile)})`, `rm -rf ${shellSingleQuote(promptDir)}`, `exec ${shellSingleQuote(SAFEHOUSE_CLEARANCE_WRAPPER_PATH)} ${envPassFlag}sh -lc ${shellSingleQuote(innerCommand)} sh "$_p"`);
|
|
138
|
+
return lines.join(" && ");
|
|
112
139
|
}
|
|
113
140
|
function buildSdxLaunchCommand(arguments_) {
|
|
114
141
|
/* v8 ignore next 5 @preserve -- setupWorkspace passes sandboxName + sandbox config when picking sdx; missing fields are programmer errors */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stagedLaunch.d.ts","sourceRoot":"","sources":["../../src/lib/stagedLaunch.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAItE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,uBAAuB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"stagedLaunch.d.ts","sourceRoot":"","sources":["../../src/lib/stagedLaunch.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAItE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,uBAAuB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC,EAAE,MAAM,CAAC;CAC1C;AAWD,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,YAAY,CAKf;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,uBAAuB,CAAC;CACpC,GAAG,YAAY,CAMf;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAevE;AAQD,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtF;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE1D"}
|
package/dist/lib/stagedLaunch.js
CHANGED
|
@@ -9,7 +9,8 @@ function renderPromptTemplate(template, variables) {
|
|
|
9
9
|
.replaceAll("{{ticket}}", variables.ticket)
|
|
10
10
|
.replaceAll("{{worktree}}", variables.worktree)
|
|
11
11
|
.replaceAll("{{title}}", variables.title)
|
|
12
|
-
.replaceAll("{{description}}", variables.description)
|
|
12
|
+
.replaceAll("{{description}}", variables.description)
|
|
13
|
+
.replaceAll("{{workspaceContinuationInstruction}}", variables.workspaceContinuationInstruction);
|
|
13
14
|
}
|
|
14
15
|
export function stagePromptText(input) {
|
|
15
16
|
const promptDir = mkdtempSync(join(tmpdir(), `${input.prefix}-${input.ticket}-`));
|
package/package.json
CHANGED