@stigmer/cli 3.12.9 → 3.14.0-dev.20260910084630

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 (141) hide show
  1. package/auth/login.d.ts.map +1 -1
  2. package/auth/login.js +30 -5
  3. package/auth/login.js.map +1 -1
  4. package/auth/token.d.ts +10 -5
  5. package/auth/token.d.ts.map +1 -1
  6. package/auth/token.js +30 -21
  7. package/auth/token.js.map +1 -1
  8. package/commands/apikey/index.d.ts.map +1 -1
  9. package/commands/apikey/index.js +11 -5
  10. package/commands/apikey/index.js.map +1 -1
  11. package/commands/auth/index.d.ts.map +1 -1
  12. package/commands/auth/index.js +19 -8
  13. package/commands/auth/index.js.map +1 -1
  14. package/commands/config/backend.d.ts.map +1 -1
  15. package/commands/config/backend.js +134 -12
  16. package/commands/config/backend.js.map +1 -1
  17. package/commands/connect.d.ts.map +1 -1
  18. package/commands/connect.js +6 -3
  19. package/commands/connect.js.map +1 -1
  20. package/commands/share.d.ts.map +1 -1
  21. package/commands/share.js +8 -6
  22. package/commands/share.js.map +1 -1
  23. package/commands/up.d.ts.map +1 -1
  24. package/commands/up.js +22 -6
  25. package/commands/up.js.map +1 -1
  26. package/config/config.d.ts +56 -7
  27. package/config/config.d.ts.map +1 -1
  28. package/config/config.js +115 -16
  29. package/config/config.js.map +1 -1
  30. package/config/index.d.ts +1 -1
  31. package/config/index.d.ts.map +1 -1
  32. package/config/index.js +1 -1
  33. package/config/index.js.map +1 -1
  34. package/config/keys.d.ts +1 -1
  35. package/config/keys.d.ts.map +1 -1
  36. package/config/keys.js +29 -6
  37. package/config/keys.js.map +1 -1
  38. package/config/resolve.d.ts +32 -21
  39. package/config/resolve.d.ts.map +1 -1
  40. package/config/resolve.js +80 -39
  41. package/config/resolve.js.map +1 -1
  42. package/local/constants.d.ts +8 -3
  43. package/local/constants.d.ts.map +1 -1
  44. package/local/constants.js +8 -3
  45. package/local/constants.js.map +1 -1
  46. package/local/daemon/components.d.ts.map +1 -1
  47. package/local/daemon/components.js +4 -2
  48. package/local/daemon/components.js.map +1 -1
  49. package/local/daemon/env.d.ts +16 -3
  50. package/local/daemon/env.d.ts.map +1 -1
  51. package/local/daemon/env.js +16 -3
  52. package/local/daemon/env.js.map +1 -1
  53. package/local/daemon/launch.d.ts.map +1 -1
  54. package/local/daemon/launch.js +5 -4
  55. package/local/daemon/launch.js.map +1 -1
  56. package/local/daemon/process.d.ts.map +1 -1
  57. package/local/daemon/process.js +8 -5
  58. package/local/daemon/process.js.map +1 -1
  59. package/local/runtime/index.d.ts +2 -2
  60. package/local/runtime/index.d.ts.map +1 -1
  61. package/local/runtime/index.js +4 -2
  62. package/local/runtime/index.js.map +1 -1
  63. package/local/runtime/node.d.ts +8 -0
  64. package/local/runtime/node.d.ts.map +1 -1
  65. package/local/runtime/node.js +74 -23
  66. package/local/runtime/node.js.map +1 -1
  67. package/local/runtime/runner.d.ts +2 -1
  68. package/local/runtime/runner.d.ts.map +1 -1
  69. package/local/runtime/runner.js +4 -31
  70. package/local/runtime/runner.js.map +1 -1
  71. package/local/runtime/runtimes-install.d.ts +13 -0
  72. package/local/runtime/runtimes-install.d.ts.map +1 -0
  73. package/local/runtime/runtimes-install.js +60 -0
  74. package/local/runtime/runtimes-install.js.map +1 -0
  75. package/local/runtime/server.d.ts +26 -30
  76. package/local/runtime/server.d.ts.map +1 -1
  77. package/local/runtime/server.js +106 -108
  78. package/local/runtime/server.js.map +1 -1
  79. package/local/seedpack/content.d.ts +3 -3
  80. package/local/seedpack/content.d.ts.map +1 -1
  81. package/local/seedpack/content.js +19 -13
  82. package/local/seedpack/content.js.map +1 -1
  83. package/local/status.d.ts.map +1 -1
  84. package/local/status.js +4 -2
  85. package/local/status.js.map +1 -1
  86. package/local/webconsole/index.d.ts +2 -3
  87. package/local/webconsole/index.d.ts.map +1 -1
  88. package/local/webconsole/index.js +24 -10
  89. package/local/webconsole/index.js.map +1 -1
  90. package/package.json +5 -5
  91. package/resources/connect/connect.d.ts +4 -3
  92. package/resources/connect/connect.d.ts.map +1 -1
  93. package/resources/connect/connect.js +17 -5
  94. package/resources/connect/connect.js.map +1 -1
  95. package/resources/connect/oauth.d.ts +5 -2
  96. package/resources/connect/oauth.d.ts.map +1 -1
  97. package/resources/connect/oauth.js +5 -4
  98. package/resources/connect/oauth.js.map +1 -1
  99. package/src/auth/login.ts +54 -9
  100. package/src/auth/token.test.ts +69 -13
  101. package/src/auth/token.ts +46 -22
  102. package/src/client/client.test.ts +10 -2
  103. package/src/commands/apikey/index.ts +42 -11
  104. package/src/commands/auth/index.ts +52 -14
  105. package/src/commands/config/backend.test.ts +122 -0
  106. package/src/commands/config/backend.ts +195 -14
  107. package/src/commands/connect.test.ts +22 -4
  108. package/src/commands/connect.ts +37 -13
  109. package/src/commands/share.ts +36 -16
  110. package/src/commands/up.ts +24 -6
  111. package/src/config/config.test.ts +62 -6
  112. package/src/config/config.ts +165 -24
  113. package/src/config/index.ts +6 -0
  114. package/src/config/keys.test.ts +27 -4
  115. package/src/config/keys.ts +46 -9
  116. package/src/config/resolve.test.ts +135 -34
  117. package/src/config/resolve.ts +88 -38
  118. package/src/local/constants.ts +8 -4
  119. package/src/local/daemon/components.test.ts +9 -1
  120. package/src/local/daemon/components.ts +4 -2
  121. package/src/local/daemon/daemon.integration.test.ts +1 -1
  122. package/src/local/daemon/env.test.ts +15 -4
  123. package/src/local/daemon/env.ts +33 -5
  124. package/src/local/daemon/launch.ts +5 -4
  125. package/src/local/daemon/process.ts +7 -4
  126. package/src/local/runtime/index.ts +6 -5
  127. package/src/local/runtime/node.ts +99 -23
  128. package/src/local/runtime/runner.ts +5 -36
  129. package/src/local/runtime/runtime.test.ts +58 -14
  130. package/src/local/runtime/runtimes-install.test.ts +56 -0
  131. package/src/local/runtime/runtimes-install.ts +72 -0
  132. package/src/local/runtime/server.test.ts +178 -114
  133. package/src/local/runtime/server.ts +149 -129
  134. package/src/local/seedpack/content.ts +52 -21
  135. package/src/local/status.ts +4 -2
  136. package/src/local/webconsole/index.ts +27 -10
  137. package/src/resources/connect/connect.integration.test.ts +79 -26
  138. package/src/resources/connect/connect.ts +72 -19
  139. package/src/resources/connect/oauth.test.ts +38 -12
  140. package/src/resources/connect/oauth.ts +27 -11
  141. package/src/resources/share.test.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkBpD"}
