memax-sdk 0.1.2 → 0.1.3

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.
Files changed (47) hide show
  1. package/dist/client.d.ts +15 -95
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +21 -277
  4. package/dist/client.js.map +1 -1
  5. package/dist/errors.d.ts +6 -0
  6. package/dist/errors.d.ts.map +1 -0
  7. package/dist/errors.js +11 -0
  8. package/dist/errors.js.map +1 -0
  9. package/dist/index.d.ts +3 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/resources/auth.d.ts +11 -0
  14. package/dist/resources/auth.d.ts.map +1 -0
  15. package/dist/resources/auth.js +25 -0
  16. package/dist/resources/auth.js.map +1 -0
  17. package/dist/resources/configs.d.ts +23 -0
  18. package/dist/resources/configs.d.ts.map +1 -0
  19. package/dist/resources/configs.js +33 -0
  20. package/dist/resources/configs.js.map +1 -0
  21. package/dist/resources/hubs.d.ts +10 -0
  22. package/dist/resources/hubs.d.ts.map +1 -0
  23. package/dist/resources/hubs.js +16 -0
  24. package/dist/resources/hubs.js.map +1 -0
  25. package/dist/resources/memories.d.ts +13 -0
  26. package/dist/resources/memories.d.ts.map +1 -0
  27. package/dist/resources/memories.js +73 -0
  28. package/dist/resources/memories.js.map +1 -0
  29. package/dist/resources/settings.d.ts +8 -0
  30. package/dist/resources/settings.d.ts.map +1 -0
  31. package/dist/resources/settings.js +10 -0
  32. package/dist/resources/settings.js.map +1 -0
  33. package/dist/resources/topics.d.ts +19 -0
  34. package/dist/resources/topics.d.ts.map +1 -0
  35. package/dist/resources/topics.js +45 -0
  36. package/dist/resources/topics.js.map +1 -0
  37. package/dist/transport.d.ts +18 -0
  38. package/dist/transport.d.ts.map +1 -0
  39. package/dist/transport.js +107 -0
  40. package/dist/transport.js.map +1 -0
  41. package/dist/transport.test.d.ts +2 -0
  42. package/dist/transport.test.d.ts.map +1 -0
  43. package/dist/transport.test.js +70 -0
  44. package/dist/transport.test.js.map +1 -0
  45. package/dist/types.d.ts +91 -5
  46. package/dist/types.d.ts.map +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,10 @@
