@rubytech/create-realagent 1.0.832 → 1.0.834

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 (97) hide show
  1. package/dist/index.js +131 -9
  2. package/package.json +1 -1
  3. package/payload/platform/lib/admins-write/dist/index.d.ts +87 -0
  4. package/payload/platform/lib/admins-write/dist/index.d.ts.map +1 -0
  5. package/payload/platform/lib/admins-write/dist/index.js +248 -0
  6. package/payload/platform/lib/admins-write/dist/index.js.map +1 -0
  7. package/payload/platform/lib/admins-write/src/index.ts +311 -0
  8. package/payload/platform/lib/admins-write/tsconfig.json +8 -0
  9. package/payload/platform/neo4j/migrations/009-conversation-archive-title.ts +197 -0
  10. package/payload/platform/neo4j/schema.cypher +1 -1
  11. package/payload/platform/package.json +2 -2
  12. package/payload/platform/plugins/admin/PLUGIN.md +1 -1
  13. package/payload/platform/plugins/admin/mcp/dist/index.js +37 -44
  14. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  15. package/payload/platform/plugins/docs/references/internals.md +4 -3
  16. package/payload/platform/plugins/memory/bin/conversation-archive-ingest.mjs +215 -43
  17. package/payload/platform/plugins/memory/bin/conversation-archive-ingest.sh +7 -2
  18. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js +75 -0
  19. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js.map +1 -1
  20. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts +16 -10
  21. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts.map +1 -1
  22. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js +155 -100
  23. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js.map +1 -1
  24. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts +13 -5
  25. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts.map +1 -1
  26. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js +53 -59
  27. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js.map +1 -1
  28. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js +9 -0
  29. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js.map +1 -1
  30. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts +24 -7
  31. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
  32. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +47 -11
  33. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
  34. package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +45 -8
  35. package/payload/platform/scripts/lib/resolve-account-dir.sh +3 -1
  36. package/payload/platform/scripts/migrate-import.sh +3 -1
  37. package/payload/platform/scripts/seed-neo4j.sh +13 -3
  38. package/payload/server/chunk-CRAIGEXY.js +654 -0
  39. package/payload/server/chunk-GK4WHM3H.js +9961 -0
  40. package/payload/server/chunk-I2NOLBQA.js +2123 -0
  41. package/payload/server/chunk-IVTESKFR.js +9961 -0
  42. package/payload/server/chunk-KD3XP4IK.js +1116 -0
  43. package/payload/server/chunk-KKGGT5RH.js +654 -0
  44. package/payload/server/chunk-MRJGG6CS.js +2124 -0
  45. package/payload/server/chunk-OJZPS4BL.js +367 -0
  46. package/payload/server/chunk-ZVW5XKPU.js +1116 -0
  47. package/payload/server/client-pool-FM3YJWV5.js +32 -0
  48. package/payload/server/client-pool-J5BCVVI2.js +32 -0
  49. package/payload/server/cloudflare-task-tracker-FSPEJOTH.js +19 -0
  50. package/payload/server/cloudflare-task-tracker-XCUO4N74.js +19 -0
  51. package/payload/server/maxy-edge.js +6 -5
  52. package/payload/server/neo4j-migrations-5AN2U3YO.js +664 -0
  53. package/payload/server/neo4j-migrations-XP7XDVPX.js +664 -0
  54. package/payload/server/public/assets/{Checkbox-CTGhpDKq.js → Checkbox-Bq6ORjz2.js} +1 -1
  55. package/payload/server/public/assets/admin-CstEkw-G.js +352 -0
  56. package/payload/server/public/assets/data-DwZZ7qbH.js +1 -0
  57. package/payload/server/public/assets/graph-DceEv42K.js +1 -0
  58. package/payload/server/public/assets/{jsx-runtime-D4WovFYk.css → jsx-runtime-DidQeNoZ.css} +1 -1
  59. package/payload/server/public/assets/page-Bpi_jPw6.js +50 -0
  60. package/payload/server/public/assets/{page-DkBfWy4C.js → page-CFWoVkgV.js} +1 -1
  61. package/payload/server/public/assets/{public-BdVIVpv8.js → public-BWMwq5Jj.js} +1 -1
  62. package/payload/server/public/assets/{useAdminFetch-DmHu0oCx.js → useAdminFetch-B93ig7ef.js} +1 -1
  63. package/payload/server/public/assets/{useVoiceRecorder-CSc_hxjV.js → useVoiceRecorder-Cb0nAtOo.js} +1 -1
  64. package/payload/server/public/data.html +5 -5
  65. package/payload/server/public/graph.html +6 -6
  66. package/payload/server/public/index.html +8 -8
  67. package/payload/server/public/public.html +5 -5
  68. package/payload/server/server.js +376 -167
  69. package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.d.ts +0 -31
  70. package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.d.ts.map +0 -1
  71. package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.js +0 -666
  72. package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.js.map +0 -1
  73. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.d.ts +0 -61
  74. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.d.ts.map +0 -1
  75. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.js +0 -266
  76. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.js.map +0 -1
  77. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-pass.d.ts +0 -27
  78. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-pass.d.ts.map +0 -1
  79. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-pass.js +0 -477
  80. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-pass.js.map +0 -1
  81. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-write.d.ts +0 -27
  82. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-write.d.ts.map +0 -1
  83. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-write.js +0 -160
  84. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-write.js.map +0 -1
  85. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-parse.d.ts +0 -10
  86. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-parse.d.ts.map +0 -1
  87. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-parse.js +0 -29
  88. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-parse.js.map +0 -1
  89. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-preview.d.ts +0 -28
  90. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-preview.d.ts.map +0 -1
  91. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-preview.js +0 -34
  92. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-preview.js.map +0 -1
  93. package/payload/server/public/assets/admin-BNwPsMhJ.js +0 -352
  94. package/payload/server/public/assets/data-Y77FLKjs.js +0 -1
  95. package/payload/server/public/assets/graph-N_Bw-8oT.js +0 -1
  96. package/payload/server/public/assets/page-BKLGP-th.js +0 -50
  97. /package/payload/server/public/assets/{jsx-runtime-DkaAusaX.js → jsx-runtime-DH5S-MwB.js} +0 -0
