@kodycodes/cli 3.0.5 → 3.1.0

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 (58) hide show
  1. package/README.md +6 -3
  2. package/dist/{auth-FV2O77LC.js → auth-2N7CSZGJ.js} +5 -5
  3. package/dist/bin.js +8 -8
  4. package/dist/{chunk-YXJ5S67U.js → chunk-5BIXRCH7.js} +2 -2
  5. package/dist/{chunk-WDVDHEEN.js → chunk-FDRTJFCM.js} +2 -2
  6. package/dist/{chunk-PZKBPKJ2.js → chunk-FS3BGXCK.js} +2 -2
  7. package/dist/{chunk-PUQGDXIY.js → chunk-JNQKDAPN.js} +2 -2
  8. package/dist/{chunk-VMP2UL6Z.js → chunk-PDDX5RJS.js} +6 -6
  9. package/dist/{chunk-SSBZQMVX.js → chunk-QI3ZICHR.js} +5 -5
  10. package/dist/chunk-TCJSXIEG.js +233 -0
  11. package/dist/chunk-TCJSXIEG.js.map +6 -0
  12. package/dist/{chunk-PIPQ2TTK.js → chunk-TGBFPYAY.js} +4 -4
  13. package/dist/{chunk-R6WETL6J.js → chunk-TK2Y4XD6.js} +51 -41
  14. package/dist/chunk-TK2Y4XD6.js.map +6 -0
  15. package/dist/{chunk-HO4GCC6N.js → chunk-YFDVDTNX.js} +15 -15
  16. package/dist/cli.js +8 -8
  17. package/dist/{dev-command-UDO2T4OI.js → dev-command-OUTCMZOC.js} +27 -27
  18. package/dist/{git-credential-6CJWVNED.js → git-credential-NTAPSLZP.js} +6 -6
  19. package/dist/{local-execute-O7FXIINV.js → local-execute-6NSAVTAV.js} +12 -12
  20. package/dist/{local-package-graph-FEPI7JNQ.js → local-package-graph-UU3XHKIM.js} +2 -2
  21. package/dist/{local-package-run-42R3CP2A.js → local-package-run-RATCOPRD.js} +9 -9
  22. package/dist/{mock-dep-resolve-TTCQQEN2.js → mock-dep-resolve-FM5GKMKE.js} +6 -6
  23. package/dist/mock-fetch-gateway-TNK74HEP.js +1 -1
  24. package/dist/{mock-local-deps-Z6DBUQTP.js → mock-local-deps-6I7HSHXD.js} +4 -4
  25. package/dist/mock-server-CJQI6B3A.js +1 -1
  26. package/dist/{open-api-client-42L6TM2U.js → open-api-client-7TV5SPHT.js} +3 -3
  27. package/dist/{remote-execute-J35MQTUC.js → remote-execute-XLKI7JTI.js} +3 -3
  28. package/dist/{setup-git-IGLLNSLA.js → setup-git-LQVUW2D4.js} +4 -4
  29. package/dist/skill-7B2RL273.js +38 -0
  30. package/dist/skill-7B2RL273.js.map +6 -0
  31. package/dist/skill-refresh.d.ts +2 -0
  32. package/dist/skill-refresh.js +20 -0
  33. package/dist/skill-refresh.js.map +6 -0
  34. package/dist/skill.d.ts +53 -11
  35. package/package.json +2 -2
  36. package/skills/kody/SKILL.md +15 -129
  37. package/dist/chunk-R6WETL6J.js.map +0 -6
  38. package/dist/skill-D74XVI6T.js +0 -61
  39. package/dist/skill-D74XVI6T.js.map +0 -6
  40. /package/dist/{auth-FV2O77LC.js.map → auth-2N7CSZGJ.js.map} +0 -0
  41. /package/dist/{chunk-YXJ5S67U.js.map → chunk-5BIXRCH7.js.map} +0 -0
  42. /package/dist/{chunk-WDVDHEEN.js.map → chunk-FDRTJFCM.js.map} +0 -0
  43. /package/dist/{chunk-PZKBPKJ2.js.map → chunk-FS3BGXCK.js.map} +0 -0
  44. /package/dist/{chunk-PUQGDXIY.js.map → chunk-JNQKDAPN.js.map} +0 -0
  45. /package/dist/{chunk-VMP2UL6Z.js.map → chunk-PDDX5RJS.js.map} +0 -0
  46. /package/dist/{chunk-SSBZQMVX.js.map → chunk-QI3ZICHR.js.map} +0 -0
  47. /package/dist/{chunk-PIPQ2TTK.js.map → chunk-TGBFPYAY.js.map} +0 -0
  48. /package/dist/{chunk-HO4GCC6N.js.map → chunk-YFDVDTNX.js.map} +0 -0
  49. /package/dist/{dev-command-UDO2T4OI.js.map → dev-command-OUTCMZOC.js.map} +0 -0
  50. /package/dist/{git-credential-6CJWVNED.js.map → git-credential-NTAPSLZP.js.map} +0 -0
  51. /package/dist/{local-execute-O7FXIINV.js.map → local-execute-6NSAVTAV.js.map} +0 -0
  52. /package/dist/{local-package-graph-FEPI7JNQ.js.map → local-package-graph-UU3XHKIM.js.map} +0 -0
  53. /package/dist/{local-package-run-42R3CP2A.js.map → local-package-run-RATCOPRD.js.map} +0 -0
  54. /package/dist/{mock-dep-resolve-TTCQQEN2.js.map → mock-dep-resolve-FM5GKMKE.js.map} +0 -0
  55. /package/dist/{mock-local-deps-Z6DBUQTP.js.map → mock-local-deps-6I7HSHXD.js.map} +0 -0
  56. /package/dist/{open-api-client-42L6TM2U.js.map → open-api-client-7TV5SPHT.js.map} +0 -0
  57. /package/dist/{remote-execute-J35MQTUC.js.map → remote-execute-XLKI7JTI.js.map} +0 -0
  58. /package/dist/{setup-git-IGLLNSLA.js.map → setup-git-LQVUW2D4.js.map} +0 -0