1
+ {"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwBpD"}
package/commands/share.js CHANGED
@@ -6,11 +6,13 @@
6
6
  // best-effort browser launch after render (mirrors auth login: the URL is
7
7
  // already on screen, so a failed launch costs nothing). Heavy modules are
8
8
  // lazy-imported so `--help` stays fast (DD-001).
9
- import { ensureAuthenticated, resolveConsoleURL, resolveOrganization } from "../config/index.js";
9
+ import { activeBackend, ensureAuthenticated, resolveConsoleURL, resolveOrganization, } from "../config/index.js";
10
10
  import { UsageError } from "../errors/index.js";
11
11
  import { addResultFlags, globalOrg, resultFormat } from "./shared.js";
12
12
  export function registerShare(program) {
13
- const share = program.command("share").description("share resources via a hosted link");
13
+ const share = program
14
+ .command("share")
15
+ .description("share resources via a hosted link");
14
16
  const agent = share
15
17
  .command("agent <ref>")
16
18
  .description("enable sharing for an agent and print its chat link and embed snippet")
@@ -39,8 +41,7 @@ async function runShareAgent(ref, options, command) {
39
41
  const client = connectBackend();
40
42
  ensureAuthenticated(client.config);
41
43
  const org = resolveOrganization(client.config, globalOrg(command));
42
- const backendType = client.config.backend.type;
43
- const appOrigin = resolveConsoleURL(backendType);
44
+ const appOrigin = resolveConsoleURL(client.config);
44
45
  const enabled = options.off !== true;
45
46
  const audience = parseAudience(options.audience);
46
47
  const resetLink = options.resetLink === true;
@@ -54,13 +55,14 @@ async function runShareAgent(ref, options, command) {
54
55
  ...(audience !== undefined ? { audience } : {}),
55
56
  resetLink,
56
57
  appOrigin,
57
- isLocal: backendType === "local",
58
+ isLocal: activeBackend(client.config).entry === undefined,
58
59
  });
59
60
  renderResult(result, format);
60
61
  if (options.open === true && enabled) {
61
62
  // Best-effort: the link is already rendered above, so a launch failure
62
63
  // only needs a nudge, never an error exit (mirrors auth login).
63
- const url = result.sections.find((s) => s.title.endsWith("chat link"))?.items[0];
64
+ const url = result.sections.find((s) => s.title.endsWith("chat link"))
65
+ ?.items[0];
64
66
  if (url !== undefined) {
65
67
  try {
66
68
  const { default: open } = await import("open");
@@ -1 +1 @@
1
- {"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,yEAAyE;AACzE,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,0EAA0E;AAC1E,0EAA0E;AAC1E,iDAAiD;AAGjD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAStE,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;IAExF,MAAM,KAAK,GAAG,KAAK;SAChB,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,uEAAuE,CAAC;SACpF,MAAM,CAAC,OAAO,EAAE,sDAAsD,CAAC;SACvE,MAAM,CACL,uBAAuB,EACvB,iIAAiI,CAClI;SACA,MAAM,CACL,cAAc,EACd,kFAAkF,CACnF;SACA,MAAM,CAAC,QAAQ,EAAE,oCAAoC,CAAC;SACtD,MAAM,CAAC,CAAC,GAAW,EAAE,OAAwB,EAAE,OAAgB,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7G,cAAc,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,0EAA0E;AAC1E,SAAS,aAAa,CAAC,KAAyB;IAC9C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,IAAI,UAAU,CAAC,uBAAuB,KAAK,kCAAkC,CAAC,CAAC;AACvF,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,OAAwB,EAAE,OAAgB;IAClF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAErC,MAAM,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/E,MAAM,CAAC,eAAe,CAAC;QACvB,MAAM,CAAC,uBAAuB,CAAC;QAC/B,MAAM,CAAC,6BAA6B,CAAC;KACtC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAEnE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/C,MAAM,SAAS,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC;IACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC;IAC7C,IAAI,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,UAAU,CAClB,gDAAgD;YAC9C,kEAAkE;YAClE,gDAAgD,CACnD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE;QACxD,OAAO;QACP,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,SAAS;QACT,SAAS;QACT,OAAO,EAAE,WAAW,KAAK,OAAO;KACjC,CAAC,CAAC;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC;QACrC,uEAAuE;QACvE,gEAAgE;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC/C,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoBjD"}
1
+ {"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiBjD"}
package/commands/up.js CHANGED
@@ -5,24 +5,27 @@
5
5
  // Thin handler: parse flags, delegate to the local daemon launcher, render the
6
6
  // outcome. The launcher (and the heavy resolvers it pulls in) load lazily so
7
7
  // `--help` stays fast (DD-001).
8
+ import { homedir } from "node:os";
9
+ import { join } from "node:path";
8
10
  import { CommandResult, renderResult } from "../output/index.js";
9
- import { SERVER_PORT } from "../local/constants.js";
11
+ import { HEALTH_STATE_FILE, SERVER_PORT } from "../local/constants.js";
10
12
  import { addResultFlags, resultFormat } from "./shared.js";
13
+ // The server serves the web console from its unified port (DD-012); the
14
+ // flag suppresses probing/reporting it, not the serving itself (one
15
+ // process, one origin — there is no separate console to not-start).
16
+ const NO_WEB_HELP = "don't report the web console URL";
11
17
  export function registerUp(program) {
12
18
  const up = program
13
19
  .command("up")
14
20
  .description("start the local Stigmer stack (server, runner, Temporal)")
15
21
  .option("--server-only", "start only the control plane (no runners)")
16
- // Accepted for compatibility with the Go CLI; this CLI does not bundle a
17
- // local web console, so the stack is headless either way (use the cloud
18
- // console at app.stigmer.ai for a UI).
19
- .option("--no-web", "no-op: this CLI does not serve a local web console")
22
+ .option("--no-web", NO_WEB_HELP)
20
23
  .action((options) => runUp({ serverOnly: options.serverOnly === true, noWeb: options.web === false }, options));
21
24
  addResultFlags(up);
22
25
  const server = up
23
26
  .command("server")
24
27
  .description("start only the control plane (no runners)")
25
- .option("--no-web", "no-op: this CLI does not serve a local web console")
28
+ .option("--no-web", NO_WEB_HELP)
26
29
  .action((options) => runUp({ serverOnly: true, noWeb: options.web === false }, options));
27
30
  addResultFlags(server);
28
31
  }
@@ -33,7 +36,20 @@ async function runUp(opts, flags) {
33
36
  const result = CommandResult.success(opts.serverOnly ? "Stigmer control plane is up" : "Stigmer local stack is up");
34
37
  const section = result.addSection("Endpoints");
35
38
  section.field("server", `http://localhost:${SERVER_PORT}`);
39
+ if (await consoleReported()) {
40
+ // Same origin as the API: the server serves the console (DD-012). Only
41
+ // printed when the daemon's probe found a bundled export — a dev-tree
42
+ // server without one must not advertise a dead URL.
43
+ section.field("console", `http://localhost:${SERVER_PORT}`);
44
+ }
36
45
  result.hint("Check status with: stigmer status").hint("Stop it with: stigmer down");
37
46
  renderResult(result, resultFormat(flags));
38
47
  }
48
+ /** Whether the daemon recorded the web console as running (its own probe). */
49
+ async function consoleReported() {
50
+ const { dataDir } = await import("../local/paths.js");
51
+ const { loadHealthState } = await import("../local/state/health-state.js");
52
+ const health = loadHealthState(join(dataDir(homedir()), HEALTH_STATE_FILE));
53
+ return health?.components["web-console"]?.state === "running";
54
+ }
39
55
  //# sourceMappingURL=up.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"up.js","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2EAA2E;AAC3E,wDAAwD;AACxD,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,gCAAgC;AAGhC,OAAO,EAAE,aAAa,EAAoB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAO3D,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,MAAM,EAAE,GAAG,OAAO;SACf,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,eAAe,EAAE,2CAA2C,CAAC;QACrE,yEAAyE;QACzE,wEAAwE;QACxE,uCAAuC;SACtC,MAAM,CAAC,UAAU,EAAE,oDAAoD,CAAC;SACxE,MAAM,CAAC,CAAC,OAAgB,EAAE,EAAE,CAC3B,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,KAAK,EAAE,EAAE,OAAO,CAAC,CAC1F,CAAC;IACJ,cAAc,CAAC,EAAE,CAAC,CAAC;IAEnB,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,UAAU,EAAE,oDAAoD,CAAC;SACxE,MAAM,CAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACpG,cAAc,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,IAA6C,EAAE,KAAkB;IACpF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACtF,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACzD,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IAEf,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;IACpH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,oBAAoB,WAAW,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACvF,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"up.js","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,34 @@
1
+ /** The legacy binary switch, still written as a mirror for older readers. */
1
2
  export type BackendType = "local" | "cloud";
2
- /** Cloud backend connection. Property names are snake_case to serialize to the
3
- * exact YAML keys the Go CLI reads/writes. */
3
+ /** The two named-backend families: Stigmer Cloud, or any OSS server. */
4
+ export type NamedBackendType = "cloud" | "selfhost";
5
+ /** The reserved name of the managed local daemon backend. */
6
+ export declare const LOCAL_BACKEND_NAME = "local";
7
+ /** The reserved name `stigmer auth login` targets from local mode. */
8
+ export declare const CLOUD_BACKEND_NAME = "cloud";
9
+ /**
10
+ * One named backend: endpoint + its own credentials. Property names are
11
+ * snake_case to keep the YAML in the file's established dialect.
12
+ *
13
+ * Credential lanes by type:
14
+ * - cloud: the OAuth token set (token / refresh_token / token_expiry),
15
+ * written by `stigmer auth login` and rotated by the token provider.
16
+ * - selfhost: `api_key` — a server-minted `stk_` token
17
+ * (`stigmer apikey create`). Browser login against self-hosted
18
+ * issuers is deliberately not modeled here; the API token is the
19
+ * self-host credential story.
20
+ */
21
+ export interface NamedBackendConfig {
22
+ type: NamedBackendType;
23
+ endpoint?: string;
24
+ token?: string;
25
+ org_id?: string;
26
+ env_id?: string;
27
+ refresh_token?: string;
28
+ token_expiry?: string;
29
+ api_key?: string;
30
+ }
31
+ /** Cloud backend connection — the LEGACY single-slot shape (pre-O3 files). */
4
32
  export interface CloudBackendConfig {
5
33
  endpoint?: string;
6
34
  token?: string;
@@ -11,9 +39,10 @@ export interface CloudBackendConfig {
11
39
  }
12
40
  export interface BackendConfig {
13
41
  type: BackendType;
14
- /** Local daemon/LLM/Temporal settings — opaque to the TS CLI in Wave 1,
42
+ /** Local daemon/LLM/Temporal settings — opaque to this CLI,
15
43
  * preserved verbatim across save so coexisting tools keep their config. */
16
44
  local?: unknown;
45
+ /** Legacy cloud slot — read for migration, never written back. */
17
46
  cloud?: CloudBackendConfig;
18
47
  }
19
48
  export interface ContextConfig {
@@ -21,9 +50,11 @@ export interface ContextConfig {
21
50
  }
22
51
  export interface Config {
23
52
  backend: BackendConfig;
53
+ backends?: Record<string, NamedBackendConfig>;
54
+ current_backend?: string;
24
55
  context?: ContextConfig;
25
56
  }
26
- /** The default config: local backend, no daemon settings fabricated. */
57
+ /** The default config: the local backend, no daemon settings fabricated. */
27
58
  export declare function getDefault(): Config;
28
59
  /**
29
60
  * Load the config from disk. In standalone mode the file is ignored and the
@@ -31,9 +62,27 @@ export declare function getDefault(): Config;
31
62
  * user config (matches the Go CLI). A missing file also yields the default.
32
63
  */
33
64
  export declare function load(path?: string): Config;
34
- /** Persist the config to disk (0600 file in a 0755 directory), with the
35
- * documentation header the Go CLI writes. */
65
+ /**
66
+ * Persist the config to disk (0600 file in a 0755 directory), with the
67
+ * documentation header the file has always carried. Writes the NAMED shape
68
+ * (the one-time migration): the legacy cloud slot is dropped — its content
69
+ * lives in `backends.cloud` — and `backend.type` is written as the
70
+ * local-vs-not mirror. A pristine local config (no named backends) writes
71
+ * exactly the pre-O3 bytes.
72
+ */
36
73
  export declare function save(config: Config, path?: string): void;
37
- /** True when the cloud backend is selected. */
74
+ /** The active backend's name (normalize always stamps current_backend). */
75
+ export declare function activeBackendName(config: Config): string;
76
+ /**
77
+ * The active backend: the reserved local daemon (entry undefined) or a
78
+ * named entry. A current_backend naming a missing entry is a loud
79
+ * configuration error, never a silent fallback — the config was edited by
80
+ * hand or a remove left it dangling.
81
+ */
82
+ export declare function activeBackend(config: Config): {
83
+ name: string;
84
+ entry: NamedBackendConfig | undefined;
85
+ };
86
+ /** True when the active backend is Stigmer Cloud. */
38
87
  export declare function isCloudMode(config: Config): boolean;
39
88
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5C;8CAC8C;AAC9C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAMhB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB;+EAC2E;IAC3E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAQD,wEAAwE;AACxE,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,IAAI,GAAE,MAAqB,GAAG,MAAM,CAexD;AAED;6CAC6C;AAC7C,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAqB,GAAG,IAAI,CAItE;AAED,+CAA+C;AAC/C,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AA2BA,6EAA6E;AAC7E,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5C,wEAAwE;AACxE,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,UAAU,CAAC;AAEpD,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB;+EAC2E;IAC3E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kEAAkE;IAClE,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAQD,4EAA4E;AAC5E,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,IAAI,GAAE,MAAqB,GAAG,MAAM,CAexD;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAqB,GAAG,IAAI,CAItE;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACvC,CAYA;AAED,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnD"}
package/config/config.js CHANGED
@@ -1,24 +1,44 @@
1
1
  // CLI configuration model and persistence (~/.stigmer/config.yaml).
2
2
  //
3
- // Parity + coexistence: the file format matches the Go CLI exactly (snake_case
4
- // keys, 0600 perms, doc-link header) so a single config works whether invoked
5
- // through the Go or TS CLI during the migration. Crucially, the local-backend
6
- // section (daemon/LLM/Temporal settings owned by later waves and the Go CLI) is
7
- // carried through opaquely on save, so the TS CLI never drops fields it does
8
- // not yet model.
3
+ // Named backends (O3, 20260827.06 — the parent program's recorded revisit:
4
+ // "a named backend without a credential story is half a feature"): the
5
+ // `backends` map + `current_backend` are the kubectl-context model — each
6
+ // entry carries its own endpoint AND its own credentials, so switching
7
+ // between Stigmer Cloud and a self-hosted server never clobbers either
8
+ // side's login state. Two names are reserved: "local" (the managed daemon,
9
+ // never stored in the map — its endpoint and no-auth posture are fixed)
10
+ // and "cloud" (where `stigmer auth login` lands by default).
11
+ //
12
+ // Legacy shape + migration: pre-O3 files carried one `backend.cloud` slot
13
+ // selected by `backend.type`. Loading migrates that shape in memory
14
+ // (cloud section → `backends.cloud`, type → `current_backend`); the first
15
+ // save writes the new shape — the ruled one-time write migration. The
16
+ // legacy `backend.type` is still WRITTEN (mirroring local vs non-local)
17
+ // so older readers keep a coherent view, and the opaque `backend.local`
18
+ // section (daemon/LLM/Temporal settings owned by other tools) is
19
+ // preserved verbatim, exactly as before.
9
20
  import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
10
21
  import { dirname } from "node:path";
11
22
  import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
23
+ import { UsageError } from "../errors/index.js";
12
24
  import { isStandalone } from "../runtime.js";
13
25
  import { configPath } from "./paths.js";
26
+ /** The reserved name of the managed local daemon backend. */
27
+ export const LOCAL_BACKEND_NAME = "local";
28
+ /** The reserved name `stigmer auth login` targets from local mode. */
29
+ export const CLOUD_BACKEND_NAME = "cloud";
14
30
  const SAVE_HEADER = `# Stigmer CLI Configuration
15
31
  # For configuration options and examples, see:
16
32
  # https://github.com/stigmer/stigmer/blob/main/docs/cli/configuration.md
17
33
 
18
34
  `;
19
- /** The default config: local backend, no daemon settings fabricated. */
35
+ /** The default config: the local backend, no daemon settings fabricated. */
20
36
  export function getDefault() {
21
- return { backend: { type: "local" } };
37
+ return {
38
+ backend: { type: "local" },
39
+ backends: {},
40
+ current_backend: LOCAL_BACKEND_NAME,
41
+ };
22
42
  }
23
43
  /**
24
44
  * Load the config from disk. In standalone mode the file is ignored and the
@@ -41,27 +61,106 @@ export function load(path = configPath()) {
41
61
  const parsed = parseYaml(raw);
42
62
  return normalize(parsed);
43
63
  }
44
- /** Persist the config to disk (0600 file in a 0755 directory), with the
45
- * documentation header the Go CLI writes. */
64
+ /**
65
+ * Persist the config to disk (0600 file in a 0755 directory), with the
66
+ * documentation header the file has always carried. Writes the NAMED shape
67
+ * (the one-time migration): the legacy cloud slot is dropped — its content
68
+ * lives in `backends.cloud` — and `backend.type` is written as the
69
+ * local-vs-not mirror. A pristine local config (no named backends) writes
70
+ * exactly the pre-O3 bytes.
71
+ */
46
72
  export function save(config, path = configPath()) {
47
73
  mkdirSync(dirname(path), { recursive: true, mode: 0o755 });
48
- const body = stringifyYaml(stripUndefined(config));
74
+ const body = stringifyYaml(stripUndefined(serializable(config)));
49
75
  writeFileSync(path, SAVE_HEADER + body, { mode: 0o600 });
50
76
  }
51
- /** True when the cloud backend is selected. */
77
+ /** The active backend's name (normalize always stamps current_backend). */
78
+ export function activeBackendName(config) {
79
+ const name = config.current_backend ?? "";
80
+ return name === "" ? LOCAL_BACKEND_NAME : name;
81
+ }
82
+ /**
83
+ * The active backend: the reserved local daemon (entry undefined) or a
84
+ * named entry. A current_backend naming a missing entry is a loud
85
+ * configuration error, never a silent fallback — the config was edited by
86
+ * hand or a remove left it dangling.
87
+ */
88
+ export function activeBackend(config) {
89
+ const name = activeBackendName(config);
90
+ if (name === LOCAL_BACKEND_NAME) {
91
+ return { name, entry: undefined };
92
+ }
93
+ const entry = config.backends?.[name];
94
+ if (entry === undefined) {
95
+ throw new UsageError(`current backend "${name}" does not exist — run 'stigmer config backend list' and 'stigmer config backend use <name>'`);
96
+ }
97
+ return { name, entry };
98
+ }
99
+ /** True when the active backend is Stigmer Cloud. */
52
100
  export function isCloudMode(config) {
53
- return config.backend.type === "cloud";
101
+ return activeBackend(config).entry?.type === "cloud";
54
102
  }
55
103
  function normalize(parsed) {
56
- if (parsed === null || parsed.backend === undefined) {
104
+ if (parsed === null || typeof parsed !== "object") {
57
105
  return getDefault();
58
106
  }
59
- const type = parsed.backend.type === "cloud" ? "cloud" : "local";
107
+ const legacy = parsed.backend;
108
+ const backends = normalizeBackends(parsed.backends);
109
+ // Migration: a pre-O3 cloud slot becomes the reserved "cloud" entry —
110
+ // unless a named shape already exists (then the named shape wins and the
111
+ // stale legacy slot is ignored).
112
+ if (Object.keys(backends).length === 0 && legacy?.cloud !== undefined) {
113
+ backends[CLOUD_BACKEND_NAME] = { type: "cloud", ...legacy.cloud };
114
+ }
115
+ let current = typeof parsed.current_backend === "string" ? parsed.current_backend : "";
116
+ if (current === "") {
117
+ current =
118
+ legacy?.type === "cloud" && backends[CLOUD_BACKEND_NAME] !== undefined
119
+ ? CLOUD_BACKEND_NAME
120
+ : LOCAL_BACKEND_NAME;
121
+ }
60
122
  return {
61
- backend: { type, local: parsed.backend.local, cloud: parsed.backend.cloud },
123
+ backend: {
124
+ type: legacy?.type === "cloud" ? "cloud" : "local",
125
+ local: legacy?.local,
126
+ },
127
+ backends,
128
+ current_backend: current,
62
129
  context: parsed.context,
63
130
  };
64
131
  }
132
+ function normalizeBackends(parsed) {
133
+ const backends = {};
134
+ if (parsed === undefined || typeof parsed !== "object") {
135
+ return backends;
136
+ }
137
+ for (const [name, entry] of Object.entries(parsed)) {
138
+ if (entry === null || typeof entry !== "object")
139
+ continue;
140
+ backends[name] = {
141
+ ...entry,
142
+ type: entry.type === "cloud" ? "cloud" : "selfhost",
143
+ };
144
+ }
145
+ return backends;
146
+ }
147
+ /** The on-disk shape: named model + legacy mirror, minimal for defaults. */
148
+ function serializable(config) {
149
+ const backends = config.backends ?? {};
150
+ const current = activeBackendName(config);
151
+ const pristineLocal = Object.keys(backends).length === 0 && current === LOCAL_BACKEND_NAME;
152
+ return {
153
+ backend: {
154
+ // The legacy mirror: local stays "local"; anything named is "cloud"
155
+ // to older readers (which cannot represent selfhost anyway).
156
+ type: current === LOCAL_BACKEND_NAME ? "local" : "cloud",
157
+ local: config.backend.local,
158
+ // The legacy cloud slot is never written back — migrated.
159
+ },
160
+ ...(pristineLocal ? {} : { backends, current_backend: current }),
161
+ context: config.context,
162
+ };
163
+ }
65
164
  // Recursively drop undefined-valued keys so the serialized YAML omits empty
66
165
  // optionals (matching Go's yaml omitempty), while preserving the opaque local
67
166
  // section untouched.
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
package/config/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { type BackendConfig, type BackendType, type CloudBackendConfig, type Config, type ContextConfig, getDefault, isCloudMode, load, save, } from "./config.js";
1
+ export { type BackendConfig, type BackendType, type CloudBackendConfig, type Config, type ContextConfig, type NamedBackendConfig, type NamedBackendType, CLOUD_BACKEND_NAME, LOCAL_BACKEND_NAME, activeBackend, activeBackendName, getDefault, isCloudMode, load, save, } from "./config.js";
2
2
  export { DEFAULT_CLOUD_CONSOLE_URL, ensureAuthenticated, resolveConsoleURL, resolveContextOrganization, resolveEndpoint, resolveOrganization, resolveToken, } from "./resolve.js";
3
3
  export { configDir, configPath, dataDir } from "./paths.js";
4
4
  export { configKeyNames, getConfigValue, setConfigValue } from "./keys.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,UAAU,EACV,WAAW,EACX,IAAI,EACJ,IAAI,GACL,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,mBAAmB,EACnB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,IAAI,EACJ,IAAI,GACL,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,mBAAmB,EACnB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
package/config/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // Public surface of the CLI config module.
2
- export { getDefault, isCloudMode, load, save, } from "./config.js";
2
+ export { CLOUD_BACKEND_NAME, LOCAL_BACKEND_NAME, activeBackend, activeBackendName, getDefault, isCloudMode, load, save, } from "./config.js";
3
3
  export { DEFAULT_CLOUD_CONSOLE_URL, ensureAuthenticated, resolveConsoleURL, resolveContextOrganization, resolveEndpoint, resolveOrganization, resolveToken, } from "./resolve.js";
4
4
  export { configDir, configPath, dataDir } from "./paths.js";
5
5
  export { configKeyNames, getConfigValue, setConfigValue } from "./keys.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C,OAAO,EAML,UAAU,EACV,WAAW,EACX,IAAI,EACJ,IAAI,GACL,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,mBAAmB,EACnB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C,OAAO,EAQL,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,IAAI,EACJ,IAAI,GACL,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,mBAAmB,EACnB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
package/config/keys.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Config } from "./config.js";
1
+ import { type Config } from "./config.js";
2
2
  /** All known config keys, sorted, for `config list` and error messages. */
3
3
  export declare function configKeyNames(): string[];
4
4
  export declare function getConfigValue(config: Config, key: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/config/keys.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAe,MAAM,EAAE,MAAM,aAAa,CAAC;AAuCvD,2EAA2E;AAC3E,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIlE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI/E"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/config/keys.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,MAAM,EAGZ,MAAM,aAAa,CAAC;AAmErB,2EAA2E;AAC3E,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIlE;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,IAAI,CAIN"}
package/config/keys.js CHANGED
@@ -2,26 +2,49 @@
2
2
  // fields the TS CLI owns in Wave 1 are exposed; daemon/local settings are
3
3
  // managed by their own (later) commands and preserved opaquely on save.
4
4
  import { UsageError } from "../errors/usage-error.js";
5
+ import { CLOUD_BACKEND_NAME, LOCAL_BACKEND_NAME, activeBackendName, } from "./config.js";
6
+ // The backend.cloud.* keys predate named backends and remain the documented
7
+ // kv surface for the reserved "cloud" entry; `current_backend` is the named
8
+ // model's own key. `backend.type` stays the simple local/cloud switch
9
+ // (named backends switch through `config backend use`).
5
10
  const KEYS = {
6
11
  "backend.type": {
7
- get: (config) => config.backend.type,
12
+ get: (config) => activeBackendName(config) === LOCAL_BACKEND_NAME ? "local" : "cloud",
8
13
  set: (config, value) => {
9
14
  if (value !== "local" && value !== "cloud") {
10
15
  throw new UsageError(`invalid backend.type "${value}" (expected: local, cloud)`);
11
16
  }
12
- config.backend.type = value;
17
+ if (value === "cloud") {
18
+ (config.backends ??= {})[CLOUD_BACKEND_NAME] ??= { type: "cloud" };
19
+ config.current_backend = CLOUD_BACKEND_NAME;
20
+ }
21
+ else {
22
+ config.current_backend = LOCAL_BACKEND_NAME;
23
+ }
24
+ },
25
+ },
26
+ current_backend: {
27
+ get: (config) => activeBackendName(config),
28
+ set: (config, value) => {
29
+ if (value !== LOCAL_BACKEND_NAME &&
30
+ config.backends?.[value] === undefined) {
31
+ throw new UsageError(`unknown backend "${value}" (add it first: stigmer config backend add)`);
32
+ }
33
+ config.current_backend = value;
13
34
  },
14
35
  },
15
36
  "backend.cloud.endpoint": {
16
- get: (config) => config.backend.cloud?.endpoint ?? "",
37
+ get: (config) => config.backends?.[CLOUD_BACKEND_NAME]?.endpoint ?? "",
17
38
  set: (config, value) => {
18
- (config.backend.cloud ??= {}).endpoint = value;
39
+ const backends = (config.backends ??= {});
40
+ (backends[CLOUD_BACKEND_NAME] ??= { type: "cloud" }).endpoint = value;
19
41
  },
20
42
  },
21
43
  "backend.cloud.org_id": {
22
- get: (config) => config.backend.cloud?.org_id ?? "",
44
+ get: (config) => config.backends?.[CLOUD_BACKEND_NAME]?.org_id ?? "",
23
45
  set: (config, value) => {
24
- (config.backend.cloud ??= {}).org_id = value;
46
+ const backends = (config.backends ??= {});
47
+ (backends[CLOUD_BACKEND_NAME] ??= { type: "cloud" }).org_id = value;
25
48
  },
26
49
  },
27
50
  "context.organization": {
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/config/keys.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,0EAA0E;AAC1E,wEAAwE;AAExE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAUtD,MAAM,IAAI,GAA8B;IACtC,cAAc,EAAE;QACd,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;QACpC,GAAG,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrB,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBAC3C,MAAM,IAAI,UAAU,CAAC,yBAAyB,KAAK,4BAA4B,CAAC,CAAC;YACnF,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,KAAoB,CAAC;QAC7C,CAAC;KACF;IACD,wBAAwB,EAAE;QACxB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE;QACrD,GAAG,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;QACjD,CAAC;KACF;IACD,sBAAsB,EAAE;QACtB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE;QACnD,GAAG,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;QAC/C,CAAC;KACF;IACD,sBAAsB,EAAE;QACtB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,IAAI,EAAE;QACnD,GAAG,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC;QAC/C,CAAC;KACF;CACF,CAAC;AAEF,2EAA2E;AAC3E,MAAM,UAAU,cAAc;IAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,GAAW;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,GAAW,EAAE,KAAa;IACvE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,OAAO,uBAAuB,GAAG,kBAAkB,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACpF,CAAC"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/config/keys.ts"],"names":[],"mappings":"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"}