@aria-cli/tools 1.0.9 → 1.0.11
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/package.json +9 -5
- package/src/__tests__/web-fetch-download.test.ts +0 -433
- package/src/__tests__/web-tools.test.ts +0 -619
- package/src/ask-user-interaction.ts +0 -33
- package/src/cache/web-cache.ts +0 -110
- package/src/definitions/arion.ts +0 -118
- package/src/definitions/browser/browser.ts +0 -502
- package/src/definitions/browser/index.ts +0 -5
- package/src/definitions/browser/pw-downloads.ts +0 -142
- package/src/definitions/browser/pw-interactions.ts +0 -282
- package/src/definitions/browser/pw-responses.ts +0 -98
- package/src/definitions/browser/pw-session.ts +0 -405
- package/src/definitions/browser/pw-shared.ts +0 -85
- package/src/definitions/browser/pw-snapshot.ts +0 -383
- package/src/definitions/browser/pw-state.ts +0 -101
- package/src/definitions/browser/types.ts +0 -203
- package/src/definitions/code-intelligence.ts +0 -526
- package/src/definitions/core.ts +0 -118
- package/src/definitions/delegation.ts +0 -567
- package/src/definitions/deploy.ts +0 -73
- package/src/definitions/filesystem.ts +0 -217
- package/src/definitions/frg.ts +0 -67
- package/src/definitions/index.ts +0 -28
- package/src/definitions/memory.ts +0 -150
- package/src/definitions/messaging.ts +0 -734
- package/src/definitions/meta.ts +0 -392
- package/src/definitions/network.ts +0 -179
- package/src/definitions/outlook.ts +0 -318
- package/src/definitions/patch/apply-patch.ts +0 -235
- package/src/definitions/patch/fuzzy-match.ts +0 -217
- package/src/definitions/patch/index.ts +0 -1
- package/src/definitions/patch/patch-parser.ts +0 -297
- package/src/definitions/patch/sandbox-paths.ts +0 -129
- package/src/definitions/process/index.ts +0 -5
- package/src/definitions/process/process-registry.ts +0 -303
- package/src/definitions/process/process.ts +0 -456
- package/src/definitions/process/pty-keys.ts +0 -298
- package/src/definitions/process/session-slug.ts +0 -147
- package/src/definitions/quip.ts +0 -225
- package/src/definitions/search.ts +0 -67
- package/src/definitions/session-history.ts +0 -79
- package/src/definitions/shell.ts +0 -202
- package/src/definitions/slack.ts +0 -211
- package/src/definitions/web.ts +0 -119
- package/src/executors/apply-patch.ts +0 -1035
- package/src/executors/arion.ts +0 -199
- package/src/executors/code-intelligence.ts +0 -1179
- package/src/executors/deploy.ts +0 -1066
- package/src/executors/filesystem.ts +0 -1428
- package/src/executors/frg-freshness.ts +0 -743
- package/src/executors/frg.ts +0 -394
- package/src/executors/index.ts +0 -280
- package/src/executors/learning-meta.ts +0 -1367
- package/src/executors/lsp-client.ts +0 -355
- package/src/executors/memory.ts +0 -978
- package/src/executors/meta.ts +0 -293
- package/src/executors/process-registry.ts +0 -570
- package/src/executors/pty-session-store.ts +0 -43
- package/src/executors/pty.ts +0 -342
- package/src/executors/restart.ts +0 -133
- package/src/executors/search-freshness.ts +0 -249
- package/src/executors/search-types.ts +0 -98
- package/src/executors/search.ts +0 -89
- package/src/executors/self-diagnose.ts +0 -552
- package/src/executors/session-history.ts +0 -435
- package/src/executors/shell-safety.ts +0 -519
- package/src/executors/shell.ts +0 -1243
- package/src/executors/utils.ts +0 -40
- package/src/executors/web.ts +0 -786
- package/src/extraction/content-extraction.ts +0 -281
- package/src/extraction/index.ts +0 -5
- package/src/headless-control-contract.ts +0 -1149
- package/src/index.ts +0 -788
- package/src/local-control-http-auth.ts +0 -2
- package/src/mcp/client.ts +0 -218
- package/src/mcp/connection.ts +0 -568
- package/src/mcp/index.ts +0 -11
- package/src/mcp/jsonrpc.ts +0 -195
- package/src/mcp/types.ts +0 -199
- package/src/network-control-adapter.ts +0 -88
- package/src/network-runtime/address-types.ts +0 -218
- package/src/network-runtime/db-owner-fencing.ts +0 -91
- package/src/network-runtime/delivery-receipts.ts +0 -372
- package/src/network-runtime/direct-endpoint-authority.ts +0 -35
- package/src/network-runtime/index.ts +0 -316
- package/src/network-runtime/local-control-contract.ts +0 -784
- package/src/network-runtime/node-store-contract.ts +0 -46
- package/src/network-runtime/pair-route-contract.ts +0 -97
- package/src/network-runtime/peer-capabilities.ts +0 -48
- package/src/network-runtime/peer-principal-ref.ts +0 -20
- package/src/network-runtime/peer-state-machine.ts +0 -160
- package/src/network-runtime/protocol-schemas.ts +0 -265
- package/src/network-runtime/runtime-bootstrap-contract.ts +0 -83
- package/src/outlook/desktop-session.ts +0 -409
- package/src/policy.ts +0 -171
- package/src/providers/brave.ts +0 -80
- package/src/providers/duckduckgo.ts +0 -199
- package/src/providers/exa.ts +0 -85
- package/src/providers/firecrawl.ts +0 -77
- package/src/providers/index.ts +0 -8
- package/src/providers/jina.ts +0 -70
- package/src/providers/router.ts +0 -121
- package/src/providers/search-provider.ts +0 -74
- package/src/providers/tavily.ts +0 -74
- package/src/quip/desktop-session.ts +0 -435
- package/src/registry/index.ts +0 -1
- package/src/registry/registry.ts +0 -905
- package/src/runtime-socket-local-control-client.ts +0 -632
- package/src/security/dns-normalization.ts +0 -34
- package/src/security/dns-pinning.ts +0 -138
- package/src/security/external-content.ts +0 -129
- package/src/security/ssrf.ts +0 -207
- package/src/slack/desktop-session.ts +0 -493
- package/src/tool-factory.ts +0 -91
- package/src/types.ts +0 -1341
- package/src/utils/retry.ts +0 -163
- package/src/utils/safe-parse-json.ts +0 -176
- package/src/utils/url.ts +0 -20
- package/tests/benchmarks/registry.bench.ts +0 -57
- package/tests/cache/web-cache.test.ts +0 -147
- package/tests/critical-integration.test.ts +0 -1465
- package/tests/definitions/apply-patch.test.ts +0 -586
- package/tests/definitions/browser.test.ts +0 -495
- package/tests/definitions/delegation-pause-resume.test.ts +0 -758
- package/tests/definitions/execution.test.ts +0 -671
- package/tests/definitions/messaging-inbox-scope.test.ts +0 -229
- package/tests/definitions/messaging.test.ts +0 -1468
- package/tests/definitions/outlook.test.ts +0 -30
- package/tests/definitions/process.test.ts +0 -469
- package/tests/definitions/slack.test.ts +0 -28
- package/tests/definitions/tool-inventory.test.ts +0 -218
- package/tests/e2e/delegation-quest-orchestration.e2e.test.ts +0 -433
- package/tests/e2e/memory-tool-discovery-contract.e2e.test.ts +0 -81
- package/tests/executors/apply-patch.test.ts +0 -538
- package/tests/executors/arion.test.ts +0 -309
- package/tests/executors/conversation-primitives.test.ts +0 -250
- package/tests/executors/deploy.test.ts +0 -746
- package/tests/executors/filesystem-tools.test.ts +0 -357
- package/tests/executors/filesystem.test.ts +0 -959
- package/tests/executors/frg-freshness.test.ts +0 -136
- package/tests/executors/frg-merge.test.ts +0 -70
- package/tests/executors/frg-session-content.test.ts +0 -40
- package/tests/executors/frg.test.ts +0 -56
- package/tests/executors/memory-bugfixes.test.ts +0 -257
- package/tests/executors/memory-real-memoria.integration.test.ts +0 -316
- package/tests/executors/memory.test.ts +0 -853
- package/tests/executors/meta-tools.test.ts +0 -411
- package/tests/executors/meta.test.ts +0 -683
- package/tests/executors/path-containment.test.ts +0 -51
- package/tests/executors/process-registry.test.ts +0 -505
- package/tests/executors/pty.test.ts +0 -664
- package/tests/executors/quest-security.test.ts +0 -249
- package/tests/executors/read-file-media.test.ts +0 -230
- package/tests/executors/recall-knowledge-schema.test.ts +0 -209
- package/tests/executors/recall-tags.test.ts +0 -278
- package/tests/executors/remember-null-safety.contract.test.ts +0 -41
- package/tests/executors/restart.test.ts +0 -67
- package/tests/executors/search-unified.test.ts +0 -381
- package/tests/executors/session-history.test.ts +0 -340
- package/tests/executors/session-transcript.test.ts +0 -561
- package/tests/executors/shell-abort.test.ts +0 -416
- package/tests/executors/shell-env-blocklist.test.ts +0 -648
- package/tests/executors/shell-env-process.test.ts +0 -245
- package/tests/executors/shell-process-registry.test.ts +0 -334
- package/tests/executors/shell-tools.test.ts +0 -393
- package/tests/executors/shell.test.ts +0 -690
- package/tests/executors/web-abort-vs-timeout.test.ts +0 -213
- package/tests/executors/web-integration.test.ts +0 -633
- package/tests/executors/web-symlink.test.ts +0 -18
- package/tests/executors/web.test.ts +0 -1400
- package/tests/executors/write-stdin.test.ts +0 -145
- package/tests/extraction/content-extraction.test.ts +0 -153
- package/tests/guards/tools-default-test-lane.integration.test.ts +0 -21
- package/tests/guards/tools-package-test-commands.e2e.test.ts +0 -43
- package/tests/guards/tools-test-lane-manifest.contract.test.ts +0 -76
- package/tests/guards/tools-vitest-workspace-alias.contract.test.ts +0 -63
- package/tests/helpers/async-waits.ts +0 -53
- package/tests/integration/headless-control-contract.integration.test.ts +0 -153
- package/tests/integration/memory-tool-schema-parity.integration.test.ts +0 -67
- package/tests/integration/meta-tools-round-trip.integration.test.ts +0 -506
- package/tests/integration/quest-round-trip.test.ts +0 -303
- package/tests/integration/registry-executor-flow.test.ts +0 -85
- package/tests/integration.test.ts +0 -177
- package/tests/loading-tier.test.ts +0 -126
- package/tests/mcp/client-reconnect.test.ts +0 -267
- package/tests/mcp/connection.test.ts +0 -846
- package/tests/mcp/injectable-logger.test.ts +0 -83
- package/tests/mcp/jsonrpc.test.ts +0 -109
- package/tests/mcp/lifecycle.test.ts +0 -879
- package/tests/network-runtime/address-types.contract.test.ts +0 -143
- package/tests/network-runtime/continuity-bind-schema.contract.test.ts +0 -203
- package/tests/network-runtime/local-control-contract.test.ts +0 -869
- package/tests/network-runtime/local-control-invite-token.contract.test.ts +0 -146
- package/tests/network-runtime/node-store-contract.test.ts +0 -11
- package/tests/network-runtime/pair-protocol-nodeid.contract.test.ts +0 -15
- package/tests/network-runtime/peer-state-machine.contract.test.ts +0 -148
- package/tests/network-runtime/protocol-schemas.contract.test.ts +0 -512
- package/tests/network-runtime/relay-pending-nodeid.contract.test.ts +0 -62
- package/tests/network-runtime/runtime-bootstrap-contract.test.ts +0 -227
- package/tests/network-runtime/runtime-socket-local-control-client.test.ts +0 -621
- package/tests/network-runtime/wait-for-message-script.test.ts +0 -288
- package/tests/parallel.test.ts +0 -71
- package/tests/policy.test.ts +0 -184
- package/tests/print-default-test-lane.ts +0 -14
- package/tests/print-test-lane-manifest.ts +0 -22
- package/tests/providers/brave.test.ts +0 -159
- package/tests/providers/duckduckgo.test.ts +0 -207
- package/tests/providers/exa.test.ts +0 -175
- package/tests/providers/firecrawl.test.ts +0 -168
- package/tests/providers/jina.test.ts +0 -144
- package/tests/providers/router.test.ts +0 -328
- package/tests/providers/tavily.test.ts +0 -165
- package/tests/registry/discovery.test.ts +0 -154
- package/tests/registry/injectable-logger.test.ts +0 -230
- package/tests/registry/input-validation.test.ts +0 -361
- package/tests/registry/interface-completeness.test.ts +0 -85
- package/tests/registry/mcp-integration.test.ts +0 -103
- package/tests/registry/mcp-read-only-hint.test.ts +0 -60
- package/tests/registry/memoria-discovery.test.ts +0 -390
- package/tests/registry/nested-validation.test.ts +0 -283
- package/tests/registry/pseudo-tool-filtering.test.ts +0 -258
- package/tests/registry/registration-lifecycle.test.ts +0 -133
- package/tests/registry-validation.test.ts +0 -424
- package/tests/registry.test.ts +0 -460
- package/tests/security/dns-pinning.test.ts +0 -162
- package/tests/security/external-content.test.ts +0 -144
- package/tests/security/ssrf.test.ts +0 -118
- package/tests/shell-safety-integration.test.ts +0 -32
- package/tests/shell-safety.test.ts +0 -365
- package/tests/slack/desktop-session.test.ts +0 -50
- package/tests/test-lane-manifest.ts +0 -440
- package/tests/test-utils.ts +0 -27
- package/tests/tool-factory.test.ts +0 -188
- package/tests/utils/retry.test.ts +0 -231
- package/tests/utils/url.test.ts +0 -63
- package/tsconfig.cjs.json +0 -24
- package/tsconfig.json +0 -12
- package/vitest.config.ts +0 -55
- package/vitest.e2e.config.ts +0 -24
- package/vitest.integration.config.ts +0 -24
- package/vitest.native.config.ts +0 -24
|
@@ -1,316 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CRITICAL Integration Tests: Memory Executors with REAL Memoria
|
|
3
|
-
*
|
|
4
|
-
* Unlike memory.test.ts which uses vi.fn() mocks, these tests wire
|
|
5
|
-
* the memory executors to REAL Memoria instances with in-memory SQLite.
|
|
6
|
-
*
|
|
7
|
-
* This verifies the ACTUAL integration between:
|
|
8
|
-
* executeRemember() → Memoria.remember() → SQLite storage
|
|
9
|
-
* executeRecall() → Memoria.recall() → APR/index pipeline
|
|
10
|
-
* executeForget() → Memoria.deleteMemory() → storage + index cleanup
|
|
11
|
-
* executeDiscover() → Memoria.recallTools() → knowledge store
|
|
12
|
-
*
|
|
13
|
-
* The existing memory.test.ts validates input validation and error paths;
|
|
14
|
-
* these tests validate the full data round-trip.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { describe, it, expect, afterEach, vi } from "vitest";
|
|
18
|
-
import type { ToolContext } from "../../src/types.js";
|
|
19
|
-
import {
|
|
20
|
-
executeRemember,
|
|
21
|
-
executeRecall,
|
|
22
|
-
executeForget,
|
|
23
|
-
executeDiscover,
|
|
24
|
-
} from "../../src/executors/memory.js";
|
|
25
|
-
import { Memoria } from "@aria-cli/memoria";
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Create a real Memoria instance with in-memory storage for testing
|
|
29
|
-
*/
|
|
30
|
-
async function createRealMemoria(): Promise<Memoria> {
|
|
31
|
-
const memoria = new Memoria({
|
|
32
|
-
path: ":memory:",
|
|
33
|
-
embeddings: {
|
|
34
|
-
provider: "custom" as const,
|
|
35
|
-
model: "mock-embedding",
|
|
36
|
-
dimensions: 384,
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
await memoria.initialize();
|
|
40
|
-
return memoria;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Create a ToolContext with a real Memoria instance
|
|
45
|
-
*/
|
|
46
|
-
function createRealContext(memoria: Memoria): ToolContext {
|
|
47
|
-
return {
|
|
48
|
-
workingDir: "/test",
|
|
49
|
-
env: {},
|
|
50
|
-
memoria: memoria as any,
|
|
51
|
-
confirm: async () => true,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
describe("Memory Executors with Real Memoria", () => {
|
|
56
|
-
let memoria: Memoria;
|
|
57
|
-
|
|
58
|
-
afterEach(async () => {
|
|
59
|
-
if (memoria) {
|
|
60
|
-
await memoria.close();
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
// ══════════════════════════════════════════════════════════════
|
|
65
|
-
// REMEMBER → STORAGE
|
|
66
|
-
// ══════════════════════════════════════════════════════════════
|
|
67
|
-
|
|
68
|
-
it("[CRITICAL] executeRemember stores to real Memoria and returns valid ID", async () => {
|
|
69
|
-
memoria = await createRealMemoria();
|
|
70
|
-
const ctx = createRealContext(memoria);
|
|
71
|
-
|
|
72
|
-
const result = await executeRemember({ content: "Real Memoria integration test" }, ctx);
|
|
73
|
-
|
|
74
|
-
expect(result.success).toBe(true);
|
|
75
|
-
expect(result.data).toBeDefined();
|
|
76
|
-
expect((result.data as any).id).toBeTruthy();
|
|
77
|
-
|
|
78
|
-
// Verify it's actually in storage
|
|
79
|
-
const listed = await memoria.list({ limit: 100 });
|
|
80
|
-
expect(listed).toHaveLength(1);
|
|
81
|
-
expect(listed[0].content).toBe("Real Memoria integration test");
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it("[CRITICAL] executeRemember preserves tags and importance in real storage", async () => {
|
|
85
|
-
memoria = await createRealMemoria();
|
|
86
|
-
const ctx = createRealContext(memoria);
|
|
87
|
-
|
|
88
|
-
const result = await executeRemember(
|
|
89
|
-
{
|
|
90
|
-
content: "Tagged and important memory",
|
|
91
|
-
tags: ["testing", "integration"],
|
|
92
|
-
importance: 0.95,
|
|
93
|
-
},
|
|
94
|
-
ctx,
|
|
95
|
-
);
|
|
96
|
-
|
|
97
|
-
expect(result.success).toBe(true);
|
|
98
|
-
|
|
99
|
-
const listed = await memoria.list({ limit: 100 });
|
|
100
|
-
expect(listed).toHaveLength(1);
|
|
101
|
-
expect(listed[0].content).toBe("Tagged and important memory");
|
|
102
|
-
// Importance should be stored (may be adjusted by classification)
|
|
103
|
-
expect(typeof listed[0].importance).toBe("number");
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
// ══════════════════════════════════════════════════════════════
|
|
107
|
-
// REMEMBER → RECALL ROUND-TRIP
|
|
108
|
-
// ══════════════════════════════════════════════════════════════
|
|
109
|
-
|
|
110
|
-
it("[CRITICAL] executeRemember then executeRecall returns stored data", async () => {
|
|
111
|
-
memoria = await createRealMemoria();
|
|
112
|
-
const ctx = createRealContext(memoria);
|
|
113
|
-
|
|
114
|
-
// Store via executor
|
|
115
|
-
const rememberResult = await executeRemember(
|
|
116
|
-
{ content: "Round-trip test: TypeScript type inference" },
|
|
117
|
-
ctx,
|
|
118
|
-
);
|
|
119
|
-
expect(rememberResult.success).toBe(true);
|
|
120
|
-
|
|
121
|
-
// Recall via executor
|
|
122
|
-
const recallResult = await executeRecall({ query: "TypeScript type inference" }, ctx);
|
|
123
|
-
expect(recallResult.success).toBe(true);
|
|
124
|
-
|
|
125
|
-
const data = recallResult.data as any;
|
|
126
|
-
expect(data.count).toBeGreaterThanOrEqual(1);
|
|
127
|
-
expect(data.memories.some((m: any) => m.content.includes("TypeScript"))).toBe(true);
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
it("should respect recall limit parameter through real Memoria", async () => {
|
|
131
|
-
memoria = await createRealMemoria();
|
|
132
|
-
const ctx = createRealContext(memoria);
|
|
133
|
-
|
|
134
|
-
// Store multiple memories
|
|
135
|
-
for (let i = 0; i < 5; i++) {
|
|
136
|
-
await executeRemember({ content: `Limit test memory #${i}: programming concept ${i}` }, ctx);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Recall with limit=2
|
|
140
|
-
const result = await executeRecall({ query: "programming concept", limit: 2 }, ctx);
|
|
141
|
-
expect(result.success).toBe(true);
|
|
142
|
-
|
|
143
|
-
const data = result.data as any;
|
|
144
|
-
expect(data.count).toBeLessThanOrEqual(2);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
// ══════════════════════════════════════════════════════════════
|
|
148
|
-
// REMEMBER → FORGET → RECALL
|
|
149
|
-
// ══════════════════════════════════════════════════════════════
|
|
150
|
-
|
|
151
|
-
it("[CRITICAL] executeForget removes memory from real storage", async () => {
|
|
152
|
-
memoria = await createRealMemoria();
|
|
153
|
-
const ctx = createRealContext(memoria);
|
|
154
|
-
|
|
155
|
-
// Store
|
|
156
|
-
const rememberResult = await executeRemember({ content: "Memory to be forgotten" }, ctx);
|
|
157
|
-
const storedId = (rememberResult.data as any).id;
|
|
158
|
-
|
|
159
|
-
// Forget
|
|
160
|
-
const forgetResult = await executeForget({ id: storedId }, ctx);
|
|
161
|
-
expect(forgetResult.success).toBe(true);
|
|
162
|
-
expect((forgetResult.data as any).deleted).toBe(true);
|
|
163
|
-
|
|
164
|
-
// Verify gone from storage
|
|
165
|
-
const listed = await memoria.list({ limit: 100 });
|
|
166
|
-
expect(listed.every((m) => m.id !== storedId)).toBe(true);
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
it("should handle forget for non-existent ID in real Memoria", async () => {
|
|
170
|
-
memoria = await createRealMemoria();
|
|
171
|
-
const ctx = createRealContext(memoria);
|
|
172
|
-
|
|
173
|
-
const result = await executeForget({ id: "non-existent-id-xyz" }, ctx);
|
|
174
|
-
expect(result.success).toBe(false);
|
|
175
|
-
expect(result.message).toContain("not found");
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
// ══════════════════════════════════════════════════════════════
|
|
179
|
-
// REFLECT WITH REAL KNOWLEDGE STORE
|
|
180
|
-
// ══════════════════════════════════════════════════════════════
|
|
181
|
-
|
|
182
|
-
it("should executeDiscover against real Memoria knowledge store", async () => {
|
|
183
|
-
memoria = await createRealMemoria();
|
|
184
|
-
const ctx = createRealContext(memoria);
|
|
185
|
-
|
|
186
|
-
// Store some knowledge first
|
|
187
|
-
await memoria.rememberTool({
|
|
188
|
-
name: "vitest-framework",
|
|
189
|
-
description: "Fast testing framework for Vite projects",
|
|
190
|
-
confidence: 0.9,
|
|
191
|
-
tags: ["testing", "vite"],
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
// RecallKnowledge should query real knowledge store
|
|
195
|
-
const result = await executeDiscover({ topic: "testing framework" }, ctx);
|
|
196
|
-
expect(result.success).toBe(true);
|
|
197
|
-
|
|
198
|
-
const data = result.data as any;
|
|
199
|
-
expect(typeof data.toolCount).toBe("number");
|
|
200
|
-
expect(typeof data.skillCount).toBe("number");
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
it("should executeDiscover(kind=skill) against unified skills API", async () => {
|
|
204
|
-
memoria = await createRealMemoria();
|
|
205
|
-
const ctx = createRealContext(memoria);
|
|
206
|
-
|
|
207
|
-
// Skill synthesis requires >= 2 sequences with similar tasks (memoria-skills.ts:626).
|
|
208
|
-
// Run two sequences with the same task pattern to trigger learning.
|
|
209
|
-
for (let i = 0; i < 2; i++) {
|
|
210
|
-
memoria.startToolSequence("deploy service to staging");
|
|
211
|
-
memoria.recordToolUse({
|
|
212
|
-
tool: "bash",
|
|
213
|
-
input: { command: "pnpm build" },
|
|
214
|
-
success: true,
|
|
215
|
-
timestamp: new Date(),
|
|
216
|
-
});
|
|
217
|
-
memoria.recordToolUse({
|
|
218
|
-
tool: "grep",
|
|
219
|
-
input: { pattern: "ready", path: "deploy.log" },
|
|
220
|
-
success: true,
|
|
221
|
-
timestamp: new Date(),
|
|
222
|
-
});
|
|
223
|
-
await memoria.endToolSequence(true);
|
|
224
|
-
}
|
|
225
|
-
await memoria.waitForPendingEmbeddings();
|
|
226
|
-
|
|
227
|
-
const result = await executeDiscover({ topic: "deploy service to staging", limit: 5 }, ctx);
|
|
228
|
-
expect(result.success).toBe(true);
|
|
229
|
-
|
|
230
|
-
const data = result.data as { skillCount: number; skills: Array<{ id: string }> };
|
|
231
|
-
expect(data.skillCount).toBeGreaterThan(0);
|
|
232
|
-
expect(data.skills.length).toBeGreaterThan(0);
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
it("should executeDiscover(default kind) and include auto-learned skills", async () => {
|
|
236
|
-
memoria = await createRealMemoria();
|
|
237
|
-
const ctx = createRealContext(memoria);
|
|
238
|
-
|
|
239
|
-
await memoria.rememberTool({
|
|
240
|
-
name: "kubectl",
|
|
241
|
-
description: "Kubernetes control CLI",
|
|
242
|
-
confidence: 0.85,
|
|
243
|
-
tags: ["k8s"],
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
// Skill synthesis requires >= 2 sequences (memoria-skills.ts:626).
|
|
247
|
-
for (let i = 0; i < 2; i++) {
|
|
248
|
-
memoria.startToolSequence("deploy service to staging");
|
|
249
|
-
memoria.recordToolUse({
|
|
250
|
-
tool: "bash",
|
|
251
|
-
input: { command: "pnpm build" },
|
|
252
|
-
success: true,
|
|
253
|
-
timestamp: new Date(),
|
|
254
|
-
});
|
|
255
|
-
memoria.recordToolUse({
|
|
256
|
-
tool: "grep",
|
|
257
|
-
input: { pattern: "ready", path: "deploy.log" },
|
|
258
|
-
success: true,
|
|
259
|
-
timestamp: new Date(),
|
|
260
|
-
});
|
|
261
|
-
await memoria.endToolSequence(true);
|
|
262
|
-
}
|
|
263
|
-
await memoria.waitForPendingEmbeddings();
|
|
264
|
-
|
|
265
|
-
const result = await executeDiscover({ topic: "deploy service to staging", limit: 10 }, ctx);
|
|
266
|
-
expect(result.success).toBe(true);
|
|
267
|
-
|
|
268
|
-
const data = result.data as { skillCount: number; skills: Array<{ id: string }> };
|
|
269
|
-
expect(data.skillCount).toBeGreaterThan(0);
|
|
270
|
-
expect(data.skills.length).toBeGreaterThan(0);
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
// ══════════════════════════════════════════════════════════════
|
|
274
|
-
// DEDUPLICATION THROUGH EXECUTOR
|
|
275
|
-
// ══════════════════════════════════════════════════════════════
|
|
276
|
-
|
|
277
|
-
it("should deduplicate when same content is remembered twice via executor", async () => {
|
|
278
|
-
memoria = await createRealMemoria();
|
|
279
|
-
const ctx = createRealContext(memoria);
|
|
280
|
-
|
|
281
|
-
const first = await executeRemember({ content: "Dedup test via executor" }, ctx);
|
|
282
|
-
const second = await executeRemember({ content: "Dedup test via executor" }, ctx);
|
|
283
|
-
|
|
284
|
-
expect(first.success).toBe(true);
|
|
285
|
-
expect(second.success).toBe(true);
|
|
286
|
-
|
|
287
|
-
// Both should return the same ID
|
|
288
|
-
expect((first.data as any).id).toBe((second.data as any).id);
|
|
289
|
-
|
|
290
|
-
// Only one memory in storage
|
|
291
|
-
const listed = await memoria.list({ limit: 100 });
|
|
292
|
-
expect(listed).toHaveLength(1);
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
// ══════════════════════════════════════════════════════════════
|
|
296
|
-
// CONCURRENT OPERATIONS THROUGH EXECUTOR
|
|
297
|
-
// ══════════════════════════════════════════════════════════════
|
|
298
|
-
|
|
299
|
-
it("should handle concurrent remember calls through executor", async () => {
|
|
300
|
-
memoria = await createRealMemoria();
|
|
301
|
-
const ctx = createRealContext(memoria);
|
|
302
|
-
|
|
303
|
-
const promises = Array.from({ length: 5 }, (_, i) =>
|
|
304
|
-
executeRemember({ content: `Concurrent executor test #${i}` }, ctx),
|
|
305
|
-
);
|
|
306
|
-
|
|
307
|
-
const results = await Promise.all(promises);
|
|
308
|
-
expect(results.every((r) => r.success)).toBe(true);
|
|
309
|
-
|
|
310
|
-
const ids = new Set(results.map((r) => (r.data as any).id));
|
|
311
|
-
expect(ids.size).toBe(5);
|
|
312
|
-
|
|
313
|
-
const listed = await memoria.list({ limit: 100 });
|
|
314
|
-
expect(listed).toHaveLength(5);
|
|
315
|
-
});
|
|
316
|
-
});
|