optimus-tool-call 0.1.0

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 (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +191 -0
  3. package/dist/index.d.ts +9 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +128 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/classify/builtins.d.ts +7 -0
  8. package/dist/lib/classify/builtins.d.ts.map +1 -0
  9. package/dist/lib/classify/builtins.js +107 -0
  10. package/dist/lib/classify/builtins.js.map +1 -0
  11. package/dist/lib/classify/constants.d.ts +36 -0
  12. package/dist/lib/classify/constants.d.ts.map +1 -0
  13. package/dist/lib/classify/constants.js +35 -0
  14. package/dist/lib/classify/constants.js.map +1 -0
  15. package/dist/lib/classify/dispatch.d.ts +8 -0
  16. package/dist/lib/classify/dispatch.d.ts.map +1 -0
  17. package/dist/lib/classify/dispatch.js +95 -0
  18. package/dist/lib/classify/dispatch.js.map +1 -0
  19. package/dist/lib/classify/flags.d.ts +6 -0
  20. package/dist/lib/classify/flags.d.ts.map +1 -0
  21. package/dist/lib/classify/flags.js +19 -0
  22. package/dist/lib/classify/flags.js.map +1 -0
  23. package/dist/lib/classify/handlers/database-cli.d.ts +3 -0
  24. package/dist/lib/classify/handlers/database-cli.d.ts.map +1 -0
  25. package/dist/lib/classify/handlers/database-cli.js +68 -0
  26. package/dist/lib/classify/handlers/database-cli.js.map +1 -0
  27. package/dist/lib/classify/handlers/docker.d.ts +6 -0
  28. package/dist/lib/classify/handlers/docker.d.ts.map +1 -0
  29. package/dist/lib/classify/handlers/docker.js +27 -0
  30. package/dist/lib/classify/handlers/docker.js.map +1 -0
  31. package/dist/lib/classify/handlers/fs-delete.d.ts +6 -0
  32. package/dist/lib/classify/handlers/fs-delete.d.ts.map +1 -0
  33. package/dist/lib/classify/handlers/fs-delete.js +14 -0
  34. package/dist/lib/classify/handlers/fs-delete.js.map +1 -0
  35. package/dist/lib/classify/handlers/git.d.ts +6 -0
  36. package/dist/lib/classify/handlers/git.d.ts.map +1 -0
  37. package/dist/lib/classify/handlers/git.js +83 -0
  38. package/dist/lib/classify/handlers/git.js.map +1 -0
  39. package/dist/lib/classify/handlers/network-http.d.ts +10 -0
  40. package/dist/lib/classify/handlers/network-http.d.ts.map +1 -0
  41. package/dist/lib/classify/handlers/network-http.js +46 -0
  42. package/dist/lib/classify/handlers/network-http.js.map +1 -0
  43. package/dist/lib/classify/handlers/packages.d.ts +6 -0
  44. package/dist/lib/classify/handlers/packages.d.ts.map +1 -0
  45. package/dist/lib/classify/handlers/packages.js +18 -0
  46. package/dist/lib/classify/handlers/packages.js.map +1 -0
  47. package/dist/lib/classify/handlers/sed-awk.d.ts +10 -0
  48. package/dist/lib/classify/handlers/sed-awk.d.ts.map +1 -0
  49. package/dist/lib/classify/handlers/sed-awk.js +40 -0
  50. package/dist/lib/classify/handlers/sed-awk.js.map +1 -0
  51. package/dist/lib/classify/handlers/shell-and-runtime.d.ts +14 -0
  52. package/dist/lib/classify/handlers/shell-and-runtime.d.ts.map +1 -0
  53. package/dist/lib/classify/handlers/shell-and-runtime.js +75 -0
  54. package/dist/lib/classify/handlers/shell-and-runtime.js.map +1 -0
  55. package/dist/lib/classify/index.d.ts +6 -0
  56. package/dist/lib/classify/index.d.ts.map +1 -0
  57. package/dist/lib/classify/index.js +6 -0
  58. package/dist/lib/classify/index.js.map +1 -0
  59. package/dist/lib/classify/interpreter.d.ts +5 -0
  60. package/dist/lib/classify/interpreter.d.ts.map +1 -0
  61. package/dist/lib/classify/interpreter.js +16 -0
  62. package/dist/lib/classify/interpreter.js.map +1 -0
  63. package/dist/lib/classify/pipeline.d.ts +10 -0
  64. package/dist/lib/classify/pipeline.d.ts.map +1 -0
  65. package/dist/lib/classify/pipeline.js +105 -0
  66. package/dist/lib/classify/pipeline.js.map +1 -0
  67. package/dist/lib/classify.d.ts +2 -0
  68. package/dist/lib/classify.d.ts.map +1 -0
  69. package/dist/lib/classify.js +2 -0
  70. package/dist/lib/classify.js.map +1 -0
  71. package/dist/lib/streaming.d.ts +17 -0
  72. package/dist/lib/streaming.d.ts.map +1 -0
  73. package/dist/lib/streaming.js +166 -0
  74. package/dist/lib/streaming.js.map +1 -0
  75. package/dist/lib/telemetry/build-event.d.ts +6 -0
  76. package/dist/lib/telemetry/build-event.d.ts.map +1 -0
  77. package/dist/lib/telemetry/build-event.js +115 -0
  78. package/dist/lib/telemetry/build-event.js.map +1 -0
  79. package/dist/lib/telemetry/command-tokenize.d.ts +6 -0
  80. package/dist/lib/telemetry/command-tokenize.d.ts.map +1 -0
  81. package/dist/lib/telemetry/command-tokenize.js +38 -0
  82. package/dist/lib/telemetry/command-tokenize.js.map +1 -0
  83. package/dist/lib/telemetry/index.d.ts +9 -0
  84. package/dist/lib/telemetry/index.d.ts.map +1 -0
  85. package/dist/lib/telemetry/index.js +9 -0
  86. package/dist/lib/telemetry/index.js.map +1 -0
  87. package/dist/lib/telemetry/sensitivity.d.ts +7 -0
  88. package/dist/lib/telemetry/sensitivity.d.ts.map +1 -0
  89. package/dist/lib/telemetry/sensitivity.js +81 -0
  90. package/dist/lib/telemetry/sensitivity.js.map +1 -0
  91. package/dist/lib/telemetry/serialize.d.ts +3 -0
  92. package/dist/lib/telemetry/serialize.d.ts.map +1 -0
  93. package/dist/lib/telemetry/serialize.js +17 -0
  94. package/dist/lib/telemetry/serialize.js.map +1 -0
  95. package/dist/lib/telemetry/types.d.ts +36 -0
  96. package/dist/lib/telemetry/types.d.ts.map +1 -0
  97. package/dist/lib/telemetry/types.js +14 -0
  98. package/dist/lib/telemetry/types.js.map +1 -0
  99. package/dist/lib/telemetry.d.ts +2 -0
  100. package/dist/lib/telemetry.d.ts.map +1 -0
  101. package/dist/lib/telemetry.js +2 -0
  102. package/dist/lib/telemetry.js.map +1 -0
  103. package/dist/test/classify.test.d.ts +2 -0
  104. package/dist/test/classify.test.d.ts.map +1 -0
  105. package/dist/test/classify.test.js +210 -0
  106. package/dist/test/classify.test.js.map +1 -0
  107. package/dist/test/index.test.d.ts +2 -0
  108. package/dist/test/index.test.d.ts.map +1 -0
  109. package/dist/test/index.test.js +376 -0
  110. package/dist/test/index.test.js.map +1 -0
  111. package/dist/test/pipeline.test.d.ts +2 -0
  112. package/dist/test/pipeline.test.d.ts.map +1 -0
  113. package/dist/test/pipeline.test.js +139 -0
  114. package/dist/test/pipeline.test.js.map +1 -0
  115. package/dist/test/sensitivity.test.d.ts +2 -0
  116. package/dist/test/sensitivity.test.d.ts.map +1 -0
  117. package/dist/test/sensitivity.test.js +192 -0
  118. package/dist/test/sensitivity.test.js.map +1 -0
  119. package/dist/test/streaming.test.d.ts +2 -0
  120. package/dist/test/streaming.test.d.ts.map +1 -0
  121. package/dist/test/streaming.test.js +202 -0
  122. package/dist/test/streaming.test.js.map +1 -0
  123. package/dist/test/telemetry.test.d.ts +2 -0
  124. package/dist/test/telemetry.test.d.ts.map +1 -0
  125. package/dist/test/telemetry.test.js +204 -0
  126. package/dist/test/telemetry.test.js.map +1 -0
  127. package/dist/test/tokenize.test.d.ts +2 -0
  128. package/dist/test/tokenize.test.d.ts.map +1 -0
  129. package/dist/test/tokenize.test.js +157 -0
  130. package/dist/test/tokenize.test.js.map +1 -0
  131. package/package.json +47 -0
@@ -0,0 +1,95 @@
1
+ import { basename } from "path";
2
+ import { UNKNOWN, PACKAGE_RUN } from "./constants.js";
3
+ import { findMainCommand } from "./pipeline.js";
4
+ import { normalizeInterpreter } from "./interpreter.js";
5
+ import { tryClassifyBuiltin } from "./builtins.js";
6
+ import { classifyRm } from "./handlers/fs-delete.js";
7
+ import { classifyGit } from "./handlers/git.js";
8
+ import { classifyCurlWget } from "./handlers/network-http.js";
9
+ import { classifyShell, classifyScriptRunner } from "./handlers/shell-and-runtime.js";
10
+ import { classifyPackage } from "./handlers/packages.js";
11
+ import { classifyDocker } from "./handlers/docker.js";
12
+ import { classifyDatabaseCli } from "./handlers/database-cli.js";
13
+ /**
14
+ * Find the next actual command after a given index (e.g., after "cd dir").
15
+ */
16
+ function findMainCommandAfterIndex(components, startIndex) {
17
+ const operators = ["&&", "||", "|", ";", "&"];
18
+ let foundOperator = false;
19
+ for (let i = startIndex + 1; i < components.length; i++) {
20
+ const comp = components[i].trim();
21
+ if (operators.includes(comp)) {
22
+ foundOperator = true;
23
+ continue;
24
+ }
25
+ if (foundOperator && comp && !comp.startsWith("-")) {
26
+ const nextCmd = basename(comp);
27
+ if (nextCmd) {
28
+ return classifyCommandComponents([nextCmd, ...components.slice(i + 1)]);
29
+ }
30
+ }
31
+ }
32
+ return UNKNOWN;
33
+ }
34
+ function classifySudo(components) {
35
+ if (components.length > 1) {
36
+ const inner = components.slice(1);
37
+ return classifyCommandComponents(inner);
38
+ }
39
+ return UNKNOWN;
40
+ }
41
+ /**
42
+ * Classify command components and return action type.
43
+ * @param components List of command parts, e.g., ["rm", "-rf", "/tmp/build"]
44
+ * @returns Action type string, e.g., "filesystem_delete"
45
+ */
46
+ export function classifyCommandComponents(components) {
47
+ if (!components || !components.length) {
48
+ return UNKNOWN;
49
+ }
50
+ let cmd = findMainCommand(components);
51
+ if (!cmd) {
52
+ return UNKNOWN;
53
+ }
54
+ cmd = normalizeInterpreter(cmd);
55
+ if (cmd === "rm") {
56
+ return classifyRm(components);
57
+ }
58
+ if (cmd === "git") {
59
+ return classifyGit(components);
60
+ }
61
+ if (cmd === "curl" || cmd === "wget") {
62
+ return classifyCurlWget(components);
63
+ }
64
+ if (["bash", "sh", "dash", "zsh"].includes(cmd)) {
65
+ return classifyShell(components);
66
+ }
67
+ if (["python", "python3", "node", "ruby", "perl", "php"].includes(cmd)) {
68
+ return classifyScriptRunner(components);
69
+ }
70
+ if (["npm", "pip", "pip3", "cargo", "gem", "pnpm", "bun"].includes(cmd)) {
71
+ return classifyPackage(components);
72
+ }
73
+ if (["pytest", "py.test"].includes(cmd)) {
74
+ return PACKAGE_RUN;
75
+ }
76
+ if (cmd === "docker") {
77
+ return classifyDocker(components);
78
+ }
79
+ if (cmd === "sudo") {
80
+ return classifySudo(components);
81
+ }
82
+ const dbType = classifyDatabaseCli(cmd, components);
83
+ if (dbType !== null) {
84
+ return dbType;
85
+ }
86
+ if (["cd", "pushd", "popd", "pwd"].includes(cmd)) {
87
+ return findMainCommandAfterIndex(components, 0);
88
+ }
89
+ const builtin = tryClassifyBuiltin(cmd, components);
90
+ if (builtin !== null) {
91
+ return builtin;
92
+ }
93
+ return UNKNOWN;
94
+ }
95
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/lib/classify/dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Check if a flag is present in components.
3
+ * Handles both -f (single char) and -rf (cluster).
4
+ */
5
+ export declare function hasFlag(components: string[], flag: string): boolean;
6
+ //# sourceMappingURL=flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../../src/lib/classify/flags.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAanE"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Check if a flag is present in components.
3
+ * Handles both -f (single char) and -rf (cluster).
4
+ */
5
+ export function hasFlag(components, flag) {
6
+ const needle = `-${flag}`;
7
+ for (const comp of components) {
8
+ if (comp === needle) {
9
+ return true;
10
+ }
11
+ if (comp.startsWith("-") && !comp.startsWith("--")) {
12
+ if (comp.slice(1).includes(flag)) {
13
+ return true;
14
+ }
15
+ }
16
+ }
17
+ return false;
18
+ }
19
+ //# sourceMappingURL=flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.js","sourceRoot":"","sources":["../../../src/lib/classify/flags.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,UAAoB,EAAE,IAAY;IACxD,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ActionType } from "../constants.js";
2
+ export declare function classifyDatabaseCli(cmd: string, components: string[]): ActionType | null;
3
+ //# sourceMappingURL=database-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-cli.d.ts","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/database-cli.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA0ClD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,IAAI,CA8BxF"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Classify database CLI invocations (sqlite3, psql, mysql, mariadb) into nah db_read / db_write.
3
+ */
4
+ import { DB_READ, DB_WRITE, UNKNOWN } from "../constants.js";
5
+ const DB_CLI = new Set(["sqlite3", "psql", "mysql", "mariadb"]);
6
+ /** Substrings after the DB path / connection args — mutating SQL or DDL. */
7
+ const MUTATING_SQL_HINTS = [
8
+ "insert into",
9
+ "update ",
10
+ "delete from",
11
+ "merge into",
12
+ "drop table",
13
+ "drop database",
14
+ "drop index",
15
+ "truncate table",
16
+ "alter table",
17
+ "create table",
18
+ "create index",
19
+ "replace into",
20
+ "attach database",
21
+ "detach database",
22
+ "vacuum",
23
+ "pragma writable_schema",
24
+ "pragma journal_mode",
25
+ "pragma user_version",
26
+ ];
27
+ /** Read-oriented or introspection patterns. */
28
+ const READ_SQL_HINTS = [
29
+ "select ",
30
+ "explain ",
31
+ "pragma ",
32
+ "show tables",
33
+ "show databases",
34
+ "describe ",
35
+ "desc ",
36
+ "\\dt",
37
+ "\\d ",
38
+ ".schema",
39
+ ".tables",
40
+ ".dump",
41
+ ];
42
+ export function classifyDatabaseCli(cmd, components) {
43
+ const base = cmd.toLowerCase();
44
+ if (!DB_CLI.has(base)) {
45
+ return null;
46
+ }
47
+ const tail = components.slice(1).join(" ").toLowerCase();
48
+ if (!tail.trim()) {
49
+ // Interactive shell or unknown — not "unknown" taxonomy; DB tooling.
50
+ return DB_READ;
51
+ }
52
+ // e.g. `sqlite3 ./app.db` — opens DB without SQL on the line
53
+ if (components.length === 2 && /\.(db|sqlite3?)$/i.test(components[1].trim())) {
54
+ return DB_READ;
55
+ }
56
+ if (MUTATING_SQL_HINTS.some((h) => tail.includes(h))) {
57
+ return DB_WRITE;
58
+ }
59
+ if (READ_SQL_HINTS.some((h) => tail.includes(h))) {
60
+ return DB_READ;
61
+ }
62
+ // sqlite3 path "SQL" with quoted one-liner e.g. sqlite3 db "DROP TABLE t"
63
+ if (tail.includes("drop ") || tail.includes("alter ") || tail.includes("truncate")) {
64
+ return DB_WRITE;
65
+ }
66
+ return UNKNOWN;
67
+ }
68
+ //# sourceMappingURL=database-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-cli.js","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/database-cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG7D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AAEhE,4EAA4E;AAC5E,MAAM,kBAAkB,GAAsB;IAC5C,aAAa;IACb,SAAS;IACT,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,eAAe;IACf,YAAY;IACZ,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,cAAc;IACd,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,QAAQ;IACR,wBAAwB;IACxB,qBAAqB;IACrB,qBAAqB;CACtB,CAAC;AAEF,+CAA+C;AAC/C,MAAM,cAAc,GAAsB;IACxC,SAAS;IACT,UAAU;IACV,SAAS;IACT,aAAa;IACb,gBAAgB;IAChB,WAAW;IACX,OAAO;IACP,MAAM;IACN,MAAM;IACN,SAAS;IACT,SAAS;IACT,OAAO;CACR,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,UAAoB;IACnE,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,qEAAqE;QACrE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,6DAA6D;IAC7D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9E,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,0EAA0E;IAC1E,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACnF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type ActionType } from "../constants.js";
2
+ /**
3
+ * Classify docker commands.
4
+ */
5
+ export declare function classifyDocker(components: string[]): ActionType;
6
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,CA4B/D"}
@@ -0,0 +1,27 @@
1
+ import { CONTAINER_DESTRUCTIVE, CONTAINER_EXEC, CONTAINER_READ, CONTAINER_WRITE, UNKNOWN, } from "../constants.js";
2
+ /**
3
+ * Classify docker commands.
4
+ */
5
+ export function classifyDocker(components) {
6
+ if (components.length < 2) {
7
+ return UNKNOWN;
8
+ }
9
+ const sub = components[1];
10
+ if (sub === "rm") {
11
+ return CONTAINER_DESTRUCTIVE;
12
+ }
13
+ if (["run", "exec"].includes(sub)) {
14
+ return CONTAINER_EXEC;
15
+ }
16
+ if (["stop", "kill"].includes(sub)) {
17
+ return CONTAINER_DESTRUCTIVE;
18
+ }
19
+ if (["ps", "inspect", "logs", "images", "pull"].includes(sub)) {
20
+ return CONTAINER_READ;
21
+ }
22
+ if (["build", "create"].includes(sub)) {
23
+ return CONTAINER_WRITE;
24
+ }
25
+ return CONTAINER_WRITE;
26
+ }
27
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,eAAe,EACf,OAAO,GAER,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAoB;IACjD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type ActionType } from "../constants.js";
2
+ /**
3
+ * Classify rm command based on flags.
4
+ */
5
+ export declare function classifyRm(components: string[]): ActionType;
6
+ //# sourceMappingURL=fs-delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-delete.d.ts","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/fs-delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAGzB;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,CAS3D"}
@@ -0,0 +1,14 @@
1
+ import { FILESYSTEM_DELETE, } from "../constants.js";
2
+ import { hasFlag } from "../flags.js";
3
+ /**
4
+ * Classify rm command based on flags.
5
+ */
6
+ export function classifyRm(components) {
7
+ const hasR = hasFlag(components, "r");
8
+ const hasF = hasFlag(components, "f");
9
+ if ((hasR && hasF) || hasR || hasF) {
10
+ return FILESYSTEM_DELETE;
11
+ }
12
+ return FILESYSTEM_DELETE;
13
+ }
14
+ //# sourceMappingURL=fs-delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-delete.js","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/fs-delete.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAElB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,UAAoB;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAEtC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACnC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type ActionType } from "../constants.js";
2
+ /**
3
+ * Classify git command based on subcommand and flags.
4
+ */
5
+ export declare function classifyGit(components: string[]): ActionType;
6
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAuBzB;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,CAkE5D"}
@@ -0,0 +1,83 @@
1
+ import { GIT_DISCARD, GIT_HISTORY_REWRITE, GIT_REMOTE_WRITE, GIT_SAFE, GIT_WRITE, UNKNOWN, } from "../constants.js";
2
+ import { hasFlag } from "../flags.js";
3
+ /**
4
+ * Find the git subcommand, skipping git-level flags like -C <path>, --git-dir, etc.
5
+ */
6
+ function findGitSubcommand(components) {
7
+ // Git-level flags that take a value argument (skip flag + value)
8
+ const GIT_FLAGS_WITH_VALUE = new Set(["-C", "--git-dir", "--work-tree", "--namespace", "-c"]);
9
+ let i = 1; // skip "git"
10
+ while (i < components.length) {
11
+ const tok = components[i];
12
+ if (GIT_FLAGS_WITH_VALUE.has(tok)) {
13
+ i += 2; // skip flag and its value
14
+ }
15
+ else if (tok.startsWith("-")) {
16
+ i += 1; // skip standalone flag
17
+ }
18
+ else {
19
+ return { sub: tok, args: components.slice(i + 1) };
20
+ }
21
+ }
22
+ return null;
23
+ }
24
+ /**
25
+ * Classify git command based on subcommand and flags.
26
+ */
27
+ export function classifyGit(components) {
28
+ if (components.length < 2 || components[0] !== "git") {
29
+ return UNKNOWN;
30
+ }
31
+ const parsed = findGitSubcommand(components);
32
+ if (!parsed)
33
+ return UNKNOWN;
34
+ const { sub, args } = parsed;
35
+ if (sub === "push") {
36
+ if (args.includes("--force") ||
37
+ args.includes("-f") ||
38
+ hasFlag(args, "f") ||
39
+ args.includes("--force-with-lease") ||
40
+ args.some((a) => a.startsWith("--force-with-lease="))) {
41
+ return GIT_HISTORY_REWRITE;
42
+ }
43
+ return GIT_REMOTE_WRITE;
44
+ }
45
+ if (sub === "reset") {
46
+ if (args.includes("--hard")) {
47
+ return GIT_DISCARD;
48
+ }
49
+ return GIT_WRITE;
50
+ }
51
+ if (sub === "branch") {
52
+ if (args.includes("-D") || args.includes("--force")) {
53
+ return GIT_HISTORY_REWRITE;
54
+ }
55
+ if (args.includes("-d") || args.includes("--delete")) {
56
+ return GIT_DISCARD;
57
+ }
58
+ return GIT_WRITE;
59
+ }
60
+ if (sub === "tag") {
61
+ if (args.includes("--force") || args.includes("-f")) {
62
+ return GIT_HISTORY_REWRITE;
63
+ }
64
+ if (args.includes("--delete") || args.includes("-d")) {
65
+ return GIT_DISCARD;
66
+ }
67
+ return GIT_WRITE;
68
+ }
69
+ if (sub === "clean") {
70
+ return GIT_HISTORY_REWRITE;
71
+ }
72
+ if (["rebase", "cherry-pick"].includes(sub)) {
73
+ return GIT_HISTORY_REWRITE;
74
+ }
75
+ if (["config", "checkout", "add", "commit", "pull", "fetch", "merge"].includes(sub)) {
76
+ return GIT_WRITE;
77
+ }
78
+ if (["log", "show", "status", "diff", "branch", "remote"].includes(sub)) {
79
+ return GIT_SAFE;
80
+ }
81
+ return GIT_WRITE;
82
+ }
83
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type ActionType } from "../constants.js";
2
+ /**
3
+ * Classify curl/wget command based on method and data flags.
4
+ */
5
+ export declare function classifyCurlWget(components: string[]): ActionType;
6
+ /**
7
+ * Classify httpie (http/https command) based on HTTP method and data.
8
+ */
9
+ export declare function classifyHttpie(components: string[]): ActionType;
10
+ //# sourceMappingURL=network-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-http.d.ts","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/network-http.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,CAiBjE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,CAyB/D"}
@@ -0,0 +1,46 @@
1
+ import { NETWORK_OUTBOUND, NETWORK_WRITE, } from "../constants.js";
2
+ /**
3
+ * Classify curl/wget command based on method and data flags.
4
+ */
5
+ export function classifyCurlWget(components) {
6
+ const args = components.slice(1);
7
+ for (let i = 0; i < args.length; i++) {
8
+ if (args[i] === "-X" && i + 1 < args.length) {
9
+ const method = args[i + 1].toUpperCase();
10
+ if (["POST", "PUT", "DELETE", "PATCH"].includes(method)) {
11
+ return NETWORK_WRITE;
12
+ }
13
+ }
14
+ }
15
+ if (args.includes("--data") || args.includes("-d")) {
16
+ return NETWORK_WRITE;
17
+ }
18
+ return NETWORK_OUTBOUND;
19
+ }
20
+ /**
21
+ * Classify httpie (http/https command) based on HTTP method and data.
22
+ */
23
+ export function classifyHttpie(components) {
24
+ const args = components.slice(1);
25
+ for (let i = 0; i < args.length; i++) {
26
+ const arg = args[i];
27
+ if (arg === "-X" && i + 1 < args.length) {
28
+ const method = args[i + 1].toUpperCase();
29
+ if (["POST", "PUT", "PATCH", "DELETE"].includes(method)) {
30
+ return NETWORK_WRITE;
31
+ }
32
+ }
33
+ }
34
+ for (const arg of args) {
35
+ if (arg === "--json" || arg === "-j" ||
36
+ arg === "--form" || arg === "-f" ||
37
+ arg === "--data" || arg === "-d" ||
38
+ arg.startsWith("--form") ||
39
+ arg.startsWith("--json") ||
40
+ arg.startsWith("--data")) {
41
+ return NETWORK_WRITE;
42
+ }
43
+ }
44
+ return NETWORK_OUTBOUND;
45
+ }
46
+ //# sourceMappingURL=network-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-http.js","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/network-http.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,aAAa,GAEd,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAoB;IACnD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxD,OAAO,aAAa,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAoB;IACjD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxD,OAAO,aAAa,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAChC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAChC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAChC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;YACxB,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;YACxB,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,aAAa,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type ActionType } from "../constants.js";
2
+ /**
3
+ * Classify package manager commands.
4
+ */
5
+ export declare function classifyPackage(components: string[]): ActionType;
6
+ //# sourceMappingURL=packages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packages.d.ts","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/packages.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,CAgBhE"}
@@ -0,0 +1,18 @@
1
+ import { PACKAGE_INSTALL, PACKAGE_RUN, PACKAGE_UNINSTALL, } from "../constants.js";
2
+ /**
3
+ * Classify package manager commands.
4
+ */
5
+ export function classifyPackage(components) {
6
+ const args = components.slice(1);
7
+ if (args.some((arg) => ["install", "i"].includes(arg))) {
8
+ return PACKAGE_INSTALL;
9
+ }
10
+ if (args.some((arg) => ["uninstall", "remove", "rm"].includes(arg))) {
11
+ return PACKAGE_UNINSTALL;
12
+ }
13
+ if (args.includes("run")) {
14
+ return PACKAGE_RUN;
15
+ }
16
+ return PACKAGE_INSTALL;
17
+ }
18
+ //# sourceMappingURL=packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packages.js","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/packages.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EACX,iBAAiB,GAElB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAoB;IAClD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type ActionType } from "../constants.js";
2
+ /**
3
+ * sed -i/-I/--in-place = filesystem_write; otherwise read (stdin transform).
4
+ */
5
+ export declare function classifySed(components: string[]): ActionType;
6
+ /**
7
+ * awk with system()/getline/pipes/redirection = lang_exec; else filesystem_read.
8
+ */
9
+ export declare function classifyAwk(components: string[]): ActionType;
10
+ //# sourceMappingURL=sed-awk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sed-awk.d.ts","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/sed-awk.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,CAe5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,CAe5D"}
@@ -0,0 +1,40 @@
1
+ import { FILESYSTEM_READ, FILESYSTEM_WRITE, LANG_EXEC, } from "../constants.js";
2
+ /**
3
+ * sed -i/-I/--in-place = filesystem_write; otherwise read (stdin transform).
4
+ */
5
+ export function classifySed(components) {
6
+ for (let i = 1; i < components.length; i++) {
7
+ const comp = components[i];
8
+ if (comp === "-i" || comp === "-I" ||
9
+ comp.startsWith("-i") || comp.startsWith("-I") ||
10
+ comp.startsWith("--in-place")) {
11
+ return FILESYSTEM_WRITE;
12
+ }
13
+ if (comp.startsWith("-") && !comp.startsWith("--")) {
14
+ if (comp.includes("i") || comp.includes("I")) {
15
+ return FILESYSTEM_WRITE;
16
+ }
17
+ }
18
+ }
19
+ return FILESYSTEM_READ;
20
+ }
21
+ /**
22
+ * awk with system()/getline/pipes/redirection = lang_exec; else filesystem_read.
23
+ */
24
+ export function classifyAwk(components) {
25
+ for (let i = 1; i < components.length; i++) {
26
+ const comp = components[i];
27
+ if (comp.startsWith("-")) {
28
+ continue;
29
+ }
30
+ if (comp.includes("system(") ||
31
+ comp.includes("getline") ||
32
+ comp.includes("|") ||
33
+ comp.includes(">") ||
34
+ comp.includes("print >")) {
35
+ return LANG_EXEC;
36
+ }
37
+ }
38
+ return FILESYSTEM_READ;
39
+ }
40
+ //# sourceMappingURL=sed-awk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sed-awk.js","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/sed-awk.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,SAAS,GAEV,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,UAAoB;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;YAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAC9C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAClC,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7C,OAAO,gBAAgB,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,UAAoB;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type ActionType } from "../constants.js";
2
+ /**
3
+ * Classify shell (bash/sh) command based on flags.
4
+ */
5
+ export declare function classifyShell(components: string[]): ActionType;
6
+ /**
7
+ * Classify script execution (python, node, ruby, etc.).
8
+ */
9
+ export declare function classifyScriptRunner(components: string[]): ActionType;
10
+ /**
11
+ * Classify make based on read-only flags.
12
+ */
13
+ export declare function classifyMake(components: string[]): ActionType;
14
+ //# sourceMappingURL=shell-and-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-and-runtime.d.ts","sourceRoot":"","sources":["../../../../src/lib/classify/handlers/shell-and-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAczB;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,CAc9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,CAqBrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,CAyB7D"}