@kalphq/cli 0.0.0-dev-20260513152102 → 0.0.0-dev-20260517015600

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.
Files changed (75) hide show
  1. package/dist/{add-YZSIMRPC.js → add-5WUS5HGV.js} +16 -8
  2. package/dist/add-5WUS5HGV.js.map +1 -0
  3. package/dist/{agents-WYK6WNQP.js → agents-L22L47II.js} +3 -3
  4. package/dist/ai-7EBQF25Y.js +12 -0
  5. package/dist/ai-7EBQF25Y.js.map +1 -0
  6. package/dist/{chunk-IZXCZ3IA.js → chunk-4CPUJ537.js} +2 -2
  7. package/dist/chunk-5YUU3KLB.js +40 -0
  8. package/dist/chunk-5YUU3KLB.js.map +1 -0
  9. package/dist/chunk-7KVCCBPJ.js +139 -0
  10. package/dist/chunk-7KVCCBPJ.js.map +1 -0
  11. package/dist/{chunk-S3KAVLVM.js → chunk-D53K6UE6.js} +2 -2
  12. package/dist/chunk-D53K6UE6.js.map +1 -0
  13. package/dist/{chunk-4CEJYSJY.js → chunk-DLUULDXW.js} +12 -45
  14. package/dist/chunk-DLUULDXW.js.map +1 -0
  15. package/dist/chunk-DXNHT4HF.js +99 -0
  16. package/dist/chunk-DXNHT4HF.js.map +1 -0
  17. package/dist/{chunk-XVD3FFOJ.js → chunk-JXR6TPR5.js} +51 -72
  18. package/dist/chunk-JXR6TPR5.js.map +1 -0
  19. package/dist/chunk-LEKRFM4Q.js +49 -0
  20. package/dist/chunk-LEKRFM4Q.js.map +1 -0
  21. package/dist/chunk-QT2JFINP.js +99 -0
  22. package/dist/chunk-QT2JFINP.js.map +1 -0
  23. package/dist/{chunk-5SZMD7E6.js → chunk-TNNBTSDC.js} +2 -2
  24. package/dist/{chunk-5SZMD7E6.js.map → chunk-TNNBTSDC.js.map} +1 -1
  25. package/dist/{generate-JW2DMJ3W.js → chunk-ZX7TIQM7.js} +127 -120
  26. package/dist/chunk-ZX7TIQM7.js.map +1 -0
  27. package/dist/{create-UCJ77P62.js → create-ILPQCRA2.js} +2 -2
  28. package/dist/{delete-QPYVL4OU.js → delete-AJFAAGYJ.js} +9 -8
  29. package/dist/{delete-QPYVL4OU.js.map → delete-AJFAAGYJ.js.map} +1 -1
  30. package/dist/{delete-FIXMFFNZ.js → delete-IFVGULOA.js} +21 -13
  31. package/dist/delete-IFVGULOA.js.map +1 -0
  32. package/dist/{deploy-DRZZ3YRB.js → deploy-EWYNN3VU.js} +9 -6
  33. package/dist/{deploy-DRZZ3YRB.js.map → deploy-EWYNN3VU.js.map} +1 -1
  34. package/dist/{dev-5YY6W4WM.js → dev-3IEEUVYM.js} +66 -11
  35. package/dist/dev-3IEEUVYM.js.map +1 -0
  36. package/dist/generate-2MO7PZBT.js +69 -0
  37. package/dist/generate-2MO7PZBT.js.map +1 -0
  38. package/dist/generate-ODZUKTF2.js +146 -0
  39. package/dist/generate-ODZUKTF2.js.map +1 -0
  40. package/dist/index.js +32 -12
  41. package/dist/index.js.map +1 -1
  42. package/dist/{list-FKH4DWCF.js → list-BNQ34QG3.js} +6 -5
  43. package/dist/{list-FKH4DWCF.js.map → list-BNQ34QG3.js.map} +1 -1
  44. package/dist/{list-GZBBOFX5.js → list-WHYV5JZ4.js} +5 -4
  45. package/dist/{list-GZBBOFX5.js.map → list-WHYV5JZ4.js.map} +1 -1
  46. package/dist/{login-MGPA2VYV.js → login-BDLHS4HC.js} +13 -8
  47. package/dist/login-BDLHS4HC.js.map +1 -0
  48. package/dist/{mcp-DRMQYA7E.js → mcp-77OLNT5R.js} +2 -2
  49. package/dist/{pull-V7QJBVNZ.js → pull-CFDZS6VB.js} +8 -7
  50. package/dist/{pull-V7QJBVNZ.js.map → pull-CFDZS6VB.js.map} +1 -1
  51. package/dist/{push-P6CKRYT7.js → push-OL7562HM.js} +159 -47
  52. package/dist/push-OL7562HM.js.map +1 -0
  53. package/dist/runtime-template/studio/index.html +3 -0
  54. package/dist/{secrets-M43LLCTB.js → secrets-BPESLXMK.js} +6 -6
  55. package/dist/{sync-LTBH6DI5.js → sync-JJDODKMO.js} +8 -7
  56. package/dist/{sync-LTBH6DI5.js.map → sync-JJDODKMO.js.map} +1 -1
  57. package/package.json +5 -4
  58. package/dist/add-YZSIMRPC.js.map +0 -1
  59. package/dist/chunk-4CEJYSJY.js.map +0 -1
  60. package/dist/chunk-LPEV4QH2.js +0 -208
  61. package/dist/chunk-LPEV4QH2.js.map +0 -1
  62. package/dist/chunk-S3KAVLVM.js.map +0 -1
  63. package/dist/chunk-VCFH3R34.js +0 -103
  64. package/dist/chunk-VCFH3R34.js.map +0 -1
  65. package/dist/chunk-XVD3FFOJ.js.map +0 -1
  66. package/dist/delete-FIXMFFNZ.js.map +0 -1
  67. package/dist/dev-5YY6W4WM.js.map +0 -1
  68. package/dist/generate-JW2DMJ3W.js.map +0 -1
  69. package/dist/login-MGPA2VYV.js.map +0 -1
  70. package/dist/push-P6CKRYT7.js.map +0 -1
  71. /package/dist/{agents-WYK6WNQP.js.map → agents-L22L47II.js.map} +0 -0
  72. /package/dist/{chunk-IZXCZ3IA.js.map → chunk-4CPUJ537.js.map} +0 -0
  73. /package/dist/{create-UCJ77P62.js.map → create-ILPQCRA2.js.map} +0 -0
  74. /package/dist/{mcp-DRMQYA7E.js.map → mcp-77OLNT5R.js.map} +0 -0
  75. /package/dist/{secrets-M43LLCTB.js.map → secrets-BPESLXMK.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/deploy.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { generateTypes } from \"@/utils/codegen\";\nimport { requireAuth } from \"@/utils/auth\";\nimport { runInitialDeploy } from \"@/utils/deploy\";\nimport { promptDeployTarget, showKalpCloudWaitlist } from \"@/utils/deploy-target\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"deploy\", description: \"Deploy your agents runtime\" },\n async run() {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp deploy\")}`);\n await generateTypes(cwd);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const target = await promptDeployTarget(\"Choose where to deploy your runtime\");\n if (!target) {\n p.outro(\"Cancelled\");\n return;\n }\n if (target === \"kalp-cloud\") {\n showKalpCloudWaitlist();\n p.outro(pc.green(\"Got it — you'll hear from us soon.\"));\n return;\n }\n\n const s = p.spinner();\n s.start(\"Deploying your agents runtime\");\n\n try {\n const result = await runInitialDeploy(cwd);\n s.stop(\"Deployment completed\");\n p.log.success(`Runtime URL: ${pc.cyan(result.workerUrl)}`);\n if (result.customDomains.length > 0) {\n p.note(\n result.customDomains.map((domain) => pc.cyan(`https://${domain}`)).join(\"\\n\"),\n \"Custom domains detected\",\n );\n }\n\n const preferredStudioBase =\n result.customDomains.length > 0\n ? `https://${result.customDomains[0]}`\n : result.workerUrl;\n\n if (result.credentialsChanged || result.serviceKeyChanged) {\n p.log.info(pc.bold(\"Admin access\"));\n console.log(\n ` ${pc.dim(\"Username:\")} ${pc.cyan(result.studioAdminUser)}`,\n );\n console.log(\n ` ${pc.dim(\"Password:\")} ${pc.cyan(result.studioPassword)}`,\n );\n console.log(\n ` ${pc.dim(\"Service key:\")} ${pc.cyan(`Bearer ${result.serviceKey}`)}`,\n );\n console.log(\n ` ${pc.dim(\"Studio URL:\")} ${pc.cyan(`${preferredStudioBase.replace(/\\/$/, \"\")}/studio/login`)}`,\n );\n } else {\n p.log.info(\n pc.dim(\n \"Credentials unchanged. Check your local .env if you need to recover them.\",\n ),\n );\n }\n p.outro(pc.green(\"Your runtime is ready\"));\n } catch (error) {\n s.stop(\"Deployment failed\");\n p.log.error(\n error instanceof Error ? error.message : \"Unknown deployment error\",\n );\n process.exit(1);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAMf,IAAM,OAAO;AAEb,IAAO,iBAAQ,cAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,UAAU,aAAa,6BAA6B;AAAA,EAClE,MAAM,MAAM;AACV,UAAM,MAAM,QAAQ,IAAI;AAExB,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,aAAa,CAAC,EAAE;AAC3C,UAAM,cAAc,GAAG;AAEvB,UAAM,YAAY,EAAE,MAAM,MAAM;AAC9B,MAAE,MAAI,MAAM,4CAA4C;AACxD,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAED,UAAM,SAAS,MAAM,mBAAmB,qCAAqC;AAC7E,QAAI,CAAC,QAAQ;AACX,MAAE,QAAM,WAAW;AACnB;AAAA,IACF;AACA,QAAI,WAAW,cAAc;AAC3B,4BAAsB;AACtB,MAAE,QAAM,GAAG,MAAM,yCAAoC,CAAC;AACtD;AAAA,IACF;AAEA,UAAM,IAAM,UAAQ;AACpB,MAAE,MAAM,+BAA+B;AAEvC,QAAI;AACF,YAAM,SAAS,MAAM,iBAAiB,GAAG;AACzC,QAAE,KAAK,sBAAsB;AAC7B,MAAE,MAAI,QAAQ,gBAAgB,GAAG,KAAK,OAAO,SAAS,CAAC,EAAE;AACzD,UAAI,OAAO,cAAc,SAAS,GAAG;AACnC,QAAE;AAAA,UACA,OAAO,cAAc,IAAI,CAAC,WAAW,GAAG,KAAK,WAAW,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI;AAAA,UAC5E;AAAA,QACF;AAAA,MACF;AAEA,YAAM,sBACJ,OAAO,cAAc,SAAS,IAC1B,WAAW,OAAO,cAAc,CAAC,CAAC,KAClC,OAAO;AAEb,UAAI,OAAO,sBAAsB,OAAO,mBAAmB;AACzD,QAAE,MAAI,KAAK,GAAG,KAAK,cAAc,CAAC;AAClC,gBAAQ;AAAA,UACN,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,GAAG,KAAK,OAAO,eAAe,CAAC;AAAA,QAC7D;AACA,gBAAQ;AAAA,UACN,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,GAAG,KAAK,OAAO,cAAc,CAAC;AAAA,QAC5D;AACA,gBAAQ;AAAA,UACN,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,GAAG,KAAK,UAAU,OAAO,UAAU,EAAE,CAAC;AAAA,QACvE;AACA,gBAAQ;AAAA,UACN,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,GAAG,KAAK,GAAG,oBAAoB,QAAQ,OAAO,EAAE,CAAC,eAAe,CAAC;AAAA,QACjG;AAAA,MACF,OAAO;AACL,QAAE,MAAI;AAAA,UACJ,GAAG;AAAA,YACD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,MAAE,QAAM,GAAG,MAAM,uBAAuB,CAAC;AAAA,IAC3C,SAAS,OAAO;AACd,QAAE,KAAK,mBAAmB;AAC1B,MAAE,MAAI;AAAA,QACJ,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC3C;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/commands/deploy.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { generateTypes } from \"@/utils/codegen\";\nimport { requireAuth } from \"@/utils/auth\";\nimport { runInitialDeploy } from \"@/utils/deploy\";\nimport { promptDeployTarget, showKalpCloudWaitlist } from \"@/utils/deploy-target\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"deploy\", description: \"Deploy your agents runtime\" },\n async run() {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp deploy\")}`);\n await generateTypes(cwd);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const target = await promptDeployTarget(\"Choose where to deploy your runtime\");\n if (!target) {\n p.outro(\"Cancelled\");\n return;\n }\n if (target === \"kalp-cloud\") {\n showKalpCloudWaitlist();\n p.outro(pc.green(\"Got it — you'll hear from us soon.\"));\n return;\n }\n\n const s = p.spinner();\n s.start(\"Deploying your agents runtime\");\n\n try {\n const result = await runInitialDeploy(cwd);\n s.stop(\"Deployment completed\");\n p.log.success(`Runtime URL: ${pc.cyan(result.workerUrl)}`);\n if (result.customDomains.length > 0) {\n p.note(\n result.customDomains.map((domain) => pc.cyan(`https://${domain}`)).join(\"\\n\"),\n \"Custom domains detected\",\n );\n }\n\n const preferredStudioBase =\n result.customDomains.length > 0\n ? `https://${result.customDomains[0]}`\n : result.workerUrl;\n\n if (result.credentialsChanged || result.serviceKeyChanged) {\n p.log.info(pc.bold(\"Admin access\"));\n console.log(\n ` ${pc.dim(\"Username:\")} ${pc.cyan(result.studioAdminUser)}`,\n );\n console.log(\n ` ${pc.dim(\"Password:\")} ${pc.cyan(result.studioPassword)}`,\n );\n console.log(\n ` ${pc.dim(\"Service key:\")} ${pc.cyan(`Bearer ${result.serviceKey}`)}`,\n );\n console.log(\n ` ${pc.dim(\"Studio URL:\")} ${pc.cyan(`${preferredStudioBase.replace(/\\/$/, \"\")}/studio/login`)}`,\n );\n } else {\n p.log.info(\n pc.dim(\n \"Credentials unchanged. Check your local .env if you need to recover them.\",\n ),\n );\n }\n p.outro(pc.green(\"Your runtime is ready\"));\n } catch (error) {\n s.stop(\"Deployment failed\");\n p.log.error(\n error instanceof Error ? error.message : \"Unknown deployment error\",\n );\n process.exit(1);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAMf,IAAM,OAAO;AAEb,IAAO,iBAAQ,cAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,UAAU,aAAa,6BAA6B;AAAA,EAClE,MAAM,MAAM;AACV,UAAM,MAAM,QAAQ,IAAI;AAExB,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,aAAa,CAAC,EAAE;AAC3C,UAAM,cAAc,GAAG;AAEvB,UAAM,YAAY,EAAE,MAAM,MAAM;AAC9B,MAAE,MAAI,MAAM,4CAA4C;AACxD,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAED,UAAM,SAAS,MAAM,mBAAmB,qCAAqC;AAC7E,QAAI,CAAC,QAAQ;AACX,MAAE,QAAM,WAAW;AACnB;AAAA,IACF;AACA,QAAI,WAAW,cAAc;AAC3B,4BAAsB;AACtB,MAAE,QAAM,GAAG,MAAM,yCAAoC,CAAC;AACtD;AAAA,IACF;AAEA,UAAM,IAAM,UAAQ;AACpB,MAAE,MAAM,+BAA+B;AAEvC,QAAI;AACF,YAAM,SAAS,MAAM,iBAAiB,GAAG;AACzC,QAAE,KAAK,sBAAsB;AAC7B,MAAE,MAAI,QAAQ,gBAAgB,GAAG,KAAK,OAAO,SAAS,CAAC,EAAE;AACzD,UAAI,OAAO,cAAc,SAAS,GAAG;AACnC,QAAE;AAAA,UACA,OAAO,cAAc,IAAI,CAAC,WAAW,GAAG,KAAK,WAAW,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI;AAAA,UAC5E;AAAA,QACF;AAAA,MACF;AAEA,YAAM,sBACJ,OAAO,cAAc,SAAS,IAC1B,WAAW,OAAO,cAAc,CAAC,CAAC,KAClC,OAAO;AAEb,UAAI,OAAO,sBAAsB,OAAO,mBAAmB;AACzD,QAAE,MAAI,KAAK,GAAG,KAAK,cAAc,CAAC;AAClC,gBAAQ;AAAA,UACN,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,GAAG,KAAK,OAAO,eAAe,CAAC;AAAA,QAC7D;AACA,gBAAQ;AAAA,UACN,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,GAAG,KAAK,OAAO,cAAc,CAAC;AAAA,QAC5D;AACA,gBAAQ;AAAA,UACN,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,GAAG,KAAK,UAAU,OAAO,UAAU,EAAE,CAAC;AAAA,QACvE;AACA,gBAAQ;AAAA,UACN,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,GAAG,KAAK,GAAG,oBAAoB,QAAQ,OAAO,EAAE,CAAC,eAAe,CAAC;AAAA,QACjG;AAAA,MACF,OAAO;AACL,QAAE,MAAI;AAAA,UACJ,GAAG;AAAA,YACD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,MAAE,QAAM,GAAG,MAAM,uBAAuB,CAAC;AAAA,IAC3C,SAAS,OAAO;AACd,QAAE,KAAK,mBAAmB;AAC1B,MAAE,MAAI;AAAA,QACJ,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC3C;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -3,19 +3,20 @@ import {
3
3
  computePushHash,
4
4
  readAgentManifest,
5
5
  validateCompiledIR
6
- } from "./chunk-VCFH3R34.js";
6
+ } from "./chunk-7KVCCBPJ.js";
7
7
  import {
8
8
  ensureSecretKey
9
9
  } from "./chunk-NV2IZ4XM.js";
