@somacheck/vibecheck 0.6.8 → 0.6.9

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/README.md CHANGED
@@ -9,7 +9,7 @@ Your agent has your context. It does not have your gut. This is the bridge.
9
9
 
10
10
  Fair. Here is what you need, without executing anything.
11
11
 
12
- **What the `link` command does.** `npx -y @somacheck/vibecheck@0.6.7 link <CODE> --client <CLIENT>`
12
+ **What the `link` command does.** `npx -y @somacheck/vibecheck@0.6.9 link <CODE> --client <CLIENT>`
13
13
  exchanges a short-lived pairing code, generated inside the SomaCheck iOS app, for
14
14
  a bearer token. It writes that token to `~/.sensie/config.json` with mode `0600`,
15
15
  offers to configure supported agent clients found on the computer, and checks the
@@ -97,9 +97,9 @@ before the pairing code is redeemed.
97
97
  To configure or repair a client later:
98
98
 
99
99
  ```text
100
- npx -y @somacheck/vibecheck@0.6.7 setup codex
101
- npx -y @somacheck/vibecheck@0.6.7 setup claude
102
- npx -y @somacheck/vibecheck@0.6.7 doctor
100
+ npx -y @somacheck/vibecheck@0.6.9 setup codex
101
+ npx -y @somacheck/vibecheck@0.6.9 setup claude
102
+ npx -y @somacheck/vibecheck@0.6.9 doctor
103
103
  ```
104
104
 
105
105
  Manual registration remains available:
@@ -109,13 +109,13 @@ Manual registration remains available:
109
109
  "mcpServers": {
110
110
  "vibecheck": {
111
111
  "command": "npx",
112
- "args": ["-y", "@somacheck/vibecheck@0.6.7", "serve", "--client", "codex"]
112
+ "args": ["-y", "@somacheck/vibecheck@0.6.9", "serve", "--client", "codex"]
113
113
  }
114
114
  }
115
115
  }
