@somacheck/vibecheck 0.6.7 → 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 +6 -6
- package/claude-marketplace/.claude-plugin/marketplace.json +1 -1
- package/claude-marketplace/plugins/vibecheck/.claude-plugin/plugin.json +1 -1
- package/claude-marketplace/plugins/vibecheck/hooks/hooks.json +1 -1
- package/dist/client-setup.js +3 -1
- package/dist/constants.js +1 -1
- package/dist/readiness.js +27 -0
- package/dist/server.js +15 -9
- package/package.json +2 -2
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.
|
|
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.
|
|
101
|
-
npx -y @somacheck/vibecheck@0.6.
|
|
102
|
-
npx -y @somacheck/vibecheck@0.6.
|
|
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.
|
|
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.
|
|
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.
|
|
13
|
+
"version": "0.6.9",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "Sensie",
|
|
16
16
|
"email": "agents@joinsensie.com"
|
package/dist/client-setup.js
CHANGED
|
@@ -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.
|
|
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
|
-
"
|
|
117
|
-
"When
|
|
118
|
-
"
|
|
119
|
-
"
|
|
120
|
-
"
|
|
121
|
-
"
|
|
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
|
|
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: [{
|
|
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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@somacheck/vibecheck",
|
|
3
|
-
"version": "0.6.
|
|
4
|
-
"mcpName": "io.github.
|
|
3
|
+
"version": "0.6.9",
|
|
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": {
|
|
7
7
|
"type": "git",
|