@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
@@ -518,16 +518,31 @@ var init_judge_output = __esm({
518
518
  });
519
519
 
520
520
  // src/package-contracts/reviewer-output.ts
521
- var REVIEWER_OUTPUT_TOOL_NAME;
521
+ import { Type as Type6 } from "typebox";
522
+ var REVIEWER_OUTPUT_TOOL_NAME, REVIEWER_AMENDMENTS_DESCRIPTION, REVIEWER_STATUS_DESCRIPTION, reviewerOutputObject, reviewerOutputSchema;
522
523
  var init_reviewer_output = __esm({
523
524
  "src/package-contracts/reviewer-output.ts"() {
524
525
  "use strict";
526
+ init_open_tool_schema();
527
+ init_terminating_infrastructure();
525
528
  REVIEWER_OUTPUT_TOOL_NAME = "ak_reviewer_output";
529
+ 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";
530
+ 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";
531
+ reviewerOutputObject = Type6.Object({
532
+ status: Type6.Unknown({ description: REVIEWER_STATUS_DESCRIPTION }),
533
+ amendments: Type6.Unknown({ description: REVIEWER_AMENDMENTS_DESCRIPTION }),
534
+ diagnostic: Type6.Unknown({
535
+ 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"
536
+ })
537
+ });
538
+ reviewerOutputSchema = withTerminatingOutputDeclarations(
539
+ openToolObject(reviewerOutputObject)
540
+ );
526
541
  }
527
542
  });
528
543
 
529
544
  // src/package-contracts/fixer-output.ts
530
- import { Type as Type6 } from "typebox";
545
+ import { Type as Type7 } from "typebox";
531
546
  function validateFixerOutput(value, _phase) {
532
547
  return value;
533
548
  }
