daemora 1.0.3 → 1.0.5

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 (121) hide show
  1. package/LICENSE +663 -0
  2. package/README.md +69 -19
  3. package/SOUL.md +25 -24
  4. package/daemora-ui/README.md +11 -0
  5. package/package.json +12 -2
  6. package/skills/api-development.md +35 -0
  7. package/skills/artifacts-builder/SKILL.md +74 -0
  8. package/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  9. package/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  10. package/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  11. package/skills/brand-guidelines.md +73 -0
  12. package/skills/browser.md +77 -0
  13. package/skills/changelog-generator.md +104 -0
  14. package/skills/coding.md +26 -10
  15. package/skills/content-research-writer.md +538 -0
  16. package/skills/data-analysis.md +27 -0
  17. package/skills/debugging.md +33 -0
  18. package/skills/devops.md +37 -0
  19. package/skills/document-docx.md +197 -0
  20. package/skills/document-pdf.md +294 -0
  21. package/skills/document-pptx.md +484 -0
  22. package/skills/document-xlsx.md +289 -0
  23. package/skills/domain-name-brainstormer.md +212 -0
  24. package/skills/file-organizer.md +433 -0
  25. package/skills/frontend-design.md +42 -0
  26. package/skills/image-enhancer.md +99 -0
  27. package/skills/invoice-organizer.md +446 -0
  28. package/skills/lead-research-assistant.md +199 -0
  29. package/skills/mcp-builder/SKILL.md +328 -0
  30. package/skills/mcp-builder/reference/evaluation.md +602 -0
  31. package/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  32. package/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  33. package/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  34. package/skills/mcp-builder/scripts/connections.py +151 -0
  35. package/skills/mcp-builder/scripts/evaluation.py +373 -0
  36. package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  37. package/skills/mcp-builder/scripts/requirements.txt +2 -0
  38. package/skills/meeting-insights-analyzer.md +327 -0
  39. package/skills/orchestration.md +93 -0
  40. package/skills/raffle-winner-picker.md +159 -0
  41. package/skills/slack-gif-creator/SKILL.md +646 -0
  42. package/skills/slack-gif-creator/core/color_palettes.py +302 -0
  43. package/skills/slack-gif-creator/core/easing.py +230 -0
  44. package/skills/slack-gif-creator/core/frame_composer.py +469 -0
  45. package/skills/slack-gif-creator/core/gif_builder.py +246 -0
  46. package/skills/slack-gif-creator/core/typography.py +357 -0
  47. package/skills/slack-gif-creator/core/validators.py +264 -0
  48. package/skills/slack-gif-creator/core/visual_effects.py +494 -0
  49. package/skills/slack-gif-creator/requirements.txt +4 -0
  50. package/skills/slack-gif-creator/templates/bounce.py +106 -0
  51. package/skills/slack-gif-creator/templates/explode.py +331 -0
  52. package/skills/slack-gif-creator/templates/fade.py +329 -0
  53. package/skills/slack-gif-creator/templates/flip.py +291 -0
  54. package/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
  55. package/skills/slack-gif-creator/templates/morph.py +329 -0
  56. package/skills/slack-gif-creator/templates/move.py +293 -0
  57. package/skills/slack-gif-creator/templates/pulse.py +268 -0
  58. package/skills/slack-gif-creator/templates/shake.py +127 -0
  59. package/skills/slack-gif-creator/templates/slide.py +291 -0
  60. package/skills/slack-gif-creator/templates/spin.py +269 -0
  61. package/skills/slack-gif-creator/templates/wiggle.py +300 -0
  62. package/skills/slack-gif-creator/templates/zoom.py +312 -0
  63. package/skills/system-admin.md +44 -0
  64. package/skills/tailored-resume-generator.md +345 -0
  65. package/skills/theme-factory/SKILL.md +59 -0
  66. package/skills/theme-factory/theme-showcase.pdf +0 -0
  67. package/skills/theme-factory/themes/arctic-frost.md +19 -0
  68. package/skills/theme-factory/themes/botanical-garden.md +19 -0
  69. package/skills/theme-factory/themes/desert-rose.md +19 -0
  70. package/skills/theme-factory/themes/forest-canopy.md +19 -0
  71. package/skills/theme-factory/themes/golden-hour.md +19 -0
  72. package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  73. package/skills/theme-factory/themes/modern-minimalist.md +19 -0
  74. package/skills/theme-factory/themes/ocean-depths.md +19 -0
  75. package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  76. package/skills/theme-factory/themes/tech-innovation.md +19 -0
  77. package/skills/video-downloader.md +99 -0
  78. package/skills/web-development.md +32 -0
  79. package/skills/webapp-testing/SKILL.md +96 -0
  80. package/skills/webapp-testing/examples/console_logging.py +35 -0
  81. package/skills/webapp-testing/examples/element_discovery.py +40 -0
  82. package/skills/webapp-testing/examples/static_html_automation.py +33 -0
  83. package/skills/webapp-testing/scripts/with_server.py +106 -0
  84. package/src/agents/SubAgentManager.js +57 -12
  85. package/src/api/openai-compat.js +212 -0
  86. package/src/channels/TelegramChannel.js +5 -2
  87. package/src/channels/index.js +7 -10
  88. package/src/cli.js +129 -50
  89. package/src/config/agentProfiles.js +1 -0
  90. package/src/config/default.js +10 -0
  91. package/src/config/models.js +317 -71
  92. package/src/config/permissions.js +12 -0
  93. package/src/core/AgentLoop.js +70 -50
  94. package/src/core/Compaction.js +84 -2
  95. package/src/core/MessageQueue.js +90 -0
  96. package/src/core/Task.js +13 -0
  97. package/src/core/TaskQueue.js +1 -1
  98. package/src/core/TaskRunner.js +80 -5
  99. package/src/index.js +328 -48
  100. package/src/mcp/MCPAgentRunner.js +48 -11
  101. package/src/mcp/MCPManager.js +40 -2
  102. package/src/models/ModelRouter.js +67 -1
  103. package/src/safety/DockerSandbox.js +212 -0
  104. package/src/safety/ExecApproval.js +118 -0
  105. package/src/scheduler/Heartbeat.js +56 -21
  106. package/src/services/cleanup.js +106 -0
  107. package/src/services/sessions.js +39 -1
  108. package/src/setup/wizard.js +75 -4
  109. package/src/skills/SkillLoader.js +104 -17
  110. package/src/storage/TaskStore.js +19 -1
  111. package/src/systemPrompt.js +171 -328
  112. package/src/tools/browserAutomation.js +615 -104
  113. package/src/tools/executeCommand.js +19 -1
  114. package/src/tools/index.js +6 -0
  115. package/src/tools/manageAgents.js +55 -4
  116. package/src/tools/replyWithFile.js +62 -0
  117. package/src/tools/screenCapture.js +12 -1
  118. package/src/tools/taskManager.js +164 -0
  119. package/src/tools/useMCP.js +3 -1
  120. package/src/utils/Embeddings.js +157 -10
  121. package/src/webhooks/WebhookHandler.js +107 -0
