glimmervoid 0.38.0 → 0.38.2

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 (37) hide show
  1. package/dist/bin/glimmervoid.js +17 -15
  2. package/dist/chunks/{adapters-B-IkWl-r.js → adapters-CAHxZYT3.js} +4 -4
  3. package/dist/chunks/{adapters-Dt3vwxwY.js → adapters-DDjC7_vG.js} +1 -1
  4. package/dist/chunks/{agent-api-cli-BcZ9DLCF.js → agent-api-cli-B5Tm0wXO.js} +27 -8
  5. package/dist/chunks/{agent-api-cli-3hryuewm.js → agent-api-cli-BDu1CxZf.js} +1 -1
  6. package/dist/chunks/{agent-api-core--8WtU1xU.js → agent-api-core-B_mUSenR.js} +36 -4
  7. package/dist/chunks/{agent-setup-cli-BixDoCkF.js → agent-setup-cli-DmMfCw5O.js} +1 -1
  8. package/dist/chunks/{config-BHBZsCBc.js → browser-config-BrBT8269.js} +2 -217
  9. package/dist/chunks/config-CjawSOBk.js +219 -0
  10. package/dist/chunks/{config-store-DbfMbz4j.js → config-store-BUNZs4j7.js} +4 -3
  11. package/dist/chunks/config-store-MAVQhGMh.js +1 -0
  12. package/dist/chunks/{contracts-u40eJhaf.js → contracts-HVCEJfxs.js} +6 -239
  13. package/dist/chunks/factory-D7ryES9n.js +240 -0
  14. package/dist/chunks/{git-version-BpnTd8sU.js → git-version-rWZjF2Px.js} +1 -1
  15. package/dist/chunks/{grok-xFs6zIu4.js → grok-B6bsCgdd.js} +2 -2
  16. package/dist/chunks/{hook-tools-BkxllUHE.js → hook-tools-Dl7-r2Eb.js} +1 -1
  17. package/dist/chunks/{knowledge-graph-cli-DcspNqhz.js → knowledge-graph-cli-ByUJoKw_.js} +1 -1
  18. package/dist/chunks/{main-w01-P1oZ.js → main-BNSbP-Yk.js} +689 -523
  19. package/dist/chunks/{pair-cli-BdoyrDCr.js → pair-cli-DNp8i5L4.js} +2 -2
  20. package/dist/chunks/{remote-config-61zJ0hME.js → remote-config-C_s2pnLC.js} +1 -1
  21. package/dist/chunks/{rtk-hook-core-VrUafGAp.js → rtk-hook-core-B-MpzPin.js} +89 -83
  22. package/dist/chunks/rtk-resolver-BGE6Hd_L.js +1 -0
  23. package/dist/chunks/{rtk-resolver-C_micGrL.js → rtk-resolver-BgoPsEhT.js} +1 -1
  24. package/dist/chunks/{session-8Pv0y1vz.js → session-BlT68ppa.js} +5 -2
  25. package/dist/chunks/{session-routes-D-GZC-Sy.js → session-routes-CT1JrjoT.js} +1 -1
  26. package/dist/chunks/{settings-cli-DKJsm3AP.js → settings-cli-BbzxCyG5.js} +3 -3
  27. package/dist/chunks/{ssh-sign-cli-Dc2gOCwE.js → ssh-sign-cli-C74BGTQS.js} +2 -2
  28. package/dist/client/assets/index-B5uVtedd.css +1 -0
  29. package/dist/client/assets/index-b13-NGGS.js +275 -0
  30. package/dist/client/index.html +3 -2
  31. package/dist/server/index.js +1 -1
  32. package/dist/session/hook-tool-relay.js +1 -1
  33. package/package.json +3 -2
  34. package/dist/chunks/config-store-DYj3wYgw.js +0 -1
  35. package/dist/chunks/rtk-resolver-B8BPgN9L.js +0 -1
  36. package/dist/client/assets/index-BfqmOGgc.js +0 -275
  37. package/dist/client/assets/index-DxABp5yJ.css +0 -1
@@ -1,6 +1,6 @@
1
1
  import { r as errorMessage } from "./text-DoirglWV.js";
