@squadrules/mcp 5.4.2 → 5.5.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 (154) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/cli/api-client.d.ts +3 -1
  3. package/dist/cli/api-client.d.ts.map +1 -1
  4. package/dist/cli/api-client.js +7 -16
  5. package/dist/cli/api-client.js.map +1 -1
  6. package/dist/cli/backend/action-backend.d.ts +99 -0
  7. package/dist/cli/backend/action-backend.d.ts.map +1 -0
  8. package/dist/cli/backend/action-backend.js +2 -0
  9. package/dist/cli/backend/action-backend.js.map +1 -0
  10. package/dist/cli/backend/http-backend.d.ts +31 -0
  11. package/dist/cli/backend/http-backend.d.ts.map +1 -0
  12. package/dist/cli/backend/http-backend.js +38 -0
  13. package/dist/cli/backend/http-backend.js.map +1 -0
  14. package/dist/cli/backend/local-backend.d.ts +37 -0
  15. package/dist/cli/backend/local-backend.d.ts.map +1 -0
  16. package/dist/cli/backend/local-backend.js +166 -0
  17. package/dist/cli/backend/local-backend.js.map +1 -0
  18. package/dist/cli/backend/resolve-backend.d.ts +29 -0
  19. package/dist/cli/backend/resolve-backend.d.ts.map +1 -0
  20. package/dist/cli/backend/resolve-backend.js +37 -0
  21. package/dist/cli/backend/resolve-backend.js.map +1 -0
  22. package/dist/cli/client-factory.d.ts +6 -7
  23. package/dist/cli/client-factory.d.ts.map +1 -1
  24. package/dist/cli/client-factory.js +8 -42
  25. package/dist/cli/client-factory.js.map +1 -1
  26. package/dist/cli/commands/{search.d.ts → activate.d.ts} +2 -2
  27. package/dist/cli/commands/activate.d.ts.map +1 -0
  28. package/dist/cli/commands/activate.js +31 -0
  29. package/dist/cli/commands/activate.js.map +1 -0
  30. package/dist/cli/commands/cli-train.d.ts +5 -1
  31. package/dist/cli/commands/cli-train.d.ts.map +1 -1
  32. package/dist/cli/commands/cli-train.js +40 -139
  33. package/dist/cli/commands/cli-train.js.map +1 -1
  34. package/dist/cli/commands/delete.d.ts +1 -1
  35. package/dist/cli/commands/delete.d.ts.map +1 -1
  36. package/dist/cli/commands/delete.js +11 -6
  37. package/dist/cli/commands/delete.js.map +1 -1
  38. package/dist/cli/commands/export.d.ts +12 -5
  39. package/dist/cli/commands/export.d.ts.map +1 -1
  40. package/dist/cli/commands/export.js +117 -55
  41. package/dist/cli/commands/export.js.map +1 -1
  42. package/dist/cli/commands/{begin.d.ts → forward.d.ts} +2 -2
  43. package/dist/cli/commands/forward.d.ts.map +1 -0
  44. package/dist/cli/commands/forward.js +31 -0
  45. package/dist/cli/commands/forward.js.map +1 -0
  46. package/dist/cli/commands/login.d.ts +8 -2
  47. package/dist/cli/commands/login.d.ts.map +1 -1
  48. package/dist/cli/commands/login.js +53 -13
  49. package/dist/cli/commands/login.js.map +1 -1
  50. package/dist/cli/commands/logout.d.ts.map +1 -1
  51. package/dist/cli/commands/logout.js +3 -1
  52. package/dist/cli/commands/logout.js.map +1 -1
  53. package/dist/cli/commands/{attest.d.ts → reward.d.ts} +2 -2
  54. package/dist/cli/commands/reward.d.ts.map +1 -0
  55. package/dist/cli/commands/{attest.js → reward.js} +16 -17
  56. package/dist/cli/commands/reward.js.map +1 -0
  57. package/dist/cli/commands/spaces.d.ts +2 -2
  58. package/dist/cli/commands/spaces.d.ts.map +1 -1
  59. package/dist/cli/commands/spaces.js +12 -7
  60. package/dist/cli/commands/spaces.js.map +1 -1
  61. package/dist/cli/commands/token.d.ts.map +1 -1
  62. package/dist/cli/commands/token.js +7 -3
  63. package/dist/cli/commands/token.js.map +1 -1
  64. package/dist/cli/commands/tune.d.ts +6 -0
  65. package/dist/cli/commands/tune.d.ts.map +1 -0
  66. package/dist/cli/commands/{update.js → tune.js} +34 -24
  67. package/dist/cli/commands/tune.js.map +1 -0
  68. package/dist/cli/config.d.ts +4 -2
  69. package/dist/cli/config.d.ts.map +1 -1
  70. package/dist/cli/config.js +6 -3
  71. package/dist/cli/config.js.map +1 -1
  72. package/dist/cli/fetch-error.d.ts +6 -0
  73. package/dist/cli/fetch-error.d.ts.map +1 -1
  74. package/dist/cli/fetch-error.js +18 -0
  75. package/dist/cli/fetch-error.js.map +1 -1
  76. package/dist/cli/format.d.ts +20 -0
  77. package/dist/cli/format.d.ts.map +1 -0
  78. package/dist/cli/format.js +18 -0
  79. package/dist/cli/format.js.map +1 -0
  80. package/dist/cli/local-target.d.ts +11 -0
  81. package/dist/cli/local-target.d.ts.map +1 -0
  82. package/dist/cli/local-target.js +14 -0
  83. package/dist/cli/local-target.js.map +1 -0
  84. package/dist/cli/output.d.ts +20 -3
  85. package/dist/cli/output.d.ts.map +1 -1
  86. package/dist/cli/output.js +14 -6
  87. package/dist/cli/output.js.map +1 -1
  88. package/dist/cli/program.d.ts.map +1 -1
  89. package/dist/cli/program.js +12 -7
  90. package/dist/cli/program.js.map +1 -1
  91. package/dist/cli/render.d.ts +37 -0
  92. package/dist/cli/render.d.ts.map +1 -0
  93. package/dist/cli/render.js +179 -0
  94. package/dist/cli/render.js.map +1 -0
  95. package/dist/cli/resolve-timeout.d.ts +16 -0
  96. package/dist/cli/resolve-timeout.d.ts.map +1 -0
  97. package/dist/cli/resolve-timeout.js +43 -0
  98. package/dist/cli/resolve-timeout.js.map +1 -0
  99. package/dist/cli/skill-zip-local-write.d.ts +6 -4
  100. package/dist/cli/skill-zip-local-write.d.ts.map +1 -1
  101. package/dist/cli/skill-zip-local-write.js +5 -3
  102. package/dist/cli/skill-zip-local-write.js.map +1 -1
  103. package/dist/cli/train-batch.d.ts +20 -0
  104. package/dist/cli/train-batch.d.ts.map +1 -0
  105. package/dist/cli/train-batch.js +168 -0
  106. package/dist/cli/train-batch.js.map +1 -0
  107. package/dist/embed-docs/mem/adapter-migration.md +1 -1
  108. package/dist/embed-docs/mem/bulk-insert-adapters-via-cli.md +1 -1
  109. package/dist/embed-docs/mem/challenge-type-guide.md +1 -1
  110. package/dist/embed-docs/mem/create-new-protocol.md +1 -1
  111. package/dist/embed-docs/mem/critic-loop-guide.md +1 -1
  112. package/dist/embed-docs/mem/critic-loop.md +1 -1
  113. package/dist/embed-docs/mem/phase-critic-guide.md +1 -1
  114. package/dist/embed-docs/mem/phase-critic.md +1 -1
  115. package/dist/embed-docs/mem/protocol-linking-guide.md +1 -1
  116. package/dist/embed-docs/mem/refine-search.md +1 -1
  117. package/dist/embed-docs/mem/skill-format-guide.md +1 -1
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +6 -70
  120. package/dist/index.js.map +1 -1
  121. package/dist/resources/embedded-mcp-resources.js +11 -11
  122. package/dist/runtime/boot-local-runtime.d.ts +37 -0
  123. package/dist/runtime/boot-local-runtime.d.ts.map +1 -0
  124. package/dist/runtime/boot-local-runtime.js +122 -0
  125. package/dist/runtime/boot-local-runtime.js.map +1 -0
  126. package/dist/services/embedding/lazy-probe.d.ts +7 -0
  127. package/dist/services/embedding/lazy-probe.d.ts.map +1 -0
  128. package/dist/services/embedding/lazy-probe.js +26 -0
  129. package/dist/services/embedding/lazy-probe.js.map +1 -0
  130. package/dist/ui/assets/{AccountPage-DlzuVTtp.js → AccountPage-BdQTtPDO.js} +1 -1
  131. package/dist/ui/assets/{index-C77BzNbG.js → index-BI3vM1h6.js} +2 -2
  132. package/dist/ui/assets/index-Dq6apLxZ.css +2 -0
  133. package/dist/ui/index.html +2 -2
  134. package/dist/utils/tenant-context.d.ts +6 -0
  135. package/dist/utils/tenant-context.d.ts.map +1 -1
  136. package/dist/utils/tenant-context.js +6 -1
  137. package/dist/utils/tenant-context.js.map +1 -1
  138. package/package.json +1 -1
  139. package/dist/cli/commands/attest.d.ts.map +0 -1
  140. package/dist/cli/commands/attest.js.map +0 -1
  141. package/dist/cli/commands/begin.d.ts.map +0 -1
  142. package/dist/cli/commands/begin.js +0 -27
  143. package/dist/cli/commands/begin.js.map +0 -1
  144. package/dist/cli/commands/search.d.ts.map +0 -1
  145. package/dist/cli/commands/search.js +0 -25
  146. package/dist/cli/commands/search.js.map +0 -1
  147. package/dist/cli/commands/update.d.ts +0 -6
  148. package/dist/cli/commands/update.d.ts.map +0 -1
  149. package/dist/cli/commands/update.js.map +0 -1
  150. package/dist/cli/format-next-call.d.ts +0 -2
  151. package/dist/cli/format-next-call.d.ts.map +0 -1
  152. package/dist/cli/format-next-call.js +0 -63
  153. package/dist/cli/format-next-call.js.map +0 -1
  154. package/dist/ui/assets/index-CSUUmfdT.css +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reward.js","sourceRoot":"","sources":["../../../src/cli/commands/reward.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC1C,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2DAA2D,CAAC;SACxE,QAAQ,CAAC,OAAO,EAAE,+CAA+C,CAAC;SAClE,QAAQ,CAAC,WAAW,EAAE,6BAA6B,CAAC;SACpD,QAAQ,CAAC,YAAY,EAAE,sDAAsD,CAAC;SAC9E,MAAM,CAAC,kBAAkB,EAAE,2CAA2C,CAAC;SACvE,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,CAAC;SACxE,MAAM,CAAC,4BAA4B,EAAE,8CAA8C,CAAC;SACpF,MAAM,CAAC,iBAAiB,EAAE,0DAA0D,CAAC;SACrF,MAAM,CAAC,KAAK,EACT,GAAW,EACX,OAAe,EACf,QAAgB,EAChB,OAAmF,EACrF,EAAE;QACA,IAAI,CAAC;YACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjD,UAAU,CAAC,wCAAwC,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACX,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAClF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,UAAU,CAAC,0BAA0B,CAAC,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACX,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAExD,MAAM,aAAa,GAAkB,EAAE,CAAC;YACxC,IAAI,KAAK,KAAK,SAAS;gBAAE,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC;YACrD,IAAI,OAAO,CAAC,KAAK;gBAAE,aAAa,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YACvD,IAAI,OAAO,CAAC,aAAa;gBAAE,aAAa,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;YAC/E,IAAI,OAAO,CAAC,KAAK;gBAAE,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;YAE5D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CACjC,GAAG,EACH,OAAgC,EAChC,QAAQ,EACR,aAAa,CAChB,CAAC;YACF,UAAU,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE;gBAC/C,MAAM,EAAE,kBAAkB;gBAC1B,IAAI,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,cAAc,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChD,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -1,6 +1,6 @@