package/README.md CHANGED
@@ -37,8 +37,11 @@ for the CLI itself.
37
37
  npx @kodycodes/cli skill install
38
38
  ```
39
39
 
40
- copies the getting-started skill into Claude Code / Cursor / Agents. That skill
41
- also tells the agent to prefer the MCP server over the CLI.
40
+ installs the Kody CLI skill into Claude Code / Cursor / Codex / `.agents`
41
+ folders. It prefers the always-current hosted
42
+ `/.well-known/agent-skills/kody-cli/SKILL.md` (and refreshes stale local copies
43
+ on later CLI runs). That skill tells shell-capable agents to prefer
44
+ `execute --local`.
42
45
 
43
46
  `--mcp-url` or `KODY_MCP_URL` overrides the default `https://kody.codes/mcp`.
44
47
 
@@ -72,7 +75,7 @@ multi-org store as the active org (no re-login).
72
75
  | Command | Purpose |
73
76
  | ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
74
77
  | `kody install` | Detect running local MCP clients, write their config, and start host OAuth. **Recommended long-term path.** |
75
- | `kody skill install` | Copies the getting-started skill into Claude Code / Cursor / Agents. |
78
+ | `kody skill install` | Installs the hosted `kody-cli` skill (or the bundled stub offline) into Claude Code / Cursor / Codex / `.agents`. Later CLI runs refresh stale copies by digest. |
76
79
  | `kody login` | Browser OAuth (CIMD + PKCE) for the CLI itself. Adds/replaces one org login (browser picker, or `kody login --org acme`) and keeps other org logins. |
77
80
  | `kody org list` | Lists logged-in orgs and marks the active one. `--json` for agents. |
78
81
  | `kody org use [<slug>]` | Switches the active org. With a slug (agents) switches directly; with no slug on a TTY opens a chooser; without a TTY pass a slug. |
