@hasna/mementos 0.14.26 → 0.14.27
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.js +59 -0
- package/dist/index.js +31 -1
- package/dist/mcp-runtime.d.ts +1 -1
- package/dist/mcp-runtime.d.ts.map +1 -1
- package/dist/mcp.js +31 -1
- package/dist/remote-client.d.ts +3 -0
- package/dist/remote-client.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -543,6 +543,15 @@ class MementosRemoteClient {
|
|
|
543
543
|
injectionContext(input = {}) {
|
|
544
544
|
return this.request("/injections/context", { method: "POST", body: input });
|
|
545
545
|
}
|
|
546
|
+
sendInboxMessage(input) {
|
|
547
|
+
return this.request("/inbox", { method: "POST", body: input });
|
|
548
|
+
}
|
|
549
|
+
listInboxMessages(input = {}) {
|
|
550
|
+
return this.request("/inbox", { query: input });
|
|
551
|
+
}
|
|
552
|
+
claimInboxMessage(id, input = {}) {
|
|
553
|
+
return this.request(`/inbox/${encodeURIComponent(id)}/claim`, { method: "POST", body: input });
|
|
554
|
+
}
|
|
546
555
|
getMemory(id) {
|
|
547
556
|
return this.request(`/memories/${encodeURIComponent(id)}`);
|
|
548
557
|
}
|
|
@@ -672,6 +681,8 @@ async function run(name, args) {
|
|
|
672
681
|
return runHook(args);
|
|
673
682
|
case "billing":
|
|
674
683
|
return runBilling(args);
|
|
684
|
+
case "inbox":
|
|
685
|
+
return runInbox(args);
|
|
675
686
|
case "capabilities":
|
|
676
687
|
return client.listCapabilities();
|
|
677
688
|
case "agents":
|
|
@@ -693,6 +704,31 @@ async function run(name, args) {
|
|
|
693
704
|
${helpText()}`);
|
|
694
705
|
}
|
|
695
706
|
}
|
|
707
|
+
async function runInbox(args) {
|
|
708
|
+
const subcommand = args[0] ?? "list";
|
|
709
|
+
switch (subcommand) {
|
|
710
|
+
case "send": {
|
|
711
|
+
const agentName = args[1];
|
|
712
|
+
const message = args.slice(2).join(" ");
|
|
713
|
+
if (!agentName || !message)
|
|
714
|
+
throw new Error("usage: mementos inbox send <agentName> <message>");
|
|
715
|
+
return client.sendInboxMessage({ targetAgentName: agentName, message });
|
|
716
|
+
}
|
|
717
|
+
case "list": {
|
|
718
|
+
const options = parseInboxOptions(args.slice(1));
|
|
719
|
+
return client.listInboxMessages(options);
|
|
720
|
+
}
|
|
721
|
+
case "claim": {
|
|
722
|
+
const id = args[1];
|
|
723
|
+
if (!id)
|
|
724
|
+
throw new Error("usage: mementos inbox claim <id> [--agent <agentName>]");
|
|
725
|
+
const options = parseInboxOptions(args.slice(2));
|
|
726
|
+
return client.claimInboxMessage(id, options);
|
|
727
|
+
}
|
|
728
|
+
default:
|
|
729
|
+
throw new Error("usage: mementos inbox <send|list|claim>");
|
|
730
|
+
}
|
|
731
|
+
}
|
|
696
732
|
async function runBilling(args) {
|
|
697
733
|
const subcommand = args[0] ?? "status";
|
|
698
734
|
switch (subcommand) {
|
|
@@ -830,6 +866,28 @@ function parseSetupOptions(args) {
|
|
|
830
866
|
}
|
|
831
867
|
return options;
|
|
832
868
|
}
|
|
869
|
+
function parseInboxOptions(args) {
|
|
870
|
+
const options = {};
|
|
871
|
+
for (let index = 0;index < args.length; index += 1) {
|
|
872
|
+
const arg = args[index];
|
|
873
|
+
if (arg === "--agent" || arg === "--agent-name") {
|
|
874
|
+
options.agentName = args[++index];
|
|
875
|
+
} else if (arg === "--agent-id") {
|
|
876
|
+
options.agentId = args[++index];
|
|
877
|
+
} else if (arg === "--project") {
|
|
878
|
+
options.projectKey = args[++index];
|
|
879
|
+
} else if (arg === "--session") {
|
|
880
|
+
options.sessionId = args[++index];
|
|
881
|
+
} else if (arg === "--include-delivered") {
|
|
882
|
+
options.includeDelivered = true;
|
|
883
|
+
} else if (arg === "--limit") {
|
|
884
|
+
options.limit = Number(args[++index]);
|
|
885
|
+
} else {
|
|
886
|
+
throw new Error(`Unknown inbox option: ${arg}`);
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
return options;
|
|
890
|
+
}
|
|
833
891
|
function parseHosts(input) {
|
|
834
892
|
const requested = input.split(",").map((host) => host.trim()).filter(Boolean);
|
|
835
893
|
const unknown = requested.filter((host) => !SUPPORTED_AGENT_HOSTS.includes(host));
|
|
@@ -854,6 +912,7 @@ Usage:
|
|
|
854
912
|
mementos setup agents [--dry-run|--verify|--uninstall]
|
|
855
913
|
mementos inject <query>
|
|
856
914
|
mementos hook <stop|user-prompt-submit|session-start|subagent-start|subagent-stop|pre-tool-use|post-tool-use|notification|setup|doctor>
|
|
915
|
+
mementos inbox <send|list|claim>
|
|
857
916
|
mementos billing <status|credits|buy>
|
|
858
917
|
mementos capabilities
|
|
859
918
|
mementos agents
|
package/dist/index.js
CHANGED
|
@@ -43,6 +43,15 @@ class MementosRemoteClient {
|
|
|
43
43
|
injectionContext(input = {}) {
|
|
44
44
|
return this.request("/injections/context", { method: "POST", body: input });
|
|
45
45
|
}
|
|
46
|
+
sendInboxMessage(input) {
|
|
47
|
+
return this.request("/inbox", { method: "POST", body: input });
|
|
48
|
+
}
|
|
49
|
+
listInboxMessages(input = {}) {
|
|
50
|
+
return this.request("/inbox", { query: input });
|
|
51
|
+
}
|
|
52
|
+
claimInboxMessage(id, input = {}) {
|
|
53
|
+
return this.request(`/inbox/${encodeURIComponent(id)}/claim`, { method: "POST", body: input });
|
|
54
|
+
}
|
|
46
55
|
getMemory(id) {
|
|
47
56
|
return this.request(`/memories/${encodeURIComponent(id)}`);
|
|
48
57
|
}
|
|
@@ -137,7 +146,7 @@ function readErrorMessage(payload, status) {
|
|
|
137
146
|
}
|
|
138
147
|
// src/mcp-runtime.ts
|
|
139
148
|
import { createInterface } from "readline";
|
|
140
|
-
var MEMENTOS_MCP_VERSION = "0.14.
|
|
149
|
+
var MEMENTOS_MCP_VERSION = "0.14.27";
|
|
141
150
|
var AUTHLESS_SCHEMA = {
|
|
142
151
|
type: "object",
|
|
143
152
|
properties: {},
|
|
@@ -205,6 +214,27 @@ var REMOTE_MCP_TOOLS = [
|
|
|
205
214
|
inputSchema: AUTHLESS_SCHEMA,
|
|
206
215
|
run: (_input, client) => client.memoryUsage()
|
|
207
216
|
},
|
|
217
|
+
{
|
|
218
|
+
name: "inbox.send",
|
|
219
|
+
description: "Send a hosted mementos.md inbox message to an agent.",
|
|
220
|
+
inputSchema: OPEN_SCHEMA,
|
|
221
|
+
run: (input, client) => client.sendInboxMessage(input)
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: "inbox.list",
|
|
225
|
+
description: "List hosted mementos.md inbox messages for an agent.",
|
|
226
|
+
inputSchema: OPEN_SCHEMA,
|
|
227
|
+
run: (input, client) => client.listInboxMessages(input)
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
name: "inbox.claim",
|
|
231
|
+
description: "Claim and mark a hosted mementos.md inbox message delivered.",
|
|
232
|
+
inputSchema: OPEN_SCHEMA,
|
|
233
|
+
run: (input, client) => {
|
|
234
|
+
const { id, ...body } = input;
|
|
235
|
+
return client.claimInboxMessage(requiredText(id, "inbox message id is required"), body);
|
|
236
|
+
}
|
|
237
|
+
},
|
|
208
238
|
{
|
|
209
239
|
name: "runs.create",
|
|
210
240
|
description: "Queue a hosted mementos.md run.",
|
package/dist/mcp-runtime.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-runtime.d.ts","sourceRoot":"","sources":["../src/mcp-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAElF,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzF;AAaD,eAAO,MAAM,gBAAgB,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"mcp-runtime.d.ts","sourceRoot":"","sources":["../src/mcp-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAElF,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzF;AAaD,eAAO,MAAM,gBAAgB,EAAE,aAAa,EAiI3C,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACnC,MAAM,uBAA8B,oBAKrC;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,uBAA8B;;;;;;;;;;;GA8BxF;AAED,wBAAgB,aAAa,CAAC,MAAM,uBAA8B,QAUjE"}
|
package/dist/mcp.js
CHANGED
|
@@ -48,6 +48,15 @@ class MementosRemoteClient {
|
|
|
48
48
|
injectionContext(input = {}) {
|
|
49
49
|
return this.request("/injections/context", { method: "POST", body: input });
|
|
50
50
|
}
|
|
51
|
+
sendInboxMessage(input) {
|
|
52
|
+
return this.request("/inbox", { method: "POST", body: input });
|
|
53
|
+
}
|
|
54
|
+
listInboxMessages(input = {}) {
|
|
55
|
+
return this.request("/inbox", { query: input });
|
|
56
|
+
}
|
|
57
|
+
claimInboxMessage(id, input = {}) {
|
|
58
|
+
return this.request(`/inbox/${encodeURIComponent(id)}/claim`, { method: "POST", body: input });
|
|
59
|
+
}
|
|
51
60
|
getMemory(id) {
|
|
52
61
|
return this.request(`/memories/${encodeURIComponent(id)}`);
|
|
53
62
|
}
|
|
@@ -142,7 +151,7 @@ function readErrorMessage(payload, status) {
|
|
|
142
151
|
}
|
|
143
152
|
|
|
144
153
|
// src/mcp-runtime.ts
|
|
145
|
-
var MEMENTOS_MCP_VERSION = "0.14.
|
|
154
|
+
var MEMENTOS_MCP_VERSION = "0.14.27";
|
|
146
155
|
var AUTHLESS_SCHEMA = {
|
|
147
156
|
type: "object",
|
|
148
157
|
properties: {},
|
|
@@ -210,6 +219,27 @@ var REMOTE_MCP_TOOLS = [
|
|
|
210
219
|
inputSchema: AUTHLESS_SCHEMA,
|
|
211
220
|
run: (_input, client) => client.memoryUsage()
|
|
212
221
|
},
|
|
222
|
+
{
|
|
223
|
+
name: "inbox.send",
|
|
224
|
+
description: "Send a hosted mementos.md inbox message to an agent.",
|
|
225
|
+
inputSchema: OPEN_SCHEMA,
|
|
226
|
+
run: (input, client) => client.sendInboxMessage(input)
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
name: "inbox.list",
|
|
230
|
+
description: "List hosted mementos.md inbox messages for an agent.",
|
|
231
|
+
inputSchema: OPEN_SCHEMA,
|
|
232
|
+
run: (input, client) => client.listInboxMessages(input)
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
name: "inbox.claim",
|
|
236
|
+
description: "Claim and mark a hosted mementos.md inbox message delivered.",
|
|
237
|
+
inputSchema: OPEN_SCHEMA,
|
|
238
|
+
run: (input, client) => {
|
|
239
|
+
const { id, ...body } = input;
|
|
240
|
+
return client.claimInboxMessage(requiredText(id, "inbox message id is required"), body);
|
|
241
|
+
}
|
|
242
|
+
},
|
|
213
243
|
{
|
|
214
244
|
name: "runs.create",
|
|
215
245
|
description: "Queue a hosted mementos.md run.",
|
package/dist/remote-client.d.ts
CHANGED
|
@@ -28,6 +28,9 @@ export declare class MementosRemoteClient {
|
|
|
28
28
|
saveMemory(input: Record<string, unknown>): Promise<unknown>;
|
|
29
29
|
searchMemories(input?: Record<string, unknown>): Promise<unknown>;
|
|
30
30
|
injectionContext(input?: Record<string, unknown>): Promise<unknown>;
|
|
31
|
+
sendInboxMessage(input: Record<string, unknown>): Promise<unknown>;
|
|
32
|
+
listInboxMessages(input?: Record<string, unknown>): Promise<unknown>;
|
|
33
|
+
claimInboxMessage(id: string, input?: Record<string, unknown>): Promise<unknown>;
|
|
31
34
|
getMemory(id: string): Promise<unknown>;
|
|
32
35
|
updateMemory(id: string, input: Record<string, unknown>): Promise<unknown>;
|
|
33
36
|
deleteMemory(id: string): Promise<unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-client.d.ts","sourceRoot":"","sources":["../src/remote-client.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,+BAA+B,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5F,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO;CAM/D;AAED,qBAAa,oBAAoB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,MAAM,GAAE,kBAAuB;IAM3C,gBAAgB;IAIhB,UAAU;IAIV,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI5C,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI7C,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzC,cAAc,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIlD,gBAAgB,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIpD,SAAS,CAAC,EAAE,EAAE,MAAM;IAIpB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIvD,YAAY,CAAC,EAAE,EAAE,MAAM;IAIvB,WAAW;IAIX,QAAQ,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAI5C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAI3D,MAAM,CAAC,EAAE,EAAE,MAAM;IAIjB,aAAa;IAIb,aAAa;IAIb,eAAe;IAIf,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAInC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB;CA4B/D;AAED,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,oBAAoB,CAKrH;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIrD"}
|
|
1
|
+
{"version":3,"file":"remote-client.d.ts","sourceRoot":"","sources":["../src/remote-client.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,+BAA+B,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5F,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO;CAM/D;AAED,qBAAa,oBAAoB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,MAAM,GAAE,kBAAuB;IAM3C,gBAAgB;IAIhB,UAAU;IAIV,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI5C,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI7C,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzC,cAAc,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIlD,gBAAgB,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIpD,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI/C,iBAAiB,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIrD,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIjE,SAAS,CAAC,EAAE,EAAE,MAAM;IAIpB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIvD,YAAY,CAAC,EAAE,EAAE,MAAM;IAIvB,WAAW;IAIX,QAAQ,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAI5C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAI3D,MAAM,CAAC,EAAE,EAAE,MAAM;IAIjB,aAAa;IAIb,aAAa;IAIb,eAAe;IAIf,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAInC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB;CA4B/D;AAED,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,oBAAoB,CAKrH;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIrD"}
|