@akagilnc/pi-workflow-roles 0.1.5066 → 0.1.5079
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/dist/acp-host/production-host.js +82 -83
- package/dist/compliance-transport.js +3 -2
- package/dist/countersign-contracts.js +2 -2
- package/dist/gatekeeper-role.js +12 -19
- package/dist/headless-host/production-host.js +82 -83
- package/dist/inspector-contracts.js +5 -2
- package/dist/migrate-book-topology.js +32 -20
- package/dist/open-tool-schema.js +4 -1
- package/dist/package-contracts/judge-output.js +2 -2
- package/dist/package-contracts/terminating-infrastructure.js +4 -1
- package/dist/public-cli/main.js +33 -20
- package/dist/review-submission.js +19 -8
- package/dist/submission-errors.js +17 -0
- package/dist/submission-ledger.js +18 -6
- package/package.json +1 -1
- package/souls/countersign.md +2 -2
- package/souls/ticket-law.md +1 -1
- package/src/compliance-transport.ts +3 -2
- package/src/countersign-contracts.ts +2 -2
- package/src/countersign-role.ts +3 -7
- package/src/gatekeeper-role.ts +14 -18
- package/src/inspector-contracts.ts +5 -2
- package/src/judge-role.ts +13 -21
- package/src/open-tool-schema.ts +9 -4
- package/src/package-contracts/judge-output.ts +2 -4
- package/src/package-contracts/terminating-infrastructure.ts +9 -4
- package/src/review-submission.ts +24 -10
- package/src/role-runtime.ts +9 -25
- package/src/submission-errors.ts +16 -0
- package/src/submission-gate.ts +2 -1
- package/src/submission-ledger.ts +23 -11
- package/src/worker-role.ts +4 -6
|
@@ -2165,6 +2165,15 @@ ${serializeReceipt(result.submission)}`;
|
|
|
2165
2165
|
}
|
|
2166
2166
|
return `\u95E8\u4E0B\u7701 ${result.status}\uFF08${result.stage}\uFF09\uFF1A${result.reason}`;
|
|
2167
2167
|
}
|
|
2168
|
+
function unreadableDiscriminatorNotice(field, received) {
|
|
2169
|
+
if (received === void 0) return `\u8BFB\u4E0D\u51FA ${field}`;
|
|
2170
|
+
return `\u8BFB\u4E0D\u51FA ${field}\uFF1A${readableGateItem(received)}`;
|
|
2171
|
+
}
|
|
2172
|
+
function receivedDiscriminator(receipt, field) {
|
|
2173
|
+
if (receipt === null || typeof receipt !== "object" || Array.isArray(receipt)) return void 0;
|
|
2174
|
+
if (!Object.hasOwn(receipt, field)) return void 0;
|
|
2175
|
+
return receipt[field];
|
|
2176
|
+
}
|
|
2168
2177
|
var GatekeeperDecisionError, WorkerCommitReminderError, WorkerPrefixReminderError, WorkerUnfinishedReasonReminderError, ParentQueueReaskError;
|
|
2169
2178
|
var init_submission_errors = __esm({
|
|
2170
2179
|
"src/submission-errors.ts"() {
|
|
@@ -3141,7 +3150,10 @@ function openToolObjectFromUnion(schema) {
|
|
|
3141
3150
|
}
|
|
3142
3151
|
function openToolObject(schema) {
|
|
3143
3152
|
const object = Type2.Object(
|
|
3144
|
-
Object.fromEntries(Object.entries(schema.properties).map(([name, declaration]) => [
|
|
3153
|
+
Object.fromEntries(Object.entries(schema.properties).map(([name, declaration]) => [
|
|
3154
|
+
name,
|
|
3155
|
+
Type2.Optional(described(name, declaration))
|
|
3156
|
+
])),
|
|
3145
3157
|
{ additionalProperties: true }
|
|
3146
3158
|
);
|
|
3147
3159
|
object.required = [];
|
|
@@ -3167,7 +3179,9 @@ function withTerminatingOutputDeclarations(schema) {
|
|
|
3167
3179
|
[INFRASTRUCTURE_FAILURE_DECLARATION_KEY]: infrastructureFailureDeclarationSchema.properties[INFRASTRUCTURE_FAILURE_DECLARATION_KEY]
|
|
3168
3180
|
};
|
|
3169
3181
|
const object = Type3.Object(properties, { additionalProperties: true });
|
|
3170
|
-
|
|
3182
|
+
const incoming = schema.required;
|
|
3183
|
+
const preserved = Array.isArray(incoming) ? incoming.filter((key) => typeof key === "string" && Object.hasOwn(properties, key)) : [];
|
|
3184
|
+
object.required = preserved;
|
|
3171
3185
|
return object;
|
|
3172
3186
|
}
|
|
3173
3187
|
function isInfrastructureFailureDeclaration(parameters) {
|
|
@@ -3325,51 +3339,41 @@ var init_navigator_output = __esm({
|
|
|
3325
3339
|
|
|
3326
3340
|
// src/review-submission.ts
|
|
3327
3341
|
import { Type as Type6 } from "typebox";
|
|
3328
|
-
var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, reviewSubmissionSchema;
|
|
3342
|
+
var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewSubmissionSchema;
|
|
3329
3343
|
var init_review_submission = __esm({
|
|
3330
3344
|
"src/review-submission.ts"() {
|
|
3331
3345
|
"use strict";
|
|
3332
|
-
init_open_tool_schema();
|
|
3333
3346
|
init_terminating_infrastructure();
|
|
3334
3347
|
REVIEW_SUBMISSION_OUTPUT_TOOL_NAME = "ak_submission_output";
|
|
3348
|
+
REVIEW_QUEUE_WORDS = ["converged", "continue", "escalate"];
|
|
3349
|
+
REVIEW_QUEUE_STATUSES = new Set(REVIEW_QUEUE_WORDS);
|
|
3335
3350
|
reviewSubmissionSchema = withTerminatingOutputDeclarations(
|
|
3336
|
-
|
|
3337
|
-
Type6.
|
|
3338
|
-
|
|
3339
|
-
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
})
|
|
3351
|
-
|
|
3351
|
+
Type6.Object({
|
|
3352
|
+
status: Type6.Union(
|
|
3353
|
+
[
|
|
3354
|
+
Type6.Literal(REVIEW_QUEUE_WORDS[0]),
|
|
3355
|
+
Type6.Literal(REVIEW_QUEUE_WORDS[1]),
|
|
3356
|
+
Type6.Literal(REVIEW_QUEUE_WORDS[2])
|
|
3357
|
+
],
|
|
3358
|
+
{
|
|
3359
|
+
description: "\u5BA1\u6838\u961F\u5217\u4E09\u6001\u679A\u4E3E\uFF0C\u5FC5\u586B\u3002\u5BA1\u6838\u5E2D\u4ECD\u80FD\u4EA4\u5377\u800C\u5B8C\u6210\u5BA1\u6838\u6240\u9700\u7684\u5916\u90E8\u4F9D\u8D56\u53D1\u751F\u771F\u5B9E\u57FA\u7840\u8BBE\u65BD\u5931\u8D25\u65F6\uFF0Cstatus \u53D6 escalate\uFF0C\u7EC6\u8282\u5199\u5165 infrastructureFailure\u3002\u4E0D\u5F97\u7701\u7565 status\uFF0C\u4E0D\u5F97\u7528\u53E6\u4E24\u4E2A\u679A\u4E3E\u503C\u5145\u5F53\u653E\u884C\u6216\u5C01\u9A73\u3002\u5305\u4FA7\u4E0D\u56E0\u683C\u5F0F\u62D2\u6536\u3002"
|
|
3360
|
+
}
|
|
3361
|
+
),
|
|
3362
|
+
findings: Type6.Optional(Type6.Unknown({ description: "\u5BA1\u6838\u53D1\u73B0\uFF0C\u539F\u6837\u7559\u5B58" })),
|
|
3363
|
+
reason: Type6.Optional(Type6.Unknown({ description: "\u4E0A\u5448\u7406\u7531" })),
|
|
3364
|
+
violations: Type6.Optional(Type6.Unknown({ description: "\u8FDD\u89C4\u6761\u76EE" })),
|
|
3365
|
+
conflicts: Type6.Optional(Type6.Unknown({ description: "\u5F85\u51B3\u51B2\u7A81" })),
|
|
3366
|
+
fix: Type6.Optional(Type6.Unknown({ description: "continue \u65F6\u7684\u8865\u6551\u8BF4\u660E\uFF1B\u53EF\u5199 summary \u6458\u8981\uFF0C\u5176\u4F59\u5185\u5BB9\u539F\u6837\u7559\u5B58" })),
|
|
3367
|
+
classes: Type6.Optional(Type6.Unknown({ description: "\u5DF2\u88C1\u51B3 finding \u7C7B\uFF1B\u53EF\u8BF4\u660E name\u3001owner\u3001boundary\u3001disposition\uFF0C\u539F\u6837\u7559\u5B58" })),
|
|
3368
|
+
note: Type6.Optional(Type6.Unknown({ description: "\u88C1\u51B3\u9644\u6CE8" })),
|
|
3369
|
+
evidence: Type6.Optional(Type6.Unknown({ description: "\u7559\u5B58\u8BC1\u636E" })),
|
|
3370
|
+
decisionGate: Type6.Optional(Type6.Unknown({ description: "\u9700\u4EBA\u6743\u5A01\u5904\u7F6E\u7684\u95EE\u9898\u4E0E\u9009\u9879\uFF1B\u53EF\u8BF4\u660E question\u3001options\uFF0C\u539F\u6837\u7559\u5B58" }))
|
|
3371
|
+
}, { additionalProperties: true })
|
|
3352
3372
|
);
|
|
3353
3373
|
}
|
|
3354
3374
|
});
|
|
3355
3375
|
|
|
3356
3376
|
// src/package-contracts/judge-output.ts
|
|
3357
|
-
function validateAcceptedJudgeDetails(verdict) {
|
|
3358
|
-
if (verdict === null || typeof verdict !== "object" || Array.isArray(verdict)) throw new Error("Judge verdict has no execution discriminator");
|
|
3359
|
-
let status;
|
|
3360
|
-
try {
|
|
3361
|
-
status = verdict.status;
|
|
3362
|
-
} catch {
|
|
3363
|
-
throw new Error("Judge verdict has no execution discriminator");
|
|
3364
|
-
}
|
|
3365
|
-
if (typeof status !== "string") {
|
|
3366
|
-
throw new Error("Judge verdict has no execution discriminator");
|
|
3367
|
-
}
|
|
3368
|
-
if (["converged", "continue", "escalate"].includes(status)) {
|
|
3369
|
-
return verdict;
|
|
3370
|
-
}
|
|
3371
|
-
throw new Error("Judge verdict has no execution discriminator");
|
|
3372
|
-
}
|
|
3373
3377
|
var JUDGE_OUTPUT_TOOL_NAME;
|
|
3374
3378
|
var init_judge_output = __esm({
|
|
3375
3379
|
"src/package-contracts/judge-output.ts"() {
|
|
@@ -4935,10 +4939,7 @@ function readRecord(value) {
|
|
|
4935
4939
|
return value;
|
|
4936
4940
|
}
|
|
4937
4941
|
function reviewQueueStatus(status) {
|
|
4938
|
-
|
|
4939
|
-
if (status === "continue") return "continue";
|
|
4940
|
-
if (status === "escalate") return "escalate";
|
|
4941
|
-
return void 0;
|
|
4942
|
+
return REVIEW_QUEUE_STATUSES.has(status) ? status : void 0;
|
|
4942
4943
|
}
|
|
4943
4944
|
function projectOfficerDecision(officer, decision, fallbackStatus) {
|
|
4944
4945
|
const receipt = retainedReceipt(decision);
|
|
@@ -4951,7 +4952,7 @@ function projectOfficerDecision(officer, decision, fallbackStatus) {
|
|
|
4951
4952
|
if (queueStatus === "continue" || queueStatus === "escalate") {
|
|
4952
4953
|
return { status: queueStatus, officer, receipt };
|
|
4953
4954
|
}
|
|
4954
|
-
return { status: "needs_reask", officer, receipt };
|
|
4955
|
+
return { status: "needs_reask", officer, receipt, receivedStatus: status };
|
|
4955
4956
|
}
|
|
4956
4957
|
function thisCourtOfficerPayloads(terminal) {
|
|
4957
4958
|
const outcome = terminal?.roleOutcome;
|
|
@@ -5037,18 +5038,20 @@ function projectOfficerTerminal(officer, summoned) {
|
|
|
5037
5038
|
summoned
|
|
5038
5039
|
);
|
|
5039
5040
|
}
|
|
5041
|
+
const receipt = thisCourt.length > 0 ? thisCourt[thisCourt.length - 1] : retainedReceipt(outcome);
|
|
5040
5042
|
return withOfficerRunId(
|
|
5041
5043
|
{
|
|
5042
5044
|
status: "needs_reask",
|
|
5043
5045
|
officer,
|
|
5044
5046
|
// This-court receipt only (#879).
|
|
5045
|
-
receipt
|
|
5047
|
+
receipt,
|
|
5048
|
+
receivedStatus: receivedDiscriminator(receipt, "status")
|
|
5046
5049
|
},
|
|
5047
5050
|
summoned
|
|
5048
5051
|
);
|
|
5049
5052
|
}
|
|
5050
|
-
function officerConclusionReask(
|
|
5051
|
-
return
|
|
5053
|
+
function officerConclusionReask(received) {
|
|
5054
|
+
return unreadableDiscriminatorNotice("status", received);
|
|
5052
5055
|
}
|
|
5053
5056
|
async function projectGatekeeperRun(options) {
|
|
5054
5057
|
const officer = gateOfficerForSubject(options.subject);
|
|
@@ -5084,7 +5087,7 @@ async function projectGatekeeperRun(options) {
|
|
|
5084
5087
|
summoned
|
|
5085
5088
|
};
|
|
5086
5089
|
}
|
|
5087
|
-
var GATE_OFFICER_BY_SUBJECT, GATEKEEPER_TOOL_SPEC
|
|
5090
|
+
var GATE_OFFICER_BY_SUBJECT, GATEKEEPER_TOOL_SPEC;
|
|
5088
5091
|
var init_gatekeeper_role = __esm({
|
|
5089
5092
|
"src/gatekeeper-role.ts"() {
|
|
5090
5093
|
"use strict";
|
|
@@ -5110,7 +5113,6 @@ var init_gatekeeper_role = __esm({
|
|
|
5110
5113
|
promptSnippet: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
|
|
5111
5114
|
parameters: gatekeeperOutputSchema
|
|
5112
5115
|
};
|
|
5113
|
-
OFFICER_CONCLUSION_REASK = "\u4E0A\u6B21\u4EA4\u5377\u7684 status \u4E0D\u662F converged\u3001continue\u3001escalate \u4E09\u6001\u4E4B\u4E00\u3002\u8BF7\u91CD\u65B0\u8F93\u51FA\uFF0Cstatus \u5199\u660E\u5176\u4E00\uFF1Bcontinue \u6216 escalate \u7684\u8BDD\u5C31\u662F\u7ED9\u5BF9\u65B9\u770B\u7684\u539F\u6587\u3002";
|
|
5114
5116
|
}
|
|
5115
5117
|
});
|
|
5116
5118
|
|
|
@@ -6427,7 +6429,7 @@ async function runComplianceAudit(options) {
|
|
|
6427
6429
|
const summoned = await summon(subject, runDirectory, options.signal, reask, submission);
|
|
6428
6430
|
const decision = await projectAuditorTerminal(summoned);
|
|
6429
6431
|
if (decision.status === "received") {
|
|
6430
|
-
reask =
|
|
6432
|
+
reask = officerConclusionReask(receivedDiscriminator(decision.reply, "status"));
|
|
6431
6433
|
continue;
|
|
6432
6434
|
}
|
|
6433
6435
|
return decision;
|
|
@@ -6439,6 +6441,7 @@ var init_compliance_transport = __esm({
|
|
|
6439
6441
|
"use strict";
|
|
6440
6442
|
init_auditor_dossier_tool();
|
|
6441
6443
|
init_gatekeeper_role();
|
|
6444
|
+
init_submission_errors();
|
|
6442
6445
|
init_terminal();
|
|
6443
6446
|
init_readable_gate_item();
|
|
6444
6447
|
AUDITOR_DOSSIER_PROMPT = "\u5377\u5B97\u6307\u9488\uFF1A";
|
|
@@ -13919,17 +13922,20 @@ function createSubmissionLedgerHost(host, outputTools, failInfrastructure2 = (er
|
|
|
13919
13922
|
});
|
|
13920
13923
|
let result;
|
|
13921
13924
|
try {
|
|
13922
|
-
|
|
13923
|
-
|
|
13924
|
-
|
|
13925
|
-
|
|
13926
|
-
|
|
13927
|
-
|
|
13928
|
-
|
|
13929
|
-
|
|
13930
|
-
|
|
13931
|
-
|
|
13932
|
-
|
|
13925
|
+
const reviewEscalate = tool.name === REVIEW_SUBMISSION_OUTPUT_TOOL_NAME && infrastructureFailureDiagnostic(params) !== void 0 && params !== null && typeof params === "object" && !Array.isArray(params) && params.status === "escalate";
|
|
13926
|
+
if (!reviewEscalate) {
|
|
13927
|
+
failOnInfrastructureFailureDeclaration(
|
|
13928
|
+
params,
|
|
13929
|
+
{
|
|
13930
|
+
failInfrastructure(error, ctx) {
|
|
13931
|
+
failInfrastructure2(error, ctx);
|
|
13932
|
+
}
|
|
13933
|
+
},
|
|
13934
|
+
context,
|
|
13935
|
+
toolCallId,
|
|
13936
|
+
tool.bounceInfrastructureDeclaration
|
|
13937
|
+
);
|
|
13938
|
+
}
|
|
13933
13939
|
result = await tool.execute(toolCallId, params, signal, update, context);
|
|
13934
13940
|
} catch (error) {
|
|
13935
13941
|
if (isCorrectableExecuteError(error)) {
|
|
@@ -14008,6 +14014,7 @@ var init_submission_ledger = __esm({
|
|
|
14008
14014
|
init_run_lifecycle();
|
|
14009
14015
|
init_submission_correctable_error();
|
|
14010
14016
|
init_terminating_infrastructure();
|
|
14017
|
+
init_review_submission();
|
|
14011
14018
|
}
|
|
14012
14019
|
});
|
|
14013
14020
|
|
|
@@ -23094,7 +23101,7 @@ async function requireSubmissionGate(options) {
|
|
|
23094
23101
|
};
|
|
23095
23102
|
}
|
|
23096
23103
|
if (gatekeeper.status === "needs_reask") {
|
|
23097
|
-
reask = officerConclusionReask(
|
|
23104
|
+
reask = officerConclusionReask(gatekeeper.receivedStatus);
|
|
23098
23105
|
continue;
|
|
23099
23106
|
}
|
|
23100
23107
|
if (gatekeeper.status === "transport_failure") {
|
|
@@ -25691,12 +25698,7 @@ init_submission_errors();
|
|
|
25691
25698
|
init_audit_escalation();
|
|
25692
25699
|
init_readable_gate_item();
|
|
25693
25700
|
init_judge_output();
|
|
25694
|
-
var JUDGE_QUEUE_STATUSES = /* @__PURE__ */ new Set(["converged", "continue", "escalate"]);
|
|
25695
|
-
var JUDGE_STATUS_REASK = "status \u4E0D\u662F converged\u3001continue\u3001escalate \u4E09\u6001\u4E4B\u4E00\u3002\u8BF7\u91CD\u65B0\u4EA4\u5377\uFF0Cstatus \u5199\u660E\u5176\u4E00\u3002";
|
|
25696
25701
|
var judgeVerdictSchema = reviewSubmissionSchema;
|
|
25697
|
-
function validateVerdict(verdict) {
|
|
25698
|
-
return validateAcceptedJudgeDetails(verdict);
|
|
25699
|
-
}
|
|
25700
25702
|
function createJudgeRoleRuntime(pi, dependencies, hostActions) {
|
|
25701
25703
|
let soul;
|
|
25702
25704
|
let lifecycleRegistered = false;
|
|
@@ -25715,18 +25717,17 @@ function createJudgeRoleRuntime(pi, dependencies, hostActions) {
|
|
|
25715
25717
|
async execute(toolCallId, parameters, signal, _onUpdate, ctx) {
|
|
25716
25718
|
if (soul === void 0) throw new Error("\u5927\u7406\u5BFA\u804C\u5206\u672A\u88C5\u8F7D");
|
|
25717
25719
|
const rawStatus = parameters !== null && typeof parameters === "object" && !Array.isArray(parameters) && typeof parameters.status === "string" ? parameters.status : void 0;
|
|
25718
|
-
if (rawStatus === void 0 || !
|
|
25719
|
-
|
|
25720
|
+
if (rawStatus === void 0 || !REVIEW_QUEUE_STATUSES.has(rawStatus)) {
|
|
25721
|
+
const received = parameters !== null && typeof parameters === "object" && !Array.isArray(parameters) ? parameters.status : void 0;
|
|
25722
|
+
throw new ParentQueueReaskError(unreadableDiscriminatorNotice("status", received));
|
|
25720
25723
|
}
|
|
25721
25724
|
if (rawStatus === "escalate") {
|
|
25722
|
-
const verdict2 = validateVerdict(parameters);
|
|
25723
25725
|
return {
|
|
25724
25726
|
content: [],
|
|
25725
|
-
details:
|
|
25727
|
+
details: parameters,
|
|
25726
25728
|
terminate: true
|
|
25727
25729
|
};
|
|
25728
25730
|
}
|
|
25729
|
-
const verdict = validateVerdict(parameters);
|
|
25730
25731
|
let draftPass;
|
|
25731
25732
|
try {
|
|
25732
25733
|
const obtainedDraftPass = await pi.requireSubmissionGate({
|
|
@@ -25742,7 +25743,7 @@ function createJudgeRoleRuntime(pi, dependencies, hostActions) {
|
|
|
25742
25743
|
if (draftPass?.status === "continue") {
|
|
25743
25744
|
return {
|
|
25744
25745
|
content: [{ type: "text", text: readableGateItem(draftPass.receipt) }],
|
|
25745
|
-
details:
|
|
25746
|
+
details: parameters,
|
|
25746
25747
|
terminate: false
|
|
25747
25748
|
};
|
|
25748
25749
|
}
|
|
@@ -25759,18 +25760,18 @@ function createJudgeRoleRuntime(pi, dependencies, hostActions) {
|
|
|
25759
25760
|
if (compliancePass?.status === "continue") {
|
|
25760
25761
|
return {
|
|
25761
25762
|
content: [draftPass, compliancePass].filter((pass) => pass !== void 0).map((pass) => ({ type: "text", text: readableGateItem(pass.receipt) })),
|
|
25762
|
-
details:
|
|
25763
|
+
details: parameters,
|
|
25763
25764
|
terminate: false
|
|
25764
25765
|
};
|
|
25765
25766
|
}
|
|
25766
25767
|
return {
|
|
25767
25768
|
content: [draftPass, compliancePass].filter((pass) => pass !== void 0).map((pass) => ({ type: "text", text: readableGateItem(pass.receipt) })),
|
|
25768
|
-
details:
|
|
25769
|
+
details: parameters,
|
|
25769
25770
|
terminate: true
|
|
25770
25771
|
};
|
|
25771
25772
|
} catch (error) {
|
|
25772
25773
|
if (error instanceof GatekeeperDecisionError && error.result.status === "escalate") {
|
|
25773
|
-
return projectGatekeeperEscalation(error.result,
|
|
25774
|
+
return projectGatekeeperEscalation(error.result, parameters);
|
|
25774
25775
|
}
|
|
25775
25776
|
throw error;
|
|
25776
25777
|
}
|
|
@@ -26192,14 +26193,13 @@ var WORKER_ROUTING_STATUSES = /* @__PURE__ */ new Set([
|
|
|
26192
26193
|
"partially_completed",
|
|
26193
26194
|
"unfinished"
|
|
26194
26195
|
]);
|
|
26195
|
-
var WORKER_STATUS_REASK = "status \u4E0D\u662F planned\u3001completed\u3001refused\u3001partially_completed\u3001unfinished \u4E4B\u4E00\u3002\u8BF7\u91CD\u65B0\u4EA4\u5377\uFF0Cstatus \u5199\u660E\u5176\u4E00\u3002";
|
|
26196
26196
|
function workerStatusOf(output) {
|
|
26197
26197
|
return isRecord18(output) && typeof output.status === "string" ? output.status : void 0;
|
|
26198
26198
|
}
|
|
26199
26199
|
function requireReadableWorkerStatus(output) {
|
|
26200
26200
|
const status = workerStatusOf(output);
|
|
26201
26201
|
if (status === void 0 || !WORKER_ROUTING_STATUSES.has(status)) {
|
|
26202
|
-
throw new ParentQueueReaskError(
|
|
26202
|
+
throw new ParentQueueReaskError(unreadableDiscriminatorNotice("status", isRecord18(output) ? output.status : void 0));
|
|
26203
26203
|
}
|
|
26204
26204
|
return status;
|
|
26205
26205
|
}
|
|
@@ -26542,6 +26542,7 @@ ${JSON.stringify(admitted)}
|
|
|
26542
26542
|
init_navigator_invocation_identity();
|
|
26543
26543
|
init_gatekeeper_role();
|
|
26544
26544
|
init_submission_errors();
|
|
26545
|
+
init_review_submission();
|
|
26545
26546
|
init_doctor_contracts();
|
|
26546
26547
|
init_doctor_evidence();
|
|
26547
26548
|
init_engine_detour();
|
|
@@ -26984,7 +26985,6 @@ function readDiaristRunCoordinates(ctx) {
|
|
|
26984
26985
|
}
|
|
26985
26986
|
var DIARIST_BOUNDS_REASK = "\u8FB9\u754C\u65E0\u6CD5\u4F7F\u7528\u3002\u8BF7\u91CD\u4EA4 sessions\uFF1A\u6BCF\u5377 path + ranges\uFF0C\u6BCF\u7AEF\u4EE5\u539F\u751F id \u6216\u672C\u8F6E\u884C\u53F7\u4E8C\u9009\u4E00\u6307\u540D\u3002";
|
|
26986
26987
|
var DIARIST_ROUTING_STATUSES = /* @__PURE__ */ new Set(["completed", "escalate"]);
|
|
26987
|
-
var DIARIST_STATUS_REASK = "status \u4E0D\u662F completed\u3001escalate \u4E4B\u4E00\u3002\u8BF7\u91CD\u65B0\u4EA4\u5377\uFF0Cstatus \u5199\u660E\u5176\u4E00\u3002";
|
|
26988
26988
|
function createDiaristRoleRuntime(roleHost, dependencies) {
|
|
26989
26989
|
return createFiledOfficerRuntime(
|
|
26990
26990
|
roleHost,
|
|
@@ -26996,7 +26996,7 @@ function createDiaristRoleRuntime(roleHost, dependencies) {
|
|
|
26996
26996
|
const submitted = parameters !== null && typeof parameters === "object" && !Array.isArray(parameters) ? parameters : void 0;
|
|
26997
26997
|
const status = submitted?.status;
|
|
26998
26998
|
if (typeof status !== "string" || !DIARIST_ROUTING_STATUSES.has(status)) {
|
|
26999
|
-
throw new ParentQueueReaskError(
|
|
26999
|
+
throw new ParentQueueReaskError(unreadableDiscriminatorNotice("status", submitted?.status));
|
|
27000
27000
|
}
|
|
27001
27001
|
if (status === "escalate") return parameters;
|
|
27002
27002
|
const assertion = readDiaristTicketAssertion(submitted);
|
|
@@ -27036,10 +27036,7 @@ ${error.message}`
|
|
|
27036
27036
|
dependencies
|
|
27037
27037
|
);
|
|
27038
27038
|
}
|
|
27039
|
-
var COUNTERSIGN_QUEUE_STATUSES = /* @__PURE__ */ new Set(["converged", "continue", "escalate"]);
|
|
27040
|
-
var COUNTERSIGN_STATUS_REASK = "status \u4E0D\u662F converged\u3001continue\u3001escalate \u4E09\u6001\u4E4B\u4E00\u3002\u8BF7\u91CD\u65B0\u4EA4\u5377\uFF0Cstatus \u5199\u660E\u5176\u4E00\u3002";
|
|
27041
27039
|
var SECRETARIAT_QUEUE_STATUSES = /* @__PURE__ */ new Set(["converged", "escalate"]);
|
|
27042
|
-
var SECRETARIAT_STATUS_REASK = "secretariatStatus \u4E0D\u662F converged\u3001escalate \u4E4B\u4E00\u3002\u8BF7\u91CD\u65B0\u4EA4\u5377\uFF0Cstatus \u5199\u660E\u5176\u4E00\u3002";
|
|
27043
27040
|
function createSecretariatRoleRuntime(roleHost, dependencies, hostActions) {
|
|
27044
27041
|
const beforeAccept = hostActions !== void 0 ? async ({ toolCallId, parameters, signal, ctx }) => {
|
|
27045
27042
|
if (roleHost.requireSubmissionGate === void 0) {
|
|
@@ -27050,7 +27047,9 @@ function createSecretariatRoleRuntime(roleHost, dependencies, hostActions) {
|
|
|
27050
27047
|
const record4 = parameters !== null && typeof parameters === "object" && !Array.isArray(parameters) ? parameters : void 0;
|
|
27051
27048
|
const status = record4 !== void 0 && typeof record4.secretariatStatus === "string" ? record4.secretariatStatus : void 0;
|
|
27052
27049
|
if (status === void 0 || !SECRETARIAT_QUEUE_STATUSES.has(status)) {
|
|
27053
|
-
throw new ParentQueueReaskError(
|
|
27050
|
+
throw new ParentQueueReaskError(
|
|
27051
|
+
unreadableDiscriminatorNotice("secretariatStatus", record4?.secretariatStatus)
|
|
27052
|
+
);
|
|
27054
27053
|
}
|
|
27055
27054
|
if (status === "escalate") {
|
|
27056
27055
|
return void 0;
|
|
@@ -27144,8 +27143,8 @@ function createCountersignRoleRuntime(roleHost, dependencies, hostActions) {
|
|
|
27144
27143
|
const beforeAccept = hostActions !== void 0 ? async ({ toolCallId, parameters, signal, ctx }) => {
|
|
27145
27144
|
const record4 = parameters !== null && typeof parameters === "object" && !Array.isArray(parameters) ? parameters : void 0;
|
|
27146
27145
|
const status = record4 !== void 0 && typeof record4.status === "string" ? record4.status : void 0;
|
|
27147
|
-
if (status === void 0 || !
|
|
27148
|
-
throw new ParentQueueReaskError(
|
|
27146
|
+
if (status === void 0 || !REVIEW_QUEUE_STATUSES.has(status)) {
|
|
27147
|
+
throw new ParentQueueReaskError(unreadableDiscriminatorNotice("status", record4?.status));
|
|
27149
27148
|
}
|
|
27150
27149
|
if (status === "escalate") {
|
|
27151
27150
|
return void 0;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { auditorRunDirectory } from "./auditor-dossier-tool.js";
|
|
2
|
-
import {
|
|
2
|
+
import { officerConclusionReask } from "./gatekeeper-role.js";
|
|
3
|
+
import { receivedDiscriminator } from "./submission-errors.js";
|
|
3
4
|
import { coalesceSubmissionRows } from "./public-cli/terminal.js";
|
|
4
5
|
import { readableGateItem } from "./readable-gate-item.js";
|
|
5
6
|
const AUDITOR_DOSSIER_PROMPT = "\u5377\u5B97\u6307\u9488\uFF1A";
|
|
@@ -122,7 +123,7 @@ async function runComplianceAudit(options) {
|
|
|
122
123
|
const summoned = await summon(subject, runDirectory, options.signal, reask, submission);
|
|
123
124
|
const decision = await projectAuditorTerminal(summoned);
|
|
124
125
|
if (decision.status === "received") {
|
|
125
|
-
reask =
|
|
126
|
+
reask = officerConclusionReask(receivedDiscriminator(decision.reply, "status"));
|
|
126
127
|
continue;
|
|
127
128
|
}
|
|
128
129
|
return decision;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { REVIEW_SUBMISSION_OUTPUT_TOOL_NAME } from "./review-submission.js";
|
|
1
|
+
import { REVIEW_QUEUE_STATUSES, REVIEW_SUBMISSION_OUTPUT_TOOL_NAME } from "./review-submission.js";
|
|
2
2
|
const COUNTERSIGN_OUTPUT_TOOL_NAME = REVIEW_SUBMISSION_OUTPUT_TOOL_NAME;
|
|
3
3
|
function validateRecordedCountersignOutput(verdict) {
|
|
4
4
|
if (verdict === null || typeof verdict !== "object" || Array.isArray(verdict)) {
|
|
@@ -13,7 +13,7 @@ function validateRecordedCountersignOutput(verdict) {
|
|
|
13
13
|
if (typeof status !== "string") {
|
|
14
14
|
throw new Error("Countersign verdict has no execution discriminator");
|
|
15
15
|
}
|
|
16
|
-
if (
|
|
16
|
+
if (REVIEW_QUEUE_STATUSES.has(status)) {
|
|
17
17
|
return verdict;
|
|
18
18
|
}
|
|
19
19
|
throw new Error("Countersign verdict has no execution discriminator");
|
package/dist/gatekeeper-role.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { auditorRunDirectory } from "./auditor-dossier-tool.js";
|
|
2
2
|
import { packagedGateStageLabel } from "./packaged-role-registry.js";
|
|
3
|
-
import { GatekeeperDecisionError } from "./submission-errors.js";
|
|
3
|
+
import { GatekeeperDecisionError, receivedDiscriminator, unreadableDiscriminatorNotice } from "./submission-errors.js";
|
|
4
4
|
import { INSPECTOR_OUTPUT_TOOL_NAME } from "./inspector-contracts.js";
|
|
5
|
-
import { REVIEW_SUBMISSION_OUTPUT_TOOL_NAME } from "./review-submission.js";
|
|
5
|
+
import { REVIEW_QUEUE_STATUSES, REVIEW_SUBMISSION_OUTPUT_TOOL_NAME } from "./review-submission.js";
|
|
6
6
|
import { GATEKEEPER_OUTPUT_TOOL_NAME, gatekeeperDecisionSchema, gatekeeperOutputSchema, } from "./package-contracts/gatekeeper-output.js";
|
|
7
7
|
import { runIdFromRunDirectory } from "./run-terminal-artifacts.js";
|
|
8
8
|
export const INSPECTOR_OUTPUT_TOOL = INSPECTOR_OUTPUT_TOOL_NAME;
|
|
@@ -73,15 +73,9 @@ function readRecord(value) {
|
|
|
73
73
|
* `fallbackStatus` is the terminal outcome.status when the receipt body has no status key
|
|
74
74
|
* (keeps missing-args sentinel intact as the receipt).
|
|
75
75
|
*/
|
|
76
|
-
/** Map the shared review verdict onto the gate queue words (#1028). */
|
|
76
|
+
/** Map the shared review verdict onto the gate queue words (#1028 / #1055). */
|
|
77
77
|
function reviewQueueStatus(status) {
|
|
78
|
-
|
|
79
|
-
return "converged";
|
|
80
|
-
if (status === "continue")
|
|
81
|
-
return "continue";
|
|
82
|
-
if (status === "escalate")
|
|
83
|
-
return "escalate";
|
|
84
|
-
return undefined;
|
|
78
|
+
return REVIEW_QUEUE_STATUSES.has(status) ? status : undefined;
|
|
85
79
|
}
|
|
86
80
|
function projectOfficerDecision(officer, decision, fallbackStatus) {
|
|
87
81
|
const receipt = retainedReceipt(decision);
|
|
@@ -95,7 +89,7 @@ function projectOfficerDecision(officer, decision, fallbackStatus) {
|
|
|
95
89
|
if (queueStatus === "continue" || queueStatus === "escalate") {
|
|
96
90
|
return { status: queueStatus, officer, receipt };
|
|
97
91
|
}
|
|
98
|
-
return { status: "needs_reask", officer, receipt };
|
|
92
|
+
return { status: "needs_reask", officer, receipt, receivedStatus: status };
|
|
99
93
|
}
|
|
100
94
|
/**
|
|
101
95
|
* This-court officer payloads for the parent return path (#879).
|
|
@@ -209,22 +203,21 @@ function projectOfficerTerminal(officer, summoned) {
|
|
|
209
203
|
// lacking its own status, never substitute for a missing receipt.
|
|
210
204
|
return withOfficerRunId(projectOfficerPayloads(officer, thisCourt, outcome.status), summoned);
|
|
211
205
|
}
|
|
206
|
+
const receipt = thisCourt.length > 0 ? thisCourt[thisCourt.length - 1] : retainedReceipt(outcome);
|
|
212
207
|
return withOfficerRunId({
|
|
213
208
|
status: "needs_reask",
|
|
214
209
|
officer,
|
|
215
210
|
// This-court receipt only (#879).
|
|
216
|
-
receipt
|
|
211
|
+
receipt,
|
|
212
|
+
receivedStatus: receivedDiscriminator(receipt, "status"),
|
|
217
213
|
}, summoned);
|
|
218
214
|
}
|
|
219
215
|
/**
|
|
220
|
-
*
|
|
221
|
-
*
|
|
222
|
-
* Every review officer uses the same `status` field and three queue words (#1028).
|
|
216
|
+
* Officer conclusion was missing or not a queue word (#1055).
|
|
217
|
+
* `received` is the status value only, not the rest of the receipt.
|
|
223
218
|
*/
|
|
224
|
-
export
|
|
225
|
-
|
|
226
|
-
export function officerConclusionReask(officer) {
|
|
227
|
-
return OFFICER_CONCLUSION_REASK;
|
|
219
|
+
export function officerConclusionReask(received) {
|
|
220
|
+
return unreadableDiscriminatorNotice("status", received);
|
|
228
221
|
}
|
|
229
222
|
/**
|
|
230
223
|
* Summon (via injected seam) + project. Default summonGateOfficer drive lives
|