1
+ import type { Hub, HubWithRole, HubSwitchResult } from "../types.js";
2
+ import type { RequestFn } from "../transport.js";
3
+ export declare class HubsResource {
4
+ private readonly req;
5
+ constructor(req: RequestFn);
6
+ list(): Promise<HubWithRole[]>;
7
+ create(name: string): Promise<Hub>;
8
+ switch(idOrSlug: string): Promise<HubSwitchResult>;
9
+ }
10
+ //# sourceMappingURL=hubs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubs.d.ts","sourceRoot":"","sources":["../../src/resources/hubs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAErC,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAI9B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAIlC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAGzD"}
@@ -0,0 +1,16 @@
1
+ export class HubsResource {
2
+ req;
3
+ constructor(req) {
4
+ this.req = req;
5
+ }
6
+ async list() {
7
+ return this.req("GET", "/v1/hubs");
8
+ }
9
+ async create(name) {
10
+ return this.req("POST", "/v1/hubs", { body: { name } });
11
+ }
12
+ async switch(idOrSlug) {
13
+ return this.req("POST", `/v1/hubs/${idOrSlug}/switch`, { body: {} });
14
+ }
15
+ }
16
+ //# sourceMappingURL=hubs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubs.js","sourceRoot":"","sources":["../../src/resources/hubs.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAE/C,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,QAAQ,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { AskOptions, AskResult, ListMemoriesOptions, ListMemoriesResult, Memory, PushOptions, RecallOptions, RecallResult } from "../types.js";
2
+ import type { RequestFn } from "../transport.js";
3
+ export declare class MemoriesResource {
4
+ private readonly req;
5
+ constructor(req: RequestFn);
6
+ push(content: string, options?: PushOptions): Promise<Memory>;
7
+ recall(query: string, options?: RecallOptions): Promise<RecallResult>;
8
+ ask(query: string, options?: AskOptions): Promise<AskResult>;
9
+ list(options?: ListMemoriesOptions): Promise<ListMemoriesResult>;
10
+ get(id: string): Promise<Memory>;
11
+ delete(id: string): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=memories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memories.d.ts","sourceRoot":"","sources":["../../src/resources/memories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,EACN,WAAW,EACX,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAErC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB7D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBrE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAW5D,IAAI,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0BhE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxC"}
@@ -0,0 +1,73 @@
1
+ export class MemoriesResource {
2
+ req;
3
+ constructor(req) {
4
+ this.req = req;
5
+ }
6
+ async push(content, options) {
7
+ return this.req("POST", "/v1/memories", {
8
+ body: {
9
+ content,
10
+ title: options?.title ?? "",
11
+ hint: options?.hint ?? "",
12
+ category: options?.category ?? "",
13
+ tags: options?.tags ?? [],
14
+ source: options?.source ?? "sdk",
15
+ source_path: options?.sourcePath,
16
+ content_type: options?.contentType ?? "markdown",
17
+ project_context: options?.projectContext,
18
+ },
19
+ hubId: options?.hubId,
20
+ });
21
+ }
22
+ async recall(query, options) {
23
+ return this.req("POST", "/v1/recall", {
24
+ body: {
25
+ query,
26
+ limit: options?.limit ?? 5,
27
+ category: options?.category,
28
+ tags: options?.tags,
29
+ include_archived: options?.includeArchived,
30
+ source: options?.source ?? "sdk",
31
+ working_dir: options?.workingDir,
32
+ project_context: options?.projectContext,
33
+ },
34
+ hubId: options?.hubId,
35
+ });
36
+ }
37
+ async ask(query, options) {
38
+ return this.req("POST", "/v1/ask", {
39
+ body: {
40
+ query,
41
+ limit: options?.limit ?? 10,
42
+ model: options?.model ?? "auto",
43
+ locale: options?.locale,
44
+ },
45
+ });
46
+ }
47
+ async list(options) {
48
+ const res = await this.req("GET", "/v1/memories", {
49
+ query: {
50
+ limit: options?.limit,
51
+ cursor: options?.cursor,
52
+ sort: options?.sort,
53
+ },
54
+ hubId: options?.hubId,
55
+ });
56
+ if (Array.isArray(res)) {
57
+ return {
58
+ memories: res,
59
+ next_cursor: "",
60
+ has_more: false,
61
+ total: res.length,
62
+ };
63
+ }
64
+ return res;
65
+ }
66
+ async get(id) {
67
+ return this.req("GET", `/v1/memories/${id}`);
68
+ }
69
+ async delete(id) {
70
+ await this.req("DELETE", `/v1/memories/${id}`);
71
+ }
72
+ }
73
+ //# sourceMappingURL=memories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memories.js","sourceRoot":"","sources":["../../src/resources/memories.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAE/C,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,OAAqB;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAS,MAAM,EAAE,cAAc,EAAE;YAC9C,IAAI,EAAE;gBACJ,OAAO;gBACP,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;gBAC3B,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE;gBACzB,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE;gBACjC,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE;gBACzB,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK;gBAChC,WAAW,EAAE,OAAO,EAAE,UAAU;gBAChC,YAAY,EAAE,OAAO,EAAE,WAAW,IAAI,UAAU;gBAChD,eAAe,EAAE,OAAO,EAAE,cAAc;aACzC;YACD,KAAK,EAAE,OAAO,EAAE,KAAK;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAuB;QACjD,OAAO,IAAI,CAAC,GAAG,CAAe,MAAM,EAAE,YAAY,EAAE;YAClD,IAAI,EAAE;gBACJ,KAAK;gBACL,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;gBAC1B,QAAQ,EAAE,OAAO,EAAE,QAAQ;gBAC3B,IAAI,EAAE,OAAO,EAAE,IAAI;gBACnB,gBAAgB,EAAE,OAAO,EAAE,eAAe;gBAC1C,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK;gBAChC,WAAW,EAAE,OAAO,EAAE,UAAU;gBAChC,eAAe,EAAE,OAAO,EAAE,cAAc;aACzC;YACD,KAAK,EAAE,OAAO,EAAE,KAAK;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAa,EAAE,OAAoB;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAY,MAAM,EAAE,SAAS,EAAE;YAC5C,IAAI,EAAE;gBACJ,KAAK;gBACL,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;gBAC3B,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,MAAM;gBAC/B,MAAM,EAAE,OAAO,EAAE,MAAM;aACxB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAA6B;QACtC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CACxB,KAAK,EACL,cAAc,EACd;YACE,KAAK,EAAE;gBACL,KAAK,EAAE,OAAO,EAAE,KAAK;gBACrB,MAAM,EAAE,OAAO,EAAE,MAAM;gBACvB,IAAI,EAAE,OAAO,EAAE,IAAI;aACpB;YACD,KAAK,EAAE,OAAO,EAAE,KAAK;SACtB,CACF,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,QAAQ,EAAE,GAAG;gBACb,WAAW,EAAE,EAAE;gBACf,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,GAAG,CAAC,MAAM;aAClB,CAAC;QACJ,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,GAAG,CAAS,KAAK,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,IAAI,CAAC,GAAG,CAAO,QAAQ,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { Settings } from "../types.js";
2
+ import type { RequestFn } from "../transport.js";
3
+ export declare class SettingsResource {
4
+ private readonly req;
5
+ constructor(req: RequestFn);
6
+ get(): Promise<Settings>;
7
+ }
8
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/resources/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAErC,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;CAG/B"}
@@ -0,0 +1,10 @@
1
+ export class SettingsResource {
2
+ req;
3
+ constructor(req) {
4
+ this.req = req;
5
+ }
6
+ async get() {
7
+ return this.req("GET", "/v1/settings");
8
+ }
9
+ }
10
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/resources/settings.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAE/C,KAAK,CAAC,GAAG;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import type { Topic, TopicCreateParams, TopicListResponse, TopicMemoriesResponse, TopicReorderOperation, TopicUpdateParams } from "../types.js";
2
+ import type { RequestFn } from "../transport.js";
3
+ export declare class TopicsResource {
4
+ private readonly req;
5
+ constructor(req: RequestFn);
6
+ list(hubId?: string): Promise<TopicListResponse>;
7
+ get(id: string): Promise<Topic>;
8
+ create(params: TopicCreateParams): Promise<Topic>;
9
+ update(id: string, params: TopicUpdateParams): Promise<Topic>;
10
+ delete(id: string): Promise<void>;
11
+ listMemories(topicId: string, options?: {
12
+ limit?: number;
13
+ cursor?: string;
14
+ }): Promise<TopicMemoriesResponse>;
15
+ addMemory(topicId: string, memoryId: string, confidence?: number): Promise<void>;
16
+ removeMemory(topicId: string, memoryId: string): Promise<void>;
17
+ reorder(operations: TopicReorderOperation[]): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=topics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topics.d.ts","sourceRoot":"","sources":["../../src/resources/topics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAErC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAMhD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAI/B,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAIjD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAI7D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,qBAAqB,CAAC;IAa3B,SAAS,CACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAMV,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9D,OAAO,CAAC,UAAU,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAKlE"}
@@ -0,0 +1,45 @@
1
+ export class TopicsResource {
2
+ req;
3
+ constructor(req) {
4
+ this.req = req;
5
+ }
6
+ async list(hubId) {
7
+ return this.req("GET", "/v1/topics", {
8
+ query: { hub_id: hubId },
9
+ });
10
+ }
11
+ async get(id) {
12
+ return this.req("GET", `/v1/topics/${id}`);
13
+ }
14
+ async create(params) {
15
+ return this.req("POST", "/v1/topics", { body: params });
16
+ }
17
+ async update(id, params) {
18
+ return this.req("PATCH", `/v1/topics/${id}`, { body: params });
19
+ }
20
+ async delete(id) {
21
+ await this.req("DELETE", `/v1/topics/${id}`);
22
+ }
23
+ async listMemories(topicId, options) {
24
+ return this.req("GET", `/v1/topics/${topicId}/memories`, {
25
+ query: {
26
+ limit: options?.limit,
27
+ cursor: options?.cursor,
28
+ },
29
+ });
30
+ }
31
+ async addMemory(topicId, memoryId, confidence) {
32
+ await this.req("POST", `/v1/topics/${topicId}/memories`, {
33
+ body: { memory_id: memoryId, ...(confidence != null && { confidence }) },
34
+ });
35
+ }
36
+ async removeMemory(topicId, memoryId) {
37
+ await this.req("DELETE", `/v1/topics/${topicId}/memories/${memoryId}`);
38
+ }
39
+ async reorder(operations) {
40
+ await this.req("POST", "/v1/topics/reorder", {
41
+ body: { operations },
42
+ });
43
+ }
44
+ }
45
+ //# sourceMappingURL=topics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topics.js","sourceRoot":"","sources":["../../src/resources/topics.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAE/C,KAAK,CAAC,IAAI,CAAC,KAAc;QACvB,OAAO,IAAI,CAAC,GAAG,CAAoB,KAAK,EAAE,YAAY,EAAE;YACtD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;SACzB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,GAAG,CAAQ,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAyB;QACpC,OAAO,IAAI,CAAC,GAAG,CAAQ,MAAM,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,MAAyB;QAChD,OAAO,IAAI,CAAC,GAAG,CAAQ,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,IAAI,CAAC,GAAG,CAAO,QAAQ,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,OAAe,EACf,OAA6C;QAE7C,OAAO,IAAI,CAAC,GAAG,CACb,KAAK,EACL,cAAc,OAAO,WAAW,EAChC;YACE,KAAK,EAAE;gBACL,KAAK,EAAE,OAAO,EAAE,KAAK;gBACrB,MAAM,EAAE,OAAO,EAAE,MAAM;aACxB;SACF,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAe,EACf,QAAgB,EAChB,UAAmB;QAEnB,MAAM,IAAI,CAAC,GAAG,CAAO,MAAM,EAAE,cAAc,OAAO,WAAW,EAAE;YAC7D,IAAI,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE;SACzE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,QAAgB;QAClD,MAAM,IAAI,CAAC,GAAG,CACZ,QAAQ,EACR,cAAc,OAAO,aAAa,QAAQ,EAAE,CAC7C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAmC;QAC/C,MAAM,IAAI,CAAC,GAAG,CAAO,MAAM,EAAE,oBAAoB,EAAE;YACjD,IAAI,EAAE,EAAE,UAAU,EAAE;SACrB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import type { MemaxConfig } from "./types.js";
2
+ export interface RequestOptions {
3
+ body?: unknown;
4
+ hubId?: string;
5
+ query?: Record<string, string | number | boolean | null | undefined>;
6
+ }
7
+ export type RequestFn = <T>(method: string, path: string, options?: RequestOptions) => Promise<T>;
8
+ export declare class ApiTransport {
9
+ private readonly apiUrl;
10
+ private readonly getAuth;
11
+ private readonly fetchImpl;
12
+ private readonly headers;
13
+ private readonly maxRetries;
14
+ private readonly retryDelayMs;
15
+ constructor(config: MemaxConfig);
16
+ request<T>(method: string, path: string, options?: RequestOptions): Promise<T>;
17
+ }
18
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAO9C,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CACtE;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,cAAc,KACrB,OAAO,CAAC,CAAC,CAAC,CAAC;AA4ChB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAChE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,MAAM,EAAE,WAAW;IASzB,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,CAAC,CAAC;CA6Ed"}
@@ -0,0 +1,107 @@
1
+ import { MemaxError } from "./errors.js";
2
+ const DEFAULT_API_URL = "https://api.memax.app";
3
+ const DEFAULT_MAX_RETRIES = 2;
4
+ const DEFAULT_RETRY_DELAY_MS = 1500;
5
+ function resolveFetch(config) {
6
+ if (config.fetch) {
7
+ return config.fetch;
8
+ }
9
+ if (typeof globalThis.fetch !== "function") {
10
+ throw new Error("Fetch is not available in this runtime. Pass `fetch` in MemaxConfig.");
11
+ }
12
+ return globalThis.fetch.bind(globalThis);
13
+ }
14
+ function createAuthProvider(config) {
15
+ if (config.auth) {
16
+ return config.auth;
17
+ }
18
+ if (config.apiKey) {
19
+ const key = config.apiKey;
20
+ return async () => ({ Authorization: `Bearer ${key}` });
21
+ }
22
+ return async () => ({});
23
+ }
24
+ function buildQueryString(query) {
25
+ if (!query) {
26
+ return "";
27
+ }
28
+ const params = new URLSearchParams();
29
+ for (const [key, value] of Object.entries(query)) {
30
+ if (value == null) {
31
+ continue;
32
+ }
33
+ params.set(key, String(value));
34
+ }
35
+ const encoded = params.toString();
36
+ return encoded ? `?${encoded}` : "";
37
+ }
38
+ export class ApiTransport {
39
+ apiUrl;
40
+ getAuth;
41
+ fetchImpl;
42
+ headers;
43
+ maxRetries;
44
+ retryDelayMs;
45
+ constructor(config) {
46
+ this.apiUrl = (config.apiUrl ?? DEFAULT_API_URL).replace(/\/$/, "");
47
+ this.getAuth = createAuthProvider(config);
48
+ this.fetchImpl = resolveFetch(config);
49
+ this.headers = config.headers ?? {};
50
+ this.maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES;
51
+ this.retryDelayMs = config.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;
52
+ }
53
+ async request(method, path, options) {
54
+ const url = `${this.apiUrl}${path}${buildQueryString(options?.query)}`;
55
+ let lastErr;
56
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
57
+ const authHeaders = await this.getAuth();
58
+ const headers = {
59
+ "Content-Type": "application/json",
60
+ ...this.headers,
61
+ ...authHeaders,
62
+ };
63
+ if (options?.hubId) {
64
+ headers["X-Hub-ID"] = options.hubId;
65
+ }
66
+ let res;
67
+ try {
68
+ res = await this.fetchImpl(url, {
69
+ method,
70
+ headers,
71
+ body: options?.body !== undefined
72
+ ? JSON.stringify(options.body)
73
+ : undefined,
74
+ });
75
+ }
76
+ catch {
77
+ throw new MemaxError(`Cannot reach API at ${url} — is the server running?`, "network_error", 0);
78
+ }
79
+ const text = await res.text();
80
+ if (!text && res.ok) {
81
+ return undefined;
82
+ }
83
+ let json;
84
+ try {
85
+ json = JSON.parse(text);
86
+ }
87
+ catch {
88
+ if (res.status === 401) {
89
+ throw new MemaxError("Not authenticated — run `memax login` first", "unauthorized", 401);
90
+ }
91
+ throw new MemaxError(`API returned ${res.status} with non-JSON response`, "invalid_response", res.status);
92
+ }
93
+ if (json.error) {
94
+ const err = new MemaxError(json.error.message, json.error.code, res.status);
95
+ if (json.error.code === "not_ready" && attempt < this.maxRetries) {
96
+ lastErr = err;
97
+ await new Promise((resolve) => setTimeout(resolve, this.retryDelayMs));
98
+ continue;
99
+ }
100
+ throw err;
101
+ }
102
+ return json.data;
103
+ }
104
+ throw lastErr;
105
+ }
106
+ }
107
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transport.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.test.d.ts","sourceRoot":"","sources":["../src/transport.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,70 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { ApiTransport } from "./transport.js";
3
+ function jsonResponse(body, init) {
4
+ return new Response(JSON.stringify(body), {
5
+ status: 200,
6
+ headers: { "Content-Type": "application/json" },
7
+ ...init,
8
+ });
9
+ }
10
+ describe("ApiTransport", () => {
11
+ it("uses apiKey auth and merges query params", async () => {
12
+ const fetchMock = vi.fn(async () => jsonResponse({ data: { ok: true } }));
13
+ const transport = new ApiTransport({
14
+ apiUrl: "https://api.memax.app/",
15
+ apiKey: "test-key",
16
+ fetch: fetchMock,
17
+ headers: { "X-Test": "1" },
18
+ });
19
+ await transport.request("GET", "/v1/test", {
20
+ query: { a: 1, b: "two", skip: undefined },
21
+ hubId: "hub-1",
22
+ });
23
+ expect(fetchMock).toHaveBeenCalledWith("https://api.memax.app/v1/test?a=1&b=two", expect.objectContaining({
24
+ method: "GET",
25
+ headers: expect.objectContaining({
26
+ Authorization: "Bearer test-key",
27
+ "X-Hub-ID": "hub-1",
28
+ "X-Test": "1",
29
+ "Content-Type": "application/json",
30
+ }),
31
+ }));
32
+ });
33
+ it("returns undefined for empty successful responses", async () => {
34
+ const fetchMock = vi.fn(async () => new Response(null, { status: 204 }));
35
+ const transport = new ApiTransport({ fetch: fetchMock });
36
+ await expect(transport.request("DELETE", "/v1/test")).resolves.toBeUndefined();
37
+ });
38
+ it("retries not_ready responses", async () => {
39
+ const fetchMock = vi
40
+ .fn()
41
+ .mockResolvedValueOnce(jsonResponse({ error: { code: "not_ready", message: "warming up" } }, { status: 503 }))
42
+ .mockResolvedValueOnce(jsonResponse({ data: { ok: true } }));
43
+ const transport = new ApiTransport({
44
+ fetch: fetchMock,
45
+ maxRetries: 1,
46
+ retryDelayMs: 0,
47
+ });
48
+ await expect(transport.request("GET", "/v1/test")).resolves.toEqual({ ok: true });
49
+ expect(fetchMock).toHaveBeenCalledTimes(2);
50
+ });
51
+ it("maps unauthorized non-json responses", async () => {
52
+ const fetchMock = vi.fn(async () => new Response("unauthorized", { status: 401 }));
53
+ const transport = new ApiTransport({ fetch: fetchMock });
54
+ await expect(transport.request("GET", "/v1/test")).rejects.toMatchObject({
55
+ code: "unauthorized",
56
+ status: 401,
57
+ });
58
+ });
59
+ it("throws network_error when fetch fails", async () => {
60
+ const fetchMock = vi.fn(async () => {
61
+ throw new Error("boom");
62
+ });
63
+ const transport = new ApiTransport({ fetch: fetchMock });
64
+ await expect(transport.request("GET", "/v1/test")).rejects.toMatchObject({
65
+ code: "network_error",
66
+ status: 0,
67
+ });
68
+ });
69
+ });
70
+ //# sourceMappingURL=transport.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.test.js","sourceRoot":"","sources":["../src/transport.test.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -10,9 +10,19 @@ export interface MemaxConfig {
10
10
  apiKey?: string;
11
11
  /** Dynamic auth provider — for CLI/custom integrations that manage tokens */
12
12
  auth?: AuthProvider;
13
+ /** Custom fetch implementation for Node, tests, SSR, or edge runtimes */
14
+ fetch?: typeof globalThis.fetch;
15
+ /** Default headers applied to every request before auth headers */
16
+ headers?: Record<string, string>;
17
+ /** Number of retries for retryable API responses like `not_ready` */
18
+ maxRetries?: number;
19
+ /** Delay between retry attempts in milliseconds */
20
+ retryDelayMs?: number;
13
21
  }
