terminalhire 0.17.2 → 0.18.0
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 +2 -2
- package/dist/bin/jpi-chat-read.js +2 -2
- package/dist/bin/jpi-chat.js +2 -2
- package/dist/bin/jpi-contribute.js +2 -2
- package/dist/bin/jpi-devs.js +2 -2
- package/dist/bin/jpi-dispatch.js +58 -20
- package/dist/bin/jpi-inbox.js +2 -2
- package/dist/bin/jpi-intro.js +2 -2
- package/dist/bin/jpi-jobs.js +2 -2
- package/dist/bin/jpi-learn.js +2 -2
- package/dist/bin/jpi-login.js +2 -2
- package/dist/bin/jpi-profile.js +2 -2
- package/dist/bin/jpi-refresh.js +51 -20
- package/dist/bin/jpi-save.js +2 -2
- package/dist/bin/jpi-spinner.js +3 -0
- package/dist/bin/jpi-sync.js +2 -2
- package/dist/bin/jpi-trajectory.js +2 -2
- package/dist/bin/spinner.js +3 -0
- package/dist/src/chat-client.js +2 -2
- package/dist/src/chat-keystore.js +2 -2
- package/dist/src/github-auth.js +2 -2
- package/dist/src/intro.js +2 -2
- package/dist/src/profile.js +2 -2
- package/dist/src/trajectory.js +2 -2
- package/package.json +1 -1
package/dist/bin/jpi-bounties.js
CHANGED
|
@@ -6600,9 +6600,9 @@ var init_keytar = __esm({
|
|
|
6600
6600
|
}
|
|
6601
6601
|
});
|
|
6602
6602
|
|
|
6603
|
-
// node-file:/
|
|
6603
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
6604
6604
|
var require_keytar = __commonJS({
|
|
6605
|
-
"node-file:/
|
|
6605
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
6606
6606
|
"use strict";
|
|
6607
6607
|
init_keytar();
|
|
6608
6608
|
try {
|
|
@@ -3925,9 +3925,9 @@ var init_keytar = __esm({
|
|
|
3925
3925
|
}
|
|
3926
3926
|
});
|
|
3927
3927
|
|
|
3928
|
-
// node-file:/
|
|
3928
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
3929
3929
|
var require_keytar = __commonJS({
|
|
3930
|
-
"node-file:/
|
|
3930
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
3931
3931
|
"use strict";
|
|
3932
3932
|
init_keytar();
|
|
3933
3933
|
try {
|
package/dist/bin/jpi-chat.js
CHANGED
|
@@ -3953,9 +3953,9 @@ var init_keytar = __esm({
|
|
|
3953
3953
|
}
|
|
3954
3954
|
});
|
|
3955
3955
|
|
|
3956
|
-
// node-file:/
|
|
3956
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
3957
3957
|
var require_keytar = __commonJS({
|
|
3958
|
-
"node-file:/
|
|
3958
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
3959
3959
|
"use strict";
|
|
3960
3960
|
init_keytar();
|
|
3961
3961
|
try {
|
|
@@ -1242,9 +1242,9 @@ var init_keytar = __esm({
|
|
|
1242
1242
|
}
|
|
1243
1243
|
});
|
|
1244
1244
|
|
|
1245
|
-
// node-file:/
|
|
1245
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
1246
1246
|
var require_keytar = __commonJS({
|
|
1247
|
-
"node-file:/
|
|
1247
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
1248
1248
|
"use strict";
|
|
1249
1249
|
init_keytar();
|
|
1250
1250
|
try {
|
package/dist/bin/jpi-devs.js
CHANGED
|
@@ -6600,9 +6600,9 @@ var init_keytar = __esm({
|
|
|
6600
6600
|
}
|
|
6601
6601
|
});
|
|
6602
6602
|
|
|
6603
|
-
// node-file:/
|
|
6603
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
6604
6604
|
var require_keytar = __commonJS({
|
|
6605
|
-
"node-file:/
|
|
6605
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
6606
6606
|
"use strict";
|
|
6607
6607
|
init_keytar();
|
|
6608
6608
|
try {
|
package/dist/bin/jpi-dispatch.js
CHANGED
|
@@ -296,9 +296,9 @@ var init_keytar = __esm({
|
|
|
296
296
|
}
|
|
297
297
|
});
|
|
298
298
|
|
|
299
|
-
// node-file:/
|
|
299
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
300
300
|
var require_keytar = __commonJS({
|
|
301
|
-
"node-file:/
|
|
301
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
302
302
|
"use strict";
|
|
303
303
|
init_keytar();
|
|
304
304
|
try {
|
|
@@ -36958,6 +36958,9 @@ function buildIncomingIntroLine(incomingPending) {
|
|
|
36958
36958
|
function buildContributeNudgeLine(contributeNudge) {
|
|
36959
36959
|
const n = contributeNudge && typeof contributeNudge.count === "number" ? contributeNudge.count : 0;
|
|
36960
36960
|
if (n < 1) return null;
|
|
36961
|
+
if (contributeNudge.onRamp === true) {
|
|
36962
|
+
return n === 1 ? "\u2726 Build your Proof of Work \u2014 1 credential-building issue matched to your stack \xB7 terminalhire contribute" : `\u2726 Build your Proof of Work \u2014 ${n} credential-building issues matched to your stack \xB7 terminalhire contribute`;
|
|
36963
|
+
}
|
|
36961
36964
|
return n === 1 ? "\u2726 an open-source issue that counts toward your r\xE9sum\xE9 \xB7 terminalhire contribute" : `\u2726 ${n} open-source issues that count toward your r\xE9sum\xE9 \xB7 terminalhire contribute`;
|
|
36962
36965
|
}
|
|
36963
36966
|
function buildSessionStaleLine(sessionStale) {
|
|
@@ -37967,6 +37970,50 @@ var init_jpi_init = __esm({
|
|
|
37967
37970
|
}
|
|
37968
37971
|
});
|
|
37969
37972
|
|
|
37973
|
+
// bin/match-slots.js
|
|
37974
|
+
function rotate(list, now) {
|
|
37975
|
+
if (!Array.isArray(list) || list.length === 0) return [];
|
|
37976
|
+
const idx = Math.floor(now / ROTATE_WINDOW_MS) % list.length;
|
|
37977
|
+
return [...list.slice(idx), ...list.slice(0, idx)];
|
|
37978
|
+
}
|
|
37979
|
+
function budgetSlots(results, opts = {}) {
|
|
37980
|
+
const {
|
|
37981
|
+
thinProfile = false,
|
|
37982
|
+
contributeEnabled = true,
|
|
37983
|
+
totalSlots = TOTAL_SLOTS,
|
|
37984
|
+
now = Date.now()
|
|
37985
|
+
} = opts;
|
|
37986
|
+
const list = Array.isArray(results) ? results : [];
|
|
37987
|
+
const bountyMatches = list.filter((r) => r && r.job && r.job.source === "bounty");
|
|
37988
|
+
const bountyTop = rotate(bountyMatches, now).slice(0, BOUNTY_SLOTS);
|
|
37989
|
+
const contributeMatches = list.filter((r) => r && r.job && r.job.source === "contribute");
|
|
37990
|
+
const contributeCap = thinProfile && contributeEnabled ? CONTRIBUTE_SLOTS_THIN : CONTRIBUTE_SLOTS;
|
|
37991
|
+
const contributeTop = rotate(contributeMatches, now).slice(0, contributeCap);
|
|
37992
|
+
const roleSlots = totalSlots - bountyTop.length - contributeTop.length;
|
|
37993
|
+
const roleMatches = list.filter(
|
|
37994
|
+
(r) => r && r.job && r.job.source !== "bounty" && r.job.source !== "contribute"
|
|
37995
|
+
);
|
|
37996
|
+
const roleStable = Math.min(ROLE_STABLE_MAX, roleSlots);
|
|
37997
|
+
const stableRoles = roleMatches.slice(0, roleStable);
|
|
37998
|
+
const rotableRoles = roleMatches.slice(roleStable, roleStable + ROLE_ROTATE_WINDOW);
|
|
37999
|
+
const rotatedRoles = rotate(rotableRoles, now);
|
|
38000
|
+
const roleTop = [...stableRoles, ...rotatedRoles].slice(0, roleSlots);
|
|
38001
|
+
return { roleTop, bountyTop, contributeTop };
|
|
38002
|
+
}
|
|
38003
|
+
var TOTAL_SLOTS, BOUNTY_SLOTS, CONTRIBUTE_SLOTS, CONTRIBUTE_SLOTS_THIN, ROLE_STABLE_MAX, ROLE_ROTATE_WINDOW, ROTATE_WINDOW_MS;
|
|
38004
|
+
var init_match_slots = __esm({
|
|
38005
|
+
"bin/match-slots.js"() {
|
|
38006
|
+
"use strict";
|
|
38007
|
+
TOTAL_SLOTS = 25;
|
|
38008
|
+
BOUNTY_SLOTS = 5;
|
|
38009
|
+
CONTRIBUTE_SLOTS = 5;
|
|
38010
|
+
CONTRIBUTE_SLOTS_THIN = 8;
|
|
38011
|
+
ROLE_STABLE_MAX = 8;
|
|
38012
|
+
ROLE_ROTATE_WINDOW = 60;
|
|
38013
|
+
ROTATE_WINDOW_MS = 5 * 60 * 1e3;
|
|
38014
|
+
}
|
|
38015
|
+
});
|
|
38016
|
+
|
|
37970
38017
|
// bin/jpi-refresh.js
|
|
37971
38018
|
var jpi_refresh_exports = {};
|
|
37972
38019
|
__export(jpi_refresh_exports, {
|
|
@@ -38012,27 +38059,17 @@ async function run21() {
|
|
|
38012
38059
|
const profile = await readProfile2();
|
|
38013
38060
|
if (profile.skillTags.length > 0 && jobs.length > 0) {
|
|
38014
38061
|
const fp = profileToFingerprint2(profile);
|
|
38062
|
+
const thinProfile = fp?.seniorityBand === "junior";
|
|
38063
|
+
if (contributeNudge && thinProfile) {
|
|
38064
|
+
contributeNudge.onRamp = true;
|
|
38065
|
+
}
|
|
38015
38066
|
const pool = contribute.length > 0 ? [...jobs, ...contribute] : jobs;
|
|
38016
38067
|
const results = match2(fp, pool, pool.length);
|
|
38017
38068
|
matchCount = results.length;
|
|
38018
|
-
const
|
|
38019
|
-
|
|
38020
|
-
|
|
38021
|
-
|
|
38022
|
-
const CONTRIBUTE_SLOTS = 5;
|
|
38023
|
-
const contributeMatches = results.filter((r) => r.job.source === "contribute");
|
|
38024
|
-
const cRot = contributeMatches.length > 0 ? Math.floor(Date.now() / (5 * 60 * 1e3)) % contributeMatches.length : 0;
|
|
38025
|
-
const contributeTop = [...contributeMatches.slice(cRot), ...contributeMatches.slice(0, cRot)].slice(0, CONTRIBUTE_SLOTS);
|
|
38026
|
-
const roleSlots = 25 - bountyTop.length - contributeTop.length;
|
|
38027
|
-
const roleMatches = results.filter(
|
|
38028
|
-
(r) => r.job.source !== "bounty" && r.job.source !== "contribute"
|
|
38029
|
-
);
|
|
38030
|
-
const ROLE_STABLE = Math.min(8, roleSlots);
|
|
38031
|
-
const stableRoles = roleMatches.slice(0, ROLE_STABLE);
|
|
38032
|
-
const rotableRoles = roleMatches.slice(ROLE_STABLE, ROLE_STABLE + 60);
|
|
38033
|
-
const rRot = rotableRoles.length > 0 ? Math.floor(Date.now() / (5 * 60 * 1e3)) % rotableRoles.length : 0;
|
|
38034
|
-
const rotatedRoles = [...rotableRoles.slice(rRot), ...rotableRoles.slice(0, rRot)];
|
|
38035
|
-
const roleTop = [...stableRoles, ...rotatedRoles].slice(0, roleSlots);
|
|
38069
|
+
const { roleTop, bountyTop, contributeTop } = budgetSlots(results, {
|
|
38070
|
+
thinProfile,
|
|
38071
|
+
contributeEnabled: isContributeEnabled()
|
|
38072
|
+
});
|
|
38036
38073
|
const toCard = (r) => ({
|
|
38037
38074
|
id: r.job.id,
|
|
38038
38075
|
title: r.job.title,
|
|
@@ -38214,6 +38251,7 @@ var init_jpi_refresh = __esm({
|
|
|
38214
38251
|
"use strict";
|
|
38215
38252
|
init_directory2();
|
|
38216
38253
|
init_cache_store();
|
|
38254
|
+
init_match_slots();
|
|
38217
38255
|
init_config();
|
|
38218
38256
|
init_web_session();
|
|
38219
38257
|
GH_SESSION_COOKIE7 = "__jpi_gh_session";
|
package/dist/bin/jpi-inbox.js
CHANGED
|
@@ -3953,9 +3953,9 @@ var init_keytar = __esm({
|
|
|
3953
3953
|
}
|
|
3954
3954
|
});
|
|
3955
3955
|
|
|
3956
|
-
// node-file:/
|
|
3956
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
3957
3957
|
var require_keytar = __commonJS({
|
|
3958
|
-
"node-file:/
|
|
3958
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
3959
3959
|
"use strict";
|
|
3960
3960
|
init_keytar();
|
|
3961
3961
|
try {
|
package/dist/bin/jpi-intro.js
CHANGED
|
@@ -971,9 +971,9 @@ var init_keytar = __esm({
|
|
|
971
971
|
}
|
|
972
972
|
});
|
|
973
973
|
|
|
974
|
-
// node-file:/
|
|
974
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
975
975
|
var require_keytar = __commonJS({
|
|
976
|
-
"node-file:/
|
|
976
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
977
977
|
"use strict";
|
|
978
978
|
init_keytar();
|
|
979
979
|
try {
|
package/dist/bin/jpi-jobs.js
CHANGED
|
@@ -6600,9 +6600,9 @@ var init_keytar = __esm({
|
|
|
6600
6600
|
}
|
|
6601
6601
|
});
|
|
6602
6602
|
|
|
6603
|
-
// node-file:/
|
|
6603
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
6604
6604
|
var require_keytar = __commonJS({
|
|
6605
|
-
"node-file:/
|
|
6605
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
6606
6606
|
"use strict";
|
|
6607
6607
|
init_keytar();
|
|
6608
6608
|
try {
|
package/dist/bin/jpi-learn.js
CHANGED
|
@@ -1183,9 +1183,9 @@ var init_keytar = __esm({
|
|
|
1183
1183
|
}
|
|
1184
1184
|
});
|
|
1185
1185
|
|
|
1186
|
-
// node-file:/
|
|
1186
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
1187
1187
|
var require_keytar = __commonJS({
|
|
1188
|
-
"node-file:/
|
|
1188
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
1189
1189
|
"use strict";
|
|
1190
1190
|
init_keytar();
|
|
1191
1191
|
try {
|
package/dist/bin/jpi-login.js
CHANGED
|
@@ -75,9 +75,9 @@ var init_keytar = __esm({
|
|
|
75
75
|
}
|
|
76
76
|
});
|
|
77
77
|
|
|
78
|
-
// node-file:/
|
|
78
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
79
79
|
var require_keytar = __commonJS({
|
|
80
|
-
"node-file:/
|
|
80
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
81
81
|
"use strict";
|
|
82
82
|
init_keytar();
|
|
83
83
|
try {
|
package/dist/bin/jpi-profile.js
CHANGED
|
@@ -921,9 +921,9 @@ var init_keytar = __esm({
|
|
|
921
921
|
}
|
|
922
922
|
});
|
|
923
923
|
|
|
924
|
-
// node-file:/
|
|
924
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
925
925
|
var require_keytar = __commonJS({
|
|
926
|
-
"node-file:/
|
|
926
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
927
927
|
"use strict";
|
|
928
928
|
init_keytar();
|
|
929
929
|
try {
|
package/dist/bin/jpi-refresh.js
CHANGED
|
@@ -6600,9 +6600,9 @@ var init_keytar = __esm({
|
|
|
6600
6600
|
}
|
|
6601
6601
|
});
|
|
6602
6602
|
|
|
6603
|
-
// node-file:/
|
|
6603
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
6604
6604
|
var require_keytar = __commonJS({
|
|
6605
|
-
"node-file:/
|
|
6605
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
6606
6606
|
"use strict";
|
|
6607
6607
|
init_keytar();
|
|
6608
6608
|
try {
|
|
@@ -7544,6 +7544,9 @@ function buildIncomingIntroLine(incomingPending) {
|
|
|
7544
7544
|
function buildContributeNudgeLine(contributeNudge) {
|
|
7545
7545
|
const n = contributeNudge && typeof contributeNudge.count === "number" ? contributeNudge.count : 0;
|
|
7546
7546
|
if (n < 1) return null;
|
|
7547
|
+
if (contributeNudge.onRamp === true) {
|
|
7548
|
+
return n === 1 ? "\u2726 Build your Proof of Work \u2014 1 credential-building issue matched to your stack \xB7 terminalhire contribute" : `\u2726 Build your Proof of Work \u2014 ${n} credential-building issues matched to your stack \xB7 terminalhire contribute`;
|
|
7549
|
+
}
|
|
7547
7550
|
return n === 1 ? "\u2726 an open-source issue that counts toward your r\xE9sum\xE9 \xB7 terminalhire contribute" : `\u2726 ${n} open-source issues that count toward your r\xE9sum\xE9 \xB7 terminalhire contribute`;
|
|
7548
7551
|
}
|
|
7549
7552
|
function buildSessionStaleLine(sessionStale) {
|
|
@@ -7978,6 +7981,44 @@ function updateIndexCache(patch) {
|
|
|
7978
7981
|
return entry;
|
|
7979
7982
|
}
|
|
7980
7983
|
|
|
7984
|
+
// bin/match-slots.js
|
|
7985
|
+
var TOTAL_SLOTS = 25;
|
|
7986
|
+
var BOUNTY_SLOTS = 5;
|
|
7987
|
+
var CONTRIBUTE_SLOTS = 5;
|
|
7988
|
+
var CONTRIBUTE_SLOTS_THIN = 8;
|
|
7989
|
+
var ROLE_STABLE_MAX = 8;
|
|
7990
|
+
var ROLE_ROTATE_WINDOW = 60;
|
|
7991
|
+
var ROTATE_WINDOW_MS = 5 * 60 * 1e3;
|
|
7992
|
+
function rotate(list, now) {
|
|
7993
|
+
if (!Array.isArray(list) || list.length === 0) return [];
|
|
7994
|
+
const idx = Math.floor(now / ROTATE_WINDOW_MS) % list.length;
|
|
7995
|
+
return [...list.slice(idx), ...list.slice(0, idx)];
|
|
7996
|
+
}
|
|
7997
|
+
function budgetSlots(results, opts = {}) {
|
|
7998
|
+
const {
|
|
7999
|
+
thinProfile = false,
|
|
8000
|
+
contributeEnabled = true,
|
|
8001
|
+
totalSlots = TOTAL_SLOTS,
|
|
8002
|
+
now = Date.now()
|
|
8003
|
+
} = opts;
|
|
8004
|
+
const list = Array.isArray(results) ? results : [];
|
|
8005
|
+
const bountyMatches = list.filter((r) => r && r.job && r.job.source === "bounty");
|
|
8006
|
+
const bountyTop = rotate(bountyMatches, now).slice(0, BOUNTY_SLOTS);
|
|
8007
|
+
const contributeMatches = list.filter((r) => r && r.job && r.job.source === "contribute");
|
|
8008
|
+
const contributeCap = thinProfile && contributeEnabled ? CONTRIBUTE_SLOTS_THIN : CONTRIBUTE_SLOTS;
|
|
8009
|
+
const contributeTop = rotate(contributeMatches, now).slice(0, contributeCap);
|
|
8010
|
+
const roleSlots = totalSlots - bountyTop.length - contributeTop.length;
|
|
8011
|
+
const roleMatches = list.filter(
|
|
8012
|
+
(r) => r && r.job && r.job.source !== "bounty" && r.job.source !== "contribute"
|
|
8013
|
+
);
|
|
8014
|
+
const roleStable = Math.min(ROLE_STABLE_MAX, roleSlots);
|
|
8015
|
+
const stableRoles = roleMatches.slice(0, roleStable);
|
|
8016
|
+
const rotableRoles = roleMatches.slice(roleStable, roleStable + ROLE_ROTATE_WINDOW);
|
|
8017
|
+
const rotatedRoles = rotate(rotableRoles, now);
|
|
8018
|
+
const roleTop = [...stableRoles, ...rotatedRoles].slice(0, roleSlots);
|
|
8019
|
+
return { roleTop, bountyTop, contributeTop };
|
|
8020
|
+
}
|
|
8021
|
+
|
|
7981
8022
|
// src/config.ts
|
|
7982
8023
|
import { readFileSync as readFileSync3, writeFileSync as writeFileSync3, mkdirSync as mkdirSync3, existsSync } from "fs";
|
|
7983
8024
|
import { join as join3 } from "path";
|
|
@@ -8090,27 +8131,17 @@ async function run() {
|
|
|
8090
8131
|
const profile = await readProfile2();
|
|
8091
8132
|
if (profile.skillTags.length > 0 && jobs.length > 0) {
|
|
8092
8133
|
const fp = profileToFingerprint2(profile);
|
|
8134
|
+
const thinProfile = fp?.seniorityBand === "junior";
|
|
8135
|
+
if (contributeNudge && thinProfile) {
|
|
8136
|
+
contributeNudge.onRamp = true;
|
|
8137
|
+
}
|
|
8093
8138
|
const pool = contribute.length > 0 ? [...jobs, ...contribute] : jobs;
|
|
8094
8139
|
const results = match2(fp, pool, pool.length);
|
|
8095
8140
|
matchCount = results.length;
|
|
8096
|
-
const
|
|
8097
|
-
|
|
8098
|
-
|
|
8099
|
-
|
|
8100
|
-
const CONTRIBUTE_SLOTS = 5;
|
|
8101
|
-
const contributeMatches = results.filter((r) => r.job.source === "contribute");
|
|
8102
|
-
const cRot = contributeMatches.length > 0 ? Math.floor(Date.now() / (5 * 60 * 1e3)) % contributeMatches.length : 0;
|
|
8103
|
-
const contributeTop = [...contributeMatches.slice(cRot), ...contributeMatches.slice(0, cRot)].slice(0, CONTRIBUTE_SLOTS);
|
|
8104
|
-
const roleSlots = 25 - bountyTop.length - contributeTop.length;
|
|
8105
|
-
const roleMatches = results.filter(
|
|
8106
|
-
(r) => r.job.source !== "bounty" && r.job.source !== "contribute"
|
|
8107
|
-
);
|
|
8108
|
-
const ROLE_STABLE = Math.min(8, roleSlots);
|
|
8109
|
-
const stableRoles = roleMatches.slice(0, ROLE_STABLE);
|
|
8110
|
-
const rotableRoles = roleMatches.slice(ROLE_STABLE, ROLE_STABLE + 60);
|
|
8111
|
-
const rRot = rotableRoles.length > 0 ? Math.floor(Date.now() / (5 * 60 * 1e3)) % rotableRoles.length : 0;
|
|
8112
|
-
const rotatedRoles = [...rotableRoles.slice(rRot), ...rotableRoles.slice(0, rRot)];
|
|
8113
|
-
const roleTop = [...stableRoles, ...rotatedRoles].slice(0, roleSlots);
|
|
8141
|
+
const { roleTop, bountyTop, contributeTop } = budgetSlots(results, {
|
|
8142
|
+
thinProfile,
|
|
8143
|
+
contributeEnabled: isContributeEnabled()
|
|
8144
|
+
});
|
|
8114
8145
|
const toCard = (r) => ({
|
|
8115
8146
|
id: r.job.id,
|
|
8116
8147
|
title: r.job.title,
|
package/dist/bin/jpi-save.js
CHANGED
|
@@ -921,9 +921,9 @@ var init_keytar = __esm({
|
|
|
921
921
|
}
|
|
922
922
|
});
|
|
923
923
|
|
|
924
|
-
// node-file:/
|
|
924
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
925
925
|
var require_keytar = __commonJS({
|
|
926
|
-
"node-file:/
|
|
926
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
927
927
|
"use strict";
|
|
928
928
|
init_keytar();
|
|
929
929
|
try {
|
package/dist/bin/jpi-spinner.js
CHANGED
|
@@ -244,6 +244,9 @@ function buildIncomingIntroLine(incomingPending) {
|
|
|
244
244
|
function buildContributeNudgeLine(contributeNudge) {
|
|
245
245
|
const n = contributeNudge && typeof contributeNudge.count === "number" ? contributeNudge.count : 0;
|
|
246
246
|
if (n < 1) return null;
|
|
247
|
+
if (contributeNudge.onRamp === true) {
|
|
248
|
+
return n === 1 ? "\u2726 Build your Proof of Work \u2014 1 credential-building issue matched to your stack \xB7 terminalhire contribute" : `\u2726 Build your Proof of Work \u2014 ${n} credential-building issues matched to your stack \xB7 terminalhire contribute`;
|
|
249
|
+
}
|
|
247
250
|
return n === 1 ? "\u2726 an open-source issue that counts toward your r\xE9sum\xE9 \xB7 terminalhire contribute" : `\u2726 ${n} open-source issues that count toward your r\xE9sum\xE9 \xB7 terminalhire contribute`;
|
|
248
251
|
}
|
|
249
252
|
function buildSessionStaleLine(sessionStale) {
|
package/dist/bin/jpi-sync.js
CHANGED
|
@@ -921,9 +921,9 @@ var init_keytar = __esm({
|
|
|
921
921
|
}
|
|
922
922
|
});
|
|
923
923
|
|
|
924
|
-
// node-file:/
|
|
924
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
925
925
|
var require_keytar = __commonJS({
|
|
926
|
-
"node-file:/
|
|
926
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
927
927
|
"use strict";
|
|
928
928
|
init_keytar();
|
|
929
929
|
try {
|
|
@@ -1800,9 +1800,9 @@ var init_keytar = __esm({
|
|
|
1800
1800
|
}
|
|
1801
1801
|
});
|
|
1802
1802
|
|
|
1803
|
-
// node-file:/
|
|
1803
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
1804
1804
|
var require_keytar = __commonJS({
|
|
1805
|
-
"node-file:/
|
|
1805
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
1806
1806
|
"use strict";
|
|
1807
1807
|
init_keytar();
|
|
1808
1808
|
try {
|
package/dist/bin/spinner.js
CHANGED
|
@@ -360,6 +360,9 @@ function buildIncomingIntroLine(incomingPending) {
|
|
|
360
360
|
function buildContributeNudgeLine(contributeNudge) {
|
|
361
361
|
const n = contributeNudge && typeof contributeNudge.count === "number" ? contributeNudge.count : 0;
|
|
362
362
|
if (n < 1) return null;
|
|
363
|
+
if (contributeNudge.onRamp === true) {
|
|
364
|
+
return n === 1 ? "\u2726 Build your Proof of Work \u2014 1 credential-building issue matched to your stack \xB7 terminalhire contribute" : `\u2726 Build your Proof of Work \u2014 ${n} credential-building issues matched to your stack \xB7 terminalhire contribute`;
|
|
365
|
+
}
|
|
363
366
|
return n === 1 ? "\u2726 an open-source issue that counts toward your r\xE9sum\xE9 \xB7 terminalhire contribute" : `\u2726 ${n} open-source issues that count toward your r\xE9sum\xE9 \xB7 terminalhire contribute`;
|
|
364
367
|
}
|
|
365
368
|
function buildSessionStaleLine(sessionStale) {
|
package/dist/src/chat-client.js
CHANGED
|
@@ -41,9 +41,9 @@ var init_keytar = __esm({
|
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
-
// node-file:/
|
|
44
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
45
45
|
var require_keytar = __commonJS({
|
|
46
|
-
"node-file:/
|
|
46
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
47
47
|
"use strict";
|
|
48
48
|
init_keytar();
|
|
49
49
|
try {
|
|
@@ -41,9 +41,9 @@ var init_keytar = __esm({
|
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
-
// node-file:/
|
|
44
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
45
45
|
var require_keytar = __commonJS({
|
|
46
|
-
"node-file:/
|
|
46
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
47
47
|
"use strict";
|
|
48
48
|
init_keytar();
|
|
49
49
|
try {
|
package/dist/src/github-auth.js
CHANGED
|
@@ -41,9 +41,9 @@ var init_keytar = __esm({
|
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
-
// node-file:/
|
|
44
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
45
45
|
var require_keytar = __commonJS({
|
|
46
|
-
"node-file:/
|
|
46
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
47
47
|
"use strict";
|
|
48
48
|
init_keytar();
|
|
49
49
|
try {
|
package/dist/src/intro.js
CHANGED
|
@@ -931,9 +931,9 @@ var init_keytar = __esm({
|
|
|
931
931
|
}
|
|
932
932
|
});
|
|
933
933
|
|
|
934
|
-
// node-file:/
|
|
934
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
935
935
|
var require_keytar = __commonJS({
|
|
936
|
-
"node-file:/
|
|
936
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
937
937
|
"use strict";
|
|
938
938
|
init_keytar();
|
|
939
939
|
try {
|
package/dist/src/profile.js
CHANGED
|
@@ -41,9 +41,9 @@ var init_keytar = __esm({
|
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
-
// node-file:/
|
|
44
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
45
45
|
var require_keytar = __commonJS({
|
|
46
|
-
"node-file:/
|
|
46
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
47
47
|
"use strict";
|
|
48
48
|
init_keytar();
|
|
49
49
|
try {
|
package/dist/src/trajectory.js
CHANGED
|
@@ -1247,9 +1247,9 @@ var init_keytar = __esm({
|
|
|
1247
1247
|
}
|
|
1248
1248
|
});
|
|
1249
1249
|
|
|
1250
|
-
// node-file:/
|
|
1250
|
+
// node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node
|
|
1251
1251
|
var require_keytar = __commonJS({
|
|
1252
|
-
"node-file:/
|
|
1252
|
+
"node-file:/Users/ericgang/job-placement-inline/.claude/worktrees/rel-0180/node_modules/keytar/build/Release/keytar.node"(exports, module) {
|
|
1253
1253
|
"use strict";
|
|
1254
1254
|
init_keytar();
|
|
1255
1255
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "terminalhire",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Local-first job matching for developers — ambient job matches in the Claude Code spinner. Matching runs on your machine; your profile never leaves it.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|