terminalhire 0.42.42 → 0.42.43
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/bin/jpi-bounties.js +9 -0
- package/dist/bin/jpi-claim.js +29 -8
- package/dist/bin/jpi-dispatch.js +38 -8
- package/dist/bin/jpi-mcp.js +34 -8
- package/dist/bin/jpi-run.js +34 -8
- package/package.json +1 -1
package/dist/bin/jpi-bounties.js
CHANGED
|
@@ -12500,6 +12500,12 @@ function linkTitle(title, url) {
|
|
|
12500
12500
|
|
|
12501
12501
|
// bin/jpi-bounties.js
|
|
12502
12502
|
init_api_base();
|
|
12503
|
+
|
|
12504
|
+
// bin/review-mode-copy.js
|
|
12505
|
+
var POSTER_REVIEWED = "poster";
|
|
12506
|
+
var CLAIMANT_NOTICE = "The poster reviews this work by hand. We don't run tests on it.";
|
|
12507
|
+
|
|
12508
|
+
// bin/jpi-bounties.js
|
|
12503
12509
|
init_founder_pin();
|
|
12504
12510
|
var TERMINALHIRE_DIR7 = process.env.TERMINALHIRE_DIR || join13(homedir10(), ".terminalhire");
|
|
12505
12511
|
var INDEX_CACHE_FILE2 = join13(TERMINALHIRE_DIR7, "index-cache.json");
|
|
@@ -12614,6 +12620,9 @@ ${i + 1}. ${linkTitle(job.title, job.url)} [${ref}]`);
|
|
|
12614
12620
|
);
|
|
12615
12621
|
const marker = projectMarkerLine(b);
|
|
12616
12622
|
if (marker) console.log(` ${marker}`);
|
|
12623
|
+
if (b.bountySource === "founder" && b.reviewMode === POSTER_REVIEWED) {
|
|
12624
|
+
console.log(` ${CLAIMANT_NOTICE}`);
|
|
12625
|
+
}
|
|
12617
12626
|
if (reason) console.log(` ${reason}`);
|
|
12618
12627
|
if (continuityNote) console.log(` ${continuityNote}`);
|
|
12619
12628
|
if (b.publicSummary) {
|
package/dist/bin/jpi-claim.js
CHANGED
|
@@ -40197,6 +40197,13 @@ async function syncFounderVerdicts({
|
|
|
40197
40197
|
|
|
40198
40198
|
// bin/jpi-claim.js
|
|
40199
40199
|
init_founder_note_sync();
|
|
40200
|
+
|
|
40201
|
+
// bin/review-mode-copy.js
|
|
40202
|
+
var POSTER_REVIEWED = "poster";
|
|
40203
|
+
var CLAIMANT_NOTICE = "The poster reviews this work by hand. We don't run tests on it.";
|
|
40204
|
+
var HISTORY_LINE = "Submitted for the poster's review.";
|
|
40205
|
+
|
|
40206
|
+
// bin/jpi-claim.js
|
|
40200
40207
|
var TERMINALHIRE_DIR11 = process.env.TERMINALHIRE_DIR || join31(homedir14(), ".terminalhire");
|
|
40201
40208
|
var INDEX_CACHE_FILE2 = join31(TERMINALHIRE_DIR11, "index-cache.json");
|
|
40202
40209
|
var CLAIM_PUSH_MARKER = join31(TERMINALHIRE_DIR11, "claim-push.json");
|
|
@@ -40666,9 +40673,15 @@ function extractClaimableFields(job) {
|
|
|
40666
40673
|
// poster saw. Null when the index carries none.
|
|
40667
40674
|
runRequirements: b.runRequirements && typeof b.runRequirements === "object" ? b.runRequirements : null,
|
|
40668
40675
|
// TERM-1308. Present only when the index row carries them; no key otherwise.
|
|
40669
|
-
...b.bountySource === "founder" ? baselineFields(b) : {}
|
|
40676
|
+
...b.bountySource === "founder" ? baselineFields(b) : {},
|
|
40677
|
+
// TERM-1344. The index carries `reviewMode` only for a poster-reviewed posting; any
|
|
40678
|
+
// other value is dropped rather than carried, the same as a malformed baseline field.
|
|
40679
|
+
...b.bountySource === "founder" && b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {}
|
|
40670
40680
|
};
|
|
40671
40681
|
}
|
|
40682
|
+
function reviewModeLine(b) {
|
|
40683
|
+
return b?.reviewMode === POSTER_REVIEWED ? CLAIMANT_NOTICE : null;
|
|
40684
|
+
}
|
|
40672
40685
|
function parseGitHubUrl(url) {
|
|
40673
40686
|
const m = String(url ?? "").match(/github\.com\/([^/]+)\/([^/]+)\/(?:issues|pull)\/(\d+)/);
|
|
40674
40687
|
if (!m) return null;
|
|
@@ -41285,7 +41298,7 @@ async function resolveBounty(arg) {
|
|
|
41285
41298
|
if (freshPool) job = findByShortRefInPool(freshPool, arg);
|
|
41286
41299
|
}
|
|
41287
41300
|
if (job) {
|
|
41288
|
-
let testBudgetMinutes, baselineStatus, baselineSha;
|
|
41301
|
+
let testBudgetMinutes, baselineStatus, baselineSha, reviewMode;
|
|
41289
41302
|
({
|
|
41290
41303
|
bountyId,
|
|
41291
41304
|
title,
|
|
@@ -41299,12 +41312,15 @@ async function resolveBounty(arg) {
|
|
|
41299
41312
|
runRequirements,
|
|
41300
41313
|
testBudgetMinutes,
|
|
41301
41314
|
baselineStatus,
|
|
41302
|
-
baselineSha
|
|
41315
|
+
baselineSha,
|
|
41316
|
+
reviewMode
|
|
41303
41317
|
} = extractClaimableFields(job));
|
|
41304
41318
|
baseline = {
|
|
41305
41319
|
...testBudgetMinutes === void 0 ? {} : { testBudgetMinutes },
|
|
41306
41320
|
...baselineStatus === void 0 ? {} : { baselineStatus },
|
|
41307
|
-
...baselineSha === void 0 ? {} : { baselineSha }
|
|
41321
|
+
...baselineSha === void 0 ? {} : { baselineSha },
|
|
41322
|
+
// TERM-1344. Rides with the baseline fields: index-only, and no key when absent.
|
|
41323
|
+
...reviewMode === void 0 ? {} : { reviewMode }
|
|
41308
41324
|
};
|
|
41309
41325
|
indexNativeId = bountyId;
|
|
41310
41326
|
} else {
|
|
@@ -42089,6 +42105,8 @@ async function cmdPreview(arg, { json } = {}) {
|
|
|
42089
42105
|
contested: isContested(b),
|
|
42090
42106
|
// TERM-1308. The posting's test budget and baseline, only when the index carried them.
|
|
42091
42107
|
...baselineFields(b),
|
|
42108
|
+
// TERM-1344. Only for a poster-reviewed posting; absent means tests.
|
|
42109
|
+
...b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {},
|
|
42092
42110
|
// Absent on a founder posting — see the scan above. A consumer must read
|
|
42093
42111
|
// "no policy key" as "no policy step exists here", never as "clean".
|
|
42094
42112
|
...policy ? {
|
|
@@ -42119,8 +42137,8 @@ async function cmdPreview(arg, { json } = {}) {
|
|
|
42119
42137
|
console.log(fmtOpenPRsLine(b));
|
|
42120
42138
|
const previewContested = fmtContestedWarning(b);
|
|
42121
42139
|
if (previewContested) console.log(previewContested);
|
|
42122
|
-
const
|
|
42123
|
-
if (
|
|
42140
|
+
const previewTests = reviewModeLine(b) ?? baselineLine(b);
|
|
42141
|
+
if (previewTests) console.log(` tests: ${previewTests}`);
|
|
42124
42142
|
if (policy) printPolicySection(policy);
|
|
42125
42143
|
if (process.stdout.isTTY) {
|
|
42126
42144
|
try {
|
|
@@ -43393,7 +43411,8 @@ function renderRunView(run2, message2, extra = {}) {
|
|
|
43393
43411
|
const rateLimitCap = extra.rateLimitCap ?? run2.rateLimitCap ?? 5;
|
|
43394
43412
|
const rateLimitCount = extra.rateLimitCount ?? run2.rateLimitCount;
|
|
43395
43413
|
if (claimState) {
|
|
43396
|
-
|
|
43414
|
+
const stateText = claimState === "poster-review" ? HISTORY_LINE : terminalSafeInline(claimState);
|
|
43415
|
+
lines.push(` state: ${stateText}`);
|
|
43397
43416
|
}
|
|
43398
43417
|
if (unverifiedCause) {
|
|
43399
43418
|
lines.push(` cause: ${terminalSafeInline(unverifiedCause)}`);
|
|
@@ -43452,7 +43471,8 @@ function renderClaimHistory(attempts, timeline) {
|
|
|
43452
43471
|
for (const a of runs) {
|
|
43453
43472
|
const sha = a.commitSha ? String(a.commitSha).slice(0, 10) : "";
|
|
43454
43473
|
const jobs = Array.isArray(a.failingJobs) && a.failingJobs.length > 0 ? ` \u2014 ${a.failingJobs.map(terminalSafeInline).join(", ")}` : "";
|
|
43455
|
-
const
|
|
43474
|
+
const note = typeof a.note === "string" ? terminalSafeInline(a.note).trim() : "";
|
|
43475
|
+
const outcome = a.conclusion ? `checks ${terminalSafeInline(a.conclusion)}${jobs}` : note !== "" ? note : a.status === "no-ci" ? "no checks ran" : "checks running";
|
|
43456
43476
|
lines.push(` attempt ${a.attemptNumber} ${sha} ${outcome} ${shortWhen(a.at)}`);
|
|
43457
43477
|
}
|
|
43458
43478
|
for (const e of told) {
|
|
@@ -45944,6 +45964,7 @@ export {
|
|
|
45944
45964
|
resolveBounty,
|
|
45945
45965
|
resolveDeliveryDir,
|
|
45946
45966
|
resolveSubmitWorktree,
|
|
45967
|
+
reviewModeLine,
|
|
45947
45968
|
reviseRecoveryCommand,
|
|
45948
45969
|
revokeFailureAction,
|
|
45949
45970
|
run,
|
package/dist/bin/jpi-dispatch.js
CHANGED
|
@@ -15565,6 +15565,17 @@ var init_payout_split = __esm({
|
|
|
15565
15565
|
}
|
|
15566
15566
|
});
|
|
15567
15567
|
|
|
15568
|
+
// bin/review-mode-copy.js
|
|
15569
|
+
var POSTER_REVIEWED, CLAIMANT_NOTICE, HISTORY_LINE;
|
|
15570
|
+
var init_review_mode_copy = __esm({
|
|
15571
|
+
"bin/review-mode-copy.js"() {
|
|
15572
|
+
"use strict";
|
|
15573
|
+
POSTER_REVIEWED = "poster";
|
|
15574
|
+
CLAIMANT_NOTICE = "The poster reviews this work by hand. We don't run tests on it.";
|
|
15575
|
+
HISTORY_LINE = "Submitted for the poster's review.";
|
|
15576
|
+
}
|
|
15577
|
+
});
|
|
15578
|
+
|
|
15568
15579
|
// src/repo-experience.ts
|
|
15569
15580
|
var repo_experience_exports = {};
|
|
15570
15581
|
__export(repo_experience_exports, {
|
|
@@ -16451,6 +16462,9 @@ ${i + 1}. ${linkTitle(job.title, job.url)} [${ref}]`);
|
|
|
16451
16462
|
);
|
|
16452
16463
|
const marker = projectMarkerLine(b);
|
|
16453
16464
|
if (marker) console.log(` ${marker}`);
|
|
16465
|
+
if (b.bountySource === "founder" && b.reviewMode === POSTER_REVIEWED) {
|
|
16466
|
+
console.log(` ${CLAIMANT_NOTICE}`);
|
|
16467
|
+
}
|
|
16454
16468
|
if (reason) console.log(` ${reason}`);
|
|
16455
16469
|
if (continuityNote) console.log(` ${continuityNote}`);
|
|
16456
16470
|
if (b.publicSummary) {
|
|
@@ -16706,6 +16720,7 @@ var init_jpi_bounties = __esm({
|
|
|
16706
16720
|
init_index_revalidate();
|
|
16707
16721
|
init_sanitize();
|
|
16708
16722
|
init_api_base();
|
|
16723
|
+
init_review_mode_copy();
|
|
16709
16724
|
init_founder_pin();
|
|
16710
16725
|
TERMINALHIRE_DIR12 = process.env.TERMINALHIRE_DIR || join26(homedir20(), ".terminalhire");
|
|
16711
16726
|
INDEX_CACHE_FILE3 = join26(TERMINALHIRE_DIR12, "index-cache.json");
|
|
@@ -45527,6 +45542,7 @@ __export(jpi_claim_exports, {
|
|
|
45527
45542
|
resolveBounty: () => resolveBounty,
|
|
45528
45543
|
resolveDeliveryDir: () => resolveDeliveryDir,
|
|
45529
45544
|
resolveSubmitWorktree: () => resolveSubmitWorktree,
|
|
45545
|
+
reviewModeLine: () => reviewModeLine,
|
|
45530
45546
|
reviseRecoveryCommand: () => reviseRecoveryCommand,
|
|
45531
45547
|
revokeFailureAction: () => revokeFailureAction,
|
|
45532
45548
|
run: () => run7,
|
|
@@ -45994,9 +46010,15 @@ function extractClaimableFields(job) {
|
|
|
45994
46010
|
// poster saw. Null when the index carries none.
|
|
45995
46011
|
runRequirements: b.runRequirements && typeof b.runRequirements === "object" ? b.runRequirements : null,
|
|
45996
46012
|
// TERM-1308. Present only when the index row carries them; no key otherwise.
|
|
45997
|
-
...b.bountySource === "founder" ? baselineFields(b) : {}
|
|
46013
|
+
...b.bountySource === "founder" ? baselineFields(b) : {},
|
|
46014
|
+
// TERM-1344. The index carries `reviewMode` only for a poster-reviewed posting; any
|
|
46015
|
+
// other value is dropped rather than carried, the same as a malformed baseline field.
|
|
46016
|
+
...b.bountySource === "founder" && b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {}
|
|
45998
46017
|
};
|
|
45999
46018
|
}
|
|
46019
|
+
function reviewModeLine(b) {
|
|
46020
|
+
return b?.reviewMode === POSTER_REVIEWED ? CLAIMANT_NOTICE : null;
|
|
46021
|
+
}
|
|
46000
46022
|
function parseGitHubUrl(url) {
|
|
46001
46023
|
const m = String(url ?? "").match(/github\.com\/([^/]+)\/([^/]+)\/(?:issues|pull)\/(\d+)/);
|
|
46002
46024
|
if (!m) return null;
|
|
@@ -46602,7 +46624,7 @@ async function resolveBounty(arg) {
|
|
|
46602
46624
|
if (freshPool) job = findByShortRefInPool(freshPool, arg);
|
|
46603
46625
|
}
|
|
46604
46626
|
if (job) {
|
|
46605
|
-
let testBudgetMinutes, baselineStatus, baselineSha;
|
|
46627
|
+
let testBudgetMinutes, baselineStatus, baselineSha, reviewMode;
|
|
46606
46628
|
({
|
|
46607
46629
|
bountyId,
|
|
46608
46630
|
title,
|
|
@@ -46616,12 +46638,15 @@ async function resolveBounty(arg) {
|
|
|
46616
46638
|
runRequirements,
|
|
46617
46639
|
testBudgetMinutes,
|
|
46618
46640
|
baselineStatus,
|
|
46619
|
-
baselineSha
|
|
46641
|
+
baselineSha,
|
|
46642
|
+
reviewMode
|
|
46620
46643
|
} = extractClaimableFields(job));
|
|
46621
46644
|
baseline = {
|
|
46622
46645
|
...testBudgetMinutes === void 0 ? {} : { testBudgetMinutes },
|
|
46623
46646
|
...baselineStatus === void 0 ? {} : { baselineStatus },
|
|
46624
|
-
...baselineSha === void 0 ? {} : { baselineSha }
|
|
46647
|
+
...baselineSha === void 0 ? {} : { baselineSha },
|
|
46648
|
+
// TERM-1344. Rides with the baseline fields: index-only, and no key when absent.
|
|
46649
|
+
...reviewMode === void 0 ? {} : { reviewMode }
|
|
46625
46650
|
};
|
|
46626
46651
|
indexNativeId = bountyId;
|
|
46627
46652
|
} else {
|
|
@@ -47381,6 +47406,8 @@ async function cmdPreview(arg, { json } = {}) {
|
|
|
47381
47406
|
contested: isContested(b),
|
|
47382
47407
|
// TERM-1308. The posting's test budget and baseline, only when the index carried them.
|
|
47383
47408
|
...baselineFields(b),
|
|
47409
|
+
// TERM-1344. Only for a poster-reviewed posting; absent means tests.
|
|
47410
|
+
...b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {},
|
|
47384
47411
|
// Absent on a founder posting — see the scan above. A consumer must read
|
|
47385
47412
|
// "no policy key" as "no policy step exists here", never as "clean".
|
|
47386
47413
|
...policy ? {
|
|
@@ -47411,8 +47438,8 @@ async function cmdPreview(arg, { json } = {}) {
|
|
|
47411
47438
|
console.log(fmtOpenPRsLine(b));
|
|
47412
47439
|
const previewContested = fmtContestedWarning(b);
|
|
47413
47440
|
if (previewContested) console.log(previewContested);
|
|
47414
|
-
const
|
|
47415
|
-
if (
|
|
47441
|
+
const previewTests = reviewModeLine(b) ?? baselineLine(b);
|
|
47442
|
+
if (previewTests) console.log(` tests: ${previewTests}`);
|
|
47416
47443
|
if (policy) printPolicySection(policy);
|
|
47417
47444
|
if (process.stdout.isTTY) {
|
|
47418
47445
|
try {
|
|
@@ -48668,7 +48695,8 @@ function renderRunView(run32, message2, extra = {}) {
|
|
|
48668
48695
|
const rateLimitCap = extra.rateLimitCap ?? run32.rateLimitCap ?? 5;
|
|
48669
48696
|
const rateLimitCount = extra.rateLimitCount ?? run32.rateLimitCount;
|
|
48670
48697
|
if (claimState) {
|
|
48671
|
-
|
|
48698
|
+
const stateText = claimState === "poster-review" ? HISTORY_LINE : terminalSafeInline(claimState);
|
|
48699
|
+
lines.push(` state: ${stateText}`);
|
|
48672
48700
|
}
|
|
48673
48701
|
if (unverifiedCause) {
|
|
48674
48702
|
lines.push(` cause: ${terminalSafeInline(unverifiedCause)}`);
|
|
@@ -48714,7 +48742,8 @@ function renderClaimHistory(attempts, timeline) {
|
|
|
48714
48742
|
for (const a of runs) {
|
|
48715
48743
|
const sha = a.commitSha ? String(a.commitSha).slice(0, 10) : "";
|
|
48716
48744
|
const jobs = Array.isArray(a.failingJobs) && a.failingJobs.length > 0 ? ` \u2014 ${a.failingJobs.map(terminalSafeInline).join(", ")}` : "";
|
|
48717
|
-
const
|
|
48745
|
+
const note = typeof a.note === "string" ? terminalSafeInline(a.note).trim() : "";
|
|
48746
|
+
const outcome = a.conclusion ? `checks ${terminalSafeInline(a.conclusion)}${jobs}` : note !== "" ? note : a.status === "no-ci" ? "no checks ran" : "checks running";
|
|
48718
48747
|
lines.push(` attempt ${a.attemptNumber} ${sha} ${outcome} ${shortWhen(a.at)}`);
|
|
48719
48748
|
}
|
|
48720
48749
|
for (const e of told) {
|
|
@@ -51093,6 +51122,7 @@ var init_jpi_claim = __esm({
|
|
|
51093
51122
|
init_claim_push_bg();
|
|
51094
51123
|
init_founder_verdict_sync();
|
|
51095
51124
|
init_founder_note_sync();
|
|
51125
|
+
init_review_mode_copy();
|
|
51096
51126
|
TERMINALHIRE_DIR17 = process.env.TERMINALHIRE_DIR || join46(homedir26(), ".terminalhire");
|
|
51097
51127
|
INDEX_CACHE_FILE5 = join46(TERMINALHIRE_DIR17, "index-cache.json");
|
|
51098
51128
|
CLAIM_PUSH_MARKER = join46(TERMINALHIRE_DIR17, "claim-push.json");
|
package/dist/bin/jpi-mcp.js
CHANGED
|
@@ -12169,6 +12169,17 @@ var init_founder_note_sync = __esm({
|
|
|
12169
12169
|
}
|
|
12170
12170
|
});
|
|
12171
12171
|
|
|
12172
|
+
// bin/review-mode-copy.js
|
|
12173
|
+
var POSTER_REVIEWED, CLAIMANT_NOTICE, HISTORY_LINE;
|
|
12174
|
+
var init_review_mode_copy = __esm({
|
|
12175
|
+
"bin/review-mode-copy.js"() {
|
|
12176
|
+
"use strict";
|
|
12177
|
+
POSTER_REVIEWED = "poster";
|
|
12178
|
+
CLAIMANT_NOTICE = "The poster reviews this work by hand. We don't run tests on it.";
|
|
12179
|
+
HISTORY_LINE = "Submitted for the poster's review.";
|
|
12180
|
+
}
|
|
12181
|
+
});
|
|
12182
|
+
|
|
12172
12183
|
// ../../packages/core/src/policy-audit.ts
|
|
12173
12184
|
function fence(nonce, body) {
|
|
12174
12185
|
return `<<<UNTRUSTED-${nonce}
|
|
@@ -40293,6 +40304,7 @@ __export(jpi_claim_exports, {
|
|
|
40293
40304
|
resolveBounty: () => resolveBounty,
|
|
40294
40305
|
resolveDeliveryDir: () => resolveDeliveryDir,
|
|
40295
40306
|
resolveSubmitWorktree: () => resolveSubmitWorktree,
|
|
40307
|
+
reviewModeLine: () => reviewModeLine,
|
|
40296
40308
|
reviseRecoveryCommand: () => reviseRecoveryCommand,
|
|
40297
40309
|
revokeFailureAction: () => revokeFailureAction,
|
|
40298
40310
|
run: () => run,
|
|
@@ -40760,9 +40772,15 @@ function extractClaimableFields(job) {
|
|
|
40760
40772
|
// poster saw. Null when the index carries none.
|
|
40761
40773
|
runRequirements: b.runRequirements && typeof b.runRequirements === "object" ? b.runRequirements : null,
|
|
40762
40774
|
// TERM-1308. Present only when the index row carries them; no key otherwise.
|
|
40763
|
-
...b.bountySource === "founder" ? baselineFields(b) : {}
|
|
40775
|
+
...b.bountySource === "founder" ? baselineFields(b) : {},
|
|
40776
|
+
// TERM-1344. The index carries `reviewMode` only for a poster-reviewed posting; any
|
|
40777
|
+
// other value is dropped rather than carried, the same as a malformed baseline field.
|
|
40778
|
+
...b.bountySource === "founder" && b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {}
|
|
40764
40779
|
};
|
|
40765
40780
|
}
|
|
40781
|
+
function reviewModeLine(b) {
|
|
40782
|
+
return b?.reviewMode === POSTER_REVIEWED ? CLAIMANT_NOTICE : null;
|
|
40783
|
+
}
|
|
40766
40784
|
function parseGitHubUrl(url) {
|
|
40767
40785
|
const m = String(url ?? "").match(/github\.com\/([^/]+)\/([^/]+)\/(?:issues|pull)\/(\d+)/);
|
|
40768
40786
|
if (!m) return null;
|
|
@@ -41368,7 +41386,7 @@ async function resolveBounty(arg) {
|
|
|
41368
41386
|
if (freshPool) job = findByShortRefInPool(freshPool, arg);
|
|
41369
41387
|
}
|
|
41370
41388
|
if (job) {
|
|
41371
|
-
let testBudgetMinutes, baselineStatus, baselineSha;
|
|
41389
|
+
let testBudgetMinutes, baselineStatus, baselineSha, reviewMode;
|
|
41372
41390
|
({
|
|
41373
41391
|
bountyId,
|
|
41374
41392
|
title,
|
|
@@ -41382,12 +41400,15 @@ async function resolveBounty(arg) {
|
|
|
41382
41400
|
runRequirements,
|
|
41383
41401
|
testBudgetMinutes,
|
|
41384
41402
|
baselineStatus,
|
|
41385
|
-
baselineSha
|
|
41403
|
+
baselineSha,
|
|
41404
|
+
reviewMode
|
|
41386
41405
|
} = extractClaimableFields(job));
|
|
41387
41406
|
baseline = {
|
|
41388
41407
|
...testBudgetMinutes === void 0 ? {} : { testBudgetMinutes },
|
|
41389
41408
|
...baselineStatus === void 0 ? {} : { baselineStatus },
|
|
41390
|
-
...baselineSha === void 0 ? {} : { baselineSha }
|
|
41409
|
+
...baselineSha === void 0 ? {} : { baselineSha },
|
|
41410
|
+
// TERM-1344. Rides with the baseline fields: index-only, and no key when absent.
|
|
41411
|
+
...reviewMode === void 0 ? {} : { reviewMode }
|
|
41391
41412
|
};
|
|
41392
41413
|
indexNativeId = bountyId;
|
|
41393
41414
|
} else {
|
|
@@ -42147,6 +42168,8 @@ async function cmdPreview(arg, { json } = {}) {
|
|
|
42147
42168
|
contested: isContested(b),
|
|
42148
42169
|
// TERM-1308. The posting's test budget and baseline, only when the index carried them.
|
|
42149
42170
|
...baselineFields(b),
|
|
42171
|
+
// TERM-1344. Only for a poster-reviewed posting; absent means tests.
|
|
42172
|
+
...b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {},
|
|
42150
42173
|
// Absent on a founder posting — see the scan above. A consumer must read
|
|
42151
42174
|
// "no policy key" as "no policy step exists here", never as "clean".
|
|
42152
42175
|
...policy ? {
|
|
@@ -42177,8 +42200,8 @@ async function cmdPreview(arg, { json } = {}) {
|
|
|
42177
42200
|
console.log(fmtOpenPRsLine(b));
|
|
42178
42201
|
const previewContested = fmtContestedWarning(b);
|
|
42179
42202
|
if (previewContested) console.log(previewContested);
|
|
42180
|
-
const
|
|
42181
|
-
if (
|
|
42203
|
+
const previewTests = reviewModeLine(b) ?? baselineLine(b);
|
|
42204
|
+
if (previewTests) console.log(` tests: ${previewTests}`);
|
|
42182
42205
|
if (policy) printPolicySection(policy);
|
|
42183
42206
|
if (process.stdout.isTTY) {
|
|
42184
42207
|
try {
|
|
@@ -43434,7 +43457,8 @@ function renderRunView(run3, message2, extra = {}) {
|
|
|
43434
43457
|
const rateLimitCap = extra.rateLimitCap ?? run3.rateLimitCap ?? 5;
|
|
43435
43458
|
const rateLimitCount = extra.rateLimitCount ?? run3.rateLimitCount;
|
|
43436
43459
|
if (claimState) {
|
|
43437
|
-
|
|
43460
|
+
const stateText = claimState === "poster-review" ? HISTORY_LINE : terminalSafeInline(claimState);
|
|
43461
|
+
lines.push(` state: ${stateText}`);
|
|
43438
43462
|
}
|
|
43439
43463
|
if (unverifiedCause) {
|
|
43440
43464
|
lines.push(` cause: ${terminalSafeInline(unverifiedCause)}`);
|
|
@@ -43480,7 +43504,8 @@ function renderClaimHistory(attempts, timeline) {
|
|
|
43480
43504
|
for (const a of runs) {
|
|
43481
43505
|
const sha = a.commitSha ? String(a.commitSha).slice(0, 10) : "";
|
|
43482
43506
|
const jobs = Array.isArray(a.failingJobs) && a.failingJobs.length > 0 ? ` \u2014 ${a.failingJobs.map(terminalSafeInline).join(", ")}` : "";
|
|
43483
|
-
const
|
|
43507
|
+
const note = typeof a.note === "string" ? terminalSafeInline(a.note).trim() : "";
|
|
43508
|
+
const outcome = a.conclusion ? `checks ${terminalSafeInline(a.conclusion)}${jobs}` : note !== "" ? note : a.status === "no-ci" ? "no checks ran" : "checks running";
|
|
43484
43509
|
lines.push(` attempt ${a.attemptNumber} ${sha} ${outcome} ${shortWhen(a.at)}`);
|
|
43485
43510
|
}
|
|
43486
43511
|
for (const e of told) {
|
|
@@ -45859,6 +45884,7 @@ var init_jpi_claim = __esm({
|
|
|
45859
45884
|
init_claim_push_bg();
|
|
45860
45885
|
init_founder_verdict_sync();
|
|
45861
45886
|
init_founder_note_sync();
|
|
45887
|
+
init_review_mode_copy();
|
|
45862
45888
|
TERMINALHIRE_DIR11 = process.env.TERMINALHIRE_DIR || join32(homedir15(), ".terminalhire");
|
|
45863
45889
|
INDEX_CACHE_FILE2 = join32(TERMINALHIRE_DIR11, "index-cache.json");
|
|
45864
45890
|
CLAIM_PUSH_MARKER = join32(TERMINALHIRE_DIR11, "claim-push.json");
|
package/dist/bin/jpi-run.js
CHANGED
|
@@ -25353,6 +25353,17 @@ var init_founder_note_sync = __esm({
|
|
|
25353
25353
|
}
|
|
25354
25354
|
});
|
|
25355
25355
|
|
|
25356
|
+
// bin/review-mode-copy.js
|
|
25357
|
+
var POSTER_REVIEWED, CLAIMANT_NOTICE, HISTORY_LINE;
|
|
25358
|
+
var init_review_mode_copy = __esm({
|
|
25359
|
+
"bin/review-mode-copy.js"() {
|
|
25360
|
+
"use strict";
|
|
25361
|
+
POSTER_REVIEWED = "poster";
|
|
25362
|
+
CLAIMANT_NOTICE = "The poster reviews this work by hand. We don't run tests on it.";
|
|
25363
|
+
HISTORY_LINE = "Submitted for the poster's review.";
|
|
25364
|
+
}
|
|
25365
|
+
});
|
|
25366
|
+
|
|
25356
25367
|
// ../../packages/core/src/policy-audit.ts
|
|
25357
25368
|
function fence(nonce, body) {
|
|
25358
25369
|
return `<<<UNTRUSTED-${nonce}
|
|
@@ -40286,6 +40297,7 @@ __export(jpi_claim_exports, {
|
|
|
40286
40297
|
resolveBounty: () => resolveBounty,
|
|
40287
40298
|
resolveDeliveryDir: () => resolveDeliveryDir,
|
|
40288
40299
|
resolveSubmitWorktree: () => resolveSubmitWorktree,
|
|
40300
|
+
reviewModeLine: () => reviewModeLine,
|
|
40289
40301
|
reviseRecoveryCommand: () => reviseRecoveryCommand,
|
|
40290
40302
|
revokeFailureAction: () => revokeFailureAction,
|
|
40291
40303
|
run: () => run,
|
|
@@ -40753,9 +40765,15 @@ function extractClaimableFields(job) {
|
|
|
40753
40765
|
// poster saw. Null when the index carries none.
|
|
40754
40766
|
runRequirements: b.runRequirements && typeof b.runRequirements === "object" ? b.runRequirements : null,
|
|
40755
40767
|
// TERM-1308. Present only when the index row carries them; no key otherwise.
|
|
40756
|
-
...b.bountySource === "founder" ? baselineFields(b) : {}
|
|
40768
|
+
...b.bountySource === "founder" ? baselineFields(b) : {},
|
|
40769
|
+
// TERM-1344. The index carries `reviewMode` only for a poster-reviewed posting; any
|
|
40770
|
+
// other value is dropped rather than carried, the same as a malformed baseline field.
|
|
40771
|
+
...b.bountySource === "founder" && b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {}
|
|
40757
40772
|
};
|
|
40758
40773
|
}
|
|
40774
|
+
function reviewModeLine(b) {
|
|
40775
|
+
return b?.reviewMode === POSTER_REVIEWED ? CLAIMANT_NOTICE : null;
|
|
40776
|
+
}
|
|
40759
40777
|
function parseGitHubUrl(url) {
|
|
40760
40778
|
const m = String(url ?? "").match(/github\.com\/([^/]+)\/([^/]+)\/(?:issues|pull)\/(\d+)/);
|
|
40761
40779
|
if (!m) return null;
|
|
@@ -41361,7 +41379,7 @@ async function resolveBounty(arg) {
|
|
|
41361
41379
|
if (freshPool) job = findByShortRefInPool(freshPool, arg);
|
|
41362
41380
|
}
|
|
41363
41381
|
if (job) {
|
|
41364
|
-
let testBudgetMinutes, baselineStatus, baselineSha;
|
|
41382
|
+
let testBudgetMinutes, baselineStatus, baselineSha, reviewMode;
|
|
41365
41383
|
({
|
|
41366
41384
|
bountyId,
|
|
41367
41385
|
title,
|
|
@@ -41375,12 +41393,15 @@ async function resolveBounty(arg) {
|
|
|
41375
41393
|
runRequirements,
|
|
41376
41394
|
testBudgetMinutes,
|
|
41377
41395
|
baselineStatus,
|
|
41378
|
-
baselineSha
|
|
41396
|
+
baselineSha,
|
|
41397
|
+
reviewMode
|
|
41379
41398
|
} = extractClaimableFields(job));
|
|
41380
41399
|
baseline = {
|
|
41381
41400
|
...testBudgetMinutes === void 0 ? {} : { testBudgetMinutes },
|
|
41382
41401
|
...baselineStatus === void 0 ? {} : { baselineStatus },
|
|
41383
|
-
...baselineSha === void 0 ? {} : { baselineSha }
|
|
41402
|
+
...baselineSha === void 0 ? {} : { baselineSha },
|
|
41403
|
+
// TERM-1344. Rides with the baseline fields: index-only, and no key when absent.
|
|
41404
|
+
...reviewMode === void 0 ? {} : { reviewMode }
|
|
41384
41405
|
};
|
|
41385
41406
|
indexNativeId = bountyId;
|
|
41386
41407
|
} else {
|
|
@@ -42140,6 +42161,8 @@ async function cmdPreview(arg, { json } = {}) {
|
|
|
42140
42161
|
contested: isContested(b),
|
|
42141
42162
|
// TERM-1308. The posting's test budget and baseline, only when the index carried them.
|
|
42142
42163
|
...baselineFields(b),
|
|
42164
|
+
// TERM-1344. Only for a poster-reviewed posting; absent means tests.
|
|
42165
|
+
...b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {},
|
|
42143
42166
|
// Absent on a founder posting — see the scan above. A consumer must read
|
|
42144
42167
|
// "no policy key" as "no policy step exists here", never as "clean".
|
|
42145
42168
|
...policy ? {
|
|
@@ -42170,8 +42193,8 @@ async function cmdPreview(arg, { json } = {}) {
|
|
|
42170
42193
|
console.log(fmtOpenPRsLine(b));
|
|
42171
42194
|
const previewContested = fmtContestedWarning(b);
|
|
42172
42195
|
if (previewContested) console.log(previewContested);
|
|
42173
|
-
const
|
|
42174
|
-
if (
|
|
42196
|
+
const previewTests = reviewModeLine(b) ?? baselineLine(b);
|
|
42197
|
+
if (previewTests) console.log(` tests: ${previewTests}`);
|
|
42175
42198
|
if (policy) printPolicySection(policy);
|
|
42176
42199
|
if (process.stdout.isTTY) {
|
|
42177
42200
|
try {
|
|
@@ -43427,7 +43450,8 @@ function renderRunView(run3, message2, extra = {}) {
|
|
|
43427
43450
|
const rateLimitCap = extra.rateLimitCap ?? run3.rateLimitCap ?? 5;
|
|
43428
43451
|
const rateLimitCount = extra.rateLimitCount ?? run3.rateLimitCount;
|
|
43429
43452
|
if (claimState) {
|
|
43430
|
-
|
|
43453
|
+
const stateText = claimState === "poster-review" ? HISTORY_LINE : terminalSafeInline(claimState);
|
|
43454
|
+
lines.push(` state: ${stateText}`);
|
|
43431
43455
|
}
|
|
43432
43456
|
if (unverifiedCause) {
|
|
43433
43457
|
lines.push(` cause: ${terminalSafeInline(unverifiedCause)}`);
|
|
@@ -43473,7 +43497,8 @@ function renderClaimHistory(attempts, timeline) {
|
|
|
43473
43497
|
for (const a of runs) {
|
|
43474
43498
|
const sha = a.commitSha ? String(a.commitSha).slice(0, 10) : "";
|
|
43475
43499
|
const jobs = Array.isArray(a.failingJobs) && a.failingJobs.length > 0 ? ` \u2014 ${a.failingJobs.map(terminalSafeInline).join(", ")}` : "";
|
|
43476
|
-
const
|
|
43500
|
+
const note = typeof a.note === "string" ? terminalSafeInline(a.note).trim() : "";
|
|
43501
|
+
const outcome = a.conclusion ? `checks ${terminalSafeInline(a.conclusion)}${jobs}` : note !== "" ? note : a.status === "no-ci" ? "no checks ran" : "checks running";
|
|
43477
43502
|
lines.push(` attempt ${a.attemptNumber} ${sha} ${outcome} ${shortWhen(a.at)}`);
|
|
43478
43503
|
}
|
|
43479
43504
|
for (const e of told) {
|
|
@@ -45852,6 +45877,7 @@ var init_jpi_claim = __esm({
|
|
|
45852
45877
|
init_claim_push_bg();
|
|
45853
45878
|
init_founder_verdict_sync();
|
|
45854
45879
|
init_founder_note_sync();
|
|
45880
|
+
init_review_mode_copy();
|
|
45855
45881
|
TERMINALHIRE_DIR11 = process.env.TERMINALHIRE_DIR || join33(homedir15(), ".terminalhire");
|
|
45856
45882
|
INDEX_CACHE_FILE2 = join33(TERMINALHIRE_DIR11, "index-cache.json");
|
|
45857
45883
|
CLAIM_PUSH_MARKER = join33(TERMINALHIRE_DIR11, "claim-push.json");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "terminalhire",
|
|
3
|
-
"version": "0.42.
|
|
3
|
+
"version": "0.42.43",
|
|
4
4
|
"description": "Developer jobs and paid bounties, matched in the terminal — ambient matches in the Claude Code spinner. Claim a scoped bounty and get paid when the poster accepts it.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|