holomime 3.3.5 → 3.3.7

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 (2) hide show
  1. package/dist/cli.js +53 -47
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -3593,7 +3593,7 @@ import { Command } from "commander";
3593
3593
  // src/ui/branding.ts
3594
3594
  import chalk from "chalk";
3595
3595
  import gradientString from "gradient-string";
3596
- var VERSION = "3.3.5";
3596
+ var VERSION = "3.3.7";
3597
3597
  var LOGO = ` _ _ _
3598
3598
  | |__ ___ | | ___ _ __ (_)_ __ ___ ___
3599
3599
  | '_ \\ / _ \\| |/ _ \\| '_ \\| | '_ \` _ \\ / _ \\
@@ -3735,10 +3735,11 @@ function showWelcome() {
3735
3735
  const content = [
3736
3736
  `${chalk2.bold("Welcome to holomime!")}`,
3737
3737
  "",
3738
- `It looks like you haven't created a personality profile yet.`,
3739
- `Run ${chalk2.cyan("holomime init")} to build one through a guided assessment.`,
3738
+ `Define how your agent should behave \u2014 holomime diagnoses drift and fixes it.`,
3740
3739
  "",
3741
- chalk2.dim("Takes about 5 minutes. Creates .personality.json in this directory.")
3740
+ ` ${chalk2.cyan("holomime personality")} ${chalk2.dim("Quick setup (1 file, ~5 min)")}`,
3741
+ ` ${chalk2.cyan("holomime core")} ${chalk2.dim("Core identity (3 files)")}`,
3742
+ ` ${chalk2.cyan("holomime identity")} ${chalk2.dim("Full stack with body.api (robots)")}`
3742
3743
  ].join("\n");
