terminalhire 0.10.2 → 0.10.4
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-chat.js +3 -3
- package/dist/bin/jpi-dispatch.js +23 -16
- package/dist/bin/jpi-intro.js +10 -13
- package/dist/src/intro.js +10 -13
- package/package.json +1 -1
package/dist/bin/jpi-chat.js
CHANGED
|
@@ -4699,9 +4699,9 @@ async function runChatPane(opts = {}) {
|
|
|
4699
4699
|
output.write(
|
|
4700
4700
|
`
|
|
4701
4701
|
@${peerLogin} isn't reachable for chat yet.
|
|
4702
|
-
|
|
4703
|
-
|
|
4704
|
-
terminalhire chat
|
|
4702
|
+
Chat is end-to-end encrypted, so they need to open chat once to
|
|
4703
|
+
publish their key. As soon as they run
|
|
4704
|
+
terminalhire chat
|
|
4705
4705
|
on their side, messages will flow.
|
|
4706
4706
|
|
|
4707
4707
|
`
|
package/dist/bin/jpi-dispatch.js
CHANGED
|
@@ -9634,7 +9634,7 @@ function defaultIntroDeps() {
|
|
|
9634
9634
|
try {
|
|
9635
9635
|
const { readProfile: readProfile2 } = await Promise.resolve().then(() => (init_profile(), profile_exports));
|
|
9636
9636
|
const profile = await readProfile2();
|
|
9637
|
-
return { displayName: profile?.displayName
|
|
9637
|
+
return { displayName: profile?.displayName };
|
|
9638
9638
|
} catch {
|
|
9639
9639
|
return {};
|
|
9640
9640
|
}
|
|
@@ -9685,7 +9685,7 @@ function renderConsentCard2(payload, deps) {
|
|
|
9685
9685
|
}
|
|
9686
9686
|
async function runIntroRequest(args5, overrides) {
|
|
9687
9687
|
const deps = { ...defaultIntroDeps(), ...overrides };
|
|
9688
|
-
const targetLogin = args5.targetLogin?.trim();
|
|
9688
|
+
const targetLogin = args5.targetLogin?.trim().replace(/^@/, "");
|
|
9689
9689
|
if (!targetLogin) {
|
|
9690
9690
|
deps.errorLog('\n Usage: terminalhire intro <github-login> [--note "..."] [--contact <email>] [--name "..."]\n');
|
|
9691
9691
|
deps.exit(1);
|
|
@@ -9704,13 +9704,8 @@ async function runIntroRequest(args5, overrides) {
|
|
|
9704
9704
|
}
|
|
9705
9705
|
const profile = await deps.readProfileContact();
|
|
9706
9706
|
const displayName = (args5.name ?? profile.displayName ?? requesterLogin).trim();
|
|
9707
|
-
const
|
|
9708
|
-
|
|
9709
|
-
deps.errorLog("\n No contact on file. Set one with `terminalhire profile --edit`,");
|
|
9710
|
-
deps.errorLog(" or pass `--contact <email-or-handle>`. Nothing was sent.\n");
|
|
9711
|
-
deps.exit(1);
|
|
9712
|
-
return;
|
|
9713
|
-
}
|
|
9707
|
+
const explicitContact = (args5.contact ?? "").trim();
|
|
9708
|
+
const contact = explicitContact || `@${requesterLogin}`;
|
|
9714
9709
|
const payload = buildIntroPayload({
|
|
9715
9710
|
requesterLogin,
|
|
9716
9711
|
requesterDisplayName: displayName,
|
|
@@ -9840,8 +9835,7 @@ async function runIntroDecision(args5, overrides) {
|
|
|
9840
9835
|
let contact = "";
|
|
9841
9836
|
let shareHandle = false;
|
|
9842
9837
|
if (args5.action === "accept") {
|
|
9843
|
-
|
|
9844
|
-
contact = (args5.contact ?? profile.contactEmail ?? "").trim();
|
|
9838
|
+
contact = (args5.contact ?? "").trim();
|
|
9845
9839
|
shareHandle = contact.length === 0;
|
|
9846
9840
|
let shareLabel = contact;
|
|
9847
9841
|
if (shareHandle) {
|
|
@@ -9911,8 +9905,11 @@ async function runIntroDecision(args5, overrides) {
|
|
|
9911
9905
|
deps.log("\n Declined \u2014 no contact was shared.\n");
|
|
9912
9906
|
return;
|
|
9913
9907
|
}
|
|
9914
|
-
|
|
9915
|
-
|
|
9908
|
+
const peer = data.counterpartyLogin;
|
|
9909
|
+
deps.log(`
|
|
9910
|
+
\u2713 Connected${peer ? ` with @${peer}` : ""}.`);
|
|
9911
|
+
if (peer) deps.log(` Message them any time: terminalhire chat @${peer}`);
|
|
9912
|
+
if (data.contact) deps.log(` They also shared: ${data.contact}`);
|
|
9916
9913
|
deps.log("");
|
|
9917
9914
|
}
|
|
9918
9915
|
async function runIntroList(overrides) {
|
|
@@ -10839,9 +10836,9 @@ async function runChatPane(opts = {}) {
|
|
|
10839
10836
|
output.write(
|
|
10840
10837
|
`
|
|
10841
10838
|
@${peerLogin} isn't reachable for chat yet.
|
|
10842
|
-
|
|
10843
|
-
|
|
10844
|
-
terminalhire chat
|
|
10839
|
+
Chat is end-to-end encrypted, so they need to open chat once to
|
|
10840
|
+
publish their key. As soon as they run
|
|
10841
|
+
terminalhire chat
|
|
10845
10842
|
on their side, messages will flow.
|
|
10846
10843
|
|
|
10847
10844
|
`
|
|
@@ -11275,6 +11272,7 @@ async function run10() {
|
|
|
11275
11272
|
console.log("\n terminalhire connect \u2014 find and reach other developers, locally matched:");
|
|
11276
11273
|
console.log(" terminalhire devs Rank opted-in builders & projects for you");
|
|
11277
11274
|
console.log(' terminalhire project "<title>: <skills>" Declare a project to staff');
|
|
11275
|
+
console.log(" terminalhire connect <github-login> Request a consented intro (alias for `intro`)");
|
|
11278
11276
|
console.log(" terminalhire intro <github-login> Request a consented intro (double opt-in)");
|
|
11279
11277
|
console.log(" terminalhire intro --list See intros you have sent + received");
|
|
11280
11278
|
console.log(" terminalhire chat Message your accepted connections");
|
|
@@ -13348,6 +13346,7 @@ if (!firstArg || firstArg === "help" || firstArg === "--help" || firstArg === "-
|
|
|
13348
13346
|
console.log(" terminalhire chat <github-login> --read Read a thread inline (last 8; -n N / --all for depth)");
|
|
13349
13347
|
console.log(' terminalhire chat <github-login> --send "\u2026" Send one line to a connection (E2E encrypted)');
|
|
13350
13348
|
console.log(" terminalhire chat <github-login> Open the live E2E chat pane with an accepted connection");
|
|
13349
|
+
console.log(" terminalhire connect <github-login> Request a consented intro (alias for `intro`)");
|
|
13351
13350
|
console.log(" terminalhire connect Connect family overview + inbound-nudge state");
|
|
13352
13351
|
console.log(" terminalhire connect --mute Stop surfacing incoming connection requests in the spinner");
|
|
13353
13352
|
console.log(" terminalhire connect --unmute Resume surfacing incoming connection requests");
|
|
@@ -13451,6 +13450,14 @@ if (firstArg === "chat") {
|
|
|
13451
13450
|
process.exit(0);
|
|
13452
13451
|
}
|
|
13453
13452
|
if (firstArg === "connect") {
|
|
13453
|
+
const sub = process.argv[3];
|
|
13454
|
+
const isConnectOwn = !sub || sub === "--mute" || sub === "--unmute";
|
|
13455
|
+
if (!isConnectOwn) {
|
|
13456
|
+
process.argv.splice(2, 1);
|
|
13457
|
+
const mod3 = await Promise.resolve().then(() => (init_jpi_intro(), jpi_intro_exports));
|
|
13458
|
+
await mod3.run();
|
|
13459
|
+
process.exit(0);
|
|
13460
|
+
}
|
|
13454
13461
|
const mod2 = await Promise.resolve().then(() => (init_jpi_connect(), jpi_connect_exports));
|
|
13455
13462
|
await mod2.run();
|
|
13456
13463
|
process.exit(0);
|
package/dist/bin/jpi-intro.js
CHANGED
|
@@ -1108,7 +1108,7 @@ function defaultIntroDeps() {
|
|
|
1108
1108
|
try {
|
|
1109
1109
|
const { readProfile: readProfile2 } = await Promise.resolve().then(() => (init_profile(), profile_exports));
|
|
1110
1110
|
const profile = await readProfile2();
|
|
1111
|
-
return { displayName: profile?.displayName
|
|
1111
|
+
return { displayName: profile?.displayName };
|
|
1112
1112
|
} catch {
|
|
1113
1113
|
return {};
|
|
1114
1114
|
}
|
|
@@ -1159,7 +1159,7 @@ function renderConsentCard(payload, deps) {
|
|
|
1159
1159
|
}
|
|
1160
1160
|
async function runIntroRequest(args, overrides) {
|
|
1161
1161
|
const deps = { ...defaultIntroDeps(), ...overrides };
|
|
1162
|
-
const targetLogin = args.targetLogin?.trim();
|
|
1162
|
+
const targetLogin = args.targetLogin?.trim().replace(/^@/, "");
|
|
1163
1163
|
if (!targetLogin) {
|
|
1164
1164
|
deps.errorLog('\n Usage: terminalhire intro <github-login> [--note "..."] [--contact <email>] [--name "..."]\n');
|
|
1165
1165
|
deps.exit(1);
|
|
@@ -1178,13 +1178,8 @@ async function runIntroRequest(args, overrides) {
|
|
|
1178
1178
|
}
|
|
1179
1179
|
const profile = await deps.readProfileContact();
|
|
1180
1180
|
const displayName = (args.name ?? profile.displayName ?? requesterLogin).trim();
|
|
1181
|
-
const
|
|
1182
|
-
|
|
1183
|
-
deps.errorLog("\n No contact on file. Set one with `terminalhire profile --edit`,");
|
|
1184
|
-
deps.errorLog(" or pass `--contact <email-or-handle>`. Nothing was sent.\n");
|
|
1185
|
-
deps.exit(1);
|
|
1186
|
-
return;
|
|
1187
|
-
}
|
|
1181
|
+
const explicitContact = (args.contact ?? "").trim();
|
|
1182
|
+
const contact = explicitContact || `@${requesterLogin}`;
|
|
1188
1183
|
const payload = buildIntroPayload({
|
|
1189
1184
|
requesterLogin,
|
|
1190
1185
|
requesterDisplayName: displayName,
|
|
@@ -1314,8 +1309,7 @@ async function runIntroDecision(args, overrides) {
|
|
|
1314
1309
|
let contact = "";
|
|
1315
1310
|
let shareHandle = false;
|
|
1316
1311
|
if (args.action === "accept") {
|
|
1317
|
-
|
|
1318
|
-
contact = (args.contact ?? profile.contactEmail ?? "").trim();
|
|
1312
|
+
contact = (args.contact ?? "").trim();
|
|
1319
1313
|
shareHandle = contact.length === 0;
|
|
1320
1314
|
let shareLabel = contact;
|
|
1321
1315
|
if (shareHandle) {
|
|
@@ -1385,8 +1379,11 @@ async function runIntroDecision(args, overrides) {
|
|
|
1385
1379
|
deps.log("\n Declined \u2014 no contact was shared.\n");
|
|
1386
1380
|
return;
|
|
1387
1381
|
}
|
|
1388
|
-
|
|
1389
|
-
|
|
1382
|
+
const peer = data.counterpartyLogin;
|
|
1383
|
+
deps.log(`
|
|
1384
|
+
\u2713 Connected${peer ? ` with @${peer}` : ""}.`);
|
|
1385
|
+
if (peer) deps.log(` Message them any time: terminalhire chat @${peer}`);
|
|
1386
|
+
if (data.contact) deps.log(` They also shared: ${data.contact}`);
|
|
1390
1387
|
deps.log("");
|
|
1391
1388
|
}
|
|
1392
1389
|
async function runIntroList(overrides) {
|
package/dist/src/intro.js
CHANGED
|
@@ -1101,7 +1101,7 @@ function defaultIntroDeps() {
|
|
|
1101
1101
|
try {
|
|
1102
1102
|
const { readProfile: readProfile2 } = await Promise.resolve().then(() => (init_profile(), profile_exports));
|
|
1103
1103
|
const profile = await readProfile2();
|
|
1104
|
-
return { displayName: profile?.displayName
|
|
1104
|
+
return { displayName: profile?.displayName };
|
|
1105
1105
|
} catch {
|
|
1106
1106
|
return {};
|
|
1107
1107
|
}
|
|
@@ -1152,7 +1152,7 @@ function renderConsentCard(payload, deps) {
|
|
|
1152
1152
|
}
|
|
1153
1153
|
async function runIntroRequest(args, overrides) {
|
|
1154
1154
|
const deps = { ...defaultIntroDeps(), ...overrides };
|
|
1155
|
-
const targetLogin = args.targetLogin?.trim();
|
|
1155
|
+
const targetLogin = args.targetLogin?.trim().replace(/^@/, "");
|
|
1156
1156
|
if (!targetLogin) {
|
|
1157
1157
|
deps.errorLog('\n Usage: terminalhire intro <github-login> [--note "..."] [--contact <email>] [--name "..."]\n');
|
|
1158
1158
|
deps.exit(1);
|
|
@@ -1171,13 +1171,8 @@ async function runIntroRequest(args, overrides) {
|
|
|
1171
1171
|
}
|
|
1172
1172
|
const profile = await deps.readProfileContact();
|
|
1173
1173
|
const displayName = (args.name ?? profile.displayName ?? requesterLogin).trim();
|
|
1174
|
-
const
|
|
1175
|
-
|
|
1176
|
-
deps.errorLog("\n No contact on file. Set one with `terminalhire profile --edit`,");
|
|
1177
|
-
deps.errorLog(" or pass `--contact <email-or-handle>`. Nothing was sent.\n");
|
|
1178
|
-
deps.exit(1);
|
|
1179
|
-
return;
|
|
1180
|
-
}
|
|
1174
|
+
const explicitContact = (args.contact ?? "").trim();
|
|
1175
|
+
const contact = explicitContact || `@${requesterLogin}`;
|
|
1181
1176
|
const payload = buildIntroPayload({
|
|
1182
1177
|
requesterLogin,
|
|
1183
1178
|
requesterDisplayName: displayName,
|
|
@@ -1308,8 +1303,7 @@ async function runIntroDecision(args, overrides) {
|
|
|
1308
1303
|
let contact = "";
|
|
1309
1304
|
let shareHandle = false;
|
|
1310
1305
|
if (args.action === "accept") {
|
|
1311
|
-
|
|
1312
|
-
contact = (args.contact ?? profile.contactEmail ?? "").trim();
|
|
1306
|
+
contact = (args.contact ?? "").trim();
|
|
1313
1307
|
shareHandle = contact.length === 0;
|
|
1314
1308
|
let shareLabel = contact;
|
|
1315
1309
|
if (shareHandle) {
|
|
@@ -1379,8 +1373,11 @@ async function runIntroDecision(args, overrides) {
|
|
|
1379
1373
|
deps.log("\n Declined \u2014 no contact was shared.\n");
|
|
1380
1374
|
return;
|
|
1381
1375
|
}
|
|
1382
|
-
|
|
1383
|
-
|
|
1376
|
+
const peer = data.counterpartyLogin;
|
|
1377
|
+
deps.log(`
|
|
1378
|
+
\u2713 Connected${peer ? ` with @${peer}` : ""}.`);
|
|
1379
|
+
if (peer) deps.log(` Message them any time: terminalhire chat @${peer}`);
|
|
1380
|
+
if (data.contact) deps.log(` They also shared: ${data.contact}`);
|
|
1384
1381
|
deps.log("");
|
|
1385
1382
|
}
|
|
1386
1383
|
async function runIntroList(overrides) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "terminalhire",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.4",
|
|
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",
|