@sema-agent/core 7.33.8 → 7.34.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 +339 -0
- package/dist/agents/cross-session-judge.d.ts +16 -7
- package/dist/agents/cross-session-judge.js +18 -15
- package/dist/agents/peer-session-drain.d.ts +4 -0
- package/dist/agents/peer-session-drain.js +5 -2
- package/dist/agents/repair-loop.d.ts +1 -1
- package/dist/agents/subagent.d.ts +3 -0
- package/dist/agents/subagent.js +12 -3
- package/dist/brain/anthropic.js +1 -0
- package/dist/brain/open-responses.js +1 -0
- package/dist/brain/openai.js +1 -0
- package/dist/brain/stream-engine.d.ts +3 -0
- package/dist/brain/stream-engine.js +2 -1
- package/dist/core/a2a.d.ts +3 -1
- package/dist/core/a2a.js +1 -1
- package/dist/core/ask-origin.d.ts +351 -154
- package/dist/core/ask-origin.js +223 -45
- package/dist/core/ask-unresolvable-notice.d.ts +5 -2
- package/dist/core/ask-unresolvable-notice.js +4 -3
- package/dist/core/auto-mode-arming.d.ts +17 -4
- package/dist/core/auto-mode-arming.js +31 -6
- package/dist/core/auto-mode-defaults.d.ts +16 -7
- package/dist/core/auto-mode-defaults.js +2 -1
- package/dist/core/auto-mode-directive.d.ts +18 -30
- package/dist/core/auto-mode-directive.js +9 -18
- package/dist/core/auto-mode-prompt.d.ts +62 -1
- package/dist/core/auto-mode-prompt.js +42 -4
- package/dist/core/auto-mode-rebuild.d.ts +2 -1
- package/dist/core/auto-mode-rebuild.js +1 -0
- package/dist/core/auto-mode.d.ts +32 -3
- package/dist/core/auto-mode.js +80 -41
- package/dist/core/checkpoint-store.d.ts +50 -35
- package/dist/core/checkpoint-store.js +58 -3
- package/dist/core/child-clamp-seats.js +1 -0
- package/dist/core/classifier-unavailable-arm.d.ts +57 -0
- package/dist/core/classifier-unavailable-arm.js +17 -0
- package/dist/core/effective-path-target.d.ts +12 -0
- package/dist/core/effective-path-target.js +18 -7
- package/dist/core/engine-notice.d.ts +53 -2
- package/dist/core/fs-write-gate-policy.d.ts +5 -1
- package/dist/core/fs-write-gate-policy.js +4 -1
- package/dist/core/gate-fold.js +17 -1
- package/dist/core/gate-lanes.js +111 -46
- package/dist/core/gate-outcome.d.ts +40 -7
- package/dist/core/gate-outcome.js +26 -4
- package/dist/core/governance-codes.d.ts +1 -1
- package/dist/core/governance-codes.js +12 -0
- package/dist/core/hooks.d.ts +50 -29
- package/dist/core/hooks.js +1 -3
- package/dist/core/mcp.js +1 -1
- package/dist/core/mode-policy.d.ts +182 -0
- package/dist/core/mode-policy.js +179 -0
- package/dist/core/oracle-isolation.d.ts +3 -3
- package/dist/core/permission-rule-model.d.ts +16 -3
- package/dist/core/permission-rule-model.js +36 -3
- package/dist/core/permission-rule-provider.d.ts +22 -11
- package/dist/core/permission-rule-provider.js +17 -7
- package/dist/core/permission-rules.d.ts +23 -1
- package/dist/core/permission-rules.js +35 -8
- package/dist/core/persisted-rule-arms.d.ts +10 -9
- package/dist/core/persisted-rule-arms.js +9 -6
- package/dist/core/present-plan-tool.d.ts +1 -1
- package/dist/core/present-plan-tool.js +3 -3
- package/dist/core/read-only-shell.d.ts +19 -19
- package/dist/core/read-only-shell.js +38 -12
- package/dist/core/retired-keys.d.ts +9 -3
- package/dist/core/retired-keys.js +5 -1
- package/dist/core/runner/classifier-ladder.d.ts +43 -1
- package/dist/core/runner/classifier-ladder.js +29 -0
- package/dist/core/runner/contracts.d.ts +37 -35
- package/dist/core/runner/denial-limit-arms.d.ts +30 -7
- package/dist/core/runner/denial-limit-arms.js +15 -9
- package/dist/core/runner/env-capability-census.js +1 -1
- package/dist/core/runner/gate-exit.d.ts +30 -4
- package/dist/core/runner/gate-exit.js +28 -7
- package/dist/core/runner/permission-rule-lanes.d.ts +9 -5
- package/dist/core/runner/permission-rule-lanes.js +44 -40
- package/dist/core/runner/persisted-path-rows.d.ts +64 -0
- package/dist/core/runner/persisted-path-rows.js +89 -0
- package/dist/core/runner/prepare-artifact.d.ts +5 -1
- package/dist/core/runner/prepare-artifact.js +9 -3
- package/dist/core/runner/prepare-ask-lane.d.ts +5 -3
- package/dist/core/runner/prepare-ask-lane.js +1 -1
- package/dist/core/runner/prepare-caps-and-workflow.d.ts +39 -13
- package/dist/core/runner/prepare-caps-and-workflow.js +58 -29
- package/dist/core/runner/prepare-gate-stations.d.ts +33 -6
- package/dist/core/runner/prepare-gate-stations.js +32 -19
- package/dist/core/runner/prepare-hands-readface.d.ts +40 -17
- package/dist/core/runner/prepare-hands-readface.js +64 -53
- package/dist/core/runner/prepare-inherited-gate.d.ts +22 -22
- package/dist/core/runner/prepare-inherited-gate.js +37 -23
- package/dist/core/runner/prepare-park-ask.d.ts +2 -2
- package/dist/core/runner/prepare-park-ask.js +2 -1
- package/dist/core/runner/prepare-policy-chain.d.ts +22 -2
- package/dist/core/runner/prepare-policy-chain.js +39 -12
- package/dist/core/runner/prepare-protocol-tools.d.ts +28 -0
- package/dist/core/runner/prepare-protocol-tools.js +13 -3
- package/dist/core/runner/prepare-run-refs.d.ts +6 -6
- package/dist/core/runner/prepare-run-refs.js +9 -4
- package/dist/core/runner/prepare-safety-scan.d.ts +5 -0
- package/dist/core/runner/prepare-safety-scan.js +19 -3
- package/dist/core/runner/prepare-suspend-saga.d.ts +5 -5
- package/dist/core/runner/prepare-suspend-saga.js +6 -6
- package/dist/core/runner/prepare-task.js +51 -22
- package/dist/core/runner/prepare-wiring-manifest.d.ts +10 -6
- package/dist/core/runner/prepare-wiring-manifest.js +5 -3
- package/dist/core/runner/read-root-grant.d.ts +9 -0
- package/dist/core/runner/read-root-grant.js +12 -0
- package/dist/core/runner/retired-runner-deps.js +1 -0
- package/dist/core/runner/run-identity-wiring.js +1 -1
- package/dist/core/runner/run-leg.js +24 -15
- package/dist/core/runner/run-notification-lane.js +1 -0
- package/dist/core/runner/run-telemetry-and-budget-seats.d.ts +2 -2
- package/dist/core/runner/run-telemetry-and-budget-seats.js +1 -1
- package/dist/core/runner/run-turn-boundary.js +1 -1
- package/dist/core/runner/runtask.js +3 -0
- package/dist/core/runner/stream-mode-verb.d.ts +27 -0
- package/dist/core/runner/stream-mode-verb.js +19 -0
- package/dist/core/runner/turn-attachments.d.ts +3 -3
- package/dist/core/runner/turn-attachments.js +1 -1
- package/dist/core/runner/write-protection-station.d.ts +7 -1
- package/dist/core/runner/write-protection-station.js +6 -3
- package/dist/core/runner-deps.d.ts +31 -34
- package/dist/core/runtime-caps.d.ts +12 -3
- package/dist/core/safety-axis-vocab.d.ts +2 -2
- package/dist/core/safety-axis-vocab.js +1 -1
- package/dist/core/sensitive-path-policy.d.ts +4 -2
- package/dist/core/sensitive-path-policy.js +39 -30
- package/dist/core/task-event.d.ts +1 -1
- package/dist/core/task-result.d.ts +1 -1
- package/dist/core/task-spec.d.ts +41 -89
- package/dist/core/task-stream.d.ts +16 -0
- package/dist/core/terminal-cause.js +1 -0
- package/dist/core/tighten-task-spec.d.ts +2 -2
- package/dist/core/tighten-task-spec.js +12 -14
- package/dist/core/tool-catalog-entries.js +4 -3
- package/dist/core/tool-policy.d.ts +54 -25
- package/dist/core/tool-policy.js +43 -2
- package/dist/core/tool-registry.d.ts +2 -0
- package/dist/core/tool-registry.js +3 -0
- package/dist/core/tool-spec.d.ts +8 -9
- package/dist/core/trace.d.ts +7 -6
- package/dist/core/types.d.ts +2 -1
- package/dist/core/wiring-manifest.d.ts +31 -5
- package/dist/core/wiring-manifest.js +28 -1
- package/dist/core/write-protect.d.ts +11 -1
- package/dist/core/write-protect.js +26 -15
- package/dist/engine/execution-env/node-execution-env.d.ts +3 -0
- package/dist/engine/execution-env/node-execution-env.js +11 -1
- package/dist/engine/harness/types.d.ts +6 -7
- package/dist/engine/llm/types.d.ts +2 -4
- package/dist/engine/loop/types.d.ts +7 -0
- package/dist/index.d.ts +15 -5
- package/dist/index.js +12 -3
- package/dist/orchestration/workflow-governance.js +1 -1
- package/dist/orchestration/workflow-primitives.d.ts +1 -1
- package/dist/orchestration/workflow-size-guideline.js +2 -2
- package/dist/tools/artifact/artifact-tool.d.ts +17 -0
- package/dist/tools/artifact/artifact-tool.js +16 -1
- package/dist/tools/fs/bash-readonly-classifier.d.ts +28 -7
- package/dist/tools/fs/bash-readonly-classifier.js +88 -0
- package/dist/tools/fs/containment-face.d.ts +9 -3
- package/dist/tools/fs/containment-face.js +2 -0
- package/dist/tools/fs/file-read-check.d.ts +49 -0
- package/dist/tools/fs/file-read-check.js +71 -0
- package/dist/tools/fs/fs-bash.d.ts +3 -3
- package/dist/tools/fs/fs-read.d.ts +1 -0
- package/dist/tools/fs/fs-search-tools.d.ts +2 -2
- package/dist/tools/fs/fs-search-tools.js +4 -4
- package/dist/tools/fs/fs-shared.js +20 -6
- package/dist/tools/fs/fs-write.d.ts +4 -3
- package/dist/tools/fs/fs-write.js +9 -9
- package/dist/tools/fs/index.d.ts +39 -3
- package/dist/tools/fs/index.js +38 -15
- package/dist/tools/fs/read-deny-home.d.ts +93 -0
- package/dist/tools/fs/read-deny-home.js +225 -0
- package/dist/tools/fs/read-deny.d.ts +176 -34
- package/dist/tools/fs/read-deny.js +268 -61
- package/dist/tools/fs/safety.d.ts +6 -1
- package/dist/tools/fs/safety.js +18 -5
- package/dist/tools/fs/search.d.ts +3 -0
- package/dist/tools/fs/search.js +47 -9
- package/dist/tools/fs/shell-read-check.d.ts +42 -11
- package/dist/tools/fs/shell-read-check.js +188 -13
- package/dist/tools/fs/shell-read-establish.d.ts +7 -3
- package/dist/tools/fs/shell-read-establish.js +134 -21
- package/dist/tools/fs/shell-read-identity.d.ts +7 -0
- package/dist/tools/fs/shell-read-identity.js +21 -0
- package/dist/tools/fs/shell-read-judge.d.ts +92 -32
- package/dist/tools/fs/shell-read-judge.js +43 -18
- package/dist/tools/fs/shell-read-plan.d.ts +4 -0
- package/dist/tools/fs/shell-read-plan.js +26 -4
- package/dist/tools/fs/shell-read-write-targets.d.ts +73 -0
- package/dist/tools/fs/shell-read-write-targets.js +173 -0
- package/package.json +1 -1
- package/test/export-surface.snapshot.json +103 -11
- package/wire-changes/core@7.34.0.json +2621 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { denyFloorShadowsOf } from "./shell-read-judge.js";
|
|
2
|
+
export const SHELL_WRITE_COMMANDS = ["mkdir", "touch", "rm", "rmdir", "mv", "cp", "tee", "sed"];
|
|
3
|
+
const WRITE_COMMAND_SET = new Set(SHELL_WRITE_COMMANDS);
|
|
4
|
+
export function spellsOption(word, long, short) {
|
|
5
|
+
if (word.startsWith("--")) {
|
|
6
|
+
const name = word.slice(2).split("=")[0];
|
|
7
|
+
return name.length > 0 && long.startsWith(name);
|
|
8
|
+
}
|
|
9
|
+
return new RegExp(`^-[A-Za-z]*${short}`).test(word);
|
|
10
|
+
}
|
|
11
|
+
export function programArgs(segment) {
|
|
12
|
+
const words = segment.argv.map((w) => ({ raw: w.raw, spelled: w.folded }));
|
|
13
|
+
const at = words.findIndex((w) => w.spelled === segment.verb?.name);
|
|
14
|
+
return at < 0 ? [] : words.slice(at + 1);
|
|
15
|
+
}
|
|
16
|
+
const SED_GRAMMARS = [
|
|
17
|
+
{ required: "efl", optional: "i", longRequired: ["expression", "file", "line-length"] },
|
|
18
|
+
{ required: "efiI", optional: "" },
|
|
19
|
+
];
|
|
20
|
+
const COPY_GRAMMARS = [
|
|
21
|
+
{ required: "St", optional: "", longRequired: ["target-directory", "suffix", "no-preserve", "sparse"] },
|
|
22
|
+
{ required: "", optional: "" },
|
|
23
|
+
];
|
|
24
|
+
function readArgv(words, grammar) {
|
|
25
|
+
const options = [];
|
|
26
|
+
const operands = [];
|
|
27
|
+
let endOfOptions = false;
|
|
28
|
+
for (let k = 0; k < words.length; k++) {
|
|
29
|
+
const w = words[k];
|
|
30
|
+
const s = w.spelled;
|
|
31
|
+
if (endOfOptions || !s.startsWith("-") || s === "-") {
|
|
32
|
+
operands.push(w);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (s === "--") {
|
|
36
|
+
endOfOptions = true;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (s.startsWith("--")) {
|
|
40
|
+
const eq = s.indexOf("=");
|
|
41
|
+
const name = s.slice(2, eq < 0 ? undefined : eq);
|
|
42
|
+
if (grammar.longRequired === undefined || name.length === 0)
|
|
43
|
+
continue;
|
|
44
|
+
const value = eq >= 0 ? { raw: w.raw, spelled: s.slice(eq + 1) } : grammar.longRequired.some((long) => long.startsWith(name)) ? words[++k] : undefined;
|
|
45
|
+
options.push({ name, long: true, ...(value !== undefined ? { value } : {}) });
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
for (let c = 1; c < s.length; c++) {
|
|
49
|
+
const letter = s[c];
|
|
50
|
+
const rest = s.slice(c + 1);
|
|
51
|
+
if (grammar.required.includes(letter)) {
|
|
52
|
+
const value = rest.length > 0 ? { raw: w.raw, spelled: rest } : words[++k];
|
|
53
|
+
options.push({ name: letter, long: false, ...(value !== undefined ? { value } : {}) });
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
if (grammar.optional.includes(letter)) {
|
|
57
|
+
options.push({ name: letter, long: false, ...(rest.length > 0 ? { value: { raw: w.raw, spelled: rest } } : {}) });
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
options.push({ name: letter, long: false });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return { options, operands };
|
|
64
|
+
}
|
|
65
|
+
export function sedOptionsOf(segment) {
|
|
66
|
+
const words = programArgs(segment);
|
|
67
|
+
let inPlace = false;
|
|
68
|
+
let followsLinks = false;
|
|
69
|
+
const suffixes = new Set();
|
|
70
|
+
for (const grammar of SED_GRAMMARS) {
|
|
71
|
+
for (const o of readArgv(words, grammar).options) {
|
|
72
|
+
if (o.long ? "in-place".startsWith(o.name) : o.name === "i" || o.name === "I") {
|
|
73
|
+
inPlace = true;
|
|
74
|
+
if (o.value !== undefined && o.value.spelled.length > 0)
|
|
75
|
+
suffixes.add(o.value.spelled);
|
|
76
|
+
}
|
|
77
|
+
if (o.long && "follow-symlinks".startsWith(o.name))
|
|
78
|
+
followsLinks = true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { inPlace, suffixes: [...suffixes], followsLinks };
|
|
82
|
+
}
|
|
83
|
+
export function sedBackupNames(name, suffix) {
|
|
84
|
+
const appended = `${name}${suffix}`;
|
|
85
|
+
return suffix.includes("*") ? [suffix.replace(/\*/g, () => name), appended] : [appended];
|
|
86
|
+
}
|
|
87
|
+
const OPERAND_SEATS = {
|
|
88
|
+
touch: (s) => (programArgs(s).some((w) => w.spelled.startsWith("-") && spellsOption(w.spelled, "no-dereference", "h")) ? ["landing", "entry"] : ["landing"]),
|
|
89
|
+
rm: () => ["entry"],
|
|
90
|
+
rmdir: () => ["entry"],
|
|
91
|
+
sed: (s) => (sedOptionsOf(s).followsLinks ? ["landing"] : ["entry"]),
|
|
92
|
+
mv: () => ["landing", "entry"],
|
|
93
|
+
cp: () => ["landing", "entry"],
|
|
94
|
+
};
|
|
95
|
+
const SOURCE_WRITTEN = { cp: [], mv: ["entry"] };
|
|
96
|
+
function sedBackupTargets(segment) {
|
|
97
|
+
const { suffixes, followsLinks } = sedOptionsOf(segment);
|
|
98
|
+
if (suffixes.length === 0)
|
|
99
|
+
return [];
|
|
100
|
+
const files = segment.reads.filter((c) => c.provenance === "operand" && c.expands === false);
|
|
101
|
+
return files.flatMap((f) => suffixes.flatMap((suffix) => followsLinks
|
|
102
|
+
? [{ candidate: { ...f, spelled: `${f.spelled}${suffix}`, face: "write" }, seats: ["entry"], followed: { operand: f, suffix } }]
|
|
103
|
+
: sedBackupNames(f.spelled, suffix).map((spelled) => ({ candidate: { ...f, spelled, face: "write" }, seats: ["entry"] }))));
|
|
104
|
+
}
|
|
105
|
+
function copyReadingsOf(segment) {
|
|
106
|
+
const out = [];
|
|
107
|
+
for (const grammar of COPY_GRAMMARS) {
|
|
108
|
+
const { options, operands } = readArgv(programArgs(segment), grammar);
|
|
109
|
+
const sources = [...operands];
|
|
110
|
+
const dest = options.findLast((o) => o.value !== undefined && (o.long ? "target-directory".startsWith(o.name) : o.name === "t"))?.value ?? sources.pop();
|
|
111
|
+
if (dest !== undefined)
|
|
112
|
+
out.push({ dest, sources });
|
|
113
|
+
}
|
|
114
|
+
return out;
|
|
115
|
+
}
|
|
116
|
+
function copySourceWordsOf(segment) {
|
|
117
|
+
const readings = copyReadingsOf(segment);
|
|
118
|
+
if (readings.length < COPY_GRAMMARS.length || programArgs(segment).some((w) => w.spelled.startsWith("-")))
|
|
119
|
+
return new Set();
|
|
120
|
+
const [first, ...rest] = readings.map((r) => new Set(r.sources.map((w) => w.raw)));
|
|
121
|
+
const dests = new Set(readings.map((r) => r.dest.raw));
|
|
122
|
+
return new Set([...first].filter((raw) => !dests.has(raw) && rest.every((s) => s.has(raw))));
|
|
123
|
+
}
|
|
124
|
+
function copyDestinationChildren(segment) {
|
|
125
|
+
const candidateOf = (raw) => segment.reads.find((c) => c.raw === raw && (c.provenance === "unlisted_word" || c.provenance === "operand"));
|
|
126
|
+
const children = new Map();
|
|
127
|
+
for (const { dest, sources } of copyReadingsOf(segment)) {
|
|
128
|
+
const destCandidate = candidateOf(dest.raw);
|
|
129
|
+
if (destCandidate !== undefined && destCandidate.expands !== false)
|
|
130
|
+
continue;
|
|
131
|
+
for (const src of sources) {
|
|
132
|
+
const source = candidateOf(src.raw);
|
|
133
|
+
if (source !== undefined && source.expands !== false)
|
|
134
|
+
continue;
|
|
135
|
+
const child = `${dest.spelled.replace(/\/+$/, "")}/${src.spelled.replace(/\/+$/, "").split("/").pop() ?? ""}`;
|
|
136
|
+
if (child.endsWith("/") || children.has(child))
|
|
137
|
+
continue;
|
|
138
|
+
children.set(child, destCandidate !== undefined && source !== undefined ? { ...destCandidate, spelled: child } : { spelled: child, raw: src.raw, provenance: "unlisted_word", expands: "unresolvable", bases: [] });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return [...children.values()];
|
|
142
|
+
}
|
|
143
|
+
function writeTargetsOf(segment) {
|
|
144
|
+
const out = [];
|
|
145
|
+
const write = (c, seats, written, child) => void out.push({ candidate: { ...c, face: "write" }, ...(seats !== undefined ? { seats } : {}), ...(written !== undefined ? { written } : {}), ...(child === true ? { child } : {}) });
|
|
146
|
+
for (const r of segment.redirects)
|
|
147
|
+
if (r.direction === "out" && r.target !== undefined)
|
|
148
|
+
write(r.target);
|
|
149
|
+
for (const c of segment.reads)
|
|
150
|
+
if (c.provenance === "write_redirect_target")
|
|
151
|
+
write(c);
|
|
152
|
+
const verb = segment.verb?.basename;
|
|
153
|
+
if (verb !== undefined && WRITE_COMMAND_SET.has(verb) && (verb !== "sed" || sedOptionsOf(segment).inPlace)) {
|
|
154
|
+
const seats = OPERAND_SEATS[verb]?.(segment);
|
|
155
|
+
const sourceWritten = SOURCE_WRITTEN[verb];
|
|
156
|
+
const sources = sourceWritten !== undefined ? copySourceWordsOf(segment) : undefined;
|
|
157
|
+
for (const c of segment.reads)
|
|
158
|
+
if (c.provenance === "operand" || c.provenance === "unlisted_word" || c.provenance === "option_value")
|
|
159
|
+
write(c, seats, sources?.has(c.raw) === true ? sourceWritten : undefined);
|
|
160
|
+
if (verb === "cp" || verb === "mv")
|
|
161
|
+
for (const c of copyDestinationChildren(segment))
|
|
162
|
+
write(c, seats, undefined, true);
|
|
163
|
+
if (verb === "sed")
|
|
164
|
+
out.push(...sedBackupTargets(segment));
|
|
165
|
+
}
|
|
166
|
+
return out;
|
|
167
|
+
}
|
|
168
|
+
export function judgedCandidatesOf(segment) {
|
|
169
|
+
const reads = segment.reads.filter((c) => c.provenance !== "write_redirect_target");
|
|
170
|
+
const writes = writeTargetsOf(segment);
|
|
171
|
+
const plain = (cs) => cs.map((candidate) => ({ candidate }));
|
|
172
|
+
return [...plain(reads), ...plain(denyFloorShadowsOf(reads)), ...writes, ...plain(denyFloorShadowsOf(writes.map((w) => w.candidate)))];
|
|
173
|
+
}
|