@@ -7,15 +7,15 @@ import {
7
7
  login,
8
8
  refreshStoredCredentials,
9
9
  resolvePendingOrgSlug
10
- } from "./chunk-SSBZQMVX.js";
10
+ } from "./chunk-QI3ZICHR.js";
11
11
  import "./chunk-CASGRYOF.js";
12
12
  import "./chunk-GVSGNTG6.js";
13
- import "./chunk-PIPQ2TTK.js";
13
+ import "./chunk-CWWHR4FH.js";
14
+ import "./chunk-TGBFPYAY.js";
14
15
  import "./chunk-46IJPEID.js";
15
- import "./chunk-BML3W5CO.js";
16
16
  import "./chunk-CCRCEU7S.js";
17
+ import "./chunk-BML3W5CO.js";
17
18
  import "./chunk-NHRYNRXG.js";
18
- import "./chunk-CWWHR4FH.js";
19
19
  import "./chunk-3H72XY5R.js";
20
20
  import "./chunk-BTL3PJ2H.js";
21
21
  import "./chunk-UW6AWLXX.js";
@@ -28,4 +28,4 @@ export {
28
28
  refreshStoredCredentials,
29
29
  resolvePendingOrgSlug
30
30
  };
31
- //# sourceMappingURL=auth-FV2O77LC.js.map
31
+ //# sourceMappingURL=auth-2N7CSZGJ.js.map
package/dist/bin.js CHANGED
@@ -2,23 +2,23 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  runCli
5
- } from "./chunk-R6WETL6J.js";
5
+ } from "./chunk-TK2Y4XD6.js";
6
6
  import "./chunk-2XPH7L2P.js";
7
7
  import "./chunk-SLNAWWQK.js";
8
8
  import "./chunk-YDWTXEKQ.js";
9
- import "./chunk-PZKBPKJ2.js";
10
- import "./chunk-PUQGDXIY.js";
9
+ import "./chunk-7PRJ36I5.js";
10
+ import "./chunk-FS3BGXCK.js";
11
+ import "./chunk-JNQKDAPN.js";
11
12
  import "./chunk-6ZYUGXVW.js";
12
- import "./chunk-SSBZQMVX.js";
13
+ import "./chunk-QI3ZICHR.js";
13
14
  import "./chunk-CASGRYOF.js";
14
15
  import "./chunk-GVSGNTG6.js";
15
- import "./chunk-PIPQ2TTK.js";
16
+ import "./chunk-CWWHR4FH.js";
17
+ import "./chunk-TGBFPYAY.js";
16
18
  import "./chunk-46IJPEID.js";
17
- import "./chunk-BML3W5CO.js";
18
19
  import "./chunk-CCRCEU7S.js";
20
+ import "./chunk-BML3W5CO.js";
19
21
  import "./chunk-NHRYNRXG.js";
20
- import "./chunk-7PRJ36I5.js";
21
- import "./chunk-CWWHR4FH.js";
22
22
  import "./chunk-3H72XY5R.js";
23
23
  import "./chunk-BTL3PJ2H.js";
24
24
  import "./chunk-UW6AWLXX.js";
