everything-dev 1.3.6 → 1.4.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 (76) hide show
  1. package/dist/cli/init.cjs +34 -5
  2. package/dist/cli/init.cjs.map +1 -1
  3. package/dist/cli/init.d.cts +10 -7
  4. package/dist/cli/init.d.cts.map +1 -1
  5. package/dist/cli/init.d.mts +10 -7
  6. package/dist/cli/init.d.mts.map +1 -1
  7. package/dist/cli/init.mjs +34 -6
  8. package/dist/cli/init.mjs.map +1 -1
  9. package/dist/cli/prompts.cjs +19 -9
  10. package/dist/cli/prompts.cjs.map +1 -1
  11. package/dist/cli/prompts.mjs +19 -9
  12. package/dist/cli/prompts.mjs.map +1 -1
  13. package/dist/cli/snapshot.cjs +35 -0
  14. package/dist/cli/snapshot.cjs.map +1 -0
  15. package/dist/cli/snapshot.mjs +33 -0
  16. package/dist/cli/snapshot.mjs.map +1 -0
  17. package/dist/cli/status.cjs +80 -0
  18. package/dist/cli/status.cjs.map +1 -0
  19. package/dist/cli/status.mjs +79 -0
  20. package/dist/cli/status.mjs.map +1 -0
  21. package/dist/cli/sync.cjs +170 -0
  22. package/dist/cli/sync.cjs.map +1 -0
  23. package/dist/cli/sync.mjs +169 -0
  24. package/dist/cli/sync.mjs.map +1 -0
  25. package/dist/cli/upgrade.cjs +123 -0
  26. package/dist/cli/upgrade.cjs.map +1 -0
  27. package/dist/cli/upgrade.mjs +122 -0
  28. package/dist/cli/upgrade.mjs.map +1 -0
  29. package/dist/cli.cjs +101 -5
  30. package/dist/cli.cjs.map +1 -1
  31. package/dist/cli.mjs +101 -5
  32. package/dist/cli.mjs.map +1 -1
  33. package/dist/contract.cjs +81 -8
  34. package/dist/contract.cjs.map +1 -1
  35. package/dist/contract.d.cts +156 -15
  36. package/dist/contract.d.cts.map +1 -1
  37. package/dist/contract.d.mts +156 -15
  38. package/dist/contract.d.mts.map +1 -1
  39. package/dist/contract.meta.cjs +32 -9
  40. package/dist/contract.meta.cjs.map +1 -1
  41. package/dist/contract.meta.d.cts +50 -11
  42. package/dist/contract.meta.d.mts +50 -11
  43. package/dist/contract.meta.mjs +32 -9
  44. package/dist/contract.meta.mjs.map +1 -1
  45. package/dist/contract.mjs +77 -9
  46. package/dist/contract.mjs.map +1 -1
  47. package/dist/index.cjs +5 -0
  48. package/dist/index.d.cts +2 -2
  49. package/dist/index.d.mts +2 -2
  50. package/dist/index.mjs +2 -2
  51. package/dist/plugin.cjs +123 -43
  52. package/dist/plugin.cjs.map +1 -1
  53. package/dist/plugin.d.cts +75 -8
  54. package/dist/plugin.d.cts.map +1 -1
  55. package/dist/plugin.d.mts +75 -8
  56. package/dist/plugin.d.mts.map +1 -1
  57. package/dist/plugin.mjs +126 -46
  58. package/dist/plugin.mjs.map +1 -1
  59. package/dist/types.d.cts +2 -2
  60. package/dist/types.d.mts +2 -2
  61. package/dist/utils/theme.cjs +1 -0
  62. package/dist/utils/theme.cjs.map +1 -1
  63. package/dist/utils/theme.mjs +1 -0
  64. package/dist/utils/theme.mjs.map +1 -1
  65. package/package.json +3 -3
  66. package/src/cli/init.ts +60 -11
  67. package/src/cli/prompts.ts +34 -16
  68. package/src/cli/snapshot.ts +46 -0
  69. package/src/cli/status.ts +85 -0
  70. package/src/cli/sync.ts +239 -0
  71. package/src/cli/upgrade.ts +165 -0
  72. package/src/cli.ts +152 -5
  73. package/src/contract.meta.ts +36 -6
  74. package/src/contract.ts +74 -7
  75. package/src/plugin.ts +156 -45
  76. package/src/utils/theme.ts +1 -0
package/dist/plugin.mjs CHANGED
@@ -1,18 +1,21 @@
1
1
  import { buildRegistryConfigUrlForNetwork, fetchBosConfigFromFastKv, getRegistryNamespaceForAccount, getRegistryNamespaceForNetwork } from "./fastkv.mjs";
2
2
  import { getNetworkIdForAccount } from "./network.mjs";
3
3
  import { createPlugin, z } from "./sdk.mjs";
4
- import { buildRuntimePluginsForConfig, getHostDevelopmentPort, getProjectRoot, loadConfig, parsePort, resolveDevelopmentHostUrl, resolveLocalDevelopmentPath } from "./config.mjs";
4
+ import { buildRuntimePluginsForConfig, findConfigPath, getHostDevelopmentPort, getProjectRoot, loadConfig, parsePort, resolveDevelopmentHostUrl, resolveLocalDevelopmentPath } from "./config.mjs";
5
5
  import { bosContract } from "./contract.mjs";
6
6
  import { syncApiContractBridge } from "./api-contract.mjs";
7
7
  import { buildRuntimeConfig, detectLocalPackages, prepareDevelopmentRuntimeConfig } from "./app.mjs";
8
- import { copyFilteredFiles, personalizeConfig, readTemplatekeep, resolveSourceDir, runBunInstall } from "./cli/init.mjs";
8
+ import { copyFilteredFiles, fetchParentConfig, personalizeConfig, readTemplatekeep, resolveSourceDir, runBunInstall, writeInitSnapshot } from "./cli/init.mjs";
9
9
  import { promptInitOptions } from "./cli/prompts.mjs";
10
+ import { getStatus } from "./cli/status.mjs";
11
+ import { syncTemplate } from "./cli/sync.mjs";
12
+ import { upgradeTemplate } from "./cli/upgrade.mjs";
10
13
  import { startApp } from "./dev-session.mjs";
11
14
  import { addFunctionCallAccessKey, ensureNearCli, executeTransaction } from "./near-cli.mjs";
12
15
  import { syncAndGenerateSharedUi } from "./shared.mjs";
13
16
  import { run } from "./utils/run.mjs";
14
17
  import { readFileSync, writeFileSync } from "node:fs";
15
- import { basename, join, resolve } from "node:path";
18
+ import { basename, dirname, join, resolve } from "node:path";
16
19
  import { Effect } from "effect";
17
20
 
18
21
  //#region src/plugin.ts
