@sema-agent/core
Version:
Stateless, task-oriented AI agent core
458 lines (457 loc) • 11.4 kB
JSON
{
"repo": "core",
"version": "7.19.0",
"from": "a9ed817912e9808ec38a5b4f02231398d5ccc99f",
"to": "v7.19.0",
"added": [
{
"name": "AUTO_MODE_PARSE_FAILURES",
"kind": "variable",
"tier": "advanced",
"at": [
"src/core/auto-mode.ts:69",
"src/index.ts:1376"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "AutoModeParseFailure",
"kind": "type",
"tier": "advanced",
"at": [
"src/core/auto-mode.ts:70",
"src/index.ts:1378"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "RECOMMENDED_SENSITIVE_ASK_PATTERNS",
"kind": "variable",
"tier": "advanced",
"at": [
"src/core/sensitive-path-policy.ts:196",
"src/index.ts:914"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "ReadRootGrantCandidate",
"kind": "interface",
"tier": "advanced",
"at": [
"src/core/tool-spec.ts:105",
"src/core/types.ts:24",
"src/index.ts:3300"
],
"criteriaCovered": true,
"breaking": false
},
{
"name": "classifierParseFailureDenyMessage",
"kind": "function",
"tier": "advanced",
"at": [
"src/core/auto-mode.ts:247",
"src/index.ts:1375"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "isAutoModeParseFailure",
"kind": "function",
"tier": "advanced",
"at": [
"src/core/auto-mode.ts:73",
"src/index.ts:1377"
],
"criteriaCovered": false,
"breaking": false
},
{
"name": "thinkingOffSpelled",
"kind": "function",
"tier": "advanced",
"at": [
"src/brain/reasoning.ts:184",
"src/index.ts:2492"
],
"criteriaCovered": false,
"breaking": false
}
],
"removed": [
{
"name": "CLASSIFIER_PARSE_FAILURE_DENY_MESSAGE",
"kind": "variable",
"tier": "advanced",
"at": [
"src/core/auto-mode.ts:222",
"src/index.ts:1375"
],
"breaking": true
},
{
"name": "thinkingOffExpressible",
"kind": "function",
"tier": "advanced",
"at": [
"src/brain/reasoning.ts:184",
"src/index.ts:2489"
],
"breaking": true
}
],
"changed": [],
"narrowed": [
{
"id": "F2",
"source": "behaviorFlips.summary",
"text": "NARROWING (durable-resume path) — a decider's note has ONE mint (#812 / B-123; car-812): `settledByPerson` + `decidersNote` in `gate-outcome.ts`; empty text folds to absence there, once, for the live resolver and the durable decide lane alike, so `reason: \"\"` is a bare refusal on both paths and the issuing batch's not-yet-started siblings halt (`gate.batch_halted`). Whitespace-only text stays a note (pinned current behaviour, not a promise)."
},
{
"id": "F3",
"source": "behaviorFlips.summary",
"text": "NARROWING + widening — write protection layered by what the file IS (#804; car-804, ruling (d)) and the write-protection judge anchors relative spellings (#815, security; B-124): the deny set's agent-config block derives from `READ_FACE_BUILTIN_DENY_TABLE`'s `agent-config` tier (one table, two judges; `RECOMMENDED_SENSITIVE_PATTERNS` 26 → 39 members: +8 third-party agent config files, +2 write-face-only rows `.claude/hooks` / `.sema/hooks` (host-executed command bodies, like `.git/hooks`; #824), −4 hand rows), the `.claude` / `.sema` DIRECTORIES leave the deny set and sit on an ask tier of the SAME canonical judge (`RECOMMENDED_SENSITIVE_ASK_PATTERNS` = [`.claude`, `.sema`]; `createSensitivePathPolicy({ askPatterns })` absent = that set, `[]` = no ask tier; the `dataRoot` exemption applies to both tiers); the always-on lexical `WriteProtectionMatcher.matchPath(path, cwd?)` joins a relative spelling onto the gate's tracked cwd BEFORE judging, so `cd ~/.ssh` + `Write(\"authorized_keys\")` is judged like the absolute spelling on every `segment` row."
}
],
"closedSetMembers": [
{
"set": "AUTO_MODE_PARSE_FAILURES",
"at": [
"src/core/auto-mode.ts:69"
],
"newSet": true,
"added": [
"conflict",
"missing"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "CLASSIFIER_ROLE_DEFAULT_REASONS",
"at": [
"src/core/runner/classifier-ladder.ts:86"
],
"newSet": true,
"added": [
"main_only",
"role_fallback",
"role_unresolvable",
"tier_below_main",
"tier_table"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "ENGINE_NOTICE_CODES",
"at": [
"src/core/governance-codes.ts:323"
],
"newSet": false,
"added": [
"classifier.contract_broken",
"classifier.role_defaulted",
"skills.listing_truncated"
],
"removed": [],
"breaking": false,
"criteriaCovered": true
},
{
"set": "RECOMMENDED_SENSITIVE_ASK_PATTERNS",
"at": [
"src/core/sensitive-path-policy.ts:196"
],
"newSet": true,
"added": [
".claude",
".sema"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"set": "RECOMMENDED_SENSITIVE_PATTERNS",
"at": [
"src/core/sensitive-path-policy.ts:102"
],
"newSet": false,
"added": [
".ai-agent/.env",
".aider.conf.yml",
".claude.*",
".claude/agents",
".claude/hooks",
".claude/settings.json",
".claude/settings.local.json",
".codex/config.toml",
".continue/config.json",
".continue/config.yaml",
".cursor/mcp.json",
".gemini/settings.json",
".sema/agents",
".sema/engine-data/.env",
".sema/hooks",
".sema/settings.json",
".sema/settings.local.json"
],
"removed": [
".claude*",
".sema"
],
"persistedBy": "none",
"breaking": true,
"criteriaCovered": false
}
],
"typeKeys": [
{
"type": "AskRequest",
"at": [
"src/core/tool-policy.ts:2571"
],
"added": [
"readRootCandidate"
],
"removed": [],
"breaking": false,
"criteriaCovered": true
},
{
"type": "AutoModeVerdict",
"at": [
"src/core/auto-mode.ts:123"
],
"added": [
"parse_error.form"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "CompoundReadonlyVerdict",
"at": [
"src/tools/fs/bash-readonly-classifier.ts:585"
],
"added": [
"outOfRootGrantCandidate"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "PermissionResult",
"at": [
"src/core/tool-policy.ts:412"
],
"added": [
"probeReadRootCandidate"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "PreToolUseResult",
"at": [
"src/core/hooks.ts:1141"
],
"added": [
"probeReadRootCandidate"
],
"removed": [],
"breaking": false,
"criteriaCovered": false
},
{
"type": "ReversibilityVerdict",
"at": [
"src/core/tool-spec.ts:50"
],
"added": [
"readRootCandidate"
],
"removed": [],
"breaking": false,
"criteriaCovered": true
},
{
"type": "TaskSpec",
"at": [
"src/core/task-spec.ts:49"
],
"added": [
"skillListingBudgetFraction",
"skillListingMaxDescChars"
],
"removed": [],
"breaking": false,
"criteriaCovered": true
}
],
"declarationMoves": [
{
"name": "SKILLS_BLOCK_MAX_BYTES",
"kind": null,
"onSurface": false,
"from": [
"src/core/runner/synthetic-tools.ts"
],
"to": [
"src/core/runner/synthetic-tools.ts",
"src/core/skill-listing-budget.ts"
]
}
],
"mintMoves": [],
"criteriaObserves": [
{
"kind": "engineNoticeCode",
"name": "classifier.contract_broken",
"assertions": [
"G1.c"
]
},
{
"kind": "engineNoticeCode",
"name": "classifier.role_defaulted",
"assertions": [
"G1.b"
]
},
{
"kind": "engineNoticeCode",
"name": "skills.listing_truncated",
"assertions": [
"G4.b"
]
},
{
"kind": "typeMember",
"name": "AskRequest.readRootCandidate",
"assertions": [
"G5.a"
]
},
{
"kind": "typeMember",
"name": "AskRequest.toolName",
"assertions": [
"G3.b"
]
},
{
"kind": "typeMember",
"name": "AssistantMessage.partialFinalized",
"assertions": [
"G1.d"
]
},
{
"kind": "typeMember",
"name": "GateDisposition.classifier",
"assertions": [
"G1.a"
]
},
{
"kind": "typeMember",
"name": "ReadRootGrantCandidate.dir",
"assertions": [
"G5.b"
]
},
{
"kind": "typeMember",
"name": "ReversibilityVerdict.readRootCandidate",
"assertions": [
"G5.c"
]
},
{
"kind": "typeMember",
"name": "Settlement.kind",
"assertions": [
"G2.b"
]
},
{
"kind": "typeMember",
"name": "Settlement.note",
"assertions": [
"G2.a"
]
},
{
"kind": "typeMember",
"name": "TaskSpec.skillListingBudgetFraction",
"assertions": [
"G4.a",
"G6.a"
]
},
{
"kind": "typeMember",
"name": "TaskSpec.skillListingMaxDescChars",
"assertions": [
"G4.c"
]
},
{
"kind": "typeMember",
"name": "WriteProtectionMatcher.matchPath",
"assertions": [
"G3.a"
]
}
],
"consumersHint": {
"cli": [
"AskRequest",
"CompoundReadonlyVerdict",
"ENGINE_NOTICE_CODES",
"PermissionResult",
"PreToolUseResult",
"RECOMMENDED_SENSITIVE_PATTERNS",
"TaskSpec"
],
"server": [
"AskRequest",
"AutoModeVerdict",
"CLASSIFIER_PARSE_FAILURE_DENY_MESSAGE",
"CompoundReadonlyVerdict",
"ENGINE_NOTICE_CODES",
"PermissionResult",
"PreToolUseResult",
"RECOMMENDED_SENSITIVE_PATTERNS",
"ReversibilityVerdict",
"TaskSpec",
"thinkingOffExpressible"
],
"sdk": [
"AskRequest",
"PermissionResult",
"PreToolUseResult",
"TaskSpec"
],
"note": "scanned cli@116d081d server@565d02fc sdk@17a8533 — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it"
},
"breakingCount": 3,
"breakingItems": [
"closed set lost members: RECOMMENDED_SENSITIVE_PATTERNS -.claude*,.sema",
"export removed: CLASSIFIER_PARSE_FAILURE_DENY_MESSAGE (variable)",
"export removed: thinkingOffExpressible (function)"
],
"toResolvedAt": "0ef667ab5a0122c0c73b9635de5035dab4a472dc"
}