@memoraone/mcp 0.1.19 → 0.1.21
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/cli.cjs +323 -14
- package/dist/daemon.cjs +296 -101
- package/dist/index.cjs +296 -101
- package/package.json +1 -1
package/dist/daemon.cjs
CHANGED
|
@@ -551,80 +551,106 @@ var postEventShape = {
|
|
|
551
551
|
metadata: import_v42.z.record(import_v42.z.string(), import_v42.z.any()).optional()
|
|
552
552
|
};
|
|
553
553
|
|
|
554
|
-
// src/tools/
|
|
554
|
+
// src/tools/createFact.ts
|
|
555
555
|
var import_v43 = require("zod/v4");
|
|
556
|
+
var createFactShape = {
|
|
557
|
+
content: import_v43.z.string().min(1).describe("Explicit fact text to persist for the current project"),
|
|
558
|
+
metadata: import_v43.z.record(import_v43.z.string(), import_v43.z.any()).optional()
|
|
559
|
+
};
|
|
560
|
+
|
|
561
|
+
// src/tools/addPersonalContext.ts
|
|
562
|
+
var import_v44 = require("zod/v4");
|
|
563
|
+
var addPersonalContextShape = {
|
|
564
|
+
content: import_v44.z.string().min(1).describe("Text to store (note, preference, or similar)"),
|
|
565
|
+
category: import_v44.z.string().optional().describe("Optional category label"),
|
|
566
|
+
tags: import_v44.z.array(import_v44.z.string()).optional().describe("Optional tags"),
|
|
567
|
+
scope_type: import_v44.z.enum(["general", "project"]).optional(),
|
|
568
|
+
scope_id: import_v44.z.string().optional()
|
|
569
|
+
};
|
|
570
|
+
|
|
571
|
+
// src/tools/getPersonalContext.ts
|
|
572
|
+
var import_v45 = require("zod/v4");
|
|
573
|
+
var getPersonalContextShape = {
|
|
574
|
+
query: import_v45.z.string().optional().describe("Search query; sent as q when set"),
|
|
575
|
+
scope_type: import_v45.z.enum(["general", "project"]).optional(),
|
|
576
|
+
scope_id: import_v45.z.string().optional(),
|
|
577
|
+
limit: import_v45.z.number().int().positive().optional().describe("Max items to return")
|
|
578
|
+
};
|
|
579
|
+
|
|
580
|
+
// src/tools/askWithMemory.ts
|
|
581
|
+
var import_v46 = require("zod/v4");
|
|
556
582
|
var askWithMemoryShape = {
|
|
557
|
-
question:
|
|
558
|
-
code_context:
|
|
559
|
-
file_path:
|
|
560
|
-
selected_text:
|
|
561
|
-
language:
|
|
583
|
+
question: import_v46.z.string().min(1),
|
|
584
|
+
code_context: import_v46.z.object({
|
|
585
|
+
file_path: import_v46.z.string().optional(),
|
|
586
|
+
selected_text: import_v46.z.string().optional(),
|
|
587
|
+
language: import_v46.z.string().optional()
|
|
562
588
|
}).optional()
|
|
563
589
|
};
|
|
564
590
|
|
|
565
591
|
// src/tools/logIntent.ts
|
|
566
|
-
var
|
|
592
|
+
var import_v47 = require("zod/v4");
|
|
567
593
|
var logIntentShape = {
|
|
568
|
-
intent:
|
|
569
|
-
message:
|
|
570
|
-
context:
|
|
571
|
-
intent_source:
|
|
572
|
-
run_id:
|
|
594
|
+
intent: import_v47.z.enum(["task", "decision"]),
|
|
595
|
+
message: import_v47.z.string().min(1),
|
|
596
|
+
context: import_v47.z.record(import_v47.z.string(), import_v47.z.any()).optional(),
|
|
597
|
+
intent_source: import_v47.z.string().optional().default("cursor_chat"),
|
|
598
|
+
run_id: import_v47.z.string().min(1).optional()
|
|
573
599
|
};
|
|
574
600
|
|
|
575
601
|
// src/tools/logChangeSummary.ts
|
|
576
|
-
var
|
|
602
|
+
var import_v48 = require("zod/v4");
|
|
577
603
|
var logChangeSummaryShape = {
|
|
578
|
-
summary:
|
|
579
|
-
scope:
|
|
580
|
-
files:
|
|
581
|
-
stats:
|
|
582
|
-
files:
|
|
583
|
-
add:
|
|
584
|
-
del:
|
|
604
|
+
summary: import_v48.z.string().min(1),
|
|
605
|
+
scope: import_v48.z.string().min(1).optional(),
|
|
606
|
+
files: import_v48.z.array(import_v48.z.string().min(1)).optional(),
|
|
607
|
+
stats: import_v48.z.object({
|
|
608
|
+
files: import_v48.z.number().int().nonnegative().optional(),
|
|
609
|
+
add: import_v48.z.number().int().nonnegative().optional(),
|
|
610
|
+
del: import_v48.z.number().int().nonnegative().optional()
|
|
585
611
|
}).optional(),
|
|
586
|
-
commit:
|
|
587
|
-
run_id:
|
|
612
|
+
commit: import_v48.z.string().min(1).optional(),
|
|
613
|
+
run_id: import_v48.z.string().min(1).optional()
|
|
588
614
|
};
|
|
589
615
|
|
|
590
616
|
// src/tools/logToolResult.ts
|
|
591
|
-
var
|
|
617
|
+
var import_v49 = require("zod/v4");
|
|
592
618
|
var logToolResultShape = {
|
|
593
|
-
tool:
|
|
594
|
-
status:
|
|
595
|
-
summary:
|
|
596
|
-
run_id:
|
|
597
|
-
duration_ms:
|
|
598
|
-
error_code:
|
|
599
|
-
error_message:
|
|
600
|
-
error_kind:
|
|
601
|
-
stats:
|
|
619
|
+
tool: import_v49.z.string().min(1),
|
|
620
|
+
status: import_v49.z.enum(["ok", "error", "partial"]),
|
|
621
|
+
summary: import_v49.z.string().min(1),
|
|
622
|
+
run_id: import_v49.z.string().min(1).optional(),
|
|
623
|
+
duration_ms: import_v49.z.number().int().nonnegative().optional(),
|
|
624
|
+
error_code: import_v49.z.string().min(1).optional(),
|
|
625
|
+
error_message: import_v49.z.string().min(1).optional(),
|
|
626
|
+
error_kind: import_v49.z.enum(["infra", "logic", "auth", "rate_limit", "validation", "unknown"]).optional(),
|
|
627
|
+
stats: import_v49.z.record(import_v49.z.string(), import_v49.z.any()).optional()
|
|
602
628
|
};
|
|
603
629
|
|
|
604
630
|
// src/tools/logCommand.ts
|
|
605
|
-
var
|
|
631
|
+
var import_v410 = require("zod/v4");
|
|
606
632
|
var logCommandShape = {
|
|
607
|
-
cmd:
|
|
608
|
-
summary:
|
|
609
|
-
cwd:
|
|
610
|
-
exit_code:
|
|
611
|
-
duration_ms:
|
|
612
|
-
run_id:
|
|
613
|
-
stats:
|
|
633
|
+
cmd: import_v410.z.string().min(1),
|
|
634
|
+
summary: import_v410.z.string().min(1),
|
|
635
|
+
cwd: import_v410.z.string().min(1).optional(),
|
|
636
|
+
exit_code: import_v410.z.number().int().optional(),
|
|
637
|
+
duration_ms: import_v410.z.number().int().nonnegative().optional(),
|
|
638
|
+
run_id: import_v410.z.string().min(1).optional(),
|
|
639
|
+
stats: import_v410.z.record(import_v410.z.string(), import_v410.z.any()).optional()
|
|
614
640
|
};
|
|
615
641
|
|
|
616
642
|
// src/tools/listProjects.ts
|
|
617
643
|
var listProjectsShape = {};
|
|
618
644
|
|
|
619
645
|
// src/tools/setProject.ts
|
|
620
|
-
var
|
|
646
|
+
var import_v411 = require("zod/v4");
|
|
621
647
|
var setProjectShape = {
|
|
622
|
-
projectKey:
|
|
623
|
-
projectId:
|
|
648
|
+
projectKey: import_v411.z.string().min(1).optional(),
|
|
649
|
+
projectId: import_v411.z.string().min(1).optional()
|
|
624
650
|
};
|
|
625
651
|
|
|
626
652
|
// src/tools/handlers/postEvent.ts
|
|
627
|
-
var
|
|
653
|
+
var import_v412 = require("zod/v4");
|
|
628
654
|
var crypto3 = __toESM(require("crypto"), 1);
|
|
629
655
|
|
|
630
656
|
// src/runContext.ts
|
|
@@ -686,14 +712,14 @@ function generateRunId() {
|
|
|
686
712
|
}
|
|
687
713
|
|
|
688
714
|
// src/tools/handlers/postEvent.ts
|
|
689
|
-
var postEventInputSchema =
|
|
690
|
-
kind:
|
|
691
|
-
actor:
|
|
692
|
-
identifier:
|
|
693
|
-
id:
|
|
715
|
+
var postEventInputSchema = import_v412.z.object({
|
|
716
|
+
kind: import_v412.z.string().min(1),
|
|
717
|
+
actor: import_v412.z.object({
|
|
718
|
+
identifier: import_v412.z.string().min(1),
|
|
719
|
+
id: import_v412.z.string().min(1).optional()
|
|
694
720
|
}),
|
|
695
|
-
content:
|
|
696
|
-
metadata:
|
|
721
|
+
content: import_v412.z.record(import_v412.z.string(), import_v412.z.any()),
|
|
722
|
+
metadata: import_v412.z.record(import_v412.z.string(), import_v412.z.any()).optional()
|
|
697
723
|
});
|
|
698
724
|
async function handlePostEvent(client, args) {
|
|
699
725
|
const nonce = crypto3.randomBytes(8).toString("hex");
|
|
@@ -735,14 +761,144 @@ async function handlePostEvent(client, args) {
|
|
|
735
761
|
return { ok: true, forwarded: true };
|
|
736
762
|
}
|
|
737
763
|
|
|
764
|
+
// src/tools/handlers/createFact.ts
|
|
765
|
+
var import_v413 = require("zod/v4");
|
|
766
|
+
var createFactInputSchema = import_v413.z.object({
|
|
767
|
+
content: import_v413.z.string().min(1),
|
|
768
|
+
metadata: import_v413.z.record(import_v413.z.string(), import_v413.z.any()).optional()
|
|
769
|
+
});
|
|
770
|
+
async function handleCreateFact(client, args) {
|
|
771
|
+
const parsed2 = createFactInputSchema.parse(args ?? {});
|
|
772
|
+
const projectKey = getCurrentProjectId();
|
|
773
|
+
if (!projectKey) {
|
|
774
|
+
throw new Error("No project selected. Use memora_list_projects and memora_set_project to select a project.");
|
|
775
|
+
}
|
|
776
|
+
const content = parsed2.content.trim();
|
|
777
|
+
if (!content) {
|
|
778
|
+
throw new Error("content cannot be empty after trimming");
|
|
779
|
+
}
|
|
780
|
+
const { tags: userTagsRaw, ...userMetaRest } = parsed2.metadata ?? {};
|
|
781
|
+
const userTags = Array.isArray(userTagsRaw) ? userTagsRaw.filter((t) => typeof t === "string") : [];
|
|
782
|
+
const tags = ["explicit_fact", ...userTags.filter((t) => t !== "explicit_fact")];
|
|
783
|
+
const body = {
|
|
784
|
+
projectKey,
|
|
785
|
+
content,
|
|
786
|
+
metadata: {
|
|
787
|
+
...userMetaRest,
|
|
788
|
+
source: "memoraone-mcp",
|
|
789
|
+
purpose: "explicit_fact",
|
|
790
|
+
schema: "v1",
|
|
791
|
+
tool: "memora_create_fact",
|
|
792
|
+
agent_identifier: config2.agentName,
|
|
793
|
+
tags
|
|
794
|
+
}
|
|
795
|
+
};
|
|
796
|
+
try {
|
|
797
|
+
const result = await client.post("/facts", body);
|
|
798
|
+
return { ok: true, result };
|
|
799
|
+
} catch (err) {
|
|
800
|
+
if (err instanceof MemoraOneHttpError) {
|
|
801
|
+
const bodyText = typeof err.body === "string" ? err.body : JSON.stringify(err.body ?? "");
|
|
802
|
+
throw new Error(
|
|
803
|
+
`memora_create_fact failed: ${err.status} ${err.message} ${bodyText}`.trim()
|
|
804
|
+
);
|
|
805
|
+
}
|
|
806
|
+
throw err;
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
// src/tools/handlers/addPersonalContext.ts
|
|
811
|
+
var import_v414 = require("zod/v4");
|
|
812
|
+
var addPersonalContextInputSchema = import_v414.z.object({
|
|
813
|
+
content: import_v414.z.string().min(1),
|
|
814
|
+
category: import_v414.z.string().optional(),
|
|
815
|
+
tags: import_v414.z.array(import_v414.z.string()).optional(),
|
|
816
|
+
scope_type: import_v414.z.enum(["general", "project"]).optional(),
|
|
817
|
+
scope_id: import_v414.z.string().optional()
|
|
818
|
+
});
|
|
819
|
+
async function handleAddPersonalContext(client, args) {
|
|
820
|
+
const parsed2 = addPersonalContextInputSchema.parse(args ?? {});
|
|
821
|
+
const content = parsed2.content.trim();
|
|
822
|
+
if (!content) {
|
|
823
|
+
throw new Error("content cannot be empty after trimming");
|
|
824
|
+
}
|
|
825
|
+
const body = { content };
|
|
826
|
+
if (parsed2.category !== void 0 && parsed2.category.trim() !== "") {
|
|
827
|
+
body.category = parsed2.category.trim();
|
|
828
|
+
}
|
|
829
|
+
if (parsed2.tags !== void 0 && parsed2.tags.length > 0) {
|
|
830
|
+
body.tags = parsed2.tags;
|
|
831
|
+
}
|
|
832
|
+
if (parsed2.scope_type !== void 0) {
|
|
833
|
+
body.scope_type = parsed2.scope_type;
|
|
834
|
+
}
|
|
835
|
+
if (parsed2.scope_id !== void 0 && parsed2.scope_id.trim() !== "") {
|
|
836
|
+
body.scope_id = parsed2.scope_id.trim();
|
|
837
|
+
}
|
|
838
|
+
try {
|
|
839
|
+
const result = await client.post("/v1/personal-context", body);
|
|
840
|
+
return { ok: true, result };
|
|
841
|
+
} catch (err) {
|
|
842
|
+
if (err instanceof MemoraOneHttpError) {
|
|
843
|
+
const bodyText = typeof err.body === "string" ? err.body : JSON.stringify(err.body ?? "");
|
|
844
|
+
throw new Error(
|
|
845
|
+
`memora_add_personal_context failed: ${err.status} ${err.message} ${bodyText}`.trim()
|
|
846
|
+
);
|
|
847
|
+
}
|
|
848
|
+
throw err;
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
// src/tools/handlers/getPersonalContext.ts
|
|
853
|
+
var import_v415 = require("zod/v4");
|
|
854
|
+
var getPersonalContextInputSchema = import_v415.z.object({
|
|
855
|
+
query: import_v415.z.string().optional(),
|
|
856
|
+
scope_type: import_v415.z.enum(["general", "project"]).optional(),
|
|
857
|
+
scope_id: import_v415.z.string().optional(),
|
|
858
|
+
limit: import_v415.z.number().int().positive().optional()
|
|
859
|
+
});
|
|
860
|
+
function buildPersonalContextPath(parsed2) {
|
|
861
|
+
const params = new URLSearchParams();
|
|
862
|
+
if (parsed2.query !== void 0 && parsed2.query.trim() !== "") {
|
|
863
|
+
params.set("q", parsed2.query.trim());
|
|
864
|
+
}
|
|
865
|
+
if (parsed2.scope_type !== void 0) {
|
|
866
|
+
params.set("scope_type", parsed2.scope_type);
|
|
867
|
+
}
|
|
868
|
+
if (parsed2.scope_id !== void 0 && parsed2.scope_id.trim() !== "") {
|
|
869
|
+
params.set("scope_id", parsed2.scope_id.trim());
|
|
870
|
+
}
|
|
871
|
+
if (parsed2.limit !== void 0) {
|
|
872
|
+
params.set("limit", String(parsed2.limit));
|
|
873
|
+
}
|
|
874
|
+
const qs = params.toString();
|
|
875
|
+
return qs ? `/v1/personal-context?${qs}` : "/v1/personal-context";
|
|
876
|
+
}
|
|
877
|
+
async function handleGetPersonalContext(client, args) {
|
|
878
|
+
const parsed2 = getPersonalContextInputSchema.parse(args ?? {});
|
|
879
|
+
const path8 = buildPersonalContextPath(parsed2);
|
|
880
|
+
try {
|
|
881
|
+
const result = await client.get(path8);
|
|
882
|
+
return { ok: true, result };
|
|
883
|
+
} catch (err) {
|
|
884
|
+
if (err instanceof MemoraOneHttpError) {
|
|
885
|
+
const bodyText = typeof err.body === "string" ? err.body : JSON.stringify(err.body ?? "");
|
|
886
|
+
throw new Error(
|
|
887
|
+
`memora_get_personal_context failed: ${err.status} ${err.message} ${bodyText}`.trim()
|
|
888
|
+
);
|
|
889
|
+
}
|
|
890
|
+
throw err;
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
|
|
738
894
|
// src/tools/handlers/askWithMemory.ts
|
|
739
|
-
var
|
|
740
|
-
var askWithMemoryInputSchema =
|
|
741
|
-
question:
|
|
742
|
-
code_context:
|
|
743
|
-
file_path:
|
|
744
|
-
selected_text:
|
|
745
|
-
language:
|
|
895
|
+
var import_v416 = require("zod/v4");
|
|
896
|
+
var askWithMemoryInputSchema = import_v416.z.object({
|
|
897
|
+
question: import_v416.z.string().min(1),
|
|
898
|
+
code_context: import_v416.z.object({
|
|
899
|
+
file_path: import_v416.z.string().optional(),
|
|
900
|
+
selected_text: import_v416.z.string().optional(),
|
|
901
|
+
language: import_v416.z.string().optional()
|
|
746
902
|
}).optional()
|
|
747
903
|
});
|
|
748
904
|
function isAskWithMemoryResponse(value) {
|
|
@@ -775,13 +931,13 @@ async function handleAskWithMemory(client, args) {
|
|
|
775
931
|
}
|
|
776
932
|
|
|
777
933
|
// src/tools/handlers/logIntent.ts
|
|
778
|
-
var
|
|
779
|
-
var logIntentInputSchema =
|
|
780
|
-
intent:
|
|
781
|
-
message:
|
|
782
|
-
context:
|
|
783
|
-
intent_source:
|
|
784
|
-
run_id:
|
|
934
|
+
var import_v417 = require("zod/v4");
|
|
935
|
+
var logIntentInputSchema = import_v417.z.object({
|
|
936
|
+
intent: import_v417.z.enum(["task", "decision"]),
|
|
937
|
+
message: import_v417.z.string().min(1),
|
|
938
|
+
context: import_v417.z.record(import_v417.z.string(), import_v417.z.any()).optional(),
|
|
939
|
+
intent_source: import_v417.z.string().optional().default("cursor_chat"),
|
|
940
|
+
run_id: import_v417.z.string().min(1).optional()
|
|
785
941
|
});
|
|
786
942
|
async function handleLogIntent(client, args) {
|
|
787
943
|
const parsed2 = logIntentInputSchema.parse(args ?? {});
|
|
@@ -821,18 +977,18 @@ async function handleLogIntent(client, args) {
|
|
|
821
977
|
}
|
|
822
978
|
|
|
823
979
|
// src/tools/handlers/logChangeSummary.ts
|
|
824
|
-
var
|
|
825
|
-
var logChangeSummaryInputSchema =
|
|
826
|
-
summary:
|
|
827
|
-
scope:
|
|
828
|
-
files:
|
|
829
|
-
stats:
|
|
830
|
-
files:
|
|
831
|
-
add:
|
|
832
|
-
del:
|
|
980
|
+
var import_v418 = require("zod/v4");
|
|
981
|
+
var logChangeSummaryInputSchema = import_v418.z.object({
|
|
982
|
+
summary: import_v418.z.string().min(1),
|
|
983
|
+
scope: import_v418.z.string().min(1).optional(),
|
|
984
|
+
files: import_v418.z.array(import_v418.z.string().min(1)).optional(),
|
|
985
|
+
stats: import_v418.z.object({
|
|
986
|
+
files: import_v418.z.number().int().nonnegative().optional(),
|
|
987
|
+
add: import_v418.z.number().int().nonnegative().optional(),
|
|
988
|
+
del: import_v418.z.number().int().nonnegative().optional()
|
|
833
989
|
}).optional(),
|
|
834
|
-
commit:
|
|
835
|
-
run_id:
|
|
990
|
+
commit: import_v418.z.string().min(1).optional(),
|
|
991
|
+
run_id: import_v418.z.string().min(1).optional()
|
|
836
992
|
});
|
|
837
993
|
async function handleLogChangeSummary(client, args) {
|
|
838
994
|
const parsed2 = logChangeSummaryInputSchema.parse(args ?? {});
|
|
@@ -865,17 +1021,17 @@ async function handleLogChangeSummary(client, args) {
|
|
|
865
1021
|
}
|
|
866
1022
|
|
|
867
1023
|
// src/tools/handlers/logToolResult.ts
|
|
868
|
-
var
|
|
869
|
-
var logToolResultInputSchema =
|
|
870
|
-
tool:
|
|
871
|
-
status:
|
|
872
|
-
summary:
|
|
873
|
-
run_id:
|
|
874
|
-
duration_ms:
|
|
875
|
-
error_code:
|
|
876
|
-
error_message:
|
|
877
|
-
error_kind:
|
|
878
|
-
stats:
|
|
1024
|
+
var import_v419 = require("zod/v4");
|
|
1025
|
+
var logToolResultInputSchema = import_v419.z.object({
|
|
1026
|
+
tool: import_v419.z.string().min(1),
|
|
1027
|
+
status: import_v419.z.enum(["ok", "error", "partial"]),
|
|
1028
|
+
summary: import_v419.z.string().min(1),
|
|
1029
|
+
run_id: import_v419.z.string().min(1).optional(),
|
|
1030
|
+
duration_ms: import_v419.z.number().int().nonnegative().optional(),
|
|
1031
|
+
error_code: import_v419.z.string().min(1).optional(),
|
|
1032
|
+
error_message: import_v419.z.string().min(1).optional(),
|
|
1033
|
+
error_kind: import_v419.z.enum(["infra", "logic", "auth", "rate_limit", "validation", "unknown"]).optional(),
|
|
1034
|
+
stats: import_v419.z.record(import_v419.z.string(), import_v419.z.any()).optional()
|
|
879
1035
|
});
|
|
880
1036
|
async function handleLogToolResult(client, args) {
|
|
881
1037
|
const parsed2 = logToolResultInputSchema.parse(args ?? {});
|
|
@@ -911,15 +1067,15 @@ async function handleLogToolResult(client, args) {
|
|
|
911
1067
|
}
|
|
912
1068
|
|
|
913
1069
|
// src/tools/handlers/logCommand.ts
|
|
914
|
-
var
|
|
915
|
-
var logCommandInputSchema =
|
|
916
|
-
cmd:
|
|
917
|
-
summary:
|
|
918
|
-
cwd:
|
|
919
|
-
exit_code:
|
|
920
|
-
duration_ms:
|
|
921
|
-
run_id:
|
|
922
|
-
stats:
|
|
1070
|
+
var import_v420 = require("zod/v4");
|
|
1071
|
+
var logCommandInputSchema = import_v420.z.object({
|
|
1072
|
+
cmd: import_v420.z.string().min(1),
|
|
1073
|
+
summary: import_v420.z.string().min(1),
|
|
1074
|
+
cwd: import_v420.z.string().min(1).optional(),
|
|
1075
|
+
exit_code: import_v420.z.number().int().optional(),
|
|
1076
|
+
duration_ms: import_v420.z.number().int().nonnegative().optional(),
|
|
1077
|
+
run_id: import_v420.z.string().min(1).optional(),
|
|
1078
|
+
stats: import_v420.z.record(import_v420.z.string(), import_v420.z.any()).optional()
|
|
923
1079
|
});
|
|
924
1080
|
async function handleLogCommand(client, args) {
|
|
925
1081
|
const parsed2 = logCommandInputSchema.parse(args ?? {});
|
|
@@ -959,7 +1115,7 @@ async function handleListProjects(client) {
|
|
|
959
1115
|
}
|
|
960
1116
|
|
|
961
1117
|
// src/tools/handlers/setProject.ts
|
|
962
|
-
var
|
|
1118
|
+
var import_v421 = require("zod/v4");
|
|
963
1119
|
|
|
964
1120
|
// src/repoFingerprint.ts
|
|
965
1121
|
var fs4 = __toESM(require("fs"), 1);
|
|
@@ -1288,9 +1444,9 @@ async function setProjectIdForFingerprint(args) {
|
|
|
1288
1444
|
}
|
|
1289
1445
|
|
|
1290
1446
|
// src/tools/handlers/setProject.ts
|
|
1291
|
-
var setProjectInputSchema =
|
|
1292
|
-
projectKey:
|
|
1293
|
-
projectId:
|
|
1447
|
+
var setProjectInputSchema = import_v421.z.object({
|
|
1448
|
+
projectKey: import_v421.z.string().min(1).optional(),
|
|
1449
|
+
projectId: import_v421.z.string().min(1).optional()
|
|
1294
1450
|
});
|
|
1295
1451
|
async function handleSetProject(args) {
|
|
1296
1452
|
const parsed2 = setProjectInputSchema.parse(args ?? {});
|
|
@@ -1558,6 +1714,45 @@ async function main(opts = {}) {
|
|
|
1558
1714
|
})
|
|
1559
1715
|
);
|
|
1560
1716
|
registeredToolNames.push("memora_post_event");
|
|
1717
|
+
server.tool(
|
|
1718
|
+
"memora_create_fact",
|
|
1719
|
+
"Create an explicit project-scoped fact (POST /facts)",
|
|
1720
|
+
createFactShape,
|
|
1721
|
+
async (args) => runWithSessionContext(sessionContext, async () => {
|
|
1722
|
+
if (!runtime.client || !runtime.projectId) return notInitializedResult;
|
|
1723
|
+
const result = await handleCreateFact(runtime.client, args);
|
|
1724
|
+
return {
|
|
1725
|
+
content: [{ type: "text", text: JSON.stringify(result) }]
|
|
1726
|
+
};
|
|
1727
|
+
})
|
|
1728
|
+
);
|
|
1729
|
+
registeredToolNames.push("memora_create_fact");
|
|
1730
|
+
server.tool(
|
|
1731
|
+
"memora_add_personal_context",
|
|
1732
|
+
"Store notes or preferences for this workspace (POST /v1/personal-context)",
|
|
1733
|
+
addPersonalContextShape,
|
|
1734
|
+
async (args) => runWithSessionContext(sessionContext, async () => {
|
|
1735
|
+
if (!runtime.client || !runtime.projectId) return notInitializedResult;
|
|
1736
|
+
const result = await handleAddPersonalContext(runtime.client, args);
|
|
1737
|
+
return {
|
|
1738
|
+
content: [{ type: "text", text: JSON.stringify(result) }]
|
|
1739
|
+
};
|
|
1740
|
+
})
|
|
1741
|
+
);
|
|
1742
|
+
registeredToolNames.push("memora_add_personal_context");
|
|
1743
|
+
server.tool(
|
|
1744
|
+
"memora_get_personal_context",
|
|
1745
|
+
"Search stored notes or preferences for this workspace (GET /v1/personal-context)",
|
|
1746
|
+
getPersonalContextShape,
|
|
1747
|
+
async (args) => runWithSessionContext(sessionContext, async () => {
|
|
1748
|
+
if (!runtime.client || !runtime.projectId) return notInitializedResult;
|
|
1749
|
+
const result = await handleGetPersonalContext(runtime.client, args);
|
|
1750
|
+
return {
|
|
1751
|
+
content: [{ type: "text", text: JSON.stringify(result) }]
|
|
1752
|
+
};
|
|
1753
|
+
})
|
|
1754
|
+
);
|
|
1755
|
+
registeredToolNames.push("memora_get_personal_context");
|
|
1561
1756
|
server.tool(
|
|
1562
1757
|
"memora_list_projects",
|
|
1563
1758
|
"List projects available to the current API key",
|
|
@@ -1589,7 +1784,7 @@ async function main(opts = {}) {
|
|
|
1589
1784
|
runtime,
|
|
1590
1785
|
sessionContext,
|
|
1591
1786
|
"memora_ask_with_memory",
|
|
1592
|
-
"
|
|
1787
|
+
"Answer using saved workspace knowledge and timeline. In user-visible replies, state facts directly; do not attribute answers to tools, storage, retrieval, or memory-style framing unless the user asks how you know.",
|
|
1593
1788
|
askWithMemoryShape,
|
|
1594
1789
|
async (args) => {
|
|
1595
1790
|
const result = await handleAskWithMemory(runtime.client, args);
|