memax-cli 0.1.2-alpha.1967 → 0.1.2-alpha.1976
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/dist/commands/agent-configs.test.d.ts +0 -2
- package/dist/commands/agent-configs.test.d.ts.map +0 -1
- package/dist/commands/agent-configs.test.js +0 -122
- package/dist/commands/agent-configs.test.js.map +0 -1
- package/dist/commands/agent-sessions.test.d.ts +0 -2
- package/dist/commands/agent-sessions.test.d.ts.map +0 -1
- package/dist/commands/agent-sessions.test.js +0 -255
- package/dist/commands/agent-sessions.test.js.map +0 -1
- package/dist/commands/dreams.test.d.ts +0 -2
- package/dist/commands/dreams.test.d.ts.map +0 -1
- package/dist/commands/dreams.test.js +0 -39
- package/dist/commands/dreams.test.js.map +0 -1
- package/dist/commands/hub.test.d.ts +0 -2
- package/dist/commands/hub.test.d.ts.map +0 -1
- package/dist/commands/hub.test.js +0 -62
- package/dist/commands/hub.test.js.map +0 -1
- package/dist/commands/import.test.d.ts +0 -2
- package/dist/commands/import.test.d.ts.map +0 -1
- package/dist/commands/import.test.js +0 -11
- package/dist/commands/import.test.js.map +0 -1
- package/dist/commands/list.test.d.ts +0 -2
- package/dist/commands/list.test.d.ts.map +0 -1
- package/dist/commands/list.test.js +0 -20
- package/dist/commands/list.test.js.map +0 -1
- package/dist/commands/recall.test.d.ts +0 -2
- package/dist/commands/recall.test.d.ts.map +0 -1
- package/dist/commands/recall.test.js +0 -31
- package/dist/commands/recall.test.js.map +0 -1
- package/dist/commands/topic.test.d.ts +0 -2
- package/dist/commands/topic.test.d.ts.map +0 -1
- package/dist/commands/topic.test.js +0 -114
- package/dist/commands/topic.test.js.map +0 -1
- package/dist/lib/client.test.d.ts +0 -2
- package/dist/lib/client.test.d.ts.map +0 -1
- package/dist/lib/client.test.js +0 -44
- package/dist/lib/client.test.js.map +0 -1
- package/dist/lib/hubs.test.d.ts +0 -2
- package/dist/lib/hubs.test.d.ts.map +0 -1
- package/dist/lib/hubs.test.js +0 -58
- package/dist/lib/hubs.test.js.map +0 -1
- package/dist/lib/project-context.test.d.ts +0 -2
- package/dist/lib/project-context.test.d.ts.map +0 -1
- package/dist/lib/project-context.test.js +0 -75
- package/dist/lib/project-context.test.js.map +0 -1
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.1.2-alpha.
|
|
6
|
+
"version": "0.1.2-alpha.1976",
|
|
7
7
|
"description": "CLI for Memax — universal context & memory hub for AI agents",
|
|
8
8
|
"homepage": "https://memax.app",
|
|
9
9
|
"repository": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
29
29
|
"chalk": "^5.4.0",
|
|
30
30
|
"commander": "^13.0.0",
|
|
31
|
-
"memax-sdk": "^0.4.1-alpha.
|
|
31
|
+
"memax-sdk": "^0.4.1-alpha.1976"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/node": "^25.5.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-configs.test.d.ts","sourceRoot":"","sources":["../../src/commands/agent-configs.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
2
|
-
import { describe, expect, it } from "vitest";
|
|
3
|
-
import { classifyAgentConfigPlacement, resolveAgentConfigWritePath, } from "./agent-configs.js";
|
|
4
|
-
describe("resolveAgentConfigWritePath", () => {
|
|
5
|
-
const cwd = "/workspaces/memax";
|
|
6
|
-
const home = "/home/tester";
|
|
7
|
-
const scope = "project:github.com/memaxlabs/memax";
|
|
8
|
-
it("resolves Claude project config into .claude", () => {
|
|
9
|
-
expect(resolveAgentConfigWritePath("claude-code", "CLAUDE.md", scope, {
|
|
10
|
-
cwd,
|
|
11
|
-
home,
|
|
12
|
-
currentProjectScope: scope,
|
|
13
|
-
})).toBe(join(cwd, ".claude", "CLAUDE.md"));
|
|
14
|
-
});
|
|
15
|
-
it("resolves Codex project config into .codex", () => {
|
|
16
|
-
expect(resolveAgentConfigWritePath("codex", "instructions.md", scope, {
|
|
17
|
-
cwd,
|
|
18
|
-
home,
|
|
19
|
-
currentProjectScope: scope,
|
|
20
|
-
})).toBe(join(cwd, ".codex", "instructions.md"));
|
|
21
|
-
});
|
|
22
|
-
it("resolves Copilot project config into .github", () => {
|
|
23
|
-
expect(resolveAgentConfigWritePath("copilot", "copilot-instructions.md", scope, {
|
|
24
|
-
cwd,
|
|
25
|
-
home,
|
|
26
|
-
currentProjectScope: scope,
|
|
27
|
-
})).toBe(join(cwd, ".github", "copilot-instructions.md"));
|
|
28
|
-
});
|
|
29
|
-
it("resolves OpenCode project files into .opencode", () => {
|
|
30
|
-
expect(resolveAgentConfigWritePath("opencode", "identity.md", scope, {
|
|
31
|
-
cwd,
|
|
32
|
-
home,
|
|
33
|
-
currentProjectScope: scope,
|
|
34
|
-
})).toBe(join(cwd, ".opencode", "identity.md"));
|
|
35
|
-
});
|
|
36
|
-
it("resolves Claude per-project memory files via project dir locator", () => {
|
|
37
|
-
expect(resolveAgentConfigWritePath("claude-code", "memory/feedback.md", scope, {
|
|
38
|
-
cwd,
|
|
39
|
-
home,
|
|
40
|
-
currentProjectScope: scope,
|
|
41
|
-
findClaudeProjectDir: () => "/home/tester/.claude/projects/-workspaces-memax",
|
|
42
|
-
})).toBe("/home/tester/.claude/projects/-workspaces-memax/memory/feedback.md");
|
|
43
|
-
});
|
|
44
|
-
it("refuses to resolve project-scoped files for a different project", () => {
|
|
45
|
-
expect(resolveAgentConfigWritePath("codex", "instructions.md", scope, {
|
|
46
|
-
cwd,
|
|
47
|
-
home,
|
|
48
|
-
currentProjectScope: "project:github.com/other/repo",
|
|
49
|
-
})).toBeNull();
|
|
50
|
-
});
|
|
51
|
-
it("resolves global Claude config under ~/.claude", () => {
|
|
52
|
-
expect(resolveAgentConfigWritePath("claude-code", "CLAUDE.md", "global", {
|
|
53
|
-
cwd,
|
|
54
|
-
home,
|
|
55
|
-
currentProjectScope: scope,
|
|
56
|
-
})).toBe(join(home, ".claude", "CLAUDE.md"));
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
describe("classifyAgentConfigPlacement", () => {
|
|
60
|
-
const cwd = "/workspaces/memax";
|
|
61
|
-
const home = "/home/tester";
|
|
62
|
-
const scope = "project:github.com/memaxlabs/memax";
|
|
63
|
-
it("reports present when a local config already exists", () => {
|
|
64
|
-
const result = classifyAgentConfigPlacement("codex", "instructions.md", scope, {
|
|
65
|
-
cwd,
|
|
66
|
-
home,
|
|
67
|
-
currentProjectScope: scope,
|
|
68
|
-
localByKey: new Map([
|
|
69
|
-
[
|
|
70
|
-
`codex|instructions.md|${scope}`,
|
|
71
|
-
{
|
|
72
|
-
agent: "codex",
|
|
73
|
-
label: "./.codex/instructions.md",
|
|
74
|
-
path: join(cwd, ".codex", "instructions.md"),
|
|
75
|
-
filePath: "instructions.md",
|
|
76
|
-
scope,
|
|
77
|
-
},
|
|
78
|
-
],
|
|
79
|
-
]),
|
|
80
|
-
});
|
|
81
|
-
expect(result).toEqual({
|
|
82
|
-
kind: "present",
|
|
83
|
-
path: join(cwd, ".codex", "instructions.md"),
|
|
84
|
-
reason: "present locally",
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
it("reports restorable when there is a safe write path on this machine", () => {
|
|
88
|
-
const result = classifyAgentConfigPlacement("codex", "instructions.md", scope, {
|
|
89
|
-
cwd,
|
|
90
|
-
home,
|
|
91
|
-
currentProjectScope: scope,
|
|
92
|
-
});
|
|
93
|
-
expect(result).toEqual({
|
|
94
|
-
kind: "restorable",
|
|
95
|
-
path: join(cwd, ".codex", "instructions.md"),
|
|
96
|
-
reason: "safe restore path available",
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
it("reports different project for mismatched project scopes", () => {
|
|
100
|
-
const result = classifyAgentConfigPlacement("codex", "instructions.md", scope, {
|
|
101
|
-
cwd,
|
|
102
|
-
home,
|
|
103
|
-
currentProjectScope: "project:github.com/other/repo",
|
|
104
|
-
});
|
|
105
|
-
expect(result).toEqual({
|
|
106
|
-
kind: "different_project",
|
|
107
|
-
reason: "belongs to github.com/memaxlabs/memax",
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
it("reports unresolved when no safe path can be derived", () => {
|
|
111
|
-
const result = classifyAgentConfigPlacement("unknown-agent", "instructions.md", "global", {
|
|
112
|
-
cwd,
|
|
113
|
-
home,
|
|
114
|
-
currentProjectScope: scope,
|
|
115
|
-
});
|
|
116
|
-
expect(result).toEqual({
|
|
117
|
-
kind: "unresolved",
|
|
118
|
-
reason: "no safe restore path on this machine",
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
//# sourceMappingURL=agent-configs.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-configs.test.js","sourceRoot":"","sources":["../../src/commands/agent-configs.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAE5B,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,MAAM,GAAG,GAAG,mBAAmB,CAAC;IAChC,MAAM,IAAI,GAAG,cAAc,CAAC;IAC5B,MAAM,KAAK,GAAG,oCAAoC,CAAC;IAEnD,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CACJ,2BAA2B,CAAC,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE;YAC7D,GAAG;YACH,IAAI;YACJ,mBAAmB,EAAE,KAAK;SAC3B,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CACJ,2BAA2B,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE;YAC7D,GAAG;YACH,IAAI;YACJ,mBAAmB,EAAE,KAAK;SAC3B,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CACJ,2BAA2B,CAAC,SAAS,EAAE,yBAAyB,EAAE,KAAK,EAAE;YACvE,GAAG;YACH,IAAI;YACJ,mBAAmB,EAAE,KAAK;SAC3B,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CACJ,2BAA2B,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE;YAC5D,GAAG;YACH,IAAI;YACJ,mBAAmB,EAAE,KAAK;SAC3B,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,CACJ,2BAA2B,CAAC,aAAa,EAAE,oBAAoB,EAAE,KAAK,EAAE;YACtE,GAAG;YACH,IAAI;YACJ,mBAAmB,EAAE,KAAK;YAC1B,oBAAoB,EAAE,GAAG,EAAE,CACzB,iDAAiD;SACpD,CAAC,CACH,CAAC,IAAI,CACJ,oEAAoE,CACrE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CACJ,2BAA2B,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE;YAC7D,GAAG;YACH,IAAI;YACJ,mBAAmB,EAAE,+BAA+B;SACrD,CAAC,CACH,CAAC,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CACJ,2BAA2B,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE;YAChE,GAAG;YACH,IAAI;YACJ,mBAAmB,EAAE,KAAK;SAC3B,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,MAAM,GAAG,GAAG,mBAAmB,CAAC;IAChC,MAAM,IAAI,GAAG,cAAc,CAAC;IAC5B,MAAM,KAAK,GAAG,oCAAoC,CAAC;IAEnD,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,4BAA4B,CACzC,OAAO,EACP,iBAAiB,EACjB,KAAK,EACL;YACE,GAAG;YACH,IAAI;YACJ,mBAAmB,EAAE,KAAK;YAC1B,UAAU,EAAE,IAAI,GAAG,CAAC;gBAClB;oBACE,yBAAyB,KAAK,EAAE;oBAChC;wBACE,KAAK,EAAE,OAAO;wBACd,KAAK,EAAE,0BAA0B;wBACjC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,iBAAiB,CAAC;wBAC5C,QAAQ,EAAE,iBAAiB;wBAC3B,KAAK;qBACN;iBACF;aACF,CAAC;SACH,CACF,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,iBAAiB,CAAC;YAC5C,MAAM,EAAE,iBAAiB;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,MAAM,GAAG,4BAA4B,CACzC,OAAO,EACP,iBAAiB,EACjB,KAAK,EACL;YACE,GAAG;YACH,IAAI;YACJ,mBAAmB,EAAE,KAAK;SAC3B,CACF,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,iBAAiB,CAAC;YAC5C,MAAM,EAAE,6BAA6B;SACtC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,4BAA4B,CACzC,OAAO,EACP,iBAAiB,EACjB,KAAK,EACL;YACE,GAAG;YACH,IAAI;YACJ,mBAAmB,EAAE,+BAA+B;SACrD,CACF,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,uCAAuC;SAChD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,MAAM,GAAG,4BAA4B,CACzC,eAAe,EACf,iBAAiB,EACjB,QAAQ,EACR;YACE,GAAG;YACH,IAAI;YACJ,mBAAmB,EAAE,KAAK;SAC3B,CACF,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,sCAAsC;SAC/C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-sessions.test.d.ts","sourceRoot":"","sources":["../../src/commands/agent-sessions.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync, rmSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { describe, expect, it } from "vitest";
|
|
4
|
-
import { classifyAgentSessionPlacement, computeSessionSyncHash, findShadowedGlobalSessions, hashPortableSessionContent, isLegacyGlobalSessionShadowed, materializeAgentSessionContent, resolveAgentSessionWritePath, } from "./agent-sessions.js";
|
|
5
|
-
describe("resolveAgentSessionWritePath", () => {
|
|
6
|
-
const cwd = "/workspaces/memax";
|
|
7
|
-
const home = "/home/tester";
|
|
8
|
-
const scope = "project:github.com/memaxlabs/memax";
|
|
9
|
-
it("resolves global Codex history", () => {
|
|
10
|
-
expect(resolveAgentSessionWritePath("codex", "history.jsonl", "global", {
|
|
11
|
-
cwd,
|
|
12
|
-
home,
|
|
13
|
-
currentProjectScope: scope,
|
|
14
|
-
})).toBe(join(home, ".codex", "history.jsonl"));
|
|
15
|
-
});
|
|
16
|
-
it("resolves global Codex sessions", () => {
|
|
17
|
-
expect(resolveAgentSessionWritePath("codex", "sessions/2026/04/07/example.jsonl", "global", {
|
|
18
|
-
cwd,
|
|
19
|
-
home,
|
|
20
|
-
currentProjectScope: scope,
|
|
21
|
-
})).toBe(join(home, ".codex", "sessions", "2026/04/07/example.jsonl"));
|
|
22
|
-
});
|
|
23
|
-
it("refuses project-scoped writes for a different project", () => {
|
|
24
|
-
expect(resolveAgentSessionWritePath("gemini", "chats/session.json", scope, {
|
|
25
|
-
cwd,
|
|
26
|
-
home,
|
|
27
|
-
currentProjectScope: "project:github.com/other/repo",
|
|
28
|
-
})).toBeNull();
|
|
29
|
-
});
|
|
30
|
-
it("resolves project-scoped Codex sessions into ~/.codex", () => {
|
|
31
|
-
expect(resolveAgentSessionWritePath("codex", "sessions/2026/04/07/example.jsonl", scope, {
|
|
32
|
-
cwd,
|
|
33
|
-
home,
|
|
34
|
-
currentProjectScope: scope,
|
|
35
|
-
})).toBe(join(home, ".codex", "sessions", "2026/04/07/example.jsonl"));
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
describe("classifyAgentSessionPlacement", () => {
|
|
39
|
-
const cwd = "/workspaces/memax";
|
|
40
|
-
const home = "/home/tester";
|
|
41
|
-
const scope = "project:github.com/memaxlabs/memax";
|
|
42
|
-
it("reports present when a local session already exists", () => {
|
|
43
|
-
const result = classifyAgentSessionPlacement("codex", "history.jsonl", "global", {
|
|
44
|
-
cwd,
|
|
45
|
-
home,
|
|
46
|
-
currentProjectScope: scope,
|
|
47
|
-
localByKey: new Map([
|
|
48
|
-
[
|
|
49
|
-
"codex|history.jsonl|global",
|
|
50
|
-
{
|
|
51
|
-
agent: "codex",
|
|
52
|
-
path: join(home, ".codex", "history.jsonl"),
|
|
53
|
-
filePath: "history.jsonl",
|
|
54
|
-
scope: "global",
|
|
55
|
-
sessionType: "history",
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
]),
|
|
59
|
-
});
|
|
60
|
-
expect(result).toEqual({
|
|
61
|
-
kind: "present",
|
|
62
|
-
path: join(home, ".codex", "history.jsonl"),
|
|
63
|
-
reason: "present locally",
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
it("reports restorable for a known safe path", () => {
|
|
67
|
-
const result = classifyAgentSessionPlacement("codex", "history.jsonl", "global", {
|
|
68
|
-
cwd,
|
|
69
|
-
home,
|
|
70
|
-
currentProjectScope: scope,
|
|
71
|
-
});
|
|
72
|
-
expect(result).toEqual({
|
|
73
|
-
kind: "restorable",
|
|
74
|
-
path: join(home, ".codex", "history.jsonl"),
|
|
75
|
-
reason: "safe restore path available",
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
it("reports different project for mismatched project scopes", () => {
|
|
79
|
-
const result = classifyAgentSessionPlacement("gemini", "chats/session.json", scope, {
|
|
80
|
-
cwd,
|
|
81
|
-
home,
|
|
82
|
-
currentProjectScope: "project:github.com/other/repo",
|
|
83
|
-
});
|
|
84
|
-
expect(result).toEqual({
|
|
85
|
-
kind: "different_project",
|
|
86
|
-
reason: "belongs to github.com/memaxlabs/memax",
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
describe("portable session hashing", () => {
|
|
91
|
-
it("treats Codex cwd rewrites as the same logical session", () => {
|
|
92
|
-
const first = Buffer.from(`${JSON.stringify({
|
|
93
|
-
type: "session_meta",
|
|
94
|
-
payload: { cwd: "/workspaces/memax" },
|
|
95
|
-
})}\n`, "utf-8");
|
|
96
|
-
const second = Buffer.from(`${JSON.stringify({
|
|
97
|
-
type: "session_meta",
|
|
98
|
-
payload: { cwd: "/Users/alice/src/memax" },
|
|
99
|
-
})}\n`, "utf-8");
|
|
100
|
-
expect(hashPortableSessionContent("codex", first, "/workspaces/memax")).toBe(hashPortableSessionContent("codex", second, "/Users/alice/src/memax"));
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
describe("materializeAgentSessionContent", () => {
|
|
104
|
-
it("rewrites structured cwd fields for Codex restores", () => {
|
|
105
|
-
const content = Buffer.from(`${JSON.stringify({
|
|
106
|
-
type: "session_meta",
|
|
107
|
-
payload: { cwd: "/workspaces/memax" },
|
|
108
|
-
})}\n`, "utf-8");
|
|
109
|
-
const restored = materializeAgentSessionContent("codex", content, {
|
|
110
|
-
scope: "project:github.com/memaxlabs/memax",
|
|
111
|
-
currentProjectRootPath: "/Users/alice/src/memax",
|
|
112
|
-
writePath: "/Users/alice/.codex/sessions/example.jsonl",
|
|
113
|
-
}).toString("utf-8");
|
|
114
|
-
expect(restored).toContain("/Users/alice/src/memax");
|
|
115
|
-
expect(restored).not.toContain("/workspaces/memax");
|
|
116
|
-
});
|
|
117
|
-
it("writes Gemini project_root markers on restore", () => {
|
|
118
|
-
const content = Buffer.from('{"sessionId":"1"}\n', "utf-8");
|
|
119
|
-
const root = join("/tmp", "memax-agent-session-test");
|
|
120
|
-
const writePath = join(root, "chats", "session.json");
|
|
121
|
-
rmSync(root, { recursive: true, force: true });
|
|
122
|
-
materializeAgentSessionContent("gemini", content, {
|
|
123
|
-
scope: "project:github.com/memaxlabs/memax",
|
|
124
|
-
currentProjectRootPath: "/workspaces/memax",
|
|
125
|
-
writePath,
|
|
126
|
-
});
|
|
127
|
-
const markerPath = join(root, ".project_root");
|
|
128
|
-
expect(existsSync(markerPath)).toBe(true);
|
|
129
|
-
expect(readFileSync(markerPath, "utf-8")).toBe("/workspaces/memax\n");
|
|
130
|
-
rmSync(root, { recursive: true, force: true });
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
describe("session sync convergence", () => {
|
|
134
|
-
it("acks pulled project sessions using the materialized portable hash", () => {
|
|
135
|
-
const downloaded = Buffer.from(`${JSON.stringify({
|
|
136
|
-
type: "session_meta",
|
|
137
|
-
payload: { cwd: "/workspaces/memax" },
|
|
138
|
-
})}\n`, "utf-8");
|
|
139
|
-
const materialized = materializeAgentSessionContent("codex", downloaded, {
|
|
140
|
-
scope: "project:github.com/memaxlabs/memax",
|
|
141
|
-
currentProjectRootPath: "/Users/alice/src/memax",
|
|
142
|
-
writePath: "/Users/alice/.codex/sessions/example.jsonl",
|
|
143
|
-
});
|
|
144
|
-
expect(computeSessionSyncHash("codex", "project:github.com/memaxlabs/memax", materialized, "/Users/alice/src/memax")).toBe(hashPortableSessionContent("codex", materialized, "/Users/alice/src/memax"));
|
|
145
|
-
});
|
|
146
|
-
it("marks legacy global codex session duplicates as shadowed", () => {
|
|
147
|
-
expect(isLegacyGlobalSessionShadowed({
|
|
148
|
-
action: "pull",
|
|
149
|
-
agent: "codex",
|
|
150
|
-
file_path: "sessions/2026/04/07/rollout-2026-04-07T05-39-15-019d6673-c077-7371-a3b8-3d98c1c8e7a7.jsonl",
|
|
151
|
-
scope: "global",
|
|
152
|
-
reason: "cloud_only",
|
|
153
|
-
}, new Set([
|
|
154
|
-
"codex|sessions/2026/04/07/rollout-2026-04-07T05-39-15-019d6673-c077-7371-a3b8-3d98c1c8e7a7.jsonl",
|
|
155
|
-
]))).toBe(true);
|
|
156
|
-
expect(isLegacyGlobalSessionShadowed({
|
|
157
|
-
action: "delete_local",
|
|
158
|
-
agent: "codex",
|
|
159
|
-
file_path: "sessions/2026/04/07/rollout-2026-04-07T05-39-15-019d6673-c077-7371-a3b8-3d98c1c8e7a7.jsonl",
|
|
160
|
-
scope: "global",
|
|
161
|
-
reason: "deleted_everywhere",
|
|
162
|
-
}, new Set([
|
|
163
|
-
"codex|sessions/2026/04/07/rollout-2026-04-07T05-39-15-019d6673-c077-7371-a3b8-3d98c1c8e7a7.jsonl",
|
|
164
|
-
]))).toBe(true);
|
|
165
|
-
});
|
|
166
|
-
it("does not shadow codex history or non-duplicate sessions", () => {
|
|
167
|
-
expect(isLegacyGlobalSessionShadowed({
|
|
168
|
-
action: "pull",
|
|
169
|
-
agent: "codex",
|
|
170
|
-
file_path: "history.jsonl",
|
|
171
|
-
scope: "global",
|
|
172
|
-
reason: "cloud_only",
|
|
173
|
-
}, new Set(["codex|history.jsonl"]))).toBe(false);
|
|
174
|
-
expect(isLegacyGlobalSessionShadowed({
|
|
175
|
-
action: "pull",
|
|
176
|
-
agent: "codex",
|
|
177
|
-
file_path: "sessions/2026/04/07/example.jsonl",
|
|
178
|
-
scope: "global",
|
|
179
|
-
reason: "cloud_only",
|
|
180
|
-
}, new Set())).toBe(false);
|
|
181
|
-
});
|
|
182
|
-
it("finds safe legacy global duplicates by agent and file path", () => {
|
|
183
|
-
const pairs = findShadowedGlobalSessions([
|
|
184
|
-
{
|
|
185
|
-
id: "g1",
|
|
186
|
-
owner_id: "o1",
|
|
187
|
-
agent: "codex",
|
|
188
|
-
file_path: "sessions/2026/04/07/example.jsonl",
|
|
189
|
-
scope: "global",
|
|
190
|
-
session_type: "transcript",
|
|
191
|
-
filename: "example.jsonl",
|
|
192
|
-
content_type: "application/jsonl",
|
|
193
|
-
size_bytes: 10,
|
|
194
|
-
content_hash: "abc",
|
|
195
|
-
version: 1,
|
|
196
|
-
created_at: "2026-04-08T00:00:00Z",
|
|
197
|
-
updated_at: "2026-04-08T00:00:00Z",
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
id: "p1",
|
|
201
|
-
owner_id: "o1",
|
|
202
|
-
agent: "codex",
|
|
203
|
-
file_path: "sessions/2026/04/07/example.jsonl",
|
|
204
|
-
scope: "project:github.com/memaxlabs/memax",
|
|
205
|
-
session_type: "transcript",
|
|
206
|
-
filename: "example.jsonl",
|
|
207
|
-
content_type: "application/jsonl",
|
|
208
|
-
size_bytes: 10,
|
|
209
|
-
content_hash: "abc",
|
|
210
|
-
version: 2,
|
|
211
|
-
created_at: "2026-04-08T00:00:00Z",
|
|
212
|
-
updated_at: "2026-04-08T00:00:00Z",
|
|
213
|
-
},
|
|
214
|
-
]);
|
|
215
|
-
expect(pairs).toHaveLength(1);
|
|
216
|
-
expect(pairs[0]?.global.id).toBe("g1");
|
|
217
|
-
expect(pairs[0]?.project.id).toBe("p1");
|
|
218
|
-
});
|
|
219
|
-
it("ignores codex history and unrelated scopes when finding duplicates", () => {
|
|
220
|
-
const pairs = findShadowedGlobalSessions([
|
|
221
|
-
{
|
|
222
|
-
id: "g1",
|
|
223
|
-
owner_id: "o1",
|
|
224
|
-
agent: "codex",
|
|
225
|
-
file_path: "history.jsonl",
|
|
226
|
-
scope: "global",
|
|
227
|
-
session_type: "history",
|
|
228
|
-
filename: "history.jsonl",
|
|
229
|
-
content_type: "application/jsonl",
|
|
230
|
-
size_bytes: 10,
|
|
231
|
-
content_hash: "abc",
|
|
232
|
-
version: 1,
|
|
233
|
-
created_at: "2026-04-08T00:00:00Z",
|
|
234
|
-
updated_at: "2026-04-08T00:00:00Z",
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
id: "p1",
|
|
238
|
-
owner_id: "o1",
|
|
239
|
-
agent: "codex",
|
|
240
|
-
file_path: "history.jsonl",
|
|
241
|
-
scope: "project:github.com/memaxlabs/memax",
|
|
242
|
-
session_type: "history",
|
|
243
|
-
filename: "history.jsonl",
|
|
244
|
-
content_type: "application/jsonl",
|
|
245
|
-
size_bytes: 10,
|
|
246
|
-
content_hash: "abc",
|
|
247
|
-
version: 2,
|
|
248
|
-
created_at: "2026-04-08T00:00:00Z",
|
|
249
|
-
updated_at: "2026-04-08T00:00:00Z",
|
|
250
|
-
},
|
|
251
|
-
]);
|
|
252
|
-
expect(pairs).toHaveLength(0);
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
//# sourceMappingURL=agent-sessions.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-sessions.test.js","sourceRoot":"","sources":["../../src/commands/agent-sessions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dreams.test.d.ts","sourceRoot":"","sources":["../../src/commands/dreams.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { summarizeRun } from "./dreams.js";
|
|
3
|
-
describe("summarizeRun", () => {
|
|
4
|
-
it("includes only non-zero dream outcomes", () => {
|
|
5
|
-
expect(summarizeRun({
|
|
6
|
-
id: "r1",
|
|
7
|
-
owner_id: "u1",
|
|
8
|
-
hub_id: "h1",
|
|
9
|
-
status: "completed",
|
|
10
|
-
started_at: "",
|
|
11
|
-
finished_at: "",
|
|
12
|
-
memories_scanned: 12,
|
|
13
|
-
duplicates_merged: 2,
|
|
14
|
-
contradictions_found: 1,
|
|
15
|
-
memories_archived: 0,
|
|
16
|
-
memories_organized: 5,
|
|
17
|
-
topics_restructured: 0,
|
|
18
|
-
report: "",
|
|
19
|
-
})).toEqual(["2 merged", "1 contradictions", "5 organized"]);
|
|
20
|
-
});
|
|
21
|
-
it("returns an empty summary when no changes were made", () => {
|
|
22
|
-
expect(summarizeRun({
|
|
23
|
-
id: "r2",
|
|
24
|
-
owner_id: "u1",
|
|
25
|
-
hub_id: "h1",
|
|
26
|
-
status: "completed",
|
|
27
|
-
started_at: "",
|
|
28
|
-
finished_at: "",
|
|
29
|
-
memories_scanned: 2,
|
|
30
|
-
duplicates_merged: 0,
|
|
31
|
-
contradictions_found: 0,
|
|
32
|
-
memories_archived: 0,
|
|
33
|
-
memories_organized: 0,
|
|
34
|
-
topics_restructured: 0,
|
|
35
|
-
report: "",
|
|
36
|
-
})).toEqual([]);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
//# sourceMappingURL=dreams.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dreams.test.js","sourceRoot":"","sources":["../../src/commands/dreams.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CACJ,YAAY,CAAC;YACX,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,EAAE;YACd,WAAW,EAAE,EAAE;YACf,gBAAgB,EAAE,EAAE;YACpB,iBAAiB,EAAE,CAAC;YACpB,oBAAoB,EAAE,CAAC;YACvB,iBAAiB,EAAE,CAAC;YACpB,kBAAkB,EAAE,CAAC;YACrB,mBAAmB,EAAE,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC,CACH,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CACJ,YAAY,CAAC;YACX,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,EAAE;YACd,WAAW,EAAE,EAAE;YACf,gBAAgB,EAAE,CAAC;YACnB,iBAAiB,EAAE,CAAC;YACpB,oBAAoB,EAAE,CAAC;YACvB,iBAAiB,EAAE,CAAC;YACpB,kBAAkB,EAAE,CAAC;YACrB,mBAAmB,EAAE,CAAC;YACtB,MAAM,EAAE,EAAE;SACX,CAAC,CACH,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hub.test.d.ts","sourceRoot":"","sources":["../../src/commands/hub.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { deriveInviteURL, extractInviteToken, inviteDisplayID, resolveInviteReference, } from "./hub.js";
|
|
3
|
-
describe("inviteDisplayID", () => {
|
|
4
|
-
it("shortens invite IDs by default", () => {
|
|
5
|
-
expect(inviteDisplayID("12345678-1234-1234-1234-123456789abc")).toBe("12345678");
|
|
6
|
-
});
|
|
7
|
-
it("shows full invite IDs in verbose mode", () => {
|
|
8
|
-
expect(inviteDisplayID("12345678-1234-1234-1234-123456789abc", true)).toBe("12345678-1234-1234-1234-123456789abc");
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
describe("deriveInviteURL", () => {
|
|
12
|
-
it("maps localhost API to local web app", () => {
|
|
13
|
-
expect(deriveInviteURL("tok", "http://localhost:8080")).toBe("http://localhost:3000/invite/tok");
|
|
14
|
-
});
|
|
15
|
-
it("strips api prefix for production", () => {
|
|
16
|
-
expect(deriveInviteURL("tok", "https://api.memax.app")).toBe("https://memax.app/invite/tok");
|
|
17
|
-
});
|
|
18
|
-
it("maps staging-api to staging-app", () => {
|
|
19
|
-
expect(deriveInviteURL("tok", "https://staging-api.memaxlabs.com")).toBe("https://staging-app.memaxlabs.com/invite/tok");
|
|
20
|
-
});
|
|
21
|
-
it("maps api- prefix to app- prefix", () => {
|
|
22
|
-
expect(deriveInviteURL("tok", "https://api-staging.memaxlabs.com")).toBe("https://app-staging.memaxlabs.com/invite/tok");
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
describe("extractInviteToken", () => {
|
|
26
|
-
it("returns raw token unchanged", () => {
|
|
27
|
-
expect(extractInviteToken("abc123")).toBe("abc123");
|
|
28
|
-
});
|
|
29
|
-
it("extracts token from invite URL", () => {
|
|
30
|
-
expect(extractInviteToken("https://memax.app/invite/abc123")).toBe("abc123");
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
describe("resolveInviteReference", () => {
|
|
34
|
-
const invites = [
|
|
35
|
-
{
|
|
36
|
-
id: "12345678-1234-1234-1234-123456789abc",
|
|
37
|
-
hub_id: "h1",
|
|
38
|
-
token: "tok1",
|
|
39
|
-
invited_by: "u1",
|
|
40
|
-
role: "contributor",
|
|
41
|
-
expires_at: "",
|
|
42
|
-
created_at: "",
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
id: "abcdef12-1234-1234-1234-123456789abc",
|
|
46
|
-
hub_id: "h1",
|
|
47
|
-
token: "tok2",
|
|
48
|
-
invited_by: "u1",
|
|
49
|
-
role: "viewer",
|
|
50
|
-
expires_at: "",
|
|
51
|
-
created_at: "",
|
|
52
|
-
},
|
|
53
|
-
];
|
|
54
|
-
it("resolves exact invite IDs", () => {
|
|
55
|
-
expect(resolveInviteReference(invites, "12345678-1234-1234-1234-123456789abc")
|
|
56
|
-
.id).toBe("12345678-1234-1234-1234-123456789abc");
|
|
57
|
-
});
|
|
58
|
-
it("resolves unique invite ID prefixes", () => {
|
|
59
|
-
expect(resolveInviteReference(invites, "abcdef12").id).toBe("abcdef12-1234-1234-1234-123456789abc");
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
//# sourceMappingURL=hub.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hub.test.js","sourceRoot":"","sources":["../../src/commands/hub.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"import.test.d.ts","sourceRoot":"","sources":["../../src/commands/import.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { buildSyncSourcePath } from "./import.js";
|
|
3
|
-
describe("buildSyncSourcePath", () => {
|
|
4
|
-
it("uses the declared sync root rather than process cwd", () => {
|
|
5
|
-
expect(buildSyncSourcePath("/workspaces/memax/docs", "/workspaces/memax/docs/adr/001.md")).toBe("adr/001.md");
|
|
6
|
-
});
|
|
7
|
-
it("rejects files outside the sync root", () => {
|
|
8
|
-
expect(() => buildSyncSourcePath("/workspaces/memax/docs", "/workspaces/memax/README.md")).toThrow("file is outside sync root");
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
//# sourceMappingURL=import.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"import.test.js","sourceRoot":"","sources":["../../src/commands/import.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CACJ,mBAAmB,CACjB,wBAAwB,EACxB,mCAAmC,CACpC,CACF,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,GAAG,EAAE,CACV,mBAAmB,CACjB,wBAAwB,EACxB,6BAA6B,CAC9B,CACF,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.test.d.ts","sourceRoot":"","sources":["../../src/commands/list.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { buildNextPageCommand } from "./list.js";
|
|
3
|
-
describe("buildNextPageCommand", () => {
|
|
4
|
-
it("carries relevant options into the next-page command", () => {
|
|
5
|
-
const cmd = buildNextPageCommand({
|
|
6
|
-
sort: "relevant",
|
|
7
|
-
limit: "50",
|
|
8
|
-
hub: "team-hub",
|
|
9
|
-
}, "12|2026-04-08T10:00:00Z");
|
|
10
|
-
expect(cmd).toBe("memax list --sort relevant --limit 50 --hub team-hub --cursor '12|2026-04-08T10:00:00Z'");
|
|
11
|
-
});
|
|
12
|
-
it("preserves --topic-id across pages", () => {
|
|
13
|
-
const cmd = buildNextPageCommand({
|
|
14
|
-
hub: "team-hub",
|
|
15
|
-
topicId: "01H9X0ABCDEF",
|
|
16
|
-
}, "12|2026-04-08T10:00:00Z");
|
|
17
|
-
expect(cmd).toBe("memax list --hub team-hub --topic-id 01H9X0ABCDEF --cursor '12|2026-04-08T10:00:00Z'");
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
//# sourceMappingURL=list.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.test.js","sourceRoot":"","sources":["../../src/commands/list.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,GAAG,GAAG,oBAAoB,CAC9B;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,UAAU;SAChB,EACD,yBAAyB,CAC1B,CAAC;QAEF,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CACd,yFAAyF,CAC1F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,GAAG,GAAG,oBAAoB,CAC9B;YACE,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,cAAc;SACxB,EACD,yBAAyB,CAC1B,CAAC;QAEF,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CACd,sFAAsF,CACvF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recall.test.d.ts","sourceRoot":"","sources":["../../src/commands/recall.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { hasMorePreviewLines, previewLines, renderMarkdownFragment, } from "./recall.js";
|
|
3
|
-
describe("previewLines", () => {
|
|
4
|
-
it("drops blank lines and preserves only the requested number of lines", () => {
|
|
5
|
-
expect(previewLines("one\n\n two \n\nthree\nfour", 2)).toEqual([
|
|
6
|
-
"one",
|
|
7
|
-
" two",
|
|
8
|
-
]);
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
describe("hasMorePreviewLines", () => {
|
|
12
|
-
it("is true when there are more non-empty lines than the limit", () => {
|
|
13
|
-
expect(hasMorePreviewLines("one\n\ntwo\nthree", 2)).toBe(true);
|
|
14
|
-
});
|
|
15
|
-
it("is false when the visible lines fit within the limit", () => {
|
|
16
|
-
expect(hasMorePreviewLines("one\n\ntwo", 2)).toBe(false);
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
describe("renderMarkdownFragment", () => {
|
|
20
|
-
it("renders lightweight markdown fragments without requiring full document structure", () => {
|
|
21
|
-
expect(renderMarkdownFragment("## Heading\n- item one\nRegular `code` text", {
|
|
22
|
-
indent: " ",
|
|
23
|
-
})).toEqual([" Heading", " • item one", " Regular code text"]);
|
|
24
|
-
});
|
|
25
|
-
it("ignores fenced code markers and renders the code lines", () => {
|
|
26
|
-
expect(renderMarkdownFragment("```md\nconst x = 1;\n```", {
|
|
27
|
-
indent: " ",
|
|
28
|
-
})).toEqual([" const x = 1;"]);
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
//# sourceMappingURL=recall.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recall.test.js","sourceRoot":"","sources":["../../src/commands/recall.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAErB,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,CAAC,YAAY,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7D,KAAK;YACL,MAAM;SACP,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,CACJ,sBAAsB,CAAC,6CAA6C,EAAE;YACpE,MAAM,EAAE,MAAM;SACf,CAAC,CACH,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CACJ,sBAAsB,CAAC,0BAA0B,EAAE;YACjD,MAAM,EAAE,MAAM;SACf,CAAC,CACH,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"topic.test.d.ts","sourceRoot":"","sources":["../../src/commands/topic.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { buildTopicPathMap, flattenTopics, resolveTopicReference, topicDisplayCount, topicDisplayID, } from "./topic.js";
|
|
3
|
-
describe("topicDisplayCount", () => {
|
|
4
|
-
it("prefers subtree totals over direct counts", () => {
|
|
5
|
-
expect(topicDisplayCount({ memory_count: 0, total_memory_count: 7 })).toBe(7);
|
|
6
|
-
});
|
|
7
|
-
it("falls back to direct count when subtree total is zero", () => {
|
|
8
|
-
expect(topicDisplayCount({ memory_count: 3, total_memory_count: 0 })).toBe(0);
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
describe("buildTopicPathMap", () => {
|
|
12
|
-
it("builds slash-delimited topic paths from the tree", () => {
|
|
13
|
-
const map = buildTopicPathMap([
|
|
14
|
-
{
|
|
15
|
-
id: "root",
|
|
16
|
-
owner_id: "u1",
|
|
17
|
-
hub_id: "h1",
|
|
18
|
-
parent_id: null,
|
|
19
|
-
name: "Engineering",
|
|
20
|
-
description: "",
|
|
21
|
-
icon: "folder",
|
|
22
|
-
position: 0,
|
|
23
|
-
pinned: false,
|
|
24
|
-
user_modified: false,
|
|
25
|
-
created_at: "",
|
|
26
|
-
updated_at: "",
|
|
27
|
-
memory_count: 1,
|
|
28
|
-
total_memory_count: 2,
|
|
29
|
-
kind_dots: [],
|
|
30
|
-
children: [
|
|
31
|
-
{
|
|
32
|
-
id: "child",
|
|
33
|
-
owner_id: "u1",
|
|
34
|
-
hub_id: "h1",
|
|
35
|
-
parent_id: "root",
|
|
36
|
-
name: "Caching",
|
|
37
|
-
description: "",
|
|
38
|
-
icon: "folder",
|
|
39
|
-
position: 0,
|
|
40
|
-
pinned: false,
|
|
41
|
-
user_modified: false,
|
|
42
|
-
created_at: "",
|
|
43
|
-
updated_at: "",
|
|
44
|
-
memory_count: 1,
|
|
45
|
-
total_memory_count: 1,
|
|
46
|
-
kind_dots: [],
|
|
47
|
-
children: [],
|
|
48
|
-
},
|
|
49
|
-
],
|
|
50
|
-
},
|
|
51
|
-
]);
|
|
52
|
-
expect(map.get("root")).toBe("Engineering");
|
|
53
|
-
expect(map.get("child")).toBe("Engineering / Caching");
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
describe("topicDisplayID", () => {
|
|
57
|
-
it("shortens IDs by default", () => {
|
|
58
|
-
expect(topicDisplayID("12345678-1234-1234-1234-123456789abc")).toBe("12345678");
|
|
59
|
-
});
|
|
60
|
-
it("shows full IDs in verbose mode", () => {
|
|
61
|
-
expect(topicDisplayID("12345678-1234-1234-1234-123456789abc", true)).toBe("12345678-1234-1234-1234-123456789abc");
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe("resolveTopicReference", () => {
|
|
65
|
-
const topics = [
|
|
66
|
-
{
|
|
67
|
-
id: "12345678-1234-1234-1234-123456789abc",
|
|
68
|
-
owner_id: "u1",
|
|
69
|
-
hub_id: "h1",
|
|
70
|
-
parent_id: null,
|
|
71
|
-
name: "Engineering",
|
|
72
|
-
description: "",
|
|
73
|
-
icon: "folder",
|
|
74
|
-
position: 0,
|
|
75
|
-
pinned: false,
|
|
76
|
-
user_modified: false,
|
|
77
|
-
created_at: "",
|
|
78
|
-
updated_at: "",
|
|
79
|
-
memory_count: 1,
|
|
80
|
-
total_memory_count: 2,
|
|
81
|
-
kind_dots: [],
|
|
82
|
-
children: [
|
|
83
|
-
{
|
|
84
|
-
id: "abcdef12-1234-1234-1234-123456789abc",
|
|
85
|
-
owner_id: "u1",
|
|
86
|
-
hub_id: "h1",
|
|
87
|
-
parent_id: "12345678-1234-1234-1234-123456789abc",
|
|
88
|
-
name: "Caching",
|
|
89
|
-
description: "",
|
|
90
|
-
icon: "folder",
|
|
91
|
-
position: 0,
|
|
92
|
-
pinned: false,
|
|
93
|
-
user_modified: false,
|
|
94
|
-
created_at: "",
|
|
95
|
-
updated_at: "",
|
|
96
|
-
memory_count: 1,
|
|
97
|
-
total_memory_count: 1,
|
|
98
|
-
kind_dots: [],
|
|
99
|
-
children: [],
|
|
100
|
-
},
|
|
101
|
-
],
|
|
102
|
-
},
|
|
103
|
-
];
|
|
104
|
-
it("resolves exact IDs", () => {
|
|
105
|
-
expect(resolveTopicReference(topics, "12345678-1234-1234-1234-123456789abc")).toBe("12345678-1234-1234-1234-123456789abc");
|
|
106
|
-
});
|
|
107
|
-
it("resolves unique ID prefixes", () => {
|
|
108
|
-
expect(resolveTopicReference(topics, "abcdef12")).toBe("abcdef12-1234-1234-1234-123456789abc");
|
|
109
|
-
});
|
|
110
|
-
it("flattens nested topics for resolution", () => {
|
|
111
|
-
expect(flattenTopics(topics)).toHaveLength(2);
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
//# sourceMappingURL=topic.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"topic.test.js","sourceRoot":"","sources":["../../src/commands/topic.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../src/lib/client.test.ts"],"names":[],"mappings":""}
|
package/dist/lib/client.test.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
const state = vi.hoisted(() => ({
|
|
3
|
-
accessToken: "user-token",
|
|
4
|
-
refreshToken: "refresh-token",
|
|
5
|
-
expiresAt: undefined,
|
|
6
|
-
localAgentKeys: {},
|
|
7
|
-
}));
|
|
8
|
-
vi.mock("./config.js", () => ({
|
|
9
|
-
loadConfig: () => ({ api_url: "http://localhost:8080" }),
|
|
10
|
-
}));
|
|
11
|
-
vi.mock("./credentials.js", () => ({
|
|
12
|
-
loadCredentials: () => ({
|
|
13
|
-
access_token: state.accessToken,
|
|
14
|
-
refresh_token: state.refreshToken,
|
|
15
|
-
expires_at: state.expiresAt,
|
|
16
|
-
local_agent_keys: state.localAgentKeys,
|
|
17
|
-
}),
|
|
18
|
-
saveCredentials: vi.fn(),
|
|
19
|
-
isTokenExpired: () => false,
|
|
20
|
-
getLocalAgentKey: (agentID) => state.localAgentKeys[agentID],
|
|
21
|
-
}));
|
|
22
|
-
import { getAuthHeaders, resetClient, setClientAgent } from "./client.js";
|
|
23
|
-
describe("client auth selection", () => {
|
|
24
|
-
beforeEach(() => {
|
|
25
|
-
state.accessToken = "user-token";
|
|
26
|
-
state.refreshToken = "refresh-token";
|
|
27
|
-
state.expiresAt = undefined;
|
|
28
|
-
state.localAgentKeys = {};
|
|
29
|
-
setClientAgent(undefined);
|
|
30
|
-
resetClient();
|
|
31
|
-
});
|
|
32
|
-
it("prefers a stored local agent key when an agent-scoped CLI flow is active", async () => {
|
|
33
|
-
state.localAgentKeys["claude-code"] = "mxk_agent_key";
|
|
34
|
-
setClientAgent("claude-code");
|
|
35
|
-
const headers = await getAuthHeaders();
|
|
36
|
-
expect(headers.Authorization).toBe("Bearer mxk_agent_key");
|
|
37
|
-
});
|
|
38
|
-
it("falls back to the user token when no local agent key exists", async () => {
|
|
39
|
-
setClientAgent("claude-code");
|
|
40
|
-
const headers = await getAuthHeaders();
|
|
41
|
-
expect(headers.Authorization).toBe("Bearer user-token");
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
//# sourceMappingURL=client.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/lib/client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9B,WAAW,EAAE,YAAY;IACzB,YAAY,EAAE,eAAe;IAC7B,SAAS,EAAE,SAA+B;IAC1C,cAAc,EAAE,EAA4B;CAC7C,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;CACzD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;QACtB,YAAY,EAAE,KAAK,CAAC,WAAW;QAC/B,aAAa,EAAE,KAAK,CAAC,YAAY;QACjC,UAAU,EAAE,KAAK,CAAC,SAAS;QAC3B,gBAAgB,EAAE,KAAK,CAAC,cAAc;KACvC,CAAC;IACF,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;IACxB,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK;IAC3B,gBAAgB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;CACrE,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE1E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC;QACjC,KAAK,CAAC,YAAY,GAAG,eAAe,CAAC;QACrC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5B,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;QAC1B,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,eAAe,CAAC;QAEtD,cAAc,CAAC,aAAa,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;QAEvC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,cAAc,CAAC,aAAa,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;QAEvC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/lib/hubs.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hubs.test.d.ts","sourceRoot":"","sources":["../../src/lib/hubs.test.ts"],"names":[],"mappings":""}
|
package/dist/lib/hubs.test.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { findHubMatch, getHubReference, PERSONAL_HUB_ALIAS } from "./hubs.js";
|
|
3
|
-
describe("getHubReference", () => {
|
|
4
|
-
it("uses the reserved personal alias for personal hubs", () => {
|
|
5
|
-
expect(getHubReference({
|
|
6
|
-
id: "h1",
|
|
7
|
-
name: "Personal",
|
|
8
|
-
slug: "user-123",
|
|
9
|
-
hub_type: "personal",
|
|
10
|
-
owner_id: "u1",
|
|
11
|
-
})).toBe(PERSONAL_HUB_ALIAS);
|
|
12
|
-
});
|
|
13
|
-
it("uses the real slug for team hubs", () => {
|
|
14
|
-
expect(getHubReference({
|
|
15
|
-
id: "h2",
|
|
16
|
-
name: "Memax",
|
|
17
|
-
slug: "memax",
|
|
18
|
-
hub_type: "team",
|
|
19
|
-
owner_id: "u1",
|
|
20
|
-
})).toBe("memax");
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
describe("findHubMatch", () => {
|
|
24
|
-
const hubs = [
|
|
25
|
-
{
|
|
26
|
-
hub: {
|
|
27
|
-
id: "personal-id",
|
|
28
|
-
name: "Personal",
|
|
29
|
-
slug: "user-123",
|
|
30
|
-
hub_type: "personal",
|
|
31
|
-
owner_id: "u1",
|
|
32
|
-
},
|
|
33
|
-
role: "owner",
|
|
34
|
-
memory_count: 0,
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
hub: {
|
|
38
|
-
id: "team-id",
|
|
39
|
-
name: "Memax",
|
|
40
|
-
slug: "memax",
|
|
41
|
-
hub_type: "team",
|
|
42
|
-
owner_id: "u1",
|
|
43
|
-
},
|
|
44
|
-
role: "owner",
|
|
45
|
-
memory_count: 0,
|
|
46
|
-
},
|
|
47
|
-
];
|
|
48
|
-
it("resolves the reserved personal alias to the personal hub", () => {
|
|
49
|
-
expect(findHubMatch([...hubs], "personal")?.hub.id).toBe("personal-id");
|
|
50
|
-
});
|
|
51
|
-
it("matches team hubs by slug", () => {
|
|
52
|
-
expect(findHubMatch([...hubs], "memax")?.hub.id).toBe("team-id");
|
|
53
|
-
});
|
|
54
|
-
it("matches hubs by id", () => {
|
|
55
|
-
expect(findHubMatch([...hubs], "team-id")?.hub.slug).toBe("memax");
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
//# sourceMappingURL=hubs.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hubs.test.js","sourceRoot":"","sources":["../../src/lib/hubs.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE9E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CACJ,eAAe,CAAC;YACd,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CACJ,eAAe,CAAC;YACd,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,IAAI,GAAG;QACX;YACE,GAAG,EAAE;gBACH,EAAE,EAAE,aAAa;gBACjB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,UAAU;gBACpB,QAAQ,EAAE,IAAI;aACf;YACD,IAAI,EAAE,OAAO;YACb,YAAY,EAAE,CAAC;SAChB;QACD;YACE,GAAG,EAAE;gBACH,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,IAAI;aACf;YACD,IAAI,EAAE,OAAO;YACb,YAAY,EAAE,CAAC;SAChB;KACO,CAAC;IAEX,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-context.test.d.ts","sourceRoot":"","sources":["../../src/lib/project-context.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
const { execSync, existsSync, readFileSync } = vi.hoisted(() => ({
|
|
3
|
-
execSync: vi.fn(),
|
|
4
|
-
existsSync: vi.fn(),
|
|
5
|
-
readFileSync: vi.fn(),
|
|
6
|
-
}));
|
|
7
|
-
vi.mock("node:child_process", () => ({
|
|
8
|
-
execSync,
|
|
9
|
-
}));
|
|
10
|
-
vi.mock("node:fs", async () => {
|
|
11
|
-
const actual = await vi.importActual("node:fs");
|
|
12
|
-
return {
|
|
13
|
-
...actual,
|
|
14
|
-
existsSync,
|
|
15
|
-
readFileSync,
|
|
16
|
-
};
|
|
17
|
-
});
|
|
18
|
-
import { getProjectScope, normalizeRepoUrl, readMemaxYmlConfig, readMemaxYmlHub, resolveProjectScope, } from "./project-context.js";
|
|
19
|
-
describe("normalizeRepoUrl", () => {
|
|
20
|
-
it("normalizes common git remote forms", () => {
|
|
21
|
-
expect(normalizeRepoUrl("https://github.com/MemaxLabs/memax.git")).toBe("github.com/memaxlabs/memax");
|
|
22
|
-
expect(normalizeRepoUrl("git@github.com:MemaxLabs/memax.git")).toBe("github.com/memaxlabs/memax");
|
|
23
|
-
expect(normalizeRepoUrl("ssh://git@github.com/MemaxLabs/memax")).toBe("github.com/memaxlabs/memax");
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
describe("getProjectScope", () => {
|
|
27
|
-
beforeEach(() => {
|
|
28
|
-
execSync.mockReset();
|
|
29
|
-
existsSync.mockReset();
|
|
30
|
-
readFileSync.mockReset();
|
|
31
|
-
existsSync.mockReturnValue(false);
|
|
32
|
-
});
|
|
33
|
-
it("uses the normalized origin remote when present", () => {
|
|
34
|
-
execSync.mockReturnValueOnce("git@github.com:MemaxLabs/memax.git\n");
|
|
35
|
-
expect(getProjectScope("/workspaces/memax")).toBe("project:github.com/memaxlabs/memax");
|
|
36
|
-
});
|
|
37
|
-
it("returns generic project scope when there is no canonical remote", () => {
|
|
38
|
-
execSync.mockImplementation(() => {
|
|
39
|
-
throw new Error("no remote");
|
|
40
|
-
});
|
|
41
|
-
expect(getProjectScope("/workspaces/memax")).toBe("project");
|
|
42
|
-
});
|
|
43
|
-
it("uses .memax.yml project_id as an explicit override", () => {
|
|
44
|
-
existsSync.mockImplementation((path) => path.endsWith(".memax.yml"));
|
|
45
|
-
readFileSync.mockReturnValue("project_id: Acme.Internal/Payments-API\n");
|
|
46
|
-
expect(getProjectScope("/workspaces/memax")).toBe("project:acme.internal/payments-api");
|
|
47
|
-
});
|
|
48
|
-
it("reports when .memax.yml project_id overrides git origin", () => {
|
|
49
|
-
existsSync.mockImplementation((path) => path.endsWith(".memax.yml"));
|
|
50
|
-
readFileSync.mockReturnValue("project_id: github.com/acme/override\n");
|
|
51
|
-
execSync.mockReturnValueOnce("git@github.com:MemaxLabs/memax.git\n");
|
|
52
|
-
expect(resolveProjectScope("/workspaces/memax")).toEqual({
|
|
53
|
-
scope: "project:github.com/acme/override",
|
|
54
|
-
source: "memax_yml",
|
|
55
|
-
warning: ".memax.yml project_id (github.com/acme/override) overrides git origin (github.com/memaxlabs/memax)",
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
describe("readMemaxYmlConfig", () => {
|
|
60
|
-
beforeEach(() => {
|
|
61
|
-
existsSync.mockReset();
|
|
62
|
-
readFileSync.mockReset();
|
|
63
|
-
existsSync.mockReturnValue(false);
|
|
64
|
-
});
|
|
65
|
-
it("parses hub and project_id from .memax.yml", () => {
|
|
66
|
-
existsSync.mockImplementation((path) => path.endsWith(".memax.yml"));
|
|
67
|
-
readFileSync.mockReturnValue("hub: team-backend\nproject_id: github.com/MemaxLabs/memax\n");
|
|
68
|
-
expect(readMemaxYmlConfig("/workspaces/memax")).toEqual({
|
|
69
|
-
hub: "team-backend",
|
|
70
|
-
project_id: "github.com/memaxlabs/memax",
|
|
71
|
-
});
|
|
72
|
-
expect(readMemaxYmlHub()).toBe("team-backend");
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
//# sourceMappingURL=project-context.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-context.test.js","sourceRoot":"","sources":["../../src/lib/project-context.test.ts"],"names":[],"mappings":"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"}
|