@akagilnc/pi-workflow-roles 0.1.3682 → 0.1.3700
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 +519 -561
- package/dist/analyst-gate-cycles-read.js +11 -1
- package/dist/archivist-record-entry.js +1 -1
- package/dist/audit-escalation.js +4 -3
- package/dist/auditor-dossier-tool.js +12 -0
- package/dist/doctor-role.js +2 -1
- package/dist/dossier-resolution.js +0 -35
- package/dist/gatekeeper-pass-envelope.js +39 -34
- package/dist/gatekeeper-role.js +70 -76
- package/dist/judge-auditor.js +5 -24
- package/dist/judge-role.js +39 -41
- package/dist/notary-contracts.js +2 -17
- package/dist/notary-role.js +3 -6
- package/dist/package-contracts/judge-output.js +0 -2
- package/dist/package-contracts/terminating-tools.js +2 -2
- package/dist/public-cli/inspector-run.js +16 -2
- package/dist/public-cli/instruction-seat-run.js +14 -2
- package/dist/public-cli/main.js +198 -213
- package/dist/public-cli/notary-run.js +23 -20
- package/dist/public-cli/post-admission.js +30 -23
- package/dist/public-cli/run-lifecycle.js +6 -14
- package/dist/public-role-summons.js +38 -11
- package/dist/readable-gate-item.js +16 -0
- package/dist/role-runtime.js +28 -3
- package/dist/submission-correctable-error.js +2 -1
- package/dist/submission-errors.js +26 -8
- package/dist/submission-ledger.js +7 -23
- package/extensions/role-runtime.ts +0 -2
- package/package.json +1 -1
- package/souls/countersign.md +3 -1
- package/souls/notary.md +5 -0
- package/src/acp-host/production-host.ts +1 -4
- package/src/acp-host/role-envelope.ts +1 -1
- package/src/analyst-gate-cycles-read.ts +10 -1
- package/src/archivist-record-entry.ts +7 -3
- package/src/audit-escalation.ts +4 -3
- package/src/auditor-dossier-tool.ts +21 -0
- package/src/doctor-role.ts +2 -1
- package/src/dossier-resolution.ts +0 -39
- package/src/gatekeeper-pass-envelope.ts +59 -43
- package/src/gatekeeper-role.ts +114 -112
- package/src/host-contracts.ts +3 -3
- package/src/judge-auditor.ts +5 -43
- package/src/judge-role.ts +41 -53
- package/src/notary-contracts.ts +8 -27
- package/src/notary-role.ts +2 -7
- package/src/package-contracts/judge-output.ts +0 -1
- package/src/package-contracts/terminating-tools.ts +2 -2
- package/src/public-cli/inspector-run.ts +32 -2
- package/src/public-cli/instruction-seat-run.ts +30 -2
- package/src/public-cli/notary-run.ts +48 -16
- package/src/public-cli/post-admission.ts +31 -37
- package/src/public-cli/run-lifecycle.ts +6 -17
- package/src/public-role-summons.ts +76 -12
- package/src/readable-gate-item.ts +20 -0
- package/src/role-runtime.ts +34 -9
- package/src/submission-correctable-error.ts +2 -0
- package/src/submission-errors.ts +28 -8
- package/src/submission-ledger.ts +8 -32
- package/dist/shape-unreadable-failure.js +0 -34
package/dist/notary-contracts.js
CHANGED
|
@@ -36,26 +36,11 @@ const notaryOutputSchema = withInfrastructureFailureDeclaration(
|
|
|
36
36
|
function isRecord(value) {
|
|
37
37
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
38
38
|
}
|
|
39
|
-
function asStringArray(value) {
|
|
40
|
-
if (!Array.isArray(value)) return [];
|
|
41
|
-
return value.filter((item) => typeof item === "string");
|
|
42
|
-
}
|
|
43
39
|
function projectLawfulNotaryOutput(value) {
|
|
44
40
|
if (!isRecord(value)) return void 0;
|
|
45
41
|
const status = typeof value.status === "string" ? value.status : void 0;
|
|
46
|
-
if (status === "bounce") {
|
|
47
|
-
|
|
48
|
-
if (clone.disposition === void 0) clone.disposition = "rewrite";
|
|
49
|
-
if (!Array.isArray(clone.findings)) clone.findings = asStringArray(clone.findings);
|
|
50
|
-
return clone;
|
|
51
|
-
}
|
|
52
|
-
if (status === "pass") {
|
|
53
|
-
const clone = structuredClone(value);
|
|
54
|
-
if (!Array.isArray(clone.findings)) clone.findings = asStringArray(clone.findings);
|
|
55
|
-
return clone;
|
|
56
|
-
}
|
|
57
|
-
if (status === "escalate") {
|
|
58
|
-
return structuredClone(value);
|
|
42
|
+
if (status === "bounce" || status === "pass" || status === "escalate") {
|
|
43
|
+
return value;
|
|
59
44
|
}
|
|
60
45
|
return void 0;
|
|
61
46
|
}
|
package/dist/notary-role.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Ticket flag register/read/session bind is envelope-owned (ADR 0018 / #582).
|
|
5
5
|
* This module keeps evidence assembly + projection only.
|
|
6
6
|
*/
|
|
7
|
-
import { NOTARY_ACCEPTED_TEXT, NOTARY_OUTPUT_TOOL_NAME, NOTARY_SOURCE_RUN_FLAG, NOTARY_TICKET_FLAG, notaryOutputSchema,
|
|
7
|
+
import { NOTARY_ACCEPTED_TEXT, NOTARY_OUTPUT_TOOL_NAME, NOTARY_SOURCE_RUN_FLAG, NOTARY_TICKET_FLAG, notaryOutputSchema, } from "./notary-contracts.js";
|
|
8
8
|
export { NOTARY_ACCEPTED_TEXT, NOTARY_OUTPUT_TOOL_NAME, NOTARY_SOURCE_RUN_FLAG, NOTARY_TICKET_FLAG, };
|
|
9
9
|
/** Optional ticket flag: absent/blank = unbound; non-empty invalid = honest fail. */
|
|
10
10
|
export function readNotaryTicketFlag(flag) {
|
|
@@ -95,14 +95,11 @@ export function createNotaryRoleRuntime(pi, dependencies, host) {
|
|
|
95
95
|
if (activation === undefined) {
|
|
96
96
|
throw new Error("符宝郎未激活");
|
|
97
97
|
}
|
|
98
|
-
//
|
|
99
|
-
// (第 0 条 / ADR 0055): lawful pass/bounce/escalate projected; else params as-is.
|
|
98
|
+
// #753: handler only records — params as submitted, no findings/disposition rewrite.
|
|
100
99
|
// #541 infra declaration + sole-final barrier are ledger-owned (#575).
|
|
101
|
-
const lawful = projectLawfulNotaryOutput(parameters);
|
|
102
|
-
const details = lawful ?? retainNotarySubmission(parameters);
|
|
103
100
|
return {
|
|
104
101
|
content: [{ type: "text", text: NOTARY_ACCEPTED_TEXT }],
|
|
105
|
-
details,
|
|
102
|
+
details: parameters,
|
|
106
103
|
terminate: true,
|
|
107
104
|
};
|
|
108
105
|
},
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
const JUDGE_OUTPUT_TOOL_NAME = "ak_judge_output";
|
|
2
2
|
const JUDGE_ACCEPTED_TEXT = "\u5927\u7406\u5BFA\u56DE\u6267\u5DF2\u63A5\u53D7";
|
|
3
|
-
const JUDGE_ACCEPTED_AUDIT_NO_RECEIPT_TEXT = "\u5927\u7406\u5BFA\u56DE\u6267\u5DF2\u63A5\u53D7\uFF1B\u5BA1\u8BA1\u65E0\u56DE\u6267";
|
|
4
3
|
function validateAcceptedJudgeDetails(verdict) {
|
|
5
4
|
if (verdict === null || typeof verdict !== "object" || Array.isArray(verdict)) throw new Error("Judge verdict has no execution discriminator");
|
|
6
5
|
let judgeStatus;
|
|
@@ -18,7 +17,6 @@ function validateAcceptedJudgeDetails(verdict) {
|
|
|
18
17
|
throw new Error("Judge verdict has no execution discriminator");
|
|
19
18
|
}
|
|
20
19
|
export {
|
|
21
|
-
JUDGE_ACCEPTED_AUDIT_NO_RECEIPT_TEXT,
|
|
22
20
|
JUDGE_ACCEPTED_TEXT,
|
|
23
21
|
JUDGE_OUTPUT_TOOL_NAME,
|
|
24
22
|
validateAcceptedJudgeDetails
|
|
@@ -116,10 +116,10 @@ export function validateAcceptedDetails(toolName, details) {
|
|
|
116
116
|
[COLLECTOR_OUTPUT_TOOL]: [],
|
|
117
117
|
[DOCTOR_OUTPUT_TOOL_NAME]: ["completed", "refused"],
|
|
118
118
|
[MERGER_OUTPUT_TOOL_NAME]: ["completed", "escalate"],
|
|
119
|
-
[NOTARY_OUTPUT_TOOL_NAME]: ["pass", "bounce"],
|
|
119
|
+
[NOTARY_OUTPUT_TOOL_NAME]: ["pass", "bounce", "escalate"],
|
|
120
120
|
[COUNTERSIGN_OUTPUT_TOOL_NAME]: ["converged", "continue", "escalate"],
|
|
121
121
|
[GLEANER_LEFT_OUTPUT_TOOL_NAME]: ["completed"],
|
|
122
|
-
[INSPECTOR_OUTPUT_TOOL_NAME]: ["pass", "bounce"],
|
|
122
|
+
[INSPECTOR_OUTPUT_TOOL_NAME]: ["pass", "bounce", "escalate"],
|
|
123
123
|
[GATEKEEPER_OUTPUT_TOOL_NAME]: ["dispatch", "pass"],
|
|
124
124
|
[NAVIGATOR_OUTPUT_TOOL_NAME]: ["advice"],
|
|
125
125
|
[AUDITOR_OUTPUT_TOOL_NAME]: ["pass", "bounce", "escalate"],
|
|
@@ -30,11 +30,18 @@ export async function runPublicInspector(argv, env, io, parseInspectorArgv) {
|
|
|
30
30
|
// #771: no mechanical ticket match against instruction text; parent-run path only.
|
|
31
31
|
// No bare catch→fresh: lookup/resume failures surface; only true absence mints new.
|
|
32
32
|
const projectRoot = parsed.project ?? env.cwd;
|
|
33
|
+
// #747: parentRunPath is the pure 卷宗指针 path only — never reask/materials text.
|
|
34
|
+
// #753: gate re-ask / new-submission pointers ride summons.instruction on resume.
|
|
33
35
|
const parentRunPath = parentRunPathFromGatePointerInstruction(parsed.instruction);
|
|
34
36
|
if (parentRunPath !== undefined) {
|
|
37
|
+
const resumeInstruction = env.reviewReask ?? env.gateReviewInstruction;
|
|
35
38
|
const summons = {
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
...(resumeInstruction === undefined
|
|
40
|
+
? {
|
|
41
|
+
instruction: parsed.instruction,
|
|
42
|
+
instructionEmpty: parsed.instruction.trim() === "",
|
|
43
|
+
}
|
|
44
|
+
: { instruction: resumeInstruction, instructionEmpty: false }),
|
|
38
45
|
attachmentPaths: parsed.attachmentPaths,
|
|
39
46
|
};
|
|
40
47
|
const resumed = await tryResumeSameTicketSeatRun({
|
|
@@ -48,6 +55,13 @@ export async function runPublicInspector(argv, env, io, parseInspectorArgv) {
|
|
|
48
55
|
});
|
|
49
56
|
if (resumed !== undefined)
|
|
50
57
|
return resumed;
|
|
58
|
+
// Reask without a prior same-parent run cannot deliver the plain-language ask
|
|
59
|
+
// on a fresh mint without inventing a second prompt path — fail loud (#753).
|
|
60
|
+
// gateReviewInstruction alone is resume-only; fresh mint keeps argv 卷宗指针.
|
|
61
|
+
if (env.reviewReask !== undefined) {
|
|
62
|
+
presentStructuralRejection(new CliUsageError("inspector review reask requires a prior same-parent run to resume"), io);
|
|
63
|
+
return { exitCode: 2 };
|
|
64
|
+
}
|
|
51
65
|
}
|
|
52
66
|
let admitted;
|
|
53
67
|
try {
|
|
@@ -150,9 +150,15 @@ export async function runPublicInstructionSeat(argv, env, io, role, parseArgv) {
|
|
|
150
150
|
return { exitCode: 2 };
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
|
+
// #756: auditor reask / new-submission pointers ride summons.instruction on resume.
|
|
154
|
+
const resumeInstruction = env.reviewReask ?? env.gateReviewInstruction;
|
|
153
155
|
const summons = {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
+
...(resumeInstruction === undefined
|
|
157
|
+
? {
|
|
158
|
+
instruction: parsed.instruction,
|
|
159
|
+
instructionEmpty: parsed.instruction.trim() === "",
|
|
160
|
+
}
|
|
161
|
+
: { instruction: resumeInstruction, instructionEmpty: false }),
|
|
156
162
|
attachmentPaths: parsed.attachmentPaths,
|
|
157
163
|
};
|
|
158
164
|
if (role === "auditor" && auditorSourceRun !== undefined) {
|
|
@@ -171,6 +177,12 @@ export async function runPublicInstructionSeat(argv, env, io, role, parseArgv) {
|
|
|
171
177
|
});
|
|
172
178
|
if (resumed !== undefined)
|
|
173
179
|
return resumed;
|
|
180
|
+
// Reask without a prior same-parent run cannot deliver the plain-language ask
|
|
181
|
+
// on a fresh mint without inventing a second prompt path — fail loud (#753 / #756).
|
|
182
|
+
if (env.reviewReask !== undefined) {
|
|
183
|
+
presentStructuralRejection(new CliUsageError("auditor review reask requires a prior same-parent run to resume"), io);
|
|
184
|
+
return { exitCode: 2 };
|
|
185
|
+
}
|
|
174
186
|
}
|
|
175
187
|
let admitted;
|
|
176
188
|
try {
|