@akagilnc/pi-workflow-roles 0.1.2521 → 0.1.2653-next.71811ca

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 (109) hide show
  1. package/README.md +129 -39
  2. package/README.zh-CN.md +128 -39
  3. package/dist/activation-ledger-topology.js +1 -1
  4. package/dist/archivist-record-entry.js +47 -26
  5. package/dist/auditor-dossier-tool.js +3 -1
  6. package/dist/compliance-transport.js +17 -26
  7. package/dist/doctor-contracts.js +1 -2
  8. package/dist/dossier-resolution.js +4 -8
  9. package/dist/engine-detour-tool.js +33 -8
  10. package/dist/engine-detour.js +1 -0
  11. package/dist/evidence-child-executor.js +277 -424
  12. package/dist/host-contracts.js +22 -0
  13. package/dist/institutional-resolution.js +88 -0
  14. package/dist/merger-contracts.js +1 -2
  15. package/dist/navigator-attendance.js +16 -0
  16. package/dist/notary-contracts.js +2 -3
  17. package/dist/package-contracts/fixer-output.js +1 -2
  18. package/dist/packaged-role-registry.js +102 -9
  19. package/dist/pi/in-process-session.js +671 -0
  20. package/dist/public-cli/config.js +7 -5
  21. package/dist/public-cli/main.js +3767 -4113
  22. package/dist/reviewer-child-executor.js +6 -1
  23. package/dist/session-opening-materials.js +10 -38
  24. package/dist/sitian-appender.js +146 -0
  25. package/dist/sitian-contracts.js +21 -0
  26. package/dist/sitian-facade.js +15 -0
  27. package/dist/sitian-reader.js +52 -0
  28. package/extensions/role-runtime.ts +9 -7
  29. package/package.json +5 -5
  30. package/resources/engines/cursor.md +12 -26
  31. package/resources/engines/hermes.md +2 -23
  32. package/resources/engines/opus.md +1 -16
  33. package/resources/navigator-route-playbook.md +2 -2
  34. package/scripts/build-package.mjs +0 -1
  35. package/souls/quality-law.md +1 -1
  36. package/src/activation-ledger-topology.ts +1 -1
  37. package/src/archivist-record-entry.ts +57 -45
  38. package/src/auditor-dossier-tool.ts +4 -2
  39. package/src/canonical-skill-binding.ts +37 -27
  40. package/src/collector-role.ts +11 -20
  41. package/src/collector-tool-schemas.ts +1 -4
  42. package/src/compliance-transport.ts +19 -44
  43. package/src/doctor-auditor.ts +1 -5
  44. package/src/doctor-contracts.ts +1 -4
  45. package/src/doctor-role.ts +31 -8
  46. package/src/dossier-resolution.ts +8 -8
  47. package/src/engine-detour-tool.ts +48 -19
  48. package/src/engine-detour.ts +3 -0
  49. package/src/evidence-child-executor.ts +277 -485
  50. package/src/factory-board.ts +3 -3
  51. package/src/gatekeeper-role.ts +21 -10
  52. package/src/host-contracts.ts +386 -0
  53. package/src/in-process-session.ts +1 -115
  54. package/src/institutional-resolution.ts +135 -0
  55. package/src/judge-auditor.ts +1 -5
  56. package/src/judge-role.ts +37 -51
  57. package/src/merger-contracts.ts +1 -4
  58. package/src/merger-role.ts +7 -11
  59. package/src/navigator-attendance.ts +20 -1
  60. package/src/notary-contracts.ts +8 -11
  61. package/src/notary-role.ts +7 -23
  62. package/src/notary-source-run.ts +4 -3
  63. package/src/package-contracts/fixer-output.ts +1 -4
  64. package/src/package-resources/method-skill-binding.ts +10 -34
  65. package/src/packaged-role-registry.ts +122 -12
  66. package/src/pi/adapter.ts +192 -0
  67. package/src/pi/durable-principal.ts +98 -0
  68. package/src/pi/in-process-session.ts +819 -0
  69. package/src/pi/known-failure.ts +77 -0
  70. package/src/pi/pi-normalization.ts +284 -0
  71. package/src/pi/role-turn-host.ts +459 -0
  72. package/src/public-cli/auto-resume.ts +42 -44
  73. package/src/public-cli/cli.ts +171 -257
  74. package/src/public-cli/coder-run.ts +115 -433
  75. package/src/public-cli/collector-run.ts +62 -314
  76. package/src/public-cli/config.ts +7 -5
  77. package/src/public-cli/doctor-run.ts +41 -52
  78. package/src/public-cli/fixer-run.ts +122 -427
  79. package/src/public-cli/invocation.ts +287 -96
  80. package/src/public-cli/judge-run.ts +92 -422
  81. package/src/public-cli/merger-run.ts +167 -429
  82. package/src/public-cli/notary-run.ts +41 -47
  83. package/src/public-cli/option-definitions.ts +136 -3
  84. package/src/public-cli/post-admission.ts +497 -0
  85. package/src/public-cli/public-run-credentials.ts +4 -4
  86. package/src/public-cli/reviewer-dispatch-rejection.ts +106 -0
  87. package/src/public-cli/reviewer-run.ts +132 -449
  88. package/src/public-cli/run-lifecycle.ts +339 -327
  89. package/src/public-cli/settlement.ts +251 -134
  90. package/src/public-cli/terminal.ts +3 -9
  91. package/src/public-cli/turn-request.ts +87 -0
  92. package/src/reviewer-child-executor.ts +9 -1
  93. package/src/reviewer-role.ts +11 -20
  94. package/src/role-runtime.ts +129 -78
  95. package/src/session-opening-materials.ts +25 -39
  96. package/src/sitian-appender.ts +171 -0
  97. package/src/sitian-contracts.ts +106 -0
  98. package/src/sitian-facade.ts +18 -0
  99. package/src/sitian-reader.ts +62 -0
  100. package/src/worker-role.ts +42 -40
  101. package/src/worker-submission-gates.ts +33 -0
  102. package/dist/archivist-role-run-coordinates.js +0 -28
  103. package/dist/package-contracts/terminating-infrastructure.js +0 -90
  104. package/resources/engines/sonnet.md +0 -27
  105. package/resources/engines/zcode.md +0 -63
  106. package/src/archivist-role-run-coordinates.ts +0 -45
  107. package/src/package-contracts/terminating-infrastructure.ts +0 -132
  108. package/src/public-cli/explicit-internal.ts +0 -427
  109. package/src/public-cli/one-shot-dispatch.ts +0 -300
