ralph-flow-pi 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 +428 -0
  3. package/dist/cli.d.ts +9 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +56 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/prompts.d.ts +25 -0
  8. package/dist/commands/prompts.d.ts.map +1 -0
  9. package/dist/commands/prompts.js +249 -0
  10. package/dist/commands/prompts.js.map +1 -0
  11. package/dist/commands/tools.d.ts +47 -0
  12. package/dist/commands/tools.d.ts.map +1 -0
  13. package/dist/commands/tools.js +633 -0
  14. package/dist/commands/tools.js.map +1 -0
  15. package/dist/engine/check-bash.d.ts +121 -0
  16. package/dist/engine/check-bash.d.ts.map +1 -0
  17. package/dist/engine/check-bash.js +373 -0
  18. package/dist/engine/check-bash.js.map +1 -0
  19. package/dist/engine/check.d.ts +47 -0
  20. package/dist/engine/check.d.ts.map +1 -0
  21. package/dist/engine/check.js +298 -0
  22. package/dist/engine/check.js.map +1 -0
  23. package/dist/engine/core.d.ts +153 -0
  24. package/dist/engine/core.d.ts.map +1 -0
  25. package/dist/engine/core.js +1984 -0
  26. package/dist/engine/core.js.map +1 -0
  27. package/dist/engine/lock.d.ts +27 -0
  28. package/dist/engine/lock.d.ts.map +1 -0
  29. package/dist/engine/lock.js +121 -0
  30. package/dist/engine/lock.js.map +1 -0
  31. package/dist/engine/runner.d.ts +108 -0
  32. package/dist/engine/runner.d.ts.map +1 -0
  33. package/dist/engine/runner.js +510 -0
  34. package/dist/engine/runner.js.map +1 -0
  35. package/dist/engine/skills.d.ts +53 -0
  36. package/dist/engine/skills.d.ts.map +1 -0
  37. package/dist/engine/skills.js +109 -0
  38. package/dist/engine/skills.js.map +1 -0
  39. package/dist/engine/step-tools.d.ts +22 -0
  40. package/dist/engine/step-tools.d.ts.map +1 -0
  41. package/dist/engine/step-tools.js +45 -0
  42. package/dist/engine/step-tools.js.map +1 -0
  43. package/dist/engine/types.d.ts +136 -0
  44. package/dist/engine/types.d.ts.map +1 -0
  45. package/dist/engine/types.js +20 -0
  46. package/dist/engine/types.js.map +1 -0
  47. package/dist/headless.d.ts +57 -0
  48. package/dist/headless.d.ts.map +1 -0
  49. package/dist/headless.js +318 -0
  50. package/dist/headless.js.map +1 -0
  51. package/dist/pi/adapter.d.ts +135 -0
  52. package/dist/pi/adapter.d.ts.map +1 -0
  53. package/dist/pi/adapter.js +231 -0
  54. package/dist/pi/adapter.js.map +1 -0
  55. package/dist/pi/interactive.d.ts +28 -0
  56. package/dist/pi/interactive.d.ts.map +1 -0
  57. package/dist/pi/interactive.js +58 -0
  58. package/dist/pi/interactive.js.map +1 -0
  59. package/dist/pi/tui.d.ts +12 -0
  60. package/dist/pi/tui.d.ts.map +1 -0
  61. package/dist/pi/tui.js +12 -0
  62. package/dist/pi/tui.js.map +1 -0
  63. package/dist/tui/app.d.ts +25 -0
  64. package/dist/tui/app.d.ts.map +1 -0
  65. package/dist/tui/app.js +47 -0
  66. package/dist/tui/app.js.map +1 -0
  67. package/dist/tui/embed.d.ts +42 -0
  68. package/dist/tui/embed.d.ts.map +1 -0
  69. package/dist/tui/embed.js +38 -0
  70. package/dist/tui/embed.js.map +1 -0
  71. package/dist/tui/extension.d.ts +88 -0
  72. package/dist/tui/extension.d.ts.map +1 -0
  73. package/dist/tui/extension.js +114 -0
  74. package/dist/tui/extension.js.map +1 -0
  75. package/dist/tui/history-editor.d.ts +38 -0
  76. package/dist/tui/history-editor.d.ts.map +1 -0
  77. package/dist/tui/history-editor.js +55 -0
  78. package/dist/tui/history-editor.js.map +1 -0
  79. package/dist/tui/launcher.d.ts +24 -0
  80. package/dist/tui/launcher.d.ts.map +1 -0
  81. package/dist/tui/launcher.js +97 -0
  82. package/dist/tui/launcher.js.map +1 -0
  83. package/dist/tui/render.d.ts +87 -0
  84. package/dist/tui/render.d.ts.map +1 -0
  85. package/dist/tui/render.js +266 -0
  86. package/dist/tui/render.js.map +1 -0
  87. package/dist/tui/run-app.d.ts +49 -0
  88. package/dist/tui/run-app.d.ts.map +1 -0
  89. package/dist/tui/run-app.js +317 -0
  90. package/dist/tui/run-app.js.map +1 -0
  91. package/dist/tui/run-model.d.ts +162 -0
  92. package/dist/tui/run-model.d.ts.map +1 -0
  93. package/dist/tui/run-model.js +280 -0
  94. package/dist/tui/run-model.js.map +1 -0
  95. package/dist/tui/run-view.d.ts +71 -0
  96. package/dist/tui/run-view.d.ts.map +1 -0
  97. package/dist/tui/run-view.js +167 -0
  98. package/dist/tui/run-view.js.map +1 -0
  99. package/dist/tui/welcome-header.d.ts +40 -0
  100. package/dist/tui/welcome-header.d.ts.map +1 -0
  101. package/dist/tui/welcome-header.js +90 -0
  102. package/dist/tui/welcome-header.js.map +1 -0
  103. package/package.json +55 -0
  104. package/skills/c-to-rust-audit/SKILL.md +67 -0
  105. package/skills/c-to-rust-implement/SKILL.md +151 -0
  106. package/skills/c-to-rust-implement/references/c-to-rust-patterns.md +86 -0
  107. package/skills/c-to-rust-implement/references/conditional-compilation.md +47 -0
  108. package/skills/c-to-rust-implement/references/crate-reference.md +15 -0
  109. package/skills/c-to-rust-implement/references/error-strategies.md +80 -0
  110. package/skills/c-to-rust-implement/references/inline-asm.md +37 -0
  111. package/skills/c-to-rust-plan/SKILL.md +166 -0
  112. package/skills/c-to-rust-plan/references/detection-commands.md +66 -0
  113. package/skills/c-to-rust-test-gen/SKILL.md +130 -0
  114. package/skills/c-to-rust-test-gen/references/proptest-patterns.md +81 -0
  115. package/skills/c-to-rust-test-gen/references/test-porting.md +56 -0
  116. package/skills/c-to-rust-validate/SKILL.md +121 -0
  117. package/skills/everything2rust-audit/SKILL.md +69 -0
  118. package/skills/everything2rust-design/SKILL.md +121 -0
  119. package/skills/everything2rust-design/references/domain-playbooks.md +68 -0
  120. package/skills/everything2rust-design/references/paradigm-map.md +99 -0
  121. package/skills/everything2rust-implement/SKILL.md +101 -0
  122. package/skills/everything2rust-spec/SKILL.md +86 -0
  123. package/skills/everything2rust-spec/references/oracle-strategies.md +96 -0
  124. package/skills/everything2rust-survey/SKILL.md +99 -0
  125. package/skills/everything2rust-test-gen/SKILL.md +68 -0
  126. package/skills/everything2rust-test-gen/references/harness-patterns.md +186 -0
  127. package/skills/everything2rust-validate/SKILL.md +85 -0
  128. package/workflows/c-to-rust.yaml +202 -0
  129. package/workflows/everything2rust.yaml +259 -0
  130. package/workflows/loop.yaml +68 -0
  131. package/workflows/spec.yaml +183 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * The verifier's only shell access: a whitelist-checked bash tool.
