memax-sdk 0.1.1 → 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.
- package/dist/client.d.ts +15 -95
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +21 -273
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +11 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/resources/auth.d.ts +11 -0
- package/dist/resources/auth.d.ts.map +1 -0
- package/dist/resources/auth.js +25 -0
- package/dist/resources/auth.js.map +1 -0
- package/dist/resources/configs.d.ts +23 -0
- package/dist/resources/configs.d.ts.map +1 -0
- package/dist/resources/configs.js +33 -0
- package/dist/resources/configs.js.map +1 -0
- package/dist/resources/hubs.d.ts +10 -0
- package/dist/resources/hubs.d.ts.map +1 -0
- package/dist/resources/hubs.js +16 -0
- package/dist/resources/hubs.js.map +1 -0
- package/dist/resources/memories.d.ts +13 -0
- package/dist/resources/memories.d.ts.map +1 -0
- package/dist/resources/memories.js +73 -0
- package/dist/resources/memories.js.map +1 -0
- package/dist/resources/settings.d.ts +8 -0
- package/dist/resources/settings.d.ts.map +1 -0
- package/dist/resources/settings.js +10 -0
- package/dist/resources/settings.js.map +1 -0
- package/dist/resources/topics.d.ts +19 -0
- package/dist/resources/topics.d.ts.map +1 -0
- package/dist/resources/topics.js +45 -0
- package/dist/resources/topics.js.map +1 -0
- package/dist/transport.d.ts +18 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +107 -0
- package/dist/transport.js.map +1 -0
- package/dist/transport.test.d.ts +2 -0
- package/dist/transport.test.d.ts.map +1 -0
- package/dist/transport.test.js +70 -0
- package/dist/transport.test.js.map +1 -0
- package/dist/types.d.ts +91 -5
- package/dist/types.d.ts.map +1 -1
- 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 @@
|
|
|
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 @@
|
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,SAAS,YAAY,CAAC,IAAa,EAAE,IAAmB;IACtD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,GAAG,IAAI;KACR,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC;YACjC,MAAM,EAAE,wBAAwB;YAChC,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;SAC3B,CAAC,CAAC;QAEH,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE;YACzC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;YAC1C,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACpC,yCAAyC,EACzC,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC;gBAC/B,aAAa,EAAE,iBAAiB;gBAChC,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,GAAG;gBACb,cAAc,EAAE,kBAAkB;aACnC,CAAC;SACH,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAEzD,MAAM,MAAM,CACV,SAAS,CAAC,OAAO,CAAO,QAAQ,EAAE,UAAU,CAAC,CAC9C,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,SAAS,GAAG,EAAE;aACjB,EAAE,EAAE;aACJ,qBAAqB,CACpB,YAAY,CACV,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EACvD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CACF;aACA,qBAAqB,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC;YACjC,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,CAAC;SAChB,CAAC,CAAC;QAEH,MAAM,MAAM,CACV,SAAS,CAAC,OAAO,CAAkB,KAAK,EAAE,UAAU,CAAC,CACtD,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CACrB,KAAK,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAC1D,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAEzD,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;YACvE,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,GAAG;SACkB,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAEzD,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;YACvE,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,CAAC;SACoB,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
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
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
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
|