@principles/core 1.240.15 → 1.240.16

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.
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Tests for OpenClawCliRuntimeAdapter healthCheck message-file lifecycle.
3
+ *
4
+ * Context: commit 89c91854 fixed a bug where healthCheck probe used the deleted
5
+ * MessageFileRef.arg field instead of MessageFileRef.filePath. These tests
6
+ * verify the REAL behavior the original PR claimed to cover but didn't:
7
+ *
8
+ * - The message file is actually created on disk and its path is passed to CLI
9
+ * - The file is cleaned up on BOTH success and failure paths (finally block)
10
+ * - Each probe gets a unique session ID
11
+ * - workspaceDir controls where the temp file lands
12
+ *
13
+ * ERR-088 lesson: the prior version of this file asserted only
14
+ * `expect(adapter).toBeDefined()` and `expect(...).not.toThrow()` while
15
+ * hardcoding `/test/workspace` (which fails on non-root CI and on Windows).
16
+ * A refactor deleting cleanupMessageFile would have left every test green.
17
+ */
18
+ export {};
19
+ //# sourceMappingURL=openclaw-cli-runtime-adapter-message-file.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-cli-runtime-adapter-message-file.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/adapter/__tests__/openclaw-cli-runtime-adapter-message-file.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Tests for OpenClawCliRuntimeAdapter healthCheck message-file lifecycle.
3
+ *
4
+ * Context: commit 89c91854 fixed a bug where healthCheck probe used the deleted
5
+ * MessageFileRef.arg field instead of MessageFileRef.filePath. These tests
6
+ * verify the REAL behavior the original PR claimed to cover but didn't:
7
+ *
8
+ * - The message file is actually created on disk and its path is passed to CLI
9
+ * - The file is cleaned up on BOTH success and failure paths (finally block)
10
+ * - Each probe gets a unique session ID
11
+ * - workspaceDir controls where the temp file lands
12
+ *
13
+ * ERR-088 lesson: the prior version of this file asserted only
14
+ * `expect(adapter).toBeDefined()` and `expect(...).not.toThrow()` while
15
+ * hardcoding `/test/workspace` (which fails on non-root CI and on Windows).
16
+ * A refactor deleting cleanupMessageFile would have left every test green.
17
+ */
18
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
19
+ import * as fs from 'fs';
20
+ import * as path from 'path';
21
+ import * as os from 'os';
22
+ import { OpenClawCliRuntimeAdapter } from '../openclaw-cli-runtime-adapter.js';
23
+ // Mock runCliProcess so no real openclaw binary is needed; the filesystem
24
+ // (writeMessageFile / cleanupMessageFile) runs for real against a temp dir.
25
+ vi.mock('../../utils/cli-process-runner.js', () => ({
26
+ runCliProcess: vi.fn(),
27
+ }));
28
+ import { runCliProcess } from '../../utils/cli-process-runner.js';
29
+ const mockRunCliProcess = runCliProcess;
30
+ function makeCliOutput(overrides = {}) {
31
+ return {
32
+ stdout: '',
33
+ stderr: '',
34
+ exitCode: 0,
35
+ timedOut: false,
36
+ durationMs: 100,
37
+ ...overrides,
38
+ };
39
+ }
40
+ /** A successful probe-3 envelope: openclaw wraps the agent reply in stderr. */
41
+ function successEnvelope() {
42
+ return JSON.stringify({ payloads: [{ text: '{"ok":true}' }] });
43
+ }
44
+ describe('OpenClawCliRuntimeAdapter healthCheck message-file lifecycle', () => {
45
+ let tempWorkspace;
46
+ beforeEach(() => {
47
+ vi.clearAllMocks();
48
+ tempWorkspace = fs.mkdtempSync(path.join(os.tmpdir(), 'pd-msgfile-test-'));
49
+ });
50
+ afterEach(() => {
51
+ fs.rmSync(tempWorkspace, { recursive: true, force: true });
52
+ });
53
+ // Helper: stub the first two probes (version + agents-list) to succeed so
54
+ // probe 3 (the message-file path) is reached.
55
+ function stubFirstTwoProbes(agentId = 'diag') {
56
+ mockRunCliProcess
57
+ .mockResolvedValueOnce(makeCliOutput({ exitCode: 0, stdout: 'openclaw version' }))
58
+ .mockResolvedValueOnce(makeCliOutput({ exitCode: 0, stdout: `[{"id":"${agentId}"}]` }));
59
+ }
60
+ describe('message file is created and passed to the CLI', () => {
61
+ it('creates the message file on disk under <workspace>/.pd/tmp and passes its real path', async () => {
62
+ const adapter = new OpenClawCliRuntimeAdapter({
63
+ runtimeMode: 'local',
64
+ agentId: 'diag',
65
+ workspaceDir: tempWorkspace,
66
+ });
67
+ stubFirstTwoProbes();
68
+ // Capture the file path + content WHILE the probe runs (before cleanup
69
+ // in the finally block removes it). The mock implementation reads the
70
+ // file off disk and stashes it for assertion after healthCheck returns.
71
+ let capturedPath = '';
72
+ let capturedContent = '';
73
+ mockRunCliProcess.mockImplementationOnce((opts) => {
74
+ const msgIdx = opts.args.indexOf('--message-file');
75
+ const filePath = opts.args[msgIdx + 1];
76
+ if (typeof filePath !== 'string')
77
+ throw new Error('--message-file path missing in probe args');
78
+ capturedPath = filePath;
79
+ capturedContent = fs.readFileSync(capturedPath, 'utf8');
80
+ return Promise.resolve(makeCliOutput({ exitCode: 0, stderr: successEnvelope() }));
81
+ });
82
+ await adapter.healthCheck();
83
+ // Must use --message-file (the bug fix), not the deleted --message.
84
+ expect(capturedPath).not.toBe('');
85
+ // The path must live under the real workspace .pd/tmp dir.
86
+ expect(capturedPath).toContain(path.join('.pd', 'tmp'));
87
+ expect(capturedPath.startsWith(tempWorkspace)).toBe(true);
88
+ // ERR-088: assert the file content is the probe payload, proving the
89
+ // created file actually carries the message (not just a path string).
90
+ expect(capturedContent).toContain('pd-runtime-v2');
91
+ expect(capturedContent).toContain('reply with');
92
+ // The args must still contain --message-file (belt-and-suspenders).
93
+ const probe3Call = mockRunCliProcess.mock.calls[2]?.[0];
94
+ expect(probe3Call.args).toContain('--message-file');
95
+ expect(probe3Call.args).not.toContain('--message');
96
+ });
97
+ it('falls back to os.tmpdir() when no workspaceDir is configured', async () => {
98
+ const adapter = new OpenClawCliRuntimeAdapter({ runtimeMode: 'local', agentId: 'diag' });
99
+ stubFirstTwoProbes();
100
+ mockRunCliProcess.mockResolvedValueOnce(makeCliOutput({ exitCode: 0, stderr: successEnvelope() }));
101
+ await adapter.healthCheck();
102
+ const probe3Call = mockRunCliProcess.mock.calls[2]?.[0];
103
+ if (!probe3Call)
104
+ throw new Error('expected probe3 call');
105
+ const filePath = probe3Call.args[probe3Call.args.indexOf('--message-file') + 1];
106
+ // Without workspaceDir, the temp file must NOT be under any .pd/tmp.
107
+ expect(filePath).not.toContain(path.join('.pd', 'tmp'));
108
+ // It should still match the msg-*.json naming convention.
109
+ expect(path.basename(filePath)).toMatch(/^msg-.*\.json$/);
110
+ });
111
+ });
112
+ describe('cleanup runs on BOTH success and failure (finally block)', () => {
113
+ it('deletes the message file after a SUCCESSFUL probe', async () => {
114
+ const adapter = new OpenClawCliRuntimeAdapter({
115
+ runtimeMode: 'local',
116
+ agentId: 'diag',
117
+ workspaceDir: tempWorkspace,
118
+ });
119
+ stubFirstTwoProbes();
120
+ mockRunCliProcess.mockResolvedValueOnce(makeCliOutput({ exitCode: 0, stderr: successEnvelope() }));
121
+ await adapter.healthCheck();
122
+ const probe3Call = mockRunCliProcess.mock.calls[2]?.[0];
123
+ const filePath = probe3Call.args[probe3Call.args.indexOf('--message-file') + 1];
124
+ // ERR-088: the prior test only asserted result.healthy — removing
125
+ // cleanupMessageFile left it green. Now assert the file is GONE.
126
+ expect(fs.existsSync(filePath)).toBe(false);
127
+ });
128
+ it('deletes the message file after a TIMED-OUT probe', async () => {
129
+ const adapter = new OpenClawCliRuntimeAdapter({
130
+ runtimeMode: 'local',
131
+ agentId: 'diag',
132
+ workspaceDir: tempWorkspace,
133
+ });
134
+ stubFirstTwoProbes();
135
+ // Capture the file path before the probe runs so we can check cleanup
136
+ // after the early-return on timeout.
137
+ let createdFilePath = '';
138
+ mockRunCliProcess.mockResolvedValueOnce(makeCliOutput({ timedOut: true, exitCode: null }));
139
+ // We need the path; intercept by reading it from the mock call args.
140
+ // healthCheck calls writeMessageFile (real) then runCliProcess (mocked).
141
+ // The path is in the 3rd runCliProcess call's args.
142
+ const result = await adapter.healthCheck();
143
+ expect(result.healthy).toBe(false);
144
+ const probe3Call = mockRunCliProcess.mock.calls[2]?.[0];
145
+ createdFilePath = probe3Call.args[probe3Call.args.indexOf('--message-file') + 1];
146
+ // Even on timeout, the finally block must clean up.
147
+ expect(fs.existsSync(createdFilePath)).toBe(false);
148
+ });
149
+ it('deletes the message file after a probe with non-zero exit code', async () => {
150
+ const adapter = new OpenClawCliRuntimeAdapter({
151
+ runtimeMode: 'local',
152
+ agentId: 'diag',
153
+ workspaceDir: tempWorkspace,
154
+ });
155
+ stubFirstTwoProbes();
156
+ mockRunCliProcess.mockResolvedValueOnce(makeCliOutput({ exitCode: 1, stderr: 'PluginLoadFailureError' }));
157
+ await adapter.healthCheck();
158
+ const probe3Call = mockRunCliProcess.mock.calls[2]?.[0];
159
+ const filePath = probe3Call.args[probe3Call.args.indexOf('--message-file') + 1];
160
+ expect(fs.existsSync(filePath)).toBe(false);
161
+ });
162
+ });
163
+ describe('each probe gets a unique session ID', () => {
164
+ it('generates a distinct --session-id across two consecutive healthChecks', async () => {
165
+ const adapter = new OpenClawCliRuntimeAdapter({
166
+ runtimeMode: 'local',
167
+ agentId: 'diag',
168
+ workspaceDir: tempWorkspace,
169
+ });
170
+ const sessionIds = [];
171
+ for (let i = 0; i < 2; i++) {
172
+ stubFirstTwoProbes();
173
+ mockRunCliProcess.mockResolvedValueOnce(makeCliOutput({ exitCode: 0, stderr: successEnvelope() }));
174
+ await adapter.healthCheck();
175
+ const probe3Call = mockRunCliProcess.mock.calls[mockRunCliProcess.mock.calls.length - 1]?.[0];
176
+ const sid = probe3Call.args[probe3Call.args.indexOf('--session-id') + 1];
177
+ sessionIds.push(sid);
178
+ }
179
+ // ERR-088: the prior test ran healthCheck ONCE and asserted the prefix,
180
+ // which a hardcoded `pd-runtime-probe-*` ID would also satisfy. Two runs
181
+ // must yield two distinct IDs.
182
+ expect(sessionIds).toHaveLength(2);
183
+ expect(sessionIds[0]).not.toBe(sessionIds[1]);
184
+ expect(sessionIds.every((s) => s.startsWith('pd-runtime-probe-'))).toBe(true);
185
+ });
186
+ });
187
+ });
188
+ //# sourceMappingURL=openclaw-cli-runtime-adapter-message-file.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-cli-runtime-adapter-message-file.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/adapter/__tests__/openclaw-cli-runtime-adapter-message-file.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principles/core",
3
- "version": "1.240.15",
3
+ "version": "1.240.16",
4
4
  "description": "Universal Evolution SDK - framework-agnostic pain signal capture and principle injection",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",