@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
@@ -285,15 +285,6 @@ var init_judge_output = __esm({
285
285
  }
286
286
  });
287
287
 
288
- // src/package-contracts/reviewer-output.ts
289
- var REVIEWER_OUTPUT_TOOL_NAME;
290
- var init_reviewer_output = __esm({
291
- "src/package-contracts/reviewer-output.ts"() {
292
- "use strict";
293
- REVIEWER_OUTPUT_TOOL_NAME = "ak_reviewer_output";
294
- }
295
- });
296
-
297
288
  // src/open-tool-schema.ts
298
289
  import { Type as Type3 } from "typebox";
299
290
  function described(name, schema) {
@@ -317,8 +308,32 @@ var init_open_tool_schema = __esm({
317
308
  }
318
309
  });
319
310
 
320
- // src/package-contracts/gatekeeper-output.ts
311
+ // src/package-contracts/reviewer-output.ts
321
312
  import { Type as Type4 } from "typebox";
313
+ var REVIEWER_OUTPUT_TOOL_NAME, REVIEWER_AMENDMENTS_DESCRIPTION, REVIEWER_STATUS_DESCRIPTION, reviewerOutputObject, reviewerOutputSchema;
314
+ var init_reviewer_output = __esm({
315
+ "src/package-contracts/reviewer-output.ts"() {
316
+ "use strict";
317
+ init_open_tool_schema();
318
+ init_terminating_infrastructure();
319
+ REVIEWER_OUTPUT_TOOL_NAME = "ak_reviewer_output";
320
+ 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";
321
+ 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";
322
+ reviewerOutputObject = Type4.Object({
323
+ status: Type4.Unknown({ description: REVIEWER_STATUS_DESCRIPTION }),
324
+ amendments: Type4.Unknown({ description: REVIEWER_AMENDMENTS_DESCRIPTION }),
325
+ diagnostic: Type4.Unknown({
326
+ 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"
327
+ })
328
+ });
329
+ reviewerOutputSchema = withTerminatingOutputDeclarations(
330
+ openToolObject(reviewerOutputObject)
331
+ );
332
+ }
333
+ });
334
+
335
+ // src/package-contracts/gatekeeper-output.ts
336
+ import { Type as Type5 } from "typebox";
322
337
  var GATEKEEPER_OUTPUT_TOOL_NAME, gatekeeperDecisionSchema, gatekeeperOutputSchema;
