@sema-agent/core
Version:
Stateless, task-oriented AI agent core
413 lines (412 loc) • 11.1 kB
JSON
{
"repo": "core",
"version": "7.47.0",
"from": "d3d1a70f250fad85ace0bf4e792e75bf18373690",
"to": "v7.47.0",
"added": [
{
"name": "ASK_FACES",
"kind": "variable",
"tier": "advanced",
"at": [
"src/core/ask-origin.ts:707",
"src/index.ts:1472"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "AskFace",
"kind": "type",
"tier": "advanced",
"at": [
"src/core/ask-origin.ts:708",
"src/index.ts:1472"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "askFaceOf",
"kind": "function",
"tier": "advanced",
"at": [
"src/core/ask-origin.ts:713",
"src/index.ts:1472"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "releasableAskClassesFor",
"kind": "function",
"tier": "advanced",
"at": [
"src/core/ask-origin.ts:751",
"src/index.ts:1472"
],
"criteriaCovered": false,
"breaking": false
}
],
"removed": [
{
"name": "RELEASABLE_ASK_CLASSES",
"kind": "variable",
"tier": "advanced",
"at": [
"src/core/ask-origin.ts:711",
"src/index.ts:1472"
],
"breaking": true
}
],
"changed": [],
"narrowed": [
{
"id": "F33",
"source": "behaviorFlips.summary",
"text": "BEHAVIOR NARROWING (#1402): a `Bash(...)` command rule — deny, ask or allow, from a task policy, the deployment's policy, a person's stored rows, the org partition or the allow lists — judges a `Monitor` call by its `command`, as it judges a `Bash` call."
},
{
"id": "F34",
"source": "behaviorFlips.summary",
"text": "BEHAVIOR NARROWING (#1402): a `Monitor(<command>)` rule text is refused at compile time (`invalid.command_rule`, naming the `Bash(<command>)` spelling); `Monitor(command:…)` is the primary-field refusal."
},
{
"id": "F35",
"source": "behaviorFlips.summary",
"text": "BEHAVIOR NARROWING (#1421, #1445 merged): a launcher that runs a program named by no word of its own hands it an argv its row composes, read as that program reads its own — `sudo -s` / `-i` / `--shell` / `--login` with a command hand the shell the command as escaped `-c` text (`$NAME` still expands); `su` / `runuser` hand the program `-c TEXT` and the words after the user (the user is a name, not text); su's `-s PROGRAM` names the program (a shell's row, or the program's own); a program the text does not spell (`-s \"$X\"`, `-m` / `-p`) is read as its command line and as a shell; `runuser -u USER CMD` runs CMD as the program."
},
{
"id": "F40",
"source": "behaviorFlips.summary",
"text": "BEHAVIOR NARROWING (#1421 r3b; one rule for every command): a character inside a bracket class that quotes or a backslash protect is a literal member — the path reader judges every class holding one as any one character (`?`, as the glob matcher reads a POSIX class), a well-formed class read as bash forms it — ending where bash ends it (a `[:…:]` / `[=…=]` / `[.….]` unit skipped whole, a quoted `]` closing nothing), no class where a `/` stands inside the brackets; a malformed unit (`[[:alpha]]`, `[[:a]x/y:]`, `[a[=b]c=]`) is not, its outer `[` read as a literal where bash reads a member (KL-7470-d, unchanged from v7.46.x) — and every class the matcher widens (a quoted character, or a `[:…:]` / `[=…=]` / `[.….]` unit) judging the name it spells beside its matches. The deny table and the dangerous-delete judge therefore see every name the shell could match in a whole word (and some it would not) — not in a part cut out of a word (an attached option value `grep --file=…` / `grep -f…`, `dd if=`'s value, an assignment's value), which is matched by its own quote-removed text while bash matches the whole word (KL-7470-c, a live miss unchanged from v7.46.x: `grep --file=[\"!\"a]* x` beside a plain `--file=apple` opens a denied `apple` on every arm; #1466). Reach: `Bash` commands whose words carry such a class, written literally or through a settled value; the text handed to a launched or re-reading shell is unchanged."
}
],
"closedSetMembers": [
{
"set": "ASK_FACES",
"at": [
"src/core/ask-origin.ts:707"
],
"newSet": true,
"added": [
"other",
"shell"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "AskFace",
"at": [
"src/core/ask-origin.ts:708",
"src/index.ts:1472"
],
"newSet": true,
"added": [
"other",
"shell"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "MODE_RELEASE_REASONS",
"at": [
"src/core/ask-origin.ts:765"
],
"newSet": false,
"added": [
"write_protection_unresolved"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "ToolFaceDeclaration.ruleFace.grammar",
"at": [
"src/core/tool-face.ts:232"
],
"newSet": true,
"added": [
"command"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
}
],
"closedSetsUnreadable": [],
"typeKeys": [
{
"type": "AskClassFacts",
"at": [
"src/core/ask-origin.ts:780"
],
"added": [
"askFace"
],
"addedDetail": [
{
"key": "askFace",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": true
},
{
"type": "LexedWord",
"at": [
"src/shell/lex.ts:184"
],
"via": "ShellReadSegment.argv",
"added": [
"judged"
],
"addedDetail": [
{
"key": "judged",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "ReadCandidate",
"at": [
"src/tools/fs/shell-read-plan.ts:125"
],
"added": [
"pattern"
],
"addedDetail": [
{
"key": "pattern",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "ToolFaceDeclaration",
"at": [
"src/core/tool-face.ts:216"
],
"added": [
"ruleFace.grammar"
],
"addedDetail": [
{
"key": "ruleFace.grammar",
"optional": true
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "WordExpansion",
"at": [
"src/shell/lex.ts:134"
],
"via": "ShellReadSegment.argv.pieces.expansion",
"added": [
"pattern",
"pattern.folded",
"pattern.judged",
"pattern.written"
],
"addedDetail": [
{
"key": "pattern",
"optional": true
},
{
"key": "pattern.folded",
"optional": false
},
{
"key": "pattern.judged",
"optional": false
},
{
"key": "pattern.written",
"optional": false
}
],
"addedRequired": [],
"removed": [],
"breaking": false,
"criteriaCovered": false
}
],
"typeKeysUnreadableArms": [],
"typeKeysFlattenedCount": 228,
"signatures": [
{
"name": "foldArbitrationRow",
"at": [
"src/core/ask-origin.ts:860"
],
"from": [
"(classes: ReadonlySet<AskClass>, readFace?: ContainmentFace): ModeArbitrationRow"
],
"to": [
"(classes: ReadonlySet<AskClass>, readFace?: ContainmentFace, askFace?: AskFace): ModeArbitrationRow"
],
"changes": [
{
"aspect": "param",
"detail": "+optional param `askFace?: AskFace`",
"breaking": false
}
],
"breaking": false,
"criteriaCovered": false
}
],
"declarationMoves": [],
"mintMoves": [],
"criteriaObserves": [
{
"kind": "taskEventField",
"name": "tool_end.gate",
"assertions": [
"G43.a",
"G43.c",
"G46.c"
]
},
{
"kind": "typeMember",
"name": "AskClassFacts.askFace",
"assertions": [
"G47.a",
"G47.b"
]
},
{
"kind": "typeMember",
"name": "AskRequest.askClass",
"assertions": [
"G45.a",
"G45.b",
"G45.e",
"G45.f",
"G45.g",
"G45.h",
"G45.i",
"G45.k"
]
},
{
"kind": "typeMember",
"name": "AskRequest.classes",
"assertions": [
"G43.b",
"G45.c",
"G45.d"
]
},
{
"kind": "typeMember",
"name": "AskRequest.message",
"assertions": [
"G45.a",
"G45.b",
"G45.d",
"G45.f",
"G45.g",
"G45.h"
]
},
{
"kind": "typeMember",
"name": "GateOutcome.disposition",
"assertions": [
"G43.a",
"G43.b",
"G43.c",
"G45.i",
"G45.j",
"G45.l",
"G46.a",
"G46.b",
"G46.c",
"G46.d"
]
},
{
"kind": "typeMember",
"name": "ModeRelease.reason",
"assertions": [
"G46.a",
"G46.d",
"G47.b"
]
},
{
"kind": "typeMember",
"name": "PermissionRuleIssue.code",
"assertions": [
"G44.a"
]
},
{
"kind": "typeMember",
"name": "PermissionRuleIssue.message",
"assertions": [
"G44.a"
]
},
{
"kind": "typeMember",
"name": "ToolCatalogEntry.face",
"assertions": [
"G44.b"
]
}
],
"consumersHint": {
"cli": [
"AskClassFacts",
"LexedWord",
"MODE_RELEASE_REASONS",
"RELEASABLE_ASK_CLASSES",
"ReadCandidate",
"foldArbitrationRow"
],
"server": [
"LexedWord",
"MODE_RELEASE_REASONS",
"RELEASABLE_ASK_CLASSES",
"ReadCandidate",
"foldArbitrationRow"
],
"sdk": [
"RELEASABLE_ASK_CLASSES"
],
"note": "scanned cli@b43004f0 server@b5d7c626 sdk@f6f9666 — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it. Ledger files (**/docs/core-consumption/**, **/docs/wire-consumption/**, **/*LEDGER*.json) are not evidence of use — server: 2 name(s) matched ONLY in bookkeeping files and were set aside (AskClassFacts, ToolFaceDeclaration)"
},
"breakingCount": 1,
"breakingItems": [
"export removed: RELEASABLE_ASK_CLASSES (variable)"
],
"toResolvedAt": "931d1bd694bf8b8e1376209647db753133079ee8"
}