@rubytech/create-maxy-code 0.1.437 → 0.1.439

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 (60) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/admin-access-password/__tests__/index.test.ts +31 -0
  3. package/payload/platform/lib/admin-access-password/dist/index.d.ts +8 -0
  4. package/payload/platform/lib/admin-access-password/dist/index.d.ts.map +1 -1
  5. package/payload/platform/lib/admin-access-password/dist/index.js +5 -1
  6. package/payload/platform/lib/admin-access-password/dist/index.js.map +1 -1
  7. package/payload/platform/lib/admin-access-password/src/index.ts +14 -1
  8. package/payload/platform/lib/admins-write/__tests__/index.test.ts +27 -0
  9. package/payload/platform/lib/admins-write/dist/index.d.ts +8 -0
  10. package/payload/platform/lib/admins-write/dist/index.d.ts.map +1 -1
  11. package/payload/platform/lib/admins-write/dist/index.js +5 -1
  12. package/payload/platform/lib/admins-write/dist/index.js.map +1 -1
  13. package/payload/platform/lib/admins-write/src/index.ts +14 -1
  14. package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
  15. package/payload/platform/plugins/admin/PLUGIN.md +4 -2
  16. package/payload/platform/plugins/admin/mcp/dist/credential-identity.d.ts +23 -0
  17. package/payload/platform/plugins/admin/mcp/dist/credential-identity.d.ts.map +1 -0
  18. package/payload/platform/plugins/admin/mcp/dist/credential-identity.js +35 -0
  19. package/payload/platform/plugins/admin/mcp/dist/credential-identity.js.map +1 -0
  20. package/payload/platform/plugins/admin/mcp/dist/index.js +110 -57
  21. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  22. package/payload/platform/plugins/admin/mcp/dist/tools/account-lifecycle.d.ts +22 -0
  23. package/payload/platform/plugins/admin/mcp/dist/tools/account-lifecycle.d.ts.map +1 -1
  24. package/payload/platform/plugins/admin/mcp/dist/tools/account-lifecycle.js +62 -2
  25. package/payload/platform/plugins/admin/mcp/dist/tools/account-lifecycle.js.map +1 -1
  26. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +7 -1
  27. package/payload/platform/plugins/docs/references/admin-identity-gate.md +40 -0
  28. package/payload/platform/plugins/docs/references/internals.md +4 -0
  29. package/payload/platform/plugins/docs/references/plugins-guide.md +2 -0
  30. package/payload/platform/plugins/graph-viewer/.claude-plugin/plugin.json +13 -0
  31. package/payload/platform/plugins/graph-viewer/PLUGIN.md +1 -1
  32. package/payload/platform/plugins/graph-viewer/lib/mcp-spawn-tee/index.js +193 -0
  33. package/payload/platform/plugins/graph-viewer/lib/mcp-spawn-tee/package.json +3 -0
  34. package/payload/platform/plugins/linkedin-import/skills/linkedin-import/references/profile.md +1 -1
  35. package/payload/platform/scripts/remediate-glsmith-identity.sh +500 -0
  36. package/payload/platform/scripts/seed-neo4j.sh +77 -12
  37. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  38. package/payload/platform/services/claude-session-manager/dist/http-server.js +20 -4
  39. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  40. package/payload/platform/services/claude-session-manager/dist/identity-audit.d.ts +51 -0
  41. package/payload/platform/services/claude-session-manager/dist/identity-audit.d.ts.map +1 -0
  42. package/payload/platform/services/claude-session-manager/dist/identity-audit.js +103 -0
  43. package/payload/platform/services/claude-session-manager/dist/identity-audit.js.map +1 -0
  44. package/payload/platform/services/claude-session-manager/dist/index.js +69 -0
  45. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  46. package/payload/platform/services/claude-session-manager/dist/mcp-user-binding.d.ts +25 -0
  47. package/payload/platform/services/claude-session-manager/dist/mcp-user-binding.d.ts.map +1 -0
  48. package/payload/platform/services/claude-session-manager/dist/mcp-user-binding.js +42 -0
  49. package/payload/platform/services/claude-session-manager/dist/mcp-user-binding.js.map +1 -0
  50. package/payload/platform/services/claude-session-manager/dist/redundant-operator-seat-audit.d.ts +44 -0
  51. package/payload/platform/services/claude-session-manager/dist/redundant-operator-seat-audit.d.ts.map +1 -0
  52. package/payload/platform/services/claude-session-manager/dist/redundant-operator-seat-audit.js +127 -0
  53. package/payload/platform/services/claude-session-manager/dist/redundant-operator-seat-audit.js.map +1 -0
  54. package/payload/platform/services/claude-session-manager/dist/tool-registration-drift.d.ts +57 -0
  55. package/payload/platform/services/claude-session-manager/dist/tool-registration-drift.d.ts.map +1 -0
  56. package/payload/platform/services/claude-session-manager/dist/tool-registration-drift.js +147 -0
  57. package/payload/platform/services/claude-session-manager/dist/tool-registration-drift.js.map +1 -0
  58. package/payload/server/{chunk-LMLVOZ6G.js → chunk-UGPQCVIW.js} +11 -38
  59. package/payload/server/maxy-edge.js +1 -1
  60. package/payload/server/server.js +15 -16