1
- import { Command } from 'commander';
2
1
  /**
3
- * spaces command
2
+ * spaces command — list available spaces and adapter counts.
4
3
  */
4
+ import { Command } from 'commander';
5
5
  export declare function spacesCommand(program: Command): void;
6
6
  //# sourceMappingURL=spaces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spaces.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/spaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmBpD"}
1
+ {"version":3,"file":"spaces.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/spaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsBpD"}
@@ -1,9 +1,11 @@
1
- import { handleApiError, isBrowserDisabled } from '../auth-error.js';
2
- import { writeJson } from '../output.js';
3
- import { createClientFromProgram } from '../client-factory.js';
4
1
  /**
5
- * spaces command
2
+ * spaces command — list available spaces and adapter counts.
6
3
  */
4
+ import { handleApiError, isBrowserDisabled } from '../auth-error.js';
5
+ import { emitResult } from '../output.js';
6
+ import { resolveOutputFormat } from '../format.js';
7
+ import { renderSpacesPretty, renderSpacesText } from '../render.js';
8
+ import { createBackendFromProgram } from '../backend/resolve-backend.js';
7
9
  export function spacesCommand(program) {
8
10
  program
9
11
  .command('spaces')
@@ -11,11 +13,14 @@ export function spacesCommand(program) {
11
13
  .option('--include-adapter-titles', 'Include per-space adapter titles and layer counts')
12
14
  .action(async (options) => {
13
15
  try {
14
- const client = createClientFromProgram(program);
15
- const response = await client.spaces({
16
+ const backend = await createBackendFromProgram(program);
17
+ const response = await backend.spaces({
16
18
  include_adapter_titles: Boolean(options.includeAdapterTitles)
17
19
  });
18
- writeJson(response);
20
+ emitResult(resolveOutputFormat(program), response, {
21
+ pretty: renderSpacesPretty,
22
+ text: renderSpacesText
23
+ });
19
24
  }
20
25
  catch (error) {
21
26
  handleApiError(error, !isBrowserDisabled());
@@ -1 +1 @@
1
- {"version":3,"file":"spaces.js","sourceRoot":"","sources":["../../../src/cli/commands/spaces.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CACL,0BAA0B,EAC1B,mDAAmD,CACpD;SACA,MAAM,CAAC,KAAK,EAAE,OAA2C,EAAE,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;gBACnC,sBAAsB,EAAE,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC;aAC9D,CAAC,CAAC;YACH,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"spaces.js","sourceRoot":"","sources":["../../../src/cli/commands/spaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CACL,0BAA0B,EAC1B,mDAAmD,CACpD;SACA,MAAM,CAAC,KAAK,EAAE,OAA2C,EAAE,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;gBACpC,sBAAsB,EAAE,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC;aAC9D,CAAC,CAAC;YACH,UAAU,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE;gBACjD,MAAM,EAAE,kBAAkB;gBAC1B,IAAI,EAAE,gBAAgB;aACvB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/token.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuCnD"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/token.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyCnD"}
@@ -3,7 +3,8 @@
3
3
  */
4
4
  import { readConfig } from '../config-file.js';
5
5
  import { writeError } from '../output.js';
6
- import { getBaseUrl, isTokenValid, loginWithBrowser } from './login.js';
6
+ import { resolveTimeoutMsOrDefault } from '../resolve-timeout.js';
7
+ import { getBaseUrl, isLocalAuthTarget, isTokenValid, loginWithBrowser, writeLocalAuthFallbackHint } from './login.js';
7
8
  export function tokenCommand(program) {
8
9
  program
9
10
  .command('token')
@@ -13,10 +14,13 @@ export function tokenCommand(program) {
13
14
  .action(async (opts) => {
14
15
  try {
15
16
  const baseUrl = getBaseUrl();
17
+ if (isLocalAuthTarget())
18
+ writeLocalAuthFallbackHint(baseUrl);
19
+ const timeoutMs = resolveTimeoutMsOrDefault(program);
16
20
  let config = await readConfig(baseUrl);
17
21
  let token = config.bearerToken;
18
22
  if (!token && opts.login) {
19
- const ok = await loginWithBrowser(baseUrl);
23
+ const ok = await loginWithBrowser(baseUrl, { timeoutMs });
20
24
  if (!ok) {
21
25
  writeError('Login failed.');
22
26
  process.exit(1);
@@ -28,7 +32,7 @@ export function tokenCommand(program) {
28
32
  writeError('No stored token. Run `squadrules login` or use `squadrules token --login`.');
29
33
  process.exit(1);
30
34
  }
31
- if (opts.validate && !(await isTokenValid(baseUrl, token))) {
35
+ if (opts.validate && !(await isTokenValid(baseUrl, token, timeoutMs))) {
32
36
  writeError('Token invalid or expired. Run `squadrules login` to re-authenticate.');
33
37
  process.exit(1);
34
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/cli/commands/token.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,UAAU,YAAY,CAAC,OAAgB;IACzC,OAAO;SACF,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,gBAAgB,EAAE,iDAAiD,CAAC;SAC3E,MAAM,CAAC,aAAa,EAAE,gDAAgD,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,IAA6C,EAAE,EAAE;QAC5D,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;YAE/B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACvB,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC3C,IAAI,CAAC,EAAE,EAAE,CAAC;oBACN,UAAU,CAAC,eAAe,CAAC,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;gBACD,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;gBACnC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;YAC/B,CAAC;YAED,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,UAAU,CAAC,4EAA4E,CAAC,CAAC;gBACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzD,UAAU,CAAC,sEAAsE,CAAC,CAAC;gBACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/cli/commands/token.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAEvH,MAAM,UAAU,YAAY,CAAC,OAAgB;IACzC,OAAO;SACF,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,gBAAgB,EAAE,iDAAiD,CAAC;SAC3E,MAAM,CAAC,aAAa,EAAE,gDAAgD,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,IAA6C,EAAE,EAAE;QAC5D,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,iBAAiB,EAAE;gBAAE,0BAA0B,CAAC,OAAO,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;YAE/B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACvB,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,EAAE,EAAE,CAAC;oBACN,UAAU,CAAC,eAAe,CAAC,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;gBACD,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;gBACnC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;YAC/B,CAAC;YAED,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,UAAU,CAAC,4EAA4E,CAAC,CAAC;gBACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;gBACpE,UAAU,CAAC,sEAAsE,CAAC,CAAC;gBACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * tune command — update one or more adapter layers.
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function tuneCommand(program: Command): void;
6
+ //# sourceMappingURL=tune.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tune.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tune.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmFlD"}
@@ -1,11 +1,30 @@
1
1
  /**
2
- * tune command
2
+ * tune command — update one or more adapter layers.
3
3
  */
4
4
  import { handleApiError, isBrowserDisabled } from '../auth-error.js';
5
- import { writeError, writeJson } from '../output.js';
5
+ import { emitResult, writeError } from '../output.js';
6
+ import { resolveOutputFormat } from '../format.js';
7
+ import { renderTunePretty, renderTuneText } from '../render.js';
6
8
  import { readMarkdownUploadFromFile } from '../upload-guards.js';
7
- import { createClientFromProgram } from '../client-factory.js';
8
- export function updateCommand(program) {
9
+ import { createBackendFromProgram } from '../backend/resolve-backend.js';
10
+ /** Parse the SQUADRULES_REVIEW_EVIDENCE env blob (integration tests inject critic-loop proof). */
11
+ function reviewEvidenceFromEnv() {
12
+ const raw = process.env['SQUADRULES_REVIEW_EVIDENCE'];
13
+ if (!raw)
14
+ return undefined;
15
+ try {
16
+ const parsed = JSON.parse(raw);
17
+ if (parsed &&
18
+ typeof parsed.verdict_file === 'string' &&
19
+ typeof parsed.exit_code === 'number' &&
20
+ typeof parsed.stdout === 'string') {
21
+ return parsed;
22
+ }
23
+ }
24
+ catch { /* ignore malformed env review_evidence */ }
25
+ return undefined;
26
+ }
27
+ export function tuneCommand(program) {
9
28
  program
10
29
  .command('tune')
11
30
  .description('Update one or more SQUADRULES adapter layers')
@@ -17,17 +36,17 @@ export function updateCommand(program) {
17
36
  .option('--allow-sensitive-upload', 'Allow uploads that contain token-like or private-key-like text')
18
37
  .action(async (uris, options) => {
19
38
  try {
20
- const client = createClientFromProgram(program);
39
+ const backend = await createBackendFromProgram(program);
40
+ const format = resolveOutputFormat(program);
21
41
  let markdownDoc;
22
42
  let updates;
23
43
  const rawSpace = typeof options.space === 'string' ? options.space.trim() : '';
24
44
  if (rawSpace.length > 0 && !options.file && !options.files && !options.updates) {
25
- const response = await client.tune(uris, { space: rawSpace });
26
- writeJson(response);
45
+ const response = await backend.tune(uris, { space: rawSpace });
46
+ emitResult(format, response, { pretty: renderTunePretty, text: renderTuneText });
27
47
  return;
28
48
  }
29
49
  if (options.files) {
30
- // Multiple files, one per URI
31
50
  if (options.files.length !== uris.length) {
32
51
  writeError('Number of files must match number of URIs');
33
52
  process.exit(1);
@@ -36,7 +55,6 @@ export function updateCommand(program) {
36
55
  markdownDoc = options.files.map((file) => readMarkdownUploadFromFile(file, 'tune', Boolean(options.allowSensitiveUpload)));
37
56
  }
38
57
  else if (options.file) {
39
- // Single file for all URIs
40
58
  const content = readMarkdownUploadFromFile(options.file, 'tune', Boolean(options.allowSensitiveUpload));
41
59
  markdownDoc = uris.map(() => content);
42
60
  }
@@ -44,7 +62,7 @@ export function updateCommand(program) {
44
62
  try {
45
63
  updates = JSON.parse(options.updates);
46
64
  }
47
- catch (_e) {
65
+ catch {
48
66
  writeError('Invalid JSON in --updates option');
49
67
  process.exit(1);
50
68
  return;
@@ -62,19 +80,11 @@ export function updateCommand(program) {
62
80
  tuneOpts.updates = updates;
63
81
  if (rawSpace.length > 0)
64
82
  tuneOpts.space = rawSpace;
65
- // Auto-inject review_evidence from env (used by integration tests)
66
- const envReviewEvidence = process.env['SQUADRULES_REVIEW_EVIDENCE'];
67
- if (envReviewEvidence) {
68
- try {
69
- const parsed = JSON.parse(envReviewEvidence);
70
- if (parsed && typeof parsed.verdict_file === 'string' && typeof parsed.exit_code === 'number' && typeof parsed.stdout === 'string') {
71
- tuneOpts.reviewEvidence = parsed;
72
- }
73
- }
74
- catch { /* ignore malformed env review_evidence */ }
75
- }
76
- const response = await client.tune(uris, tuneOpts);
77
- writeJson(response);
83
+ const envReviewEvidence = reviewEvidenceFromEnv();
84
+ if (envReviewEvidence)
85
+ tuneOpts.reviewEvidence = envReviewEvidence;
86
+ const response = await backend.tune(uris, tuneOpts);
87
+ emitResult(format, response, { pretty: renderTunePretty, text: renderTuneText });
78
88
  }
79
89
  catch (error) {
80
90
  if (error instanceof Error && error.message.includes('ENOENT')) {
@@ -85,4 +95,4 @@ export function updateCommand(program) {
85
95
  }
86
96
  });
87
97
  }
88
- //# sourceMappingURL=update.js.map
98
+ //# sourceMappingURL=tune.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tune.js","sourceRoot":"","sources":["../../../src/cli/commands/tune.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,10 @@
2
2
  * CLI Configuration
3
3
  */
4
4
  /**
5
- * Default API base for Commander --url and fallbacks: SQUADRULES_API_URL, then saved config defaultUrl, then localhost:3000.
6
- * Matches docs/CLI.md resolution order (without an explicit --url flag).
5
+ * Default target for Commander --url and fallbacks: SQUADRULES_API_URL, then saved
6
+ * config defaultUrl, then the local sentinel (run in-process against the embedded store).
7
+ * The CLI is local-by-default; `login` persists an http defaultUrl that flips subsequent
8
+ * commands to the HTTP backend. Matches docs/CLI.md resolution order (without --url).
7
9
  */
8
10
  export declare function getCliApiUrlDefault(): string;
9
11
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAM5C;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAM5C;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
@@ -2,9 +2,12 @@
2
2
  * CLI Configuration
3
3
  */
4
4
  import { getDefaultApiUrlFromFile } from './config-file.js';
5
+ import { LOCAL_TARGET } from './local-target.js';
5
6
  /**
6
- * Default API base for Commander --url and fallbacks: SQUADRULES_API_URL, then saved config defaultUrl, then localhost:3000.
7
- * Matches docs/CLI.md resolution order (without an explicit --url flag).
7
+ * Default target for Commander --url and fallbacks: SQUADRULES_API_URL, then saved
8
+ * config defaultUrl, then the local sentinel (run in-process against the embedded store).
9
+ * The CLI is local-by-default; `login` persists an http defaultUrl that flips subsequent
10
+ * commands to the HTTP backend. Matches docs/CLI.md resolution order (without --url).
8
11
  */
9
12
  export function getCliApiUrlDefault() {
10
13
  const env = (process.env['SQUADRULES_API_URL'] || '').trim();
@@ -13,7 +16,7 @@ export function getCliApiUrlDefault() {
13
16
  const fromFile = getDefaultApiUrlFromFile();
14
17
  if (fromFile)
15
18
  return fromFile;
16
- return 'http://localhost:3000';
19
+ return LOCAL_TARGET;
17
20
  }
18
21
  /**
19
22
  * Get the SQUADRULES API base URL (same as getCliApiUrlDefault).
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IAC/B,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAC;IAC5C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,uBAAuB,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACrB,OAAO,mBAAmB,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IAC/B,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAC;IAC5C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,YAAY,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACrB,OAAO,mBAAmB,EAAE,CAAC;AACjC,CAAC"}
@@ -10,6 +10,12 @@
10
10
  * reason instead of a bare "fetch failed". Message-only — never alters control flow.
11
11
  */
12
12
  export declare function describeFetchError(err: unknown): string;
13
+ /**
14
+ * True when a fetch failure looks transient and is worth retrying: an abort (timeout) or a
15
+ * connect-level socket/DNS error surfaced either as `err.code` or as an opaque undici
16
+ * `TypeError: fetch failed`.
17
+ */
18
+ export declare function isRetryableNetworkError(err: unknown): boolean;
13
19
  /**
14
20
  * Build a network Error whose message carries the underlying cause plus a reachability hint, and
15
21
  * whose `cause` preserves the original error for programmatic access.
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-error.d.ts","sourceRoot":"","sources":["../../src/cli/fetch-error.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAYvD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,CAOxE"}
1
+ {"version":3,"file":"fetch-error.d.ts","sourceRoot":"","sources":["../../src/cli/fetch-error.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAYvD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAU7D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,CAOxE"}
@@ -25,6 +25,24 @@ export function describeFetchError(err) {
25
25
  }
26
26
  return detail;
27
27
  }
28
+ /**
29
+ * True when a fetch failure looks transient and is worth retrying: an abort (timeout) or a
30
+ * connect-level socket/DNS error surfaced either as `err.code` or as an opaque undici
31
+ * `TypeError: fetch failed`.
32
+ */
33
+ export function isRetryableNetworkError(err) {
34
+ if (err instanceof Error) {
35
+ if (err.name === 'AbortError')
36
+ return true;
37
+ const code = err.code;
38
+ if (code && ['ECONNREFUSED', 'ECONNRESET', 'EPIPE', 'ENOTFOUND', 'UND_ERR_CONNECT_TIMEOUT'].includes(code)) {
39
+ return true;
40
+ }
41
+ if (err.name === 'TypeError' && /fetch|network/i.test(err.message))
42
+ return true;
43
+ }
44
+ return false;
45
+ }
28
46
  /**
29
47
  * Build a network Error whose message carries the underlying cause plus a reachability hint, and
30
48
  * whose `cause` preserves the original error for programmatic access.
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-error.js","sourceRoot":"","sources":["../../src/cli/fetch-error.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC3C,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC;IACpD,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,eAAe,CAAC;IAC5C,MAAM,KAAK,GAAI,GAA2B,CAAC,KAAK,CAAC;IACjD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QACpE,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,MAAM,GAAG,GAAG,MAAM,KAAK,SAAS,GAAG,CAAC;IACtF,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvE,MAAM,GAAG,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,GAAY;IAC7D,MAAM,QAAQ,GAAG,IAAI,KAAK,CACtB,GAAG,MAAM,KAAK,kBAAkB,CAAC,GAAG,CAAC,IAAI;QACzC,0FAA0F,CAC7F,CAAC;IACD,QAAgC,CAAC,KAAK,GAAG,GAAG,CAAC;IAC9C,OAAO,QAAQ,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"fetch-error.js","sourceRoot":"","sources":["../../src/cli/fetch-error.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC3C,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC;IACpD,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,eAAe,CAAC;IAC5C,MAAM,KAAK,GAAI,GAA2B,CAAC,KAAK,CAAC;IACjD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QACpE,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,MAAM,GAAG,GAAG,MAAM,KAAK,SAAS,GAAG,CAAC;IACtF,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvE,MAAM,GAAG,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAY;IAChD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;YAAE,OAAO,IAAI,CAAC;QAC3C,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,yBAAyB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACzG,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IACpF,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,GAAY;IAC7D,MAAM,QAAQ,GAAG,IAAI,KAAK,CACtB,GAAG,MAAM,KAAK,kBAAkB,CAAC,GAAG,CAAC,IAAI;QACzC,0FAA0F,CAC7F,CAAC;IACD,QAAgC,CAAC,KAAK,GAAG,GAAG,CAAC;IAC9C,OAAO,QAAQ,CAAC;AACpB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * CLI output-format resolution (global `--format`).
3
+ *
4
+ * Every data command renders through one of three effective formats. `auto`
5
+ * (the default) is human-first: pretty on a TTY, JSON when piped/non-TTY, so
6
+ * `squadrules activate "..."` reads nicely at a terminal but stays machine-parseable
7
+ * when redirected or run by an agent. Precedence: `--format` flag > `SQUADRULES_FORMAT`
8
+ * env > auto.
9
+ */
10
+ import type { Command } from 'commander';
11
+ /** Accepted `--format` values. */
12
+ export type OutputFormat = 'auto' | 'pretty' | 'json' | 'text';
13
+ /** The three concrete renderings after `auto` is resolved against the TTY. */
14
+ export type ResolvedFormat = 'pretty' | 'json' | 'text';
15
+ /**
16
+ * Resolve the effective output format for a command. `auto` becomes `pretty` on a TTY
17
+ * and `json` when stdout is piped/redirected (non-TTY).
18
+ */
19
+ export declare function resolveOutputFormat(program: Command): ResolvedFormat;
20
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/cli/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,kCAAkC;AAClC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAE/D,8EAA8E;AAC9E,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AASxD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAMpE"}
@@ -0,0 +1,18 @@
1
+ const VALID = ['auto', 'pretty', 'json', 'text'];
2
+ function normalize(raw) {
3
+ const v = (raw ?? '').trim().toLowerCase();
4
+ return VALID.includes(v) ? v : 'auto';
5
+ }
6
+ /**
7
+ * Resolve the effective output format for a command. `auto` becomes `pretty` on a TTY
8
+ * and `json` when stdout is piped/redirected (non-TTY).
9
+ */
10
+ export function resolveOutputFormat(program) {
11
+ const g = program.optsWithGlobals?.() ?? program.opts();
12
+ const flag = typeof g['format'] === 'string' ? g['format'] : undefined;
13
+ const chosen = normalize(flag ?? process.env['SQUADRULES_FORMAT']);
14
+ if (chosen === 'pretty' || chosen === 'json' || chosen === 'text')
15
+ return chosen;
16
+ return process.stdout.isTTY ? 'pretty' : 'json';
17
+ }
18
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/cli/format.ts"],"names":[],"mappings":"AAiBA,MAAM,KAAK,GAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpE,SAAS,SAAS,CAAC,GAA8B;IAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAkB,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACnE,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACjF,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AAClD,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Local target sentinel — dependency-free leaf so both `config.ts` (default URL)
3
+ * and `backend/resolve-backend.ts` (target resolution) can share it without a cycle.
4
+ */
5
+ /** Sentinel `--url` target meaning "run in-process against the embedded store". */
6
+ export declare const LOCAL_TARGET = "stdio://local";
7
+ /** `--url` values that select the local backend (matched case-insensitively). */
8
+ export declare const LOCAL_TARGET_ALIASES: readonly string[];
9
+ /** True when a raw `--url`/target value selects the in-process local backend. */
10
+ export declare function isLocalTarget(raw: string | undefined | null): boolean;
11
+ //# sourceMappingURL=local-target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-target.d.ts","sourceRoot":"","sources":["../../src/cli/local-target.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mFAAmF;AACnF,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAE5C,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAwC,CAAC;AAE3F,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAGrE"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Local target sentinel — dependency-free leaf so both `config.ts` (default URL)
3
+ * and `backend/resolve-backend.ts` (target resolution) can share it without a cycle.
4
+ */
5
+ /** Sentinel `--url` target meaning "run in-process against the embedded store". */
6
+ export const LOCAL_TARGET = 'stdio://local';
7
+ /** `--url` values that select the local backend (matched case-insensitively). */
8
+ export const LOCAL_TARGET_ALIASES = ['stdio://local', 'local', 'stdio'];
9
+ /** True when a raw `--url`/target value selects the in-process local backend. */
10
+ export function isLocalTarget(raw) {
11
+ const v = (raw ?? '').trim().toLowerCase();
12
+ return LOCAL_TARGET_ALIASES.includes(v);
13
+ }
14
+ //# sourceMappingURL=local-target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-target.js","sourceRoot":"","sources":["../../src/cli/local-target.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mFAAmF;AACnF,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAE5C,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAAsB,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAE3F,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,GAA8B;IAC1D,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC"}
@@ -1,10 +1,27 @@
1
1
  /**
2
2
  * CLI Output Utility
3
- * Uses process.stdout/stderr directly to avoid console.* linting restrictions
3
+ * Uses process.stdout/stderr directly to avoid console.* linting restrictions.
4
+ *
5
+ * Data commands render through {@link emitResult}, which applies the resolved global
6
+ * `--format` (see format.ts): `json` prints the canonical response object, `pretty`
7
+ * prints a human rendering on stdout with the next-call hint on stderr, and `text`
8
+ * prints a minimal plain-text summary. Auth/util commands use the raw writers below.
4
9
  */
10
+ import type { ResolvedFormat } from './format.js';
5
11
  export declare function writeStdout(message: string): void;
6
12
  export declare function writeStderr(message: string): void;
7
13
  export declare function writeError(message: string): void;
8
- export declare function writeJson(data: any): void;
9
- export declare function writeMarkdown(content: string): void;
14
+ export declare function writeJson(data: unknown): void;
15
+ /**
16
+ * Per-command rendering hooks. `pretty`/`text` return stdout bodies; `nextCall` returns
17
+ * a short human hint that pretty mode prints on stderr (JSON mode keeps the structured
18
+ * `next_call` in the body instead, so no hint is emitted there).
19
+ */
20
+ export interface ResultView<T> {
21
+ pretty(data: T): string;
22
+ text(data: T): string;
23
+ nextCall?(data: T): string | null;
24
+ }
25
+ /** Render a command result to stdout/stderr according to the resolved output format. */
26
+ export declare function emitResult<T>(format: ResolvedFormat, data: T, view: ResultView<T>): void;
10
27
  //# sourceMappingURL=output.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKjD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAEzC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEnD"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKjD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IACzB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;IACtB,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAYxF"}
@@ -1,7 +1,3 @@
1
- /**
2
- * CLI Output Utility
3
- * Uses process.stdout/stderr directly to avoid console.* linting restrictions
4
- */
5
1
  export function writeStdout(message) {
6
2
  const line = message + '\n';
7
3
  if (!process.stdout.write(line)) {
@@ -17,7 +13,19 @@ export function writeError(message) {
17
13
  export function writeJson(data) {
18
14
  writeStdout(JSON.stringify(data, null, 2));
19
15
  }
20
- export function writeMarkdown(content) {
21
- writeStdout(content);
16
+ /** Render a command result to stdout/stderr according to the resolved output format. */
17
+ export function emitResult(format, data, view) {
18
+ if (format === 'json') {
19
+ writeJson(data);
20
+ return;
21
+ }
22
+ if (format === 'text') {
23
+ writeStdout(view.text(data));
24
+ return;
25
+ }
26
+ writeStdout(view.pretty(data));
27
+ const hint = view.nextCall?.(data) ?? null;
28
+ if (hint)
29
+ writeStderr(hint);
22
30
  }
23
31
  //# sourceMappingURL=output.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,WAAW,CAAC,OAAe;IACvC,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACtC,WAAW,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAS;IAC/B,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IACzC,WAAW,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,WAAW,CAAC,OAAe;IACvC,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACtC,WAAW,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAa;IACnC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAaD,wFAAwF;AACxF,MAAM,UAAU,UAAU,CAAI,MAAsB,EAAE,IAAO,EAAE,IAAmB;IAC9E,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO;IACX,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,OAAO;IACX,CAAC;IACD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC3C,IAAI,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,wBAAgB,aAAa,IAAI,OAAO,CA0CvC"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,wBAAgB,aAAa,IAAI,OAAO,CAiDvC"}
@@ -1,18 +1,19 @@
1
1
  import { Command } from 'commander';
2
2
  import { createRequire } from 'module';
3
- import { activateCommand } from './commands/search.js';
4
- import { forwardCommand } from './commands/begin.js';
3
+ import { activateCommand } from './commands/activate.js';
4
+ import { forwardCommand } from './commands/forward.js';
5
5
  import { trainCliCommand } from './commands/cli-train.js';
6
6
  import { spacesCommand } from './commands/spaces.js';
7
- import { updateCommand } from './commands/update.js';
7
+ import { tuneCommand } from './commands/tune.js';
8
8
  import { deleteCommand } from './commands/delete.js';
9
- import { rewardCommand } from './commands/attest.js';
9
+ import { rewardCommand } from './commands/reward.js';
10
10
  import { exportCommand } from './commands/export.js';
11
11
  import { loginCommand } from './commands/login.js';
12
12
  import { logoutCommand } from './commands/logout.js';
13
13
  import { tokenCommand } from './commands/token.js';
14
14
  import { serveCommand } from './commands/serve.js';
15
15
  import { getCliApiUrlDefault } from './config.js';
16
+ import { isLocalTarget } from './local-target.js';
16
17
  const loadPackageJson = createRequire(import.meta.url);
17
18
  const { version } = loadPackageJson('../../package.json');
18
19
  function enableHelpAfterError(command) {
@@ -28,9 +29,11 @@ export function createProgram() {
28
29
  .name('squadrules')
29
30
  .description('CLI tool for interacting with SquadRules REST API')
30
31
  .version(version)
31
- .option('-u, --url <url>', 'SquadRules API base URL', getCliApiUrlDefault())
32
+ .option('-u, --url <url>', 'SquadRules API base URL, or "local" to run in-process against the embedded store', getCliApiUrlDefault())
32
33
  .option('--timeout <seconds>', 'request timeout in seconds (env: SQUADRULES_TIMEOUT_MS, default: 15)')
33
34
  .option('--retries <n>', 'max retries on network errors (env: SQUADRULES_RETRIES, default: 2)')
35
+ .option('--format <format>', 'output format: auto (pretty on TTY, json when piped), pretty, json, or text (env: SQUADRULES_FORMAT)')
36
+ .option('--reseed', 'local mode: force delete-then-retrain of bundled app-space adapters (repair hatch)')
34
37
  .option('--no-browser', 'do not open browser when auth is required (e.g. in tests or scripts)')
35
38
  .hook('preAction', (_thisCommand, actionCommand) => {
36
39
  // optsWithGlobals merges root --url / --no-browser for nested commands (e.g. squadrules --url … train …).
@@ -38,7 +41,9 @@ export function createProgram() {
38
41
  return;
39
42
  }
40
43
  const opts = actionCommand.optsWithGlobals();
41
- if (opts.url) {
44
+ // Do not leak the local sentinel into the environment; http-only helpers (login,
45
+ // ApiClient fallbacks) read SQUADRULES_API_URL and must not see stdio://local.
46
+ if (opts.url && !isLocalTarget(opts.url)) {
42
47
  process.env['SQUADRULES_API_URL'] = opts.url;
43
48
  }
44
49
  if (opts.browser === false) {
@@ -50,7 +55,7 @@ export function createProgram() {
50
55
  forwardCommand(program); // forward
51
56
  trainCliCommand(program);
52
57
  spacesCommand(program);
53
- updateCommand(program); // tune
58
+ tuneCommand(program); // tune
54
59
  deleteCommand(program); // delete
55
60
  rewardCommand(program); // reward
56
61
  exportCommand(program); // export
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"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"}