3743
3744
  console.log(
3744
3745
  boxen(content, {
@@ -3746,7 +3747,7 @@ function showWelcome() {
3746
3747
  margin: { top: 1, bottom: 1, left: 2, right: 0 },
3747
3748
  borderColor: "cyan",
3748
3749
  borderStyle: "round",
3749
- title: "First Time?",
3750
+ title: "Get Started",
3750
3751
  titleAlignment: "center"
3751
3752
  })
3752
3753
  );
@@ -5189,19 +5190,14 @@ async function initCommand() {
5189
5190
  console.log(` ${chalk3.dim("A")} Agreeableness: ${bar(bigFive.agreeableness.score)} ${scoreLabel(bigFive.agreeableness.score)}`);
5190
5191
  console.log(` ${chalk3.dim("N")} Emotional Stability: ${bar(bigFive.emotional_stability.score)} ${scoreLabel(bigFive.emotional_stability.score)}`);
5191
5192
  const journeySteps = [
5192
- `${chalk3.green("1.")} ${chalk3.cyan("holomime profile")}`,
5193
- ` ${chalk3.dim("See your full personality summary")}`,
5194
- `${chalk3.green("2.")} ${chalk3.cyan("holomime compile --provider anthropic")}`,
5195
- ` ${chalk3.dim("Generate a system prompt for your agent")}`,
5196
- `${chalk3.green("3.")} ${chalk3.cyan("holomime diagnose --log <conversation.json>")}`,
5197
- ` ${chalk3.dim("Analyze conversation logs for behavioral patterns")}`,
5198
- `${chalk3.green("4.")} ${chalk3.cyan("holomime assess --personality .personality.json --log <file>")}`,
5199
- ` ${chalk3.dim("Full Big Five alignment check \u2014 spec vs reality")}`,
5200
- ``,
5201
- `${chalk3.magenta("5.")} ${chalk3.cyan("holomime cure")} ${chalk3.dim("[Pro]")}`,
5202
- ` ${chalk3.dim("Live AI alignment session for your agent")}`,
5203
- `${chalk3.magenta("6.")} ${chalk3.cyan("holomime growth")} ${chalk3.dim("[Pro]")}`,
5204
- ` ${chalk3.dim("Track improvement over time")}`
5193
+ `${chalk3.green("1.")} ${chalk3.cyan("holomime diagnose --log <path>")}`,
5194
+ ` ${chalk3.dim("Analyze your agent's conversation logs")}`,
5195
+ `${chalk3.green("2.")} ${chalk3.cyan("holomime therapy")}`,
5196
+ ` ${chalk3.dim("Autonomous behavioral therapy")}`,
5197
+ `${chalk3.green("3.")} ${chalk3.cyan("holomime cure")}`,
5198
+ ` ${chalk3.dim("End-to-end fix (diagnose + train + verify)")}`,
5199
+ `${chalk3.green("4.")} ${chalk3.cyan("holomime benchmark")}`,
5200
+ ` ${chalk3.dim("Verify alignment with adversarial scenarios")}`
5205
5201
  ].join("\n");
5206
5202
  console.log(
5207
5203
  boxen2(journeySteps, {
@@ -5312,15 +5308,14 @@ async function initFromArchetype(name, handle, purpose) {
5312
5308
  console.log(` ${chalk3.dim("A")} Agreeableness: ${bar(bigFive.agreeableness.score)} ${scoreLabel(bigFive.agreeableness.score)}`);
5313
5309
  console.log(` ${chalk3.dim("N")} Emotional Stability: ${bar(bigFive.emotional_stability.score)} ${scoreLabel(bigFive.emotional_stability.score)}`);
5314
5310
  const journeySteps = [
5315
- `${chalk3.green("1.")} ${chalk3.cyan("holomime profile")}`,
5316
- ` ${chalk3.dim("See your full personality summary")}`,
5317
- `${chalk3.green("2.")} ${chalk3.cyan("holomime compile --provider anthropic")}`,
5318
- ` ${chalk3.dim("Generate a system prompt for your agent")}`,
5319
- `${chalk3.green("3.")} ${chalk3.cyan("holomime diagnose --log <conversation.json>")}`,
5320
- ` ${chalk3.dim("Analyze conversation logs for behavioral patterns")}`,
5321
- ``,
5322
- `${chalk3.magenta("4.")} ${chalk3.cyan("holomime cure")} ${chalk3.dim("[Pro]")}`,
5323
- ` ${chalk3.dim("Live AI alignment session for your agent")}`
5311
+ `${chalk3.green("1.")} ${chalk3.cyan("holomime diagnose --log <path>")}`,
5312
+ ` ${chalk3.dim("Analyze your agent's conversation logs")}`,
5313
+ `${chalk3.green("2.")} ${chalk3.cyan("holomime therapy")}`,
5314
+ ` ${chalk3.dim("Autonomous behavioral therapy")}`,
5315
+ `${chalk3.green("3.")} ${chalk3.cyan("holomime cure")}`,
5316
+ ` ${chalk3.dim("End-to-end fix (diagnose + train + verify)")}`,
5317
+ `${chalk3.green("4.")} ${chalk3.cyan("holomime benchmark")}`,
5318
+ ` ${chalk3.dim("Verify alignment with adversarial scenarios")}`
5324
5319
  ].join("\n");
5325
5320
  console.log(
5326
5321
  boxen2(journeySteps, {
@@ -21843,6 +21838,7 @@ async function configCommand(options) {
21843
21838
  console.log(chalk49.dim(` Provider: ${config.provider}`));
21844
21839
  console.log(chalk49.dim(` Location: ${getConfigPath()}`));
21845
21840
  console.log();
21841
+ printNextSteps();
21846
21842
  return;
21847
21843
  }
21848
21844
  console.log(chalk49.dim(" Set up your API key so every command just works."));
@@ -21888,17 +21884,27 @@ async function configCommand(options) {
21888
21884
  console.log(chalk49.green(" Config saved!"));
21889
21885
  console.log(chalk49.dim(` Location: ${getConfigPath()}`));
21890
21886
  console.log();
21891
- console.log(chalk49.dim(" Now every command auto-detects your provider:"));
21892
- console.log(chalk49.cyan(" holomime diagnose"));
21893
- console.log(chalk49.cyan(" holomime cure"));
21894
- console.log(chalk49.cyan(" holomime benchmark"));
21895
- console.log(chalk49.cyan(" holomime therapy"));
21896
- console.log();
21887
+ printNextSteps();
21897
21888
  rl.close();
21898
21889
  } catch {
21899
21890
  rl.close();
21900
21891
  }
21901
21892
  }
21893
+ function printNextSteps() {
21894
+ console.log(chalk49.bold(" NEXT STEP") + chalk49.dim(" \u2014 profile your agent:"));
21895
+ console.log();
21896
+ console.log(chalk49.dim(" Already have an agent?"));
21897
+ console.log(chalk49.cyan(" holomime personality") + chalk49.dim(" Define how it should behave"));
21898
+ console.log(chalk49.cyan(" holomime diagnose") + chalk49.dim(" Analyze its conversation logs"));
21899
+ console.log();
21900
+ console.log(chalk49.dim(" Building for a robot?"));
21901
+ console.log(chalk49.cyan(" holomime identity") + chalk49.dim(" Full 8-file identity stack with body.api"));
21902
+ console.log();
21903
+ console.log(chalk49.dim(" Then fix and verify:"));
21904
+ console.log(chalk49.cyan(" holomime therapy") + chalk49.dim(" Run in background \u2014 generate data, detect regression"));
21905
+ console.log(chalk49.cyan(" holomime cure") + chalk49.dim(" Full pipeline \u2014 diagnose, fine-tune, verify"));
21906
+ console.log();
21907
+ }
21902
21908
 
21903
21909
  // src/commands/mira-cmd.ts
21904
21910
  import chalk50 from "chalk";
@@ -22186,12 +22192,12 @@ async function therapyStart(options) {
22186
22192
  };
22187
22193
  saveTherapyState(state);
22188
22194
  printBox(
22189
- `Autonomous therapy started.
22195
+ `Background process running. Generating training data, detecting regression, auto-tuning.
22190
22196
 
22191
- ${chalk50.cyan("holomime therapy status")} \u2014 Check progress
22192
- ${chalk50.cyan("holomime therapy stop")} \u2014 Stop therapy`,
22197
+ ${chalk50.cyan("holomime therapy status")} \u2014 Check progress and metrics
22198
+ ${chalk50.cyan("holomime therapy stop")} \u2014 Stop background process`,
22193
22199
  "success",
22194
- "Autonomous Therapy Started"
22200
+ "Therapy Running"
22195
22201
  );
22196
22202
  console.log();
22197
22203
  const scenarios = getBenchmarkScenarios();
@@ -22488,7 +22494,7 @@ program.command("compile-stack").description("Compile identity stack (soul + min
22488
22494
  program.command("compile").description("Compile .personality.json into a provider-specific runtime config").option("--provider <provider>", "Target provider (anthropic, openai, gemini, ollama)", "anthropic").option("--surface <surface>", "Target surface (chat, email, code_review, slack, api, embodied)", "chat").option("--for <format>", "Compile for a specific format (openclaw)").option("--tier <tier>", "Personality loading tier (L0, L1, L2)", "L2").option("-o, --output <path>", "Write output to file instead of stdout").action(compileCommand);
22489
22495
  program.command("validate").description("Validate .personality.json schema and psychological coherence").action(validateCommand);
22490
22496
  program.command("profile").description("Pretty-print a human-readable personality summary").option("--format <format>", "Output format (terminal, md)", "terminal").option("-o, --output <path>", "Write output to file (for md format)").action(profileCommand);
22491
- program.command("diagnose").description("Detect behavioral patterns from conversation logs (rule-based, no LLM)").requiredOption("--log <path>", "Path to conversation log (JSON)").option("--format <format>", "Log format (auto, holomime, chatgpt, claude, openai-api, anthropic-api, otel, jsonl)", "auto").action(diagnoseCommand);
22497
+ program.command("diagnose").description("Detect behavioral drift from conversation logs").requiredOption("--log <path>", "Path to conversation log (JSON)").option("--format <format>", "Log format (auto, holomime, chatgpt, claude, openai-api, anthropic-api, otel, jsonl)", "auto").action(diagnoseCommand);
22492
22498
  program.command("assess").description("Full Big Five alignment check \u2014 compare spec vs actual behavior").requiredOption("--personality <path>", "Path to .personality.json").requiredOption("--log <path>", "Path to conversation log (JSON)").option("--format <format>", "Log format (auto, holomime, chatgpt, claude, openai-api, anthropic-api, otel, jsonl)", "auto").action(assessCommand);
22493
22499
  program.command("browse").description("Browse the community marketplace").option("--tag <tag>", "Filter by tag").option("--type <type>", "Asset type: personality, detector, intervention, training-pairs").option("--search <query>", "Full-text search query").option("--sort <field>", "Sort by: downloads, rating, created_at, updated_at, name", "downloads").option("--page <number>", "Page number for paginated results").action(browseCommand);
22494
22500
  program.command("use").description("Use a personality from the registry").argument("<handle>", "Personality handle to use").option("-o, --output <path>", "Output path", ".personality.json").action(useCommand);
@@ -22516,7 +22522,7 @@ program.command("evolve").description("Recursive behavioral alignment \u2014 ite
22516
22522
  if (!options.model) options.model = resolved.model;
22517
22523
  await evolveCommand(options);
22518
22524
  });
22519
- program.command("benchmark").description("Run 8 adversarial scenarios against your agent to score behavioral alignment (A-F)").addHelpText("after", `
22525
+ program.command("benchmark").description("Score alignment (A-F) across 8 adversarial scenarios").addHelpText("after", `
22520
22526
  Examples:
22521
22527
  $ holomime benchmark --personality .personality.json
22522
22528
  $ holomime benchmark --personality .personality.json --provider anthropic
@@ -22559,14 +22565,14 @@ program.command("share").description("Share DPO training pairs to the marketplac
22559
22565
  program.command("interview").description("Self-awareness interview \u2014 score your agent's metacognition across 4 dimensions [Pro]").requiredOption("--personality <path>", "Path to .personality.json").option("--provider <provider>", "LLM provider (ollama, anthropic, openai)", "ollama").option("--model <model>", "Model override").action(interviewCommand);
22560
22566
  program.command("prescribe").description("Diagnose and prescribe DPO treatments from the behavioral corpus [Pro]").requiredOption("--personality <path>", "Path to .personality.json").requiredOption("--log <path>", "Path to conversation log").option("--format <format>", "Log format (holomime, chatgpt, claude, openai-api, anthropic-api, otel, jsonl)").option("--source <source>", "Correction source (corpus, marketplace, both)", "corpus").option("--apply", "Apply found treatments").option("-o, --output <path>", "Write prescription to file").action(prescribeCommand);
22561
22567
  program.command("voice").description("Monitor voice conversations for behavioral drift in real-time [Pro]").requiredOption("--personality <path>", "Path to .personality.json").option("--platform <name>", "Voice platform: livekit, vapi, retell, generic", "generic").option("--room <name>", "LiveKit room name").option("--server-url <url>", "LiveKit server URL").option("--webhook-port <port>", "Vapi webhook port (default: 3001)").option("--agent-id <id>", "Retell agent ID").option("--input <path>", "Input transcript file (JSONL) for offline analysis").option("--interval <ms>", "Diagnosis interval in milliseconds (default: 15000)").option("--threshold <level>", "Alert threshold: warning or concern (default: warning)").action(voiceCommand);
22562
- program.command("cure").description("End-to-end behavioral fix \u2014 just run it, everything auto-detected").option("--personality <path>", "Path to .personality.json (auto-detected)").option("--log <path>", "Path to conversation log (JSON). If omitted, auto-generates from benchmark scenarios").option("--provider <provider>", "Training provider (openai, huggingface)", "openai").option("--base-model <model>", "Base model to fine-tune", "gpt-4o-mini-2024-07-18").option("--method <method>", "Training method (auto, sft, dpo)", "auto").option("--epochs <n>", "Number of training epochs").option("--suffix <name>", "Model name suffix").option("--skip-train", "Skip training step (diagnose + export only)").option("--skip-verify", "Skip post-training verification").option("--dry-run", "Preview pipeline plan without executing").option("--push", "Push trained model to HuggingFace Hub").option("--hub-repo <repo>", "HuggingFace Hub repo (user/model-name)").option("--pass-threshold <n>", "Minimum verification score (0-100)", "50").action(async (options) => {
22568
+ program.command("cure").description("Full pipeline \u2014 diagnose, generate training data, fine-tune, verify").option("--personality <path>", "Path to .personality.json (auto-detected)").option("--log <path>", "Path to conversation log (JSON). If omitted, auto-generates from benchmark scenarios").option("--provider <provider>", "Training provider (openai, huggingface)", "openai").option("--base-model <model>", "Base model to fine-tune", "gpt-4o-mini-2024-07-18").option("--method <method>", "Training method (auto, sft, dpo)", "auto").option("--epochs <n>", "Number of training epochs").option("--suffix <name>", "Model name suffix").option("--skip-train", "Skip training step (diagnose + export only)").option("--skip-verify", "Skip post-training verification").option("--dry-run", "Preview pipeline plan without executing").option("--push", "Push trained model to HuggingFace Hub").option("--hub-repo <repo>", "HuggingFace Hub repo (user/model-name)").option("--pass-threshold <n>", "Minimum verification score (0-100)", "50").action(async (options) => {
22563
22569
  const resolved = autoDetect({ personality: options.personality, provider: options.provider, model: options.model });
22564
22570
  options.personality = resolved.personalityPath;
22565
22571
  if (!options.provider || options.provider === "ollama") options.provider = resolved.provider;
22566
22572
  if (!options.model) options.model = resolved.model;
22567
22573
  await cureCommand(options);
22568
22574
  });
22569
- program.command("therapy [action]").description("Autonomous behavioral therapy \u2014 generates DPO pairs and self-improves").option("--interval <ms>", "Practice interval in ms (default: 600000)").option("--max-cycles <n>", "Max cycles per run (default: 50)").action(async (action, options) => {
22575
+ program.command("therapy [action]").description("Run in background \u2014 generate training data, detect regression, auto-tune").option("--interval <ms>", "Practice interval in ms (default: 600000)").option("--max-cycles <n>", "Max cycles per run (default: 50)").action(async (action, options) => {
22570
22576
  options.action = action;
22571
22577
  await miraCommand(options);
22572
22578
  });
@@ -22589,14 +22595,14 @@ program.addHelpText("before", `
22589
22595
  config Set up your API key (one time)
22590
22596
 
22591
22597
  WORKFLOW
22592
- diagnose See what's wrong
22593
- cure Fix it permanently
22594
- benchmark Verify the fix
22598
+ diagnose Detect behavioral drift from logs
22599
+ cure Full pipeline \u2014 diagnose, generate training data, fine-tune, verify
22600
+ benchmark Score alignment (A-F) across 8 adversarial scenarios
22595
22601
 
22596
22602
  THERAPY
22597
- therapy Start autonomous therapy
22598
- therapy status Check therapy progress
22599
- therapy stop Stop therapy
22603
+ therapy Run in background \u2014 generate training data, detect regression, auto-tune
22604
+ therapy status Check progress and metrics
22605
+ therapy stop Stop background process
22600
22606
 
22601
22607
  ADVANCED
22602
22608
  align Single therapy session
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "holomime",
3
- "version": "3.3.5",
3
+ "version": "3.3.7",
4
4
  "description": "Behavioral therapy infrastructure for AI agents — Big Five psychology, structured treatment, behavioral alignment",
5
5
  "type": "module",
6
6
  "bin": {