@akagilnc/pi-workflow-roles 0.1.2004 → 0.1.2014
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.
- package/dist/public-cli/main.js +9 -0
- package/dist/reviewer-construction.js +33 -2
- package/dist/reviewer-dispatch.js +142 -9
- package/dist/reviewer-execution-ledger.js +5 -1
- package/dist/reviewer-pinned-git.js +139 -10
- package/extensions/role-runtime.ts +2 -1
- package/package.json +1 -1
- package/src/collector-github.ts +94 -0
- package/src/package-contracts/reviewer-output.ts +2 -0
- package/src/public-cli/reviewer-run.ts +13 -0
- package/src/public-cli/settlement.ts +4 -0
- package/src/reviewer-construction.ts +81 -3
- package/src/reviewer-dispatch.ts +189 -9
- package/src/reviewer-execution-ledger.ts +5 -1
- package/src/reviewer-pinned-git.ts +154 -11
- package/src/reviewer-role.ts +8 -1
- package/src/reviewer-settlement.ts +4 -0
- package/src/role-runtime.ts +21 -1
package/src/reviewer-role.ts
CHANGED
|
@@ -9,7 +9,7 @@ import type { ComplianceDecision } from "./compliance-transport.ts";
|
|
|
9
9
|
import { appendActiveSessionCustomEntry } from "./compliance-transport.ts";
|
|
10
10
|
import { REVIEWER_CANDIDATE_ENTRY_TYPE } from "./dossier-resolution.ts";
|
|
11
11
|
import { type ReviewerSpecDisposition } from "./reviewer-construction.ts";
|
|
12
|
-
import { createReviewerDispatcher, type AcceptedReviewerDispatch, type AcceptedReviewerExecution, type ReviewerPinnedGitReader } from "./reviewer-dispatch.ts";
|
|
12
|
+
import { createReviewerDispatcher, type AcceptedReviewerDispatch, type AcceptedReviewerExecution, type ReviewerIssueFetcher, type ReviewerPinnedGitReader } from "./reviewer-dispatch.ts";
|
|
13
13
|
import { ReviewerDispatchExecutionError, type ReviewerDispatchRunResult } from "./reviewer-agent.ts";
|
|
14
14
|
import { createReviewerExecutionLedger, projectAcceptedDispatch, projectReviewerDispatchOutcome, type ReviewerExecutionRecord } from "./reviewer-execution-ledger.ts";
|
|
15
15
|
import { assembleRuntimeReviewerReceipt } from "./reviewer-settlement.ts";
|
|
@@ -24,6 +24,8 @@ export type ReviewerAdmittedInputs = Readonly<{
|
|
|
24
24
|
baseRevision: string;
|
|
25
25
|
reviewScopeKeys?: readonly string[];
|
|
26
26
|
authorityRefs?: readonly string[];
|
|
27
|
+
/** Typed #176 ticketNumber from admitted invocation (Spec self-fetch primary). */
|
|
28
|
+
ticketNumber?: number;
|
|
27
29
|
}>;
|
|
28
30
|
|
|
29
31
|
const reviewerOutputVariants = Type.Union([
|
|
@@ -35,6 +37,8 @@ export type ReviewerRoleDependencies = {
|
|
|
35
37
|
loadSoul(): Promise<string>;
|
|
36
38
|
loadCanonicalSkillBinding(name: "code-review"): Promise<AnyCanonicalSkillBinding>;
|
|
37
39
|
createPinnedGitReader(): Promise<ReviewerPinnedGitReader>;
|
|
40
|
+
/** Injected issue-fetch capability; shared seam owns gh lifecycle. */
|
|
41
|
+
fetchIssue?: ReviewerIssueFetcher;
|
|
38
42
|
runDispatch(execution: AcceptedReviewerExecution, options: { context: ExtensionContext; signal?: AbortSignal }): Promise<ReviewerDispatchRunResult>;
|
|
39
43
|
shutdownAgent?(): Promise<void>;
|
|
40
44
|
auditCompliance(options: { context: ExtensionContext; signal?: AbortSignal }): Promise<ComplianceDecision>;
|
|
@@ -86,6 +90,7 @@ export function createReviewerRoleRuntime(
|
|
|
86
90
|
fixedBaseRevision = admitted.baseRevision;
|
|
87
91
|
const reviewScopeKeys = admitted.reviewScopeKeys;
|
|
88
92
|
const authorityRefs = admitted.authorityRefs;
|
|
93
|
+
const ticketNumber = admitted.ticketNumber;
|
|
89
94
|
const loaded = await dependencies.loadCanonicalSkillBinding("code-review");
|
|
90
95
|
if (loaded.name !== "code-review") throw new Error("Canonical Skill binding loader returned tdd for code-review");
|
|
91
96
|
binding = loaded;
|
|
@@ -115,6 +120,8 @@ export function createReviewerRoleRuntime(
|
|
|
115
120
|
reader,
|
|
116
121
|
...(reviewScopeKeys === undefined ? {} : { reviewScopeKeys }),
|
|
117
122
|
...(authorityRefs === undefined ? {} : { authorityRefs }),
|
|
123
|
+
...(ticketNumber === undefined ? {} : { ticketNumber }),
|
|
124
|
+
...(dependencies.fetchIssue === undefined ? {} : { fetchIssue: dependencies.fetchIssue }),
|
|
118
125
|
decisionEvidence(decision) {
|
|
119
126
|
try {
|
|
120
127
|
if (decision.disposition === "accepted") {
|
|
@@ -56,6 +56,10 @@ export function assembleRuntimeReviewerReceipt(input: {
|
|
|
56
56
|
...(accepted.specDisposition === undefined
|
|
57
57
|
? {}
|
|
58
58
|
: { specDisposition: accepted.specDisposition }),
|
|
59
|
+
// Self-fetch bytes + source annotation retained for audit (#343 fetch-then-store).
|
|
60
|
+
...(accepted.specFetchedMaterial === undefined
|
|
61
|
+
? {}
|
|
62
|
+
: { specFetchedMaterial: accepted.specFetchedMaterial }),
|
|
59
63
|
}),
|
|
60
64
|
reports,
|
|
61
65
|
outcomes,
|
package/src/role-runtime.ts
CHANGED
|
@@ -61,7 +61,7 @@ import {
|
|
|
61
61
|
type ReviewerActivation,
|
|
62
62
|
type ReviewerAdmittedInputs,
|
|
63
63
|
} from "./reviewer-role.ts";
|
|
64
|
-
import type { AcceptedReviewerExecution, ReviewerPinnedGitReader } from "./reviewer-dispatch.ts";
|
|
64
|
+
import type { AcceptedReviewerExecution, ReviewerIssueFetcher, ReviewerPinnedGitReader } from "./reviewer-dispatch.ts";
|
|
65
65
|
import type { ReviewerDispatchRunResult } from "./reviewer-agent.ts";
|
|
66
66
|
import {
|
|
67
67
|
REVIEWER_VERIFICATION_BOUNDARY,
|
|
@@ -94,6 +94,13 @@ const REVIEWER_TRANSPORT_FLAGS = Object.freeze([
|
|
|
94
94
|
type: "string" as const,
|
|
95
95
|
}),
|
|
96
96
|
}),
|
|
97
|
+
Object.freeze({
|
|
98
|
+
name: "ak-review-ticket-number",
|
|
99
|
+
definition: Object.freeze({
|
|
100
|
+
description: "Typed ticketNumber for Spec self-fetch primary path",
|
|
101
|
+
type: "string" as const,
|
|
102
|
+
}),
|
|
103
|
+
}),
|
|
97
104
|
] as const);
|
|
98
105
|
|
|
99
106
|
/**
|
|
@@ -134,6 +141,13 @@ function decodeReviewerAdmittedInputs(getFlag: (name: string) => unknown): Revie
|
|
|
134
141
|
authorityRefs = Object.freeze(parsed as string[]);
|
|
135
142
|
}
|
|
136
143
|
|
|
144
|
+
let ticketNumber: number | undefined;
|
|
145
|
+
const rawTicketNumber = getFlag("ak-review-ticket-number");
|
|
146
|
+
// Shape-invalid flag values do not abort: omit typed candidate; branch→commit→degrade continues.
|
|
147
|
+
if (typeof rawTicketNumber === "string" && /^[1-9]\d*$/.test(rawTicketNumber)) {
|
|
148
|
+
ticketNumber = Number(rawTicketNumber);
|
|
149
|
+
}
|
|
150
|
+
|
|
137
151
|
const baseRevision = getFlag("ak-review-base");
|
|
138
152
|
if (typeof baseRevision !== "string" || !baseRevision.trim()) {
|
|
139
153
|
throw new Error("Reviewer role requires --ak-review-base");
|
|
@@ -142,6 +156,7 @@ function decodeReviewerAdmittedInputs(getFlag: (name: string) => unknown): Revie
|
|
|
142
156
|
baseRevision,
|
|
143
157
|
...(reviewScopeKeys === undefined ? {} : { reviewScopeKeys }),
|
|
144
158
|
...(authorityRefs === undefined ? {} : { authorityRefs }),
|
|
159
|
+
...(ticketNumber === undefined ? {} : { ticketNumber }),
|
|
145
160
|
});
|
|
146
161
|
}
|
|
147
162
|
|
|
@@ -454,6 +469,8 @@ export type RoleRuntimeDependencies = {
|
|
|
454
469
|
loadCoderTask?(path: string): Promise<string>;
|
|
455
470
|
loadReviewerSoul?(): Promise<string>;
|
|
456
471
|
createReviewerPinnedGitReader?(): Promise<ReviewerPinnedGitReader>;
|
|
472
|
+
/** Shared-seam issue-fetch capability for Reviewer Spec self-fetch (#343). */
|
|
473
|
+
createReviewerIssueFetcher?(): ReviewerIssueFetcher;
|
|
457
474
|
loadCollectorSoul?(): Promise<string>;
|
|
458
475
|
createCollectorTransport?(): CollectorGitHubTransport;
|
|
459
476
|
loadDoctorSoul?(): Promise<string>;
|
|
@@ -892,6 +909,9 @@ export function createRoleRuntimeExtension(
|
|
|
892
909
|
}
|
|
893
910
|
return dependencies.loadCanonicalSkillBinding(name);
|
|
894
911
|
},
|
|
912
|
+
...(dependencies.createReviewerIssueFetcher === undefined
|
|
913
|
+
? {}
|
|
914
|
+
: { fetchIssue: dependencies.createReviewerIssueFetcher() }),
|
|
895
915
|
async runDispatch(dispatch, options) {
|
|
896
916
|
if (dependencies.runReviewerDispatch === undefined) throw new Error("Reviewer runtime dependencies are not configured");
|
|
897
917
|
return dependencies.runReviewerDispatch(dispatch, options);
|