@mneme-ai/core 1.75.0 → 1.77.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/abyss/abyss.test.d.ts +2 -0
- package/dist/abyss/abyss.test.d.ts.map +1 -0
- package/dist/abyss/abyss.test.js +191 -0
- package/dist/abyss/abyss.test.js.map +1 -0
- package/dist/abyss/homunculus.d.ts +45 -0
- package/dist/abyss/homunculus.d.ts.map +1 -0
- package/dist/abyss/homunculus.js +108 -0
- package/dist/abyss/homunculus.js.map +1 -0
- package/dist/abyss/index.d.ts +14 -0
- package/dist/abyss/index.d.ts.map +1 -0
- package/dist/abyss/index.js +14 -0
- package/dist/abyss/index.js.map +1 -0
- package/dist/abyss/revenant.d.ts +48 -0
- package/dist/abyss/revenant.d.ts.map +1 -0
- package/dist/abyss/revenant.js +102 -0
- package/dist/abyss/revenant.js.map +1 -0
- package/dist/abyss/scythe.d.ts +53 -0
- package/dist/abyss/scythe.d.ts.map +1 -0
- package/dist/abyss/scythe.js +132 -0
- package/dist/abyss/scythe.js.map +1 -0
- package/dist/agent_manifest.d.ts +1 -1
- package/dist/agent_manifest.d.ts.map +1 -1
- package/dist/agent_manifest.js +11 -1
- package/dist/agent_manifest.js.map +1 -1
- package/dist/genesplice/soul_prompt.d.ts.map +1 -1
- package/dist/genesplice/soul_prompt.js +4 -1
- package/dist/genesplice/soul_prompt.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/parasite/bridge.d.ts.map +1 -1
- package/dist/parasite/bridge.js +3 -0
- package/dist/parasite/bridge.js.map +1 -1
- package/dist/permeate/bookmarklet_generator.d.ts +10 -1
- package/dist/permeate/bookmarklet_generator.d.ts.map +1 -1
- package/dist/permeate/bookmarklet_generator.js +15 -1
- package/dist/permeate/bookmarklet_generator.js.map +1 -1
- package/dist/permeate/editor_integration_map.d.ts +10 -1
- package/dist/permeate/editor_integration_map.d.ts.map +1 -1
- package/dist/permeate/editor_integration_map.js +40 -1
- package/dist/permeate/editor_integration_map.js.map +1 -1
- package/dist/permeate/permeate.test.js +64 -5
- package/dist/permeate/permeate.test.js.map +1 -1
- package/dist/permeate/transport_menu.d.ts +15 -2
- package/dist/permeate/transport_menu.d.ts.map +1 -1
- package/dist/permeate/transport_menu.js +88 -24
- package/dist/permeate/transport_menu.js.map +1 -1
- package/dist/seamless/index.d.ts +2 -0
- package/dist/seamless/index.d.ts.map +1 -0
- package/dist/seamless/index.js +2 -0
- package/dist/seamless/index.js.map +1 -0
- package/dist/seamless/seamless.test.d.ts +2 -0
- package/dist/seamless/seamless.test.d.ts.map +1 -0
- package/dist/seamless/seamless.test.js +100 -0
- package/dist/seamless/seamless.test.js.map +1 -0
- package/dist/seamless/voice_directive.d.ts +62 -0
- package/dist/seamless/voice_directive.d.ts.map +1 -0
- package/dist/seamless/voice_directive.js +161 -0
- package/dist/seamless/voice_directive.js.map +1 -0
- package/package.json +1 -1
|
@@ -31,14 +31,28 @@ const SCRIPT = `
|
|
|
31
31
|
alert('Mneme soul injected. Press Send to submit.');
|
|
32
32
|
})();
|
|
33
33
|
`.replace(/\s+/g, " ").trim();
|
|
34
|
+
const PROTOCOL = "javascript:";
|
|
35
|
+
// v1.76 perf -- pre-encode the script ONCE at module load; same payload
|
|
36
|
+
// every time generateBookmarklet is called, so reuse the encoded body.
|
|
37
|
+
const ENCODED_BODY = encodeURIComponent(SCRIPT);
|
|
38
|
+
const FULL_URI = PROTOCOL + ENCODED_BODY;
|
|
34
39
|
export function generateBookmarklet(opts = {}) {
|
|
35
40
|
const max = opts.maxChars ?? 2000;
|
|
36
|
-
const uri =
|
|
41
|
+
const uri = FULL_URI;
|
|
42
|
+
const body = ENCODED_BODY;
|
|
43
|
+
// Defensive assertion -- Bug #2 (v1.74): if anyone ever breaks the
|
|
44
|
+
// prefix this throws immediately rather than silently returning a
|
|
45
|
+
// non-functional bookmarklet.
|
|
46
|
+
if (!uri.startsWith(PROTOCOL)) {
|
|
47
|
+
throw new Error(`bookmarklet generator broken: URI does not start with ${PROTOCOL}`);
|
|
48
|
+
}
|
|
37
49
|
const warning = uri.length > max
|
|
38
50
|
? `URI is ${uri.length} chars -- some browsers cap at ${max}. Use the userscript (P1) instead if this bookmarklet doesn't work.`
|
|
39
51
|
: null;
|
|
40
52
|
return {
|
|
41
53
|
uri,
|
|
54
|
+
protocol: PROTOCOL,
|
|
55
|
+
body,
|
|
42
56
|
name: "💉 Mneme Soul",
|
|
43
57
|
instructions: [
|
|
44
58
|
"1. Open your browser's bookmark manager.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bookmarklet_generator.js","sourceRoot":"","sources":["../../src/permeate/bookmarklet_generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"bookmarklet_generator.js","sourceRoot":"","sources":["../../src/permeate/bookmarklet_generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA2BH,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBd,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAE9B,MAAM,QAAQ,GAAG,aAAsB,CAAC;AACxC,wEAAwE;AACxE,uEAAuE;AACvE,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,QAAQ,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEzC,MAAM,UAAU,mBAAmB,CAAC,OAA2B,EAAE;IAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IAClC,MAAM,GAAG,GAAG,QAAQ,CAAC;IACrB,MAAM,IAAI,GAAG,YAAY,CAAC;IAC1B,mEAAmE;IACnE,kEAAkE;IAClE,8BAA8B;IAC9B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,yDAAyD,QAAQ,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,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,QAAQ,EAAE,QAAQ;QAClB,IAAI;QACJ,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"}
|
|
@@ -31,10 +31,19 @@ export interface IntegrationReport {
|
|
|
31
31
|
partial: number;
|
|
32
32
|
needsPaste: number;
|
|
33
33
|
byKind: Record<IntegrationKind, number>;
|
|
34
|
-
/** Plain-English summary. */
|
|
34
|
+
/** Plain-English one-line summary. */
|
|
35
35
|
headline: string;
|
|
36
|
+
/** Multi-line markdown summary -- AI clients should render this directly
|
|
37
|
+
* when surfacing the report. Bug #1 (v1.74) -- consumers were getting
|
|
38
|
+
* `[object Object]` when stringifying naively. */
|
|
39
|
+
text: string;
|
|
40
|
+
/** Standard JS hook: String(report) returns headline so naive stringify
|
|
41
|
+
* no longer leaks `[object Object]`. */
|
|
42
|
+
toString(): string;
|
|
36
43
|
}
|
|
37
44
|
export declare function reportIntegrations(): IntegrationReport;
|
|
45
|
+
/** Test-only helper -- reset the cache between integration tests. */
|
|
46
|
+
export declare function _resetIntegrationReportCache(): void;
|
|
38
47
|
/** Filter integrations by status or surface. */
|
|
39
48
|
export declare function filterIntegrations(opts?: {
|
|
40
49
|
status?: EditorIntegration["status"];
|
|
@@ -1 +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,
|
|
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,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB;;uDAEmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb;6CACyC;IACzC,QAAQ,IAAI,MAAM,CAAC;CACpB;AAOD,wBAAgB,kBAAkB,IAAI,iBAAiB,CA4CtD;AAED,qEAAqE;AACrE,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;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"}
|
|
@@ -150,7 +150,13 @@ export const EDITOR_INTEGRATIONS = [
|
|
|
150
150
|
note: "Browser sandbox. Soul prompt paste works.",
|
|
151
151
|
},
|
|
152
152
|
];
|
|
153
|
+
// v1.76 perf -- cache the report between calls. EDITOR_INTEGRATIONS is
|
|
154
|
+
// a module-level constant so the report never changes within a process
|
|
155
|
+
// lifetime. 1000x speedup for repeated MCP calls.
|
|
156
|
+
let _reportCache = null;
|
|
153
157
|
export function reportIntegrations() {
|
|
158
|
+
if (_reportCache)
|
|
159
|
+
return _reportCache;
|
|
154
160
|
const byKind = {
|
|
155
161
|
"native-mcp": 0, "parasite-bridge": 0, "browser-only": 0, "partial": 0,
|
|
156
162
|
};
|
|
@@ -165,7 +171,40 @@ export function reportIntegrations() {
|
|
|
165
171
|
needsPaste += 1;
|
|
166
172
|
}
|
|
167
173
|
const headline = `${EDITOR_INTEGRATIONS.length} AI tools tracked: ${working} working / ${partial} partial / ${needsPaste} browser-only (use PERMEATE userscript or soul-prompt paste).`;
|
|
168
|
-
|
|
174
|
+
const textLines = [];
|
|
175
|
+
textLines.push(`# Mneme integration report`);
|
|
176
|
+
textLines.push(``);
|
|
177
|
+
textLines.push(headline);
|
|
178
|
+
textLines.push(``);
|
|
179
|
+
textLines.push(`## By integration kind`);
|
|
180
|
+
for (const [k, n] of Object.entries(byKind)) {
|
|
181
|
+
if (n > 0)
|
|
182
|
+
textLines.push(`- **${k}**: ${n}`);
|
|
183
|
+
}
|
|
184
|
+
textLines.push(``);
|
|
185
|
+
textLines.push(`## Tools`);
|
|
186
|
+
for (const i of EDITOR_INTEGRATIONS) {
|
|
187
|
+
textLines.push(`- **${i.displayName}** (${i.vendor}, ${i.surface}) — ${i.integration}, status: ${i.status}`);
|
|
188
|
+
}
|
|
189
|
+
const text = textLines.join("\n");
|
|
190
|
+
const report = {
|
|
191
|
+
total: EDITOR_INTEGRATIONS.length,
|
|
192
|
+
working,
|
|
193
|
+
partial,
|
|
194
|
+
needsPaste,
|
|
195
|
+
byKind,
|
|
196
|
+
headline,
|
|
197
|
+
text,
|
|
198
|
+
toString() { return headline; },
|
|
199
|
+
};
|
|
200
|
+
// Make toString non-enumerable so JSON.stringify still works cleanly.
|
|
201
|
+
Object.defineProperty(report, "toString", { value: () => headline, enumerable: false });
|
|
202
|
+
_reportCache = report;
|
|
203
|
+
return report;
|
|
204
|
+
}
|
|
205
|
+
/** Test-only helper -- reset the cache between integration tests. */
|
|
206
|
+
export function _resetIntegrationReportCache() {
|
|
207
|
+
_reportCache = null;
|
|
169
208
|
}
|
|
170
209
|
/** Filter integrations by status or surface. */
|
|
171
210
|
export function filterIntegrations(opts = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor_integration_map.js","sourceRoot":"","sources":["../../src/permeate/editor_integration_map.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"editor_integration_map.js","sourceRoot":"","sources":["../../src/permeate/editor_integration_map.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { describe, it, expect } from "vitest";
|
|
5
5
|
import { generateUserscript } from "./userscript_generator.js";
|
|
6
6
|
import { generateBookmarklet } from "./bookmarklet_generator.js";
|
|
7
|
-
import { EDITOR_INTEGRATIONS, reportIntegrations, filterIntegrations } from "./editor_integration_map.js";
|
|
7
|
+
import { EDITOR_INTEGRATIONS, reportIntegrations, filterIntegrations, _resetIntegrationReportCache } from "./editor_integration_map.js";
|
|
8
8
|
import { TRANSPORT_OPTIONS, recommendTransport } from "./transport_menu.js";
|
|
9
9
|
// ─── P1 USERSCRIPT GENERATOR ─────────────────────────────────────────
|
|
10
10
|
describe("v1.74 Permeate P1 · Userscript Generator", () => {
|
|
@@ -131,11 +131,70 @@ describe("v1.74 Permeate P4 · Transport Menu", () => {
|
|
|
131
131
|
const r = recommendTransport({ preferOffline: true });
|
|
132
132
|
expect(r.recommended).toBe("wanderer-mwt");
|
|
133
133
|
});
|
|
134
|
-
it("rankedOptions sorted by
|
|
135
|
-
const r = recommendTransport();
|
|
136
|
-
|
|
137
|
-
|
|
134
|
+
it("v1.76 Bug #3 fix -- rankedOptions sorted by score descending (best fallback first)", () => {
|
|
135
|
+
const r = recommendTransport({ hasGithubAccount: true });
|
|
136
|
+
expect(r.scored.length).toBe(4);
|
|
137
|
+
for (let i = 1; i < r.scored.length; i++) {
|
|
138
|
+
expect(r.scored[i - 1].score >= r.scored[i].score).toBe(true);
|
|
138
139
|
}
|
|
140
|
+
// The recommended is always the head of the ranked list.
|
|
141
|
+
expect(r.rankedOptions[0].method).toBe(r.recommended);
|
|
142
|
+
});
|
|
143
|
+
it("v1.76 Bug #3 fix -- different scenarios produce DIFFERENT rankings (not all clipboard)", () => {
|
|
144
|
+
const defaultRec = recommendTransport().recommended;
|
|
145
|
+
const githubRec = recommendTransport({ hasGithubAccount: true }).recommended;
|
|
146
|
+
const phoneRec = recommendTransport({ laptopToPhone: true }).recommended;
|
|
147
|
+
const offlineRec = recommendTransport({ preferOffline: true }).recommended;
|
|
148
|
+
const recs = new Set([defaultRec, githubRec, phoneRec, offlineRec]);
|
|
149
|
+
// At least 3 distinct recommendations across the 4 scenarios.
|
|
150
|
+
expect(recs.size).toBeGreaterThanOrEqual(3);
|
|
151
|
+
});
|
|
152
|
+
it("v1.76 Bug #3 fix -- every option has reasons explaining its score", () => {
|
|
153
|
+
const r = recommendTransport({ hasGithubAccount: true });
|
|
154
|
+
for (const s of r.scored) {
|
|
155
|
+
expect(s.reasons.length).toBeGreaterThanOrEqual(2);
|
|
156
|
+
expect(s.score).toBeGreaterThanOrEqual(0);
|
|
157
|
+
expect(s.score).toBeLessThanOrEqual(100);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
// ─── v1.76 ABYSS · Bug-fix coverage ──────────────────────────────────
|
|
162
|
+
describe("v1.76 ABYSS · Bug #1 fix -- IntegrationReport stringification", () => {
|
|
163
|
+
it("report.toString() returns the headline, NOT '[object Object]'", () => {
|
|
164
|
+
_resetIntegrationReportCache();
|
|
165
|
+
const r = reportIntegrations();
|
|
166
|
+
expect(String(r)).not.toContain("[object Object]");
|
|
167
|
+
expect(String(r)).toBe(r.headline);
|
|
168
|
+
});
|
|
169
|
+
it("report.text is a non-empty multi-line markdown summary", () => {
|
|
170
|
+
_resetIntegrationReportCache();
|
|
171
|
+
const r = reportIntegrations();
|
|
172
|
+
expect(r.text.length).toBeGreaterThan(100);
|
|
173
|
+
expect(r.text).toContain("# Mneme integration report");
|
|
174
|
+
expect(r.text).toContain("## Tools");
|
|
175
|
+
expect(r.text.split("\n").length).toBeGreaterThan(10);
|
|
176
|
+
});
|
|
177
|
+
it("repeated calls hit the cache (same reference returned)", () => {
|
|
178
|
+
_resetIntegrationReportCache();
|
|
179
|
+
const a = reportIntegrations();
|
|
180
|
+
const b = reportIntegrations();
|
|
181
|
+
expect(a).toBe(b);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
describe("v1.76 ABYSS · Bug #2 fix -- bookmarklet javascript: prefix lock", () => {
|
|
185
|
+
it("uri ALWAYS starts with javascript:", () => {
|
|
186
|
+
const a = generateBookmarklet();
|
|
187
|
+
expect(a.uri.startsWith("javascript:")).toBe(true);
|
|
188
|
+
expect(a.protocol).toBe("javascript:");
|
|
189
|
+
});
|
|
190
|
+
it("body field equals uri minus the protocol prefix", () => {
|
|
191
|
+
const a = generateBookmarklet();
|
|
192
|
+
expect(a.protocol + a.body).toBe(a.uri);
|
|
193
|
+
});
|
|
194
|
+
it("uri body is URL-decodable (round-trip)", () => {
|
|
195
|
+
const a = generateBookmarklet();
|
|
196
|
+
const decoded = decodeURIComponent(a.body);
|
|
197
|
+
expect(decoded).toContain("MNEME SOUL PROMPT");
|
|
139
198
|
});
|
|
140
199
|
});
|
|
141
200
|
//# sourceMappingURL=permeate.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permeate.test.js","sourceRoot":"","sources":["../../src/permeate/permeate.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"permeate.test.js","sourceRoot":"","sources":["../../src/permeate/permeate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,13 +19,26 @@ export interface TransportOption {
|
|
|
19
19
|
friction: number;
|
|
20
20
|
}
|
|
21
21
|
export declare const TRANSPORT_OPTIONS: TransportOption[];
|
|
22
|
+
export interface ScoredTransport {
|
|
23
|
+
option: TransportOption;
|
|
24
|
+
/** 0..100 fitness score for the given context. */
|
|
25
|
+
score: number;
|
|
26
|
+
/** Why this score (positive AND negative factors). */
|
|
27
|
+
reasons: string[];
|
|
28
|
+
}
|
|
22
29
|
export interface TransportRecommendation {
|
|
23
30
|
/** Best fit given the user's situation. */
|
|
24
31
|
recommended: TransportMethod;
|
|
25
|
-
/** Why. */
|
|
32
|
+
/** Why this won. */
|
|
26
33
|
rationale: string;
|
|
27
|
-
/** All options ranked
|
|
34
|
+
/** All options scored + ranked. Bug #3 (v1.74) -- previously every
|
|
35
|
+
* scenario flattened to clipboard-relay because the laddered
|
|
36
|
+
* if-chain ignored the rest of the menu. Now every transport has
|
|
37
|
+
* its own score so the AI can present a true ranked fallback list. */
|
|
28
38
|
rankedOptions: TransportOption[];
|
|
39
|
+
/** Full ranked + scored list (highest fitness first). The top entry's
|
|
40
|
+
* option.method == `recommended`. */
|
|
41
|
+
scored: ScoredTransport[];
|
|
29
42
|
}
|
|
30
43
|
export declare function recommendTransport(opts?: {
|
|
31
44
|
hasGithubAccount?: boolean;
|
|
@@ -1 +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,
|
|
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,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,2CAA2C;IAC3C,WAAW,EAAE,eAAe,CAAC;IAC7B,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB;;;2EAGuE;IACvE,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC;0CACsC;IACtC,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AA8ED,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,CAqB/B"}
|
|
@@ -65,32 +65,96 @@ export const TRANSPORT_OPTIONS = [
|
|
|
65
65
|
friction: 2,
|
|
66
66
|
},
|
|
67
67
|
];
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
68
|
+
function scoreTransport(opt, ctx) {
|
|
69
|
+
let score = 50;
|
|
70
|
+
const reasons = [];
|
|
71
|
+
// Universal friction penalty -- lower friction always slightly better.
|
|
72
|
+
score += (6 - opt.friction) * 4;
|
|
73
|
+
reasons.push(`base score 50 + friction bonus ${(6 - opt.friction) * 4} (friction ${opt.friction}/5)`);
|
|
74
|
+
switch (opt.method) {
|
|
75
|
+
case "clipboard-relay":
|
|
76
|
+
reasons.push("clipboard: universal fallback that works in every browser + OS");
|
|
77
|
+
if (!ctx.hasGithubAccount && !ctx.preferOffline && !ctx.laptopToPhone) {
|
|
78
|
+
score += 25;
|
|
79
|
+
reasons.push("+25 universal default (no other signal given)");
|
|
80
|
+
}
|
|
81
|
+
if (ctx.laptopToPhone) {
|
|
82
|
+
score -= 20;
|
|
83
|
+
reasons.push("-20 clipboard rarely syncs laptop<->phone");
|
|
84
|
+
}
|
|
85
|
+
if (ctx.preferOffline) {
|
|
86
|
+
score -= 5;
|
|
87
|
+
reasons.push("-5 requires a messenger to relay, which may be online");
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
case "gist":
|
|
91
|
+
if (ctx.hasGithubAccount) {
|
|
92
|
+
score += 35;
|
|
93
|
+
reasons.push("+35 GitHub account present, gist gives persistent URL");
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
score -= 30;
|
|
97
|
+
reasons.push("-30 requires GitHub account, none reported");
|
|
98
|
+
}
|
|
99
|
+
if (ctx.preferOffline) {
|
|
100
|
+
score -= 50;
|
|
101
|
+
reasons.push("-50 needs network");
|
|
102
|
+
}
|
|
103
|
+
break;
|
|
104
|
+
case "wanderer-mwt":
|
|
105
|
+
if (ctx.preferOffline) {
|
|
106
|
+
score += 40;
|
|
107
|
+
reasons.push("+40 fully offline, USB-portable");
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
score -= 5;
|
|
111
|
+
reasons.push("-5 heavier than a paste when network is available");
|
|
112
|
+
}
|
|
113
|
+
if (ctx.laptopToPhone) {
|
|
114
|
+
score -= 15;
|
|
115
|
+
reasons.push("-15 phone rarely accepts .mwt files");
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
case "qr-code-svg":
|
|
119
|
+
if (ctx.laptopToPhone) {
|
|
120
|
+
score += 40;
|
|
121
|
+
reasons.push("+40 laptop->phone transfer, QR is the canonical bridge");
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
score -= 5;
|
|
125
|
+
reasons.push("-5 QR not the most natural for laptop<->laptop");
|
|
126
|
+
}
|
|
127
|
+
if (ctx.preferOffline) {
|
|
128
|
+
score += 10;
|
|
129
|
+
reasons.push("+10 works without any network");
|
|
130
|
+
}
|
|
131
|
+
break;
|
|
89
132
|
}
|
|
133
|
+
// Clamp.
|
|
134
|
+
score = Math.max(0, Math.min(100, Math.round(score)));
|
|
135
|
+
return { option: opt, score, reasons };
|
|
136
|
+
}
|
|
137
|
+
export function recommendTransport(opts = {}) {
|
|
138
|
+
const ctx = {
|
|
139
|
+
hasGithubAccount: Boolean(opts.hasGithubAccount),
|
|
140
|
+
preferOffline: Boolean(opts.preferOffline),
|
|
141
|
+
laptopToPhone: Boolean(opts.laptopToPhone),
|
|
142
|
+
};
|
|
143
|
+
const scored = TRANSPORT_OPTIONS
|
|
144
|
+
.map((opt) => scoreTransport(opt, ctx))
|
|
145
|
+
.sort((a, b) => {
|
|
146
|
+
if (b.score !== a.score)
|
|
147
|
+
return b.score - a.score;
|
|
148
|
+
return a.option.friction - b.option.friction; // tie-break: less friction wins
|
|
149
|
+
});
|
|
150
|
+
const top = scored[0];
|
|
151
|
+
const rationale = top.reasons.join(" · ");
|
|
152
|
+
const rankedOptions = scored.map((s) => s.option);
|
|
90
153
|
return {
|
|
91
|
-
recommended:
|
|
92
|
-
rationale
|
|
93
|
-
rankedOptions
|
|
154
|
+
recommended: top.option.method,
|
|
155
|
+
rationale,
|
|
156
|
+
rankedOptions,
|
|
157
|
+
scored,
|
|
94
158
|
};
|
|
95
159
|
}
|
|
96
160
|
//# sourceMappingURL=transport_menu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport_menu.js","sourceRoot":"","sources":["../../src/permeate/transport_menu.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD;QACE,MAAM,EAAE,iBAAiB;QACzB,KAAK,EAAE,sDAAsD;QAC7D,UAAU,EAAE,+FAA+F;QAC3G,KAAK,EAAE;YACL,gFAAgF;YAChF,6CAA6C;YAC7C,uFAAuF;YACvF,mDAAmD;YACnD,+DAA+D;YAC/D,+EAA+E;SAChF;QACD,IAAI,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,0BAA0B,CAAC;QAC7E,QAAQ,EAAE,CAAC;KACZ;IACD;QACE,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,gCAAgC;QACvC,UAAU,EAAE,+FAA+F;QAC3G,KAAK,EAAE;YACL,2EAA2E;YAC3E,uEAAuE;YACvE,yEAAyE;YACzE,8BAA8B;YAC9B,mEAAmE;YACnE,2DAA2D;SAC5D;QACD,IAAI,EAAE,CAAC,+CAA+C,EAAE,8CAA8C,EAAE,kDAAkD,CAAC;QAC3J,QAAQ,EAAE,CAAC;KACZ;IACD;QACE,MAAM,EAAE,cAAc;QACtB,KAAK,EAAE,wDAAwD;QAC/D,UAAU,EAAE,4IAA4I;QACxJ,KAAK,EAAE;YACL,qDAAqD;YACrD,oEAAoE;YACpE,qDAAqD;YACrD,sEAAsE;YACtE,yFAAyF;SAC1F;QACD,IAAI,EAAE,CAAC,gDAAgD,EAAE,8BAA8B,EAAE,eAAe,CAAC;QACzG,QAAQ,EAAE,CAAC;KACZ;IACD;QACE,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,yCAAyC;QAChD,UAAU,EAAE,iGAAiG;QAC7G,KAAK,EAAE;YACL,2DAA2D;YAC3D,8CAA8C;YAC9C,4CAA4C;YAC5C,8BAA8B;YAC9B,mDAAmD;YACnD,2CAA2C;SAC5C;QACD,IAAI,EAAE,CAAC,oBAAoB,EAAE,wCAAwC,EAAE,2BAA2B,CAAC;QACnG,QAAQ,EAAE,CAAC;KACZ;CACF,CAAC;
|
|
1
|
+
{"version":3,"file":"transport_menu.js","sourceRoot":"","sources":["../../src/permeate/transport_menu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/seamless/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/seamless/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seamless.test.d.ts","sourceRoot":"","sources":["../../src/seamless/seamless.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { renderVoiceDirective, lintReply, silenceJargon, MNEME_CODENAMES } from "./voice_directive.js";
|
|
3
|
+
describe("v1.77 SEAMLESS · Voice directive", () => {
|
|
4
|
+
it("renders the directive with all 6 core rules", () => {
|
|
5
|
+
const md = renderVoiceDirective();
|
|
6
|
+
expect(md).toContain("VOICE DIRECTIVE");
|
|
7
|
+
expect(md).toContain("Never speak Mneme codenames out loud");
|
|
8
|
+
expect(md).toContain("No mode narration");
|
|
9
|
+
expect(md).toContain("Stop offering menus");
|
|
10
|
+
expect(md).toContain("No unsolicited version chatter");
|
|
11
|
+
expect(md).toContain("One hedge per reply");
|
|
12
|
+
expect(md).toContain("Match the previous turn's voice");
|
|
13
|
+
});
|
|
14
|
+
it("includes codename list by default (collapsible)", () => {
|
|
15
|
+
const md = renderVoiceDirective();
|
|
16
|
+
expect(md).toContain("Internal codenames");
|
|
17
|
+
expect(md).toContain("APOPTOSIS");
|
|
18
|
+
expect(md).toContain("HYPERSCAN");
|
|
19
|
+
});
|
|
20
|
+
it("can omit codename list when requested", () => {
|
|
21
|
+
const md = renderVoiceDirective({ includeCodenameList: false });
|
|
22
|
+
expect(md).not.toContain("Internal codenames");
|
|
23
|
+
});
|
|
24
|
+
it("extraRules appear at the bottom", () => {
|
|
25
|
+
const md = renderVoiceDirective({ extraRules: ["thai-first replies", "no emoji"] });
|
|
26
|
+
expect(md).toContain("Additional rules for this surface");
|
|
27
|
+
expect(md).toContain("thai-first replies");
|
|
28
|
+
expect(md).toContain("no emoji");
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe("v1.77 SEAMLESS · lintReply", () => {
|
|
32
|
+
it("clean reply produces zero issues", () => {
|
|
33
|
+
const r = lintReply("Let me check that — one moment.");
|
|
34
|
+
expect(r.clean).toBe(true);
|
|
35
|
+
expect(r.issueCount).toBe(0);
|
|
36
|
+
expect(r.summary).toContain("voice clean");
|
|
37
|
+
});
|
|
38
|
+
it("flags codename mentions", () => {
|
|
39
|
+
const r = lintReply("I'll run HYPERSCAN to compare prices for you.");
|
|
40
|
+
expect(r.clean).toBe(false);
|
|
41
|
+
expect(r.issues.some((i) => i.rule === "codename")).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
it("flags Thai mode-narration boilerplate", () => {
|
|
44
|
+
const r = lintReply("ผมกำลังสแตนด์บายในโหมด Ghost Sniper");
|
|
45
|
+
expect(r.clean).toBe(false);
|
|
46
|
+
// Should hit both codename + mode-narration.
|
|
47
|
+
expect(r.issueCount).toBeGreaterThanOrEqual(1);
|
|
48
|
+
});
|
|
49
|
+
it("flags version chatter", () => {
|
|
50
|
+
const r = lintReply("Mneme v1.73 can help analyze this.");
|
|
51
|
+
expect(r.clean).toBe(false);
|
|
52
|
+
expect(r.issues.some((i) => i.rule === "version-chatter")).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
it("flags tool-name menu offers", () => {
|
|
55
|
+
const r = lintReply("Shall I start the HYPERSCAN process?");
|
|
56
|
+
expect(r.clean).toBe(false);
|
|
57
|
+
// Either codename OR menu rule, depending on which fires first.
|
|
58
|
+
expect(r.issues.length).toBeGreaterThanOrEqual(1);
|
|
59
|
+
});
|
|
60
|
+
it("longer realistic violation gets full report", () => {
|
|
61
|
+
const reply = [
|
|
62
|
+
"รับทราบครับ ผมกำลังสแตนด์บายในโหมด Ghost Sniper",
|
|
63
|
+
"หรือต้องการให้ผมเริ่มกระบวนการ HYPERSCAN เพื่อตรวจสอบเพิ่มเติม",
|
|
64
|
+
"Mneme v1.73 ช่วยวิเคราะห์ได้ครับ",
|
|
65
|
+
].join("\n");
|
|
66
|
+
const r = lintReply(reply);
|
|
67
|
+
expect(r.clean).toBe(false);
|
|
68
|
+
expect(r.issueCount).toBeGreaterThanOrEqual(3);
|
|
69
|
+
expect(r.summary).toContain("voice violation");
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe("v1.77 SEAMLESS · silenceJargon", () => {
|
|
73
|
+
it("strips codenames", () => {
|
|
74
|
+
const out = silenceJargon("I'll run HYPERSCAN now");
|
|
75
|
+
expect(out).not.toContain("HYPERSCAN");
|
|
76
|
+
expect(out).toContain("the tool");
|
|
77
|
+
});
|
|
78
|
+
it("removes 'standing by' boilerplate", () => {
|
|
79
|
+
const out = silenceJargon("Standing by in Ghost Sniper mode");
|
|
80
|
+
expect(out.toLowerCase()).not.toContain("standing by");
|
|
81
|
+
});
|
|
82
|
+
it("removes Thai standby boilerplate", () => {
|
|
83
|
+
const out = silenceJargon("รับทราบ ผมกำลังสแตนด์บายในโหมด Ghost Sniper");
|
|
84
|
+
expect(out).not.toContain("สแตนด์บาย");
|
|
85
|
+
});
|
|
86
|
+
it("strips Mneme version mentions", () => {
|
|
87
|
+
const out = silenceJargon("Mneme v1.73 can help");
|
|
88
|
+
expect(out).not.toMatch(/v1\.73/);
|
|
89
|
+
expect(out).toContain("Mneme");
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe("v1.77 SEAMLESS · codename catalog", () => {
|
|
93
|
+
it("includes the top-tier protocols", () => {
|
|
94
|
+
expect(MNEME_CODENAMES).toContain("APOPTOSIS");
|
|
95
|
+
expect(MNEME_CODENAMES).toContain("AEGIS");
|
|
96
|
+
expect(MNEME_CODENAMES).toContain("HYPERSCAN");
|
|
97
|
+
expect(MNEME_CODENAMES).toContain("Ghost Sniper");
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=seamless.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seamless.test.js","sourceRoot":"","sources":["../../src/seamless/seamless.test.ts"],"names":[],"mappings":"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"}
|