@liberseek/boft-cli-win32-arm64 0.7.1 → 0.7.3

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.
@@ -15306,10 +15306,21 @@ var harnessCommandDescriptorSchema = external_exports.object({
15306
15306
  invocation: commandInvocationSchema,
15307
15307
  label: commandLabelSchema,
15308
15308
  description: commandDescriptionSchema.optional(),
15309
- argumentMode: external_exports.enum(["none", "text"])
15309
+ argumentMode: external_exports.enum(["none", "text"]),
15310
+ /**
15311
+ * Native distinction reported by the Harness. Omitted when the Harness does
15312
+ * not tell skills and commands apart; consumers treat that as "command".
15313
+ */
15314
+ kind: external_exports.enum(["command", "skill"]).optional()
15310
15315
  }).strict();
15311
15316
  var harnessCommandCatalogSchema = external_exports.object({
15312
- commands: external_exports.array(harnessCommandDescriptorSchema)
15317
+ commands: external_exports.array(harnessCommandDescriptorSchema),
15318
+ /**
15319
+ * `live` when the catalog includes what a native Session reports for its
15320
+ * workspace (custom commands, skills); `static` for Adapter built-ins only.
15321
+ * Omitted by Adapters; set by the Host on inspection results.
15322
+ */
15323
+ source: external_exports.enum(["live", "static"]).optional()
15313
15324
  }).strict().superRefine((catalog, context) => {
15314
15325
  const ids = /* @__PURE__ */ new Set();
15315
15326
  for (const [index, command] of catalog.commands.entries()) {
@@ -15323,7 +15334,11 @@ var harnessCommandCatalogSchema = external_exports.object({
15323
15334
  ids.add(command.id);
15324
15335
  }
15325
15336
  });
15326
- var harnessCommandsInspectParamsSchema = external_exports.object({ harnessId: harnessIdSchema }).strict();
15337
+ var harnessCommandsInspectParamsSchema = external_exports.object({
15338
+ harnessId: harnessIdSchema,
15339
+ /** Workspace of a draft without a Thread, for its live catalog when known. */
15340
+ cwd: external_exports.string().min(1).optional()
15341
+ }).strict();
15327
15342
  var threadCommandsInspectParamsSchema = external_exports.object({
15328
15343
  threadId: hostThreadIdSchema
15329
15344
  }).strict();
@@ -15311,10 +15311,21 @@ var harnessCommandDescriptorSchema = external_exports.object({
15311
15311
  invocation: commandInvocationSchema,
15312
15312
  label: commandLabelSchema,
15313
15313
  description: commandDescriptionSchema.optional(),
15314
- argumentMode: external_exports.enum(["none", "text"])
15314
+ argumentMode: external_exports.enum(["none", "text"]),
15315
+ /**
15316
+ * Native distinction reported by the Harness. Omitted when the Harness does
15317
+ * not tell skills and commands apart; consumers treat that as "command".
15318
+ */
15319
+ kind: external_exports.enum(["command", "skill"]).optional()
15315
15320
  }).strict();
15316
15321
  var harnessCommandCatalogSchema = external_exports.object({
15317
- commands: external_exports.array(harnessCommandDescriptorSchema)
15322
+ commands: external_exports.array(harnessCommandDescriptorSchema),
15323
+ /**
15324
+ * `live` when the catalog includes what a native Session reports for its
15325
+ * workspace (custom commands, skills); `static` for Adapter built-ins only.
15326
+ * Omitted by Adapters; set by the Host on inspection results.
15327
+ */
15328
+ source: external_exports.enum(["live", "static"]).optional()
15318
15329
  }).strict().superRefine((catalog, context) => {
15319
15330
  const ids = /* @__PURE__ */ new Set();
15320
15331
  for (const [index, command] of catalog.commands.entries()) {
@@ -15328,7 +15339,11 @@ var harnessCommandCatalogSchema = external_exports.object({
15328
15339
  ids.add(command.id);
15329
15340
  }
15330
15341
  });
15331
- var harnessCommandsInspectParamsSchema = external_exports.object({ harnessId: harnessIdSchema }).strict();
15342
+ var harnessCommandsInspectParamsSchema = external_exports.object({
15343
+ harnessId: harnessIdSchema,
15344
+ /** Workspace of a draft without a Thread, for its live catalog when known. */
15345
+ cwd: external_exports.string().min(1).optional()
15346
+ }).strict();
15332
15347
  var threadCommandsInspectParamsSchema = external_exports.object({
15333
15348
  threadId: hostThreadIdSchema
15334
15349
  }).strict();
@@ -17665,6 +17680,124 @@ function parseHostUsage(value) {
17665
17680
  return { ...value };
17666
17681
  }
17667
17682
 
17683
+ // ../../harness-adapter/dist/live-command-catalog.js
17684
+ var COMMON_EXCLUDED_LIVE_COMMANDS = /* @__PURE__ */ new Set([
17685
+ // Session lifecycle
17686
+ "branch",
17687
+ "clear",
17688
+ "exit",
17689
+ "fork",
17690
+ "fresh",
17691
+ "new",
17692
+ "quit",
17693
+ "rename",
17694
+ "rename-chat",
17695
+ "reset",
17696
+ "resume",
17697
+ "rewind",
17698
+ "session",
17699
+ "sessions",
17700
+ // Desktop-owned configuration
17701
+ "autocompact",
17702
+ "color",
17703
+ "config",
17704
+ "effort",
17705
+ "fast",
17706
+ "keybindings",
17707
+ "model",
17708
+ "models",
17709
+ "output-style",
17710
+ "permissions",
17711
+ "settings",
17712
+ "statusline",
17713
+ "terminal-setup",
17714
+ "theme",
17715
+ "vim",
17716
+ // Trust and approval policy
17717
+ "always-approve",
17718
+ "auto-mode-setup",
17719
+ // Native login
17720
+ "login",
17721
+ "logout",
17722
+ // Work outliving the Turn
17723
+ "autopilot",
17724
+ "background",
17725
+ "bg",
17726
+ "goal",
17727
+ "jobs",
17728
+ "loop",
17729
+ "multitask",
17730
+ "queue",
17731
+ "remote-control",
17732
+ "schedule",
17733
+ "steer",
17734
+ // Native terminal UI
17735
+ "copy",
17736
+ "debug",
17737
+ "feedback",
17738
+ "heapdump",
17739
+ "share",
17740
+ "shell",
17741
+ // Plugin and MCP management
17742
+ "marketplace",
17743
+ "mcp",
17744
+ "plugins",
17745
+ "reload-plugins"
17746
+ ]);
17747
+ var COMMON_EXCLUDED_LIVE_COMMAND_PREFIXES = ["__", "hooks-"];
17748
+ function isExcludedLiveCommand(name, kind, extra = {}) {
17749
+ const normalized = name.trim().replace(/^\//u, "");
17750
+ if (new Set(extra.names ?? []).has(normalized))
17751
+ return true;
17752
+ if (extra.prefixes?.some((prefix) => normalized.startsWith(prefix)))
17753
+ return true;
17754
+ if (kind === "skill")
17755
+ return false;
17756
+ return COMMON_EXCLUDED_LIVE_COMMANDS.has(normalized) || COMMON_EXCLUDED_LIVE_COMMAND_PREFIXES.some((prefix) => normalized.startsWith(prefix));
17757
+ }
17758
+ function liveHarnessCommandPrompt(catalog, idPrefix, commandId, argumentText) {
17759
+ if (!commandId.startsWith(idPrefix))
17760
+ return null;
17761
+ const descriptor = catalog.commands.find(({ id }) => id === commandId);
17762
+ if (!descriptor)
17763
+ return null;
17764
+ const text2 = typeof argumentText === "string" ? argumentText.trim() : "";
17765
+ return text2 ? `${descriptor.invocation} ${text2}` : descriptor.invocation;
17766
+ }
17767
+ function mergeLiveHarnessCommands(builtIns, idPrefix, live, exclusions = {}) {
17768
+ if (!live)
17769
+ return builtIns;
17770
+ const invocations = new Set(builtIns.commands.map(({ invocation }) => invocation));
17771
+ const ids = new Set(builtIns.commands.map(({ id }) => id));
17772
+ const dynamic = [];
17773
+ for (const command of live) {
17774
+ const name = command.name.trim().replace(/^\//u, "");
17775
+ if (!name || /\s/u.test(name))
17776
+ continue;
17777
+ if (isExcludedLiveCommand(name, command.kind, exclusions))
17778
+ continue;
17779
+ const invocation = `/${name}`;
17780
+ const id = `${idPrefix}${name.replace(/[^A-Za-z0-9._:-]/gu, "-")}`.slice(0, 128);
17781
+ if (invocations.has(invocation) || ids.has(id))
17782
+ continue;
17783
+ const description = command.description?.trim().slice(0, 512);
17784
+ const parsed = harnessCommandDescriptorSchema.safeParse({
17785
+ id,
17786
+ invocation,
17787
+ label: name.slice(0, 128),
17788
+ ...description ? { description } : {},
17789
+ argumentMode: "text",
17790
+ kind: command.kind
17791
+ });
17792
+ if (!parsed.success)
17793
+ continue;
17794
+ invocations.add(invocation);
17795
+ ids.add(id);
17796
+ dynamic.push(parsed.data);
17797
+ }
17798
+ return harnessCommandCatalogSchema.parse({ commands: [...builtIns.commands, ...dynamic] });
17799
+ }
17800
+
17668
17801
  // dist/pi-workflow-child-history.js
17669
17802
  import { createHash as createHash2 } from "node:crypto";
17670
17803
  import { constants } from "node:fs";
@@ -18150,6 +18283,50 @@ import { spawn, spawnSync } from "node:child_process";
18150
18283
  import { randomUUID as randomUUID4 } from "node:crypto";
18151
18284
  import path8 from "node:path";
18152
18285
 
18286
+ // dist/pi-slash-commands.js
18287
+ var DYNAMIC_ID_PREFIX = "pi.slash.";
18288
+ var PI_EXCLUDED_COMMANDS = [
18289
+ "subagents-detach",
18290
+ "subagents-fleet",
18291
+ "subagents-generate-profiles",
18292
+ "subagents-inspect-rpc",
18293
+ "subagents-load-profile",
18294
+ "subagents-refresh-provider-models",
18295
+ "subagents-steer",
18296
+ "subagents-stop",
18297
+ "subagents-watchdog"
18298
+ ];
18299
+ function parsePiNativeCommands(response) {
18300
+ const data = typeof response === "object" && response !== null ? response.data : void 0;
18301
+ if (!Array.isArray(data?.commands))
18302
+ return [];
18303
+ return data.commands.flatMap((entry) => {
18304
+ if (typeof entry !== "object" || entry === null)
18305
+ return [];
18306
+ const record6 = entry;
18307
+ const name = typeof record6.name === "string" ? record6.name.trim().replace(/^\//u, "") : "";
18308
+ if (!name)
18309
+ return [];
18310
+ return [
18311
+ {
18312
+ name,
18313
+ ...typeof record6.description === "string" ? { description: record6.description } : {},
18314
+ ...typeof record6.source === "string" ? { source: record6.source } : {}
18315
+ }
18316
+ ];
18317
+ });
18318
+ }
18319
+ function piLiveCommandCatalog(builtIns, native) {
18320
+ return mergeLiveHarnessCommands(builtIns, DYNAMIC_ID_PREFIX, native?.map((command) => ({
18321
+ name: command.name,
18322
+ ...command.description ? { description: command.description } : {},
18323
+ kind: command.source === "skill" ? "skill" : "command"
18324
+ })) ?? null, { names: PI_EXCLUDED_COMMANDS });
18325
+ }
18326
+ function piDynamicCommandPrompt(catalog, commandId, argumentText) {
18327
+ return liveHarnessCommandPrompt(catalog, DYNAMIC_ID_PREFIX, commandId, argumentText);
18328
+ }
18329
+
18153
18330
  // dist/pi-usage.js
18154
18331
  function isRecord5(value) {
18155
18332
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -18629,6 +18806,10 @@ var PiRpcSession = class {
18629
18806
  }
18630
18807
  return this;
18631
18808
  }
18809
+ /** Live slash commands, prompt templates and skills of the running Pi Session. */
18810
+ async getCommands() {
18811
+ return parsePiNativeCommands(await this.#send("get_commands", {}));
18812
+ }
18632
18813
  async getEntries() {
18633
18814
  try {
18634
18815
  return parseSessionHistory(await this.#send("get_entries", {}));
@@ -19810,6 +19991,7 @@ var PiHarnessSession = class {
19810
19991
  #starting = null;
19811
19992
  #state = {};
19812
19993
  #transport = null;
19994
+ #liveCommands = piCommandCatalog;
19813
19995
  #usage;
19814
19996
  #usageGeneration = 0;
19815
19997
  #usageRefreshSequence = 0;
@@ -19833,7 +20015,7 @@ var PiHarnessSession = class {
19833
20015
  subagents: { observe: true, readTranscript: true }
19834
20016
  };
19835
20017
  this.commands = {
19836
- list: async () => ({ ok: true, value: piCommandCatalog }),
20018
+ list: async () => ({ ok: true, value: await this.#refreshLiveCommands() }),
19837
20019
  execute: (command) => this.#executeHarnessCommand(command)
19838
20020
  };
19839
20021
  this.#transport = options.startedTransport ?? null;
@@ -20243,7 +20425,31 @@ var PiHarnessSession = class {
20243
20425
  return { ok: false, error: normalized };
20244
20426
  }
20245
20427
  }
20428
+ /**
20429
+ * Built-ins plus the running Session's commands. Never starts the process
20430
+ * just to list commands; an unstarted Session reports the built-ins.
20431
+ */
20432
+ async #refreshLiveCommands() {
20433
+ const transport = this.#transport;
20434
+ if (this.#phase === "open" && transport?.getCommands) {
20435
+ try {
20436
+ this.#liveCommands = piLiveCommandCatalog(piCommandCatalog, await transport.getCommands());
20437
+ } catch {
20438
+ }
20439
+ }
20440
+ return this.#liveCommands;
20441
+ }
20246
20442
  async #executeHarnessCommand(command) {
20443
+ const argumentText = command.arguments?.text;
20444
+ const dynamicPrompt = piDynamicCommandPrompt(this.#liveCommands, command.commandId, typeof argumentText === "string" ? argumentText : void 0);
20445
+ if (dynamicPrompt !== null) {
20446
+ const started = await this.execute({
20447
+ type: "turn.start",
20448
+ turnId: command.turnId,
20449
+ input: [{ type: "text", text: dynamicPrompt }]
20450
+ });
20451
+ return started.ok ? { ok: true, value: { turnId: command.turnId } } : started;
20452
+ }
20247
20453
  if (command.commandId !== "pi.compact") {
20248
20454
  return {
20249
20455
  ok: false,
@@ -20969,6 +21175,7 @@ var PiHarnessSession = class {
20969
21175
  var PiAdapter = class {
20970
21176
  credentialImports;
20971
21177
  commandCatalog = piCommandCatalog;
21178
+ liveCommandCatalog = true;
20972
21179
  harnessId = piHarnessId2;
20973
21180
  subagents = {
20974
21181
  readSnapshot: async ({ parent, nativeSubagentId, cwd }) => {