@quolu/lattice 0.52.2 → 0.52.4
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 +1 -1
- package/src/artifact-contracts-v2.mjs +325 -325
- package/src/artifact-contracts.mjs +895 -895
- package/src/boundary-compiler.mjs +712 -712
- package/src/boundary-observation-compiler-v2.mjs +344 -344
- package/src/bounded-seam.mjs +230 -230
- package/src/bridge-address.mjs +107 -107
- package/src/bridge-cli.mjs +297 -297
- package/src/bridge-config.mjs +346 -346
- package/src/bridge-daemon.mjs +378 -378
- package/src/bridge-hub-protocol.mjs +198 -0
- package/src/bridge-launch-agent.mjs +323 -323
- package/src/bridge-registrar.mjs +102 -102
- package/src/bridge-server.mjs +376 -376
- package/src/cli-help.mjs +308 -308
- package/src/cli-stdio.mjs +40 -40
- package/src/control-compiler.mjs +532 -532
- package/src/dag-chain.mjs +261 -261
- package/src/factory-diagnostics.mjs +188 -188
- package/src/git-process.mjs +72 -0
- package/src/hash-chain.mjs +76 -76
- package/src/hooks-cli.mjs +1057 -1057
- package/src/isolation-runner.mjs +409 -409
- package/src/node-version-guard.mjs +44 -44
- package/src/project-cli.mjs +699 -697
- package/src/project-identity.mjs +130 -130
- package/src/rc1-black-box-oracle.mjs +906 -906
- package/src/rc1-comparison.mjs +154 -154
- package/src/rc1-evidence-bundle.mjs +456 -456
- package/src/rc1-v4-campaign.mjs +708 -708
- package/src/rc1-v4-transform.mjs +467 -467
- package/src/rc1-v5-artifact-set.mjs +855 -855
- package/src/rc1-v5-behavior-evidence.mjs +594 -594
- package/src/rc1-v5-campaign.mjs +797 -797
- package/src/rc1-v5-transform.mjs +421 -421
- package/src/rc1-v6-artifact-set.mjs +807 -807
- package/src/rc1-v6-behavior-evidence.mjs +273 -273
- package/src/rc1-v6-campaign.mjs +623 -623
- package/src/rc1-v6-causal-binding.mjs +473 -473
- package/src/rc1-v6-measurement.mjs +313 -313
- package/src/rc2-artifact-set.mjs +1584 -1584
- package/src/rc2-campaign.mjs +1506 -1506
- package/src/rc2-delivery-policy-front-end.mjs +1079 -1079
- package/src/rc2-delivery-policy-oracle.mjs +134 -134
- package/src/rc2-delivery-policy-transform.mjs +1127 -1127
- package/src/rc2-rc1-transfer-front-end.mjs +511 -511
- package/src/rc3-actual-dogfood.mjs +652 -652
- package/src/rc3-dogfood-scaffold.mjs +315 -315
- package/src/rc3-scripted-campaign.mjs +1383 -1383
- package/src/rc4-stage1-dogfood.mjs +673 -673
- package/src/runtime-adapter-registry.mjs +524 -524
- package/src/runtime-cli.mjs +4588 -4588
- package/src/runtime-contracts.mjs +824 -824
- package/src/runtime-control-store.mjs +604 -604
- package/src/runtime-controller-protocol.mjs +587 -587
- package/src/runtime-decision-verifier.mjs +701 -701
- package/src/runtime-diff-observer.mjs +361 -361
- package/src/runtime-direct-os-observer.mjs +301 -301
- package/src/runtime-driver-state.mjs +166 -166
- package/src/runtime-engine.mjs +779 -779
- package/src/runtime-errors.mjs +356 -356
- package/src/runtime-event-store.mjs +189 -189
- package/src/runtime-front-end.mjs +925 -925
- package/src/runtime-gate-store.mjs +481 -481
- package/src/runtime-hold-recompile.mjs +916 -916
- package/src/runtime-io-sentinel.mjs +391 -391
- package/src/runtime-lifecycle-lock.mjs +294 -294
- package/src/runtime-managed-supervisor.mjs +1490 -1490
- package/src/runtime-multi-epoch-store.mjs +838 -838
- package/src/runtime-projection.mjs +269 -269
- package/src/runtime-pull-intake.mjs +1192 -1192
- package/src/runtime-scripted-adapter-controller.mjs +1160 -1160
- package/src/runtime-scripted-executor.mjs +163 -163
- package/src/runtime-scripted-worktree.mjs +104 -104
- package/src/runtime-seam-resolve.mjs +428 -428
- package/src/runtime-seam-treatment.mjs +173 -173
- package/src/runtime-socket-owner.mjs +125 -125
- package/src/runtime-work-order-contracts.mjs +91 -91
- package/src/runtime-work-order-controller.mjs +1171 -1171
- package/src/runtime-worktree-executor.mjs +199 -199
- package/src/schedulability-compiler-v2.mjs +303 -303
- package/src/schedulability-verifier-v2.mjs +317 -317
- package/src/seam-apply.mjs +549 -549
- package/src/seam-commit-shared.mjs +22 -22
- package/src/seam-commit-transform.mjs +81 -81
- package/src/seam-commit.mjs +18 -18
- package/src/seam-cost.mjs +322 -322
- package/src/seam-derivation.mjs +188 -188
- package/src/seam-gate.mjs +146 -146
- package/src/seam-proposal-contracts.mjs +446 -446
- package/src/seam-proposal-queries.mjs +521 -521
- package/src/seam-proposal.mjs +2011 -2011
- package/src/seam-ref.mjs +33 -33
- package/src/seam-rewrite.mjs +286 -286
- package/src/seam-transform.mjs +554 -554
- package/src/seam-verification.mjs +260 -260
- package/src/sensor-adapter.mjs +432 -432
- package/src/sensor-cli.mjs +139 -139
- package/src/sensor-diff.mjs +661 -661
- package/src/sensor-node-runtime.mjs +53 -53
- package/src/sensor-runtime.mjs +52 -52
- package/src/timestamp-contract.mjs +8 -8
- package/src/todo-audit-pending.mjs +91 -91
- package/src/todo-chain.mjs +178 -178
- package/src/todo-cli.mjs +3143 -3141
- package/src/todo-contracts.mjs +728 -728
- package/src/todo-dashboard-registry.mjs +573 -573
- package/src/todo-dispatch-shape.mjs +190 -190
- package/src/todo-gantt-html-independence.mjs +239 -239
- package/src/todo-gantt-html-shared.mjs +226 -226
- package/src/todo-gantt-html-style.mjs +131 -131
- package/src/todo-gantt-html.mjs +248 -248
- package/src/todo-gantt-layout.mjs +974 -974
- package/src/todo-gantt-live.mjs +361 -361
- package/src/todo-gantt-nested.mjs +263 -263
- package/src/todo-gantt-presentation.mjs +217 -217
- package/src/todo-gantt-scope.mjs +123 -123
- package/src/todo-gantt-svg.mjs +353 -353
- package/src/todo-independence-contracts.mjs +595 -595
- package/src/todo-independence-guidance.mjs +322 -322
- package/src/todo-independence.mjs +640 -640
- package/src/todo-markdown-renderer.mjs +260 -260
- package/src/todo-migration.mjs +448 -448
- package/src/todo-narrative-anchor.mjs +130 -130
- package/src/todo-note-store.mjs +629 -629
- package/src/todo-parallel-candidates.mjs +114 -114
- package/src/todo-revision.mjs +995 -995
- package/src/todo-split.mjs +472 -472
- package/src/todo-status.mjs +690 -690
- package/src/todo-store-git-transaction.mjs +418 -418
- package/src/todo-store.mjs +4360 -4322
- package/src/treatment-compiler.mjs +728 -728
- package/src/treatment-runner.mjs +656 -656
- package/src/witness-scaffold.mjs +180 -180
package/src/sensor-cli.mjs
CHANGED
|
@@ -1,139 +1,139 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import sensorPackage from '../sensor/package.json' with { type: 'json' };
|
|
4
|
-
import { compareSensorIndexes, parseSensorDiffArgs, SensorDiffError } from './sensor-diff.mjs';
|
|
5
|
-
import { spawnSensorCli } from './sensor-runtime.mjs';
|
|
6
|
-
|
|
7
|
-
const MAX_CAPTURE_BYTES = 1024 * 1024;
|
|
8
|
-
const MAX_DIAGNOSTIC_BYTES = 16 * 1024;
|
|
9
|
-
|
|
10
|
-
function writeJson(stream, value) {
|
|
11
|
-
stream.write(`${JSON.stringify(value)}\n`);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const USAGE = 'usage: lattice sensor <init|sync> [path] --json'
|
|
15
|
-
+ ' | lattice sensor diff <rootA> <rootB>'
|
|
16
|
-
+ ' [--subtree-a <rel>] [--subtree-b <rel>] [--map-a <from>=<to>] [--map-b <from>=<to>]'
|
|
17
|
-
+ ' [--limit <n>] --json';
|
|
18
|
-
|
|
19
|
-
function usage(stderr) {
|
|
20
|
-
writeJson(stderr, { schema: 'lattice.cli_error.v2', code: 'USAGE', message: USAGE });
|
|
21
|
-
return 2;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function parse(argv) {
|
|
25
|
-
if (argv.at(-1) !== '--json') return null;
|
|
26
|
-
const words = argv.slice(0, -1);
|
|
27
|
-
if (words[0] === 'diff') {
|
|
28
|
-
const request = parseSensorDiffArgs(words.slice(1));
|
|
29
|
-
return request === null ? null : { command: 'diff', diff: request };
|
|
30
|
-
}
|
|
31
|
-
if (!['init', 'sync'].includes(words[0]) || words.length > 2) return null;
|
|
32
|
-
return { command: words[0], path: words[1] ?? '.' };
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* 2つのindexを突き合わせる。索引そのものは作らない——差分を見に来た人に、黙ってrepoの状態を
|
|
37
|
-
* 書き換える権限は与えられていない。片側が未索引なら、次の一手を添えて止まる。
|
|
38
|
-
*/
|
|
39
|
-
function runDiff(request, stdout, stderr) {
|
|
40
|
-
try {
|
|
41
|
-
writeJson(stdout, {
|
|
42
|
-
...compareSensorIndexes(request),
|
|
43
|
-
sensor_version: sensorPackage.version,
|
|
44
|
-
});
|
|
45
|
-
return 0;
|
|
46
|
-
} catch (error) {
|
|
47
|
-
// 想定外の失敗もtyped errorへ落とす。素通しさせるとstack traceだけが出て、
|
|
48
|
-
// 呼んだ側は「差分が出なかった」のか「壊れた」のかを機械で区別できない。
|
|
49
|
-
const typed = error instanceof SensorDiffError;
|
|
50
|
-
writeJson(stderr, {
|
|
51
|
-
schema: 'lattice.cli_error.v2',
|
|
52
|
-
code: typed ? error.code : 'LATTICE_SENSOR_DIFF_FAILED',
|
|
53
|
-
message: typed ? error.message : 'sensor diff failed',
|
|
54
|
-
detail: typed ? error.detail : { cause: error?.message ?? 'unknown error' },
|
|
55
|
-
});
|
|
56
|
-
return 1;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function execute(command, projectPath) {
|
|
61
|
-
return new Promise((resolve, reject) => {
|
|
62
|
-
let captured = 0;
|
|
63
|
-
const stderrChunks = [];
|
|
64
|
-
let diagnosticBytes = 0;
|
|
65
|
-
const hasIndex = existsSync(path.resolve(projectPath, '.lattice/sensor', 'sensor.db'));
|
|
66
|
-
const sensorArgs = command === 'init' && hasIndex
|
|
67
|
-
? ['index', projectPath, '--quiet']
|
|
68
|
-
: [command, projectPath];
|
|
69
|
-
const child = spawnSensorCli(sensorArgs, {
|
|
70
|
-
env: {
|
|
71
|
-
...process.env,
|
|
72
|
-
LATTICE_SENSOR_NO_UPDATE_CHECK: '1',
|
|
73
|
-
DO_NOT_TRACK: '1',
|
|
74
|
-
NO_COLOR: '1',
|
|
75
|
-
},
|
|
76
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
77
|
-
});
|
|
78
|
-
const observe = (chunk, retain = false) => {
|
|
79
|
-
captured += chunk.length;
|
|
80
|
-
if (retain && diagnosticBytes < MAX_DIAGNOSTIC_BYTES) {
|
|
81
|
-
const retained = chunk.subarray(0, MAX_DIAGNOSTIC_BYTES - diagnosticBytes);
|
|
82
|
-
stderrChunks.push(retained);
|
|
83
|
-
diagnosticBytes += retained.length;
|
|
84
|
-
}
|
|
85
|
-
if (captured > MAX_CAPTURE_BYTES) child.kill('SIGTERM');
|
|
86
|
-
};
|
|
87
|
-
child.stdout.on('data', observe);
|
|
88
|
-
child.stderr.on('data', (chunk) => observe(chunk, true));
|
|
89
|
-
child.once('error', reject);
|
|
90
|
-
child.once('close', (code, signal) => resolve({
|
|
91
|
-
code,
|
|
92
|
-
signal,
|
|
93
|
-
overflow: captured > MAX_CAPTURE_BYTES,
|
|
94
|
-
stderr: Buffer.concat(stderrChunks).toString('utf8').trim(),
|
|
95
|
-
}));
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export async function runSensorCli({ argv, stdout, stderr }) {
|
|
100
|
-
const request = parse(argv);
|
|
101
|
-
if (!request) return usage(stderr);
|
|
102
|
-
if (request.command === 'diff') return runDiff(request.diff, stdout, stderr);
|
|
103
|
-
try {
|
|
104
|
-
const result = await execute(request.command, request.path);
|
|
105
|
-
if (result.code !== 0 || result.signal || result.overflow) {
|
|
106
|
-
const notInitialized = request.command === 'sync' && /not initialized/u.test(result.stderr);
|
|
107
|
-
writeJson(stderr, {
|
|
108
|
-
schema: 'lattice.cli_error.v2',
|
|
109
|
-
code: result.overflow ? 'LATTICE_SENSOR_OUTPUT_LIMIT'
|
|
110
|
-
: notInitialized ? 'LATTICE_SENSOR_NOT_INITIALIZED' : 'LATTICE_SENSOR_COMMAND_FAILED',
|
|
111
|
-
message: `LatticeSensor ${request.command} failed`,
|
|
112
|
-
detail: {
|
|
113
|
-
exit_code: result.code,
|
|
114
|
-
signal: result.signal,
|
|
115
|
-
stderr: result.stderr,
|
|
116
|
-
next_action: notInitialized ? `lattice sensor init ${request.path} --json` : null,
|
|
117
|
-
},
|
|
118
|
-
});
|
|
119
|
-
return 1;
|
|
120
|
-
}
|
|
121
|
-
writeJson(stdout, {
|
|
122
|
-
schema: 'lattice.sensor_command_result.v1',
|
|
123
|
-
provider: 'lattice',
|
|
124
|
-
sensor_owner: 'lattice',
|
|
125
|
-
sensor_version: sensorPackage.version,
|
|
126
|
-
command: request.command,
|
|
127
|
-
status: 'ok',
|
|
128
|
-
});
|
|
129
|
-
return 0;
|
|
130
|
-
} catch (error) {
|
|
131
|
-
writeJson(stderr, {
|
|
132
|
-
schema: 'lattice.cli_error.v2',
|
|
133
|
-
code: error?.code === 'LATTICE_SENSOR_UNAVAILABLE' ? error.code : 'LATTICE_SENSOR_COMMAND_FAILED',
|
|
134
|
-
message: `LatticeSensor ${request.command} failed`,
|
|
135
|
-
detail: { cause: error?.message ?? 'unknown error' },
|
|
136
|
-
});
|
|
137
|
-
return 1;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import sensorPackage from '../sensor/package.json' with { type: 'json' };
|
|
4
|
+
import { compareSensorIndexes, parseSensorDiffArgs, SensorDiffError } from './sensor-diff.mjs';
|
|
5
|
+
import { spawnSensorCli } from './sensor-runtime.mjs';
|
|
6
|
+
|
|
7
|
+
const MAX_CAPTURE_BYTES = 1024 * 1024;
|
|
8
|
+
const MAX_DIAGNOSTIC_BYTES = 16 * 1024;
|
|
9
|
+
|
|
10
|
+
function writeJson(stream, value) {
|
|
11
|
+
stream.write(`${JSON.stringify(value)}\n`);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const USAGE = 'usage: lattice sensor <init|sync> [path] --json'
|
|
15
|
+
+ ' | lattice sensor diff <rootA> <rootB>'
|
|
16
|
+
+ ' [--subtree-a <rel>] [--subtree-b <rel>] [--map-a <from>=<to>] [--map-b <from>=<to>]'
|
|
17
|
+
+ ' [--limit <n>] --json';
|
|
18
|
+
|
|
19
|
+
function usage(stderr) {
|
|
20
|
+
writeJson(stderr, { schema: 'lattice.cli_error.v2', code: 'USAGE', message: USAGE });
|
|
21
|
+
return 2;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function parse(argv) {
|
|
25
|
+
if (argv.at(-1) !== '--json') return null;
|
|
26
|
+
const words = argv.slice(0, -1);
|
|
27
|
+
if (words[0] === 'diff') {
|
|
28
|
+
const request = parseSensorDiffArgs(words.slice(1));
|
|
29
|
+
return request === null ? null : { command: 'diff', diff: request };
|
|
30
|
+
}
|
|
31
|
+
if (!['init', 'sync'].includes(words[0]) || words.length > 2) return null;
|
|
32
|
+
return { command: words[0], path: words[1] ?? '.' };
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 2つのindexを突き合わせる。索引そのものは作らない——差分を見に来た人に、黙ってrepoの状態を
|
|
37
|
+
* 書き換える権限は与えられていない。片側が未索引なら、次の一手を添えて止まる。
|
|
38
|
+
*/
|
|
39
|
+
function runDiff(request, stdout, stderr) {
|
|
40
|
+
try {
|
|
41
|
+
writeJson(stdout, {
|
|
42
|
+
...compareSensorIndexes(request),
|
|
43
|
+
sensor_version: sensorPackage.version,
|
|
44
|
+
});
|
|
45
|
+
return 0;
|
|
46
|
+
} catch (error) {
|
|
47
|
+
// 想定外の失敗もtyped errorへ落とす。素通しさせるとstack traceだけが出て、
|
|
48
|
+
// 呼んだ側は「差分が出なかった」のか「壊れた」のかを機械で区別できない。
|
|
49
|
+
const typed = error instanceof SensorDiffError;
|
|
50
|
+
writeJson(stderr, {
|
|
51
|
+
schema: 'lattice.cli_error.v2',
|
|
52
|
+
code: typed ? error.code : 'LATTICE_SENSOR_DIFF_FAILED',
|
|
53
|
+
message: typed ? error.message : 'sensor diff failed',
|
|
54
|
+
detail: typed ? error.detail : { cause: error?.message ?? 'unknown error' },
|
|
55
|
+
});
|
|
56
|
+
return 1;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function execute(command, projectPath) {
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
let captured = 0;
|
|
63
|
+
const stderrChunks = [];
|
|
64
|
+
let diagnosticBytes = 0;
|
|
65
|
+
const hasIndex = existsSync(path.resolve(projectPath, '.lattice/sensor', 'sensor.db'));
|
|
66
|
+
const sensorArgs = command === 'init' && hasIndex
|
|
67
|
+
? ['index', projectPath, '--quiet']
|
|
68
|
+
: [command, projectPath];
|
|
69
|
+
const child = spawnSensorCli(sensorArgs, {
|
|
70
|
+
env: {
|
|
71
|
+
...process.env,
|
|
72
|
+
LATTICE_SENSOR_NO_UPDATE_CHECK: '1',
|
|
73
|
+
DO_NOT_TRACK: '1',
|
|
74
|
+
NO_COLOR: '1',
|
|
75
|
+
},
|
|
76
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
77
|
+
});
|
|
78
|
+
const observe = (chunk, retain = false) => {
|
|
79
|
+
captured += chunk.length;
|
|
80
|
+
if (retain && diagnosticBytes < MAX_DIAGNOSTIC_BYTES) {
|
|
81
|
+
const retained = chunk.subarray(0, MAX_DIAGNOSTIC_BYTES - diagnosticBytes);
|
|
82
|
+
stderrChunks.push(retained);
|
|
83
|
+
diagnosticBytes += retained.length;
|
|
84
|
+
}
|
|
85
|
+
if (captured > MAX_CAPTURE_BYTES) child.kill('SIGTERM');
|
|
86
|
+
};
|
|
87
|
+
child.stdout.on('data', observe);
|
|
88
|
+
child.stderr.on('data', (chunk) => observe(chunk, true));
|
|
89
|
+
child.once('error', reject);
|
|
90
|
+
child.once('close', (code, signal) => resolve({
|
|
91
|
+
code,
|
|
92
|
+
signal,
|
|
93
|
+
overflow: captured > MAX_CAPTURE_BYTES,
|
|
94
|
+
stderr: Buffer.concat(stderrChunks).toString('utf8').trim(),
|
|
95
|
+
}));
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export async function runSensorCli({ argv, stdout, stderr }) {
|
|
100
|
+
const request = parse(argv);
|
|
101
|
+
if (!request) return usage(stderr);
|
|
102
|
+
if (request.command === 'diff') return runDiff(request.diff, stdout, stderr);
|
|
103
|
+
try {
|
|
104
|
+
const result = await execute(request.command, request.path);
|
|
105
|
+
if (result.code !== 0 || result.signal || result.overflow) {
|
|
106
|
+
const notInitialized = request.command === 'sync' && /not initialized/u.test(result.stderr);
|
|
107
|
+
writeJson(stderr, {
|
|
108
|
+
schema: 'lattice.cli_error.v2',
|
|
109
|
+
code: result.overflow ? 'LATTICE_SENSOR_OUTPUT_LIMIT'
|
|
110
|
+
: notInitialized ? 'LATTICE_SENSOR_NOT_INITIALIZED' : 'LATTICE_SENSOR_COMMAND_FAILED',
|
|
111
|
+
message: `LatticeSensor ${request.command} failed`,
|
|
112
|
+
detail: {
|
|
113
|
+
exit_code: result.code,
|
|
114
|
+
signal: result.signal,
|
|
115
|
+
stderr: result.stderr,
|
|
116
|
+
next_action: notInitialized ? `lattice sensor init ${request.path} --json` : null,
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
return 1;
|
|
120
|
+
}
|
|
121
|
+
writeJson(stdout, {
|
|
122
|
+
schema: 'lattice.sensor_command_result.v1',
|
|
123
|
+
provider: 'lattice',
|
|
124
|
+
sensor_owner: 'lattice',
|
|
125
|
+
sensor_version: sensorPackage.version,
|
|
126
|
+
command: request.command,
|
|
127
|
+
status: 'ok',
|
|
128
|
+
});
|
|
129
|
+
return 0;
|
|
130
|
+
} catch (error) {
|
|
131
|
+
writeJson(stderr, {
|
|
132
|
+
schema: 'lattice.cli_error.v2',
|
|
133
|
+
code: error?.code === 'LATTICE_SENSOR_UNAVAILABLE' ? error.code : 'LATTICE_SENSOR_COMMAND_FAILED',
|
|
134
|
+
message: `LatticeSensor ${request.command} failed`,
|
|
135
|
+
detail: { cause: error?.message ?? 'unknown error' },
|
|
136
|
+
});
|
|
137
|
+
return 1;
|
|
138
|
+
}
|
|
139
|
+
}
|