@rubytech/create-realagent-code 0.1.446 → 0.1.447

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 (207) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/graph-style/dist/index.d.ts.map +1 -1
  3. package/payload/platform/lib/graph-style/dist/index.js +6 -0
  4. package/payload/platform/lib/graph-style/dist/index.js.map +1 -1
  5. package/payload/platform/lib/graph-style/src/index.ts +7 -0
  6. package/payload/platform/neo4j/schema.cypher +32 -1
  7. package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -0
  8. package/payload/platform/plugins/admin/hooks/lib/maxy-mcp-plugins.txt +1 -0
  9. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +42 -5
  10. package/payload/platform/plugins/docs/references/calendar-booking.md +18 -1
  11. package/payload/platform/plugins/docs/references/claudeai-connectors.md +15 -0
  12. package/payload/platform/plugins/docs/references/outlook-guide.md +8 -3
  13. package/payload/platform/plugins/email/skills/email-composition/SKILL.md +4 -4
  14. package/payload/platform/plugins/memory/references/schema-construction.md +7 -2
  15. package/payload/platform/plugins/outlook/.claude-plugin/plugin.json +1 -1
  16. package/payload/platform/plugins/outlook/PLUGIN.md +23 -5
  17. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit.test.d.ts +2 -0
  18. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit.test.d.ts.map +1 -0
  19. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit.test.js +70 -0
  20. package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit.test.js.map +1 -0
  21. package/payload/platform/plugins/outlook/mcp/dist/__tests__/html-to-text.test.d.ts +2 -0
  22. package/payload/platform/plugins/outlook/mcp/dist/__tests__/html-to-text.test.d.ts.map +1 -0
  23. package/payload/platform/plugins/outlook/mcp/dist/__tests__/html-to-text.test.js +22 -0
  24. package/payload/platform/plugins/outlook/mcp/dist/__tests__/html-to-text.test.js.map +1 -0
  25. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-delete.test.d.ts +2 -0
  26. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-delete.test.d.ts.map +1 -0
  27. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-delete.test.js +60 -0
  28. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-delete.test.js.map +1 -0
  29. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-fetch-body.test.d.ts +2 -0
  30. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-fetch-body.test.d.ts.map +1 -0
  31. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-fetch-body.test.js +80 -0
  32. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-fetch-body.test.js.map +1 -0
  33. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-otp-extract.test.d.ts +2 -0
  34. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-otp-extract.test.d.ts.map +1 -0
  35. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-otp-extract.test.js +90 -0
  36. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-otp-extract.test.js.map +1 -0
  37. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-reply.test.d.ts +2 -0
  38. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-reply.test.d.ts.map +1 -0
  39. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-reply.test.js +194 -0
  40. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-reply.test.js.map +1 -0
  41. package/payload/platform/plugins/outlook/mcp/dist/__tests__/otp.test.d.ts +2 -0
  42. package/payload/platform/plugins/outlook/mcp/dist/__tests__/otp.test.d.ts.map +1 -0
  43. package/payload/platform/plugins/outlook/mcp/dist/__tests__/otp.test.js +16 -0
  44. package/payload/platform/plugins/outlook/mcp/dist/__tests__/otp.test.js.map +1 -0
  45. package/payload/platform/plugins/outlook/mcp/dist/__tests__/outbound-attachments.test.d.ts +2 -0
  46. package/payload/platform/plugins/outlook/mcp/dist/__tests__/outbound-attachments.test.d.ts.map +1 -0
  47. package/payload/platform/plugins/outlook/mcp/dist/__tests__/outbound-attachments.test.js +103 -0
  48. package/payload/platform/plugins/outlook/mcp/dist/__tests__/outbound-attachments.test.js.map +1 -0
  49. package/payload/platform/plugins/outlook/mcp/dist/index.js +88 -0
  50. package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
  51. package/payload/platform/plugins/outlook/mcp/dist/lib/html-to-text.d.ts +9 -0
  52. package/payload/platform/plugins/outlook/mcp/dist/lib/html-to-text.d.ts.map +1 -0
  53. package/payload/platform/plugins/outlook/mcp/dist/lib/html-to-text.js +24 -0
  54. package/payload/platform/plugins/outlook/mcp/dist/lib/html-to-text.js.map +1 -0
  55. package/payload/platform/plugins/outlook/mcp/dist/lib/otp.d.ts +2 -0
  56. package/payload/platform/plugins/outlook/mcp/dist/lib/otp.d.ts.map +1 -0
  57. package/payload/platform/plugins/outlook/mcp/dist/lib/otp.js +49 -0
  58. package/payload/platform/plugins/outlook/mcp/dist/lib/otp.js.map +1 -0
  59. package/payload/platform/plugins/outlook/mcp/dist/lib/outbound-attachments.d.ts +58 -0
  60. package/payload/platform/plugins/outlook/mcp/dist/lib/outbound-attachments.d.ts.map +1 -0
  61. package/payload/platform/plugins/outlook/mcp/dist/lib/outbound-attachments.js +127 -0
  62. package/payload/platform/plugins/outlook/mcp/dist/lib/outbound-attachments.js.map +1 -0
  63. package/payload/platform/plugins/outlook/mcp/dist/lib/upload-session.d.ts +28 -0
  64. package/payload/platform/plugins/outlook/mcp/dist/lib/upload-session.d.ts.map +1 -0
  65. package/payload/platform/plugins/outlook/mcp/dist/lib/upload-session.js +54 -0
  66. package/payload/platform/plugins/outlook/mcp/dist/lib/upload-session.js.map +1 -0
  67. package/payload/platform/plugins/outlook/mcp/dist/tools/draft-edit.d.ts +21 -0
  68. package/payload/platform/plugins/outlook/mcp/dist/tools/draft-edit.d.ts.map +1 -0
  69. package/payload/platform/plugins/outlook/mcp/dist/tools/draft-edit.js +38 -0
  70. package/payload/platform/plugins/outlook/mcp/dist/tools/draft-edit.js.map +1 -0
  71. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-delete.d.ts +14 -0
  72. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-delete.d.ts.map +1 -0
  73. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-delete.js +39 -0
  74. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-delete.js.map +1 -0
  75. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-fetch-body.d.ts +23 -0
  76. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-fetch-body.d.ts.map +1 -0
  77. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-fetch-body.js +44 -0
  78. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-fetch-body.js.map +1 -0
  79. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-otp-extract.d.ts +22 -0
  80. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-otp-extract.d.ts.map +1 -0
  81. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-otp-extract.js +90 -0
  82. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-otp-extract.js.map +1 -0
  83. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-reply.d.ts +27 -0
  84. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-reply.d.ts.map +1 -0
  85. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-reply.js +75 -0
  86. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-reply.js.map +1 -0
  87. package/payload/platform/plugins/outlook/references/graph-surfaces.md +57 -1
  88. package/payload/platform/plugins/outlook/skills/outlook/SKILL.md +15 -4
  89. package/payload/platform/plugins/scheduling/PLUGIN.md +15 -0
  90. package/payload/platform/plugins/scheduling/mcp/dist/index.js +29 -1
  91. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  92. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-reconcile.test.js +53 -1
  93. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/booking-reconcile.test.js.map +1 -1
  94. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts +21 -0
  95. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts.map +1 -1
  96. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js +80 -0
  97. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js.map +1 -1
  98. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.d.ts +4 -0
  99. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.d.ts.map +1 -1
  100. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js +68 -1
  101. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js.map +1 -1
  102. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-connector-busy-sync.test.d.ts +2 -0
  103. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-connector-busy-sync.test.d.ts.map +1 -0
  104. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-connector-busy-sync.test.js +75 -0
  105. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-connector-busy-sync.test.js.map +1 -0
  106. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.d.ts +31 -0
  107. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.d.ts.map +1 -0
  108. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.js +41 -0
  109. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.js.map +1 -0
  110. package/payload/platform/plugins/voice-mirror/.claude-plugin/plugin.json +21 -0
  111. package/payload/platform/plugins/voice-mirror/PLUGIN.md +72 -0
  112. package/payload/platform/plugins/voice-mirror/lib/mcp-spawn-tee/index.js +193 -0
  113. package/payload/platform/plugins/voice-mirror/lib/mcp-spawn-tee/package.json +3 -0
  114. package/payload/platform/plugins/voice-mirror/mcp/dist/index.d.ts +3 -0
  115. package/payload/platform/plugins/voice-mirror/mcp/dist/index.d.ts.map +1 -0
  116. package/payload/platform/plugins/voice-mirror/mcp/dist/index.js +403 -0
  117. package/payload/platform/plugins/voice-mirror/mcp/dist/index.js.map +1 -0
  118. package/payload/platform/plugins/voice-mirror/mcp/dist/lib/neo4j.d.ts +14 -0
  119. package/payload/platform/plugins/voice-mirror/mcp/dist/lib/neo4j.d.ts.map +1 -0
  120. package/payload/platform/plugins/voice-mirror/mcp/dist/lib/neo4j.js +47 -0
  121. package/payload/platform/plugins/voice-mirror/mcp/dist/lib/neo4j.js.map +1 -0
  122. package/payload/platform/plugins/voice-mirror/mcp/dist/lib/voice-corpus.d.ts +117 -0
  123. package/payload/platform/plugins/voice-mirror/mcp/dist/lib/voice-corpus.d.ts.map +1 -0
  124. package/payload/platform/plugins/voice-mirror/mcp/dist/lib/voice-corpus.js +138 -0
  125. package/payload/platform/plugins/voice-mirror/mcp/dist/lib/voice-corpus.js.map +1 -0
  126. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-distil-profile.d.ts +90 -0
  127. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-distil-profile.d.ts.map +1 -0
  128. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-distil-profile.js +609 -0
  129. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-distil-profile.js.map +1 -0
  130. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-ingest-session-text.d.ts +19 -0
  131. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-ingest-session-text.d.ts.map +1 -0
  132. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-ingest-session-text.js +124 -0
  133. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-ingest-session-text.js.map +1 -0
  134. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-record-feedback.d.ts +38 -0
  135. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-record-feedback.d.ts.map +1 -0
  136. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-record-feedback.js +93 -0
  137. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-record-feedback.js.map +1 -0
  138. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-retrieve-conditioning.d.ts +61 -0
  139. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-retrieve-conditioning.d.ts.map +1 -0
  140. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-retrieve-conditioning.js +171 -0
  141. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-retrieve-conditioning.js.map +1 -0
  142. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-tag-content.d.ts +35 -0
  143. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-tag-content.d.ts.map +1 -0
  144. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-tag-content.js +127 -0
  145. package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-tag-content.js.map +1 -0
  146. package/payload/platform/plugins/voice-mirror/mcp/package-lock.json +1327 -0
  147. package/payload/platform/plugins/voice-mirror/mcp/package.json +19 -0
  148. package/payload/platform/plugins/voice-mirror/mcp/scripts/smoke.mjs +420 -0
  149. package/payload/platform/plugins/voice-mirror/skills/voice-mirror/SKILL.md +241 -0
  150. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  151. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +12 -0
  152. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  153. package/payload/platform/services/claude-session-manager/dist/http-server.js +1 -1
  154. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  155. package/payload/platform/templates/agents/admin/AGENTS.md +1 -1
  156. package/payload/platform/templates/specialists/agents/content-producer.md +1 -1
  157. package/payload/platform/templates/specialists/agents/personal-assistant.md +6 -2
  158. package/payload/server/public/assets/{AdminLoginScreens-D9L-CuWi.js → AdminLoginScreens-Bvf4HKmq.js} +1 -1
  159. package/payload/server/public/assets/AdminShell-CaGc8ODG.js +2 -0
  160. package/payload/server/public/assets/{Checkbox-CFdt8ljo.js → Checkbox-2SswiICc.js} +1 -1
  161. package/payload/server/public/assets/admin-B7GPCzpr.js +1 -0
  162. package/payload/server/public/assets/browser-CodHC_MO.js +1 -0
  163. package/payload/server/public/assets/calendar-DH7cyXKF.js +1 -0
  164. package/payload/server/public/assets/chat-BQyPAEMv.js +1 -0
  165. package/payload/server/public/assets/chevron-left-Cmev0R9v.js +1 -0
  166. package/payload/server/public/assets/data-DWxZzMfL.js +1 -0
  167. package/payload/server/public/assets/{graph-DrE7KupQ.js → graph-BToB78LG.js} +2 -2
  168. package/payload/server/public/assets/graph-labels-JRGrstzM.js +1 -0
  169. package/payload/server/public/assets/maximize-2-CEQRv64B.js +1 -0
  170. package/payload/server/public/assets/operator-Cx8cq2wf.js +1 -0
  171. package/payload/server/public/assets/page-D6kzsk18.js +32 -0
  172. package/payload/server/public/assets/page-TCsQy4eP.js +1 -0
  173. package/payload/server/public/assets/public-B61xcmAr.js +1 -0
  174. package/payload/server/public/assets/{rotate-ccw-Cqp4oqHV.js → rotate-ccw-7_3ol0Z4.js} +1 -1
  175. package/payload/server/public/assets/{tasks-bQKOhMga.js → tasks-BY9ajKXf.js} +1 -1
  176. package/payload/server/public/assets/{time-entry-format-BIL4ZaDK.js → time-entry-format-DmNhIJnM.js} +1 -1
  177. package/payload/server/public/assets/useCopyFeedback-C5-GOl5l.js +1 -0
  178. package/payload/server/public/assets/useSelectionMode-UOUVnP9B.js +1 -0
  179. package/payload/server/public/assets/{useSubAccountSwitcher-CVHKTSst.css → useSubAccountSwitcher-DgM1ergs.css} +1 -1
  180. package/payload/server/public/assets/useVoiceRecorder-BAP3yGxs.js +2 -0
  181. package/payload/server/public/browser.html +5 -5
  182. package/payload/server/public/calendar.html +6 -6
  183. package/payload/server/public/chat.html +12 -12
  184. package/payload/server/public/data.html +10 -10
  185. package/payload/server/public/graph.html +11 -11
  186. package/payload/server/public/index.html +13 -13
  187. package/payload/server/public/operator.html +14 -14
  188. package/payload/server/public/public.html +12 -12
  189. package/payload/server/public/tasks.html +5 -5
  190. package/payload/server/server.js +349 -171
  191. package/payload/server/public/assets/AdminShell-DSQrvZXq.js +0 -2
  192. package/payload/server/public/assets/admin-Ch4n-G0j.js +0 -1
  193. package/payload/server/public/assets/browser-B2AIxiuk.js +0 -1
  194. package/payload/server/public/assets/calendar-BvItH3B0.js +0 -1
  195. package/payload/server/public/assets/chat-eQFMaX9y.js +0 -1
  196. package/payload/server/public/assets/chevron-left-D2AnCEyE.js +0 -1
  197. package/payload/server/public/assets/data-BzOmbHoe.js +0 -1
  198. package/payload/server/public/assets/file-download-CK9j_Jx2.js +0 -1
  199. package/payload/server/public/assets/graph-labels-CwEtvIRV.js +0 -1
  200. package/payload/server/public/assets/maximize-2-CuzEom3K.js +0 -1
  201. package/payload/server/public/assets/operator-DlboYPPu.js +0 -1
  202. package/payload/server/public/assets/page-BuWH5gNK.js +0 -1
  203. package/payload/server/public/assets/page-Co9E8U5x.js +0 -32
  204. package/payload/server/public/assets/public-DtFpPMTG.js +0 -1
  205. package/payload/server/public/assets/useCopyFeedback-rB8QuqyH.js +0 -1
  206. package/payload/server/public/assets/useVoiceRecorder-Ctny8qWx.js +0 -2
  207. /package/payload/server/public/assets/{useSubAccountSwitcher-CHEt_m6q.js → useSubAccountSwitcher-DF6bohQA.js} +0 -0
