@holdyourvoice/hyv 2.9.18 → 2.9.20
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/LICENSE +26 -0
- package/agents/chatgpt.md +8 -1
- package/dist/index.js +28 -7
- package/package.json +3 -2
- package/scripts/postinstall.js +1 -26
package/LICENSE
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
License
|
|
2
|
+
Copyright © 2025 Hold Your Voice (holdyourvoice.com)
|
|
3
|
+
|
|
4
|
+
All Rights Reserved.
|
|
5
|
+
|
|
6
|
+
This software ("@holdyourvoice/hyv") is proprietary and confidential.
|
|
7
|
+
It is provided for use solely by authorized licensees of Hold Your Voice.
|
|
8
|
+
|
|
9
|
+
1. **Grant of License**: A non-exclusive, non-transferable, revocable license
|
|
10
|
+
is granted to use this software for its intended purpose as a writing
|
|
11
|
+
analysis tool.
|
|
12
|
+
|
|
13
|
+
2. **Restrictions**: You may not:
|
|
14
|
+
a) Redistribute, sublicense, sell, or lease this software or any
|
|
15
|
+
derivative works.
|
|
16
|
+
b) Modify, reverse engineer, decompile, or disassemble this software.
|
|
17
|
+
c) Remove or alter any proprietary notices.
|
|
18
|
+
d) Use this software in violation of applicable law.
|
|
19
|
+
|
|
20
|
+
3. **No Warranty**: This software is provided "as is" without warranty of
|
|
21
|
+
any kind, express or implied.
|
|
22
|
+
|
|
23
|
+
4. **Limitation of Liability**: Hold Your Voice shall not be liable for any
|
|
24
|
+
damages arising from the use of this software.
|
|
25
|
+
|
|
26
|
+
For licensing inquiries: hello@holdyourvoice.com
|
package/agents/chatgpt.md
CHANGED
|
@@ -25,9 +25,16 @@ The user has a voice profile. All writing must match their personal style.
|
|
|
25
25
|
## MCP setup (no terminal)
|
|
26
26
|
- `hyv_mcp_setup` with `action=status` — see what's integrated and onboarding progress
|
|
27
27
|
- `hyv_mcp_setup` with `action=integrate` — refresh Cursor/Claude configs (`force=true` after hyv upgrade)
|
|
28
|
-
- `hyv_mcp_setup` with `action=chatgpt` —
|
|
28
|
+
- `hyv_mcp_setup` with `action=chatgpt` — **recommended:** remote OAuth (developer mode → new app → https://holdyourvoice.com/mcp + OAuth). Free fallback: local connector (command: hyv, arguments: mcp)
|
|
29
29
|
- `hyv_welcome` — finish voice onboarding inside this chat
|
|
30
30
|
|
|
31
|
+
## ChatGPT connection (recommended — paid users)
|
|
32
|
+
1. Settings → Developer mode ON
|
|
33
|
+
2. Settings → Apps → New App
|
|
34
|
+
3. Server URL: `https://holdyourvoice.com/mcp` · Authentication: OAuth
|
|
35
|
+
4. Save → sign in to holdyourvoice.com
|
|
36
|
+
5. OAuth runs in ChatGPT's browser — no Windows firewall issues, no local install
|
|
37
|
+
|
|
31
38
|
## Available tools
|
|
32
39
|
- `hyv_mcp_setup` / `hyv_welcome` / `hyv_demo` — setup and onboarding
|
|
33
40
|
- `hyv_scan` / `hyv_analyze` — check for AI patterns (+ hybrid when paid)
|
package/dist/index.js
CHANGED
|
@@ -19277,12 +19277,34 @@ function formatChatGptConnectorGuide() {
|
|
|
19277
19277
|
const mcpCmd = lib.resolveHyvMcpCommand(resolveCliRoot());
|
|
19278
19278
|
const guidePath = path24.join(os12.homedir(), ".chatgpt", "hyv-mcp-connector.txt");
|
|
19279
19279
|
const lines = [
|
|
19280
|
-
"### ChatGPT Desktop
|
|
19280
|
+
"### ChatGPT Desktop \u2014 RECOMMENDED: Path A (remote OAuth)",
|
|
19281
19281
|
"",
|
|
19282
|
-
"
|
|
19282
|
+
"For paid HYV users. No local install. OAuth runs in ChatGPT's browser \u2014 no Windows firewall issues.",
|
|
19283
|
+
"",
|
|
19284
|
+
"1. Open ChatGPT **desktop** app (browser chat cannot use MCP)",
|
|
19285
|
+
"2. Settings \u2192 turn **Developer mode** ON (accept elevated risk warning \u2014 expected, not a HYV bug)",
|
|
19286
|
+
"3. Settings \u2192 Apps \u2192 **New App**",
|
|
19287
|
+
"4. Fill in:",
|
|
19288
|
+
" - Name: **hold your voice**",
|
|
19289
|
+
" - Description: scans writing for AI patterns and voice drift",
|
|
19290
|
+
" - Connection: Server URL \u2192 **https://holdyourvoice.com/mcp**",
|
|
19291
|
+
" - Authentication: **OAuth**",
|
|
19292
|
+
' - Checkbox: "I understand and want to continue"',
|
|
19293
|
+
"5. Save \u2192 complete OAuth sign-in to holdyourvoice.com",
|
|
19294
|
+
'6. Test: "scan this with hold your voice"',
|
|
19295
|
+
"",
|
|
19296
|
+
"Do NOT use https://example.com/sse \u2014 that is a ChatGPT placeholder, not a real URL.",
|
|
19297
|
+
"Cloud app setup: https://holdyourvoice.com/app/api/mcp",
|
|
19298
|
+
"Wiki guide: https://holdyourvoice.com/wiki/use-hyv-in-chatgpt",
|
|
19299
|
+
"",
|
|
19300
|
+
"### FALLBACK: Path B (local connector \u2014 free users only)",
|
|
19301
|
+
"",
|
|
19302
|
+
"Only if you do not have a paid HYV plan. Requires Node.js 18+.",
|
|
19303
|
+
"",
|
|
19304
|
+
"1. Install: npm i -g @holdyourvoice/hyv@latest && hyv welcome",
|
|
19283
19305
|
"2. Settings \u2192 Connectors \u2192 Add connector",
|
|
19284
19306
|
"3. Name: **hold your voice**",
|
|
19285
|
-
"4. Command: **hyv**",
|
|
19307
|
+
"4. Command: **hyv** (or absolute path below if connector fails)",
|
|
19286
19308
|
"5. Arguments: **mcp**",
|
|
19287
19309
|
"",
|
|
19288
19310
|
"If the connector fails to start, use absolute paths:",
|
|
@@ -19290,13 +19312,12 @@ function formatChatGptConnectorGuide() {
|
|
|
19290
19312
|
` arguments: ${mcpCmd.args.join(" ")}`,
|
|
19291
19313
|
"",
|
|
19292
19314
|
"6. Save, restart ChatGPT Desktop",
|
|
19293
|
-
'7. Ask: "run hyv_welcome" or "scan this draft with hold your voice"',
|
|
19294
19315
|
""
|
|
19295
19316
|
];
|
|
19296
19317
|
if (fs26.existsSync(guidePath)) {
|
|
19297
19318
|
lines.push(`Full guide on disk: ${guidePath}`);
|
|
19298
19319
|
} else {
|
|
19299
|
-
lines.push("Run `hyv mcp` or `hyv doctor --fix-agents` to write the guide file.");
|
|
19320
|
+
lines.push("Run `hyv mcp --setup-chatgpt` or `hyv doctor --fix-agents` to write the guide file.");
|
|
19300
19321
|
}
|
|
19301
19322
|
return lines.join("\n");
|
|
19302
19323
|
}
|
|
@@ -19336,7 +19357,7 @@ function buildMcpAgentStatus() {
|
|
|
19336
19357
|
lines.push("- Which profile is active \u2192 hyv_profiles");
|
|
19337
19358
|
lines.push("- New or partial setup \u2192 hyv_welcome (steps 1\u20134, or mode=extract_prompt for voice from chat)");
|
|
19338
19359
|
lines.push("- Refresh app configs \u2192 hyv_mcp_setup with action=integrate (force=true after hyv upgrade)");
|
|
19339
|
-
lines.push("- ChatGPT
|
|
19360
|
+
lines.push("- ChatGPT remote OAuth setup (recommended) \u2192 hyv_mcp_setup with action=chatgpt");
|
|
19340
19361
|
lines.push("- Test free scan \u2192 hyv_demo or hyv_scan on any draft");
|
|
19341
19362
|
return lines.join("\n");
|
|
19342
19363
|
}
|
|
@@ -19752,7 +19773,7 @@ var TOOLS = [
|
|
|
19752
19773
|
properties: {
|
|
19753
19774
|
action: {
|
|
19754
19775
|
type: "string",
|
|
19755
|
-
description: "status (default) | integrate (wire hyv into Cursor/Claude/etc.) | chatgpt (
|
|
19776
|
+
description: "status (default) | integrate (wire hyv into Cursor/Claude/etc.) | chatgpt (remote OAuth setup \u2014 recommended for paid users)"
|
|
19756
19777
|
},
|
|
19757
19778
|
force: {
|
|
19758
19779
|
type: "boolean",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@holdyourvoice/hyv",
|
|
3
|
-
"version": "2.9.
|
|
3
|
+
"version": "2.9.20",
|
|
4
4
|
"description": "Free local AI writing scan for cursor & claude. MCP server, 220+ pattern detection, voice profiles. npx @holdyourvoice/hyv welcome",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -66,7 +66,8 @@
|
|
|
66
66
|
"skills/",
|
|
67
67
|
"agents/",
|
|
68
68
|
"README.md",
|
|
69
|
-
"CHANGELOG.md"
|
|
69
|
+
"CHANGELOG.md",
|
|
70
|
+
"LICENSE"
|
|
70
71
|
],
|
|
71
72
|
"repository": {
|
|
72
73
|
"type": "git",
|
package/scripts/postinstall.js
CHANGED
|
@@ -5,12 +5,7 @@
|
|
|
5
5
|
const path = require('path');
|
|
6
6
|
const pkgDir = path.resolve(__dirname, '..');
|
|
7
7
|
const quiet = process.env.HYV_POSTINSTALL_QUIET === '1' || process.argv.includes('--quiet');
|
|
8
|
-
const
|
|
9
|
-
const {
|
|
10
|
-
setupAgents,
|
|
11
|
-
hasCompletedOnboarding,
|
|
12
|
-
markOnboardingComplete,
|
|
13
|
-
} = require('./postinstall-lib');
|
|
8
|
+
const { setupAgents } = require('./postinstall-lib');
|
|
14
9
|
|
|
15
10
|
function print(msg) {
|
|
16
11
|
if (!quiet) console.log(msg);
|
|
@@ -37,24 +32,4 @@ if (configured.length > 0) {
|
|
|
37
32
|
if (warnings.length > 0 && !quiet) {
|
|
38
33
|
print(' ! setup notes: ' + warnings.join('; '));
|
|
39
34
|
print('');
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const canShowOnboarding =
|
|
43
|
-
process.stdout.isTTY || process.env.npm_config_foreground_scripts === 'true';
|
|
44
|
-
|
|
45
|
-
if (!quiet && !hasCompletedOnboarding(hyvDir) && canShowOnboarding) {
|
|
46
|
-
print('');
|
|
47
|
-
print(' starting onboarding...');
|
|
48
|
-
print('');
|
|
49
|
-
try {
|
|
50
|
-
const { execSync } = require('child_process');
|
|
51
|
-
execSync('node "' + path.join(pkgDir, 'dist', 'index.js') + '" welcome', {
|
|
52
|
-
stdio: 'inherit',
|
|
53
|
-
env: { ...process.env, HYV_POSTINSTALL_ONBOARDING: '1' },
|
|
54
|
-
});
|
|
55
|
-
markOnboardingComplete(hyvDir, require('./postinstall-lib').readPkgVersion(pkgDir));
|
|
56
|
-
} catch {
|
|
57
|
-
print(' finish setup: hyv welcome');
|
|
58
|
-
print('');
|
|
59
|
-
}
|
|
60
35
|
}
|