superceo 0.3.4 → 0.3.6

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 (157) hide show
  1. package/dist/index.js +85 -52
  2. package/dist/index.js.map +3 -3
  3. package/dist/migrations/0000_mature_masked_marvel.sql +208 -0
  4. package/dist/migrations/0001_fast_northstar.sql +87 -0
  5. package/dist/migrations/0002_big_zaladane.sql +1 -0
  6. package/dist/migrations/0003_shallow_quentin_quire.sql +5 -0
  7. package/dist/migrations/0004_issue_identifiers.sql +28 -0
  8. package/dist/migrations/0005_chief_luke_cage.sql +19 -0
  9. package/dist/migrations/0006_overjoyed_mister_sinister.sql +36 -0
  10. package/dist/migrations/0007_new_quentin_quire.sql +20 -0
  11. package/dist/migrations/0008_amused_zzzax.sql +1 -0
  12. package/dist/migrations/0009_fast_jackal.sql +36 -0
  13. package/dist/migrations/0010_stale_justin_hammer.sql +37 -0
  14. package/dist/migrations/0011_windy_corsair.sql +18 -0
  15. package/dist/migrations/0012_perpetual_ser_duncan.sql +2 -0
  16. package/dist/migrations/0013_dashing_wasp.sql +4 -0
  17. package/dist/migrations/0014_many_mikhail_rasputin.sql +135 -0
  18. package/dist/migrations/0015_project_color_archived.sql +2 -0
  19. package/dist/migrations/0016_agent_icon.sql +1 -0
  20. package/dist/migrations/0017_tiresome_gabe_jones.sql +51 -0
  21. package/dist/migrations/0018_flat_sleepwalker.sql +26 -0
  22. package/dist/migrations/0019_public_victor_mancha.sql +18 -0
  23. package/dist/migrations/0020_white_anita_blake.sql +1 -0
  24. package/dist/migrations/0021_chief_vindicator.sql +1 -0
  25. package/dist/migrations/0022_company_brand_color.sql +1 -0
  26. package/dist/migrations/0023_fair_lethal_legion.sql +3 -0
  27. package/dist/migrations/0024_far_beast.sql +2 -0
  28. package/dist/migrations/0025_nasty_salo.sql +15 -0
  29. package/dist/migrations/0026_lying_pete_wisdom.sql +39 -0
  30. package/dist/migrations/0027_tranquil_tenebrous.sql +2 -0
  31. package/dist/migrations/0028_harsh_goliath.sql +54 -0
  32. package/dist/migrations/0029_plugin_tables.sql +177 -0
  33. package/dist/migrations/0030_rich_magneto.sql +12 -0
  34. package/dist/migrations/0031_zippy_magma.sql +51 -0
  35. package/dist/migrations/0032_pretty_doctor_octopus.sql +102 -0
  36. package/dist/migrations/0033_shiny_black_tarantula.sql +2 -0
  37. package/dist/migrations/0034_fat_dormammu.sql +2 -0
  38. package/dist/migrations/0035_marvelous_satana.sql +91 -0
  39. package/dist/migrations/0036_cheerful_nitro.sql +9 -0
  40. package/dist/migrations/0037_friendly_eddie_brock.sql +29 -0
  41. package/dist/migrations/0038_careless_iron_monger.sql +5 -0
  42. package/dist/migrations/0039_fat_magneto.sql +161 -0
  43. package/dist/migrations/0040_eager_shotgun.sql +5 -0
  44. package/dist/migrations/0041_curly_maria_hill.sql +1 -0
  45. package/dist/migrations/0042_spotty_the_renegades.sql +26 -0
  46. package/dist/migrations/0043_reflective_captain_universe.sql +6 -0
  47. package/dist/migrations/0044_illegal_toad.sql +56 -0
  48. package/dist/migrations/0045_workable_shockwave.sql +17 -0
  49. package/dist/migrations/0046_smooth_sentinels.sql +11 -0
  50. package/dist/migrations/0047_overjoyed_groot.sql +102 -0
  51. package/dist/migrations/0048_flashy_marrow.sql +1 -0
  52. package/dist/migrations/0049_flawless_abomination.sql +21 -0
  53. package/dist/migrations/0050_stiff_luckman.sql +1 -0
  54. package/dist/migrations/0051_young_korg.sql +5 -0
  55. package/dist/migrations/0052_mushy_trauma.sql +26 -0
  56. package/dist/migrations/0053_sharp_wild_child.sql +18 -0
  57. package/dist/migrations/0054_draft_routines.sql +2 -0
  58. package/dist/migrations/0055_faithful_doctor_octopus.sql +48 -0
  59. package/dist/migrations/0056_equal_sabretooth.sql +34 -0
  60. package/dist/migrations/0057_ordinary_khan.sql +5 -0
  61. package/dist/migrations/0058_sad_wolf_cub.sql +2 -0
  62. package/dist/migrations/0059_rich_jackpot.sql +4 -0
  63. package/dist/migrations/0060_orange_nightshade.sql +60 -0
  64. package/dist/migrations/0061_parallel_puma.sql +1 -0
  65. package/dist/migrations/0062_goofy_lethal_legion.sql +26 -0
  66. package/dist/migrations/0063_luxuriant_doctor_spectrum.sql +23 -0
  67. package/dist/migrations/0064_lead_platform_user.sql +2 -0
  68. package/dist/migrations/0065_wild_next_avengers.sql +14 -0
  69. package/dist/migrations/0066_late_stark_industries.sql +5 -0
  70. package/dist/migrations/0067_instance_backup_settings.sql +1 -0
  71. package/dist/migrations/0068_tiresome_ma_gnuci.sql +1 -0
  72. package/dist/migrations/0069_lazy_zaladane.sql +106 -0
  73. package/dist/migrations/0070_lame_wendigo.sql +1 -0
  74. package/dist/migrations/0071_content_analytics.sql +71 -0
  75. package/dist/migrations/0072_quota_gate_feature_scope.sql +3 -0
  76. package/dist/migrations/0073_instance_update_settings.sql +1 -0
  77. package/dist/migrations/0074_local_tools_config.sql +1 -0
  78. package/dist/migrations/0075_liveness_recovery_dedupe.sql +15 -0
  79. package/dist/migrations/0076_active_run_output_watchdog.sql +91 -0
  80. package/dist/migrations/0077_issue_tree_holds.sql +107 -0
  81. package/dist/migrations/0078_issue_reference_mentions.sql +50 -0
  82. package/dist/migrations/0079_subscription_quota_lane.sql +4 -0
  83. package/dist/migrations/0080_lead_product_user.sql +3 -0
  84. package/dist/migrations/0081_lead_product_user_split_x.sql +8 -0
  85. package/dist/migrations/0082_agent_image_url.sql +1 -0
  86. package/dist/migrations/0083_chat_sessions_target_agent.sql +2 -0
  87. package/dist/migrations/0084_document_folders.sql +22 -0
  88. package/dist/migrations/0085_eager_mulholland_black.sql +4 -0
  89. package/dist/migrations/meta/0000_snapshot.json +1743 -0
  90. package/dist/migrations/meta/0001_snapshot.json +2441 -0
  91. package/dist/migrations/meta/0002_snapshot.json +2454 -0
  92. package/dist/migrations/meta/0003_snapshot.json +2502 -0
  93. package/dist/migrations/meta/0005_snapshot.json +2719 -0
  94. package/dist/migrations/meta/0006_snapshot.json +3048 -0
  95. package/dist/migrations/meta/0007_snapshot.json +3258 -0
  96. package/dist/migrations/meta/0008_snapshot.json +3264 -0
  97. package/dist/migrations/meta/0009_snapshot.json +3587 -0
  98. package/dist/migrations/meta/0010_snapshot.json +3929 -0
  99. package/dist/migrations/meta/0011_snapshot.json +4068 -0
  100. package/dist/migrations/meta/0012_snapshot.json +4087 -0
  101. package/dist/migrations/meta/0013_snapshot.json +4118 -0
  102. package/dist/migrations/meta/0014_snapshot.json +5187 -0
  103. package/dist/migrations/meta/0017_snapshot.json +5215 -0
  104. package/dist/migrations/meta/0018_snapshot.json +5450 -0
  105. package/dist/migrations/meta/0019_snapshot.json +5603 -0
  106. package/dist/migrations/meta/0020_snapshot.json +5603 -0
  107. package/dist/migrations/meta/0021_snapshot.json +5609 -0
  108. package/dist/migrations/meta/0023_snapshot.json +5633 -0
  109. package/dist/migrations/meta/0024_snapshot.json +5693 -0
  110. package/dist/migrations/meta/0025_snapshot.json +5849 -0
  111. package/dist/migrations/meta/0027_snapshot.json +6205 -0
  112. package/dist/migrations/meta/0028_snapshot.json +6710 -0
  113. package/dist/migrations/meta/0029_snapshot.json +7899 -0
  114. package/dist/migrations/meta/0030_snapshot.json +8003 -0
  115. package/dist/migrations/meta/0031_snapshot.json +7242 -0
  116. package/dist/migrations/meta/0032_snapshot.json +7733 -0
  117. package/dist/migrations/meta/0033_snapshot.json +9038 -0
  118. package/dist/migrations/meta/0034_snapshot.json +9039 -0
  119. package/dist/migrations/meta/0035_snapshot.json +9959 -0
  120. package/dist/migrations/meta/0036_snapshot.json +10023 -0
  121. package/dist/migrations/meta/0037_snapshot.json +10263 -0
  122. package/dist/migrations/meta/0038_snapshot.json +11350 -0
  123. package/dist/migrations/meta/0039_snapshot.json +10308 -0
  124. package/dist/migrations/meta/0040_snapshot.json +10481 -0
  125. package/dist/migrations/meta/0041_snapshot.json +11393 -0
  126. package/dist/migrations/meta/0044_snapshot.json +11701 -0
  127. package/dist/migrations/meta/0045_snapshot.json +11857 -0
  128. package/dist/migrations/meta/0046_snapshot.json +11870 -0
  129. package/dist/migrations/meta/0047_snapshot.json +12539 -0
  130. package/dist/migrations/meta/0048_snapshot.json +12546 -0
  131. package/dist/migrations/meta/0049_snapshot.json +12766 -0
  132. package/dist/migrations/meta/0050_snapshot.json +12772 -0
  133. package/dist/migrations/meta/0051_snapshot.json +12836 -0
  134. package/dist/migrations/meta/0052_snapshot.json +13057 -0
  135. package/dist/migrations/meta/0053_snapshot.json +12979 -0
  136. package/dist/migrations/meta/0055_snapshot.json +13586 -0
  137. package/dist/migrations/meta/0056_snapshot.json +13868 -0
  138. package/dist/migrations/meta/0057_snapshot.json +13906 -0
  139. package/dist/migrations/meta/0058_snapshot.json +13918 -0
  140. package/dist/migrations/meta/0059_snapshot.json +13942 -0
  141. package/dist/migrations/meta/0060_snapshot.json +14509 -0
  142. package/dist/migrations/meta/0061_snapshot.json +14515 -0
  143. package/dist/migrations/meta/0062_snapshot.json +14717 -0
  144. package/dist/migrations/meta/0063_snapshot.json +14941 -0
  145. package/dist/migrations/meta/0065_snapshot.json +15081 -0
  146. package/dist/migrations/meta/0066_snapshot.json +15112 -0
  147. package/dist/migrations/meta/0067_snapshot.json +15119 -0
  148. package/dist/migrations/meta/0068_snapshot.json +15125 -0
  149. package/dist/migrations/meta/0069_snapshot.json +16110 -0
  150. package/dist/migrations/meta/0070_snapshot.json +16116 -0
  151. package/dist/migrations/meta/0073_snapshot.json +16584 -0
  152. package/dist/migrations/meta/0079_snapshot.json +17847 -0
  153. package/dist/migrations/meta/0080_snapshot.json +17853 -0
  154. package/dist/migrations/meta/0081_snapshot.json +17853 -0
  155. package/dist/migrations/meta/0085_snapshot.json +18068 -0
  156. package/dist/migrations/meta/_journal.json +608 -0
  157. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -8823,27 +8823,36 @@ function getCliBrandPack(env = process.env) {
8823
8823
  const path83 = nonEmpty(env.PAPERCLIP_BRAND_PACK_PATH);
8824
8824
  if (path83) {
8825
8825
  const parsed = JSON.parse(fs6.readFileSync(path83, "utf8"));
8826
+ const name2 = typeof parsed.name === "string" && parsed.name.trim() ? parsed.name.trim() : DEFAULT_BRAND.name;
8826
8827
  const branded2 = {
8827
- name: typeof parsed.name === "string" && parsed.name.trim() ? parsed.name.trim() : DEFAULT_BRAND.name,
8828
- tagline: typeof parsed.tagline === "string" && parsed.tagline.trim() ? parsed.tagline.trim() : DEFAULT_BRAND.tagline
8828
+ name: name2,
8829
+ tagline: typeof parsed.tagline === "string" && parsed.tagline.trim() ? parsed.tagline.trim() : DEFAULT_BRAND.tagline,
8830
+ command: typeof parsed.command === "string" && parsed.command.trim() ? parsed.command.trim() : deriveCommand(name2)
8829
8831
  };
8830
8832
  if (env === process.env) cachedBrand = branded2;
8831
8833
  return branded2;
8832
8834
  }
8835
+ const name = nonEmpty(env.PAPERCLIP_BRAND_NAME) ?? DEFAULT_BRAND.name;
8833
8836
  const branded = {
8834
- name: nonEmpty(env.PAPERCLIP_BRAND_NAME) ?? DEFAULT_BRAND.name,
8835
- tagline: nonEmpty(env.PAPERCLIP_BRAND_TAGLINE) ?? DEFAULT_BRAND.tagline
8837
+ name,
8838
+ tagline: nonEmpty(env.PAPERCLIP_BRAND_TAGLINE) ?? DEFAULT_BRAND.tagline,
8839
+ command: nonEmpty(env.PAPERCLIP_BRAND_COMMAND) ?? deriveCommand(name)
8836
8840
  };
8837
8841
  if (env === process.env) cachedBrand = branded;
8838
8842
  return branded;
8839
8843
  }