14
22
  export interface PushOptions {
15
23
  title?: string;
24
+ /** Context hint to help AI process this memory (e.g. "This is my resume"). Improves categorization, summarization, and retrieval. */
25
+ hint?: string;
16
26
  category?: string;
17
27
  tags?: string[];
18
28
  source?: string;
@@ -48,6 +58,7 @@ export interface Memory {
48
58
  content: string;
49
59
  content_type: string;
50
60
  summary: string;
61
+ hint?: string;
51
62
  category: string;
52
63
  tags: string[];
53
64
  boundary: string;
@@ -57,6 +68,7 @@ export interface Memory {
57
68
  version: number;
58
69
  access_count: number;
59
70
  project_context?: Record<string, string>;
71
+ topic_ids?: string[];
60
72
  created_at: string;
61
73
  updated_at: string;
62
74
  }
@@ -64,6 +76,7 @@ export interface RecalledMemory {
64
76
  id: string;
65
77
  title: string;
66
78
  summary?: string;
79
+ hint?: string;
67
80
  chunk_content: string;
68
81
  heading_chain: string;
69
82
  relevance_score: number;
@@ -72,6 +85,8 @@ export interface RecalledMemory {
72
85
  age: string;
73
86
  hub_id?: string;
74
87
  hub_name?: string;
88
+ topic_ids?: string[];
89
+ topic_names?: string[];
75
90
  }
76
91
  export interface RecallResult {
77
92
  memories: RecalledMemory[];
@@ -117,7 +132,7 @@ export interface AgentConfig {
117
132
  created_at: string;
118
133
  updated_at: string;
119
134
  }
120
- export type SyncAction = "unchanged" | "push" | "pull" | "conflict";
135
+ export type SyncAction = "unchanged" | "push" | "pull" | "conflict" | "delete_local";
121
136
  export interface SyncPlanAction {
122
137
  action: SyncAction;
123
138
  agent: string;
@@ -127,6 +142,7 @@ export interface SyncPlanAction {
127
142
  config_id?: string;
128
143
  cloud_hash?: string;
129
144
  cloud_updated_at?: string;
145
+ version?: number;
130
146
  }
131
147
  export interface SyncManifestEntry {
132
148
  agent: string;
@@ -134,12 +150,39 @@ export interface SyncManifestEntry {
134
150
  scope: string;
135
151
  content_hash: string;
136
152
  updated_at: string;
153
+ local_path?: string;
154
+ }
155
+ export interface ConfigSyncRequest {
156
+ device_id: string;
157
+ configs: SyncManifestEntry[];
158
+ }
159
+ export interface AgentConfigSyncAck {
160
+ agent: string;
161
+ file_path: string;
162
+ scope: string;
163
+ content_hash?: string;
164
+ version: number;
165
+ local_path?: string;
166
+ deleted?: boolean;
167
+ }
168
+ export interface ConfigSyncAckRequest {
169
+ device_id: string;
170
+ configs: AgentConfigSyncAck[];
171
+ }
172
+ export interface ConfigLocalDeleteRequest {
173
+ device_id: string;
174
+ agent: string;
175
+ file_path: string;
176
+ scope: string;
177
+ local_path?: string;
137
178
  }
138
179
  export interface ConfigUpsertRequest {
139
180
  agent: string;
140
181
  file_path: string;
141
182
  scope: string;
142
183
  content: string;
184
+ device_id?: string;
185
+ local_path?: string;
143
186
  }
144
187
  export interface ConfigMergeRequest {
145
188
  local_content: string;
@@ -217,8 +260,51 @@ export interface Settings {
217
260
  active_hub_id?: string;
218
261
  [key: string]: unknown;
219
262
  }
220
- /** @deprecated Use Memory instead */
221
- export type Note = Memory;
222
- /** @deprecated Use RecalledMemory instead */
223
- export type RecalledNote = RecalledMemory;
263
+ export interface Topic {
264
+ id: string;
265
+ owner_id: string;
266
+ hub_id?: string;
267
+ parent_id: string | null;
268
+ name: string;
269
+ description?: string;
270
+ icon: string;
271
+ position: number;
272
+ pinned: boolean;
273
+ user_modified: boolean;
274
+ created_at: string;
275
+ updated_at: string;
276
+ }
277
+ export interface TopicTree extends Topic {
278
+ memory_count: number;
279
+ children: TopicTree[];
280
+ }
281
+ export interface TopicListResponse {
282
+ topics: TopicTree[];
283
+ unassigned_count: number;
284
+ }
285
+ export interface TopicCreateParams {
286
+ name: string;
287
+ description?: string;
288
+ icon?: string;
289
+ parent_id?: string;
290
+ hub_id?: string;
291
+ }
292
+ export interface TopicUpdateParams {
293
+ name?: string;
294
+ description?: string;
295
+ icon?: string;
296
+ position?: number;
297
+ parent_id?: string | null;
298
+ pinned?: boolean;
299
+ }
300
+ export interface TopicReorderOperation {
301
+ topic_id: string;
302
+ position: number;
303
+ parent_id?: string | null;
304
+ }
305
+ export interface TopicMemoriesResponse {
306
+ memories: Memory[];
307
+ next_cursor: string;
308
+ has_more: boolean;
309
+ }
224
310
  //# sourceMappingURL=types.d.ts.map