@leemour/max-cli 0.2.0 → 0.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 (109) hide show
  1. package/README.md +10 -3
  2. package/dist/cache/index.d.ts.map +1 -1
  3. package/dist/cache/index.js +3 -0
  4. package/dist/cache/index.js.map +1 -1
  5. package/dist/cache/schema.d.ts +4 -1
  6. package/dist/cache/schema.d.ts.map +1 -1
  7. package/dist/cache/schema.js +89 -2
  8. package/dist/cache/schema.js.map +1 -1
  9. package/dist/cache/store.d.ts +38 -11
  10. package/dist/cache/store.d.ts.map +1 -1
  11. package/dist/cache/store.js +123 -17
  12. package/dist/cache/store.js.map +1 -1
  13. package/dist/client.d.ts +41 -9
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +188 -49
  16. package/dist/client.js.map +1 -1
  17. package/dist/commands/account.js +1 -1
  18. package/dist/commands/account.js.map +1 -1
  19. package/dist/commands/body.d.ts +23 -0
  20. package/dist/commands/body.d.ts.map +1 -0
  21. package/dist/commands/body.js +36 -0
  22. package/dist/commands/body.js.map +1 -0
  23. package/dist/commands/cache.js +2 -2
  24. package/dist/commands/cache.js.map +1 -1
  25. package/dist/commands/chats.d.ts.map +1 -1
  26. package/dist/commands/chats.js +24 -3
  27. package/dist/commands/chats.js.map +1 -1
  28. package/dist/commands/config.d.ts +3 -0
  29. package/dist/commands/config.d.ts.map +1 -0
  30. package/dist/commands/config.js +55 -0
  31. package/dist/commands/config.js.map +1 -0
  32. package/dist/commands/contacts.d.ts.map +1 -1
  33. package/dist/commands/contacts.js +8 -3
  34. package/dist/commands/contacts.js.map +1 -1
  35. package/dist/commands/context.d.ts +27 -3
  36. package/dist/commands/context.d.ts.map +1 -1
  37. package/dist/commands/context.js +45 -8
  38. package/dist/commands/context.js.map +1 -1
  39. package/dist/commands/doctor.d.ts +18 -0
  40. package/dist/commands/doctor.d.ts.map +1 -0
  41. package/dist/commands/doctor.js +72 -0
  42. package/dist/commands/doctor.js.map +1 -0
  43. package/dist/commands/messages.d.ts.map +1 -1
  44. package/dist/commands/messages.js +129 -5
  45. package/dist/commands/messages.js.map +1 -1
  46. package/dist/commands/paging.d.ts +6 -3
  47. package/dist/commands/paging.d.ts.map +1 -1
  48. package/dist/commands/paging.js +14 -3
  49. package/dist/commands/paging.js.map +1 -1
  50. package/dist/commands/runs.d.ts.map +1 -1
  51. package/dist/commands/runs.js +4 -6
  52. package/dist/commands/runs.js.map +1 -1
  53. package/dist/commands/session.js +2 -2
  54. package/dist/commands/session.js.map +1 -1
  55. package/dist/commands/skill.d.ts +3 -0
  56. package/dist/commands/skill.d.ts.map +1 -0
  57. package/dist/commands/skill.js +23 -0
  58. package/dist/commands/skill.js.map +1 -0
  59. package/dist/config.d.ts +46 -2
  60. package/dist/config.d.ts.map +1 -1
  61. package/dist/config.js +103 -9
  62. package/dist/config.js.map +1 -1
  63. package/dist/deadline.d.ts +30 -0
  64. package/dist/deadline.d.ts.map +1 -0
  65. package/dist/deadline.js +45 -0
  66. package/dist/deadline.js.map +1 -0
  67. package/dist/diagnose.d.ts +68 -0
  68. package/dist/diagnose.d.ts.map +1 -0
  69. package/dist/diagnose.js +115 -0
  70. package/dist/diagnose.js.map +1 -0
  71. package/dist/domain/map.d.ts.map +1 -1
  72. package/dist/domain/map.js +42 -3
  73. package/dist/domain/map.js.map +1 -1
  74. package/dist/domain/models.d.ts +46 -0
  75. package/dist/domain/models.d.ts.map +1 -1
  76. package/dist/domain/models.js +11 -1
  77. package/dist/domain/models.js.map +1 -1
  78. package/dist/output.d.ts +7 -4
  79. package/dist/output.d.ts.map +1 -1
  80. package/dist/output.js +8 -11
  81. package/dist/output.js.map +1 -1
  82. package/dist/program.d.ts +2 -1
  83. package/dist/program.d.ts.map +1 -1
  84. package/dist/program.js +15 -2
  85. package/dist/program.js.map +1 -1
  86. package/dist/protocol/connection.d.ts +10 -0
  87. package/dist/protocol/connection.d.ts.map +1 -1
  88. package/dist/protocol/connection.js +20 -3
  89. package/dist/protocol/connection.js.map +1 -1
  90. package/dist/rendering/messages.d.ts +19 -0
  91. package/dist/rendering/messages.d.ts.map +1 -0
  92. package/dist/rendering/messages.js +138 -0
  93. package/dist/rendering/messages.js.map +1 -0
  94. package/dist/runs/events.d.ts +1 -1
  95. package/dist/runs/recording.d.ts +2 -2
  96. package/dist/runs/recording.d.ts.map +1 -1
  97. package/dist/runs/recording.js +3 -3
  98. package/dist/runs/recording.js.map +1 -1
  99. package/dist/testing/mock-max.d.ts.map +1 -1
  100. package/dist/testing/mock-max.js +16 -2
  101. package/dist/testing/mock-max.js.map +1 -1
  102. package/dist/testing/sandbox.d.ts +2 -0
  103. package/dist/testing/sandbox.d.ts.map +1 -0
  104. package/dist/testing/sandbox.js +31 -0
  105. package/dist/testing/sandbox.js.map +1 -0
  106. package/dist/version.d.ts +1 -1
  107. package/dist/version.js +1 -1
  108. package/package.json +7 -3
  109. package/skills/max-cli/SKILL.md +83 -0
