{"_id":"kloudy","_rev":"14-cb752639059cd58dbac669adcb6ee348","name":"kloudy","dist-tags":{"next":"0.4.6","latest":"1.0.3"},"versions":{"0.4.0":{"name":"kloudy","version":"0.4.0","license":"Apache-2.0","_id":"kloudy@0.4.0","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"homepage":"https://kloudy.ai/install","bugs":{"url":"https://github.com/Gio300/kloudy-open/issues"},"bin":{"kloudy":"bin/entry.mjs"},"dist":{"shasum":"cd1558870f7c60be4e0cfb96cff159dc1cc7712f","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-0.4.0.tgz","fileCount":36,"integrity":"sha512-iP5V2tnPyhbB2mmUfNOudMXypB5KrpDoSR9KGlTGVLAZ9b5pmiBh9LkyJ9p5f19awcMh/Lm46x209y+DKztGWA==","signatures":[{"sig":"MEUCIQDDnqSGBh+F/wxJ9kzy67Uh1vh9d7P3BbWlh1tTGOuA7QIgJN8yiyuCqNBUJ2Cc3KvpVzt/Q0M44pgioMnGMTYTomg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":818874},"type":"module","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"gitHead":"66e72731bd0760d20be627ed69fb32df4c48a517","mcpName":"io.github.Gio300/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","build:approval":"node scripts/build-approval.mjs"},"_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"repository":{"url":"git+https://github.com/Gio300/kloudy-open.git","type":"git"},"_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"tmp":"tmp/kloudy_0.4.0_1791102386791_0.09515318745326584","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"kloudy","version":"0.4.1","license":"Apache-2.0","_id":"kloudy@0.4.1","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"homepage":"https://kloudy.ai/install","bugs":{"url":"https://github.com/Gio300/kloudy-open/issues"},"bin":{"kloudy":"bin/entry.mjs"},"dist":{"shasum":"29ec86302ba995b4e21c088999a9280013fb0e8a","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-0.4.1.tgz","fileCount":37,"integrity":"sha512-wSwRv7b4SankuoOifPRHpXSJu0r6vqJgrcD04miD9RNYm9GvdlTQLOPdnHS7UCMxaSKGXKyEryOFTag99yFMsg==","signatures":[{"sig":"MEQCIEqWDo8LpZzRWXaug3hFZiDs+S56dLQDQi6K10LCcM7eAiArUP7MUUsA6JvYRlZUMrklmMdvVrdm9WWYydfeCoyLCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAdCbb9jD415k2DePVk98GEPPhN62sT6uLp1jmsHOupIAiEAutxiOp5Cfdflmz+BC5Sheiwy5l5PHVTz7bvWbbYTTQo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":827077},"type":"module","_from":"file:proof\\2026-10-04-product-split\\kloudy-0.4.1.tgz","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./conversation":"./src/conversation.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"mcpName":"io.github.Gio300/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","build:approval":"node scripts/build-approval.mjs"},"_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"_resolved":"C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-09-26\\let-s-plan-this-out-kloudy\\kloudy-open\\proof\\2026-10-04-product-split\\kloudy-0.4.1.tgz","_integrity":"sha512-wSwRv7b4SankuoOifPRHpXSJu0r6vqJgrcD04miD9RNYm9GvdlTQLOPdnHS7UCMxaSKGXKyEryOFTag99yFMsg==","repository":{"url":"git+https://github.com/Gio300/kloudy-open.git","type":"git"},"_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"tmp":"tmp/kloudy_0.4.1_1791140520382_0.6014809708121094","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"kloudy","version":"0.4.2","license":"Apache-2.0","_id":"kloudy@0.4.2","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"homepage":"https://kloudy.ai/install","bugs":{"url":"https://kloudy.ai/support"},"bin":{"kloudy":"bin/entry.mjs"},"dist":{"shasum":"693c585d78e7b5771585eb3a14995e484ca31819","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-0.4.2.tgz","fileCount":37,"integrity":"sha512-dt5MUJiaSTZcMf6TQtmq3WB0qLfck7yJ9eSuVU/tX0JXzqhbc5j4R1nMiKqf3sRYB4P2QPjlCubLc7A288ZQQA==","signatures":[{"sig":"MEYCIQCTWWeNPrASRKnm0n2a87TeMm7Razha9gvtNGxzTDNuAQIhAI8Y+Il9c6LKDqwGl6eubsW8rr7mY529MOc8Ks2ze1+9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDxGB+y0EUrceCz1xAmv+0K4gyrNrwsetirUZHm7LBjIAIgGMaLNaQj5RaHxsgspgcYAR7bQiaR8t1VIlexXEEX3TI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":826989},"type":"module","_from":"file:kloudy-0.4.2.tgz","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./conversation":"./src/conversation.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"mcpName":"io.github.Gio300/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","build:approval":"node scripts/build-approval.mjs"},"_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"_resolved":"C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-09-26\\let-s-plan-this-out-kloudy\\kloudy-open\\kloudy-0.4.2.tgz","_integrity":"sha512-dt5MUJiaSTZcMf6TQtmq3WB0qLfck7yJ9eSuVU/tX0JXzqhbc5j4R1nMiKqf3sRYB4P2QPjlCubLc7A288ZQQA==","_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"tmp":"tmp/kloudy_0.4.2_1791262752955_0.6988072240062966","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"kloudy","version":"0.4.3","license":"Apache-2.0","_id":"kloudy@0.4.3","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"homepage":"https://kloudy.ai/install","bugs":{"url":"https://kloudy.ai/support"},"bin":{"kloudy":"bin/entry.mjs"},"dist":{"shasum":"142e9c11d32fac7cbc08b616929b4cd16fbfd6d5","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-0.4.3.tgz","fileCount":43,"integrity":"sha512-QzUAC67qHV4juaNf+161E6JafrGKdR5fFE3UPrN00wBh+zQ83GA3+RoQ69QjFBvRnhy+B700DOPxkEk2Ic80tA==","signatures":[{"sig":"MEYCIQC/+ZK3czA3u8ZYHMpXbCs9VHnpwDUCT0axNqUgKy9F8gIhAN+yXUOvx335eXOrE9qp0by1hAKSvAaTt02NsC38lVGP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIH3aJpf8Vb+cQvTX8FbvlqTgInJELiMZg1CzJzNdgAKZAiEA6QLjc2ldi8LRAHu7kyVi2aJ9P3Dda92K22cYHPUuLXI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2219239},"type":"module","_from":"file:C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-09-26\\let-s-plan-this-out-kloudy\\kloudy-open\\.cache\\registry-release\\kloudy-0.4.3.tgz","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./conversation":"./src/conversation.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"mcpName":"ai.kloudy/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","build:approval":"node scripts/build-approval.mjs"},"_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"_resolved":"C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-09-26\\let-s-plan-this-out-kloudy\\kloudy-open\\.cache\\registry-release\\kloudy-0.4.3.tgz","_integrity":"sha512-QzUAC67qHV4juaNf+161E6JafrGKdR5fFE3UPrN00wBh+zQ83GA3+RoQ69QjFBvRnhy+B700DOPxkEk2Ic80tA==","_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"tmp":"tmp/kloudy_0.4.3_1791315946211_0.3358578368992031","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"kloudy","version":"0.4.4","license":"Apache-2.0","_id":"kloudy@0.4.4","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"homepage":"https://kloudy.ai/install","bugs":{"url":"https://kloudy.ai/support"},"bin":{"kloudy":"bin/entry.mjs"},"dist":{"shasum":"f237b234cadf78a9f4a86eed717a967565bd7c28","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-0.4.4.tgz","fileCount":45,"integrity":"sha512-R0doi3WkKDGKPpRnj3F20oaNleu++PUPEhQ2OgC+XRxNE2hug2IF3fjyuDUXRb/jrha1n18VPm5xCOO3Y8oyhw==","signatures":[{"sig":"MEQCIGaUrpRIGiQXXLFjIuDGKCAxHb/M7XGjyNF5zT3RDdloAiBHetMHSgDEK2R7ullOUqwXYm79wLZs9aQD9fif6heiWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD4FAAg6I7ZF074Xv6FSzjPKSD6c/QVUpNusFrdF9o6kQIhALqyc9DSbJsm6x4EGFDu28t7Uei8Hm6+21HZFUSTysov","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3596448},"type":"module","_from":"file:C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-09-26\\let-s-plan-this-out-kloudy\\kloudy-open\\.cache\\registry-release\\kloudy-0.4.4.tgz","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./conversation":"./src/conversation.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"mcpName":"ai.kloudy/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","build:approval":"node scripts/build-approval.mjs"},"_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"_resolved":"C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-09-26\\let-s-plan-this-out-kloudy\\kloudy-open\\.cache\\registry-release\\kloudy-0.4.4.tgz","_integrity":"sha512-R0doi3WkKDGKPpRnj3F20oaNleu++PUPEhQ2OgC+XRxNE2hug2IF3fjyuDUXRb/jrha1n18VPm5xCOO3Y8oyhw==","_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"tmp":"tmp/kloudy_0.4.4_1791372236996_0.7038855927934824","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"kloudy","version":"0.4.5","license":"Apache-2.0","_id":"kloudy@0.4.5","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"homepage":"https://kloudy.ai/install","bugs":{"url":"https://kloudy.ai/support"},"bin":{"kloudy":"bin/entry.mjs"},"dist":{"shasum":"9cbf1246124d0d1cadf6a8677d57aab7c90ee2cb","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-0.4.5.tgz","fileCount":46,"integrity":"sha512-9fLXoAhcKxU4uoJuVPvOnaEt4IdT6QBOk3YMPDPLeuMx1ZRhPgUei313l43Qi8vutXld27rpQKcSLp6Bzs/oYg==","signatures":[{"sig":"MEUCID+N0/RT+Fj18TB2jbGi6hrYy30N2YN7qaZk3zhfuQ25AiEAhNhGmEqBVKuJkyfu4f97u5oPNoixyJyX7iqRUDHKRZc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCznX0REUr5ZrbydjNdyLpeFTK/6EBjqX9dutygGKtdYgIgGW8imTPVt6qEPWw5fWqNwseZuWRAOa72FsGwoI6AkHo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3614404},"type":"module","_from":"file:C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-10-09\\t82-release\\npm-out\\kloudy-0.4.5.tgz","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./conversation":"./src/conversation.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"mcpName":"ai.kloudy/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","build:approval":"node scripts/build-approval.mjs"},"_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"_resolved":"C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-10-09\\t82-release\\npm-out\\kloudy-0.4.5.tgz","_integrity":"sha512-9fLXoAhcKxU4uoJuVPvOnaEt4IdT6QBOk3YMPDPLeuMx1ZRhPgUei313l43Qi8vutXld27rpQKcSLp6Bzs/oYg==","_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"tmp":"tmp/kloudy_0.4.5_1791573281867_0.001109170434972162","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"kloudy","version":"0.4.6","license":"Apache-2.0","_id":"kloudy@0.4.6","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"homepage":"https://kloudy.ai/install","bugs":{"url":"https://kloudy.ai/support"},"bin":{"kloudy":"bin/entry.mjs"},"dist":{"shasum":"99fc92e588eeb73edad7fd6d111fca7d3e5b8ac3","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-0.4.6.tgz","fileCount":46,"integrity":"sha512-WfgGW3wRE1yDAaAJYGf0SvAsfKz6dbbxYWQL/pgvBVi8gDzZZT2Wy/UVqQ+AihdI4hqeye6VVvMzr4L4DqOuUQ==","signatures":[{"sig":"MEUCICgbYXEDKUCnBZSbgWogpmCV2ol2hcMLol9NNdeX2Fp8AiEA6BMpxxh5Lza9nUXDO/Qh95PUWoDdszsZLcr2Kw5VqiA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDrkS7MTQqQbmlcWX5h9fz8JxDmA0kiVL0MPt9A1JmS/AiEAnevwPOubduSD9lK39lsd1ynwuF4xOS1TbKDOBdsE0zA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3616992},"type":"module","_from":"file:C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-10-09\\task\\ide-release-readiness\\kloudy-0.4.6.tgz","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./conversation":"./src/conversation.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"mcpName":"ai.kloudy/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","build:approval":"node scripts/build-approval.mjs"},"_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"_resolved":"C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-10-09\\task\\ide-release-readiness\\kloudy-0.4.6.tgz","_integrity":"sha512-WfgGW3wRE1yDAaAJYGf0SvAsfKz6dbbxYWQL/pgvBVi8gDzZZT2Wy/UVqQ+AihdI4hqeye6VVvMzr4L4DqOuUQ==","_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"tmp":"tmp/kloudy_0.4.6_1791702903456_0.8234956366397994","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"kloudy","version":"0.4.7","license":"Apache-2.0","_id":"kloudy@0.4.7","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"homepage":"https://kloudy.ai/install","bugs":{"url":"https://kloudy.ai/support"},"bin":{"kloudy":"bin/entry.mjs"},"dist":{"shasum":"964ff3e120623eb1333b8055c96806886836a2b7","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-0.4.7.tgz","fileCount":47,"integrity":"sha512-o0HC7ldH72K1l073vFOSMRAba0rmUHz1c/WtHPhULcd3lzKaZJmccviE+BGka/Bql/wOElERD7Oohx9he3w+aA==","signatures":[{"sig":"MEQCIDPqyL+5jZTdBVo7YK1KEAHSelo3Ea9FVMobz4fxIylMAiANnY5+u7ap1aFyXrO1rIPhxXWoX6CISjYviAlmPpmM4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICi1bOYutQH8waZcxmS7EdAOKOFyNlZmUBDWX+eHVCk+AiBKS5Jn3PmHRqCFKO5NAzNF8gxSmUy0iHtjzY9rqhRCHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3621951},"type":"module","_from":"file:C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-10-09\\task\\kloudy-0.4.7\\.cache\\registry-release\\kloudy-0.4.7.tgz","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./conversation":"./src/conversation.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"mcpName":"ai.kloudy/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","build:approval":"node scripts/build-approval.mjs"},"_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"_resolved":"C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-10-09\\task\\kloudy-0.4.7\\.cache\\registry-release\\kloudy-0.4.7.tgz","_integrity":"sha512-o0HC7ldH72K1l073vFOSMRAba0rmUHz1c/WtHPhULcd3lzKaZJmccviE+BGka/Bql/wOElERD7Oohx9he3w+aA==","_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"tmp":"tmp/kloudy_0.4.7_1791784404117_0.7415164766635023","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"kloudy","version":"0.4.8","license":"Apache-2.0","_id":"kloudy@0.4.8","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"homepage":"https://kloudy.ai/install","bugs":{"url":"https://kloudy.ai/support"},"bin":{"kloudy":"bin/entry.mjs"},"dist":{"shasum":"216f6b47689f0c8b089e07f91ae327ac55f1ee65","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-0.4.8.tgz","fileCount":48,"integrity":"sha512-vfzVGfoZuWALOzv4AXPJouTsgfWKGrcORGoapvdOZ8tbIj4i86s/NJDahjkjPF4Q0SDGoPxv+BgGsrWxE/4cEg==","signatures":[{"sig":"MEYCIQCjaERmIm8DIvFSQNrZxR+NUvdTx2CyRm09n0pXFPCorAIhAKDKMpUfGDqsHhIDuKHQVbMf1gJ1FU5EHb6DayzJc/qH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCID+S2hPPeovP83vafUTCQKTUOE6+0vSAaLArn9XlVaSCAiEA3ev/+CnPblxOjSjoMGw11WHgC6kst947ZGTaS7ZxBtM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3630242},"type":"module","_from":"file:C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-10-09\\task\\kloudy-0.4.8\\.cache\\registry-release\\kloudy-0.4.8.tgz","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./conversation":"./src/conversation.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"mcpName":"ai.kloudy/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","build:approval":"node scripts/build-approval.mjs"},"_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"_resolved":"C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-10-09\\task\\kloudy-0.4.8\\.cache\\registry-release\\kloudy-0.4.8.tgz","_integrity":"sha512-vfzVGfoZuWALOzv4AXPJouTsgfWKGrcORGoapvdOZ8tbIj4i86s/NJDahjkjPF4Q0SDGoPxv+BgGsrWxE/4cEg==","_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"tmp":"tmp/kloudy_0.4.8_1791792189585_0.2364036526874178","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"kloudy","version":"1.0.0","license":"Apache-2.0","_id":"kloudy@1.0.0","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"homepage":"https://kloudy.ai/install","bugs":{"url":"https://kloudy.ai/support"},"bin":{"kloudy":"bin/entry.mjs"},"dist":{"shasum":"713951ee0ee3e3be72c86e8a3dd44ba75150835b","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-1.0.0.tgz","fileCount":52,"integrity":"sha512-9aVjipJPcniQd87j6TsSfnlDNbN8DwaZ2XAH8boLD7UUwNr3eXsjfJG0KfOdAVETBh64LDi4fmdEBBm/UcS5lg==","signatures":[{"sig":"MEUCIQDXZJduSatNTQoBtma8lOy0HBiFVUjqFo8isu7OZOnlzQIgWrbbkgFRKEKDl5bGGMDloLeKg31LMYsGLTUlDOA0uEI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCGq4BxsCrNlhgWzRpwXFPpDGIaHzJmjolbsfDNRQVI/wIhAI3q+n5n8KS5v7W5uJNw4AD/ydTflcHbWUDNY6zlTkMb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4085806},"type":"module","_from":"file:C:\\Users\\Flying Phoenix PCs\\.sensai\\tmp-kloudy-050-build\\kloudy-1.0.0.tgz","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./conversation":"./src/conversation.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"mcpName":"ai.kloudy/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check bin/entry.mjs && node --check src/bots.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","bots:bundle":"node scripts/bundle-bots-catalog.mjs --subset full","build:approval":"node scripts/build-approval.mjs"},"_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"_resolved":"C:\\Users\\Flying Phoenix PCs\\.sensai\\tmp-kloudy-050-build\\kloudy-1.0.0.tgz","_integrity":"sha512-9aVjipJPcniQd87j6TsSfnlDNbN8DwaZ2XAH8boLD7UUwNr3eXsjfJG0KfOdAVETBh64LDi4fmdEBBm/UcS5lg==","_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"tmp":"tmp/kloudy_1.0.0_1794362411862_0.7561135137815792","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"kloudy","version":"1.0.1","license":"Apache-2.0","_id":"kloudy@1.0.1","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"homepage":"https://kloudy.ai/install","bugs":{"url":"https://kloudy.ai/support"},"bin":{"kloudy":"bin/entry.mjs"},"dist":{"shasum":"a10d243c2e9ef0a34677ecbd6c703bbadac2bcd8","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-1.0.1.tgz","fileCount":54,"integrity":"sha512-B4h1cMyPbh1U5PoGHi8yL7ebk6KX2pqBHFwGdpltFoMbYgR7B0A8zhNzC8tv0OMBqxHwbhajfhYqZa7hHFwWhg==","signatures":[{"sig":"MEUCIQDex7XNhR68FBUK/KuPsI1gY1lIuVcAf+fIH5+gqldkOwIgKEujG6KP1ANRGUPZSnj6MmE4kALJlup653/Au0GwylY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCGm4JWS/6Kz4CpkF7dAv0jDe04W6OPLn9M/lerbE9kEwIhAIQ+HG367LVmRPvMFyw/8lcracgszMlSuy04AMZPnjKq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4110410},"type":"module","_from":"file:C:\\Users\\Flying Phoenix PCs\\.sensai\\tmp-kloudy-recommend-20261113\\kloudy-1.0.1.tgz","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./conversation":"./src/conversation.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"mcpName":"ai.kloudy/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check bin/entry.mjs && node --check src/bots.mjs && node --check src/recommend.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","bots:bundle":"node scripts/bundle-bots-catalog.mjs --subset full","build:approval":"node scripts/build-approval.mjs"},"_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"_resolved":"C:\\Users\\Flying Phoenix PCs\\.sensai\\tmp-kloudy-recommend-20261113\\kloudy-1.0.1.tgz","_integrity":"sha512-B4h1cMyPbh1U5PoGHi8yL7ebk6KX2pqBHFwGdpltFoMbYgR7B0A8zhNzC8tv0OMBqxHwbhajfhYqZa7hHFwWhg==","_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"tmp":"tmp/kloudy_1.0.1_1794564703364_0.1056020970985656","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"kloudy","version":"1.0.2","license":"Apache-2.0","_id":"kloudy@1.0.2","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"homepage":"https://kloudy.ai/install","bugs":{"url":"https://kloudy.ai/support"},"bin":{"kloudy":"bin/entry.mjs"},"dist":{"shasum":"b0132e9483ef5162645db8b260567deec1146480","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-1.0.2.tgz","fileCount":56,"integrity":"sha512-I7LsT631IxFad/UJdfvAWs6+qSKRY2l5oWMAdNw6wwcb8OixsJE66doZr1+gBdoznH2axMtdave6DVPp61A61A==","signatures":[{"sig":"MEYCIQCY81cvmrxE86Z7JLSKjH1XOZNKyPnWwsOYWoTg9gAwrgIhANqslok0eL3PpG4NXKkuycU69bV7ZALb+vDaS2zZbHyq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD1fg5FStaRlXxQ8/g04uCCQxFd0xlU/QG1rJAh08IMhgIhALFi8V0mNxOwmmNZT6BSKauzi+W+CiWHFNz95D1t6/q+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4146664},"type":"module","_from":"file:C:\\Users\\Flying Phoenix PCs\\.sensai\\tmp-kloudy-recommend-102-20261113\\kloudy-1.0.2.tgz","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./conversation":"./src/conversation.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"mcpName":"ai.kloudy/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check bin/entry.mjs && node --check src/bots.mjs && node --check src/recommend.mjs && node --check src/scores.mjs && node --check src/feedback.mjs && node --check scripts/aggregate-feedback-scores.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","bots:bundle":"node scripts/bundle-bots-catalog.mjs --subset full","build:approval":"node scripts/build-approval.mjs"},"_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"_resolved":"C:\\Users\\Flying Phoenix PCs\\.sensai\\tmp-kloudy-recommend-102-20261113\\kloudy-1.0.2.tgz","_integrity":"sha512-I7LsT631IxFad/UJdfvAWs6+qSKRY2l5oWMAdNw6wwcb8OixsJE66doZr1+gBdoznH2axMtdave6DVPp61A61A==","_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"tmp":"tmp/kloudy_1.0.2_1794569936437_0.013903514991789545","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"_id":"kloudy@1.0.3","bin":{"kloudy":"bin/entry.mjs"},"bugs":{"url":"https://kloudy.ai/support"},"dist":{"shasum":"3db62780513715a23a14c3e8a4be5f157b8b9ede","tarball":"https://registry.npmjs.org/kloudy/-/kloudy-1.0.3.tgz","fileCount":57,"integrity":"sha512-EW/qVzTRL2Tf6nrLWi5D7bqpGGNf49NZeDHzjhcKYE5jnGEJCquk6KnEusRuM6P2RyA20BtvaGbeLs+0Edz5hA==","signatures":[{"sig":"MEQCIANurIhWgMXiylRNfyFu+qu3UBnnTjiHLEA6BNNB5oyOAiA/g6xTDo780lzEtbuPykMmAE1oMO4TVCyAUF0SS4ehuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDXzxqj27VgHmm/wfr+81rRifk4ZNV1n4rpwPdgx4E/KAiEApYWgz5HyBijGM1smCj1j6h8tpW4aeb/lt1ab51a2ta8="}],"unpackedSize":4166411},"name":"kloudy","type":"module","_from":"file:C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-11-04\\kloudbar\\reference-review\\foundation031-release-1.0.3\\kloudy-1.0.3.tgz","engines":{"node":">=20.19.0"},"exports":{".":"./src/client.mjs","./mcp":"./src/mcp.mjs","./sdf":"./src/sdf.mjs","./wrap":"./src/wrap.mjs","./httpk":"./src/httpk.mjs","./query":"./src/query.mjs","./hosted":"./src/hosted.mjs","./models":"./src/models.mjs","./public":"./src/public.mjs","./replies":"./src/replies.mjs","./session":"./src/connection.mjs","./strings":"./src/strings.mjs","./activity":"./src/activity.mjs","./conversation":"./src/conversation.mjs","./host-interface":"./src/host-interface.mjs","./status-indicator.css":"./src/status-indicator.css"},"license":"Apache-2.0","mcpName":"ai.kloudy/kloudy","scripts":{"test":"node --test test/*.test.mjs","check":"node --check bin/kloudy.mjs && node --check bin/entry.mjs && node --check src/bots.mjs && node --check src/recommend.mjs && node --check src/scores.mjs && node --check src/feedback.mjs && node --check scripts/aggregate-feedback-scores.mjs && node --check src/client.mjs && npm test","proof":"node scripts/prove.mjs","start":"node bin/kloudy.mjs","bots:bundle":"node scripts/bundle-bots-catalog.mjs --subset full","build:approval":"node scripts/build-approval.mjs"},"version":"1.0.3","_npmUser":{"name":"patternaftererror","email":"gio@tensorverse.ai"},"homepage":"https://kloudy.ai/install","_resolved":"C:\\Users\\Flying Phoenix PCs\\Documents\\Codex\\2026-11-04\\kloudbar\\reference-review\\foundation031-release-1.0.3\\kloudy-1.0.3.tgz","_integrity":"sha512-EW/qVzTRL2Tf6nrLWi5D7bqpGGNf49NZeDHzjhcKYE5jnGEJCquk6KnEusRuM6P2RyA20BtvaGbeLs+0Edz5hA==","_npmVersion":"10.9.2","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","directories":{},"maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"_nodeVersion":"23.10.0","dependencies":{"ajv":"8.20.0","zod":"4.6.5","smol-toml":"1.9.0","ajv-formats":"3.0.1","js-tiktoken":"1.0.21","jsonc-parser":"3.3.1","@modelcontextprotocol/sdk":"1.31.0","@modelcontextprotocol/ext-apps":"2.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"0.28.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/kloudy_1.0.3_1794652892908_0.41254247340524697"}}},"time":{"created":"2026-10-04T08:26:26.593Z","modified":"2026-11-14T10:41:33.442Z","0.4.0":"2026-10-04T08:26:26.946Z","0.4.1":"2026-10-04T19:02:00.484Z","0.4.2":"2026-10-06T04:59:13.047Z","0.4.3":"2026-10-06T19:45:46.332Z","0.4.4":"2026-10-07T11:23:57.171Z","0.4.5":"2026-10-09T19:14:42.014Z","0.4.6":"2026-10-11T07:15:03.584Z","0.4.7":"2026-10-12T05:53:24.223Z","0.4.8":"2026-10-12T08:03:09.706Z","1.0.0":"2026-11-11T02:00:11.992Z","1.0.1":"2026-11-13T10:11:43.498Z","1.0.2":"2026-11-13T11:38:56.582Z","1.0.3":"2026-11-14T10:41:33.048Z"},"bugs":{"url":"https://kloudy.ai/support"},"license":"Apache-2.0","homepage":"https://kloudy.ai/install","description":"Ask for Kloudy: CLI, MCP and SDK clients for the same scoped engine session.","maintainers":[{"name":"patternaftererror","email":"gio@tensorverse.ai"}],"readme":"# Kloudy â€” add it to your editor\r\n\r\nConnect your MCP client to https://kloudy.ai/mcp for the current remote catalog.\r\n\r\n```sh\r\nnpx -y kloudy@latest\r\nnpx -y kloudy@latest find github MCP tools\r\nnpx -y kloudy@latest mcp\r\n```\r\n\r\nNode.js 20.19+ is required. Run `npx -y kloudy@latest` to install. Optionally, pin a version for a controlled environment instead of following latest.\r\n\r\nNo arguments detects Cursor, VS Code, Claude Desktop, Claude Code, Windsurf and Codex configurations and asks before writing **each** one. Declining or non-interactive input changes nothing. Existing servers and custom Kloudy entries are preserved. Recognized frozen Kloudy cache paths or pinned commands can be repaired after per-client confirmation. JSONC comments in VS Code and TOML comments in Codex remain intact. Backups are created; malformed or concurrently changed configs are left untouched. Normal OS file permissions apply on Windows; protect config files that contain keys.\r\n\r\nThe remote endpoint is https://kloudy.ai/mcp. Public catalog discovery works without a key and makes no model call. It returns up to five public metadata candidates, not execution grants. Account actions still require an existing authorized Kloudy key; self-service engine-key issuance is not connected. If you already have one, set `KLOUDY_MCP_TOKEN` privately in your environment; the installer asks before storing it in a client's headers (or Claude Desktop's stdio environment). Keys are never accepted as command-line arguments or printed by the installer.\r\n\r\nFor an existing scoped assistant connection, select its private file explicitly:\r\n\r\n```sh\r\nnpx kloudy@latest mcp --connection /private/path/connection.json\r\n```\r\n\r\n`KLOUDY_CONNECTION` is the equivalent private-file environment setting. The file must contain `endpoint` equal to `https://kloudy.ai/mcp`, a valid `access_token`, and a future Unix-seconds `expires_at`. A file and `KLOUDY_MCP_TOKEN` cannot be combined. The remote proxy never silently reads a default connection file, issues permission, or upgrades a discovery key.\r\n\r\nAuthenticated room messaging is available through the existing `kloudy` tool's `operation: \"room\"` with `room_operation: \"send\"`, `\"inbox\"`, or `\"reply\"` and the corresponding schema. The backend validates the exact project, authorized client and recipient. These are data transport operations: a queued message is not an assistant response, and installing this package does not enable unattended assistant turns or voice calls. Server enrollment and account permissions must already support the selected connection.\r\n\r\n`mcp` is a local stdio-to-Streamable-HTTP proxy; stdout contains MCP messages only. Direct questions and the proxy call the same remote server. Network failures and invalid keys fail explicitly. Resources are forwarded whenever the upstream supports them, including with autoupdate off. Catalog change notifications and a single reconnect after an explicit session-expired HTTP 404 remain gated by `KLOUDY_MCP_AUTOUPDATE=meta` or `notify`; the default is `off`. Ambiguous tool failures are never retried.\r\n\r\nInteractive cards require a host that supports MCP Apps. The proxy relays the supported Apps MIME capability; it does not claim sampling, roots or elicitation. Hosts without Apps can use named text choices, source links and readable resources. The one-shot CLI prints text rather than rendering an interactive card. When the hosted catalog offers visual setup choices, the IDE uses its own available tools and account terms to make a local mockup; Kloudy supplies data and does not invoke backend model/image generation. Resource hosting still has operational cost. Selecting a layout does not authorize installation, account connection, paid image APIs or deployment.\r\n\r\nThe existing SDK exports remain available under `kloudy/*`. For the pre-0.4 specialized engine CLI commands documented below, use `kloudy legacy <command>` (for example, `kloudy legacy init my-app`). The original CLI is retained in `bin/kloudy.mjs`.\r\n\r\nOffline bot catalog: `npx kloudy bots list|search|get|sync|works|broken|modalities`. Kloudy 1.0 bundles the full passing catalog (13,440 listings: 26 verified class A, 11,528 untested class B, 1,886 OSS/HF). Search uses that bundled snapshot, then the local cache. `get` uses a live hit when the API has one, and falls back to that snapshot when the live call misses, including HTTP 404. `--offline` stays on the snapshot. Default `kloudy bots sync` still fetches `https://kloudy.ai/api/deployable-bots/export`; that production URL will not have this 1.0 catalog until a later deploy, so the published tarball does not depend on sync for class B.\r\n\r\n## For AI agents: how to use Kloudy\r\n\r\nThe catalog is **kloudy 1.0**: 13,440 bots and 44 modality tags, shipped in this package (npm version 1.0.3). Recommend and the offline bots commands read that bundled snapshot, then the local cache. Kloudy never runs an LLM. Ranking is deterministic: the same goal and the same score overrides return the same JSON.\r\n\r\nWhen a network is available, `recommend` may GET `https://kloudy.ai/api/feedback/scores` and cache those overrides for about 24 hours in the Kloudy data directory (`~/.kloudy`, or `KLOUDY_DATA_DIR`). Overrides demote, exclude, or boost a bot after the class tier. `--offline`, a failed request, or a missing scores file leaves ranking on the bundled catalog order.\r\n\r\nClasses:\r\n\r\n- **A** â€” live HTTP MCP endpoints.\r\n- **B** â€” npx or uvx packages.\r\n- **O** â€” open source and Hugging Face listings.\r\n\r\nList the modality tags:\r\n\r\n```sh\r\nnpx kloudy@latest bots modalities --offline\r\n```\r\n\r\nTurn a plain-language goal into a stack. `recommend` and `stack` are the same command. Add `--json` when you need parseable output (`schema` is `kloudy.recommend/1`). `--limit <n>` caps each part (`n` is an integer from 1 to 20; the default is 5). `--offline` skips the score-override request.\r\n\r\n```sh\r\nnpx kloudy@latest recommend \"<goal>\" --json\r\nnpx kloudy@latest recommend \"<goal>\" --json --limit 5\r\nnpx kloudy@latest stack \"<goal>\" --json --limit 5 --offline\r\nnpx kloudy@latest feedback --stack <stackId> --bot <botId> --result worked|failed|partial [--reason <short>] [--client <name>]\r\nnpx kloudy@latest feedback --flush\r\nnpx kloudy@latest bots search <words> --offline\r\nnpx kloudy@latest bots get <id> --offline\r\n```\r\n\r\nEach recommended bot includes `id`, `class` (A, B, or O), `command`, `license`, a one-line `description`, and `why`. `command` is an `npx` or `uvx` invocation, or a URL for a live endpoint or source repo. Run or open that command when you want to install or connect. `recommend` itself does not install anything. Inspect a pick with `bots get` before running it.\r\n\r\nWrite the goal as one sentence per need, or as a comma-separated list of needs. A long sentence is still accepted. Clearer parts produce a clearer stack.\r\n\r\n`recommend` splits the goal on commas, semicolons, and the words `and` and `then`, and it also splits a clause when keywords hit different modalities. You get one section per part. Each part includes `candidatesTotal` (how many eligible candidates existed before the cap) and `bots` (the capped list). Narrow that capped list with the project you have open: language, frameworks, licenses, and tools already in the repo. Kloudy never runs an LLM and does not read the project to pick a bot.\r\n\r\nOrder is class A, then B, then O, then score override (boost, then unchanged, then demote), then the same primary-modality, keyword, score, and index ordering as catalog search. Exclude removes a bot before the cap. Familiar modality words such as transcribe, summarize, and database still return the top bots in that modality. A narrower need, such as a watch, a timer, Android sync, a meal plan, or a social post, keeps only bots that share a real keyword or a clearly related catalog name, id, or cap with that part. Unrelated bots are not filler. A part with no modality or no catalog row stays in `unmatched` with the part text and a reason. It is not dropped.\r\n\r\n`phone`, `call`, and `calls` are `audio` only when an audio cue is in the same part or clause (transcribe, transcription, voice, speech, audio, whisper, microphone, asr, phone call, or call audio). Otherwise phone, Android, and mobile are device sync, not audio.\r\n\r\nEach part includes `confidence` (`match`, `weak`, or `none`). Top-level `complete` is true only when every part is `match` and `gaps` is empty. `complete` false means the stack is partial. `gaps` lists unmatched and weak parts with the part text, confidence, and a reason. `kind` `catalog integration` means a catalog bot with an install or run command is a real but weak hit. `kind` `suggestion: build yourself / platform API` means the catalog does not cover the need (Wear OS sensor APIs, Health Connect, or the Facebook Graph API, for example). That suggestion is unverified non-catalog guidance, not a catalog bot.\r\n\r\nEvery recommend result includes `limit`, `stackId`, and `feedback`. `stackId` is a sha256 of the goal's parts plus the chosen bot ids. The same parts and the same picks always produce the same `stackId`. `feedback` is the command to run after you try a bot. Put that bot's id in place of `<id>`.\r\n\r\nAfter you try a stack, report whether it worked:\r\n\r\n```sh\r\nkloudy feedback --stack <stackId> --bot <botId> --result worked|failed|partial [--reason <short>] [--client <name>]\r\n```\r\n\r\n`--result` is `worked`, `failed`, or `partial`. `--reason` is optional and short: it is truncated to 80 characters, and a path, token, or email is dropped. `--client` is an optional tool name such as `cursor`, `claude`, `codex`, or `vscode`. It counts distinct clients. Do not pass a person, email, or account. The report is opt-in and anonymous. The payload may include only `stackId`, `botId`, `result`, an optional short `reason`, the kloudy version, and an optional client name. It never includes the goal text, personal info, file paths, environment, or tokens. The POST goes to `https://kloudy.ai/api/feedback`. If the network is down or the POST fails, the report is queued in the Kloudy data directory and sent on the next `kloudy feedback` or `kloudy feedback --flush`.\r\n\r\nScore overrides come from those anonymous reports. `scripts/aggregate-feedback-scores.mjs` is meant to run weekly Sunday 3:00 America/Phoenix. It writes `feedback-scores.json`. Bots with fewer than 3 reports are ignored. A bot is demoted after it fails for 3 or more distinct clients with a failure ratio of 60% or more. A bot is excluded after 10 or more reports with a failure ratio of 80% or more. A bot is boosted at 5 or more reports when at least 80% are `worked` and it is not demoted or excluded. `partial` counts as a report and counts as neither worked nor failed. Failure ratio is `failed` divided by all reports. Reports without a client still count toward ratios. They do not add a distinct client.\r\n\r\nText output includes Confidence, Candidates, Gaps, `limit`, `stackId`, `feedback`, and `complete=true` or `complete=false`. `--json` still prints only the JSON object.\r\n\r\nSingle-part example:\r\n\r\n```sh\r\nnpx kloudy@latest recommend \"voice assistant that transcribes phone calls\" --json\r\n```\r\n\r\nThat goal is one audio part. The first bot in the capped list is `httpk:npm:mendelio-voice-mcp` (class B, MIT, `npx -y mendelio-voice-mcp`).\r\n\r\nMulti-part example:\r\n\r\n```sh\r\nnpx kloudy@latest recommend \"voice assistant that transcribes calls, summarizes them, and stores them in a database\" --json\r\n```\r\n\r\nThat becomes three parts, not one blended search:\r\n\r\n1. `voice assistant that transcribes calls` â€” `audio` â€” `httpk:npm:mendelio-voice-mcp` â€” `npx -y mendelio-voice-mcp`\r\n2. `summarizes them` â€” `text` â€” `httpk:mcp:ai.liquidagent.api:liquid-agent` â€” `https://api.liquidagent.ai/mcp`\r\n3. `stores them in a database` â€” `database_access` â€” `httpk:npm:microsoft:postgres-mcp` â€” `npx -y @microsoft/postgres-mcp`\r\n\r\nThat control stack is complete (`complete` true). Each part is confidence `match`.\r\n\r\nA leftover clause such as `weave a basket` is listed under Unmatched (`no modality or catalog match`) and under Gaps. The goal is then `complete` false.\r\n\r\nOn first contact, read the agent guide and the command list:\r\n\r\n```sh\r\nnpx kloudy@latest agents\r\nnpx kloudy@latest --help\r\n```\r\n\r\nOne-click Cursor / VS Code setup: https://kloudy.ai/install. Browser deep links ask the editor to install; opening a link is not proof that installation completed. ChatGPT requires its directory program; this package does not modify ChatGPT.\r\n\r\n## Earlier engine adapter documentation\r\n\r\n# Ask for Kloudy\r\n\r\nOne CLI, one MCP, tools appear when needed. CLI, MCP and the Node.js SDK use the same scoped Blackbox session. This repository contains the public client adapters and local HTTPK wrapper, not the private router, vault or account service.\r\n\r\n## Build a first app without an account\r\n\r\n```sh\r\nnpx -y kloudy@latest legacy init my-kloudy-app\r\ncd my-kloudy-app\r\nnpm install\r\nnpm start\r\nnpm run card -- /world\r\n```\r\n\r\n`init` creates a new folder and refuses to overwrite an existing one. `kloudy read https://example.com` and `kloudy card /world` also work directly. These are real public reads, with no model or account call; shared rate limits and website restrictions apply. The public Node exports are `readPublicPage` and `readCard` from `kloudy/public`. Source HTML stays data, never executable UI. The starterâ€™s separate toolbox example requires an existing private connection and selects definitions without executing them.\r\n\r\nDeveloper guide and availability: https://kloudy.ai/build. Customer self-registration is separate from these working public examples.\r\n\r\n## Install and run\r\n\r\nNode.js 20.19 or newer is required. Use the remote endpoint or the current npm package; the hosted door has an MCP Registry listing.\r\n\r\n```sh\r\nnpx -y kloudy@latest\r\n```\r\n\r\nFrom a source checkout: `npm ci`, `npm test`, `node bin/entry.mjs` (or `node bin/kloudy.mjs help`). There is no install-time script that edits your IDE.\r\n\r\nAsk for Kloudy and register with email plus short 2FA; the intended account service then supplies a session cookie, tag or OAuth connection. **That Core registration endpoint is not delivered yet.** `kloudy login` reports this clearly, collects no email/code and exits 3. This package does not create fake accounts or mint production credentials.\r\n\r\nAn existing scoped Blackbox connection can be supplied through a private connection file created by the native host/operator. It contains the engine origin and access token; do not put it in Git, a prompt or public page. `KLOUDY_CONNECTION` can refer to its path so you do not repeat `--connection`.\r\n\r\n```sh\r\nkloudy ask \"Build an app to create private notes\" --connection /private/connection.json --candidates discovery-cards.json\r\nkloudy call bbe_notes_create --connection /private/connection.json --inputs note-inputs.json\r\nkloudy status --connection /private/connection.json\r\nkloudy cancel --connection /private/connection.json\r\n```\r\n\r\n`ask` accepts up to 16 supplied KLDY/FHIR metadata candidates. Blackbox ranks them and supplies at most one authorized definition. No client-side scoring or whole-server catalog download substitutes for the engine. With no candidates, the client asks the existing destination route for an information card and returns an empty Toolbox; automatic catalog/web discovery needs the engine feed. No match, expired grants and missing registration remain explicit. Only `call` submits the chosen tool inputs, and the engine retains exact approval authority.\r\n\r\n## One MCP in the IDE\r\n\r\n```sh\r\nkloudy                         # introduce Kloudy and this project; ask once to install\r\nkloudy introduce --decision no # stay chat-only\r\nkloudy install --ide codex     # explicit consent; user-level installation\r\nkloudy install --ide cursor --connection /private/connection.json\r\n# Once a hosted MCP endpoint and scoped user grant are provisioned:\r\nkloudy install --ide codex --url https://kloudy.ai/mcp --token-env KLOUDY_MCP_TOKEN\r\n```\r\n\r\nOne user installation covers projects. Cursor, Claude Code, VS Code and Codex receive their own supported **user-level** MCP config, without modifying project files. The installer preserves other entries, backs up changes, and leaves conflicting Kloudy entries untouched. Codex TOML comments are preserved. JSONC/non-JSON configs are left unchanged. Cursor and Claude receive a user slash command; every MCP host receives a `kloudy` prompt and default introduction operation. Host approval/trust policies remain in force. The local installation record is not an account or permission grant.\r\n\r\nBare `kloudy`, `Kloudy`, `/kloudy`, and `ask Kloudy` in this CLI return a project-aware introduction before opening an engine session. The MCP tool does the same for `introduce` or an exact attach intent. It classifies known manifest names/dependencies, looks up at most three relevant public catalog names, and asks one install/connect question. Catalog candidates are explicitly non-executable until granted. It never reads `.env`, source contents or another project's checkpoint. With an HTTPK connection, the introduction comes from the real engine's `bbe.attach.v1` intent payload. Without a reachable account/session, the client provides a clearly marked deterministic public-catalog fallback. An unconfigured IDE cannot discover a CLI just from an ordinary chat word: install the MCP adapter first, then invoke the tool or `/kloudy` prompt.\r\n\r\nThe remote option stores only a bearer **environment-variable reference**. `https://kloudy.ai/mcp` now serves authenticated MCP alongside its human guide. The current hosted engine is a finite development service with separately scoped Notes and bounded Base chain-head read clients; it is not open customer registration. The default local stdio adapter works without hosting. With no explicit connection path, the legacy CLI, legacy MCP and SDK use `~/.kloudy/connection.json`. The remote `kloudy mcp` proxy uses only an explicit connection file or environment token, as described above.\r\n\r\nThe MCP tool list initially has one `kloudy` entry. An `ask` operation adds only the selected tool as `selected_<engine-name>`. Selecting a new task replaces it; running it clears the selection. Status/cancellation use the Kloudy entry and the same engine request. Model-visible outputs never contain the bearer.\r\n\r\n## SDK\r\n\r\n```js\r\nimport {withConnection} from 'kloudy/session';\r\nconst result = await withConnection('/private/connection.json', client =>\r\n  client.ask('Find a tool for this task', {candidates, lane: 'non_medical'})\r\n);\r\nconsole.log(result.toolbox); // zero or one engine-selected definition\r\n```\r\n\r\n`KloudyClient` and `httpTransport` are also exported for trusted Node/native hosts with their own credential storage. Never embed a provider token in browser code. Voice, text, exchange, listing and hosting tool packs use this same ask/call boundary as their capabilities are registered; this client does not claim those providers are all live.\r\n\r\nThe connection adapter stores only session/selection/request references in a private local checkpoint. CLI, MCP and SDK using the same connection file share that checkpoint. A lock prevents simultaneous mutation; no blind mutation retry is performed. If a process is forcibly killed, first verify it is stopped, then remove the empty `kloudy-open-session-<connection-hash>.json.lock` directory next to its connection file. Do not remove a lock held by a live client. Backend expiry, reauthorization, cross-device delegation and HTTPK token refresh remain engine/Core operations.\r\n\r\n## Local HTTPK wrapper\r\n\r\n`kloudy wrap --config /private/wrap.json` runs an operator-configured stdio MCP behind an authenticated, stateless Streamable HTTP endpoint. The config supplies `command`, `args` and `tools` (the exact selected tool names). An optional `env` contains only the deliberately passed upstream environment. Supply the wrapper bearer through `KLOUDY_WRAP_TOKEN`, obtained from the owning host/grant service. The token is never printed.\r\n\r\nThe listener binds loopback. It rejects browser Origin requests, non-loopback Host headers, invalid/missing bearer, oversized bodies and tools outside its allowlist. Upstream stderr is not forwarded. Upstream crashes return 502 and timeouts return 504. Maximum two simultaneous upstream processes; each closes after its request. Local-file tools stay local. Public HTTPS hosting, Core identity, VaultKeeper token validation/rotation and managed reconnect need their owning edge services; this package does not expose a local bearer endpoint publicly or create permanent grants.\r\n\r\nMCP transport compatibility is pinned to the official SDK 1.31.0 and its 2025-11-25 handshake. Newer transport revisions require a tested upgrade; this is not an unversioned protocol claim.\r\n\r\n## Verification\r\n\r\n`npm test` covers real HTTP/stdio round trips, selected-tool isolation, auth/origin rejection, crash handling, shared SDK behavior, explicit approval and safe IDE installation.\r\n\r\nThe real-engine acceptance script uses a separately provisioned local Blackbox instance and synthetic public metadata, never a mock engine. It exercises CLI â†’ MCP â†’ SDK â†’ autonomous completed Notes result, with no extra approval call. It intentionally requires an explicit test flag:\r\n\r\n```sh\r\nnode scripts/prove.mjs --connection /private/test-connection.json --candidates /path/to/test-cards.json --approve-synthetic\r\n```\r\n\r\nThe proof writes `.cache/live-engine-proof.json` without credentials. A completed synthetic Notes result is not a claim of hosted registration, live provider discovery or unrelated integrations.\r\n\r\nProtocol references: [MCP SDK](https://ts.sdk.modelcontextprotocol.io/), [Cursor MCP](https://prod.cursor.com/help/customization/mcp), [Claude MCP](https://code.claude.com/docs/en/mcp), [VS Code MCP](https://code.visualstudio.com/docs/agent-customization/mcp-servers).\r\n\r\n## Approval defaults\r\n\r\nCLI and IDE MCP are autonomous: the host permission policy and scoped engine grant govern execution. There is no CLI approve command or confirm option. The SDK accepts `mode: 'autonomous'` (default) or `mode: 'confirm'`; for example `withConnection(file, work, {mode: 'confirm'})` for a trusted confirm-mode embed. Do not use CLI-issued credentials for a browser embed. The engine binds the surface to the grant; clients cannot mint or relabel credentials.\r\n\r\nThe client verifies engine mode acknowledgment before routing. An older engine that still returns `awaiting_approval` in autonomous mode produces `engine_autonomy_not_supported`; it never fabricates a tap or calls approval automatically. Upgrade the engine or cancel that request. Hosted OAuth, credential refresh and public MCP deployment remain owned engine/Core capabilities.\r\n\r\n## Hosted HTTPK (0.3.0)\r\n\r\nA private connection may contain `endpoint: \"https://kloudy.ai/mcp\"`, `access_token` and `expires_at`, obtained through the owning grant service. The same CLI/MCP/SDK adapter then uses the deployed engine's HTTPK protocol. No user key belongs in this README, an install command or a prompt. The hosted development engine currently understands Notes actions such as `save note: ...` and `read note ID`; external discovery candidates are explicitly rejected on this limited transport.\r\n\r\nA standard remote MCP host sees one `kloudy` tool. `introduce` gets the engine greeting; `ask` returns the selected singular tool and exact arguments; `call` carries that selection; `status`/`cancel` use its receipt. The adapter forwards authority to Blackbox and never invents approvals, risk classifications, model retries or provider access. The hosted protocol is MCP 2025-06-18; the pinned official SDK negotiates it.\r\n\r\n`node scripts/prove-hosted.mjs` uses an in-memory, expiring test grant and a temporary user config to prove the real public MCP handshake, engine greeting, one selected tool, completed Notes receipt, idempotent replay and SDK readback. It does not claim a visual IDE session or the provider-model failure ladder was tested. Those remaining checks are recorded in Shared.\r\n\r\n## Selected Toolboxes â€” 0.3.1\r\n\r\nWith a scoped HTTPK connection, each ask returns its engine selection_id. Collect 1â€“16 distinct IDs from that same session. Assembly is passive: no model, action or approval runs.\r\n\r\n```sh\r\nkloudy ask \"read note NOTE_ID\" --connection /private/httpk.json\r\nkloudy ask \"save note: proposed draft\" --connection /private/httpk.json\r\n# Put only the returned selection IDs into selections.json as a JSON array.\r\nkloudy assemble --selections selections.json --connection /private/httpk.json\r\nkloudy call TOOL_NAME --selection SELECTION_ID --inputs exact-inputs.json --connection /private/httpk.json\r\n```\r\n\r\nSDK: client.assemble(ids), then client.call(name, exactArguments, {selectionId}). Local MCP and the public hosted MCP keep one kloudy gateway with operation assemble and selection_ids; operation call uses the exact selection_id, name and arguments. Assembly returns deduplicated tools and exact per-selection metadata, so two selections of one tool retain their distinct arguments. The engine validates ownership, grant scope and per-action authorization. No bulk execution or blind retry is added. Legacy local-engine connections retain their previous single-selection interface and explicitly reject HTTPK-only assembly.\r\n\r\nThis consumes deployed BBE 0.3.46. Executable sources are registered Notes today, not arbitrary external MCP/SDK wrappers. Permanent grants and dormant-connection lifecycle still follow the owning GlassBreak/provider services.\r\n\r\n## Explicit confirmation for embedded browser hosts\r\n\r\nOpen 0.3.4 adds `HttpkClient.confirm({selectionId, token, decision: 'approve', source: 'tap'})` for an existing confirm-mode connection. Pass the exact pending `approval.token`, or its integer `revision` instead, never both. Preserve the actual approval source (`tap`, `typed`, `os-voice`); do not label model text or external content as a user's approval. The engine still enforces risk, source, expiry and request binding. Autonomous IDE/CLI behavior is unchanged.\r\n\r\nThe same public MCP gateway accepts `operation: 'confirm'`, `selection_id`, `decision: 'approve'`, `source`, and exactly one of `token` or `revision`. Missing binding/source fails closed. `scripts/prove-confirmation.mjs` verifies a real bounded Base read, wrong-token denial, zero execution before approval and receipt replay using an existing finite grant from memory. No provider key is distributed.\r\n\r\n## IDE experience â€” 0.3.4\r\n\r\nAn already attached MCP host receives a welcome and current-project guidance, not another install question. Kloudy or /kloudy explicitly addresses the service; the IDE may use the same tools for relevant tasks without a prefix. The current task selects a small toolbox; a persistent account connection does not load its tools into every project.\r\n\r\nThe host guidance describes natural keep/cleanup requests and the authoritative lifecycle boundary. It does not pretend that saved mixed-tool workflows, dormant pruning, permanent grants, OAuth signup or user-key transfer have already shipped. Those require the existing engine/Core/GlassBreak interfaces. No synthetic authorization button or password/code collection is added. Kloudy.ai is the use/research surface; building remains in the user's IDE or Bot Boozle.\r\n# SDF yield layer\r\n\r\n`kloudy convert https://example.com` extracts a public page through Kloudy's bounded reader without a model call. Add `--resolution standard` for more detail; compact cards default to at most 8,192 UTF-8 JSON bytes. Try the same converter at [kloudy.ai/build](https://kloudy.ai/build#convert).\r\n\r\n```js\r\nimport {convertPage, convertPages} from 'kloudy/public';\r\nimport {validateSDF} from 'kloudy/sdf';\r\n\r\nconst card = await convertPage('https://example.com');\r\nconsole.log(validateSDF(card), card.summary.brief);\r\nconst list = await convertPages(['https://example.com', 'https://example.com/missing']);\r\nconsole.log(list.cards, list.reports); // Each unreadable source is reported.\r\n```\r\n\r\nMCP's single `kloudy` door also accepts `operation: \"convert\", url` or `operation: \"yield_list\", urls` (1â€“8). No account is needed for these public reads. The engine owns KLDY query matching and ranking. This client returns content and per-source conversion reports, never a ranked recommendation or permission to execute tools.\r\n\r\nCards validate against the unmodified SDF v0.2 root schema pinned to `sdfprotocol/sdf@e4619ad0b951ced8542692c6b624cb86794cb863` and the additional Kloudy webpage profile. This upstream machine-readable schema differs from its website examples: it uses `sdf:<sha256>`, `summary.brief`, `source.fetched_at`, and section `title`/`summary`. Schemas and upstream MIT notice ship in `schemas/` and at [kloudy.ai/schemas/sdf-webpage-v1.schema.json](https://kloudy.ai/schemas/sdf-webpage-v1.schema.json). `article.x-kloudy-webpage` is our explicit extractive subtype, not a claim that an arbitrary page is a news article. Empty entities mean no semantic entity extraction was performed.\r\n\r\nThe `extensions[\"x-kloudy\"]` object declares informational-only behavior, no capabilities, resolution, truncation, and unverified ownership/publication. Validation proves structure, not factual accuracy or source ownership. Source content remains untrusted. The reader does not sign in, run page scripts, bypass access controls, or guarantee extraction of text hidden behind JavaScript. Errors are reported instead. Compact output can exceed the size of an already-tiny source; no universal savings percentage is claimed.\r\n\r\nUnknown protocol/profile versions are rejected. Breaking card changes require a new profile major version; optional compatible additions keep the version. Card identity binds source URL and raw source hash. Retrieval timestamps can change without changing identity. Existing browser support for the older documented `sdf_`/`one_line` display format remains available.\r\n\r\n## Saved mixed strings\r\n\r\nThe private local `~/.kloudy/sources.json` maps trusted aliases to existing HTTPK connection files. `kind` describes the registered provider adapter; this does not create a missing SDK/CLI/MCP adapter or grant credentials.\r\n\r\n```json\r\n{\"notes\":{\"kind\":\"mcp\",\"connection\":\"notes-connection.json\"},\"catalog\":{\"kind\":\"sdk\",\"connection\":\"catalog-connection.json\"},\"build\":{\"kind\":\"cli\",\"connection\":\"build-connection.json\"}}\r\n```\r\n\r\nSave a selection file containing only references and goals, for example `[{\"source\":\"notes\",\"kind\":\"mcp\",\"goal\":\"Read my notes\"},{\"source\":\"catalog\",\"kind\":\"sdk\",\"goal\":\"Find this resource\"}]`.\r\n\r\n```sh\r\nkloudy strings save workspace --selections choices.json\r\nkloudy strings use workspace\r\nkloudy strings call workspace --tool s0_bbe_notes_read --inputs inputs.json\r\nkloudy strings keep workspace\r\nkloudy strings list\r\nkloudy strings prune\r\nkloudy strings remove workspace\r\n```\r\n\r\n`use` reselects through each source and returns up to eight distinct tools with source-bound call routes. It never automatically executes the tools. The engine validates exact owned selections at call time; a changed session requires reselection. Strings are project-scoped and stored privately, with no provider credentials or schema dumps. An explicit `prune` removes non-kept choices idle for 30 days. Normal reuse never silently deletes a saved configuration. Authoritative production-phase dormancy events are a separate Core/engine integration. This removes local saved choices, not shared provider keys. `keep` preserves reuse intent; it does **not** mint a permanent grant. GlassBreak service wiring remains an external dependency.\r\n\r\nSDK: `StringStore`/`localStrings` from `kloudy/strings`. MCP operations: `strings_save`, `strings_list`, `strings_use`, `strings_call`, `strings_keep`, `strings_remove`, `strings_prune` with `string_name`, `choices`, and, for calls, `name` and `arguments`. Mixed-adapter composition is covered by fixtures; production execution still requires each source's registered adapter and current grant.\r\n\r\n## Inline action approval\r\n\r\nThe stdio MCP server negotiates MCP Apps support. Supported hosts receive a resource with the engine's exact summary, risk and expiry, plus Approve/Cancel buttons. App-only tickets bind an exact engine selection; the engine approval token stays out of model-visible content. Expired, reused and missing tickets fail closed. Approval dispatch is not silently retried after an ambiguous failure. Restarting the server invalidates its ephemeral tickets; fetch the current engine state again.\r\n\r\nThis is action consent, not customer OAuth. Unsupported hosts do not gain an inline button by returning Markdown. The host must support MCP Apps and its app-only tool visibility rules. CLI autonomous behavior remains unchanged. Tests cover the protocol exchange and exact confirmation binding; acceptance in every third-party IDE and the hosted remote MCP surface is separate work.\r\n\r\n\r\n## Yield and query boundary\r\n\r\n`kloudy convert URL` and `convertPage` return SDF content; `kloudy query \"need\"` and `HttpkClient.query` ask Blackbox for ranked card references. Search grants no permission. The SDK `sdfIndex(cards, {discoveredVia: 'geo'})` from `kloudy/query` prepares bounded metadata for the existing operator-only engine import; it does not upload, register a tool, or grant access. Supply the actual SEO/GEO provenance, never guess it. `content_sha256` is the raw source body hash. Empty capability IDs deliberately avoid inferring tool access from prose.\r\n\r\nCompact cards fit **750 cl100k_base tokens**, measured over compact JSON including attribution and metadata, and at most 8 KiB UTF-8. The tokenizer runs locally with bundled ranks; no model or tokenizer service is called. Token counts vary across model families. Standard resolution is explicitly larger. Oversized attribution fails with a readable report rather than losing the source URL. Updated content gets a new deterministic ID; fetching the same source keeps its ID. The schema remains pinned to SDF 0.2.0 plus `kloudy.sdf.webpage/1`; unsupported versions fail validation. An index lifetime is distinct from long-term content recheck policy.\r\n\r\nType Kloudy in a connected IDE to receive the same old-school cloud welcome. Dot and Grok Boi use this same normal door. The host still must install/attach the client first and controls how text visuals and MCP Apps are rendered. Bot Boozle is the native ecosystem IDE; this client does not claim to deploy its sentence-navigation UI.\r\n\r\nA string deduplicates tool definitions, not owned selections. If two choices select the same tool with different arguments, both exact selection IDs remain in `routes`/`selections`; pass `--selection ID` on CLI calls or `{selectionId}` to `StringStore.call`. An ambiguous call fails without executing. MCP uses `selection_id`.\r\n\r\n## IDE activity indicator\r\n\r\nVersion 0.3.11 supplies the public host adapter `kloudy/activity` and stylesheet `kloudy/status-indicator.css`. A compatible host mounts the purple orb with Kloudy above it in its own status surface. Load the stylesheet with your app bundler, then:\r\n\r\n```js\r\nimport {mountStatusIndicator, observeClient} from 'kloudy/activity';\r\nconst indicator = mountStatusIndicator(statusBarElement);\r\nconst visibleClient = observeClient(client, event => indicator.update(event));\r\nawait visibleClient.call(selectedTool, inputs);\r\n// When this status surface closes:\r\nindicator.dispose();\r\n```\r\n\r\nNode hosts can use `withConnection(file, work, {onActivity})` and forward these bounded events over their existing trusted webview bridge. Events contain only schema/source/sequence/state/operation, never tool inputs, tokens or receipts. Pending work pulses; approval waits hold still; completed calls settle; failures visibly report failure. Concurrent reads keep the indicator busy until all outstanding work returns. Observer failures cannot retry or break an engine call. Reduced motion is honored.\r\n\r\nNative hosts may feed listening/speaking events only while their real OS voice operation is active. This client never records speech. Generic MCP cannot inject an orb into an arbitrary IDE status bar: actual integration in Bot Boozle or another IDE requires that host to mount the adapter. The preview at `node scripts/preview-indicator.mjs` labels its state buttons as simulations; it is not proof of deployment in every IDE.\r\n\r\nWallet preview: `kloudy wallet balance --connection FILE` or `kloudy wallet top_up --amount 10.00 --connection FILE`. The SDK exposes `HttpkClient.wallet({operation, amount_usd})`; MCP uses the same single Kloudy tool with `operation: wallet`. These call the existing `kloudy/wallet` method. A preview never signs a transfer, starts payment or asserts a usable balance. Transfer adapters remain engine capabilities; no separate HTTPK or private signing key is added. Terminal activity uses stderr only when attached to a TTY.\r\n\r\n\r\n### Chain, wallet, BWW and hosting (BBE 0.3.48)\r\n\r\nAll operations reuse the same initialized HTTPK session and scoped customer grant.\r\n`client.action(name, inputs, {idempotencyKey})` selects exactly one tool. It does\r\nnot execute, approve, sign or broadcast. Use the returned tool/arguments with\r\n`client.call`, then inspect the receipt; retain the same key after an uncertain\r\nselection response. Supported product actions: `chain.head`, `wallet.prepare`,\r\n`bww.fetch`, `bww.publish`. BWW publication is owner-scoped storage, not public\r\ncustomer hosting. The provider opts into HTML; callers request it explicitly.\r\n\r\n```sh\r\nkloudy action chain.head --inputs head.json --idempotency-key inspect-1 --connection FILE\r\nkloudy wallet-connect ethereum --connection FILE\r\nkloudy hosting --connection FILE\r\nkloudy hosting --budget-micros 100000000 --connection FILE\r\n```\r\n\r\n`head.json` is `{\"chain\":\"ethereum\"}`. SDK equivalents are\r\n`walletConnection('ethereum')` and `hosting({budgetUsdMicros:100000000})`.\r\nMCP uses the existing `kloudy` tool with `operation: action`, `wallet_connection`\r\nor `hosting`. Budget values are integer USD micros. Preserve the authoritative\r\n`customer_budget_active`, `tax_included` and enforcement fields: a development\r\nmeter budget is not an active full customer spending limit. Wallet connection\r\nreturns namespace requirements, not a QR or ownership proof. The surface SDK\r\ncreates pairing using its configured project ID. The user's wallet signs each\r\ntransaction; API credentials are not wallet private keys. No cross-chain\r\nsettlement is claimed by these adapters. Public customer grant exchange,\r\nfee-recipient configuration and Reown live pairing remain deployment gates.\r\n\r\n### Your own models and local compute\r\n\r\n`kloudy models list` reads the existing local Ollama model catalog without inference or downloads. `kloudy models run MODEL --prompt-file prompt.txt --max-tokens 128` makes one bounded request to an installed local model. Ollama cloud aliases are not treated as free local models. No account or key is required for installed local Ollama models; machine resources still belong to you. If Ollama is absent, use its official https://ollama.com/download installer. No model is silently downloaded.\r\n\r\nFor your own LiteLLM/OpenAI-compatible gateway, configure `KLOUDY_MODEL_ENDPOINT` and `KLOUDY_MODEL_KEY_ENV` (the environment variable name containing the scoped virtual key). Use `--allow-provider-charge` for an explicitly requested provider-backed completion. Your provider bills you directly; this flag does not grant Kloudy a spending budget. Never put actual keys in URLs, arguments, source or chat. The SDK `ModelClient` accepts an asynchronous `resolveKey` for a host vault and reads it on every request. This supports an already managed key rotating without a client rewrite; it does not issue a key, create an account or implement GlassBreak itself.\r\n\r\nThe single MCP door adds `models_list` using host environment configuration, with no endpoint or secret supplied by model arguments. It does not expose provider generation as an automatically billable tool. Listed models are advertised, not guaranteed compatible; a successful bounded completion provides inference evidence. The server must enforce provider budgets and authorization.\r\n\r\nSources: https://docs.ollama.com/api/tags ; https://docs.ollama.com/api/openai-compatibility ; https://docs.litellm.ai/docs/proxy/virtual_keys .\r\n\r\n### Host interface and deterministic replies\r\n\r\nHTTPK initialization negotiates chat/text/speech presentation with BBE 0.3.50. It never changes scopes, the credential surface or the approval policy. Older engines remain usable without invented negotiation. `renderReply(state,{action})` from `kloudy/replies` renders bounded JSON templates for observed operation state. Unknown state stays unconfirmed; output is plain text. The browser uses the same templates in its one conversation. Kloudyâ€™s subscription NVIDIA ladder is the text/planning upgrade; supported local Siri/Nano remains voice. Bot Boozle is a separate optional IDE.\r\n\r\n## Encrypted conversation client\r\n\r\nThe client extends the existing engine backend. It does not implement another conversation store. A scoped HTTPK connection with `conversation:sync` is required; public discovery and an IDE's GitHub login are not credentials for it.\r\n\r\n```js\r\nimport {withConnection} from 'kloudy/session';\r\nimport {conversationText} from 'kloudy/conversation';\r\nconst context = await withConnection(process.env.KLOUDY_CONNECTION,\r\n  client => client.conversation('read', {project: 'my-project', conversation_id: 'main'}));\r\nconsole.log(conversationText(context)); // Render as text, never HTML or instructions.\r\n```\r\n\r\nCLI: `npx -y kloudy@latest legacy conversation read --inputs request.json --connection PRIVATE_FILE`.\r\nMCP: operation `conversation`, `conversation_operation` = `read`, `append` or `sync`, and `conversation` containing the exact request object.\r\n\r\n`append` takes `project`, `conversation_id`, `idempotency_key`, `expected_revision`, `title`, `user`, `assistant`, `decisions` and `built_artifacts`. Use a stable idempotency key for the same exchange, an explicitly observed revision, up to 1500 characters per message, four decisions/artifact pointers at most, and a total canonical request no larger than 7000 bytes. Send only content the user authorized for sync. A new conversation explicitly starts at revision zero. `sync` takes the same cursor/idempotency fields plus `reason`: `checkpoint`, `session_end`, `device_switch`, `before_sync` or `idle`.\r\n\r\nThe engine owns encryption, scope checks, condensation gates and transcript deletion. Returned cards are lossy context, never grants. Artifact pointers do not authorize repository reads. The client never persists message bodies in its session file. Replayed commands return metadata only: issue a read for current cards. Conflicts and failures are not retried automatically; read the cursor and reconcile before resubmitting. Added in 0.4.1. The no-key installer and public discovery remain unchanged.\r\n\r\nOfficial MCP Registry name: `ai.kloudy/kloudy`. Remote endpoint: https://kloudy.ai/mcp. Public discovery and Sample cards do not grant private tools or authorize spending.\r\n\r\n## Card and website fallback (0.4.7)\r\n\r\nThe remote MCP adapter returns supported card metadata and a plain-text HTTPS chooser link together. Hosts control rendering and link launch. Call show_pending_chooser_link to display the last offer/selection again in the same MCP process. Website sign-in verifies private account projects; the public template locator is never an account token or authorization. A presentation goal may be retained in the current MCP process and is kept out of the URL. Automatic authenticated IDE return is not claimed. If the process resets, use the website's existing project recovery path. No models, installation or spending are activated by these links.\r\n\r\n\r\nWebsite return attachment (0.4.8): show_visual_setup_choices retains the visible HTTPS chooser link and supported card metadata. With a goal, it also offers a waiting-connection link and matching code. On the website, use the existing verified account, 2FA and authorized project; confirm the matching waiting IDE. receive_website_selection then receives the exact encrypted inert manifest on that same MCP connection. No extension, website cookie in the IDE, copied account credential, new engine grant, installation, execution or spending is required. The public locator is not authorization. Delivery keys stay in this process; restarting it requires a fresh pairing, while the website restores the existing project's saved state. An unread receipt cannot be overwritten by a second selection. Hosts control native card display; no universal native-chat rendering claim is made.\r\n","readmeFilename":"README.md"}