context-compress 1.0.0 → 2026.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +41 -5
  2. package/dist/cli/doctor.d.ts.map +1 -1
  3. package/dist/cli/doctor.js +22 -1
  4. package/dist/cli/doctor.js.map +1 -1
  5. package/dist/config.d.ts +3 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +97 -4
  8. package/dist/config.js.map +1 -1
  9. package/dist/executor.d.ts +12 -0
  10. package/dist/executor.d.ts.map +1 -1
  11. package/dist/executor.js +129 -14
  12. package/dist/executor.js.map +1 -1
  13. package/dist/hooks/pretooluse.js +12 -6
  14. package/dist/hooks/pretooluse.js.map +1 -1
  15. package/dist/network.d.ts +5 -0
  16. package/dist/network.d.ts.map +1 -0
  17. package/dist/network.js +42 -0
  18. package/dist/network.js.map +1 -0
  19. package/dist/runtime/languages/go.js +3 -3
  20. package/dist/runtime/languages/go.js.map +1 -1
  21. package/dist/runtime/languages/javascript.js +1 -1
  22. package/dist/runtime/languages/javascript.js.map +1 -1
  23. package/dist/runtime/languages/r.js +1 -1
  24. package/dist/runtime/languages/rust.js +2 -2
  25. package/dist/runtime/languages/rust.js.map +1 -1
  26. package/dist/runtime/languages/typescript.js +1 -1
  27. package/dist/runtime/languages/typescript.js.map +1 -1
  28. package/dist/server.bundle.mjs +531 -152
  29. package/dist/server.bundle.mjs.map +4 -4
  30. package/dist/server.d.ts.map +1 -1
  31. package/dist/server.js +160 -25
  32. package/dist/server.js.map +1 -1
  33. package/dist/snippet.d.ts.map +1 -1
  34. package/dist/snippet.js +1 -8
  35. package/dist/snippet.js.map +1 -1
  36. package/dist/stats.d.ts.map +1 -1
  37. package/dist/stats.js +28 -11
  38. package/dist/stats.js.map +1 -1
  39. package/dist/store.d.ts +14 -0
  40. package/dist/store.d.ts.map +1 -1
  41. package/dist/store.js +44 -22
  42. package/dist/store.js.map +1 -1
  43. package/docs/token-reduction-report.md +459 -0
  44. package/hooks/pretooluse.mjs +10 -5
  45. package/package.json +7 -4
@@ -16,16 +16,22 @@ let raw = "";
16
16
  process.stdin.setEncoding("utf-8");
17
17
  for await (const chunk of process.stdin)
18
18
  raw += chunk;
19
- const input = JSON.parse(raw);
19
+ let input;
20
+ try {
21
+ input = JSON.parse(raw);
22
+ }
23
+ catch {
24
+ process.exit(0);
25
+ }
20
26
  const tool = input.tool_name ?? "";
21
- const toolInput = input.tool_input ?? {};
27
+ const toolInput = (input.tool_input ?? {});
22
28
  function respond(output) {
23
29
  console.log(JSON.stringify({ hookSpecificOutput: { hookEventName: "PreToolUse", ...output } }));
24
30
  process.exit(0);
25
31
  }
26
32
  // ─── Bash: redirect data-fetching commands ───