package/src/cli.js CHANGED
@@ -118,6 +118,10 @@ async function main() {
118
118
  await handleDoctor();
119
119
  break;
120
120
 
121
+ case "cleanup":
122
+ await handleCleanup(subcommand, rest);
123
+ break;
124
+
121
125
  case "channels":
122
126
  await handleChannels(subcommand);
123
127
  break;
@@ -1281,6 +1285,71 @@ async function handleDoctor() {
1281
1285
  }
1282
1286
  }
1283
1287
 
1288
+ // ─── Cleanup ──────────────────────────────────────────────────────────────────
1289
+
1290
+ async function handleCleanup(subcommand, rest) {
1291
+ const { runCleanup, getStorageStats } = await import("./services/cleanup.js");
1292
+ const { readFileSync: rfs, writeFileSync: wfs, existsSync: exs } = await import("fs");
1293
+ const { join: pjoin } = await import("path");
1294
+
1295
+ if (subcommand === "stats") {
1296
+ const stats = getStorageStats();
1297
+ console.log(`\n ${t.h("Storage Stats")}\n`);
1298
+ console.log(` Tasks: ${t.bold(stats.tasks.files)} files (${stats.tasks.sizeKB} KB)`);
1299
+ console.log(` Audit: ${t.bold(stats.audit.files)} files (${stats.audit.sizeKB} KB)`);
1300
+ console.log(` Costs: ${t.bold(stats.costs.files)} files (${stats.costs.sizeKB} KB)`);
1301
+ console.log(` Sessions: ${t.bold(stats.sessions.files)} files (${stats.sessions.sizeKB} KB)`);
1302
+ console.log(`\n Retention: ${stats.retentionDays === "never" ? t.dim("never delete") : t.bold(stats.retentionDays + " days")}`);
1303
+ console.log(` ${t.dim("Set with: daemora cleanup set <days> (0 = never)")}\n`);
1304
+ return;
1305
+ }
1306
+
1307
+ if (subcommand === "set") {
1308
+ const days = parseInt(rest[0], 10);
1309
+ if (isNaN(days) || days < 0) {
1310
+ console.log(`\n ${S.cross} Usage: daemora cleanup set <days> (0 = never delete)\n`);
1311
+ return;
1312
+ }
1313
+
1314
+ // Update .env file
1315
+ const envPath = pjoin(config.rootDir, ".env");
1316
+ if (exs(envPath)) {
1317
+ let env = rfs(envPath, "utf-8");
1318
+ if (env.includes("CLEANUP_AFTER_DAYS=")) {
1319
+ env = env.replace(/CLEANUP_AFTER_DAYS=\d*/, `CLEANUP_AFTER_DAYS=${days}`);
1320
+ } else {
1321
+ env = env.trimEnd() + `\n\n# === Cleanup ===\nCLEANUP_AFTER_DAYS=${days}\n`;
1322
+ }
1323
+ wfs(envPath, env);
1324
+ } else {
1325
+ wfs(envPath, `CLEANUP_AFTER_DAYS=${days}\n`);
1326
+ }
1327
+
1328
+ if (days === 0) {
1329
+ console.log(`\n ${t.success("✔")} Auto-cleanup ${t.bold("disabled")}. Data will be kept forever.\n`);
1330
+ } else {
1331
+ console.log(`\n ${t.success("✔")} Auto-cleanup set to ${t.bold(days + " days")}. Old data deleted on each startup.\n`);
1332
+ }
1333
+ return;
1334
+ }
1335
+
1336
+ // Default: run cleanup now
1337
+ const days = config.cleanupAfterDays || 30;
1338
+ console.log(`\n ${t.h("Cleanup")} ${t.muted(`Deleting data older than ${days} days`)}\n`);
1339
+
1340
+ const result = runCleanup(days);
1341
+
1342
+ if (result.total === 0) {
1343
+ console.log(` ${t.success("✔")} Nothing to clean up.\n`);
1344
+ } else {
1345
+ if (result.tasks > 0) console.log(` ${t.success("✔")} Tasks: ${result.tasks} deleted`);
1346
+ if (result.audit > 0) console.log(` ${t.success("✔")} Audit: ${result.audit} deleted`);
1347
+ if (result.costs > 0) console.log(` ${t.success("✔")} Costs: ${result.costs} deleted`);
1348
+ if (result.sessions > 0) console.log(` ${t.success("✔")} Sessions: ${result.sessions} deleted`);
1349
+ console.log(`\n Total: ${t.bold(result.total)} file(s) deleted.\n`);
1350
+ }
1351
+ }
1352
+
1284
1353
  // ─── Channels ─────────────────────────────────────────────────────────────────