10
10
  import {
11
11
  generateTypes
12
- } from "./chunk-LPEV4QH2.js";
12
+ } from "./chunk-DXNHT4HF.js";
13
13
  import {
14
14
  materializeRuntime,
15
15
  readLocalAgentNames,
16
16
  writeRuntimeAgentsSnapshot
17
- } from "./chunk-XVD3FFOJ.js";
17
+ } from "./chunk-JXR6TPR5.js";
18
18
  import "./chunk-EXXTCGKR.js";
19
+ import "./chunk-LEKRFM4Q.js";
19
20
 
20
21
  // src/commands/dev.ts
21
22
  import { watch } from "fs";
@@ -81,24 +82,57 @@ async function syncLocalRuntimeState(params) {
81
82
  for (const agentName of agentNames) {
82
83
  try {
83
84
  const manifest = await readAgentManifest({ cwd, agentName });
84
- const hash = computePushHash(manifest.ir);
85
- const validation = validateCompiledIR({ agentName, ir: manifest.ir, hash });
85
+ const hash = computePushHash(manifest);
86
+ const validation = validateCompiledIR({ agentName, manifest, hash });
86
87
  if (!validation.ok) {
87
88
  const details = (validation.errors ?? []).join(" | ");
88
89
  throw new Error(
89
90
  `validation failed (${validation.phase})${details ? `: ${details}` : ""}`
90
91
  );
91
92
  }
92
- const manifestKey = `${agentName}:${hash}`;
93
+ const artifactManifestKey = `${agentName}:${hash}:artifact-manifest`;
94
+ const semanticIrKey = `${agentName}:${hash}:semantic-ir`;
95
+ const schemasKey = `${agentName}:${hash}:schemas`;
96
+ const bundleManifestKey = `${agentName}:${hash}:bundle-manifest`;
93
97
  const latestKey = `${agentName}:latest`;
94
- const manifestPath = join(manifestDir, `${agentName}-${hash}.json`);
95
- await writeFile(manifestPath, JSON.stringify(manifest.ir), "utf-8");
98
+ const files = await writeLocalArtifactFiles({
99
+ manifestDir,
100
+ agentName,
101
+ hash,
102
+ manifest
103
+ });
104
+ await putLocalManifest({
105
+ cwd,
106
+ configPath,
107
+ key: artifactManifestKey,
108
+ manifestPath: files.artifactManifestPath
109
+ });
96
110
  await putLocalManifest({
97
111
  cwd,
98
112
  configPath,
99
- key: manifestKey,
100
- manifestPath
113
+ key: semanticIrKey,
114
+ manifestPath: files.semanticIrPath
101
115
  });
116
+ await putLocalManifest({
117
+ cwd,
118
+ configPath,
119
+ key: schemasKey,
120
+ manifestPath: files.schemasPath
121
+ });
122
+ await putLocalManifest({
123
+ cwd,
124
+ configPath,
125
+ key: bundleManifestKey,
126
+ manifestPath: files.bundleManifestPath
127
+ });
128
+ for (const [bundleHash, bundle] of Object.entries(manifest.bundles)) {
129
+ await putLocalValue({
130
+ cwd,
131
+ configPath,
132
+ key: `${agentName}:${hash}:bundle:${bundleHash}`,
133
+ value: bundle.code
134
+ });
135
+ }
102
136
  await putLocalValue({
103
137
  cwd,
104
138
  configPath,
@@ -113,6 +147,27 @@ async function syncLocalRuntimeState(params) {
113
147
  }
114
148
  return { synced, failed };
115
149
  }
150
+ async function writeLocalArtifactFiles(params) {
151
+ const outDir = join(params.manifestDir, `${params.agentName}-${params.hash}`);
152
+ await mkdir(outDir, { recursive: true });
153
+ const artifactManifestPath = join(outDir, "artifact-manifest.json");
154
+ const semanticIrPath = join(outDir, "semantic-ir.json");
155
+ const schemasPath = join(outDir, "schemas.json");
156
+ const bundleManifestPath = join(outDir, "bundle-manifest.json");
157
+ await writeFile(
158
+ artifactManifestPath,
159
+ JSON.stringify(params.manifest.artifactManifest),
160
+ "utf-8"
161
+ );
162
+ await writeFile(semanticIrPath, JSON.stringify(params.manifest.semanticIr), "utf-8");
163
+ await writeFile(schemasPath, JSON.stringify(params.manifest.schemas), "utf-8");
164
+ await writeFile(
165
+ bundleManifestPath,
166
+ JSON.stringify(params.manifest.bundleManifest),
167
+ "utf-8"
168
+ );
169
+ return { artifactManifestPath, semanticIrPath, schemasPath, bundleManifestPath };
170
+ }
116
171
  var dev_default = defineCommand({
117
172
  meta: { name: "dev", description: "Run Worker + Studio local environment" },
118
173
  async run() {
@@ -240,4 +295,4 @@ KALP_RUNTIME_MODE=local
240
295
  export {
241
296
  dev_default as default
242
297
  };
243
- //# sourceMappingURL=dev-5YY6W4WM.js.map
298
+ //# sourceMappingURL=dev-3IEEUVYM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/dev.ts"],"sourcesContent":["import { watch, type FSWatcher } from \"node:fs\";\nimport { copyFile, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { execa } from \"execa\";\nimport open from \"open\";\nimport { generateTypes } from \"@/utils/codegen\";\nimport { ensureSecretKey } from \"@/utils/secret\";\nimport { readAgentManifest, computePushHash } from \"@/utils/manifest\";\nimport type { AgentManifestV3 } from \"@/utils/manifest\";\nimport { validateCompiledIR } from \"@/utils/validate\";\nimport {\n materializeRuntime,\n readLocalAgentNames,\n writeRuntimeAgentsSnapshot,\n} from \"@/utils/runtime\";\n\nconst LOGO = \"🦋\";\nconst LOCAL_MANIFESTS_DIR = \".kalp/runtime/local-manifests\";\nconst HOT_RELOAD_DEBOUNCE_MS = 450;\n\nasync function putLocalManifest(params: {\n cwd: string;\n configPath: string;\n key: string;\n manifestPath: string;\n}): Promise<void> {\n await execa(\n \"npx\",\n [\n \"wrangler\",\n \"kv\",\n \"key\",\n \"put\",\n params.key,\n \"--path\",\n params.manifestPath,\n \"--binding\",\n \"KALP_MANIFESTS\",\n \"--local\",\n \"--config\",\n params.configPath,\n ],\n { cwd: params.cwd },\n );\n}\n\nasync function putLocalValue(params: {\n cwd: string;\n configPath: string;\n key: string;\n value: string;\n}): Promise<void> {\n await execa(\n \"npx\",\n [\n \"wrangler\",\n \"kv\",\n \"key\",\n \"put\",\n params.key,\n params.value,\n \"--binding\",\n \"KALP_MANIFESTS\",\n \"--local\",\n \"--config\",\n params.configPath,\n ],\n { cwd: params.cwd },\n );\n}\n\nasync function syncLocalRuntimeState(params: {\n cwd: string;\n runtimeDir: string;\n configPath: string;\n}): Promise<{ synced: number; failed: string[] }> {\n const { cwd, runtimeDir, configPath } = params;\n await writeRuntimeAgentsSnapshot({ cwd, runtimeDir, mode: \"local\" });\n\n const manifestDir = join(cwd, LOCAL_MANIFESTS_DIR);\n await rm(manifestDir, { recursive: true, force: true });\n await mkdir(manifestDir, { recursive: true });\n\n const agentNames = await readLocalAgentNames(cwd);\n const failed: string[] = [];\n let synced = 0;\n\n for (const agentName of agentNames) {\n try {\n const manifest = await readAgentManifest({ cwd, agentName });\n const hash = computePushHash(manifest);\n const validation = validateCompiledIR({ agentName, manifest, hash });\n if (!validation.ok) {\n const details = (validation.errors ?? []).join(\" | \");\n throw new Error(\n `validation failed (${validation.phase})${details ? `: ${details}` : \"\"}`,\n );\n }\n\n const artifactManifestKey = `${agentName}:${hash}:artifact-manifest`;\n const semanticIrKey = `${agentName}:${hash}:semantic-ir`;\n const schemasKey = `${agentName}:${hash}:schemas`;\n const bundleManifestKey = `${agentName}:${hash}:bundle-manifest`;\n const latestKey = `${agentName}:latest`;\n const files = await writeLocalArtifactFiles({\n manifestDir,\n agentName,\n hash,\n manifest,\n });\n\n await putLocalManifest({\n cwd,\n configPath,\n key: artifactManifestKey,\n manifestPath: files.artifactManifestPath,\n });\n await putLocalManifest({\n cwd,\n configPath,\n key: semanticIrKey,\n manifestPath: files.semanticIrPath,\n });\n await putLocalManifest({\n cwd,\n configPath,\n key: schemasKey,\n manifestPath: files.schemasPath,\n });\n await putLocalManifest({\n cwd,\n configPath,\n key: bundleManifestKey,\n manifestPath: files.bundleManifestPath,\n });\n\n for (const [bundleHash, bundle] of Object.entries(manifest.bundles)) {\n await putLocalValue({\n cwd,\n configPath,\n key: `${agentName}:${hash}:bundle:${bundleHash}`,\n value: bundle.code,\n });\n }\n await putLocalValue({\n cwd,\n configPath,\n key: latestKey,\n value: hash,\n });\n synced += 1;\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n failed.push(`${agentName}: ${reason}`);\n }\n }\n\n return { synced, failed };\n}\n\nasync function writeLocalArtifactFiles(params: {\n manifestDir: string;\n agentName: string;\n hash: string;\n manifest: AgentManifestV3;\n}): Promise<{\n artifactManifestPath: string;\n semanticIrPath: string;\n schemasPath: string;\n bundleManifestPath: string;\n}> {\n const outDir = join(params.manifestDir, `${params.agentName}-${params.hash}`);\n await mkdir(outDir, { recursive: true });\n\n const artifactManifestPath = join(outDir, \"artifact-manifest.json\");\n const semanticIrPath = join(outDir, \"semantic-ir.json\");\n const schemasPath = join(outDir, \"schemas.json\");\n const bundleManifestPath = join(outDir, \"bundle-manifest.json\");\n\n await writeFile(\n artifactManifestPath,\n JSON.stringify(params.manifest.artifactManifest),\n \"utf-8\",\n );\n await writeFile(semanticIrPath, JSON.stringify(params.manifest.semanticIr), \"utf-8\");\n await writeFile(schemasPath, JSON.stringify(params.manifest.schemas), \"utf-8\");\n await writeFile(\n bundleManifestPath,\n JSON.stringify(params.manifest.bundleManifest),\n \"utf-8\",\n );\n\n return { artifactManifestPath, semanticIrPath, schemasPath, bundleManifestPath };\n}\n\nexport default defineCommand({\n meta: { name: \"dev\", description: \"Run Worker + Studio local environment\" },\n async run() {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp dev\")}`);\n\n await generateTypes(cwd);\n await ensureSecretKey(cwd);\n await copyFile(join(cwd, \".env\"), join(cwd, \".dev.vars\"));\n const devVarsPath = join(cwd, \".dev.vars\");\n const devVarsContent = await readFile(devVarsPath, \"utf-8\");\n const nextDevVars = devVarsContent\n .replace(/^KALP_ENV=.*$/m, \"\")\n .replace(/^KALP_RUNTIME_MODE=.*$/m, \"\")\n .trimEnd();\n await writeFile(\n devVarsPath,\n `${nextDevVars}\\nKALP_ENV=local\\nKALP_RUNTIME_MODE=local\\n`,\n \"utf-8\",\n );\n const runtime = await materializeRuntime(cwd, { mode: \"local\" });\n const initialSync = await syncLocalRuntimeState({\n cwd,\n runtimeDir: runtime.runtimeDir,\n configPath: runtime.wranglerConfigPath,\n });\n if (initialSync.failed.length > 0) {\n for (const failure of initialSync.failed) {\n p.log.warn(`Local sync skipped ${failure}`);\n }\n }\n p.log.info(\n `${pc.dim(\"Local agent runtime synced:\")} ${pc.cyan(String(initialSync.synced))}`,\n );\n\n p.note(\"Starting local runtime (wrangler dev :8787)\");\n\n const backend = execa(\n \"npx\",\n [\n \"wrangler\",\n \"dev\",\n \"--port\",\n \"8787\",\n \"--local\",\n \"--config\",\n runtime.wranglerConfigPath,\n ],\n { cwd, stdio: \"inherit\" },\n );\n\n let hotReloadTimer: NodeJS.Timeout | null = null;\n let hotReloadRunning = false;\n let hotReloadPending = false;\n\n const runHotReloadSync = async () => {\n if (hotReloadRunning) {\n hotReloadPending = true;\n return;\n }\n\n hotReloadRunning = true;\n try {\n const sync = await syncLocalRuntimeState({\n cwd,\n runtimeDir: runtime.runtimeDir,\n configPath: runtime.wranglerConfigPath,\n });\n if (sync.failed.length > 0) {\n p.log.warn(\n `Local hot reload synced ${sync.synced} agents with ${sync.failed.length} warnings.`,\n );\n for (const failure of sync.failed) {\n p.log.warn(`Hot reload skipped ${failure}`);\n }\n } else {\n p.log.info(pc.dim(`Local hot reload synced ${sync.synced} agents.`));\n }\n } finally {\n hotReloadRunning = false;\n if (hotReloadPending) {\n hotReloadPending = false;\n void runHotReloadSync();\n }\n }\n };\n\n const scheduleHotReloadSync = () => {\n if (hotReloadTimer) clearTimeout(hotReloadTimer);\n hotReloadTimer = setTimeout(() => {\n void runHotReloadSync();\n }, HOT_RELOAD_DEBOUNCE_MS);\n };\n\n const watchers: FSWatcher[] = [];\n const watchTargets = [join(cwd, \"agents\"), join(cwd, \".kalp\", \"state.json\")];\n for (const target of watchTargets) {\n try {\n const watcher = watch(\n target,\n target.endsWith(\".json\") ? undefined : { recursive: true },\n () => scheduleHotReloadSync(),\n );\n watchers.push(watcher);\n } catch {\n // Ignore missing targets (e.g. no agents yet)\n }\n }\n\n const shutdown = () => {\n if (hotReloadTimer) {\n clearTimeout(hotReloadTimer);\n hotReloadTimer = null;\n }\n for (const watcher of watchers) {\n watcher.close();\n }\n backend.kill(\"SIGINT\");\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n await delay(2500);\n const studioUrl = \"http://localhost:8787/studio/login\";\n await open(studioUrl);\n p.log.success(`Studio opened at ${pc.cyan(studioUrl)}`);\n\n try {\n await backend;\n } finally {\n shutdown();\n process.off(\"SIGINT\", shutdown);\n process.off(\"SIGTERM\", shutdown);\n }\n },\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ generateMcpTypes
4
+ } from "./chunk-ZX7TIQM7.js";
5
+ import "./chunk-QT2JFINP.js";
6
+ import {
7
+ generateTypes
8
+ } from "./chunk-DXNHT4HF.js";
9
+ import "./chunk-EXXTCGKR.js";
10
+
11
+ // src/commands/mcp/generate.ts
12
+ import { defineCommand } from "citty";
13
+ import * as p from "@clack/prompts";
14
+ import pc from "picocolors";
15
+ import { cwd } from "process";
16
+ var LOGO = "\u{1F98B}";
17
+ var generate_default = defineCommand({
18
+ meta: {
19
+ name: "generate",
20
+ description: "Generate MCP tool types into .kalp/mcp.types.d.ts"
21
+ },
22
+ args: {
23
+ strict: {
24
+ type: "boolean",
25
+ description: "Fail when at least one MCP server cannot be introspected",
26
+ default: false
27
+ }
28
+ },
29
+ async run({ args }) {
30
+ p.intro(`${LOGO} ${pc.bold("kalp mcp generate")}`);
31
+ const spinner2 = p.spinner();
32
+ spinner2.start("Discovering MCP servers and generating types");
33
+ try {
34
+ const projectCwd = cwd();
35
+ await generateTypes(projectCwd);
36
+ const result = await generateMcpTypes(projectCwd, {
37
+ strict: args.strict
38
+ });
39
+ spinner2.stop("MCP type generation completed");
40
+ if (result.servers.length === 0) {
41
+ p.log.warn(
42
+ "No MCP servers found in kalp.config.ts. Generated an empty McpRegistry."
43
+ );
44
+ } else {
45
+ for (const server of result.servers) {
46
+ p.log.info(
47
+ `${pc.bold(server.serverName)} (${server.transport}) -> ${server.tools.length} tools`
48
+ );
49
+ }
50
+ }
51
+ if (result.warnings.length > 0) {
52
+ p.log.warn(pc.bold("Warnings:"));
53
+ for (const warning of result.warnings) {
54
+ p.log.warn(`- ${warning}`);
55
+ }
56
+ }
57
+ p.outro(`Types written to ${pc.cyan(result.outputPath)}`);
58
+ } catch (error) {
59
+ spinner2.stop("MCP type generation failed");
60
+ const message = error instanceof Error ? error.message : String(error);
61
+ p.cancel(message);
62
+ process.exitCode = 1;
63
+ }
64
+ }
65
+ });
66
+ export {
67
+ generate_default as default
68
+ };
69
+ //# sourceMappingURL=generate-2MO7PZBT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/mcp/generate.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { cwd } from \"node:process\";\nimport { generateMcpTypes } from \"@/utils/mcp-codegen\";\nimport { generateTypes } from \"@/utils/codegen\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"generate\",\n description: \"Generate MCP tool types into .kalp/mcp.types.d.ts\",\n },\n args: {\n strict: {\n type: \"boolean\",\n description: \"Fail when at least one MCP server cannot be introspected\",\n default: false,\n },\n },\n async run({ args }) {\n p.intro(`${LOGO} ${pc.bold(\"kalp mcp generate\")}`);\n const spinner = p.spinner();\n spinner.start(\"Discovering MCP servers and generating types\");\n\n try {\n const projectCwd = cwd();\n await generateTypes(projectCwd);\n const result = await generateMcpTypes(projectCwd, {\n strict: args.strict,\n });\n\n spinner.stop(\"MCP type generation completed\");\n\n if (result.servers.length === 0) {\n p.log.warn(\n \"No MCP servers found in kalp.config.ts. Generated an empty McpRegistry.\",\n );\n } else {\n for (const server of result.servers) {\n p.log.info(\n `${pc.bold(server.serverName)} (${server.transport}) -> ${server.tools.length} tools`,\n );\n }\n }\n\n if (result.warnings.length > 0) {\n p.log.warn(pc.bold(\"Warnings:\"));\n for (const warning of result.warnings) {\n p.log.warn(`- ${warning}`);\n }\n }\n\n p.outro(`Types written to ${pc.cyan(result.outputPath)}`);\n } catch (error) {\n spinner.stop(\"MCP type generation failed\");\n const message = error instanceof Error ? error.message : String(error);\n p.cancel(message);\n process.exitCode = 1;\n }\n },\n});\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AACf,SAAS,WAAW;AAIpB,IAAM,OAAO;AAEb,IAAO,mBAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,mBAAmB,CAAC,EAAE;AACjD,UAAMA,WAAY,UAAQ;AAC1B,IAAAA,SAAQ,MAAM,8CAA8C;AAE5D,QAAI;AACF,YAAM,aAAa,IAAI;AACvB,YAAM,cAAc,UAAU;AAC9B,YAAM,SAAS,MAAM,iBAAiB,YAAY;AAAA,QAChD,QAAQ,KAAK;AAAA,MACf,CAAC;AAED,MAAAA,SAAQ,KAAK,+BAA+B;AAE5C,UAAI,OAAO,QAAQ,WAAW,GAAG;AAC/B,QAAE,MAAI;AAAA,UACJ;AAAA,QACF;AAAA,MACF,OAAO;AACL,mBAAW,UAAU,OAAO,SAAS;AACnC,UAAE,MAAI;AAAA,YACJ,GAAG,GAAG,KAAK,OAAO,UAAU,CAAC,KAAK,OAAO,SAAS,QAAQ,OAAO,MAAM,MAAM;AAAA,UAC/E;AAAA,QACF;AAAA,MACF;AAEA,UAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,QAAE,MAAI,KAAK,GAAG,KAAK,WAAW,CAAC;AAC/B,mBAAW,WAAW,OAAO,UAAU;AACrC,UAAE,MAAI,KAAK,KAAK,OAAO,EAAE;AAAA,QAC3B;AAAA,MACF;AAEA,MAAE,QAAM,oBAAoB,GAAG,KAAK,OAAO,UAAU,CAAC,EAAE;AAAA,IAC1D,SAAS,OAAO;AACd,MAAAA,SAAQ,KAAK,4BAA4B;AACzC,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,MAAE,SAAO,OAAO;AAChB,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF;AACF,CAAC;","names":["spinner"]}
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ McpTypesGenerator
4
+ } from "./chunk-ZX7TIQM7.js";
5
+ import "./chunk-QT2JFINP.js";
6
+ import {
7
+ ProjectTypesGenerator
8
+ } from "./chunk-DXNHT4HF.js";
9
+ import "./chunk-EXXTCGKR.js";
10
+
11
+ // src/commands/generate.ts
12
+ import { defineCommand } from "citty";
13
+ import * as p from "@clack/prompts";
14
+ import pc from "picocolors";
15
+ import { cwd } from "process";
16
+
17
+ // src/utils/sync.ts
18
+ import { mkdir, readFile, writeFile } from "fs/promises";
19
+ import { join } from "path";
20
+ var MANIFEST_VERSION = 1;
21
+ var ProjectSynchronizer = class {
22
+ generators = /* @__PURE__ */ new Map();
23
+ register(generator) {
24
+ this.generators.set(generator.id, generator);
25
+ return this;
26
+ }
27
+ async run(cwd2, options = {}) {
28
+ const generatedDir = join(cwd2, ".kalp", "generated");
29
+ await mkdir(generatedDir, { recursive: true });
30
+ const manifestPath = join(generatedDir, "manifest.json");
31
+ const manifest = await this.readManifest(manifestPath);
32
+ const ids = options.ids || Array.from(this.generators.keys());
33
+ const results = {};
34
+ for (const id of ids) {
35
+ const generator = this.generators.get(id);
36
+ if (!generator) {
37
+ console.warn(`[Sync] Generator "${id}" not found.`);
38
+ continue;
39
+ }
40
+ try {
41
+ const result = await generator.generate(cwd2);
42
+ results[id] = result;
43
+ if (result.updated) {
44
+ manifest.generators[id] = {
45
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
46
+ };
47
+ }
48
+ } catch (error) {
49
+ throw new Error(`Generator "${generator.name}" failed: ${error instanceof Error ? error.message : String(error)}`);
50
+ }
51
+ }
52
+ manifest.generatedAt = (/* @__PURE__ */ new Date()).toISOString();
53
+ await writeFile(manifestPath, JSON.stringify(manifest, null, 2), "utf-8");
54
+ return results;
55
+ }
56
+ async readManifest(path) {
57
+ try {
58
+ const content = await readFile(path, "utf-8");
59
+ return JSON.parse(content);
60
+ } catch {
61
+ return {
62
+ version: MANIFEST_VERSION,
63
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
64
+ generators: {}
65
+ };
66
+ }
67
+ }
68
+ };
69
+ var synchronizer = new ProjectSynchronizer();
70
+
71
+ // src/commands/generate.ts
72
+ import { readFile as readFile2, writeFile as writeFile2 } from "fs/promises";
73
+ import { join as join2 } from "path";
74
+ var LOGO = "\u{1F98B}";
75
+ var generate_default = defineCommand({
76
+ meta: {
77
+ name: "generate",
78
+ description: "Synchronize project types, MCP tools, and manifests"
79
+ },
80
+ args: {
81
+ force: {
82
+ type: "boolean",
83
+ description: "Force regeneration of all artifacts",
84
+ default: false
85
+ },
86
+ mcpOnly: {
87
+ type: "boolean",
88
+ description: "Only regenerate MCP types",
89
+ default: false
90
+ }
91
+ },
92
+ async run({ args }) {
93
+ p.intro(`${LOGO} ${pc.bold("kalp generate")}`);
94
+ const projectCwd = cwd();
95
+ synchronizer.register(new ProjectTypesGenerator()).register(new McpTypesGenerator());
96
+ const spinner2 = p.spinner();
97
+ spinner2.start("Synchronizing project artifacts");
98
+ try {
99
+ const ids = args.mcpOnly ? ["mcp"] : void 0;
100
+ const results = await synchronizer.run(projectCwd, { ids, force: args.force });
101
+ spinner2.stop("Synchronization completed");
102
+ for (const [id, result] of Object.entries(results)) {
103
+ const icon = result.updated ? pc.green("\u2713") : pc.dim("-");
104
+ const status = result.updated ? "updated" : "up to date";
105
+ p.log.info(`${icon} ${pc.bold(id)}: ${status}`);
106
+ if (result.warnings?.length) {
107
+ for (const warning of result.warnings) {
108
+ p.log.warn(` ${pc.yellow("\u25B2")} ${pc.dim(warning)}`);
109
+ }
110
+ }
111
+ }
112
+ await ensureTsconfigIncludes(projectCwd);
113
+ p.outro(pc.green("Project is in sync!"));
114
+ } catch (error) {
115
+ spinner2.stop("Synchronization failed");
116
+ const message = error instanceof Error ? error.message : String(error);
117
+ p.cancel(message);
118
+ process.exit(1);
119
+ }
120
+ }
121
+ });
122
+ async function ensureTsconfigIncludes(cwd2) {
123
+ const tsconfigPath = join2(cwd2, "tsconfig.json");
124
+ try {
125
+ const content = await readFile2(tsconfigPath, "utf-8");
126
+ const json = JSON.parse(content);
127
+ if (!json.include) json.include = [];
128
+ const required = [".kalp/generated/*.d.ts"];
129
+ let changed = false;
130
+ for (const path of required) {
131
+ if (!json.include.includes(path)) {
132
+ json.include.push(path);
133
+ changed = true;
134
+ }
135
+ }
136
+ if (changed) {
137
+ await writeFile2(tsconfigPath, JSON.stringify(json, null, 2), "utf-8");
138
+ p.log.info(`${pc.blue("\u2139")} Updated tsconfig.json to include .kalp/generated/*.d.ts`);
139
+ }
140
+ } catch {
141
+ }
142
+ }
143
+ export {
144
+ generate_default as default
145
+ };
146
+ //# sourceMappingURL=generate-ODZUKTF2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/generate.ts","../src/utils/sync.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { cwd } from \"node:process\";\nimport { synchronizer } from \"@/utils/sync\";\nimport { ProjectTypesGenerator } from \"@/utils/codegen\";\nimport { McpTypesGenerator } from \"@/utils/mcp-codegen\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"generate\",\n description: \"Synchronize project types, MCP tools, and manifests\",\n },\n args: {\n force: {\n type: \"boolean\",\n description: \"Force regeneration of all artifacts\",\n default: false,\n },\n mcpOnly: {\n type: \"boolean\",\n description: \"Only regenerate MCP types\",\n default: false,\n },\n },\n async run({ args }) {\n p.intro(`${LOGO} ${pc.bold(\"kalp generate\")}`);\n const projectCwd = cwd();\n\n // 1. Register generators (Decoupled bootstrap)\n synchronizer\n .register(new ProjectTypesGenerator())\n .register(new McpTypesGenerator());\n\n const spinner = p.spinner();\n spinner.start(\"Synchronizing project artifacts\");\n\n try {\n const ids = args.mcpOnly ? [\"mcp\"] : undefined;\n const results = await synchronizer.run(projectCwd, { ids, force: args.force });\n\n spinner.stop(\"Synchronization completed\");\n\n // 2. Report results\n for (const [id, result] of Object.entries(results)) {\n const icon = result.updated ? pc.green(\"✓\") : pc.dim(\"-\");\n const status = result.updated ? \"updated\" : \"up to date\";\n p.log.info(`${icon} ${pc.bold(id)}: ${status}`);\n \n if (result.warnings?.length) {\n for (const warning of result.warnings) {\n p.log.warn(` ${pc.yellow(\"▲\")} ${pc.dim(warning)}`);\n }\n }\n }\n\n // 3. Ensure tsconfig is updated\n await ensureTsconfigIncludes(projectCwd);\n\n p.outro(pc.green(\"Project is in sync!\"));\n } catch (error) {\n spinner.stop(\"Synchronization failed\");\n const message = error instanceof Error ? error.message : String(error);\n p.cancel(message);\n process.exit(1);\n }\n },\n});\n\nasync function ensureTsconfigIncludes(cwd: string) {\n const tsconfigPath = join(cwd, \"tsconfig.json\");\n try {\n const content = await readFile(tsconfigPath, \"utf-8\");\n const json = JSON.parse(content);\n if (!json.include) json.include = [];\n \n const required = [\".kalp/generated/*.d.ts\"];\n let changed = false;\n \n for (const path of required) {\n if (!json.include.includes(path)) {\n json.include.push(path);\n changed = true;\n }\n }\n \n if (changed) {\n await writeFile(tsconfigPath, JSON.stringify(json, null, 2), \"utf-8\");\n p.log.info(`${pc.blue(\"ℹ\")} Updated tsconfig.json to include .kalp/generated/*.d.ts`);\n }\n } catch {\n // Ignore if no tsconfig\n }\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport pc from \"picocolors\";\nimport * as p from \"@clack/prompts\";\n\nexport interface GeneratorResult {\n updated: boolean;\n message?: string;\n warnings?: string[];\n}\n\nexport interface ProjectGenerator {\n id: string;\n name: string;\n generate: (cwd: string) => Promise<GeneratorResult>;\n}\n\nexport interface SyncManifest {\n version: number;\n generatedAt: string;\n generators: Record<string, {\n hash?: string;\n updatedAt: string;\n }>;\n}\n\nconst MANIFEST_VERSION = 1;\n\nexport class ProjectSynchronizer {\n private generators = new Map<string, ProjectGenerator>();\n\n register(generator: ProjectGenerator) {\n this.generators.set(generator.id, generator);\n return this;\n }\n\n async run(cwd: string, options: { ids?: string[]; force?: boolean } = {}) {\n const generatedDir = join(cwd, \".kalp\", \"generated\");\n await mkdir(generatedDir, { recursive: true });\n\n const manifestPath = join(generatedDir, \"manifest.json\");\n const manifest = await this.readManifest(manifestPath);\n\n const ids = options.ids || Array.from(this.generators.keys());\n const results: Record<string, GeneratorResult> = {};\n\n for (const id of ids) {\n const generator = this.generators.get(id);\n if (!generator) {\n console.warn(`[Sync] Generator \"${id}\" not found.`);\n continue;\n }\n\n try {\n const result = await generator.generate(cwd);\n results[id] = result;\n\n if (result.updated) {\n manifest.generators[id] = {\n updatedAt: new Date().toISOString(),\n };\n }\n } catch (error) {\n throw new Error(`Generator \"${generator.name}\" failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n manifest.generatedAt = new Date().toISOString();\n await writeFile(manifestPath, JSON.stringify(manifest, null, 2), \"utf-8\");\n\n return results;\n }\n\n private async readManifest(path: string): Promise<SyncManifest> {\n try {\n const content = await readFile(path, \"utf-8\");\n return JSON.parse(content) as SyncManifest;\n } catch {\n return {\n version: MANIFEST_VERSION,\n generatedAt: new Date().toISOString(),\n generators: {},\n };\n }\n }\n}\n\n/**\n * Global synchronizer instance.\n */\nexport const synchronizer = new ProjectSynchronizer();\n"],"mappings":"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","names":["cwd","readFile","writeFile","join","spinner","cwd"]}
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import pc from "picocolors";
8
8
  // package.json
9
9
  var package_default = {
10
10
  name: "@kalphq/cli",
11
- version: "0.0.0-dev-20260513152102",
11
+ version: "0.0.0-dev-20260517015600",
12
12
  description: "Zero-config CLI for deploying Kalp agents",
13
13
  type: "module",
14
14
  license: "MIT",
@@ -41,6 +41,7 @@ var package_default = {
41
41
  esbuild: "0.25.0",
42
42
  execa: "^9.6.1",
43
43
  jiti: "^2.6.1",
44
+ hono: "^4.12.18",
44
45
  jose: "^5.10.0",
45
46
  "json-schema-to-typescript": "^15.0.4",
46
47
  "json-stable-stringify": "1.3.0",
@@ -64,7 +65,8 @@ var COMMANDS = [
64
65
  ["push", "Upload updated agents"],
65
66
  ["agents", "List and manage agents"],
66
67
  ["secrets", "Manage secrets"],
67
- ["mcp", "Generate MCP types"],
68
+ ["generate", "Sync project state (types, MCP, etc.)"],
69
+ ["mcp", "Manage MCP tool types"],
68
70
  ["login", "Sign in to remote runtime"],
69
71
  ["logout", "Sign out from Kalp"],
70
72
  ["dev", "Run Worker + Studio locally"]
@@ -94,17 +96,18 @@ var main = defineCommand({
94
96
  }
95
97
  },
96
98
  subCommands: {
97
- create: () => import("./create-UCJ77P62.js").then((r) => r.default),
98
- deploy: () => import("./deploy-DRZZ3YRB.js").then((r) => r.default),
99
- push: () => import("./push-P6CKRYT7.js").then((r) => r.default),
100
- agents: () => import("./agents-WYK6WNQP.js").then((r) => r.default),
101
- secrets: () => import("./secrets-M43LLCTB.js").then((r) => r.default),
102
- mcp: () => import("./mcp-DRMQYA7E.js").then((r) => r.default),
103
- login: () => import("./login-MGPA2VYV.js").then((r) => r.default),
99
+ create: () => import("./create-ILPQCRA2.js").then((r) => r.default),
100
+ deploy: () => import("./deploy-EWYNN3VU.js").then((r) => r.default),
101
+ push: () => import("./push-OL7562HM.js").then((r) => r.default),
102
+ agents: () => import("./agents-L22L47II.js").then((r) => r.default),
103
+ secrets: () => import("./secrets-BPESLXMK.js").then((r) => r.default),
104
+ mcp: () => import("./mcp-77OLNT5R.js").then((r) => r.default),
105
+ generate: () => import("./generate-ODZUKTF2.js").then((r) => r.default),
106
+ login: () => import("./login-BDLHS4HC.js").then((r) => r.default),
104
107
  logout: () => import("./logout-U5V5K775.js").then((r) => r.default),
105
- dev: () => import("./dev-5YY6W4WM.js").then((r) => r.default)
108
+ dev: () => import("./dev-3IEEUVYM.js").then((r) => r.default)
106
109
  },
107
- run({ args }) {
110
+ async run({ args }) {
108
111
  const firstArg = process.argv[2];
109
112
  if (args.help) {
110
113
  p.intro(`${LOGO} ${pc.bold("kalp")}`);
@@ -120,5 +123,22 @@ var main = defineCommand({
120
123
  p.outro("Happy coding \u{1F98B}");
121
124
  }
122
125
  });
123
- runMain(main);
126
+ async function bootstrap() {
127
+ try {
128
+ const { readDotEnv } = await import("./ai-7EBQF25Y.js");
129
+ const cwd = process.cwd();
130
+ const env = await readDotEnv(cwd);
131
+ if (Object.keys(env).length > 0) {
132
+ for (const [key, value] of Object.entries(env)) {
133
+ if (!(key in process.env)) {
134
+ process.env[key] = value;
135
+ }
136
+ }
137
+ }
138
+ } catch {
139
+ }
140
+ }
141
+ bootstrap().then(() => {
142
+ runMain(main);
143
+ });
124
144
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../package.json"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport pkg from \"../package.json\";\n\nconst LOGO = \"🦋\";\n\nconst COMMANDS = [\n [\"create\", \"Add a new agent\"],\n [\"deploy\", \"Deploy your agents runtime\"],\n [\"push\", \"Upload updated agents\"],\n [\"agents\", \"List and manage agents\"],\n [\"secrets\", \"Manage secrets\"],\n [\"mcp\", \"Generate MCP types\"],\n [\"login\", \"Sign in to remote runtime\"],\n [\"logout\", \"Sign out from Kalp\"],\n [\"dev\", \"Run Worker + Studio locally\"],\n] as const;\n\nfunction printHelp(): void {\n p.log.info(`${pc.bold(\"Usage\")}: kalp <command> [options]`);\n console.log(\"\");\n p.log.info(pc.bold(\"Commands\"));\n\n for (const [name, desc] of COMMANDS) {\n console.log(` ${pc.cyan(name.padEnd(10))}${desc}`);\n }\n\n console.log(\"\");\n p.log.info(`Run ${pc.cyan(\"kalp <command> --help\")} for more info.`);\n}\n\nconst main = defineCommand({\n meta: {\n name: \"kalp\",\n version: pkg.version,\n description: \"🦋 Zero-config agent infrastructure\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n create: () => import(\"./commands/create\").then((r) => r.default),\n deploy: () => import(\"./commands/deploy\").then((r) => r.default),\n push: () => import(\"./commands/push\").then((r) => r.default),\n agents: () => import(\"./commands/agents\").then((r) => r.default),\n secrets: () => import(\"./commands/secrets\").then((r) => r.default),\n mcp: () => import(\"./commands/mcp\").then((r) => r.default),\n login: () => import(\"./commands/login\").then((r) => r.default),\n logout: () => import(\"./commands/logout\").then((r) => r.default),\n dev: () => import(\"./commands/dev\").then((r) => r.default),\n },\n run({ args }) {\n const firstArg = process.argv[2];\n\n if (args.help) {\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n return;\n }\n\n if (firstArg) {\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n },\n});\n\nrunMain(main);\n","{\n \"name\": \"@kalphq/cli\",\n \"version\": \"0.0.0-dev-20260513152102\",\n \"description\": \"Zero-config CLI for deploying Kalp agents\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"author\": \"Kalp HQ\",\n \"bin\": {\n \"kalp\": \"./dist/index.js\"\n },\n \"main\": \"./dist/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup && pnpm run build:studio && pnpm run build:runtime-template\",\n \"build:studio\": \"pnpm --filter=@kalphq/studio build\",\n \"build:runtime-template\": \"node ./scripts/prepare-runtime-template.mjs\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"tsc --noEmit\",\n \"prepublishOnly\": \"pnpm build\"\n },\n \"dependencies\": {\n \"@antfu/ni\": \"24.4.0\",\n \"@clack/prompts\": \"0.9.1\",\n \"@kalphq/compiler\": \"workspace:*\",\n \"@kalphq/project\": \"workspace:*\",\n \"@kalphq/sdk\": \"workspace:*\",\n \"citty\": \"0.1.6\",\n \"esbuild\": \"0.25.0\",\n \"execa\": \"^9.6.1\",\n \"jiti\": \"^2.6.1\",\n \"jose\": \"^5.10.0\",\n \"json-schema-to-typescript\": \"^15.0.4\",\n \"json-stable-stringify\": \"1.3.0\",\n \"open\": \"^11.0.0\",\n \"picocolors\": \"1.1.1\",\n \"zod\": \"3.25.76\"\n },\n \"devDependencies\": {\n \"@types/json-stable-stringify\": \"1.2.0\",\n \"@types/node\": \"^22.15.3\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.0.0\"\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../package.json"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport pkg from \"../package.json\";\n\nconst LOGO = \"🦋\";\n\nconst COMMANDS = [\n [\"create\", \"Add a new agent\"],\n [\"deploy\", \"Deploy your agents runtime\"],\n [\"push\", \"Upload updated agents\"],\n [\"agents\", \"List and manage agents\"],\n [\"secrets\", \"Manage secrets\"],\n [\"generate\", \"Sync project state (types, MCP, etc.)\"],\n [\"mcp\", \"Manage MCP tool types\"],\n [\"login\", \"Sign in to remote runtime\"],\n [\"logout\", \"Sign out from Kalp\"],\n [\"dev\", \"Run Worker + Studio locally\"],\n] as const;\n\nfunction printHelp(): void {\n p.log.info(`${pc.bold(\"Usage\")}: kalp <command> [options]`);\n console.log(\"\");\n p.log.info(pc.bold(\"Commands\"));\n\n for (const [name, desc] of COMMANDS) {\n console.log(` ${pc.cyan(name.padEnd(10))}${desc}`);\n }\n\n console.log(\"\");\n p.log.info(`Run ${pc.cyan(\"kalp <command> --help\")} for more info.`);\n}\n\nconst main = defineCommand({\n meta: {\n name: \"kalp\",\n version: pkg.version,\n description: \"🦋 Zero-config agent infrastructure\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n create: () => import(\"./commands/create\").then((r) => r.default),\n deploy: () => import(\"./commands/deploy\").then((r) => r.default),\n push: () => import(\"./commands/push\").then((r) => r.default),\n agents: () => import(\"./commands/agents\").then((r) => r.default),\n secrets: () => import(\"./commands/secrets\").then((r) => r.default),\n mcp: () => import(\"./commands/mcp\").then((r) => r.default),\n generate: () => import(\"./commands/generate\").then((r) => r.default),\n login: () => import(\"./commands/login\").then((r) => r.default),\n logout: () => import(\"./commands/logout\").then((r) => r.default),\n dev: () => import(\"./commands/dev\").then((r) => r.default),\n },\n async run({ args }) {\n const firstArg = process.argv[2];\n\n if (args.help) {\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n return;\n }\n\n if (firstArg) {\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n },\n});\n\n// Load .env if it exists in the current directory\nasync function bootstrap() {\n try {\n const { readDotEnv } = await import(\"./utils/ai\");\n const cwd = process.cwd();\n const env = await readDotEnv(cwd);\n if (Object.keys(env).length > 0) {\n for (const [key, value] of Object.entries(env)) {\n if (!(key in process.env)) {\n process.env[key] = value;\n }\n }\n }\n } catch {\n // Ignore errors during bootstrap\n }\n}\n\n// Ensure bootstrap runs before runMain\nbootstrap().then(() => {\n runMain(main);\n});\n","{\n \"name\": \"@kalphq/cli\",\n \"version\": \"0.0.0-dev-20260517015600\",\n \"description\": \"Zero-config CLI for deploying Kalp agents\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"author\": \"Kalp HQ\",\n \"bin\": {\n \"kalp\": \"./dist/index.js\"\n },\n \"main\": \"./dist/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup && pnpm run build:studio && pnpm run build:runtime-template\",\n \"build:studio\": \"pnpm --filter=@kalphq/studio build\",\n \"build:runtime-template\": \"node ./scripts/prepare-runtime-template.mjs\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"tsc --noEmit\",\n \"prepublishOnly\": \"pnpm build\"\n },\n \"dependencies\": {\n \"@antfu/ni\": \"24.4.0\",\n \"@clack/prompts\": \"0.9.1\",\n \"@kalphq/compiler\": \"workspace:*\",\n \"@kalphq/project\": \"workspace:*\",\n \"@kalphq/sdk\": \"workspace:*\",\n \"citty\": \"0.1.6\",\n \"esbuild\": \"0.25.0\",\n \"execa\": \"^9.6.1\",\n \"jiti\": \"^2.6.1\",\n \"hono\": \"^4.12.18\",\n \"jose\": \"^5.10.0\",\n \"json-schema-to-typescript\": \"^15.0.4\",\n \"json-stable-stringify\": \"1.3.0\",\n \"open\": \"^11.0.0\",\n \"picocolors\": \"1.1.1\",\n \"zod\": \"3.25.76\"\n },\n \"devDependencies\": {\n \"@types/json-stable-stringify\": \"1.2.0\",\n \"@types/node\": \"^22.15.3\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.0.0\"\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,17 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readRemoteAgentsIndex
4
- } from "./chunk-5SZMD7E6.js";
4
+ } from "./chunk-TNNBTSDC.js";
5
5
  import {
6
6
  resolveSecretsRuntimeConfigPath
7
- } from "./chunk-IZXCZ3IA.js";
7
+ } from "./chunk-4CPUJ537.js";
8
8
  import "./chunk-INB3LG6O.js";
9
- import "./chunk-XVD3FFOJ.js";
10
9
  import {
11
10
  requireAuth
12
- } from "./chunk-S3KAVLVM.js";
11
+ } from "./chunk-D53K6UE6.js";
13
12
  import "./chunk-FO24J6XL.js";
13
+ import "./chunk-JXR6TPR5.js";
14
14
  import "./chunk-EXXTCGKR.js";
15
+ import "./chunk-LEKRFM4Q.js";
15
16
 
16
17
  // src/commands/agents/list.ts
17
18
  import { access, mkdir, readFile, writeFile } from "fs/promises";
@@ -157,4 +158,4 @@ var list_default = defineCommand({
157
158
  export {
158
159
  list_default as default
159
160
  };
160
- //# sourceMappingURL=list-FKH4DWCF.js.map
161
+ //# sourceMappingURL=list-BNQ34QG3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/agents/list.ts"],"sourcesContent":["import { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport {\n type RemoteAgentIndexEntry,\n readRemoteAgentsIndex,\n} from \"@/utils/agents-remote\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\nconst CACHE_TTL_MS = 20_000;\n\ninterface RemoteAgentListCache {\n cachedAt: string;\n entries: RemoteAgentIndexEntry[];\n}\n\nfunction pad(value: string, width: number): string {\n return value.length >= width\n ? value\n : `${value}${\" \".repeat(width - value.length)}`;\n}\n\nfunction renderTable(rows: RemoteAgentIndexEntry[]): void {\n const headers = {\n name: \"Agent\",\n version: \"Version\",\n updated: \"Updated\",\n status: \"Status\",\n };\n\n const widths = {\n name: Math.max(headers.name.length, ...rows.map((r) => r.name.length), 5),\n version: Math.max(\n headers.version.length,\n ...rows.map((r) => (r.version ?? \"—\").length),\n 7,\n ),\n updated: Math.max(\n headers.updated.length,\n ...rows.map((r) => (r.updatedAt || \"—\").length),\n 7,\n ),\n status: headers.status.length,\n };\n\n const divider = ` ${\"-\".repeat(widths.name)} ${\"-\".repeat(widths.version)} ${\"-\".repeat(widths.updated)} ${\"-\".repeat(widths.status)}`;\n console.log(\n ` ${pc.bold(pad(headers.name, widths.name))} ${pc.bold(pad(headers.version, widths.version))} ${pc.bold(pad(headers.updated, widths.updated))} ${pc.bold(pad(headers.status, widths.status))}`,\n );\n console.log(pc.dim(divider));\n\n for (const row of rows) {\n const version = row.version ?? \"—\";\n const updated = row.updatedAt || \"—\";\n const statusText = \"online\";\n const status = `${pc.green(statusText)}${\" \".repeat(Math.max(0, widths.status - statusText.length))}`;\n console.log(\n ` ${pad(row.name, widths.name)} ${pad(version, widths.version)} ${pad(updated, widths.updated)} ${status}`,\n );\n }\n}\n\nfunction getCachePath(cwd: string): string {\n return join(cwd, \".kalp\", \"cache\", \"agents-list-remote.json\");\n}\n\nasync function readCache(cwd: string): Promise<RemoteAgentListCache | null> {\n const cachePath = getCachePath(cwd);\n try {\n await access(cachePath);\n } catch {\n return null;\n }\n\n const raw = await readFile(cachePath, \"utf-8\").catch(() => null);\n if (!raw) return null;\n\n try {\n const parsed = JSON.parse(raw) as RemoteAgentListCache;\n if (!parsed || !Array.isArray(parsed.entries) || !parsed.cachedAt) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nasync function writeCache(\n cwd: string,\n entries: RemoteAgentIndexEntry[],\n): Promise<void> {\n const cachePath = getCachePath(cwd);\n await mkdir(dirname(cachePath), { recursive: true });\n const payload: RemoteAgentListCache = {\n cachedAt: new Date().toISOString(),\n entries,\n };\n await writeFile(cachePath, JSON.stringify(payload, null, 2), \"utf-8\");\n}\n\nfunction isFresh(cache: RemoteAgentListCache): boolean {\n const cachedAt = Date.parse(cache.cachedAt);\n if (!Number.isFinite(cachedAt)) return false;\n return Date.now() - cachedAt <= CACHE_TTL_MS;\n}\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List remote agents\",\n },\n args: {\n refresh: {\n type: \"boolean\",\n description: \"Force refresh remote data (skip cache)\",\n default: false,\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n default: false,\n description: \"Show help\",\n },\n },\n async run({ args }) {\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp agents list [--refresh]`);\n return;\n }\n\n const cwd = process.cwd();\n p.intro(`${LOGO} ${pc.bold(\"kalp agents list\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const spinner = p.spinner();\n spinner.start(\"Loading remote agents\");\n\n try {\n const cache = args.refresh ? null : await readCache(cwd);\n let entries: RemoteAgentIndexEntry[];\n\n if (cache && isFresh(cache)) {\n entries = cache.entries;\n spinner.stop(\n `Loaded ${entries.length} agents ${pc.dim(\"(cached, remote)\")}`,\n );\n } else {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n entries = await readRemoteAgentsIndex(cwd, configPath);\n await writeCache(cwd, entries).catch(() => null);\n spinner.stop(`Loaded ${entries.length} agents from remote runtime`);\n }\n\n const rows = [...entries].sort((a, b) => a.name.localeCompare(b.name));\n if (rows.length === 0) {\n p.log.info(pc.dim(\"No remote agents found.\"));\n return;\n }\n\n renderTable(rows);\n } catch (error) {\n spinner.stop(\"Failed to load remote agents\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":["spinner"]}
1
+ {"version":3,"sources":["../src/commands/agents/list.ts"],"sourcesContent":["import { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport {\n type RemoteAgentIndexEntry,\n readRemoteAgentsIndex,\n} from \"@/utils/agents-remote\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\nconst CACHE_TTL_MS = 20_000;\n\ninterface RemoteAgentListCache {\n cachedAt: string;\n entries: RemoteAgentIndexEntry[];\n}\n\nfunction pad(value: string, width: number): string {\n return value.length >= width\n ? value\n : `${value}${\" \".repeat(width - value.length)}`;\n}\n\nfunction renderTable(rows: RemoteAgentIndexEntry[]): void {\n const headers = {\n name: \"Agent\",\n version: \"Version\",\n updated: \"Updated\",\n status: \"Status\",\n };\n\n const widths = {\n name: Math.max(headers.name.length, ...rows.map((r) => r.name.length), 5),\n version: Math.max(\n headers.version.length,\n ...rows.map((r) => (r.version ?? \"—\").length),\n 7,\n ),\n updated: Math.max(\n headers.updated.length,\n ...rows.map((r) => (r.updatedAt || \"—\").length),\n 7,\n ),\n status: headers.status.length,\n };\n\n const divider = ` ${\"-\".repeat(widths.name)} ${\"-\".repeat(widths.version)} ${\"-\".repeat(widths.updated)} ${\"-\".repeat(widths.status)}`;\n console.log(\n ` ${pc.bold(pad(headers.name, widths.name))} ${pc.bold(pad(headers.version, widths.version))} ${pc.bold(pad(headers.updated, widths.updated))} ${pc.bold(pad(headers.status, widths.status))}`,\n );\n console.log(pc.dim(divider));\n\n for (const row of rows) {\n const version = row.version ?? \"—\";\n const updated = row.updatedAt || \"—\";\n const statusText = \"online\";\n const status = `${pc.green(statusText)}${\" \".repeat(Math.max(0, widths.status - statusText.length))}`;\n console.log(\n ` ${pad(row.name, widths.name)} ${pad(version, widths.version)} ${pad(updated, widths.updated)} ${status}`,\n );\n }\n}\n\nfunction getCachePath(cwd: string): string {\n return join(cwd, \".kalp\", \"cache\", \"agents-list-remote.json\");\n}\n\nasync function readCache(cwd: string): Promise<RemoteAgentListCache | null> {\n const cachePath = getCachePath(cwd);\n try {\n await access(cachePath);\n } catch {\n return null;\n }\n\n const raw = await readFile(cachePath, \"utf-8\").catch(() => null);\n if (!raw) return null;\n\n try {\n const parsed = JSON.parse(raw) as RemoteAgentListCache;\n if (!parsed || !Array.isArray(parsed.entries) || !parsed.cachedAt) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nasync function writeCache(\n cwd: string,\n entries: RemoteAgentIndexEntry[],\n): Promise<void> {\n const cachePath = getCachePath(cwd);\n await mkdir(dirname(cachePath), { recursive: true });\n const payload: RemoteAgentListCache = {\n cachedAt: new Date().toISOString(),\n entries,\n };\n await writeFile(cachePath, JSON.stringify(payload, null, 2), \"utf-8\");\n}\n\nfunction isFresh(cache: RemoteAgentListCache): boolean {\n const cachedAt = Date.parse(cache.cachedAt);\n if (!Number.isFinite(cachedAt)) return false;\n return Date.now() - cachedAt <= CACHE_TTL_MS;\n}\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List remote agents\",\n },\n args: {\n refresh: {\n type: \"boolean\",\n description: \"Force refresh remote data (skip cache)\",\n default: false,\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n default: false,\n description: \"Show help\",\n },\n },\n async run({ args }) {\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp agents list [--refresh]`);\n return;\n }\n\n const cwd = process.cwd();\n p.intro(`${LOGO} ${pc.bold(\"kalp agents list\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const spinner = p.spinner();\n spinner.start(\"Loading remote agents\");\n\n try {\n const cache = args.refresh ? null : await readCache(cwd);\n let entries: RemoteAgentIndexEntry[];\n\n if (cache && isFresh(cache)) {\n entries = cache.entries;\n spinner.stop(\n `Loaded ${entries.length} agents ${pc.dim(\"(cached, remote)\")}`,\n );\n } else {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n entries = await readRemoteAgentsIndex(cwd, configPath);\n await writeCache(cwd, entries).catch(() => null);\n spinner.stop(`Loaded ${entries.length} agents from remote runtime`);\n }\n\n const rows = [...entries].sort((a, b) => a.name.localeCompare(b.name));\n if (rows.length === 0) {\n p.log.info(pc.dim(\"No remote agents found.\"));\n return;\n }\n\n renderTable(rows);\n } catch (error) {\n spinner.stop(\"Failed to load remote agents\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":["spinner"]}