@mneme-ai/core 1.72.0 โ 1.74.0
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/genesplice/genesplice.test.d.ts +5 -0
- package/dist/genesplice/genesplice.test.d.ts.map +1 -0
- package/dist/genesplice/genesplice.test.js +222 -0
- package/dist/genesplice/genesplice.test.js.map +1 -0
- package/dist/genesplice/genome_recombine.d.ts +61 -0
- package/dist/genesplice/genome_recombine.d.ts.map +1 -0
- package/dist/genesplice/genome_recombine.js +135 -0
- package/dist/genesplice/genome_recombine.js.map +1 -0
- package/dist/genesplice/gist_transmit.d.ts +57 -0
- package/dist/genesplice/gist_transmit.d.ts.map +1 -0
- package/dist/genesplice/gist_transmit.js +87 -0
- package/dist/genesplice/gist_transmit.js.map +1 -0
- package/dist/genesplice/index.d.ts +26 -0
- package/dist/genesplice/index.d.ts.map +1 -0
- package/dist/genesplice/index.js +26 -0
- package/dist/genesplice/index.js.map +1 -0
- package/dist/genesplice/phenotype.d.ts +33 -0
- package/dist/genesplice/phenotype.d.ts.map +1 -0
- package/dist/genesplice/phenotype.js +73 -0
- package/dist/genesplice/phenotype.js.map +1 -0
- package/dist/genesplice/soul_prompt.d.ts +87 -0
- package/dist/genesplice/soul_prompt.d.ts.map +1 -0
- package/dist/genesplice/soul_prompt.js +162 -0
- package/dist/genesplice/soul_prompt.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -1
- package/dist/permeate/bookmarklet_generator.d.ts +26 -0
- package/dist/permeate/bookmarklet_generator.d.ts.map +1 -0
- package/dist/permeate/bookmarklet_generator.js +56 -0
- package/dist/permeate/bookmarklet_generator.js.map +1 -0
- package/dist/permeate/editor_integration_map.d.ts +43 -0
- package/dist/permeate/editor_integration_map.d.ts.map +1 -0
- package/dist/permeate/editor_integration_map.js +180 -0
- package/dist/permeate/editor_integration_map.js.map +1 -0
- package/dist/permeate/index.d.ts +25 -0
- package/dist/permeate/index.d.ts.map +1 -0
- package/dist/permeate/index.js +25 -0
- package/dist/permeate/index.js.map +1 -0
- package/dist/permeate/permeate.test.d.ts +5 -0
- package/dist/permeate/permeate.test.d.ts.map +1 -0
- package/dist/permeate/permeate.test.js +141 -0
- package/dist/permeate/permeate.test.js.map +1 -0
- package/dist/permeate/transport_menu.d.ts +35 -0
- package/dist/permeate/transport_menu.d.ts.map +1 -0
- package/dist/permeate/transport_menu.js +96 -0
- package/dist/permeate/transport_menu.js.map +1 -0
- package/dist/permeate/userscript_generator.d.ts +42 -0
- package/dist/permeate/userscript_generator.d.ts.map +1 -0
- package/dist/permeate/userscript_generator.js +170 -0
- package/dist/permeate/userscript_generator.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.74.0 -- PERMEATE P2: BOOKMARKLET GENERATOR.
|
|
3
|
+
*
|
|
4
|
+
* The simplest possible "browser extension" -- a single bookmark.
|
|
5
|
+
* User drags it to their bookmark bar; clicking it on any AI chat
|
|
6
|
+
* page opens a paste dialog + injects the soul into the chat input.
|
|
7
|
+
*
|
|
8
|
+
* Limitations: some AI sites enforce strict CSP that blocks
|
|
9
|
+
* javascript: URIs. Userscript (P1) is the more reliable fallback.
|
|
10
|
+
*/
|
|
11
|
+
const SCRIPT = `
|
|
12
|
+
(function(){
|
|
13
|
+
var soul = prompt('Paste Mneme soul prompt:');
|
|
14
|
+
if(!soul || soul.indexOf('MNEME SOUL PROMPT') < 0){
|
|
15
|
+
alert('Not a Mneme soul prompt -- copy the full text first.');
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
var sel = ['div#prompt-textarea','textarea[data-id="root"]','textarea#prompt-textarea','rich-textarea div[contenteditable="true"]','rich-textarea','div[contenteditable="true"]','textarea[aria-label*="Ask"]','textarea'];
|
|
19
|
+
var el = null;
|
|
20
|
+
for (var i = 0; i < sel.length; i++) { el = document.querySelector(sel[i]); if (el) break; }
|
|
21
|
+
if(!el){ alert('Chat input not found on this page.'); return; }
|
|
22
|
+
if(el.tagName === 'TEXTAREA' || el.tagName === 'INPUT'){
|
|
23
|
+
var setter = (Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype,'value')||{}).set || (Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')||{}).set;
|
|
24
|
+
if(setter) setter.call(el, soul); else el.value = soul;
|
|
25
|
+
el.dispatchEvent(new Event('input',{bubbles:true}));
|
|
26
|
+
} else {
|
|
27
|
+
el.focus();
|
|
28
|
+
try { document.execCommand('selectAll',false); document.execCommand('insertText',false,soul); }
|
|
29
|
+
catch(e) { el.textContent = soul; el.dispatchEvent(new Event('input',{bubbles:true})); }
|
|
30
|
+
}
|
|
31
|
+
alert('Mneme soul injected. Press Send to submit.');
|
|
32
|
+
})();
|
|
33
|
+
`.replace(/\s+/g, " ").trim();
|
|
34
|
+
export function generateBookmarklet(opts = {}) {
|
|
35
|
+
const max = opts.maxChars ?? 2000;
|
|
36
|
+
const uri = "javascript:" + encodeURIComponent(SCRIPT);
|
|
37
|
+
const warning = uri.length > max
|
|
38
|
+
? `URI is ${uri.length} chars -- some browsers cap at ${max}. Use the userscript (P1) instead if this bookmarklet doesn't work.`
|
|
39
|
+
: null;
|
|
40
|
+
return {
|
|
41
|
+
uri,
|
|
42
|
+
name: "๐ Mneme Soul",
|
|
43
|
+
instructions: [
|
|
44
|
+
"1. Open your browser's bookmark manager.",
|
|
45
|
+
"2. Add a new bookmark; name it: ๐ Mneme Soul",
|
|
46
|
+
"3. Paste this URL into the bookmark's URL field (NOT the address bar):",
|
|
47
|
+
` ${uri.length > 80 ? uri.slice(0, 80) + "..." : uri}`,
|
|
48
|
+
"4. Save the bookmark.",
|
|
49
|
+
"5. Open ChatGPT / Gemini / Claude.ai / Copilot / DeepSeek.",
|
|
50
|
+
"6. Copy a Mneme soul prompt to clipboard.",
|
|
51
|
+
"7. Click the bookmark; paste in the popup; soul is injected.",
|
|
52
|
+
],
|
|
53
|
+
warning,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=bookmarklet_generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bookmarklet_generator.js","sourceRoot":"","sources":["../../src/permeate/bookmarklet_generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkBH,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBd,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAE9B,MAAM,UAAU,mBAAmB,CAAC,OAA2B,EAAE;IAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IAClC,MAAM,GAAG,GAAG,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG;QAC9B,CAAC,CAAC,UAAU,GAAG,CAAC,MAAM,kCAAkC,GAAG,qEAAqE;QAChI,CAAC,CAAC,IAAI,CAAC;IACT,OAAO;QACL,GAAG;QACH,IAAI,EAAE,eAAe;QACrB,YAAY,EAAE;YACZ,0CAA0C;YAC1C,+CAA+C;YAC/C,wEAAwE;YACxE,MAAM,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;YACxD,uBAAuB;YACvB,4DAA4D;YAC5D,2CAA2C;YAC3C,8DAA8D;SAC/D;QACD,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.74.0 -- PERMEATE P3: EDITOR INTEGRATION MAP.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth answering "does Mneme work with my editor's
|
|
5
|
+
* AI?" Returns a matrix of every editor-based AI tool + how Mneme
|
|
6
|
+
* connects to it + what (if anything) the user needs to do.
|
|
7
|
+
*
|
|
8
|
+
* Editor AI tools DON'T need a browser extension because they
|
|
9
|
+
* already speak MCP. Mneme parasite-bridge auto-injects + the
|
|
10
|
+
* Schroedinger embedder picks the best memory tier. The user just
|
|
11
|
+
* starts the editor; everything else is automatic.
|
|
12
|
+
*/
|
|
13
|
+
export type IntegrationKind = "native-mcp" | "parasite-bridge" | "browser-only" | "partial";
|
|
14
|
+
export interface EditorIntegration {
|
|
15
|
+
id: string;
|
|
16
|
+
displayName: string;
|
|
17
|
+
vendor: string;
|
|
18
|
+
/** Where the AI runs (editor extension / web / desktop app). */
|
|
19
|
+
surface: "editor-extension" | "cli" | "web" | "desktop-app";
|
|
20
|
+
/** How Mneme connects. */
|
|
21
|
+
integration: IntegrationKind;
|
|
22
|
+
/** Is this connection currently working? */
|
|
23
|
+
status: "working" | "partial" | "manual-setup" | "needs-paste";
|
|
24
|
+
/** Plain-English one-liner. */
|
|
25
|
+
note: string;
|
|
26
|
+
}
|
|
27
|
+
export declare const EDITOR_INTEGRATIONS: EditorIntegration[];
|
|
28
|
+
export interface IntegrationReport {
|
|
29
|
+
total: number;
|
|
30
|
+
working: number;
|
|
31
|
+
partial: number;
|
|
32
|
+
needsPaste: number;
|
|
33
|
+
byKind: Record<IntegrationKind, number>;
|
|
34
|
+
/** Plain-English summary. */
|
|
35
|
+
headline: string;
|
|
36
|
+
}
|
|
37
|
+
export declare function reportIntegrations(): IntegrationReport;
|
|
38
|
+
/** Filter integrations by status or surface. */
|
|
39
|
+
export declare function filterIntegrations(opts?: {
|
|
40
|
+
status?: EditorIntegration["status"];
|
|
41
|
+
surface?: EditorIntegration["surface"];
|
|
42
|
+
}): EditorIntegration[];
|
|
43
|
+
//# sourceMappingURL=editor_integration_map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor_integration_map.d.ts","sourceRoot":"","sources":["../../src/permeate/editor_integration_map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,iBAAiB,GAAG,cAAc,GAAG,SAAS,CAAC;AAE5F,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,OAAO,EAAE,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,aAAa,CAAC;IAC5D,0BAA0B;IAC1B,WAAW,EAAE,eAAe,CAAC;IAC7B,4CAA4C;IAC5C,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC;IAC/D,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,EA2IlD,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACxC,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,kBAAkB,IAAI,iBAAiB,CAatD;AAED,gDAAgD;AAChD,wBAAgB,kBAAkB,CAAC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAA;CAAO,GAAG,iBAAiB,EAAE,CAMnJ"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.74.0 -- PERMEATE P3: EDITOR INTEGRATION MAP.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth answering "does Mneme work with my editor's
|
|
5
|
+
* AI?" Returns a matrix of every editor-based AI tool + how Mneme
|
|
6
|
+
* connects to it + what (if anything) the user needs to do.
|
|
7
|
+
*
|
|
8
|
+
* Editor AI tools DON'T need a browser extension because they
|
|
9
|
+
* already speak MCP. Mneme parasite-bridge auto-injects + the
|
|
10
|
+
* Schroedinger embedder picks the best memory tier. The user just
|
|
11
|
+
* starts the editor; everything else is automatic.
|
|
12
|
+
*/
|
|
13
|
+
export const EDITOR_INTEGRATIONS = [
|
|
14
|
+
// โโโ Native MCP (zero setup) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
15
|
+
{
|
|
16
|
+
id: "claude-code",
|
|
17
|
+
displayName: "Claude Code (CLI/extension)",
|
|
18
|
+
vendor: "Anthropic",
|
|
19
|
+
surface: "cli",
|
|
20
|
+
integration: "native-mcp",
|
|
21
|
+
status: "working",
|
|
22
|
+
note: "Mneme MCP auto-registered. Parasite-bridge updates CLAUDE.md. Zero manual setup.",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: "cursor",
|
|
26
|
+
displayName: "Cursor",
|
|
27
|
+
vendor: "Anysphere",
|
|
28
|
+
surface: "editor-extension",
|
|
29
|
+
integration: "native-mcp",
|
|
30
|
+
status: "working",
|
|
31
|
+
note: "MCP servers configurable via Cursor settings. Mneme parasite-bridge writes .cursor/rules/mneme.mdc.",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: "continue",
|
|
35
|
+
displayName: "Continue",
|
|
36
|
+
vendor: "Continue.dev",
|
|
37
|
+
surface: "editor-extension",
|
|
38
|
+
integration: "native-mcp",
|
|
39
|
+
status: "working",
|
|
40
|
+
note: "Add Mneme to config.json's mcp.servers array; restart Continue.",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: "cline",
|
|
44
|
+
displayName: "Cline (Claude Dev)",
|
|
45
|
+
vendor: "Cline",
|
|
46
|
+
surface: "editor-extension",
|
|
47
|
+
integration: "native-mcp",
|
|
48
|
+
status: "working",
|
|
49
|
+
note: "MCP-native. Adds Mneme via Cline's MCP marketplace UI or settings.json.",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: "aider",
|
|
53
|
+
displayName: "Aider",
|
|
54
|
+
vendor: "paul-gauthier",
|
|
55
|
+
surface: "cli",
|
|
56
|
+
integration: "native-mcp",
|
|
57
|
+
status: "working",
|
|
58
|
+
note: "Aider supports MCP server config; Mneme connects local-first.",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: "zed",
|
|
62
|
+
displayName: "Zed AI",
|
|
63
|
+
vendor: "Zed Industries",
|
|
64
|
+
surface: "editor-extension",
|
|
65
|
+
integration: "native-mcp",
|
|
66
|
+
status: "working",
|
|
67
|
+
note: "Zed has MCP support in recent versions. Mneme connects natively.",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: "codex",
|
|
71
|
+
displayName: "Codex",
|
|
72
|
+
vendor: "OpenAI",
|
|
73
|
+
surface: "editor-extension",
|
|
74
|
+
integration: "parasite-bridge",
|
|
75
|
+
status: "working",
|
|
76
|
+
note: "Parasite-bridge writes AGENTS.md (auto-gitignored by v1.72 Ghost Sniper).",
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: "windsurf",
|
|
80
|
+
displayName: "Windsurf",
|
|
81
|
+
vendor: "Codeium",
|
|
82
|
+
surface: "editor-extension",
|
|
83
|
+
integration: "parasite-bridge",
|
|
84
|
+
status: "working",
|
|
85
|
+
note: "Parasite-bridge writes .windsurfrules (auto-gitignored).",
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: "copilot-chat",
|
|
89
|
+
displayName: "GitHub Copilot Chat",
|
|
90
|
+
vendor: "GitHub",
|
|
91
|
+
surface: "editor-extension",
|
|
92
|
+
integration: "native-mcp",
|
|
93
|
+
status: "working",
|
|
94
|
+
note: "Recent Copilot Chat versions support MCP. Mneme connects via VS Code's MCP settings.",
|
|
95
|
+
},
|
|
96
|
+
// โโโ Partial โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
97
|
+
{
|
|
98
|
+
id: "jetbrains-ai",
|
|
99
|
+
displayName: "JetBrains AI Assistant",
|
|
100
|
+
vendor: "JetBrains",
|
|
101
|
+
surface: "editor-extension",
|
|
102
|
+
integration: "partial",
|
|
103
|
+
status: "partial",
|
|
104
|
+
note: "JetBrains MCP support is rolling out. Currently parasite-bridge writes .jetbrains/copilot-instructions.md as fallback.",
|
|
105
|
+
},
|
|
106
|
+
// โโโ Browser-only (needs paste or PERMEATE userscript) โโโโโโโโ
|
|
107
|
+
{
|
|
108
|
+
id: "chatgpt-web",
|
|
109
|
+
displayName: "ChatGPT (web)",
|
|
110
|
+
vendor: "OpenAI",
|
|
111
|
+
surface: "web",
|
|
112
|
+
integration: "browser-only",
|
|
113
|
+
status: "needs-paste",
|
|
114
|
+
note: "Sandboxed browser. Use v1.73 soul prompt paste OR v1.74 PERMEATE userscript.",
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: "gemini-web",
|
|
118
|
+
displayName: "Gemini (web)",
|
|
119
|
+
vendor: "Google",
|
|
120
|
+
surface: "web",
|
|
121
|
+
integration: "browser-only",
|
|
122
|
+
status: "needs-paste",
|
|
123
|
+
note: "Sandboxed browser. Use soul prompt paste OR PERMEATE userscript.",
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
id: "claude-ai",
|
|
127
|
+
displayName: "Claude.ai (web)",
|
|
128
|
+
vendor: "Anthropic",
|
|
129
|
+
surface: "web",
|
|
130
|
+
integration: "browser-only",
|
|
131
|
+
status: "needs-paste",
|
|
132
|
+
note: "Sandboxed browser. Use soul prompt paste OR PERMEATE userscript. Claude Connectors coming.",
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
id: "copilot-web",
|
|
136
|
+
displayName: "Copilot (web)",
|
|
137
|
+
vendor: "Microsoft",
|
|
138
|
+
surface: "web",
|
|
139
|
+
integration: "browser-only",
|
|
140
|
+
status: "needs-paste",
|
|
141
|
+
note: "Browser sandbox. PERMEATE userscript injects soul prompt.",
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
id: "deepseek-web",
|
|
145
|
+
displayName: "DeepSeek (web)",
|
|
146
|
+
vendor: "DeepSeek",
|
|
147
|
+
surface: "web",
|
|
148
|
+
integration: "browser-only",
|
|
149
|
+
status: "needs-paste",
|
|
150
|
+
note: "Browser sandbox. Soul prompt paste works.",
|
|
151
|
+
},
|
|
152
|
+
];
|
|
153
|
+
export function reportIntegrations() {
|
|
154
|
+
const byKind = {
|
|
155
|
+
"native-mcp": 0, "parasite-bridge": 0, "browser-only": 0, "partial": 0,
|
|
156
|
+
};
|
|
157
|
+
let working = 0, partial = 0, needsPaste = 0;
|
|
158
|
+
for (const i of EDITOR_INTEGRATIONS) {
|
|
159
|
+
byKind[i.integration] += 1;
|
|
160
|
+
if (i.status === "working")
|
|
161
|
+
working += 1;
|
|
162
|
+
else if (i.status === "partial")
|
|
163
|
+
partial += 1;
|
|
164
|
+
else if (i.status === "needs-paste")
|
|
165
|
+
needsPaste += 1;
|
|
166
|
+
}
|
|
167
|
+
const headline = `${EDITOR_INTEGRATIONS.length} AI tools tracked: ${working} working / ${partial} partial / ${needsPaste} browser-only (use PERMEATE userscript or soul-prompt paste).`;
|
|
168
|
+
return { total: EDITOR_INTEGRATIONS.length, working, partial, needsPaste, byKind, headline };
|
|
169
|
+
}
|
|
170
|
+
/** Filter integrations by status or surface. */
|
|
171
|
+
export function filterIntegrations(opts = {}) {
|
|
172
|
+
return EDITOR_INTEGRATIONS.filter((i) => {
|
|
173
|
+
if (opts.status && i.status !== opts.status)
|
|
174
|
+
return false;
|
|
175
|
+
if (opts.surface && i.surface !== opts.surface)
|
|
176
|
+
return false;
|
|
177
|
+
return true;
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=editor_integration_map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor_integration_map.js","sourceRoot":"","sources":["../../src/permeate/editor_integration_map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.74.0 -- PERMEATE PROTOCOL.
|
|
3
|
+
*
|
|
4
|
+
* Reaching every AI tool on Earth via four paths:
|
|
5
|
+
*
|
|
6
|
+
* P1 USERSCRIPT GENERATOR Tampermonkey-ready .user.js for
|
|
7
|
+
* ChatGPT/Gemini/Claude.ai/Copilot/DeepSeek/Qwen
|
|
8
|
+
* NO store approval, NO cloud, NO backend.
|
|
9
|
+
* P2 BOOKMARKLET GENERATOR single-line javascript: URI fallback.
|
|
10
|
+
* Works even if userscript isn't installed.
|
|
11
|
+
* P3 EDITOR INTEGRATION MAP matrix of 15 AI tools + how Mneme
|
|
12
|
+
* connects to each (most via MCP; no work
|
|
13
|
+
* needed for editor-based tools).
|
|
14
|
+
* P4 TRANSPORT MENU 4 ranked cross-machine transfer methods
|
|
15
|
+
* (clipboard / Gist / Wanderer / QR).
|
|
16
|
+
*/
|
|
17
|
+
export * as userscriptGenerator from "./userscript_generator.js";
|
|
18
|
+
export * as bookmarkletGenerator from "./bookmarklet_generator.js";
|
|
19
|
+
export * as editorIntegrationMap from "./editor_integration_map.js";
|
|
20
|
+
export * as transportMenu from "./transport_menu.js";
|
|
21
|
+
export { generateUserscript, type UserscriptOptions, type UserscriptArtifact, } from "./userscript_generator.js";
|
|
22
|
+
export { generateBookmarklet, type BookmarkletOptions, type BookmarkletArtifact, } from "./bookmarklet_generator.js";
|
|
23
|
+
export { EDITOR_INTEGRATIONS, reportIntegrations, filterIntegrations, type EditorIntegration, type IntegrationKind, type IntegrationReport, } from "./editor_integration_map.js";
|
|
24
|
+
export { TRANSPORT_OPTIONS, recommendTransport, type TransportOption, type TransportMethod, type TransportRecommendation, } from "./transport_menu.js";
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/permeate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,oBAAoB,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,GACpE,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,GACvE,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAC3D,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,GACrE,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EAAE,kBAAkB,EACrC,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,uBAAuB,GACzE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.74.0 -- PERMEATE PROTOCOL.
|
|
3
|
+
*
|
|
4
|
+
* Reaching every AI tool on Earth via four paths:
|
|
5
|
+
*
|
|
6
|
+
* P1 USERSCRIPT GENERATOR Tampermonkey-ready .user.js for
|
|
7
|
+
* ChatGPT/Gemini/Claude.ai/Copilot/DeepSeek/Qwen
|
|
8
|
+
* NO store approval, NO cloud, NO backend.
|
|
9
|
+
* P2 BOOKMARKLET GENERATOR single-line javascript: URI fallback.
|
|
10
|
+
* Works even if userscript isn't installed.
|
|
11
|
+
* P3 EDITOR INTEGRATION MAP matrix of 15 AI tools + how Mneme
|
|
12
|
+
* connects to each (most via MCP; no work
|
|
13
|
+
* needed for editor-based tools).
|
|
14
|
+
* P4 TRANSPORT MENU 4 ranked cross-machine transfer methods
|
|
15
|
+
* (clipboard / Gist / Wanderer / QR).
|
|
16
|
+
*/
|
|
17
|
+
export * as userscriptGenerator from "./userscript_generator.js";
|
|
18
|
+
export * as bookmarkletGenerator from "./bookmarklet_generator.js";
|
|
19
|
+
export * as editorIntegrationMap from "./editor_integration_map.js";
|
|
20
|
+
export * as transportMenu from "./transport_menu.js";
|
|
21
|
+
export { generateUserscript, } from "./userscript_generator.js";
|
|
22
|
+
export { generateBookmarklet, } from "./bookmarklet_generator.js";
|
|
23
|
+
export { EDITOR_INTEGRATIONS, reportIntegrations, filterIntegrations, } from "./editor_integration_map.js";
|
|
24
|
+
export { TRANSPORT_OPTIONS, recommendTransport, } from "./transport_menu.js";
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/permeate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,oBAAoB,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,GAE5D,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EAAE,kBAAkB,GAEtC,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permeate.test.d.ts","sourceRoot":"","sources":["../../src/permeate/permeate.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.74.0 -- PERMEATE PROTOCOL test suite.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect } from "vitest";
|
|
5
|
+
import { generateUserscript } from "./userscript_generator.js";
|
|
6
|
+
import { generateBookmarklet } from "./bookmarklet_generator.js";
|
|
7
|
+
import { EDITOR_INTEGRATIONS, reportIntegrations, filterIntegrations } from "./editor_integration_map.js";
|
|
8
|
+
import { TRANSPORT_OPTIONS, recommendTransport } from "./transport_menu.js";
|
|
9
|
+
// โโโ P1 USERSCRIPT GENERATOR โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
10
|
+
describe("v1.74 Permeate P1 ยท Userscript Generator", () => {
|
|
11
|
+
it("produces valid Tampermonkey header + body", () => {
|
|
12
|
+
const a = generateUserscript({ mnemeVersion: "1.74.0" });
|
|
13
|
+
expect(a.content).toContain("// ==UserScript==");
|
|
14
|
+
expect(a.content).toContain("// ==/UserScript==");
|
|
15
|
+
expect(a.content).toContain("@match https://chatgpt.com/*");
|
|
16
|
+
expect(a.content).toContain("@match https://gemini.google.com/*");
|
|
17
|
+
expect(a.content).toContain("@match https://claude.ai/*");
|
|
18
|
+
});
|
|
19
|
+
it("includes all 6 target sites", () => {
|
|
20
|
+
const a = generateUserscript({ mnemeVersion: "1.74.0" });
|
|
21
|
+
expect(a.content).toContain("chatgpt.com");
|
|
22
|
+
expect(a.content).toContain("openai.com");
|
|
23
|
+
expect(a.content).toContain("gemini.google.com");
|
|
24
|
+
expect(a.content).toContain("claude.ai");
|
|
25
|
+
expect(a.content).toContain("copilot.microsoft.com");
|
|
26
|
+
expect(a.content).toContain("deepseek.com");
|
|
27
|
+
});
|
|
28
|
+
it("includes bridge fetch block when bridgeUrl set", () => {
|
|
29
|
+
const a = generateUserscript({ mnemeVersion: "1.74.0", bridgeUrl: "http://127.0.0.1:11434", bridgeToken: "tok" });
|
|
30
|
+
expect(a.content).toContain("BRIDGE_URL");
|
|
31
|
+
expect(a.content).toContain("http://127.0.0.1:11434");
|
|
32
|
+
});
|
|
33
|
+
it("filename follows convention", () => {
|
|
34
|
+
const a = generateUserscript({ mnemeVersion: "1.74.0" });
|
|
35
|
+
expect(a.filename).toMatch(/mneme-soul-injector.*\.user\.js$/);
|
|
36
|
+
});
|
|
37
|
+
it("install note guides user step-by-step", () => {
|
|
38
|
+
const a = generateUserscript({ mnemeVersion: "1.74.0" });
|
|
39
|
+
expect(a.installNote).toContain("Tampermonkey");
|
|
40
|
+
expect(a.installNote).toContain("๐");
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
// โโโ P2 BOOKMARKLET GENERATOR โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
44
|
+
describe("v1.74 Permeate P2 ยท Bookmarklet Generator", () => {
|
|
45
|
+
it("produces a valid javascript: URI", () => {
|
|
46
|
+
const a = generateBookmarklet();
|
|
47
|
+
expect(a.uri.startsWith("javascript:")).toBe(true);
|
|
48
|
+
});
|
|
49
|
+
it("contains the Mneme soul check substring", () => {
|
|
50
|
+
const a = generateBookmarklet();
|
|
51
|
+
expect(decodeURIComponent(a.uri)).toContain("MNEME SOUL PROMPT");
|
|
52
|
+
});
|
|
53
|
+
it("instructions guide setup + injection", () => {
|
|
54
|
+
const a = generateBookmarklet();
|
|
55
|
+
expect(a.instructions.length).toBeGreaterThanOrEqual(5);
|
|
56
|
+
expect(a.instructions.join("\n")).toContain("bookmark");
|
|
57
|
+
});
|
|
58
|
+
it("warning fires when URI exceeds maxChars", () => {
|
|
59
|
+
const a = generateBookmarklet({ maxChars: 50 });
|
|
60
|
+
expect(a.warning).not.toBeNull();
|
|
61
|
+
});
|
|
62
|
+
it("name includes injector emoji", () => {
|
|
63
|
+
const a = generateBookmarklet();
|
|
64
|
+
expect(a.name).toContain("๐");
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
// โโโ P3 EDITOR INTEGRATION MAP โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
68
|
+
describe("v1.74 Permeate P3 ยท Editor Integration Map", () => {
|
|
69
|
+
it("tracks at least 15 AI tools", () => {
|
|
70
|
+
expect(EDITOR_INTEGRATIONS.length).toBeGreaterThanOrEqual(15);
|
|
71
|
+
});
|
|
72
|
+
it("editor-based tools are native-mcp or parasite-bridge (working)", () => {
|
|
73
|
+
const editorTools = EDITOR_INTEGRATIONS.filter((i) => i.surface === "editor-extension" || i.surface === "cli");
|
|
74
|
+
for (const t of editorTools) {
|
|
75
|
+
expect(["native-mcp", "parasite-bridge", "partial"]).toContain(t.integration);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
it("browser-only tools need paste", () => {
|
|
79
|
+
const browserTools = EDITOR_INTEGRATIONS.filter((i) => i.surface === "web");
|
|
80
|
+
expect(browserTools.length).toBeGreaterThanOrEqual(4);
|
|
81
|
+
for (const t of browserTools) {
|
|
82
|
+
expect(t.integration).toBe("browser-only");
|
|
83
|
+
expect(t.status).toBe("needs-paste");
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
it("reportIntegrations summarizes counts", () => {
|
|
87
|
+
const r = reportIntegrations();
|
|
88
|
+
expect(r.total).toBe(EDITOR_INTEGRATIONS.length);
|
|
89
|
+
expect(r.working).toBeGreaterThanOrEqual(5);
|
|
90
|
+
expect(r.headline).toContain("AI tools tracked");
|
|
91
|
+
});
|
|
92
|
+
it("filterIntegrations by status", () => {
|
|
93
|
+
const working = filterIntegrations({ status: "working" });
|
|
94
|
+
expect(working.length).toBeGreaterThanOrEqual(5);
|
|
95
|
+
for (const t of working)
|
|
96
|
+
expect(t.status).toBe("working");
|
|
97
|
+
});
|
|
98
|
+
it("filterIntegrations by surface", () => {
|
|
99
|
+
const cli = filterIntegrations({ surface: "cli" });
|
|
100
|
+
expect(cli.length).toBeGreaterThanOrEqual(2);
|
|
101
|
+
for (const t of cli)
|
|
102
|
+
expect(t.surface).toBe("cli");
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
// โโโ P4 TRANSPORT MENU โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
106
|
+
describe("v1.74 Permeate P4 ยท Transport Menu", () => {
|
|
107
|
+
it("provides 4 transport methods", () => {
|
|
108
|
+
expect(TRANSPORT_OPTIONS.length).toBe(4);
|
|
109
|
+
});
|
|
110
|
+
it("each option has steps + pros + friction", () => {
|
|
111
|
+
for (const opt of TRANSPORT_OPTIONS) {
|
|
112
|
+
expect(opt.steps.length).toBeGreaterThanOrEqual(3);
|
|
113
|
+
expect(opt.pros.length).toBeGreaterThanOrEqual(1);
|
|
114
|
+
expect(opt.friction).toBeGreaterThanOrEqual(1);
|
|
115
|
+
expect(opt.friction).toBeLessThanOrEqual(5);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
it("recommendTransport returns clipboard by default", () => {
|
|
119
|
+
const r = recommendTransport();
|
|
120
|
+
expect(r.recommended).toBe("clipboard-relay");
|
|
121
|
+
});
|
|
122
|
+
it("recommendTransport returns gist with github account", () => {
|
|
123
|
+
const r = recommendTransport({ hasGithubAccount: true });
|
|
124
|
+
expect(r.recommended).toBe("gist");
|
|
125
|
+
});
|
|
126
|
+
it("recommendTransport returns qr for laptop->phone", () => {
|
|
127
|
+
const r = recommendTransport({ laptopToPhone: true });
|
|
128
|
+
expect(r.recommended).toBe("qr-code-svg");
|
|
129
|
+
});
|
|
130
|
+
it("recommendTransport returns wanderer for offline", () => {
|
|
131
|
+
const r = recommendTransport({ preferOffline: true });
|
|
132
|
+
expect(r.recommended).toBe("wanderer-mwt");
|
|
133
|
+
});
|
|
134
|
+
it("rankedOptions sorted by friction ascending", () => {
|
|
135
|
+
const r = recommendTransport();
|
|
136
|
+
for (let i = 1; i < r.rankedOptions.length; i++) {
|
|
137
|
+
expect(r.rankedOptions[i - 1].friction <= r.rankedOptions[i].friction).toBe(true);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=permeate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permeate.test.js","sourceRoot":"","sources":["../../src/permeate/permeate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.74.0 -- PERMEATE P4: CROSS-MACHINE TRANSPORT MENU.
|
|
3
|
+
*
|
|
4
|
+
* Answers the user's question: "How do I move a soul prompt across
|
|
5
|
+
* two computers?" Returns 4 ranked options with concrete steps.
|
|
6
|
+
*/
|
|
7
|
+
export type TransportMethod = "clipboard-relay" | "gist" | "wanderer-mwt" | "qr-code-svg";
|
|
8
|
+
export interface TransportOption {
|
|
9
|
+
method: TransportMethod;
|
|
10
|
+
/** Human-friendly title. */
|
|
11
|
+
title: string;
|
|
12
|
+
/** What this enables. */
|
|
13
|
+
whatItDoes: string;
|
|
14
|
+
/** Step-by-step instructions in plain Thai+English. */
|
|
15
|
+
steps: string[];
|
|
16
|
+
/** Pros + cons. */
|
|
17
|
+
pros: string[];
|
|
18
|
+
/** Friction level 1..5 (1 = effortless). */
|
|
19
|
+
friction: number;
|
|
20
|
+
}
|
|
21
|
+
export declare const TRANSPORT_OPTIONS: TransportOption[];
|
|
22
|
+
export interface TransportRecommendation {
|
|
23
|
+
/** Best fit given the user's situation. */
|
|
24
|
+
recommended: TransportMethod;
|
|
25
|
+
/** Why. */
|
|
26
|
+
rationale: string;
|
|
27
|
+
/** All options ranked by friction. */
|
|
28
|
+
rankedOptions: TransportOption[];
|
|
29
|
+
}
|
|
30
|
+
export declare function recommendTransport(opts?: {
|
|
31
|
+
hasGithubAccount?: boolean;
|
|
32
|
+
preferOffline?: boolean;
|
|
33
|
+
laptopToPhone?: boolean;
|
|
34
|
+
}): TransportRecommendation;
|
|
35
|
+
//# sourceMappingURL=transport_menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport_menu.d.ts","sourceRoot":"","sources":["../../src/permeate/transport_menu.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,MAAM,GAAG,cAAc,GAAG,aAAa,CAAC;AAE1F,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,mBAAmB;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,EAAE,eAAe,EA4D9C,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,2CAA2C;IAC3C,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,aAAa,EAAE,eAAe,EAAE,CAAC;CAClC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,uBAAuB,CA2B/B"}
|