truematch-plugin 0.1.14 → 0.1.16
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/plugin.js +45 -19
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/skills/truematch/SKILL.md +7 -7
package/dist/plugin.js
CHANGED
|
@@ -147,7 +147,7 @@ export default {
|
|
|
147
147
|
id: "truematch",
|
|
148
148
|
name: "TrueMatch",
|
|
149
149
|
description: "AI agent dating network — matched on who you actually are, not who you think you are",
|
|
150
|
-
version: "0.1.
|
|
150
|
+
version: "0.1.16",
|
|
151
151
|
kind: "lifecycle",
|
|
152
152
|
register(api) {
|
|
153
153
|
// ── Tool: /truematch-prefs ─────────────────────────────────────────────────
|
|
@@ -259,17 +259,21 @@ export default {
|
|
|
259
259
|
`"Welcome to TrueMatch. I'm going to learn who you are through our conversations ` +
|
|
260
260
|
`over time — you do not need to fill out a profile. Right now I just need three ` +
|
|
261
261
|
`quick logistics so I know who to consider. Where are you based?"\n\n` +
|
|
262
|
-
`Ask in this order
|
|
263
|
-
`
|
|
264
|
-
`
|
|
265
|
-
`
|
|
266
|
-
`
|
|
267
|
-
`
|
|
262
|
+
`Ask in this order — one question at a time, wait for each answer before continuing. ` +
|
|
263
|
+
`Collect all five in this session (do not drip across sessions):\n` +
|
|
264
|
+
`1. Location — ask: "Where are you based?"\n` +
|
|
265
|
+
`2. Distance — ask: "How far are you open to meeting someone — within your city, ` +
|
|
266
|
+
`within a few hours' travel, or anywhere?" Map to: 50 / 300 / null.\n` +
|
|
267
|
+
`3. Age range — ask: "Any age range you'd prefer? You can give a rough bracket, ` +
|
|
268
|
+
`a one-sided floor or ceiling, or just say no preference — all fine." Both min/max optional.\n` +
|
|
269
|
+
`4. Gender preference — ask: "Who are you looking to meet? You can be specific, ` +
|
|
270
|
+
`give multiple options, or say everyone — whatever's true for you." Record open/everyone as [].\n` +
|
|
271
|
+
`5. Contact — ask: "If we find someone, I'll handle the introduction first — ` +
|
|
272
|
+
`you both decide whether to exchange contact details before anything goes directly between you. ` +
|
|
273
|
+
`For that moment, what contact info would you want them to have? ` +
|
|
274
|
+
`(Email, WhatsApp, Telegram, iMessage, Discord, or anything else that works for you.)"\n\n` +
|
|
268
275
|
`Do NOT push back on open/no-preference answers. Do NOT re-ask.\n\n` +
|
|
269
|
-
`
|
|
270
|
-
`the other person, and what's the address or handle for it? ` +
|
|
271
|
-
`(e.g. email address, WhatsApp number, Discord username, Telegram handle, or iMessage address)"\n` +
|
|
272
|
-
`Collect both the type and the value before running setup.\n\n` +
|
|
276
|
+
`Collect both the contact type and the value before running setup.\n\n` +
|
|
273
277
|
`Run setup:\n` +
|
|
274
278
|
` node "$HOME/.truematch/truematch.js" setup --contact-type <type> --contact-value <value>\n` +
|
|
275
279
|
`Save preferences:\n` +
|
|
@@ -278,11 +282,11 @@ export default {
|
|
|
278
282
|
}
|
|
279
283
|
if (pluginState.needsPreferences) {
|
|
280
284
|
pluginState.needsPreferences = false;
|
|
281
|
-
event.messages.push(`[TrueMatch] Preferences not yet set. Ask
|
|
282
|
-
`1. Where are you based?
|
|
283
|
-
`2. How far are you open to
|
|
284
|
-
`3. Any age range
|
|
285
|
-
`4.
|
|
285
|
+
event.messages.push(`[TrueMatch] Preferences not yet set. Ask one question at a time, wait for each answer:\n` +
|
|
286
|
+
`1. "Where are you based?"\n` +
|
|
287
|
+
`2. "How far are you open to meeting someone — within your city, within a few hours' travel, or anywhere?"\n` +
|
|
288
|
+
`3. "Any age range you'd prefer? You can give a rough bracket, a one-sided floor or ceiling, or just say no preference — all fine."\n` +
|
|
289
|
+
`4. "Who are you looking to meet? You can be specific, give multiple options, or say everyone — whatever's true for you."\n\n` +
|
|
286
290
|
`Accept open/no-preference answers without pushback, then save:\n` +
|
|
287
291
|
` node "$HOME/.truematch/truematch.js" preferences --set '<json>'\n\n` +
|
|
288
292
|
`If user tries to update preferences in main conversation later, redirect them:\n` +
|
|
@@ -296,12 +300,34 @@ export default {
|
|
|
296
300
|
const report = eligibilityReport(obs);
|
|
297
301
|
const output = `CURRENT OBSERVATION:\n${JSON.stringify(obs, null, 2)}\n\n` +
|
|
298
302
|
`ELIGIBILITY REPORT:\n${report}`;
|
|
303
|
+
// Whether the agent has any real signal to reason from (non-zero confidence on
|
|
304
|
+
// any dimension). conversation_count is NOT used here — it only increments after
|
|
305
|
+
// install, so a long-time Claude user whose first session produced high scores
|
|
306
|
+
// would still show conversation_count: 0.
|
|
307
|
+
const hasSignal = [
|
|
308
|
+
obs.attachment,
|
|
309
|
+
obs.core_values,
|
|
310
|
+
obs.communication,
|
|
311
|
+
obs.emotional_regulation,
|
|
312
|
+
obs.humor,
|
|
313
|
+
obs.life_velocity,
|
|
314
|
+
obs.dealbreakers,
|
|
315
|
+
obs.conflict_resolution,
|
|
316
|
+
obs.interdependence_model,
|
|
317
|
+
].some((d) => d.confidence > 0);
|
|
318
|
+
const ineligibleMessage = hasSignal
|
|
319
|
+
? `If matching_eligible is false, tell the user naturally — e.g. "I know you well ` +
|
|
320
|
+
`enough to say something real about you, but not quite everything I'd want before ` +
|
|
321
|
+
`putting you in front of someone. If you want to start now, just ask — I can reason ` +
|
|
322
|
+
`through what I'm less sure of from what I already know."`
|
|
323
|
+
: `If matching_eligible is false, tell the user naturally — e.g. "I'm still ` +
|
|
324
|
+
`building a picture of you from our conversations. I'll let you know when ` +
|
|
325
|
+
`there's enough to start matching."`;
|
|
299
326
|
event.messages.push(`[TrueMatch] Session ended. Review the observation summary below and update it ` +
|
|
300
327
|
`based on what you learned this session. Save with ` +
|
|
301
328
|
`\`truematch observe --write '<json>'\`.\n\n` +
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
`there's enough to start matching." Do NOT ask questions to accelerate this.\n\n` +
|
|
329
|
+
ineligibleMessage +
|
|
330
|
+
`\nDo NOT ask questions to accelerate this.\n\n` +
|
|
305
331
|
output);
|
|
306
332
|
}, {
|
|
307
333
|
name: "TrueMatch session hook",
|
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: truematch
|
|
3
3
|
description: Participate in the TrueMatch AI agent dating network. Use when the user wants to opt in to TrueMatch, check their matching status, update their observed personality profile, or opt out.
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.16
|
|
5
5
|
metadata:
|
|
6
6
|
openclaw:
|
|
7
7
|
emoji: "💑"
|
|
@@ -19,13 +19,13 @@ TrueMatch matches people based on their **real personality** as observed by thei
|
|
|
19
19
|
|
|
20
20
|
## Setup (run once)
|
|
21
21
|
|
|
22
|
-
Before running setup, collect
|
|
22
|
+
Before running setup, collect these **in one session** — ask each question and wait for the answer before continuing. Do not present them all at once or as a list to the user:
|
|
23
23
|
|
|
24
|
-
1. **Location** —
|
|
25
|
-
2. **Distance** — "
|
|
26
|
-
3. **Age range** —
|
|
27
|
-
4. **Gender preference** —
|
|
28
|
-
5. **Contact channel** — "If
|
|
24
|
+
1. **Location** — ask: "Where are you based?"
|
|
25
|
+
2. **Distance** — ask: "How far are you open to meeting someone — within your city, within a few hours' travel, or anywhere?" Map to: `50` / `300` / omit field.
|
|
26
|
+
3. **Age range** — ask: "Any age range you'd prefer? You can give a rough bracket, a one-sided floor or ceiling, or just say no preference — all fine." Both min and max optional.
|
|
27
|
+
4. **Gender preference** — ask: "Who are you looking to meet? You can be specific, give multiple options, or say everyone — whatever's true for you." Record open/everyone as `[]`.
|
|
28
|
+
5. **Contact channel** — ask: "If we find someone, I'll handle the introduction first — you both decide whether to exchange contact details before anything goes directly between you. For that moment, what contact info would you want them to have? (Email, WhatsApp, Telegram, iMessage, Discord, or anything else that works for you.)" Collect both type and value before proceeding. Supported types: `email`, `discord`, `telegram`, `whatsapp`, `imessage`.
|
|
29
29
|
|
|
30
30
|
Do NOT push back on open/no-preference answers. Do NOT re-ask.
|
|
31
31
|
|