truematch-plugin 0.1.11 → 0.1.12
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/observation.js +8 -13
- package/dist/plugin.js +5 -3
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/skills/truematch/SKILL.md +1 -1
package/dist/observation.js
CHANGED
|
@@ -5,9 +5,6 @@ import { getTrueMatchDir } from "./identity.js";
|
|
|
5
5
|
function getObservationFile() {
|
|
6
6
|
return join(getTrueMatchDir(), "observation.json");
|
|
7
7
|
}
|
|
8
|
-
// Global minimums — cross-session sanity check
|
|
9
|
-
const GLOBAL_MIN_CONVERSATIONS = 2;
|
|
10
|
-
const GLOBAL_MIN_DAYS = 2;
|
|
11
8
|
// Per-dimension confidence floors (psychologist-derived)
|
|
12
9
|
// attachment/emotional_regulation: high contextual sensitivity → higher floor
|
|
13
10
|
// dealbreakers: can surface in a single conversation → higher floor, no day req
|
|
@@ -56,11 +53,10 @@ export async function saveObservation(obs) {
|
|
|
56
53
|
});
|
|
57
54
|
}
|
|
58
55
|
// isEligible: full 9-dimension check — used for reporting and manual inspection.
|
|
56
|
+
// No session/day count floors — confidence scores already encode observation quality
|
|
57
|
+
// (signal count, consistency, recency decay, behavioral diversity). A long-time Claude
|
|
58
|
+
// user can be eligible on their very first TrueMatch session.
|
|
59
59
|
export function isEligible(obs) {
|
|
60
|
-
if (obs.conversation_count < GLOBAL_MIN_CONVERSATIONS)
|
|
61
|
-
return false;
|
|
62
|
-
if (obs.observation_span_days < GLOBAL_MIN_DAYS)
|
|
63
|
-
return false;
|
|
64
60
|
if (obs.dealbreaker_gate_state === "below_floor")
|
|
65
61
|
return false;
|
|
66
62
|
if (obs.dealbreaker_gate_state === "none_observed")
|
|
@@ -83,11 +79,8 @@ export function isEligible(obs) {
|
|
|
83
79
|
// conflict_resolution, emotional_regulation) dimensions only — T3 dimensions
|
|
84
80
|
// (humor, communication, interdependence_model) resolve later in negotiation
|
|
85
81
|
// and must NOT block pool entry.
|
|
82
|
+
// No session/day count floors — see isEligible() for rationale.
|
|
86
83
|
export function isPoolEligible(obs) {
|
|
87
|
-
if (obs.conversation_count < GLOBAL_MIN_CONVERSATIONS)
|
|
88
|
-
return false;
|
|
89
|
-
if (obs.observation_span_days < GLOBAL_MIN_DAYS)
|
|
90
|
-
return false;
|
|
91
84
|
if (obs.dealbreaker_gate_state === "below_floor")
|
|
92
85
|
return false;
|
|
93
86
|
if (obs.dealbreaker_gate_state === "none_observed")
|
|
@@ -147,8 +140,10 @@ export function emptyObservation() {
|
|
|
147
140
|
export function eligibilityReport(obs) {
|
|
148
141
|
const lines = [];
|
|
149
142
|
const pass = (label, ok, detail) => lines.push(`${ok ? "✓" : "✗"} ${label}: ${detail}`);
|
|
150
|
-
|
|
151
|
-
|
|
143
|
+
// Conversation count and observation span are informational — not eligibility gates.
|
|
144
|
+
// Confidence floors on T1+T2 dimensions are the actual quality gate.
|
|
145
|
+
lines.push(`ℹ Conversations: ${obs.conversation_count} sessions observed`);
|
|
146
|
+
lines.push(`ℹ Observation span: ${obs.observation_span_days} days`);
|
|
152
147
|
pass("Dealbreaker gate", obs.dealbreaker_gate_state !== "below_floor" &&
|
|
153
148
|
obs.dealbreaker_gate_state !== "none_observed", obs.dealbreaker_gate_state);
|
|
154
149
|
const dims = [
|
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.12",
|
|
151
151
|
kind: "lifecycle",
|
|
152
152
|
register(api) {
|
|
153
153
|
// ── Tool: /truematch-prefs ─────────────────────────────────────────────────
|
|
@@ -266,8 +266,10 @@ export default {
|
|
|
266
266
|
`3. Age range — both min and max optional. Accept "no preference" immediately.\n` +
|
|
267
267
|
`4. Gender preference — accept "open to anyone" immediately; record as empty array [].\n\n` +
|
|
268
268
|
`Do NOT push back on open/no-preference answers. Do NOT re-ask.\n\n` +
|
|
269
|
-
`Then ask: "
|
|
270
|
-
`
|
|
269
|
+
`Then ask: "Last thing — if there's a match, what contact channel would you want to share with ` +
|
|
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` +
|
|
271
273
|
`Run setup:\n` +
|
|
272
274
|
` node "$HOME/.truematch/truematch.js" setup --contact-type <type> --contact-value <value>\n` +
|
|
273
275
|
`Save preferences:\n` +
|
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.12
|
|
5
5
|
metadata:
|
|
6
6
|
openclaw:
|
|
7
7
|
emoji: "💑"
|