@@ -30,6 +30,7 @@ import { mergeTarget, isMultiTarget, targetKinds } from './channel-targets.js';
30
30
  import { randomUUID, createHash } from 'node:crypto';
31
31
  import { execFile, execFileSync } from 'node:child_process';
32
32
  import { buildRcChildEnv, reapplyAdminLevers } from './rc-daemon.js';
33
+ import { resolveSpawnUserId, formatMcpUserBindingLine } from './mcp-user-binding.js';
33
34
  import { runConnectorAuthLogin } from './connector-auth.js';
34
35
  import { isEffortLevel, isNewSessionEffortLevel, isPermissionMode, SONNET_MODEL } from '../../../lib/models/dist/index.js';
35
36
  import { spawnClaudeSession, stopSession, writeInterruptToPty, isLive, onPtyExit, livePtyCount, liveSessionIds, getPtyTrackerForTests, livePidForSession, classifyLiveness, priorExitedCountForSession, PERMISSION_MODES, openFdCount, registerRcSpawnPty, } from './pty-spawner.js';
@@ -2292,8 +2293,10 @@ export function buildHttpApp(deps) {
2292
2293
  : undefined;
2293
2294
  // Task 682 — per-session userId override. Server-resolved by the UI from the
2294
2295
  // authoritative users.json/account.json (never message content) and shape-
2295
- // validated here the same way as personId. Absent for owner self-phone and
2296
- // any unbound sender, where the boot-time deps.userId (owner) is used.
2296
+ // validated here the same way as personId. Task 1573 — absent for owner
2297
+ // self-phone and any unbound sender; USER_ID is then the authenticated
2298
+ // adminUserId when present, else empty. The boot owner is no longer a
2299
+ // fallback at this layer (see resolveSpawnUserId).
2297
2300
  const overrideUserId = typeof body.userId === 'string' && body.userId.length > 0 && body.userId.length <= 128
2298
2301
  ? body.userId
2299
2302
  : undefined;
@@ -2840,9 +2843,12 @@ export function buildHttpApp(deps) {
2840
2843
  }
2841
2844
  deps.logger(`[rc-spawn] op=voice-injected bytes=${voiceBytes}`);
2842
2845
  }
2846
+ // Task 1573 — the authenticated admin identity, resolved from the body
2847
+ // (validated PIN session) or the persisted sidecar. This, not the
2848
+ // owner-defaulting overrideUserId, is the source of the child USER_ID.
2849
+ const resolvedAdminUserId = adminUserId ?? priorSidecar?.adminUserId ?? null;
2843
2850
  if (effectiveWebchatChannel && adminBinding) {
2844
2851
  const resolvedName = authenticatedName ?? priorSidecar?.authenticatedName ?? null;
2845
- const resolvedAdminUserId = adminUserId ?? priorSidecar?.adminUserId ?? null;
2846
2852
  // `source` follows where the resolved name actually came from. When no
2847
2853
  // name resolves (resolved=0) it reports which signal marked the session
2848
2854
  // admin: the caller's body role, else the persisted sidecar.
@@ -2888,12 +2894,22 @@ export function buildHttpApp(deps) {
2888
2894
  acctIsHouse,
2889
2895
  inject: rcHouseAdminScope !== null,
2890
2896
  }));
2897
+ // Task 1573 — stamp USER_ID from the authenticated admin identity, never
2898
+ // the owner via `deps.userId`. An authenticated non-owner session whose body
2899
+ // omitted `userId` used to fall back to the owner, so its admin MCP inherited
2900
+ // the owner's USER_ID and rewrote the owner's credential row. Empty (no admin
2901
+ // identity, unbound sender) is a documented-legal USER_ID. The reconciliation
2902
+ // line compares the two independent identity signals (authenticated adminUserId
2903
+ // vs server-resolved overrideUserId) and records the stamped USER_ID, so a
2904
+ // future disagreement is greppable at spawn time.
2905
+ const childUserId = resolveSpawnUserId({ resolvedAdminUserId, overrideUserId });
2906
+ deps.logger(formatMcpUserBindingLine({ authenticatedAdmin: resolvedAdminUserId, resolvedOverride: overrideUserId, stampedUserId: childUserId }));
2891
2907
  // Task 606 — thread the validated per-session sessionId (fresh and resume
2892
2908
  // share the one var) so session-linked writes resolve SESSION_ID; logDir
2893
2909
  // so the child's MCP stderr-tee writes its readable per-server log.
2894
2910
  const env = buildRcChildEnv({
2895
2911
  accountId: effectiveAccountId,
2896
- userId: overrideUserId ?? deps.userId,
2912
+ userId: childUserId,
2897
2913
  sessionId: sessionId ?? undefined,
2898
2914
  uiPort: process.env.MAXY_UI_INTERNAL_PORT ?? '',
2899
2915
  platformRoot: deps.platformRoot,