@sema-agent/core 7.45.0 → 7.47.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.
- package/CHANGELOG.md +298 -1
- package/dist/agents/extra-tool-names.d.ts +65 -0
- package/dist/agents/extra-tool-names.js +124 -0
- package/dist/agents/subagent.d.ts +17 -5
- package/dist/agents/subagent.js +33 -25
- package/dist/agents/tool-filter.d.ts +17 -1
- package/dist/agents/tool-filter.js +7 -0
- package/dist/core/agent-config-dir.d.ts +20 -0
- package/dist/core/agent-config-dir.js +49 -0
- package/dist/core/allow-entry.d.ts +6 -4
- package/dist/core/allow-entry.js +6 -5
- package/dist/core/ask-origin.d.ts +35 -12
- package/dist/core/ask-origin.js +24 -7
- package/dist/core/checkpoint-store.d.ts +39 -2
- package/dist/core/effective-path-target.d.ts +136 -4
- package/dist/core/effective-path-target.js +110 -2
- package/dist/core/engine-notice.d.ts +12 -4
- package/dist/core/gate-fold.js +5 -2
- package/dist/core/gate-lanes.js +11 -4
- package/dist/core/gate-outcome.d.ts +4 -2
- package/dist/core/gate-outcome.js +2 -2
- package/dist/core/governance-codes.d.ts +3 -1
- package/dist/core/governance-codes.js +3 -0
- package/dist/core/hooks.d.ts +3 -0
- package/dist/core/path-rule-binding.d.ts +65 -0
- package/dist/core/path-rule-binding.js +99 -0
- package/dist/core/permission-rule-model.d.ts +59 -24
- package/dist/core/permission-rule-model.js +48 -44
- package/dist/core/permission-rule-provider.d.ts +7 -0
- package/dist/core/permission-rule-provider.js +10 -3
- package/dist/core/permission-rule-store.d.ts +8 -0
- package/dist/core/permission-rule-store.js +6 -2
- package/dist/core/permission-rule-sync.js +2 -2
- package/dist/core/permission-rules.d.ts +26 -45
- package/dist/core/permission-rules.js +77 -57
- package/dist/core/runner/child-tree.d.ts +97 -0
- package/dist/core/runner/child-tree.js +104 -0
- package/dist/core/runner/construction-doors.d.ts +5 -0
- package/dist/core/runner/construction-doors.js +6 -0
- package/dist/core/runner/contracts.d.ts +46 -0
- package/dist/core/runner/gate-exit.d.ts +4 -1
- package/dist/core/runner/gate-exit.js +5 -1
- package/dist/core/runner/permission-rule-lanes.d.ts +34 -25
- package/dist/core/runner/permission-rule-lanes.js +18 -12
- package/dist/core/runner/persisted-path-rows.d.ts +31 -7
- package/dist/core/runner/persisted-path-rows.js +31 -12
- package/dist/core/runner/prepare-ask-lane.d.ts +4 -0
- package/dist/core/runner/prepare-ask-lane.js +4 -2
- package/dist/core/runner/prepare-execution-env.d.ts +5 -2
- package/dist/core/runner/prepare-execution-env.js +10 -3
- package/dist/core/runner/prepare-gate-stations.d.ts +3 -0
- package/dist/core/runner/prepare-gate-stations.js +2 -1
- package/dist/core/runner/prepare-hands-readface.d.ts +8 -4
- package/dist/core/runner/prepare-hands-readface.js +11 -11
- package/dist/core/runner/prepare-inherited-gate.d.ts +8 -1
- package/dist/core/runner/prepare-inherited-gate.js +8 -2
- package/dist/core/runner/prepare-park-ask.d.ts +3 -0
- package/dist/core/runner/prepare-park-ask.js +5 -3
- package/dist/core/runner/prepare-policy-chain.d.ts +14 -2
- package/dist/core/runner/prepare-policy-chain.js +13 -5
- package/dist/core/runner/prepare-suspend-saga.d.ts +10 -0
- package/dist/core/runner/prepare-suspend-saga.js +7 -1
- package/dist/core/runner/prepare-task.js +37 -18
- package/dist/core/runner/prepare-turn-wiring.d.ts +2 -0
- package/dist/core/runner/prepare-turn-wiring.js +2 -1
- package/dist/core/runner/prepare-workspace-restore.d.ts +3 -0
- package/dist/core/runner/prepare-workspace-restore.js +1 -0
- package/dist/core/runner/resume-apply.js +17 -3
- package/dist/core/runner/resume-checkpoint-screen.js +13 -0
- package/dist/core/runner/run-leg.js +5 -1
- package/dist/core/runner/runtask.js +2 -2
- package/dist/core/runner/sub-agent-deny-lists.d.ts +1 -1
- package/dist/core/runner/write-protection-station.d.ts +3 -2
- package/dist/core/runner/write-protection-station.js +1 -0
- package/dist/core/runner-deps.d.ts +14 -0
- package/dist/core/sensitive-path-policy.d.ts +8 -0
- package/dist/core/sensitive-path-policy.js +18 -2
- package/dist/core/shell-wrapper-projection.d.ts +11 -0
- package/dist/core/shell-wrapper-projection.js +56 -0
- package/dist/core/shell-wrapper-table.d.ts +144 -34
- package/dist/core/shell-wrapper-table.js +40 -20
- package/dist/core/synthetic-read-verdict.d.ts +3 -0
- package/dist/core/synthetic-read-verdict.js +3 -1
- package/dist/core/tool-catalog-entries.d.ts +21 -0
- package/dist/core/tool-catalog-entries.js +12 -2
- package/dist/core/tool-face.d.ts +10 -1
- package/dist/core/tool-name-readings.d.ts +8 -0
- package/dist/core/tool-name-readings.js +2 -0
- package/dist/core/tool-policy.d.ts +40 -17
- package/dist/core/tool-policy.js +11 -9
- package/dist/core/tool-registry.d.ts +9 -0
- package/dist/core/tool-registry.js +10 -0
- package/dist/core/tool-spec.d.ts +3 -2
- package/dist/core/write-protect.d.ts +14 -3
- package/dist/core/write-protect.js +41 -10
- package/dist/index.d.ts +6 -4
- package/dist/index.js +5 -3
- package/dist/orchestration/run-spec.js +8 -7
- package/dist/orchestration/workflow.js +1 -1
- package/dist/shell/lex.d.ts +22 -0
- package/dist/shell/lex.js +75 -13
- package/dist/tools/fs/bash-program-position.d.ts +14 -90
- package/dist/tools/fs/bash-program-position.js +41 -74
- package/dist/tools/fs/bash-readonly-classifier.d.ts +17 -444
- package/dist/tools/fs/bash-readonly-classifier.js +169 -1225
- package/dist/tools/fs/index.d.ts +3 -2
- package/dist/tools/fs/program-read-model.d.ts +711 -0
- package/dist/tools/fs/program-read-model.js +1259 -0
- package/dist/tools/fs/program-read-model.rows.d.ts +18 -0
- package/dist/tools/fs/program-read-model.rows.js +624 -0
- package/dist/tools/fs/read-deny-home.d.ts +19 -1
- package/dist/tools/fs/read-deny-home.js +62 -24
- package/dist/tools/fs/read-deny.d.ts +54 -14
- package/dist/tools/fs/read-deny.js +104 -50
- package/dist/tools/fs/removal-targets.d.ts +7 -6
- package/dist/tools/fs/removal-targets.js +34 -24
- package/dist/tools/fs/safety.d.ts +3 -0
- package/dist/tools/fs/safety.js +10 -3
- package/dist/tools/fs/shell-read-argv.d.ts +86 -0
- package/dist/tools/fs/shell-read-argv.js +388 -0
- package/dist/tools/fs/shell-read-bindings.d.ts +300 -0
- package/dist/tools/fs/shell-read-bindings.js +755 -0
- package/dist/tools/fs/shell-read-check.js +23 -15
- package/dist/tools/fs/shell-read-establish.js +82 -8
- package/dist/tools/fs/shell-read-judge.d.ts +11 -1
- package/dist/tools/fs/shell-read-judge.js +9 -1
- package/dist/tools/fs/shell-read-plan.d.ts +33 -8
- package/dist/tools/fs/shell-read-plan.js +309 -407
- package/dist/tools/fs/shell-read-word.d.ts +60 -26
- package/dist/tools/fs/shell-read-word.js +47 -37
- package/dist/tools/fs/shell-read-write-targets.d.ts +15 -64
- package/dist/tools/fs/shell-read-write-targets.js +85 -137
- package/dist/tools/fs/shell-reentry-text.d.ts +136 -6
- package/dist/tools/fs/shell-reentry-text.js +203 -53
- package/dist/tools/monitor.d.ts +3 -3
- package/package.json +1 -1
- package/test/export-surface.snapshot.json +25 -5
- package/wire-changes/core@7.46.0.json +1522 -0
- package/wire-changes/core@7.47.0.json +412 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SHELL_CONTROL_PREFIXES } from "../../shell/lex.js";
|
|
2
|
+
import { BLOCK_WORD_NAMES, LAUNCHER_NAMES, feedsArgvFromStdin, launcherOptionStep, launcherRunsShell, programRow, selectedOptions, streamDefaultProgram } from "./program-read-model.js";
|
|
2
3
|
export const NOT_AUTO_ALLOWED = "— not auto-allowed";
|
|
3
4
|
export function programBasename(word) {
|
|
4
5
|
return word.includes("/") ? (word.split("/").pop() ?? word) : word;
|
|
@@ -14,7 +15,6 @@ export function writtenAssignmentPrefix(token) {
|
|
|
14
15
|
return { prefix, name: bracket < 0 ? written : written.slice(0, bracket), appends, settlesWholeName: !appends && bracket < 0 };
|
|
15
16
|
}
|
|
16
17
|
export { SHELL_CONTROL_PREFIXES };
|
|
17
|
-
export const SHELL_BLOCK_WORDS = new Set(["for", "select", "case", "esac", "fi", "done", "function", "coproc", "[[", "]]", "in"]);
|
|
18
18
|
export function isBareControlWord(words, i, set) {
|
|
19
19
|
const w = words[i];
|
|
20
20
|
return w !== undefined && w.raw === w.folded && set.has(w.folded);
|
|
@@ -23,48 +23,19 @@ export function isLeadingAssignmentWord(words, i) {
|
|
|
23
23
|
const w = words[i];
|
|
24
24
|
return w !== undefined && w.assignment !== undefined && w.assignment.bare && w.atCommandPosition;
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
export const LAUNCHER_TABLE = new Map([
|
|
31
|
-
["env", launcherRow([["-i", 0], ["-0", 0], ["-v", 0], ["--ignore-environment", 0], ["--null", 0], ["--debug", 0], ["-u", 1], ["--unset", 1]], { assignmentOperands: true, commandString: ["-S", "--split-string"] })],
|
|
32
|
-
["command", launcherRow([["-p", 0]])],
|
|
33
|
-
["builtin", NO_DECLARED_OPTIONS], ["exec", NO_DECLARED_OPTIONS],
|
|
34
|
-
["noglob", NO_DECLARED_OPTIONS], ["xargs", NO_DECLARED_OPTIONS], ["busybox", NO_DECLARED_OPTIONS],
|
|
35
|
-
["sudo", { optionArity: new Map(), assignmentOperands: true }], ["doas", NO_DECLARED_OPTIONS], ["pkexec", { optionArity: new Map(), whenNoProgram: "shell" }],
|
|
36
|
-
["su", { optionArity: new Map(), shellText: true }], ["runuser", { optionArity: new Map(), shellText: true }],
|
|
37
|
-
["chroot", { optionArity: new Map(), requiredOperands: 1, whenNoProgram: "shell" }], ["setpriv", NO_DECLARED_OPTIONS],
|
|
38
|
-
["nohup", NO_DECLARED_OPTIONS],
|
|
39
|
-
["nice", launcherRow([["-n", 1], ["--adjustment", 1]], { negativeIntegerIsOwnArgument: true })],
|
|
40
|
-
["ionice", NO_DECLARED_OPTIONS], ["chrt", { optionArity: new Map(), requiredOperands: 1 }], ["taskset", { optionArity: new Map(), requiredOperands: 1 }],
|
|
41
|
-
["stdbuf", launcherRow([["-i", 1], ["-o", 1], ["-e", 1], ["--input", 1], ["--output", 1], ["--error", 1]])],
|
|
42
|
-
["timeout", launcherRow([
|
|
43
|
-
["--foreground", 0], ["--preserve-status", 0], ["--verbose", 0], ["-v", 0],
|
|
44
|
-
["-k", 1], ["-s", 1], ["--kill-after", 1], ["--signal", 1],
|
|
45
|
-
], { requiredOperands: 1 })],
|
|
46
|
-
["time", {
|
|
47
|
-
optionArity: new Map([
|
|
48
|
-
["-p", 0], ["-a", 0], ["-v", 0], ["-q", 0], ["--portability", 0], ["--append", 0], ["--verbose", 0], ["--quiet", 0], ["--help", 0], ["--version", 0], ["--", 0],
|
|
49
|
-
["-f", 1], ["-o", 1], ["--format", 1], ["--output", 1],
|
|
50
|
-
]),
|
|
51
|
-
}],
|
|
52
|
-
["watch", { optionArity: new Map(), shellText: true }], ["setsid", NO_DECLARED_OPTIONS], ["flock", { optionArity: new Map(), requiredOperands: 1 }], ["unshare", { optionArity: new Map(), whenNoProgram: "shell" }],
|
|
53
|
-
["nsenter", { optionArity: new Map(), whenNoProgram: "shell" }], ["script", { optionArity: new Map(), shellText: true }], ["numactl", NO_DECLARED_OPTIONS], ["prlimit", NO_DECLARED_OPTIONS],
|
|
54
|
-
["systemd-run", NO_DECLARED_OPTIONS],
|
|
55
|
-
["strace", NO_DECLARED_OPTIONS], ["ltrace", NO_DECLARED_OPTIONS], ["valgrind", NO_DECLARED_OPTIONS], ["firejail", { optionArity: new Map(), whenNoProgram: "shell" }],
|
|
56
|
-
["bwrap", NO_DECLARED_OPTIONS],
|
|
57
|
-
]);
|
|
58
|
-
export const COMMAND_LAUNCHERS = new Set(LAUNCHER_TABLE.keys());
|
|
26
|
+
function launcherRowOf(name) {
|
|
27
|
+
const row = programRow(name);
|
|
28
|
+
return row?.launcher !== undefined ? row : undefined;
|
|
29
|
+
}
|
|
59
30
|
function pastLauncherOptions(launcher, folded, i) {
|
|
60
|
-
const row =
|
|
31
|
+
const row = launcherRowOf(launcher);
|
|
61
32
|
if (row === undefined)
|
|
62
33
|
return i;
|
|
63
34
|
for (;;) {
|
|
64
35
|
const tok = folded[i];
|
|
65
36
|
if (tok === undefined)
|
|
66
37
|
return i;
|
|
67
|
-
if (row.negativeIntegerIsOwnArgument === true && /^-\d+$/.test(tok)) {
|
|
38
|
+
if (row.launcher?.negativeIntegerIsOwnArgument === true && /^-\d+$/.test(tok)) {
|
|
68
39
|
i += 1;
|
|
69
40
|
continue;
|
|
70
41
|
}
|
|
@@ -76,19 +47,6 @@ function pastLauncherOptions(launcher, folded, i) {
|
|
|
76
47
|
i += step;
|
|
77
48
|
}
|
|
78
49
|
}
|
|
79
|
-
function launcherOptionStep(row, tok) {
|
|
80
|
-
const exact = row.optionArity.get(tok);
|
|
81
|
-
if (exact !== undefined)
|
|
82
|
-
return exact === 1 ? 2 : 1;
|
|
83
|
-
const eq = tok.startsWith("--") ? tok.indexOf("=") : -1;
|
|
84
|
-
if (eq > 2 && row.optionArity.get(tok.slice(0, eq)) === 1)
|
|
85
|
-
return 1;
|
|
86
|
-
if (/^-[A-Za-z]./.test(tok) && row.optionArity.get(tok.slice(0, 2)) === 1)
|
|
87
|
-
return 1;
|
|
88
|
-
if (/^-[A-Za-z]+$/.test(tok) && [...tok.slice(1)].every((ch) => row.optionArity.get(`-${ch}`) === 0))
|
|
89
|
-
return 1;
|
|
90
|
-
return undefined;
|
|
91
|
-
}
|
|
92
50
|
export const PROGRAM_POSITION_REFUSAL_KINDS = Object.freeze(["option_at_program_position", "control_syntax_at_program_position"]);
|
|
93
51
|
export function readProgramPosition(words) {
|
|
94
52
|
const folded = words.map((w) => w.folded);
|
|
@@ -116,20 +74,25 @@ export function readProgramPosition(words) {
|
|
|
116
74
|
const owner = controlWords.length > 0 ? folded[controlWords[controlWords.length - 1]] : head;
|
|
117
75
|
return none(written, assignments, { kind: "option_at_program_position", owner, option: head });
|
|
118
76
|
}
|
|
119
|
-
if (!
|
|
77
|
+
if (!LAUNCHER_NAMES.has(basename)) {
|
|
120
78
|
return { controlWords, written, assignments, launchers: [], argvFromStdin: false, runsDefaultProgram: false, program: { index: i, name: head, basename }, refusal: undefined };
|
|
121
79
|
}
|
|
122
80
|
const launchers = [{ index: i, name: basename }];
|
|
123
81
|
const owner = head;
|
|
124
|
-
const shellRefusal = () => ({ kind: "control_syntax_at_program_position", owner, word: "sh", runsShell:
|
|
125
|
-
let
|
|
126
|
-
let
|
|
82
|
+
const shellRefusal = (launcher, from) => ({ kind: "control_syntax_at_program_position", owner, word: "sh", runsShell: { launcher, from } });
|
|
83
|
+
let lastRow = launcherRowOf(basename)?.launcher;
|
|
84
|
+
let owedOperands = lastRow?.requiredOperands ?? 0;
|
|
127
85
|
const chain0 = (program, refusal) => ({ controlWords, written, assignments, launchers, argvFromStdin: false, runsDefaultProgram: false, program, refusal });
|
|
128
|
-
if (
|
|
129
|
-
return chain0(undefined, shellRefusal());
|
|
130
|
-
let argvFromStdin =
|
|
86
|
+
if (launcherRunsShell(launcherRowOf(basename), folded.slice(i + 1)))
|
|
87
|
+
return chain0(undefined, shellRefusal(i, i + 1));
|
|
88
|
+
let argvFromStdin = feedsArgvFromStdin(basename);
|
|
131
89
|
let lastReentry = argvFromStdin ? i : -1;
|
|
132
|
-
|
|
90
|
+
let reentryDefault = argvFromStdin ? streamDefaultProgram(basename) : undefined;
|
|
91
|
+
const chain = (program, refusal) => {
|
|
92
|
+
const runsDefaultProgram = lastReentry === folded.length - 1;
|
|
93
|
+
return { controlWords, written, assignments, launchers, argvFromStdin, runsDefaultProgram, ...(runsDefaultProgram && reentryDefault !== undefined ? { defaultProgram: reentryDefault } : {}), program, refusal };
|
|
94
|
+
};
|
|
95
|
+
const selectsShell = (l, end) => selectedOptions(launcherRowOf(l.name), folded.slice(l.index + 1, end)).some((o) => o.mode === "interactive");
|
|
133
96
|
for (let j = pastLauncherOptions(basename, folded, i + 1); j < folded.length; j++) {
|
|
134
97
|
const t = folded[j];
|
|
135
98
|
if (owedOperands > 0 && !t.startsWith("-")) {
|
|
@@ -138,51 +101,55 @@ export function readProgramPosition(words) {
|
|
|
138
101
|
}
|
|
139
102
|
if (lastRow?.assignmentOperands === true && !t.startsWith("-") && t.includes("="))
|
|
140
103
|
continue;
|
|
104
|
+
if (lastRow?.shellCommand !== undefined && !t.startsWith("-") && selectsShell(launchers[launchers.length - 1], j))
|
|
105
|
+
return chain(undefined, shellRefusal(launchers[launchers.length - 1].index, j));
|
|
141
106
|
const wordBasename = programBasename(t);
|
|
142
|
-
if (
|
|
107
|
+
if (feedsArgvFromStdin(wordBasename)) {
|
|
143
108
|
argvFromStdin = true;
|
|
144
109
|
lastReentry = j;
|
|
110
|
+
reentryDefault = streamDefaultProgram(wordBasename);
|
|
145
111
|
lastRow = undefined;
|
|
146
112
|
owedOperands = 0;
|
|
147
113
|
continue;
|
|
148
114
|
}
|
|
149
|
-
if (
|
|
115
|
+
if (LAUNCHER_NAMES.has(wordBasename)) {
|
|
150
116
|
launchers.push({ index: j, name: wordBasename });
|
|
151
|
-
lastRow =
|
|
152
|
-
if (
|
|
153
|
-
return chain(undefined, shellRefusal());
|
|
117
|
+
lastRow = launcherRowOf(wordBasename)?.launcher;
|
|
118
|
+
if (launcherRunsShell(launcherRowOf(wordBasename), folded.slice(j + 1)))
|
|
119
|
+
return chain(undefined, shellRefusal(j, j + 1));
|
|
154
120
|
owedOperands = lastRow?.requiredOperands ?? 0;
|
|
155
121
|
j = pastLauncherOptions(wordBasename, folded, j + 1) - 1;
|
|
156
122
|
continue;
|
|
157
123
|
}
|
|
158
124
|
if (t.startsWith("-"))
|
|
159
125
|
return chain(undefined, { kind: "option_at_program_position", owner, option: t });
|
|
160
|
-
if (SHELL_CONTROL_PREFIXES.has(wordBasename) ||
|
|
126
|
+
if (SHELL_CONTROL_PREFIXES.has(wordBasename) || BLOCK_WORD_NAMES.has(wordBasename)) {
|
|
161
127
|
return chain(undefined, { kind: "control_syntax_at_program_position", owner, word: wordBasename });
|
|
162
128
|
}
|
|
163
129
|
return chain({ index: j, name: t, basename: wordBasename });
|
|
164
130
|
}
|
|
165
|
-
|
|
166
|
-
|
|
131
|
+
const last = launchers[launchers.length - 1];
|
|
132
|
+
if (lastRow?.whenNoProgram === "shell" || selectsShell(last, folded.length))
|
|
133
|
+
return chain(undefined, shellRefusal(last.index, folded.length));
|
|
167
134
|
return chain(undefined);
|
|
168
135
|
}
|
|
169
|
-
export function argvReentryUnjudged(pos,
|
|
136
|
+
export function argvReentryUnjudged(pos, acceptsTarget) {
|
|
170
137
|
if (!pos.argvFromStdin)
|
|
171
138
|
return false;
|
|
172
|
-
const runs = pos.program?.basename ??
|
|
173
|
-
return runs === undefined || !
|
|
139
|
+
const runs = pos.program?.basename ?? pos.defaultProgram;
|
|
140
|
+
return runs === undefined || !acceptsTarget(runs);
|
|
174
141
|
}
|
|
175
142
|
export const SHELL_SCAN_DECLINES = Object.freeze(["unreadable_program_position", "stream_fed_operands"]);
|
|
176
|
-
export function programPositionRunsShell(pos,
|
|
143
|
+
export function programPositionRunsShell(pos, runsShell) {
|
|
177
144
|
if (pos.refusal !== undefined)
|
|
178
|
-
return pos.refusal.kind === "control_syntax_at_program_position" && pos.refusal.runsShell
|
|
179
|
-
return pos.program !== undefined &&
|
|
145
|
+
return pos.refusal.kind === "control_syntax_at_program_position" && pos.refusal.runsShell !== undefined;
|
|
146
|
+
return pos.program !== undefined && runsShell(pos.program.basename);
|
|
180
147
|
}
|
|
181
|
-
export function shellScanDeclineOf(pos,
|
|
148
|
+
export function shellScanDeclineOf(pos, acceptsStreamTarget) {
|
|
182
149
|
if (pos.refusal !== undefined) {
|
|
183
|
-
return pos.refusal.kind === "control_syntax_at_program_position" && pos.refusal.runsShell
|
|
150
|
+
return pos.refusal.kind === "control_syntax_at_program_position" && pos.refusal.runsShell !== undefined ? undefined : "unreadable_program_position";
|
|
184
151
|
}
|
|
185
|
-
return argvReentryUnjudged(pos,
|
|
152
|
+
return argvReentryUnjudged(pos, acceptsStreamTarget) ? "stream_fed_operands" : undefined;
|
|
186
153
|
}
|
|
187
154
|
export function programPositionRefusalSentence(refusal) {
|
|
188
155
|
switch (refusal.kind) {
|