@rubytech/create-maxy-code 0.1.169 → 0.1.171
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/dist/__tests__/premium-mcp-discover.test.js +42 -0
- package/dist/lib/premium-mcp-discover.js +9 -2
- package/package.json +1 -1
- package/payload/platform/plugins/.claude-plugin/marketplace.json +0 -15
- package/payload/platform/plugins/docs/references/platform.md +1 -1
- package/payload/premium-plugins/writer-craft/lib/mcp-stderr-tee/dist/index.d.ts +51 -0
- package/payload/premium-plugins/writer-craft/lib/mcp-stderr-tee/dist/index.d.ts.map +1 -0
- package/payload/premium-plugins/writer-craft/lib/mcp-stderr-tee/dist/index.js +196 -0
- package/payload/premium-plugins/writer-craft/lib/mcp-stderr-tee/dist/index.js.map +1 -0
- package/payload/premium-plugins/writer-craft/lib/mcp-stderr-tee/package.json +7 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/index.d.ts +3 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/index.d.ts.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/index.js +257 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/index.js.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/lib/neo4j.d.ts +14 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/lib/neo4j.js +47 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.d.ts +42 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.d.ts.map +1 -0
- package/payload/{platform/plugins/writer-craft/mcp/src/lib/voice-corpus.ts → premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.js} +5 -5
- package/payload/premium-plugins/writer-craft/mcp/dist/lib/voice-corpus.js.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.d.ts +36 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.d.ts.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.js +225 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-distil-profile.js.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-record-feedback.d.ts +26 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-record-feedback.d.ts.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-record-feedback.js +74 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-record-feedback.js.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.d.ts +22 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.d.ts.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.js +102 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.js.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-tag-content.d.ts +14 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-tag-content.d.ts.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-tag-content.js +84 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-tag-content.js.map +1 -0
- package/payload/premium-plugins/writer-craft/mcp/package-lock.json +1327 -0
- package/payload/server/{chunk-3TRIXQSJ.js → chunk-L2YK2VK3.js} +17 -29
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/server.js +1 -1
- package/payload/platform/plugins/teaching/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/teaching/PLUGIN.md +0 -58
- package/payload/platform/plugins/teaching/skills/interactive-tutor/SKILL.md +0 -59
- package/payload/platform/plugins/teaching/skills/interactive-tutor/references/assessment.md +0 -70
- package/payload/platform/plugins/teaching/skills/interactive-tutor/references/classroom-conduct.md +0 -43
- package/payload/platform/plugins/teaching/skills/interactive-tutor/references/teaching-modes.md +0 -83
- package/payload/platform/plugins/teaching/skills/lesson-planner/SKILL.md +0 -48
- package/payload/platform/plugins/teaching/skills/lesson-planner/references/context-gathering.md +0 -41
- package/payload/platform/plugins/teaching/skills/lesson-planner/references/plan-structure.md +0 -94
- package/payload/platform/plugins/teaching/skills/study-pack-builder/SKILL.md +0 -52
- package/payload/platform/plugins/teaching/skills/study-pack-builder/references/disaggregation.md +0 -49
- package/payload/platform/plugins/teaching/skills/study-pack-builder/references/materials.md +0 -116
- package/payload/platform/plugins/venture-studio/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/venture-studio/PLUGIN.md +0 -119
- package/payload/platform/plugins/venture-studio/bin/scaffold.sh +0 -116
- package/payload/platform/plugins/venture-studio/skills/brand-pack/SKILL.md +0 -256
- package/payload/platform/plugins/venture-studio/skills/brand-pack/references/color-psychology.md +0 -118
- package/payload/platform/plugins/venture-studio/skills/investor-data-room/SKILL.md +0 -376
- package/payload/platform/plugins/venture-studio/skills/investor-data-room/references/business-plan-template.md +0 -64
- package/payload/platform/plugins/venture-studio/skills/investor-data-room/references/compliance-research-checklist.md +0 -53
- package/payload/platform/plugins/venture-studio/skills/investor-data-room/references/data-room-structure.md +0 -88
- package/payload/platform/plugins/venture-studio/skills/investor-data-room/references/deck-blueprint-template.md +0 -39
- package/payload/platform/plugins/venture-studio/skills/investor-data-room/references/design-tokens-application.md +0 -79
- package/payload/platform/plugins/venture-studio/skills/investor-data-room/references/html-pdf-pipeline.md +0 -236
- package/payload/platform/plugins/venture-studio/skills/investor-data-room/references/internal-workings-scrub.md +0 -33
- package/payload/platform/plugins/venture-studio/skills/investor-data-room/references/termsheet-template.md +0 -88
- package/payload/platform/plugins/venture-studio/skills/investor-data-room/templates/prospectus/index.html +0 -1565
- package/payload/platform/plugins/venture-studio/skills/investor-data-room/templates/prospectus/render-pdf.mjs +0 -91
- package/payload/platform/plugins/venture-studio/skills/investor-data-room/templates/prospectus/term_sheet.html +0 -715
- package/payload/platform/plugins/venture-studio/skills/office-hours/SKILL.md +0 -587
- package/payload/platform/plugins/venture-studio/skills/prototype-host/SKILL.md +0 -179
- package/payload/platform/plugins/venture-studio/skills/prototype-host/references/cloudflared-ingress-edit.md +0 -81
- package/payload/platform/plugins/venture-studio/skills/prototype-host/references/scaffold-frameworks.md +0 -60
- package/payload/platform/plugins/venture-studio/skills/prototype-host/references/systemd-user-service.md +0 -104
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/SKILL.md +0 -336
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/aarrr-metrics.md +0 -275
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/assumption-testing.md +0 -93
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/boolean-search.md +0 -308
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/build-measure-learn.md +0 -262
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/business-model-canvas.md +0 -171
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/commitment-signals.md +0 -246
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/design-thinking.md +0 -183
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/earlyvangelist.md +0 -190
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/first-principles.md +0 -58
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/fishbone.md +0 -114
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/five-whys.md +0 -43
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/ice-scoring.md +0 -237
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/innovation-accounting.md +0 -290
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/jtbd.md +0 -105
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/landing-page.md +0 -361
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/market-type.md +0 -167
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/mom-test.md +0 -193
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/mvp-types.md +0 -200
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/og-images.md +0 -239
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/pareto.md +0 -103
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/persona-development.md +0 -291
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/pivot-types.md +0 -225
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/positioning-statement.md +0 -179
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/prd.md +0 -363
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/pre-mortem.md +0 -74
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/problem-validation.md +0 -253
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/product-market-fit.md +0 -256
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/research-synthesis.md +0 -276
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/three-engines-of-growth.md +0 -248
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/validation-tests.md +0 -89
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/value-proposition-canvas.md +0 -121
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/win-loss-analysis.md +0 -242
- package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/workflow-mapping.md +0 -271
- package/payload/platform/plugins/writer-craft/.claude-plugin/plugin.json +0 -17
- package/payload/platform/plugins/writer-craft/PLUGIN.md +0 -130
- package/payload/platform/plugins/writer-craft/agents/writer-craft--manuscript-reviewer.md +0 -96
- package/payload/platform/plugins/writer-craft/mcp/package.json +0 -19
- package/payload/platform/plugins/writer-craft/mcp/scripts/smoke.mjs +0 -152
- package/payload/platform/plugins/writer-craft/mcp/src/index.ts +0 -289
- package/payload/platform/plugins/writer-craft/mcp/src/lib/neo4j.ts +0 -56
- package/payload/platform/plugins/writer-craft/mcp/src/tools/voice-distil-profile.ts +0 -303
- package/payload/platform/plugins/writer-craft/mcp/src/tools/voice-record-feedback.ts +0 -114
- package/payload/platform/plugins/writer-craft/mcp/src/tools/voice-retrieve-conditioning.ts +0 -145
- package/payload/platform/plugins/writer-craft/mcp/src/tools/voice-tag-content.ts +0 -117
- package/payload/platform/plugins/writer-craft/mcp/tsconfig.json +0 -8
- package/payload/platform/plugins/writer-craft/skills/citation-style/SKILL.md +0 -94
- package/payload/platform/plugins/writer-craft/skills/citation-style/references/book-and-chapter-models.md +0 -77
- package/payload/platform/plugins/writer-craft/skills/citation-style/references/citation-rules.md +0 -103
- package/payload/platform/plugins/writer-craft/skills/citation-style/references/journal-article-models.md +0 -74
- package/payload/platform/plugins/writer-craft/skills/citation-style/references/other-source-models.md +0 -146
- package/payload/platform/plugins/writer-craft/skills/citation-style/references/reference-list-rules.md +0 -70
- package/payload/platform/plugins/writer-craft/skills/editorial-practice/SKILL.md +0 -108
- package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/copyediting.md +0 -73
- package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/developmental-editing.md +0 -85
- package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/genre-specific-editing.md +0 -78
- package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/line-editing.md +0 -55
- package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/self-editing.md +0 -89
- package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/SKILL.md +0 -114
- package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/references/audience-analysis.md +0 -73
- package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/references/crafting-persuasive-story.md +0 -76
- package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/references/persuasion-case-studies.md +0 -67
- package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/references/transformation-framework.md +0 -86
- package/payload/platform/plugins/writer-craft/skills/point-of-view/SKILL.md +0 -97
- package/payload/platform/plugins/writer-craft/skills/point-of-view/references/indirect-narration.md +0 -72
- package/payload/platform/plugins/writer-craft/skills/point-of-view/references/pov-types-and-voice.md +0 -91
- package/payload/platform/plugins/writer-craft/skills/point-of-view/references/protagonist-filter.md +0 -71
- package/payload/platform/plugins/writer-craft/skills/point-of-view/references/tense-and-person.md +0 -85
- package/payload/platform/plugins/writer-craft/skills/prose-craft/SKILL.md +0 -100
- package/payload/platform/plugins/writer-craft/skills/prose-craft/references/punctuation-and-grammar.md +0 -72
- package/payload/platform/plugins/writer-craft/skills/prose-craft/references/repetition.md +0 -71
- package/payload/platform/plugins/writer-craft/skills/prose-craft/references/sound-and-rhythm.md +0 -64
- package/payload/platform/plugins/writer-craft/skills/prose-craft/references/word-economy.md +0 -93
- package/payload/platform/plugins/writer-craft/skills/reader-engagement/SKILL.md +0 -100
- package/payload/platform/plugins/writer-craft/skills/reader-engagement/references/cause-effect-setup-payoff.md +0 -79
- package/payload/platform/plugins/writer-craft/skills/reader-engagement/references/conflict-escalation.md +0 -81
- package/payload/platform/plugins/writer-craft/skills/reader-engagement/references/hooking-readers.md +0 -67
- package/payload/platform/plugins/writer-craft/skills/reader-engagement/references/neurochemistry-of-engagement.md +0 -94
- package/payload/platform/plugins/writer-craft/skills/review-manuscript/SKILL.md +0 -111
- package/payload/platform/plugins/writer-craft/skills/review-manuscript/references/review-manuscript-checklist.md +0 -119
- package/payload/platform/plugins/writer-craft/skills/review-prose/SKILL.md +0 -99
- package/payload/platform/plugins/writer-craft/skills/review-prose/references/prose-review-checklist.md +0 -112
- package/payload/platform/plugins/writer-craft/skills/review-scene/SKILL.md +0 -99
- package/payload/platform/plugins/writer-craft/skills/review-scene/references/scene-analysis-framework.md +0 -95
- package/payload/platform/plugins/writer-craft/skills/story-architecture/SKILL.md +0 -106
- package/payload/platform/plugins/writer-craft/skills/story-architecture/references/blueprinting-and-scene-cards.md +0 -118
- package/payload/platform/plugins/writer-craft/skills/story-architecture/references/inner-issue-and-protagonist-goal.md +0 -66
- package/payload/platform/plugins/writer-craft/skills/story-architecture/references/misbelief-desire-worldview.md +0 -87
- package/payload/platform/plugins/writer-craft/skills/story-architecture/references/origin-scenes-and-escalation.md +0 -82
- package/payload/platform/plugins/writer-craft/skills/story-blueprint/SKILL.md +0 -133
- package/payload/platform/plugins/writer-craft/skills/story-blueprint/references/blueprinting-exercises.md +0 -118
- package/payload/platform/plugins/writer-craft/skills/story-blueprint/references/blueprinting-process.md +0 -128
- package/payload/platform/plugins/writer-craft/skills/voice-mirror/SKILL.md +0 -166
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: voice-mirror
|
|
3
|
-
description: "Capture the operator's authorial voice from their own writing and apply it to agent-drafted content. Activate when the operator asks to tag historical content as human-authored, to distil a style profile, to retrieve voice exemplars for a drafting task, or to record their edit on an agent draft as feedback. Other drafting skills (email composition, Postiz publisher, property-brochure, prospectus) call `voice-retrieve-conditioning` transparently — `voiceMirror: false` in the calling skill's frontmatter opts out."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Voice Mirror
|
|
7
|
-
|
|
8
|
-
Distil the operator's own voice from the content they have actually written, and condition agent drafts on it so generated copy reads as theirs. Anthropic models cannot be fine-tuned; voice mimicry comes from in-context conditioning — a style card plus a handful of real exemplars. The 1M context window makes this affordable.
|
|
9
|
-
|
|
10
|
-
The skill is built on four deterministic MCP tools served by the `writer-craft` plugin's MCP server (`premium-plugins/writer-craft/mcp/`):
|
|
11
|
-
|
|
12
|
-
| Tool | Purpose |
|
|
13
|
-
|------|---------|
|
|
14
|
-
| `voice-tag-content` | Stamp historical or new content nodes with `authorshipMode`. Bulk-tags arrays of node ids. |
|
|
15
|
-
| `voice-distil-profile` | Walk the operator's `human-only` corpus and produce a `:VoiceProfile {styleCard, generatedAt, corpusSize, feedbackEntries}` node. |
|
|
16
|
-
| `voice-retrieve-conditioning` | Return `{styleCard, exemplars[]}` for a drafting brief. K=5 for short-form, K=15 for long-form. Token-budget bounded. |
|
|
17
|
-
| `voice-record-feedback` | When the operator edits an agent draft, write a `:VoiceEdit {originalText, editedText, intent, occurredAt}-[:FEEDBACK_FOR]->(:VoiceProfile)` node. The `intent` field is a Haiku-summarised diff. |
|
|
18
|
-
|
|
19
|
-
## When to activate
|
|
20
|
-
|
|
21
|
-
Activate when the operator says any of:
|
|
22
|
-
|
|
23
|
-
- **"Tag this as me" / "I wrote that" / "mark these as human-only".** Drives `voice-tag-content`.
|
|
24
|
-
- **"Build my voice profile" / "distil my style" / "rebuild the voice mirror".** Drives `voice-distil-profile`.
|
|
25
|
-
- **"Read my writing first" / "draft this in my voice" — when the operator is asking for a hand-written-quality draft, not a generic AI reply.** Drives `voice-retrieve-conditioning`; the calling drafting skill is the actual surface, this skill is the conditioning input.
|
|
26
|
-
- **"Use my edit as a teaching example" / "remember how I changed that".** Drives `voice-record-feedback`.
|
|
27
|
-
- **"Review my historical writing and tag it" / "start the backfill".** Drives the interactive backfill flow described below.
|
|
28
|
-
|
|
29
|
-
Do **not** activate for:
|
|
30
|
-
|
|
31
|
-
- Writing-craft review tasks (`prose-craft`, `review-prose`, etc.). Those are critique skills, not voice-capture.
|
|
32
|
-
- Public-figure voice mimicry. Out of scope — see the `## Out of scope` section.
|
|
33
|
-
- Audio voice cloning. Different domain entirely.
|
|
34
|
-
|
|
35
|
-
## Flow — backfill review (one-shot session)
|
|
36
|
-
|
|
37
|
-
Run when the operator first installs voice-mirror, then whenever they want to refresh the corpus.
|
|
38
|
-
|
|
39
|
-
### 1. Pick a corpus stream
|
|
40
|
-
|
|
41
|
-
The operator's authored content lives in two stream shapes that the backfill UX handles differently:
|
|
42
|
-
|
|
43
|
-
- **Discrete documents and posts** — `:KnowledgeDocument` (covers email threads via `source:'email'` since Task 321), `:SocialPost`, and one-off `:Message` nodes. Per-item tagging with previews.
|
|
44
|
-
- **Chat archives** — conversation-document `:KnowledgeDocument` nodes (those carrying `conversationIdentity`) with their child `:Section` chunks. Per-conversation tagging because chunking happens server-side and the operator owns whole conversations, not individual chunks. Chat is the highest-leverage corpus — the unguarded voice that email rarely captures.
|
|
45
|
-
|
|
46
|
-
Ask the operator which stream to backfill first. Default to chat archives when the account has any conversation-document `:KnowledgeDocument` nodes, because that's where voice signal is strongest.
|
|
47
|
-
|
|
48
|
-
### 2a. Discrete documents — paginate in batches of 10
|
|
49
|
-
|
|
50
|
-
Query for `:KnowledgeDocument | :SocialPost | :Message` nodes belonging to this operator's account whose `authorshipMode` is `unknown`. Order by `dateSent | datePublished | dateCreated` descending — most recent first. For each batch, surface a numbered list with: source label, date, recipient or topic, and a one-line preview (first ~120 chars of body). Offer bulk shortcuts:
|
|
51
|
-
|
|
52
|
-
- `1-10 human-only` — tag every item in the batch as `human-only`.
|
|
53
|
-
- `1,3,7 human-only` — tag a subset.
|
|
54
|
-
- `2 human-led-agent-assisted` — single-item mode override.
|
|
55
|
-
- `5 agent-led-human-reviewed` — single-item mode override.
|
|
56
|
-
- `skip` — leave the batch as `unknown` and advance.
|
|
57
|
-
- `stop` — exit the backfill; the next session resumes from where the operator left off.
|
|
58
|
-
|
|
59
|
-
Bulk-tag via `voice-tag-content` once per operator response. Emit `[voice-tag] mode=<mode> count=<n>` per write.
|
|
60
|
-
|
|
61
|
-
### 2b. Chat archives — paginate per conversation-document parent
|
|
62
|
-
|
|
63
|
-
For each conversation-document `:KnowledgeDocument` (with `conversationIdentity` set) that has at least one `:Section` chunk whose `authorshipMode` is `unknown`, surface: source file, participant names, message count, date range, and a one-line summary. Offer:
|
|
64
|
-
|
|
65
|
-
- `human-only` — tag every child `:Section` chunk in this conversation as `human-only`.
|
|
66
|
-
- `mixed` — open the conversation for per-chunk tagging (rare; only when the archive contains multiple authors on the operator's side).
|
|
67
|
-
- `not me` — tag every chunk as `agent-only` (e.g. a Slack channel where the operator only forwarded other people's messages).
|
|
68
|
-
- `skip` / `stop` — same semantics as 2a.
|
|
69
|
-
|
|
70
|
-
Bulk-tag via `voice-tag-content` with the list of `:Section` element IDs the conversation-document contains. The skill emits `[voice-tag] mode=<mode> count=<chunk-count>` once per conversation.
|
|
71
|
-
|
|
72
|
-
Authorship at conversation granularity is a deliberate UX trade-off: chunks within a conversation almost always share the same operator's voice, and per-chunk tagging at archive scale would burn the operator's attention. The `mixed` opt-in covers the rare case where it matters.
|
|
73
|
-
|
|
74
|
-
### 3. Distil when the corpus crosses threshold
|
|
75
|
-
|
|
76
|
-
After each backfill batch, check whether the qualifying corpus (`authorshipMode IN ['human-only', 'human-led-agent-assisted']`) has grown ≥20% since the last `:VoiceProfile.corpusSize` (or ≥1 entry if no profile exists). If yes, offer to run `voice-distil-profile` immediately. The operator can defer; the next scheduled distillation will pick it up.
|
|
77
|
-
|
|
78
|
-
## Flow — drafting-time conditioning
|
|
79
|
-
|
|
80
|
-
Drafting skills (email composition, Postiz, property-brochure, prospectus) call `voice-retrieve-conditioning` transparently before assembling their prompt. The skill takes a brief — `{topic, format, register}` — and returns:
|
|
81
|
-
|
|
82
|
-
```yaml
|
|
83
|
-
styleCard: |
|
|
84
|
-
sentenceLengthDistribution: short-heavy (median 12 words)
|
|
85
|
-
register: warm-professional, British, contraction-friendly
|
|
86
|
-
favoured: ["properly", "the right thing", "happy to"]
|
|
87
|
-
avoided: ["circle back", "synergy", "leverage"]
|
|
88
|
-
taboos: ["per my last email", "kind regards"]
|
|
89
|
-
opening: drop the salutation if the thread is mid-flow; otherwise "Hi <name>,"
|
|
90
|
-
closing: "Best, Neo" — no signature block
|
|
91
|
-
exemplars:
|
|
92
|
-
- source: Email to Sarah Knight, 2026-04-12, re: lease draft
|
|
93
|
-
body: "…actual operator-written paragraph…"
|
|
94
|
-
- source: SocialPost on LinkedIn, 2026-03-30
|
|
95
|
-
body: "…"
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Drafting skills inject both blocks into their prompt. Opt-out is per-skill: declare `voiceMirror: false` in the skill's frontmatter and the calling site skips the fetch. Default is on.
|
|
99
|
-
|
|
100
|
-
If the `:VoiceProfile` does not yet exist (corpus too small, or distillation never run), the tool returns `{styleCard: null, exemplars: []}` and the calling skill falls back to its existing default register. No error, no draft refusal.
|
|
101
|
-
|
|
102
|
-
Emit `[voice-retrieve] task=<brief> styleCardBytes=<n> exemplarCount=<k> tokenBudget=<n>` per call.
|
|
103
|
-
|
|
104
|
-
## Flow — feedback capture
|
|
105
|
-
|
|
106
|
-
When the operator edits an agent draft (in the email composer's edit loop, or in any drafting skill that supports inline edits), capture the diff:
|
|
107
|
-
|
|
108
|
-
1. The calling skill passes `{originalText, editedText}` to `voice-record-feedback`.
|
|
109
|
-
2. The tool runs a Haiku diff summarisation to produce an `intent` field — a one-sentence description of what the operator changed and why. Example intents: "shorter and dropped the apology", "switched to first person", "removed sign-off", "added a specific date".
|
|
110
|
-
3. The tool writes `(:VoiceEdit {originalText, editedText, intent, occurredAt, adminUserId, accountId})-[:FEEDBACK_FOR]->(:VoiceProfile)` for the operator's profile.
|
|
111
|
-
|
|
112
|
-
Feedback accumulates between distillations. The next `voice-distil-profile` run reads every `:VoiceEdit` linked to the profile and feeds the intents into the style-card refinement.
|
|
113
|
-
|
|
114
|
-
Emit `[voice-record-feedback] adminUser=<id> intent="<haiku-summary>" diffBytes=<n>`.
|
|
115
|
-
|
|
116
|
-
## Distillation cadence
|
|
117
|
-
|
|
118
|
-
`voice-distil-profile` re-runs when **either**:
|
|
119
|
-
|
|
120
|
-
- the `human-only` corpus has grown ≥20% since the last `:VoiceProfile.corpusSize`, OR
|
|
121
|
-
- 30 days have passed since `:VoiceProfile.generatedAt`.
|
|
122
|
-
|
|
123
|
-
A re-run within the 30-day window with <20% growth is a no-op — the tool returns the existing profile unchanged and emits `[voice-distil] skip reason=below-threshold`.
|
|
124
|
-
|
|
125
|
-
The triggering surface is the skill, not a scheduled job. Distillation runs on demand: at the end of a backfill batch, when the email composer notices stale-profile narration, or when the operator says "rebuild my voice profile".
|
|
126
|
-
|
|
127
|
-
## Per-operator scope
|
|
128
|
-
|
|
129
|
-
One `:VoiceProfile` per `:AdminUser`. Multi-author accounts (an agency with several operators) get one profile per person. Identity is the `(accountId, adminUserId)` pair, enforced by the schema constraint.
|
|
130
|
-
|
|
131
|
-
## Observability
|
|
132
|
-
|
|
133
|
-
| Tag | When |
|
|
134
|
-
|-----|------|
|
|
135
|
-
| `[voice-tag] mode=<mode> nodeId=<id> count=<n>` | Every tag write. |
|
|
136
|
-
| `[voice-distil] adminUser=<id> corpusSize=<n> generatedAt=<iso> feedbackEntries=<n>` | Each distillation. |
|
|
137
|
-
| `[voice-distil] skip reason=<below-threshold\|recent>` | When the cadence guard fires. |
|
|
138
|
-
| `[voice-retrieve] task=<topic\|format> styleCardBytes=<n> exemplarCount=<k> tokenBudget=<n>` | Each retrieval. |
|
|
139
|
-
| `[voice-record-feedback] adminUser=<id> intent="<haiku-summary>" diffBytes=<n>` | Each feedback write. |
|
|
140
|
-
|
|
141
|
-
**Confirms working:** `[voice-retrieve] exemplarCount≥1` precedes every drafting-skill prompt assembly when the calling skill has not opted out. `[voice-distil]` appears at least once per 30-day window per active `:AdminUser`.
|
|
142
|
-
|
|
143
|
-
**Indicates failure:** `[voice-retrieve] exemplarCount=0` with non-empty corpus → similarity index broken; `[voice-distil] error …` → corpus walk or LLM call failed; absence of `[voice-record-feedback]` after an operator-edit-then-send flow → feedback loop is dead.
|
|
144
|
-
|
|
145
|
-
**Diagnostic path:**
|
|
146
|
-
|
|
147
|
-
```
|
|
148
|
-
journalctl -u maxy-code | grep -E '\[voice-(tag|distil|retrieve|record-feedback)\]'
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
Filter by `adminUser=<id>` for per-operator drill-down.
|
|
152
|
-
|
|
153
|
-
## Out of scope
|
|
154
|
-
|
|
155
|
-
- Voice blending across multiple authors (no "Joel + Neo combined voice").
|
|
156
|
-
- Style transfer from public-figure corpora — voice-mirror only learns from the operator's own writing.
|
|
157
|
-
- Audio voice cloning / speech synthesis — different domain.
|
|
158
|
-
- Auto-tagging legacy content via heuristics — backfill is operator-driven only; the agent never guesses authorship.
|
|
159
|
-
- Register-segmented profiles (one profile per author, not one per formality level).
|
|
160
|
-
- Admin-UI editing of the `styleCard` — operator edits via `database-operator` for now. Surfacing this in a dedicated UI is a follow-up task.
|
|
161
|
-
|
|
162
|
-
## Dependencies
|
|
163
|
-
|
|
164
|
-
- **Memory plugin's graph-write gate** is the single write boundary; new tools route through it, never bypass.
|
|
165
|
-
- **Haiku LLM call path** (already used by `memory-classify`) is reused for diff-intent summarisation.
|
|
166
|
-
- **`:AdminUser` must exist** for the operator before distillation runs. Personal-mode operators with `Person {role: "admin-personal"}` need to be promoted to an `:AdminUser` first — out of scope here.
|