@lazyingart/agintiflow 0.20.89 → 0.20.90

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lazyingart/agintiflow",
3
- "version": "0.20.89",
3
+ "version": "0.20.90",
4
4
  "type": "module",
5
5
  "description": "Low-cost, project-aware Web and CLI agents with DeepSeek/Venice/OpenAI routing, visible tool calls, durable sessions, scouts, AAPS, SCS, and guarded local execution.",
6
6
  "license": "Apache-2.0",
@@ -288,6 +288,18 @@ try {
288
288
  );
289
289
  assert(readonlyTestEchoPolicy.allowed, "read-only test/echo probe sequence should not require package-install-policy=allow");
290
290
  assert(readonlyTestEchoPolicy.category === "read-only", "read-only test/echo probe sequence should be classified as read-only");
291
+ const pdflatexCompilePolicy = evaluateCommandPolicy(
292
+ 'cd profile-latex-20260506 && pdflatex -interaction=nonstopmode -halt-on-error main.tex 2>&1; echo "PDFLATEX_EXIT:$?"',
293
+ dockerWorkspaceNoInstallsPolicy
294
+ );
295
+ assert(pdflatexCompilePolicy.allowed, "workspace-local pdflatex compile should be allowed without package installs");
296
+ assert(pdflatexCompilePolicy.category === "toolchain", "workspace-local pdflatex compile should be classified as toolchain");
297
+ const latexmkCompilePolicy = evaluateCommandPolicy(
298
+ 'cd profile-latex-20260506 && latexmk -pdf main.tex 2>&1; echo "LATEXMK_EXIT:$?"',
299
+ dockerWorkspaceNoInstallsPolicy
300
+ );
301
+ assert(latexmkCompilePolicy.allowed, "workspace-local latexmk compile should be allowed without package installs");
302
+ assert(latexmkCompilePolicy.category === "toolchain", "workspace-local latexmk compile should be classified as toolchain");
291
303
  const curlPolicy = evaluateCommandPolicy("curl -s -o /dev/null -w '%{http_code}' https://github.com/lazyingart/AgInTiFlow.git", dockerWorkspacePolicy);
292
304
  assert(curlPolicy.allowed, "curl URL probe with flags should be allowed in docker-workspace allow mode");
293
305
  assert(curlPolicy.needsNetwork, "curl URL probe with flags was not classified as network");
@@ -750,6 +762,8 @@ try {
750
762
  "command_policy_readonly_probe_sequence_no_installs",
751
763
  "command_policy_readonly_version_pipeline_no_installs",
752
764
  "command_policy_readonly_test_echo_no_installs",
765
+ "command_policy_pdflatex_compile_no_installs",
766
+ "command_policy_latexmk_compile_no_installs",
753
767
  "command_policy_git_clone_network",
754
768
  "command_policy_safe_chmod_sequence",
755
769
  "command_policy_cd_workspace",
@@ -265,7 +265,7 @@ function classifyGitClone(normalized) {
265
265
  }
266
266
 
267
267
  function classifySimpleCommand(normalized) {
268
- const readOnlyCommand = stripBenignRedirections(normalized);
268
+ const benignRedirectCommand = stripBenignRedirections(normalized);
269
269
  if (ALWAYS_BLOCKED_PATTERNS.some((pattern) => pattern.test(normalized))) {
270
270
  return { category: "blocked", reason: "Command is blocked because it may expose secrets or publish packages." };
271
271
  }
@@ -318,7 +318,7 @@ function classifySimpleCommand(normalized) {
318
318
  const gitCloneClassification = classifyGitClone(normalized);
319
319
  if (gitCloneClassification) return gitCloneClassification;
320
320
 
321
- const unquoted = stripQuotedSegments(readOnlyCommand);
321
+ const unquoted = stripQuotedSegments(benignRedirectCommand);
322
322
  const lowered = ` ${unquoted.toLowerCase()} `;
323
323
  if (BLOCKED_WRITE_TOKENS.some((part) => lowered.includes(part))) {
324
324
  return {
@@ -337,25 +337,25 @@ function classifySimpleCommand(normalized) {
337
337
  };
338
338
  }
339
339
 
340
- if (matchAny(READ_ONLY_PATTERNS, readOnlyCommand) || isReadOnlyFindCommand(normalized)) {
340
+ if (matchAny(READ_ONLY_PATTERNS, benignRedirectCommand) || isReadOnlyFindCommand(normalized)) {
341
341
  return { category: "read-only", needsNetwork: false, writesWorkspace: false };
342
342
  }
343
- if (matchAny(TEST_PATTERNS, normalized)) {
343
+ if (matchAny(TEST_PATTERNS, benignRedirectCommand)) {
344
344
  return { category: "test", needsNetwork: false, writesWorkspace: false };
345
345
  }
346
- if (matchAny(TOOLCHAIN_PATTERNS, normalized)) {
346
+ if (matchAny(TOOLCHAIN_PATTERNS, benignRedirectCommand)) {
347
347
  return { category: "toolchain", needsNetwork: false, writesWorkspace: true };
348
348
  }
349
- if (matchAny(NETWORK_FETCH_PATTERNS, normalized)) {
350
- return { category: "network-fetch", needsNetwork: true, writesWorkspace: /(\s-o\s|\s-O\s)/.test(normalized) };
349
+ if (matchAny(NETWORK_FETCH_PATTERNS, benignRedirectCommand)) {
350
+ return { category: "network-fetch", needsNetwork: true, writesWorkspace: /(\s-o\s|\s-O\s)/.test(benignRedirectCommand) };
351
351
  }
352
- if (matchAny(SYSTEM_PACKAGE_INSTALL_PATTERNS, normalized)) {
352
+ if (matchAny(SYSTEM_PACKAGE_INSTALL_PATTERNS, benignRedirectCommand)) {
353
353
  return { category: "system-package-install", needsNetwork: true, writesWorkspace: false, requiresDockerRoot: true };
354
354
  }
355
- if (matchAny(PACKAGE_INSTALL_PATTERNS, normalized)) {
355
+ if (matchAny(PACKAGE_INSTALL_PATTERNS, benignRedirectCommand)) {
356
356
  return { category: "package-install", needsNetwork: true, writesWorkspace: true };
357
357
  }
358
- if (matchAny(ENV_SETUP_PATTERNS, normalized)) {
358
+ if (matchAny(ENV_SETUP_PATTERNS, benignRedirectCommand)) {
359
359
  return { category: "env-setup", needsNetwork: false, writesWorkspace: true };
360
360
  }
361
361