@akagilnc/pi-workflow-roles 0.1.5375 → 0.1.5382

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 (43) hide show
  1. package/dist/acp-host/production-host.js +479 -425
  2. package/dist/collector-tool-schemas.js +18 -0
  3. package/dist/diarist-contracts.js +26 -0
  4. package/dist/filed-submission.js +28 -0
  5. package/dist/gatekeeper-role.js +6 -10
  6. package/dist/gleaner-left-contracts.js +16 -0
  7. package/dist/headless-host/production-host.js +495 -441
  8. package/dist/judge-role.js +8 -16
  9. package/dist/migrate-book-topology.js +262 -7
  10. package/dist/package-contracts/reviewer-output.js +16 -0
  11. package/dist/package-contracts/worker-output.js +18 -2
  12. package/dist/public-cli/instruction-seat-run.js +9 -12
  13. package/dist/public-cli/main.js +283 -26
  14. package/dist/role-submission-declarations.js +131 -0
  15. package/dist/secretariat-contracts.js +23 -1
  16. package/dist/submission-gate.js +5 -8
  17. package/package.json +1 -1
  18. package/src/auditor-role.ts +2 -8
  19. package/src/collector-role.ts +5 -28
  20. package/src/countersign-role.ts +2 -7
  21. package/src/diarist-contracts.ts +37 -0
  22. package/src/diarist-role.ts +4 -44
  23. package/src/doctor-role.ts +16 -11
  24. package/src/filed-submission.ts +44 -0
  25. package/src/gatekeeper-role.ts +6 -14
  26. package/src/gleaner-left-contracts.ts +26 -1
  27. package/src/gleaner-left-role.ts +4 -32
  28. package/src/inspector-role.ts +2 -7
  29. package/src/judge-role.ts +12 -24
  30. package/src/merger-role.ts +5 -8
  31. package/src/navigator-role.ts +2 -8
  32. package/src/notary-role.ts +5 -20
  33. package/src/package-contracts/reviewer-output.ts +25 -0
  34. package/src/package-contracts/worker-output.ts +43 -5
  35. package/src/public-cli/instruction-seat-run.ts +10 -13
  36. package/src/reviewer-role.ts +7 -35
  37. package/src/role-runtime.ts +7 -35
  38. package/src/role-submission-declarations.ts +143 -0
  39. package/src/secretariat-contracts.ts +35 -0
  40. package/src/secretariat-role.ts +4 -40
  41. package/src/submission-gate.ts +8 -9
  42. package/src/worker-role.ts +62 -79
  43. package/src/worker-submission-gates.ts +3 -0
@@ -1,5 +1,7 @@
1
1
  import {} from "./host-contracts.js";
2
- import { reviewSubmissionSchema } from "./review-submission.js";
2
+ import { REVIEW_QUEUE_STATUSES, reviewSubmissionSchema } from "./review-submission.js";
3
+ import { registerFiledSubmissionTool } from "./filed-submission.js";
4
+ import { roleSubmissionDeclaration } from "./role-submission-declarations.js";
3
5
  import {} from "./gatekeeper-role.js";
4
6
  import { JUDGE_OUTPUT_TOOL_NAME, } from "./package-contracts/judge-output.js";
5
7
  export { JUDGE_OUTPUT_TOOL_NAME };
