tickmarkr 1.48.0 → 1.48.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -64,10 +64,15 @@ export const kimi = {
64
64
  : { ...h, authed: false, note: "no valid ~/.kimi-code/credentials/kimi-code.json (kimi login to fix)" };
65
65
  },
66
66
  channels: (cfg) => channelsFromConfig("kimi", cfg),
67
- // KIMI-02 headless. -p prompt mode + -y yolo + explicit model. kimi 0.27.0 rejects -p combined
68
- // with -y at parse time tickmarkr still emits both per harness contract; interactive uses -y.
69
- headlessCommand: (promptFile, model) => `kimi -p "$(cat ${shq(promptFile)})" -y --model ${shq(model)} --output-format text`,
70
- interactiveCommand: (promptFile, model) => `kimi -y --model ${shq(model)} "$(cat ${shq(promptFile)})"`,
67
+ // KIMI-02 headless. -p prompt mode + explicit model, NO permission flag: kimi 0.26.0 rejects
68
+ // -p combined with -y/--auto at argument parse time ("Cannot combine --prompt with --yolo",
69
+ // OBS-67 doctor probes all failed on it), and prompt mode is already non-interactive with
70
+ // tool actions auto-approved (live-verified 2026-07-17: unattended file write succeeded).
71
+ headlessCommand: (promptFile, model) => `kimi -p "$(cat ${shq(promptFile)})" --model ${shq(model)} --output-format text`,
72
+ // kimi 0.26.0 has NO TUI argv-seeding surface: a positional prompt parses as a subcommand
73
+ // ("unknown command '…'", live-verified 2026-07-17, OBS-67) and -p is non-interactive-only.
74
+ // null → the daemon's print fallback (types.ts:101) keeps kimi workers visible without a TUI.
75
+ interactiveCommand: () => null,
71
76
  invoke(task, _cwd, a, ctx) {
72
77
  return { command: this.headlessCommand(ctx.promptFile, a.model) };
73
78
  },
@@ -33,6 +33,9 @@ function stylize(out) {
33
33
  }
34
34
  export async function doctor(_argv, cwd = process.cwd(), adapters = allAdapters(), opts = {}) {
35
35
  const cfg = loadConfig(cwd);
36
+ // banner at START — the logo greets the operator before the ~60s probe wait, never trailing it (operator report 2026-07-17)
37
+ if (opts.banner !== false && visual())
38
+ process.stdout.write(BANNER);
36
39
  // stderr, live: auth probes are real LLM calls (up to 30s per configured model) and the CLI
37
40
  // otherwise prints nothing until the end — silence here reads as a hang (v1.33.1)
38
41
  console.error("probing installed agent CLIs — one short LLM call per configured model, may take a minute...");
@@ -165,6 +168,5 @@ export async function doctor(_argv, cwd = process.cwd(), adapters = allAdapters(
165
168
  const modelSummary = modelStatus.length || preferStatus.length
166
169
  ? `\nmodel status:\n${[...modelStatus, ...preferStatus].join("\n")}`
167
170
  : "";
168
- const body = stylize(`tickmarkr doctor — capability matrix:\n${rows.join("\n")}${modelSummary}${drift}\nwrote ${stateDirName(cwd)}/doctor.json`);
169
- return opts.banner !== false && visual() ? BANNER + body : body;
171
+ return stylize(`tickmarkr doctor — capability matrix:\n${rows.join("\n")}${modelSummary}${drift}\nwrote ${stateDirName(cwd)}/doctor.json`);
170
172
  }
@@ -210,6 +210,8 @@ export async function init(argv, cwd = process.cwd()) {
210
210
  yes: { type: "boolean" },
211
211
  },
212
212
  });
213
+ // banner at START on the visual surface — every init path, not just the wizard, and never trailing the probe (operator report 2026-07-17)
214
+ emitBanner();
213
215
  const gdir = values["global-dir"] ?? globalConfigDir();
214
216
  mkdirSync(gdir, { recursive: true });
215
217
  const notes = [];
@@ -262,8 +264,5 @@ export async function init(argv, cwd = process.cwd()) {
262
264
  }
263
265
  if (values.agent)
264
266
  await installAgentFiles(cwd, values.force ?? false, values.docs ?? false, notes);
265
- const body = `${notes.join("\n")}\n${doc}\n${nextSteps(cwd, SCAFFOLD_SPEC)}\n${ENVIRONMENTS_FOOTER}`;
266
- if (visual() && !bannerEmitted)
267
- return BANNER + body;
268
- return body;
267
+ return `${notes.join("\n")}\n${doc}\n${nextSteps(cwd, SCAFFOLD_SPEC)}\n${ENVIRONMENTS_FOOTER}`;
269
268
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tickmarkr",
3
- "version": "1.48.0",
3
+ "version": "1.48.2",
4
4
  "description": "Spec in, verified work out.",
5
5
  "type": "module",
6
6
  "license": "MIT",