@proxygate/cli 0.1.3 → 0.1.4
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 +2 -2
- package/dist/generated/skills.js +1 -1
- package/dist/generated/skills.js.map +1 -1
- package/dist/postinstall.js +81 -0
- package/dist/postinstall.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ Terminal interface for [ProxyGate](https://proxygate.ai) — the Airbnb for AI A
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install -g proxygate
|
|
8
|
+
npm install -g @proxygate/cli
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
The installer offers to install Claude Code skills for AI-assisted workflows. If you skip this step, install them later with `proxygate skills install`.
|
|
@@ -13,7 +13,7 @@ The installer offers to install Claude Code skills for AI-assisted workflows. If
|
|
|
13
13
|
## Update
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
npm update -g proxygate
|
|
16
|
+
npm update -g @proxygate/cli
|
|
17
17
|
proxygate skills install # update Claude Code skills
|
|
18
18
|
```
|
|
19
19
|
|
package/dist/generated/skills.js
CHANGED
|
@@ -17,7 +17,7 @@ export const SKILLS = {
|
|
|
17
17
|
},
|
|
18
18
|
"pg-update": {
|
|
19
19
|
"SKILL.md": "---\nname: pg-update\ndescription: Use when updating ProxyGate CLI or SDK to latest version. Also triggers proactively when ~/.claude/cache/proxygate-update-check.json indicates an update is available and the statusline shows the update indicator. Make sure to use this whenever someone says \"update proxygate\", \"upgrade cli\", or when a session starts with an update notification.\n---\n\n# ProxyGate Update\n\nCheck for and install updates to proxygate.\n\n<process>\n\n<step name=\"get_installed_version\">\n```bash\nproxygate --version 2>/dev/null || echo \"NOT_INSTALLED\"\n```\n\nIf not installed, direct user to `/pg-setup`.\n</step>\n\n<step name=\"check_latest_version\">\n```bash\nnpm view @proxygate/cli version 2>/dev/null || echo \"UNAVAILABLE\"\n```\n\nIf npm check fails, suggest manual update: `npm install -g @proxygate/cli@latest`\n</step>\n\n<step name=\"compare_versions\">\n- If installed == latest: \"You're already on the latest version.\"\n- If installed < latest: show both versions and proceed to update\n- If not installed: direct to `/pg-setup`\n</step>\n\n<step name=\"run_update\">\n```bash\nnpm install -g @proxygate/cli@latest\n```\n\nVerify:\n```bash\nproxygate --version\n```\n</step>\n\n<step name=\"update_skills\">\nSkills are bundled in the CLI, so a new version may include updated skills:\n\n```bash\nproxygate skills install\n```\n</step>\n\n<step name=\"clear_cache\">\n```bash\nrm -f ~/.claude/cache/proxygate-update-check.json\n```\n</step>\n\n</process>\n\n## SDK Update\n\nIf `@proxygate/sdk` is in the project's dependencies:\n\n```bash\nnpm install @proxygate/sdk@latest\n# or\npnpm add @proxygate/sdk@latest\n```\n\n<success_criteria>\n- [ ] Installed version detected correctly\n- [ ] Latest version checked via npm\n- [ ] Update skipped if already current\n- [ ] CLI updated successfully\n- [ ] Skills updated via `proxygate skills install`\n- [ ] Update cache cleared\n</success_criteria>\n",
|
|
20
|
-
"scripts/check-update.sh": "#!/usr/bin/env bash\n# ProxyGate update checker — runs on Claude Code SessionStart.\n# Writes result to ~/.claude/cache/proxygate-update-check.json.\n# Exits quickly; never blocks session startup.\n\nset -euo pipefail\n\nCACHE_DIR=\"$HOME/.claude/cache\"\nCACHE_FILE=\"$CACHE_DIR/proxygate-update-check.json\"\n\nmkdir -p \"$CACHE_DIR\"\n\n# Skip if checked within last hour\nif [ -f \"$CACHE_FILE\" ]; then\n if [ \"$(uname)\" = \"Darwin\" ]; then\n age=$(( $(date +%s) - $(stat -f %m \"$CACHE_FILE\") ))\n else\n age=$(( $(date +%s) - $(stat -c %Y \"$CACHE_FILE\") ))\n fi\n if [ \"$age\" -lt 3600 ]; then\n exit 0\n fi\nfi\n\ncurrent=$(proxygate --version 2>/dev/null || echo \"0.0.0\")\nlatest=$(npm view @proxygate/cli version 2>/dev/null || echo \"0.0.0\")\n\nif [ \"$current\" = \"$latest\" ] || [ \"$latest\" = \"0.0.0\" ]; then\n cat > \"$CACHE_FILE\" <<JSON\n{\"update_available\":false,\"current\":\"$current\",\"latest\":\"$latest\",\"checked_at\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}\nJSON\nelse\n cat > \"$CACHE_FILE\" <<JSON\n{\"update_available\":true,\"current\":\"$current\",\"latest\":\"$latest\",\"checked_at\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}\nJSON\nfi\n"
|
|
20
|
+
"scripts/check-update.sh": "#!/usr/bin/env bash\n# ProxyGate update checker — runs on Claude Code SessionStart.\n# Writes result to ~/.claude/cache/proxygate-update-check.json.\n# Exits quickly; never blocks session startup.\n\nset -euo pipefail\n\nCACHE_DIR=\"$HOME/.claude/cache\"\nCACHE_FILE=\"$CACHE_DIR/proxygate-update-check.json\"\n\nmkdir -p \"$CACHE_DIR\"\n\n# Skip if checked within last hour\nif [ -f \"$CACHE_FILE\" ]; then\n if [ \"$(uname)\" = \"Darwin\" ]; then\n age=$(( $(date +%s) - $(stat -f %m \"$CACHE_FILE\") ))\n else\n age=$(( $(date +%s) - $(stat -c %Y \"$CACHE_FILE\") ))\n fi\n if [ \"$age\" -lt 3600 ]; then\n exit 0\n fi\nfi\n\ncurrent=$(proxygate --version 2>/dev/null || echo \"0.0.0\")\nlatest=$(npm view @proxygate/cli version 2>/dev/null || echo \"0.0.0\")\n\nif [ \"$current\" = \"$latest\" ] || [ \"$latest\" = \"0.0.0\" ]; then\n cat > \"$CACHE_FILE\" <<JSON\n{\"update_available\":false,\"current\":\"$current\",\"latest\":\"$latest\",\"checked_at\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}\nJSON\nelse\n cat > \"$CACHE_FILE\" <<JSON\n{\"update_available\":true,\"current\":\"$current\",\"latest\":\"$latest\",\"checked_at\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}\nJSON\n echo \"ProxyGate update available: $current → $latest. Run /pg-update to upgrade.\"\nfi\n"
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
23
|
//# sourceMappingURL=skills.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/generated/skills.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,MAAM,GAA2C;IAC5D,QAAQ,EAAE;QACR,UAAU,EAAE,8+IAA8+I;QAC1/I,wBAAwB,EAAE,gqGAAgqG;KAC3rG;IACD,SAAS,EAAE;QACT,UAAU,EAAE,soIAAsoI;QAClpI,wBAAwB,EAAE,gqGAAgqG;KAC3rG;IACD,UAAU,EAAE;QACV,UAAU,EAAE,wlHAAwlH;QACpmH,wBAAwB,EAAE,gqGAAgqG;KAC3rG;IACD,WAAW,EAAE;QACX,UAAU,EAAE,gpDAAgpD;KAC7pD;IACD,WAAW,EAAE;QACX,UAAU,EAAE,25DAA25D;QACv6D,yBAAyB,EAAE,
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/generated/skills.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,MAAM,GAA2C;IAC5D,QAAQ,EAAE;QACR,UAAU,EAAE,8+IAA8+I;QAC1/I,wBAAwB,EAAE,gqGAAgqG;KAC3rG;IACD,SAAS,EAAE;QACT,UAAU,EAAE,soIAAsoI;QAClpI,wBAAwB,EAAE,gqGAAgqG;KAC3rG;IACD,UAAU,EAAE;QACV,UAAU,EAAE,wlHAAwlH;QACpmH,wBAAwB,EAAE,gqGAAgqG;KAC3rG;IACD,WAAW,EAAE;QACX,UAAU,EAAE,gpDAAgpD;KAC7pD;IACD,WAAW,EAAE;QACX,UAAU,EAAE,25DAA25D;QACv6D,yBAAyB,EAAE,kwCAAkwC;KAC9xC;CACF,CAAC"}
|
package/dist/postinstall.js
CHANGED
|
@@ -62,8 +62,89 @@ async function postinstall() {
|
|
|
62
62
|
catch {
|
|
63
63
|
// Non-fatal
|
|
64
64
|
}
|
|
65
|
+
// Install statusline script
|
|
66
|
+
const hooksDir = join(claudeDir, 'hooks');
|
|
67
|
+
const statuslinePath = join(hooksDir, 'proxygate-statusline.js');
|
|
68
|
+
await mkdir(hooksDir, { recursive: true });
|
|
69
|
+
await writeFile(statuslinePath, STATUSLINE_SCRIPT, 'utf-8');
|
|
70
|
+
// Register statusline in settings (only if not already ours)
|
|
71
|
+
try {
|
|
72
|
+
const raw = await readFile(settingsPath, 'utf-8');
|
|
73
|
+
const settings = JSON.parse(raw);
|
|
74
|
+
const currentStatusline = settings.statusLine;
|
|
75
|
+
if (!currentStatusline?.command?.includes('proxygate-statusline')) {
|
|
76
|
+
settings.statusLine = {
|
|
77
|
+
type: 'command',
|
|
78
|
+
command: `node "${statuslinePath}"`,
|
|
79
|
+
};
|
|
80
|
+
await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Non-fatal
|
|
85
|
+
}
|
|
65
86
|
console.log(`\x1b[32m+\x1b[0m Installed ${count} ProxyGate skills to ${baseDir}`);
|
|
66
87
|
}
|
|
88
|
+
const STATUSLINE_SCRIPT = `#!/usr/bin/env node
|
|
89
|
+
const fs = require('fs');
|
|
90
|
+
const path = require('path');
|
|
91
|
+
const os = require('os');
|
|
92
|
+
let input = '';
|
|
93
|
+
const timeout = setTimeout(() => process.exit(0), 3000);
|
|
94
|
+
process.stdin.setEncoding('utf8');
|
|
95
|
+
process.stdin.on('data', chunk => input += chunk);
|
|
96
|
+
process.stdin.on('end', () => {
|
|
97
|
+
clearTimeout(timeout);
|
|
98
|
+
try {
|
|
99
|
+
const data = JSON.parse(input);
|
|
100
|
+
const model = data.model?.display_name || 'Claude';
|
|
101
|
+
const dir = path.basename(data.workspace?.current_dir || process.cwd());
|
|
102
|
+
const remaining = data.context_window?.remaining_percentage;
|
|
103
|
+
const claudeDir = path.join(os.homedir(), '.claude');
|
|
104
|
+
const AUTO_COMPACT_BUFFER_PCT = 16.5;
|
|
105
|
+
let ctx = '';
|
|
106
|
+
if (remaining != null) {
|
|
107
|
+
const usable = 100 - AUTO_COMPACT_BUFFER_PCT;
|
|
108
|
+
const used = Math.min(100, Math.round(((usable - remaining) / usable) * 100));
|
|
109
|
+
const blocks = 10;
|
|
110
|
+
const filled = Math.round((used / 100) * blocks);
|
|
111
|
+
const bar = String.fromCharCode(9608).repeat(filled) + String.fromCharCode(9617).repeat(blocks - filled);
|
|
112
|
+
const color = used >= 90 ? '\\x1b[31m' : used >= 70 ? '\\x1b[33m' : '\\x1b[32m';
|
|
113
|
+
ctx = \` \${color}\${bar} \${used}%\\x1b[0m\`;
|
|
114
|
+
}
|
|
115
|
+
let task = '';
|
|
116
|
+
try {
|
|
117
|
+
const stateFile = path.join(claudeDir, 'get-shit-done', 'STATE.json');
|
|
118
|
+
if (fs.existsSync(stateFile)) {
|
|
119
|
+
const state = JSON.parse(fs.readFileSync(stateFile, 'utf8'));
|
|
120
|
+
if (state.current_task) task = state.current_task;
|
|
121
|
+
}
|
|
122
|
+
} catch (e) {}
|
|
123
|
+
let gsdUpdate = '';
|
|
124
|
+
const gsdCache = path.join(claudeDir, 'cache', 'gsd-update-check.json');
|
|
125
|
+
if (fs.existsSync(gsdCache)) {
|
|
126
|
+
try {
|
|
127
|
+
const c = JSON.parse(fs.readFileSync(gsdCache, 'utf8'));
|
|
128
|
+
if (c.update_available) gsdUpdate = '\\x1b[33m\\u2B06 /gsd:update\\x1b[0m \\u2502 ';
|
|
129
|
+
} catch (e) {}
|
|
130
|
+
}
|
|
131
|
+
let pgUpdate = '';
|
|
132
|
+
const pgCache = path.join(claudeDir, 'cache', 'proxygate-update-check.json');
|
|
133
|
+
if (fs.existsSync(pgCache)) {
|
|
134
|
+
try {
|
|
135
|
+
const c = JSON.parse(fs.readFileSync(pgCache, 'utf8'));
|
|
136
|
+
if (c.update_available) pgUpdate = '\\x1b[36m\\u2B06 /pg-update\\x1b[0m \\u2502 ';
|
|
137
|
+
} catch (e) {}
|
|
138
|
+
}
|
|
139
|
+
const updates = gsdUpdate + pgUpdate;
|
|
140
|
+
if (task) {
|
|
141
|
+
process.stdout.write(\`\${updates}\\x1b[2m\${model}\\x1b[0m \\u2502 \\x1b[1m\${task}\\x1b[0m \\u2502 \\x1b[2m\${dir}\\x1b[0m\${ctx}\`);
|
|
142
|
+
} else {
|
|
143
|
+
process.stdout.write(\`\${updates}\\x1b[2m\${model}\\x1b[0m \\u2502 \\x1b[2m\${dir}\\x1b[0m\${ctx}\`);
|
|
144
|
+
}
|
|
145
|
+
} catch (e) {}
|
|
146
|
+
});
|
|
147
|
+
`;
|
|
67
148
|
postinstall().catch(() => {
|
|
68
149
|
// Silent fail — postinstall should never block npm install
|
|
69
150
|
});
|
package/dist/postinstall.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":"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"}
|