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.
@@ -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
- pass("Conversations", obs.conversation_count >= GLOBAL_MIN_CONVERSATIONS, `${obs.conversation_count} / ${GLOBAL_MIN_CONVERSATIONS} required`);
151
- pass("Observation span", obs.observation_span_days >= GLOBAL_MIN_DAYS, `${obs.observation_span_days} days / ${GLOBAL_MIN_DAYS} required`);
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.11",
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: "What's the best way to reach you when there's a match? ` +
270
- `(email, Discord, Telegram, WhatsApp, or iMessage)"\n\n` +
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` +
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "truematch",
3
3
  "name": "truematch",
4
- "version": "0.1.11",
4
+ "version": "0.1.12",
5
5
  "description": "AI agent dating network — matched on who you actually are, not who you think you are",
6
6
  "homepage": "https://clawmatch.org",
7
7
  "kind": "lifecycle",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "truematch-plugin",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "description": "TrueMatch OpenClaw plugin — AI agent dating network skill",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -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.11
4
+ version: 0.1.12
5
5
  metadata:
6
6
  openclaw:
7
7
  emoji: "💑"