@@ -1,6 +1,6 @@
1
1
  import { Command } from "commander";
2
2
  import { openProfileCache } from "../cache/index.js";
3
- import { resolveOutput } from "../output.js";
3
+ import { outputFor } from "./context.js";
4
4
  /**
5
5
  * The way out, and it matters more than it looks.
6
6
  *
@@ -15,7 +15,7 @@ export const cacheCommand = () => {
15
15
  .description("forget everything this profile has cached")
16
16
  .action(async function () {
17
17
  const options = this.optsWithGlobals();
18
- const { renderer } = resolveOutput(options);
18
+ const { renderer } = outputFor(this);
19
19
  const cache = await openProfileCache(options.profile, { onProblem: (message) => renderer.note(message) });
20
20
  if (!cache) {
21
21
  renderer.result({ profile: options.profile, cleared: false });
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAY,EAAE;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,gDAAgD,CAAC,CAAA;IAElG,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,KAAK;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QACtC,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QAC3C,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAEzG,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;YAC7D,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;YACnD,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,KAAK,CAAC,KAAK,EAAE,CAAA;YACb,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;YAC5D,QAAQ,CAAC,OAAO,CAAC,iCAAiC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAA;QACvE,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAY,EAAE;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,gDAAgD,CAAC,CAAA;IAElG,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,KAAK;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QACtC,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QACpC,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAEzG,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;YAC7D,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;YACnD,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,KAAK,CAAC,KAAK,EAAE,CAAA;YACb,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;YAC5D,QAAQ,CAAC,OAAO,CAAC,iCAAiC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAA;QACvE,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,eAAO,MAAM,YAAY,QAAO,OAuB/B,CAAA"}
1
+ {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,eAAO,MAAM,YAAY,QAAO,OAgC/B,CAAA"}
@@ -1,17 +1,26 @@
1
+ import { CliError } from "@leemour/cli-core";
1
2
  import { Command } from "commander";
2
3
  import { openProfileCache } from "../cache/index.js";
3
4
  import { forCommand } from "./context.js";
4
5
  import { renderPage, window, withPaging } from "./paging.js";
5
6
  export const chatsCommand = () => {
6
7
  const command = new Command("chats").description("the chats this account is in");
7
- withPaging(command.command("list").description("the chats this account is in")).action(async function () {
8
- const context = forCommand(this.optsWithGlobals());
8
+ withPaging(command.command("list").description("the chats this account is in"))
9
+ .option("--search <text>", "only chats whose name contains this; at least 3 characters")
10
+ .option("--kind <dialog|group|channel>", "only chats of this kind")
11
+ .action(async function () {
12
+ const options = this.optsWithGlobals();
13
+ const context = forCommand(this);
9
14
  const { renderer, settings, createClient, run } = context;
10
15
  const cache = await openProfileCache(settings.profile, { onProblem: (message) => renderer.note(message) });
11
16
  await run("chats list", async (events) => {
12
17
  const client = createClient({ events, ...(cache ? { cache } : {}) });
13
18
  try {
14
- renderPage(context, await client.chats.list(window(settings)));
19
+ renderPage(context, await client.chats.list({
20
+ ...window(settings),
21
+ ...(options.search === undefined ? {} : { query: String(options.search) }),
22
+ ...(options.kind === undefined ? {} : { kind: chatKind(options.kind) }),
23
+ }));
15
24
  }
16
25
  finally {
17
26
  await client.close();
@@ -21,4 +30,16 @@ export const chatsCommand = () => {
21
30
  });
22
31
  return command;
23
32
  };
33
+ /**
34
+ * `--kind` is checked here and refused by name, rather than passed through to return nothing.
35
+ *
36
+ * A value the tool does not know is a typo, and an empty list is the one answer a typo must never
37
+ * produce — it is indistinguishable from "you are in no group chats".
38
+ */
39
+ const chatKind = (value) => {
40
+ const wanted = String(value).toLowerCase();
41
+ if (wanted === "dialog" || wanted === "group" || wanted === "channel")
42
+ return wanted;
43
+ throw new CliError("validation_error", `--kind takes dialog, group or channel, not "${String(value)}"`);
44
+ };
24
45
  //# sourceMappingURL=chats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chats.js","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE5D,MAAM,CAAC,MAAM,YAAY,GAAG,GAAY,EAAE;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAA;IAEhF,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;QAG1F,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAA;QAClD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;QACzD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAE1G,MAAM,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACvC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YAEpE,IAAI,CAAC;gBACH,UAAU,CAAC,OAAO,EAAE,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAChE,CAAC;oBAAS,CAAC;gBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;gBACpB,KAAK,EAAE,KAAK,EAAE,CAAA;YAChB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
