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.
@@ -6600,9 +6600,9 @@ var init_keytar = __esm({
6600
6600
  }
6601
6601
  });
6602
6602
 
6603
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -3953,9 +3953,9 @@ var init_keytar = __esm({
3953
3953
  }
3954
3954
  });
3955
3955
 
3956
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -6600,9 +6600,9 @@ var init_keytar = __esm({
6600
6600
  }
6601
6601
  });
6602
6602
 
6603
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -296,9 +296,9 @@ var init_keytar = __esm({
296
296
  }
297
297
  });
298
298
 
299
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 BOUNTY_SLOTS = 5;
38019
- const bountyMatches = results.filter((r) => r.job.source === "bounty");
38020
- const rot = bountyMatches.length > 0 ? Math.floor(Date.now() / (5 * 60 * 1e3)) % bountyMatches.length : 0;
38021
- const bountyTop = [...bountyMatches.slice(rot), ...bountyMatches.slice(0, rot)].slice(0, BOUNTY_SLOTS);
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";
@@ -3953,9 +3953,9 @@ var init_keytar = __esm({
3953
3953
  }
3954
3954
  });
3955
3955
 
3956
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -971,9 +971,9 @@ var init_keytar = __esm({
971
971
  }
972
972
  });
973
973
 
974
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -6600,9 +6600,9 @@ var init_keytar = __esm({
6600
6600
  }
6601
6601
  });
6602
6602
 
6603
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -1183,9 +1183,9 @@ var init_keytar = __esm({
1183
1183
  }
1184
1184
  });
1185
1185
 
1186
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -75,9 +75,9 @@ var init_keytar = __esm({
75
75
  }
76
76
  });
77
77
 
78
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -921,9 +921,9 @@ var init_keytar = __esm({
921
921
  }
922
922
  });
923
923
 
924
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -6600,9 +6600,9 @@ var init_keytar = __esm({
6600
6600
  }
6601
6601
  });
6602
6602
 
6603
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 BOUNTY_SLOTS = 5;
8097
- const bountyMatches = results.filter((r) => r.job.source === "bounty");
8098
- const rot = bountyMatches.length > 0 ? Math.floor(Date.now() / (5 * 60 * 1e3)) % bountyMatches.length : 0;
8099
- const bountyTop = [...bountyMatches.slice(rot), ...bountyMatches.slice(0, rot)].slice(0, BOUNTY_SLOTS);
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,
@@ -921,9 +921,9 @@ var init_keytar = __esm({
921
921
  }
922
922
  });
923
923
 
924
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -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) {
@@ -921,9 +921,9 @@ var init_keytar = __esm({
921
921
  }
922
922
  });
923
923
 
924
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -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) {
@@ -41,9 +41,9 @@ var init_keytar = __esm({
41
41
  }
42
42
  });
43
43
 
44
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -41,9 +41,9 @@ var init_keytar = __esm({
41
41
  }
42
42
  });
43
43
 
44
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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 {
@@ -1247,9 +1247,9 @@ var init_keytar = __esm({
1247
1247
  }
1248
1248
  });
1249
1249
 
1250
- // node-file:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node
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:/private/tmp/claude-501/-Users-ericgang-job-placement-inline/3ffac25b-ca95-4a86-9e17-a4cf326551de/scratchpad/rel2/node_modules/keytar/build/Release/keytar.node"(exports, module) {
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.17.2",
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",