@@ -1,300 +0,0 @@
1
- /**
2
- * Shared one-shot public Role dispatch seam (Doctor-isomorphic path).
3
- * Post-admission lifecycle — mark admitted → writer lease → running → spawn →
4
- * settle/fail → terminal → release — lives here once. Role runners supply only
5
- * activation args and settlement adapters (ADR 0018 / #448).
6
- */
7
- import { writeFile } from "node:fs/promises";
8
- import { join } from "node:path";
9
-
10
- import { applyEngineChildEnv } from "../engine-detour.ts";
11
- import {
12
- runExplicitInternalActivation,
13
- type ExplicitInternalKnownFailure,
14
- type ExplicitInternalPiRunner,
15
- type ExplicitInternalPiResult,
16
- } from "./explicit-internal.ts";
17
- import type { CredentialProviders, SeatModelConfig } from "./config.ts";
18
- import {
19
- missingCredentialPreDispatchFailure,
20
- postRunMissingCredentialFailure,
21
- } from "./public-run-credentials.ts";
22
- import {
23
- acquireRunWriterLease,
24
- clearTypedProviderHttpObservation,
25
- markRunAdmitted,
26
- markRunRunning,
27
- markRunTerminal,
28
- RunWriterLeaseHeldError,
29
- type RunWriterLease,
30
- } from "./run-lifecycle.ts";
31
- import {
32
- classifyPostAdmissionFailure,
33
- exitCodeForTerminalOutcome,
34
- formatTerminalResult,
35
- inspectJudgeSession,
36
- presentFailureTerminal,
37
- presentStructuralRejection,
38
- resolveAuditedRunnerKnownFailure,
39
- explicitInternalKnownFailureClassificationInput,
40
- settleFailureTerminalResult,
41
- } from "./settlement.ts";
42
- import type { CliIo } from "./cli-io.ts";
43
- import type { AdmittedRoleInvocation } from "./invocation.ts";
44
- import type { TerminalResult } from "./terminal.ts";
45
-
46
- export type OneShotRunEnv = {
47
- home: string;
48
- agentDir: string;
49
- packageRoot: string;
50
- cwd: string;
51
- correlationId?: string;
52
- piRunner?: ExplicitInternalPiRunner;
53
- model?: SeatModelConfig;
54
- engine?: string;
55
- credentials?: CredentialProviders;
56
- timeoutMs?: number;
57
- };
58
-
59
- /**
60
- * Role-specific settlement hooks. Lifecycle coordination stays in this module.
61
- * - Doctor: present only lawful typed outcomes; optional compliance-audit secondary.
62
- * - Notary: present any settled terminal (accepted or failure).
63
- */
64
- export type OneShotSettlementAdapters<A extends AdmittedRoleInvocation> = {
65
- trySettle: (admitted: A) => Promise<TerminalResult | undefined>;
66
- /** Default true. Doctor sets false-filter via predicate. */
67
- shouldPresentSettled?: (terminal: TerminalResult) => boolean;
68
- trySettleSecondary?: (admitted: A) => Promise<TerminalResult | undefined>;
69
- };
70
-
71
- async function presentControlledFailure<A extends AdmittedRoleInvocation>(
72
- admitted: A,
73
- failureInput: {
74
- timedOut: boolean;
75
- code: number | null;
76
- stderr: string;
77
- thrown?: unknown;
78
- knownFailure?: ExplicitInternalKnownFailure;
79
- },
80
- io: CliIo,
81
- ): Promise<{
82
- exitCode: number;
83
- admitted: A;
84
- terminal: TerminalResult;
85
- }> {
86
- const hasThrown = Object.hasOwn(failureInput, "thrown");
87
- const session =
88
- !hasThrown &&
89
- !failureInput.timedOut &&
90
- failureInput.knownFailure === undefined
91
- ? await inspectJudgeSession(admitted.sessionFile)
92
- : undefined;
93
- const failure = classifyPostAdmissionFailure({
94
- timedOut: failureInput.timedOut,
95
- code: failureInput.code,
96
- stderr: failureInput.stderr,
97
- ...(hasThrown ? { thrown: failureInput.thrown } : {}),
98
- ...explicitInternalKnownFailureClassificationInput(failureInput.knownFailure),
99
- ...(session === undefined ? {} : { session }),
100
- });
101
-
102
- // One-shot roles do not support resume — always terminal.
103
- await markRunTerminal(admitted.runDirectory).catch(() => undefined);
104
-
105
- const terminal = await settleFailureTerminalResult(admitted, failure);
106
- presentFailureTerminal(terminal, io);
107
- return {
108
- exitCode: exitCodeForTerminalOutcome(terminal.roleOutcome),
109
- admitted,
110
- terminal,
111
- };
112
- }
113
-
114
- function presentSecondaryTerminal(terminal: TerminalResult, io: CliIo): void {
115
- if (terminal.roleOutcome.kind === "failure") {
116
- presentFailureTerminal(terminal, io);
117
- } else {
118
- io.stdout(formatTerminalResult(terminal));
119
- }
120
- }
121
-
122
- async function dispatchAdmittedOneShotRole<A extends AdmittedRoleInvocation>(input: {
123
- admitted: A;
124
- env: OneShotRunEnv;
125
- io: CliIo;
126
- extraArgs: string[];
127
- lease: RunWriterLease;
128
- effectiveEngine?: string;
129
- adapters: OneShotSettlementAdapters<A>;
130
- }): Promise<{
131
- exitCode: number;
132
- admitted: A;
133
- terminal?: TerminalResult;
134
- }> {
135
- const { admitted, env, io, extraArgs, lease, effectiveEngine, adapters } = input;
136
- const shouldPresent =
137
- adapters.shouldPresentSettled ?? ((_terminal: TerminalResult) => true);
138
- try {
139
- const missingCredential = missingCredentialPreDispatchFailure(
140
- env.model,
141
- env.credentials,
142
- );
143
- if (missingCredential !== undefined) {
144
- return await presentControlledFailure(admitted, missingCredential, io);
145
- }
146
- await markRunRunning(admitted.runDirectory, env.model, effectiveEngine);
147
- await clearTypedProviderHttpObservation(admitted.runDirectory);
148
-
149
- const childEnv: NodeJS.ProcessEnv = {
150
- ...process.env,
151
- HOME: env.home,
152
- PI_CODING_AGENT_DIR: env.agentDir,
153
- AK_ROLE_RUN_DIR: admitted.runDirectory,
154
- };
155
- applyEngineChildEnv(childEnv, env.engine);
156
- if (env.correlationId !== undefined && env.correlationId.trim() !== "") {
157
- childEnv.AK_CORRELATION_ID = env.correlationId;
158
- }
159
-
160
- let result: ExplicitInternalPiResult;
161
- try {
162
- result = await runExplicitInternalActivation({
163
- packageRoot: env.packageRoot,
164
- extraArgs,
165
- cwd: admitted.projectRoot,
166
- home: env.home,
167
- agentDir: env.agentDir,
168
- env: childEnv,
169
- timeoutMs: env.timeoutMs,
170
- ...(env.piRunner === undefined ? {} : { runner: env.piRunner }),
171
- });
172
- } catch (error) {
173
- return await presentControlledFailure(
174
- admitted,
175
- {
176
- timedOut: false,
177
- code: null,
178
- stderr: "",
179
- thrown: error,
180
- },
181
- io,
182
- );
183
- }
184
-
185
- try {
186
- await writeFile(
187
- join(admitted.runDirectory, "stderr.log"),
188
- result.stderr,
189
- "utf8",
190
- );
191
- } catch {
192
- // continue to lawful / controlled-failure settlement
193
- }
194
-
195
- let settled: TerminalResult | undefined;
196
- try {
197
- settled = await adapters.trySettle(admitted);
198
- } catch (error) {
199
- return await presentControlledFailure(
200
- admitted,
201
- {
202
- timedOut: false,
203
- code: result.code,
204
- stderr: result.stderr,
205
- thrown: error,
206
- },
207
- io,
208
- );
209
- }
210
- if (settled !== undefined && shouldPresent(settled)) {
211
- await markRunTerminal(admitted.runDirectory).catch(() => undefined);
212
- io.stdout(formatTerminalResult(settled));
213
- return {
214
- exitCode: exitCodeForTerminalOutcome(settled.roleOutcome),
215
- admitted,
216
- terminal: settled,
217
- };
218
- }
219
-
220
- if (adapters.trySettleSecondary !== undefined) {
221
- const secondary = await adapters.trySettleSecondary(admitted);
222
- if (secondary !== undefined) {
223
- await markRunTerminal(admitted.runDirectory).catch(() => undefined);
224
- presentSecondaryTerminal(secondary, io);
225
- return {
226
- exitCode: exitCodeForTerminalOutcome(secondary.roleOutcome),
227
- admitted,
228
- terminal: secondary,
229
- };
230
- }
231
- }
232
-
233
- const credentialFailure = postRunMissingCredentialFailure(
234
- result,
235
- env.model,
236
- env.credentials,
237
- );
238
- const knownFailure = await resolveAuditedRunnerKnownFailure({
239
- runner: result.knownFailure,
240
- sessionFile: admitted.sessionFile,
241
- credential: credentialFailure,
242
- runDirectory: admitted.runDirectory,
243
- });
244
- return await presentControlledFailure(
245
- admitted,
246
- {
247
- timedOut: result.timedOut,
248
- code: result.code,
249
- stderr: result.stderr,
250
- ...(knownFailure === undefined ? {} : { knownFailure }),
251
- },
252
- io,
253
- );
254
- } finally {
255
- await lease.release();
256
- }
257
- }
258
-
259
- /**
260
- * Shared post-admission one-shot path: durable admitted mark, writer lease,
261
- * then Doctor-isomorphic dispatch. Role runners call this after role-specific admit.
262
- */
263
- export async function runAdmittedOneShotRole<A extends AdmittedRoleInvocation>(input: {
264
- admitted: A;
265
- env: OneShotRunEnv;
266
- io: CliIo;
267
- extraArgs: string[];
268
- adapters: OneShotSettlementAdapters<A>;
269
- effectiveEngine?: string;
270
- }): Promise<{
271
- exitCode: number;
272
- admitted: A;
273
- terminal?: TerminalResult;
274
- }> {
275
- const { admitted, env, io, extraArgs, adapters, effectiveEngine } = input;
276
- await markRunAdmitted(admitted);
277
-
278
- let lease: RunWriterLease;
279
- try {
280
- lease = await acquireRunWriterLease(admitted.runDirectory, (diagnostic) =>
281
- io.stderr(diagnostic),
282
- );
283
- } catch (error) {
284
- if (error instanceof RunWriterLeaseHeldError) {
285
- presentStructuralRejection(error, io);
286
- return { exitCode: 2, admitted };
287
- }
288
- throw error;
289
- }
290
-
291
- return await dispatchAdmittedOneShotRole({
292
- admitted,
293
- env,
294
- io,
295
- extraArgs,
296
- lease,
297
- adapters,
298
- ...(effectiveEngine === undefined ? {} : { effectiveEngine }),
299
- });
300
- }