@@ -8,6 +8,7 @@ import { resolve, join } from "node:path";
8
8
  import { execFileSync } from "node:child_process";
9
9
  import { appendFileSync, cpSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, statSync, writeFileSync } from "node:fs";
10
10
  import { writeKey, validateKey, hasKey, keyFilePath, deleteKey } from "../../../../lib/anthropic-key/dist/index.js";
11
+ import { writeAdminEntry, removeAdminFromAccount } from "../../../../lib/admins-write/dist/index.js";
11
12
  import { deviceUrlBlock } from "../../../../lib/device-url/dist/index.js";
12
13
  import { substituteBrandPlaceholders } from "../../../../lib/brand-templating/dist/index.js";
13
14
  import { resolveEntitlement } from "../../../../lib/entitlement/dist/index.js";
@@ -102,7 +103,11 @@ async function readAccountConfig() {
102
103
  const STAGING_ROOT = resolve(PLATFORM_ROOT, "../premium-plugins");
103
104
  const PLUGINS_DIR = resolve(PLATFORM_ROOT, "plugins");
104
105
  const CORE_PLUGINS = ["admin", "memory", "docs", "cloudflare", "anthropic"];
105
- const USERS_FILE = resolve(PLATFORM_ROOT, "config", "users.json");
106
+ // users.json lives under CONFIG_DIR (persistent) see paths.ts comment for
107
+ // the regression that motivated the move. Both platform/ui and this MCP plugin
108
+ // resolve the same file via brand-aware $HOME/<configDir>, so the device-level
109
+ // admin auth store is single-pathed across both processes (Task 904).
110
+ const USERS_FILE = resolve(CONFIG_DIR, "users.json");
106
111
  /** Maximum number of admin users allowed per tier. */
107
112
  const MAX_ADMINS_BY_TIER = {
108
113
  solo: 1,
@@ -678,42 +683,29 @@ server.tool("admin-add", "Add a new admin user to this account. Creates a device
678
683
  }
679
684
  const pinHash = hashPin(plaintextPin);
680
685
  const userId = crypto.randomUUID();
681
- // Three-store admin auth invariant (Task 850): users.json (device-level
682
- // PIN auth), account.json admins[] (account-level role), Neo4j AdminUser
683
- // (display + graph identity). Each leg emits a [admin-auth-store] line so
684
- // a future incident can grep one log to know which leg failed; any leg
685
- // failing makes the tool result is_error: true with a cause line citing
686
- // what's already been written. No automatic rollback the cause line is
687
- // the manual-recovery diagnostic.
686
+ // Three-store admin auth invariant (Task 850 → Task 904): users.json
687
+ // (device-level PIN auth) and account.json admins[] (account-level role)
688
+ // route through the shared `admins-write` helper so the dual write has a
689
+ // single chokepoint. Per-leg `[admins-write]` and legacy `[admin-auth-store]`
690
+ // log lines fire so existing dashboards continue to grep. Neo4j AdminUser
691
+ // (display + graph identity) writes below remain inline because they have
692
+ // no dual-file invariant.
688
693
  const userIdShort = userId.slice(0, 8);
689
- // 1. Write to users.json (device-level). Auth fields only — `name` lives
690
- // on the AdminUser node in Neo4j (Task 829).
691
- users.push({ userId, pin: pinHash });
692
- try {
693
- writeUsersJson(users);
694
- console.error(`[admin-auth-store] action=add userId=${userIdShort} result=ok store=users`);
695
- }
696
- catch (err) {
697
- const errMsg = err instanceof Error ? err.message : String(err);
698
- console.error(`[admin-auth-store] action=add userId=${userIdShort} result=fail store=users error=${errMsg}`);
699
- return { content: [{ type: "text", text: `${TAG} Failed to write users.json: ${errMsg}` }], isError: true };
700
- }
701
- // 2. Write to account.json (account-level)
702
- try {
703
- const config = await readAccountConfig();
704
- const admins = (config.admins ?? []);
705
- if (!admins.some(a => a.userId === userId)) {
706
- admins.push({ userId, role: "admin" });
707
- config.admins = admins;
708
- const configPath = join(getAccountDir(), "account.json");
709
- await writeFile(configPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
710
- }
711
- console.error(`[admin-auth-store] action=add userId=${userIdShort} result=ok store=account`);
694
+ const authResult = writeAdminEntry({
695
+ userId,
696
+ pin: pinHash,
697
+ role: "admin",
698
+ usersFile: USERS_FILE,
699
+ accountDir: getAccountDir(),
700
+ caller: "admin-add",
701
+ });
702
+ console.error(`[admin-auth-store] action=add userId=${userIdShort} result=${authResult.usersJsonResult} store=users${authResult.usersError ? ` error=${authResult.usersError}` : ""}`);
703
+ if (authResult.usersJsonResult !== "ok") {
704
+ return { content: [{ type: "text", text: `${TAG} Failed to write users.json: ${authResult.usersError ?? "unknown error"}` }], isError: true };
712
705
  }
713
- catch (err) {
714
- const errMsg = err instanceof Error ? err.message : String(err);
715
- console.error(`[admin-auth-store] action=add userId=${userIdShort} result=fail store=account error=${errMsg}`);
716
- return { content: [{ type: "text", text: `${TAG} users.json updated; account.json write FAILED — manual reconciliation needed: ${errMsg}` }], isError: true };
706
+ console.error(`[admin-auth-store] action=add userId=${userIdShort} result=${authResult.accountJsonResult} store=account${authResult.accountError ? ` error=${authResult.accountError}` : ""}`);
707
+ if (authResult.accountJsonResult === "fail") {
708
+ return { content: [{ type: "text", text: `${TAG} users.json updated; account.json write FAILED — manual reconciliation needed: ${authResult.accountError ?? "unknown error"}` }], isError: true };
717
709
  }
718
710
  // 3. Write to Neo4j (graph-level): AdminUser + Person + OWNS atomically,
719
711
  // plus ADMIN_OF edge to the LocalBusiness for this account.
@@ -860,15 +852,16 @@ server.tool("admin-remove", "Remove an admin from this account. Removes them fro
860
852
  }
861
853
  }
862
854
  catch { /* name lookup is best-effort */ }
863
- // 1. Remove from account.json
864
- admins.splice(targetIndex, 1);
865
- config.admins = admins;
866
- try {
867
- const configPath = join(getAccountDir(), "account.json");
868
- await writeFile(configPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
869
- }
870
- catch (err) {
871
- return { content: [{ type: "text", text: `${TAG} Failed to write account.json: ${err instanceof Error ? err.message : String(err)}` }], isError: true };
855
+ // 1. Remove from account.json — single-file write through the shared
856
+ // chokepoint helper. users.json is intentionally untouched (the user may
857
+ // admin other accounts on this device); the helper logs `usersJsonResult=skip`.
858
+ const removeResult = removeAdminFromAccount({
859
+ userId,
860
+ accountDir: getAccountDir(),
861
+ caller: "admin-remove",
862
+ });
863
+ if (removeResult.accountJsonResult === "fail") {
864
+ return { content: [{ type: "text", text: `${TAG} Failed to write account.json: ${removeResult.accountError ?? "unknown error"}` }], isError: true };
872
865
  }
873
866
  // 2. Delete ADMIN_OF relationship in Neo4j — partial failure is a warning
874
867
  let neo4jWarning = "";