@@ -1177,7 +1177,7 @@ async function resolveLocalPackageGraph(input) {
1177
1177
  mergePackageGraphs,
1178
1178
  resolveLocalPackageModules,
1179
1179
  tryLoadSelfManifest
1180
- } = await import("./mock-local-deps-Z6DBUQTP.js");
1180
+ } = await import("./mock-local-deps-6I7HSHXD.js");
1181
1181
  if (imports.length > 0 && input.packageRoot) {
1182
1182
  const selfManifest = await tryLoadSelfManifest(input.packageRoot);
1183
1183
  const local = await resolveLocalPackageModules({
@@ -1594,4 +1594,4 @@ export {
1594
1594
  createPackageBindingsLiteral,
1595
1595
  fetchLocalPackageGraph
1596
1596
  };
1597
- //# sourceMappingURL=chunk-YXJ5S67U.js.map
1597
+ //# sourceMappingURL=chunk-5BIXRCH7.js.map
@@ -3,7 +3,7 @@ import {
3
3
  localExecuteGatewayFetchShimModuleName,
4
4
  localWorkerModuleNames,
5
5
  runSecretHeader
6
- } from "./chunk-YXJ5S67U.js";
6
+ } from "./chunk-5BIXRCH7.js";
7
7
  import {
8
8
  redact
9
9
  } from "./chunk-CASGRYOF.js";
@@ -475,4 +475,4 @@ export {
475
475
  assertLocalPackageScopedSecretWriteAllowed,
476
476
  installMockFetchShimModules
477
477
  };
478
- //# sourceMappingURL=chunk-WDVDHEEN.js.map
478
+ //# sourceMappingURL=chunk-FDRTJFCM.js.map
@@ -30,7 +30,7 @@ async function resolveLocalExecuteBearer(input) {
30
30
  `kody login credentials for ${mcpOrigin} are only sent to ${expectedPairedApiOrigin(mcpUrl)}. For ${apiOrigin}, run \`kody auth bootstrap --code \u2026 --api-url ${apiOrigin}\` or set KODY_API_TOKEN.`
31
31
  );
32
32
  }
33
- const ensure = input.ensureCredentials ?? (await import("./auth-FV2O77LC.js")).ensureFreshCredentials;
33
+ const ensure = input.ensureCredentials ?? (await import("./auth-2N7CSZGJ.js")).ensureFreshCredentials;
34
34
  try {
35
35
  const credentials = await ensure({
36
36
  mcpUrl: input.mcpUrl,
@@ -51,4 +51,4 @@ async function resolveLocalExecuteBearer(input) {
51
51
  export {
52
52
  resolveLocalExecuteBearer
53
53
  };
54
- //# sourceMappingURL=chunk-PZKBPKJ2.js.map
54
+ //# sourceMappingURL=chunk-FS3BGXCK.js.map
@@ -6,7 +6,7 @@ import {
6
6
  OpenApiError,
7
7
  openApiGet,
8
8
  openApiRequest
9
- } from "./chunk-PIPQ2TTK.js";
9
+ } from "./chunk-TGBFPYAY.js";
10
10
  import {
11
11
  assertTokenSafeApiUrl,
12
12
  capabilityProxyUrl,
@@ -982,4 +982,4 @@ export {
982
982
  authRemoveGit,
983
983
  formatAuthRemoveGitReport
984
984
  };
985
- //# sourceMappingURL=chunk-PUQGDXIY.js.map
985
+ //# sourceMappingURL=chunk-JNQKDAPN.js.map
@@ -2,17 +2,17 @@ import { createRequire as __createRequire } from 'node:module'; const require =
2
2
  import {
3
3
  bundleLocalUserModule
4
4
  } from "./chunk-7RLOLQIT.js";
5
- import {
6
- loadPackageManifest,
7
- resolveExportModulePath
8
- } from "./chunk-RAZBIC6O.js";
9
5
  import {
10
6
  LocalPackageGraphError,
11
7
  absolutizeWorkerdPackageImports,
12
8
  hasLiteralDynamicSavedPackageImports,
13
9
  listSavedPackageImports,
14
10
  rewriteBareKodyBuiltinImports
15
- } from "./chunk-YXJ5S67U.js";
11
+ } from "./chunk-5BIXRCH7.js";
12
+ import {
13
+ loadPackageManifest,
14
+ resolveExportModulePath
15
+ } from "./chunk-RAZBIC6O.js";
16
16
 
17
17
  // src/mock-local-deps.ts
18
18
  import { access, readFile } from "node:fs/promises";
@@ -199,4 +199,4 @@ export {
199
199
  tryLoadSelfManifest,
200
200
  packageRootOf
201
201
  };
202
- //# sourceMappingURL=chunk-VMP2UL6Z.js.map
202
+ //# sourceMappingURL=chunk-PDDX5RJS.js.map
@@ -5,18 +5,18 @@ import {
5
5
  import {
6
6
  openUrl
7
7
  } from "./chunk-GVSGNTG6.js";
8
+ import {
9
+ orgSlugFromFlag
10
+ } from "./chunk-CWWHR4FH.js";
8
11
  import {
9
12
  OpenApiError,
10
13
  openApiGet,
11
14
  openApiRequest
12
- } from "./chunk-PIPQ2TTK.js";
15
+ } from "./chunk-TGBFPYAY.js";
13
16
  import {
14
17
  isScopedApiToken,
15
18
  notAuthenticatedMessage
16
19
  } from "./chunk-CCRCEU7S.js";
17
- import {
18
- orgSlugFromFlag
19
- } from "./chunk-CWWHR4FH.js";
20
20
  import {
21
21
  fileStorePath,
22
22
  loadCredentialStore,
@@ -2132,4 +2132,4 @@ export {
2132
2132
  ensureOpenApiCredentials,
2133
2133
  login
2134
2134
  };
2135
- //# sourceMappingURL=chunk-SSBZQMVX.js.map
2135
+ //# sourceMappingURL=chunk-QI3ZICHR.js.map
@@ -0,0 +1,233 @@
1
+ import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
+ import {
3
+ defaultMcpUrl
4
+ } from "./chunk-BTL3PJ2H.js";
5
+
6
+ // src/skill.ts
7
+ import { spawn } from "node:child_process";
8
+ import { createHash, randomBytes } from "node:crypto";
9
+ import { mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
10
+ import { basename, dirname, join } from "node:path";
11
+ import { fileURLToPath } from "node:url";
12
+ import { homedir } from "node:os";
13
+ var skillRelativePath = "skills/kody/SKILL.md";
14
+ var hostedSkillName = "kody-cli";
15
+ var skillFrontmatter = `---
16
+ name: kody
17
+ description: >
18
+ Install and bootstrap the Kody CLI, then prefer \`execute --local\` when Node
19
+ and a shell are available. Use when the person mentions Kody or wants local
20
+ execute instead of hosted Worker compute days.
21
+ ---
22
+
23
+ `;
24
+ var hostedAgentSkillsIndexPath = "/.well-known/agent-skills/index.json";
25
+ function bundledSkillPath() {
26
+ return join(fileURLToPath(new URL("../", import.meta.url)), skillRelativePath);
27
+ }
28
+ function agentSkillsOriginFromMcpUrl(mcpUrl = defaultMcpUrl) {
29
+ return new URL(mcpUrl).origin;
30
+ }
31
+ function userSkillTargets(home = homedir()) {
32
+ return [
33
+ {
34
+ host: "Claude Code",
35
+ path: join(home, ".claude", "skills", "kody", "SKILL.md")
36
+ },
37
+ {
38
+ host: "Cursor",
39
+ path: join(home, ".cursor", "skills", "kody", "SKILL.md")
40
+ },
41
+ {
42
+ host: "Codex",
43
+ path: join(home, ".codex", "skills", "kody", "SKILL.md")
44
+ },
45
+ {
46
+ host: "Agents",
47
+ path: join(home, ".agents", "skills", "kody", "SKILL.md")
48
+ }
49
+ ];
50
+ }
51
+ function projectSkillTargets(cwd = process.cwd()) {
52
+ return [
53
+ {
54
+ host: "Agents",
55
+ path: join(cwd, ".agents", "skills", "kody", "SKILL.md")
56
+ },
57
+ {
58
+ host: "Cursor",
59
+ path: join(cwd, ".cursor", "skills", "kody", "SKILL.md")
60
+ },
61
+ {
62
+ host: "Codex",
63
+ path: join(cwd, ".codex", "skills", "kody", "SKILL.md")
64
+ },
65
+ {
66
+ host: "Claude Code",
67
+ path: join(cwd, ".claude", "skills", "kody", "SKILL.md")
68
+ }
69
+ ];
70
+ }
71
+ function sha256Digest(body) {
72
+ return `sha256:${createHash("sha256").update(body, "utf8").digest("hex")}`;
73
+ }
74
+ function wrapHostedSkillBody(body) {
75
+ const trimmed = body.replace(/^\uFEFF/, "");
76
+ if (trimmed.startsWith("---\n") || trimmed.startsWith("---\r\n")) {
77
+ return trimmed.endsWith("\n") ? trimmed : `${trimmed}
78
+ `;
79
+ }
80
+ const normalized = trimmed.endsWith("\n") ? trimmed : `${trimmed}
81
+ `;
82
+ return `${skillFrontmatter}${normalized}`;
83
+ }
84
+ function extractSkillBodyForDigest(fileContents) {
85
+ const trimmed = fileContents.replace(/^\uFEFF/, "");
86
+ if (!trimmed.startsWith("---")) {
87
+ return trimmed.endsWith("\n") ? trimmed : `${trimmed}
88
+ `;
89
+ }
90
+ const end = trimmed.indexOf("\n---", 3);
91
+ if (end === -1) {
92
+ return trimmed.endsWith("\n") ? trimmed : `${trimmed}
93
+ `;
94
+ }
95
+ const body = trimmed.slice(end + "\n---".length).replace(/^(?:\r?\n)+/, "");
96
+ return body.endsWith("\n") ? body : `${body}
97
+ `;
98
+ }
99
+ var hostedSkillFetchTimeoutMs = 5e3;
100
+ async function fetchHostedKodyCliSkill(input) {
101
+ const origin = (input.origin ?? agentSkillsOriginFromMcpUrl()).replace(
102
+ /\/$/,
103
+ ""
104
+ );
105
+ const fetchImpl = input.fetchImpl ?? fetch;
106
+ const timeoutMs = input.timeoutMs ?? hostedSkillFetchTimeoutMs;
107
+ try {
108
+ const indexResponse = await fetchImpl(
109
+ `${origin}${hostedAgentSkillsIndexPath}`,
110
+ {
111
+ headers: { accept: "application/json" },
112
+ signal: AbortSignal.timeout(timeoutMs)
113
+ }
114
+ );
115
+ if (!indexResponse.ok) return null;
116
+ const index = await indexResponse.json();
117
+ const entry = index.skills?.find((skill) => skill.name === hostedSkillName);
118
+ if (!entry?.url || !entry.digest) return null;
119
+ const skillResponse = await fetchImpl(entry.url, {
120
+ headers: { accept: "text/markdown, text/plain;q=0.9, */*;q=0.8" },
121
+ signal: AbortSignal.timeout(timeoutMs)
122
+ });
123
+ if (!skillResponse.ok) return null;
124
+ const rawBody = await skillResponse.text();
125
+ const body = rawBody.endsWith("\n") ? rawBody : `${rawBody}
126
+ `;
127
+ if (sha256Digest(body) !== entry.digest) return null;
128
+ return {
129
+ body,
130
+ digest: entry.digest,
131
+ url: entry.url
132
+ };
133
+ } catch {
134
+ return null;
135
+ }
136
+ }
137
+ async function installSkill(input) {
138
+ const hosted = input.sourcePath ? null : await fetchHostedKodyCliSkill({
139
+ origin: input.origin,
140
+ fetchImpl: input.fetchImpl
141
+ });
142
+ const source = input.sourcePath ?? bundledSkillPath();
143
+ const body = hosted ? wrapHostedSkillBody(hosted.body) : await readFile(source, "utf8");
144
+ const targets = input.project ? projectSkillTargets(input.cwd) : userSkillTargets(input.home);
145
+ for (const target of targets) {
146
+ await mkdir(dirname(target.path), { recursive: true });
147
+ await writeFile(target.path, body, "utf8");
148
+ }
149
+ return targets;
150
+ }
151
+ async function refreshInstalledSkills(input = {}) {
152
+ const hosted = await fetchHostedKodyCliSkill({
153
+ origin: input.origin,
154
+ fetchImpl: input.fetchImpl
155
+ });
156
+ if (!hosted) return [];
157
+ const nextBody = wrapHostedSkillBody(hosted.body);
158
+ const refreshed = [];
159
+ const candidates = userSkillTargets(input.home);
160
+ for (const target of candidates) {
161
+ try {
162
+ const current = await readFile(target.path, "utf8");
163
+ const currentDigest = sha256Digest(extractSkillBodyForDigest(current));
164
+ if (currentDigest === hosted.digest) continue;
165
+ await writeFileAtomic(target.path, nextBody);
166
+ refreshed.push(target);
167
+ } catch {
168
+ continue;
169
+ }
170
+ }
171
+ return refreshed;
172
+ }
173
+ async function writeFileAtomic(path, body) {
174
+ const dir = dirname(path);
175
+ const temp = join(
176
+ dir,
177
+ `.${basename(path)}.${randomBytes(6).toString("hex")}.tmp`
178
+ );
179
+ try {
180
+ await writeFile(temp, body, "utf8");
181
+ await rename(temp, path);
182
+ } catch (error) {
183
+ try {
184
+ await unlink(temp);
185
+ } catch {
186
+ }
187
+ throw error;
188
+ }
189
+ }
190
+ function skillRefreshEntryPath() {
191
+ return fileURLToPath(new URL("./skill-refresh.js", import.meta.url));
192
+ }
193
+ function scheduleDetachedSkillRefresh(input = {}) {
194
+ const spawnFn = input.spawnImpl ?? spawn;
195
+ const args = [skillRefreshEntryPath()];
196
+ if (input.origin) {
197
+ args.push("--origin", input.origin);
198
+ }
199
+ try {
200
+ const child = spawnFn(process.execPath, args, {
201
+ detached: true,
202
+ stdio: "ignore",
203
+ windowsHide: true,
204
+ env: {
205
+ ...process.env,
206
+ KODY_SKIP_SKILL_REFRESH: "1"
207
+ }
208
+ });
209
+ child.on?.("error", () => {
210
+ });
211
+ child.unref();
212
+ } catch {
213
+ }
214
+ }
215
+
216
+ export {
217
+ hostedAgentSkillsIndexPath,
218
+ bundledSkillPath,
219
+ agentSkillsOriginFromMcpUrl,
220
+ userSkillTargets,
221
+ projectSkillTargets,
222
+ sha256Digest,
223
+ wrapHostedSkillBody,
224
+ extractSkillBodyForDigest,
225
+ hostedSkillFetchTimeoutMs,
226
+ fetchHostedKodyCliSkill,
227
+ installSkill,
228
+ refreshInstalledSkills,
229
+ writeFileAtomic,
230
+ skillRefreshEntryPath,
231
+ scheduleDetachedSkillRefresh
232
+ };
233
+ //# sourceMappingURL=chunk-TCJSXIEG.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/skill.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -1,7 +1,4 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import {
3
- userCacheDir
4
- } from "./chunk-BML3W5CO.js";
5
2
  import {
6
3
  assertTokenSafeApiUrl,
7
4
  capabilityProxyUrl,
@@ -11,6 +8,9 @@ import {
11
8
  readPackageVersion,
12
9
  rejectedApiTokenMessage
13
10
  } from "./chunk-CCRCEU7S.js";
11
+ import {
12
+ userCacheDir
13
+ } from "./chunk-BML3W5CO.js";
14
14
  import {
15
15
  formatUnreachableApiMessage,
16
16
  requestSentStatus
@@ -1663,4 +1663,4 @@ export {
1663
1663
  toolResultFromHttpBody,
1664
1664
  whoamiWithApiToken
1665
1665
  };
1666
- //# sourceMappingURL=chunk-PIPQ2TTK.js.map
1666
+ //# sourceMappingURL=chunk-TGBFPYAY.js.map