@sellable/mcp 0.1.242 → 0.1.243
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/engage-memory.d.ts +1 -0
- package/dist/engage-memory.js +3 -0
- package/dist/identity-memory.d.ts +2 -0
- package/dist/identity-memory.js +5 -0
- package/dist/tools/content-posts.js +7 -3
- package/dist/tools/engage-memory.js +1 -1
- package/package.json +1 -1
- package/skills/create-post/SKILL.md +11 -0
- package/skills/engage/SKILL.md +1 -0
- package/skills/engage/core/README.md +15 -12
package/dist/engage-memory.d.ts
CHANGED
|
@@ -33,6 +33,7 @@ export interface EngageMemory {
|
|
|
33
33
|
decisionRules?: IdentityMemoryChunk;
|
|
34
34
|
changeLog?: IdentityMemoryChunk;
|
|
35
35
|
transcripts?: IdentityMemoryDirectory;
|
|
36
|
+
contentMemory?: IdentityMemoryDirectory;
|
|
36
37
|
references?: IdentityMemoryDirectory;
|
|
37
38
|
}
|
|
38
39
|
/** Check if a sender has per-sender config directory. */
|
package/dist/engage-memory.js
CHANGED
|
@@ -160,6 +160,7 @@ function readStyleGuide(senderId, identityMemory) {
|
|
|
160
160
|
appendCoreSection(parts, sourcePaths, "Core Decision Rules", identityMemory.decisionRules);
|
|
161
161
|
appendCoreSection(parts, sourcePaths, "Core Change Log", identityMemory.changeLog);
|
|
162
162
|
appendCoreDirectoryIndex(parts, sourcePaths, "Core Transcripts Index", identityMemory.transcripts);
|
|
163
|
+
appendCoreDirectoryIndex(parts, sourcePaths, "Core Content Memory Index", identityMemory.contentMemory);
|
|
163
164
|
appendCoreDirectoryIndex(parts, sourcePaths, "Core References Index", identityMemory.references);
|
|
164
165
|
if (core) {
|
|
165
166
|
appendCompatibilitySection(parts, sourcePaths, {
|
|
@@ -210,6 +211,8 @@ function hasCoreIdentityMemory(identityMemory) {
|
|
|
210
211
|
identityMemory.decisionRules ||
|
|
211
212
|
identityMemory.changeLog ||
|
|
212
213
|
identityMemory.transcripts?.index ||
|
|
214
|
+
identityMemory.contentMemory?.index ||
|
|
215
|
+
(identityMemory.contentMemory?.childIndexes?.length ?? 0) > 0 ||
|
|
213
216
|
identityMemory.references?.index ||
|
|
214
217
|
(identityMemory.references?.childIndexes?.length ?? 0) > 0);
|
|
215
218
|
}
|
|
@@ -10,6 +10,7 @@ export declare const CORE_MEMORY_PATHS: {
|
|
|
10
10
|
readonly decisionRules: "core/decision-rules.md";
|
|
11
11
|
readonly changeLog: "core/change-log.md";
|
|
12
12
|
readonly transcripts: "core/transcripts";
|
|
13
|
+
readonly contentMemory: "core/content-memory";
|
|
13
14
|
readonly references: "core/references";
|
|
14
15
|
};
|
|
15
16
|
export interface IdentityMemorySource {
|
|
@@ -37,6 +38,7 @@ export interface IdentityMemory {
|
|
|
37
38
|
decisionRules?: IdentityMemoryChunk;
|
|
38
39
|
changeLog?: IdentityMemoryChunk;
|
|
39
40
|
transcripts?: IdentityMemoryDirectory;
|
|
41
|
+
contentMemory?: IdentityMemoryDirectory;
|
|
40
42
|
references?: IdentityMemoryDirectory;
|
|
41
43
|
}
|
|
42
44
|
export interface ReadIdentityMemoryOptions {
|
package/dist/identity-memory.js
CHANGED
|
@@ -13,6 +13,7 @@ export const CORE_MEMORY_PATHS = {
|
|
|
13
13
|
decisionRules: "core/decision-rules.md",
|
|
14
14
|
changeLog: "core/change-log.md",
|
|
15
15
|
transcripts: "core/transcripts",
|
|
16
|
+
contentMemory: "core/content-memory",
|
|
16
17
|
references: "core/references",
|
|
17
18
|
};
|
|
18
19
|
export function resolveIdentityConfigsDir() {
|
|
@@ -53,6 +54,10 @@ export function readIdentityMemory(_options = {}) {
|
|
|
53
54
|
if (transcripts) {
|
|
54
55
|
memory.transcripts = transcripts;
|
|
55
56
|
}
|
|
57
|
+
const contentMemory = readDirectory(configsDir, CORE_MEMORY_PATHS.contentMemory);
|
|
58
|
+
if (contentMemory) {
|
|
59
|
+
memory.contentMemory = contentMemory;
|
|
60
|
+
}
|
|
56
61
|
const references = readDirectory(configsDir, CORE_MEMORY_PATHS.references);
|
|
57
62
|
if (references) {
|
|
58
63
|
memory.references = references;
|
|
@@ -408,7 +408,8 @@ export function updatePostDraftTool(input) {
|
|
|
408
408
|
const safeResearchId = input.hookResearchId
|
|
409
409
|
? normalizeArtifactId(input.hookResearchId, "hookResearchId")
|
|
410
410
|
: existing.metadata.hookResearchId;
|
|
411
|
-
const iteration = normalizeDraftIteration(input.iteration ??
|
|
411
|
+
const iteration = normalizeDraftIteration(input.iteration ??
|
|
412
|
+
existing.metadata.iteration, input.priorDraftId ?? existing.metadata.priorDraftId);
|
|
412
413
|
const status = input.status || existing.metadata.status || "draft";
|
|
413
414
|
assertDraftStatus(status);
|
|
414
415
|
const metadata = {
|
|
@@ -416,7 +417,9 @@ export function updatePostDraftTool(input) {
|
|
|
416
417
|
status,
|
|
417
418
|
title: input.title ?? existing.metadata.title,
|
|
418
419
|
hookResearchId: safeResearchId,
|
|
419
|
-
draftVersion: iteration?.version ||
|
|
420
|
+
draftVersion: iteration?.version ||
|
|
421
|
+
existing.metadata.draftVersion ||
|
|
422
|
+
inferDraftVersion(safeDraftId),
|
|
420
423
|
priorDraftId: iteration?.priorDraftId,
|
|
421
424
|
iteration,
|
|
422
425
|
updatedAt: now,
|
|
@@ -489,7 +492,8 @@ export function markPostPublishedTool(input) {
|
|
|
489
492
|
const relativePath = `${RELATIVE_DIRS.published}/${year}/${safeId}.md`;
|
|
490
493
|
const existing = readArtifactIfExists(relativePath);
|
|
491
494
|
const createdAt = existing?.metadata.createdAt || publishedAt;
|
|
492
|
-
const finalText = input.finalText ??
|
|
495
|
+
const finalText = input.finalText ??
|
|
496
|
+
extractMarkdownSection(existing?.markdown || "", "Final Text");
|
|
493
497
|
const publishMetadata = readJsonSection(existing?.markdown || "", "Publish Metadata", {});
|
|
494
498
|
const futureMetrics = readJsonSection(existing?.markdown || "", "Future Metrics", {
|
|
495
499
|
impressions: null,
|
|
@@ -2,7 +2,7 @@ import { copySenderConfig, getEngageMemory, migrateFlatConfigs, recordProvenSear
|
|
|
2
2
|
export const engageMemoryToolDefinitions = [
|
|
3
3
|
{
|
|
4
4
|
name: "get_engage_memory",
|
|
5
|
-
description: "Load
|
|
5
|
+
description: "Load unified Sellable memory from ~/.sellable/configs/: core identity/company/proof/story memory, transcript/content-memory clusters, references, style and post writing rules, proven search keywords, and tracked people. The get_engage_memory name is backward-compatible; all data lives in readable markdown files the user can edit directly. When senderId is provided, reads compatibility overrides from senders/{senderId}/ with flat-path fallback.",
|
|
6
6
|
inputSchema: {
|
|
7
7
|
type: "object",
|
|
8
8
|
properties: {
|
package/package.json
CHANGED
|
@@ -108,10 +108,19 @@ Load user memory before hook generation or drafting:
|
|
|
108
108
|
- `core/answer-bank.md`
|
|
109
109
|
- `core/context-modes.md`
|
|
110
110
|
- `core/decision-rules.md`
|
|
111
|
+
- `core/content-memory/**`
|
|
111
112
|
- `core/references/**`
|
|
112
113
|
3. Use `memory.postWritingRules` returned by `mcp__sellable__get_engage_memory` when present. If the host permits direct file reads and the memory response does not include it, read post-specific writing rules from `~/.sellable/configs/writing/posts.md` when available.
|
|
113
114
|
4. Read the gold-standard post pack from `core/references/linkedin-posts/INDEX.md` and its approved copied/distilled examples when present. `get_engage_memory` may return this through the composed `core/references/**` indexes; if the host permits direct file reads, load the files directly when needed.
|
|
114
115
|
|
|
116
|
+
Treat `get_engage_memory` as the backward-compatible tool name for unified
|
|
117
|
+
Sellable memory. For transcript-derived posts, rough source notes, recurring
|
|
118
|
+
ideas, or post seeds, load `core/content-memory/**` before hook generation.
|
|
119
|
+
Use it to find the idea cluster, story/proof/question cards, proof gaps, and
|
|
120
|
+
post seeds. If the cluster is weak, ask workshop questions before drafting. If
|
|
121
|
+
the seed is mature, use it as the source packet for premise development and
|
|
122
|
+
external LinkedIn research.
|
|
123
|
+
|
|
115
124
|
`writing/posts.md` is a post-writing config file, not a draft library. Treat its structure this way:
|
|
116
125
|
|
|
117
126
|
- Top scratch or `## Draft Rule Candidates` sections are candidate taste notes only.
|
|
@@ -137,6 +146,8 @@ Durable write-back targets:
|
|
|
137
146
|
privacy decisions, and downstream prompt/operator notes
|
|
138
147
|
- `core/story-bank.md` for reusable first-person stories
|
|
139
148
|
- `core/transcripts/INDEX.md` for source interview or voice-memo references
|
|
149
|
+
- `core/content-memory/INDEX.md`, cluster files, and card files for evolving
|
|
150
|
+
transcript-derived ideas, story cards, proof cards, questions, and post seeds
|
|
140
151
|
- `core/references/linkedin-posts/INDEX.md` and adjacent files for approved
|
|
141
152
|
gold-standard post references
|
|
142
153
|
- `discovery/influencers.md` for approved creators/persons the user wants the
|
package/skills/engage/SKILL.md
CHANGED
|
@@ -359,6 +359,7 @@ Use the smallest relevant core target:
|
|
|
359
359
|
- `core/decision-rules.md` for durable strategy rules, public/private safety rules, and correction heuristics.
|
|
360
360
|
- `core/change-log.md` for every approved correction, rejected proposal worth remembering, private mark, and downstream prompt/operator note.
|
|
361
361
|
- `core/transcripts/INDEX.md` plus a topic file under `core/transcripts/topics/` for topic-specific interview snippets or unused material that should stay transcript-first.
|
|
362
|
+
- `core/content-memory/INDEX.md` plus cluster/card files for recurring content ideas, post seeds, proof gaps, and transcript-derived story material that should evolve over time.
|
|
362
363
|
- `core/references/linkedin-posts/INDEX.md` or another `core/references/**/INDEX.md` when an approved comment/post example should become a reference artifact.
|
|
363
364
|
|
|
364
365
|
Write-backs must be idempotent: use stable source keys such as `engage-session:{date}:{senderId}:{postUrlHash}:{slug}`, check copied paths before adding references, create no duplicate reference rows, and keep manual sections preserved. If the user marks a candidate private, store only the minimum private-safe metadata and do not promote it into public proof, references, or examples.
|
|
@@ -6,23 +6,26 @@ Engage memory lives in the home-level `~/.sellable/configs/` source of truth. Th
|
|
|
6
6
|
|
|
7
7
|
| Data | Config File | MCP Tool |
|
|
8
8
|
| --------------- | --------------------------------------------------------------------------------- | ---------------------------------------------------- |
|
|
9
|
-
| Core identity | `~/.sellable/configs/core/about-me.md`
|
|
10
|
-
| Company truth | `~/.sellable/configs/core/my-company.md`
|
|
11
|
-
| Anti-AI rules | `~/.sellable/configs/core/anti-ai-writing-style.md`
|
|
9
|
+
| Core identity | `~/.sellable/configs/core/about-me.md` | `get_engage_memory` |
|
|
10
|
+
| Company truth | `~/.sellable/configs/core/my-company.md` | `get_engage_memory` |
|
|
11
|
+
| Anti-AI rules | `~/.sellable/configs/core/anti-ai-writing-style.md` | `get_engage_memory` |
|
|
12
12
|
| Proof/wins | `~/.sellable/configs/core/proof-ledger.md`, `~/.sellable/configs/core/wins-ledger.md` | `get_engage_memory` |
|
|
13
|
-
| Stories/answers | `~/.sellable/configs/core/story-bank.md`, `~/.sellable/configs/core/answer-bank.md`
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
13
|
+
| Stories/answers | `~/.sellable/configs/core/story-bank.md`, `~/.sellable/configs/core/answer-bank.md` | `get_engage_memory` |
|
|
14
|
+
| Transcripts | `~/.sellable/configs/core/transcripts/**` | `get_engage_memory` |
|
|
15
|
+
| Content memory | `~/.sellable/configs/core/content-memory/**` | `get_engage_memory` |
|
|
16
|
+
| Context modes | `~/.sellable/configs/core/context-modes.md` | `get_engage_memory` |
|
|
17
|
+
| Style override | `~/.sellable/configs/writing/styleguide-core.md` or sender override | `get_engage_memory` / `set_engage_style_guide` |
|
|
18
|
+
| Comment rules | `~/.sellable/configs/writing/comments.md` | (read via `get_engage_memory`) |
|
|
19
|
+
| Proven searches | `~/.sellable/configs/discovery/proven-searches.md` | `get_engage_memory` / `record_engage_proven_search` |
|
|
20
|
+
| Tracked people | `~/.sellable/configs/discovery/influencers.md` | `get_engage_memory` / `upsert_engage_tracked_person` |
|
|
21
|
+
| Post filters | `~/.sellable/configs/discovery/post-filters.md` | (read by skill via Read tool) |
|
|
22
|
+
| ICP | `~/.sellable/configs/audience/icp.md` | (read by skill via Read tool) |
|
|
21
23
|
|
|
22
24
|
## How Skills Update Configs
|
|
23
25
|
|
|
24
26
|
- **Interview skill**: Populates primary `configs/core/**` identity/company memory, transcript references, answer bank, proof/wins ledgers, and anti-AI rules.
|
|
25
|
-
- **Engage skill**: Reads composed
|
|
27
|
+
- **Engage skill**: Reads composed unified memory through `get_engage_memory`, updates proven searches after each session, adds new tracked people when discovered, and writes legacy sender style overrides only when the correction is engage-specific.
|
|
28
|
+
- **Create-post skill**: Reads the same unified memory, including `core/content-memory/**`, before drafting from transcripts, recurring ideas, or post seeds.
|
|
26
29
|
|
|
27
30
|
## Migration from JSON
|
|
28
31
|
|