@@ -0,0 +1,127 @@
1
+ /**
2
+ * voice-tag-content — set `authorshipMode` and `format` on one or many
3
+ * content nodes.
4
+ *
5
+ * The tool routes through neo4j directly with an account-scoped MERGE so
6
+ * the operator can only mutate their own nodes. We do not go through
7
+ * `memory-update` because that tool re-embeds and re-validates on every
8
+ * call — overkill for a single-property authorship stamp.
9
+ *
10
+ * `format` is an editorial classification only the operator can set; it is
11
+ * therefore required. The sole hard-coded exception lives in
12
+ * `voice-ingest-session-text`, which stamps `format='text'` on auto-ingested
13
+ * `:Message` rows where the operator is not in the loop (Task 471).
14
+ */
15
+ import { getSession } from "../lib/neo4j.js";
16
+ import { TAGGABLE_PRIMARY_LABELS, FORMAT_VALUES, } from "../lib/voice-corpus.js";
17
+ export const AUTHORSHIP_MODES = new Set([
18
+ "human-only",
19
+ "human-led-agent-assisted",
20
+ "agent-led-human-reviewed",
21
+ "agent-only",
22
+ "unknown",
23
+ ]);
24
+ /**
25
+ * Resolve the corpus author for a tag write (Task 676). An explicit, non-blank
26
+ * `author` wins; otherwise the tagging operator's `userId`. Throws when neither
27
+ * is available (no `author` argument and no `ADMIN_USER_ID` in spawn env), so a
28
+ * tag can never silently land with a null author.
29
+ *
30
+ * This is why single-operator accounts get personal attribution for free: with
31
+ * `author` omitted, the sole operator is the implicit author, so their personal
32
+ * corpus equals the account-wide corpus and prior behaviour is reproduced.
33
+ */
34
+ export function resolveVoiceAuthor(author, operatorUserId) {
35
+ const explicit = (author ?? "").trim();
36
+ if (explicit)
37
+ return explicit;
38
+ if (operatorUserId)
39
+ return operatorUserId;
40
+ throw new Error("voice-tag-content: author required — no ADMIN_USER_ID in spawn env and no author given.");
41
+ }
42
+ export async function voiceTagContent(params) {
43
+ const { nodeIds, mode, accountId, format, voiceAuthor } = params;
44
+ if (!AUTHORSHIP_MODES.has(mode)) {
45
+ throw new Error(`voice-tag-content: invalid authorshipMode '${mode}'. Valid values: ${[
46
+ ...AUTHORSHIP_MODES,
47
+ ].join(", ")}`);
48
+ }
49
+ if (!accountId) {
50
+ throw new Error("voice-tag-content: accountId is required");
51
+ }
52
+ if (format === undefined || format === null) {
53
+ throw new Error("voice-tag-content: format is required");
54
+ }
55
+ if (!FORMAT_VALUES.includes(format)) {
56
+ throw new Error(`voice-tag-content: invalid format '${format}'. Valid values: ${FORMAT_VALUES.join(", ")}`);
57
+ }
58
+ if (!Array.isArray(nodeIds) || nodeIds.length === 0) {
59
+ return { updated: 0, skipped: 0, skippedReasons: {} };
60
+ }
61
+ // voiceAuthor is checked after the empty-nodeIds early return: an empty tag is
62
+ // a no-op, so there is nothing to attribute. With nodes to tag, the author
63
+ // must be resolved (index.ts always supplies it via resolveVoiceAuthor).
64
+ if (!voiceAuthor) {
65
+ throw new Error("voice-tag-content: voiceAuthor is required (resolve via resolveVoiceAuthor before calling).");
66
+ }
67
+ const session = getSession();
68
+ const now = new Date().toISOString();
69
+ const skippedReasons = {};
70
+ let updated = 0;
71
+ try {
72
+ // Bulk update in batches of 50 to keep transaction latency bounded.
73
+ const BATCH = 50;
74
+ for (let i = 0; i < nodeIds.length; i += BATCH) {
75
+ const batch = nodeIds.slice(i, i + BATCH);
76
+ const result = await session.run(
77
+ // Tag any of the three primary content labels, or a conversation-
78
+ // document :Section chunk (parent :KnowledgeDocument carries
79
+ // `conversationIdentity`). The EXISTS sub-pattern guards against
80
+ // accidentally tagging document-path :Section rows AND parent
81
+ // `:Conversation` / `:AdminConversation` nodes (which are not
82
+ // body-bearing content).
83
+ `UNWIND $ids AS id
84
+ MATCH (n) WHERE elementId(n) = id AND n.accountId = $accountId
85
+ WITH n
86
+ WHERE any(lbl IN labels(n) WHERE lbl IN $primaryLabels)
87
+ OR ('Section' IN labels(n) AND EXISTS {
88
+ MATCH (parent:KnowledgeDocument)-[:HAS_SECTION]->(n)
89
+ WHERE parent.conversationIdentity IS NOT NULL
90
+ })
91
+ SET n.authorshipMode = $mode,
92
+ n.authorshipTaggedAt = $now,
93
+ n.format = $format,
94
+ n.voiceAuthor = $voiceAuthor
95
+ RETURN elementId(n) AS id`, {
96
+ ids: batch,
97
+ accountId,
98
+ mode,
99
+ now,
100
+ format,
101
+ voiceAuthor,
102
+ primaryLabels: [...TAGGABLE_PRIMARY_LABELS],
103
+ });
104
+ const matched = new Set(result.records.map((r) => r.get("id")));
105
+ updated += matched.size;
106
+ for (const id of batch) {
107
+ if (matched.has(id))
108
+ continue;
109
+ const reason = "not-found-or-not-content-label";
110
+ skippedReasons[reason] = (skippedReasons[reason] ?? 0) + 1;
111
+ }
112
+ }
113
+ }
114
+ finally {
115
+ await session.close();
116
+ }
117
+ // Tagging is always a personal-attribution act: every tagged node carries an
118
+ // author and feeds both that author's personal walk and the account-wide org
119
+ // walk. There is no org-only corpus node, so scope is constant `personal`.
120
+ process.stderr.write(`[voice-tag] mode=${mode} format=${format} scope=personal author=${voiceAuthor} accountId=${accountId} updated=${updated} skipped=${nodeIds.length - updated}\n`);
121
+ return {
122
+ updated,
123
+ skipped: nodeIds.length - updated,
124
+ skippedReasons,
125
+ };
126
+ }
127
+ //# sourceMappingURL=voice-tag-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-tag-content.js","sourceRoot":"","sources":["../../src/tools/voice-tag-content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,uBAAuB,EACvB,aAAa,GAEd,MAAM,wBAAwB,CAAC;AAShC,MAAM,CAAC,MAAM,gBAAgB,GAAgC,IAAI,GAAG,CAAC;IACnE,YAAY;IACZ,0BAA0B;IAC1B,0BAA0B;IAC1B,YAAY;IACZ,SAAS;CACV,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAA0B,EAC1B,cAA6B;IAE7B,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC;IAC1C,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;AACJ,CAAC;AAuBD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAA6B;IAE7B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAEjE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,8CAA8C,IAAI,oBAAoB;YACpE,GAAG,gBAAgB;SACpB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACf,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAE,aAAmC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,sCAAsC,MAAM,oBAAoB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IACxD,CAAC;IACD,+EAA+E;IAC/E,2EAA2E;IAC3E,yEAAyE;IACzE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,cAAc,GAA2B,EAAE,CAAC;IAClD,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,IAAI,CAAC;QACH,oEAAoE;QACpE,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG;YAC9B,kEAAkE;YAClE,6DAA6D;YAC7D,iEAAiE;YACjE,8DAA8D;YAC9D,8DAA8D;YAC9D,yBAAyB;YACzB;;;;;;;;;;;;mCAY2B,EAC3B;gBACE,GAAG,EAAE,KAAK;gBACV,SAAS;gBACT,IAAI;gBACJ,GAAG;gBACH,MAAM;gBACN,WAAW;gBACX,aAAa,EAAE,CAAC,GAAG,uBAAuB,CAAC;aAC5C,CACF,CAAC;YACF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAW,CAAC,CAAC,CAAC;YAC1E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YACxB,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAS;gBAC9B,MAAM,MAAM,GAAG,gCAAgC,CAAC;gBAChD,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oBAAoB,IAAI,WAAW,MAAM,0BAA0B,WAAW,cAAc,SAAS,YAAY,OAAO,YACtH,OAAO,CAAC,MAAM,GAAG,OACnB,IAAI,CACL,CAAC;IAEF,OAAO;QACL,OAAO;QACP,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO;QACjC,cAAc;KACf,CAAC;AACJ,CAAC"}