@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.
Files changed (60) hide show
  1. package/dist/acp-host/production-host.js +519 -561
  2. package/dist/analyst-gate-cycles-read.js +11 -1
  3. package/dist/archivist-record-entry.js +1 -1
  4. package/dist/audit-escalation.js +4 -3
  5. package/dist/auditor-dossier-tool.js +12 -0
  6. package/dist/doctor-role.js +2 -1
  7. package/dist/dossier-resolution.js +0 -35
  8. package/dist/gatekeeper-pass-envelope.js +39 -34
  9. package/dist/gatekeeper-role.js +70 -76
  10. package/dist/judge-auditor.js +5 -24
  11. package/dist/judge-role.js +39 -41
  12. package/dist/notary-contracts.js +2 -17
  13. package/dist/notary-role.js +3 -6
  14. package/dist/package-contracts/judge-output.js +0 -2
  15. package/dist/package-contracts/terminating-tools.js +2 -2
  16. package/dist/public-cli/inspector-run.js +16 -2
  17. package/dist/public-cli/instruction-seat-run.js +14 -2
  18. package/dist/public-cli/main.js +198 -213
  19. package/dist/public-cli/notary-run.js +23 -20
  20. package/dist/public-cli/post-admission.js +30 -23
  21. package/dist/public-cli/run-lifecycle.js +6 -14
  22. package/dist/public-role-summons.js +38 -11
  23. package/dist/readable-gate-item.js +16 -0
  24. package/dist/role-runtime.js +28 -3
  25. package/dist/submission-correctable-error.js +2 -1
  26. package/dist/submission-errors.js +26 -8
  27. package/dist/submission-ledger.js +7 -23
  28. package/extensions/role-runtime.ts +0 -2
  29. package/package.json +1 -1
  30. package/souls/countersign.md +3 -1
  31. package/souls/notary.md +5 -0
  32. package/src/acp-host/production-host.ts +1 -4
  33. package/src/acp-host/role-envelope.ts +1 -1
  34. package/src/analyst-gate-cycles-read.ts +10 -1
  35. package/src/archivist-record-entry.ts +7 -3
  36. package/src/audit-escalation.ts +4 -3
  37. package/src/auditor-dossier-tool.ts +21 -0
  38. package/src/doctor-role.ts +2 -1
  39. package/src/dossier-resolution.ts +0 -39
  40. package/src/gatekeeper-pass-envelope.ts +59 -43
  41. package/src/gatekeeper-role.ts +114 -112
  42. package/src/host-contracts.ts +3 -3
  43. package/src/judge-auditor.ts +5 -43
  44. package/src/judge-role.ts +41 -53
  45. package/src/notary-contracts.ts +8 -27
  46. package/src/notary-role.ts +2 -7
  47. package/src/package-contracts/judge-output.ts +0 -1
  48. package/src/package-contracts/terminating-tools.ts +2 -2
  49. package/src/public-cli/inspector-run.ts +32 -2
  50. package/src/public-cli/instruction-seat-run.ts +30 -2
  51. package/src/public-cli/notary-run.ts +48 -16
  52. package/src/public-cli/post-admission.ts +31 -37
  53. package/src/public-cli/run-lifecycle.ts +6 -17
  54. package/src/public-role-summons.ts +76 -12
  55. package/src/readable-gate-item.ts +20 -0
  56. package/src/role-runtime.ts +34 -9
  57. package/src/submission-correctable-error.ts +2 -0
  58. package/src/submission-errors.ts +28 -8
  59. package/src/submission-ledger.ts +8 -32
  60. package/dist/shape-unreadable-failure.js +0 -34
@@ -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
- const clone = structuredClone(value);
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
  }
@@ -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, projectLawfulNotaryOutput, retainNotarySubmission, } from "./notary-contracts.js";
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
- // Unique submission + terminate only. Shape is not an admission gate
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
- instruction: parsed.instruction,
37
- instructionEmpty: parsed.instruction.trim() === "",
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
- instruction: parsed.instruction,
155
- instructionEmpty: parsed.instruction.trim() === "",
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 {