@@ -14,10 +16,11 @@ export async function runJudgeGates(input) {
14
16
  if (await input.gateAlreadyConverged(subject))
15
17
  continue;
16
18
  const pass = await input.runGate(subject);
17
- const status = pass?.status;
18
- if (pass === undefined || (status !== "converged" && status !== "continue" && status !== "escalate")) {
19
+ const received = pass?.status;
20
+ if (pass === undefined || typeof received !== "string" || !REVIEW_QUEUE_STATUSES.has(received)) {
19
21
  throw new Error("judge gate returned no conclusion");
20
22
  }
23
+ const status = received;
21
24
  passes.push({
22
25
  subject,
23
26
  status,
@@ -46,19 +49,8 @@ export function createJudgeRoleRuntime(pi, dependencies) {
46
49
  throw new Error("Judge soul is empty");
47
50
  if (!lifecycleRegistered) {
48
51
  lifecycleRegistered = true;
49
- pi.registerTool({
50
- name: JUDGE_OUTPUT_TOOL_NAME,
51
- label: "大理寺输出",
52
- description: "提交大理寺终局判词;交卷调用结束后,由公开调用接缝按判词状态执行适用审核。",
53
- promptSnippet: "提交大理寺终局判词",
54
- parameters: judgeVerdictSchema,
55
- async execute(toolCallId, parameters, signal, _onUpdate, ctx) {
56
- if (soul === undefined)
57
- throw new Error("大理寺职分未装载");
58
- // ADR 0003: record the original receipt and end the tool call first.
59
- // The public seam reads status and chooses the next route.
60
- return { content: [], details: parameters, terminate: true };
61
- },
52
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("judge"), {
53
+ readyError: () => (soul === undefined ? "大理寺职分未装载" : undefined),
62
54
  });
63
55
  pi.on("before_agent_start", (event) => {
64
56
  if (soul === undefined)
@@ -8204,11 +8204,26 @@ var init_judge_output = __esm({
8204
8204
  });
8205
8205
 
8206
8206
  // src/package-contracts/reviewer-output.ts
8207
- var REVIEWER_OUTPUT_TOOL_NAME;
8207
+ var REVIEWER_OUTPUT_TOOL_NAME, REVIEWER_AMENDMENTS_DESCRIPTION, REVIEWER_STATUS_DESCRIPTION, reviewerOutputObject, reviewerOutputSchema;
8208
8208
  var init_reviewer_output = __esm({
8209
8209
  "src/package-contracts/reviewer-output.ts"() {
8210
8210
  "use strict";
8211
+ init_build();
8212
+ init_open_tool_schema();
8213
+ init_terminating_infrastructure();
8211
8214
  REVIEWER_OUTPUT_TOOL_NAME = "ak_reviewer_output";
8215
+ REVIEWER_AMENDMENTS_DESCRIPTION = "\u5DF2\u8FD0\u884C lens \u7684 amendments \u627F\u8F7D candidates\u3001\u9010\u6761\u5904\u7F6E\u4E0E verdict \u7684\u5B8C\u6574\u62A5\u544A\uFF08\u975E\u4EC5 verdict \u884C\uFF09\uFF1B\u663E\u5F0F\u5355\u8F74\u65F6\u53E6\u4E00\u8F74\u53EF\u7701\u7565\uFF08completeness / correctness\uFF09\u3002hard-stop\uFF0Fusage error \u4E3A refused \u65F6\uFF0C\u5DF2\u4EA7\u51FA\u62A5\u544A\u4ECD\u7167\u5F55\u5BF9\u5E94 lens \u5B57\u6BB5\u3002";
8216
+ REVIEWER_STATUS_DESCRIPTION = "completed | refused\u3002\u4E24\u79CD\u6B63\u5E38 lens verdict\uFF08completeness / correctness\uFF09\u5747 completed\uFF1Bhard-stop \u4E0E usage error \u4E3A refused\uFF08\u5DF2\u4EA7\u51FA\u62A5\u544A\u4ECD\u7167\u5F55\u8FDB\u6240\u9009 lens amendments\uFF09\u3002";
8217
+ reviewerOutputObject = typebox_exports.Object({
8218
+ status: typebox_exports.Unknown({ description: REVIEWER_STATUS_DESCRIPTION }),
8219
+ amendments: typebox_exports.Unknown({ description: REVIEWER_AMENDMENTS_DESCRIPTION }),
8220
+ diagnostic: typebox_exports.Unknown({
8221
+ description: "\u62D2\u7EDD\u8BCA\u65AD\u8BF4\u660E\uFF1Bhard-stop\uFF0Fusage error \u539F\u56E0\u8FDB\u6B64\u5B57\u6BB5\uFF0C\u5DF2\u4EA7\u51FA\u62A5\u544A\u53E6\u7167\u5F55 amendments"
8222
+ })
8223
+ });
8224
+ reviewerOutputSchema = withTerminatingOutputDeclarations(
8225
+ openToolObject(reviewerOutputObject)
8226
+ );
8212
8227
  }
8213
8228
  });
8214
8229
 
@@ -13644,14 +13659,28 @@ var init_fixer_packet = __esm({
13644
13659
  });
13645
13660
 
13646
13661
  // src/package-contracts/worker-output.ts
13647
- var CODER_OUTPUT_TOOL_NAME;
13662
+ var CODER_OUTPUT_TOOL_NAME, CODER_STATUS_DESCRIPTION, coderOutputObject, coderOutputSchema;
13648
13663
  var init_worker_output = __esm({
13649
13664
  "src/package-contracts/worker-output.ts"() {
13650
13665
  "use strict";
13666
+ init_build();
13667
+ init_open_tool_schema();
13651
13668
  init_fixer_output();
13652
13669
  init_fixer_packet();
13653
- init_fixer_output();
13670
+ init_terminating_infrastructure();
13654
13671
  CODER_OUTPUT_TOOL_NAME = "ak_coder_output";
13672
+ CODER_STATUS_DESCRIPTION = `planned | completed | refused | partially_completed | unfinished\u3002unfinished\uFF1A\u7F3A\u524D\u7F6E\u6216\u8FDD\u5BAA\u7EA6\u675F\u81F4\u672C\u5C40\u672A\u5B8C\u6210\u3002${PARTIALLY_COMPLETED_DEFINITION}`;
13673
+ coderOutputObject = typebox_exports.Object({
13674
+ status: typebox_exports.Unknown({ description: CODER_STATUS_DESCRIPTION }),
13675
+ report: typebox_exports.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
13676
+ remainingScope: typebox_exports.Unknown({ description: "\u672C\u5C40\u540E\u5269\u4F59\u5DE5\u4F5C" }),
13677
+ reason: typebox_exports.Unknown({
13678
+ description: "\u963B\u65AD\u539F\u56E0\uFF1A\u7F3A\u524D\u7F6E\u6216\u8FDD\u5BAA\u7EA6\u675F\u3002\u7F3A\u5F85\u51B3 owner \u51B3\u5B9A\u6216\u7B54\u590D\u5C5E\u7F3A\u524D\u7F6E\u3002"
13679
+ })
13680
+ });
13681
+ coderOutputSchema = withTerminatingOutputDeclarations(
13682
+ openToolObject(coderOutputObject)
13683
+ );
13655
13684
  }
13656
13685
  });
13657
13686
 
@@ -13663,7 +13692,7 @@ var init_canonical_json = __esm({
13663
13692
  });
13664
13693
 
13665
13694
  // src/doctor-contracts.ts
13666
- var DOCTOR_OUTPUT_TOOL_NAME, DOCTOR_AUDIT_TOOL_NAME, DOCTOR_TARGET_KINDS, DOCTOR_DISPOSITIONS, DOCTOR_PRESCRIPTION_KINDS, biteActual, biteNone, DOCTOR_BITE_KINDS, DOCTOR_STATUS_DESCRIPTION, doctorSubmissionObject, doctorSubmissionSchema, doctorEvidenceReadSchema;
13695
+ var DOCTOR_OUTPUT_TOOL_NAME, DOCTOR_AUDIT_TOOL_NAME, DOCTOR_OUTPUT_TOOL_DESCRIPTION, DOCTOR_TARGET_KINDS, DOCTOR_DISPOSITIONS, DOCTOR_PRESCRIPTION_KINDS, biteActual, biteNone, DOCTOR_BITE_KINDS, DOCTOR_STATUS_DESCRIPTION, doctorSubmissionObject, doctorSubmissionSchema, doctorEvidenceReadSchema;
13667
13696
  var init_doctor_contracts = __esm({
13668
13697
  "src/doctor-contracts.ts"() {
13669
13698
  "use strict";
@@ -13674,6 +13703,7 @@ var init_doctor_contracts = __esm({
13674
13703
  init_unknown_value();
13675
13704
  DOCTOR_OUTPUT_TOOL_NAME = "ak_doctor_output";
13676
13705
  DOCTOR_AUDIT_TOOL_NAME = "ak_doctor_audit_decision";
13706
+ DOCTOR_OUTPUT_TOOL_DESCRIPTION = "\u63D0\u4EA4\u552F\u4E00\u7EC8\u5C40\u5355\u6848\u8BC1\u8BCD\uFF1Bcompleted \u5141\u8BB8\u7A7A findings\u3002";
13677
13707
  DOCTOR_TARGET_KINDS = ["law", "gate", "template", "station", "seat"];
13678
13708
  DOCTOR_DISPOSITIONS = ["keep", "thin", "delete"];
13679
13709
  DOCTOR_PRESCRIPTION_KINDS = ["retain", "delete", "simplify", "patch", "addMechanism"];
@@ -13771,12 +13801,27 @@ var init_countersign_contracts = __esm({
13771
13801
  });
13772
13802
 
13773
13803
  // src/gleaner-left-contracts.ts
13774
- var GLEANER_LEFT_OUTPUT_TOOL_NAME;
13804
+ var GLEANER_LEFT_OUTPUT_TOOL_NAME, gleanerLeftOutputSchema;
13775
13805
  var init_gleaner_left_contracts = __esm({
13776
13806
  "src/gleaner-left-contracts.ts"() {
13777
13807
  "use strict";
13808
+ init_build();
13809
+ init_open_tool_schema();
13810
+ init_terminating_infrastructure();
13778
13811
  init_unknown_value();
13779
13812
  GLEANER_LEFT_OUTPUT_TOOL_NAME = "ak_gleaner_left_output";
13813
+ gleanerLeftOutputSchema = withTerminatingOutputDeclarations(
13814
+ openToolObject(
13815
+ typebox_exports.Object({
13816
+ status: typebox_exports.Unknown({
13817
+ description: "completed"
13818
+ }),
13819
+ findings: typebox_exports.Unknown({
13820
+ description: "\u5F39\u7AE0\u5217\u8868\uFF1B\u6BCF\u6761\u53EF\u542B pointer\uFF08\u6587\u4EF6/\u884C\u6307\u9488\uFF09\u4E0E statement\uFF08\u7591\u70B9\u9648\u8FF0\uFF09\uFF0C\u539F\u6837\u7559\u5B58\u3002\u7A7A\u5217\u8868\u5408\u6CD5\u5B8C\u5C40\uFF1B\u673A\u5668\u4E0D\u5224\u5F39\u7AE0\u662F\u5426\u6210\u7ACB\u3002"
13821
+ })
13822
+ })
13823
+ )
13824
+ );
13780
13825
  }
13781
13826
  });
13782
13827
 
@@ -13865,23 +13910,69 @@ var init_ticket_provenance_contracts = __esm({
13865
13910
  });
13866
13911
 
13867
13912
  // src/diarist-contracts.ts
13868
- var DIARIST_OUTPUT_TOOL_NAME;
13913
+ var DIARIST_OUTPUT_TOOL_NAME, DIARIST_SESSIONS_DESCRIPTION, diaristOutputSchema;
13869
13914
  var init_diarist_contracts = __esm({
13870
13915
  "src/diarist-contracts.ts"() {
13871
13916
  "use strict";
13917
+ init_build();
13918
+ init_open_tool_schema();
13919
+ init_terminating_infrastructure();
13872
13920
  init_ticket_provenance_contracts();
13873
13921
  init_run_ticket_number();
13874
13922
  init_unknown_value();
13875
13923
  DIARIST_OUTPUT_TOOL_NAME = "ak_diarist_output";
13924
+ DIARIST_SESSIONS_DESCRIPTION = "\u5BF9\u8BDD\u8FB9\u754C\u3002\u6BCF\u5377\u542B path\uFF08\u4F1A\u8BDD\u5377\u7EDD\u5BF9\u6216\u53EF\u8BFB\u8DEF\u5F84\uFF09\u4E0E ranges\uFF08\u672C\u5377\u672C\u8F6E\u5404\u533A\u95F4\uFF09\u3002\u6BCF\u6BB5\u533A\u95F4\u542B from / to\uFF1B\u8D77\u70B9\u4E0E\u7EC8\u70B9\u5404\u5199 id\uFF08\u539F\u751F id\uFF09\u6216 line\uFF08\u672C\u8F6E\u884C\u53F7\uFF09\uFF0C\u4E8C\u9009\u4E00\u3002\u7A7A\u5217\u8868\uFF1D\u672C\u8F6E\u65E0\u5BF9\u8BDD\u53EF\u5212\u3002\u7AEF\u70B9\u65E0\u6CD5\u6307\u540D\u65F6\u8D70 reask\uFF0C\u4E0D\u4E2D\u6B62\u3002";
13925
+ diaristOutputSchema = withTerminatingOutputDeclarations(
13926
+ openToolObject(
13927
+ typebox_exports.Object({
13928
+ status: typebox_exports.Unknown({
13929
+ description: "completed | escalate"
13930
+ }),
13931
+ ticketNumber: typebox_exports.Optional(
13932
+ typebox_exports.Unknown({
13933
+ description: "\u672C\u5EAD\u5BF9\u8C61\u7968\u53F7\uFF08\u6B63\u6574\u6570\uFF09\u6216 null/\u7701\u7565\uFF1D\u771F\u65E0\u7968\uFF1B\u4E0B\u6E38\u8D70 typed \u952E\uFF1B\u8BA4\u4E0D\u51FA\u7528 status=escalate\uFF0C\u4E0D\u6D17\u6210\u65E0\u5F55\u3002\u673A\u68B0\u5C42\u4E0D\u91CD\u5224\u3002"
13934
+ })
13935
+ ),
13936
+ reason: typebox_exports.Unknown({
13937
+ description: "status \u4E3A escalate \u65F6\uFF1A\u8BA4\u4E0D\u51FA\u672C\u5EAD\u5BF9\u8C61\u7684\u539F\u56E0"
13938
+ }),
13939
+ sessions: typebox_exports.Optional(typebox_exports.Unknown({ description: DIARIST_SESSIONS_DESCRIPTION })),
13940
+ ticketSessions: typebox_exports.Unknown({
13941
+ description: `\u591A\u7968\u5EAD\u9010\u7968\u5BF9\u8BDD\u8FB9\u754C\uFF1B\u6BCF\u7968\u542B ticketNumber\uFF08\u672C\u6761\u8FB9\u754C\u6240\u5F52\u7968\u53F7\uFF0C\u6B63\u6574\u6570\uFF09\u4E0E sessions\uFF08${DIARIST_SESSIONS_DESCRIPTION}\uFF09\u3002\u4E00\u6B21\u4EA4\u5377\u5404\u7968\u5404\u81EA\u5206\u5F55\u3002\u4E0E\u5355\u7968 sessions \u4E8C\u9009\u4E00\u3002`
13942
+ })
13943
+ })
13944
+ )
13945
+ );
13876
13946
  }
13877
13947
  });
13878
13948
 
13879
13949
  // src/secretariat-contracts.ts
13880
- var SECRETARIAT_OUTPUT_TOOL_NAME;
13950
+ var SECRETARIAT_OUTPUT_TOOL_NAME, secretariatVerdictSchema;
13881
13951
  var init_secretariat_contracts = __esm({
13882
13952
  "src/secretariat-contracts.ts"() {
13883
13953
  "use strict";
13954
+ init_build();
13955
+ init_terminating_infrastructure();
13884
13956
  SECRETARIAT_OUTPUT_TOOL_NAME = "ak_secretariat_output";
13957
+ secretariatVerdictSchema = withTerminatingOutputDeclarations(
13958
+ typebox_exports.Object(
13959
+ {
13960
+ secretariatStatus: typebox_exports.Unknown({
13961
+ description: "converged | escalate"
13962
+ }),
13963
+ ticketNumber: typebox_exports.Optional(
13964
+ typebox_exports.Unknown({ description: "\u672C\u7968\u53F7\uFF1B\u7F72\u65F6\u6307\u5411\u6700\u7EC8\u6B63\u6587\u6240\u5728\u7968" })
13965
+ ),
13966
+ note: typebox_exports.Unknown({ description: "\u9644\u6CE8" }),
13967
+ evidence: typebox_exports.Optional(typebox_exports.Unknown({ description: "\u7559\u5B58\u8BC1\u636E" })),
13968
+ decisionGate: typebox_exports.Unknown({
13969
+ description: "\u9700\u965B\u4E0B\u5904\u7F6E\u7684\u95EE\u9898\u4E0E\u9009\u9879\uFF1B\u53EF\u5199 question \u4E0E options\uFF0C\u539F\u6837\u7559\u5B58\u3002"
13970
+ })
13971
+ },
13972
+ { additionalProperties: true }
13973
+ )
13974
+ );
13975
+ secretariatVerdictSchema.required = [];
13885
13976
  }
13886
13977
  });
13887
13978
 
@@ -13895,6 +13986,12 @@ var init_judge_auditor = __esm({
13895
13986
  });
13896
13987
 
13897
13988
  // src/packaged-role-registry.ts
13989
+ function packagedRoleMetadata(role) {
13990
+ return PACKAGED_ROLE_REGISTRY.find((entry) => entry.role === role);
13991
+ }
13992
+ function packagedRoleOutputTool(role) {
13993
+ return packagedRoleMetadata(role)?.outputTool;
13994
+ }
13898
13995
  var LEGACY_REVIEW_OUTPUT_ROLES, NOTARY_SESSION_MATERIALS, INSPECTOR_SESSION_MATERIALS, AUDITOR_PUBLIC_SESSION_MATERIALS, PUBLIC_ROLE_RECORDS, PACKAGED_ROLE_REGISTRY;
13899
13996
  var init_packaged_role_registry = __esm({
13900
13997
  "src/packaged-role-registry.ts"() {
@@ -14438,6 +14535,161 @@ var init_submission_errors = __esm({
14438
14535
  }
14439
14536
  });
14440
14537
 
14538
+ // src/collector-tool-schemas.ts
14539
+ var collectorOutputBaseSchema, collectorOutputArgsSchema;
14540
+ var init_collector_tool_schemas = __esm({
14541
+ "src/collector-tool-schemas.ts"() {
14542
+ "use strict";
14543
+ init_build();
14544
+ init_open_tool_schema();
14545
+ init_terminating_infrastructure();
14546
+ collectorOutputBaseSchema = openToolObject(
14547
+ typebox_exports.Object({
14548
+ groups: typebox_exports.Unsafe({
14549
+ description: "\u6309\u673A\u5668\u8EAB\u4EFD\u5F52\u7EC4\u7684\u51FA\u5E2D\u3001\u6750\u6599\u4E0E\u9010\u6761 findings\uFF08LLM \u81EA\u884C\u4ECE\u5BBF\u4E3B CLI \u53D6\u8BC1\u6574\u7406\uFF1B\u4EE3\u7801\u4E0D\u4EE3\u6536\u4E0D\u5F52\u5E76\uFF09\u3002"
14550
+ }),
14551
+ unfinishedReasons: typebox_exports.Unknown({
14552
+ description: "\u672A\u5B8C\u6210\u539F\u56E0\uFF1B\u53D6\u8BC1\u53D7\u9650\u65F6\u5982\u5B9E\u62A5\u544A\u3002"
14553
+ })
14554
+ })
14555
+ );
14556
+ collectorOutputArgsSchema = withTerminatingOutputDeclarations(
14557
+ collectorOutputBaseSchema
14558
+ );
14559
+ }
14560
+ });
14561
+
14562
+ // src/role-submission-declarations.ts
14563
+ function roleSubmissionDeclaration(role) {
14564
+ const name = packagedRoleOutputTool(role);
14565
+ if (name === void 0) throw new Error(`${role} output tool is not declared`);
14566
+ const face = SUBMISSION_FACE[role];
14567
+ return {
14568
+ role,
14569
+ name,
14570
+ label: face.label,
14571
+ description: face.description,
14572
+ ..."promptSnippet" in face ? { promptSnippet: face.promptSnippet } : {},
14573
+ parameters: face.parameters
14574
+ };
14575
+ }
14576
+ var SUBMISSION_FACE;
14577
+ var init_role_submission_declarations = __esm({
14578
+ "src/role-submission-declarations.ts"() {
14579
+ "use strict";
14580
+ init_packaged_role_registry();
14581
+ init_review_submission();
14582
+ init_collector_tool_schemas();
14583
+ init_diarist_contracts();
14584
+ init_doctor_contracts();
14585
+ init_fixer_output();
14586
+ init_gatekeeper_output();
14587
+ init_gleaner_left_contracts();
14588
+ init_merger_contracts();
14589
+ init_navigator_output();
14590
+ init_reviewer_output();
14591
+ init_secretariat_contracts();
14592
+ init_worker_output();
14593
+ SUBMISSION_FACE = {
14594
+ judge: {
14595
+ label: "\u5927\u7406\u5BFA\u8F93\u51FA",
14596
+ description: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD\uFF1B\u4EA4\u5377\u8C03\u7528\u7ED3\u675F\u540E\uFF0C\u7531\u516C\u5F00\u8C03\u7528\u63A5\u7F1D\u6309\u5224\u8BCD\u72B6\u6001\u6267\u884C\u9002\u7528\u5BA1\u6838\u3002",
14597
+ promptSnippet: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD",
14598
+ parameters: reviewSubmissionSchema
14599
+ },
14600
+ fixer: {
14601
+ label: "\u4FEE\u5185\u53F8\u8F93\u51FA",
14602
+ description: "\u63D0\u4EA4\u4FEE\u5185\u53F8\u7EC8\u5C40\u56DE\u6267\u3002",
14603
+ promptSnippet: "\u63D0\u4EA4\u4FEE\u5185\u53F8\u7EC8\u5C40\u56DE\u6267",
14604
+ parameters: fixerOutputSchema
14605
+ },
14606
+ coder: {
14607
+ label: "\u5C06\u4F5C\u76D1\u8F93\u51FA",
14608
+ description: "\u63D0\u4EA4\u5C06\u4F5C\u76D1\u7EC8\u5C40\u56DE\u6267\u3002",
14609
+ promptSnippet: "\u63D0\u4EA4\u5C06\u4F5C\u76D1\u7EC8\u5C40\u56DE\u6267",
14610
+ parameters: coderOutputSchema
14611
+ },
14612
+ reviewer: {
14613
+ label: "\u5FA1\u53F2\u53F0\u8F93\u51FA",
14614
+ description: "\u63D0\u4EA4\u5FA1\u53F2\u53F0\u7EC8\u5C40\u56DE\u6267\u3002",
14615
+ promptSnippet: "\u63D0\u4EA4\u5FA1\u53F2\u53F0\u7EC8\u5C40\u56DE\u6267",
14616
+ parameters: reviewerOutputSchema
14617
+ },
14618
+ collector: {
14619
+ label: "\u901A\u8FDB\u53F8\u8F93\u51FA",
14620
+ description: "\u63D0\u4EA4\u901A\u8FDB\u53F8\u56DE\u6267\u3002",
14621
+ promptSnippet: "\u63D0\u4EA4\u901A\u8FDB\u53F8\u56DE\u6267",
14622
+ parameters: collectorOutputArgsSchema
14623
+ },
14624
+ doctor: {
14625
+ label: "\u592A\u533B\u7F72\u8F93\u51FA",
14626
+ description: DOCTOR_OUTPUT_TOOL_DESCRIPTION,
14627
+ parameters: doctorSubmissionSchema
14628
+ },
14629
+ merger: {
14630
+ label: "\u5408\u5E76\u8F93\u51FA",
14631
+ description: "\u63D0\u4EA4\u5408\u5E76\u7ED3\u679C\uFF1B\u8F93\u51FA\u5206\u652F\u4E3A completed \u4E0E escalate\u3002",
14632
+ promptSnippet: "\u63D0\u4EA4\u5408\u5E76\u7ED3\u679C",
14633
+ parameters: mergerOutputSchema
14634
+ },
14635
+ notary: {
14636
+ label: "\u7B26\u5B9D\u90CE\u8F93\u51FA",
14637
+ description: "\u63D0\u4EA4\u5F15\u6587\u4FDD\u771F\u4E0E\u7968\u9762\u5BF9\u9F50\u7684 converged/continue/escalate \u51B3\u8BAE\u3002",
14638
+ promptSnippet: "\u63D0\u4EA4\u7B26\u5B9D\u90CE\u51B3\u8BAE",
14639
+ parameters: reviewSubmissionSchema
14640
+ },
14641
+ countersign: {
14642
+ label: "\u7ED9\u4E8B\u4E2D\u8F93\u51FA",
14643
+ description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\u3002",
14644
+ promptSnippet: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE",
14645
+ parameters: reviewSubmissionSchema
14646
+ },
14647
+ secretariat: {
14648
+ label: "\u4E2D\u4E66\u7701\u8F93\u51FA",
14649
+ description: "\u4E2D\u4E66\u7701\u7EC8\u5C40\u56DE\u6267\u3002",
14650
+ promptSnippet: "\u4E2D\u4E66\u7701\u7EC8\u5C40\u56DE\u6267",
14651
+ parameters: secretariatVerdictSchema
14652
+ },
14653
+ "gleaner-left": {
14654
+ label: "\u5DE6\u62FE\u9057\u8F93\u51FA",
14655
+ description: "\u5DE6\u62FE\u9057\u5F39\u7AE0\u3002",
14656
+ promptSnippet: "\u5DE6\u62FE\u9057\u5F39\u7AE0",
14657
+ parameters: gleanerLeftOutputSchema
14658
+ },
14659
+ inspector: {
14660
+ label: "\u53F0\u9662\u8F93\u51FA",
14661
+ description: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267\uFF0C\u72B6\u6001\u4E3A converged\u3001continue \u6216 escalate\u3002",
14662
+ promptSnippet: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267",
14663
+ parameters: reviewSubmissionSchema
14664
+ },
14665
+ gatekeeper: {
14666
+ label: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
14667
+ description: "\u95E8\u4E0B\u7701\u7EC8\u5C40\u51B3\u8BAE\u3002status \u4E3A dispatch \u6216 pass\u3002",
14668
+ promptSnippet: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
14669
+ parameters: gatekeeperOutputSchema
14670
+ },
14671
+ navigator: {
14672
+ label: "\u6E38\u5955\u4F7F\u5EFA\u8BAE",
14673
+ description: "\u6E38\u5955\u4F7F\u7EC8\u5C40\u56DE\u6267\uFF1A\u6563\u6587\u5EFA\u8BAE\uFF0C\u539F\u6837\u5448\u73B0\u3002",
14674
+ promptSnippet: "\u6E38\u5955\u4F7F\u5EFA\u8BAE",
14675
+ parameters: navigatorOutputSchema
14676
+ },
14677
+ auditor: {
14678
+ label: "\u5BA1\u5211\u9662\u8F93\u51FA",
14679
+ description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\u3002",
14680
+ promptSnippet: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267",
14681
+ parameters: reviewSubmissionSchema
14682
+ },
14683
+ diarist: {
14684
+ label: "\u8D77\u5C45\u90CE\u8F93\u51FA",
14685
+ description: "\u8D77\u5C45\u90CE\u4EA4\u5355\u7968 sessions \u6216\u591A\u7968\u9010\u7968 ticketSessions \u8FB9\u754C\uFF1B\u8BA4\u4E0D\u51FA\u672C\u5EAD\u5BF9\u8C61\u5219 escalate\u3002",
14686
+ promptSnippet: "\u8D77\u5C45\u90CE\u4EA4\u8FB9\u754C",
14687
+ parameters: diaristOutputSchema
14688
+ }
14689
+ };
14690
+ }
14691
+ });
14692
+
14441
14693
  // src/run-terminal-artifacts.ts
14442
14694
  var init_run_terminal_artifacts = __esm({
14443
14695
  "src/run-terminal-artifacts.ts"() {
@@ -14448,6 +14700,7 @@ var init_run_terminal_artifacts = __esm({
14448
14700
  });
14449
14701
 
14450
14702
  // src/gatekeeper-role.ts
14703
+ var GATEKEEPER_TOOL_SPEC;
14451
14704
  var init_gatekeeper_role = __esm({
14452
14705
  "src/gatekeeper-role.ts"() {
14453
14706
  "use strict";
@@ -14457,9 +14710,11 @@ var init_gatekeeper_role = __esm({
14457
14710
  init_inspector_contracts();
14458
14711
  init_review_submission();
14459
14712
  init_gatekeeper_output();
14713
+ init_role_submission_declarations();
14460
14714
  init_run_terminal_artifacts();
14461
14715
  init_unknown_value();
14462
14716
  init_submission_errors();
14717
+ GATEKEEPER_TOOL_SPEC = roleSubmissionDeclaration("gatekeeper");
14463
14718
  }
14464
14719
  });
14465
14720
 
@@ -1,8 +1,24 @@
1
+ import { Type } from "typebox";
2
+ import { openToolObject } from "../open-tool-schema.js";
3
+ import { withTerminatingOutputDeclarations } from "./terminating-infrastructure.js";
1
4
  const REVIEWER_OUTPUT_TOOL_NAME = "ak_reviewer_output";
5
+ const REVIEWER_AMENDMENTS_DESCRIPTION = "\u5DF2\u8FD0\u884C lens \u7684 amendments \u627F\u8F7D candidates\u3001\u9010\u6761\u5904\u7F6E\u4E0E verdict \u7684\u5B8C\u6574\u62A5\u544A\uFF08\u975E\u4EC5 verdict \u884C\uFF09\uFF1B\u663E\u5F0F\u5355\u8F74\u65F6\u53E6\u4E00\u8F74\u53EF\u7701\u7565\uFF08completeness / correctness\uFF09\u3002hard-stop\uFF0Fusage error \u4E3A refused \u65F6\uFF0C\u5DF2\u4EA7\u51FA\u62A5\u544A\u4ECD\u7167\u5F55\u5BF9\u5E94 lens \u5B57\u6BB5\u3002";
6
+ const REVIEWER_STATUS_DESCRIPTION = "completed | refused\u3002\u4E24\u79CD\u6B63\u5E38 lens verdict\uFF08completeness / correctness\uFF09\u5747 completed\uFF1Bhard-stop \u4E0E usage error \u4E3A refused\uFF08\u5DF2\u4EA7\u51FA\u62A5\u544A\u4ECD\u7167\u5F55\u8FDB\u6240\u9009 lens amendments\uFF09\u3002";
7
+ const reviewerOutputObject = Type.Object({
8
+ status: Type.Unknown({ description: REVIEWER_STATUS_DESCRIPTION }),
9
+ amendments: Type.Unknown({ description: REVIEWER_AMENDMENTS_DESCRIPTION }),
10
+ diagnostic: Type.Unknown({
11
+ description: "\u62D2\u7EDD\u8BCA\u65AD\u8BF4\u660E\uFF1Bhard-stop\uFF0Fusage error \u539F\u56E0\u8FDB\u6B64\u5B57\u6BB5\uFF0C\u5DF2\u4EA7\u51FA\u62A5\u544A\u53E6\u7167\u5F55 amendments"
12
+ })
13
+ });
14
+ const reviewerOutputSchema = withTerminatingOutputDeclarations(
15
+ openToolObject(reviewerOutputObject)
16
+ );
2
17
  function validateReviewerIntent(output) {
3
18
  return output;
4
19
  }
5
20
  export {
6
21
  REVIEWER_OUTPUT_TOOL_NAME,
22
+ reviewerOutputSchema,
7
23
  validateReviewerIntent
8
24
  };
@@ -1,20 +1,36 @@
1
+ import { Type } from "typebox";
2
+ import { openToolObject } from "../open-tool-schema.js";
1
3
  import {
2
4
  FIXER_OUTPUT_TOOL_NAME,
3
5
  fixerOutputSchema,
6
+ PARTIALLY_COMPLETED_DEFINITION,
4
7
  validateFixerOutput
5
8
  } from "./fixer-output.js";
6
9
  import { fixerPrerequisiteSchema, fixerPrerequisitesSchema, parseFixerPrerequisites, validateFixerPrerequisites } from "./fixer-packet.js";
7
- import { validateFixerOutput as validateFixerOutput2 } from "./fixer-output.js";
10
+ import { withTerminatingOutputDeclarations } from "./terminating-infrastructure.js";
8
11
  const CODER_OUTPUT_TOOL_NAME = "ak_coder_output";
9
12
  function validateAcceptedCoderDetails(output) {
10
13
  return output;
11
14
  }
12
15
  function validateAcceptedWorkerDetails(output, roleLabel = "Coder") {
13
- return roleLabel === "Fixer" ? validateFixerOutput2(output) : validateAcceptedCoderDetails(output);
16
+ return roleLabel === "Fixer" ? validateFixerOutput(output) : validateAcceptedCoderDetails(output);
14
17
  }
18
+ const CODER_STATUS_DESCRIPTION = `planned | completed | refused | partially_completed | unfinished\u3002unfinished\uFF1A\u7F3A\u524D\u7F6E\u6216\u8FDD\u5BAA\u7EA6\u675F\u81F4\u672C\u5C40\u672A\u5B8C\u6210\u3002${PARTIALLY_COMPLETED_DEFINITION}`;
19
+ const coderOutputObject = Type.Object({
20
+ status: Type.Unknown({ description: CODER_STATUS_DESCRIPTION }),
21
+ report: Type.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
22
+ remainingScope: Type.Unknown({ description: "\u672C\u5C40\u540E\u5269\u4F59\u5DE5\u4F5C" }),
23
+ reason: Type.Unknown({
24
+ description: "\u963B\u65AD\u539F\u56E0\uFF1A\u7F3A\u524D\u7F6E\u6216\u8FDD\u5BAA\u7EA6\u675F\u3002\u7F3A\u5F85\u51B3 owner \u51B3\u5B9A\u6216\u7B54\u590D\u5C5E\u7F3A\u524D\u7F6E\u3002"
25
+ })
26
+ });
27
+ const coderOutputSchema = withTerminatingOutputDeclarations(
28
+ openToolObject(coderOutputObject)
29
+ );
15
30
  export {
16
31
  CODER_OUTPUT_TOOL_NAME,
17
32
  FIXER_OUTPUT_TOOL_NAME,
33
+ coderOutputSchema,
18
34
  fixerOutputSchema,
19
35
  fixerPrerequisiteSchema,
20
36
  fixerPrerequisitesSchema,
@@ -9,6 +9,8 @@ import { AUDITOR_DOSSIER_PROMPT } from "../compliance-transport.js";
9
9
  import { bookDirectOfficerRunPointer } from "../archivist-record-pointer.js";
10
10
  import { createPiDoctorAuditor } from "../doctor-auditor.js";
11
11
  import { officerConclusionReask, gateOfficerForSubject } from "../gatekeeper-role.js";
12
+ import { receivedDiscriminator } from "../submission-errors.js";
13
+ import { REVIEW_QUEUE_STATUSES } from "../review-submission.js";
12
14
  import { runJudgeGates } from "../judge-role.js";
13
15
  import { WORKER_DONE_STATUSES } from "../worker-submission-contracts.js";
14
16
  import { SECRETARIAT_GATE_OFFICER_ENTRY_TYPE } from "../secretariat-contracts.js";
@@ -37,7 +39,6 @@ import { invokeCourtDiarist, latestPayloadEscalated, } from "./countersign-run.j
37
39
  import { isRecord, errorText } from "../unknown-value.js";
38
40
  const AUDITED_ROLES = new Set(["judge", "fixer", "coder", "secretariat", "countersign", "doctor"]);
39
41
  const SECRETARIAT_STATUS_REASK = "secretariatStatus 不是 converged、escalate 之一。请重新交卷,secretariatStatus 写明其一。";
40
- const COUNTERSIGN_STATUS_REASK = "status 不是 converged、continue、escalate 三态之一。请重新交卷,status 写明其一。";
41
42
  const WORKER_ROUTING_STATUSES = new Set([
42
43
  "planned", "completed", "refused", "partially_completed", "unfinished",
43
44
  ]);
@@ -46,8 +47,7 @@ const DOCTOR_ROUTING_STATUSES = new Set(["completed", "refused"]);
46
47
  const DOCTOR_STATUS_REASK = "status 不是 completed、refused 之一。请重新交卷,status 写明其一。";
47
48
  const POST_SUBMISSION_ROUTING = {
48
49
  judge: {
49
- statuses: new Set(["converged", "continue", "escalate"]),
50
- reask: "status 不是 converged、continue、escalate 三态之一。请重新交卷,status 写明其一。",
50
+ statuses: REVIEW_QUEUE_STATUSES,
51
51
  },
52
52
  coder: {
53
53
  statuses: WORKER_ROUTING_STATUSES,
@@ -75,12 +75,10 @@ function unreadablePostSubmissionStatus(admitted, terminal) {
75
75
  if (route === undefined)
76
76
  return undefined;
77
77
  const payload = terminal.roleOutcome.payloads?.at(-1);
78
- const status = isRecord(payload)
79
- ? payload.status
80
- : undefined;
78
+ const status = receivedDiscriminator(payload, "status");
81
79
  return typeof status === "string" && route.statuses.has(status)
82
80
  ? undefined
83
- : route.reask;
81
+ : route.reask ?? officerConclusionReask(status);
84
82
  }
85
83
  async function reaskUnreadablePostSubmissionStatus(admitted, terminal, env, io) {
86
84
  const message = unreadablePostSubmissionStatus(admitted, terminal);
@@ -716,7 +714,6 @@ export async function runPublicInstructionSeatResume(request, env, io) {
716
714
  }
717
715
  return resume();
718
716
  }
719
- const QUEUE_CONCLUSIONS = new Set(["converged", "continue", "escalate"]);
720
717
  const GATE_CHILD_ROLES = new Set(["notary", "auditor", "inspector", "countersign"]);
721
718
  /**
722
719
  * A gate child's conclusion outside the three states goes back to that child.
@@ -729,7 +726,7 @@ async function queueConclusionFromChild(child, env, io) {
729
726
  for (;;) {
730
727
  const terminal = await trySettlePublicSeat(current, env.principalAuthority, undefined);
731
728
  const status = latestQueueStatus(terminal);
732
- if (terminal !== undefined && status !== undefined && QUEUE_CONCLUSIONS.has(status)) {
729
+ if (terminal !== undefined && typeof status === "string" && REVIEW_QUEUE_STATUSES.has(status)) {
733
730
  return { admitted: current, terminal, status };
734
731
  }
735
732
  const reasked = await runPublicInstructionSeatResume({
@@ -740,7 +737,7 @@ async function queueConclusionFromChild(child, env, io) {
740
737
  return { stop: reasked };
741
738
  }
742
739
  const reaskedStatus = latestQueueStatus(reasked.terminal);
743
- if (reaskedStatus !== undefined && QUEUE_CONCLUSIONS.has(reaskedStatus)) {
740
+ if (typeof reaskedStatus === "string" && REVIEW_QUEUE_STATUSES.has(reaskedStatus)) {
744
741
  return { admitted: reasked.admitted, terminal: reasked.terminal, status: reaskedStatus };
745
742
  }
746
743
  if (latestPayloadEscalated(reasked.terminal.roleOutcome))
@@ -792,8 +789,8 @@ async function auditSubmittedRole(turn, env, io, passedOfficer, passedReceipt, p
792
789
  if (admitted.role === "secretariat" && status !== "converged" && status !== "escalate") {
793
790
  return runPublicInstructionSeatResume({ runId: admitted.runId, message: SECRETARIAT_STATUS_REASK }, { ...env, autoResumeLimit: 0 }, io);
794
791
  }
795
- if (admitted.role === "countersign" && (typeof status !== "string" || !QUEUE_CONCLUSIONS.has(status))) {
796
- return runPublicInstructionSeatResume({ runId: admitted.runId, message: COUNTERSIGN_STATUS_REASK }, { ...env, autoResumeLimit: 0 }, io);
792
+ if (admitted.role === "countersign" && (typeof status !== "string" || !REVIEW_QUEUE_STATUSES.has(status))) {
793
+ return runPublicInstructionSeatResume({ runId: admitted.runId, message: officerConclusionReask(status) }, { ...env, autoResumeLimit: 0 }, io);
797
794
  }
798
795
  // Self-escalation is a valid open routing state for these seats only.
799
796
  // Doctor's declared domain is completed|refused — an open "escalate" must