@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,278 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* H4: Recall Tool Tags Threading
|
|
3
|
-
*
|
|
4
|
-
* Tests that tags are correctly passed through executeRecall() to
|
|
5
|
-
* memoria.recall(). The non-APR fallback path in executeRecall adds
|
|
6
|
-
* extra options (rerank, diversity, expandQuery), so tests use
|
|
7
|
-
* expect.objectContaining() for assertions.
|
|
8
|
-
*
|
|
9
|
-
* Also tests recall-C-2: tags are threaded through the APR path as
|
|
10
|
-
* `networks` in the recallWithAPR options.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
14
|
-
import type { ToolContext } from "../../src/types.js";
|
|
15
|
-
import { executeRecall, type RecallInput } from "../../src/executors/memory.js";
|
|
16
|
-
|
|
17
|
-
// Helper to create a mock Memoria instance (non-APR fallback path)
|
|
18
|
-
const createMockMemoria = () => ({
|
|
19
|
-
remember: vi.fn(),
|
|
20
|
-
recall: vi.fn(),
|
|
21
|
-
recallTools: vi.fn(),
|
|
22
|
-
rememberSkill: vi.fn().mockResolvedValue("skill-id"),
|
|
23
|
-
recallSkills: vi.fn().mockResolvedValue([]),
|
|
24
|
-
getSkill: vi.fn().mockResolvedValue(null),
|
|
25
|
-
recordSkillExecution: vi.fn().mockResolvedValue({ id: "exec-1", skillId: "s1", success: true, timestamp: new Date() }),
|
|
26
|
-
deleteMemory: vi.fn(),
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
// Helper to create a context with mock Memoria
|
|
30
|
-
const createContext = (memoria?: ReturnType<typeof createMockMemoria>): ToolContext => ({
|
|
31
|
-
workingDir: "/test/dir",
|
|
32
|
-
memoria,
|
|
33
|
-
env: {},
|
|
34
|
-
confirm: async () => true,
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
describe("H4: Recall tool tags threading", () => {
|
|
38
|
-
let mockMemoria: ReturnType<typeof createMockMemoria>;
|
|
39
|
-
let ctx: ToolContext;
|
|
40
|
-
|
|
41
|
-
beforeEach(() => {
|
|
42
|
-
mockMemoria = createMockMemoria();
|
|
43
|
-
ctx = createContext(mockMemoria);
|
|
44
|
-
mockMemoria.recall.mockResolvedValue({ memories: [] });
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it("should accept tags in RecallInput without type error", () => {
|
|
48
|
-
const input: RecallInput = {
|
|
49
|
-
query: "test query",
|
|
50
|
-
tags: ["important", "work"],
|
|
51
|
-
} as any;
|
|
52
|
-
|
|
53
|
-
expect(input.query).toBe("test query");
|
|
54
|
-
expect((input as any).tags).toEqual(["important", "work"]);
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it("should pass tags to memoria.recall() when provided", async () => {
|
|
58
|
-
const input = {
|
|
59
|
-
query: "search term",
|
|
60
|
-
tags: ["important"],
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
await executeRecall(input as any, ctx);
|
|
64
|
-
|
|
65
|
-
// The non-APR fallback path adds rerank, diversity, expandQuery
|
|
66
|
-
expect(mockMemoria.recall).toHaveBeenCalledWith(
|
|
67
|
-
"search term",
|
|
68
|
-
expect.objectContaining({
|
|
69
|
-
limit: 10,
|
|
70
|
-
tags: ["important"],
|
|
71
|
-
}),
|
|
72
|
-
);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
it("should pass multiple tags to memoria.recall()", async () => {
|
|
76
|
-
const input = {
|
|
77
|
-
query: "multi-tag query",
|
|
78
|
-
tags: ["project-alpha", "urgent", "review"],
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
await executeRecall(input as any, ctx);
|
|
82
|
-
|
|
83
|
-
expect(mockMemoria.recall).toHaveBeenCalledWith(
|
|
84
|
-
"multi-tag query",
|
|
85
|
-
expect.objectContaining({
|
|
86
|
-
limit: 10,
|
|
87
|
-
tags: ["project-alpha", "urgent", "review"],
|
|
88
|
-
}),
|
|
89
|
-
);
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it("should not pass tags when tags array is empty", async () => {
|
|
93
|
-
const input = {
|
|
94
|
-
query: "no tags query",
|
|
95
|
-
tags: [],
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
await executeRecall(input as any, ctx);
|
|
99
|
-
|
|
100
|
-
const callArgs = mockMemoria.recall.mock.calls[0][1];
|
|
101
|
-
expect(callArgs.limit).toBe(10);
|
|
102
|
-
expect(callArgs).not.toHaveProperty("tags");
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it("should not pass tags when tags is undefined", async () => {
|
|
106
|
-
const input = {
|
|
107
|
-
query: "no tags",
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
await executeRecall(input as any, ctx);
|
|
111
|
-
|
|
112
|
-
const callArgs = mockMemoria.recall.mock.calls[0][1];
|
|
113
|
-
expect(callArgs.limit).toBe(10);
|
|
114
|
-
expect(callArgs).not.toHaveProperty("tags");
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
it("should pass both tags and custom limit to memoria.recall()", async () => {
|
|
118
|
-
const input = {
|
|
119
|
-
query: "limited tagged query",
|
|
120
|
-
tags: ["critical"],
|
|
121
|
-
limit: 5,
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
await executeRecall(input as any, ctx);
|
|
125
|
-
|
|
126
|
-
expect(mockMemoria.recall).toHaveBeenCalledWith(
|
|
127
|
-
"limited tagged query",
|
|
128
|
-
expect.objectContaining({
|
|
129
|
-
limit: 5,
|
|
130
|
-
tags: ["critical"],
|
|
131
|
-
}),
|
|
132
|
-
);
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
it("should return successful result with tags filtering", async () => {
|
|
136
|
-
const mockMemories = [{ id: "mem-1", content: "Tagged memory", importance: 0.8 }];
|
|
137
|
-
mockMemoria.recall.mockResolvedValue({ memories: mockMemories });
|
|
138
|
-
|
|
139
|
-
const input = {
|
|
140
|
-
query: "tagged search",
|
|
141
|
-
tags: ["important"],
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
const result = await executeRecall(input as any, ctx);
|
|
145
|
-
|
|
146
|
-
expect(result.success).toBe(true);
|
|
147
|
-
expect(result.data).toEqual({
|
|
148
|
-
memories: mockMemories,
|
|
149
|
-
count: 1,
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
expect(mockMemoria.recall).toHaveBeenCalledWith(
|
|
153
|
-
"tagged search",
|
|
154
|
-
expect.objectContaining({ tags: ["important"] }),
|
|
155
|
-
);
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
// ============================================================================
|
|
160
|
-
// recall-C-2: Tags threaded through APR path as networks
|
|
161
|
-
// ============================================================================
|
|
162
|
-
|
|
163
|
-
// Helper to create a mock Memoria with APR support
|
|
164
|
-
const createMockMemoriaWithAPR = () => ({
|
|
165
|
-
remember: vi.fn(),
|
|
166
|
-
recall: vi.fn(),
|
|
167
|
-
recallTools: vi.fn(),
|
|
168
|
-
rememberSkill: vi.fn().mockResolvedValue("skill-id"),
|
|
169
|
-
recallSkills: vi.fn().mockResolvedValue([]),
|
|
170
|
-
getSkill: vi.fn().mockResolvedValue(null),
|
|
171
|
-
recordSkillExecution: vi.fn().mockResolvedValue({ id: "exec-1", skillId: "s1", success: true, timestamp: new Date() }),
|
|
172
|
-
deleteMemory: vi.fn(),
|
|
173
|
-
recallWithAPR: vi.fn().mockResolvedValue({
|
|
174
|
-
memories: [],
|
|
175
|
-
formattedContext: { context: "" },
|
|
176
|
-
intent: { type: "factual" },
|
|
177
|
-
sourceStats: { semantic: 0 },
|
|
178
|
-
}),
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
const createAPRContext = (memoria?: ReturnType<typeof createMockMemoriaWithAPR>): ToolContext => ({
|
|
182
|
-
workingDir: "/test/dir",
|
|
183
|
-
memoria,
|
|
184
|
-
env: {},
|
|
185
|
-
confirm: async () => true,
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
describe("recall-C-2: Tags threaded through APR path as networks", () => {
|
|
189
|
-
let mockMemoria: ReturnType<typeof createMockMemoriaWithAPR>;
|
|
190
|
-
let ctx: ToolContext;
|
|
191
|
-
|
|
192
|
-
beforeEach(() => {
|
|
193
|
-
mockMemoria = createMockMemoriaWithAPR();
|
|
194
|
-
ctx = createAPRContext(mockMemoria);
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
it("should pass tags as networks to recallWithAPR when APR is available", async () => {
|
|
198
|
-
const input = {
|
|
199
|
-
query: "search with tags",
|
|
200
|
-
tags: ["work", "urgent"],
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
await executeRecall(input as any, ctx);
|
|
204
|
-
|
|
205
|
-
expect(mockMemoria.recallWithAPR).toHaveBeenCalledWith(
|
|
206
|
-
"search with tags",
|
|
207
|
-
expect.objectContaining({
|
|
208
|
-
limit: 10,
|
|
209
|
-
networks: ["work", "urgent"],
|
|
210
|
-
}),
|
|
211
|
-
);
|
|
212
|
-
// Should NOT have called fallback recall()
|
|
213
|
-
expect(mockMemoria.recall).not.toHaveBeenCalled();
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
it("should not include networks when tags is empty on APR path", async () => {
|
|
217
|
-
const input = {
|
|
218
|
-
query: "no tags APR query",
|
|
219
|
-
tags: [],
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
await executeRecall(input as any, ctx);
|
|
223
|
-
|
|
224
|
-
const callArgs = mockMemoria.recallWithAPR.mock.calls[0][1];
|
|
225
|
-
expect(callArgs.limit).toBe(10);
|
|
226
|
-
expect(callArgs).not.toHaveProperty("networks");
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
it("should not include networks when tags is undefined on APR path", async () => {
|
|
230
|
-
const input = {
|
|
231
|
-
query: "undefined tags APR",
|
|
232
|
-
};
|
|
233
|
-
|
|
234
|
-
await executeRecall(input as any, ctx);
|
|
235
|
-
|
|
236
|
-
const callArgs = mockMemoria.recallWithAPR.mock.calls[0][1];
|
|
237
|
-
expect(callArgs.limit).toBe(10);
|
|
238
|
-
expect(callArgs).not.toHaveProperty("networks");
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
it("should pass networks and custom limit to recallWithAPR", async () => {
|
|
242
|
-
const input = {
|
|
243
|
-
query: "limited APR query",
|
|
244
|
-
tags: ["critical"],
|
|
245
|
-
limit: 3,
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
await executeRecall(input as any, ctx);
|
|
249
|
-
|
|
250
|
-
expect(mockMemoria.recallWithAPR).toHaveBeenCalledWith(
|
|
251
|
-
"limited APR query",
|
|
252
|
-
expect.objectContaining({
|
|
253
|
-
limit: 3,
|
|
254
|
-
networks: ["critical"],
|
|
255
|
-
}),
|
|
256
|
-
);
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
it("should return APR metadata (formattedContext, intent, sourceStats) in output", async () => {
|
|
260
|
-
mockMemoria.recallWithAPR.mockResolvedValue({
|
|
261
|
-
memories: [{ id: "m-1", content: "hello" }],
|
|
262
|
-
formattedContext: { context: "Relevant context" },
|
|
263
|
-
intent: { type: "factual" },
|
|
264
|
-
sourceStats: { semantic: 1, temporal: 0 },
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
const input = { query: "test APR output" };
|
|
268
|
-
const result = await executeRecall(input as any, ctx);
|
|
269
|
-
|
|
270
|
-
expect(result.success).toBe(true);
|
|
271
|
-
const data = result.data as any;
|
|
272
|
-
expect(data.memories).toHaveLength(1);
|
|
273
|
-
expect(data.count).toBe(1);
|
|
274
|
-
expect(data.formattedContext).toBe("Relevant context");
|
|
275
|
-
expect(data.intent).toBe("factual");
|
|
276
|
-
expect(data.sourceStats).toEqual({ semantic: 1, temporal: 0 });
|
|
277
|
-
});
|
|
278
|
-
});
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Remember Null Safety Contract Tests
|
|
3
|
-
*
|
|
4
|
-
* Verifies that executeRemember() handles null return from degraded Memoria.
|
|
5
|
-
* Tests the ACTUAL BUG: memory.ts:132 does result.id without null guard.
|
|
6
|
-
* ALL TESTS MUST FAIL against current code.
|
|
7
|
-
*/
|
|
8
|
-
import { describe, it, expect } from "vitest";
|
|
9
|
-
import { executeRemember } from "../../src/executors/memory.js";
|
|
10
|
-
|
|
11
|
-
describe("executeRemember null safety", () => {
|
|
12
|
-
it("should return failure when memoria.remember() returns null", async () => {
|
|
13
|
-
const degradedMemoria = {
|
|
14
|
-
remember: async () => null,
|
|
15
|
-
recall: async () => [],
|
|
16
|
-
deleteMemory: async () => false,
|
|
17
|
-
};
|
|
18
|
-
const ctx = { memoria: degradedMemoria } as any;
|
|
19
|
-
const input = { content: "test content" };
|
|
20
|
-
const result = await executeRemember(input, ctx);
|
|
21
|
-
expect(result.success).toBe(false);
|
|
22
|
-
expect(result.message).toBeDefined();
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it("should return success when memoria.remember() returns a Memory", async () => {
|
|
26
|
-
const mockMemory = {
|
|
27
|
-
id: "mem-123",
|
|
28
|
-
content: "test content",
|
|
29
|
-
createdAt: new Date(),
|
|
30
|
-
};
|
|
31
|
-
const workingMemoria = {
|
|
32
|
-
remember: async () => mockMemory,
|
|
33
|
-
recall: async () => [],
|
|
34
|
-
deleteMemory: async () => false,
|
|
35
|
-
};
|
|
36
|
-
const ctx = { memoria: workingMemoria } as any;
|
|
37
|
-
const input = { content: "test content" };
|
|
38
|
-
const result = await executeRemember(input, ctx);
|
|
39
|
-
expect(result.success).toBe(true);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { mkdtempSync } from "node:fs";
|
|
2
|
-
import { tmpdir } from "node:os";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
5
|
-
|
|
6
|
-
const { mockSpawn } = vi.hoisted(() => ({
|
|
7
|
-
mockSpawn: vi.fn(),
|
|
8
|
-
}));
|
|
9
|
-
|
|
10
|
-
vi.mock("node:child_process", () => ({
|
|
11
|
-
spawn: mockSpawn,
|
|
12
|
-
}));
|
|
13
|
-
|
|
14
|
-
import type { ToolContext } from "../../src/types.js";
|
|
15
|
-
import { executeRestart } from "../../src/executors/restart.js";
|
|
16
|
-
import { NO_RELAUNCH_ENV, RELAUNCH_EXIT_CODE } from "@aria-cli/types";
|
|
17
|
-
|
|
18
|
-
function createContext(workingDir: string): ToolContext {
|
|
19
|
-
return {
|
|
20
|
-
workingDir,
|
|
21
|
-
env: {},
|
|
22
|
-
confirm: async () => true,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
describe("executeRestart", () => {
|
|
27
|
-
let originalNoRelaunch: string | undefined;
|
|
28
|
-
|
|
29
|
-
beforeEach(() => {
|
|
30
|
-
originalNoRelaunch = process.env[NO_RELAUNCH_ENV];
|
|
31
|
-
mockSpawn.mockReset();
|
|
32
|
-
mockSpawn.mockReturnValue({ unref: vi.fn(), on: vi.fn() });
|
|
33
|
-
delete process.env[NO_RELAUNCH_ENV];
|
|
34
|
-
vi.restoreAllMocks();
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
afterEach(() => {
|
|
38
|
-
if (originalNoRelaunch === undefined) delete process.env[NO_RELAUNCH_ENV];
|
|
39
|
-
else process.env[NO_RELAUNCH_ENV] = originalNoRelaunch;
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it("supervised path: exits with RELAUNCH_EXIT_CODE when supervisor present", async () => {
|
|
43
|
-
process.env[NO_RELAUNCH_ENV] = "true";
|
|
44
|
-
const workingDir = mkdtempSync(join(tmpdir(), "aria-restart-sup-"));
|
|
45
|
-
const exitSpy = vi.spyOn(process, "exit").mockImplementation(((
|
|
46
|
-
code?: string | number | null,
|
|
47
|
-
) => {
|
|
48
|
-
throw new Error(`exit:${String(code)}`);
|
|
49
|
-
}) as never);
|
|
50
|
-
|
|
51
|
-
await expect(
|
|
52
|
-
executeRestart({ reason: "supervised test" }, createContext(workingDir)),
|
|
53
|
-
).rejects.toThrow(`exit:${RELAUNCH_EXIT_CODE}`);
|
|
54
|
-
|
|
55
|
-
expect(exitSpy).toHaveBeenCalledWith(RELAUNCH_EXIT_CODE);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it("daemon path: sends SIGINT for graceful restart when not supervised", async () => {
|
|
59
|
-
const workingDir = mkdtempSync(join(tmpdir(), "aria-restart-daemon-"));
|
|
60
|
-
const killSpy = vi.spyOn(process, "kill").mockImplementation((() => {}) as never);
|
|
61
|
-
|
|
62
|
-
const result = await executeRestart({ reason: "daemon test" }, createContext(workingDir));
|
|
63
|
-
|
|
64
|
-
expect(result.success).toBe(true);
|
|
65
|
-
expect(killSpy).toHaveBeenCalledWith(expect.any(Number), "SIGINT");
|
|
66
|
-
});
|
|
67
|
-
});
|