27
33
  if (tool === "Bash") {
28
- const command = toolInput.command ?? "";
34
+ const command = String(toolInput.command ?? "");
29
35
  // curl/wget → block and redirect
30
36
  if (blockCurl && /(^|\s|&&|\||\;)(curl|wget)\s/i.test(command)) {
31
37
  respond({
@@ -62,7 +68,7 @@ if (tool === "Grep" && nudgeOnGrep) {
62
68
  }
63
69
  // ─── WebFetch: deny + redirect to sandbox ───
64
70
  if (tool === "WebFetch" && blockWebFetch) {
65
- const url = toolInput.url ?? "";
71
+ const url = String(toolInput.url ?? "");
66
72
  respond({
67
73
  permissionDecision: "deny",
68
74
  reason: `${TOOL_PREFIX}: WebFetch blocked. Use mcp__${TOOL_PREFIX}__fetch_and_index(url: "${url}", source: "...") to fetch this URL in sandbox. Then use mcp__${TOOL_PREFIX}__search(queries: [...]) to query results.`,
@@ -70,8 +76,8 @@ if (tool === "WebFetch" && blockWebFetch) {
70
76
  }
71
77
  // ─── Task/Agent: inject context-compress routing into subagent prompts ───
72
78
  if (tool === "Task" || tool === "Agent") {
73
- const subagentType = toolInput.subagent_type ?? "";
74
- const prompt = toolInput.prompt ?? "";
79
+ const subagentType = String(toolInput.subagent_type ?? "");
80
+ const prompt = String(toolInput.prompt ?? "");
75
81
  const ROUTING_BLOCK = `
76
82
 
77
83
  ---
@@ -1 +1 @@
1
- {"version":3,"file":"pretooluse.js","sourceRoot":"","sources":["../../src/hooks/pretooluse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pretooluse.js","sourceRoot":"","sources":["../../src/hooks/pretooluse.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAEvC,uBAAuB;AACvB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,GAAG,CAAC;AAClE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,GAAG,CAAC;AAC1E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,GAAG,CAAC;AACpE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,GAAG,CAAC;AAEpE,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACnC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK;IAAE,GAAG,IAAI,KAAK,CAAC;AAEtD,IAAI,KAA8B,CAAC;AACnC,IAAI,CAAC;IACJ,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAAC,MAAM,CAAC;IACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AACD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;AACnC,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAA4B,CAAC;AAEtE,SAAS,OAAO,CAAC,MAA+B;IAC/C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,kBAAkB,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,gDAAgD;AAChD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAEhD,iCAAiC;IACjC,IAAI,SAAS,IAAI,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChE,OAAO,CAAC;YACP,YAAY,EAAE;gBACb,OAAO,EAAE,SAAS,WAAW,iCAAiC,WAAW,yDAAyD,WAAW,6GAA6G;aAC1P;SACD,CAAC,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,IACC,SAAS;QACT,CAAC,sCAAsC,CAAC,IAAI,CAAC,OAAO,CAAC;YACpD,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC;YAC9C,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAC1C,CAAC;QACF,OAAO,CAAC;YACP,YAAY,EAAE;gBACb,OAAO,EAAE,SAAS,WAAW,mCAAmC,WAAW,mEAAmE,WAAW,gDAAgD;aACzM;SACD,CAAC,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,0CAA0C;AAC1C,IAAI,IAAI,KAAK,MAAM,IAAI,WAAW,EAAE,CAAC;IACpC,OAAO,CAAC;QACP,iBAAiB,EAAE,+DAA+D,WAAW,0FAA0F;KACvL,CAAC,CAAC;AACJ,CAAC;AAED,qCAAqC;AACrC,IAAI,IAAI,KAAK,MAAM,IAAI,WAAW,EAAE,CAAC;IACpC,OAAO,CAAC;QACP,iBAAiB,EAAE,qDAAqD,WAAW,+FAA+F;KAClL,CAAC,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,IAAI,IAAI,KAAK,UAAU,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC;QACP,kBAAkB,EAAE,MAAM;QAC1B,MAAM,EAAE,GAAG,WAAW,gCAAgC,WAAW,2BAA2B,GAAG,iEAAiE,WAAW,4CAA4C;KACvN,CAAC,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAE9C,MAAM,aAAa,GAAG;;;;;;;wBAOC,WAAW;;;;;2BAKR,WAAW;;;;;;;;;;;;;UAa5B,WAAW;;;;;;;;IAQjB,CAAC;IAEJ,MAAM,YAAY,GACjB,YAAY,KAAK,MAAM;QACtB,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE;QACpF,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IAErD,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,8BAA8B;AAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * SSRF protection: detect private/internal hostnames.
3
+ */
4
+ export declare function isPrivateHost(hostname: string): boolean;
5
+ //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAoCvD"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * SSRF protection: detect private/internal hostnames.
3
+ */
4
+ export function isPrivateHost(hostname) {
5
+ // Strip brackets from IPv6 literals like [::1]
6
+ const h = hostname.startsWith("[") && hostname.endsWith("]") ? hostname.slice(1, -1) : hostname;
7
+ const lower = h.toLowerCase();
8
+ // Localhost variants
9
+ if (lower === "localhost" || lower === "0.0.0.0")
10
+ return true;
11
+ // IPv4 loopback: 127.0.0.0/8
12
+ if (/^127\./.test(h))
13
+ return true;
14
+ // IPv4 private ranges
15
+ if (/^10\./.test(h))
16
+ return true;
17
+ if (/^172\.(1[6-9]|2\d|3[01])\./.test(h))
18
+ return true;
19
+ if (/^192\.168\./.test(h))
20
+ return true;
21
+ // IPv4 link-local: 169.254.0.0/16
22
+ if (/^169\.254\./.test(h))
23
+ return true;
24
+ // Carrier-grade NAT: 100.64.0.0/10 (100.64-127.*)
25
+ if (/^100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\./.test(h))
26
+ return true;
27
+ // IPv6 loopback
28
+ if (lower === "::1")
29
+ return true;
30
+ // IPv6 mapped IPv4: ::ffff:127.0.0.1, ::ffff:10.*, etc.
31
+ const mappedMatch = lower.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);
32
+ if (mappedMatch)
33
+ return isPrivateHost(mappedMatch[1]);
34
+ // IPv6 link-local: fe80::/10
35
+ if (/^fe[89ab]/i.test(h))
36
+ return true;
37
+ // IPv6 ULA: fc00::/7 (fc* and fd*)
38
+ if (/^f[cd]/i.test(h))
39
+ return true;
40
+ return false;
41
+ }
42
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC7C,+CAA+C;IAC/C,MAAM,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAChG,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAE9B,qBAAqB;IACrB,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAE9D,6BAA6B;IAC7B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,sBAAsB;IACtB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,kCAAkC;IAClC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,kDAAkD;IAClD,IAAI,0CAA0C,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpE,gBAAgB;IAChB,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAEjC,wDAAwD;IACxD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACjE,IAAI,WAAW;QAAE,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtD,6BAA6B;IAC7B,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,mCAAmC;IACnC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -7,8 +7,8 @@ export const goPlugin = {
7
7
  },
8
8
  preprocessCode(code) {
9
9
  // Wrap in package main if not already present
10
- if (!code.includes("package ")) {
11
- const hasImport = code.includes("import ");
10
+ if (!/^package\s/m.test(code)) {
11
+ const hasImport = /^import\s/m.test(code);
12
12
  if (hasImport) {
13
13
  return `package main\n\n${code}`;
14
14
  }
@@ -18,7 +18,7 @@ export const goPlugin = {
18
18
  },
19
19
  wrapWithFileContent(code, filePath) {
20
20
  const escaped = JSON.stringify(filePath);
21
- const hasPackage = code.includes("package ");
21
+ const hasPackage = /^package\s/m.test(code);
22
22
  if (hasPackage) {
23
23
  // Insert after package declaration
24
24
  return code.replace(/(package\s+\w+\n)/, `$1\nimport "os"\n\nvar FILE_CONTENT_PATH = ${escaped}\nvar _ = func() string { b, _ := os.ReadFile(FILE_CONTENT_PATH); return string(b) }()\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/runtime/languages/go.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACvC,QAAQ,EAAE,IAAI;IACd,iBAAiB,EAAE,CAAC,IAAI,CAAC;IACzB,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,OAAO,EAAE,QAAQ;QAC7B,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,cAAc,CAAC,IAAI;QAClB,8CAA8C;QAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,SAAS,EAAE,CAAC;gBACf,OAAO,mBAAmB,IAAI,EAAE,CAAC;YAClC,CAAC;YACD,OAAO,kDAAkD,IAAI,0BAA0B,CAAC;QACzF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,UAAU,EAAE,CAAC;YAChB,mCAAmC;YACnC,OAAO,IAAI,CAAC,OAAO,CAClB,mBAAmB,EACnB,8CAA8C,OAAO,0FAA0F,CAC/I,CAAC;QACH,CAAC;QACD,OAAO,yFAAyF,OAAO,gJAAgJ,IAAI,KAAK,CAAC;IAClQ,CAAC;CACD,CAAC"}
1
+ {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/runtime/languages/go.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACvC,QAAQ,EAAE,IAAI;IACd,iBAAiB,EAAE,CAAC,IAAI,CAAC;IACzB,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,OAAO,EAAE,QAAQ;QAC7B,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,cAAc,CAAC,IAAI;QAClB,8CAA8C;QAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,SAAS,EAAE,CAAC;gBACf,OAAO,mBAAmB,IAAI,EAAE,CAAC;YAClC,CAAC;YACD,OAAO,kDAAkD,IAAI,0BAA0B,CAAC;QACzF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,UAAU,EAAE,CAAC;YAChB,mCAAmC;YACnC,OAAO,IAAI,CAAC,OAAO,CAClB,mBAAmB,EACnB,8CAA8C,OAAO,0FAA0F,CAC/I,CAAC;QACH,CAAC;QACD,OAAO,yFAAyF,OAAO,gJAAgJ,IAAI,KAAK,CAAC;IAClQ,CAAC;CACD,CAAC"}
@@ -7,7 +7,7 @@ export const javascriptPlugin = {
7
7
  },
8
8
  wrapWithFileContent(code, filePath) {
9
9
  const escaped = JSON.stringify(filePath);
10
- return `const FILE_CONTENT_PATH = ${escaped};\nconst FILE_CONTENT = require("fs").readFileSync(FILE_CONTENT_PATH, "utf-8");\n${code}`;
10
+ return `const {readFileSync: __cm_readFileSync} = await import("node:fs");\nconst FILE_CONTENT_PATH = ${escaped};\nconst FILE_CONTENT = __cm_readFileSync(FILE_CONTENT_PATH, "utf-8");\n${code}`;
11
11
  },
12
12
  };
13
13
  //# sourceMappingURL=javascript.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"javascript.js","sourceRoot":"","sources":["../../../src/runtime/languages/javascript.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC/C,QAAQ,EAAE,YAAY;IACtB,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;IAClC,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,OAAO,EAAE,QAAQ;QAC7B,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,6BAA6B,OAAO,oFAAoF,IAAI,EAAE,CAAC;IACvI,CAAC;CACD,CAAC"}
1
+ {"version":3,"file":"javascript.js","sourceRoot":"","sources":["../../../src/runtime/languages/javascript.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC/C,QAAQ,EAAE,YAAY;IACtB,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;IAClC,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,OAAO,EAAE,QAAQ;QAC7B,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,iGAAiG,OAAO,2EAA2E,IAAI,EAAE,CAAC;IAClM,CAAC;CACD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export const rPlugin = {
2
2
  language: "r",
3
- runtimeCandidates: ["Rscript", "r"],
3
+ runtimeCandidates: ["Rscript", "R"],
4
4
  fileExtension: ".R",
5
5
  buildCommand(runtime, filePath) {
6
6
  return [runtime, filePath];
@@ -11,7 +11,7 @@ export const rustPlugin = {
11
11
  return [runtime, srcPath, "-o", binPath];
12
12
  },
13
13
  preprocessCode(code) {
14
- if (!code.includes("fn main")) {
14
+ if (!/^fn\s+main\s*\(/m.test(code)) {
15
15
  return `fn main() {\n${code}\n}`;
16
16
  }
17
17
  return undefined;
@@ -19,7 +19,7 @@ export const rustPlugin = {
19
19
  wrapWithFileContent(code, filePath) {
20
20
  const escaped = JSON.stringify(filePath);
21
21
  const preamble = `use std::fs;\nlet file_content_path = ${escaped};\nlet file_content = fs::read_to_string(file_content_path).unwrap();\n`;
22
- if (code.includes("fn main")) {
22
+ if (/^fn\s+main\s*\(/m.test(code)) {
23
23
  return code.replace(/fn main\s*\(\s*\)\s*\{/, `fn main() {\n${preamble}`);
24
24
  }
25
25
  return `fn main() {\n${preamble}${code}\n}`;
@@ -1 +1 @@
1
- {"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../src/runtime/languages/rust.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAmB;IACzC,QAAQ,EAAE,MAAM;IAChB,iBAAiB,EAAE,CAAC,OAAO,CAAC;IAC5B,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,QAAQ,EAAE,QAAQ;QAC9B,sDAAsD;QACtD,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAED,oEAAoE;IACpE,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO;QACpC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,IAAI;QAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,OAAO,gBAAgB,IAAI,KAAK,CAAC;QAClC,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,yCAAyC,OAAO,yEAAyE,CAAC;QAC3I,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,gBAAgB,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,gBAAgB,QAAQ,GAAG,IAAI,KAAK,CAAC;IAC7C,CAAC;CACD,CAAC"}
1
+ {"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../src/runtime/languages/rust.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAmB;IACzC,QAAQ,EAAE,MAAM;IAChB,iBAAiB,EAAE,CAAC,OAAO,CAAC;IAC5B,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,QAAQ,EAAE,QAAQ;QAC9B,sDAAsD;QACtD,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAED,oEAAoE;IACpE,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO;QACpC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,IAAI;QAClB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,OAAO,gBAAgB,IAAI,KAAK,CAAC;QAClC,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,yCAAyC,OAAO,yEAAyE,CAAC;QAC3I,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,gBAAgB,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,gBAAgB,QAAQ,GAAG,IAAI,KAAK,CAAC;IAC7C,CAAC;CACD,CAAC"}
@@ -7,7 +7,7 @@ export const typescriptPlugin = {
7
7
  },
8
8
  wrapWithFileContent(code, filePath) {
9
9
  const escaped = JSON.stringify(filePath);
10
- return `const FILE_CONTENT_PATH = ${escaped};\nconst FILE_CONTENT = require("fs").readFileSync(FILE_CONTENT_PATH, "utf-8");\n${code}`;
10
+ return `const {readFileSync: __cm_readFileSync} = await import("node:fs");\nconst FILE_CONTENT_PATH = ${escaped};\nconst FILE_CONTENT = __cm_readFileSync(FILE_CONTENT_PATH, "utf-8");\n${code}`;
11
11
  },
12
12
  // tsx and ts-node may be .cmd shims on Windows
13
13
  needsShell: process.platform === "win32",
@@ -1 +1 @@
1
- {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../src/runtime/languages/typescript.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC/C,QAAQ,EAAE,YAAY;IACtB,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;IAC5C,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,OAAO,EAAE,QAAQ;QAC7B,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,6BAA6B,OAAO,oFAAoF,IAAI,EAAE,CAAC;IACvI,CAAC;IAED,+CAA+C;IAC/C,UAAU,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;CACxC,CAAC"}
1
+ {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../src/runtime/languages/typescript.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC/C,QAAQ,EAAE,YAAY;IACtB,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;IAC5C,aAAa,EAAE,KAAK;IAEpB,YAAY,CAAC,OAAO,EAAE,QAAQ;QAC7B,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,iGAAiG,OAAO,2EAA2E,IAAI,EAAE,CAAC;IAClM,CAAC;IAED,+CAA+C;IAC/C,UAAU,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;CACxC,CAAC"}