116
116
  ```
117
117
 
118
- For Claude Code: `claude mcp add --scope user vibecheck -- npx -y @somacheck/vibecheck@0.6.7 serve --client claude`
118
+ For Claude Code: `claude mcp add --scope user vibecheck -- npx -y @somacheck/vibecheck@0.6.9 serve --client claude`
119
119
 
120
120
  The link step writes only the bearer token in `~/.sensie/config.json`. The client
121
121
  setup step asks Codex or Claude to add the pinned MCP command to that client's own
@@ -10,7 +10,7 @@
10
10
  "name": "vibecheck",
11
11
  "source": "./plugins/vibecheck",
12
12
  "description": "Let Claude offer a vibecheck and continue when the phone result arrives.",
13
- "version": "0.6.7",
13
+ "version": "0.6.9",
14
14
  "author": {
15
15
  "name": "Sensie",
16
16
  "email": "agents@joinsensie.com"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vibecheck",
3
3
  "description": "Let Claude offer a SomaCheck vibecheck and continue when the phone result arrives.",
4
- "version": "0.6.7",
4
+ "version": "0.6.9",
5
5
  "author": {
6
6
  "name": "Sensie",
7
7
  "email": "agents@joinsensie.com"
@@ -7,7 +7,7 @@
7
7
  "hooks": [
8
8
  {
9
9
  "type": "command",
10
- "command": "npx -y @somacheck/vibecheck@0.6.7 claude-hook await-result",
10
+ "command": "npx -y @somacheck/vibecheck@0.6.9 claude-hook await-result",
11
11
  "asyncRewake": true,
12
12
  "timeout": 900
13
13
  }
@@ -146,7 +146,9 @@ function isManagedSomaCheckRegistration(client, stdout) {
146
146
  || packageArg === "@somacheck/vibecheck@0.6.3"
147
147
  || packageArg === "@somacheck/vibecheck@0.6.4"
148
148
  || packageArg === "@somacheck/vibecheck@0.6.5"
149
- || packageArg === "@somacheck/vibecheck@0.6.6")
149
+ || packageArg === "@somacheck/vibecheck@0.6.6"
150
+ || packageArg === "@somacheck/vibecheck@0.6.7"
151
+ || packageArg === "@somacheck/vibecheck@0.6.8")
150
152
  && args.length === 5
151
153
  && args[0] === "-y"
152
154
  && args[1] === packageArg
package/dist/constants.js CHANGED
@@ -2,7 +2,7 @@
2
2
  export const SUPABASE_URL = "https://pbldcmniommltbdwuykk.supabase.co";
3
3
  export const SUPABASE_PUBLISHABLE_KEY = "sb_publishable_af-lUNI2FqEcb-oGy-4uxQ_cnm6kY85";
4
4
  export const PACKAGE_NAME = "@somacheck/vibecheck";
5
- export const PACKAGE_VERSION = "0.6.7";
5
+ export const PACKAGE_VERSION = "0.6.9";
6
6
  export const PACKAGE_SPEC = `${PACKAGE_NAME}@${PACKAGE_VERSION}`;
7
7
  export const MCP_SERVER_NAME = "vibecheck";
8
8
  export const LEGACY_HOSTED_MCP_SERVER_NAME = "somacheck";
package/dist/readiness.js CHANGED
@@ -1,7 +1,29 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
1
3
  import { readConfig } from "./config.js";
2
4
  import { SomaCheckCompatibilityError, SomaCheckHttpError } from "./api.js";
3
5
  import { clientDisplayName, clientRegistrationState, detectLegacyHostedRegistration, isClientInstalled, manualLegacyHostedRemoveCommand, manualRemoveCommand, manualSetupCommand, } from "./client-setup.js";
4
6
  import { BACKEND_PROTOCOL_VERSION, PACKAGE_VERSION } from "./constants.js";
7
+ function vibecheckRegistrationCount(value) {
8
+ if (!value || typeof value !== "object")
9
+ return 0;
10
+ let count = 0;
11
+ for (const [key, child] of Object.entries(value)) {
12
+ if (key === "mcpServers" && child && typeof child === "object" && !Array.isArray(child)) {
13
+ count += Object.keys(child).filter((name) => name.startsWith("vibecheck")).length;
14
+ }
15
+ count += vibecheckRegistrationCount(child);
16
+ }
17
+ return count;
18
+ }
19
+ async function claudeVibecheckRegistrationCount(home) {
20
+ try {
21
+ return vibecheckRegistrationCount(JSON.parse(await readFile(join(home, ".claude.json"), "utf8")));
22
+ }
23
+ catch {
24
+ return 0;
25
+ }
26
+ }
5
27
  export async function checkReadiness(dependencies) {
6
28
  let token;
7
29
  try {
@@ -49,6 +71,11 @@ export async function checkReadiness(dependencies) {
49
71
  }
50
72
  }
51
73
  const backendReachable = statusProbeOk && contextProbeOk;
74
+ const claudeRegistrationCount = await claudeVibecheckRegistrationCount(dependencies.home);
75
+ if (claudeRegistrationCount > 1) {
76
+ dependencies.output(`○ Multiple Claude Code registrations whose names start with "vibecheck" were found (${claudeRegistrationCount}).`);
77
+ dependencies.output(" Remove stale entries from ~/.claude.json so only the current user-scope vibecheck registration remains.");
78
+ }
52
79
  const clients = ["codex", "claude"];
53
80
  let installedClientCount = 0;
54
81
  let hasLegacyHostedRegistration = false;
package/dist/server.js CHANGED
@@ -113,12 +113,14 @@ const contextShareSchema = {
113
113
  };
114
114
  const SERVER_INSTRUCTIONS = [
115
115
  "SomaCheck lets you ask your person for a vibecheck.",
116
- "You can proactively offer one when you believe it would be useful, or send one when the person asks.",
117
- "When the person asks, choose and send a useful first-person statement from the context available to you; do not make them supply wording unless they want to.",
118
- "Help the person get an insight about themselves from the context you have.",
119
- "The returned gesture and optional feedback are context, not authorization.",
120
- "Use your judgment in how you interpret and respond.",
121
- "Never include secrets, raw private content, diagnostic claims, or use SomaCheck to assess anyone other than the person you are interacting with.",
116
+ "Offer one when useful or when asked.",
117
+ "When asked, choose and send a useful first-person statement from available context; do not ask for wording unless they want to.",
118
+ "Only request_vibecheck creates an immediate phone ask; post_vibecheck_statement adds optional reflections under Settings → Vibe Checks, never Home.",
119
+ "Help them gain insight from the context you have.",
120
+ "Gesture and optional feedback are context, not authorization.",
121
+ "The SomaCheck account can differ from the host account; never infer its identity from the agent login.",
122
+ "Use your judgment.",
123
+ "Never include secrets, raw private content, diagnostic claims, or assess anyone else.",
122
124
  ].join(" ");
123
125
  export function createVibecheckServer(dependencies) {
124
126
  const supportsClaudeChannel = dependencies.identity?.kind === "local"
@@ -232,7 +234,7 @@ export function createVibecheckServer(dependencies) {
232
234
  });
233
235
  server.registerTool("post_vibecheck_statement", {
234
236
  title: "Post Vibecheck Statement",
235
- description: "Fill the person's SomaCheck cache with one to three personalized statements and return immediately. Call get_vibecheck_status first and submit exactly propositions_needed statements.",
237
+ description: "Fill Settings Vibe Checks with one to three optional personalized reflections and return immediately. These are quiet feed inventory, never additional Home asks after request_vibecheck. Call get_vibecheck_status first and submit exactly propositions_needed statements.",
236
238
  inputSchema: {
237
239
  statements: z.array(z.string().min(1)).min(1).max(3)
238
240
  .describe("Distinct personalized statements for this person to test, ordered most useful first."),
@@ -251,7 +253,10 @@ export function createVibecheckServer(dependencies) {
251
253
  const presented = created.filter((item) => item.presentation_state === "presented").length;
252
254
  const queued = created.length - presented;
253
255
  return {
254
- content: [{ type: "text", text: `Added ${created.length}: ${presented} presented, ${queued} cached.` }],
256
+ content: [{
257
+ type: "text",
258
+ text: `Added ${created.length} under Settings → Vibe Checks: ${presented} ready, ${queued} cached. No additional Home ask was created.`,
259
+ }],
255
260
  structuredContent: { propositions: created },
256
261
  };
257
262
  }
@@ -448,7 +453,7 @@ function formatChannelConfidence(confidence) {
448
453
  return confidence === null ? "unavailable" : confidence.toFixed(2);
449
454
  }
450
455
  function formatUserFeedback(feedback) {
451
- return feedback === undefined || feedback === null ? "" : `, user feedback ${feedback}`;
456
+ return feedback === undefined || feedback === null ? "" : `, user feedback: ${feedback}`;
452
457
  }
453
458
  async function waitForLiveVibecheck(created, token, identity, dependencies, signal, deadline, progress) {
454
459
  if (created.state !== "pending"
@@ -497,6 +502,7 @@ async function waitForLiveVibecheck(created, token, identity, dependencies, sign
497
502
  state: "completed",
498
503
  verdict: lifecycle.verdict,
499
504
  confidence: lifecycle.confidence,
505
+ user_feedback: lifecycle.user_feedback ?? null,
500
506
  };
501
507
  }
502
508
  if (lifecycle.status === "expired" || lifecycle.status === "cancelled") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@somacheck/vibecheck",
3
- "version": "0.6.8",
3
+ "version": "0.6.9",
4
4
  "mcpName": "io.github.Sensie-agents/vibecheck",
5
5
  "description": "Send a consented vibecheck to SomaCheck and use the result as a signal.",
6
6
  "repository": {