1
+ {"version":3,"file":"chats.js","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE5D,MAAM,CAAC,MAAM,YAAY,GAAG,GAAY,EAAE;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAA;IAEhF,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;SAC5E,MAAM,CAAC,iBAAiB,EAAE,4DAA4D,CAAC;SACvF,MAAM,CAAC,+BAA+B,EAAE,yBAAyB,CAAC;SAClE,MAAM,CAAC,KAAK;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QACtC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;QACzD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAE1G,MAAM,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACvC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YAEpE,IAAI,CAAC;gBACH,UAAU,CACR,OAAO,EACP,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;oBACtB,GAAG,MAAM,CAAC,QAAQ,CAAC;oBACnB,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1E,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;iBACxE,CAAC,CACH,CAAA;YACH,CAAC;oBAAS,CAAC;gBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;gBACpB,KAAK,EAAE,KAAK,EAAE,CAAA;YAChB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAY,EAAE;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IAC1C,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACpF,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,+CAA+C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACzG,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const configCommand: () => Command;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAcnC,eAAO,MAAM,aAAa,QAAO,OAqChC,CAAA"}
@@ -0,0 +1,55 @@
1
+ import { existsSync, readdirSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { pathsAreOverridden, resolvePaths } from "@leemour/cli-core";
4
+ import { Command } from "commander";
5
+ import { forCommand } from "./context.js";
6
+ const SHOWN = [
7
+ "limit",
8
+ "timeoutMs",
9
+ "commandTimeoutMs",
10
+ "color",
11
+ "senderColors",
12
+ "record",
13
+ "keepRunsForDays",
14
+ ];
15
+ export const configCommand = () => {
16
+ const command = new Command("config").description("the settings in force, and where each one came from");
17
+ /**
18
+ * Printed whole: no field the configuration accepts can hold a secret (`src/config.ts`). Whether
19
+ * a profile has a token is not here — reading the keyring is `max doctor`'s (`CLI-12`).
20
+ */
21
+ command
22
+ .command("show")
23
+ .description("the profile, the profiles that exist, and each setting with where it came from")
24
+ .action(function () {
25
+ const { settings, renderer } = forCommand(this);
26
+ const overridden = pathsAreOverridden({ appName: "max-cli", prefix: "MAX" });
27
+ renderer.result({
28
+ profile: settings.profile,
29
+ profileFrom: settings.sources.profile,
30
+ profiles: [...new Set([...settings.configuredProfiles, ...profilesWithState()])].sort(),
31
+ configFile: settings.configPath,
32
+ configFound: settings.configFound,
33
+ pathsOverridden: overridden,
34
+ settings: SHOWN.map((setting) => ({
35
+ setting,
36
+ value: settings[setting] ?? null,
37
+ from: settings.sources[setting],
38
+ })),
39
+ });
40
+ if (overridden) {
41
+ renderer.note("MAX_CONFIG_DIR, MAX_STATE_DIR or MAX_CACHE_DIR is set — a profile's keyring entry is not the usual one, " +
42
+ "so a session made without them reads as none");
43
+ }
44
+ });
45
+ return command;
46
+ };
47
+ const profilesWithState = () => {
48
+ const dir = join(resolvePaths({ appName: "max-cli", prefix: "MAX" }).state, "profiles");
49
+ if (!existsSync(dir))
50
+ return [];
51
+ return readdirSync(dir)
52
+ .filter((name) => name.endsWith(".json"))
53
+ .map((name) => name.slice(0, -".json".length));
54
+ };
55
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,KAAK,GAAqB;IAC9B,OAAO;IACP,WAAW;IACX,kBAAkB;IAClB,OAAO;IACP,cAAc;IACd,QAAQ;IACR,iBAAiB;CAClB,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,GAAY,EAAE;IACzC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,qDAAqD,CAAC,CAAA;IAExG;;;OAGG;IACH,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gFAAgF,CAAC;SAC7F,MAAM,CAAC;QACN,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAC/C,MAAM,UAAU,GAAG,kBAAkB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QAE5E,QAAQ,CAAC,MAAM,CAAC;YACd,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO;YACrC,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,kBAAkB,EAAE,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YACvF,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,eAAe,EAAE,UAAU;YAC3B,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAChC,OAAO;gBACP,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI;gBAChC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;aAChC,CAAC,CAAC;SACJ,CAAC,CAAA;QAEF,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CACX,0GAA0G;gBACxG,8CAA8C,CACjD,CAAA;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,GAAa,EAAE;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IACvF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IAC/B,OAAO,WAAW,CAAC,GAAG,CAAC;SACpB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;AAClD,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/commands/contacts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,QAAO,OAuDlC,CAAA"}
1
+ {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/commands/contacts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,QAAO,OA+DlC,CAAA"}
@@ -14,16 +14,21 @@ export const contactsCommand = () => {
14
14
  const command = new Command("contacts").description("people you have a one-to-one chat with");
15
15
  withPaging(command.command("list").description("people you have a one-to-one chat with"))
16
16
  .option("--order <recent|name>", "newest conversation first, or alphabetical")
17
+ .option("--search <text>", "only people whose name or @username contains this; at least 3 characters")
17
18
  .action(async function () {
18
19
  const options = this.optsWithGlobals();
19
- const context = forCommand(options);
20
+ const context = forCommand(this);
20
21
  const { renderer, settings, createClient, run } = context;
21
22
  const cache = await openProfileCache(settings.profile, { onProblem: (message) => renderer.note(message) });
22
23
  const order = orderFrom(options.order);
23
24
  await run("contacts list", async (events) => {
24
25
  const client = createClient({ events, ...(cache ? { cache } : {}) });
25
26
  try {
26
- renderPage(context, await client.contacts.list({ order, ...window(settings) }));
27
+ renderPage(context, await client.contacts.list({
28
+ order,
29
+ ...window(settings),
30
+ ...(options.search === undefined ? {} : { query: String(options.search) }),
31
+ }));
27
32
  }
28
33
  finally {
29
34
  await client.close();
@@ -43,7 +48,7 @@ export const contactsCommand = () => {
43
48
  .command("sync")
44
49
  .description("forget where the last sync left off and take the whole list again")
45
50
  .action(async function () {
46
- const { renderer, settings, createClient, run } = forCommand(this.optsWithGlobals());
51
+ const { renderer, settings, createClient, run } = forCommand(this);
47
52
  const cache = await openProfileCache(settings.profile, { onProblem: (message) => renderer.note(message) });
48
53
  await run("contacts sync", async (events) => {
49
54
  const client = createClient({ events, ...(cache ? { cache } : {}) });
@@ -1 +1 @@
1
- {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/commands/contacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/commands/contacts.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,35 @@
1
- import type { Renderer, RenderFormat } from "@leemour/cli-core";
1
+ import type { Renderer, RenderFormat, Streams } from "@leemour/cli-core";
2
+ import type { Command } from "commander";
2
3
  import { MaxClient, type MaxClientOptions } from "../client.js";
3
- import { type GlobalFlags, type Settings } from "../config.js";
4
+ import { type Settings } from "../config.js";
4
5
  import { SessionStore } from "../session/store.js";
6
+ /**
7
+ * What a command writes to and talks through, when it is not the real terminal, keyring and MAX.
8
+ * `run` sets it on the program; without it everything is the real thing.
9
+ */
10
+ export interface Environment {
11
+ streams?: Streams;
12
+ tty?: boolean;
13
+ /** A store over a memory keyring, so a test never touches the owner's. */
14
+ store?: (profile: string) => SessionStore;
15
+ /** A fresh connection per client — to a scripted MAX in a test. */
16
+ connection?: () => NonNullable<MaxClientOptions["connection"]>;
17
+ }
18
+ export declare const provide: (program: Command, environment: Environment) => void;
19
+ /** For the commands that print but never need settings or a client. */
20
+ export declare const outputFor: (command: Command) => {
21
+ format: "json" | "jsonl" | "pretty";
22
+ color: boolean;
23
+ streams: Streams;
24
+ renderer: Renderer;
25
+ };
5
26
  export interface CommandContext {
6
27
  settings: Settings;
7
28
  renderer: Renderer;
8
29
  format: RenderFormat;
30
+ /** Whether the human view may use colour — the renderer's decision, handed to views that print their own text. */
31
+ color: boolean;
32
+ streams: Streams;
9
33
  store: SessionStore;
10
34
  /** Not connected yet: the action owns the `finally` that closes it — and the cache, if it opened one. */
11
35
  createClient: (extra?: Partial<Omit<MaxClientOptions, "store">>) => MaxClient;
@@ -30,5 +54,5 @@ export interface CommandContext {
30
54
  * The cache is not opened here on purpose — only the reading commands want one, and opening it
31
55
  * would create a database file for `session end`, which will never read it.
32
56
  */
33
- export declare const forCommand: (flags: GlobalFlags) => CommandContext;
57
+ export declare const forCommand: (command: Command) => CommandContext;
34
58
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,KAAK,WAAW,EAAmB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AAG/E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,YAAY,CAAA;IACpB,KAAK,EAAE,YAAY,CAAA;IACnB,yGAAyG;IACzG,YAAY,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,KAAK,SAAS,CAAA;IAC7E;;;OAGG;IACH,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;CAClG;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,WAAW,KAAG,cAwB/C,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAqC,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AAK/E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,0EAA0E;IAC1E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,YAAY,CAAA;IACzC,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,WAAW,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAA;CAC/D;AAID,eAAO,MAAM,OAAO,GAAI,SAAS,OAAO,EAAE,aAAa,WAAW,KAAG,IAEpE,CAAA;AAID,uEAAuE;AACvE,eAAO,MAAM,SAAS,GAAI,SAAS,OAAO;;;;;CAOzC,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,YAAY,CAAA;IACpB,kHAAkH;IAClH,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,YAAY,CAAA;IACnB,yGAAyG;IACzG,YAAY,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,KAAK,SAAS,CAAA;IAC7E;;;OAGG;IACH,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;CAClG;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU,GAAI,SAAS,OAAO,KAAG,cA+C7C,CAAA"}
@@ -1,8 +1,24 @@
1
1
  import { MaxClient } from "../client.js";
2
2
  import { resolveSettings } from "../config.js";
3
+ import { withDeadline } from "../deadline.js";
3
4
  import { resolveOutput } from "../output.js";
5
+ import { rootOf } from "../profile.js";
4
6
  import { recorded } from "../runs/recording.js";
5
7
  import { SessionStore } from "../session/store.js";
8
+ const environments = new WeakMap();
9
+ export const provide = (program, environment) => {
10
+ environments.set(program, environment);
11
+ };
12
+ const environmentOf = (command) => environments.get(rootOf(command)) ?? {};
13
+ /** For the commands that print but never need settings or a client. */
14
+ export const outputFor = (command) => {
15
+ const { streams, tty } = environmentOf(command);
16
+ return resolveOutput({
17
+ ...command.optsWithGlobals(),
18
+ ...(streams ? { streams } : {}),
19
+ ...(tty === undefined ? {} : { tty }),
20
+ });
21
+ };
6
22
  /**
7
23
  * Everything a command needs, resolved once — and **the only place a `MaxClient` is built.**
8
24
  *
@@ -18,23 +34,44 @@ import { SessionStore } from "../session/store.js";
18
34
  * The cache is not opened here on purpose — only the reading commands want one, and opening it
19
35
  * would create a database file for `session end`, which will never read it.
20
36
  */
21
- export const forCommand = (flags) => {
22
- const settings = resolveSettings(flags);
23
- const { renderer, format } = resolveOutput(settings);
24
- const store = new SessionStore({ profile: settings.profile });
37
+ export const forCommand = (command) => {
38
+ const environment = environmentOf(command);
39
+ const settings = resolveSettings(command.optsWithGlobals());
40
+ const { renderer, format, color, streams } = resolveOutput({
41
+ ...settings,
42
+ ...(environment.streams ? { streams: environment.streams } : {}),
43
+ ...(environment.tty === undefined ? {} : { tty: environment.tty }),
44
+ });
45
+ const store = environment.store?.(settings.profile) ?? new SessionStore({ profile: settings.profile });
46
+ // Every client this command builds, so the deadline can shut them. There is always one; relying
47
+ // on that is what makes the second one, some day, the leak that keeps the process alive.
48
+ const clients = [];
25
49
  return {
26
50
  settings,
27
51
  renderer,
28
52
  format,
53
+ color,
54
+ streams,
29
55
  store,
30
- createClient: (extra = {}) => new MaxClient({ store, timeoutMs: settings.timeoutMs, warn: renderer.note, ...extra }),
31
- run: (command, body) => recorded({
56
+ createClient: (extra = {}) => {
57
+ const client = new MaxClient({
58
+ store,
59
+ timeoutMs: settings.timeoutMs,
60
+ warn: renderer.note,
61
+ ...(environment.connection ? { connection: environment.connection() } : {}),
62
+ ...extra,
63
+ });
64
+ clients.push(client);
65
+ return client;
66
+ },
67
+ run: (command, body) => withDeadline(settings.commandTimeoutMs, clients, () => recorded({
32
68
  command,
33
69
  profile: settings.profile,
34
- options: { record: settings.record, verbose: settings.verbose },
70
+ options: { record: settings.record, trace: settings.trace },
35
71
  format,
72
+ streams,
36
73
  keepDays: settings.keepRunsForDays,
37
- }, body),
74
+ }, body)),
38
75
  };
39
76
  };
40
77
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAyB,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAoB,eAAe,EAAiB,MAAM,cAAc,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAgBlD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAkB,EAAkB,EAAE;IAC/D,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IACpD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IAE7D,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,KAAK;QACL,YAAY,EAAE,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE,CAC3B,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;QACxF,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CACrB,QAAQ,CACN;YACE,OAAO;YACP,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;YAC/D,MAAM;YACN,QAAQ,EAAE,QAAQ,CAAC,eAAe;SACnC,EACD,IAAI,CACL;KACJ,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * The state every other command depends on, read from disk and **never from MAX**.
4
+ *
5
+ * ⚠ **It must answer when everything is broken**, because that is the only time anybody runs it.
6
+ * No session, no configuration file, a cache written by a newer `max`, a keyring that will not
7
+ * open — each is a field in the answer and none is an exception. A diagnosis that fails with
8
+ * `authentication_error` when asked "do I have a session" is worth nothing.
9
+ *
10
+ * It is a thin shell over `diagnose` on purpose: the gathering is worth asserting on field by
11
+ * field, and a command body is a worse place to do that from than a function that takes its
12
+ * environment as arguments.
13
+ *
14
+ * `max config show` is the neighbouring half and does not overlap: that one reads what was
15
+ * configured, this one reads what exists.
16
+ */
17
+ export declare const doctorCommand: () => Command;
18
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa,QAAO,OA6ChC,CAAA"}
@@ -0,0 +1,72 @@
1
+ import { Command } from "commander";
2
+ import { diagnose } from "../diagnose.js";
3
+ import { forCommand } from "./context.js";
4
+ /**
5
+ * The state every other command depends on, read from disk and **never from MAX**.
6
+ *
7
+ * ⚠ **It must answer when everything is broken**, because that is the only time anybody runs it.
8
+ * No session, no configuration file, a cache written by a newer `max`, a keyring that will not
9
+ * open — each is a field in the answer and none is an exception. A diagnosis that fails with
10
+ * `authentication_error` when asked "do I have a session" is worth nothing.
11
+ *
12
+ * It is a thin shell over `diagnose` on purpose: the gathering is worth asserting on field by
13
+ * field, and a command body is a worse place to do that from than a function that takes its
14
+ * environment as arguments.
15
+ *
16
+ * `max config show` is the neighbouring half and does not overlap: that one reads what was
17
+ * configured, this one reads what exists.
18
+ */
19
+ export const doctorCommand = () => {
20
+ const command = new Command("doctor").description("the state this installation is in, without contacting MAX");
21
+ command.action(async function () {
22
+ const { renderer, settings, format, run, store } = forCommand(this);
23
+ await run("doctor", async () => {
24
+ const report = await diagnose({
25
+ profile: settings.profile,
26
+ // Reading the keyring is the one thing here that can prompt or hang on a locked keyring,
27
+ // so its failure is "no token found" rather than a failed command.
28
+ hasKeyringToken: () => {
29
+ try {
30
+ return store.readToken() !== undefined;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ },
36
+ });
37
+ renderer.result(format === "pretty" ? forPerson(report, settings.profile) : report);
38
+ // ⚠ Said whenever the environment moved the keyring, because this is the one failure with no
39
+ // other symptom: the profile is there, the login happened, and the answer is "no session".
40
+ if (report.keyring.movedByEnvironment) {
41
+ renderer.note("MAX_CONFIG_DIR, MAX_STATE_DIR or MAX_CACHE_DIR is set, which changes the keyring entry — " +
42
+ "a login done without them is invisible here, and the other way round");
43
+ }
44
+ if (!report.cache.readable) {
45
+ renderer.note(`the local copy was written by a newer max (schema ${report.cache.schemaVersion}, this one speaks ` +
46
+ `${report.cache.speaks}) — commands still work, but the copy is ignored until \`max cache clear\``);
47
+ }
48
+ if (!report.token.present) {
49
+ renderer.note(`no token for this profile — \`max ${settings.profile} session start\` stores one`);
50
+ }
51
+ });
52
+ });
53
+ return command;
54
+ };
55
+ /** One line per row: the pretty renderer prints a flat object and does not descend into one. */
56
+ const forPerson = (report, profile) => ({
57
+ profile,
58
+ token: report.token.present ? `yes, from the ${report.token.from}` : "none",
59
+ keyring: report.keyring.movedByEnvironment
60
+ ? `${report.keyring.service} (moved by the environment)`
61
+ : report.keyring.service,
62
+ "logged in": report.session.exists
63
+ ? `${report.session.logins ?? 0} time(s)${report.session.lastLoginAt ? `, last ${report.session.lastLoginAt}` : ""}`
64
+ : "never on this machine",
65
+ "account known": report.session.viewerId,
66
+ "profiles logged in": report.loggedInProfiles.length === 0 ? "none" : report.loggedInProfiles.join(", "),
67
+ "local copy": report.cache.exists
68
+ ? `schema ${report.cache.schemaVersion ?? "unreadable"}, this max speaks ${report.cache.speaks}`
69
+ : "not created yet",
70
+ runs: `${report.runs.kept} kept in ${report.runs.directory}`,
71
+ });
72
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/commands/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,eAAO,MAAM,eAAe,QAAO,OA8ElC,CAAA"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/commands/messages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,eAAO,MAAM,eAAe,QAAO,OAiKlC,CAAA"}