3
+ *
4
+ * Why this file exists at all: both plugin versions delegated the read-only
5
+ * guarantee to their host (opencode's agent permission map, Claude's
6
+ * `--allowedTools`). ralph-flow-pi has no host to delegate to, so it enforces
7
+ * the same allow-list itself, right before spawning.
8
+ *
9
+ * The allow-list (RALPH_CHECK_BASH_PERMISSION in core.ts) is a verbatim port.
10
+ * The ENFORCEMENT is deliberately stricter than either plugin, because here we
11
+ * own the executor and a glob match against the whole command string is not a
12
+ * safe primitive:
13
+ *
14
+ * "cat x && rm -rf y" → the plugins glob-match "cat *" and allow the whole
15
+ * string, rm included. We split on &&/||/;/| and check
16
+ * every segment.
17
+ * "cat $(rm -rf /)" → command substitution smuggles anything past any
18
+ * pattern. We reject $(), ``, and <() outright.
19
+ * "cat x > important" → redirection mutates without a mutating command name.
20
+ * We reject >, >>, and their fd forms.
21
+ * "sed -i 's/a/b/' f" → `sed *` is allow-listed in both plugins, but -i
22
+ * rewrites the file in place. Special-cased deny.
23
+ * "awk '{print >"f"}'" → awk and sed both have file-write syntax INSIDE
24
+ * "sed 's/a/b/w f' x" their own script argument. That script is a single
25
+ * quoted shell token, so the shell-level `>` scan
26
+ * above never sees it (worse: it strips the whole
27
+ * quoted span before scanning, precisely so a
28
+ * literal `>` inside a grep pattern isn't misread
29
+ * as a redirect — the same stripping hides a real
30
+ * awk/sed write just as well). Special-cased deny,
31
+ * found and closed after this file had already
32
+ * shipped claiming it was "residual, same as
33
+ * upstream" — it wasn't actually mitigated, only
34
+ * documented as if it were. See check-bash.test.ts.
35
+ *
36
+ * `xargs rm` and `find -delete`/`-exec` are the other two allow-listed-name-
37
+ * but-destructive-payload cases; both are special-cased below. Beyond these,
38
+ * the residual risk is smaller and harder to enumerate (a read-only command
39
+ * with an as-yet-unnoticed side-effecting flag) — which is why the verifier
40
+ * also runs with no edit or write tool at all, as defense in depth rather than
41
+ * relying on this file being exhaustive.
42
+ *
43
+ * A DIFFERENT, non-fixable category: `cargo test`/`npm test`/`pytest`/`go
44
+ * test` are allow-listed by name, but once permitted they execute the
45
+ * project's own test code, build scripts, and proc macros — with the full
46
+ * privileges of this process (network, filesystem writes anywhere the OS user
47
+ * can write, env reads). None of that is visible to or governed by this
48
+ * whitelist; it operates purely on the shell command's syntax, never on what
49
+ * the invoked program does once it starts running. This isn't an oversight to
50
+ * patch — verifying "tests pass" has no meaning without actually running
51
+ * them, so the trust boundary here is identical to running the repo's test
52
+ * suite locally. Don't try to "fix" this file to close it; if that trust
53
+ * boundary is ever wrong for a given use case, the answer is running ralphflow
54
+ * itself inside a container, not tightening this whitelist further.
55
+ */
56
+ import type { PermissionAction } from "./types.js";
57
+ export declare const CHECK_BASH_TIMEOUT_MS = 120000;
58
+ export interface CheckBashDecision {
59
+ allowed: boolean;
60
+ /** The segment that caused a denial, for the message shown to the model. */
61
+ offendingSegment?: string;
62
+ reason?: string;
63
+ }
64
+ export interface ExtraBashValidation {
65
+ /** Accepted patterns, ready to merge into resolveAction's table as "allow". */
66
+ allowed: Record<string, PermissionAction>;
67
+ /** Patterns refused, with why — surfaced by `ralphflow doctor`. */
68
+ rejected: Array<{
69
+ pattern: string;
70
+ reason: string;
71
+ }>;
72
+ }
73
+ /**
74
+ * Filter a workflow's `extra_allowed_bash` patterns against NEVER_EXTRA_ALLOWED
75
+ * and basic sanity (must start with a concrete literal, not immediately a
76
+ * wildcard — a bare "*" or "* rm -rf /" pattern would otherwise reopen
77
+ * everything by overriding the table's own `"*": "deny"` fallback).
78
+ */
79
+ export declare function validateExtraAllowedBash(patterns: string[] | undefined): ExtraBashValidation;
80
+ /**
81
+ * Resolve one command segment against the table. Most-specific match wins:
82
+ * the longest pattern (ignoring wildcards) that matches decides, so `cargo fmt
83
+ * --check*` beats a hypothetical `cargo *`, and the `"*": "deny"` fallback only
84
+ * applies when nothing else matches.
85
+ */
86
+ export declare function resolveAction(command: string, extra?: Record<string, PermissionAction>): PermissionAction;
87
+ /**
88
+ * Split a command line into the segments that each need to pass the allow-list.
89
+ * Separators: && || ; | & and newlines. Quoted spans are respected so a
90
+ * separator inside a string literal doesn't create a phantom segment.
91
+ *
92
+ * Two `&` forms are NOT separators and must stay inside their segment:
93
+ * `2>&1` (fd dup) — splitting it would strand a bare "2>" that then looks
94
+ * like a write redirection and denies a legal command.
95
+ * `&>file` — bash's redirect-both shorthand; kept whole so the
96
+ * redirection check sees and denies it.
97
+ */
98
+ export declare function splitSegments(command: string): string[];
99
+ /**
100
+ * Decide whether the verifier may run this command line.
101
+ *
102
+ * `extraAllowedBash` is a workflow's own `adversarial_check.extra_allowed_bash`
103
+ * (raw, unvalidated strings straight from YAML) — always re-validated here via
104
+ * validateExtraAllowedBash rather than trusting a pre-built table, so there is
105
+ * exactly one path into resolveAction's extra table and no way for a future
106
+ * caller to skip the NEVER_EXTRA_ALLOWED filter by constructing one by hand.
107
+ * Every guard below (substitution, write redirection, mutating flags,
108
+ * script-embedded writes) runs BEFORE resolveAction and applies identically
109
+ * regardless of which table allowed the base command — an extra-allowed
110
+ * `./scripts/check.sh` is exactly as constrained by those guards as a
111
+ * built-in `npm test`.
112
+ */
113
+ export declare function checkCommand(command: string, extraAllowedBash?: string[]): CheckBashDecision;
114
+ export interface CheckBashRunResult {
115
+ output: string;
116
+ exitCode: number | null;
117
+ timedOut: boolean;
118
+ }
119
+ /** Run an already-approved command. Never call without checkCommand passing. */
120
+ export declare function runApprovedCommand(command: string, cwd: string, signal?: AbortSignal): Promise<CheckBashRunResult>;
121
+ //# sourceMappingURL=check-bash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-bash.d.ts","sourceRoot":"","sources":["../../src/engine/check-bash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAG7C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA2CD,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,mEAAmE;IACnE,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,mBAAmB,CAmB5F;AAYD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,gBAAgB,CAUzG;AAqBD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBvD;AAsDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAmC5F;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoClH"}
@@ -0,0 +1,373 @@
1
+ /**
2
+ * The verifier's only shell access: a whitelist-checked bash tool.
3
+ *
4
+ * Why this file exists at all: both plugin versions delegated the read-only
5
+ * guarantee to their host (opencode's agent permission map, Claude's
6
+ * `--allowedTools`). ralph-flow-pi has no host to delegate to, so it enforces
7
+ * the same allow-list itself, right before spawning.
8
+ *
9
+ * The allow-list (RALPH_CHECK_BASH_PERMISSION in core.ts) is a verbatim port.
10
+ * The ENFORCEMENT is deliberately stricter than either plugin, because here we
11
+ * own the executor and a glob match against the whole command string is not a
12
+ * safe primitive:
13
+ *
14
+ * "cat x && rm -rf y" → the plugins glob-match "cat *" and allow the whole
15
+ * string, rm included. We split on &&/||/;/| and check
16
+ * every segment.
17
+ * "cat $(rm -rf /)" → command substitution smuggles anything past any
18
+ * pattern. We reject $(), ``, and <() outright.
19
+ * "cat x > important" → redirection mutates without a mutating command name.
20
+ * We reject >, >>, and their fd forms.
21
+ * "sed -i 's/a/b/' f" → `sed *` is allow-listed in both plugins, but -i
22
+ * rewrites the file in place. Special-cased deny.
23
+ * "awk '{print >"f"}'" → awk and sed both have file-write syntax INSIDE
24
+ * "sed 's/a/b/w f' x" their own script argument. That script is a single
25
+ * quoted shell token, so the shell-level `>` scan
26
+ * above never sees it (worse: it strips the whole
27
+ * quoted span before scanning, precisely so a
28
+ * literal `>` inside a grep pattern isn't misread
29
+ * as a redirect — the same stripping hides a real
30
+ * awk/sed write just as well). Special-cased deny,
31
+ * found and closed after this file had already
32
+ * shipped claiming it was "residual, same as
33
+ * upstream" — it wasn't actually mitigated, only
34
+ * documented as if it were. See check-bash.test.ts.
35
+ *
36
+ * `xargs rm` and `find -delete`/`-exec` are the other two allow-listed-name-
37
+ * but-destructive-payload cases; both are special-cased below. Beyond these,
38
+ * the residual risk is smaller and harder to enumerate (a read-only command
39
+ * with an as-yet-unnoticed side-effecting flag) — which is why the verifier
40
+ * also runs with no edit or write tool at all, as defense in depth rather than
41
+ * relying on this file being exhaustive.
42
+ *
43
+ * A DIFFERENT, non-fixable category: `cargo test`/`npm test`/`pytest`/`go
44
+ * test` are allow-listed by name, but once permitted they execute the
45
+ * project's own test code, build scripts, and proc macros — with the full
46
+ * privileges of this process (network, filesystem writes anywhere the OS user
47
+ * can write, env reads). None of that is visible to or governed by this
48
+ * whitelist; it operates purely on the shell command's syntax, never on what
49
+ * the invoked program does once it starts running. This isn't an oversight to
50
+ * patch — verifying "tests pass" has no meaning without actually running
51
+ * them, so the trust boundary here is identical to running the repo's test
52
+ * suite locally. Don't try to "fix" this file to close it; if that trust
53
+ * boundary is ever wrong for a given use case, the answer is running ralphflow
54
+ * itself inside a container, not tightening this whitelist further.
55
+ */
56
+ import { spawn } from "child_process";
57
+ import { RALPH_CHECK_BASH_PERMISSION } from "./core.js";
58
+ export const CHECK_BASH_TIMEOUT_MS = 120_000;
59
+ const MAX_OUTPUT_BYTES = 30_000;
60
+ /**
61
+ * Base commands `adversarial_check.extra_allowed_bash` (a workflow's own
62
+ * whitelist additions — see types.ts) can NEVER open, no matter what pattern
63
+ * a workflow YAML asks for. The built-in table above is reviewed and pinned
64
+ * in this repo; a workflow's extra_allowed_bash isn't — it can arrive in a
65
+ * copied/shared YAML file, or be generated by a model designing a workflow
66
+ * via /ralphflow-create, neither of which should be able to reopen `rm`, a
67
+ * shell, an interpreter, or credentialed network access just by asking.
68
+ * Package managers and git are banned too even though some of their
69
+ * subcommands ARE already allow-listed above (`cargo test`, `git diff`, …) —
70
+ * that curation is deliberate per-subcommand and extra_allowed_bash is not a
71
+ * back door around it; a workflow that needs one more specific safe
72
+ * subcommand should get it added to the built-in table instead.
73
+ * Enforced here, at the runtime decision point in resolveAction — not only
74
+ * as a doctor warning, since doctor is advisory and can be skipped.
75
+ */
76
+ const NEVER_EXTRA_ALLOWED = new Set([
77
+ // Destructive/mutating file ops.
78
+ "rm", "rmdir", "mv", "cp", "ln", "dd", "shred", "truncate", "mkfifo", "mknod",
79
+ // System / process control.
80
+ "shutdown", "reboot", "halt", "poweroff", "kill", "killall", "pkill",
81
+ "systemctl", "service", "crontab", "at", "batch", "chmod", "chown", "chgrp",
82
+ // Network / remote exec — includes the "curl -o file" / "wget -O file"
83
+ // script-embedded-write pattern (see findScriptEmbeddedWrite's awk/sed
84
+ // comment for why a command's OWN write flags are invisible to the
85
+ // shell-level redirection scan).
86
+ "curl", "wget", "ssh", "scp", "sftp", "rsync", "nc", "ncat", "netcat", "telnet", "ftp",
87
+ // Shells / interpreters / eval — the same "smuggle anything past the
88
+ // whitelist" problem $() and `` are banned outright for, just spelled as
89
+ // a command name instead of shell syntax.
90
+ "sh", "bash", "zsh", "ksh", "dash", "fish", "csh", "tcsh", "eval", "exec", "source",
91
+ "python", "python2", "python3", "node", "nodejs", "deno", "bun", "ruby", "perl", "php", "lua", "tclsh",
92
+ // Privilege escalation.
93
+ "sudo", "su", "doas", "env",
94
+ // Containers / orchestration.
95
+ "docker", "podman", "kubectl", "helm",
96
+ // Ecosystem tools already curated per-subcommand in the built-in table —
97
+ // extra_allowed_bash must not widen them.
98
+ "git", "npm", "yarn", "pnpm", "npx", "pip", "pip3", "cargo", "go", "gem", "bundle", "composer", "mvn", "gradle",
99
+ ]);
100
+ /**
101
+ * Filter a workflow's `extra_allowed_bash` patterns against NEVER_EXTRA_ALLOWED
102
+ * and basic sanity (must start with a concrete literal, not immediately a
103
+ * wildcard — a bare "*" or "* rm -rf /" pattern would otherwise reopen
104
+ * everything by overriding the table's own `"*": "deny"` fallback).
105
+ */
106
+ export function validateExtraAllowedBash(patterns) {
107
+ const allowed = {};
108
+ const rejected = [];
109
+ for (const raw of patterns ?? []) {
110
+ const pattern = String(raw ?? "").trim();
111
+ if (!pattern)
112
+ continue;
113
+ const literalHead = pattern.split("*")[0].trim();
114
+ if (!literalHead) {
115
+ rejected.push({ pattern, reason: "过于宽泛:必须以具体命令名开头,不能以通配符开头" });
116
+ continue;
117
+ }
118
+ const base = literalHead.split(/\s+/)[0].replace(/^\.\//, "").split("/").pop()?.toLowerCase() ?? "";
119
+ if (NEVER_EXTRA_ALLOWED.has(base)) {
120
+ rejected.push({ pattern, reason: `"${base}" 是内置永久拒绝的命令名,写在 extra_allowed_bash 里也不会生效` });
121
+ continue;
122
+ }
123
+ allowed[pattern] = "allow";
124
+ }
125
+ return { allowed, rejected };
126
+ }
127
+ /**
128
+ * Glob match in the shape the permission table uses: `*` matches any run of
129
+ * characters. Ported from the semantics of opencode's permission matcher —
130
+ * patterns are anchored at both ends.
131
+ */
132
+ function globMatches(pattern, command) {
133
+ const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
134
+ return new RegExp(`^${escaped}$`, "s").test(command);
135
+ }
136
+ /**
137
+ * Resolve one command segment against the table. Most-specific match wins:
138
+ * the longest pattern (ignoring wildcards) that matches decides, so `cargo fmt
139
+ * --check*` beats a hypothetical `cargo *`, and the `"*": "deny"` fallback only
140
+ * applies when nothing else matches.
141
+ */
142
+ export function resolveAction(command, extra) {
143
+ const cmd = command.trim();
144
+ let best = null;
145
+ const table = extra ? { ...RALPH_CHECK_BASH_PERMISSION, ...extra } : RALPH_CHECK_BASH_PERMISSION;
146
+ for (const [pattern, action] of Object.entries(table)) {
147
+ if (!globMatches(pattern, cmd))
148
+ continue;
149
+ const specificity = pattern.replace(/\*/g, "").length;
150
+ if (!best || specificity > best.specificity)
151
+ best = { action, specificity };
152
+ }
153
+ return best ? best.action : "deny";
154
+ }
155
+ /** Shell metacharacters that can smuggle a command past any name-based check. */
156
+ const SUBSTITUTION_PATTERNS = [
157
+ { re: /\$\(/, what: "命令替换 $(...)" },
158
+ { re: /`/, what: "反引号命令替换" },
159
+ { re: /<\(/, what: "进程替换 <(...)" },
160
+ { re: />\(/, what: "进程替换 >(...)" },
161
+ ];
162
+ /** Redirection that writes. `2>&1` and `<` (read) are fine; `>`/`>>` are not. */
163
+ function findWriteRedirection(segment) {
164
+ // Strip quoted spans first so a literal ">" inside a grep pattern is not a
165
+ // redirection (e.g. grep -n "a > b" file).
166
+ const unquoted = segment.replace(/'[^']*'/g, "''").replace(/"[^"]*"/g, '""');
167
+ // >&N / N>&N is an fd dup (2>&1), not a file write — allow it.
168
+ const withoutFdDup = unquoted.replace(/\d*>&\d+/g, "");
169
+ const m = withoutFdDup.match(/\d*>>?/);
170
+ return m ? m[0] : null;
171
+ }
172
+ /**
173
+ * Split a command line into the segments that each need to pass the allow-list.
174
+ * Separators: && || ; | & and newlines. Quoted spans are respected so a
175
+ * separator inside a string literal doesn't create a phantom segment.
176
+ *
177
+ * Two `&` forms are NOT separators and must stay inside their segment:
178
+ * `2>&1` (fd dup) — splitting it would strand a bare "2>" that then looks
179
+ * like a write redirection and denies a legal command.
180
+ * `&>file` — bash's redirect-both shorthand; kept whole so the
181
+ * redirection check sees and denies it.
182
+ */
183
+ export function splitSegments(command) {
184
+ const segments = [];
185
+ let current = "";
186
+ let quote = null;
187
+ for (let i = 0; i < command.length; i++) {
188
+ const c = command[i];
189
+ const next = command[i + 1];
190
+ const prev = command[i - 1];
191
+ if (quote) {
192
+ current += c;
193
+ if (c === quote && command[i - 1] !== "\\")
194
+ quote = null;
195
+ continue;
196
+ }
197
+ if (c === '"' || c === "'") {
198
+ quote = c;
199
+ current += c;
200
+ continue;
201
+ }
202
+ if (c === "\n") {
203
+ segments.push(current);
204
+ current = "";
205
+ continue;
206
+ }
207
+ if (c === ";") {
208
+ segments.push(current);
209
+ current = "";
210
+ continue;
211
+ }
212
+ if (c === "&" && (prev === ">" || next === ">")) {
213
+ current += c;
214
+ continue;
215
+ } // 2>&1 / &>file
216
+ if ((c === "&" || c === "|") && next === c) {
217
+ segments.push(current);
218
+ current = "";
219
+ i++;
220
+ continue;
221
+ }
222
+ if (c === "|" || c === "&") {
223
+ segments.push(current);
224
+ current = "";
225
+ continue;
226
+ }
227
+ current += c;
228
+ }
229
+ segments.push(current);
230
+ return segments.map((s) => s.trim()).filter(Boolean);
231
+ }
232
+ /** Commands that are allow-listed by name but have a mutating flag. */
233
+ function findMutatingFlag(segment) {
234
+ const s = segment.trim();
235
+ // `sed -i` / `sed --in-place` rewrite files in place. Both plugins allow bare
236
+ // `sed *`; we carve this out (recorded as an intentional divergence in SYNC.md).
237
+ if (/^sed\b/.test(s) && /(^|\s)(-i\b|--in-place\b|-[a-zA-Z]*i[a-zA-Z]*\b(?!\S))/.test(s))
238
+ return "sed -i(原地改写文件)";
239
+ // `find -delete` / `-exec rm` mutate despite `find *` being allow-listed.
240
+ if (/^find\b/.test(s) && /(^|\s)-delete\b/.test(s))
241
+ return "find -delete";
242
+ if (/^find\b/.test(s) && /(^|\s)-(exec|execdir|ok|okdir)\b/.test(s))
243
+ return "find -exec(可执行任意命令)";
244
+ // `xargs rm`-style: the payload command must itself be allow-listed.
245
+ if (/^xargs\b/.test(s)) {
246
+ const payload = s.replace(/^xargs\s+(-[^\s]+\s+)*/, "").trim();
247
+ if (payload && resolveAction(payload) !== "allow")
248
+ return `xargs 的目标命令「${payload}」不在只读白名单内`;
249
+ }
250
+ return null;
251
+ }
252
+ /**
253
+ * awk and sed both have their OWN write syntax inside their script argument —
254
+ * `awk 'BEGIN{print "x" > "file"}'` and `sed 's/a/b/w file'` — which never
255
+ * reaches the shell as a redirection token, so findWriteRedirection's
256
+ * shell-level `>` scan (which deliberately strips quoted spans so a literal
257
+ * `>` inside a grep pattern isn't misread as a redirect) cannot see it: from
258
+ * the shell's point of view the whole script is just one quoted string
259
+ * argument. Both commands are allow-listed for their genuinely common
260
+ * read-only uses (`awk '{print $1}'`, `sed -n '1,10p'`), so the fix has to
261
+ * look inside the script rather than deny the command outright.
262
+ *
263
+ * Conservative on purpose: this also denies awk's legitimate numeric `>`
264
+ * comparisons (e.g. `awk '$3 > 100'`) and any sed script containing a bare
265
+ * `w` token, which is a real false-positive cost. For a verifier whose entire
266
+ * point is "cannot mutate the workspace it is judging," failing closed on an
267
+ * ambiguous case is the correct tradeoff — same posture as the blanket
268
+ * `sed -i` denial just above, which doesn't try to prove `-i` is destructive
269
+ * either.
270
+ */
271
+ function findScriptEmbeddedWrite(segment) {
272
+ const s = segment.trim();
273
+ if (/^(g|n|m)?awk\b/.test(s) && />/.test(s)) {
274
+ return "awk 脚本内包含 `>`:可能是 print/printf 的输出重定向,awk 能借此写文件";
275
+ }
276
+ // Requires real whitespace between `w` and its filename (sed's actual
277
+ // syntax) so a word ending in "w" followed by more text ("below file.txt")
278
+ // doesn't false-positive; only excludes a LETTER immediately before `w`
279
+ // (not a digit), because the address form (`5w file`, `1,5w file`) has a
280
+ // number directly abutting `w` with no separator at all.
281
+ if (/^g?sed\b/.test(s) && /(^|[^A-Za-z])w\s+\S/.test(s.replace(/^g?sed\b/, ""))) {
282
+ return "sed 脚本内包含 `w` 写命令:sed 能借此把匹配行写入文件";
283
+ }
284
+ return null;
285
+ }
286
+ /**
287
+ * Decide whether the verifier may run this command line.
288
+ *
289
+ * `extraAllowedBash` is a workflow's own `adversarial_check.extra_allowed_bash`
290
+ * (raw, unvalidated strings straight from YAML) — always re-validated here via
291
+ * validateExtraAllowedBash rather than trusting a pre-built table, so there is
292
+ * exactly one path into resolveAction's extra table and no way for a future
293
+ * caller to skip the NEVER_EXTRA_ALLOWED filter by constructing one by hand.
294
+ * Every guard below (substitution, write redirection, mutating flags,
295
+ * script-embedded writes) runs BEFORE resolveAction and applies identically
296
+ * regardless of which table allowed the base command — an extra-allowed
297
+ * `./scripts/check.sh` is exactly as constrained by those guards as a
298
+ * built-in `npm test`.
299
+ */
300
+ export function checkCommand(command, extraAllowedBash) {
301
+ const raw = String(command ?? "").trim();
302
+ if (!raw)
303
+ return { allowed: false, reason: "命令为空" };
304
+ for (const { re, what } of SUBSTITUTION_PATTERNS) {
305
+ if (re.test(raw)) {
306
+ return { allowed: false, reason: `禁止${what}:它可以绕过只读白名单执行任意命令` };
307
+ }
308
+ }
309
+ const segments = splitSegments(raw);
310
+ if (segments.length === 0)
311
+ return { allowed: false, reason: "命令为空" };
312
+ const extra = extraAllowedBash && extraAllowedBash.length > 0
313
+ ? validateExtraAllowedBash(extraAllowedBash).allowed
314
+ : undefined;
315
+ for (const segment of segments) {
316
+ const redirection = findWriteRedirection(segment);
317
+ if (redirection) {
318
+ return { allowed: false, offendingSegment: segment, reason: `禁止写重定向 \`${redirection}\`:验证者不能修改它正在评判的工作区` };
319
+ }
320
+ const mutating = findMutatingFlag(segment);
321
+ if (mutating) {
322
+ return { allowed: false, offendingSegment: segment, reason: `禁止 ${mutating}` };
323
+ }
324
+ const scriptWrite = findScriptEmbeddedWrite(segment);
325
+ if (scriptWrite) {
326
+ return { allowed: false, offendingSegment: segment, reason: `禁止 ${scriptWrite}` };
327
+ }
328
+ if (resolveAction(segment, extra) !== "allow") {
329
+ return { allowed: false, offendingSegment: segment, reason: `命令不在只读白名单内` };
330
+ }
331
+ }
332
+ return { allowed: true };
333
+ }
334
+ /** Run an already-approved command. Never call without checkCommand passing. */
335
+ export function runApprovedCommand(command, cwd, signal) {
336
+ return new Promise((resolve) => {
337
+ const child = spawn(command, { cwd, shell: true, signal });
338
+ let out = "";
339
+ let truncated = false;
340
+ let timedOut = false;
341
+ const append = (chunk) => {
342
+ if (truncated)
343
+ return;
344
+ out += chunk.toString("utf-8");
345
+ if (out.length > MAX_OUTPUT_BYTES) {
346
+ out = out.slice(0, MAX_OUTPUT_BYTES) + `\n…(输出超过 ${MAX_OUTPUT_BYTES} 字节,已截断)`;
347
+ truncated = true;
348
+ }
349
+ };
350
+ child.stdout?.on("data", append);
351
+ child.stderr?.on("data", append);
352
+ const timer = setTimeout(() => {
353
+ timedOut = true;
354
+ try {
355
+ child.kill("SIGKILL");
356
+ }
357
+ catch { }
358
+ }, CHECK_BASH_TIMEOUT_MS);
359
+ child.on("error", (e) => {
360
+ clearTimeout(timer);
361
+ resolve({ output: out + `\n命令执行失败:${e.message}`, exitCode: null, timedOut });
362
+ });
363
+ child.on("close", (code) => {
364
+ clearTimeout(timer);
365
+ resolve({
366
+ output: timedOut ? out + `\n命令超时(>${CHECK_BASH_TIMEOUT_MS / 1000}s),已终止` : out,
367
+ exitCode: code,
368
+ timedOut,
369
+ });
370
+ });
371
+ });
372
+ }
373
+ //# sourceMappingURL=check-bash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-bash.js","sourceRoot":"","sources":["../../src/engine/check-bash.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Adversarial Check (Independent Verification) — Pi adapter.
3
+ *
4
+ * Mirrors the contract of both plugin versions' adversarialCheck: same inputs,
5
+ * same `{ passed, infra?, reason }` result, same infra-vs-work-failure
6
+ * classification (an infra result pauses with check_error and does NOT burn a
7
+ * failure count, so `ralphflow_continue` re-verifies for free).
8
+ *
9
+ * The execution vehicle is what differs. The Claude version spawned
10
+ * `claude -p --allowedTools "…"`; the opencode version opened an SDK session
11
+ * with the read-only `ralph-check` agent. Here the verifier is a fresh Pi
12
+ * session that is read-only *structurally*: it gets Pi's read-only built-ins
13
+ * (read/grep/find/ls — no bash, no edit, no write) plus exactly two custom
14
+ * tools, `check_bash` (whitelist-enforced) and `verdict`. There is no host
15
+ * permission layer to misconfigure, and no prompt asking the model to please
16
+ * not write.
17
+ *
18
+ * The verdict likewise moved from prose to a tool call: the plugins parsed
19
+ * `<promise-check>true</promise-check>` off the last line, which meant a model
20
+ * that reasoned past its own tag, or fenced it, silently read as "false".
21
+ *
22
+ * Cancellation: the check session's JSONL path is written to the instance dir
23
+ * (.adversarial-session — counterpart of the Claude version's .adversarial-pid)
24
+ * and an abort handle is registered in-process so destroyInstance can reach it.
25
+ * A check owned by ANOTHER process cannot be reached from here; its result is
26
+ * discarded by the caller's post-check state re-read.
27
+ */
28
+ import { type Engine } from "./core.js";
29
+ import type { AdversarialCheckConfig, CheckResult, NormalStepDef } from "./types.js";
30
+ import { createCheckSession, type StepEvent } from "../pi/adapter.js";
31
+ /** Abort a still-running check for an instance (in-process only). */
32
+ export declare function abortActiveCheck(instId: string): void;
33
+ export declare function hasActiveCheck(instId: string): boolean;
34
+ /** Seam for tests: swap in a scripted session instead of a real model call. */
35
+ export type CheckSessionFactory = typeof createCheckSession;
36
+ export interface AdversarialCheckDeps {
37
+ createSession?: CheckSessionFactory;
38
+ }
39
+ /**
40
+ * Run the independent verification for a step. `checkPrompt` is built by the
41
+ * caller (with the explicit instId) and passed in, so this function needs no
42
+ * instance binding of its own.
43
+ */
44
+ export declare function adversarialCheck(engine: Engine, instId: string, step: NormalStepDef, checkPrompt: string, userTask: string | undefined, adversarialConfig?: AdversarialCheckConfig, onBashEvent?: (line: string) => void, deps?: AdversarialCheckDeps,
45
+ /** Live stream of the verifier session (reasoning / text / tool calls) for the run view. */
46
+ onEvent?: (event: StepEvent) => void): Promise<CheckResult>;
47
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/engine/check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,EAIL,KAAK,MAAM,EACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EACL,kBAAkB,EAIlB,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAC;AAS1B,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAcrD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEtD;AAoFD,+EAA+E;AAC/E,MAAM,MAAM,mBAAmB,GAAG,OAAO,kBAAkB,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,iBAAiB,CAAC,EAAE,sBAAsB,EAC1C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACpC,IAAI,CAAC,EAAE,oBAAoB;AAC3B,4FAA4F;AAC5F,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GACnC,OAAO,CAAC,WAAW,CAAC,CAwKtB"}