8844
+ function deriveCommand(name) {
8845
+ if (name === DEFAULT_BRAND.name) return DEFAULT_BRAND.command;
8846
+ return name.toLowerCase().replace(/[^a-z0-9]+/g, "");
8847
+ }
8840
8848
  var DEFAULT_BRAND, cachedBrand;
8841
8849
  var init_brand = __esm({
8842
8850
  "../cli/src/utils/brand.ts"() {
8843
8851
  "use strict";
8844
8852
  DEFAULT_BRAND = {
8845
8853
  name: "Paperclip",
8846
- tagline: "Open-source orchestration for zero-human companies"
8854
+ tagline: "Open-source orchestration for zero-human companies",
8855
+ command: "paperclipai"
8847
8856
  };
8848
8857
  cachedBrand = null;
8849
8858
  }
@@ -8853,9 +8862,10 @@ var init_brand = __esm({
8853
8862
  import pc2 from "picocolors";
8854
8863
  function printPaperclipCliBanner() {
8855
8864
  const brand2 = getCliBrandPack();
8865
+ const art = brand2.name.toLowerCase() === "superceo" ? SUPERCEO_ART : PAPERCLIP_ART;
8856
8866
  const lines = [
8857
8867
  "",
8858
- ...PAPERCLIP_ART.map((line) => pc2.cyan(line)),
8868
+ ...art.map((line) => pc2.cyan(line)),
8859
8869
  pc2.blue(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),
8860
8870
  pc2.bold(pc2.white(` ${brand2.tagline}`)),
8861
8871
  pc2.dim(` ${brand2.name} CLI`),
@@ -8863,7 +8873,7 @@ function printPaperclipCliBanner() {
8863
8873
  ];
8864
8874
  console.log(lines.join("\n"));
8865
8875
  }
8866
- var PAPERCLIP_ART;
8876
+ var PAPERCLIP_ART, SUPERCEO_ART;
8867
8877
  var init_banner = __esm({
8868
8878
  "../cli/src/utils/banner.ts"() {
8869
8879
  "use strict";
@@ -8876,6 +8886,14 @@ var init_banner = __esm({
8876
8886
  "\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 ",
8877
8887
  "\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D\u255A\u2550\u255D "
8878
8888
  ];
8889
+ SUPERCEO_ART = [
8890
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 ",
8891
+ "\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557",
8892
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551",
8893
+ "\u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551",
8894
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D",
8895
+ "\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D "
8896
+ ];
8879
8897
  }
8880
8898
  });
8881
8899
 
@@ -9149,13 +9167,14 @@ var init_agent_jwt_secret_check = __esm({
9149
9167
  // ../cli/src/checks/config-check.ts
9150
9168
  function configCheck(configPath) {
9151
9169
  const filePath = resolveConfigPath(configPath);
9170
+ const { command } = getCliBrandPack();
9152
9171
  if (!configExists(configPath)) {
9153
9172
  return {
9154
9173
  name: "Config file",
9155
9174
  status: "fail",
9156
9175
  message: `Config file not found at ${filePath}`,
9157
9176
  canRepair: false,
9158
- repairHint: "Run `paperclipai onboard` to create one"
9177
+ repairHint: `Run \`${command} onboard\` to create one`
9159
9178
  };
9160
9179
  }
9161
9180
  try {
@@ -9171,7 +9190,7 @@ function configCheck(configPath) {
9171
9190
  status: "fail",
9172
9191
  message: `Invalid config: ${err instanceof Error ? err.message : String(err)}`,
9173
9192
  canRepair: false,
9174
- repairHint: "Run `paperclipai configure --section database` (or `paperclipai onboard` to recreate)"
9193
+ repairHint: `Run \`${command} configure --section database\` (or \`${command} onboard\` to recreate)`
9175
9194
  };
9176
9195
  }
9177
9196
  }
@@ -9179,6 +9198,7 @@ var init_config_check = __esm({
9179
9198
  "../cli/src/checks/config-check.ts"() {
9180
9199
  "use strict";
9181
9200
  init_store();
9201
+ init_brand();
9182
9202
  }
9183
9203
  });
9184
9204
 
@@ -9198,7 +9218,7 @@ function deploymentAuthCheck(config) {
9198
9218
  status: "fail",
9199
9219
  message: `local_trusted requires loopback host binding (found ${config.server.host})`,
9200
9220
  canRepair: false,
9201
- repairHint: "Run `paperclipai configure --section server` and set host to 127.0.0.1"
9221
+ repairHint: `Run \`${getCliBrandPack().command} configure --section server\` and set host to 127.0.0.1`
9202
9222
  };
9203
9223
  }
9204
9224
  return {
@@ -9223,7 +9243,7 @@ function deploymentAuthCheck(config) {
9223
9243
  status: "fail",
9224
9244
  message: "auth.baseUrlMode=explicit requires auth.publicBaseUrl",
9225
9245
  canRepair: false,
9226
- repairHint: "Run `paperclipai configure --section server` and provide a base URL"
9246
+ repairHint: `Run \`${getCliBrandPack().command} configure --section server\` and provide a base URL`
9227
9247
  };
9228
9248
  }
9229
9249
  if (exposure === "public") {
@@ -9233,7 +9253,7 @@ function deploymentAuthCheck(config) {
9233
9253
  status: "fail",
9234
9254
  message: "authenticated/public requires explicit auth.publicBaseUrl",
9235
9255
  canRepair: false,
9236
- repairHint: "Run `paperclipai configure --section server` and select public exposure"
9256
+ repairHint: `Run \`${getCliBrandPack().command} configure --section server\` and select public exposure`
9237
9257
  };
9238
9258
  }
9239
9259
  try {
@@ -9253,7 +9273,7 @@ function deploymentAuthCheck(config) {
9253
9273
  status: "fail",
9254
9274
  message: "auth.publicBaseUrl is not a valid URL",
9255
9275
  canRepair: false,
9256
- repairHint: "Run `paperclipai configure --section server` and provide a valid URL"
9276
+ repairHint: `Run \`${getCliBrandPack().command} configure --section server\` and provide a valid URL`
9257
9277
  };
9258
9278
  }
9259
9279
  }
@@ -9266,6 +9286,7 @@ function deploymentAuthCheck(config) {
9266
9286
  var init_deployment_auth_check = __esm({
9267
9287
  "../cli/src/checks/deployment-auth-check.ts"() {
9268
9288
  "use strict";
9289
+ init_brand();
9269
9290
  }
9270
9291
  });
9271
9292
 
@@ -9287,7 +9308,7 @@ async function databaseCheck(config, configPath) {
9287
9308
  status: "fail",
9288
9309
  message: "PostgreSQL mode selected but no connection string configured",
9289
9310
  canRepair: false,
9290
- repairHint: "Run `paperclipai configure --section database`"
9311
+ repairHint: `Run \`${getCliBrandPack().command} configure --section database\``
9291
9312
  };
9292
9313
  }
9293
9314
  try {
@@ -9326,12 +9347,13 @@ async function databaseCheck(config, configPath) {
9326
9347
  status: "fail",
9327
9348
  message: `Unknown database mode: ${String(config.database.mode)}`,
9328
9349
  canRepair: false,
9329
- repairHint: "Run `paperclipai configure --section database`"
9350
+ repairHint: `Run \`${getCliBrandPack().command} configure --section database\``
9330
9351
  };
9331
9352
  }
9332
9353
  var init_database_check = __esm({
9333
9354
  "../cli/src/checks/database-check.ts"() {
9334
9355
  "use strict";
9356
+ init_brand();
9335
9357
  init_path_resolver2();
9336
9358
  }
9337
9359
  });
@@ -9376,7 +9398,7 @@ async function llmCheck(config) {
9376
9398
  status: "fail",
9377
9399
  message: "Claude API key is invalid (401)",
9378
9400
  canRepair: false,
9379
- repairHint: "Run `paperclipai configure --section llm`"
9401
+ repairHint: `Run \`${getCliBrandPack().command} configure --section llm\``
9380
9402
  };
9381
9403
  }
9382
9404
  return {
@@ -9397,7 +9419,7 @@ async function llmCheck(config) {
9397
9419
  status: "fail",
9398
9420
  message: "OpenAI API key is invalid (401)",
9399
9421
  canRepair: false,
9400
- repairHint: "Run `paperclipai configure --section llm`"
9422
+ repairHint: `Run \`${getCliBrandPack().command} configure --section llm\``
9401
9423
  };
9402
9424
  }
9403
9425
  return {
@@ -9417,6 +9439,7 @@ async function llmCheck(config) {
9417
9439
  var init_llm_check = __esm({
9418
9440
  "../cli/src/checks/llm-check.ts"() {
9419
9441
  "use strict";
9442
+ init_brand();
9420
9443
  }
9421
9444
  });
9422
9445
 
@@ -9621,7 +9644,7 @@ function secretsCheck(config, configPath) {
9621
9644
  status: "fail",
9622
9645
  message: `${provider} is configured, but this build only supports local_encrypted`,
9623
9646
  canRepair: false,
9624
- repairHint: "Run `paperclipai configure --section secrets` and set provider to local_encrypted"
9647
+ repairHint: `Run \`${getCliBrandPack().command} configure --section secrets\` and set provider to local_encrypted`
9625
9648
  };
9626
9649
  }
9627
9650
  const envMasterKey = process.env.PAPERCLIP_SECRETS_MASTER_KEY;
@@ -9703,6 +9726,7 @@ function secretsCheck(config, configPath) {
9703
9726
  var init_secrets_check = __esm({
9704
9727
  "../cli/src/checks/secrets-check.ts"() {
9705
9728
  "use strict";
9729
+ init_brand();
9706
9730
  init_path_resolver2();
9707
9731
  }
9708
9732
  });
@@ -9740,7 +9764,7 @@ function storageCheck(config, configPath) {
9740
9764
  status: "fail",
9741
9765
  message: "S3 storage requires non-empty bucket and region",
9742
9766
  canRepair: false,
9743
- repairHint: "Run `paperclipai configure --section storage`"
9767
+ repairHint: `Run \`${getCliBrandPack().command} configure --section storage\``
9744
9768
  };
9745
9769
  }
9746
9770
  return {
@@ -9754,6 +9778,7 @@ function storageCheck(config, configPath) {
9754
9778
  var init_storage_check = __esm({
9755
9779
  "../cli/src/checks/storage-check.ts"() {
9756
9780
  "use strict";
9781
+ init_brand();
9757
9782
  init_path_resolver2();
9758
9783
  }
9759
9784
  });
@@ -9780,7 +9805,8 @@ import * as p8 from "@clack/prompts";
9780
9805
  import pc3 from "picocolors";
9781
9806
  async function doctor(opts) {
9782
9807
  printPaperclipCliBanner();
9783
- p8.intro(pc3.bgCyan(pc3.black(" paperclip doctor ")));
9808
+ const brand2 = getCliBrandPack();
9809
+ p8.intro(pc3.bgCyan(pc3.black(` ${brand2.command} doctor `)));
9784
9810
  const configPath = resolveConfigPath(opts.config);
9785
9811
  loadPaperclipEnvFile(configPath);
9786
9812
  const results = [];
@@ -9799,7 +9825,7 @@ async function doctor(opts) {
9799
9825
  status: "fail",
9800
9826
  message: `Could not read config: ${err instanceof Error ? err.message : String(err)}`,
9801
9827
  canRepair: false,
9802
- repairHint: "Run `paperclipai configure --section database` or `paperclipai onboard`"
9828
+ repairHint: `Run \`${brand2.command} configure --section database\` or \`${brand2.command} onboard\``
9803
9829
  };
9804
9830
  results.push(readResult);
9805
9831
  printResult(readResult);
@@ -9920,6 +9946,7 @@ var init_doctor = __esm({
9920
9946
  init_checks();
9921
9947
  init_env();
9922
9948
  init_banner();
9949
+ init_brand();
9923
9950
  STATUS_ICON = {
9924
9951
  pass: pc3.green("\u2713"),
9925
9952
  warn: pc3.yellow("!"),
@@ -67235,7 +67262,7 @@ ${message}`);
67235
67262
  toolUseSystemBase,
67236
67263
  "",
67237
67264
  "TOOL USE IS ENABLED. You have live access to the Paperclip API via the Bash tool plus the bundled `paperclip` skill (loaded from .claude/skills). Use `curl` against the local API at $PAPERCLIP_API_URL to read or write any resource the operator references \u2014 issues, comments, leads, documents, goals, agents, plugins, approvals. Do NOT say you lack access; you have it.",
67238
- 'Plugin tools (e.g. `cutjam.twitter-social-data:search-tweets`) are agent-callable: POST /api/plugins/tools/execute with Authorization: Bearer $PAPERCLIP_API_KEY, and a runContext where agentId === $PAPERCLIP_AGENT_ID and companyId === $PAPERCLIP_COMPANY_ID (projectId must be a non-empty string like "none"). If a plugin route returns 403, that\'s an auth-shape issue (wrong Bearer, mismatched runContext.agentId, or you hit a board-only admin route) \u2014 diagnose and retry. Do NOT fall back to WebSearch and do NOT claim the plugin is unavailable; the plugin tool surface is yours to use.',
67265
+ 'Plugin tools (e.g. `<vendor>.<plugin>:<tool>`) are agent-callable: POST /api/plugins/tools/execute with Authorization: Bearer $PAPERCLIP_API_KEY, and a runContext where agentId === $PAPERCLIP_AGENT_ID and companyId === $PAPERCLIP_COMPANY_ID (projectId must be a non-empty string like "none"). If a plugin route returns 403, that\'s an auth-shape issue (wrong Bearer, mismatched runContext.agentId, or you hit a board-only admin route) \u2014 diagnose and retry. Do NOT fall back to WebSearch and do NOT claim the plugin is unavailable; the plugin tool surface is yours to use.',
67239
67266
  "When tool results contain two or more issues, leads, agents, or comparable rows, summarize them in the final JSON `reply` using the same markdown table rules as the main system prompt (no paragraph-only ID lists).",
67240
67267
  "",
67241
67268
  `${writeAttribution} If the operator hasn't clearly asked for a write, prefer reading first or proposing it back via the JSON proposals field rather than executing.`
@@ -82282,14 +82309,15 @@ async function runCommand(opts) {
82282
82309
  const configPath = resolveConfigPath(opts.config);
82283
82310
  process.env.PAPERCLIP_CONFIG = configPath;
82284
82311
  loadPaperclipEnvFile(configPath);
82285
- p9.intro(pc4.bgCyan(pc4.black(" paperclipai run ")));
82312
+ const brand2 = getCliBrandPack();
82313
+ p9.intro(pc4.bgCyan(pc4.black(` ${brand2.command} run `)));
82286
82314
  p9.log.message(pc4.dim(`Home: ${paths.homeDir}`));
82287
82315
  p9.log.message(pc4.dim(`Instance: ${paths.instanceId}`));
82288
82316
  p9.log.message(pc4.dim(`Config: ${configPath}`));
82289
82317
  if (!configExists(configPath)) {
82290
82318
  if (!process.stdin.isTTY || !process.stdout.isTTY) {
82291
82319
  p9.log.error("No config found and terminal is non-interactive.");
82292
- p9.log.message(`Run ${pc4.cyan("paperclipai onboard")} once, then retry ${pc4.cyan("paperclipai run")}.`);
82320
+ p9.log.message(`Run ${pc4.cyan(`${brand2.command} onboard`)} once, then retry ${pc4.cyan(`${brand2.command} run`)}.`);
82293
82321
  process.exit(1);
82294
82322
  }
82295
82323
  p9.log.step("No config found. Starting onboarding...");
@@ -82545,7 +82573,7 @@ function canCreateBootstrapInviteImmediately(config) {
82545
82573
  async function onboard(opts) {
82546
82574
  const brand2 = getCliBrandPack();
82547
82575
  printPaperclipCliBanner();
82548
- p10.intro(pc5.bgCyan(pc5.black(" paperclipai onboard ")));
82576
+ p10.intro(pc5.bgCyan(pc5.black(` ${brand2.command} onboard `)));
82549
82577
  const configPath = resolveConfigPath(opts.config);
82550
82578
  const instance = describeLocalInstancePaths(resolvePaperclipInstanceId());
82551
82579
  p10.log.message(
@@ -82571,7 +82599,7 @@ ${err instanceof Error ? err.message : String(err)}`
82571
82599
  p10.log.message(
82572
82600
  pc5.dim(`Existing ${brand2.name} install detected; keeping the current configuration unchanged.`)
82573
82601
  );
82574
- p10.log.message(pc5.dim(`Use ${pc5.cyan("paperclipai configure")} if you want to change settings.`));
82602
+ p10.log.message(pc5.dim(`Use ${pc5.cyan(`${brand2.command} configure`)} if you want to change settings.`));
82575
82603
  const jwtSecret2 = ensureAgentJwtSecret(configPath);
82576
82604
  const envFilePath2 = resolveAgentJwtEnvFile(configPath);
82577
82605
  if (jwtSecret2.created) {
@@ -82604,9 +82632,9 @@ ${err instanceof Error ? err.message : String(err)}`
82604
82632
  );
82605
82633
  p10.note(
82606
82634
  [
82607
- `Run: ${pc5.cyan("paperclipai run")}`,
82608
- `Reconfigure later: ${pc5.cyan("paperclipai configure")}`,
82609
- `Diagnose setup: ${pc5.cyan("paperclipai doctor")}`
82635
+ `Run: ${pc5.cyan(`${brand2.command} run`)}`,
82636
+ `Reconfigure later: ${pc5.cyan(`${brand2.command} configure`)}`,
82637
+ `Diagnose setup: ${pc5.cyan(`${brand2.command} doctor`)}`
82610
82638
  ].join("\n"),
82611
82639
  "Next commands"
82612
82640
  );
@@ -82679,7 +82707,7 @@ ${err instanceof Error ? err.message : String(err)}`
82679
82707
  await db.execute("SELECT 1");
82680
82708
  s.stop("Database connection successful");
82681
82709
  } catch {
82682
- s.stop(pc5.yellow("Could not connect to database \u2014 you can fix this later with `paperclipai doctor`"));
82710
+ s.stop(pc5.yellow(`Could not connect to database \u2014 you can fix this later with \`${brand2.command} doctor\``));
82683
82711
  }
82684
82712
  }
82685
82713
  p10.log.step(pc5.bold("LLM Provider"));
@@ -82811,9 +82839,9 @@ ${err instanceof Error ? err.message : String(err)}`
82811
82839
  );
82812
82840
  p10.note(
82813
82841
  [
82814
- `Run: ${pc5.cyan("paperclipai run")}`,
82815
- `Reconfigure later: ${pc5.cyan("paperclipai configure")}`,
82816
- `Diagnose setup: ${pc5.cyan("paperclipai doctor")}`
82842
+ `Run: ${pc5.cyan(`${brand2.command} run`)}`,
82843
+ `Reconfigure later: ${pc5.cyan(`${brand2.command} configure`)}`,
82844
+ `Diagnose setup: ${pc5.cyan(`${brand2.command} doctor`)}`
82817
82845
  ].join("\n"),
82818
82846
  "Next commands"
82819
82847
  );
@@ -82841,8 +82869,8 @@ ${err instanceof Error ? err.message : String(err)}`
82841
82869
  p10.log.info(
82842
82870
  [
82843
82871
  "Bootstrap CEO invite will be created after the server starts.",
82844
- `Next: ${pc5.cyan("paperclipai run")}`,
82845
- `Then: ${pc5.cyan("paperclipai auth bootstrap-ceo")}`
82872
+ `Next: ${pc5.cyan(`${brand2.command} run`)}`,
82873
+ `Then: ${pc5.cyan(`${brand2.command} auth bootstrap-ceo`)}`
82846
82874
  ].join("\n")
82847
82875
  );
82848
82876
  }
@@ -83229,10 +83257,11 @@ function defaultConfig() {
83229
83257
  }
83230
83258
  async function configure(opts) {
83231
83259
  printPaperclipCliBanner();
83232
- p12.intro(pc7.bgCyan(pc7.black(" paperclip configure ")));
83260
+ const brand2 = getCliBrandPack();
83261
+ p12.intro(pc7.bgCyan(pc7.black(` ${brand2.command} configure `)));
83233
83262
  const configPath = resolveConfigPath(opts.config);
83234
83263
  if (!configExists(opts.config)) {
83235
- p12.log.error("No config file found. Run `paperclipai onboard` first.");
83264
+ p12.log.error(`No config file found. Run \`${brand2.command} onboard\` first.`);
83236
83265
  p12.outro("");
83237
83266
  return;
83238
83267
  }
@@ -83350,6 +83379,7 @@ var init_configure = __esm({
83350
83379
  init_server();
83351
83380
  init_home();
83352
83381
  init_banner();
83382
+ init_brand();
83353
83383
  SECTION_LABELS = {
83354
83384
  llm: "LLM Provider",
83355
83385
  database: "Database",
@@ -84989,8 +85019,9 @@ async function toApiError(response) {
84989
85019
  }
84990
85020
  function buildConnectionErrorMessage(input) {
84991
85021
  const healthUrl = buildHealthCheckUrl(input.url);
85022
+ const brand2 = getCliBrandPack();
84992
85023
  const lines = [
84993
- "Could not reach the Paperclip API.",
85024
+ `Could not reach the ${brand2.name} API.`,
84994
85025
  "",
84995
85026
  `Request: ${input.method} ${input.url}`
84996
85027
  ];
@@ -84999,12 +85030,12 @@ function buildConnectionErrorMessage(input) {
84999
85030
  }
85000
85031
  lines.push(
85001
85032
  "",
85002
- "This usually means the Paperclip server is not running, the configured URL is wrong, or the request is being blocked before it reaches Paperclip.",
85033
+ `This usually means the ${brand2.name} server is not running, the configured URL is wrong, or the request is being blocked before it reaches ${brand2.name}.`,
85003
85034
  "",
85004
85035
  "Try:",
85005
- "- Start Paperclip with `pnpm dev` or `pnpm paperclipai run`.",
85036
+ `- Start ${brand2.name} with \`pnpm dev\` or \`pnpm ${brand2.command} run\`.`,
85006
85037
  `- Verify the server is reachable with \`curl ${healthUrl}\`.`,
85007
- `- If Paperclip is running elsewhere, pass \`--api-base ${input.apiBase.replace(/\/+$/, "")}\` or set \`PAPERCLIP_API_URL\`.`
85038
+ `- If ${brand2.name} is running elsewhere, pass \`--api-base ${input.apiBase.replace(/\/+$/, "")}\` or set \`PAPERCLIP_API_URL\`.`
85008
85039
  );
85009
85040
  return lines.join("\n");
85010
85041
  }
@@ -85039,6 +85070,7 @@ var ApiRequestError, ApiConnectionError, PaperclipApiClient;
85039
85070
  var init_http3 = __esm({
85040
85071
  "../cli/src/client/http.ts"() {
85041
85072
  "use strict";
85073
+ init_brand();
85042
85074
  ApiRequestError = class extends Error {
85043
85075
  status;
85044
85076
  details;
@@ -85176,7 +85208,7 @@ function resolveCommandContext(options2, opts) {
85176
85208
  const companyId = options2.companyId?.trim() || process.env.PAPERCLIP_COMPANY_ID?.trim() || profile.companyId;
85177
85209
  if (opts?.requireCompany && !companyId) {
85178
85210
  throw new Error(
85179
- "Company ID is required. Pass --company-id, set PAPERCLIP_COMPANY_ID, or set context profile companyId via `paperclipai context set`."
85211
+ `Company ID is required. Pass --company-id, set PAPERCLIP_COMPANY_ID, or set context profile companyId via \`${getCliBrandPack().command} context set\`.`
85180
85212
  );
85181
85213
  }
85182
85214
  const api = new PaperclipApiClient({
@@ -89918,12 +89950,12 @@ async function runWorktreeInit(opts) {
89918
89950
  }
89919
89951
  async function worktreeInitCommand(opts) {
89920
89952
  printPaperclipCliBanner();
89921
- p16.intro(pc24.bgCyan(pc24.black(" paperclipai worktree init ")));
89953
+ p16.intro(pc24.bgCyan(pc24.black(` ${getCliBrandPack().command} worktree init `)));
89922
89954
  await runWorktreeInit(opts);
89923
89955
  }
89924
89956
  async function worktreeMakeCommand(nameArg, opts) {
89925
89957
  printPaperclipCliBanner();
89926
- p16.intro(pc24.bgCyan(pc24.black(" paperclipai worktree:make ")));
89958
+ p16.intro(pc24.bgCyan(pc24.black(` ${getCliBrandPack().command} worktree:make `)));
89927
89959
  const name = resolveWorktreeMakeName(nameArg);
89928
89960
  const startPoint = resolveWorktreeStartPoint(opts.startPoint);
89929
89961
  const sourceCwd = process.cwd();
@@ -90079,7 +90111,7 @@ function worktreePathHasUncommittedChanges(worktreePath) {
90079
90111
  }
90080
90112
  async function worktreeCleanupCommand(nameArg, opts) {
90081
90113
  printPaperclipCliBanner();
90082
- p16.intro(pc24.bgCyan(pc24.black(" paperclipai worktree:cleanup ")));
90114
+ p16.intro(pc24.bgCyan(pc24.black(` ${getCliBrandPack().command} worktree:cleanup `)));
90083
90115
  const name = resolveWorktreeMakeName(nameArg);
90084
90116
  const sourceCwd = process.cwd();
90085
90117
  const targetPath = resolveWorktreeMakeTargetPath(name);
@@ -90704,7 +90736,7 @@ async function promptForSourceEndpoint(excludeWorktreePath) {
90704
90736
  hint: `${choice.worktree}${choice.isCurrent ? " (current)" : ""}`
90705
90737
  }));
90706
90738
  if (choices.length === 0) {
90707
- throw new Error("No Paperclip worktrees were found. Run `paperclipai worktree:list` to inspect the repo worktrees.");
90739
+ throw new Error(`No worktrees were found. Run \`${getCliBrandPack().command} worktree:list\` to inspect the repo worktrees.`);
90708
90740
  }
90709
90741
  const selection = await p16.select({
90710
90742
  message: "Choose the source worktree to import from",
@@ -91102,7 +91134,7 @@ async function worktreeMergeHistoryCommand(sourceArg, opts) {
91102
91134
  }
91103
91135
  async function worktreeReseedCommand(opts) {
91104
91136
  printPaperclipCliBanner();
91105
- p16.intro(pc24.bgCyan(pc24.black(" paperclipai worktree reseed ")));
91137
+ p16.intro(pc24.bgCyan(pc24.black(` ${getCliBrandPack().command} worktree reseed `)));
91106
91138
  const seedMode = opts.seedMode ?? "full";
91107
91139
  if (!isWorktreeSeedMode(seedMode)) {
91108
91140
  throw new Error(`Unsupported seed mode "${seedMode}". Expected one of: minimal, full.`);
@@ -91184,6 +91216,7 @@ var WORKTREE_NAME_PREFIX, dynamicImport;
91184
91216
  var init_worktree = __esm({
91185
91217
  "../cli/src/commands/worktree.ts"() {
91186
91218
  "use strict";
91219
+ init_brand();
91187
91220
  init_dist2();
91188
91221
  init_env();
91189
91222
  init_home();
@@ -91540,7 +91573,7 @@ var init_src2 = __esm({
91540
91573
  program = new Command();
91541
91574
  brand = getCliBrandPack();
91542
91575
  DATA_DIR_OPTION_HELP = `${brand.name} data directory root (isolates state from ~/.paperclip)`;
91543
- program.name("paperclipai").description(`${brand.name} CLI \u2014 setup, diagnose, and configure your instance`).version(cliVersion);
91576
+ program.name(brand.command).description(`${brand.name} CLI \u2014 setup, diagnose, and configure your instance`).version(cliVersion);
91544
91577
  program.hook("preAction", (_thisCommand, actionCommand) => {
91545
91578
  const options2 = actionCommand.optsWithGlobals();
91546
91579
  const optionNames = new Set(actionCommand.options.map((option) => option.attributeName()));
@@ -91551,8 +91584,8 @@ var init_src2 = __esm({
91551
91584
  loadPaperclipEnvFile(options2.config);
91552
91585
  initTelemetryFromConfigFile(options2.config);
91553
91586
  });
91554
- program.command("onboard").description("Interactive first-run setup wizard").option("-c, --config <path>", "Path to config file").option("-d, --data-dir <path>", DATA_DIR_OPTION_HELP).option("-y, --yes", "Accept defaults (quickstart + start immediately)", false).option("--run", "Start Paperclip immediately after saving config", false).action(onboard);
91555
- program.command("doctor").description("Run diagnostic checks on your Paperclip setup").option("-c, --config <path>", "Path to config file").option("-d, --data-dir <path>", DATA_DIR_OPTION_HELP).option("--repair", "Attempt to repair issues automatically").alias("--fix").option("-y, --yes", "Skip repair confirmation prompts").action(async (opts) => {
91587
+ program.command("onboard").description("Interactive first-run setup wizard").option("-c, --config <path>", "Path to config file").option("-d, --data-dir <path>", DATA_DIR_OPTION_HELP).option("-y, --yes", "Accept defaults (quickstart + start immediately)", false).option("--run", `Start ${brand.name} immediately after saving config`, false).action(onboard);
91588
+ program.command("doctor").description(`Run diagnostic checks on your ${brand.name} setup`).option("-c, --config <path>", "Path to config file").option("-d, --data-dir <path>", DATA_DIR_OPTION_HELP).option("--repair", "Attempt to repair issues automatically").alias("--fix").option("-y, --yes", "Skip repair confirmation prompts").action(async (opts) => {
91556
91589
  await doctor(opts);
91557
91590
  });
91558
91591
  program.command("env").description("Print environment variables for deployment").option("-c, --config <path>", "Path to config file").option("-d, --data-dir <path>", DATA_DIR_OPTION_HELP).action(envCommand);
@@ -91561,9 +91594,9 @@ var init_src2 = __esm({
91561
91594
  await dbBackupCommand(opts);
91562
91595
  });
91563
91596
  program.command("allowed-hostname").description("Allow a hostname for authenticated/private mode access").argument("<host>", "Hostname to allow (for example dotta-macbook-pro)").option("-c, --config <path>", "Path to config file").option("-d, --data-dir <path>", DATA_DIR_OPTION_HELP).action(addAllowedHostname);
91564
- program.command("run").description("Bootstrap local setup (onboard + doctor) and run Paperclip").option("-c, --config <path>", "Path to config file").option("-d, --data-dir <path>", DATA_DIR_OPTION_HELP).option("-i, --instance <id>", "Local instance id (default: default)").option("--repair", "Attempt automatic repairs during doctor", true).option("--no-repair", "Disable automatic repairs during doctor").action(runCommand);
91597
+ program.command("run").description(`Bootstrap local setup (onboard + doctor) and run ${brand.name}`).option("-c, --config <path>", "Path to config file").option("-d, --data-dir <path>", DATA_DIR_OPTION_HELP).option("-i, --instance <id>", "Local instance id (default: default)").option("--repair", "Attempt automatic repairs during doctor", true).option("--no-repair", "Disable automatic repairs during doctor").action(runCommand);
91565
91598
  heartbeat = program.command("heartbeat").description("Heartbeat utilities");
91566
- heartbeat.command("run").description("Run one agent heartbeat and stream live logs").requiredOption("-a, --agent-id <agentId>", "Agent ID to invoke").option("-c, --config <path>", "Path to config file").option("-d, --data-dir <path>", DATA_DIR_OPTION_HELP).option("--context <path>", "Path to CLI context file").option("--profile <name>", "CLI context profile name").option("--api-base <url>", "Base URL for the Paperclip server API").option("--api-key <token>", "Bearer token for agent-authenticated calls").option(
91599
+ heartbeat.command("run").description("Run one agent heartbeat and stream live logs").requiredOption("-a, --agent-id <agentId>", "Agent ID to invoke").option("-c, --config <path>", "Path to config file").option("-d, --data-dir <path>", DATA_DIR_OPTION_HELP).option("--context <path>", "Path to CLI context file").option("--profile <name>", "CLI context profile name").option("--api-base <url>", `Base URL for the ${brand.name} server API`).option("--api-key <token>", "Bearer token for agent-authenticated calls").option(
91567
91600
  "--source <source>",
91568
91601
  "Invocation source (timer | assignment | on_demand | automation)",
91569
91602
  "on_demand"