clanka 0.2.16 → 0.2.18

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.
@@ -113,7 +113,7 @@ export const AgentTools = Toolkit.make(Tool.make("readFile", {
113
113
  }),
114
114
  dependencies: [CurrentDirectory],
115
115
  }), Tool.make("applyPatch", {
116
- description: "Apply a git diff / unified diff patch, or a wrapped patch, across one or more files.",
116
+ description: "Add, update or remove multiple files with a git diff / unified diff / wrapped patch.",
117
117
  parameters: Schema.String.annotate({
118
118
  identifier: "patch",
119
119
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"ScriptPreprocessing.d.ts","sourceRoot":"","sources":["../src/ScriptPreprocessing.ts"],"names":[],"mappings":"AAicA,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,KAAG,MAM/C,CAAA"}
1
+ {"version":3,"file":"ScriptPreprocessing.d.ts","sourceRoot":"","sources":["../src/ScriptPreprocessing.ts"],"names":[],"mappings":"AAkfA,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,KAAG,MAM/C,CAAA"}
@@ -52,22 +52,35 @@ const needsTemplateEscaping = (text) => {
52
52
  }
53
53
  return false;
54
54
  };
55
+ const normalizePatchEscapedQuotes = (text) => text.includes("*** Begin Patch")
56
+ ? text.replace(/\\"([A-Za-z0-9_$.-]+)\\"/g, '"$1"')
57
+ : text;
55
58
  const escapeTemplateLiteralContent = (text) => {
56
- if (!needsTemplateEscaping(text)) {
57
- return text;
59
+ const normalized = normalizePatchEscapedQuotes(text);
60
+ const isPatchContent = normalized.includes("*** Begin Patch");
61
+ if (!needsTemplateEscaping(normalized)) {
62
+ return normalized;
58
63
  }
59
64
  let out = "";
60
- for (let i = 0; i < text.length; i++) {
61
- const char = text[i];
65
+ for (let i = 0; i < normalized.length; i++) {
66
+ const char = normalized[i];
62
67
  if (char === "\\") {
68
+ if (!isPatchContent &&
69
+ (normalized[i + 1] === "`" ||
70
+ (normalized[i + 1] === "$" && normalized[i + 2] === "{"))) {
71
+ out += "\\";
72
+ continue;
73
+ }
63
74
  out += "\\\\";
64
75
  continue;
65
76
  }
66
- if (char === "`" && !isEscaped(text, i)) {
77
+ if (char === "`" && !isEscaped(normalized, i)) {
67
78
  out += "\\`";
68
79
  continue;
69
80
  }
70
- if (char === "$" && text[i + 1] === "{" && !isEscaped(text, i)) {
81
+ if (char === "$" &&
82
+ normalized[i + 1] === "{" &&
83
+ !isEscaped(normalized, i)) {
71
84
  out += "\\$";
72
85
  continue;
73
86
  }
@@ -165,54 +178,27 @@ const fixCallTemplateArgument = (script, functionName) => {
165
178
  }
166
179
  return out;
167
180
  };
168
- const collectCallArgumentIdentifiers = (script, functionName) => {
169
- const out = new Set();
170
- let cursor = 0;
171
- while (cursor < script.length) {
172
- const callStart = findNextIdentifier(script, functionName, cursor);
173
- if (callStart === -1) {
174
- break;
175
- }
176
- const openParen = skipWhitespace(script, callStart + functionName.length);
177
- if (script[openParen] !== "(") {
178
- cursor = callStart + functionName.length;
179
- continue;
180
- }
181
- const argumentStart = skipWhitespace(script, openParen + 1);
182
- const identifier = parseIdentifier(script, argumentStart);
183
- if (identifier === undefined) {
184
- cursor = openParen + 1;
185
- continue;
186
- }
187
- const argumentEnd = skipWhitespace(script, identifier.end);
188
- if (script[argumentEnd] === ")" || script[argumentEnd] === ",") {
189
- out.add(identifier.name);
190
- }
191
- cursor = identifier.end;
192
- }
193
- return out;
194
- };
195
- const fixWriteFileContentTemplates = (script) => {
181
+ const fixCallObjectPropertyTemplate = (script, functionName, propertyName) => {
196
182
  let out = script;
197
183
  let cursor = 0;
198
184
  while (cursor < out.length) {
199
- const callStart = findNextIdentifier(out, "writeFile", cursor);
185
+ const callStart = findNextIdentifier(out, functionName, cursor);
200
186
  if (callStart === -1) {
201
187
  break;
202
188
  }
203
- const openParen = skipWhitespace(out, callStart + "writeFile".length);
189
+ const openParen = skipWhitespace(out, callStart + functionName.length);
204
190
  if (out[openParen] !== "(") {
205
- cursor = callStart + "writeFile".length;
191
+ cursor = callStart + functionName.length;
206
192
  continue;
207
193
  }
208
- const contentKey = findNextIdentifier(out, "content", openParen + 1);
209
- if (contentKey === -1) {
194
+ const propertyKey = findNextIdentifier(out, propertyName, openParen + 1);
195
+ if (propertyKey === -1) {
210
196
  cursor = openParen + 1;
211
197
  continue;
212
198
  }
213
- const colon = skipWhitespace(out, contentKey + "content".length);
199
+ const colon = skipWhitespace(out, propertyKey + propertyName.length);
214
200
  if (out[colon] !== ":") {
215
- cursor = contentKey + "content".length;
201
+ cursor = propertyKey + propertyName.length;
216
202
  continue;
217
203
  }
218
204
  const templateStart = skipWhitespace(out, colon + 1);
@@ -236,27 +222,54 @@ const fixWriteFileContentTemplates = (script) => {
236
222
  }
237
223
  return out;
238
224
  };
239
- const collectWriteFileContentIdentifiers = (script) => {
225
+ const collectCallArgumentIdentifiers = (script, functionName) => {
226
+ const out = new Set();
227
+ let cursor = 0;
228
+ while (cursor < script.length) {
229
+ const callStart = findNextIdentifier(script, functionName, cursor);
230
+ if (callStart === -1) {
231
+ break;
232
+ }
233
+ const openParen = skipWhitespace(script, callStart + functionName.length);
234
+ if (script[openParen] !== "(") {
235
+ cursor = callStart + functionName.length;
236
+ continue;
237
+ }
238
+ const argumentStart = skipWhitespace(script, openParen + 1);
239
+ const identifier = parseIdentifier(script, argumentStart);
240
+ if (identifier === undefined) {
241
+ cursor = openParen + 1;
242
+ continue;
243
+ }
244
+ const argumentEnd = skipWhitespace(script, identifier.end);
245
+ if (script[argumentEnd] === ")" || script[argumentEnd] === ",") {
246
+ out.add(identifier.name);
247
+ }
248
+ cursor = identifier.end;
249
+ }
250
+ return out;
251
+ };
252
+ const collectCallObjectPropertyIdentifiers = (script, functionName, propertyName) => {
240
253
  const out = new Set();
241
254
  let cursor = 0;
242
255
  while (cursor < script.length) {
243
- const callStart = findNextIdentifier(script, "writeFile", cursor);
256
+ const callStart = findNextIdentifier(script, functionName, cursor);
244
257
  if (callStart === -1) {
245
258
  break;
246
259
  }
247
- const openParen = skipWhitespace(script, callStart + "writeFile".length);
260
+ const openParen = skipWhitespace(script, callStart + functionName.length);
248
261
  if (script[openParen] !== "(") {
249
- cursor = callStart + "writeFile".length;
262
+ cursor = callStart + functionName.length;
250
263
  continue;
251
264
  }
252
- const contentKey = findNextIdentifier(script, "content", openParen + 1);
253
- if (contentKey === -1) {
265
+ const propertyKey = findNextIdentifier(script, propertyName, openParen + 1);
266
+ if (propertyKey === -1) {
254
267
  cursor = openParen + 1;
255
268
  continue;
256
269
  }
257
- const afterContent = skipWhitespace(script, contentKey + "content".length);
258
- if (script[afterContent] === ":") {
259
- const valueStart = skipWhitespace(script, afterContent + 1);
270
+ const afterProperty = skipWhitespace(script, propertyKey + propertyName.length);
271
+ if (script[afterProperty] === ":") {
272
+ const valueStart = skipWhitespace(script, afterProperty + 1);
260
273
  const identifier = parseIdentifier(script, valueStart);
261
274
  if (identifier !== undefined) {
262
275
  const valueEnd = skipWhitespace(script, identifier.end);
@@ -267,15 +280,20 @@ const collectWriteFileContentIdentifiers = (script) => {
267
280
  cursor = valueStart + 1;
268
281
  continue;
269
282
  }
270
- if (script[afterContent] === "}" || script[afterContent] === ",") {
271
- out.add("content");
272
- cursor = afterContent + 1;
283
+ if (script[afterProperty] === "}" || script[afterProperty] === ",") {
284
+ out.add(propertyName);
285
+ cursor = afterProperty + 1;
273
286
  continue;
274
287
  }
275
- cursor = afterContent + 1;
288
+ cursor = afterProperty + 1;
276
289
  }
277
290
  return out;
278
291
  };
292
+ const callObjectPropertyTargets = [
293
+ ["writeFile", "content"],
294
+ ["updateTask", "description"],
295
+ ];
296
+ const fixTargetCallObjectPropertyTemplates = (script) => callObjectPropertyTargets.reduce((current, [functionName, propertyName]) => fixCallObjectPropertyTemplate(current, functionName, propertyName), script);
279
297
  const fixAssignedTemplate = (script, variableName) => {
280
298
  let out = script;
281
299
  let cursor = 0;
@@ -331,8 +349,13 @@ const fixAssignedTemplatesForToolCalls = (script) => {
331
349
  identifiers.add(identifier);
332
350
  }
333
351
  }
334
- for (const identifier of collectWriteFileContentIdentifiers(script)) {
335
- identifiers.add(identifier);
352
+ for (const [functionName, propertyName] of callObjectPropertyTargets) {
353
+ for (const identifier of collectCallObjectPropertyIdentifiers(script, functionName, propertyName)) {
354
+ identifiers.add(identifier);
355
+ }
356
+ }
357
+ if (script.includes("*** Begin Patch")) {
358
+ identifiers.add("patch");
336
359
  }
337
360
  let out = script;
338
361
  for (const identifier of identifiers) {
@@ -340,5 +363,5 @@ const fixAssignedTemplatesForToolCalls = (script) => {
340
363
  }
341
364
  return out;
342
365
  };
343
- export const preprocessScript = (script) => fixAssignedTemplatesForToolCalls(["applyPatch", "taskComplete"].reduce((current, functionName) => fixCallTemplateArgument(current, functionName), fixWriteFileContentTemplates(script)));
366
+ export const preprocessScript = (script) => fixAssignedTemplatesForToolCalls(["applyPatch", "taskComplete"].reduce((current, functionName) => fixCallTemplateArgument(current, functionName), fixTargetCallObjectPropertyTemplates(script)));
344
367
  //# sourceMappingURL=ScriptPreprocessing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScriptPreprocessing.js","sourceRoot":"","sources":["../src/ScriptPreprocessing.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,CAAC,IAAwB,EAAW,EAAE,CAC7D,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAElD,MAAM,qBAAqB,GAAG,CAAC,IAAwB,EAAW,EAAE,CAClE,IAAI,KAAK,SAAS,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAE/C,MAAM,qBAAqB,GAAG,CAC5B,IAAY,EACZ,KAAa,EACb,MAAc,EACL,EAAE,CACX,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAA;AAE/E,MAAM,kBAAkB,GAAG,CACzB,IAAY,EACZ,UAAkB,EAClB,IAAY,EACJ,EAAE;IACV,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IAC1C,OAAO,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,IAAI,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1D,OAAO,KAAK,CAAA;QACd,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAC7D,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE;IAC7D,IAAI,CAAC,GAAG,KAAK,CAAA;IACb,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;QAC9C,CAAC,EAAE,CAAA;IACL,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CACtB,IAAY,EACZ,KAAa,EACgD,EAAE;IAC/D,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,CAAA;IACnB,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,EAAE,CAAA;IACP,CAAC;IACD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;QAC5B,GAAG;KACJ,CAAA;AACH,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,KAAa,EAAW,EAAE;IACzD,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;IACjB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,UAAU,EAAE,CAAA;QACZ,CAAC,EAAE,CAAA;IACL,CAAC;IACD,OAAO,UAAU,GAAG,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAW,EAAE;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;QACrB,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,4BAA4B,GAAG,CAAC,IAAY,EAAU,EAAE;IAC5D,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;QACrB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,GAAG,IAAI,MAAM,CAAA;YACb,SAAQ;QACV,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACxC,GAAG,IAAI,KAAK,CAAA;YACZ,SAAQ;QACV,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,IAAI,KAAK,CAAA;YACZ,SAAQ;QACV,CAAC;QACD,GAAG,IAAI,IAAI,CAAA;IACb,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CACtB,IAAY,EACZ,KAAa,EACb,YAAmD,EAC3C,EAAE;IACV,IAAI,GAAG,GAAG,CAAC,CAAC,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAC1C,SAAQ;QACV,CAAC;QACD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QACxC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC7B,GAAG,GAAG,CAAC,CAAA;QACT,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,4BAA4B,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE;IAC3E,IAAI,CAAC,GAAG,KAAK,CAAA;IACb,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;QACrB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,CAAA;QACV,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAClC,OAAO,CAAC,CAAC,CAAA;QACX,CAAC;QACD,CAAC,EAAE,CAAA;IACL,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,SAAiB,EAAU,EAAE;IACnE,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;QACrB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,EAAE,CAAA;YACP,SAAQ;QACV,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,EAAE,CAAA;YACP,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,OAAO,CAAC,CAAA;YACV,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAC1B,IAAY,EACZ,aAAqB,EACrB,SAAiB,EACT,EAAE;IACV,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACpD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC,CAAA;IACX,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,CAAA;QACV,CAAC;IACH,CAAC;IAED,OAAO,CAAC,CAAC,CAAA;AACX,CAAC,CAAA;AAED,MAAM,uBAAuB,GAAG,CAC9B,MAAc,EACd,YAAoB,EACZ,EAAE;IACV,IAAI,GAAG,GAAG,MAAM,CAAA;IAChB,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,OAAO,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;QAC/D,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,MAAK;QACP,CAAC;QAED,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;QACtE,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC,MAAM,CAAA;YACxC,SAAQ;QACV,CAAC;QAED,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,CAAC,CAAA;QACxD,IAAI,GAAG,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;YAC/B,MAAM,GAAG,SAAS,GAAG,CAAC,CAAA;YACtB,SAAQ;QACV,CAAC;QAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,CAAC,CAAA;QACtE,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,aAAa,GAAG,CAAC,CAAA;YAC1B,SAAQ;QACV,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,EAAE,WAAW,CAAC,CAAA;QAC1D,MAAM,OAAO,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAA;QACtD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAA;YAC7E,MAAM,GAAG,WAAW,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC7D,SAAQ;QACV,CAAC;QAED,MAAM,GAAG,WAAW,GAAG,CAAC,CAAA;IAC1B,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,8BAA8B,GAAG,CACrC,MAAc,EACd,YAAoB,EACC,EAAE;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7B,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;QAClE,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,MAAK;QACP,CAAC;QAED,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;QACzE,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9B,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC,MAAM,CAAA;YACxC,SAAQ;QACV,CAAC;QAED,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC,CAAC,CAAA;QAC3D,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;QACzD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,GAAG,SAAS,GAAG,CAAC,CAAA;YACtB,SAAQ;QACV,CAAC;QAED,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;QAC1D,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC;YAC/D,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAC1B,CAAC;QAED,MAAM,GAAG,UAAU,CAAC,GAAG,CAAA;IACzB,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,4BAA4B,GAAG,CAAC,MAAc,EAAU,EAAE;IAC9D,IAAI,GAAG,GAAG,MAAM,CAAA;IAChB,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,OAAO,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;QAC9D,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,MAAK;QACP,CAAC;QAED,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;QACrE,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC,MAAM,CAAA;YACvC,SAAQ;QACV,CAAC;QAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAA;QACpE,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,MAAM,GAAG,SAAS,GAAG,CAAC,CAAA;YACtB,SAAQ;QACV,CAAC;QAED,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;QAChE,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC,MAAM,CAAA;YACtC,SAAQ;QACV,CAAC;QAED,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QACpD,IAAI,GAAG,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;YAC/B,MAAM,GAAG,aAAa,GAAG,CAAC,CAAA;YAC1B,SAAQ;QACV,CAAC;QAED,MAAM,WAAW,GAAG,eAAe,CACjC,GAAG,EACH,aAAa,EACb,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CACvC,CAAA;QACD,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,aAAa,GAAG,CAAC,CAAA;YAC1B,SAAQ;QACV,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,EAAE,WAAW,CAAC,CAAA;QAC1D,MAAM,OAAO,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAA;QACtD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAA;YAC7E,MAAM,GAAG,WAAW,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC7D,SAAQ;QACV,CAAC;QAED,MAAM,GAAG,WAAW,GAAG,CAAC,CAAA;IAC1B,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,kCAAkC,GAAG,CACzC,MAAc,EACO,EAAE;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7B,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;QACjE,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,MAAK;QACP,CAAC;QAED,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;QACxE,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9B,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC,MAAM,CAAA;YACvC,SAAQ;QACV,CAAC;QAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAA;QACvE,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,MAAM,GAAG,SAAS,GAAG,CAAC,CAAA;YACtB,SAAQ;QACV,CAAC;QAED,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;QAC1E,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,CAAA;YAC3D,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;YACtD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;gBACvD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;oBACzD,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;gBAC1B,CAAC;YACH,CAAC;YACD,MAAM,GAAG,UAAU,GAAG,CAAC,CAAA;YACvB,SAAQ;QACV,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC;YACjE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAClB,MAAM,GAAG,YAAY,GAAG,CAAC,CAAA;YACzB,SAAQ;QACV,CAAC;QAED,MAAM,GAAG,YAAY,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAE,YAAoB,EAAU,EAAE;IAC3E,IAAI,GAAG,GAAG,MAAM,CAAA;IAChB,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,OAAO,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;QACnE,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;YACzB,MAAK;QACP,CAAC;QAED,IAAI,eAAe,GAAG,cAAc,CAClC,GAAG,EACH,aAAa,GAAG,YAAY,CAAC,MAAM,CACpC,CAAA;QACD,IAAI,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG,EAAE,CAAC;YACjC,eAAe,GAAG,4BAA4B,CAAC,GAAG,EAAE,eAAe,GAAG,CAAC,CAAC,CAAA;YACxE,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC3B,MAAM,GAAG,aAAa,GAAG,YAAY,CAAC,MAAM,CAAA;gBAC5C,SAAQ;YACV,CAAC;QACH,CAAC;QAED,IACE,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG;YAC5B,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,KAAK,GAAG;YAChC,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,KAAK,GAAG,EAChC,CAAC;YACD,MAAM,GAAG,aAAa,GAAG,YAAY,CAAC,MAAM,CAAA;YAC5C,SAAQ;QACV,CAAC;QAED,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,CAAC,CAAC,CAAA;QAC9D,IAAI,GAAG,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;YAC/B,MAAM,GAAG,aAAa,GAAG,CAAC,CAAA;YAC1B,SAAQ;QACV,CAAC;QAED,MAAM,WAAW,GAAG,eAAe,CACjC,GAAG,EACH,aAAa,EACb,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,KAAK,SAAS;YAClB,IAAI,KAAK,GAAG;YACZ,IAAI,KAAK,GAAG;YACZ,IAAI,KAAK,GAAG;YACZ,IAAI,KAAK,GAAG;YACZ,IAAI,KAAK,GAAG,CACf,CAAA;QACD,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,aAAa,GAAG,CAAC,CAAA;YAC1B,SAAQ;QACV,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,EAAE,WAAW,CAAC,CAAA;QAC1D,MAAM,OAAO,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAA;QACtD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAA;YAC7E,MAAM,GAAG,WAAW,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC7D,SAAQ;QACV,CAAC;QAED,MAAM,GAAG,WAAW,GAAG,CAAC,CAAA;IAC1B,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,gCAAgC,GAAG,CAAC,MAAc,EAAU,EAAE;IAClE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;IACrC,KAAK,MAAM,YAAY,IAAI,CAAC,YAAY,EAAE,cAAc,CAAU,EAAE,CAAC;QACnE,KAAK,MAAM,UAAU,IAAI,8BAA8B,CACrD,MAAM,EACN,YAAY,CACb,EAAE,CAAC;YACF,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,kCAAkC,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAC7B,CAAC;IAED,IAAI,GAAG,GAAG,MAAM,CAAA;IAChB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,GAAG,GAAG,mBAAmB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAU,EAAE,CACzD,gCAAgC,CAC9B,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,MAAM,CACnC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,EACzE,4BAA4B,CAAC,MAAM,CAAC,CACrC,CACF,CAAA"}
1
+ {"version":3,"file":"ScriptPreprocessing.js","sourceRoot":"","sources":["../src/ScriptPreprocessing.ts"],"names":[],"mappings":"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"}
@@ -99,7 +99,15 @@ describe("preprocessScript", () => {
99
99
  const output = preprocessScript(input);
100
100
  assert.strictEqual(output.includes(`const body = ${wrapTemplate(`const value = ${escaped}next${escaped}`)};`), true);
101
101
  });
102
- it.each(["patch", "patch2", "patch3", "patch4"])("fixes broken %s", (fixture) => {
102
+ it.each([
103
+ "patch",
104
+ "patch2",
105
+ "patch3",
106
+ "patch4",
107
+ "patch5",
108
+ "patch6",
109
+ "patch7",
110
+ ])("fixes broken %s", (fixture) => {
103
111
  const content = readFileSync(join(__dirname, "fixtures", `${fixture}-broken.txt`), "utf-8");
104
112
  const fixed = readFileSync(join(__dirname, "fixtures", `${fixture}-fixed.txt`), "utf-8");
105
113
  assert.equal(preprocessScript(content), fixed);
@@ -1 +1 @@
1
- {"version":3,"file":"ScriptPreprocessing.test.js","sourceRoot":"","sources":["../src/ScriptPreprocessing.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,IAAI,GAAG,GAAG,CAAA;AAChB,MAAM,OAAO,GAAG,KAAK,CAAA;AACrB,MAAM,oBAAoB,GAAG,MAAM,CAAA;AACnC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,EAAE,CAAA;AAExE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,KAAK,GAAG;YACZ,oBAAoB;YACpB,iBAAiB;YACjB,iCAAiC;YACjC,IAAI;YACJ,yBAAyB;YACzB,yBAAyB;YACzB,eAAe;YACf,IAAI;SACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAEtC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,OAAO,MAAM,OAAO,EAAE,CAAC,EAC5D,IAAI,CACL,CAAA;QACD,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,OAAO,MAAM,OAAO,EAAE,CAAC,EAC5D,IAAI,CACL,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,KAAK,GAAG;YACZ,oBAAoB;YACpB,iBAAiB;YACjB,iCAAiC;YACjC,IAAI;YACJ,6BAA6B;YAC7B,eAAe;YACf,IAAI;SACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAEtC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,QAAQ,CAAC,kBAAkB,oBAAoB,YAAY,CAAC,EACnE,IAAI,CACL,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,KAAK,GAAG;YACZ,mBAAmB;YACnB,2BAA2B;YAC3B,oCAAoC;YACpC,IAAI;SACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAEtC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,QAAQ,CACb,YAAY,YAAY,CAAC,iBAAiB,OAAO,OAAO,OAAO,EAAE,CAAC,GAAG,CACtE,EACD,IAAI,CACL,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,KAAK,GAAG,0DAA0D,CAAA;QAExE,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAEtC,MAAM,CAAC,WAAW,CAChB,MAAM,EACN,sBAAsB,YAAY,CAAC,eAAe,OAAO,cAAc,OAAO,WAAW,CAAC,GAAG,CAC9F,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,KAAK,GAAG;YACZ,oBAAoB,YAAY,CAAC,iBAAiB,OAAO,OAAO,OAAO,EAAE,CAAC,GAAG;YAC7E,oBAAoB,YAAY,CAAC,iBAAiB,oBAAoB,OAAO,CAAC,GAAG;YACjF,sDAAsD,YAAY,CAAC,WAAW,OAAO,OAAO,OAAO,EAAE,CAAC,KAAK;YAC3G,sBAAsB,YAAY,CAAC,iBAAiB,OAAO,OAAO,OAAO,aAAa,CAAC,GAAG;SAC3F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,KAAK,GAAG,2CAA2C,CAAA;QAEzD,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,KAAK,GAAG;YACZ,gCAAgC;YAChC,iCAAiC;YACjC,IAAI;YACJ,yBAAyB;YACzB,yBAAyB;YACzB,iBAAiB;YACjB,yBAAyB;SAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAEtC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,OAAO,MAAM,OAAO,EAAE,CAAC,EAC5D,IAAI,CACL,CAAA;QACD,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,OAAO,MAAM,OAAO,EAAE,CAAC,EAC5D,IAAI,CACL,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,KAAK,GAAG;YACZ,uDAAuD;YACvD,6BAA6B;SAC9B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAEtC,MAAM,CAAC,WAAW,CAChB,MAAM,EACN;YACE,mBAAmB,YAAY,CAAC,eAAe,OAAO,cAAc,OAAO,WAAW,CAAC,GAAG;YAC1F,6BAA6B;SAC9B,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,KAAK,GAAG;YACZ,sCAAsC;YACtC,mBAAmB;YACnB,2BAA2B;YAC3B,kBAAkB;YAClB,IAAI;SACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAEtC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,QAAQ,CACb,gBAAgB,YAAY,CAAC,iBAAiB,OAAO,OAAO,OAAO,EAAE,CAAC,GAAG,CAC1E,EACD,IAAI,CACL,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAC9C,iBAAiB,EACjB,CAAC,OAAO,EAAE,EAAE;QACV,MAAM,OAAO,GAAG,YAAY,CAC1B,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,aAAa,CAAC,EACpD,OAAO,CACR,CAAA;QACD,MAAM,KAAK,GAAG,YAAY,CACxB,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,YAAY,CAAC,EACnD,OAAO,CACR,CAAA;QACD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAA;IAChD,CAAC,CACF,CAAA;AACH,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"ScriptPreprocessing.test.js","sourceRoot":"","sources":["../src/ScriptPreprocessing.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "clanka",
3
3
  "type": "module",
4
- "version": "0.2.16",
4
+ "version": "0.2.18",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
package/src/AgentTools.ts CHANGED
@@ -143,7 +143,7 @@ export const AgentTools = Toolkit.make(
143
143
  }),
144
144
  Tool.make("applyPatch", {
145
145
  description:
146
- "Apply a git diff / unified diff patch, or a wrapped patch, across one or more files.",
146
+ "Add, update or remove multiple files with a git diff / unified diff / wrapped patch.",
147
147
  parameters: Schema.String.annotate({
148
148
  identifier: "patch",
149
149
  }),
@@ -157,18 +157,23 @@ describe("preprocessScript", () => {
157
157
  )
158
158
  })
159
159
 
160
- it.each(["patch", "patch2", "patch3", "patch4"])(
161
- "fixes broken %s",
162
- (fixture) => {
163
- const content = readFileSync(
164
- join(__dirname, "fixtures", `${fixture}-broken.txt`),
165
- "utf-8",
166
- )
167
- const fixed = readFileSync(
168
- join(__dirname, "fixtures", `${fixture}-fixed.txt`),
169
- "utf-8",
170
- )
171
- assert.equal(preprocessScript(content), fixed)
172
- },
173
- )
160
+ it.each([
161
+ "patch",
162
+ "patch2",
163
+ "patch3",
164
+ "patch4",
165
+ "patch5",
166
+ "patch6",
167
+ "patch7",
168
+ ])("fixes broken %s", (fixture) => {
169
+ const content = readFileSync(
170
+ join(__dirname, "fixtures", `${fixture}-broken.txt`),
171
+ "utf-8",
172
+ )
173
+ const fixed = readFileSync(
174
+ join(__dirname, "fixtures", `${fixture}-fixed.txt`),
175
+ "utf-8",
176
+ )
177
+ assert.equal(preprocessScript(content), fixed)
178
+ })
174
179
  })
@@ -74,23 +74,42 @@ const needsTemplateEscaping = (text: string): boolean => {
74
74
  return false
75
75
  }
76
76
 
77
+ const normalizePatchEscapedQuotes = (text: string): string =>
78
+ text.includes("*** Begin Patch")
79
+ ? text.replace(/\\"([A-Za-z0-9_$.-]+)\\"/g, '"$1"')
80
+ : text
81
+
77
82
  const escapeTemplateLiteralContent = (text: string): string => {
78
- if (!needsTemplateEscaping(text)) {
79
- return text
83
+ const normalized = normalizePatchEscapedQuotes(text)
84
+ const isPatchContent = normalized.includes("*** Begin Patch")
85
+ if (!needsTemplateEscaping(normalized)) {
86
+ return normalized
80
87
  }
81
88
 
82
89
  let out = ""
83
- for (let i = 0; i < text.length; i++) {
84
- const char = text[i]!
90
+ for (let i = 0; i < normalized.length; i++) {
91
+ const char = normalized[i]!
85
92
  if (char === "\\") {
93
+ if (
94
+ !isPatchContent &&
95
+ (normalized[i + 1] === "`" ||
96
+ (normalized[i + 1] === "$" && normalized[i + 2] === "{"))
97
+ ) {
98
+ out += "\\"
99
+ continue
100
+ }
86
101
  out += "\\\\"
87
102
  continue
88
103
  }
89
- if (char === "`" && !isEscaped(text, i)) {
104
+ if (char === "`" && !isEscaped(normalized, i)) {
90
105
  out += "\\`"
91
106
  continue
92
107
  }
93
- if (char === "$" && text[i + 1] === "{" && !isEscaped(text, i)) {
108
+ if (
109
+ char === "$" &&
110
+ normalized[i + 1] === "{" &&
111
+ !isEscaped(normalized, i)
112
+ ) {
94
113
  out += "\\$"
95
114
  continue
96
115
  }
@@ -214,68 +233,35 @@ const fixCallTemplateArgument = (
214
233
  return out
215
234
  }
216
235
 
217
- const collectCallArgumentIdentifiers = (
236
+ const fixCallObjectPropertyTemplate = (
218
237
  script: string,
219
238
  functionName: string,
220
- ): ReadonlySet<string> => {
221
- const out = new Set<string>()
222
- let cursor = 0
223
-
224
- while (cursor < script.length) {
225
- const callStart = findNextIdentifier(script, functionName, cursor)
226
- if (callStart === -1) {
227
- break
228
- }
229
-
230
- const openParen = skipWhitespace(script, callStart + functionName.length)
231
- if (script[openParen] !== "(") {
232
- cursor = callStart + functionName.length
233
- continue
234
- }
235
-
236
- const argumentStart = skipWhitespace(script, openParen + 1)
237
- const identifier = parseIdentifier(script, argumentStart)
238
- if (identifier === undefined) {
239
- cursor = openParen + 1
240
- continue
241
- }
242
-
243
- const argumentEnd = skipWhitespace(script, identifier.end)
244
- if (script[argumentEnd] === ")" || script[argumentEnd] === ",") {
245
- out.add(identifier.name)
246
- }
247
-
248
- cursor = identifier.end
249
- }
250
-
251
- return out
252
- }
253
-
254
- const fixWriteFileContentTemplates = (script: string): string => {
239
+ propertyName: string,
240
+ ): string => {
255
241
  let out = script
256
242
  let cursor = 0
257
243
 
258
244
  while (cursor < out.length) {
259
- const callStart = findNextIdentifier(out, "writeFile", cursor)
245
+ const callStart = findNextIdentifier(out, functionName, cursor)
260
246
  if (callStart === -1) {
261
247
  break
262
248
  }
263
249
 
264
- const openParen = skipWhitespace(out, callStart + "writeFile".length)
250
+ const openParen = skipWhitespace(out, callStart + functionName.length)
265
251
  if (out[openParen] !== "(") {
266
- cursor = callStart + "writeFile".length
252
+ cursor = callStart + functionName.length
267
253
  continue
268
254
  }
269
255
 
270
- const contentKey = findNextIdentifier(out, "content", openParen + 1)
271
- if (contentKey === -1) {
256
+ const propertyKey = findNextIdentifier(out, propertyName, openParen + 1)
257
+ if (propertyKey === -1) {
272
258
  cursor = openParen + 1
273
259
  continue
274
260
  }
275
261
 
276
- const colon = skipWhitespace(out, contentKey + "content".length)
262
+ const colon = skipWhitespace(out, propertyKey + propertyName.length)
277
263
  if (out[colon] !== ":") {
278
- cursor = contentKey + "content".length
264
+ cursor = propertyKey + propertyName.length
279
265
  continue
280
266
  }
281
267
 
@@ -309,33 +295,75 @@ const fixWriteFileContentTemplates = (script: string): string => {
309
295
  return out
310
296
  }
311
297
 
312
- const collectWriteFileContentIdentifiers = (
298
+ const collectCallArgumentIdentifiers = (
299
+ script: string,
300
+ functionName: string,
301
+ ): ReadonlySet<string> => {
302
+ const out = new Set<string>()
303
+ let cursor = 0
304
+
305
+ while (cursor < script.length) {
306
+ const callStart = findNextIdentifier(script, functionName, cursor)
307
+ if (callStart === -1) {
308
+ break
309
+ }
310
+
311
+ const openParen = skipWhitespace(script, callStart + functionName.length)
312
+ if (script[openParen] !== "(") {
313
+ cursor = callStart + functionName.length
314
+ continue
315
+ }
316
+
317
+ const argumentStart = skipWhitespace(script, openParen + 1)
318
+ const identifier = parseIdentifier(script, argumentStart)
319
+ if (identifier === undefined) {
320
+ cursor = openParen + 1
321
+ continue
322
+ }
323
+
324
+ const argumentEnd = skipWhitespace(script, identifier.end)
325
+ if (script[argumentEnd] === ")" || script[argumentEnd] === ",") {
326
+ out.add(identifier.name)
327
+ }
328
+
329
+ cursor = identifier.end
330
+ }
331
+
332
+ return out
333
+ }
334
+
335
+ const collectCallObjectPropertyIdentifiers = (
313
336
  script: string,
337
+ functionName: string,
338
+ propertyName: string,
314
339
  ): ReadonlySet<string> => {
315
340
  const out = new Set<string>()
316
341
  let cursor = 0
317
342
 
318
343
  while (cursor < script.length) {
319
- const callStart = findNextIdentifier(script, "writeFile", cursor)
344
+ const callStart = findNextIdentifier(script, functionName, cursor)
320
345
  if (callStart === -1) {
321
346
  break
322
347
  }
323
348
 
324
- const openParen = skipWhitespace(script, callStart + "writeFile".length)
349
+ const openParen = skipWhitespace(script, callStart + functionName.length)
325
350
  if (script[openParen] !== "(") {
326
- cursor = callStart + "writeFile".length
351
+ cursor = callStart + functionName.length
327
352
  continue
328
353
  }
329
354
 
330
- const contentKey = findNextIdentifier(script, "content", openParen + 1)
331
- if (contentKey === -1) {
355
+ const propertyKey = findNextIdentifier(script, propertyName, openParen + 1)
356
+ if (propertyKey === -1) {
332
357
  cursor = openParen + 1
333
358
  continue
334
359
  }
335
360
 
336
- const afterContent = skipWhitespace(script, contentKey + "content".length)
337
- if (script[afterContent] === ":") {
338
- const valueStart = skipWhitespace(script, afterContent + 1)
361
+ const afterProperty = skipWhitespace(
362
+ script,
363
+ propertyKey + propertyName.length,
364
+ )
365
+ if (script[afterProperty] === ":") {
366
+ const valueStart = skipWhitespace(script, afterProperty + 1)
339
367
  const identifier = parseIdentifier(script, valueStart)
340
368
  if (identifier !== undefined) {
341
369
  const valueEnd = skipWhitespace(script, identifier.end)
@@ -347,18 +375,30 @@ const collectWriteFileContentIdentifiers = (
347
375
  continue
348
376
  }
349
377
 
350
- if (script[afterContent] === "}" || script[afterContent] === ",") {
351
- out.add("content")
352
- cursor = afterContent + 1
378
+ if (script[afterProperty] === "}" || script[afterProperty] === ",") {
379
+ out.add(propertyName)
380
+ cursor = afterProperty + 1
353
381
  continue
354
382
  }
355
383
 
356
- cursor = afterContent + 1
384
+ cursor = afterProperty + 1
357
385
  }
358
386
 
359
387
  return out
360
388
  }
361
389
 
390
+ const callObjectPropertyTargets = [
391
+ ["writeFile", "content"],
392
+ ["updateTask", "description"],
393
+ ] as const
394
+
395
+ const fixTargetCallObjectPropertyTemplates = (script: string): string =>
396
+ callObjectPropertyTargets.reduce(
397
+ (current, [functionName, propertyName]) =>
398
+ fixCallObjectPropertyTemplate(current, functionName, propertyName),
399
+ script,
400
+ )
401
+
362
402
  const fixAssignedTemplate = (script: string, variableName: string): string => {
363
403
  let out = script
364
404
  let cursor = 0
@@ -436,8 +476,17 @@ const fixAssignedTemplatesForToolCalls = (script: string): string => {
436
476
  identifiers.add(identifier)
437
477
  }
438
478
  }
439
- for (const identifier of collectWriteFileContentIdentifiers(script)) {
440
- identifiers.add(identifier)
479
+ for (const [functionName, propertyName] of callObjectPropertyTargets) {
480
+ for (const identifier of collectCallObjectPropertyIdentifiers(
481
+ script,
482
+ functionName,
483
+ propertyName,
484
+ )) {
485
+ identifiers.add(identifier)
486
+ }
487
+ }
488
+ if (script.includes("*** Begin Patch")) {
489
+ identifiers.add("patch")
441
490
  }
442
491
 
443
492
  let out = script
@@ -451,6 +500,6 @@ export const preprocessScript = (script: string): string =>
451
500
  fixAssignedTemplatesForToolCalls(
452
501
  ["applyPatch", "taskComplete"].reduce(
453
502
  (current, functionName) => fixCallTemplateArgument(current, functionName),
454
- fixWriteFileContentTemplates(script),
503
+ fixTargetCallObjectPropertyTemplates(script),
455
504
  ),
456
505
  )
@@ -0,0 +1,227 @@
1
+ const patch = `*** Begin Patch
2
+ *** Update File: src/commands/root.ts
3
+ @@
4
+ import {
5
+ Config,
6
+ + Data,
7
+ Deferred,
8
+ Duration,
9
+ Effect,
10
+ Fiber,
11
+ @@
12
+ const runRalph = Effect.fnUntraced(
13
+ @@
14
+ )
15
+ +
16
+ +class RalphSpecMissing extends Data.TaggedError("RalphSpecMissing")<{
17
+ + readonly projectId: Project["id"]
18
+ +}> {
19
+ + readonly message = `Project "${this.projectId}" is configured with gitFlow=\"ralph\" but is missing \"ralphSpec\". Run 'lalph projects edit' and set "Path to Ralph spec file".`
20
+ +}
21
+ +
22
+ +type ProjectExecutionMode =
23
+ + | {
24
+ + readonly _tag: "standard"
25
+ + readonly gitFlow: "pr" | "commit"
26
+ + }
27
+ + | {
28
+ + readonly _tag: "ralph"
29
+ + readonly specFile: string
30
+ + }
31
+
32
+ const runProject = Effect.fnUntraced(
33
+ function* (options: {
34
+ @@
35
+ const iterationsDisplay = isFinite ? options.iterations : "unlimited"
36
+ const semaphore = Semaphore.makeUnsafe(options.project.concurrency)
37
+ const fibers = yield* FiberSet.make()
38
+ +
39
+ + let executionMode: ProjectExecutionMode
40
+ + if (options.project.gitFlow === "ralph") {
41
+ + if (!options.project.ralphSpec) {
42
+ + return yield* new RalphSpecMissing({
43
+ + projectId: options.project.id,
44
+ + })
45
+ + }
46
+ + executionMode = {
47
+ + _tag: "ralph",
48
+ + specFile: options.project.ralphSpec,
49
+ + }
50
+ + } else {
51
+ + executionMode = {
52
+ + _tag: "standard",
53
+ + gitFlow: options.project.gitFlow,
54
+ + }
55
+ + }
56
+ +
57
+ + const resolveGitFlowLayer = () => {
58
+ + if (executionMode._tag === "ralph") {
59
+ + return GitFlowRalph
60
+ + }
61
+ + if (executionMode.gitFlow === "commit") {
62
+ + return GitFlowCommit
63
+ + }
64
+ + return GitFlowPR
65
+ + }
66
+ +
67
+ + const resolveRunEffect = (startedDeferred: Deferred.Deferred<void>) => {
68
+ + if (executionMode._tag === "ralph") {
69
+ + return runRalph({
70
+ + targetBranch: options.project.targetBranch,
71
+ + stallTimeout: options.stallTimeout,
72
+ + runTimeout: options.runTimeout,
73
+ + review: options.project.reviewAgent,
74
+ + research: options.project.researchAgent,
75
+ + specFile: executionMode.specFile,
76
+ + })
77
+ + }
78
+ + return run({
79
+ + startedDeferred,
80
+ + targetBranch: options.project.targetBranch,
81
+ + specsDirectory: options.specsDirectory,
82
+ + stallTimeout: options.stallTimeout,
83
+ + runTimeout: options.runTimeout,
84
+ + review: options.project.reviewAgent,
85
+ + research: options.project.researchAgent,
86
+ + })
87
+ + }
88
+ +
89
+ + const waitForIteration = (
90
+ + startedDeferred: Deferred.Deferred<void>,
91
+ + fiber: Fiber.Fiber<void, never>,
92
+ + ) => {
93
+ + if (executionMode._tag === "ralph") {
94
+ + return Fiber.await(fiber)
95
+ + }
96
+ + return Deferred.await(startedDeferred)
97
+ + }
98
+ +
99
+ + const handleChosenTaskNotFound = (
100
+ + currentIteration: number,
101
+ + markRalphDone: () => void,
102
+ + ) => {
103
+ + if (executionMode._tag !== "ralph") {
104
+ + return Effect.void
105
+ + }
106
+ + markRalphDone()
107
+ + return Effect.log(
108
+ + `No more work to process for Ralph, ending after ${currentIteration + 1} iteration(s).`,
109
+ + )
110
+ + }
111
+ +
112
+ + const handleNoMoreWork = (
113
+ + currentIteration: number,
114
+ + setIterations: (iterations: number) => void,
115
+ + ) => {
116
+ + if (executionMode._tag === "ralph") {
117
+ + return Effect.void
118
+ + }
119
+ + if (isFinite) {
120
+ + // If we have a finite number of iterations, we exit when no more
121
+ + // work is found
122
+ + setIterations(currentIteration)
123
+ + return Effect.log(
124
+ + `No more work to process, ending after ${currentIteration} iteration(s).`,
125
+ + )
126
+ + }
127
+ + const log =
128
+ + Iterable.size(fibers) <= 1
129
+ + ? Effect.log("No more work to process, waiting 30 seconds...")
130
+ + : Effect.void
131
+ + return Effect.andThen(log, Effect.sleep(Duration.seconds(30)))
132
+ + }
133
+
134
+ yield* resetInProgress.pipe(Effect.withSpan("Main.resetInProgress"))
135
+ @@
136
+ const currentIteration = iteration
137
+
138
+ const startedDeferred = yield* Deferred.make<void>()
139
+ let ralphDone = false
140
+
141
+ - const gitFlow = options.project.gitFlow
142
+ - const isRalph = gitFlow === "ralph"
143
+ - const gitFlowLayer =
144
+ - gitFlow === "commit"
145
+ - ? GitFlowCommit
146
+ - : gitFlow === "ralph"
147
+ - ? GitFlowRalph
148
+ - : GitFlowPR
149
+ + const gitFlowLayer = resolveGitFlowLayer()
150
+ const fiber = yield* checkForWork(options.project).pipe(
151
+ Effect.andThen(
152
+ Unify.unify(
153
+ - isRalph
154
+ - ? runRalph({
155
+ - targetBranch: options.project.targetBranch,
156
+ - stallTimeout: options.stallTimeout,
157
+ - runTimeout: options.runTimeout,
158
+ - review: options.project.reviewAgent,
159
+ - research: options.project.researchAgent,
160
+ - specFile: options.project.ralphSpec!,
161
+ - })
162
+ - : run({
163
+ - startedDeferred,
164
+ - targetBranch: options.project.targetBranch,
165
+ - specsDirectory: options.specsDirectory,
166
+ - stallTimeout: options.stallTimeout,
167
+ - runTimeout: options.runTimeout,
168
+ - review: options.project.reviewAgent,
169
+ - research: options.project.researchAgent,
170
+ - }),
171
+ + resolveRunEffect(startedDeferred),
172
+ ).pipe(
173
+ Effect.provide(gitFlowLayer, { local: true }),
174
+ withWorkerState(options.project.id),
175
+ ),
176
+ ),
177
+ Effect.catchTags({
178
+ ChosenTaskNotFound(_error) {
179
+ - if (isRalph) {
180
+ - ralphDone = true
181
+ - return Effect.log(
182
+ - `No more work to process for Ralph, ending after ${currentIteration + 1} iteration(s).`,
183
+ - )
184
+ - }
185
+ - return Effect.void
186
+ + return handleChosenTaskNotFound(currentIteration, () => {
187
+ + ralphDone = true
188
+ + })
189
+ },
190
+ NoMoreWork(_error) {
191
+ - if (isFinite) {
192
+ - // If we have a finite number of iterations, we exit when no more
193
+ - // work is found
194
+ - iterations = currentIteration
195
+ - return Effect.log(
196
+ - `No more work to process, ending after ${currentIteration} iteration(s).`,
197
+ - )
198
+ - }
199
+ - const log =
200
+ - Iterable.size(fibers) <= 1
201
+ - ? Effect.log("No more work to process, waiting 30 seconds...")
202
+ - : Effect.void
203
+ - return Effect.andThen(log, Effect.sleep(Duration.seconds(30)))
204
+ + return handleNoMoreWork(currentIteration, (newIterations) => {
205
+ + iterations = newIterations
206
+ + })
207
+ },
208
+ QuitError(_error) {
209
+ quit = true
210
+ @@
211
+ Effect.ensuring(Deferred.completeWith(startedDeferred, Effect.void)),
212
+ FiberSet.run(fibers),
213
+ )
214
+ - if (isRalph) {
215
+ - yield* Fiber.await(fiber)
216
+ - if (ralphDone) break
217
+ - } else {
218
+ - yield* Deferred.await(startedDeferred)
219
+ +
220
+ + yield* waitForIteration(startedDeferred, fiber)
221
+ + if (executionMode._tag === "ralph" && ralphDone) {
222
+ + break
223
+ }
224
+ +
225
+ iteration++
226
+ }
227
+ *** End Patch`;
@@ -0,0 +1,227 @@
1
+ const patch = `*** Begin Patch
2
+ *** Update File: src/commands/root.ts
3
+ @@
4
+ import {
5
+ Config,
6
+ + Data,
7
+ Deferred,
8
+ Duration,
9
+ Effect,
10
+ Fiber,
11
+ @@
12
+ const runRalph = Effect.fnUntraced(
13
+ @@
14
+ )
15
+ +
16
+ +class RalphSpecMissing extends Data.TaggedError("RalphSpecMissing")<{
17
+ + readonly projectId: Project["id"]
18
+ +}> {
19
+ + readonly message = \`Project "\${this.projectId}" is configured with gitFlow="ralph" but is missing "ralphSpec". Run 'lalph projects edit' and set "Path to Ralph spec file".\`
20
+ +}
21
+ +
22
+ +type ProjectExecutionMode =
23
+ + | {
24
+ + readonly _tag: "standard"
25
+ + readonly gitFlow: "pr" | "commit"
26
+ + }
27
+ + | {
28
+ + readonly _tag: "ralph"
29
+ + readonly specFile: string
30
+ + }
31
+
32
+ const runProject = Effect.fnUntraced(
33
+ function* (options: {
34
+ @@
35
+ const iterationsDisplay = isFinite ? options.iterations : "unlimited"
36
+ const semaphore = Semaphore.makeUnsafe(options.project.concurrency)
37
+ const fibers = yield* FiberSet.make()
38
+ +
39
+ + let executionMode: ProjectExecutionMode
40
+ + if (options.project.gitFlow === "ralph") {
41
+ + if (!options.project.ralphSpec) {
42
+ + return yield* new RalphSpecMissing({
43
+ + projectId: options.project.id,
44
+ + })
45
+ + }
46
+ + executionMode = {
47
+ + _tag: "ralph",
48
+ + specFile: options.project.ralphSpec,
49
+ + }
50
+ + } else {
51
+ + executionMode = {
52
+ + _tag: "standard",
53
+ + gitFlow: options.project.gitFlow,
54
+ + }
55
+ + }
56
+ +
57
+ + const resolveGitFlowLayer = () => {
58
+ + if (executionMode._tag === "ralph") {
59
+ + return GitFlowRalph
60
+ + }
61
+ + if (executionMode.gitFlow === "commit") {
62
+ + return GitFlowCommit
63
+ + }
64
+ + return GitFlowPR
65
+ + }
66
+ +
67
+ + const resolveRunEffect = (startedDeferred: Deferred.Deferred<void>) => {
68
+ + if (executionMode._tag === "ralph") {
69
+ + return runRalph({
70
+ + targetBranch: options.project.targetBranch,
71
+ + stallTimeout: options.stallTimeout,
72
+ + runTimeout: options.runTimeout,
73
+ + review: options.project.reviewAgent,
74
+ + research: options.project.researchAgent,
75
+ + specFile: executionMode.specFile,
76
+ + })
77
+ + }
78
+ + return run({
79
+ + startedDeferred,
80
+ + targetBranch: options.project.targetBranch,
81
+ + specsDirectory: options.specsDirectory,
82
+ + stallTimeout: options.stallTimeout,
83
+ + runTimeout: options.runTimeout,
84
+ + review: options.project.reviewAgent,
85
+ + research: options.project.researchAgent,
86
+ + })
87
+ + }
88
+ +
89
+ + const waitForIteration = (
90
+ + startedDeferred: Deferred.Deferred<void>,
91
+ + fiber: Fiber.Fiber<void, never>,
92
+ + ) => {
93
+ + if (executionMode._tag === "ralph") {
94
+ + return Fiber.await(fiber)
95
+ + }
96
+ + return Deferred.await(startedDeferred)
97
+ + }
98
+ +
99
+ + const handleChosenTaskNotFound = (
100
+ + currentIteration: number,
101
+ + markRalphDone: () => void,
102
+ + ) => {
103
+ + if (executionMode._tag !== "ralph") {
104
+ + return Effect.void
105
+ + }
106
+ + markRalphDone()
107
+ + return Effect.log(
108
+ + \`No more work to process for Ralph, ending after \${currentIteration + 1} iteration(s).\`,
109
+ + )
110
+ + }
111
+ +
112
+ + const handleNoMoreWork = (
113
+ + currentIteration: number,
114
+ + setIterations: (iterations: number) => void,
115
+ + ) => {
116
+ + if (executionMode._tag === "ralph") {
117
+ + return Effect.void
118
+ + }
119
+ + if (isFinite) {
120
+ + // If we have a finite number of iterations, we exit when no more
121
+ + // work is found
122
+ + setIterations(currentIteration)
123
+ + return Effect.log(
124
+ + \`No more work to process, ending after \${currentIteration} iteration(s).\`,
125
+ + )
126
+ + }
127
+ + const log =
128
+ + Iterable.size(fibers) <= 1
129
+ + ? Effect.log("No more work to process, waiting 30 seconds...")
130
+ + : Effect.void
131
+ + return Effect.andThen(log, Effect.sleep(Duration.seconds(30)))
132
+ + }
133
+
134
+ yield* resetInProgress.pipe(Effect.withSpan("Main.resetInProgress"))
135
+ @@
136
+ const currentIteration = iteration
137
+
138
+ const startedDeferred = yield* Deferred.make<void>()
139
+ let ralphDone = false
140
+
141
+ - const gitFlow = options.project.gitFlow
142
+ - const isRalph = gitFlow === "ralph"
143
+ - const gitFlowLayer =
144
+ - gitFlow === "commit"
145
+ - ? GitFlowCommit
146
+ - : gitFlow === "ralph"
147
+ - ? GitFlowRalph
148
+ - : GitFlowPR
149
+ + const gitFlowLayer = resolveGitFlowLayer()
150
+ const fiber = yield* checkForWork(options.project).pipe(
151
+ Effect.andThen(
152
+ Unify.unify(
153
+ - isRalph
154
+ - ? runRalph({
155
+ - targetBranch: options.project.targetBranch,
156
+ - stallTimeout: options.stallTimeout,
157
+ - runTimeout: options.runTimeout,
158
+ - review: options.project.reviewAgent,
159
+ - research: options.project.researchAgent,
160
+ - specFile: options.project.ralphSpec!,
161
+ - })
162
+ - : run({
163
+ - startedDeferred,
164
+ - targetBranch: options.project.targetBranch,
165
+ - specsDirectory: options.specsDirectory,
166
+ - stallTimeout: options.stallTimeout,
167
+ - runTimeout: options.runTimeout,
168
+ - review: options.project.reviewAgent,
169
+ - research: options.project.researchAgent,
170
+ - }),
171
+ + resolveRunEffect(startedDeferred),
172
+ ).pipe(
173
+ Effect.provide(gitFlowLayer, { local: true }),
174
+ withWorkerState(options.project.id),
175
+ ),
176
+ ),
177
+ Effect.catchTags({
178
+ ChosenTaskNotFound(_error) {
179
+ - if (isRalph) {
180
+ - ralphDone = true
181
+ - return Effect.log(
182
+ - \`No more work to process for Ralph, ending after \${currentIteration + 1} iteration(s).\`,
183
+ - )
184
+ - }
185
+ - return Effect.void
186
+ + return handleChosenTaskNotFound(currentIteration, () => {
187
+ + ralphDone = true
188
+ + })
189
+ },
190
+ NoMoreWork(_error) {
191
+ - if (isFinite) {
192
+ - // If we have a finite number of iterations, we exit when no more
193
+ - // work is found
194
+ - iterations = currentIteration
195
+ - return Effect.log(
196
+ - \`No more work to process, ending after \${currentIteration} iteration(s).\`,
197
+ - )
198
+ - }
199
+ - const log =
200
+ - Iterable.size(fibers) <= 1
201
+ - ? Effect.log("No more work to process, waiting 30 seconds...")
202
+ - : Effect.void
203
+ - return Effect.andThen(log, Effect.sleep(Duration.seconds(30)))
204
+ + return handleNoMoreWork(currentIteration, (newIterations) => {
205
+ + iterations = newIterations
206
+ + })
207
+ },
208
+ QuitError(_error) {
209
+ quit = true
210
+ @@
211
+ Effect.ensuring(Deferred.completeWith(startedDeferred, Effect.void)),
212
+ FiberSet.run(fibers),
213
+ )
214
+ - if (isRalph) {
215
+ - yield* Fiber.await(fiber)
216
+ - if (ralphDone) break
217
+ - } else {
218
+ - yield* Deferred.await(startedDeferred)
219
+ +
220
+ + yield* waitForIteration(startedDeferred, fiber)
221
+ + if (executionMode._tag === "ralph" && ralphDone) {
222
+ + break
223
+ }
224
+ +
225
+ iteration++
226
+ }
227
+ *** End Patch`;
@@ -0,0 +1,20 @@
1
+ const description = `Implemented in PR #1805 (branch: lalph/EFF-736, target: main).
2
+
3
+ Key discoveries for future work:
4
+
5
+ * Root cause in \
6
+ \`packages/effect/src/internal/effect.ts\` (`cachedInvalidateWithTTL`): expiry was computed from start time (`now + ttlMillis` before running `self`), so long-running effects could expire before producing a value.
7
+ * Cache behavior reference: \
8
+ \`packages/effect/src/Cache.ts\` computes expiry from completion (`onExit`); `Effect.cachedWithTTL` should match this model.
9
+ * Regression coverage is in \
10
+ \`packages/effect/test/Effect.test.ts\`: `cachedWithTTL starts ttl from value creation` uses `TestClock` with 2s runtime and 1s TTL; immediate post-completion call must reuse cached value.
11
+ * PR review follow-up: in `cachedInvalidateWithTTL`, capture `const clock = fiber.getRef(ClockRef)` once and reuse it for both `now` and `expiresAt` to avoid duplicate `getRef` calls.
12
+
13
+ Validation run:
14
+
15
+ * pnpm lint-fix
16
+ * pnpm test packages/effect/test/Effect.test.ts
17
+ * pnpm check:tsgo
18
+ * pnpm docgen`;
19
+ await updateTask({ taskId: 'EFF-736', state: 'in-review', description });
20
+ console.log('task updated');
@@ -0,0 +1,20 @@
1
+ const description = `Implemented in PR #1805 (branch: lalph/EFF-736, target: main).
2
+
3
+ Key discoveries for future work:
4
+
5
+ * Root cause in \\
6
+ \`packages/effect/src/internal/effect.ts\` (\`cachedInvalidateWithTTL\`): expiry was computed from start time (\`now + ttlMillis\` before running \`self\`), so long-running effects could expire before producing a value.
7
+ * Cache behavior reference: \\
8
+ \`packages/effect/src/Cache.ts\` computes expiry from completion (\`onExit\`); \`Effect.cachedWithTTL\` should match this model.
9
+ * Regression coverage is in \\
10
+ \`packages/effect/test/Effect.test.ts\`: \`cachedWithTTL starts ttl from value creation\` uses \`TestClock\` with 2s runtime and 1s TTL; immediate post-completion call must reuse cached value.
11
+ * PR review follow-up: in \`cachedInvalidateWithTTL\`, capture \`const clock = fiber.getRef(ClockRef)\` once and reuse it for both \`now\` and \`expiresAt\` to avoid duplicate \`getRef\` calls.
12
+
13
+ Validation run:
14
+
15
+ * pnpm lint-fix
16
+ * pnpm test packages/effect/test/Effect.test.ts
17
+ * pnpm check:tsgo
18
+ * pnpm docgen`;
19
+ await updateTask({ taskId: 'EFF-736', state: 'in-review', description });
20
+ console.log('task updated');
@@ -0,0 +1,12 @@
1
+ await updateTask({
2
+ taskId:'EFF-736',
3
+ state:'in-review',
4
+ description:`Implemented in PR #1805.
5
+
6
+ Key discoveries for future work:
7
+ - Root cause was in packages/effect/src/internal/effect.ts (cachedInvalidateWithTTL): expiry used a timestamp captured before running the effect (`now + ttlMillis`), so long-running effects could expire immediately after completion.
8
+ - Cache module behavior in packages/effect/src/Cache.ts already bases TTL from completion time (expiry set in onExit using current clock), and cachedWithTTL should match this.
9
+ - Regression test added in packages/effect/test/Effect.test.ts (`cachedWithTTL / starts ttl from value creation`) using TestClock: effect runtime (2s) > TTL (1s), verifies second call immediately after first completion reuses cached value.
10
+ - Validation commands that passed: pnpm lint-fix, pnpm test packages/effect/test/Effect.test.ts, pnpm check:tsgo, pnpm docgen.`
11
+ });
12
+ console.log('task updated');
@@ -0,0 +1,12 @@
1
+ await updateTask({
2
+ taskId:'EFF-736',
3
+ state:'in-review',
4
+ description:`Implemented in PR #1805.
5
+
6
+ Key discoveries for future work:
7
+ - Root cause was in packages/effect/src/internal/effect.ts (cachedInvalidateWithTTL): expiry used a timestamp captured before running the effect (\`now + ttlMillis\`), so long-running effects could expire immediately after completion.
8
+ - Cache module behavior in packages/effect/src/Cache.ts already bases TTL from completion time (expiry set in onExit using current clock), and cachedWithTTL should match this.
9
+ - Regression test added in packages/effect/test/Effect.test.ts (\`cachedWithTTL / starts ttl from value creation\`) using TestClock: effect runtime (2s) > TTL (1s), verifies second call immediately after first completion reuses cached value.
10
+ - Validation commands that passed: pnpm lint-fix, pnpm test packages/effect/test/Effect.test.ts, pnpm check:tsgo, pnpm docgen.`
11
+ });
12
+ console.log('task updated');