@@ -540,22 +555,22 @@ var init_fixer_output = __esm({
540
555
  FIXER_OUTPUT_TOOL_NAME = "ak_fixer_output";
541
556
  PARTIALLY_COMPLETED_DEFINITION = "partially_completed \u53EA\u80FD\u5728\u6709\u5408\u6CD5\u62D2\u7EDD\u9879\uFF08\u5B8C\u6210\u9879\u4E0E\u5408\u6CD5\u62D2\u7EDD\u9879\u5E76\u5B58\uFF09\u65F6\u7528\uFF0C\u522B\u7684\u60C5\u51B5\u4E0D\u51C6\u7528\u3002";
542
557
  FIXER_STATUS_DESCRIPTION = `planned | completed | refused | unfinished | partially_completed\u3002unfinished \u7F3A\u524D\u7F6E\u6216\u8FDD\u5BAA\u7EA6\u675F\u81F4\u672C\u5C40\u672A\u5B8C\u6210\u65F6\u53EF\u7528\uFF0C\u7F3A\u5F85\u51B3 owner \u51B3\u5B9A\u6216\u7B54\u590D\u5C5E\u7F3A\u524D\u7F6E\u3002${PARTIALLY_COMPLETED_DEFINITION}`;
543
- fixerOutputObject = Type6.Object({
544
- status: Type6.Unknown({ description: FIXER_STATUS_DESCRIPTION }),
545
- report: Type6.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
546
- remainingScope: Type6.Unknown({
558
+ fixerOutputObject = Type7.Object({
559
+ status: Type7.Unknown({ description: FIXER_STATUS_DESCRIPTION }),
560
+ report: Type7.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
561
+ remainingScope: Type7.Unknown({
547
562
  description: "\u672C\u5C40\u540E\u5269\u4F59\u5DE5\u4F5C\uFF1B\u4F9D\u6CD5\u4E0D\u80FD\u5B8C\u6210\u7684\u8303\u56F4\u4E5F\u5199\u6B64\u5904\u3002"
548
563
  }),
549
- blocker: Type6.Unknown({
564
+ blocker: Type7.Unknown({
550
565
  description: "\u5408\u6CD5\u963B\u65AD\u5B8C\u6210\u7684 blocker\uFF0C\u539F\u6837\u7559\u5B58\u3002\u53EF\u5199 cause\uFF08authority_violation \u6216 prerequisite_unmet\uFF09\u3001evidence\uFF1Bprerequisite_unmet \u8FD8\u53EF\u5199 prerequisiteId\u3002"
551
566
  }),
552
- reason: Type6.Unknown({
567
+ reason: Type7.Unknown({
553
568
  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"
554
569
  }),
555
- classResults: Type6.Unknown({
570
+ classResults: Type7.Unknown({
556
571
  description: "\u5404\u7C7B class \u7ED3\u7B97\uFF0C\u539F\u6837\u7559\u5B58\u3002\u5B8C\u6210\u9879\u7684 disposition \u4E3A completed\uFF0C\u53EF\u5199 name\u3001searchScope\u3001exceptions\uFF08where\u3001reason\uFF09\u3001commitSha\u3002\u62D2\u7EDD\u9879\u7684 disposition \u4E3A refused\uFF0C\u53EF\u5199 name\u3001remainingScope\u3001blocker\u3002"
557
572
  }),
558
- testEvidence: Type6.Unknown({
573
+ testEvidence: Type7.Unknown({
559
574
  description: "\u6D4B\u8BD5\u8BC1\u636E\u6761\uFF1Bdiff \u542B\u6D4B\u8BD5\u6539\u52A8\u65F6\u63D0\u4EA4\uFF1B\u673A\u5668\u4E0D\u6838\u9A8C\u3002\u53EF\u5199 contract\uFF08\u6D4B\u8BD5\u6539\u52A8\u6240\u8BC1\u660E\u7684\u5951\u7EA6\uFF09\u3001minimumNecessaryCost\uFF08\u6D4B\u8BD5\u6539\u52A8\u7684\u4E00\u884C\u6700\u5C0F\u5FC5\u8981\u6210\u672C\uFF09\u3001measuredDuration\uFF08\u805A\u7126\u9A8C\u8BC1\u5B9E\u6D4B\u65F6\u957F\uFF09\u3002"
560
575
  })
561
576
  });
@@ -566,7 +581,7 @@ var init_fixer_output = __esm({
566
581
  });
567
582
 
568
583
  // src/package-contracts/fixer-packet.ts
569
- import { Type as Type7 } from "typebox";
584
+ import { Type as Type8 } from "typebox";
570
585
  import { Value } from "typebox/value";
571
586
  function causeMessage(cause) {
572
587
  if (cause instanceof Error) return cause.message;
@@ -623,11 +638,11 @@ var init_fixer_packet = __esm({
623
638
  "use strict";
624
639
  init_unknown_value();
625
640
  FIXER_PREREQUISITE_ID_PATTERN = "^[A-Za-z0-9][A-Za-z0-9._-]*$";
626
- fixerPrerequisiteSchema = Type7.Object({
627
- id: Type7.String({ pattern: FIXER_PREREQUISITE_ID_PATTERN }),
628
- requirement: Type7.String({ pattern: "\\S" })
641
+ fixerPrerequisiteSchema = Type8.Object({
642
+ id: Type8.String({ pattern: FIXER_PREREQUISITE_ID_PATTERN }),
643
+ requirement: Type8.String({ pattern: "\\S" })
629
644
  });
630
- fixerPrerequisitesSchema = Type7.Array(fixerPrerequisiteSchema);
645
+ fixerPrerequisitesSchema = Type8.Array(fixerPrerequisiteSchema);
631
646
  FixerPacketValidationError = class extends Error {
632
647
  code = "AK_INVALID_FIX_PACKET";
633
648
  constructor(cause) {
@@ -643,20 +658,34 @@ var init_fixer_packet = __esm({
643
658
  });
644
659
 
645
660
  // src/package-contracts/worker-output.ts
661
+ import { Type as Type9 } from "typebox";
646
662
  function validateAcceptedCoderDetails(output) {
647
663
  return output;
648
664
  }
649
665
  function validateAcceptedWorkerDetails(output, roleLabel = "Coder") {
650
666
  return roleLabel === "Fixer" ? validateFixerOutput(output) : validateAcceptedCoderDetails(output);
651
667
  }
652
- var CODER_OUTPUT_TOOL_NAME;
668
+ var CODER_OUTPUT_TOOL_NAME, CODER_STATUS_DESCRIPTION, coderOutputObject, coderOutputSchema;
653
669
  var init_worker_output = __esm({
654
670
  "src/package-contracts/worker-output.ts"() {
655
671
  "use strict";
672
+ init_open_tool_schema();
656
673
  init_fixer_output();
657
674
  init_fixer_packet();
658
- init_fixer_output();
675
+ init_terminating_infrastructure();
659
676
  CODER_OUTPUT_TOOL_NAME = "ak_coder_output";
677
+ 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}`;
678
+ coderOutputObject = Type9.Object({
679
+ status: Type9.Unknown({ description: CODER_STATUS_DESCRIPTION }),
680
+ report: Type9.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
681
+ remainingScope: Type9.Unknown({ description: "\u672C\u5C40\u540E\u5269\u4F59\u5DE5\u4F5C" }),
682
+ reason: Type9.Unknown({
683
+ 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"
684
+ })
685
+ });
686
+ coderOutputSchema = withTerminatingOutputDeclarations(
687
+ openToolObject(coderOutputObject)
688
+ );
660
689
  }
661
690
  });
662
691
 
@@ -668,7 +697,7 @@ var init_canonical_json = __esm({
668
697
  });
669
698
 
670
699
  // src/doctor-contracts.ts
671
- import { Type as Type8 } from "typebox";
700
+ import { Type as Type10 } from "typebox";
672
701
  function validateDoctorSubmissionShape(value) {
673
702
  return value;
674
703
  }
@@ -694,25 +723,25 @@ var init_doctor_contracts = __esm({
694
723
  biteNone = "noRealBite";
695
724
  DOCTOR_BITE_KINDS = [biteActual, biteNone];
696
725
  DOCTOR_STATUS_DESCRIPTION = "completed | refused\u3002completed \u5141\u8BB8\u7A7A findings\uFF1Brefused \u4EC5\u5F53\u8BC1\u636E\u4E0D\u8DB3\u4EE5\u652F\u6491\u5982\u5B9E\u6848\u8BC1\u8BCD";
697
- doctorSubmissionObject = Type8.Object({
698
- status: Type8.Unknown({ description: DOCTOR_STATUS_DESCRIPTION }),
699
- case: Type8.Unknown({
726
+ doctorSubmissionObject = Type10.Object({
727
+ status: Type10.Unknown({ description: DOCTOR_STATUS_DESCRIPTION }),
728
+ case: Type10.Unknown({
700
729
  description: "\u7559\u5B58\u592A\u533B\u7F72\u6848\u8EAB\u4EFD\uFF0C\u539F\u6837\u7559\u5B58\uFF08\u5982 issueNumber\u3001runsPath\uFF09\u3002\u673A\u68B0\u5C42\u53E6\u6309\u7ED1\u5B9A run \u6295\u5F71\u6848\u8EAB\u4EFD\uFF0C\u4E0D\u5728\u672C\u5B57\u6BB5\u91CD\u5224\u3002"
701
730
  }),
702
- findings: Type8.Unknown({
731
+ findings: Type10.Unknown({
703
732
  description: `\u9010\u6761\u8D44\u4EA7\u89C2\u5BDF\u4E0E\u5904\u65B9\uFF0C\u539F\u6837\u7559\u5B58\u3002\u4E00\u6761\u53EF\u542B targetKey\u3001targetKind\uFF08${DOCTOR_TARGET_KINDS.join(" | ")}\uFF09\u3001observation\u3001evidenceIds\u3001disposition\uFF08${DOCTOR_DISPOSITIONS.join(" | ")}\uFF09\u3001assetEvidence\uFF08targetKey\u3001targetKind\u3001evidenceId\uFF09\u3001guardrails\uFF08reproducibleFailure\u3001owningSeamOrInvariant\u3001deletionOrSimplificationSuffices\uFF0C\u5404\u9879\u53EF\u542B answer\u3001evidenceIds\u3001explanation\uFF09\u3001prescription\uFF08kind \u4E3A ${DOCTOR_PRESCRIPTION_KINDS.join(" | ")}\uFF0C\u53E6\u53EF\u5199 recommendation\u3001necessityExplanation\uFF09\u3001lastRealBite\uFF08kind \u4E3A ${DOCTOR_BITE_KINDS.join(" | ")}\uFF0C\u53E6\u53EF\u5199 targetKey\u3001evidenceId\u3001eligibleEvidenceIds\uFF09\u3002\u4E0D\u8981\u6C42\u4EFB\u4F55\u5904\u65B9\u6216\u53EF\u590D\u7528 finding\uFF1B\u7F3A\u53EF\u590D\u7528\u8D44\u4EA7\u6216 bounded-bite \u8BC1\u636E\u53EA\u6392\u9664\u5BF9\u5E94\u8D44\u4EA7\u5904\u65B9\u3002\u673A\u5668\u4E0D\u6838\u9A8C\u3002`
704
733
  }),
705
- reason: Type8.Unknown({
734
+ reason: Type10.Unknown({
706
735
  description: "\u8BC1\u636E\u4E0D\u8DB3\u4EE5\u652F\u6491\u5982\u5B9E\u8BC1\u8BCD\u7684\u539F\u56E0\uFF1B\u4EC5 refused \u65F6\u7528\u3002"
707
736
  }),
708
- missingEvidence: Type8.Unknown({
737
+ missingEvidence: Type10.Unknown({
709
738
  description: "\u5982\u5B9E\u8BC1\u8BCD\u6240\u9700\u800C\u5C1A\u7F3A\u7684\u8BC1\u636E\uFF0C\u539F\u6837\u7559\u5B58\uFF08\u5982\u6BCF\u9879 need\u3001targetKeys\uFF09\u3002"
710
739
  })
711
740
  });
712
741
  doctorSubmissionSchema = withTerminatingOutputDeclarations(
713
742
  openToolObject(doctorSubmissionObject)
714
743
  );
715
- doctorEvidenceReadSchema = Type8.Object({ evidenceId: Type8.String({ minLength: 1, description: "\u5F85\u8BFB\u7559\u5B58\u8BC1\u636E\u6807\u8BC6" }), offset: Type8.Optional(Type8.Integer({ minimum: 0, description: "\u8D77\u59CB\u5B57\u8282\u504F\u79FB\uFF08\u4ECE 0 \u8BA1\uFF09" })), limit: Type8.Optional(Type8.Integer({ minimum: 1, description: "\u8FD4\u56DE\u5B57\u8282\u6570\uFF08\u65E0\u4E0A\u9650\uFF09" })) }, { additionalProperties: true });
744
+ doctorEvidenceReadSchema = Type10.Object({ evidenceId: Type10.String({ minLength: 1, description: "\u5F85\u8BFB\u7559\u5B58\u8BC1\u636E\u6807\u8BC6" }), offset: Type10.Optional(Type10.Integer({ minimum: 0, description: "\u8D77\u59CB\u5B57\u8282\u504F\u79FB\uFF08\u4ECE 0 \u8BA1\uFF09" })), limit: Type10.Optional(Type10.Integer({ minimum: 1, description: "\u8FD4\u56DE\u5B57\u8282\u6570\uFF08\u65E0\u4E0A\u9650\uFF09" })) }, { additionalProperties: true });
716
745
  DoctorEvidenceStore = class {
717
746
  constructor(patient) {
718
747
  this.patient = patient;
@@ -781,7 +810,7 @@ var init_exact_utf8 = __esm({
781
810
  });
782
811
 
783
812
  // src/merger-contracts.ts
784
- import { Type as Type9 } from "typebox";
813
+ import { Type as Type11 } from "typebox";
785
814
  function fail2(message = "Merger input violates its exact contract") {
786
815
  throw new MergerInputContractError(message);
787
816
  }
@@ -812,24 +841,24 @@ var init_merger_contracts = __esm({
812
841
  init_open_tool_schema();
813
842
  init_terminating_infrastructure();
814
843
  init_unknown_value();
815
- materialSchema = Type9.Object({ bytesBase64: Type9.String(), sha256: Type9.String() });
816
- checkSchema = Type9.Object({ name: Type9.String({ minLength: 1 }), argv: Type9.Array(Type9.String({ minLength: 1 }), { minItems: 1 }) });
817
- mergerInputSchema = Type9.Object({
818
- attemptId: Type9.String({ minLength: 1, description: "\u5BF9\u8D26 attempt \u8EAB\u4EFD\uFF08transport\uFF09" }),
819
- targetObjectId: Type9.String({ description: "\u6750\u6599\uFF1Atarget parent OID\uFF1B\u53EF\u7A7A" }),
820
- sourceObjectId: Type9.String({ description: "\u6750\u6599\uFF1Asource parent OID\uFF1B\u53EF\u7A7A" }),
821
- materials: Type9.Object({ task: materialSchema, authority: materialSchema, targetIntent: materialSchema, sourceIntent: materialSchema }),
822
- expectedConflictPaths: Type9.Array(Type9.String(), { description: "\u6750\u6599\uFF1A\u5F53\u524D\u672A\u5408\u5E76\u8DEF\u5F84\uFF1B\u53EF\u7A7A" }),
823
- resolutionScope: Type9.Array(Type9.String(), { description: "\u6750\u6599\uFF1A\u89E3\u6790\u8303\u56F4\u63D0\u793A\uFF1B\u53EF\u7A7A" }),
824
- authorizedChecks: Type9.Array(checkSchema)
844
+ materialSchema = Type11.Object({ bytesBase64: Type11.String(), sha256: Type11.String() });
845
+ checkSchema = Type11.Object({ name: Type11.String({ minLength: 1 }), argv: Type11.Array(Type11.String({ minLength: 1 }), { minItems: 1 }) });
846
+ mergerInputSchema = Type11.Object({
847
+ attemptId: Type11.String({ minLength: 1, description: "\u5BF9\u8D26 attempt \u8EAB\u4EFD\uFF08transport\uFF09" }),
848
+ targetObjectId: Type11.String({ description: "\u6750\u6599\uFF1Atarget parent OID\uFF1B\u53EF\u7A7A" }),
849
+ sourceObjectId: Type11.String({ description: "\u6750\u6599\uFF1Asource parent OID\uFF1B\u53EF\u7A7A" }),
850
+ materials: Type11.Object({ task: materialSchema, authority: materialSchema, targetIntent: materialSchema, sourceIntent: materialSchema }),
851
+ expectedConflictPaths: Type11.Array(Type11.String(), { description: "\u6750\u6599\uFF1A\u5F53\u524D\u672A\u5408\u5E76\u8DEF\u5F84\uFF1B\u53EF\u7A7A" }),
852
+ resolutionScope: Type11.Array(Type11.String(), { description: "\u6750\u6599\uFF1A\u89E3\u6790\u8303\u56F4\u63D0\u793A\uFF1B\u53EF\u7A7A" }),
853
+ authorizedChecks: Type11.Array(checkSchema)
825
854
  });
826
855
  MERGER_STATUS_DESCRIPTION = "completed | escalate";
827
- mergerOutputObject = Type9.Object({
828
- status: Type9.Unknown({ description: MERGER_STATUS_DESCRIPTION }),
829
- attemptId: Type9.Unknown({ description: "\u5DF2\u53D7\u7406\u5408\u5E76 attempt \u8EAB\u4EFD" }),
830
- report: Type9.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
831
- mergeCommitId: Type9.Unknown({ description: "\u5B8C\u6210\u5408\u5E76 commit object ID" }),
832
- diagnosis: Type9.Unknown({
856
+ mergerOutputObject = Type11.Object({
857
+ status: Type11.Unknown({ description: MERGER_STATUS_DESCRIPTION }),
858
+ attemptId: Type11.Unknown({ description: "\u5DF2\u53D7\u7406\u5408\u5E76 attempt \u8EAB\u4EFD" }),
859
+ report: Type11.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
860
+ mergeCommitId: Type11.Unknown({ description: "\u5B8C\u6210\u5408\u5E76 commit object ID" }),
861
+ diagnosis: Type11.Unknown({
833
862
  description: "\u5408\u5E76\u65E0\u6CD5\u6216\u4E0D\u5E94\u7531\u672C\u5E2D\u5B8C\u6210\u7684\u539F\u56E0\uFF08\u542B\u65E0\u8FDB\u884C\u4E2D\u5408\u5E76\u3001\u65E0\u6D3B\u53EF\u5E72\u3001\u9700\u65B0\u7684\u4EA7\u54C1/\u6743\u529B\u51B3\u5B9A\uFF09"
834
863
  })
835
864
  });
@@ -848,7 +877,7 @@ var init_merger_contracts = __esm({
848
877
  });
849
878
 
850
879
  // src/notary-contracts.ts
851
- var NOTARY_OUTPUT_TOOL_NAME, NOTARY_SOURCE_RUN_FLAG, NOTARY_TICKET_FLAG, notaryOutputSchema;
880
+ var NOTARY_OUTPUT_TOOL_NAME, NOTARY_SOURCE_RUN_FLAG, NOTARY_TICKET_FLAG;
852
881
  var init_notary_contracts = __esm({
853
882
  "src/notary-contracts.ts"() {
854
883
  "use strict";
@@ -869,7 +898,6 @@ var init_notary_contracts = __esm({
869
898
  type: "string"
870
899
  }
871
900
  };
872
- notaryOutputSchema = reviewSubmissionSchema;
873
901
  }
874
902
  });
875
903
 
@@ -885,12 +913,27 @@ var init_countersign_contracts = __esm({
885
913
  });
886
914
 
887
915
  // src/gleaner-left-contracts.ts
888
- var GLEANER_LEFT_OUTPUT_TOOL_NAME, GLEANER_LEFT_BASE_FLAG;
916
+ import { Type as Type12 } from "typebox";
917
+ var GLEANER_LEFT_OUTPUT_TOOL_NAME, gleanerLeftOutputSchema, GLEANER_LEFT_BASE_FLAG;
889
918
  var init_gleaner_left_contracts = __esm({
890
919
  "src/gleaner-left-contracts.ts"() {
891
920
  "use strict";
921
+ init_open_tool_schema();
922
+ init_terminating_infrastructure();
892
923
  init_unknown_value();
893
924
  GLEANER_LEFT_OUTPUT_TOOL_NAME = "ak_gleaner_left_output";
925
+ gleanerLeftOutputSchema = withTerminatingOutputDeclarations(
926
+ openToolObject(
927
+ Type12.Object({
928
+ status: Type12.Unknown({
929
+ description: "completed"
930
+ }),
931
+ findings: Type12.Unknown({
932
+ 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"
933
+ })
934
+ })
935
+ )
936
+ );
894
937
  GLEANER_LEFT_BASE_FLAG = {
895
938
  name: "ak-gleaner-left-base",
896
939
  definition: {
@@ -920,14 +963,13 @@ var init_inspector_contracts = __esm({
920
963
  });
921
964
 
922
965
  // src/package-contracts/auditor-output.ts
923
- var AUDITOR_OUTPUT_TOOL_NAME, auditorOutputSchema;
966
+ var AUDITOR_OUTPUT_TOOL_NAME;
924
967
  var init_auditor_output = __esm({
925
968
  "src/package-contracts/auditor-output.ts"() {
926
969
  "use strict";
927
970
  init_review_submission();
928
971
  init_unknown_value();
929
972
  AUDITOR_OUTPUT_TOOL_NAME = REVIEW_SUBMISSION_OUTPUT_TOOL_NAME;
930
- auditorOutputSchema = reviewSubmissionSchema;
931
973
  }
932
974
  });
933
975
 
@@ -1054,6 +1096,7 @@ var init_run_ticket_number = __esm({
1054
1096
  });
1055
1097
 
1056
1098
  // src/diarist-contracts.ts
1099
+ import { Type as Type13 } from "typebox";
1057
1100
  function projectDiaristSessions(value) {
1058
1101
  const raw = value?.sessions;
1059
1102
  if (raw === void 0) return [];
@@ -1073,23 +1116,68 @@ function projectDiaristTicketSessions(value) {
1073
1116
  }
1074
1117
  return Array.from(perTicket, ([ticketNumber, sessions]) => ({ ticketNumber, sessions }));
1075
1118
  }
1076
- var DIARIST_OUTPUT_TOOL_NAME;
1119
+ var DIARIST_OUTPUT_TOOL_NAME, DIARIST_SESSIONS_DESCRIPTION, diaristOutputSchema;
1077
1120
  var init_diarist_contracts = __esm({
1078
1121
  "src/diarist-contracts.ts"() {
1079
1122
  "use strict";
1123
+ init_open_tool_schema();
1124
+ init_terminating_infrastructure();
1080
1125
  init_ticket_provenance_contracts();
1081
1126
  init_run_ticket_number();
1082
1127
  init_unknown_value();
1083
1128
  DIARIST_OUTPUT_TOOL_NAME = "ak_diarist_output";
1129
+ 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";
1130
+ diaristOutputSchema = withTerminatingOutputDeclarations(
1131
+ openToolObject(
1132
+ Type13.Object({
1133
+ status: Type13.Unknown({
1134
+ description: "completed | escalate"
1135
+ }),
1136
+ ticketNumber: Type13.Optional(
1137
+ Type13.Unknown({
1138
+ 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"
1139
+ })
1140
+ ),
1141
+ reason: Type13.Unknown({
1142
+ description: "status \u4E3A escalate \u65F6\uFF1A\u8BA4\u4E0D\u51FA\u672C\u5EAD\u5BF9\u8C61\u7684\u539F\u56E0"
1143
+ }),
1144
+ sessions: Type13.Optional(Type13.Unknown({ description: DIARIST_SESSIONS_DESCRIPTION })),
1145
+ ticketSessions: Type13.Unknown({
1146
+ 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`
1147
+ })
1148
+ })
1149
+ )
1150
+ );
1084
1151
  }
1085
1152
  });
1086
1153
 
1087
1154
  // src/secretariat-contracts.ts
1088
- var SECRETARIAT_OUTPUT_TOOL_NAME, SECRETARIAT_GATE_OFFICER_ENTRY_TYPE, SECRETARIAT_COUNTERSIGN_TERMINAL_FACT_KEY;
1155
+ import { Type as Type14 } from "typebox";
1156
+ var SECRETARIAT_OUTPUT_TOOL_NAME, secretariatVerdictSchema, SECRETARIAT_GATE_OFFICER_ENTRY_TYPE, SECRETARIAT_COUNTERSIGN_TERMINAL_FACT_KEY;
1089
1157
  var init_secretariat_contracts = __esm({
1090
1158
  "src/secretariat-contracts.ts"() {
1091
1159
  "use strict";
1160
+ init_terminating_infrastructure();
1092
1161
  SECRETARIAT_OUTPUT_TOOL_NAME = "ak_secretariat_output";
1162
+ secretariatVerdictSchema = withTerminatingOutputDeclarations(
1163
+ Type14.Object(
1164
+ {
1165
+ secretariatStatus: Type14.Unknown({
1166
+ description: "converged | escalate"
1167
+ }),
1168
+ ticketNumber: Type14.Optional(
1169
+ Type14.Unknown({ description: "\u672C\u7968\u53F7\uFF1B\u7F72\u65F6\u6307\u5411\u6700\u7EC8\u6B63\u6587\u6240\u5728\u7968" })
1170
+ ),
1171
+ note: Type14.Unknown({ description: "\u9644\u6CE8" }),
1172
+ evidence: Type14.Optional(Type14.Unknown({ description: "\u7559\u5B58\u8BC1\u636E" })),
1173
+ decisionGate: Type14.Unknown({
1174
+ description: "\u9700\u965B\u4E0B\u5904\u7F6E\u7684\u95EE\u9898\u4E0E\u9009\u9879\uFF1B\u53EF\u5199 question \u4E0E options\uFF0C\u539F\u6837\u7559\u5B58\u3002"
1175
+ })
1176
+ },
1177
+ { additionalProperties: true }
1178
+ )
1179
+ );
1180
+ secretariatVerdictSchema.required = [];
1093
1181
  SECRETARIAT_GATE_OFFICER_ENTRY_TYPE = "ak-secretariat-gate-officer";
1094
1182
  SECRETARIAT_COUNTERSIGN_TERMINAL_FACT_KEY = "countersignTerminal";
1095
1183
  }
@@ -2827,7 +2915,7 @@ __export(auditor_dossier_tool_exports, {
2827
2915
  createAuditorDossierTool: () => createAuditorDossierTool
2828
2916
  });
2829
2917
  import { dirname as dirname5, join as join8, resolve as resolve3 } from "node:path";
2830
- import { Type as Type10 } from "typebox";
2918
+ import { Type as Type15 } from "typebox";
2831
2919
  function auditorRunDirectory(context) {
2832
2920
  const sessionFile = context.sessionManager?.getSessionFile?.();
2833
2921
  if (sessionFile === void 0) return void 0;
@@ -2839,7 +2927,7 @@ function createAuditorDossierTool(runDirectory) {
2839
2927
  description: "\u5B9A\u4F4D\u672C\u5BA1\u8BA1\u5E2D\u7ED1\u5B9A\u7684 run \u5377\u5B97\u53CA\u5176\u8BC1\u636E\u5165\u53E3\u3002",
2840
2928
  // #836 r16 class 3: execute() ignores `_params` entirely — a closed root
2841
2929
  // only rejects the role for saying more.
2842
- parameters: Type10.Object({}, { additionalProperties: true }),
2930
+ parameters: Type15.Object({}, { additionalProperties: true }),
2843
2931
  async execute(_id, _params) {
2844
2932
  if (runDirectory === void 0) {
2845
2933
  return {
@@ -2957,6 +3045,161 @@ var init_submission_errors = __esm({
2957
3045
  }
2958
3046
  });
2959
3047
 
3048
+ // src/collector-tool-schemas.ts
3049
+ import { Type as Type16 } from "typebox";
3050
+ var collectorOutputBaseSchema, collectorOutputArgsSchema;
3051
+ var init_collector_tool_schemas = __esm({
3052
+ "src/collector-tool-schemas.ts"() {
3053
+ "use strict";
3054
+ init_open_tool_schema();
3055
+ init_terminating_infrastructure();
3056
+ collectorOutputBaseSchema = openToolObject(
3057
+ Type16.Object({
3058
+ groups: Type16.Unsafe({
3059
+ 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"
3060
+ }),
3061
+ unfinishedReasons: Type16.Unknown({
3062
+ description: "\u672A\u5B8C\u6210\u539F\u56E0\uFF1B\u53D6\u8BC1\u53D7\u9650\u65F6\u5982\u5B9E\u62A5\u544A\u3002"
3063
+ })
3064
+ })
3065
+ );
3066
+ collectorOutputArgsSchema = withTerminatingOutputDeclarations(
3067
+ collectorOutputBaseSchema
3068
+ );
3069
+ }
3070
+ });
3071
+
3072
+ // src/role-submission-declarations.ts
3073
+ function roleSubmissionDeclaration(role) {
3074
+ const name = packagedRoleOutputTool(role);
3075
+ if (name === void 0) throw new Error(`${role} output tool is not declared`);
3076
+ const face = SUBMISSION_FACE[role];
3077
+ return {
3078
+ role,
3079
+ name,
3080
+ label: face.label,
3081
+ description: face.description,
3082
+ ..."promptSnippet" in face ? { promptSnippet: face.promptSnippet } : {},
3083
+ parameters: face.parameters
3084
+ };
3085
+ }
3086
+ var SUBMISSION_FACE;
3087
+ var init_role_submission_declarations = __esm({
3088
+ "src/role-submission-declarations.ts"() {
3089
+ "use strict";
3090
+ init_packaged_role_registry();
3091
+ init_review_submission();
3092
+ init_collector_tool_schemas();
3093
+ init_diarist_contracts();
3094
+ init_doctor_contracts();
3095
+ init_fixer_output();
3096
+ init_gatekeeper_output();
3097
+ init_gleaner_left_contracts();
3098
+ init_merger_contracts();
3099
+ init_navigator_output();
3100
+ init_reviewer_output();
3101
+ init_secretariat_contracts();
3102
+ init_worker_output();
3103
+ SUBMISSION_FACE = {
3104
+ judge: {
3105
+ label: "\u5927\u7406\u5BFA\u8F93\u51FA",
3106
+ 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",
3107
+ promptSnippet: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD",
3108
+ parameters: reviewSubmissionSchema
3109
+ },
3110
+ fixer: {
3111
+ label: "\u4FEE\u5185\u53F8\u8F93\u51FA",
3112
+ description: "\u63D0\u4EA4\u4FEE\u5185\u53F8\u7EC8\u5C40\u56DE\u6267\u3002",
3113
+ promptSnippet: "\u63D0\u4EA4\u4FEE\u5185\u53F8\u7EC8\u5C40\u56DE\u6267",
3114
+ parameters: fixerOutputSchema
3115
+ },
3116
+ coder: {
3117
+ label: "\u5C06\u4F5C\u76D1\u8F93\u51FA",
3118
+ description: "\u63D0\u4EA4\u5C06\u4F5C\u76D1\u7EC8\u5C40\u56DE\u6267\u3002",
3119
+ promptSnippet: "\u63D0\u4EA4\u5C06\u4F5C\u76D1\u7EC8\u5C40\u56DE\u6267",
3120
+ parameters: coderOutputSchema
3121
+ },
3122
+ reviewer: {
3123
+ label: "\u5FA1\u53F2\u53F0\u8F93\u51FA",
3124
+ description: "\u63D0\u4EA4\u5FA1\u53F2\u53F0\u7EC8\u5C40\u56DE\u6267\u3002",
3125
+ promptSnippet: "\u63D0\u4EA4\u5FA1\u53F2\u53F0\u7EC8\u5C40\u56DE\u6267",
3126
+ parameters: reviewerOutputSchema
3127
+ },
3128
+ collector: {
3129
+ label: "\u901A\u8FDB\u53F8\u8F93\u51FA",
3130
+ description: "\u63D0\u4EA4\u901A\u8FDB\u53F8\u56DE\u6267\u3002",
3131
+ promptSnippet: "\u63D0\u4EA4\u901A\u8FDB\u53F8\u56DE\u6267",
3132
+ parameters: collectorOutputArgsSchema
3133
+ },
3134
+ doctor: {
3135
+ label: "\u592A\u533B\u7F72\u8F93\u51FA",
3136
+ description: DOCTOR_OUTPUT_TOOL_DESCRIPTION,
3137
+ parameters: doctorSubmissionSchema
3138
+ },
3139
+ merger: {
3140
+ label: "\u5408\u5E76\u8F93\u51FA",
3141
+ description: "\u63D0\u4EA4\u5408\u5E76\u7ED3\u679C\uFF1B\u8F93\u51FA\u5206\u652F\u4E3A completed \u4E0E escalate\u3002",
3142
+ promptSnippet: "\u63D0\u4EA4\u5408\u5E76\u7ED3\u679C",
3143
+ parameters: mergerOutputSchema
3144
+ },
3145
+ notary: {
3146
+ label: "\u7B26\u5B9D\u90CE\u8F93\u51FA",
3147
+ description: "\u63D0\u4EA4\u5F15\u6587\u4FDD\u771F\u4E0E\u7968\u9762\u5BF9\u9F50\u7684 converged/continue/escalate \u51B3\u8BAE\u3002",
3148
+ promptSnippet: "\u63D0\u4EA4\u7B26\u5B9D\u90CE\u51B3\u8BAE",
3149
+ parameters: reviewSubmissionSchema
3150
+ },
3151
+ countersign: {
3152
+ label: "\u7ED9\u4E8B\u4E2D\u8F93\u51FA",
3153
+ description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\u3002",
3154
+ promptSnippet: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE",
3155
+ parameters: reviewSubmissionSchema
3156
+ },
3157
+ secretariat: {
3158
+ label: "\u4E2D\u4E66\u7701\u8F93\u51FA",
3159
+ description: "\u4E2D\u4E66\u7701\u7EC8\u5C40\u56DE\u6267\u3002",
3160
+ promptSnippet: "\u4E2D\u4E66\u7701\u7EC8\u5C40\u56DE\u6267",
3161
+ parameters: secretariatVerdictSchema
3162
+ },
3163
+ "gleaner-left": {
3164
+ label: "\u5DE6\u62FE\u9057\u8F93\u51FA",
3165
+ description: "\u5DE6\u62FE\u9057\u5F39\u7AE0\u3002",
3166
+ promptSnippet: "\u5DE6\u62FE\u9057\u5F39\u7AE0",
3167
+ parameters: gleanerLeftOutputSchema
3168
+ },
3169
+ inspector: {
3170
+ label: "\u53F0\u9662\u8F93\u51FA",
3171
+ description: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267\uFF0C\u72B6\u6001\u4E3A converged\u3001continue \u6216 escalate\u3002",
3172
+ promptSnippet: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267",
3173
+ parameters: reviewSubmissionSchema
3174
+ },
3175
+ gatekeeper: {
3176
+ label: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
3177
+ description: "\u95E8\u4E0B\u7701\u7EC8\u5C40\u51B3\u8BAE\u3002status \u4E3A dispatch \u6216 pass\u3002",
3178
+ promptSnippet: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
3179
+ parameters: gatekeeperOutputSchema
3180
+ },
3181
+ navigator: {
3182
+ label: "\u6E38\u5955\u4F7F\u5EFA\u8BAE",
3183
+ description: "\u6E38\u5955\u4F7F\u7EC8\u5C40\u56DE\u6267\uFF1A\u6563\u6587\u5EFA\u8BAE\uFF0C\u539F\u6837\u5448\u73B0\u3002",
3184
+ promptSnippet: "\u6E38\u5955\u4F7F\u5EFA\u8BAE",
3185
+ parameters: navigatorOutputSchema
3186
+ },
3187
+ auditor: {
3188
+ label: "\u5BA1\u5211\u9662\u8F93\u51FA",
3189
+ description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\u3002",
3190
+ promptSnippet: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267",
3191
+ parameters: reviewSubmissionSchema
3192
+ },
3193
+ diarist: {
3194
+ label: "\u8D77\u5C45\u90CE\u8F93\u51FA",
3195
+ 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",
3196
+ promptSnippet: "\u8D77\u5C45\u90CE\u4EA4\u8FB9\u754C",
3197
+ parameters: diaristOutputSchema
3198
+ }
3199
+ };
3200
+ }
3201
+ });
3202
+
2960
3203
  // src/gatekeeper-role.ts
2961
3204
  function gateSeatLabel(stage) {
2962
3205
  return packagedGateStageLabel(stage) ?? stage;
@@ -2977,7 +3220,7 @@ function reviewQueueStatus(status) {
2977
3220
  function projectOfficerDecision(officer, decision, fallbackStatus) {
2978
3221
  const receipt = retainedReceipt(decision);
2979
3222
  const record = isRecord(decision) ? decision : void 0;
2980
- const status = (record !== void 0 && typeof record.status === "string" ? record.status : void 0) ?? fallbackStatus;
3223
+ const status = record !== void 0 && Object.hasOwn(record, "status") ? receivedDiscriminator(record, "status") : fallbackStatus;
2981
3224
  const queueStatus = typeof status === "string" ? reviewQueueStatus(status) : void 0;
2982
3225
  if (queueStatus === "converged") {
2983
3226
  return { status: "converged", officer, receipt };
@@ -3130,6 +3373,7 @@ var init_gatekeeper_role = __esm({
3130
3373
  init_inspector_contracts();
3131
3374
  init_review_submission();
3132
3375
  init_gatekeeper_output();
3376
+ init_role_submission_declarations();
3133
3377
  init_run_terminal_artifacts();
3134
3378
  init_unknown_value();
3135
3379
  init_submission_errors();
@@ -3140,13 +3384,7 @@ var init_gatekeeper_role = __esm({
3140
3384
  countersign_verdict: "notary",
3141
3385
  secretariat_verdict: "countersign"
3142
3386
  };
3143
- GATEKEEPER_TOOL_SPEC = {
3144
- name: GATEKEEPER_OUTPUT_TOOL_NAME,
3145
- label: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
3146
- description: "\u95E8\u4E0B\u7701\u7EC8\u5C40\u51B3\u8BAE\u3002status \u4E3A dispatch \u6216 pass\u3002",
3147
- promptSnippet: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
3148
- parameters: gatekeeperOutputSchema
3149
- };
3387
+ GATEKEEPER_TOOL_SPEC = roleSubmissionDeclaration("gatekeeper");
3150
3388
  }
3151
3389
  });
3152
3390
 
@@ -11677,16 +11915,43 @@ var init_doctor_auditor = __esm({
11677
11915
  }
11678
11916
  });
11679
11917
 
11918
+ // src/filed-submission.ts
11919
+ function registerFiledSubmissionTool(roleHost, tool, options) {
11920
+ roleHost.registerTool({
11921
+ name: tool.name,
11922
+ label: tool.label,
11923
+ description: tool.description,
11924
+ ...tool.promptSnippet === void 0 ? {} : { promptSnippet: tool.promptSnippet },
11925
+ parameters: tool.parameters,
11926
+ async execute(toolCallId, parameters, signal, _onUpdate, ctx) {
11927
+ const blocked = options.readyError();
11928
+ if (blocked !== void 0) throw new Error(blocked);
11929
+ const projected = options.beforeAccept === void 0 ? void 0 : await options.beforeAccept({ toolCallId, parameters, signal, ctx });
11930
+ return {
11931
+ content: [],
11932
+ details: projected === void 0 ? parameters : projected,
11933
+ terminate: true
11934
+ };
11935
+ }
11936
+ });
11937
+ }
11938
+ var init_filed_submission = __esm({
11939
+ "src/filed-submission.ts"() {
11940
+ "use strict";
11941
+ }
11942
+ });
11943
+
11680
11944
  // src/judge-role.ts
11681
11945
  async function runJudgeGates(input) {
11682
11946
  const passes = [];
11683
11947
  for (const subject of JUDGE_GATES) {
11684
11948
  if (await input.gateAlreadyConverged(subject)) continue;
11685
11949
  const pass = await input.runGate(subject);
11686
- const status = pass?.status;
11687
- if (pass === void 0 || status !== "converged" && status !== "continue" && status !== "escalate") {
11950
+ const received = pass?.status;
11951
+ if (pass === void 0 || typeof received !== "string" || !REVIEW_QUEUE_STATUSES.has(received)) {
11688
11952
  throw new Error("judge gate returned no conclusion");
11689
11953
  }
11954
+ const status = received;
11690
11955
  passes.push({
11691
11956
  subject,
11692
11957
  status,
@@ -11707,16 +11972,8 @@ function createJudgeRoleRuntime(pi, dependencies) {
11707
11972
  if (soul.length === 0) throw new Error("Judge soul is empty");
11708
11973
  if (!lifecycleRegistered) {
11709
11974
  lifecycleRegistered = true;
11710
- pi.registerTool({
11711
- name: JUDGE_OUTPUT_TOOL_NAME,
11712
- label: "\u5927\u7406\u5BFA\u8F93\u51FA",
11713
- 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",
11714
- promptSnippet: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD",
11715
- parameters: judgeVerdictSchema,
11716
- async execute(toolCallId, parameters, signal, _onUpdate, ctx) {
11717
- if (soul === void 0) throw new Error("\u5927\u7406\u5BFA\u804C\u5206\u672A\u88C5\u8F7D");
11718
- return { content: [], details: parameters, terminate: true };
11719
- }
11975
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("judge"), {
11976
+ readyError: () => soul === void 0 ? "\u5927\u7406\u5BFA\u804C\u5206\u672A\u88C5\u8F7D" : void 0
11720
11977
  });
11721
11978
  pi.on("before_agent_start", (event) => {
11722
11979
  if (soul === void 0) throw new Error("\u5927\u7406\u5BFA\u804C\u5206\u672A\u88C5\u8F7D");
@@ -11732,19 +11989,20 @@ ${soul}
11732
11989
  }
11733
11990
  };
11734
11991
  }
11735
- var JUDGE_GATES, judgeVerdictSchema;
11992
+ var JUDGE_GATES;
11736
11993
  var init_judge_role = __esm({
11737
11994
  "src/judge-role.ts"() {
11738
11995
  "use strict";
11739
11996
  init_host_contracts();
11740
11997
  init_review_submission();
11998
+ init_filed_submission();
11999
+ init_role_submission_declarations();
11741
12000
  init_gatekeeper_role();
11742
12001
  init_judge_output();
11743
12002
  JUDGE_GATES = [
11744
12003
  { kind: "judge_draft" },
11745
12004
  { kind: "judge_compliance" }
11746
12005
  ];
11747
- judgeVerdictSchema = reviewSubmissionSchema;
11748
12006
  }
11749
12007
  });
11750
12008
 
@@ -11767,11 +12025,10 @@ function latestQueueStatus(terminal) {
11767
12025
  if (outcome.kind === "audit_escalation") return "escalate";
11768
12026
  if (outcome.kind !== "accepted") return void 0;
11769
12027
  const latest = outcome.payloads?.[outcome.payloads.length - 1];
11770
- if (isRecord(latest)) {
11771
- const status = latest.status;
11772
- if (typeof status === "string" && status.trim() !== "") return status;
12028
+ if (isRecord(latest) && Object.hasOwn(latest, "status")) {
12029
+ return receivedDiscriminator(latest, "status");
11773
12030
  }
11774
- return typeof outcome.status === "string" && outcome.status.trim() !== "" ? outcome.status : void 0;
12031
+ return outcome.status;
11775
12032
  }
11776
12033
  function latestQueuePayload(terminal) {
11777
12034
  const outcome = terminal?.roleOutcome;
@@ -11888,6 +12145,7 @@ var init_submission_gate = __esm({
11888
12145
  "use strict";
11889
12146
  init_archivist_record_pointer();
11890
12147
  init_gatekeeper_role();
12148
+ init_submission_errors();
11891
12149
  init_session_assistant_usage();
11892
12150
  init_unknown_value();
11893
12151
  }
@@ -13964,8 +14222,8 @@ function unreadablePostSubmissionStatus(admitted, terminal) {
13964
14222
  const route = POST_SUBMISSION_ROUTING[admitted.role];
13965
14223
  if (route === void 0) return void 0;
13966
14224
  const payload = terminal.roleOutcome.payloads?.at(-1);
13967
- const status = isRecord(payload) ? payload.status : void 0;
13968
- return typeof status === "string" && route.statuses.has(status) ? void 0 : route.reask;
14225
+ const status = receivedDiscriminator(payload, "status");
14226
+ return typeof status === "string" && route.statuses.has(status) ? void 0 : route.reask ?? officerConclusionReask(status);
13969
14227
  }
13970
14228
  async function reaskUnreadablePostSubmissionStatus(admitted, terminal, env, io) {
13971
14229
  const message = unreadablePostSubmissionStatus(admitted, terminal);
@@ -14582,7 +14840,7 @@ async function queueConclusionFromChild(child, env, io) {
14582
14840
  void 0
14583
14841
  );
14584
14842
  const status = latestQueueStatus(terminal);
14585
- if (terminal !== void 0 && status !== void 0 && QUEUE_CONCLUSIONS.has(status)) {
14843
+ if (terminal !== void 0 && typeof status === "string" && REVIEW_QUEUE_STATUSES.has(status)) {
14586
14844
  return { admitted: current, terminal, status };
14587
14845
  }
14588
14846
  const reasked = await runPublicInstructionSeatResume({
@@ -14593,7 +14851,7 @@ async function queueConclusionFromChild(child, env, io) {
14593
14851
  return { stop: reasked };
14594
14852
  }
14595
14853
  const reaskedStatus = latestQueueStatus(reasked.terminal);
14596
- if (reaskedStatus !== void 0 && QUEUE_CONCLUSIONS.has(reaskedStatus)) {
14854
+ if (typeof reaskedStatus === "string" && REVIEW_QUEUE_STATUSES.has(reaskedStatus)) {
14597
14855
  return { admitted: reasked.admitted, terminal: reasked.terminal, status: reaskedStatus };
14598
14856
  }
14599
14857
  if (latestPayloadEscalated(reasked.terminal.roleOutcome)) return { stop: reasked };
@@ -14640,9 +14898,9 @@ async function auditSubmittedRole(turn, env, io, passedOfficer, passedReceipt, p
14640
14898
  io
14641
14899
  );
14642
14900
  }
14643
- if (admitted.role === "countersign" && (typeof status !== "string" || !QUEUE_CONCLUSIONS.has(status))) {
14901
+ if (admitted.role === "countersign" && (typeof status !== "string" || !REVIEW_QUEUE_STATUSES.has(status))) {
14644
14902
  return runPublicInstructionSeatResume(
14645
- { runId: admitted.runId, message: COUNTERSIGN_STATUS_REASK },
14903
+ { runId: admitted.runId, message: officerConclusionReask(status) },
14646
14904
  { ...env, autoResumeLimit: 0 },
14647
14905
  io
14648
14906
  );
@@ -14819,7 +15077,7 @@ async function auditSubmittedRole(turn, env, io, passedOfficer, passedReceipt, p
14819
15077
  io.stdout(formatTerminalResult(terminal));
14820
15078
  return turn;
14821
15079
  }
14822
- var AUDITED_ROLES, SECRETARIAT_STATUS_REASK, COUNTERSIGN_STATUS_REASK, WORKER_ROUTING_STATUSES, WORKER_STATUS_REASK, DOCTOR_ROUTING_STATUSES, DOCTOR_STATUS_REASK, POST_SUBMISSION_ROUTING, QUEUE_CONCLUSIONS, GATE_CHILD_ROLES;
15080
+ var AUDITED_ROLES, SECRETARIAT_STATUS_REASK, WORKER_ROUTING_STATUSES, WORKER_STATUS_REASK, DOCTOR_ROUTING_STATUSES, DOCTOR_STATUS_REASK, POST_SUBMISSION_ROUTING, GATE_CHILD_ROLES;
14823
15081
  var init_instruction_seat_run = __esm({
14824
15082
  "src/public-cli/instruction-seat-run.ts"() {
14825
15083
  "use strict";
@@ -14828,6 +15086,8 @@ var init_instruction_seat_run = __esm({
14828
15086
  init_archivist_record_pointer();
14829
15087
  init_doctor_auditor();
14830
15088
  init_gatekeeper_role();
15089
+ init_submission_errors();
15090
+ init_review_submission();
14831
15091
  init_judge_role();
14832
15092
  init_worker_submission_contracts();
14833
15093
  init_secretariat_contracts();
@@ -14856,7 +15116,6 @@ var init_instruction_seat_run = __esm({
14856
15116
  init_unknown_value();
14857
15117
  AUDITED_ROLES = /* @__PURE__ */ new Set(["judge", "fixer", "coder", "secretariat", "countersign", "doctor"]);
14858
15118
  SECRETARIAT_STATUS_REASK = "secretariatStatus \u4E0D\u662F converged\u3001escalate \u4E4B\u4E00\u3002\u8BF7\u91CD\u65B0\u4EA4\u5377\uFF0CsecretariatStatus \u5199\u660E\u5176\u4E00\u3002";
14859
- 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";
14860
15119
  WORKER_ROUTING_STATUSES = /* @__PURE__ */ new Set([
14861
15120
  "planned",
14862
15121
  "completed",
@@ -14869,8 +15128,7 @@ var init_instruction_seat_run = __esm({
14869
15128
  DOCTOR_STATUS_REASK = "status \u4E0D\u662F completed\u3001refused \u4E4B\u4E00\u3002\u8BF7\u91CD\u65B0\u4EA4\u5377\uFF0Cstatus \u5199\u660E\u5176\u4E00\u3002";
14870
15129
  POST_SUBMISSION_ROUTING = {
14871
15130
  judge: {
14872
- statuses: /* @__PURE__ */ new Set(["converged", "continue", "escalate"]),
14873
- reask: "status \u4E0D\u662F converged\u3001continue\u3001escalate \u4E09\u6001\u4E4B\u4E00\u3002\u8BF7\u91CD\u65B0\u4EA4\u5377\uFF0Cstatus \u5199\u660E\u5176\u4E00\u3002"
15131
+ statuses: REVIEW_QUEUE_STATUSES
14874
15132
  },
14875
15133
  coder: {
14876
15134
  statuses: WORKER_ROUTING_STATUSES,
@@ -14891,7 +15149,6 @@ var init_instruction_seat_run = __esm({
14891
15149
  reask: DOCTOR_STATUS_REASK
14892
15150
  }
14893
15151
  };
14894
- QUEUE_CONCLUSIONS = /* @__PURE__ */ new Set(["converged", "continue", "escalate"]);
14895
15152
  GATE_CHILD_ROLES = /* @__PURE__ */ new Set(["notary", "auditor", "inspector", "countersign"]);
14896
15153
  }
14897
15154
  });
@@ -16623,7 +16880,7 @@ var init_analyst_model_groups = __esm({
16623
16880
 
16624
16881
  // src/analyst-entry.ts
16625
16882
  import { readFile as readFile19 } from "node:fs/promises";
16626
- import { Type as Type11 } from "typebox";
16883
+ import { Type as Type17 } from "typebox";
16627
16884
  function cachedPageMatchesRequestedScope(page, input) {
16628
16885
  if (page.bookKey !== input.bookKey) return false;
16629
16886
  const requestedTicket = input.ticketNumber ?? input.issueNumber;
@@ -16828,16 +17085,16 @@ var init_analyst_entry = __esm({
16828
17085
  }
16829
17086
  }
16830
17087
  };
16831
- analystSweepModeInputSchema = Type11.Object(
17088
+ analystSweepModeInputSchema = Type17.Object(
16832
17089
  {
16833
- mode: Type11.Literal("sweep"),
16834
- mergedPullRequests: Type11.Array(
16835
- Type11.Object(
17090
+ mode: Type17.Literal("sweep"),
17091
+ mergedPullRequests: Type17.Array(
17092
+ Type17.Object(
16836
17093
  {
16837
- projectRoot: Type11.String(),
17094
+ projectRoot: Type17.String(),
16838
17095
  /** 排除后改动行数 — omit or 0 → typed 空缺; finite ≥ 0 only. */
16839
- changedLines: Type11.Optional(
16840
- Type11.Number({ minimum: 0, maximum: Number.MAX_VALUE })
17096
+ changedLines: Type17.Optional(
17097
+ Type17.Number({ minimum: 0, maximum: Number.MAX_VALUE })
16841
17098
  )
16842
17099
  }
16843
17100
  )
@@ -20626,24 +20883,25 @@ import { fileURLToPath as fileURLToPath2 } from "node:url";
20626
20883
  init_host_contracts();
20627
20884
  init_sitian_facade();
20628
20885
  init_submission_ledger();
20886
+ init_filed_submission();
20629
20887
  import { randomUUID as randomUUID8 } from "node:crypto";
20630
20888
  import { readFileSync as readFileSync6, writeSync as writeSync2 } from "node:fs";
20631
20889
  import { join as join43 } from "node:path";
20632
20890
  import { Value as Value4 } from "typebox/value";
20633
20891
 
20634
20892
  // src/activation-trace.ts
20635
- import { Type as Type12 } from "typebox";
20636
- var causeSchema = Type12.Object({
20637
- identity: Type12.String({ minLength: 1 }),
20638
- name: Type12.String({ minLength: 1 }),
20639
- message: Type12.String(),
20640
- evidenceId: Type12.Optional(Type12.String({ minLength: 1 }))
20893
+ import { Type as Type18 } from "typebox";
20894
+ var causeSchema = Type18.Object({
20895
+ identity: Type18.String({ minLength: 1 }),
20896
+ name: Type18.String({ minLength: 1 }),
20897
+ message: Type18.String(),
20898
+ evidenceId: Type18.Optional(Type18.String({ minLength: 1 }))
20641
20899
  }, { additionalProperties: false });
20642
- var activationTraceRecordSchema = Type12.Object({
20643
- role: Type12.String({ minLength: 1 }),
20644
- stageId: Type12.String({ pattern: "^[a-z][a-z0-9-]*$" }),
20645
- status: Type12.Literal("failed"),
20646
- timestamp: Type12.String({ format: "date-time" }),
20900
+ var activationTraceRecordSchema = Type18.Object({
20901
+ role: Type18.String({ minLength: 1 }),
20902
+ stageId: Type18.String({ pattern: "^[a-z][a-z0-9-]*$" }),
20903
+ status: Type18.Literal("failed"),
20904
+ timestamp: Type18.String({ format: "date-time" }),
20647
20905
  cause: causeSchema
20648
20906
  }, { additionalProperties: false });
20649
20907
  var activationCauseEvidence = 0;
@@ -20807,10 +21065,10 @@ init_engine_material();
20807
21065
  init_engine_detour();
20808
21066
  init_engine_detour_usage();
20809
21067
  init_run_terminal_artifacts();
20810
- import { Type as Type13 } from "typebox";
20811
- var engineDetourArgsSchema = Type13.Object(
21068
+ import { Type as Type19 } from "typebox";
21069
+ var engineDetourArgsSchema = Type19.Object(
20812
21070
  {
20813
- argv: Type13.Array(Type13.String({ minLength: 1 }), {
21071
+ argv: Type19.Array(Type19.String({ minLength: 1 }), {
20814
21072
  minItems: 1,
20815
21073
  description: "\u9996\u9879\u4E3A PATH \u4E2D\u7684\u53EF\u6267\u884C\u6587\u4EF6\uFF0C\u5176\u4F59\u9879\u4E3A\u53C2\u6570\u3002"
20816
21074
  })
@@ -20944,28 +21202,10 @@ function registerEngineDetourTool(roleHost, hostActions) {
20944
21202
  init_receipt_delivery_policy();
20945
21203
 
20946
21204
  // src/collector-role.ts
21205
+ init_filed_submission();
21206
+ init_role_submission_declarations();
20947
21207
  init_collector_config();
20948
21208
  init_collector_output();
20949
-
20950
- // src/collector-tool-schemas.ts
20951
- init_open_tool_schema();
20952
- init_terminating_infrastructure();
20953
- import { Type as Type14 } from "typebox";
20954
- var collectorOutputBaseSchema = openToolObject(
20955
- Type14.Object({
20956
- groups: Type14.Unsafe({
20957
- 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"
20958
- }),
20959
- unfinishedReasons: Type14.Unknown({
20960
- description: "\u672A\u5B8C\u6210\u539F\u56E0\uFF1B\u53D6\u8BC1\u53D7\u9650\u65F6\u5982\u5B9E\u62A5\u544A\u3002"
20961
- })
20962
- })
20963
- );
20964
- var collectorOutputArgsSchema = withTerminatingOutputDeclarations(
20965
- collectorOutputBaseSchema
20966
- );
20967
-
20968
- // src/collector-role.ts
20969
21209
  var COLLECTOR_REQUIRED_TOOLS = [COLLECTOR_OUTPUT_TOOL];
20970
21210
  var COLLECTOR_CONSTRUCTION_TOOLS = Object.freeze(["write", "edit"]);
20971
21211
  var COLLECTOR_TRANSPORT_FLAGS = Object.freeze([
@@ -20991,7 +21231,6 @@ var COLLECTOR_TRANSPORT_FLAGS = Object.freeze([
20991
21231
  })
20992
21232
  })
20993
21233
  ]);
20994
- var outputSchema = collectorOutputArgsSchema;
20995
21234
  function buildMethodContext(activation) {
20996
21235
  const lines = [
20997
21236
  "<collector_method>",
@@ -21063,27 +21302,16 @@ function createCollectorRoleRuntime(pi, dependencies) {
21063
21302
  registerBusinessTools(getActivation) {
21064
21303
  if (toolsRegistered) return;
21065
21304
  toolsRegistered = true;
21066
- pi.registerTool({
21067
- name: COLLECTOR_OUTPUT_TOOL,
21068
- label: "\u901A\u8FDB\u53F8\u8F93\u51FA",
21069
- description: "\u63D0\u4EA4\u901A\u8FDB\u53F8\u56DE\u6267\u3002",
21070
- promptSnippet: "\u63D0\u4EA4\u901A\u8FDB\u53F8\u56DE\u6267",
21071
- parameters: outputSchema,
21072
- async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
21073
- const activation = getActivation();
21074
- if (activation === void 0) throw new Error("\u901A\u8FDB\u53F8\u672A\u6FC0\u6D3B");
21075
- return {
21076
- content: [],
21077
- details: params,
21078
- terminate: true
21079
- };
21080
- }
21305
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("collector"), {
21306
+ readyError: () => getActivation() === void 0 ? "\u901A\u8FDB\u53F8\u672A\u6FC0\u6D3B" : void 0
21081
21307
  });
21082
21308
  }
21083
21309
  };
21084
21310
  }
21085
21311
 
21086
21312
  // src/doctor-role.ts
21313
+ init_filed_submission();
21314
+ init_role_submission_declarations();
21087
21315
  init_compliance_transport();
21088
21316
  init_dossier_resolution();
21089
21317
  init_doctor_contracts();
@@ -21130,17 +21358,20 @@ function createDoctorRoleRuntime(pi, dependencies, host) {
21130
21358
  const details = activation.store.read(params.evidenceId, params.offset, params.limit);
21131
21359
  return { content: [{ type: "text", text: JSON.stringify(details) }], details };
21132
21360
  } });
21133
- pi.registerTool({ name: DOCTOR_OUTPUT_TOOL_NAME, label: "\u592A\u533B\u7F72\u8F93\u51FA", description: DOCTOR_OUTPUT_TOOL_DESCRIPTION, parameters: doctorSubmissionSchema, async execute(id, params, _signal, _update, ctx) {
21134
- if (!activation) throw new Error("\u592A\u533B\u7F72\u672A\u6FC0\u6D3B");
21135
- const active2 = activation;
21136
- const testimony = validateDoctorOutput(params, active2.patient, active2.store);
21137
- try {
21138
- appendCandidate(ctx, { version: 1, testimony, cost: active2.patient.cost, readRecord: active2.store.readRecord(), patientIdentity: active2.patient.identity });
21139
- } catch (error) {
21140
- host.failInfrastructure(error, ctx, id);
21361
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("doctor"), {
21362
+ readyError: () => activation === void 0 ? "\u592A\u533B\u7F72\u672A\u6FC0\u6D3B" : void 0,
21363
+ beforeAccept: async ({ toolCallId, parameters, ctx }) => {
21364
+ if (activation === void 0) throw new Error("\u592A\u533B\u7F72\u672A\u6FC0\u6D3B");
21365
+ const active2 = activation;
21366
+ const testimony = validateDoctorOutput(parameters, active2.patient, active2.store);
21367
+ try {
21368
+ appendCandidate(ctx, { version: 1, testimony, cost: active2.patient.cost, readRecord: active2.store.readRecord(), patientIdentity: active2.patient.identity });
21369
+ } catch (error) {
21370
+ host.failInfrastructure(error, ctx, toolCallId);
21371
+ }
21372
+ return testimony;
21141
21373
  }
21142
- return { content: [], details: testimony, terminate: true };
21143
- } });
21374
+ });
21144
21375
  pi.on("before_agent_start", (event) => {
21145
21376
  if (!activation) throw new Error("\u592A\u533B\u7F72\u672A\u6FC0\u6D3B");
21146
21377
  const catalog = { version: activation.patient.version, identity: activation.patient.identity, admittedMetrics: { cost: activation.patient.cost }, lawfulTargetKeys: ["case", ...activation.patient.cost.invocations.sources], evidence: activation.patient.evidence.map(({ id, kind, sha256, byteLength, contentLength }) => ({ id, kind, sha256, byteLength, contentLength })) };
@@ -21165,6 +21396,8 @@ ${JSON.stringify(catalog)}
21165
21396
  }
21166
21397
 
21167
21398
  // src/notary-role.ts
21399
+ init_filed_submission();
21400
+ init_role_submission_declarations();
21168
21401
  init_notary_contracts();
21169
21402
  function readNotaryTicketFlag(flag) {
21170
21403
  if (flag === void 0) return void 0;
@@ -21232,22 +21465,8 @@ function createNotaryRoleRuntime(pi, dependencies, host) {
21232
21465
  };
21233
21466
  if (!registered) {
21234
21467
  registered = true;
21235
- pi.registerTool({
21236
- name: NOTARY_OUTPUT_TOOL_NAME,
21237
- label: "\u7B26\u5B9D\u90CE\u8F93\u51FA",
21238
- description: "\u63D0\u4EA4\u5F15\u6587\u4FDD\u771F\u4E0E\u7968\u9762\u5BF9\u9F50\u7684 converged/continue/escalate \u51B3\u8BAE\u3002",
21239
- promptSnippet: "\u63D0\u4EA4\u7B26\u5B9D\u90CE\u51B3\u8BAE",
21240
- parameters: notaryOutputSchema,
21241
- async execute(toolCallId, parameters, _signal, _onUpdate, ctx) {
21242
- if (activation === void 0) {
21243
- throw new Error("\u7B26\u5B9D\u90CE\u672A\u6FC0\u6D3B");
21244
- }
21245
- return {
21246
- content: [],
21247
- details: parameters,
21248
- terminate: true
21249
- };
21250
- }
21468
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("notary"), {
21469
+ readyError: () => activation === void 0 ? "\u7B26\u5B9D\u90CE\u672A\u6FC0\u6D3B" : void 0
21251
21470
  });
21252
21471
  pi.on("before_agent_start", (event) => {
21253
21472
  if (activation === void 0) {
@@ -21280,128 +21499,41 @@ init_notary_contracts();
21280
21499
 
21281
21500
  // src/countersign-role.ts
21282
21501
  init_review_submission();
21502
+ init_role_submission_declarations();
21283
21503
  init_countersign_contracts();
21284
21504
  init_countersign_contracts();
21285
- var countersignVerdictSchema = reviewSubmissionSchema;
21286
- var COUNTERSIGN_TOOL_SPEC = {
21287
- name: COUNTERSIGN_OUTPUT_TOOL_NAME,
21288
- label: "\u7ED9\u4E8B\u4E2D\u8F93\u51FA",
21289
- description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\u3002",
21290
- promptSnippet: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE",
21291
- parameters: countersignVerdictSchema
21292
- };
21505
+ var COUNTERSIGN_TOOL_SPEC = roleSubmissionDeclaration("countersign");
21293
21506
 
21294
21507
  // src/gleaner-left-role.ts
21295
- init_open_tool_schema();
21296
- init_terminating_infrastructure();
21297
21508
  init_gleaner_left_contracts();
21509
+ init_role_submission_declarations();
21298
21510
  init_gleaner_left_contracts();
21299
- import { Type as Type15 } from "typebox";
21300
- var gleanerLeftOutputSchema = withTerminatingOutputDeclarations(
21301
- openToolObject(
21302
- Type15.Object({
21303
- status: Type15.Unknown({
21304
- description: "completed"
21305
- }),
21306
- findings: Type15.Unknown({
21307
- 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"
21308
- })
21309
- })
21310
- )
21311
- );
21312
- var GLEANER_LEFT_TOOL_SPEC = {
21313
- name: GLEANER_LEFT_OUTPUT_TOOL_NAME,
21314
- label: "\u5DE6\u62FE\u9057\u8F93\u51FA",
21315
- description: "\u5DE6\u62FE\u9057\u5F39\u7AE0\u3002",
21316
- promptSnippet: "\u5DE6\u62FE\u9057\u5F39\u7AE0",
21317
- parameters: gleanerLeftOutputSchema
21318
- };
21511
+ var GLEANER_LEFT_TOOL_SPEC = roleSubmissionDeclaration("gleaner-left");
21319
21512
 
21320
21513
  // src/role-runtime.ts
21321
21514
  init_gleaner_left_contracts();
21322
21515
 
21323
21516
  // src/inspector-role.ts
21324
21517
  init_review_submission();
21518
+ init_role_submission_declarations();
21325
21519
  init_inspector_contracts();
21326
- var inspectorOutputSchema = reviewSubmissionSchema;
21327
- var INSPECTOR_TOOL_SPEC = {
21328
- name: INSPECTOR_OUTPUT_TOOL_NAME,
21329
- label: "\u53F0\u9662\u8F93\u51FA",
21330
- description: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267\uFF0C\u72B6\u6001\u4E3A converged\u3001continue \u6216 escalate\u3002",
21331
- promptSnippet: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267",
21332
- parameters: inspectorOutputSchema
21333
- };
21520
+ var INSPECTOR_TOOL_SPEC = roleSubmissionDeclaration("inspector");
21334
21521
 
21335
21522
  // src/role-runtime.ts
21336
21523
  init_inspector_contracts();
21337
21524
 
21338
21525
  // src/diarist-role.ts
21339
- init_open_tool_schema();
21340
- init_terminating_infrastructure();
21341
21526
  init_diarist_contracts();
21527
+ init_role_submission_declarations();
21342
21528
  init_diarist_contracts();
21343
- import { Type as Type16 } from "typebox";
21344
- var 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";
21345
- var diaristOutputSchema = withTerminatingOutputDeclarations(
21346
- openToolObject(
21347
- Type16.Object({
21348
- status: Type16.Unknown({
21349
- description: "completed | escalate"
21350
- }),
21351
- ticketNumber: Type16.Optional(
21352
- Type16.Unknown({
21353
- 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"
21354
- })
21355
- ),
21356
- reason: Type16.Unknown({
21357
- description: "status \u4E3A escalate \u65F6\uFF1A\u8BA4\u4E0D\u51FA\u672C\u5EAD\u5BF9\u8C61\u7684\u539F\u56E0"
21358
- }),
21359
- sessions: Type16.Optional(Type16.Unknown({ description: DIARIST_SESSIONS_DESCRIPTION })),
21360
- ticketSessions: Type16.Unknown({
21361
- 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`
21362
- })
21363
- })
21364
- )
21365
- );
21366
- var DIARIST_TOOL_SPEC = {
21367
- name: DIARIST_OUTPUT_TOOL_NAME,
21368
- label: "\u8D77\u5C45\u90CE\u8F93\u51FA",
21369
- 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",
21370
- promptSnippet: "\u8D77\u5C45\u90CE\u4EA4\u8FB9\u754C",
21371
- parameters: diaristOutputSchema
21372
- };
21529
+ var DIARIST_TOOL_SPEC = roleSubmissionDeclaration("diarist");
21373
21530
 
21374
21531
  // src/secretariat-role.ts
21375
- init_terminating_infrastructure();
21376
21532
  init_secretariat_contracts();
21533
+ init_role_submission_declarations();
21377
21534
  init_secretariat_contracts();
21378
- import { Type as Type17 } from "typebox";
21379
- var secretariatVerdictSchema = withTerminatingOutputDeclarations(
21380
- Type17.Object(
21381
- {
21382
- secretariatStatus: Type17.Unknown({
21383
- description: "converged | escalate"
21384
- }),
21385
- ticketNumber: Type17.Optional(
21386
- Type17.Unknown({ description: "\u672C\u7968\u53F7\uFF1B\u7F72\u65F6\u6307\u5411\u6700\u7EC8\u6B63\u6587\u6240\u5728\u7968" })
21387
- ),
21388
- note: Type17.Unknown({ description: "\u9644\u6CE8" }),
21389
- evidence: Type17.Optional(Type17.Unknown({ description: "\u7559\u5B58\u8BC1\u636E" })),
21390
- decisionGate: Type17.Unknown({
21391
- description: "\u9700\u965B\u4E0B\u5904\u7F6E\u7684\u95EE\u9898\u4E0E\u9009\u9879\uFF1B\u53EF\u5199 question \u4E0E options\uFF0C\u539F\u6837\u7559\u5B58\u3002"
21392
- })
21393
- },
21394
- { additionalProperties: true }
21395
- )
21396
- );
21397
- secretariatVerdictSchema.required = [];
21398
- var SECRETARIAT_OUTPUT_TOOL_SPEC = {
21399
- name: SECRETARIAT_OUTPUT_TOOL_NAME,
21400
- label: "\u4E2D\u4E66\u7701\u8F93\u51FA",
21401
- description: "\u4E2D\u4E66\u7701\u7EC8\u5C40\u56DE\u6267\u3002",
21402
- promptSnippet: "\u4E2D\u4E66\u7701\u7EC8\u5C40\u56DE\u6267",
21403
- parameters: secretariatVerdictSchema
21404
- };
21535
+ init_secretariat_contracts();
21536
+ var SECRETARIAT_OUTPUT_TOOL_SPEC = roleSubmissionDeclaration("secretariat");
21405
21537
 
21406
21538
  // src/role-runtime.ts
21407
21539
  init_secretariat_contracts();
@@ -21419,24 +21551,13 @@ init_invocation();
21419
21551
  init_gatekeeper_role();
21420
21552
 
21421
21553
  // src/navigator-role.ts
21422
- init_navigator_output();
21423
- var NAVIGATOR_TOOL_SPEC = {
21424
- name: NAVIGATOR_OUTPUT_TOOL_NAME,
21425
- label: "\u6E38\u5955\u4F7F\u5EFA\u8BAE",
21426
- description: "\u6E38\u5955\u4F7F\u7EC8\u5C40\u56DE\u6267\uFF1A\u6563\u6587\u5EFA\u8BAE\uFF0C\u539F\u6837\u5448\u73B0\u3002",
21427
- promptSnippet: "\u6E38\u5955\u4F7F\u5EFA\u8BAE",
21428
- parameters: navigatorOutputSchema
21429
- };
21554
+ init_role_submission_declarations();
21555
+ var NAVIGATOR_TOOL_SPEC = roleSubmissionDeclaration("navigator");
21430
21556
 
21431
21557
  // src/auditor-role.ts
21432
21558
  init_auditor_output();
21433
- var AUDITOR_TOOL_SPEC = {
21434
- name: AUDITOR_OUTPUT_TOOL_NAME,
21435
- label: "\u5BA1\u5211\u9662\u8F93\u51FA",
21436
- description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\u3002",
21437
- promptSnippet: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267",
21438
- parameters: auditorOutputSchema
21439
- };
21559
+ init_role_submission_declarations();
21560
+ var AUDITOR_TOOL_SPEC = roleSubmissionDeclaration("auditor");
21440
21561
 
21441
21562
  // src/navigator-attendance.ts
21442
21563
  init_navigator_invocation_identity();
@@ -21444,7 +21565,7 @@ init_packaged_role_registry();
21444
21565
  init_activation_ledger_topology();
21445
21566
  import { resolve as resolve18 } from "node:path";
21446
21567
  import "@earendil-works/pi-coding-agent";
21447
- import { Type as Type19 } from "typebox";
21568
+ import { Type as Type21 } from "typebox";
21448
21569
 
21449
21570
  // src/navigator-public-session.ts
21450
21571
  init_sitian_facade();
@@ -21453,7 +21574,7 @@ import { basename as basename11 } from "node:path";
21453
21574
 
21454
21575
  // src/navigator-session-contracts.ts
21455
21576
  init_unknown_value();
21456
- import { Type as Type18 } from "typebox";
21577
+ import { Type as Type20 } from "typebox";
21457
21578
  import { Value as Value3 } from "typebox/value";
21458
21579
  var NAVIGATOR_PREPARE_TOOL_NAME = "ak_navigator_prepare";
21459
21580
  var NAVIGATOR_UNAVAILABLE_KEYS = /* @__PURE__ */ new Set([
@@ -21558,26 +21679,26 @@ function navigatorProviderFailureFromPublicTerminal(outcome) {
21558
21679
  if (typed !== void 0) return { source: typed, cause: typed };
21559
21680
  return { source: "unknown", cause: "unknown" };
21560
21681
  }
21561
- var navigatorProviderFailureSchema = Type18.Object({
21562
- source: Type18.Union([
21563
- Type18.Literal("context"),
21564
- Type18.Literal("session"),
21565
- Type18.Literal("model"),
21566
- Type18.Literal("thinking"),
21567
- Type18.Literal("auth"),
21568
- Type18.Literal("quota"),
21569
- Type18.Literal("transport"),
21570
- Type18.Literal("unknown")
21682
+ var navigatorProviderFailureSchema = Type20.Object({
21683
+ source: Type20.Union([
21684
+ Type20.Literal("context"),
21685
+ Type20.Literal("session"),
21686
+ Type20.Literal("model"),
21687
+ Type20.Literal("thinking"),
21688
+ Type20.Literal("auth"),
21689
+ Type20.Literal("quota"),
21690
+ Type20.Literal("transport"),
21691
+ Type20.Literal("unknown")
21571
21692
  ]),
21572
- cause: Type18.Union([
21573
- Type18.Literal("context"),
21574
- Type18.Literal("session"),
21575
- Type18.Literal("model"),
21576
- Type18.Literal("thinking"),
21577
- Type18.Literal("auth"),
21578
- Type18.Literal("quota"),
21579
- Type18.Literal("transport"),
21580
- Type18.Literal("unknown")
21693
+ cause: Type20.Union([
21694
+ Type20.Literal("context"),
21695
+ Type20.Literal("session"),
21696
+ Type20.Literal("model"),
21697
+ Type20.Literal("thinking"),
21698
+ Type20.Literal("auth"),
21699
+ Type20.Literal("quota"),
21700
+ Type20.Literal("transport"),
21701
+ Type20.Literal("unknown")
21581
21702
  ])
21582
21703
  }, { additionalProperties: false });
21583
21704
  function parseNavigatorModelSetting(value) {
@@ -21959,8 +22080,8 @@ function resolveNavigatorAuthorityMaterial(roleInput, fileAuthority) {
21959
22080
  return void 0;
21960
22081
  }
21961
22082
  var NAVIGATOR_TARGETS = PACKAGED_ROLE_REGISTRY.map(({ role, phases }) => ({ role, phases }));
21962
- var prepareSchema = Type19.Object({
21963
- prose: Type19.Optional(Type19.Unknown({
22083
+ var prepareSchema = Type21.Object({
22084
+ prose: Type21.Optional(Type21.Unknown({
21964
22085
  description: "\u6E38\u5955\u4F7F\u6563\u6587\u5EFA\u8BAE\uFF0C\u539F\u6837\u5448\u73B0\u3002\u4E0D\u8981\u6C42 candidates/next \u7ED3\u6784\u3002"
21965
22086
  }))
21966
22087
  }, { additionalProperties: true });
@@ -22402,22 +22523,9 @@ init_packaged_role_registry();
22402
22523
  init_judge_role();
22403
22524
 
22404
22525
  // src/reviewer-role.ts
22405
- init_open_tool_schema();
22406
- init_terminating_infrastructure();
22526
+ init_filed_submission();
22527
+ init_role_submission_declarations();
22407
22528
  init_reviewer_output();
22408
- import { Type as Type20 } from "typebox";
22409
- var 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";
22410
- var 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";
22411
- var reviewerOutputObject = Type20.Object({
22412
- status: Type20.Unknown({ description: REVIEWER_STATUS_DESCRIPTION }),
22413
- amendments: Type20.Unknown({ description: REVIEWER_AMENDMENTS_DESCRIPTION }),
22414
- diagnostic: Type20.Unknown({
22415
- 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"
22416
- })
22417
- });
22418
- var reviewerOutputSchema = withTerminatingOutputDeclarations(
22419
- openToolObject(reviewerOutputObject)
22420
- );
22421
22529
  function createReviewerRoleRuntime(pi, dependencies, _hostActions) {
22422
22530
  let soul;
22423
22531
  let registered = false;
@@ -22429,20 +22537,8 @@ function createReviewerRoleRuntime(pi, dependencies, _hostActions) {
22429
22537
  fixedBaseRevision = admitted.baseRevision;
22430
22538
  if (!registered) {
22431
22539
  registered = true;
22432
- pi.registerTool({
22433
- name: REVIEWER_OUTPUT_TOOL_NAME,
22434
- label: "\u5FA1\u53F2\u53F0\u8F93\u51FA",
22435
- description: "\u63D0\u4EA4\u5FA1\u53F2\u53F0\u7EC8\u5C40\u56DE\u6267\u3002",
22436
- promptSnippet: "\u63D0\u4EA4\u5FA1\u53F2\u53F0\u7EC8\u5C40\u56DE\u6267",
22437
- parameters: reviewerOutputSchema,
22438
- async execute(_id, parameters) {
22439
- if (!soul) throw new Error("\u5FA1\u53F2\u53F0\u8F93\u5165\u672A\u88C5\u8F7D");
22440
- return {
22441
- content: [],
22442
- details: parameters,
22443
- terminate: true
22444
- };
22445
- }
22540
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("reviewer"), {
22541
+ readyError: () => soul === void 0 || soul.length === 0 ? "\u5FA1\u53F2\u53F0\u8F93\u5165\u672A\u88C5\u8F7D" : void 0
22446
22542
  });
22447
22543
  }
22448
22544
  const activatedSoul = soul;
@@ -22456,12 +22552,11 @@ function createReviewerRoleRuntime(pi, dependencies, _hostActions) {
22456
22552
  }
22457
22553
 
22458
22554
  // src/worker-role.ts
22459
- init_open_tool_schema();
22460
- init_terminating_infrastructure();
22461
22555
  init_worker_output();
22462
22556
  init_fixer_output();
22557
+ init_filed_submission();
22558
+ init_role_submission_declarations();
22463
22559
  init_fixer_packet();
22464
- import { Type as Type21 } from "typebox";
22465
22560
 
22466
22561
  // src/worker-submission-gates.ts
22467
22562
  init_archivist_record_entry();
@@ -22734,18 +22829,7 @@ function fixerBashSeatbeltDenyReason(matched) {
22734
22829
 
22735
22830
  // src/worker-role.ts
22736
22831
  init_unknown_value();
22737
- var 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}`;
22738
- var coderOutputObject = Type21.Object({
22739
- status: Type21.Unknown({ description: CODER_STATUS_DESCRIPTION }),
22740
- report: Type21.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
22741
- remainingScope: Type21.Unknown({ description: "\u672C\u5C40\u540E\u5269\u4F59\u5DE5\u4F5C" }),
22742
- reason: Type21.Unknown({
22743
- 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"
22744
- })
22745
- });
22746
- var coderOutputSchema = withTerminatingOutputDeclarations(
22747
- openToolObject(coderOutputObject)
22748
- );
22832
+ init_worker_output();
22749
22833
  var FIXER_FLAG_DEFINITIONS = {
22750
22834
  packet: {
22751
22835
  name: "ak-fix-packet",
@@ -22785,6 +22869,28 @@ function validateWorkerOutput(output, phase, roleLabel) {
22785
22869
  if (roleLabel === "Fixer") return validateFixerOutput(output, phase);
22786
22870
  return validateAcceptedWorkerDetails(output, "Coder");
22787
22871
  }
22872
+ function registerWorkerSubmission(pi, role, options) {
22873
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration(role), {
22874
+ readyError: () => options.ready() ? void 0 : options.notReady,
22875
+ beforeAccept: async ({ toolCallId, parameters, ctx }) => {
22876
+ const phase = options.phase();
22877
+ if (phase === void 0) throw new Error(options.notReady);
22878
+ const output = options.project(parameters, phase);
22879
+ const status = workerStatusOf(output);
22880
+ if (status !== void 0) {
22881
+ assertAcceptableThroughHost(
22882
+ options.submissionGate,
22883
+ status,
22884
+ output,
22885
+ options.hostActions,
22886
+ ctx,
22887
+ toolCallId
22888
+ );
22889
+ }
22890
+ return output;
22891
+ }
22892
+ });
22893
+ }
22788
22894
  function assertAcceptableThroughHost(submissionGate, status, details, hostActions, ctx, toolCallId) {
22789
22895
  try {
22790
22896
  submissionGate.assertAcceptable(status, details);
@@ -22846,30 +22952,13 @@ function createFixerRoleRuntime(pi, dependencies, hostActions) {
22846
22952
  packet = Object.freeze({ instructions, prerequisites });
22847
22953
  if (!lifecycleRegistered) {
22848
22954
  lifecycleRegistered = true;
22849
- pi.registerTool({
22850
- name: FIXER_OUTPUT_TOOL_NAME,
22851
- label: "\u4FEE\u5185\u53F8\u8F93\u51FA",
22852
- description: "\u63D0\u4EA4\u4FEE\u5185\u53F8\u7EC8\u5C40\u56DE\u6267\u3002",
22853
- promptSnippet: "\u63D0\u4EA4\u4FEE\u5185\u53F8\u7EC8\u5C40\u56DE\u6267",
22854
- parameters: fixerOutputSchema,
22855
- async execute(toolCallId, parameters, _signal, _onUpdate, ctx) {
22856
- if (packet === void 0 || phase === void 0) {
22857
- throw new Error("\u4FEE\u5185\u53F8\u4FEE\u7406\u5305\u4E0E\u9636\u6BB5\u672A\u88C5\u8F7D");
22858
- }
22859
- const output = deepFreeze2(validateFixerOutput(parameters, phase));
22860
- const status = workerStatusOf(output);
22861
- if (status !== void 0) {
22862
- assertAcceptableThroughHost(
22863
- submissionGate,
22864
- status,
22865
- output,
22866
- hostActions,
22867
- ctx,
22868
- toolCallId
22869
- );
22870
- }
22871
- return { content: [], details: output, terminate: true };
22872
- }
22955
+ registerWorkerSubmission(pi, "fixer", {
22956
+ notReady: "\u4FEE\u5185\u53F8\u4FEE\u7406\u5305\u4E0E\u9636\u6BB5\u672A\u88C5\u8F7D",
22957
+ ready: () => packet !== void 0 && phase !== void 0,
22958
+ phase: () => phase,
22959
+ project: (parameters, current) => deepFreeze2(validateFixerOutput(parameters, current)),
22960
+ submissionGate,
22961
+ hostActions
22873
22962
  });
22874
22963
  pi.on("tool_call", (event) => {
22875
22964
  if (event.toolName !== "bash") return;
@@ -22946,30 +23035,13 @@ function createCoderRoleRuntime(pi, dependencies, hostActions) {
22946
23035
  if (task.length === 0) throw new Error("Coder task is empty");
22947
23036
  if (!lifecycleRegistered) {
22948
23037
  lifecycleRegistered = true;
22949
- pi.registerTool({
22950
- name: CODER_OUTPUT_TOOL_NAME,
22951
- label: "\u5C06\u4F5C\u76D1\u8F93\u51FA",
22952
- description: "\u63D0\u4EA4\u5C06\u4F5C\u76D1\u7EC8\u5C40\u56DE\u6267\u3002",
22953
- promptSnippet: "\u63D0\u4EA4\u5C06\u4F5C\u76D1\u7EC8\u5C40\u56DE\u6267",
22954
- parameters: coderOutputSchema,
22955
- async execute(toolCallId, parameters, _signal, _onUpdate, ctx2) {
22956
- if (task === void 0 || phase === void 0) {
22957
- throw new Error("\u5C06\u4F5C\u76D1\u4EFB\u52A1\u4E0E\u9636\u6BB5\u672A\u88C5\u8F7D");
22958
- }
22959
- const output = validateWorkerOutput(parameters, phase, "Coder");
22960
- const status = workerStatusOf(output);
22961
- if (status !== void 0) {
22962
- assertAcceptableThroughHost(
22963
- submissionGate,
22964
- status,
22965
- output,
22966
- hostActions,
22967
- ctx2,
22968
- toolCallId
22969
- );
22970
- }
22971
- return { content: [], details: output, terminate: true };
22972
- }
23038
+ registerWorkerSubmission(pi, "coder", {
23039
+ notReady: "\u5C06\u4F5C\u76D1\u4EFB\u52A1\u4E0E\u9636\u6BB5\u672A\u88C5\u8F7D",
23040
+ ready: () => task !== void 0 && phase !== void 0,
23041
+ phase: () => phase,
23042
+ project: (parameters, current) => validateWorkerOutput(parameters, current, "Coder"),
23043
+ submissionGate,
23044
+ hostActions
22973
23045
  });
22974
23046
  pi.on("before_agent_start", (event, ctx2) => {
22975
23047
  if (soul === void 0) throw new Error("\u5C06\u4F5C\u76D1\u804C\u5206\u672A\u88C5\u8F7D");
@@ -23005,6 +23077,8 @@ init_merger_contracts();
23005
23077
 
23006
23078
  // src/merger-role.ts
23007
23079
  init_merger_contracts();
23080
+ init_filed_submission();
23081
+ init_role_submission_declarations();
23008
23082
  init_exact_utf8();
23009
23083
  var MERGER_INPUT_FLAG = { name: "ak-merger-input", definition: { description: "Path to Merger assignment materials JSON", type: "string" } };
23010
23084
  function materialText(input, key) {
@@ -23024,16 +23098,8 @@ function createMergerRoleRuntime(pi, dependencies) {
23024
23098
  activation = { soul, input };
23025
23099
  if (!registered) {
23026
23100
  registered = true;
23027
- pi.registerTool({
23028
- name: MERGER_OUTPUT_TOOL_NAME,
23029
- label: "\u5408\u5E76\u8F93\u51FA",
23030
- description: "\u63D0\u4EA4\u5408\u5E76\u7ED3\u679C\uFF1B\u8F93\u51FA\u5206\u652F\u4E3A completed \u4E0E escalate\u3002",
23031
- promptSnippet: "\u63D0\u4EA4\u5408\u5E76\u7ED3\u679C",
23032
- parameters: mergerOutputSchema,
23033
- async execute(_id, params, _signal, _update, _ctx) {
23034
- if (!activation) throw new Error("\u6821\u4E66\u90CE\u672A\u6FC0\u6D3B");
23035
- return { content: [], details: params, terminate: true };
23036
- }
23101
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("merger"), {
23102
+ readyError: () => activation === void 0 ? "\u6821\u4E66\u90CE\u672A\u6FC0\u6D3B" : void 0
23037
23103
  });
23038
23104
  pi.on("before_agent_start", (event) => {
23039
23105
  if (!activation) throw new Error("\u6821\u4E66\u90CE\u672A\u6FC0\u6D3B");
@@ -23302,21 +23368,9 @@ function createFiledOfficerRuntime(roleHost, spec, dependencies) {
23302
23368
  soul = loaded;
23303
23369
  if (!registered) {
23304
23370
  registered = true;
23305
- roleHost.registerTool({
23306
- name: spec.tool.name,
23307
- label: spec.tool.label,
23308
- description: spec.tool.description,
23309
- promptSnippet: spec.tool.promptSnippet,
23310
- parameters: spec.tool.parameters,
23311
- async execute(toolCallId, parameters, signal, _onUpdate, ctx) {
23312
- if (soul === void 0) throw new Error(`${spec.role} \u804C\u5206\u672A\u88C5\u8F7D`);
23313
- const projected = spec.beforeAccept === void 0 ? void 0 : await spec.beforeAccept({ toolCallId, parameters, signal, ctx });
23314
- return {
23315
- content: [],
23316
- details: projected === void 0 ? parameters : projected,
23317
- terminate: true
23318
- };
23319
- }
23371
+ registerFiledSubmissionTool(roleHost, spec.tool, {
23372
+ readyError: () => soul === void 0 ? `${spec.role} \u804C\u5206\u672A\u88C5\u8F7D` : void 0,
23373
+ ...spec.beforeAccept === void 0 ? {} : { beforeAccept: spec.beforeAccept }
23320
23374
  });
23321
23375
  roleHost.on("before_agent_start", (event) => {
23322
23376
  if (soul === void 0) throw new Error(`${spec.role} \u804C\u5206\u672A\u88C5\u8F7D`);