1285
1354
 
1286
1355
  const CHANNEL_DEFS = [
@@ -1675,60 +1744,66 @@ async function handleModels() {
1675
1744
  {
1676
1745
  name: "OpenAI", prefix: "openai", envKey: "OPENAI_API_KEY",
1677
1746
  models: [
1678
- // GPT-5 family
1679
- { id: "gpt-5.3-codex", desc: "Latest coding model (2025)", isNew: true },
1680
- { id: "gpt-5.2-pro", desc: "GPT-5.2 Pro — highest capability", isNew: true },
1681
- { id: "gpt-5.2", desc: "GPT-5.2 flagship (Dec 2025)", isNew: true },
1682
- { id: "gpt-5.1-codex-max", desc: "GPT-5.1 Codex Max — coding (Nov 2025)", isNew: true },
1683
- { id: "gpt-5.1", desc: "GPT-5.1 (Nov 2025)", isNew: true },
1684
- { id: "gpt-5-pro", desc: "GPT-5 Pro — most powerful" },
1685
- { id: "gpt-5", desc: "GPT-5 flagship (Aug 2025)" },
1686
- { id: "gpt-5-mini", desc: "GPT-5 Mini fast & cheap" },
1687
- { id: "gpt-5-nano", desc: "GPT-5 Nanocheapest GPT-5" },
1747
+ // GPT-5.4
1748
+ { id: "gpt-5.4", desc: "GPT-5.4 flagship", price: "$2.50/$15", isNew: true },
1749
+ { id: "gpt-5.4-pro", desc: "GPT-5.4 Pro — highest capability", price: "$30/$180", isNew: true },
1750
+ // GPT-5.2
1751
+ { id: "gpt-5.2", desc: "GPT-5.2 flagship (Dec 2025)", price: "$1.75/$14", isNew: true },
1752
+ { id: "gpt-5.2-pro", desc: "GPT-5.2 Pro — extended reasoning", price: "$21/$168", isNew: true },
1753
+ // GPT-5.1 / 5
1754
+ { id: "gpt-5.1", desc: "GPT-5.1 (Nov 2025)", price: "$1.25/$10", isNew: true },
1755
+ { id: "gpt-5", desc: "GPT-5 flagship (Aug 2025)", price: "$1.25/$10" },
1756
+ { id: "gpt-5-pro", desc: "GPT-5 Promost powerful", price: "$15/$120" },
1757
+ { id: "gpt-5-mini", desc: "GPT-5 Mini — fast & cheap", price: "$0.25/$2" },
1758
+ { id: "gpt-5-nano", desc: "GPT-5 Nano — cheapest GPT-5", price: "$0.05/$0.40" },
1759
+ // Codex
1760
+ { id: "gpt-5.3-codex", desc: "Latest coding model (2025)", price: "$1.75/$14", isNew: true },
1761
+ { id: "gpt-5.1-codex", desc: "GPT-5.1 Codex — coding", price: "$1.25/$10", isNew: true },
1762
+ { id: "gpt-5-codex", desc: "GPT-5 Codex — coding", price: "$1.25/$10" },
1688
1763
  // o-series reasoning
1689
- { id: "o3-pro", desc: "Best reasoning — most thorough" },
1690
- { id: "o3-deep-research", desc: "Deep research with web browsing" },
1691
- { id: "o4-mini-deep-research", desc: "Fast deep research" },
1692
- { id: "o3", desc: "Advanced reasoning (Apr 2025)" },
1693
- { id: "o4-mini", desc: "Fast reasoning (Apr 2025)" },
1694
- { id: "o1-pro", desc: "o1 Pro — powerful reasoning (Mar 2025)" },
1695
- { id: "o1", desc: "o1 reasoning model" },
1696
- { id: "o3-mini", desc: "Lightweight reasoning" },
1764
+ { id: "o3-pro", desc: "Best reasoning — most thorough", price: "$20/$80" },
1765
+ { id: "o3", desc: "Advanced reasoning (Apr 2025)", price: "$2/$8" },
1766
+ { id: "o4-mini", desc: "Fast reasoning (Apr 2025)", price: "$1.10/$4.40" },
1767
+ { id: "o1-pro", desc: "o1 Pro powerful reasoning", price: "$150/$600" },
1768
+ { id: "o1", desc: "o1 reasoning model", price: "$15/$60" },
1769
+ { id: "o3-mini", desc: "Lightweight reasoning", price: "$1.10/$4.40" },
1697
1770
  // GPT-4.1 (1M context)
1698
- { id: "gpt-4.1", desc: "1M context, best instruction following" },
1699
- { id: "gpt-4.1-mini", desc: "1M context, fast & affordable (default)" },
1700
- { id: "gpt-4.1-nano", desc: "1M context, fastest & cheapest" },
1771
+ { id: "gpt-4.1", desc: "1M context, best instruction following", price: "$2/$8" },
1772
+ { id: "gpt-4.1-mini", desc: "1M context, fast & affordable (default)", price: "$0.40/$1.60" },
1773
+ { id: "gpt-4.1-nano", desc: "1M context, fastest & cheapest", price: "$0.10/$0.40" },
1701
1774
  // GPT-4o & specialized
1702
- { id: "gpt-4o", desc: "Vision + text (128K ctx)" },
1703
- { id: "gpt-4o-mini", desc: "GPT-4o Mini (128K ctx)" },
1704
- { id: "computer-use-preview", desc: "Computer use / GUI automation" },
1705
- { id: "gpt-4o-search-preview", desc: "Built-in live web search" },
1706
- { id: "gpt-image-1", desc: "Image generation (native API)" },
1775
+ { id: "gpt-4o", desc: "Vision + text (128K ctx)", price: "$2.50/$10" },
1776
+ { id: "gpt-4o-mini", desc: "GPT-4o Mini (128K ctx)", price: "$0.15/$0.60" },
1777
+ { id: "computer-use-preview", desc: "Computer use / GUI automation", price: "$3/$12" },
1707
1778
  ],
1708
1779
  },
1709
1780
  {
1710
1781
  name: "Anthropic", prefix: "anthropic", envKey: "ANTHROPIC_API_KEY",
1711
1782
  models: [
1712
- { id: "claude-opus-4-6", desc: "Most intelligent — complex reasoning + extended thinking", isNew: true },
1713
- { id: "claude-sonnet-4-6", desc: "Best speed/intelligencedaily coding & agents", isNew: true },
1714
- { id: "claude-haiku-4-5", desc: "Fastesthigh-volume, cost-sensitive tasks" },
1715
- { id: "claude-opus-4-5-20251101", desc: "Opus 4.5complex multi-step tasks (Nov 2025)" },
1716
- { id: "claude-sonnet-4-5-20250929", desc: "Sonnet 4.5 — coding & agentic tasks (200K ctx)" },
1717
- { id: "claude-opus-4-1-20250805", desc: "Opus 4.1long-duration complex tasks" },
1718
- { id: "claude-3-5-sonnet-latest", desc: "3.5 Sonnet — previous gen, widely used" },
1719
- { id: "claude-3-5-haiku-latest", desc: "3.5 Haiku fast previous gen" },
1783
+ { id: "claude-opus-4-6", desc: "Most intelligent — complex reasoning", price: "$5/$25", isNew: true },
1784
+ { id: "claude-opus-4-5", desc: "Opus 4.5complex multi-step tasks", price: "$5/$25", isNew: true },
1785
+ { id: "claude-opus-4-1", desc: "Opus 4.1 long-duration complex tasks", price: "$15/$75" },
1786
+ { id: "claude-opus-4", desc: "Opus 4 — extended thinking", price: "$15/$75" },
1787
+ { id: "claude-sonnet-4-6", desc: "Best speed/intelligence — coding & agents", price: "$3/$15", isNew: true },
1788
+ { id: "claude-sonnet-4-5", desc: "Sonnet 4.5coding & agentic tasks", price: "$3/$15" },
1789
+ { id: "claude-sonnet-4", desc: "Sonnet 4 balanced performance", price: "$3/$15" },
1790
+ { id: "claude-haiku-4-5", desc: "Fastesthigh-volume, cost-sensitive", price: "$1/$5" },
1791
+ { id: "claude-haiku-3-5", desc: "3.5 Haiku — fast previous gen", price: "$0.80/$4" },
1792
+ { id: "claude-haiku-3", desc: "Haiku 3 — cheapest Claude", price: "$0.25/$1.25" },
1720
1793
  ],
1721
1794
  },
1722
1795
  {
1723
1796
  name: "Google", prefix: "google", envKey: "GOOGLE_AI_API_KEY",
1724
1797
  models: [
1725
- { id: "gemini-3.1-pro-preview", desc: "Latest — complex tasks, advanced reasoning", isNew: true },
1726
- { id: "gemini-3.1-flash-lite-preview", desc: "Latest — cost-efficient & fast", isNew: true },
1727
- { id: "gemini-2.5-pro", desc: "GAcomplex reasoning & coding (1M ctx)" },
1728
- { id: "gemini-2.5-flash", desc: "Fast & cost-effective for high-volume tasks" },
1729
- { id: "gemini-2.5-flash-lite", desc: "Speed-optimised for high-throughput" },
1730
- { id: "gemini-live-2.5-flash-native-audio", desc: "Real-time bidirectional audio/video agents" },
1731
- { id: "gemini-2.0-flash", desc: "Previous gen flash" },
1798
+ { id: "gemini-3.1-pro-preview", desc: "Latest — complex tasks, reasoning", price: "$2/$12", isNew: true },
1799
+ { id: "gemini-3.1-flash-lite-preview", desc: "Latest — cost-efficient & fast", price: "$0.25/$1.50", isNew: true },
1800
+ { id: "gemini-3-pro-preview", desc: "Gemini 3 Pro advanced reasoning", price: "$2/$12", isNew: true },
1801
+ { id: "gemini-3-flash-preview", desc: "Gemini 3 Flash fast & cheap", price: "$0.50/$3", isNew: true },
1802
+ { id: "gemini-2.5-pro", desc: "GA complex reasoning & coding (1M)", price: "$1.25/$10" },
1803
+ { id: "gemini-2.5-flash", desc: "Fast & cost-effective for high-volume", price: "$0.30/$2.50" },
1804
+ { id: "gemini-2.5-flash-lite", desc: "Speed-optimised for high-throughput", price: "$0.10/$0.40" },
1805
+ { id: "gemini-2.0-flash", desc: "Previous gen flash", price: "$0.15/$0.60" },
1806
+ { id: "gemini-2.0-flash-lite", desc: "Cheapest Gemini", price: "$0.075/$0.30" },
1732
1807
  ],
1733
1808
  },
1734
1809
  {
@@ -1758,14 +1833,14 @@ async function handleModels() {
1758
1833
  {
1759
1834
  name: "Ollama (local)", prefix: "ollama", configured: true,
1760
1835
  models: [
1761
- { id: "llama4-maverick", desc: "Llama 4 Maverick — 17B MoE, 1M ctx, multimodal", isNew: true },
1762
- { id: "llama4-scout", desc: "Llama 4 Scout — 17B MoE, 10M ctx", isNew: true },
1763
- { id: "llama3.3", desc: "Llama 3.3 70B — best open model (Dec 2024)" },
1764
- { id: "qwen2.5", desc: "Qwen 2.5 72B — strong coder" },
1765
- { id: "deepseek-r1", desc: "DeepSeek-R1 local — reasoning" },
1766
- { id: "mistral", desc: "Mistral 7B — fast small model" },
1767
- { id: "phi4", desc: "Phi-4 14B — Microsoft small model" },
1768
- { id: "codellama", desc: "CodeLlama — code specialised" },
1836
+ { id: "llama4-maverick", desc: "Llama 4 Maverick — 17B MoE, 1M ctx, multimodal", price: "free", isNew: true },
1837
+ { id: "llama4-scout", desc: "Llama 4 Scout — 17B MoE, 10M ctx", price: "free", isNew: true },
1838
+ { id: "llama3.3", desc: "Llama 3.3 70B — best open model (Dec 2024)", price: "free" },
1839
+ { id: "qwen2.5", desc: "Qwen 2.5 72B — strong coder", price: "free" },
1840
+ { id: "deepseek-r1", desc: "DeepSeek-R1 local — reasoning", price: "free" },
1841
+ { id: "mistral", desc: "Mistral 7B — fast small model", price: "free" },
1842
+ { id: "phi4", desc: "Phi-4 14B — Microsoft small model", price: "free" },
1843
+ { id: "codellama", desc: "CodeLlama — code specialised", price: "free" },
1769
1844
  ],
1770
1845
  },
1771
1846
  ];
@@ -1792,7 +1867,8 @@ async function handleModels() {
1792
1867
  for (const m of prov.models) {
1793
1868
  const fullId = `${prov.prefix}:${m.id}`;
1794
1869
  const newBadge = m.isNew ? chalk.hex(P.amber)(" [NEW]") : "";
1795
- console.log(` ${S.dot} ${chalk.hex(P.teal)(fullId.padEnd(50))}${newBadge}`);
1870
+ const priceTag = m.price ? chalk.hex(P.muted)(` ${m.price} /MTok`) : "";
1871
+ console.log(` ${S.dot} ${chalk.hex(P.teal)(fullId.padEnd(44))}${priceTag}${newBadge}`);
1796
1872
  console.log(` ${chalk.hex(P.dim)(m.desc)}`);
1797
1873
  }
1798
1874
  }
@@ -2036,6 +2112,9 @@ ${line}
2036
2112
  ${t.cmd("tools")} ${t.dim("[filter]")} List all 50 built-in tools (filter by name/category)
2037
2113
 
2038
2114
  ${t.cmd("doctor")} Security audit - check for misconfigurations
2115
+ ${t.cmd("cleanup")} Delete old tasks, logs, and sessions
2116
+ ${t.cmd("cleanup set")} ${t.dim("<days>")} Set auto-cleanup retention (0 = never)
2117
+ ${t.cmd("cleanup stats")} Show storage usage per directory
2039
2118
 
2040
2119
  ${t.cmd("help")} Show this help
2041
2120
 
@@ -114,6 +114,7 @@ export const defaultSubAgentTools = [
114
114
  "searchMemory", "pruneMemory", "listMemoryCategories",
115
115
  // Project tracking
116
116
  "projectTracker",
117
+ "taskManager",
117
118
  // MCP (via specialist agent - no direct mcp__ tools)
118
119
  "manageMCP",
119
120
  "useMCP",
@@ -34,6 +34,13 @@ export const config = {
34
34
  maxLoops: 40,
35
35
  maxSubAgentDepth: 3,
36
36
 
37
+ // Thinking level: "auto" | "off" | "minimal" | "low" | "medium" | "high" | "xhigh"
38
+ thinkingLevel: process.env.THINKING_LEVEL || "auto",
39
+
40
+ // Message queue mode: "steer" (inject into live loop) | "collect" (batch into follow-up) | "followup" (queue as separate)
41
+ queueMode: process.env.QUEUE_MODE || "steer",
42
+ debounceMs: parseInt(process.env.DEBOUNCE_MS || "1500", 10),
43
+
37
44
  // Safety
38
45
  permissionTier: process.env.PERMISSION_TIER || "standard",
39
46
 
@@ -41,6 +48,9 @@ export const config = {
41
48
  maxCostPerTask: parseFloat(process.env.MAX_COST_PER_TASK || "0.50"),
42
49
  maxDailyCost: parseFloat(process.env.MAX_DAILY_COST || "10.00"),
43
50
 
51
+ // Cleanup
52
+ cleanupAfterDays: parseInt(process.env.CLEANUP_AFTER_DAYS || "30", 10), // 0 = never
53
+
44
54
  // Daemon
45
55
  daemonMode: process.env.DAEMON_MODE === "true",
46
56
  heartbeatIntervalMinutes: parseInt(process.env.HEARTBEAT_INTERVAL_MINUTES || "30", 10),