@memoraone/mcp 0.1.19 → 0.1.20
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 +280 -14
- package/dist/daemon.cjs +296 -101
- package/dist/index.cjs +296 -101
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -491,80 +491,106 @@ var postEventShape = {
|
|
|
491
491
|
metadata: import_v42.z.record(import_v42.z.string(), import_v42.z.any()).optional()
|
|
492
492
|
};
|
|
493
493
|
|
|
494
|
-
// src/tools/
|
|
494
|
+
// src/tools/createFact.ts
|
|
495
495
|
var import_v43 = require("zod/v4");
|
|
496
|
+
var createFactShape = {
|
|
497
|
+
content: import_v43.z.string().min(1).describe("Explicit fact text to persist for the current project"),
|
|
498
|
+
metadata: import_v43.z.record(import_v43.z.string(), import_v43.z.any()).optional()
|
|
499
|
+
};
|
|
500
|
+
|
|
501
|
+
// src/tools/addPersonalContext.ts
|
|
502
|
+
var import_v44 = require("zod/v4");
|
|
503
|
+
var addPersonalContextShape = {
|
|
504
|
+
content: import_v44.z.string().min(1).describe("Text to store (note, preference, or similar)"),
|
|
505
|
+
category: import_v44.z.string().optional().describe("Optional category label"),
|
|
506
|
+
tags: import_v44.z.array(import_v44.z.string()).optional().describe("Optional tags"),
|
|
507
|
+
scope_type: import_v44.z.enum(["general", "project"]).optional(),
|
|
508
|
+
scope_id: import_v44.z.string().optional()
|
|
509
|
+
};
|
|
510
|
+
|
|
511
|
+
// src/tools/getPersonalContext.ts
|
|
512
|
+
var import_v45 = require("zod/v4");
|
|
513
|
+
var getPersonalContextShape = {
|
|
514
|
+
query: import_v45.z.string().optional().describe("Search query; sent as q when set"),
|
|
515
|
+
scope_type: import_v45.z.enum(["general", "project"]).optional(),
|
|
516
|
+
scope_id: import_v45.z.string().optional(),
|
|
517
|
+
limit: import_v45.z.number().int().positive().optional().describe("Max items to return")
|
|
518
|
+
};
|
|
519
|
+
|
|
520
|
+
// src/tools/askWithMemory.ts
|
|
521
|
+
var import_v46 = require("zod/v4");
|
|
496
522
|
var askWithMemoryShape = {
|
|
497
|
-
question:
|
|
498
|
-
code_context:
|
|
499
|
-
file_path:
|
|
500
|
-
selected_text:
|
|
501
|
-
language:
|
|
523
|
+
question: import_v46.z.string().min(1),
|
|
524
|
+
code_context: import_v46.z.object({
|
|
525
|
+
file_path: import_v46.z.string().optional(),
|
|
526
|
+
selected_text: import_v46.z.string().optional(),
|
|
527
|
+
language: import_v46.z.string().optional()
|
|
502
528
|
}).optional()
|
|
503
529
|
};
|
|
504
530
|
|
|
505
531
|
// src/tools/logIntent.ts
|
|
506
|
-
var
|
|
532
|
+
var import_v47 = require("zod/v4");
|
|
507
533
|
var logIntentShape = {
|
|
508
|
-
intent:
|
|
509
|
-
message:
|
|
510
|
-
context:
|
|
511
|
-
intent_source:
|
|
512
|
-
run_id:
|
|
534
|
+
intent: import_v47.z.enum(["task", "decision"]),
|
|
535
|
+
message: import_v47.z.string().min(1),
|
|
536
|
+
context: import_v47.z.record(import_v47.z.string(), import_v47.z.any()).optional(),
|
|
537
|
+
intent_source: import_v47.z.string().optional().default("cursor_chat"),
|
|
538
|
+
run_id: import_v47.z.string().min(1).optional()
|
|
513
539
|
};
|
|
514
540
|
|
|
515
541
|
// src/tools/logChangeSummary.ts
|
|
516
|
-
var
|
|
542
|
+
var import_v48 = require("zod/v4");
|
|
517
543
|
var logChangeSummaryShape = {
|
|
518
|
-
summary:
|
|
519
|
-
scope:
|
|
520
|
-
files:
|
|
521
|
-
stats:
|
|
522
|
-
files:
|
|
523
|
-
add:
|
|
524
|
-
del:
|
|
544
|
+
summary: import_v48.z.string().min(1),
|
|
545
|
+
scope: import_v48.z.string().min(1).optional(),
|
|
546
|
+
files: import_v48.z.array(import_v48.z.string().min(1)).optional(),
|
|
547
|
+
stats: import_v48.z.object({
|
|
548
|
+
files: import_v48.z.number().int().nonnegative().optional(),
|
|
549
|
+
add: import_v48.z.number().int().nonnegative().optional(),
|
|
550
|
+
del: import_v48.z.number().int().nonnegative().optional()
|
|
525
551
|
}).optional(),
|
|
526
|
-
commit:
|
|
527
|
-
run_id:
|
|
552
|
+
commit: import_v48.z.string().min(1).optional(),
|
|
553
|
+
run_id: import_v48.z.string().min(1).optional()
|
|
528
554
|
};
|
|
529
555
|
|
|
530
556
|
// src/tools/logToolResult.ts
|
|
531
|
-
var
|
|
557
|
+
var import_v49 = require("zod/v4");
|
|
532
558
|
var logToolResultShape = {
|
|
533
|
-
tool:
|
|
534
|
-
status:
|
|
535
|
-
summary:
|
|
536
|
-
run_id:
|
|
537
|
-
duration_ms:
|
|
538
|
-
error_code:
|
|
539
|
-
error_message:
|
|
540
|
-
error_kind:
|
|
541
|
-
stats:
|
|
559
|
+
tool: import_v49.z.string().min(1),
|
|
560
|
+
status: import_v49.z.enum(["ok", "error", "partial"]),
|
|
561
|
+
summary: import_v49.z.string().min(1),
|
|
562
|
+
run_id: import_v49.z.string().min(1).optional(),
|
|
563
|
+
duration_ms: import_v49.z.number().int().nonnegative().optional(),
|
|
564
|
+
error_code: import_v49.z.string().min(1).optional(),
|
|
565
|
+
error_message: import_v49.z.string().min(1).optional(),
|
|
566
|
+
error_kind: import_v49.z.enum(["infra", "logic", "auth", "rate_limit", "validation", "unknown"]).optional(),
|
|
567
|
+
stats: import_v49.z.record(import_v49.z.string(), import_v49.z.any()).optional()
|
|
542
568
|
};
|
|
543
569
|
|
|
544
570
|
// src/tools/logCommand.ts
|
|
545
|
-
var
|
|
571
|
+
var import_v410 = require("zod/v4");
|
|
546
572
|
var logCommandShape = {
|
|
547
|
-
cmd:
|
|
548
|
-
summary:
|
|
549
|
-
cwd:
|
|
550
|
-
exit_code:
|
|
551
|
-
duration_ms:
|
|
552
|
-
run_id:
|
|
553
|
-
stats:
|
|
573
|
+
cmd: import_v410.z.string().min(1),
|
|
574
|
+
summary: import_v410.z.string().min(1),
|
|
575
|
+
cwd: import_v410.z.string().min(1).optional(),
|
|
576
|
+
exit_code: import_v410.z.number().int().optional(),
|
|
577
|
+
duration_ms: import_v410.z.number().int().nonnegative().optional(),
|
|
578
|
+
run_id: import_v410.z.string().min(1).optional(),
|
|
579
|
+
stats: import_v410.z.record(import_v410.z.string(), import_v410.z.any()).optional()
|
|
554
580
|
};
|
|
555
581
|
|
|
556
582
|
// src/tools/listProjects.ts
|
|
557
583
|
var listProjectsShape = {};
|
|
558
584
|
|
|
559
585
|
// src/tools/setProject.ts
|
|
560
|
-
var
|
|
586
|
+
var import_v411 = require("zod/v4");
|
|
561
587
|
var setProjectShape = {
|
|
562
|
-
projectKey:
|
|
563
|
-
projectId:
|
|
588
|
+
projectKey: import_v411.z.string().min(1).optional(),
|
|
589
|
+
projectId: import_v411.z.string().min(1).optional()
|
|
564
590
|
};
|
|
565
591
|
|
|
566
592
|
// src/tools/handlers/postEvent.ts
|
|
567
|
-
var
|
|
593
|
+
var import_v412 = require("zod/v4");
|
|
568
594
|
var crypto3 = __toESM(require("crypto"), 1);
|
|
569
595
|
|
|
570
596
|
// src/runContext.ts
|
|
@@ -626,14 +652,14 @@ function generateRunId() {
|
|
|
626
652
|
}
|
|
627
653
|
|
|
628
654
|
// src/tools/handlers/postEvent.ts
|
|
629
|
-
var postEventInputSchema =
|
|
630
|
-
kind:
|
|
631
|
-
actor:
|
|
632
|
-
identifier:
|
|
633
|
-
id:
|
|
655
|
+
var postEventInputSchema = import_v412.z.object({
|
|
656
|
+
kind: import_v412.z.string().min(1),
|
|
657
|
+
actor: import_v412.z.object({
|
|
658
|
+
identifier: import_v412.z.string().min(1),
|
|
659
|
+
id: import_v412.z.string().min(1).optional()
|
|
634
660
|
}),
|
|
635
|
-
content:
|
|
636
|
-
metadata:
|
|
661
|
+
content: import_v412.z.record(import_v412.z.string(), import_v412.z.any()),
|
|
662
|
+
metadata: import_v412.z.record(import_v412.z.string(), import_v412.z.any()).optional()
|
|
637
663
|
});
|
|
638
664
|
async function handlePostEvent(client, args) {
|
|
639
665
|
const nonce = crypto3.randomBytes(8).toString("hex");
|
|
@@ -675,14 +701,144 @@ async function handlePostEvent(client, args) {
|
|
|
675
701
|
return { ok: true, forwarded: true };
|
|
676
702
|
}
|
|
677
703
|
|
|
704
|
+
// src/tools/handlers/createFact.ts
|
|
705
|
+
var import_v413 = require("zod/v4");
|
|
706
|
+
var createFactInputSchema = import_v413.z.object({
|
|
707
|
+
content: import_v413.z.string().min(1),
|
|
708
|
+
metadata: import_v413.z.record(import_v413.z.string(), import_v413.z.any()).optional()
|
|
709
|
+
});
|
|
710
|
+
async function handleCreateFact(client, args) {
|
|
711
|
+
const parsed2 = createFactInputSchema.parse(args ?? {});
|
|
712
|
+
const projectKey = getCurrentProjectId();
|
|
713
|
+
if (!projectKey) {
|
|
714
|
+
throw new Error("No project selected. Use memora_list_projects and memora_set_project to select a project.");
|
|
715
|
+
}
|
|
716
|
+
const content = parsed2.content.trim();
|
|
717
|
+
if (!content) {
|
|
718
|
+
throw new Error("content cannot be empty after trimming");
|
|
719
|
+
}
|
|
720
|
+
const { tags: userTagsRaw, ...userMetaRest } = parsed2.metadata ?? {};
|
|
721
|
+
const userTags = Array.isArray(userTagsRaw) ? userTagsRaw.filter((t) => typeof t === "string") : [];
|
|
722
|
+
const tags = ["explicit_fact", ...userTags.filter((t) => t !== "explicit_fact")];
|
|
723
|
+
const body = {
|
|
724
|
+
projectKey,
|
|
725
|
+
content,
|
|
726
|
+
metadata: {
|
|
727
|
+
...userMetaRest,
|
|
728
|
+
source: "memoraone-mcp",
|
|
729
|
+
purpose: "explicit_fact",
|
|
730
|
+
schema: "v1",
|
|
731
|
+
tool: "memora_create_fact",
|
|
732
|
+
agent_identifier: config2.agentName,
|
|
733
|
+
tags
|
|
734
|
+
}
|
|
735
|
+
};
|
|
736
|
+
try {
|
|
737
|
+
const result = await client.post("/facts", body);
|
|
738
|
+
return { ok: true, result };
|
|
739
|
+
} catch (err) {
|
|
740
|
+
if (err instanceof MemoraOneHttpError) {
|
|
741
|
+
const bodyText = typeof err.body === "string" ? err.body : JSON.stringify(err.body ?? "");
|
|
742
|
+
throw new Error(
|
|
743
|
+
`memora_create_fact failed: ${err.status} ${err.message} ${bodyText}`.trim()
|
|
744
|
+
);
|
|
745
|
+
}
|
|
746
|
+
throw err;
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
// src/tools/handlers/addPersonalContext.ts
|
|
751
|
+
var import_v414 = require("zod/v4");
|
|
752
|
+
var addPersonalContextInputSchema = import_v414.z.object({
|
|
753
|
+
content: import_v414.z.string().min(1),
|
|
754
|
+
category: import_v414.z.string().optional(),
|
|
755
|
+
tags: import_v414.z.array(import_v414.z.string()).optional(),
|
|
756
|
+
scope_type: import_v414.z.enum(["general", "project"]).optional(),
|
|
757
|
+
scope_id: import_v414.z.string().optional()
|
|
758
|
+
});
|
|
759
|
+
async function handleAddPersonalContext(client, args) {
|
|
760
|
+
const parsed2 = addPersonalContextInputSchema.parse(args ?? {});
|
|
761
|
+
const content = parsed2.content.trim();
|
|
762
|
+
if (!content) {
|
|
763
|
+
throw new Error("content cannot be empty after trimming");
|
|
764
|
+
}
|
|
765
|
+
const body = { content };
|
|
766
|
+
if (parsed2.category !== void 0 && parsed2.category.trim() !== "") {
|
|
767
|
+
body.category = parsed2.category.trim();
|
|
768
|
+
}
|
|
769
|
+
if (parsed2.tags !== void 0 && parsed2.tags.length > 0) {
|
|
770
|
+
body.tags = parsed2.tags;
|
|
771
|
+
}
|
|
772
|
+
if (parsed2.scope_type !== void 0) {
|
|
773
|
+
body.scope_type = parsed2.scope_type;
|
|
774
|
+
}
|
|
775
|
+
if (parsed2.scope_id !== void 0 && parsed2.scope_id.trim() !== "") {
|
|
776
|
+
body.scope_id = parsed2.scope_id.trim();
|
|
777
|
+
}
|
|
778
|
+
try {
|
|
779
|
+
const result = await client.post("/v1/personal-context", body);
|
|
780
|
+
return { ok: true, result };
|
|
781
|
+
} catch (err) {
|
|
782
|
+
if (err instanceof MemoraOneHttpError) {
|
|
783
|
+
const bodyText = typeof err.body === "string" ? err.body : JSON.stringify(err.body ?? "");
|
|
784
|
+
throw new Error(
|
|
785
|
+
`memora_add_personal_context failed: ${err.status} ${err.message} ${bodyText}`.trim()
|
|
786
|
+
);
|
|
787
|
+
}
|
|
788
|
+
throw err;
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
// src/tools/handlers/getPersonalContext.ts
|
|
793
|
+
var import_v415 = require("zod/v4");
|
|
794
|
+
var getPersonalContextInputSchema = import_v415.z.object({
|
|
795
|
+
query: import_v415.z.string().optional(),
|
|
796
|
+
scope_type: import_v415.z.enum(["general", "project"]).optional(),
|
|
797
|
+
scope_id: import_v415.z.string().optional(),
|
|
798
|
+
limit: import_v415.z.number().int().positive().optional()
|
|
799
|
+
});
|
|
800
|
+
function buildPersonalContextPath(parsed2) {
|
|
801
|
+
const params = new URLSearchParams();
|
|
802
|
+
if (parsed2.query !== void 0 && parsed2.query.trim() !== "") {
|
|
803
|
+
params.set("q", parsed2.query.trim());
|
|
804
|
+
}
|
|
805
|
+
if (parsed2.scope_type !== void 0) {
|
|
806
|
+
params.set("scope_type", parsed2.scope_type);
|
|
807
|
+
}
|
|
808
|
+
if (parsed2.scope_id !== void 0 && parsed2.scope_id.trim() !== "") {
|
|
809
|
+
params.set("scope_id", parsed2.scope_id.trim());
|
|
810
|
+
}
|
|
811
|
+
if (parsed2.limit !== void 0) {
|
|
812
|
+
params.set("limit", String(parsed2.limit));
|
|
813
|
+
}
|
|
814
|
+
const qs = params.toString();
|
|
815
|
+
return qs ? `/v1/personal-context?${qs}` : "/v1/personal-context";
|
|
816
|
+
}
|
|
817
|
+
async function handleGetPersonalContext(client, args) {
|
|
818
|
+
const parsed2 = getPersonalContextInputSchema.parse(args ?? {});
|
|
819
|
+
const path7 = buildPersonalContextPath(parsed2);
|
|
820
|
+
try {
|
|
821
|
+
const result = await client.get(path7);
|
|
822
|
+
return { ok: true, result };
|
|
823
|
+
} catch (err) {
|
|
824
|
+
if (err instanceof MemoraOneHttpError) {
|
|
825
|
+
const bodyText = typeof err.body === "string" ? err.body : JSON.stringify(err.body ?? "");
|
|
826
|
+
throw new Error(
|
|
827
|
+
`memora_get_personal_context failed: ${err.status} ${err.message} ${bodyText}`.trim()
|
|
828
|
+
);
|
|
829
|
+
}
|
|
830
|
+
throw err;
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
|
|
678
834
|
// src/tools/handlers/askWithMemory.ts
|
|
679
|
-
var
|
|
680
|
-
var askWithMemoryInputSchema =
|
|
681
|
-
question:
|
|
682
|
-
code_context:
|
|
683
|
-
file_path:
|
|
684
|
-
selected_text:
|
|
685
|
-
language:
|
|
835
|
+
var import_v416 = require("zod/v4");
|
|
836
|
+
var askWithMemoryInputSchema = import_v416.z.object({
|
|
837
|
+
question: import_v416.z.string().min(1),
|
|
838
|
+
code_context: import_v416.z.object({
|
|
839
|
+
file_path: import_v416.z.string().optional(),
|
|
840
|
+
selected_text: import_v416.z.string().optional(),
|
|
841
|
+
language: import_v416.z.string().optional()
|
|
686
842
|
}).optional()
|
|
687
843
|
});
|
|
688
844
|
function isAskWithMemoryResponse(value) {
|
|
@@ -715,13 +871,13 @@ async function handleAskWithMemory(client, args) {
|
|
|
715
871
|
}
|
|
716
872
|
|
|
717
873
|
// src/tools/handlers/logIntent.ts
|
|
718
|
-
var
|
|
719
|
-
var logIntentInputSchema =
|
|
720
|
-
intent:
|
|
721
|
-
message:
|
|
722
|
-
context:
|
|
723
|
-
intent_source:
|
|
724
|
-
run_id:
|
|
874
|
+
var import_v417 = require("zod/v4");
|
|
875
|
+
var logIntentInputSchema = import_v417.z.object({
|
|
876
|
+
intent: import_v417.z.enum(["task", "decision"]),
|
|
877
|
+
message: import_v417.z.string().min(1),
|
|
878
|
+
context: import_v417.z.record(import_v417.z.string(), import_v417.z.any()).optional(),
|
|
879
|
+
intent_source: import_v417.z.string().optional().default("cursor_chat"),
|
|
880
|
+
run_id: import_v417.z.string().min(1).optional()
|
|
725
881
|
});
|
|
726
882
|
async function handleLogIntent(client, args) {
|
|
727
883
|
const parsed2 = logIntentInputSchema.parse(args ?? {});
|
|
@@ -761,18 +917,18 @@ async function handleLogIntent(client, args) {
|
|
|
761
917
|
}
|
|
762
918
|
|
|
763
919
|
// src/tools/handlers/logChangeSummary.ts
|
|
764
|
-
var
|
|
765
|
-
var logChangeSummaryInputSchema =
|
|
766
|
-
summary:
|
|
767
|
-
scope:
|
|
768
|
-
files:
|
|
769
|
-
stats:
|
|
770
|
-
files:
|
|
771
|
-
add:
|
|
772
|
-
del:
|
|
920
|
+
var import_v418 = require("zod/v4");
|
|
921
|
+
var logChangeSummaryInputSchema = import_v418.z.object({
|
|
922
|
+
summary: import_v418.z.string().min(1),
|
|
923
|
+
scope: import_v418.z.string().min(1).optional(),
|
|
924
|
+
files: import_v418.z.array(import_v418.z.string().min(1)).optional(),
|
|
925
|
+
stats: import_v418.z.object({
|
|
926
|
+
files: import_v418.z.number().int().nonnegative().optional(),
|
|
927
|
+
add: import_v418.z.number().int().nonnegative().optional(),
|
|
928
|
+
del: import_v418.z.number().int().nonnegative().optional()
|
|
773
929
|
}).optional(),
|
|
774
|
-
commit:
|
|
775
|
-
run_id:
|
|
930
|
+
commit: import_v418.z.string().min(1).optional(),
|
|
931
|
+
run_id: import_v418.z.string().min(1).optional()
|
|
776
932
|
});
|
|
777
933
|
async function handleLogChangeSummary(client, args) {
|
|
778
934
|
const parsed2 = logChangeSummaryInputSchema.parse(args ?? {});
|
|
@@ -805,17 +961,17 @@ async function handleLogChangeSummary(client, args) {
|
|
|
805
961
|
}
|
|
806
962
|
|
|
807
963
|
// src/tools/handlers/logToolResult.ts
|
|
808
|
-
var
|
|
809
|
-
var logToolResultInputSchema =
|
|
810
|
-
tool:
|
|
811
|
-
status:
|
|
812
|
-
summary:
|
|
813
|
-
run_id:
|
|
814
|
-
duration_ms:
|
|
815
|
-
error_code:
|
|
816
|
-
error_message:
|
|
817
|
-
error_kind:
|
|
818
|
-
stats:
|
|
964
|
+
var import_v419 = require("zod/v4");
|
|
965
|
+
var logToolResultInputSchema = import_v419.z.object({
|
|
966
|
+
tool: import_v419.z.string().min(1),
|
|
967
|
+
status: import_v419.z.enum(["ok", "error", "partial"]),
|
|
968
|
+
summary: import_v419.z.string().min(1),
|
|
969
|
+
run_id: import_v419.z.string().min(1).optional(),
|
|
970
|
+
duration_ms: import_v419.z.number().int().nonnegative().optional(),
|
|
971
|
+
error_code: import_v419.z.string().min(1).optional(),
|
|
972
|
+
error_message: import_v419.z.string().min(1).optional(),
|
|
973
|
+
error_kind: import_v419.z.enum(["infra", "logic", "auth", "rate_limit", "validation", "unknown"]).optional(),
|
|
974
|
+
stats: import_v419.z.record(import_v419.z.string(), import_v419.z.any()).optional()
|
|
819
975
|
});
|
|
820
976
|
async function handleLogToolResult(client, args) {
|
|
821
977
|
const parsed2 = logToolResultInputSchema.parse(args ?? {});
|
|
@@ -851,15 +1007,15 @@ async function handleLogToolResult(client, args) {
|
|
|
851
1007
|
}
|
|
852
1008
|
|
|
853
1009
|
// src/tools/handlers/logCommand.ts
|
|
854
|
-
var
|
|
855
|
-
var logCommandInputSchema =
|
|
856
|
-
cmd:
|
|
857
|
-
summary:
|
|
858
|
-
cwd:
|
|
859
|
-
exit_code:
|
|
860
|
-
duration_ms:
|
|
861
|
-
run_id:
|
|
862
|
-
stats:
|
|
1010
|
+
var import_v420 = require("zod/v4");
|
|
1011
|
+
var logCommandInputSchema = import_v420.z.object({
|
|
1012
|
+
cmd: import_v420.z.string().min(1),
|
|
1013
|
+
summary: import_v420.z.string().min(1),
|
|
1014
|
+
cwd: import_v420.z.string().min(1).optional(),
|
|
1015
|
+
exit_code: import_v420.z.number().int().optional(),
|
|
1016
|
+
duration_ms: import_v420.z.number().int().nonnegative().optional(),
|
|
1017
|
+
run_id: import_v420.z.string().min(1).optional(),
|
|
1018
|
+
stats: import_v420.z.record(import_v420.z.string(), import_v420.z.any()).optional()
|
|
863
1019
|
});
|
|
864
1020
|
async function handleLogCommand(client, args) {
|
|
865
1021
|
const parsed2 = logCommandInputSchema.parse(args ?? {});
|
|
@@ -899,7 +1055,7 @@ async function handleListProjects(client) {
|
|
|
899
1055
|
}
|
|
900
1056
|
|
|
901
1057
|
// src/tools/handlers/setProject.ts
|
|
902
|
-
var
|
|
1058
|
+
var import_v421 = require("zod/v4");
|
|
903
1059
|
|
|
904
1060
|
// src/repoFingerprint.ts
|
|
905
1061
|
var fs3 = __toESM(require("fs"), 1);
|
|
@@ -1228,9 +1384,9 @@ async function setProjectIdForFingerprint(args) {
|
|
|
1228
1384
|
}
|
|
1229
1385
|
|
|
1230
1386
|
// src/tools/handlers/setProject.ts
|
|
1231
|
-
var setProjectInputSchema =
|
|
1232
|
-
projectKey:
|
|
1233
|
-
projectId:
|
|
1387
|
+
var setProjectInputSchema = import_v421.z.object({
|
|
1388
|
+
projectKey: import_v421.z.string().min(1).optional(),
|
|
1389
|
+
projectId: import_v421.z.string().min(1).optional()
|
|
1234
1390
|
});
|
|
1235
1391
|
async function handleSetProject(args) {
|
|
1236
1392
|
const parsed2 = setProjectInputSchema.parse(args ?? {});
|
|
@@ -1498,6 +1654,45 @@ async function main(opts = {}) {
|
|
|
1498
1654
|
})
|
|
1499
1655
|
);
|
|
1500
1656
|
registeredToolNames.push("memora_post_event");
|
|
1657
|
+
server.tool(
|
|
1658
|
+
"memora_create_fact",
|
|
1659
|
+
"Create an explicit project-scoped fact (POST /facts)",
|
|
1660
|
+
createFactShape,
|
|
1661
|
+
async (args) => runWithSessionContext(sessionContext, async () => {
|
|
1662
|
+
if (!runtime.client || !runtime.projectId) return notInitializedResult;
|
|
1663
|
+
const result = await handleCreateFact(runtime.client, args);
|
|
1664
|
+
return {
|
|
1665
|
+
content: [{ type: "text", text: JSON.stringify(result) }]
|
|
1666
|
+
};
|
|
1667
|
+
})
|
|
1668
|
+
);
|
|
1669
|
+
registeredToolNames.push("memora_create_fact");
|
|
1670
|
+
server.tool(
|
|
1671
|
+
"memora_add_personal_context",
|
|
1672
|
+
"Store notes or preferences for this workspace (POST /v1/personal-context)",
|
|
1673
|
+
addPersonalContextShape,
|
|
1674
|
+
async (args) => runWithSessionContext(sessionContext, async () => {
|
|
1675
|
+
if (!runtime.client || !runtime.projectId) return notInitializedResult;
|
|
1676
|
+
const result = await handleAddPersonalContext(runtime.client, args);
|
|
1677
|
+
return {
|
|
1678
|
+
content: [{ type: "text", text: JSON.stringify(result) }]
|
|
1679
|
+
};
|
|
1680
|
+
})
|
|
1681
|
+
);
|
|
1682
|
+
registeredToolNames.push("memora_add_personal_context");
|
|
1683
|
+
server.tool(
|
|
1684
|
+
"memora_get_personal_context",
|
|
1685
|
+
"Search stored notes or preferences for this workspace (GET /v1/personal-context)",
|
|
1686
|
+
getPersonalContextShape,
|
|
1687
|
+
async (args) => runWithSessionContext(sessionContext, async () => {
|
|
1688
|
+
if (!runtime.client || !runtime.projectId) return notInitializedResult;
|
|
1689
|
+
const result = await handleGetPersonalContext(runtime.client, args);
|
|
1690
|
+
return {
|
|
1691
|
+
content: [{ type: "text", text: JSON.stringify(result) }]
|
|
1692
|
+
};
|
|
1693
|
+
})
|
|
1694
|
+
);
|
|
1695
|
+
registeredToolNames.push("memora_get_personal_context");
|
|
1501
1696
|
server.tool(
|
|
1502
1697
|
"memora_list_projects",
|
|
1503
1698
|
"List projects available to the current API key",
|
|
@@ -1529,7 +1724,7 @@ async function main(opts = {}) {
|
|
|
1529
1724
|
runtime,
|
|
1530
1725
|
sessionContext,
|
|
1531
1726
|
"memora_ask_with_memory",
|
|
1532
|
-
"
|
|
1727
|
+
"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.",
|
|
1533
1728
|
askWithMemoryShape,
|
|
1534
1729
|
async (args) => {
|
|
1535
1730
|
const result = await handleAskWithMemory(runtime.client, args);
|