@sema-agent/server 7.109.0 → 7.111.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/MIGRATION.md +25 -0
- package/README.md +8 -0
- package/README.zh-CN.md +5 -0
- package/USAGE.md +2 -2
- package/dist/approval-ask-audit-store.d.ts +38 -25
- package/dist/approval-ask-audit-store.js +26 -59
- package/dist/approval-card.d.ts +6 -5
- package/dist/approval-card.js +8 -11
- package/dist/bench/s1/run-firm.d.ts +11 -0
- package/dist/bench/s1/run-firm.js +47 -32
- package/dist/boot/coordinators.js +1 -1
- package/dist/boot/reapers.d.ts +3 -0
- package/dist/boot/reapers.js +3 -2
- package/dist/boot/resolve-spec.js +3 -4
- package/dist/boot/session-faces.d.ts +4 -0
- package/dist/boot/session-faces.js +3 -1
- package/dist/boot/stage-07-capability-layer.d.ts +2 -0
- package/dist/boot/stage-07-capability-layer.js +18 -3
- package/dist/boot/stage-08-reapers.d.ts +2 -0
- package/dist/boot/stage-08-reapers.js +2 -2
- package/dist/boot/stage-09-leader.d.ts +2 -0
- package/dist/boot/stage-09-leader.js +2 -1
- package/dist/boot/stage-10-http-server.d.ts +2 -0
- package/dist/boot/stage-10-http-server.js +2 -1
- package/dist/boot/workflow-orchestration.js +1 -1
- package/dist/config-catalog.js +1 -1
- package/dist/config-types.d.ts +3 -2
- package/dist/config.js +19 -7
- package/dist/deployment-governance.d.ts +8 -2
- package/dist/deployment-governance.js +9 -8
- package/dist/hooks/hook-runner.d.ts +2 -2
- package/dist/hooks/hook-runner.js +40 -26
- package/dist/http/durable-run-leg.js +1 -1
- package/dist/http/resume-legs.js +12 -4
- package/dist/http/routes/runs.d.ts +0 -1
- package/dist/http/routes/runs.js +36 -1
- package/dist/http/routes/sessions.js +12 -2
- package/dist/http/routes/tasks.js +13 -7
- package/dist/http/server.d.ts +5 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/instruction-selection.d.ts +34 -0
- package/dist/instruction-selection.js +23 -0
- package/dist/instruction-source-notice.d.ts +3 -3
- package/dist/memory-layer-legacy-lock.d.ts +3 -3
- package/dist/model-entry-headers.d.ts +5 -2
- package/dist/model-entry-headers.js +4 -4
- package/dist/model-unreachable-notice.d.ts +2 -2
- package/dist/observability/corrupt-read-seat.d.ts +24 -0
- package/dist/observability/corrupt-read-seat.js +24 -0
- package/dist/observability/fail-open.d.ts +25 -1
- package/dist/observability/fail-open.js +25 -1
- package/dist/observability/metrics.js +2 -1
- package/dist/observability/run-terminal.js +10 -0
- package/dist/operator-ask.d.ts +9 -8
- package/dist/operator-ask.js +9 -1
- package/dist/orchestration/workflow-agent-session-index.d.ts +12 -23
- package/dist/orchestration/workflow-agent-session-index.js +11 -50
- package/dist/orchestration/workflow-notify-journal.d.ts +11 -8
- package/dist/orchestration/workflow-notify-journal.js +20 -36
- package/dist/plugins/file-outcome-sink.d.ts +4 -1
- package/dist/plugins/file-outcome-sink.js +9 -3
- package/dist/plugins/file-run-store.js +4 -4
- package/dist/plugins/memory-run-store.d.ts +1 -1
- package/dist/plugins/memory-run-store.js +2 -1
- package/dist/plugins/pg-pool.js +15 -0
- package/dist/plugins/retention-store-sql.d.ts +1 -1
- package/dist/plugins/retention-store-sql.js +2 -0
- package/dist/plugins/run-store-sql.d.ts +1 -1
- package/dist/plugins/run-store-sql.js +3 -2
- package/dist/plugins/schema-indexes.js +2 -0
- package/dist/plugins/store-backend.d.ts +4 -0
- package/dist/plugins/store-backend.js +9 -0
- package/dist/plugins/store-contracts.d.ts +24 -0
- package/dist/plugins/store-contracts.js +10 -0
- package/dist/plugins/tidb-pool.js +17 -0
- package/dist/plugins/user-input-ledger-file.d.ts +35 -0
- package/dist/plugins/user-input-ledger-file.js +108 -0
- package/dist/plugins/user-input-ledger-sql.d.ts +54 -0
- package/dist/plugins/user-input-ledger-sql.js +129 -0
- package/dist/project-memory.d.ts +10 -2
- package/dist/project-memory.js +5 -2
- package/dist/run-local.d.ts +18 -5
- package/dist/run-local.js +24 -9
- package/dist/runs.d.ts +8 -1
- package/dist/runs.js +11 -5
- package/dist/runtime-governance.d.ts +20 -8
- package/dist/runtime-governance.js +7 -12
- package/dist/session-records-skipped-notice.d.ts +4 -3
- package/dist/task-settings.d.ts +0 -6
- package/dist/task-settings.js +0 -1
- package/dist/tool-approval.d.ts +8 -1
- package/dist/tool-approval.js +4 -1
- package/dist/trace/core-keyset-guard.d.ts +16 -1
- package/dist/trace/engine-notice-wire.d.ts +30 -35
- package/dist/trace/engine-notice-wire.js +23 -23
- package/dist/trace/ledger-sink.d.ts +4 -0
- package/dist/trace/ledger-sink.js +1 -1
- package/dist/trace/project.d.ts +11 -3
- package/dist/trace/project.js +6 -5
- package/dist/trace/self-minted-wire.d.ts +40 -0
- package/dist/trace/self-minted-wire.js +15 -0
- package/dist/trace/wire-projection-faces.d.ts +3 -3
- package/dist/trace/wire-projection-faces.js +4 -2
- package/dist/user-input-ledger.d.ts +349 -0
- package/dist/user-input-ledger.js +354 -0
- package/package.json +3 -3
|
@@ -33,16 +33,8 @@ export const ENGINE_NOTICE_WIRE_CODES = [
|
|
|
33
33
|
"permission.ask_released_by_mode",
|
|
34
34
|
"permission.read_deny_unapplied",
|
|
35
35
|
"permission.rule_store_unavailable",
|
|
36
|
+
"task.tool_turn_incomplete",
|
|
36
37
|
];
|
|
37
|
-
export const SERVER_NOTICE_AUDIENCE = {
|
|
38
|
-
"instructions.source_changed": "user",
|
|
39
|
-
"memory.layer_locked_legacy": "operator",
|
|
40
|
-
"session.records_skipped": "user",
|
|
41
|
-
"server.model_unreachable": "user",
|
|
42
|
-
};
|
|
43
|
-
export function isServerNoticeCode(code) {
|
|
44
|
-
return Object.hasOwn(SERVER_NOTICE_AUDIENCE, code);
|
|
45
|
-
}
|
|
46
38
|
const WIRE_CODES = new Set(ENGINE_NOTICE_WIRE_CODES);
|
|
47
39
|
export function isEngineNoticeWireCode(code) {
|
|
48
40
|
return WIRE_CODES.has(code);
|
|
@@ -107,11 +99,13 @@ export function engineNoticeEventData(notice, sessionId, nowMs) {
|
|
|
107
99
|
ts: nowMs,
|
|
108
100
|
};
|
|
109
101
|
}
|
|
102
|
+
const isThenableResult = (v) => typeof v === "object" && v !== null && typeof v.then === "function";
|
|
110
103
|
let nextLegId = 1;
|
|
111
104
|
export class EngineNoticeRouter {
|
|
112
105
|
legs = new Map();
|
|
113
|
-
registerLeg(sessionId,
|
|
114
|
-
const
|
|
106
|
+
registerLeg(sessionId, slots) {
|
|
107
|
+
const sinks = [...(slots.live ? [{ slot: "live", sink: slots.live }] : []), ...(slots.durable ? [{ slot: "durable", sink: slots.durable }] : [])];
|
|
108
|
+
const leg = { legId: nextLegId++, sinks };
|
|
115
109
|
const list = this.legs.get(sessionId) ?? [];
|
|
116
110
|
list.push(leg);
|
|
117
111
|
this.legs.set(sessionId, list);
|
|
@@ -131,7 +125,7 @@ export class EngineNoticeRouter {
|
|
|
131
125
|
};
|
|
132
126
|
}
|
|
133
127
|
register(sessionId, sink) {
|
|
134
|
-
return this.registerLeg(sessionId,
|
|
128
|
+
return this.registerLeg(sessionId, { durable: sink });
|
|
135
129
|
}
|
|
136
130
|
sinkCount(sessionId) {
|
|
137
131
|
const list = this.legs.get(sessionId);
|
|
@@ -141,27 +135,34 @@ export class EngineNoticeRouter {
|
|
|
141
135
|
return this.legs.get(sessionId)?.length ?? 0;
|
|
142
136
|
}
|
|
143
137
|
route(notice, nowMs = Date.now()) {
|
|
138
|
+
return this.fanOut(notice, nowMs).length;
|
|
139
|
+
}
|
|
140
|
+
async routeConfirmed(notice, nowMs = Date.now()) {
|
|
141
|
+
const outcomes = await Promise.all(this.fanOut(notice, nowMs));
|
|
142
|
+
return outcomes.filter((ok) => ok).length;
|
|
143
|
+
}
|
|
144
|
+
fanOut(notice, nowMs) {
|
|
144
145
|
if (!isEngineNoticeWireCode(notice.code))
|
|
145
|
-
return
|
|
146
|
+
return [];
|
|
146
147
|
const sessionId = engineNoticeSessionId(notice);
|
|
147
148
|
if (sessionId === undefined)
|
|
148
|
-
return
|
|
149
|
+
return [];
|
|
149
150
|
const list = this.legs.get(sessionId);
|
|
150
151
|
const leg = list && list.length > 0 ? list[list.length - 1] : undefined;
|
|
151
152
|
if (!leg || leg.sinks.length === 0)
|
|
152
|
-
return
|
|
153
|
+
return [];
|
|
153
154
|
const row = engineNoticeEventData(notice, sessionId, nowMs);
|
|
154
|
-
|
|
155
|
-
for (const sink of leg.sinks) {
|
|
155
|
+
const outcomes = [];
|
|
156
|
+
for (const { slot, sink } of leg.sinks) {
|
|
156
157
|
try {
|
|
157
|
-
sink(row);
|
|
158
|
-
|
|
158
|
+
const result = sink(row);
|
|
159
|
+
outcomes.push(isThenableResult(result) ? Promise.resolve(result).then((v) => slot === "durable" && v === true, () => false) : Promise.resolve(false));
|
|
159
160
|
}
|
|
160
161
|
catch {
|
|
161
162
|
recordFailOpen("server.engine-notice.wire-sink-threw", `code=${notice.code}`);
|
|
162
163
|
}
|
|
163
164
|
}
|
|
164
|
-
return
|
|
165
|
+
return outcomes;
|
|
165
166
|
}
|
|
166
167
|
}
|
|
167
168
|
export const defaultEngineNoticeRouter = new EngineNoticeRouter();
|
|
@@ -169,11 +170,10 @@ export function registerEngineNoticeLeg(opts) {
|
|
|
169
170
|
const { sessionId, live, durable } = opts;
|
|
170
171
|
if (sessionId === undefined || sessionId.length === 0)
|
|
171
172
|
return () => undefined;
|
|
172
|
-
|
|
173
|
-
if (sinks.length === 0)
|
|
173
|
+
if (live === undefined && durable === undefined)
|
|
174
174
|
return () => undefined;
|
|
175
175
|
const router = opts.router ?? defaultEngineNoticeRouter;
|
|
176
|
-
const unregister = router.registerLeg(sessionId,
|
|
176
|
+
const unregister = router.registerLeg(sessionId, { ...(live ? { live } : {}), ...(durable ? { durable } : {}) });
|
|
177
177
|
for (const notice of opts.pending ?? [])
|
|
178
178
|
router.route(notice);
|
|
179
179
|
return unregister;
|
|
@@ -2,6 +2,7 @@ import { type TerminalCause } from "@sema-agent/core";
|
|
|
2
2
|
import { brainStatusEventData } from "./project.js";
|
|
3
3
|
import { NotifiedKeys } from "../orchestration/workflow-completion-inbox.js";
|
|
4
4
|
import { type LedgerEventType, type ParkLedgerEventType } from "./ledger-events.js";
|
|
5
|
+
import type { InstructionsSegment } from "../instruction-selection.js";
|
|
5
6
|
/**
|
|
6
7
|
* LedgerSink — the SINGLE "stream event → durable runs-ledger" projection, shared by the background leg
|
|
7
8
|
* (runs.ts `runInBackground`) and the sync `/v1/tasks/stream` detach lane (server.ts, `x-detach-on-disconnect`).
|
|
@@ -115,5 +116,8 @@ export declare function createLedgerSink(opts: {
|
|
|
115
116
|
* 各传自己看得见的那个词(位①=流事件 `ev.type`,位②=账本行 `type`);拿不到类型的打点方
|
|
116
117
|
* (core 的 onActivity 第五席、resume 腿手动打点)省参,`kind` 诚实缺席(见 turn-activity.ts)。 */
|
|
117
118
|
onActivity?: (kind?: string, statusData?: Record<string, unknown>) => void;
|
|
119
|
+
/** S-961:这条腿的 `wiring_manifest.instructions` 段(腿的 `InstructionSelectionLeg.segment`)。**必填**:账本行与 live 帧是
|
|
120
|
+
* 同一条腿的两个载体,段必须来自同一只腿;在投帧那一刻读(core 推帧之前已 await 过 loader)。返回 `undefined` ⇒ 段缺席。 */
|
|
121
|
+
instructionsSegment: () => InstructionsSegment | undefined;
|
|
118
122
|
}): LedgerSink;
|
|
119
123
|
//# sourceMappingURL=ledger-sink.d.ts.map
|
|
@@ -97,7 +97,7 @@ export function createLedgerSink(opts) {
|
|
|
97
97
|
await append("workspace_changed", workspaceChangedEventData(ev));
|
|
98
98
|
break;
|
|
99
99
|
case "wiring_manifest":
|
|
100
|
-
await append("wiring_manifest", wiringManifestEventData(ev));
|
|
100
|
+
await append("wiring_manifest", wiringManifestEventData(ev, opts.instructionsSegment()));
|
|
101
101
|
break;
|
|
102
102
|
case "tool_roster_delta": {
|
|
103
103
|
const rosterDelta = toolRosterDeltaEventData(ev);
|
package/dist/trace/project.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ import type { RunEvent, RunRecord } from "../plugins/store-contracts.js";
|
|
|
28
28
|
import type { ModelUsageDelta, ModelUsageTracker, PromptManifestRecord } from "../budget.js";
|
|
29
29
|
import { type SemaProvenanceInput } from "./sema-provenance.js";
|
|
30
30
|
import type { LedgerEventType } from "./ledger-events.js";
|
|
31
|
+
import type { InstructionsSegment } from "../instruction-selection.js";
|
|
31
32
|
/** 账本写口的统一签名 —— `type` 是**闭集**(`ledger-events.ts`):新型必须先登记,否则调用点编译红
|
|
32
33
|
* (codex 交叉复审 F2:别名门 `ap("x")` 与动态首参让纯词法门结构性抓不全)。 */
|
|
33
34
|
type AppendFn = (type: LedgerEventType, data: unknown) => Promise<void>;
|
|
@@ -719,11 +720,18 @@ export declare function toolRosterDeltaEventData(ev: {
|
|
|
719
720
|
eventId?: unknown;
|
|
720
721
|
parentToolCallId?: unknown;
|
|
721
722
|
}): Record<string, unknown> | undefined;
|
|
723
|
+
/**
|
|
724
|
+
* 🔴 S-961(7.111.0)**第二参 `instructions` 必传**(值可以是 `undefined`):`wiring_manifest` 上唯一一段**本仓自铸**的段
|
|
725
|
+
* —— 这条腿的 project-memory loader 选中的指令文件链成员,`{ selected: string[] }`。它不在 core 的 manifest 里(core 不持有
|
|
726
|
+
* 选择规则),所以不从 `ev` 读:每条投帧的腿把**自己那只** `InstructionSelectionLeg.segment()` 递进来。必传而不是可选 ——
|
|
727
|
+
* 漏递的腿当场 tsc 红,而不是静默投出一个「缺席」(缺席在 wire 上是一句话:「这条腿没有关于指令文件的陈述」)。
|
|
728
|
+
* `undefined` ⇒ 段缺席;`{ selected: [] }` ⇒ 显式空(走了链、没选中)。登记:`wire-projection-faces.ts` 租户行 `minted`。
|
|
729
|
+
*/
|
|
722
730
|
export declare function wiringManifestEventData(ev: {
|
|
723
731
|
manifest?: unknown;
|
|
724
732
|
eventId?: unknown;
|
|
725
733
|
parentToolCallId?: unknown;
|
|
726
|
-
}): Record<string, unknown>;
|
|
734
|
+
}, instructions: InstructionsSegment | undefined): Record<string, unknown>;
|
|
727
735
|
/**
|
|
728
736
|
* `wiring_manifest` 的 **operator 投影**([ref] 件一)—— {@link wiringManifestEventData} 的租户形加上
|
|
729
737
|
* `governance` 段与 core 的真 `configFingerprint`。
|
|
@@ -759,7 +767,7 @@ export declare function wiringManifestOperatorEventData(ev: {
|
|
|
759
767
|
manifest?: unknown;
|
|
760
768
|
eventId?: unknown;
|
|
761
769
|
parentToolCallId?: unknown;
|
|
762
|
-
}): Record<string, unknown>;
|
|
770
|
+
}, instructions: InstructionsSegment | undefined): Record<string, unknown>;
|
|
763
771
|
/**
|
|
764
772
|
* `wiring_manifest` 的**唯一分叉点**(S-528)—— 两条知道调用方身份的 live 消费腿共用它:
|
|
765
773
|
* `/v1/tasks/stream` 的 SSE 帧,与 `POST /v1/tasks`(非流式)200 体里的 `wiringManifest` 起手回执。
|
|
@@ -780,7 +788,7 @@ export declare function wiringManifestFaceEventData(ev: {
|
|
|
780
788
|
manifest?: unknown;
|
|
781
789
|
eventId?: unknown;
|
|
782
790
|
parentToolCallId?: unknown;
|
|
783
|
-
}, operatorFace: boolean): Record<string, unknown>;
|
|
791
|
+
}, operatorFace: boolean, instructions: InstructionsSegment | undefined): Record<string, unknown>;
|
|
784
792
|
/**
|
|
785
793
|
* `human_input`(core 5.14.0 [ref] 新 `TaskEvent` 臂)—— 「谁把什么喂进了这条 run」的生命周期账本
|
|
786
794
|
* 帧(objective / 实时 steer / nextTurn / parked-steer 续跑 / wake 五个载体共用一个投影点)。
|
package/dist/trace/project.js
CHANGED
|
@@ -464,7 +464,7 @@ export function toolRosterDeltaEventData(ev) {
|
|
|
464
464
|
}
|
|
465
465
|
return { delta: ev.delta, ...identityFields(ev) };
|
|
466
466
|
}
|
|
467
|
-
export function wiringManifestEventData(ev) {
|
|
467
|
+
export function wiringManifestEventData(ev, instructions) {
|
|
468
468
|
const str = (v) => (typeof v === "string" && v.length > 0 ? v : undefined);
|
|
469
469
|
const bool = (v) => (typeof v === "boolean" ? v : undefined);
|
|
470
470
|
const num = (v) => (typeof v === "number" && Number.isFinite(v) ? v : undefined);
|
|
@@ -630,11 +630,12 @@ export function wiringManifestEventData(ev) {
|
|
|
630
630
|
...(lsp !== undefined ? { lsp } : {}),
|
|
631
631
|
...(hands !== undefined ? { hands } : {}),
|
|
632
632
|
...(writeProtection !== undefined ? { writeProtection } : {}),
|
|
633
|
+
...(instructions !== undefined ? { instructions: { selected: [...instructions.selected] } } : {}),
|
|
633
634
|
...identityFields(ev),
|
|
634
635
|
};
|
|
635
636
|
}
|
|
636
|
-
export function wiringManifestOperatorEventData(ev) {
|
|
637
|
-
const tenant = wiringManifestEventData(ev);
|
|
637
|
+
export function wiringManifestOperatorEventData(ev, instructions) {
|
|
638
|
+
const tenant = wiringManifestEventData(ev, instructions);
|
|
638
639
|
const str = (v) => (typeof v === "string" && v.length > 0 ? v : undefined);
|
|
639
640
|
const bool = (v) => (typeof v === "boolean" ? v : undefined);
|
|
640
641
|
const sec = (v) => (typeof v === "object" && v !== null && !Array.isArray(v) ? { ...v } : undefined);
|
|
@@ -678,8 +679,8 @@ export function wiringManifestOperatorEventData(ev) {
|
|
|
678
679
|
...(str(m.configFingerprint) !== undefined ? { configFingerprint: m.configFingerprint } : {}),
|
|
679
680
|
};
|
|
680
681
|
}
|
|
681
|
-
export function wiringManifestFaceEventData(ev, operatorFace) {
|
|
682
|
-
return operatorFace ? wiringManifestOperatorEventData(ev) : wiringManifestEventData(ev);
|
|
682
|
+
export function wiringManifestFaceEventData(ev, operatorFace, instructions) {
|
|
683
|
+
return operatorFace ? wiringManifestOperatorEventData(ev, instructions) : wiringManifestEventData(ev, instructions);
|
|
683
684
|
}
|
|
684
685
|
export function humanInputEventData(ev) {
|
|
685
686
|
const str = (v) => (typeof v === "string" && v.length > 0 ? v : undefined);
|
|
@@ -18,6 +18,46 @@ export declare const SELF_MINTED_WIRE: {
|
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
20
|
};
|
|
21
|
+
/**
|
|
22
|
+
* S-928(7.110.0):`engine_notice` `task.user_steer_undrained` 上**本仓铸**的那一臂。词表属主是 core(`USER_STEER_UNDRAINED_CAUSES`,
|
|
23
|
+
* `leg_end` 由引擎铸、逐字过境,不在本表);本表登记的是「这个值自哪一版起由本服务出现在 wire 上」。`satisfies Record<CrashedCause, …>`:
|
|
24
|
+
* core 删掉 `crashed` ⇒ `CrashedCause` 成 never ⇒ 本行编译红。
|
|
25
|
+
*/
|
|
26
|
+
readonly userSteerUndrainedServerCause: {
|
|
27
|
+
readonly at: "engine_notice task.user_steer_undrained detail.cause(本服务铸的臂;下一条同会话 run 开通告口那一拍)";
|
|
28
|
+
readonly members: {
|
|
29
|
+
crashed: {
|
|
30
|
+
attr: string;
|
|
31
|
+
since: string;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* S-961(7.111.0):`wiring_manifest.instructions.selected[]` 的成员值 = 指令文件链的成员(相对 cwd 的拼写)。属主是 `project-memory.ts`
|
|
37
|
+
* 的 `INSTRUCTION_FILE_CHAIN`([ref] 序:CLAUDE 族先、AGENTS 族后,首中即选)—— 链加 / 删一员 ⇒ 本行 `satisfies` 编译红,登记跟着动。
|
|
38
|
+
* 段本身(键)登记在 `wire-projection-faces.ts` 的 `wiring_manifest_tenant.minted`。
|
|
39
|
+
*/
|
|
40
|
+
readonly wiringInstructionsSelected: {
|
|
41
|
+
readonly at: "wiring_manifest instructions.selected[](本腿 loader 选中的链成员;段缺席 = 本腿无陈述)";
|
|
42
|
+
readonly members: {
|
|
43
|
+
"CLAUDE.md": {
|
|
44
|
+
attr: string;
|
|
45
|
+
since: string;
|
|
46
|
+
};
|
|
47
|
+
".claude/CLAUDE.md": {
|
|
48
|
+
attr: string;
|
|
49
|
+
since: string;
|
|
50
|
+
};
|
|
51
|
+
"AGENTS.md": {
|
|
52
|
+
attr: string;
|
|
53
|
+
since: string;
|
|
54
|
+
};
|
|
55
|
+
".claude/AGENTS.md": {
|
|
56
|
+
attr: string;
|
|
57
|
+
since: string;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
};
|
|
21
61
|
/**
|
|
22
62
|
* 会话所有者自助抹除面的**已分类拒** → HTTP 状态(S-930 起与 operator 面 `POST /v1/memory/erase` 同一只映射;`since` 记的是**本面**
|
|
23
63
|
* 自哪一版起这样答 —— 7.107.0 及以前本面只认前两只,其余落 500 `internal.error`)。
|
|
@@ -6,6 +6,21 @@ export const SELF_MINTED_WIRE = {
|
|
|
6
6
|
shutdown_before_park: { attr: "-", since: "7.108.0" },
|
|
7
7
|
},
|
|
8
8
|
},
|
|
9
|
+
userSteerUndrainedServerCause: {
|
|
10
|
+
at: "engine_notice task.user_steer_undrained detail.cause(本服务铸的臂;下一条同会话 run 开通告口那一拍)",
|
|
11
|
+
members: {
|
|
12
|
+
crashed: { attr: "-", since: "7.110.0" },
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
wiringInstructionsSelected: {
|
|
16
|
+
at: "wiring_manifest instructions.selected[](本腿 loader 选中的链成员;段缺席 = 本腿无陈述)",
|
|
17
|
+
members: {
|
|
18
|
+
"CLAUDE.md": { attr: "-", since: "7.111.0" },
|
|
19
|
+
".claude/CLAUDE.md": { attr: "-", since: "7.111.0" },
|
|
20
|
+
"AGENTS.md": { attr: "-", since: "7.111.0" },
|
|
21
|
+
".claude/AGENTS.md": { attr: "-", since: "7.111.0" },
|
|
22
|
+
},
|
|
23
|
+
},
|
|
9
24
|
sessionMemoryEraseStatus: {
|
|
10
25
|
at: "POST /v1/sessions/:id/memory/erase(已分类拒 errorCode → HTTP 状态)",
|
|
11
26
|
members: {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* `NotificationExcluded` 直接读成本表这一行的 `excluded`,于是「哪几个键有意不上 wire」全仓**只有一个写者**。
|
|
17
17
|
* 旧形是两个:守卫文件一簿、`test/wire-whitelist-exhaustiveness.test.ts` 的 `KnownExcluded` 一簿,那份门注
|
|
18
18
|
* 自己写着「两处必须同时改」—— 而「必须同时改」正是 [ref] 要下线的东西(对账门不算替代,单写者才算)。
|
|
19
|
-
* 本表是纯数据、无行为(唯一的派生是 `wiring_manifest_operator`
|
|
19
|
+
* 本表是纯数据、无行为(唯一的派生是 `wiring_manifest_operator` 行的两只取值器:`excluded` = 租户行减具名常量,S-724;`minted` = 租户行,S-961),
|
|
20
20
|
* 被守卫文件以 `typeof import(...)` 的**类型查询**读取(编译期擦除,零运行期边)。
|
|
21
21
|
*
|
|
22
22
|
* ## 门在哪里
|
|
@@ -170,14 +170,14 @@ export declare const WIRE_PROJECTION_FACES: {
|
|
|
170
170
|
readonly coreType: `WiringManifest & ${string}`;
|
|
171
171
|
readonly excluded: readonly ["governance", "configFingerprint", "autoConsolidation", "readDeny", "peerPresence", "permissionMode"];
|
|
172
172
|
readonly unwrapped: readonly ["manifest"];
|
|
173
|
-
readonly minted: readonly [];
|
|
173
|
+
readonly minted: readonly ["instructions"];
|
|
174
174
|
};
|
|
175
175
|
readonly wiring_manifest_operator: {
|
|
176
176
|
readonly projector: "wiringManifestOperatorEventData";
|
|
177
177
|
readonly coreType: `WiringManifest & ${string}`;
|
|
178
178
|
readonly excluded: readonly string[];
|
|
179
179
|
readonly unwrapped: readonly ["manifest"];
|
|
180
|
-
readonly minted: readonly [];
|
|
180
|
+
readonly minted: readonly string[];
|
|
181
181
|
};
|
|
182
182
|
readonly engine_notice: {
|
|
183
183
|
readonly projector: "engineNoticeEventData";
|
|
@@ -42,7 +42,7 @@ export const WIRE_PROJECTION_FACES = {
|
|
|
42
42
|
coreType: `WiringManifest & ${arm("wiring_manifest")}`,
|
|
43
43
|
excluded: ["governance", "configFingerprint", "autoConsolidation", "readDeny", "peerPresence", "permissionMode"],
|
|
44
44
|
unwrapped: ["manifest"],
|
|
45
|
-
minted: [],
|
|
45
|
+
minted: ["instructions"],
|
|
46
46
|
},
|
|
47
47
|
wiring_manifest_operator: {
|
|
48
48
|
projector: "wiringManifestOperatorEventData",
|
|
@@ -51,7 +51,9 @@ export const WIRE_PROJECTION_FACES = {
|
|
|
51
51
|
return withoutSections(WIRE_PROJECTION_FACES.wiring_manifest_tenant.excluded, WIRING_MANIFEST_OPERATOR_ONLY_SECTIONS);
|
|
52
52
|
},
|
|
53
53
|
unwrapped: ["manifest"],
|
|
54
|
-
minted
|
|
54
|
+
get minted() {
|
|
55
|
+
return WIRE_PROJECTION_FACES.wiring_manifest_tenant.minted;
|
|
56
|
+
},
|
|
55
57
|
},
|
|
56
58
|
engine_notice: { projector: "engineNoticeEventData", coreType: "EngineNotice", excluded: [], minted: ["ts"] },
|
|
57
59
|
memory_import_report: { projector: "buildImportReportWire", coreType: "MemoryImportReport", excluded: [], minted: [] },
|