@@ -661,8 +664,10 @@ var plugin_default = createPlugin({
661
664
  } catch (error) {
662
665
  txHash = extractTransactionHash(error);
663
666
  if (!txHash) throw error;
664
- const verifiedConfig = await fetchBosConfigFromFastKv(bosUrl);
665
- if (JSON.stringify(verifiedConfig) !== JSON.stringify(publishConfig)) throw error;
667
+ try {
668
+ const verifiedConfig = await fetchBosConfigFromFastKv(bosUrl);
669
+ if (JSON.stringify(verifiedConfig) !== JSON.stringify(publishConfig)) throw error;
670
+ } catch {}
666
671
  }
667
672
  return {
668
673
  status: "published",
@@ -727,75 +732,93 @@ var plugin_default = createPlugin({
727
732
  }),
728
733
  init: builder.init.handler(async ({ input }) => {
729
734
  try {
735
+ let extendsAccount = input.extendsAccount;
736
+ let extendsGateway = input.extendsGateway;
737
+ let directory = input.directory;
730
738
  let account = input.account;
731
- let gateway = input.gateway;
732
- let destination = input.destination;
733
- let name = input.name;
734
739
  let domain = input.domain;
735
740
  let withHost = input.withHost;
736
- if (!account || !gateway) {
741
+ if (!domain) {
737
742
  if (input.noInteractive) return {
738
743
  status: "error",
739
- destination: "",
740
- parentAccount: account ?? "",
741
- parentGateway: gateway ?? "",
742
- name: input.name,
744
+ directory: "",
745
+ extendsAccount: extendsAccount ?? "",
746
+ extendsGateway: extendsGateway ?? "",
747
+ account: input.account,
743
748
  domain: input.domain,
744
- extends: account && gateway ? `bos://${account}/${gateway}` : "",
749
+ extends: extendsAccount && extendsGateway ? `bos://${extendsAccount}/${extendsGateway}` : "",
745
750
  filesCopied: 0,
746
- error: "account and gateway are required (use --no-interactive to skip prompts and provide them as positional args)"
751
+ error: "domain is required (use --no-interactive to skip prompts and provide it as a flag)"
747
752
  };
748
753
  const prompted = await promptInitOptions({
754
+ extendsAccount,
755
+ extendsGateway,
756
+ directory,
749
757
  account,
750
- gateway,
751
- destination,
752
- name,
753
758
  domain,
754
759
  withHost
755
760
  });
761
+ extendsAccount = prompted.extendsAccount;
762
+ extendsGateway = prompted.extendsGateway;
763
+ directory = prompted.directory;
756
764
  account = prompted.account;
757
- gateway = prompted.gateway;
758
- destination = prompted.destination;
759
- name = prompted.name;
760
765
  domain = prompted.domain;
761
766
  withHost = prompted.withHost;
762
767
  }
763
- destination = destination || gateway;
768
+ extendsAccount = extendsAccount || "dev.everything.near";
769
+ extendsGateway = extendsGateway || "everything.dev";
770
+ directory = directory || (domain ? domain.split(".")[0] : extendsGateway);
771
+ try {
772
+ await fetchParentConfig(extendsAccount, extendsGateway);
773
+ } catch {
774
+ return {
775
+ status: "error",
776
+ directory,
777
+ extendsAccount,
778
+ extendsGateway,
779
+ account,
780
+ domain,
781
+ extends: `bos://${extendsAccount}/${extendsGateway}`,
782
+ filesCopied: 0,
783
+ error: `No config found at bos://${extendsAccount}/${extendsGateway} — are you sure this is the right parent?`
784
+ };
785
+ }
764
786
  const { sourceDir, cleanup } = await resolveSourceDir({
765
- account,
766
- gateway,
787
+ extendsAccount,
788
+ extendsGateway,
767
789
  source: input.source
768
790
  });
769
791
  try {
770
792
  const patterns = await readTemplatekeep(sourceDir);
771
793
  if (patterns.length === 0) return {
772
794
  status: "error",
773
- destination,
774
- parentAccount: account,
775
- parentGateway: gateway,
776
- name,
795
+ directory,
796
+ extendsAccount,
797
+ extendsGateway,
798
+ account,
777
799
  domain,
778
- extends: `bos://${account}/${gateway}`,
800
+ extends: `bos://${extendsAccount}/${extendsGateway}`,
779
801
  filesCopied: 0,
780
802
  error: "No .templatekeep found in template source"
781
803
  };
782
- const filesCopied = await copyFilteredFiles(sourceDir, destination, patterns, { withHost });
783
- await personalizeConfig(destination, {
784
- parentAccount: account,
785
- parentGateway: gateway,
786
- name: name || account,
787
- domain: domain || gateway,
804
+ const filesCopied = await copyFilteredFiles(sourceDir, directory, patterns, { withHost });
805
+ await personalizeConfig(directory, {
806
+ extendsAccount,
807
+ extendsGateway,
808
+ account: account || extendsAccount,
809
+ domain: domain || extendsGateway,
788
810
  workspaceOpts: { sourceDir }
789
811
  });
790
- if (!input.noInstall) await runBunInstall(destination);
812
+ await writeInitSnapshot(directory, extendsAccount, extendsGateway, sourceDir, patterns, { withHost });
813
+ if (!input.noInstall) await runBunInstall(directory);
791
814
  return {
792
815
  status: "initialized",
793
- destination: resolve(destination),
794
- parentAccount: account,
795
- parentGateway: gateway,
796
- name,
816
+ directory: resolve(directory),
817
+ extendsAccount,
818
+ extendsGateway,
819
+ account,
797
820
  domain,
798
- extends: `bos://${account}/${gateway}`,
821
+ extends: `bos://${extendsAccount}/${extendsGateway}`,
799
822
  filesCopied
800
823
  };
801
824
  } finally {
@@ -804,16 +827,73 @@ var plugin_default = createPlugin({
804
827
  } catch (error) {
805
828
  return {
806
829
  status: "error",
807
- destination: input.destination ?? input.gateway ?? "",
808
- parentAccount: input.account ?? "",
809
- parentGateway: input.gateway ?? "",
810
- name: input.name,
830
+ directory: input.directory ?? "",
831
+ extendsAccount: input.extendsAccount ?? "",
832
+ extendsGateway: input.extendsGateway ?? "",
833
+ account: input.account,
811
834
  domain: input.domain,
812
- extends: input.account && input.gateway ? `bos://${input.account}/${input.gateway}` : "",
835
+ extends: input.extendsAccount && input.extendsGateway ? `bos://${input.extendsAccount}/${input.extendsGateway}` : "",
813
836
  filesCopied: 0,
814
837
  error: error instanceof Error ? error.message : "Unknown error"
815
838
  };
816
839
  }
840
+ }),
841
+ sync: builder.sync.handler(async ({ input }) => {
842
+ try {
843
+ const configPath = findConfigPath();
844
+ if (!configPath) return {
845
+ status: "error",
846
+ updated: [],
847
+ skipped: [],
848
+ added: [],
849
+ error: "No bos.config.json found in current directory"
850
+ };
851
+ return await syncTemplate(resolve(dirname(configPath)), input);
852
+ } catch (error) {
853
+ return {
854
+ status: "error",
855
+ updated: [],
856
+ skipped: [],
857
+ added: [],
858
+ error: error instanceof Error ? error.message : "Unknown error"
859
+ };
860
+ }
861
+ }),
862
+ upgrade: builder.upgrade.handler(async ({ input }) => {
863
+ try {
864
+ const configPath = findConfigPath();
865
+ if (!configPath) return {
866
+ status: "error",
867
+ packages: [],
868
+ error: "No bos.config.json found in current directory"
869
+ };
870
+ return await upgradeTemplate(resolve(dirname(configPath)), input);
871
+ } catch (error) {
872
+ return {
873
+ status: "error",
874
+ packages: [],
875
+ error: error instanceof Error ? error.message : "Unknown error"
876
+ };
877
+ }
878
+ }),
879
+ status: builder.status.handler(async () => {
880
+ try {
881
+ const configPath = findConfigPath();
882
+ if (!configPath) return {
883
+ status: "error",
884
+ packages: [],
885
+ envFile: "missing",
886
+ error: "No bos.config.json found in current directory"
887
+ };
888
+ return await getStatus(resolve(dirname(configPath)));
889
+ } catch (error) {
890
+ return {
891
+ status: "error",
892
+ packages: [],
893
+ envFile: "missing",
894
+ error: error instanceof Error ? error.message : "Unknown error"
895
+ };
896
+ }
817
897
  })
818
898
  })
819
899
  });
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.mjs","names":[],"sources":["../src/plugin.ts"],"sourcesContent":["import { readFileSync, writeFileSync } from \"node:fs\";\nimport { basename, join, resolve } from \"node:path\";\nimport { Effect } from \"effect\";\nimport { syncApiContractBridge } from \"./api-contract\";\nimport { buildRuntimeConfig, detectLocalPackages, prepareDevelopmentRuntimeConfig } from \"./app\";\nimport {\n copyFilteredFiles,\n personalizeConfig,\n readTemplatekeep,\n resolveSourceDir,\n runBunInstall,\n} from \"./cli/init\";\nimport { promptInitOptions } from \"./cli/prompts\";\nimport {\n buildRuntimePluginsForConfig,\n getHostDevelopmentPort,\n getProjectRoot,\n loadConfig,\n parsePort,\n resolveDevelopmentHostUrl,\n resolveLocalDevelopmentPath,\n} from \"./config\";\nimport {\n type BosConfigResult,\n type BuildOptions,\n bosContract,\n type DevOptions,\n type InitOptions,\n type KeyPublishOptions,\n type PluginAddOptions,\n type PluginListResult,\n type PluginPublishOptions,\n type PluginRemoveOptions,\n type PublishOptions,\n type StartOptions,\n} from \"./contract\";\nimport { type AppConfig, type AppOrchestrator, startApp } from \"./dev-session\";\nimport {\n buildRegistryConfigUrlForNetwork,\n fetchBosConfigFromFastKv,\n getRegistryNamespaceForAccount,\n getRegistryNamespaceForNetwork,\n} from \"./fastkv\";\nimport { addFunctionCallAccessKey, ensureNearCli, executeTransaction } from \"./near-cli\";\nimport { getNetworkIdForAccount } from \"./network\";\nimport { createPlugin, z } from \"./sdk\";\nimport { syncAndGenerateSharedUi } from \"./shared\";\nimport type { BosConfig, RuntimeConfig, SourceMode } from \"./types\";\nimport { run } from \"./utils/run\";\n\nconst DEFAULT_DEV_CONFIG: AppConfig = {\n host: \"local\",\n ui: \"local\",\n api: \"local\",\n ssr: false,\n};\n\nconst buildCommands: Record<string, { cmd: string; args: string[] }> = {\n host: { cmd: \"bun\", args: [\"run\", \"build\"] },\n ui: { cmd: \"bun\", args: [\"run\", \"build\"] },\n api: { cmd: \"bun\", args: [\"run\", \"build\"] },\n};\n\nconst PUBLISH_FUNCTION_NAMES = [\"__fastdata_kv\"];\n\ntype BosDeps = {\n bosConfig: BosConfig | null;\n runtimeConfig: RuntimeConfig | null;\n configDir: string;\n};\n\ntype PluginAttachmentConfig = NonNullable<BosConfig[\"plugins\"]>[string];\n\nfunction parseSourceMode(value: string | undefined, defaultValue: SourceMode): SourceMode {\n if (value === \"local\" || value === \"remote\") return value;\n return defaultValue;\n}\n\nfunction buildAppConfig(options: {\n host?: string;\n ui?: string;\n api?: string;\n proxy?: boolean;\n ssr?: boolean;\n}): AppConfig {\n return {\n host: parseSourceMode(options.host, DEFAULT_DEV_CONFIG.host),\n ui: parseSourceMode(options.ui, DEFAULT_DEV_CONFIG.ui),\n api: parseSourceMode(options.api, DEFAULT_DEV_CONFIG.api),\n proxy: options.proxy,\n ssr: options.ssr ?? DEFAULT_DEV_CONFIG.ssr,\n };\n}\n\nfunction buildDescription(config: AppConfig): string {\n if (config.host === \"local\" && config.ui === \"local\" && config.api === \"local\" && !config.proxy) {\n return \"Full Local Development\";\n }\n\n const parts: string[] = [];\n parts.push(config.host === \"remote\" ? \"Remote Host\" : \"Local Host\");\n if (config.ui === \"remote\") parts.push(\"Remote UI\");\n if (config.proxy) parts.push(\"Proxy API → Production\");\n else if (config.api === \"remote\") parts.push(\"Remote API\");\n return parts.join(\" + \");\n}\n\nfunction buildConfigResult(bosConfig: BosConfig | null): BosConfigResult {\n const packages = bosConfig ? Object.keys(bosConfig.app) : [];\n const remotes = packages.filter((name) => name !== \"host\");\n\n return {\n config: bosConfig,\n packages,\n remotes,\n };\n}\n\ntype WorkspaceTarget = {\n key: string;\n kind: \"app\" | \"plugin\";\n path: string;\n};\n\nfunction resolveWorkspaceTarget(\n key: string,\n bosConfig: BosConfig | null,\n runtimeConfig: RuntimeConfig | null,\n configDir: string,\n): WorkspaceTarget | null {\n if (bosConfig?.app && key in bosConfig.app) {\n return {\n key,\n kind: \"app\",\n path: `${configDir}/${key}`,\n };\n }\n\n const runtimePlugin = runtimeConfig?.plugins?.[key];\n const pluginPath =\n runtimePlugin?.localPath ??\n resolveLocalDevelopmentPath(bosConfig?.plugins?.[key]?.development, configDir);\n if (pluginPath) {\n return {\n key,\n kind: \"plugin\",\n path: pluginPath,\n };\n }\n\n return null;\n}\n\nfunction determineProcesses(\n config: AppConfig,\n localPackages: string[],\n runtimeConfig?: RuntimeConfig | null,\n): string[] {\n const processes: string[] = [];\n if (config.ssr && config.ui === \"local\") processes.push(\"ui-ssr\");\n if (config.ui === \"local\") processes.push(\"ui\");\n if (config.api === \"local\" && !config.proxy) processes.push(\"api\");\n for (const pkg of localPackages) {\n if (pkg.startsWith(\"plugin:\")) {\n const pluginId = pkg.slice(\"plugin:\".length);\n if (runtimeConfig?.plugins?.[pluginId]?.source === \"local\") {\n processes.push(pkg);\n }\n }\n }\n processes.push(\"host\");\n return processes;\n}\n\nfunction isValidProxyUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\nfunction resolveProxyUrl(bosConfig: BosConfig | null): string | null {\n if (!bosConfig) return null;\n const apiConfig = bosConfig.app.api;\n if (!apiConfig) return null;\n if (apiConfig.proxy && isValidProxyUrl(apiConfig.proxy)) return apiConfig.proxy;\n if (apiConfig.production && isValidProxyUrl(apiConfig.production)) return apiConfig.production;\n return null;\n}\n\nfunction sanitizePluginKey(value: string): string {\n return value\n .replace(/[^A-Za-z0-9/_-]/g, \"-\")\n .replace(/\\/+/g, \"/\")\n .split(\"/\")\n .filter(Boolean)\n .map((segment) => segment.replace(/[^A-Za-z0-9_-]/g, \"-\"))\n .join(\"/\")\n .replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction defaultPluginKey(source: string): string {\n const normalized = source.replace(/^local:/, \"\").replace(/\\/$/, \"\");\n if (source.startsWith(\"local:\")) {\n return sanitizePluginKey(basename(normalized)) || \"plugin\";\n }\n\n try {\n const url = new URL(source);\n return sanitizePluginKey(basename(url.pathname) || url.hostname) || \"plugin\";\n } catch {\n return sanitizePluginKey(source) || \"plugin\";\n }\n}\n\nfunction pluginLocalPath(configDir: string, attachment: PluginAttachmentConfig): string | null {\n const source = attachment.development ?? attachment.production;\n if (!source?.startsWith(\"local:\")) {\n return null;\n }\n\n return join(configDir, source.slice(\"local:\".length));\n}\n\nasync function saveBosConfig(configDir: string, config: BosConfig): Promise<void> {\n const filePath = join(configDir, \"bos.config.json\");\n const next = `${JSON.stringify(config, null, 2)}\\n`;\n try {\n if (readFileSync(filePath, \"utf8\") === next) return;\n } catch {\n // file does not exist yet\n }\n\n writeFileSync(filePath, next);\n}\n\nfunction listPluginAttachments(config: BosConfig | null) {\n return (Object.entries(config?.plugins ?? {}) as Array<[string, PluginAttachmentConfig]>)\n .map(([key, attachment]) => ({\n key,\n development: attachment.development,\n production: attachment.production,\n localPath: attachment.development?.startsWith(\"local:\")\n ? attachment.development.slice(\"local:\".length)\n : undefined,\n source: attachment.development?.startsWith(\"local:\")\n ? (\"local\" as const)\n : (\"remote\" as const),\n }))\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\nasync function refreshApiContractBridge(configDir: string): Promise<void> {\n const refreshed = await loadConfig({ cwd: configDir, env: \"development\" });\n if (!refreshed) return;\n\n await syncApiContractBridge({\n configDir,\n runtimeConfig: refreshed.runtime,\n apiBaseUrl: refreshed.runtime.api.url,\n });\n}\n\nfunction extractPublishedUrl(output: string): string | null {\n const match = output.match(/https?:\\/\\/[^\\s\"'<>]+/g);\n if (!match || match.length === 0) return null;\n return match[match.length - 1] ?? null;\n}\n\nasync function buildEnvVars(\n config: AppConfig,\n bosConfig?: BosConfig | null,\n): Promise<Record<string, string>> {\n const env: Record<string, string> = {\n HOST_SOURCE: config.host,\n UI_SOURCE: config.ui,\n API_SOURCE: config.api,\n };\n\n if (config.host === \"remote\") {\n const remoteUrl = bosConfig?.app.host.production;\n if (remoteUrl) env.HOST_REMOTE_URL = remoteUrl;\n }\n\n if (config.ui === \"remote\") {\n const remoteUrl = bosConfig?.app.ui.production;\n if (remoteUrl) env.UI_REMOTE_URL = remoteUrl;\n }\n\n if (config.api === \"remote\") {\n const remoteUrl = bosConfig?.app.api.production;\n if (remoteUrl) env.API_REMOTE_URL = remoteUrl;\n }\n\n if (config.proxy && bosConfig) {\n const proxyUrl = resolveProxyUrl(bosConfig);\n if (proxyUrl) env.API_PROXY = proxyUrl;\n }\n\n return env;\n}\n\nasync function buildEveryPluginQuietly(cwd: string) {\n const packageDir = `${cwd}/packages/every-plugin`;\n const packageExists = await Bun.file(`${packageDir}/package.json`).exists();\n if (!packageExists) {\n return;\n }\n\n const distPath = `${cwd}/packages/every-plugin/dist/build/rspack/plugin.mjs`;\n const distExists = await Bun.file(distPath).exists();\n\n if (distExists) {\n return;\n }\n\n const result = (await run(\"bun\", [\"run\", \"--cwd\", \"packages/every-plugin\", \"build\"], {\n cwd,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (result.exitCode === 0) {\n console.log(\"[build:ssr] build succeeded\");\n return;\n }\n\n if (result.stdout.trim()) {\n process.stdout.write(result.stdout);\n }\n\n if (result.stderr.trim()) {\n process.stderr.write(result.stderr);\n }\n\n throw new Error(\n `bun run --cwd packages/every-plugin build failed with exit code ${result.exitCode}`,\n );\n}\n\nasync function buildEverythingDevQuietly(cwd: string) {\n const packageDir = `${cwd}/packages/everything-dev`;\n const packageExists = await Bun.file(`${packageDir}/package.json`).exists();\n if (!packageExists) {\n return;\n }\n\n const distPath = `${cwd}/packages/everything-dev/dist/index.mjs`;\n const distExists = await Bun.file(distPath).exists();\n\n if (distExists) {\n return;\n }\n\n const result = (await run(\"bun\", [\"run\", \"--cwd\", \"packages/everything-dev\", \"build\"], {\n cwd,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (result.exitCode === 0) {\n console.log(\"[everything-dev] build succeeded\");\n return;\n }\n\n if (result.stdout.trim()) {\n process.stdout.write(result.stdout);\n }\n\n if (result.stderr.trim()) {\n process.stderr.write(result.stderr);\n }\n\n throw new Error(\n `bun run --cwd packages/everything-dev build failed with exit code ${result.exitCode}`,\n );\n}\n\nasync function fetchPublishedConfig(\n accountId: string,\n gatewayId: string,\n): Promise<BosConfig | null> {\n try {\n return await fetchBosConfigFromFastKv<BosConfig>(`bos://${accountId}/${gatewayId}`);\n } catch {\n return null;\n }\n}\n\nfunction selectWorkspaceTargets(packages: string, bosConfig: BosConfig | null): string[] {\n const allPackages = [\n ...Object.keys(bosConfig?.app ?? {}),\n ...Object.keys(bosConfig?.plugins ?? {}),\n ];\n if (packages === \"all\") {\n return allPackages;\n }\n\n return packages\n .split(\",\")\n .map((pkg) => pkg.trim())\n .filter((pkg) => allPackages.includes(pkg));\n}\n\nasync function buildWorkspaceTargets(opts: {\n configDir: string;\n bosConfig: BosConfig | null;\n runtimeConfig: RuntimeConfig | null;\n targets: string[];\n deploy: boolean;\n}): Promise<{ built: string[]; skipped: string[] }> {\n const existing: WorkspaceTarget[] = [];\n const skipped: string[] = [];\n\n for (const target of opts.targets) {\n const resolved = resolveWorkspaceTarget(\n target,\n opts.bosConfig,\n opts.runtimeConfig,\n opts.configDir,\n );\n if (!resolved) {\n skipped.push(target);\n continue;\n }\n\n const exists = await Bun.file(`${resolved.path}/package.json`).exists();\n if (exists) existing.push(resolved);\n else skipped.push(target);\n }\n\n if (existing.length === 0) {\n return { built: [], skipped };\n }\n\n const sharedSync = await syncAndGenerateSharedUi({\n configDir: opts.configDir,\n hostMode: \"local\",\n bosConfig: opts.bosConfig ?? undefined,\n });\n if (sharedSync.catalogChanged) {\n await run(\"bun\", [\"install\"], { cwd: opts.configDir });\n }\n\n if (existing.some((entry) => entry.key === \"api\")) {\n await buildEveryPluginQuietly(opts.configDir);\n }\n\n await buildEverythingDevQuietly(opts.configDir);\n\n const env: Record<string, string> = {\n ...process.env,\n NODE_ENV: opts.deploy ? \"production\" : \"development\",\n };\n if (opts.deploy) {\n env.DEPLOY = \"true\";\n } else {\n delete env.DEPLOY;\n }\n\n const orderedExisting = opts.deploy\n ? [\n ...existing.filter((entry) => entry.kind === \"app\" && entry.key !== \"host\"),\n ...existing.filter((entry) => entry.kind === \"plugin\"),\n ...existing.filter((entry) => entry.kind === \"app\" && entry.key === \"host\"),\n ]\n : existing;\n const built: string[] = [];\n\n for (const resolved of orderedExisting) {\n const pkgJson = JSON.parse(await Bun.file(`${resolved.path}/package.json`).text()) as {\n scripts?: Record<string, string>;\n };\n const shouldDeployScript = opts.deploy && pkgJson.scripts?.deploy;\n const buildConfig = shouldDeployScript\n ? { cmd: \"bun\", args: [\"run\", \"deploy\"] }\n : (buildCommands[resolved.key] ?? { cmd: \"bun\", args: [\"run\", \"build\"] });\n\n await run(buildConfig.cmd, buildConfig.args, {\n cwd: resolved.path,\n env,\n });\n built.push(resolved.key);\n }\n\n return { built, skipped };\n}\n\nexport default createPlugin({\n variables: z.object({\n configPath: z.string().optional(),\n }),\n secrets: z.object({}),\n contract: bosContract,\n initialize: (config: any) =>\n Effect.promise(async () => {\n const configResult = await loadConfig({ path: config.variables.configPath });\n return {\n bosConfig: configResult?.config ?? null,\n runtimeConfig: configResult?.runtime ?? null,\n configDir: getProjectRoot(),\n } satisfies BosDeps;\n }),\n shutdown: () => Effect.void,\n createRouter: (deps: BosDeps, builder: any) => ({\n config: builder.config.handler(async () => buildConfigResult(deps.bosConfig)),\n\n pluginAdd: builder.pluginAdd.handler(async ({ input }: { input: PluginAddOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: \"No bos.config.json found\",\n };\n }\n\n const key = sanitizePluginKey(input.as ?? defaultPluginKey(input.source));\n const existing = deps.bosConfig.plugins?.[key];\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n\n nextPlugins[key] = input.source.startsWith(\"local:\")\n ? {\n ...(existing ?? {}),\n development: input.source,\n production: input.production ?? existing?.production,\n }\n : {\n ...(existing ?? {}),\n production: input.production ?? input.source,\n };\n\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: nextPlugins,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await refreshApiContractBridge(deps.configDir);\n\n return {\n status: \"added\" as const,\n key,\n development: deps.bosConfig.plugins?.[key]?.development,\n production: deps.bosConfig.plugins?.[key]?.production,\n };\n }),\n\n pluginRemove: builder.pluginRemove.handler(\n async ({ input }: { input: PluginRemoveOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: \"No bos.config.json found\",\n };\n }\n\n if (!deps.bosConfig.plugins?.[input.key]) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' is not configured`,\n };\n }\n\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n delete nextPlugins[input.key];\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: Object.keys(nextPlugins).length > 0 ? nextPlugins : undefined,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await refreshApiContractBridge(deps.configDir);\n\n return {\n status: \"removed\" as const,\n key: input.key,\n };\n },\n ),\n\n pluginList: builder.pluginList.handler(async () => {\n const plugins: PluginListResult[\"plugins\"] = listPluginAttachments(deps.bosConfig);\n return {\n status: \"listed\" as const,\n plugins,\n };\n }),\n\n pluginPublish: builder.pluginPublish.handler(\n async ({ input }: { input: PluginPublishOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: \"No bos.config.json found\",\n };\n }\n\n const attachment = deps.bosConfig.plugins?.[input.key];\n if (!attachment) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' is not configured`,\n };\n }\n\n const localPath = pluginLocalPath(deps.configDir, attachment);\n if (!localPath) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' does not have a local development path`,\n };\n }\n\n const pkgPath = join(localPath, \"package.json\");\n if (!(await Bun.file(pkgPath).exists())) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Missing package.json at ${localPath}`,\n };\n }\n\n const pkgJson = (await Bun.file(pkgPath).json()) as { scripts?: Record<string, string> };\n const script = pkgJson.scripts?.deploy ? \"deploy\" : \"build\";\n\n const { stdout, stderr, exitCode } = (await run(\"bun\", [\"run\", script], {\n cwd: localPath,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (exitCode !== 0) {\n if (stdout.trim()) process.stdout.write(stdout);\n if (stderr.trim()) process.stderr.write(stderr);\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Publish failed with exit code ${exitCode}`,\n };\n }\n\n if (stdout.trim()) process.stdout.write(stdout);\n if (stderr.trim()) process.stderr.write(stderr);\n\n const publishedUrl = extractPublishedUrl(`${stdout}\\n${stderr}`);\n if (publishedUrl) {\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: {\n ...(deps.bosConfig.plugins ?? {}),\n [input.key]: {\n ...(deps.bosConfig.plugins?.[input.key] ?? {}),\n production: publishedUrl,\n },\n },\n };\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await refreshApiContractBridge(deps.configDir);\n }\n\n return {\n status: \"published\" as const,\n key: input.key,\n path: localPath,\n script,\n production: publishedUrl ?? attachment.production,\n };\n },\n ),\n\n dev: builder.dev.handler(async ({ input }: { input: DevOptions }) => {\n const localPackages = detectLocalPackages(\n deps.bosConfig ?? undefined,\n deps.runtimeConfig ?? undefined,\n );\n\n const appConfig = buildAppConfig({\n host: localPackages.includes(\"host\") ? (input.host as string) : \"remote\",\n ui: localPackages.includes(\"ui\") ? (input.ui as string) : \"remote\",\n api: localPackages.includes(\"api\") ? (input.api as string) : \"remote\",\n proxy: input.proxy,\n ssr: input.ssr,\n });\n\n const sharedSync = await syncAndGenerateSharedUi({\n configDir: deps.configDir,\n hostMode: appConfig.host,\n bosConfig: deps.bosConfig ?? undefined,\n });\n if (sharedSync.catalogChanged) {\n await run(\"bun\", [\"install\"], { cwd: deps.configDir });\n }\n if (\n (appConfig.api === \"local\" && !appConfig.proxy) ||\n localPackages.some((pkg) => pkg.startsWith(\"plugin:\"))\n ) {\n await buildEveryPluginQuietly(deps.configDir);\n }\n\n await buildEverythingDevQuietly(deps.configDir);\n\n const refreshed = await loadConfig({ cwd: deps.configDir });\n deps.bosConfig = refreshed?.config ?? deps.bosConfig;\n deps.runtimeConfig = refreshed?.runtime ?? deps.runtimeConfig;\n\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n description: \"No bos.config.json found\",\n processes: [],\n };\n }\n\n if (appConfig.proxy && !resolveProxyUrl(deps.bosConfig)) {\n return {\n status: \"error\" as const,\n description: \"No valid proxy URL configured in bos.config.json\",\n processes: [],\n };\n }\n\n const refreshedLocalPackages = detectLocalPackages(\n deps.bosConfig ?? undefined,\n deps.runtimeConfig ?? undefined,\n );\n const processes = determineProcesses(appConfig, refreshedLocalPackages, deps.runtimeConfig);\n const env = await buildEnvVars(appConfig, deps.bosConfig);\n const hostPort = input.port ?? getHostDevelopmentPort(deps.bosConfig.app.host.development);\n const developmentRuntime = buildRuntimeConfig(deps.bosConfig, {\n uiSource: appConfig.ui,\n apiSource: appConfig.api,\n hostUrl: `http://localhost:${hostPort}`,\n proxy: env.API_PROXY,\n env: \"development\",\n plugins: deps.runtimeConfig?.plugins,\n });\n const runtimeConfig = await prepareDevelopmentRuntimeConfig(developmentRuntime, {\n hostPort,\n ssr: appConfig.ssr,\n });\n\n await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig: runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n });\n\n const orchestrator: AppOrchestrator = {\n packages: processes,\n env,\n description: buildDescription(appConfig),\n appConfig,\n bosConfig: deps.bosConfig,\n runtimeConfig,\n port: parsePort(runtimeConfig.hostUrl),\n interactive: input.interactive,\n };\n\n startApp(orchestrator);\n\n return {\n status: \"started\" as const,\n description: orchestrator.description,\n processes,\n };\n }),\n\n start: builder.start.handler(async ({ input }: { input: StartOptions }) => {\n let remoteConfig: BosConfig | null = null;\n\n if (input.account && input.domain) {\n remoteConfig = await fetchPublishedConfig(input.account, input.domain);\n if (!remoteConfig) {\n return {\n status: \"error\" as const,\n url: \"\",\n };\n }\n }\n\n const config = remoteConfig || deps.bosConfig;\n if (!config) {\n return {\n status: \"error\" as const,\n url: \"\",\n };\n }\n\n const port = input.port ?? getHostDevelopmentPort(config.app.host.development);\n const appConfig: AppConfig = { host: \"remote\", ui: \"remote\", api: \"remote\" };\n const env = await buildEnvVars(appConfig, config);\n const isStaging = input.env === \"staging\";\n const runtimePlugins = remoteConfig\n ? await buildRuntimePluginsForConfig(config, deps.configDir, \"production\")\n : deps.runtimeConfig?.plugins;\n const runtimeConfig = buildRuntimeConfig(config, {\n uiSource: \"remote\",\n apiSource: \"remote\",\n hostUrl: `http://localhost:${port}`,\n env: \"production\",\n plugins: runtimePlugins,\n });\n\n await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig: runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n });\n\n const stagingEnvVars: Record<string, string> = isStaging\n ? { GATEWAY_DOMAIN: config.staging?.domain ?? config.domain ?? \"\" }\n : {};\n\n const orchestrator: AppOrchestrator = {\n packages: [\"host\"],\n env: {\n NODE_ENV: \"production\",\n ...env,\n ...stagingEnvVars,\n },\n description: `${isStaging ? \"Staging\" : \"Production\"} Mode (${config.account})`,\n appConfig,\n bosConfig: config,\n runtimeConfig,\n port,\n interactive: input.interactive,\n noLogs: true,\n };\n\n startApp(orchestrator);\n return {\n status: \"running\" as const,\n url: `http://localhost:${port}`,\n };\n }),\n\n build: builder.build.handler(async ({ input }: { input: BuildOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\n\n const targets = selectWorkspaceTargets(input.packages, deps.bosConfig);\n if (targets.length === 0) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\n\n const runtimeConfig = buildRuntimeConfig(deps.bosConfig, {\n uiSource: deps.bosConfig.app.ui?.development ? \"local\" : \"remote\",\n apiSource: deps.bosConfig.app.api?.development ? \"local\" : \"remote\",\n hostUrl: resolveDevelopmentHostUrl(deps.bosConfig.app.host.development),\n env: \"development\",\n plugins: deps.runtimeConfig?.plugins,\n });\n\n await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n });\n\n const { built, skipped } = await buildWorkspaceTargets({\n configDir: deps.configDir,\n bosConfig: deps.bosConfig,\n runtimeConfig: runtimeConfig,\n targets,\n deploy: input.deploy,\n });\n\n if (built.length === 0) {\n return {\n status: \"error\" as const,\n built: [],\n skipped,\n };\n }\n\n return {\n status: \"success\" as const,\n built,\n skipped,\n deployed: input.deploy,\n };\n }),\n\n publish: builder.publish.handler(async ({ input }: { input: PublishOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n registryUrl: \"\",\n error: \"No bos.config.json found\",\n };\n }\n\n const account = deps.bosConfig.account;\n const gateway = deps.bosConfig.domain;\n if (!gateway) {\n return {\n status: \"error\" as const,\n registryUrl: \"\",\n error: \"bos.config.json must define domain to publish\",\n };\n }\n\n const network = input.network ?? getNetworkIdForAccount(account);\n const bosUrl = `bos://${account}/${gateway}`;\n const registryUrl = buildRegistryConfigUrlForNetwork(network, account, gateway);\n const targets = selectWorkspaceTargets(input.packages, deps.bosConfig);\n\n let publishConfig = deps.bosConfig;\n let built: string[] | undefined;\n let skipped: string[] | undefined;\n\n if (input.dryRun) {\n return {\n status: \"dry-run\" as const,\n registryUrl,\n built,\n skipped,\n };\n }\n\n if (input.deploy) {\n const result = await buildWorkspaceTargets({\n configDir: deps.configDir,\n bosConfig: deps.bosConfig,\n runtimeConfig: deps.runtimeConfig,\n targets,\n deploy: true,\n });\n built = result.built;\n skipped = result.skipped;\n\n const refreshed = await loadConfig({ cwd: deps.configDir });\n if (refreshed?.config) {\n deps.bosConfig = refreshed.config;\n deps.runtimeConfig = refreshed.runtime;\n publishConfig = refreshed.config;\n }\n }\n\n const payload = JSON.stringify({\n [`apps/${account}/${gateway}/bos.config.json`]: JSON.stringify(publishConfig),\n });\n const argsBase64 = Buffer.from(payload).toString(\"base64\");\n const privateKey =\n input.privateKey || process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;\n\n try {\n await Effect.runPromise(ensureNearCli);\n let txHash: string | undefined;\n\n try {\n const tx = await Effect.runPromise(\n executeTransaction({\n account,\n contract: getRegistryNamespaceForNetwork(network),\n method: \"__fastdata_kv\",\n argsBase64,\n network,\n privateKey,\n gas: \"300Tgas\",\n deposit: \"0NEAR\",\n }),\n );\n txHash = tx.txHash;\n } catch (error) {\n txHash = extractTransactionHash(error);\n\n if (!txHash) {\n throw error;\n }\n\n const verifiedConfig = await fetchBosConfigFromFastKv<BosConfig>(bosUrl);\n if (JSON.stringify(verifiedConfig) !== JSON.stringify(publishConfig)) {\n throw error;\n }\n }\n\n return {\n status: \"published\" as const,\n registryUrl,\n txHash,\n built,\n skipped,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n registryUrl,\n error: error instanceof Error ? error.message : \"Unknown error\",\n built,\n skipped,\n };\n }\n }),\n\n keyPublish: builder.keyPublish.handler(async ({ input }: { input: KeyPublishOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n account: \"\",\n network: \"mainnet\" as const,\n contract: \"\",\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n error: \"No bos.config.json found\",\n };\n }\n\n const account = deps.bosConfig.account;\n const network = getNetworkIdForAccount(account);\n const contract = getRegistryNamespaceForAccount(account);\n try {\n await Effect.runPromise(ensureNearCli);\n const keyPair = await addFunctionCallAccessKey({\n account,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n network,\n });\n\n return {\n status: \"published\" as const,\n account,\n network,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n publicKey: keyPair.publicKey,\n privateKey: keyPair.privateKey,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n account,\n network,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n init: builder.init.handler(async ({ input }: { input: InitOptions }) => {\n try {\n let account = input.account;\n let gateway = input.gateway;\n let destination = input.destination;\n let name = input.name;\n let domain = input.domain;\n let withHost = input.withHost;\n\n if (!account || !gateway) {\n if (input.noInteractive) {\n return {\n status: \"error\" as const,\n destination: \"\",\n parentAccount: account ?? \"\",\n parentGateway: gateway ?? \"\",\n name: input.name,\n domain: input.domain,\n extends: account && gateway ? `bos://${account}/${gateway}` : \"\",\n filesCopied: 0,\n error:\n \"account and gateway are required (use --no-interactive to skip prompts and provide them as positional args)\",\n };\n }\n\n const prompted = await promptInitOptions({\n account,\n gateway,\n destination,\n name,\n domain,\n withHost,\n });\n account = prompted.account;\n gateway = prompted.gateway;\n destination = prompted.destination;\n name = prompted.name;\n domain = prompted.domain;\n withHost = prompted.withHost;\n }\n\n destination = destination || gateway;\n\n const { sourceDir, cleanup } = await resolveSourceDir({\n account,\n gateway,\n source: input.source,\n });\n\n try {\n const patterns = await readTemplatekeep(sourceDir);\n if (patterns.length === 0) {\n return {\n status: \"error\" as const,\n destination,\n parentAccount: account,\n parentGateway: gateway,\n name,\n domain,\n extends: `bos://${account}/${gateway}`,\n filesCopied: 0,\n error: \"No .templatekeep found in template source\",\n };\n }\n\n const filesCopied = await copyFilteredFiles(sourceDir, destination, patterns, {\n withHost,\n });\n\n await personalizeConfig(destination, {\n parentAccount: account,\n parentGateway: gateway,\n name: name || account,\n domain: domain || gateway,\n workspaceOpts: { sourceDir },\n });\n\n if (!input.noInstall) {\n await runBunInstall(destination);\n }\n\n return {\n status: \"initialized\" as const,\n destination: resolve(destination),\n parentAccount: account,\n parentGateway: gateway,\n name,\n domain,\n extends: `bos://${account}/${gateway}`,\n filesCopied,\n };\n } finally {\n await cleanup();\n }\n } catch (error) {\n return {\n status: \"error\" as const,\n destination: input.destination ?? input.gateway ?? \"\",\n parentAccount: input.account ?? \"\",\n parentGateway: input.gateway ?? \"\",\n name: input.name,\n domain: input.domain,\n extends: input.account && input.gateway ? `bos://${input.account}/${input.gateway}` : \"\",\n filesCopied: 0,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n }),\n});\n\nfunction extractTransactionHash(error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const match =\n message.match(/Transaction ID:\\s*([A-Za-z0-9]+)/i) ||\n message.match(/([A-HJ-NP-Za-km-z1-9]{43,44})/);\n\n return match?.[1];\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.mjs","names":[],"sources":["../src/plugin.ts"],"sourcesContent":["import { readFileSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport { Effect } from \"effect\";\nimport { syncApiContractBridge } from \"./api-contract\";\nimport { buildRuntimeConfig, detectLocalPackages, prepareDevelopmentRuntimeConfig } from \"./app\";\nimport {\n copyFilteredFiles,\n fetchParentConfig,\n personalizeConfig,\n readTemplatekeep,\n resolveSourceDir,\n runBunInstall,\n writeInitSnapshot,\n} from \"./cli/init\";\nimport { promptInitOptions } from \"./cli/prompts\";\nimport { getStatus } from \"./cli/status\";\nimport { syncTemplate } from \"./cli/sync\";\nimport { upgradeTemplate } from \"./cli/upgrade\";\nimport {\n buildRuntimePluginsForConfig,\n findConfigPath,\n getHostDevelopmentPort,\n getProjectRoot,\n loadConfig,\n parsePort,\n resolveDevelopmentHostUrl,\n resolveLocalDevelopmentPath,\n} from \"./config\";\nimport {\n type BosConfigResult,\n type BuildOptions,\n bosContract,\n type DevOptions,\n type InitOptions,\n type KeyPublishOptions,\n type PluginAddOptions,\n type PluginListResult,\n type PluginPublishOptions,\n type PluginRemoveOptions,\n type PublishOptions,\n type StartOptions,\n type SyncOptions,\n type UpgradeOptions,\n} from \"./contract\";\nimport { type AppConfig, type AppOrchestrator, startApp } from \"./dev-session\";\nimport {\n buildRegistryConfigUrlForNetwork,\n fetchBosConfigFromFastKv,\n getRegistryNamespaceForAccount,\n getRegistryNamespaceForNetwork,\n} from \"./fastkv\";\nimport { addFunctionCallAccessKey, ensureNearCli, executeTransaction } from \"./near-cli\";\nimport { getNetworkIdForAccount } from \"./network\";\nimport { createPlugin, z } from \"./sdk\";\nimport { syncAndGenerateSharedUi } from \"./shared\";\nimport type { BosConfig, RuntimeConfig, SourceMode } from \"./types\";\nimport { run } from \"./utils/run\";\n\nconst DEFAULT_DEV_CONFIG: AppConfig = {\n host: \"local\",\n ui: \"local\",\n api: \"local\",\n ssr: false,\n};\n\nconst buildCommands: Record<string, { cmd: string; args: string[] }> = {\n host: { cmd: \"bun\", args: [\"run\", \"build\"] },\n ui: { cmd: \"bun\", args: [\"run\", \"build\"] },\n api: { cmd: \"bun\", args: [\"run\", \"build\"] },\n};\n\nconst PUBLISH_FUNCTION_NAMES = [\"__fastdata_kv\"];\n\ntype BosDeps = {\n bosConfig: BosConfig | null;\n runtimeConfig: RuntimeConfig | null;\n configDir: string;\n};\n\ntype PluginAttachmentConfig = NonNullable<BosConfig[\"plugins\"]>[string];\n\nfunction parseSourceMode(value: string | undefined, defaultValue: SourceMode): SourceMode {\n if (value === \"local\" || value === \"remote\") return value;\n return defaultValue;\n}\n\nfunction buildAppConfig(options: {\n host?: string;\n ui?: string;\n api?: string;\n proxy?: boolean;\n ssr?: boolean;\n}): AppConfig {\n return {\n host: parseSourceMode(options.host, DEFAULT_DEV_CONFIG.host),\n ui: parseSourceMode(options.ui, DEFAULT_DEV_CONFIG.ui),\n api: parseSourceMode(options.api, DEFAULT_DEV_CONFIG.api),\n proxy: options.proxy,\n ssr: options.ssr ?? DEFAULT_DEV_CONFIG.ssr,\n };\n}\n\nfunction buildDescription(config: AppConfig): string {\n if (config.host === \"local\" && config.ui === \"local\" && config.api === \"local\" && !config.proxy) {\n return \"Full Local Development\";\n }\n\n const parts: string[] = [];\n parts.push(config.host === \"remote\" ? \"Remote Host\" : \"Local Host\");\n if (config.ui === \"remote\") parts.push(\"Remote UI\");\n if (config.proxy) parts.push(\"Proxy API → Production\");\n else if (config.api === \"remote\") parts.push(\"Remote API\");\n return parts.join(\" + \");\n}\n\nfunction buildConfigResult(bosConfig: BosConfig | null): BosConfigResult {\n const packages = bosConfig ? Object.keys(bosConfig.app) : [];\n const remotes = packages.filter((name) => name !== \"host\");\n\n return {\n config: bosConfig,\n packages,\n remotes,\n };\n}\n\ntype WorkspaceTarget = {\n key: string;\n kind: \"app\" | \"plugin\";\n path: string;\n};\n\nfunction resolveWorkspaceTarget(\n key: string,\n bosConfig: BosConfig | null,\n runtimeConfig: RuntimeConfig | null,\n configDir: string,\n): WorkspaceTarget | null {\n if (bosConfig?.app && key in bosConfig.app) {\n return {\n key,\n kind: \"app\",\n path: `${configDir}/${key}`,\n };\n }\n\n const runtimePlugin = runtimeConfig?.plugins?.[key];\n const pluginPath =\n runtimePlugin?.localPath ??\n resolveLocalDevelopmentPath(bosConfig?.plugins?.[key]?.development, configDir);\n if (pluginPath) {\n return {\n key,\n kind: \"plugin\",\n path: pluginPath,\n };\n }\n\n return null;\n}\n\nfunction determineProcesses(\n config: AppConfig,\n localPackages: string[],\n runtimeConfig?: RuntimeConfig | null,\n): string[] {\n const processes: string[] = [];\n if (config.ssr && config.ui === \"local\") processes.push(\"ui-ssr\");\n if (config.ui === \"local\") processes.push(\"ui\");\n if (config.api === \"local\" && !config.proxy) processes.push(\"api\");\n for (const pkg of localPackages) {\n if (pkg.startsWith(\"plugin:\")) {\n const pluginId = pkg.slice(\"plugin:\".length);\n if (runtimeConfig?.plugins?.[pluginId]?.source === \"local\") {\n processes.push(pkg);\n }\n }\n }\n processes.push(\"host\");\n return processes;\n}\n\nfunction isValidProxyUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\nfunction resolveProxyUrl(bosConfig: BosConfig | null): string | null {\n if (!bosConfig) return null;\n const apiConfig = bosConfig.app.api;\n if (!apiConfig) return null;\n if (apiConfig.proxy && isValidProxyUrl(apiConfig.proxy)) return apiConfig.proxy;\n if (apiConfig.production && isValidProxyUrl(apiConfig.production)) return apiConfig.production;\n return null;\n}\n\nfunction sanitizePluginKey(value: string): string {\n return value\n .replace(/[^A-Za-z0-9/_-]/g, \"-\")\n .replace(/\\/+/g, \"/\")\n .split(\"/\")\n .filter(Boolean)\n .map((segment) => segment.replace(/[^A-Za-z0-9_-]/g, \"-\"))\n .join(\"/\")\n .replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction defaultPluginKey(source: string): string {\n const normalized = source.replace(/^local:/, \"\").replace(/\\/$/, \"\");\n if (source.startsWith(\"local:\")) {\n return sanitizePluginKey(basename(normalized)) || \"plugin\";\n }\n\n try {\n const url = new URL(source);\n return sanitizePluginKey(basename(url.pathname) || url.hostname) || \"plugin\";\n } catch {\n return sanitizePluginKey(source) || \"plugin\";\n }\n}\n\nfunction pluginLocalPath(configDir: string, attachment: PluginAttachmentConfig): string | null {\n const source = attachment.development ?? attachment.production;\n if (!source?.startsWith(\"local:\")) {\n return null;\n }\n\n return join(configDir, source.slice(\"local:\".length));\n}\n\nasync function saveBosConfig(configDir: string, config: BosConfig): Promise<void> {\n const filePath = join(configDir, \"bos.config.json\");\n const next = `${JSON.stringify(config, null, 2)}\\n`;\n try {\n if (readFileSync(filePath, \"utf8\") === next) return;\n } catch {\n // file does not exist yet\n }\n\n writeFileSync(filePath, next);\n}\n\nfunction listPluginAttachments(config: BosConfig | null) {\n return (Object.entries(config?.plugins ?? {}) as Array<[string, PluginAttachmentConfig]>)\n .map(([key, attachment]) => ({\n key,\n development: attachment.development,\n production: attachment.production,\n localPath: attachment.development?.startsWith(\"local:\")\n ? attachment.development.slice(\"local:\".length)\n : undefined,\n source: attachment.development?.startsWith(\"local:\")\n ? (\"local\" as const)\n : (\"remote\" as const),\n }))\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\nasync function refreshApiContractBridge(configDir: string): Promise<void> {\n const refreshed = await loadConfig({ cwd: configDir, env: \"development\" });\n if (!refreshed) return;\n\n await syncApiContractBridge({\n configDir,\n runtimeConfig: refreshed.runtime,\n apiBaseUrl: refreshed.runtime.api.url,\n });\n}\n\nfunction extractPublishedUrl(output: string): string | null {\n const match = output.match(/https?:\\/\\/[^\\s\"'<>]+/g);\n if (!match || match.length === 0) return null;\n return match[match.length - 1] ?? null;\n}\n\nasync function buildEnvVars(\n config: AppConfig,\n bosConfig?: BosConfig | null,\n): Promise<Record<string, string>> {\n const env: Record<string, string> = {\n HOST_SOURCE: config.host,\n UI_SOURCE: config.ui,\n API_SOURCE: config.api,\n };\n\n if (config.host === \"remote\") {\n const remoteUrl = bosConfig?.app.host.production;\n if (remoteUrl) env.HOST_REMOTE_URL = remoteUrl;\n }\n\n if (config.ui === \"remote\") {\n const remoteUrl = bosConfig?.app.ui.production;\n if (remoteUrl) env.UI_REMOTE_URL = remoteUrl;\n }\n\n if (config.api === \"remote\") {\n const remoteUrl = bosConfig?.app.api.production;\n if (remoteUrl) env.API_REMOTE_URL = remoteUrl;\n }\n\n if (config.proxy && bosConfig) {\n const proxyUrl = resolveProxyUrl(bosConfig);\n if (proxyUrl) env.API_PROXY = proxyUrl;\n }\n\n return env;\n}\n\nasync function buildEveryPluginQuietly(cwd: string) {\n const packageDir = `${cwd}/packages/every-plugin`;\n const packageExists = await Bun.file(`${packageDir}/package.json`).exists();\n if (!packageExists) {\n return;\n }\n\n const distPath = `${cwd}/packages/every-plugin/dist/build/rspack/plugin.mjs`;\n const distExists = await Bun.file(distPath).exists();\n\n if (distExists) {\n return;\n }\n\n const result = (await run(\"bun\", [\"run\", \"--cwd\", \"packages/every-plugin\", \"build\"], {\n cwd,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (result.exitCode === 0) {\n console.log(\"[build:ssr] build succeeded\");\n return;\n }\n\n if (result.stdout.trim()) {\n process.stdout.write(result.stdout);\n }\n\n if (result.stderr.trim()) {\n process.stderr.write(result.stderr);\n }\n\n throw new Error(\n `bun run --cwd packages/every-plugin build failed with exit code ${result.exitCode}`,\n );\n}\n\nasync function buildEverythingDevQuietly(cwd: string) {\n const packageDir = `${cwd}/packages/everything-dev`;\n const packageExists = await Bun.file(`${packageDir}/package.json`).exists();\n if (!packageExists) {\n return;\n }\n\n const distPath = `${cwd}/packages/everything-dev/dist/index.mjs`;\n const distExists = await Bun.file(distPath).exists();\n\n if (distExists) {\n return;\n }\n\n const result = (await run(\"bun\", [\"run\", \"--cwd\", \"packages/everything-dev\", \"build\"], {\n cwd,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (result.exitCode === 0) {\n console.log(\"[everything-dev] build succeeded\");\n return;\n }\n\n if (result.stdout.trim()) {\n process.stdout.write(result.stdout);\n }\n\n if (result.stderr.trim()) {\n process.stderr.write(result.stderr);\n }\n\n throw new Error(\n `bun run --cwd packages/everything-dev build failed with exit code ${result.exitCode}`,\n );\n}\n\nasync function fetchPublishedConfig(\n accountId: string,\n gatewayId: string,\n): Promise<BosConfig | null> {\n try {\n return await fetchBosConfigFromFastKv<BosConfig>(`bos://${accountId}/${gatewayId}`);\n } catch {\n return null;\n }\n}\n\nfunction selectWorkspaceTargets(packages: string, bosConfig: BosConfig | null): string[] {\n const allPackages = [\n ...Object.keys(bosConfig?.app ?? {}),\n ...Object.keys(bosConfig?.plugins ?? {}),\n ];\n if (packages === \"all\") {\n return allPackages;\n }\n\n return packages\n .split(\",\")\n .map((pkg) => pkg.trim())\n .filter((pkg) => allPackages.includes(pkg));\n}\n\nasync function buildWorkspaceTargets(opts: {\n configDir: string;\n bosConfig: BosConfig | null;\n runtimeConfig: RuntimeConfig | null;\n targets: string[];\n deploy: boolean;\n}): Promise<{ built: string[]; skipped: string[] }> {\n const existing: WorkspaceTarget[] = [];\n const skipped: string[] = [];\n\n for (const target of opts.targets) {\n const resolved = resolveWorkspaceTarget(\n target,\n opts.bosConfig,\n opts.runtimeConfig,\n opts.configDir,\n );\n if (!resolved) {\n skipped.push(target);\n continue;\n }\n\n const exists = await Bun.file(`${resolved.path}/package.json`).exists();\n if (exists) existing.push(resolved);\n else skipped.push(target);\n }\n\n if (existing.length === 0) {\n return { built: [], skipped };\n }\n\n const sharedSync = await syncAndGenerateSharedUi({\n configDir: opts.configDir,\n hostMode: \"local\",\n bosConfig: opts.bosConfig ?? undefined,\n });\n if (sharedSync.catalogChanged) {\n await run(\"bun\", [\"install\"], { cwd: opts.configDir });\n }\n\n if (existing.some((entry) => entry.key === \"api\")) {\n await buildEveryPluginQuietly(opts.configDir);\n }\n\n await buildEverythingDevQuietly(opts.configDir);\n\n const env: Record<string, string> = {\n ...process.env,\n NODE_ENV: opts.deploy ? \"production\" : \"development\",\n };\n if (opts.deploy) {\n env.DEPLOY = \"true\";\n } else {\n delete env.DEPLOY;\n }\n\n const orderedExisting = opts.deploy\n ? [\n ...existing.filter((entry) => entry.kind === \"app\" && entry.key !== \"host\"),\n ...existing.filter((entry) => entry.kind === \"plugin\"),\n ...existing.filter((entry) => entry.kind === \"app\" && entry.key === \"host\"),\n ]\n : existing;\n const built: string[] = [];\n\n for (const resolved of orderedExisting) {\n const pkgJson = JSON.parse(await Bun.file(`${resolved.path}/package.json`).text()) as {\n scripts?: Record<string, string>;\n };\n const shouldDeployScript = opts.deploy && pkgJson.scripts?.deploy;\n const buildConfig = shouldDeployScript\n ? { cmd: \"bun\", args: [\"run\", \"deploy\"] }\n : (buildCommands[resolved.key] ?? { cmd: \"bun\", args: [\"run\", \"build\"] });\n\n await run(buildConfig.cmd, buildConfig.args, {\n cwd: resolved.path,\n env,\n });\n built.push(resolved.key);\n }\n\n return { built, skipped };\n}\n\nexport default createPlugin({\n variables: z.object({\n configPath: z.string().optional(),\n }),\n secrets: z.object({}),\n contract: bosContract,\n initialize: (config: any) =>\n Effect.promise(async () => {\n const configResult = await loadConfig({ path: config.variables.configPath });\n return {\n bosConfig: configResult?.config ?? null,\n runtimeConfig: configResult?.runtime ?? null,\n configDir: getProjectRoot(),\n } satisfies BosDeps;\n }),\n shutdown: () => Effect.void,\n createRouter: (deps: BosDeps, builder: any) => ({\n config: builder.config.handler(async () => buildConfigResult(deps.bosConfig)),\n\n pluginAdd: builder.pluginAdd.handler(async ({ input }: { input: PluginAddOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: \"No bos.config.json found\",\n };\n }\n\n const key = sanitizePluginKey(input.as ?? defaultPluginKey(input.source));\n const existing = deps.bosConfig.plugins?.[key];\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n\n nextPlugins[key] = input.source.startsWith(\"local:\")\n ? {\n ...(existing ?? {}),\n development: input.source,\n production: input.production ?? existing?.production,\n }\n : {\n ...(existing ?? {}),\n production: input.production ?? input.source,\n };\n\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: nextPlugins,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await refreshApiContractBridge(deps.configDir);\n\n return {\n status: \"added\" as const,\n key,\n development: deps.bosConfig.plugins?.[key]?.development,\n production: deps.bosConfig.plugins?.[key]?.production,\n };\n }),\n\n pluginRemove: builder.pluginRemove.handler(\n async ({ input }: { input: PluginRemoveOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: \"No bos.config.json found\",\n };\n }\n\n if (!deps.bosConfig.plugins?.[input.key]) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' is not configured`,\n };\n }\n\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n delete nextPlugins[input.key];\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: Object.keys(nextPlugins).length > 0 ? nextPlugins : undefined,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await refreshApiContractBridge(deps.configDir);\n\n return {\n status: \"removed\" as const,\n key: input.key,\n };\n },\n ),\n\n pluginList: builder.pluginList.handler(async () => {\n const plugins: PluginListResult[\"plugins\"] = listPluginAttachments(deps.bosConfig);\n return {\n status: \"listed\" as const,\n plugins,\n };\n }),\n\n pluginPublish: builder.pluginPublish.handler(\n async ({ input }: { input: PluginPublishOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: \"No bos.config.json found\",\n };\n }\n\n const attachment = deps.bosConfig.plugins?.[input.key];\n if (!attachment) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' is not configured`,\n };\n }\n\n const localPath = pluginLocalPath(deps.configDir, attachment);\n if (!localPath) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' does not have a local development path`,\n };\n }\n\n const pkgPath = join(localPath, \"package.json\");\n if (!(await Bun.file(pkgPath).exists())) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Missing package.json at ${localPath}`,\n };\n }\n\n const pkgJson = (await Bun.file(pkgPath).json()) as { scripts?: Record<string, string> };\n const script = pkgJson.scripts?.deploy ? \"deploy\" : \"build\";\n\n const { stdout, stderr, exitCode } = (await run(\"bun\", [\"run\", script], {\n cwd: localPath,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (exitCode !== 0) {\n if (stdout.trim()) process.stdout.write(stdout);\n if (stderr.trim()) process.stderr.write(stderr);\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Publish failed with exit code ${exitCode}`,\n };\n }\n\n if (stdout.trim()) process.stdout.write(stdout);\n if (stderr.trim()) process.stderr.write(stderr);\n\n const publishedUrl = extractPublishedUrl(`${stdout}\\n${stderr}`);\n if (publishedUrl) {\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: {\n ...(deps.bosConfig.plugins ?? {}),\n [input.key]: {\n ...(deps.bosConfig.plugins?.[input.key] ?? {}),\n production: publishedUrl,\n },\n },\n };\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await refreshApiContractBridge(deps.configDir);\n }\n\n return {\n status: \"published\" as const,\n key: input.key,\n path: localPath,\n script,\n production: publishedUrl ?? attachment.production,\n };\n },\n ),\n\n dev: builder.dev.handler(async ({ input }: { input: DevOptions }) => {\n const localPackages = detectLocalPackages(\n deps.bosConfig ?? undefined,\n deps.runtimeConfig ?? undefined,\n );\n\n const appConfig = buildAppConfig({\n host: localPackages.includes(\"host\") ? (input.host as string) : \"remote\",\n ui: localPackages.includes(\"ui\") ? (input.ui as string) : \"remote\",\n api: localPackages.includes(\"api\") ? (input.api as string) : \"remote\",\n proxy: input.proxy,\n ssr: input.ssr,\n });\n\n const sharedSync = await syncAndGenerateSharedUi({\n configDir: deps.configDir,\n hostMode: appConfig.host,\n bosConfig: deps.bosConfig ?? undefined,\n });\n if (sharedSync.catalogChanged) {\n await run(\"bun\", [\"install\"], { cwd: deps.configDir });\n }\n if (\n (appConfig.api === \"local\" && !appConfig.proxy) ||\n localPackages.some((pkg) => pkg.startsWith(\"plugin:\"))\n ) {\n await buildEveryPluginQuietly(deps.configDir);\n }\n\n await buildEverythingDevQuietly(deps.configDir);\n\n const refreshed = await loadConfig({ cwd: deps.configDir });\n deps.bosConfig = refreshed?.config ?? deps.bosConfig;\n deps.runtimeConfig = refreshed?.runtime ?? deps.runtimeConfig;\n\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n description: \"No bos.config.json found\",\n processes: [],\n };\n }\n\n if (appConfig.proxy && !resolveProxyUrl(deps.bosConfig)) {\n return {\n status: \"error\" as const,\n description: \"No valid proxy URL configured in bos.config.json\",\n processes: [],\n };\n }\n\n const refreshedLocalPackages = detectLocalPackages(\n deps.bosConfig ?? undefined,\n deps.runtimeConfig ?? undefined,\n );\n const processes = determineProcesses(appConfig, refreshedLocalPackages, deps.runtimeConfig);\n const env = await buildEnvVars(appConfig, deps.bosConfig);\n const hostPort = input.port ?? getHostDevelopmentPort(deps.bosConfig.app.host.development);\n const developmentRuntime = buildRuntimeConfig(deps.bosConfig, {\n uiSource: appConfig.ui,\n apiSource: appConfig.api,\n hostUrl: `http://localhost:${hostPort}`,\n proxy: env.API_PROXY,\n env: \"development\",\n plugins: deps.runtimeConfig?.plugins,\n });\n const runtimeConfig = await prepareDevelopmentRuntimeConfig(developmentRuntime, {\n hostPort,\n ssr: appConfig.ssr,\n });\n\n await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig: runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n });\n\n const orchestrator: AppOrchestrator = {\n packages: processes,\n env,\n description: buildDescription(appConfig),\n appConfig,\n bosConfig: deps.bosConfig,\n runtimeConfig,\n port: parsePort(runtimeConfig.hostUrl),\n interactive: input.interactive,\n };\n\n startApp(orchestrator);\n\n return {\n status: \"started\" as const,\n description: orchestrator.description,\n processes,\n };\n }),\n\n start: builder.start.handler(async ({ input }: { input: StartOptions }) => {\n let remoteConfig: BosConfig | null = null;\n\n if (input.account && input.domain) {\n remoteConfig = await fetchPublishedConfig(input.account, input.domain);\n if (!remoteConfig) {\n return {\n status: \"error\" as const,\n url: \"\",\n };\n }\n }\n\n const config = remoteConfig || deps.bosConfig;\n if (!config) {\n return {\n status: \"error\" as const,\n url: \"\",\n };\n }\n\n const port = input.port ?? getHostDevelopmentPort(config.app.host.development);\n const appConfig: AppConfig = { host: \"remote\", ui: \"remote\", api: \"remote\" };\n const env = await buildEnvVars(appConfig, config);\n const isStaging = input.env === \"staging\";\n const runtimePlugins = remoteConfig\n ? await buildRuntimePluginsForConfig(config, deps.configDir, \"production\")\n : deps.runtimeConfig?.plugins;\n const runtimeConfig = buildRuntimeConfig(config, {\n uiSource: \"remote\",\n apiSource: \"remote\",\n hostUrl: `http://localhost:${port}`,\n env: \"production\",\n plugins: runtimePlugins,\n });\n\n await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig: runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n });\n\n const stagingEnvVars: Record<string, string> = isStaging\n ? { GATEWAY_DOMAIN: config.staging?.domain ?? config.domain ?? \"\" }\n : {};\n\n const orchestrator: AppOrchestrator = {\n packages: [\"host\"],\n env: {\n NODE_ENV: \"production\",\n ...env,\n ...stagingEnvVars,\n },\n description: `${isStaging ? \"Staging\" : \"Production\"} Mode (${config.account})`,\n appConfig,\n bosConfig: config,\n runtimeConfig,\n port,\n interactive: input.interactive,\n noLogs: true,\n };\n\n startApp(orchestrator);\n return {\n status: \"running\" as const,\n url: `http://localhost:${port}`,\n };\n }),\n\n build: builder.build.handler(async ({ input }: { input: BuildOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\n\n const targets = selectWorkspaceTargets(input.packages, deps.bosConfig);\n if (targets.length === 0) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\n\n const runtimeConfig = buildRuntimeConfig(deps.bosConfig, {\n uiSource: deps.bosConfig.app.ui?.development ? \"local\" : \"remote\",\n apiSource: deps.bosConfig.app.api?.development ? \"local\" : \"remote\",\n hostUrl: resolveDevelopmentHostUrl(deps.bosConfig.app.host.development),\n env: \"development\",\n plugins: deps.runtimeConfig?.plugins,\n });\n\n await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n });\n\n const { built, skipped } = await buildWorkspaceTargets({\n configDir: deps.configDir,\n bosConfig: deps.bosConfig,\n runtimeConfig: runtimeConfig,\n targets,\n deploy: input.deploy,\n });\n\n if (built.length === 0) {\n return {\n status: \"error\" as const,\n built: [],\n skipped,\n };\n }\n\n return {\n status: \"success\" as const,\n built,\n skipped,\n deployed: input.deploy,\n };\n }),\n\n publish: builder.publish.handler(async ({ input }: { input: PublishOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n registryUrl: \"\",\n error: \"No bos.config.json found\",\n };\n }\n\n const account = deps.bosConfig.account;\n const gateway = deps.bosConfig.domain;\n if (!gateway) {\n return {\n status: \"error\" as const,\n registryUrl: \"\",\n error: \"bos.config.json must define domain to publish\",\n };\n }\n\n const network = input.network ?? getNetworkIdForAccount(account);\n const bosUrl = `bos://${account}/${gateway}`;\n const registryUrl = buildRegistryConfigUrlForNetwork(network, account, gateway);\n const targets = selectWorkspaceTargets(input.packages, deps.bosConfig);\n\n let publishConfig = deps.bosConfig;\n let built: string[] | undefined;\n let skipped: string[] | undefined;\n\n if (input.dryRun) {\n return {\n status: \"dry-run\" as const,\n registryUrl,\n built,\n skipped,\n };\n }\n\n if (input.deploy) {\n const result = await buildWorkspaceTargets({\n configDir: deps.configDir,\n bosConfig: deps.bosConfig,\n runtimeConfig: deps.runtimeConfig,\n targets,\n deploy: true,\n });\n built = result.built;\n skipped = result.skipped;\n\n const refreshed = await loadConfig({ cwd: deps.configDir });\n if (refreshed?.config) {\n deps.bosConfig = refreshed.config;\n deps.runtimeConfig = refreshed.runtime;\n publishConfig = refreshed.config;\n }\n }\n\n const payload = JSON.stringify({\n [`apps/${account}/${gateway}/bos.config.json`]: JSON.stringify(publishConfig),\n });\n const argsBase64 = Buffer.from(payload).toString(\"base64\");\n const privateKey =\n input.privateKey || process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;\n\n try {\n await Effect.runPromise(ensureNearCli);\n let txHash: string | undefined;\n\n try {\n const tx = await Effect.runPromise(\n executeTransaction({\n account,\n contract: getRegistryNamespaceForNetwork(network),\n method: \"__fastdata_kv\",\n argsBase64,\n network,\n privateKey,\n gas: \"300Tgas\",\n deposit: \"0NEAR\",\n }),\n );\n txHash = tx.txHash;\n } catch (error) {\n txHash = extractTransactionHash(error);\n\n if (!txHash) {\n throw error;\n }\n\n try {\n const verifiedConfig = await fetchBosConfigFromFastKv<BosConfig>(bosUrl);\n if (JSON.stringify(verifiedConfig) !== JSON.stringify(publishConfig)) {\n throw error;\n }\n } catch {\n // Config may not exist yet on first publish or propagation delay;\n // a valid txHash is sufficient proof the transaction was submitted.\n }\n }\n\n return {\n status: \"published\" as const,\n registryUrl,\n txHash,\n built,\n skipped,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n registryUrl,\n error: error instanceof Error ? error.message : \"Unknown error\",\n built,\n skipped,\n };\n }\n }),\n\n keyPublish: builder.keyPublish.handler(async ({ input }: { input: KeyPublishOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n account: \"\",\n network: \"mainnet\" as const,\n contract: \"\",\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n error: \"No bos.config.json found\",\n };\n }\n\n const account = deps.bosConfig.account;\n const network = getNetworkIdForAccount(account);\n const contract = getRegistryNamespaceForAccount(account);\n try {\n await Effect.runPromise(ensureNearCli);\n const keyPair = await addFunctionCallAccessKey({\n account,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n network,\n });\n\n return {\n status: \"published\" as const,\n account,\n network,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n publicKey: keyPair.publicKey,\n privateKey: keyPair.privateKey,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n account,\n network,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n init: builder.init.handler(async ({ input }: { input: InitOptions }) => {\n try {\n let extendsAccount = input.extendsAccount;\n let extendsGateway = input.extendsGateway;\n let directory = input.directory;\n let account = input.account;\n let domain = input.domain;\n let withHost = input.withHost;\n\n if (!domain) {\n if (input.noInteractive) {\n return {\n status: \"error\" as const,\n directory: \"\",\n extendsAccount: extendsAccount ?? \"\",\n extendsGateway: extendsGateway ?? \"\",\n account: input.account,\n domain: input.domain,\n extends:\n extendsAccount && extendsGateway ? `bos://${extendsAccount}/${extendsGateway}` : \"\",\n filesCopied: 0,\n error:\n \"domain is required (use --no-interactive to skip prompts and provide it as a flag)\",\n };\n }\n\n const prompted = await promptInitOptions({\n extendsAccount,\n extendsGateway,\n directory,\n account,\n domain,\n withHost,\n });\n extendsAccount = prompted.extendsAccount;\n extendsGateway = prompted.extendsGateway;\n directory = prompted.directory;\n account = prompted.account;\n domain = prompted.domain;\n withHost = prompted.withHost;\n }\n\n extendsAccount = extendsAccount || \"dev.everything.near\";\n extendsGateway = extendsGateway || \"everything.dev\";\n directory = directory || (domain ? domain.split(\".\")[0] : extendsGateway);\n\n try {\n await fetchParentConfig(extendsAccount, extendsGateway);\n } catch {\n return {\n status: \"error\" as const,\n directory,\n extendsAccount,\n extendsGateway,\n account,\n domain,\n extends: `bos://${extendsAccount}/${extendsGateway}`,\n filesCopied: 0,\n error: `No config found at bos://${extendsAccount}/${extendsGateway} — are you sure this is the right parent?`,\n };\n }\n\n const { sourceDir, cleanup } = await resolveSourceDir({\n extendsAccount,\n extendsGateway,\n source: input.source,\n });\n\n try {\n const patterns = await readTemplatekeep(sourceDir);\n if (patterns.length === 0) {\n return {\n status: \"error\" as const,\n directory,\n extendsAccount,\n extendsGateway,\n account,\n domain,\n extends: `bos://${extendsAccount}/${extendsGateway}`,\n filesCopied: 0,\n error: \"No .templatekeep found in template source\",\n };\n }\n\n const filesCopied = await copyFilteredFiles(sourceDir, directory, patterns, {\n withHost,\n });\n\n await personalizeConfig(directory, {\n extendsAccount,\n extendsGateway,\n account: account || extendsAccount,\n domain: domain || extendsGateway,\n workspaceOpts: { sourceDir },\n });\n\n await writeInitSnapshot(directory, extendsAccount, extendsGateway, sourceDir, patterns, {\n withHost,\n });\n\n if (!input.noInstall) {\n await runBunInstall(directory);\n }\n\n return {\n status: \"initialized\" as const,\n directory: resolve(directory),\n extendsAccount,\n extendsGateway,\n account,\n domain,\n extends: `bos://${extendsAccount}/${extendsGateway}`,\n filesCopied,\n };\n } finally {\n await cleanup();\n }\n } catch (error) {\n return {\n status: \"error\" as const,\n directory: input.directory ?? \"\",\n extendsAccount: input.extendsAccount ?? \"\",\n extendsGateway: input.extendsGateway ?? \"\",\n account: input.account,\n domain: input.domain,\n extends:\n input.extendsAccount && input.extendsGateway\n ? `bos://${input.extendsAccount}/${input.extendsGateway}`\n : \"\",\n filesCopied: 0,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n sync: builder.sync.handler(async ({ input }: { input: SyncOptions }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n updated: [],\n skipped: [],\n added: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n return await syncTemplate(projectDir, input);\n } catch (error) {\n return {\n status: \"error\" as const,\n updated: [],\n skipped: [],\n added: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n upgrade: builder.upgrade.handler(async ({ input }: { input: UpgradeOptions }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n packages: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n return await upgradeTemplate(projectDir, input);\n } catch (error) {\n return {\n status: \"error\" as const,\n packages: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n status: builder.status.handler(async () => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n return await getStatus(projectDir);\n } catch (error) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n }),\n});\n\nfunction extractTransactionHash(error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const match =\n message.match(/Transaction ID:\\s*([A-Za-z0-9]+)/i) ||\n message.match(/([A-HJ-NP-Za-km-z1-9]{43,44})/);\n\n return match?.[1];\n}\n"],"mappings":"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"}
package/dist/types.d.cts CHANGED
@@ -154,8 +154,8 @@ declare const BosConfigSchema: z.ZodObject<{
154
154
  type BosConfig = z.infer<typeof BosConfigSchema>;
155
155
  declare const RuntimeConfigSchema: z.ZodObject<{
156
156
  env: z.ZodEnum<{
157
- development: "development";
158
157
  production: "production";
158
+ development: "development";
159
159
  }>;
160
160
  account: z.ZodString;
161
161
  domain: z.ZodOptional<z.ZodString>;
@@ -224,8 +224,8 @@ declare const RuntimeConfigSchema: z.ZodObject<{
224
224
  type RuntimeConfig = z.infer<typeof RuntimeConfigSchema>;
225
225
  declare const ClientRuntimeConfigSchema: z.ZodObject<{
226
226
  env: z.ZodEnum<{
227
- development: "development";
228
227
  production: "production";
228
+ development: "development";
229
229
  }>;
230
230
  account: z.ZodString;
231
231
  networkId: z.ZodEnum<{
package/dist/types.d.mts CHANGED
@@ -154,8 +154,8 @@ declare const BosConfigSchema: z.ZodObject<{
154
154
  type BosConfig = z.infer<typeof BosConfigSchema>;
155
155
  declare const RuntimeConfigSchema: z.ZodObject<{
156
156
  env: z.ZodEnum<{
157
- development: "development";
158
157
  production: "production";
158
+ development: "development";
159
159
  }>;
160
160
  account: z.ZodString;
161
161
  domain: z.ZodOptional<z.ZodString>;
@@ -224,8 +224,8 @@ declare const RuntimeConfigSchema: z.ZodObject<{
224
224
  type RuntimeConfig = z.infer<typeof RuntimeConfigSchema>;
225
225
  declare const ClientRuntimeConfigSchema: z.ZodObject<{
226
226
  env: z.ZodEnum<{
227
- development: "development";
228
227
  production: "production";
228
+ development: "development";
229
229
  }>;
230
230
  account: z.ZodString;
231
231
  networkId: z.ZodEnum<{
@@ -11,6 +11,7 @@ const colors = {
11
11
  magenta: chalk.default.hex("#ff00ff"),
12
12
  green: chalk.default.hex("#00ff41"),
13
13
  blue: chalk.default.hex("#0080ff"),
14
+ yellow: chalk.default.hex("#ffcc00"),
14
15
  white: chalk.default.hex("#f0f0f0"),
15
16
  gray: chalk.default.hex("#555555"),
16
17
  dim: chalk.default.dim,
@@ -1 +1 @@
1
- {"version":3,"file":"theme.cjs","names":[],"sources":["../../src/utils/theme.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport gradient from \"gradient-string\";\n\nexport const gradients: Record<string, (text: string) => string> = {\n cyber: gradient([\"#00ffff\", \"#ff00ff\"]),\n};\n\nexport const colors = {\n cyan: chalk.hex(\"#00ffff\"),\n magenta: chalk.hex(\"#ff00ff\"),\n green: chalk.hex(\"#00ff41\"),\n blue: chalk.hex(\"#0080ff\"),\n white: chalk.hex(\"#f0f0f0\"),\n gray: chalk.hex(\"#555555\"),\n dim: chalk.dim,\n error: chalk.hex(\"#ff3366\"),\n};\n\nexport const icons = {\n scan: \"○\",\n run: \"▶\",\n ok: \"✓\",\n err: \"✗\",\n pending: \"○\",\n arrow: \"→\",\n dot: \"·\",\n app: \"◉\",\n config: \"⚙\",\n};\n\nexport const frames = {\n top: (width: number) => `┌${\"─\".repeat(width - 2)}┐`,\n bottom: (width: number) => `└${\"─\".repeat(width - 2)}┘`,\n};\n\nexport function divider(width = 48): string {\n return colors.dim(\"─\".repeat(width));\n}\n"],"mappings":";;;;;;;AAGA,MAAa,YAAsD,EACjE,oCAAgB,CAAC,WAAW,UAAU,CAAC,EACxC;AAED,MAAa,SAAS;CACpB,MAAM,cAAM,IAAI,UAAU;CAC1B,SAAS,cAAM,IAAI,UAAU;CAC7B,OAAO,cAAM,IAAI,UAAU;CAC3B,MAAM,cAAM,IAAI,UAAU;CAC1B,OAAO,cAAM,IAAI,UAAU;CAC3B,MAAM,cAAM,IAAI,UAAU;CAC1B,KAAK,cAAM;CACX,OAAO,cAAM,IAAI,UAAU;CAC5B;AAED,MAAa,QAAQ;CACnB,MAAM;CACN,KAAK;CACL,IAAI;CACJ,KAAK;CACL,SAAS;CACT,OAAO;CACP,KAAK;CACL,KAAK;CACL,QAAQ;CACT;AAED,MAAa,SAAS;CACpB,MAAM,UAAkB,IAAI,IAAI,OAAO,QAAQ,EAAE,CAAC;CAClD,SAAS,UAAkB,IAAI,IAAI,OAAO,QAAQ,EAAE,CAAC;CACtD;AAED,SAAgB,QAAQ,QAAQ,IAAY;AAC1C,QAAO,OAAO,IAAI,IAAI,OAAO,MAAM,CAAC"}
1
+ {"version":3,"file":"theme.cjs","names":[],"sources":["../../src/utils/theme.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport gradient from \"gradient-string\";\n\nexport const gradients: Record<string, (text: string) => string> = {\n cyber: gradient([\"#00ffff\", \"#ff00ff\"]),\n};\n\nexport const colors = {\n cyan: chalk.hex(\"#00ffff\"),\n magenta: chalk.hex(\"#ff00ff\"),\n green: chalk.hex(\"#00ff41\"),\n blue: chalk.hex(\"#0080ff\"),\n yellow: chalk.hex(\"#ffcc00\"),\n white: chalk.hex(\"#f0f0f0\"),\n gray: chalk.hex(\"#555555\"),\n dim: chalk.dim,\n error: chalk.hex(\"#ff3366\"),\n};\n\nexport const icons = {\n scan: \"○\",\n run: \"▶\",\n ok: \"✓\",\n err: \"✗\",\n pending: \"○\",\n arrow: \"→\",\n dot: \"·\",\n app: \"◉\",\n config: \"⚙\",\n};\n\nexport const frames = {\n top: (width: number) => `┌${\"─\".repeat(width - 2)}┐`,\n bottom: (width: number) => `└${\"─\".repeat(width - 2)}┘`,\n};\n\nexport function divider(width = 48): string {\n return colors.dim(\"─\".repeat(width));\n}\n"],"mappings":";;;;;;;AAGA,MAAa,YAAsD,EACjE,oCAAgB,CAAC,WAAW,UAAU,CAAC,EACxC;AAED,MAAa,SAAS;CACpB,MAAM,cAAM,IAAI,UAAU;CAC1B,SAAS,cAAM,IAAI,UAAU;CAC7B,OAAO,cAAM,IAAI,UAAU;CAC3B,MAAM,cAAM,IAAI,UAAU;CAC1B,QAAQ,cAAM,IAAI,UAAU;CAC5B,OAAO,cAAM,IAAI,UAAU;CAC3B,MAAM,cAAM,IAAI,UAAU;CAC1B,KAAK,cAAM;CACX,OAAO,cAAM,IAAI,UAAU;CAC5B;AAED,MAAa,QAAQ;CACnB,MAAM;CACN,KAAK;CACL,IAAI;CACJ,KAAK;CACL,SAAS;CACT,OAAO;CACP,KAAK;CACL,KAAK;CACL,QAAQ;CACT;AAED,MAAa,SAAS;CACpB,MAAM,UAAkB,IAAI,IAAI,OAAO,QAAQ,EAAE,CAAC;CAClD,SAAS,UAAkB,IAAI,IAAI,OAAO,QAAQ,EAAE,CAAC;CACtD;AAED,SAAgB,QAAQ,QAAQ,IAAY;AAC1C,QAAO,OAAO,IAAI,IAAI,OAAO,MAAM,CAAC"}
@@ -8,6 +8,7 @@ const colors = {
8
8
  magenta: chalk.hex("#ff00ff"),
9
9
  green: chalk.hex("#00ff41"),
10
10
  blue: chalk.hex("#0080ff"),
11
+ yellow: chalk.hex("#ffcc00"),
11
12
  white: chalk.hex("#f0f0f0"),
12
13
  gray: chalk.hex("#555555"),
13
14
  dim: chalk.dim,
@@ -1 +1 @@
1
- {"version":3,"file":"theme.mjs","names":[],"sources":["../../src/utils/theme.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport gradient from \"gradient-string\";\n\nexport const gradients: Record<string, (text: string) => string> = {\n cyber: gradient([\"#00ffff\", \"#ff00ff\"]),\n};\n\nexport const colors = {\n cyan: chalk.hex(\"#00ffff\"),\n magenta: chalk.hex(\"#ff00ff\"),\n green: chalk.hex(\"#00ff41\"),\n blue: chalk.hex(\"#0080ff\"),\n white: chalk.hex(\"#f0f0f0\"),\n gray: chalk.hex(\"#555555\"),\n dim: chalk.dim,\n error: chalk.hex(\"#ff3366\"),\n};\n\nexport const icons = {\n scan: \"○\",\n run: \"▶\",\n ok: \"✓\",\n err: \"✗\",\n pending: \"○\",\n arrow: \"→\",\n dot: \"·\",\n app: \"◉\",\n config: \"⚙\",\n};\n\nexport const frames = {\n top: (width: number) => `┌${\"─\".repeat(width - 2)}┐`,\n bottom: (width: number) => `└${\"─\".repeat(width - 2)}┘`,\n};\n\nexport function divider(width = 48): string {\n return colors.dim(\"─\".repeat(width));\n}\n"],"mappings":";;;;AAGA,MAAa,YAAsD,EACjE,OAAO,SAAS,CAAC,WAAW,UAAU,CAAC,EACxC;AAED,MAAa,SAAS;CACpB,MAAM,MAAM,IAAI,UAAU;CAC1B,SAAS,MAAM,IAAI,UAAU;CAC7B,OAAO,MAAM,IAAI,UAAU;CAC3B,MAAM,MAAM,IAAI,UAAU;CAC1B,OAAO,MAAM,IAAI,UAAU;CAC3B,MAAM,MAAM,IAAI,UAAU;CAC1B,KAAK,MAAM;CACX,OAAO,MAAM,IAAI,UAAU;CAC5B;AAED,MAAa,QAAQ;CACnB,MAAM;CACN,KAAK;CACL,IAAI;CACJ,KAAK;CACL,SAAS;CACT,OAAO;CACP,KAAK;CACL,KAAK;CACL,QAAQ;CACT;AAED,MAAa,SAAS;CACpB,MAAM,UAAkB,IAAI,IAAI,OAAO,QAAQ,EAAE,CAAC;CAClD,SAAS,UAAkB,IAAI,IAAI,OAAO,QAAQ,EAAE,CAAC;CACtD;AAED,SAAgB,QAAQ,QAAQ,IAAY;AAC1C,QAAO,OAAO,IAAI,IAAI,OAAO,MAAM,CAAC"}
1
+ {"version":3,"file":"theme.mjs","names":[],"sources":["../../src/utils/theme.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport gradient from \"gradient-string\";\n\nexport const gradients: Record<string, (text: string) => string> = {\n cyber: gradient([\"#00ffff\", \"#ff00ff\"]),\n};\n\nexport const colors = {\n cyan: chalk.hex(\"#00ffff\"),\n magenta: chalk.hex(\"#ff00ff\"),\n green: chalk.hex(\"#00ff41\"),\n blue: chalk.hex(\"#0080ff\"),\n yellow: chalk.hex(\"#ffcc00\"),\n white: chalk.hex(\"#f0f0f0\"),\n gray: chalk.hex(\"#555555\"),\n dim: chalk.dim,\n error: chalk.hex(\"#ff3366\"),\n};\n\nexport const icons = {\n scan: \"○\",\n run: \"▶\",\n ok: \"✓\",\n err: \"✗\",\n pending: \"○\",\n arrow: \"→\",\n dot: \"·\",\n app: \"◉\",\n config: \"⚙\",\n};\n\nexport const frames = {\n top: (width: number) => `┌${\"─\".repeat(width - 2)}┐`,\n bottom: (width: number) => `└${\"─\".repeat(width - 2)}┘`,\n};\n\nexport function divider(width = 48): string {\n return colors.dim(\"─\".repeat(width));\n}\n"],"mappings":";;;;AAGA,MAAa,YAAsD,EACjE,OAAO,SAAS,CAAC,WAAW,UAAU,CAAC,EACxC;AAED,MAAa,SAAS;CACpB,MAAM,MAAM,IAAI,UAAU;CAC1B,SAAS,MAAM,IAAI,UAAU;CAC7B,OAAO,MAAM,IAAI,UAAU;CAC3B,MAAM,MAAM,IAAI,UAAU;CAC1B,QAAQ,MAAM,IAAI,UAAU;CAC5B,OAAO,MAAM,IAAI,UAAU;CAC3B,MAAM,MAAM,IAAI,UAAU;CAC1B,KAAK,MAAM;CACX,OAAO,MAAM,IAAI,UAAU;CAC5B;AAED,MAAa,QAAQ;CACnB,MAAM;CACN,KAAK;CACL,IAAI;CACJ,KAAK;CACL,SAAS;CACT,OAAO;CACP,KAAK;CACL,KAAK;CACL,QAAQ;CACT;AAED,MAAa,SAAS;CACpB,MAAM,UAAkB,IAAI,IAAI,OAAO,QAAQ,EAAE,CAAC;CAClD,SAAS,UAAkB,IAAI,IAAI,OAAO,QAAQ,EAAE,CAAC;CACtD;AAED,SAAgB,QAAQ,QAAQ,IAAY;AAC1C,QAAO,OAAO,IAAI,IAAI,OAAO,MAAM,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "everything-dev",
3
- "version": "1.3.6",
3
+ "version": "1.4.0",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -153,7 +153,7 @@
153
153
  "hono": "^4.7.11",
154
154
  "ink": "^6.8.0",
155
155
  "tar": "^7.4.3",
156
- "zod": "^3.25.0"
156
+ "zod": "^4.3.6"
157
157
  },
158
158
  "peerDependencies": {
159
159
  "@tanstack/react-query": ">=5.0.0",
@@ -161,7 +161,7 @@
161
161
  "react": ">=19.0.0",
162
162
  "react-dom": ">=19.0.0",
163
163
  "effect": "^3.21.0",
164
- "zod": "^3.25.0"
164
+ "zod": "^4.3.6"
165
165
  },
166
166
  "peerDependenciesMeta": {
167
167
  "@tanstack/react-query": {