@rubytech/create-maxy-code 0.1.179 → 0.1.182
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.
- package/package.json +1 -1
- package/payload/platform/lib/graph-trash/package.json +7 -0
- package/payload/premium-plugins/writer-craft/PLUGIN.md +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/index.d.ts.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/index.js +21 -7
- package/payload/premium-plugins/writer-craft/mcp/dist/index.js.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.d.ts +24 -3
- package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.d.ts.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.js +27 -2
- package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.js.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.d.ts +52 -12
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.d.ts.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.js +274 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.js.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.d.ts.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.js +2 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.js.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/src/index.ts +25 -7
- package/payload/premium-plugins/writer-craft/mcp/src/lib/voice-corpus.ts +28 -2
- package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-distil-profile.ts +387 -12
- package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-retrieve-conditioning.ts +2 -0
- package/payload/premium-plugins/writer-craft/skills/voice-mirror/SKILL.md +21 -0
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
*/
|
|
26
26
|
import neo4j from "neo4j-driver";
|
|
27
27
|
import { getSession } from "../lib/neo4j.js";
|
|
28
|
+
import { notTrashed } from "../lib/voice-corpus.js";
|
|
28
29
|
import { VOICE_CORPUS_WHERE, voiceCorpusWhereWithFormat, FORMAT_VALUES, } from "../lib/voice-corpus.js";
|
|
29
30
|
/**
|
|
30
31
|
* Coerce a neo4j cypher RETURN value to a plain JS number.
|
|
@@ -130,8 +131,10 @@ async function distilForFormat(params) {
|
|
|
130
131
|
WITH n, coalesce(n.dateSent, n.datePublished, n.firstMessageAt, n.dateCreated, n.createdAt) AS ts
|
|
131
132
|
OPTIONAL MATCH (parent:KnowledgeDocument)-[:HAS_SECTION]->(n)
|
|
132
133
|
WHERE 'Section' IN labels(n) AND parent.conversationIdentity IS NOT NULL
|
|
134
|
+
AND ${notTrashed("parent")}
|
|
133
135
|
WITH n, ts, parent
|
|
134
136
|
OPTIONAL MATCH (n)-[:HAS_SECTION]->(s:Section)
|
|
137
|
+
WHERE ${notTrashed("s")}
|
|
135
138
|
WITH n, ts, parent, s ORDER BY s.position
|
|
136
139
|
WITH n, ts, parent, collect(s.body) AS sectionBodies
|
|
137
140
|
WITH n, ts, parent,
|
|
@@ -241,11 +244,282 @@ async function distilForFormat(params) {
|
|
|
241
244
|
await session.close();
|
|
242
245
|
}
|
|
243
246
|
}
|
|
247
|
+
/**
|
|
248
|
+
* Single-document amend (Task 472).
|
|
249
|
+
*
|
|
250
|
+
* Operator-initiated incremental update: the operator names one or more
|
|
251
|
+
* documents (`nodeIds`), the tool reads only those plus the existing
|
|
252
|
+
* `:VoiceProfile.styleCard` for the format, and the calling agent decides
|
|
253
|
+
* whether the documents move the profile or don't. Same body-resolution
|
|
254
|
+
* and trashed/authorshipMode/label predicates as the full-corpus sample;
|
|
255
|
+
* the corpus-wide format predicate is dropped (the operator picked the
|
|
256
|
+
* docs); the cadence guard does not apply.
|
|
257
|
+
*/
|
|
258
|
+
async function amendForFormat(params) {
|
|
259
|
+
const { accountId, userId, format, nodeIds } = params;
|
|
260
|
+
const session = getSession();
|
|
261
|
+
try {
|
|
262
|
+
// 1. Existing profile (may be absent — first-time amend with no prior card).
|
|
263
|
+
const profileRow = await session.run(`MATCH (a:AdminUser {accountId: $accountId, userId: $userId})
|
|
264
|
+
OPTIONAL MATCH (a)-[:HAS_VOICE_PROFILE]->(p:VoiceProfile {accountId: $accountId, userId: $userId, format: $format})
|
|
265
|
+
RETURN elementId(p) AS profileId,
|
|
266
|
+
p.styleCard AS styleCard,
|
|
267
|
+
p.corpusSize AS corpusSize,
|
|
268
|
+
p.generatedAt AS generatedAt`, { accountId, userId, format });
|
|
269
|
+
const prow = profileRow.records[0];
|
|
270
|
+
const prevProfileId = prow?.get("profileId") ?? null;
|
|
271
|
+
const existingStyleCard = prow?.get("styleCard") ?? null;
|
|
272
|
+
const prevCorpusSize = toJsNumber(prow?.get("corpusSize")) ?? 0;
|
|
273
|
+
const prevGeneratedAt = prow?.get("generatedAt") ?? null;
|
|
274
|
+
// 2. Per-document eligibility classification. Each input id gets a
|
|
275
|
+
// verdict; the first failing predicate wins. The predicate set mirrors
|
|
276
|
+
// VOICE_CORPUS_WHERE except `format` is dropped (operator picked the
|
|
277
|
+
// docs) and conversation-section sub-pattern is inlined for the
|
|
278
|
+
// per-document case.
|
|
279
|
+
const eligibilityResult = await session.run(`UNWIND $nodeIds AS nid
|
|
280
|
+
OPTIONAL MATCH (n) WHERE elementId(n) = nid
|
|
281
|
+
WITH nid, n,
|
|
282
|
+
CASE
|
|
283
|
+
WHEN n IS NULL THEN 'node-not-found'
|
|
284
|
+
WHEN n.accountId <> $accountId THEN 'wrong-account'
|
|
285
|
+
WHEN NOT coalesce(n.authorshipMode, '') IN ['human-only', 'human-led-agent-assisted']
|
|
286
|
+
THEN 'ineligible-authorship-mode'
|
|
287
|
+
WHEN n:Trashed OR n.deletedAt IS NOT NULL THEN 'trashed'
|
|
288
|
+
WHEN NOT (
|
|
289
|
+
any(lbl IN labels(n) WHERE lbl IN ['KnowledgeDocument', 'Message', 'SocialPost'])
|
|
290
|
+
OR ('Section' IN labels(n) AND EXISTS {
|
|
291
|
+
MATCH (parent:KnowledgeDocument)-[:HAS_SECTION]->(n)
|
|
292
|
+
WHERE parent.conversationIdentity IS NOT NULL
|
|
293
|
+
AND ${notTrashed("parent")}
|
|
294
|
+
})
|
|
295
|
+
) THEN 'ineligible-label'
|
|
296
|
+
ELSE 'ok'
|
|
297
|
+
END AS verdict
|
|
298
|
+
RETURN nid, verdict`, { accountId, nodeIds });
|
|
299
|
+
const eligibleIds = [];
|
|
300
|
+
const ineligible = [];
|
|
301
|
+
for (const r of eligibilityResult.records) {
|
|
302
|
+
const nid = r.get("nid");
|
|
303
|
+
const verdict = r.get("verdict");
|
|
304
|
+
if (verdict === "ok")
|
|
305
|
+
eligibleIds.push(nid);
|
|
306
|
+
else
|
|
307
|
+
ineligible.push({ nodeId: nid, reason: verdict });
|
|
308
|
+
}
|
|
309
|
+
// 3. Feedback intents (same as sample) — agent benefits even on a no-op
|
|
310
|
+
// amend ("you've already corrected this voice tic ten times").
|
|
311
|
+
const feedback = await session.run(`MATCH (e:VoiceEdit {userId: $userId, accountId: $accountId, format: $format})
|
|
312
|
+
RETURN e.intent AS intent ORDER BY e.occurredAt DESC LIMIT 50`, { accountId, userId, format });
|
|
313
|
+
const feedbackIntents = feedback.records
|
|
314
|
+
.map((r) => r.get("intent"))
|
|
315
|
+
.filter((x) => typeof x === "string" && x.length > 0);
|
|
316
|
+
if (eligibleIds.length === 0) {
|
|
317
|
+
process.stderr.write(`[voice-distil] mode=amend userId=${userId} format=${format} nodeIds=${nodeIds.length} ` +
|
|
318
|
+
`existingProfile=${prevProfileId ?? "none"} eligible=0 ineligible=${ineligible.length}\n`);
|
|
319
|
+
return {
|
|
320
|
+
profileId: prevProfileId,
|
|
321
|
+
corpusSize: prevCorpusSize,
|
|
322
|
+
generatedAt: prevGeneratedAt,
|
|
323
|
+
feedbackEntries: feedbackIntents.length,
|
|
324
|
+
skipped: true,
|
|
325
|
+
skipReason: "amend-no-eligible-documents",
|
|
326
|
+
existingStyleCard,
|
|
327
|
+
eligible: 0,
|
|
328
|
+
ineligible,
|
|
329
|
+
exemplars: [],
|
|
330
|
+
feedbackIntents,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
// 4. Body walk for eligible ids — identical body resolution to the
|
|
334
|
+
// full-corpus sample path: KD-with-Section-children concatenates child
|
|
335
|
+
// bodies in `position` order (trashed sections filtered); other labels
|
|
336
|
+
// fall through to the COALESCE chain.
|
|
337
|
+
const bodyResult = await session.run(`UNWIND $eligibleIds AS nid
|
|
338
|
+
MATCH (n) WHERE elementId(n) = nid
|
|
339
|
+
OPTIONAL MATCH (parent:KnowledgeDocument)-[:HAS_SECTION]->(n)
|
|
340
|
+
WHERE 'Section' IN labels(n) AND parent.conversationIdentity IS NOT NULL
|
|
341
|
+
AND ${notTrashed("parent")}
|
|
342
|
+
WITH n, parent
|
|
343
|
+
OPTIONAL MATCH (n)-[:HAS_SECTION]->(s:Section)
|
|
344
|
+
WHERE ${notTrashed("s")}
|
|
345
|
+
WITH n, parent, s ORDER BY s.position
|
|
346
|
+
WITH n, parent, collect(s.body) AS sectionBodies
|
|
347
|
+
WITH n, parent,
|
|
348
|
+
'KnowledgeDocument' IN labels(n) AND size(sectionBodies) > 0 AS usedSectionWalk,
|
|
349
|
+
CASE
|
|
350
|
+
WHEN 'KnowledgeDocument' IN labels(n) AND size(sectionBodies) > 0
|
|
351
|
+
THEN reduce(acc = '', b IN sectionBodies | acc + b + '\n\n')
|
|
352
|
+
ELSE coalesce(n.body, n.abstract, n.subject, n.title, n.summary, '')
|
|
353
|
+
END AS body
|
|
354
|
+
RETURN elementId(n) AS id,
|
|
355
|
+
labels(n) AS labels,
|
|
356
|
+
body,
|
|
357
|
+
usedSectionWalk,
|
|
358
|
+
parent.conversationIdentity IS NOT NULL AS isConversationChunk`, { eligibleIds });
|
|
359
|
+
const exemplars = [];
|
|
360
|
+
let charBudget = SAMPLE_CHAR_CAP;
|
|
361
|
+
let sectionWalkCount = 0;
|
|
362
|
+
let nBodyCount = 0;
|
|
363
|
+
for (const r of bodyResult.records) {
|
|
364
|
+
const body = r.get("body") ?? "";
|
|
365
|
+
if (body.length === 0)
|
|
366
|
+
continue;
|
|
367
|
+
const labels = r.get("labels") ?? [];
|
|
368
|
+
const isConversationChunk = Boolean(r.get("isConversationChunk"));
|
|
369
|
+
const usedSectionWalk = Boolean(r.get("usedSectionWalk"));
|
|
370
|
+
const label = isConversationChunk
|
|
371
|
+
? "Conversation"
|
|
372
|
+
: (labels.find((l) => ["KnowledgeDocument", "Message", "SocialPost"].includes(l)) ?? labels[0] ?? "Unknown");
|
|
373
|
+
const trimmed = body.length > charBudget ? body.slice(0, charBudget) : body;
|
|
374
|
+
exemplars.push({ id: r.get("id"), label, body: trimmed });
|
|
375
|
+
if (usedSectionWalk)
|
|
376
|
+
sectionWalkCount += 1;
|
|
377
|
+
else
|
|
378
|
+
nBodyCount += 1;
|
|
379
|
+
charBudget -= trimmed.length;
|
|
380
|
+
if (charBudget <= 0)
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
process.stderr.write(`[voice-distil] mode=amend userId=${userId} format=${format} nodeIds=${nodeIds.length} ` +
|
|
384
|
+
`existingProfile=${prevProfileId ?? "none"} eligible=${eligibleIds.length} ineligible=${ineligible.length} ` +
|
|
385
|
+
`exemplars=${exemplars.length} sample-body-source=section-walk:${sectionWalkCount} n.body:${nBodyCount}\n`);
|
|
386
|
+
// `skipped: false` because the function DID deliver value — exemplars
|
|
387
|
+
// + existingStyleCard for the agent to act on. The agent decides
|
|
388
|
+
// whether to compose new YAML (calls `mode='write'`) or replies "no
|
|
389
|
+
// material delta"; either is a valid amend outcome, neither is a
|
|
390
|
+
// "skip" in the cadence-guard sense.
|
|
391
|
+
return {
|
|
392
|
+
profileId: prevProfileId,
|
|
393
|
+
corpusSize: prevCorpusSize,
|
|
394
|
+
generatedAt: prevGeneratedAt,
|
|
395
|
+
feedbackEntries: feedbackIntents.length,
|
|
396
|
+
skipped: false,
|
|
397
|
+
existingStyleCard,
|
|
398
|
+
eligible: eligibleIds.length,
|
|
399
|
+
ineligible,
|
|
400
|
+
exemplars,
|
|
401
|
+
feedbackIntents,
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
finally {
|
|
405
|
+
await session.close();
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Amend write (Task 472). Persists the agent-composed style card after an
|
|
410
|
+
* `amend` sample. Bypasses the cadence guard and the full corpus walk; the
|
|
411
|
+
* only `LEARNED_FROM` edges added are to `amendedFromNodeIds`. Pre-existing
|
|
412
|
+
* `LEARNED_FROM` edges remain via `MERGE`. `corpusSize` on the profile is
|
|
413
|
+
* untouched — the amend doesn't change the operator's qualifying corpus,
|
|
414
|
+
* only the styleCard's interpretation of it.
|
|
415
|
+
*/
|
|
416
|
+
async function amendWriteForFormat(params) {
|
|
417
|
+
const { accountId, userId, format, styleCardYaml, amendedFromNodeIds } = params;
|
|
418
|
+
const session = getSession();
|
|
419
|
+
const nowIso = new Date().toISOString();
|
|
420
|
+
try {
|
|
421
|
+
// 1. Pre-resolve the amend ids and refuse if none survive. The write
|
|
422
|
+
// Cypher SETs `p` before the UNWIND/MATCH on amend ids, so if every
|
|
423
|
+
// id is stale the profile would be mutated then the function would
|
|
424
|
+
// throw — leaving a silently advanced styleCard the operator never
|
|
425
|
+
// confirmed. Resolving here means the SET never runs on an empty
|
|
426
|
+
// target list, and stale ids surface as a structured error before
|
|
427
|
+
// any write commits. Code-review pass-1 fix.
|
|
428
|
+
const resolve = await session.run(`UNWIND $amendIds AS sid
|
|
429
|
+
MATCH (s) WHERE elementId(s) = sid
|
|
430
|
+
RETURN elementId(s) AS id`, { amendIds: amendedFromNodeIds });
|
|
431
|
+
const resolvedAmendIds = resolve.records.map((r) => r.get("id"));
|
|
432
|
+
if (resolvedAmendIds.length === 0) {
|
|
433
|
+
throw new Error(`voice-mirror: none of amendedFromNodeIds=${JSON.stringify(amendedFromNodeIds)} ` +
|
|
434
|
+
`resolved to live nodes. Confirm the named docs exist and are accessible.`);
|
|
435
|
+
}
|
|
436
|
+
const feedback = await session.run(`MATCH (e:VoiceEdit {userId: $userId, accountId: $accountId, format: $format})
|
|
437
|
+
RETURN count(e) AS c`, { accountId, userId, format });
|
|
438
|
+
const feedbackEntries = toJsNumber(feedback.records[0]?.get("c")) ?? 0;
|
|
439
|
+
const result = await session.run(`MATCH (a:AdminUser {accountId: $accountId, userId: $userId})
|
|
440
|
+
MERGE (a)-[:HAS_VOICE_PROFILE]->(p:VoiceProfile {accountId: $accountId, userId: $userId, format: $format})
|
|
441
|
+
ON CREATE SET p.createdAt = $now, p.corpusSize = 0
|
|
442
|
+
SET p.styleCard = $styleCard,
|
|
443
|
+
p.generatedAt = $now,
|
|
444
|
+
p.feedbackEntries = $feedbackEntries,
|
|
445
|
+
p.updatedAt = $now
|
|
446
|
+
WITH p
|
|
447
|
+
UNWIND $amendIds AS sid
|
|
448
|
+
MATCH (s) WHERE elementId(s) = sid
|
|
449
|
+
MERGE (p)-[:LEARNED_FROM]->(s)
|
|
450
|
+
WITH p
|
|
451
|
+
RETURN elementId(p) AS profileId, p.corpusSize AS corpusSize`, {
|
|
452
|
+
accountId,
|
|
453
|
+
userId,
|
|
454
|
+
format,
|
|
455
|
+
styleCard: styleCardYaml,
|
|
456
|
+
now: nowIso,
|
|
457
|
+
feedbackEntries,
|
|
458
|
+
amendIds: resolvedAmendIds,
|
|
459
|
+
});
|
|
460
|
+
if (result.records.length === 0) {
|
|
461
|
+
throw new Error(`voice-mirror: :AdminUser {accountId='${accountId}', userId='${userId}'} not found. ` +
|
|
462
|
+
`Onboarding must promote the operator to :AdminUser before distillation.`);
|
|
463
|
+
}
|
|
464
|
+
const profileId = result.records[0].get("profileId");
|
|
465
|
+
const corpusSize = toJsNumber(result.records[0].get("corpusSize")) ?? 0;
|
|
466
|
+
process.stderr.write(`[voice-distil] mode=write userId=${userId} format=${format} amended=true ` +
|
|
467
|
+
`amendedFromNodeIds=${amendedFromNodeIds.length} corpusSize=${corpusSize} ` +
|
|
468
|
+
`generatedAt=${nowIso} feedbackEntries=${feedbackEntries}\n`);
|
|
469
|
+
return {
|
|
470
|
+
profileId,
|
|
471
|
+
corpusSize,
|
|
472
|
+
generatedAt: nowIso,
|
|
473
|
+
feedbackEntries,
|
|
474
|
+
skipped: false,
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
finally {
|
|
478
|
+
await session.close();
|
|
479
|
+
}
|
|
480
|
+
}
|
|
244
481
|
export async function voiceDistilProfile(params) {
|
|
245
482
|
const { accountId, userId, force = false } = params;
|
|
246
483
|
if (!accountId || !userId) {
|
|
247
484
|
throw new Error("voice-distil-profile: accountId and userId required");
|
|
248
485
|
}
|
|
486
|
+
// Amend sample (Task 472): operator-initiated single-document update.
|
|
487
|
+
if (params.mode === "amend") {
|
|
488
|
+
if (!params.format) {
|
|
489
|
+
throw new Error("voice-distil-profile: mode='amend' requires format");
|
|
490
|
+
}
|
|
491
|
+
const nodeIds = params.nodeIds ?? [];
|
|
492
|
+
if (nodeIds.length === 0) {
|
|
493
|
+
throw new Error("voice-distil-profile: mode='amend' requires nodeIds (at least one)");
|
|
494
|
+
}
|
|
495
|
+
return amendForFormat({
|
|
496
|
+
accountId,
|
|
497
|
+
userId,
|
|
498
|
+
format: params.format,
|
|
499
|
+
nodeIds,
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
// Amend write (Task 472): persist after the agent composed from an amend
|
|
503
|
+
// sample. Triggered by `mode='write'` + non-empty `amendedFromNodeIds`.
|
|
504
|
+
// Distinct from the full-corpus write — bypasses cadence + corpus walk.
|
|
505
|
+
if (params.mode === "write" &&
|
|
506
|
+
params.amendedFromNodeIds &&
|
|
507
|
+
params.amendedFromNodeIds.length > 0) {
|
|
508
|
+
if (!params.format) {
|
|
509
|
+
throw new Error("voice-distil-profile: mode='write' with amendedFromNodeIds requires format");
|
|
510
|
+
}
|
|
511
|
+
const styleCardYaml = (params.styleCardYaml ?? "").trim();
|
|
512
|
+
if (!styleCardYaml) {
|
|
513
|
+
throw new Error("voice-distil-profile: mode='write' requires styleCardYaml (the YAML you composed from the amend-sample response).");
|
|
514
|
+
}
|
|
515
|
+
return amendWriteForFormat({
|
|
516
|
+
accountId,
|
|
517
|
+
userId,
|
|
518
|
+
format: params.format,
|
|
519
|
+
styleCardYaml,
|
|
520
|
+
amendedFromNodeIds: params.amendedFromNodeIds,
|
|
521
|
+
});
|
|
522
|
+
}
|
|
249
523
|
// Single-format path.
|
|
250
524
|
if (params.format !== undefined) {
|
|
251
525
|
return distilForFormat({ ...params, format: params.format, force });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voice-distil-profile.js","sourceRoot":"","sources":["../../src/tools/voice-distil-profile.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"voice-distil-profile.js","sourceRoot":"","sources":["../../src/tools/voice-distil-profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,aAAa,GAEd,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;GAQG;AACH,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAQ,KAAoC,CAAC,QAAQ,EAAE,CAAC;IAChF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,eAAe,GAAG,OAAO,CAAC;AAChC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,eAAe,GAAG,EAAE,CAAC;AAuF3B,mEAAmE;AACnE,qEAAqE;AACrE,sDAAsD;AACtD,yEAAyE;AAEzE;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,MAGG;IAEH,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IAC5D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAEjC,IAAI,CAAC;QACH,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC;;;2CAGqC,EACrC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAC9B,CAAC;QACF,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,aAAa,GAAI,WAAW,EAAE,GAAG,CAAC,WAAW,CAAmB,IAAI,IAAI,CAAC;QAC/E,MAAM,cAAc,GAAG,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QAClE,MAAM,eAAe,GAAI,WAAW,EAAE,GAAG,CAAC,aAAa,CAAmB,IAAI,IAAI,CAAC;QAEnF,4CAA4C;QAC5C,MAAM,WAAW,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC;eACS,WAAW;4BACE,EACtB,EAAE,SAAS,EAAE,MAAM,EAAE,CACtB,CAAC;QACF,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAErE,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4BAA4B,MAAM,WAAW,MAAM,6BAA6B,CACjF,CAAC;YACF,OAAO;gBACL,SAAS,EAAE,aAAa;gBACxB,UAAU,EAAE,CAAC;gBACb,WAAW,EAAE,eAAe;gBAC5B,eAAe,EAAE,CAAC;gBAClB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,cAAc;aAC3B,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,KAAK,IAAI,aAAa,IAAI,cAAc,KAAK,IAAI,IAAI,eAAe,EAAE,CAAC;YAC1E,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC;YAClE,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAC9C,MAAM,MAAM,GACV,cAAc,GAAG,CAAC;gBAChB,CAAC,CAAC,CAAC,UAAU,GAAG,cAAc,CAAC,GAAG,cAAc;gBAChD,CAAC,CAAC,CAAC,CAAC;YACR,MAAM,UAAU,GAAG,OAAO,IAAI,eAAe,CAAC;YAC9C,MAAM,aAAa,GAAG,MAAM,IAAI,sBAAsB,CAAC;YACvD,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC;gBAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4BAA4B,MAAM,WAAW,MAAM,gBAAgB,MAAM,eAAe,UAAU,eAAe,cAAc,YAAY,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAClK,CAAC;gBACF,OAAO;oBACL,SAAS,EAAE,aAAa;oBACxB,UAAU;oBACV,WAAW,EAAE,eAAe;oBAC5B,eAAe,EAAE,CAAC;oBAClB,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,MAAM;iBACnB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,iEAAiE;QACjE,EAAE;QACF,8BAA8B;QAC9B,sEAAsE;QACtE,oEAAoE;QACpE,qDAAqD;QACrD,sEAAsE;QACtE,gEAAgE;QAChE,EAAE;QACF,wEAAwE;QACxE,qEAAqE;QACrE,qEAAqE;QACrE,iBAAiB;QACjB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B;eACS,WAAW;;;;eAIX,UAAU,CAAC,QAAQ,CAAC;;;eAGpB,UAAU,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;iBAiBb,EACX,EAAE,SAAS,EAAE,MAAM,EAAE,CACtB,CAAC;QACF,MAAM,OAAO,GAAkD,EAAE,CAAC;QAClE,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,UAAU,GAAG,eAAe,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,IAAI,GAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAmB,IAAI,EAAE,CAAC;YACpD,MAAM,MAAM,GAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAc,IAAI,EAAE,CAAC;YACnD,MAAM,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAClE,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,mBAAmB;gBAC/B,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACjB,CAAC,mBAAmB,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC3D,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAW,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAClE,IAAI,eAAe;gBAAE,gBAAgB,IAAI,CAAC,CAAC;;gBACtC,UAAU,IAAI,CAAC,CAAC;YACrB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;YAC7B,IAAI,UAAU,IAAI,CAAC;gBAAE,MAAM;QAC7B,CAAC;QAED,2EAA2E;QAC3E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC;qEAC+D,EAC/D,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAC9B,CAAC;QACF,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAkB,CAAC;aAC5C,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAErE,6BAA6B;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;QACrC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4BAA4B,MAAM,WAAW,MAAM,2BAA2B,UAAU,GAAG;gBACzF,aAAa,OAAO,CAAC,MAAM,oBAAoB,eAAe,CAAC,MAAM,GAAG;gBACxE,mCAAmC,gBAAgB,WAAW,UAAU,IAAI,CAC/E,CAAC;YACF,OAAO;gBACL,SAAS,EAAE,aAAa;gBACxB,UAAU;gBACV,WAAW,EAAE,eAAe;gBAC5B,eAAe,EAAE,eAAe,CAAC,MAAM;gBACvC,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,oBAAoB;gBAChC,SAAS,EAAE,OAAO;gBAClB,eAAe;aAChB,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,kHAAkH,CACnH,CAAC;QACJ,CAAC;QAED,2EAA2E;QAC3E,oDAAoD;QACpD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC;;;;;;;;;;;;wCAYkC,EAClC;YACE,SAAS;YACT,MAAM;YACN,MAAM;YACN,SAAS,EAAE,aAAa;YACxB,GAAG,EAAE,MAAM;YACX,UAAU;YACV,eAAe,EAAE,eAAe,CAAC,MAAM;YACvC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,CACF,CAAC;QACF,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,wCAAwC,SAAS,cAAc,MAAM,uFAAuF,CAC7J,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAW,CAAC;QAEpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4BAA4B,MAAM,WAAW,MAAM,0BAA0B,UAAU,gBAAgB,MAAM,oBAAoB,eAAe,CAAC,MAAM,IAAI,CAC5J,CAAC;QAEF,OAAO;YACL,SAAS;YACT,UAAU;YACV,WAAW,EAAE,MAAM;YACnB,eAAe,EAAE,eAAe,CAAC,MAAM;YACvC,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,KAAK,UAAU,cAAc,CAAC,MAK7B;IACC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACtD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,6EAA6E;QAC7E,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC;;;;;2CAKqC,EACrC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAC9B,CAAC;QACF,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,aAAa,GAAI,IAAI,EAAE,GAAG,CAAC,WAAW,CAAmB,IAAI,IAAI,CAAC;QACxE,MAAM,iBAAiB,GAAI,IAAI,EAAE,GAAG,CAAC,WAAW,CAAmB,IAAI,IAAI,CAAC;QAC5E,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,eAAe,GAAI,IAAI,EAAE,GAAG,CAAC,aAAa,CAAmB,IAAI,IAAI,CAAC;QAE5E,mEAAmE;QACnE,0EAA0E;QAC1E,wEAAwE;QACxE,mEAAmE;QACnE,wBAAwB;QACxB,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,GAAG,CACzC;;;;;;;;;;;;;;0BAcoB,UAAU,CAAC,QAAQ,CAAC;;;;;2BAKnB,EACrB,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;QAEF,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,UAAU,GAAyC,EAAE,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAW,CAAC;YACnC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAW,CAAC;YAC3C,IAAI,OAAO,KAAK,IAAI;gBAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;gBACvC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,wEAAwE;QACxE,kEAAkE;QAClE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC;qEAC+D,EAC/D,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAC9B,CAAC;QACF,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAkB,CAAC;aAC5C,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAErE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oCAAoC,MAAM,WAAW,MAAM,YAAY,OAAO,CAAC,MAAM,GAAG;gBACtF,mBAAmB,aAAa,IAAI,MAAM,0BAA0B,UAAU,CAAC,MAAM,IAAI,CAC5F,CAAC;YACF,OAAO;gBACL,SAAS,EAAE,aAAa;gBACxB,UAAU,EAAE,cAAc;gBAC1B,WAAW,EAAE,eAAe;gBAC5B,eAAe,EAAE,eAAe,CAAC,MAAM;gBACvC,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,6BAA6B;gBACzC,iBAAiB;gBACjB,QAAQ,EAAE,CAAC;gBACX,UAAU;gBACV,SAAS,EAAE,EAAE;gBACb,eAAe;aAChB,CAAC;QACJ,CAAC;QAED,mEAAmE;QACnE,0EAA0E;QAC1E,0EAA0E;QAC1E,yCAAyC;QACzC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC;;;;eAIS,UAAU,CAAC,QAAQ,CAAC;;;eAGpB,UAAU,CAAC,GAAG,CAAC;;;;;;;;;;;;;;6EAc+C,EACvE,EAAE,WAAW,EAAE,CAChB,CAAC;QAEF,MAAM,SAAS,GAA0B,EAAE,CAAC;QAC5C,IAAI,UAAU,GAAG,eAAe,CAAC;QACjC,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,IAAI,GAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAmB,IAAI,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAChC,MAAM,MAAM,GAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAc,IAAI,EAAE,CAAC;YACnD,MAAM,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAClE,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,mBAAmB;gBAC/B,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACjB,CAAC,mBAAmB,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC3D,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5E,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAW,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACpE,IAAI,eAAe;gBAAE,gBAAgB,IAAI,CAAC,CAAC;;gBACtC,UAAU,IAAI,CAAC,CAAC;YACrB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;YAC7B,IAAI,UAAU,IAAI,CAAC;gBAAE,MAAM;QAC7B,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oCAAoC,MAAM,WAAW,MAAM,YAAY,OAAO,CAAC,MAAM,GAAG;YACtF,mBAAmB,aAAa,IAAI,MAAM,aAAa,WAAW,CAAC,MAAM,eAAe,UAAU,CAAC,MAAM,GAAG;YAC5G,aAAa,SAAS,CAAC,MAAM,oCAAoC,gBAAgB,WAAW,UAAU,IAAI,CAC7G,CAAC;QAEF,sEAAsE;QACtE,iEAAiE;QACjE,oEAAoE;QACpE,iEAAiE;QACjE,qCAAqC;QACrC,OAAO;YACL,SAAS,EAAE,aAAa;YACxB,UAAU,EAAE,cAAc;YAC1B,WAAW,EAAE,eAAe;YAC5B,eAAe,EAAE,eAAe,CAAC,MAAM;YACvC,OAAO,EAAE,KAAK;YACd,iBAAiB;YACjB,QAAQ,EAAE,WAAW,CAAC,MAAM;YAC5B,UAAU;YACV,SAAS;YACT,eAAe;SAChB,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,mBAAmB,CAAC,MAMlC;IACC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAAC;IAChF,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,qEAAqE;QACrE,uEAAuE;QACvE,sEAAsE;QACtE,sEAAsE;QACtE,oEAAoE;QACpE,qEAAqE;QACrE,gDAAgD;QAChD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B;;iCAE2B,EAC3B,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CACjC,CAAC;QACF,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAW,CAC7B,CAAC;QACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,4CAA4C,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG;gBAC/E,0EAA0E,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC;4BACsB,EACtB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAC9B,CAAC;QACF,MAAM,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAEvE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B;;;;;;;;;;;;oEAY8D,EAC9D;YACE,SAAS;YACT,MAAM;YACN,MAAM;YACN,SAAS,EAAE,aAAa;YACxB,GAAG,EAAE,MAAM;YACX,eAAe;YACf,QAAQ,EAAE,gBAAgB;SAC3B,CACF,CAAC;QACF,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,wCAAwC,SAAS,cAAc,MAAM,gBAAgB;gBACnF,yEAAyE,CAC5E,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAW,CAAC;QAC/D,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;QAExE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oCAAoC,MAAM,WAAW,MAAM,gBAAgB;YACzE,sBAAsB,kBAAkB,CAAC,MAAM,eAAe,UAAU,GAAG;YAC3E,eAAe,MAAM,oBAAoB,eAAe,IAAI,CAC/D,CAAC;QAEF,OAAO;YACL,SAAS;YACT,UAAU;YACV,WAAW,EAAE,MAAM;YACnB,eAAe;YACf,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAgC;IAEhC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IACpD,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,sEAAsE;IACtE,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;QACJ,CAAC;QACD,OAAO,cAAc,CAAC;YACpB,SAAS;YACT,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,yEAAyE;IACzE,wEAAwE;IACxE,wEAAwE;IACxE,IACE,MAAM,CAAC,IAAI,KAAK,OAAO;QACvB,MAAM,CAAC,kBAAkB;QACzB,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EACpC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;QACJ,CAAC;QACD,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;QACJ,CAAC;QACD,OAAO,mBAAmB,CAAC;YACzB,SAAS;YACT,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa;YACb,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,6EAA6E;IAC7E,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAkB,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC;eACS,kBAAkB;uCACM,EACjC,EAAE,SAAS,EAAE,CACd,CAAC;QACF,OAAO,GAAG,UAAU,CAAC,OAAO;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAW,CAAC;aAClC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAC7B,aAAmC,CAAC,QAAQ,CAAC,CAAC,CAAC,CACjD,CAAC;IACN,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4BAA4B,MAAM,yCAAyC,CAC5E,CAAC;QACF,OAAO;YACL,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,CAAC;YAClB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,0BAA0B;SACvC,CAAC;IACJ,CAAC;IAED,8CAA8C;IAC9C,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voice-retrieve-conditioning.d.ts","sourceRoot":"","sources":["../../src/tools/voice-retrieve-conditioning.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"voice-retrieve-conditioning.d.ts","sourceRoot":"","sources":["../../src/tools/voice-retrieve-conditioning.ts"],"names":[],"mappings":"AA4BA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAMhC,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC;QACf;;;WAGG;QACH,MAAM,EAAE,WAAW,CAAC;QACpB;;;;WAIG;QACH,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAID,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,+BAA+B,GACtC,OAAO,CAAC,+BAA+B,CAAC,CAoH1C"}
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
* calling drafting skill falls back to its existing default register.
|
|
26
26
|
*/
|
|
27
27
|
import { getSession } from "../lib/neo4j.js";
|
|
28
|
+
import { notTrashed } from "../lib/voice-corpus.js";
|
|
28
29
|
import { voiceCorpusWhereWithFormat, } from "../lib/voice-corpus.js";
|
|
29
30
|
const DEFAULT_TOKEN_BUDGET_SHORT = 16_000;
|
|
30
31
|
const DEFAULT_TOKEN_BUDGET_LONG = 96_000;
|
|
@@ -63,6 +64,7 @@ export async function voiceRetrieveConditioning(params) {
|
|
|
63
64
|
const usesTopic = topic.length > 0;
|
|
64
65
|
const bodyComputeBlock = `WITH n, coalesce(n.dateSent, n.datePublished, n.firstMessageAt, n.dateCreated, n.createdAt) AS ts
|
|
65
66
|
OPTIONAL MATCH (n)-[:HAS_SECTION]->(s:Section)
|
|
67
|
+
WHERE ${notTrashed("s")}
|
|
66
68
|
WITH n, ts, s ORDER BY s.position
|
|
67
69
|
WITH n, ts, collect(s.body) AS sectionBodies
|
|
68
70
|
WITH n, ts, CASE
|
package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voice-retrieve-conditioning.js","sourceRoot":"","sources":["../../src/tools/voice-retrieve-conditioning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAEL,0BAA0B,GAE3B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAC1C,MAAM,yBAAyB,GAAG,MAAM,CAAC;AACzC,MAAM,eAAe,GAAG,CAAC,CAAC;AAmC1B,MAAM,KAAK,GAAoC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAElF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAuC;IAEvC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAC5C,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAExC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC;IACvC,MAAM,CAAC,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,WAAW,GACf,MAAM,CAAC,WAAW;QAClB,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,WAAW,GAAG,eAAe,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,WAAW,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,sCAAsC;QACtC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B;;uCAEiC,EACjC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAC9B,CAAC;QACF,MAAM,SAAS,GAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAmB,IAAI,IAAI,CAAC;QAElF,4EAA4E;QAC5E,EAAE;QACF,8BAA8B;QAC9B,oEAAoE;QACpE,uEAAuE;QACvE,+BAA+B;QAC/B,yEAAyE;QACzE,EAAE;QACF,mEAAmE;QACnE,kEAAkE;QAClE,gEAAgE;QAChE,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAEnC,MAAM,gBAAgB,GAAG
|
|
1
|
+
{"version":3,"file":"voice-retrieve-conditioning.js","sourceRoot":"","sources":["../../src/tools/voice-retrieve-conditioning.ts"],"names":[],"mappings":"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"}
|
|
@@ -104,7 +104,7 @@ server.tool(
|
|
|
104
104
|
|
|
105
105
|
server.tool(
|
|
106
106
|
"voice-distil-profile",
|
|
107
|
-
"
|
|
107
|
+
"Three-mode tool. mode='sample' (default) walks the operator's full per-format human-only corpus and returns exemplars + recent edit intents for the agent to compose a fresh style card; cadence-guarded (≥20% corpus growth OR ≥30 days). mode='amend' (Task 472) reads only the named documents plus the existing :VoiceProfile.styleCard so the agent can decide whether one or more specific documents move the profile — operator-initiated, no cadence guard. mode='write' persists the YAML style card the agent composed; supply amendedFromNodeIds to attribute the write to specific documents (Task 472, bypasses cadence + corpus walk; existing LEARNED_FROM edges remain via MERGE). Trashed nodes are excluded from every walk. When format is omitted on 'sample', enumerates all formats in the corpus and distils each.",
|
|
108
108
|
{
|
|
109
109
|
userId: z
|
|
110
110
|
.string()
|
|
@@ -113,22 +113,34 @@ server.tool(
|
|
|
113
113
|
"Operator AdminUser identifier. Defaults to ADMIN_USER_ID env from spawn context.",
|
|
114
114
|
),
|
|
115
115
|
format: zFormat.optional().describe(
|
|
116
|
-
"Writing format to distil. When omitted, enumerates corpus formats and distils each that fires the cadence guard.",
|
|
116
|
+
"Writing format to distil. Required for mode='amend' and mode='write'. When omitted on 'sample', enumerates corpus formats and distils each that fires the cadence guard.",
|
|
117
117
|
),
|
|
118
118
|
force: z
|
|
119
119
|
.boolean()
|
|
120
120
|
.optional()
|
|
121
|
-
.describe("Override cadence guard;
|
|
121
|
+
.describe("Override cadence guard on full-corpus sample/write; ignored by mode='amend' (always proceeds)."),
|
|
122
122
|
mode: z
|
|
123
|
-
.enum(["sample", "write"])
|
|
123
|
+
.enum(["sample", "amend", "write"])
|
|
124
124
|
.optional()
|
|
125
|
-
.describe("'sample' returns corpus exemplars + feedback for in-turn distillation; 'write' persists the agent-produced styleCardYaml."),
|
|
125
|
+
.describe("'sample' returns full-corpus exemplars + feedback for in-turn distillation; 'amend' returns existing styleCard + bodies of one or more named documents for incremental update; 'write' persists the agent-produced styleCardYaml."),
|
|
126
126
|
styleCardYaml: z
|
|
127
127
|
.string()
|
|
128
128
|
.optional()
|
|
129
|
-
.describe("Required for mode='write'. The YAML style card the agent composed from the sample
|
|
129
|
+
.describe("Required for mode='write'. The YAML style card the agent composed (from the sample exemplars + feedback intents, or from the amend bodies + existing card)."),
|
|
130
|
+
nodeIds: z
|
|
131
|
+
.array(z.string())
|
|
132
|
+
.optional()
|
|
133
|
+
.describe(
|
|
134
|
+
"Required for mode='amend'. ElementIds of the documents the operator wants folded into the per-format profile (one or more). Each id is eligibility-checked; ineligible ones come back in the ineligible[] payload.",
|
|
135
|
+
),
|
|
136
|
+
amendedFromNodeIds: z
|
|
137
|
+
.array(z.string())
|
|
138
|
+
.optional()
|
|
139
|
+
.describe(
|
|
140
|
+
"Optional for mode='write' after an amend sample. ElementIds the agent decided actually moved the profile. Each becomes a LEARNED_FROM edge from the persisted :VoiceProfile. Setting this routes the write through the amend-write path (no corpus walk, cadence bypassed).",
|
|
141
|
+
),
|
|
130
142
|
},
|
|
131
|
-
async ({ userId, format, force, mode, styleCardYaml }) => {
|
|
143
|
+
async ({ userId, format, force, mode, styleCardYaml, nodeIds, amendedFromNodeIds }) => {
|
|
132
144
|
if (!accountId) return refuseNoAccount("voice-distil-profile");
|
|
133
145
|
const resolvedUserId = userId ?? resolveUserId();
|
|
134
146
|
if (!resolvedUserId) {
|
|
@@ -151,11 +163,17 @@ server.tool(
|
|
|
151
163
|
force: force === true,
|
|
152
164
|
mode,
|
|
153
165
|
styleCardYaml,
|
|
166
|
+
nodeIds,
|
|
167
|
+
amendedFromNodeIds,
|
|
154
168
|
});
|
|
155
169
|
|
|
156
170
|
// Summarise single-format or multi-format result.
|
|
157
171
|
const summariseOne = (r: import("./tools/voice-distil-profile.js").VoiceDistilProfileResult, fmt?: string): string => {
|
|
158
172
|
const tag = fmt ? ` format=${fmt}` : "";
|
|
173
|
+
if (r.eligible !== undefined) {
|
|
174
|
+
// amend sample
|
|
175
|
+
return `voice-distil amend${tag}: eligible=${r.eligible} ineligible=${r.ineligible?.length ?? 0} exemplars=${r.exemplars?.length ?? 0} existingProfile=${r.profileId ?? "none"} feedbackEntries=${r.feedbackEntries}\n${JSON.stringify({ existingStyleCard: r.existingStyleCard, exemplars: r.exemplars, feedbackIntents: r.feedbackIntents, ineligible: r.ineligible }, null, 2)}`;
|
|
176
|
+
}
|
|
159
177
|
if (r.skipped && r.exemplars) {
|
|
160
178
|
return `voice-distil sample${tag}: corpusSize=${r.corpusSize} exemplars=${r.exemplars.length} feedbackEntries=${r.feedbackEntries}\n${JSON.stringify({ exemplars: r.exemplars, feedbackIntents: r.feedbackIntents }, null, 2)}`;
|
|
161
179
|
}
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cypher fragment that excludes trashed nodes for the given alias.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the platform's soft-delete model: a node is trashed if it
|
|
5
|
+
* carries the `:Trashed` label OR a non-null `deletedAt` timestamp.
|
|
6
|
+
* Inlined here (Task 473) instead of imported from
|
|
7
|
+
* `platform/lib/graph-trash` — the cross-package import path did not
|
|
8
|
+
* survive `tsc` emit (the `rootDir: "src"` config collapsed
|
|
9
|
+
* `../../../../../platform/...` to `../../...`, pointing the dist
|
|
10
|
+
* file at a non-existent location and crashing the MCP on boot). The
|
|
11
|
+
* predicate is one line; copying it costs less than the build coupling.
|
|
12
|
+
*/
|
|
13
|
+
export function notTrashed(alias: string): string {
|
|
14
|
+
return `(NOT \`${alias}\`:Trashed AND \`${alias}\`.deletedAt IS NULL)`;
|
|
15
|
+
}
|
|
16
|
+
|
|
1
17
|
/**
|
|
2
18
|
* Shared corpus-filter clauses and format helpers for the voice-mirror tools.
|
|
3
19
|
*
|
|
@@ -7,7 +23,7 @@
|
|
|
7
23
|
* load-bearing filter — when the corpus rules change, this is the only place
|
|
8
24
|
* to edit.
|
|
9
25
|
*
|
|
10
|
-
*
|
|
26
|
+
* Three predicates in VOICE_CORPUS_WHERE:
|
|
11
27
|
*
|
|
12
28
|
* 1. `authorshipMode IN ['human-only', 'human-led-agent-assisted']`.
|
|
13
29
|
* `human-only` is the operator's own writing verbatim;
|
|
@@ -23,20 +39,30 @@
|
|
|
23
39
|
* land as `:KnowledgeDocument` parents carrying `conversationIdentity`
|
|
24
40
|
* with plain `:Section` children — no `:Conversation` secondary label.
|
|
25
41
|
* Conversation-document sections are identified by their parent's
|
|
26
|
-
* `conversationIdentity` property via an EXISTS sub-pattern.
|
|
42
|
+
* `conversationIdentity` property via an EXISTS sub-pattern. The
|
|
43
|
+
* conversation parent must itself be live — a trashed parent excludes
|
|
44
|
+
* its child chunks.
|
|
27
45
|
* Chat captures voice in a way email rarely does — this is the
|
|
28
46
|
* single highest-leverage corpus addition for voice fidelity.
|
|
29
47
|
*
|
|
48
|
+
* 3. The node is not trashed — `notTrashed("n")` filters both the
|
|
49
|
+
* `:Trashed` label and the `deletedAt` property (Task 472). This is
|
|
50
|
+
* the read-side equivalent of `graph-trash`'s soft-delete model: a
|
|
51
|
+
* node marked by either signal is excluded from every voice-mirror
|
|
52
|
+
* walk that goes through VOICE_CORPUS_WHERE.
|
|
53
|
+
*
|
|
30
54
|
* The clause expects `$accountId` to be bound in the calling Cypher
|
|
31
55
|
* parameters. It does not bind any other parameters.
|
|
32
56
|
*/
|
|
33
57
|
export const VOICE_CORPUS_WHERE = `n.accountId = $accountId
|
|
34
58
|
AND n.authorshipMode IN ['human-only', 'human-led-agent-assisted']
|
|
59
|
+
AND ${notTrashed("n")}
|
|
35
60
|
AND (
|
|
36
61
|
any(lbl IN labels(n) WHERE lbl IN ['KnowledgeDocument', 'Message', 'SocialPost'])
|
|
37
62
|
OR ('Section' IN labels(n) AND EXISTS {
|
|
38
63
|
MATCH (parent:KnowledgeDocument)-[:HAS_SECTION]->(n)
|
|
39
64
|
WHERE parent.conversationIdentity IS NOT NULL
|
|
65
|
+
AND ${notTrashed("parent")}
|
|
40
66
|
})
|
|
41
67
|
)`;
|
|
42
68
|
|