2
- import { c as resolveConfigPath } from "./config-store-DbfMbz4j.js";
3
- import { c as defaultPairingsPath, i as REVOCATION_PROPAGATION_SECONDS, l as defaultSeenPath, n as normalizeRemoteConfig, o as createPairingsStore, s as createSeenStore } from "./remote-config-61zJ0hME.js";
2
+ import { c as resolveConfigPath } from "./config-store-BUNZs4j7.js";
3
+ import { c as defaultPairingsPath, i as REVOCATION_PROPAGATION_SECONDS, l as defaultSeenPath, n as normalizeRemoteConfig, o as createPairingsStore, s as createSeenStore } from "./remote-config-C_s2pnLC.js";
4
4
  import fs from "node:fs";
5
5
  //#region server/text-format.ts
6
6
  function trimIso(iso) {
@@ -3,7 +3,7 @@ import { n as equalsIgnoringCaseOnWindows } from "./paths-Bu4eH1Yd.js";
3
3
  import { n as isRecord } from "./coerce-NSst8oRP.js";
4
4
  import { n as unrefTimer, t as DEFAULT_TIMER_FNS } from "./timer-deps-u2DAQLok.js";
5
5
  import { a as jsonStateLoadError, d as writeJsonAtomicSync, l as sleepSync, s as loadJsonStateFileSync, u as writeJsonAtomic } from "./json-file-CIJf0Cel.js";
6
- import { o as glimmervoidHomeDir, st as canonicalizePath } from "./config-store-DbfMbz4j.js";
6
+ import { o as glimmervoidHomeDir, st as canonicalizePath } from "./config-store-BUNZs4j7.js";
7
7
  import fs from "node:fs";
8
8
  import path from "node:path";
9
9
  import crypto from "node:crypto";
@@ -1,19 +1,22 @@
1
1
  import { n as isRecord } from "./coerce-NSst8oRP.js";
2
2
  //#region session/core/sane-yolo.ts
3
3
  var SANE_YOLO_PATH_ENV = "GLIMMERVOID_SANE_YOLO_PATH";
4
- var SANE_YOLO_POLICY = {
5
- version: 1,
6
- destructive_command_protection: {
7
- enabled: true,
8
- overrides: {
9
- "git.branch-force-delete": "off",
10
- "git.merge-abort": "off",
11
- "git.rebase-abort": "off",
12
- "rm.recursive-force-dynamic-target": "on"
13
- }
14
- },
15
- secret_protection: { enabled: false }
16
- };
4
+ function saneYoloPolicy(guardrailsTempRoot) {
5
+ return {
6
+ version: 1,
7
+ destructive_command_protection: {
8
+ enabled: true,
9
+ overrides: {
10
+ "git.branch-force-delete": "off",
11
+ "git.merge-abort": "off",
12
+ "git.rebase-abort": "off",
13
+ "rm.recursive-force-dynamic-target": "on"
14
+ },
15
+ allow_paths: [guardrailsTempRoot]
16
+ },
17
+ secret_protection: { enabled: false }
18
+ };
19
+ }
17
20
  var SANE_YOLO_RULES = {
18
21
  version: 1,
19
22
  rules: ["infra"],
@@ -27,76 +30,79 @@ var TERRAFORM_DESTROY_FLAGS = [
27
30
  "-destroy=true",
28
31
  "--destroy=true"
29
32
  ];
30
- var SANE_YOLO_FILES = {
31
- "policy.json": SANE_YOLO_POLICY,
32
- "rules/rule.json": SANE_YOLO_RULES,
33
- "rules/infra/rulebook.json": {
34
- rulebook_version: 1,
35
- name: "infra",
36
- version: "1.1.0",
37
- allowed_commands: [
38
- "terraform",
39
- "tofu",
40
- "pulumi",
41
- "kubectl"
42
- ],
43
- rules: [
44
- {
45
- name: "terraform-destroy",
46
- command: "terraform",
47
- subcommand: "destroy",
48
- block_args: ["destroy"],
49
- reason: INFRA_REASON
50
- },
51
- {
52
- name: "terraform-apply-destroy",
53
- command: "terraform",
54
- subcommand: "apply",
55
- block_args: TERRAFORM_DESTROY_FLAGS,
56
- reason: INFRA_REASON
57
- },
58
- {
59
- name: "tofu-destroy",
60
- command: "tofu",
61
- subcommand: "destroy",
62
- block_args: ["destroy"],
63
- reason: INFRA_REASON
64
- },
65
- {
66
- name: "tofu-apply-destroy",
67
- command: "tofu",
68
- subcommand: "apply",
69
- block_args: TERRAFORM_DESTROY_FLAGS,
70
- reason: INFRA_REASON
71
- },
72
- {
73
- name: "pulumi-destroy",
74
- command: "pulumi",
75
- subcommand: "destroy",
76
- block_args: ["destroy"],
77
- reason: INFRA_REASON
78
- },
79
- {
80
- name: "pulumi-down",
81
- command: "pulumi",
82
- subcommand: "down",
83
- block_args: ["down"],
84
- reason: INFRA_REASON
85
- },
86
- {
87
- name: "kubectl-delete-namespace",
88
- command: "kubectl",
89
- subcommand: "delete",
90
- block_args: [
91
- "ns",
92
- "namespace",
93
- "namespaces"
94
- ],
95
- reason: INFRA_REASON
96
- }
97
- ]
98
- }
33
+ var SANE_YOLO_INFRA_RULEBOOK = {
34
+ rulebook_version: 1,
35
+ name: "infra",
36
+ version: "1.1.0",
37
+ allowed_commands: [
38
+ "terraform",
39
+ "tofu",
40
+ "pulumi",
41
+ "kubectl"
42
+ ],
43
+ rules: [
44
+ {
45
+ name: "terraform-destroy",
46
+ command: "terraform",
47
+ subcommand: "destroy",
48
+ block_args: ["destroy"],
49
+ reason: INFRA_REASON
50
+ },
51
+ {
52
+ name: "terraform-apply-destroy",
53
+ command: "terraform",
54
+ subcommand: "apply",
55
+ block_args: TERRAFORM_DESTROY_FLAGS,
56
+ reason: INFRA_REASON
57
+ },
58
+ {
59
+ name: "tofu-destroy",
60
+ command: "tofu",
61
+ subcommand: "destroy",
62
+ block_args: ["destroy"],
63
+ reason: INFRA_REASON
64
+ },
65
+ {
66
+ name: "tofu-apply-destroy",
67
+ command: "tofu",
68
+ subcommand: "apply",
69
+ block_args: TERRAFORM_DESTROY_FLAGS,
70
+ reason: INFRA_REASON
71
+ },
72
+ {
73
+ name: "pulumi-destroy",
74
+ command: "pulumi",
75
+ subcommand: "destroy",
76
+ block_args: ["destroy"],
77
+ reason: INFRA_REASON
78
+ },
79
+ {
80
+ name: "pulumi-down",
81
+ command: "pulumi",
82
+ subcommand: "down",
83
+ block_args: ["down"],
84
+ reason: INFRA_REASON
85
+ },
86
+ {
87
+ name: "kubectl-delete-namespace",
88
+ command: "kubectl",
89
+ subcommand: "delete",
90
+ block_args: [
91
+ "ns",
92
+ "namespace",
93
+ "namespaces"
94
+ ],
95
+ reason: INFRA_REASON
96
+ }
97
+ ]
99
98
  };
99
+ function saneYoloFiles(guardrailsTempRoot) {
100
+ return {
101
+ "policy.json": saneYoloPolicy(guardrailsTempRoot),
102
+ "rules/rule.json": SANE_YOLO_RULES,
103
+ "rules/infra/rulebook.json": SANE_YOLO_INFRA_RULEBOOK
104
+ };
105
+ }
100
106
  function saneYoloEnv(homeDir) {
101
107
  return {
102
108
  CC_SAFETY_NET_HOME: homeDir,
@@ -138,4 +144,4 @@ function normalizeRtkHookResponse(stdoutText, { isForClaude = false } = {}) {
138
144
  return JSON.stringify(parsed);
139
145
  }
140
146
  //#endregion
141
- export { SANE_YOLO_FILES as a, normalizeRtkHookResponse as i, MAX_RTK_STDOUT_BYTES as n, SANE_YOLO_PATH_ENV as o, RTK_PATH_ENV as r, saneYoloEnv as s, CLAUDE_RELAY_FLAVOR as t };
147
+ export { SANE_YOLO_PATH_ENV as a, normalizeRtkHookResponse as i, MAX_RTK_STDOUT_BYTES as n, saneYoloEnv as o, RTK_PATH_ENV as r, saneYoloFiles as s, CLAUDE_RELAY_FLAVOR as t };
@@ -0,0 +1 @@
1
+ export { t as getRtkPath } from "./rtk-resolver-BgoPsEhT.js";
@@ -1,6 +1,6 @@
1
1
  import { i as execSync } from "./child-process-safe-CbQnyh7D.js";
2
2
  import { n as glimmervoidHomeDir } from "./config-path-core-DFt-TemS.js";
3
- import { r as resolveRtkPath } from "./hook-tools-BkxllUHE.js";
3
+ import { r as resolveRtkPath } from "./hook-tools-Dl7-r2Eb.js";
4
4
  import fs from "node:fs";
5
5
  import os from "node:os";
6
6
  //#region server/rtk-resolver.ts
@@ -959,7 +959,9 @@ var AGENT_API_VERBS = [
959
959
  "edit",
960
960
  "limits",
961
961
  "factory-status",
962
- "factory-retry"
962
+ "factory-retry",
963
+ "factory-setup",
964
+ "factory-queue"
963
965
  ];
964
966
  var ORCHESTRATOR_AGENT_VERBS = [
965
967
  "dispatch",
@@ -968,6 +970,7 @@ var ORCHESTRATOR_AGENT_VERBS = [
968
970
  ];
969
971
  var AgentFactoryStatusRequest = z.object({ projectId: z.string().trim().min(1).max(128).optional() }).strict();
970
972
  var AgentFactoryRetryRequest = z.object({ intentId: z.string().trim().min(1).max(128) }).strict();
973
+ var AgentFactorySetupRequest = z.object({}).strict();
971
974
  var AgentSpawnRequest = z.object({
972
975
  prompt: z.string({ error: "prompt must be a string" }).min(1, { error: "prompt must not be empty" }).max(2e4, { error: "prompt must be at most 20000 characters" }).refine((prompt) => !prompt.trimStart().startsWith("-"), { message: "prompt must not start with a dash, which the agent CLI would read as an option" }),
973
976
  name: z.string({ error: "name must be a string" }).min(1, { error: "name must not be empty" }).max(200, { error: "name must be at most 200 characters" }).optional(),
@@ -1029,4 +1032,4 @@ z.discriminatedUnion("ok", [z.object({
1029
1032
  reason: z.string()
1030
1033
  })]);
1031
1034
  //#endregion
1032
- export { repositoryName as $, SshSignReply as A, HEX_SHA_RE as At, MyPrMergeMethod as B, MERGEABLE_LIVE_STATES as Bt, SESSION_DOC_BODY_CAP_BYTES as C, TeamReviewThreadResult as Ct, SessionDoc as D, hasRequiredActionHead as Dt, SSH_SIGN_BODY_CAP_BYTES as E, decisionAsIfApprovalRequired as Et, MyPrAutoRebase as F, repoParts as Ft, MyPrMergeWhenReadyResult as G, MyPrMergeResult as H, STATES as Ht, MyPrCheckContext as I, GithubPollingRefreshRequest as It, MyPrThreadNode as J, MyPrSearchNode as K, MyPrCheckContextsResponse as L, GithubPollingRefreshResult as Lt, TASK_TITLE_CONTROL_CHARACTERS as M, GH_SEGMENT as Mt, TaskTitle as N, NODE_ID_RE as Nt, SessionSnapshot as O, hasStandingViewerApproval as Ot, LinkedPr as P, REPO_SLUG_RE as Pt, SessionPrLinks as Q, MyPrKeepMergeableRequest as R, githubPollingShape as Rt, SESSION_COMMANDS as S, TeamReviewThreadCommentsResponse as St, SIGN_URL_ENV as T, canApproveAfterComment as Tt, MyPrMergeStateResponse as U, MyPrMergeRequest as V, RESTARTABLE_STATES as Vt, MyPrMergeWhenReadyRequest as W, MyPrsState as X, MyPrThreadsResponse as Y, MyPrsStatus as Z, ConversationApprovalDecision as _, TeamReviewActionResult as _t, AgentDispatchRequest as a, PostingPlan as at, PendingWakeup as b, TeamReviewStateEntry as bt, AgentFactoryStatusRequest as c, ReviewChecksState as ct, AgentTicketRequest as d, ReviewFinding as dt, CommitSha as et, CONVERSATION_APPROVAL_SUMMARY_MAX_CHARS as f, ReviewResult as ft, ConversationApproval as g, TeamReviewActionRequest as gt, ConversationAnswers as h, SearchedPr as ht, AgentAttentionRequest as i, GithubReviewState as it, SshSignRequest as j, shortSha as jt, SessionState as k, FULL_SHA_RE as kt, AgentLimitsReply as l, ReviewComment as lt, CONVERSATION_TOOL_RESULT_HOOK_EVENT as m, ReviewVerdict as mt, AGENT_URL_ENV as n, FindingSeverity as nt, AgentEditRequest as o, PrDetail as ot, CONVERSATION_PERMISSION_HOOK_EVENT as p, ReviewThreadId as pt, MyPrSearchResponse as q, ASK_USER_QUESTION_TOOL_NAME as r, GithubReviewDecision as rt, AgentFactoryRetryRequest as s, QueuedReview as st, AGENT_API_VERBS as t, DECIDING_REVIEW_STATES as tt, AgentSpawnRequest as u, ReviewDraft as ut, ConversationQuestion as v, TeamReviewCompareFiles as vt, SESSION_DOC_PATH_MAX_CHARS as w, TeamReviewThreadsRepository as wt, RefinedTaskTitle as x, TeamReviewStatus as xt, ORCHESTRATOR_AGENT_VERBS as y, TeamReviewResolveResponse as yt, MyPrKeepMergeableResult as z, KILLABLE_STATES as zt };
1035
+ export { SessionPrLinks as $, SessionState as A, FULL_SHA_RE as At, MyPrKeepMergeableResult as B, KILLABLE_STATES as Bt, SESSION_COMMANDS as C, TeamReviewThreadCommentsResponse as Ct, SSH_SIGN_BODY_CAP_BYTES as D, decisionAsIfApprovalRequired as Dt, SIGN_URL_ENV as E, canApproveAfterComment as Et, LinkedPr as F, REPO_SLUG_RE as Ft, MyPrMergeWhenReadyRequest as G, MyPrMergeRequest as H, RESTARTABLE_STATES as Ht, MyPrAutoRebase as I, repoParts as It, MyPrSearchResponse as J, MyPrMergeWhenReadyResult as K, MyPrCheckContext as L, GithubPollingRefreshRequest as Lt, SshSignRequest as M, shortSha as Mt, TASK_TITLE_CONTROL_CHARACTERS as N, GH_SEGMENT as Nt, SessionDoc as O, hasRequiredActionHead as Ot, TaskTitle as P, NODE_ID_RE as Pt, MyPrsStatus as Q, MyPrCheckContextsResponse as R, GithubPollingRefreshResult as Rt, RefinedTaskTitle as S, TeamReviewStatus as St, SESSION_DOC_PATH_MAX_CHARS as T, TeamReviewThreadsRepository as Tt, MyPrMergeResult as U, STATES as Ut, MyPrMergeMethod as V, MERGEABLE_LIVE_STATES as Vt, MyPrMergeStateResponse as W, MyPrThreadsResponse as X, MyPrThreadNode as Y, MyPrsState as Z, ConversationApproval as _, TeamReviewActionRequest as _t, AgentDispatchRequest as a, GithubReviewState as at, ORCHESTRATOR_AGENT_VERBS as b, TeamReviewResolveResponse as bt, AgentFactorySetupRequest as c, QueuedReview as ct, AgentSpawnRequest as d, ReviewDraft as dt, repositoryName as et, AgentTicketRequest as f, ReviewFinding as ft, ConversationAnswers as g, SearchedPr as gt, CONVERSATION_TOOL_RESULT_HOOK_EVENT as h, ReviewVerdict as ht, AgentAttentionRequest as i, GithubReviewDecision as it, SshSignReply as j, HEX_SHA_RE as jt, SessionSnapshot as k, hasStandingViewerApproval as kt, AgentFactoryStatusRequest as l, ReviewChecksState as lt, CONVERSATION_PERMISSION_HOOK_EVENT as m, ReviewThreadId as mt, AGENT_URL_ENV as n, DECIDING_REVIEW_STATES as nt, AgentEditRequest as o, PostingPlan as ot, CONVERSATION_APPROVAL_SUMMARY_MAX_CHARS as p, ReviewResult as pt, MyPrSearchNode as q, ASK_USER_QUESTION_TOOL_NAME as r, FindingSeverity as rt, AgentFactoryRetryRequest as s, PrDetail as st, AGENT_API_VERBS as t, CommitSha as tt, AgentLimitsReply as u, ReviewComment as ut, ConversationApprovalDecision as v, TeamReviewActionResult as vt, SESSION_DOC_BODY_CAP_BYTES as w, TeamReviewThreadResult as wt, PendingWakeup as x, TeamReviewStateEntry as xt, ConversationQuestion as y, TeamReviewCompareFiles as yt, MyPrKeepMergeableRequest as z, githubPollingShape as zt };
@@ -1,4 +1,4 @@
1
- import { S as SESSION_COMMANDS } from "./session-8Pv0y1vz.js";
1
+ import { C as SESSION_COMMANDS } from "./session-BlT68ppa.js";
2
2
  //#region session/core/session-routes.ts
3
3
  var SUPERVISION_LINE = "Glimmervoid supervises this session. Run glimmervoid --help for the commands it gives you and this session's limits.";
4
4
  var GUARDRAILS_LINE = "Its guardrails are OS-enforced, so a read, write or connection they refuse will not succeed on retry.";
@@ -1,10 +1,10 @@
1
1
  import { r as errorMessage, t as errorCode } from "./text-DoirglWV.js";
2
- import "./session-8Pv0y1vz.js";
2
+ import "./session-BlT68ppa.js";
3
3
  import { t as renderTable } from "./ascii-figure-core-pDAwtlKO.js";
4
4
  import { n as glimmervoidHomeDir, t as decideConfigPath } from "./config-path-core-DFt-TemS.js";
5
5
  import { n as isRecord } from "./coerce-NSst8oRP.js";
6
- import { r as BrowserConfig } from "./config-BHBZsCBc.js";
7
- import { $ as withEnvSecrets, A as settingsOf, C as deleteValueAtPath, D as scoreSettingsSearch, E as parsePosthogProjectSelection, M as FILE_ONLY_GROUPS, N as SETTINGS_REGISTRY, O as setValueAtPath, S as cloneValue, T as hasScaledUnit, X as ENV_SECRET_BINDINGS, Z as readEnvSecrets, j as valueAtPath, k as settingsGroupOf, l as saveConfigFileOnce, s as loadConfigFile, u as validateConfig, w as displayText, x as SETTINGS_INDEX } from "./config-store-DbfMbz4j.js";
6
+ import { $ as withEnvSecrets, A as settingsOf, C as deleteValueAtPath, D as scoreSettingsSearch, E as parsePosthogProjectSelection, M as FILE_ONLY_GROUPS, N as SETTINGS_REGISTRY, O as setValueAtPath, S as cloneValue, T as hasScaledUnit, X as ENV_SECRET_BINDINGS, Z as readEnvSecrets, j as valueAtPath, k as settingsGroupOf, l as saveConfigFileOnce, s as loadConfigFile, u as validateConfig, w as displayText, x as SETTINGS_INDEX } from "./config-store-BUNZs4j7.js";
7
+ import { r as BrowserConfig } from "./config-CjawSOBk.js";
8
8
  import fs from "node:fs";
9
9
  import os from "node:os";
10
10
  import { parseArgs } from "node:util";
@@ -1,8 +1,8 @@
1
1
  import { r as errorMessage } from "./text-DoirglWV.js";
2
- import { A as SshSignReply, T as SIGN_URL_ENV } from "./session-8Pv0y1vz.js";
2
+ import { E as SIGN_URL_ENV, j as SshSignReply } from "./session-BlT68ppa.js";
3
3
  import { n as execFileAsync, o as spawn } from "./child-process-safe-CbQnyh7D.js";
4
4
  import { a as isLoopbackHostname } from "./hook-relay-core-DA_bz2KA.js";
5
- import { t as postToAgentIngress } from "./agent-api-cli-BcZ9DLCF.js";
5
+ import { t as postToAgentIngress } from "./agent-api-cli-B5Tm0wXO.js";
6
6
  import { l as parseSshPublicKey } from "./ssh-signing-core-CRhVVWNW.js";
7
7
  import path from "node:path";
8
8
  import fsp from "node:fs/promises";