323
338
  var init_gatekeeper_output = __esm({
324
339
  "src/package-contracts/gatekeeper-output.ts"() {
@@ -328,14 +343,14 @@ var init_gatekeeper_output = __esm({
328
343
  init_unknown_value();
329
344
  GATEKEEPER_OUTPUT_TOOL_NAME = "ak_gatekeeper_output";
330
345
  gatekeeperDecisionSchema = openToolObject(
331
- Type4.Object({
332
- status: Type4.Unknown({
346
+ Type5.Object({
347
+ status: Type5.Unknown({
333
348
  description: "dispatch | pass"
334
349
  }),
335
- officer: Type4.Unknown({
350
+ officer: Type5.Unknown({
336
351
  description: "status \u4E3A dispatch \u65F6\u4E3A inspector | notary"
337
352
  }),
338
- findings: Type4.Unknown({
353
+ findings: Type5.Unknown({
339
354
  description: "status \u4E3A pass \u65F6\u53EF\u9009 string[] findings"
340
355
  })
341
356
  })
@@ -355,7 +370,7 @@ __export(navigator_output_exports, {
355
370
  projectLawfulNavigatorOutput: () => projectLawfulNavigatorOutput,
356
371
  validateRecordedNavigatorOutput: () => validateRecordedNavigatorOutput
357
372
  });
358
- import { Type as Type5 } from "typebox";
373
+ import { Type as Type6 } from "typebox";
359
374
  function projectLawfulNavigatorOutput(value) {
360
375
  if (value === void 0 || value === null) return void 0;
361
376
  if (typeof value === "string") return { prose: value };
@@ -397,8 +412,8 @@ var init_navigator_output = __esm({
397
412
  NAVIGATOR_OUTPUT_TOOL_NAME = "ak_navigator_output";
398
413
  navigatorOutputSchema = withTerminatingOutputDeclarations(
399
414
  openToolObject(
400
- Type5.Object({
401
- prose: Type5.Unknown({
415
+ Type6.Object({
416
+ prose: Type6.Unknown({
402
417
  description: "\u6E38\u5955\u4F7F\u6563\u6587\u5EFA\u8BAE\uFF0C\u539F\u6837\u5448\u73B0\u3002\u4E0D\u8981\u6C42 candidates/next \u7B49\u7ED3\u6784\u5316\u5B57\u6BB5\u3002"
403
418
  })
404
419
  })
@@ -408,7 +423,7 @@ var init_navigator_output = __esm({
408
423
  });
409
424
 
410
425
  // src/package-contracts/fixer-output.ts
411
- import { Type as Type6 } from "typebox";
426
+ import { Type as Type7 } from "typebox";
412
427
  function validateFixerOutput(value, _phase) {
413
428
  return value;
414
429
  }
@@ -421,22 +436,22 @@ var init_fixer_output = __esm({
421
436
  FIXER_OUTPUT_TOOL_NAME = "ak_fixer_output";
422
437
  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";
423
438
  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}`;
424
- fixerOutputObject = Type6.Object({
425
- status: Type6.Unknown({ description: FIXER_STATUS_DESCRIPTION }),
426
- report: Type6.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
427
- remainingScope: Type6.Unknown({
439
+ fixerOutputObject = Type7.Object({
440
+ status: Type7.Unknown({ description: FIXER_STATUS_DESCRIPTION }),
441
+ report: Type7.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
442
+ remainingScope: Type7.Unknown({
428
443
  description: "\u672C\u5C40\u540E\u5269\u4F59\u5DE5\u4F5C\uFF1B\u4F9D\u6CD5\u4E0D\u80FD\u5B8C\u6210\u7684\u8303\u56F4\u4E5F\u5199\u6B64\u5904\u3002"
429
444
  }),
430
- blocker: Type6.Unknown({
445
+ blocker: Type7.Unknown({
431
446
  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"
432
447
  }),
433
- reason: Type6.Unknown({
448
+ reason: Type7.Unknown({
434
449
  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"
435
450
  }),
436
- classResults: Type6.Unknown({
451
+ classResults: Type7.Unknown({
437
452
  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"
438
453
  }),
439
- testEvidence: Type6.Unknown({
454
+ testEvidence: Type7.Unknown({
440
455
  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"
441
456
  })
442
457
  });
@@ -447,7 +462,7 @@ var init_fixer_output = __esm({
447
462
  });
448
463
 
449
464
  // src/package-contracts/fixer-packet.ts
450
- import { Type as Type7 } from "typebox";
465
+ import { Type as Type8 } from "typebox";
451
466
  import { Value } from "typebox/value";
452
467
  function causeMessage(cause) {
453
468
  if (cause instanceof Error) return cause.message;
@@ -504,11 +519,11 @@ var init_fixer_packet = __esm({
504
519
  "use strict";
505
520
  init_unknown_value();
506
521
  FIXER_PREREQUISITE_ID_PATTERN = "^[A-Za-z0-9][A-Za-z0-9._-]*$";
507
- fixerPrerequisiteSchema = Type7.Object({
508
- id: Type7.String({ pattern: FIXER_PREREQUISITE_ID_PATTERN }),
509
- requirement: Type7.String({ pattern: "\\S" })
522
+ fixerPrerequisiteSchema = Type8.Object({
523
+ id: Type8.String({ pattern: FIXER_PREREQUISITE_ID_PATTERN }),
524
+ requirement: Type8.String({ pattern: "\\S" })
510
525
  });
511
- fixerPrerequisitesSchema = Type7.Array(fixerPrerequisiteSchema);
526
+ fixerPrerequisitesSchema = Type8.Array(fixerPrerequisiteSchema);
512
527
  FixerPacketValidationError = class extends Error {
513
528
  code = "AK_INVALID_FIX_PACKET";
514
529
  constructor(cause) {
@@ -524,20 +539,34 @@ var init_fixer_packet = __esm({
524
539
  });
525
540
 
526
541
  // src/package-contracts/worker-output.ts
542
+ import { Type as Type9 } from "typebox";
527
543
  function validateAcceptedCoderDetails(output) {
528
544
  return output;
529
545
  }
530
546
  function validateAcceptedWorkerDetails(output, roleLabel = "Coder") {
531
547
  return roleLabel === "Fixer" ? validateFixerOutput(output) : validateAcceptedCoderDetails(output);
532
548
  }
533
- var CODER_OUTPUT_TOOL_NAME;
549
+ var CODER_OUTPUT_TOOL_NAME, CODER_STATUS_DESCRIPTION, coderOutputObject, coderOutputSchema;
534
550
  var init_worker_output = __esm({
535
551
  "src/package-contracts/worker-output.ts"() {
536
552
  "use strict";
553
+ init_open_tool_schema();
537
554
  init_fixer_output();
538
555
  init_fixer_packet();
539
- init_fixer_output();
556
+ init_terminating_infrastructure();
540
557
  CODER_OUTPUT_TOOL_NAME = "ak_coder_output";
558
+ 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}`;
559
+ coderOutputObject = Type9.Object({
560
+ status: Type9.Unknown({ description: CODER_STATUS_DESCRIPTION }),
561
+ report: Type9.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
562
+ remainingScope: Type9.Unknown({ description: "\u672C\u5C40\u540E\u5269\u4F59\u5DE5\u4F5C" }),
563
+ reason: Type9.Unknown({
564
+ 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"
565
+ })
566
+ });
567
+ coderOutputSchema = withTerminatingOutputDeclarations(
568
+ openToolObject(coderOutputObject)
569
+ );
541
570
  }
542
571
  });
543
572
 
@@ -549,7 +578,7 @@ var init_canonical_json = __esm({
549
578
  });
550
579
 
551
580
  // src/doctor-contracts.ts
552
- import { Type as Type8 } from "typebox";
581
+ import { Type as Type10 } from "typebox";
553
582
  function validateDoctorSubmissionShape(value) {
554
583
  return value;
555
584
  }
@@ -575,25 +604,25 @@ var init_doctor_contracts = __esm({
575
604
  biteNone = "noRealBite";
576
605
  DOCTOR_BITE_KINDS = [biteActual, biteNone];
577
606
  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";
578
- doctorSubmissionObject = Type8.Object({
579
- status: Type8.Unknown({ description: DOCTOR_STATUS_DESCRIPTION }),
580
- case: Type8.Unknown({
607
+ doctorSubmissionObject = Type10.Object({
608
+ status: Type10.Unknown({ description: DOCTOR_STATUS_DESCRIPTION }),
609
+ case: Type10.Unknown({
581
610
  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"
582
611
  }),
583
- findings: Type8.Unknown({
612
+ findings: Type10.Unknown({
584
613
  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`
585
614
  }),
586
- reason: Type8.Unknown({
615
+ reason: Type10.Unknown({
587
616
  description: "\u8BC1\u636E\u4E0D\u8DB3\u4EE5\u652F\u6491\u5982\u5B9E\u8BC1\u8BCD\u7684\u539F\u56E0\uFF1B\u4EC5 refused \u65F6\u7528\u3002"
588
617
  }),
589
- missingEvidence: Type8.Unknown({
618
+ missingEvidence: Type10.Unknown({
590
619
  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"
591
620
  })
592
621
  });
593
622
  doctorSubmissionSchema = withTerminatingOutputDeclarations(
594
623
  openToolObject(doctorSubmissionObject)
595
624
  );
596
- 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 });
625
+ 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 });
597
626
  DoctorEvidenceStore = class {
598
627
  constructor(patient) {
599
628
  this.patient = patient;
@@ -662,7 +691,7 @@ var init_exact_utf8 = __esm({
662
691
  });
663
692
 
664
693
  // src/merger-contracts.ts
665
- import { Type as Type9 } from "typebox";
694
+ import { Type as Type11 } from "typebox";
666
695
  function fail2(message = "Merger input violates its exact contract") {
667
696
  throw new MergerInputContractError(message);
668
697
  }
@@ -693,24 +722,24 @@ var init_merger_contracts = __esm({
693
722
  init_open_tool_schema();
694
723
  init_terminating_infrastructure();
695
724
  init_unknown_value();
696
- materialSchema = Type9.Object({ bytesBase64: Type9.String(), sha256: Type9.String() });
697
- checkSchema = Type9.Object({ name: Type9.String({ minLength: 1 }), argv: Type9.Array(Type9.String({ minLength: 1 }), { minItems: 1 }) });
698
- mergerInputSchema = Type9.Object({
699
- attemptId: Type9.String({ minLength: 1, description: "\u5BF9\u8D26 attempt \u8EAB\u4EFD\uFF08transport\uFF09" }),
700
- targetObjectId: Type9.String({ description: "\u6750\u6599\uFF1Atarget parent OID\uFF1B\u53EF\u7A7A" }),
701
- sourceObjectId: Type9.String({ description: "\u6750\u6599\uFF1Asource parent OID\uFF1B\u53EF\u7A7A" }),
702
- materials: Type9.Object({ task: materialSchema, authority: materialSchema, targetIntent: materialSchema, sourceIntent: materialSchema }),
703
- expectedConflictPaths: Type9.Array(Type9.String(), { description: "\u6750\u6599\uFF1A\u5F53\u524D\u672A\u5408\u5E76\u8DEF\u5F84\uFF1B\u53EF\u7A7A" }),
704
- resolutionScope: Type9.Array(Type9.String(), { description: "\u6750\u6599\uFF1A\u89E3\u6790\u8303\u56F4\u63D0\u793A\uFF1B\u53EF\u7A7A" }),
705
- authorizedChecks: Type9.Array(checkSchema)
725
+ materialSchema = Type11.Object({ bytesBase64: Type11.String(), sha256: Type11.String() });
726
+ checkSchema = Type11.Object({ name: Type11.String({ minLength: 1 }), argv: Type11.Array(Type11.String({ minLength: 1 }), { minItems: 1 }) });
727
+ mergerInputSchema = Type11.Object({
728
+ attemptId: Type11.String({ minLength: 1, description: "\u5BF9\u8D26 attempt \u8EAB\u4EFD\uFF08transport\uFF09" }),
729
+ targetObjectId: Type11.String({ description: "\u6750\u6599\uFF1Atarget parent OID\uFF1B\u53EF\u7A7A" }),
730
+ sourceObjectId: Type11.String({ description: "\u6750\u6599\uFF1Asource parent OID\uFF1B\u53EF\u7A7A" }),
731
+ materials: Type11.Object({ task: materialSchema, authority: materialSchema, targetIntent: materialSchema, sourceIntent: materialSchema }),
732
+ expectedConflictPaths: Type11.Array(Type11.String(), { description: "\u6750\u6599\uFF1A\u5F53\u524D\u672A\u5408\u5E76\u8DEF\u5F84\uFF1B\u53EF\u7A7A" }),
733
+ resolutionScope: Type11.Array(Type11.String(), { description: "\u6750\u6599\uFF1A\u89E3\u6790\u8303\u56F4\u63D0\u793A\uFF1B\u53EF\u7A7A" }),
734
+ authorizedChecks: Type11.Array(checkSchema)
706
735
  });
707
736
  MERGER_STATUS_DESCRIPTION = "completed | escalate";
708
- mergerOutputObject = Type9.Object({
709
- status: Type9.Unknown({ description: MERGER_STATUS_DESCRIPTION }),
710
- attemptId: Type9.Unknown({ description: "\u5DF2\u53D7\u7406\u5408\u5E76 attempt \u8EAB\u4EFD" }),
711
- report: Type9.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
712
- mergeCommitId: Type9.Unknown({ description: "\u5B8C\u6210\u5408\u5E76 commit object ID" }),
713
- diagnosis: Type9.Unknown({
737
+ mergerOutputObject = Type11.Object({
738
+ status: Type11.Unknown({ description: MERGER_STATUS_DESCRIPTION }),
739
+ attemptId: Type11.Unknown({ description: "\u5DF2\u53D7\u7406\u5408\u5E76 attempt \u8EAB\u4EFD" }),
740
+ report: Type11.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
741
+ mergeCommitId: Type11.Unknown({ description: "\u5B8C\u6210\u5408\u5E76 commit object ID" }),
742
+ diagnosis: Type11.Unknown({
714
743
  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"
715
744
  })
716
745
  });
@@ -729,7 +758,7 @@ var init_merger_contracts = __esm({
729
758
  });
730
759
 
731
760
  // src/notary-contracts.ts
732
- var NOTARY_OUTPUT_TOOL_NAME, NOTARY_SOURCE_RUN_FLAG, NOTARY_TICKET_FLAG, notaryOutputSchema;
761
+ var NOTARY_OUTPUT_TOOL_NAME, NOTARY_SOURCE_RUN_FLAG, NOTARY_TICKET_FLAG;
733
762
  var init_notary_contracts = __esm({
734
763
  "src/notary-contracts.ts"() {
735
764
  "use strict";
@@ -750,7 +779,6 @@ var init_notary_contracts = __esm({
750
779
  type: "string"
751
780
  }
752
781
  };
753
- notaryOutputSchema = reviewSubmissionSchema;
754
782
  }
755
783
  });
756
784
 
@@ -766,12 +794,27 @@ var init_countersign_contracts = __esm({
766
794
  });
767
795
 
768
796
  // src/gleaner-left-contracts.ts
769
- var GLEANER_LEFT_OUTPUT_TOOL_NAME, GLEANER_LEFT_BASE_FLAG;
797
+ import { Type as Type12 } from "typebox";
798
+ var GLEANER_LEFT_OUTPUT_TOOL_NAME, gleanerLeftOutputSchema, GLEANER_LEFT_BASE_FLAG;
770
799
  var init_gleaner_left_contracts = __esm({
771
800
  "src/gleaner-left-contracts.ts"() {
772
801
  "use strict";
802
+ init_open_tool_schema();
803
+ init_terminating_infrastructure();
773
804
  init_unknown_value();
774
805
  GLEANER_LEFT_OUTPUT_TOOL_NAME = "ak_gleaner_left_output";
806
+ gleanerLeftOutputSchema = withTerminatingOutputDeclarations(
807
+ openToolObject(
808
+ Type12.Object({
809
+ status: Type12.Unknown({
810
+ description: "completed"
811
+ }),
812
+ findings: Type12.Unknown({
813
+ 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"
814
+ })
815
+ })
816
+ )
817
+ );
775
818
  GLEANER_LEFT_BASE_FLAG = {
776
819
  name: "ak-gleaner-left-base",
777
820
  definition: {
@@ -801,14 +844,13 @@ var init_inspector_contracts = __esm({
801
844
  });
802
845
 
803
846
  // src/package-contracts/auditor-output.ts
804
- var AUDITOR_OUTPUT_TOOL_NAME, auditorOutputSchema;
847
+ var AUDITOR_OUTPUT_TOOL_NAME;
805
848
  var init_auditor_output = __esm({
806
849
  "src/package-contracts/auditor-output.ts"() {
807
850
  "use strict";
808
851
  init_review_submission();
809
852
  init_unknown_value();
810
853
  AUDITOR_OUTPUT_TOOL_NAME = REVIEW_SUBMISSION_OUTPUT_TOOL_NAME;
811
- auditorOutputSchema = reviewSubmissionSchema;
812
854
  }
813
855
  });
814
856
 
@@ -935,6 +977,7 @@ var init_run_ticket_number = __esm({
935
977
  });
936
978
 
937
979
  // src/diarist-contracts.ts
980
+ import { Type as Type13 } from "typebox";
938
981
  function projectDiaristSessions(value) {
939
982
  const raw = value?.sessions;
940
983
  if (raw === void 0) return [];
@@ -954,23 +997,68 @@ function projectDiaristTicketSessions(value) {
954
997
  }
955
998
  return Array.from(perTicket, ([ticketNumber, sessions]) => ({ ticketNumber, sessions }));
956
999
  }
957
- var DIARIST_OUTPUT_TOOL_NAME;
1000
+ var DIARIST_OUTPUT_TOOL_NAME, DIARIST_SESSIONS_DESCRIPTION, diaristOutputSchema;
958
1001
  var init_diarist_contracts = __esm({
959
1002
  "src/diarist-contracts.ts"() {
960
1003
  "use strict";
1004
+ init_open_tool_schema();
1005
+ init_terminating_infrastructure();
961
1006
  init_ticket_provenance_contracts();
962
1007
  init_run_ticket_number();
963
1008
  init_unknown_value();
964
1009
  DIARIST_OUTPUT_TOOL_NAME = "ak_diarist_output";
1010
+ 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";
1011
+ diaristOutputSchema = withTerminatingOutputDeclarations(
1012
+ openToolObject(
1013
+ Type13.Object({
1014
+ status: Type13.Unknown({
1015
+ description: "completed | escalate"
1016
+ }),
1017
+ ticketNumber: Type13.Optional(
1018
+ Type13.Unknown({
1019
+ 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"
1020
+ })
1021
+ ),
1022
+ reason: Type13.Unknown({
1023
+ description: "status \u4E3A escalate \u65F6\uFF1A\u8BA4\u4E0D\u51FA\u672C\u5EAD\u5BF9\u8C61\u7684\u539F\u56E0"
1024
+ }),
1025
+ sessions: Type13.Optional(Type13.Unknown({ description: DIARIST_SESSIONS_DESCRIPTION })),
1026
+ ticketSessions: Type13.Unknown({
1027
+ 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`
1028
+ })
1029
+ })
1030
+ )
1031
+ );
965
1032
  }
966
1033
  });
967
1034
 
968
1035
  // src/secretariat-contracts.ts
969
- var SECRETARIAT_OUTPUT_TOOL_NAME, SECRETARIAT_GATE_OFFICER_ENTRY_TYPE, SECRETARIAT_COUNTERSIGN_TERMINAL_FACT_KEY;
1036
+ import { Type as Type14 } from "typebox";
1037
+ var SECRETARIAT_OUTPUT_TOOL_NAME, secretariatVerdictSchema, SECRETARIAT_GATE_OFFICER_ENTRY_TYPE, SECRETARIAT_COUNTERSIGN_TERMINAL_FACT_KEY;
970
1038
  var init_secretariat_contracts = __esm({
971
1039
  "src/secretariat-contracts.ts"() {
972
1040
  "use strict";
1041
+ init_terminating_infrastructure();
973
1042
  SECRETARIAT_OUTPUT_TOOL_NAME = "ak_secretariat_output";
1043
+ secretariatVerdictSchema = withTerminatingOutputDeclarations(
1044
+ Type14.Object(
1045
+ {
1046
+ secretariatStatus: Type14.Unknown({
1047
+ description: "converged | escalate"
1048
+ }),
1049
+ ticketNumber: Type14.Optional(
1050
+ Type14.Unknown({ description: "\u672C\u7968\u53F7\uFF1B\u7F72\u65F6\u6307\u5411\u6700\u7EC8\u6B63\u6587\u6240\u5728\u7968" })
1051
+ ),
1052
+ note: Type14.Unknown({ description: "\u9644\u6CE8" }),
1053
+ evidence: Type14.Optional(Type14.Unknown({ description: "\u7559\u5B58\u8BC1\u636E" })),
1054
+ decisionGate: Type14.Unknown({
1055
+ description: "\u9700\u965B\u4E0B\u5904\u7F6E\u7684\u95EE\u9898\u4E0E\u9009\u9879\uFF1B\u53EF\u5199 question \u4E0E options\uFF0C\u539F\u6837\u7559\u5B58\u3002"
1056
+ })
1057
+ },
1058
+ { additionalProperties: true }
1059
+ )
1060
+ );
1061
+ secretariatVerdictSchema.required = [];
974
1062
  SECRETARIAT_GATE_OFFICER_ENTRY_TYPE = "ak-secretariat-gate-officer";
975
1063
  SECRETARIAT_COUNTERSIGN_TERMINAL_FACT_KEY = "countersignTerminal";
976
1064
  }
@@ -3879,7 +3967,7 @@ __export(auditor_dossier_tool_exports, {
3879
3967
  createAuditorDossierTool: () => createAuditorDossierTool
3880
3968
  });
3881
3969
  import { dirname as dirname8, join as join12, resolve as resolve6 } from "node:path";
3882
- import { Type as Type11 } from "typebox";
3970
+ import { Type as Type16 } from "typebox";
3883
3971
  function auditorRunDirectory(context) {
3884
3972
  const sessionFile = context.sessionManager?.getSessionFile?.();
3885
3973
  if (sessionFile === void 0) return void 0;
@@ -3891,7 +3979,7 @@ function createAuditorDossierTool(runDirectory) {
3891
3979
  description: "\u5B9A\u4F4D\u672C\u5BA1\u8BA1\u5E2D\u7ED1\u5B9A\u7684 run \u5377\u5B97\u53CA\u5176\u8BC1\u636E\u5165\u53E3\u3002",
3892
3980
  // #836 r16 class 3: execute() ignores `_params` entirely — a closed root
3893
3981
  // only rejects the role for saying more.
3894
- parameters: Type11.Object({}, { additionalProperties: true }),
3982
+ parameters: Type16.Object({}, { additionalProperties: true }),
3895
3983
  async execute(_id, _params) {
3896
3984
  if (runDirectory === void 0) {
3897
3985
  return {
@@ -3922,6 +4010,161 @@ var init_auditor_dossier_tool = __esm({
3922
4010
  }
3923
4011
  });
3924
4012
 
4013
+ // src/collector-tool-schemas.ts
4014
+ import { Type as Type17 } from "typebox";
4015
+ var collectorOutputBaseSchema, collectorOutputArgsSchema;
4016
+ var init_collector_tool_schemas = __esm({
4017
+ "src/collector-tool-schemas.ts"() {
4018
+ "use strict";
4019
+ init_open_tool_schema();
4020
+ init_terminating_infrastructure();
4021
+ collectorOutputBaseSchema = openToolObject(
4022
+ Type17.Object({
4023
+ groups: Type17.Unsafe({
4024
+ 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"
4025
+ }),
4026
+ unfinishedReasons: Type17.Unknown({
4027
+ description: "\u672A\u5B8C\u6210\u539F\u56E0\uFF1B\u53D6\u8BC1\u53D7\u9650\u65F6\u5982\u5B9E\u62A5\u544A\u3002"
4028
+ })
4029
+ })
4030
+ );
4031
+ collectorOutputArgsSchema = withTerminatingOutputDeclarations(
4032
+ collectorOutputBaseSchema
4033
+ );
4034
+ }
4035
+ });
4036
+
4037
+ // src/role-submission-declarations.ts
4038
+ function roleSubmissionDeclaration(role) {
4039
+ const name = packagedRoleOutputTool(role);
4040
+ if (name === void 0) throw new Error(`${role} output tool is not declared`);
4041
+ const face = SUBMISSION_FACE[role];
4042
+ return {
4043
+ role,
4044
+ name,
4045
+ label: face.label,
4046
+ description: face.description,
4047
+ ..."promptSnippet" in face ? { promptSnippet: face.promptSnippet } : {},
4048
+ parameters: face.parameters
4049
+ };
4050
+ }
4051
+ var SUBMISSION_FACE;
4052
+ var init_role_submission_declarations = __esm({
4053
+ "src/role-submission-declarations.ts"() {
4054
+ "use strict";
4055
+ init_packaged_role_registry();
4056
+ init_review_submission();
4057
+ init_collector_tool_schemas();
4058
+ init_diarist_contracts();
4059
+ init_doctor_contracts();
4060
+ init_fixer_output();
4061
+ init_gatekeeper_output();
4062
+ init_gleaner_left_contracts();
4063
+ init_merger_contracts();
4064
+ init_navigator_output();
4065
+ init_reviewer_output();
4066
+ init_secretariat_contracts();
4067
+ init_worker_output();
4068
+ SUBMISSION_FACE = {
4069
+ judge: {
4070
+ label: "\u5927\u7406\u5BFA\u8F93\u51FA",
4071
+ 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",
4072
+ promptSnippet: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD",
4073
+ parameters: reviewSubmissionSchema
4074
+ },
4075
+ fixer: {
4076
+ label: "\u4FEE\u5185\u53F8\u8F93\u51FA",
4077
+ description: "\u63D0\u4EA4\u4FEE\u5185\u53F8\u7EC8\u5C40\u56DE\u6267\u3002",
4078
+ promptSnippet: "\u63D0\u4EA4\u4FEE\u5185\u53F8\u7EC8\u5C40\u56DE\u6267",
4079
+ parameters: fixerOutputSchema
4080
+ },
4081
+ coder: {
4082
+ label: "\u5C06\u4F5C\u76D1\u8F93\u51FA",
4083
+ description: "\u63D0\u4EA4\u5C06\u4F5C\u76D1\u7EC8\u5C40\u56DE\u6267\u3002",
4084
+ promptSnippet: "\u63D0\u4EA4\u5C06\u4F5C\u76D1\u7EC8\u5C40\u56DE\u6267",
4085
+ parameters: coderOutputSchema
4086
+ },
4087
+ reviewer: {
4088
+ label: "\u5FA1\u53F2\u53F0\u8F93\u51FA",
4089
+ description: "\u63D0\u4EA4\u5FA1\u53F2\u53F0\u7EC8\u5C40\u56DE\u6267\u3002",
4090
+ promptSnippet: "\u63D0\u4EA4\u5FA1\u53F2\u53F0\u7EC8\u5C40\u56DE\u6267",
4091
+ parameters: reviewerOutputSchema
4092
+ },
4093
+ collector: {
4094
+ label: "\u901A\u8FDB\u53F8\u8F93\u51FA",
4095
+ description: "\u63D0\u4EA4\u901A\u8FDB\u53F8\u56DE\u6267\u3002",
4096
+ promptSnippet: "\u63D0\u4EA4\u901A\u8FDB\u53F8\u56DE\u6267",
4097
+ parameters: collectorOutputArgsSchema
4098
+ },
4099
+ doctor: {
4100
+ label: "\u592A\u533B\u7F72\u8F93\u51FA",
4101
+ description: DOCTOR_OUTPUT_TOOL_DESCRIPTION,
4102
+ parameters: doctorSubmissionSchema
4103
+ },
4104
+ merger: {
4105
+ label: "\u5408\u5E76\u8F93\u51FA",
4106
+ description: "\u63D0\u4EA4\u5408\u5E76\u7ED3\u679C\uFF1B\u8F93\u51FA\u5206\u652F\u4E3A completed \u4E0E escalate\u3002",
4107
+ promptSnippet: "\u63D0\u4EA4\u5408\u5E76\u7ED3\u679C",
4108
+ parameters: mergerOutputSchema
4109
+ },
4110
+ notary: {
4111
+ label: "\u7B26\u5B9D\u90CE\u8F93\u51FA",
4112
+ description: "\u63D0\u4EA4\u5F15\u6587\u4FDD\u771F\u4E0E\u7968\u9762\u5BF9\u9F50\u7684 converged/continue/escalate \u51B3\u8BAE\u3002",
4113
+ promptSnippet: "\u63D0\u4EA4\u7B26\u5B9D\u90CE\u51B3\u8BAE",
4114
+ parameters: reviewSubmissionSchema
4115
+ },
4116
+ countersign: {
4117
+ label: "\u7ED9\u4E8B\u4E2D\u8F93\u51FA",
4118
+ description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\u3002",
4119
+ promptSnippet: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE",
4120
+ parameters: reviewSubmissionSchema
4121
+ },
4122
+ secretariat: {
4123
+ label: "\u4E2D\u4E66\u7701\u8F93\u51FA",
4124
+ description: "\u4E2D\u4E66\u7701\u7EC8\u5C40\u56DE\u6267\u3002",
4125
+ promptSnippet: "\u4E2D\u4E66\u7701\u7EC8\u5C40\u56DE\u6267",
4126
+ parameters: secretariatVerdictSchema
4127
+ },
4128
+ "gleaner-left": {
4129
+ label: "\u5DE6\u62FE\u9057\u8F93\u51FA",
4130
+ description: "\u5DE6\u62FE\u9057\u5F39\u7AE0\u3002",
4131
+ promptSnippet: "\u5DE6\u62FE\u9057\u5F39\u7AE0",
4132
+ parameters: gleanerLeftOutputSchema
4133
+ },
4134
+ inspector: {
4135
+ label: "\u53F0\u9662\u8F93\u51FA",
4136
+ description: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267\uFF0C\u72B6\u6001\u4E3A converged\u3001continue \u6216 escalate\u3002",
4137
+ promptSnippet: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267",
4138
+ parameters: reviewSubmissionSchema
4139
+ },
4140
+ gatekeeper: {
4141
+ label: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
4142
+ description: "\u95E8\u4E0B\u7701\u7EC8\u5C40\u51B3\u8BAE\u3002status \u4E3A dispatch \u6216 pass\u3002",
4143
+ promptSnippet: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
4144
+ parameters: gatekeeperOutputSchema
4145
+ },
4146
+ navigator: {
4147
+ label: "\u6E38\u5955\u4F7F\u5EFA\u8BAE",
4148
+ description: "\u6E38\u5955\u4F7F\u7EC8\u5C40\u56DE\u6267\uFF1A\u6563\u6587\u5EFA\u8BAE\uFF0C\u539F\u6837\u5448\u73B0\u3002",
4149
+ promptSnippet: "\u6E38\u5955\u4F7F\u5EFA\u8BAE",
4150
+ parameters: navigatorOutputSchema
4151
+ },
4152
+ auditor: {
4153
+ label: "\u5BA1\u5211\u9662\u8F93\u51FA",
4154
+ description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\u3002",
4155
+ promptSnippet: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267",
4156
+ parameters: reviewSubmissionSchema
4157
+ },
4158
+ diarist: {
4159
+ label: "\u8D77\u5C45\u90CE\u8F93\u51FA",
4160
+ 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",
4161
+ promptSnippet: "\u8D77\u5C45\u90CE\u4EA4\u8FB9\u754C",
4162
+ parameters: diaristOutputSchema
4163
+ }
4164
+ };
4165
+ }
4166
+ });
4167
+
3925
4168
  // src/run-terminal-artifacts.ts
3926
4169
  var run_terminal_artifacts_exports = {};
3927
4170
  __export(run_terminal_artifacts_exports, {
@@ -4108,7 +4351,7 @@ function reviewQueueStatus(status) {
4108
4351
  function projectOfficerDecision(officer, decision, fallbackStatus) {
4109
4352
  const receipt = retainedReceipt(decision);
4110
4353
  const record = isRecord(decision) ? decision : void 0;
4111
- const status = (record !== void 0 && typeof record.status === "string" ? record.status : void 0) ?? fallbackStatus;
4354
+ const status = record !== void 0 && Object.hasOwn(record, "status") ? receivedDiscriminator(record, "status") : fallbackStatus;
4112
4355
  const queueStatus = typeof status === "string" ? reviewQueueStatus(status) : void 0;
4113
4356
  if (queueStatus === "converged") {
4114
4357
  return { status: "converged", officer, receipt };
@@ -4261,6 +4504,7 @@ var init_gatekeeper_role = __esm({
4261
4504
  init_inspector_contracts();
4262
4505
  init_review_submission();
4263
4506
  init_gatekeeper_output();
4507
+ init_role_submission_declarations();
4264
4508
  init_run_terminal_artifacts();
4265
4509
  init_unknown_value();
4266
4510
  init_submission_errors();
@@ -4271,13 +4515,7 @@ var init_gatekeeper_role = __esm({
4271
4515
  countersign_verdict: "notary",
4272
4516
  secretariat_verdict: "countersign"
4273
4517
  };
4274
- GATEKEEPER_TOOL_SPEC = {
4275
- name: GATEKEEPER_OUTPUT_TOOL_NAME,
4276
- label: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
4277
- description: "\u95E8\u4E0B\u7701\u7EC8\u5C40\u51B3\u8BAE\u3002status \u4E3A dispatch \u6216 pass\u3002",
4278
- promptSnippet: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
4279
- parameters: gatekeeperOutputSchema
4280
- };
4518
+ GATEKEEPER_TOOL_SPEC = roleSubmissionDeclaration("gatekeeper");
4281
4519
  }
4282
4520
  });
4283
4521
 
@@ -12098,16 +12336,43 @@ var init_doctor_auditor = __esm({
12098
12336
  }
12099
12337
  });
12100
12338
 
12339
+ // src/filed-submission.ts
12340
+ function registerFiledSubmissionTool(roleHost, tool, options) {
12341
+ roleHost.registerTool({
12342
+ name: tool.name,
12343
+ label: tool.label,
12344
+ description: tool.description,
12345
+ ...tool.promptSnippet === void 0 ? {} : { promptSnippet: tool.promptSnippet },
12346
+ parameters: tool.parameters,
12347
+ async execute(toolCallId, parameters, signal, _onUpdate, ctx) {
12348
+ const blocked = options.readyError();
12349
+ if (blocked !== void 0) throw new Error(blocked);
12350
+ const projected = options.beforeAccept === void 0 ? void 0 : await options.beforeAccept({ toolCallId, parameters, signal, ctx });
12351
+ return {
12352
+ content: [],
12353
+ details: projected === void 0 ? parameters : projected,
12354
+ terminate: true
12355
+ };
12356
+ }
12357
+ });
12358
+ }
12359
+ var init_filed_submission = __esm({
12360
+ "src/filed-submission.ts"() {
12361
+ "use strict";
12362
+ }
12363
+ });
12364
+
12101
12365
  // src/judge-role.ts
12102
12366
  async function runJudgeGates(input) {
12103
12367
  const passes = [];
12104
12368
  for (const subject of JUDGE_GATES) {
12105
12369
  if (await input.gateAlreadyConverged(subject)) continue;
12106
12370
  const pass = await input.runGate(subject);
12107
- const status = pass?.status;
12108
- if (pass === void 0 || status !== "converged" && status !== "continue" && status !== "escalate") {
12371
+ const received = pass?.status;
12372
+ if (pass === void 0 || typeof received !== "string" || !REVIEW_QUEUE_STATUSES.has(received)) {
12109
12373
  throw new Error("judge gate returned no conclusion");
12110
12374
  }
12375
+ const status = received;
12111
12376
  passes.push({
12112
12377
  subject,
12113
12378
  status,
@@ -12128,16 +12393,8 @@ function createJudgeRoleRuntime(pi, dependencies) {
12128
12393
  if (soul.length === 0) throw new Error("Judge soul is empty");
12129
12394
  if (!lifecycleRegistered) {
12130
12395
  lifecycleRegistered = true;
12131
- pi.registerTool({
12132
- name: JUDGE_OUTPUT_TOOL_NAME,
12133
- label: "\u5927\u7406\u5BFA\u8F93\u51FA",
12134
- 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",
12135
- promptSnippet: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD",
12136
- parameters: judgeVerdictSchema,
12137
- async execute(toolCallId, parameters, signal, _onUpdate, ctx) {
12138
- if (soul === void 0) throw new Error("\u5927\u7406\u5BFA\u804C\u5206\u672A\u88C5\u8F7D");
12139
- return { content: [], details: parameters, terminate: true };
12140
- }
12396
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("judge"), {
12397
+ readyError: () => soul === void 0 ? "\u5927\u7406\u5BFA\u804C\u5206\u672A\u88C5\u8F7D" : void 0
12141
12398
  });
12142
12399
  pi.on("before_agent_start", (event) => {
12143
12400
  if (soul === void 0) throw new Error("\u5927\u7406\u5BFA\u804C\u5206\u672A\u88C5\u8F7D");
@@ -12153,19 +12410,20 @@ ${soul}
12153
12410
  }
12154
12411
  };
12155
12412
  }
12156
- var JUDGE_GATES, judgeVerdictSchema;
12413
+ var JUDGE_GATES;
12157
12414
  var init_judge_role = __esm({
12158
12415
  "src/judge-role.ts"() {
12159
12416
  "use strict";
12160
12417
  init_host_contracts();
12161
12418
  init_review_submission();
12419
+ init_filed_submission();
12420
+ init_role_submission_declarations();
12162
12421
  init_gatekeeper_role();
12163
12422
  init_judge_output();
12164
12423
  JUDGE_GATES = [
12165
12424
  { kind: "judge_draft" },
12166
12425
  { kind: "judge_compliance" }
12167
12426
  ];
12168
- judgeVerdictSchema = reviewSubmissionSchema;
12169
12427
  }
12170
12428
  });
12171
12429
 
@@ -12188,11 +12446,10 @@ function latestQueueStatus(terminal) {
12188
12446
  if (outcome.kind === "audit_escalation") return "escalate";
12189
12447
  if (outcome.kind !== "accepted") return void 0;
12190
12448
  const latest = outcome.payloads?.[outcome.payloads.length - 1];
12191
- if (isRecord(latest)) {
12192
- const status = latest.status;
12193
- if (typeof status === "string" && status.trim() !== "") return status;
12449
+ if (isRecord(latest) && Object.hasOwn(latest, "status")) {
12450
+ return receivedDiscriminator(latest, "status");
12194
12451
  }
12195
- return typeof outcome.status === "string" && outcome.status.trim() !== "" ? outcome.status : void 0;
12452
+ return outcome.status;
12196
12453
  }
12197
12454
  function latestQueuePayload(terminal) {
12198
12455
  const outcome = terminal?.roleOutcome;
@@ -12309,6 +12566,7 @@ var init_submission_gate = __esm({
12309
12566
  "use strict";
12310
12567
  init_archivist_record_pointer();
12311
12568
  init_gatekeeper_role();
12569
+ init_submission_errors();
12312
12570
  init_session_assistant_usage();
12313
12571
  init_unknown_value();
12314
12572
  }
@@ -14385,8 +14643,8 @@ function unreadablePostSubmissionStatus(admitted, terminal) {
14385
14643
  const route = POST_SUBMISSION_ROUTING[admitted.role];
14386
14644
  if (route === void 0) return void 0;
14387
14645
  const payload = terminal.roleOutcome.payloads?.at(-1);
14388
- const status = isRecord(payload) ? payload.status : void 0;
14389
- return typeof status === "string" && route.statuses.has(status) ? void 0 : route.reask;
14646
+ const status = receivedDiscriminator(payload, "status");
14647
+ return typeof status === "string" && route.statuses.has(status) ? void 0 : route.reask ?? officerConclusionReask(status);
14390
14648
  }
14391
14649
  async function reaskUnreadablePostSubmissionStatus(admitted, terminal, env, io) {
14392
14650
  const message = unreadablePostSubmissionStatus(admitted, terminal);
@@ -15003,7 +15261,7 @@ async function queueConclusionFromChild(child, env, io) {
15003
15261
  void 0
15004
15262
  );
15005
15263
  const status = latestQueueStatus(terminal);
15006
- if (terminal !== void 0 && status !== void 0 && QUEUE_CONCLUSIONS.has(status)) {
15264
+ if (terminal !== void 0 && typeof status === "string" && REVIEW_QUEUE_STATUSES.has(status)) {
15007
15265
  return { admitted: current, terminal, status };
15008
15266
  }
15009
15267
  const reasked = await runPublicInstructionSeatResume({
@@ -15014,7 +15272,7 @@ async function queueConclusionFromChild(child, env, io) {
15014
15272
  return { stop: reasked };
15015
15273
  }
15016
15274
  const reaskedStatus = latestQueueStatus(reasked.terminal);
15017
- if (reaskedStatus !== void 0 && QUEUE_CONCLUSIONS.has(reaskedStatus)) {
15275
+ if (typeof reaskedStatus === "string" && REVIEW_QUEUE_STATUSES.has(reaskedStatus)) {
15018
15276
  return { admitted: reasked.admitted, terminal: reasked.terminal, status: reaskedStatus };
15019
15277
  }
15020
15278
  if (latestPayloadEscalated(reasked.terminal.roleOutcome)) return { stop: reasked };
@@ -15061,9 +15319,9 @@ async function auditSubmittedRole(turn, env, io, passedOfficer, passedReceipt, p
15061
15319
  io
15062
15320
  );
15063
15321
  }
15064
- if (admitted.role === "countersign" && (typeof status !== "string" || !QUEUE_CONCLUSIONS.has(status))) {
15322
+ if (admitted.role === "countersign" && (typeof status !== "string" || !REVIEW_QUEUE_STATUSES.has(status))) {
15065
15323
  return runPublicInstructionSeatResume(
15066
- { runId: admitted.runId, message: COUNTERSIGN_STATUS_REASK },
15324
+ { runId: admitted.runId, message: officerConclusionReask(status) },
15067
15325
  { ...env, autoResumeLimit: 0 },
15068
15326
  io
15069
15327
  );
@@ -15240,7 +15498,7 @@ async function auditSubmittedRole(turn, env, io, passedOfficer, passedReceipt, p
15240
15498
  io.stdout(formatTerminalResult(terminal));
15241
15499
  return turn;
15242
15500
  }
15243
- 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;
15501
+ var AUDITED_ROLES, SECRETARIAT_STATUS_REASK, WORKER_ROUTING_STATUSES, WORKER_STATUS_REASK, DOCTOR_ROUTING_STATUSES, DOCTOR_STATUS_REASK, POST_SUBMISSION_ROUTING, GATE_CHILD_ROLES;
15244
15502
  var init_instruction_seat_run = __esm({
15245
15503
  "src/public-cli/instruction-seat-run.ts"() {
15246
15504
  "use strict";
@@ -15249,6 +15507,8 @@ var init_instruction_seat_run = __esm({
15249
15507
  init_archivist_record_pointer();
15250
15508
  init_doctor_auditor();
15251
15509
  init_gatekeeper_role();
15510
+ init_submission_errors();
15511
+ init_review_submission();
15252
15512
  init_judge_role();
15253
15513
  init_worker_submission_contracts();
15254
15514
  init_secretariat_contracts();
@@ -15277,7 +15537,6 @@ var init_instruction_seat_run = __esm({
15277
15537
  init_unknown_value();
15278
15538
  AUDITED_ROLES = /* @__PURE__ */ new Set(["judge", "fixer", "coder", "secretariat", "countersign", "doctor"]);
15279
15539
  SECRETARIAT_STATUS_REASK = "secretariatStatus \u4E0D\u662F converged\u3001escalate \u4E4B\u4E00\u3002\u8BF7\u91CD\u65B0\u4EA4\u5377\uFF0CsecretariatStatus \u5199\u660E\u5176\u4E00\u3002";
15280
- 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";
15281
15540
  WORKER_ROUTING_STATUSES = /* @__PURE__ */ new Set([
15282
15541
  "planned",
15283
15542
  "completed",
@@ -15290,8 +15549,7 @@ var init_instruction_seat_run = __esm({
15290
15549
  DOCTOR_STATUS_REASK = "status \u4E0D\u662F completed\u3001refused \u4E4B\u4E00\u3002\u8BF7\u91CD\u65B0\u4EA4\u5377\uFF0Cstatus \u5199\u660E\u5176\u4E00\u3002";
15291
15550
  POST_SUBMISSION_ROUTING = {
15292
15551
  judge: {
15293
- statuses: /* @__PURE__ */ new Set(["converged", "continue", "escalate"]),
15294
- reask: "status \u4E0D\u662F converged\u3001continue\u3001escalate \u4E09\u6001\u4E4B\u4E00\u3002\u8BF7\u91CD\u65B0\u4EA4\u5377\uFF0Cstatus \u5199\u660E\u5176\u4E00\u3002"
15552
+ statuses: REVIEW_QUEUE_STATUSES
15295
15553
  },
15296
15554
  coder: {
15297
15555
  statuses: WORKER_ROUTING_STATUSES,
@@ -15312,7 +15570,6 @@ var init_instruction_seat_run = __esm({
15312
15570
  reask: DOCTOR_STATUS_REASK
15313
15571
  }
15314
15572
  };
15315
- QUEUE_CONCLUSIONS = /* @__PURE__ */ new Set(["converged", "continue", "escalate"]);
15316
15573
  GATE_CHILD_ROLES = /* @__PURE__ */ new Set(["notary", "auditor", "inspector", "countersign"]);
15317
15574
  }
15318
15575
  });
@@ -17023,7 +17280,7 @@ var init_analyst_model_groups = __esm({
17023
17280
 
17024
17281
  // src/analyst-entry.ts
17025
17282
  import { readFile as readFile20 } from "node:fs/promises";
17026
- import { Type as Type12 } from "typebox";
17283
+ import { Type as Type18 } from "typebox";
17027
17284
  function cachedPageMatchesRequestedScope(page, input) {
17028
17285
  if (page.bookKey !== input.bookKey) return false;
17029
17286
  const requestedTicket = input.ticketNumber ?? input.issueNumber;
@@ -17228,16 +17485,16 @@ var init_analyst_entry = __esm({
17228
17485
  }
17229
17486
  }
17230
17487
  };
17231
- analystSweepModeInputSchema = Type12.Object(
17488
+ analystSweepModeInputSchema = Type18.Object(
17232
17489
  {
17233
- mode: Type12.Literal("sweep"),
17234
- mergedPullRequests: Type12.Array(
17235
- Type12.Object(
17490
+ mode: Type18.Literal("sweep"),
17491
+ mergedPullRequests: Type18.Array(
17492
+ Type18.Object(
17236
17493
  {
17237
- projectRoot: Type12.String(),
17494
+ projectRoot: Type18.String(),
17238
17495
  /** 排除后改动行数 — omit or 0 → typed 空缺; finite ≥ 0 only. */
17239
- changedLines: Type12.Optional(
17240
- Type12.Number({ minimum: 0, maximum: Number.MAX_VALUE })
17496
+ changedLines: Type18.Optional(
17497
+ Type18.Number({ minimum: 0, maximum: Number.MAX_VALUE })
17241
17498
  )
17242
17499
  }
17243
17500
  )
@@ -20623,7 +20880,7 @@ init_packaged_role_registry();
20623
20880
  init_activation_ledger_topology();
20624
20881
  import { resolve as resolve17 } from "node:path";
20625
20882
  import "@earendil-works/pi-coding-agent";
20626
- import { Type as Type13 } from "typebox";
20883
+ import { Type as Type19 } from "typebox";
20627
20884
 
20628
20885
  // src/navigator-public-session.ts
20629
20886
  init_sitian_facade();
@@ -20632,7 +20889,7 @@ import { basename as basename11 } from "node:path";
20632
20889
 
20633
20890
  // src/navigator-session-contracts.ts
20634
20891
  init_unknown_value();
20635
- import { Type as Type10 } from "typebox";
20892
+ import { Type as Type15 } from "typebox";
20636
20893
  import { Value as Value2 } from "typebox/value";
20637
20894
  var NAVIGATOR_PREPARE_TOOL_NAME = "ak_navigator_prepare";
20638
20895
  var NAVIGATOR_UNAVAILABLE_KEYS = /* @__PURE__ */ new Set([
@@ -20737,26 +20994,26 @@ function navigatorProviderFailureFromPublicTerminal(outcome) {
20737
20994
  if (typed !== void 0) return { source: typed, cause: typed };
20738
20995
  return { source: "unknown", cause: "unknown" };
20739
20996
  }
20740
- var navigatorProviderFailureSchema = Type10.Object({
20741
- source: Type10.Union([
20742
- Type10.Literal("context"),
20743
- Type10.Literal("session"),
20744
- Type10.Literal("model"),
20745
- Type10.Literal("thinking"),
20746
- Type10.Literal("auth"),
20747
- Type10.Literal("quota"),
20748
- Type10.Literal("transport"),
20749
- Type10.Literal("unknown")
20997
+ var navigatorProviderFailureSchema = Type15.Object({
20998
+ source: Type15.Union([
20999
+ Type15.Literal("context"),
21000
+ Type15.Literal("session"),
21001
+ Type15.Literal("model"),
21002
+ Type15.Literal("thinking"),
21003
+ Type15.Literal("auth"),
21004
+ Type15.Literal("quota"),
21005
+ Type15.Literal("transport"),
21006
+ Type15.Literal("unknown")
20750
21007
  ]),
20751
- cause: Type10.Union([
20752
- Type10.Literal("context"),
20753
- Type10.Literal("session"),
20754
- Type10.Literal("model"),
20755
- Type10.Literal("thinking"),
20756
- Type10.Literal("auth"),
20757
- Type10.Literal("quota"),
20758
- Type10.Literal("transport"),
20759
- Type10.Literal("unknown")
21008
+ cause: Type15.Union([
21009
+ Type15.Literal("context"),
21010
+ Type15.Literal("session"),
21011
+ Type15.Literal("model"),
21012
+ Type15.Literal("thinking"),
21013
+ Type15.Literal("auth"),
21014
+ Type15.Literal("quota"),
21015
+ Type15.Literal("transport"),
21016
+ Type15.Literal("unknown")
20760
21017
  ])
20761
21018
  }, { additionalProperties: false });
20762
21019
  function parseNavigatorModelSetting(value) {
@@ -21138,8 +21395,8 @@ function resolveNavigatorAuthorityMaterial(roleInput, fileAuthority) {
21138
21395
  return void 0;
21139
21396
  }
21140
21397
  var NAVIGATOR_TARGETS = PACKAGED_ROLE_REGISTRY.map(({ role, phases }) => ({ role, phases }));
21141
- var prepareSchema = Type13.Object({
21142
- prose: Type13.Optional(Type13.Unknown({
21398
+ var prepareSchema = Type19.Object({
21399
+ prose: Type19.Optional(Type19.Unknown({
21143
21400
  description: "\u6E38\u5955\u4F7F\u6563\u6587\u5EFA\u8BAE\uFF0C\u539F\u6837\u5448\u73B0\u3002\u4E0D\u8981\u6C42 candidates/next \u7ED3\u6784\u3002"
21144
21401
  }))
21145
21402
  }, { additionalProperties: true });
@@ -21676,24 +21933,25 @@ init_notary_source_run();
21676
21933
  init_host_contracts();
21677
21934
  init_sitian_facade();
21678
21935
  init_submission_ledger();
21936
+ init_filed_submission();
21679
21937
  import { randomUUID as randomUUID8 } from "node:crypto";
21680
21938
  import { readFileSync as readFileSync6, writeSync as writeSync2 } from "node:fs";
21681
21939
  import { join as join43 } from "node:path";
21682
21940
  import { Value as Value4 } from "typebox/value";
21683
21941
 
21684
21942
  // src/activation-trace.ts
21685
- import { Type as Type14 } from "typebox";
21686
- var causeSchema = Type14.Object({
21687
- identity: Type14.String({ minLength: 1 }),
21688
- name: Type14.String({ minLength: 1 }),
21689
- message: Type14.String(),
21690
- evidenceId: Type14.Optional(Type14.String({ minLength: 1 }))
21943
+ import { Type as Type20 } from "typebox";
21944
+ var causeSchema = Type20.Object({
21945
+ identity: Type20.String({ minLength: 1 }),
21946
+ name: Type20.String({ minLength: 1 }),
21947
+ message: Type20.String(),
21948
+ evidenceId: Type20.Optional(Type20.String({ minLength: 1 }))
21691
21949
  }, { additionalProperties: false });
21692
- var activationTraceRecordSchema = Type14.Object({
21693
- role: Type14.String({ minLength: 1 }),
21694
- stageId: Type14.String({ pattern: "^[a-z][a-z0-9-]*$" }),
21695
- status: Type14.Literal("failed"),
21696
- timestamp: Type14.String({ format: "date-time" }),
21950
+ var activationTraceRecordSchema = Type20.Object({
21951
+ role: Type20.String({ minLength: 1 }),
21952
+ stageId: Type20.String({ pattern: "^[a-z][a-z0-9-]*$" }),
21953
+ status: Type20.Literal("failed"),
21954
+ timestamp: Type20.String({ format: "date-time" }),
21697
21955
  cause: causeSchema
21698
21956
  }, { additionalProperties: false });
21699
21957
  var activationCauseEvidence = 0;
@@ -21857,10 +22115,10 @@ init_engine_material();
21857
22115
  init_engine_detour();
21858
22116
  init_engine_detour_usage();
21859
22117
  init_run_terminal_artifacts();
21860
- import { Type as Type15 } from "typebox";
21861
- var engineDetourArgsSchema = Type15.Object(
22118
+ import { Type as Type21 } from "typebox";
22119
+ var engineDetourArgsSchema = Type21.Object(
21862
22120
  {
21863
- argv: Type15.Array(Type15.String({ minLength: 1 }), {
22121
+ argv: Type21.Array(Type21.String({ minLength: 1 }), {
21864
22122
  minItems: 1,
21865
22123
  description: "\u9996\u9879\u4E3A PATH \u4E2D\u7684\u53EF\u6267\u884C\u6587\u4EF6\uFF0C\u5176\u4F59\u9879\u4E3A\u53C2\u6570\u3002"
21866
22124
  })
@@ -21994,28 +22252,10 @@ function registerEngineDetourTool(roleHost, hostActions) {
21994
22252
  init_receipt_delivery_policy();
21995
22253
 
21996
22254
  // src/collector-role.ts
22255
+ init_filed_submission();
22256
+ init_role_submission_declarations();
21997
22257
  init_collector_config();
21998
22258
  init_collector_output();
21999
-
22000
- // src/collector-tool-schemas.ts
22001
- init_open_tool_schema();
22002
- init_terminating_infrastructure();
22003
- import { Type as Type16 } from "typebox";
22004
- var collectorOutputBaseSchema = openToolObject(
22005
- Type16.Object({
22006
- groups: Type16.Unsafe({
22007
- 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"
22008
- }),
22009
- unfinishedReasons: Type16.Unknown({
22010
- description: "\u672A\u5B8C\u6210\u539F\u56E0\uFF1B\u53D6\u8BC1\u53D7\u9650\u65F6\u5982\u5B9E\u62A5\u544A\u3002"
22011
- })
22012
- })
22013
- );
22014
- var collectorOutputArgsSchema = withTerminatingOutputDeclarations(
22015
- collectorOutputBaseSchema
22016
- );
22017
-
22018
- // src/collector-role.ts
22019
22259
  var COLLECTOR_REQUIRED_TOOLS = [COLLECTOR_OUTPUT_TOOL];
22020
22260
  var COLLECTOR_CONSTRUCTION_TOOLS = Object.freeze(["write", "edit"]);
22021
22261
  var COLLECTOR_TRANSPORT_FLAGS = Object.freeze([
@@ -22041,7 +22281,6 @@ var COLLECTOR_TRANSPORT_FLAGS = Object.freeze([
22041
22281
  })
22042
22282
  })
22043
22283
  ]);
22044
- var outputSchema = collectorOutputArgsSchema;
22045
22284
  function buildMethodContext(activation) {
22046
22285
  const lines = [
22047
22286
  "<collector_method>",
@@ -22113,27 +22352,16 @@ function createCollectorRoleRuntime(pi, dependencies) {
22113
22352
  registerBusinessTools(getActivation) {
22114
22353
  if (toolsRegistered) return;
22115
22354
  toolsRegistered = true;
22116
- pi.registerTool({
22117
- name: COLLECTOR_OUTPUT_TOOL,
22118
- label: "\u901A\u8FDB\u53F8\u8F93\u51FA",
22119
- description: "\u63D0\u4EA4\u901A\u8FDB\u53F8\u56DE\u6267\u3002",
22120
- promptSnippet: "\u63D0\u4EA4\u901A\u8FDB\u53F8\u56DE\u6267",
22121
- parameters: outputSchema,
22122
- async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
22123
- const activation = getActivation();
22124
- if (activation === void 0) throw new Error("\u901A\u8FDB\u53F8\u672A\u6FC0\u6D3B");
22125
- return {
22126
- content: [],
22127
- details: params,
22128
- terminate: true
22129
- };
22130
- }
22355
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("collector"), {
22356
+ readyError: () => getActivation() === void 0 ? "\u901A\u8FDB\u53F8\u672A\u6FC0\u6D3B" : void 0
22131
22357
  });
22132
22358
  }
22133
22359
  };
22134
22360
  }
22135
22361
 
22136
22362
  // src/doctor-role.ts
22363
+ init_filed_submission();
22364
+ init_role_submission_declarations();
22137
22365
  init_compliance_transport();
22138
22366
  init_dossier_resolution();
22139
22367
  init_doctor_contracts();
@@ -22180,17 +22408,20 @@ function createDoctorRoleRuntime(pi, dependencies, host) {
22180
22408
  const details = activation.store.read(params.evidenceId, params.offset, params.limit);
22181
22409
  return { content: [{ type: "text", text: JSON.stringify(details) }], details };
22182
22410
  } });
22183
- 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) {
22184
- if (!activation) throw new Error("\u592A\u533B\u7F72\u672A\u6FC0\u6D3B");
22185
- const active2 = activation;
22186
- const testimony = validateDoctorOutput(params, active2.patient, active2.store);
22187
- try {
22188
- appendCandidate(ctx, { version: 1, testimony, cost: active2.patient.cost, readRecord: active2.store.readRecord(), patientIdentity: active2.patient.identity });
22189
- } catch (error) {
22190
- host.failInfrastructure(error, ctx, id);
22411
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("doctor"), {
22412
+ readyError: () => activation === void 0 ? "\u592A\u533B\u7F72\u672A\u6FC0\u6D3B" : void 0,
22413
+ beforeAccept: async ({ toolCallId, parameters, ctx }) => {
22414
+ if (activation === void 0) throw new Error("\u592A\u533B\u7F72\u672A\u6FC0\u6D3B");
22415
+ const active2 = activation;
22416
+ const testimony = validateDoctorOutput(parameters, active2.patient, active2.store);
22417
+ try {
22418
+ appendCandidate(ctx, { version: 1, testimony, cost: active2.patient.cost, readRecord: active2.store.readRecord(), patientIdentity: active2.patient.identity });
22419
+ } catch (error) {
22420
+ host.failInfrastructure(error, ctx, toolCallId);
22421
+ }
22422
+ return testimony;
22191
22423
  }
22192
- return { content: [], details: testimony, terminate: true };
22193
- } });
22424
+ });
22194
22425
  pi.on("before_agent_start", (event) => {
22195
22426
  if (!activation) throw new Error("\u592A\u533B\u7F72\u672A\u6FC0\u6D3B");
22196
22427
  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 })) };
@@ -22215,6 +22446,8 @@ ${JSON.stringify(catalog)}
22215
22446
  }
22216
22447
 
22217
22448
  // src/notary-role.ts
22449
+ init_filed_submission();
22450
+ init_role_submission_declarations();
22218
22451
  init_notary_contracts();
22219
22452
  function readNotaryTicketFlag(flag) {
22220
22453
  if (flag === void 0) return void 0;
@@ -22282,22 +22515,8 @@ function createNotaryRoleRuntime(pi, dependencies, host) {
22282
22515
  };
22283
22516
  if (!registered) {
22284
22517
  registered = true;
22285
- pi.registerTool({
22286
- name: NOTARY_OUTPUT_TOOL_NAME,
22287
- label: "\u7B26\u5B9D\u90CE\u8F93\u51FA",
22288
- description: "\u63D0\u4EA4\u5F15\u6587\u4FDD\u771F\u4E0E\u7968\u9762\u5BF9\u9F50\u7684 converged/continue/escalate \u51B3\u8BAE\u3002",
22289
- promptSnippet: "\u63D0\u4EA4\u7B26\u5B9D\u90CE\u51B3\u8BAE",
22290
- parameters: notaryOutputSchema,
22291
- async execute(toolCallId, parameters, _signal, _onUpdate, ctx) {
22292
- if (activation === void 0) {
22293
- throw new Error("\u7B26\u5B9D\u90CE\u672A\u6FC0\u6D3B");
22294
- }
22295
- return {
22296
- content: [],
22297
- details: parameters,
22298
- terminate: true
22299
- };
22300
- }
22518
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("notary"), {
22519
+ readyError: () => activation === void 0 ? "\u7B26\u5B9D\u90CE\u672A\u6FC0\u6D3B" : void 0
22301
22520
  });
22302
22521
  pi.on("before_agent_start", (event) => {
22303
22522
  if (activation === void 0) {
@@ -22330,128 +22549,41 @@ init_notary_contracts();
22330
22549
 
22331
22550
  // src/countersign-role.ts
22332
22551
  init_review_submission();
22552
+ init_role_submission_declarations();
22333
22553
  init_countersign_contracts();
22334
22554
  init_countersign_contracts();
22335
- var countersignVerdictSchema = reviewSubmissionSchema;
22336
- var COUNTERSIGN_TOOL_SPEC = {
22337
- name: COUNTERSIGN_OUTPUT_TOOL_NAME,
22338
- label: "\u7ED9\u4E8B\u4E2D\u8F93\u51FA",
22339
- description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\u3002",
22340
- promptSnippet: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE",
22341
- parameters: countersignVerdictSchema
22342
- };
22555
+ var COUNTERSIGN_TOOL_SPEC = roleSubmissionDeclaration("countersign");
22343
22556
 
22344
22557
  // src/gleaner-left-role.ts
22345
- init_open_tool_schema();
22346
- init_terminating_infrastructure();
22347
22558
  init_gleaner_left_contracts();
22559
+ init_role_submission_declarations();
22348
22560
  init_gleaner_left_contracts();
22349
- import { Type as Type17 } from "typebox";
22350
- var gleanerLeftOutputSchema = withTerminatingOutputDeclarations(
22351
- openToolObject(
22352
- Type17.Object({
22353
- status: Type17.Unknown({
22354
- description: "completed"
22355
- }),
22356
- findings: Type17.Unknown({
22357
- 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"
22358
- })
22359
- })
22360
- )
22361
- );
22362
- var GLEANER_LEFT_TOOL_SPEC = {
22363
- name: GLEANER_LEFT_OUTPUT_TOOL_NAME,
22364
- label: "\u5DE6\u62FE\u9057\u8F93\u51FA",
22365
- description: "\u5DE6\u62FE\u9057\u5F39\u7AE0\u3002",
22366
- promptSnippet: "\u5DE6\u62FE\u9057\u5F39\u7AE0",
22367
- parameters: gleanerLeftOutputSchema
22368
- };
22561
+ var GLEANER_LEFT_TOOL_SPEC = roleSubmissionDeclaration("gleaner-left");
22369
22562
 
22370
22563
  // src/role-runtime.ts
22371
22564
  init_gleaner_left_contracts();
22372
22565
 
22373
22566
  // src/inspector-role.ts
22374
22567
  init_review_submission();
22568
+ init_role_submission_declarations();
22375
22569
  init_inspector_contracts();
22376
- var inspectorOutputSchema = reviewSubmissionSchema;
22377
- var INSPECTOR_TOOL_SPEC = {
22378
- name: INSPECTOR_OUTPUT_TOOL_NAME,
22379
- label: "\u53F0\u9662\u8F93\u51FA",
22380
- description: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267\uFF0C\u72B6\u6001\u4E3A converged\u3001continue \u6216 escalate\u3002",
22381
- promptSnippet: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267",
22382
- parameters: inspectorOutputSchema
22383
- };
22570
+ var INSPECTOR_TOOL_SPEC = roleSubmissionDeclaration("inspector");
22384
22571
 
22385
22572
  // src/role-runtime.ts
22386
22573
  init_inspector_contracts();
22387
22574
 
22388
22575
  // src/diarist-role.ts
22389
- init_open_tool_schema();
22390
- init_terminating_infrastructure();
22391
22576
  init_diarist_contracts();
22577
+ init_role_submission_declarations();
22392
22578
  init_diarist_contracts();
22393
- import { Type as Type18 } from "typebox";
22394
- 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";
22395
- var diaristOutputSchema = withTerminatingOutputDeclarations(
22396
- openToolObject(
22397
- Type18.Object({
22398
- status: Type18.Unknown({
22399
- description: "completed | escalate"
22400
- }),
22401
- ticketNumber: Type18.Optional(
22402
- Type18.Unknown({
22403
- 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"
22404
- })
22405
- ),
22406
- reason: Type18.Unknown({
22407
- description: "status \u4E3A escalate \u65F6\uFF1A\u8BA4\u4E0D\u51FA\u672C\u5EAD\u5BF9\u8C61\u7684\u539F\u56E0"
22408
- }),
22409
- sessions: Type18.Optional(Type18.Unknown({ description: DIARIST_SESSIONS_DESCRIPTION })),
22410
- ticketSessions: Type18.Unknown({
22411
- 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`
22412
- })
22413
- })
22414
- )
22415
- );
22416
- var DIARIST_TOOL_SPEC = {
22417
- name: DIARIST_OUTPUT_TOOL_NAME,
22418
- label: "\u8D77\u5C45\u90CE\u8F93\u51FA",
22419
- 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",
22420
- promptSnippet: "\u8D77\u5C45\u90CE\u4EA4\u8FB9\u754C",
22421
- parameters: diaristOutputSchema
22422
- };
22579
+ var DIARIST_TOOL_SPEC = roleSubmissionDeclaration("diarist");
22423
22580
 
22424
22581
  // src/secretariat-role.ts
22425
- init_terminating_infrastructure();
22426
22582
  init_secretariat_contracts();
22583
+ init_role_submission_declarations();
22427
22584
  init_secretariat_contracts();
22428
- import { Type as Type19 } from "typebox";
22429
- var secretariatVerdictSchema = withTerminatingOutputDeclarations(
22430
- Type19.Object(
22431
- {
22432
- secretariatStatus: Type19.Unknown({
22433
- description: "converged | escalate"
22434
- }),
22435
- ticketNumber: Type19.Optional(
22436
- Type19.Unknown({ description: "\u672C\u7968\u53F7\uFF1B\u7F72\u65F6\u6307\u5411\u6700\u7EC8\u6B63\u6587\u6240\u5728\u7968" })
22437
- ),
22438
- note: Type19.Unknown({ description: "\u9644\u6CE8" }),
22439
- evidence: Type19.Optional(Type19.Unknown({ description: "\u7559\u5B58\u8BC1\u636E" })),
22440
- decisionGate: Type19.Unknown({
22441
- description: "\u9700\u965B\u4E0B\u5904\u7F6E\u7684\u95EE\u9898\u4E0E\u9009\u9879\uFF1B\u53EF\u5199 question \u4E0E options\uFF0C\u539F\u6837\u7559\u5B58\u3002"
22442
- })
22443
- },
22444
- { additionalProperties: true }
22445
- )
22446
- );
22447
- secretariatVerdictSchema.required = [];
22448
- var SECRETARIAT_OUTPUT_TOOL_SPEC = {
22449
- name: SECRETARIAT_OUTPUT_TOOL_NAME,
22450
- label: "\u4E2D\u4E66\u7701\u8F93\u51FA",
22451
- description: "\u4E2D\u4E66\u7701\u7EC8\u5C40\u56DE\u6267\u3002",
22452
- promptSnippet: "\u4E2D\u4E66\u7701\u7EC8\u5C40\u56DE\u6267",
22453
- parameters: secretariatVerdictSchema
22454
- };
22585
+ init_secretariat_contracts();
22586
+ var SECRETARIAT_OUTPUT_TOOL_SPEC = roleSubmissionDeclaration("secretariat");
22455
22587
 
22456
22588
  // src/role-runtime.ts
22457
22589
  init_secretariat_contracts();
@@ -22469,24 +22601,13 @@ init_invocation();
22469
22601
  init_gatekeeper_role();
22470
22602
 
22471
22603
  // src/navigator-role.ts
22472
- init_navigator_output();
22473
- var NAVIGATOR_TOOL_SPEC = {
22474
- name: NAVIGATOR_OUTPUT_TOOL_NAME,
22475
- label: "\u6E38\u5955\u4F7F\u5EFA\u8BAE",
22476
- description: "\u6E38\u5955\u4F7F\u7EC8\u5C40\u56DE\u6267\uFF1A\u6563\u6587\u5EFA\u8BAE\uFF0C\u539F\u6837\u5448\u73B0\u3002",
22477
- promptSnippet: "\u6E38\u5955\u4F7F\u5EFA\u8BAE",
22478
- parameters: navigatorOutputSchema
22479
- };
22604
+ init_role_submission_declarations();
22605
+ var NAVIGATOR_TOOL_SPEC = roleSubmissionDeclaration("navigator");
22480
22606
 
22481
22607
  // src/auditor-role.ts
22482
22608
  init_auditor_output();
22483
- var AUDITOR_TOOL_SPEC = {
22484
- name: AUDITOR_OUTPUT_TOOL_NAME,
22485
- label: "\u5BA1\u5211\u9662\u8F93\u51FA",
22486
- description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\u3002",
22487
- promptSnippet: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267",
22488
- parameters: auditorOutputSchema
22489
- };
22609
+ init_role_submission_declarations();
22610
+ var AUDITOR_TOOL_SPEC = roleSubmissionDeclaration("auditor");
22490
22611
 
22491
22612
  // src/role-runtime.ts
22492
22613
  init_navigator_invocation_identity();
@@ -22496,22 +22617,9 @@ init_packaged_role_registry();
22496
22617
  init_judge_role();
22497
22618
 
22498
22619
  // src/reviewer-role.ts
22499
- init_open_tool_schema();
22500
- init_terminating_infrastructure();
22620
+ init_filed_submission();
22621
+ init_role_submission_declarations();
22501
22622
  init_reviewer_output();
22502
- import { Type as Type20 } from "typebox";
22503
- 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";
22504
- 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";
22505
- var reviewerOutputObject = Type20.Object({
22506
- status: Type20.Unknown({ description: REVIEWER_STATUS_DESCRIPTION }),
22507
- amendments: Type20.Unknown({ description: REVIEWER_AMENDMENTS_DESCRIPTION }),
22508
- diagnostic: Type20.Unknown({
22509
- 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"
22510
- })
22511
- });
22512
- var reviewerOutputSchema = withTerminatingOutputDeclarations(
22513
- openToolObject(reviewerOutputObject)
22514
- );
22515
22623
  function createReviewerRoleRuntime(pi, dependencies, _hostActions) {
22516
22624
  let soul;
22517
22625
  let registered = false;
@@ -22523,20 +22631,8 @@ function createReviewerRoleRuntime(pi, dependencies, _hostActions) {
22523
22631
  fixedBaseRevision = admitted.baseRevision;
22524
22632
  if (!registered) {
22525
22633
  registered = true;
22526
- pi.registerTool({
22527
- name: REVIEWER_OUTPUT_TOOL_NAME,
22528
- label: "\u5FA1\u53F2\u53F0\u8F93\u51FA",
22529
- description: "\u63D0\u4EA4\u5FA1\u53F2\u53F0\u7EC8\u5C40\u56DE\u6267\u3002",
22530
- promptSnippet: "\u63D0\u4EA4\u5FA1\u53F2\u53F0\u7EC8\u5C40\u56DE\u6267",
22531
- parameters: reviewerOutputSchema,
22532
- async execute(_id, parameters) {
22533
- if (!soul) throw new Error("\u5FA1\u53F2\u53F0\u8F93\u5165\u672A\u88C5\u8F7D");
22534
- return {
22535
- content: [],
22536
- details: parameters,
22537
- terminate: true
22538
- };
22539
- }
22634
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("reviewer"), {
22635
+ readyError: () => soul === void 0 || soul.length === 0 ? "\u5FA1\u53F2\u53F0\u8F93\u5165\u672A\u88C5\u8F7D" : void 0
22540
22636
  });
22541
22637
  }
22542
22638
  const activatedSoul = soul;
@@ -22550,12 +22646,11 @@ function createReviewerRoleRuntime(pi, dependencies, _hostActions) {
22550
22646
  }
22551
22647
 
22552
22648
  // src/worker-role.ts
22553
- init_open_tool_schema();
22554
- init_terminating_infrastructure();
22555
22649
  init_worker_output();
22556
22650
  init_fixer_output();
22651
+ init_filed_submission();
22652
+ init_role_submission_declarations();
22557
22653
  init_fixer_packet();
22558
- import { Type as Type21 } from "typebox";
22559
22654
 
22560
22655
  // src/worker-submission-gates.ts
22561
22656
  init_archivist_record_entry();
@@ -22828,18 +22923,7 @@ function fixerBashSeatbeltDenyReason(matched) {
22828
22923
 
22829
22924
  // src/worker-role.ts
22830
22925
  init_unknown_value();
22831
- 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}`;
22832
- var coderOutputObject = Type21.Object({
22833
- status: Type21.Unknown({ description: CODER_STATUS_DESCRIPTION }),
22834
- report: Type21.Unknown({ description: "\u5982\u5B9E\u7ED3\u679C\u62A5\u544A" }),
22835
- remainingScope: Type21.Unknown({ description: "\u672C\u5C40\u540E\u5269\u4F59\u5DE5\u4F5C" }),
22836
- reason: Type21.Unknown({
22837
- 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"
22838
- })
22839
- });
22840
- var coderOutputSchema = withTerminatingOutputDeclarations(
22841
- openToolObject(coderOutputObject)
22842
- );
22926
+ init_worker_output();
22843
22927
  var FIXER_FLAG_DEFINITIONS = {
22844
22928
  packet: {
22845
22929
  name: "ak-fix-packet",
@@ -22879,6 +22963,28 @@ function validateWorkerOutput(output, phase, roleLabel) {
22879
22963
  if (roleLabel === "Fixer") return validateFixerOutput(output, phase);
22880
22964
  return validateAcceptedWorkerDetails(output, "Coder");
22881
22965
  }
22966
+ function registerWorkerSubmission(pi, role, options) {
22967
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration(role), {
22968
+ readyError: () => options.ready() ? void 0 : options.notReady,
22969
+ beforeAccept: async ({ toolCallId, parameters, ctx }) => {
22970
+ const phase = options.phase();
22971
+ if (phase === void 0) throw new Error(options.notReady);
22972
+ const output = options.project(parameters, phase);
22973
+ const status = workerStatusOf(output);
22974
+ if (status !== void 0) {
22975
+ assertAcceptableThroughHost(
22976
+ options.submissionGate,
22977
+ status,
22978
+ output,
22979
+ options.hostActions,
22980
+ ctx,
22981
+ toolCallId
22982
+ );
22983
+ }
22984
+ return output;
22985
+ }
22986
+ });
22987
+ }
22882
22988
  function assertAcceptableThroughHost(submissionGate, status, details, hostActions, ctx, toolCallId) {
22883
22989
  try {
22884
22990
  submissionGate.assertAcceptable(status, details);
@@ -22940,30 +23046,13 @@ function createFixerRoleRuntime(pi, dependencies, hostActions) {
22940
23046
  packet = Object.freeze({ instructions, prerequisites });
22941
23047
  if (!lifecycleRegistered) {
22942
23048
  lifecycleRegistered = true;
22943
- pi.registerTool({
22944
- name: FIXER_OUTPUT_TOOL_NAME,
22945
- label: "\u4FEE\u5185\u53F8\u8F93\u51FA",
22946
- description: "\u63D0\u4EA4\u4FEE\u5185\u53F8\u7EC8\u5C40\u56DE\u6267\u3002",
22947
- promptSnippet: "\u63D0\u4EA4\u4FEE\u5185\u53F8\u7EC8\u5C40\u56DE\u6267",
22948
- parameters: fixerOutputSchema,
22949
- async execute(toolCallId, parameters, _signal, _onUpdate, ctx) {
22950
- if (packet === void 0 || phase === void 0) {
22951
- throw new Error("\u4FEE\u5185\u53F8\u4FEE\u7406\u5305\u4E0E\u9636\u6BB5\u672A\u88C5\u8F7D");
22952
- }
22953
- const output = deepFreeze2(validateFixerOutput(parameters, phase));
22954
- const status = workerStatusOf(output);
22955
- if (status !== void 0) {
22956
- assertAcceptableThroughHost(
22957
- submissionGate,
22958
- status,
22959
- output,
22960
- hostActions,
22961
- ctx,
22962
- toolCallId
22963
- );
22964
- }
22965
- return { content: [], details: output, terminate: true };
22966
- }
23049
+ registerWorkerSubmission(pi, "fixer", {
23050
+ notReady: "\u4FEE\u5185\u53F8\u4FEE\u7406\u5305\u4E0E\u9636\u6BB5\u672A\u88C5\u8F7D",
23051
+ ready: () => packet !== void 0 && phase !== void 0,
23052
+ phase: () => phase,
23053
+ project: (parameters, current) => deepFreeze2(validateFixerOutput(parameters, current)),
23054
+ submissionGate,
23055
+ hostActions
22967
23056
  });
22968
23057
  pi.on("tool_call", (event) => {
22969
23058
  if (event.toolName !== "bash") return;
@@ -23040,30 +23129,13 @@ function createCoderRoleRuntime(pi, dependencies, hostActions) {
23040
23129
  if (task.length === 0) throw new Error("Coder task is empty");
23041
23130
  if (!lifecycleRegistered) {
23042
23131
  lifecycleRegistered = true;
23043
- pi.registerTool({
23044
- name: CODER_OUTPUT_TOOL_NAME,
23045
- label: "\u5C06\u4F5C\u76D1\u8F93\u51FA",
23046
- description: "\u63D0\u4EA4\u5C06\u4F5C\u76D1\u7EC8\u5C40\u56DE\u6267\u3002",
23047
- promptSnippet: "\u63D0\u4EA4\u5C06\u4F5C\u76D1\u7EC8\u5C40\u56DE\u6267",
23048
- parameters: coderOutputSchema,
23049
- async execute(toolCallId, parameters, _signal, _onUpdate, ctx2) {
23050
- if (task === void 0 || phase === void 0) {
23051
- throw new Error("\u5C06\u4F5C\u76D1\u4EFB\u52A1\u4E0E\u9636\u6BB5\u672A\u88C5\u8F7D");
23052
- }
23053
- const output = validateWorkerOutput(parameters, phase, "Coder");
23054
- const status = workerStatusOf(output);
23055
- if (status !== void 0) {
23056
- assertAcceptableThroughHost(
23057
- submissionGate,
23058
- status,
23059
- output,
23060
- hostActions,
23061
- ctx2,
23062
- toolCallId
23063
- );
23064
- }
23065
- return { content: [], details: output, terminate: true };
23066
- }
23132
+ registerWorkerSubmission(pi, "coder", {
23133
+ notReady: "\u5C06\u4F5C\u76D1\u4EFB\u52A1\u4E0E\u9636\u6BB5\u672A\u88C5\u8F7D",
23134
+ ready: () => task !== void 0 && phase !== void 0,
23135
+ phase: () => phase,
23136
+ project: (parameters, current) => validateWorkerOutput(parameters, current, "Coder"),
23137
+ submissionGate,
23138
+ hostActions
23067
23139
  });
23068
23140
  pi.on("before_agent_start", (event, ctx2) => {
23069
23141
  if (soul === void 0) throw new Error("\u5C06\u4F5C\u76D1\u804C\u5206\u672A\u88C5\u8F7D");
@@ -23099,6 +23171,8 @@ init_merger_contracts();
23099
23171
 
23100
23172
  // src/merger-role.ts
23101
23173
  init_merger_contracts();
23174
+ init_filed_submission();
23175
+ init_role_submission_declarations();
23102
23176
  init_exact_utf8();
23103
23177
  var MERGER_INPUT_FLAG = { name: "ak-merger-input", definition: { description: "Path to Merger assignment materials JSON", type: "string" } };
23104
23178
  function materialText(input, key) {
@@ -23118,16 +23192,8 @@ function createMergerRoleRuntime(pi, dependencies) {
23118
23192
  activation = { soul, input };
23119
23193
  if (!registered) {
23120
23194
  registered = true;
23121
- pi.registerTool({
23122
- name: MERGER_OUTPUT_TOOL_NAME,
23123
- label: "\u5408\u5E76\u8F93\u51FA",
23124
- description: "\u63D0\u4EA4\u5408\u5E76\u7ED3\u679C\uFF1B\u8F93\u51FA\u5206\u652F\u4E3A completed \u4E0E escalate\u3002",
23125
- promptSnippet: "\u63D0\u4EA4\u5408\u5E76\u7ED3\u679C",
23126
- parameters: mergerOutputSchema,
23127
- async execute(_id, params, _signal, _update, _ctx) {
23128
- if (!activation) throw new Error("\u6821\u4E66\u90CE\u672A\u6FC0\u6D3B");
23129
- return { content: [], details: params, terminate: true };
23130
- }
23195
+ registerFiledSubmissionTool(pi, roleSubmissionDeclaration("merger"), {
23196
+ readyError: () => activation === void 0 ? "\u6821\u4E66\u90CE\u672A\u6FC0\u6D3B" : void 0
23131
23197
  });
23132
23198
  pi.on("before_agent_start", (event) => {
23133
23199
  if (!activation) throw new Error("\u6821\u4E66\u90CE\u672A\u6FC0\u6D3B");
@@ -23396,21 +23462,9 @@ function createFiledOfficerRuntime(roleHost, spec, dependencies) {
23396
23462
  soul = loaded;
23397
23463
  if (!registered) {
23398
23464
  registered = true;
23399
- roleHost.registerTool({
23400
- name: spec.tool.name,
23401
- label: spec.tool.label,
23402
- description: spec.tool.description,
23403
- promptSnippet: spec.tool.promptSnippet,
23404
- parameters: spec.tool.parameters,
23405
- async execute(toolCallId, parameters, signal, _onUpdate, ctx) {
23406
- if (soul === void 0) throw new Error(`${spec.role} \u804C\u5206\u672A\u88C5\u8F7D`);
23407
- const projected = spec.beforeAccept === void 0 ? void 0 : await spec.beforeAccept({ toolCallId, parameters, signal, ctx });
23408
- return {
23409
- content: [],
23410
- details: projected === void 0 ? parameters : projected,
23411
- terminate: true
23412
- };
23413
- }
23465
+ registerFiledSubmissionTool(roleHost, spec.tool, {
23466
+ readyError: () => soul === void 0 ? `${spec.role} \u804C\u5206\u672A\u88C5\u8F7D` : void 0,
23467
+ ...spec.beforeAccept === void 0 ? {} : { beforeAccept: spec.beforeAccept }
23414
23468
  });
23415
23469
  roleHost.on("before_agent_start", (event) => {
23416
23470
  if (soul === void 0) throw new Error(`${spec.role} \u804C\u5206\u672A\u88C5\u8F7D`);