@skillsmith/core 0.8.2 → 0.9.0
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/CHANGELOG.md +5 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/config/device-identity.d.ts +113 -0
- package/dist/src/config/device-identity.d.ts.map +1 -0
- package/dist/src/config/device-identity.js +171 -0
- package/dist/src/config/device-identity.js.map +1 -0
- package/dist/src/config/device-identity.test.d.ts +10 -0
- package/dist/src/config/device-identity.test.d.ts.map +1 -0
- package/dist/src/config/device-identity.test.js +213 -0
- package/dist/src/config/device-identity.test.js.map +1 -0
- package/dist/src/config/index.d.ts +9 -0
- package/dist/src/config/index.d.ts.map +1 -1
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/exports/services.d.ts +1 -1
- package/dist/src/exports/services.d.ts.map +1 -1
- package/dist/src/exports/services.js +5 -1
- package/dist/src/exports/services.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/install/index.d.ts +1 -1
- package/dist/src/install/index.d.ts.map +1 -1
- package/dist/src/install/index.js +1 -1
- package/dist/src/install/index.js.map +1 -1
- package/dist/src/install/paths.d.ts +16 -0
- package/dist/src/install/paths.d.ts.map +1 -1
- package/dist/src/install/paths.js +22 -0
- package/dist/src/install/paths.js.map +1 -1
- package/dist/src/install/paths.test.d.ts +2 -0
- package/dist/src/install/paths.test.d.ts.map +1 -0
- package/dist/src/install/paths.test.js +61 -0
- package/dist/src/install/paths.test.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.scanners.d.ts +10 -0
- package/dist/src/security/scanner/SecurityScanner.scanners.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.scanners.js +68 -1
- package/dist/src/security/scanner/SecurityScanner.scanners.js.map +1 -1
- package/dist/src/sync/index.d.ts +6 -0
- package/dist/src/sync/index.d.ts.map +1 -1
- package/dist/src/sync/index.js +8 -0
- package/dist/src/sync/index.js.map +1 -1
- package/dist/src/sync/inventory-builder.d.ts +21 -0
- package/dist/src/sync/inventory-builder.d.ts.map +1 -0
- package/dist/src/sync/inventory-builder.js +26 -0
- package/dist/src/sync/inventory-builder.js.map +1 -0
- package/dist/src/sync/inventory-client.d.ts +64 -0
- package/dist/src/sync/inventory-client.d.ts.map +1 -0
- package/dist/src/sync/inventory-client.js +150 -0
- package/dist/src/sync/inventory-client.js.map +1 -0
- package/dist/src/sync/inventory-client.test.d.ts +14 -0
- package/dist/src/sync/inventory-client.test.d.ts.map +1 -0
- package/dist/src/sync/inventory-client.test.js +146 -0
- package/dist/src/sync/inventory-client.test.js.map +1 -0
- package/dist/src/sync/inventory-collector.d.ts +35 -0
- package/dist/src/sync/inventory-collector.d.ts.map +1 -0
- package/dist/src/sync/inventory-collector.js +149 -0
- package/dist/src/sync/inventory-collector.js.map +1 -0
- package/dist/src/sync/inventory-collector.test.d.ts +14 -0
- package/dist/src/sync/inventory-collector.test.d.ts.map +1 -0
- package/dist/src/sync/inventory-collector.test.js +107 -0
- package/dist/src/sync/inventory-collector.test.js.map +1 -0
- package/dist/src/sync/inventory-device.d.ts +36 -0
- package/dist/src/sync/inventory-device.d.ts.map +1 -0
- package/dist/src/sync/inventory-device.js +58 -0
- package/dist/src/sync/inventory-device.js.map +1 -0
- package/dist/src/sync/inventory-push.d.ts +45 -0
- package/dist/src/sync/inventory-push.d.ts.map +1 -0
- package/dist/src/sync/inventory-push.js +62 -0
- package/dist/src/sync/inventory-push.js.map +1 -0
- package/dist/src/sync/inventory-push.test.d.ts +16 -0
- package/dist/src/sync/inventory-push.test.d.ts.map +1 -0
- package/dist/src/sync/inventory-push.test.js +104 -0
- package/dist/src/sync/inventory-push.test.js.map +1 -0
- package/dist/src/sync/inventory-types.d.ts +101 -0
- package/dist/src/sync/inventory-types.d.ts.map +1 -0
- package/dist/src/sync/inventory-types.js +42 -0
- package/dist/src/sync/inventory-types.js.map +1 -0
- package/dist/tests/security/pii-detection.test.js +107 -0
- package/dist/tests/security/pii-detection.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device Identity Module
|
|
3
|
+
* @module @skillsmith/core/config/device-identity
|
|
4
|
+
*
|
|
5
|
+
* SMI-5391: Cross-harness inventory sync — device identity and push throttle.
|
|
6
|
+
*
|
|
7
|
+
* Manages a stable client-generated device UUID persisted in ~/.skillsmith/config.json
|
|
8
|
+
* under the `inventory` namespace. Provides helpers for labelling the device, tracking
|
|
9
|
+
* the last inventory push timestamp, and determining when an auto-push is due.
|
|
10
|
+
*
|
|
11
|
+
* The SERVER (`user_telemetry_preferences.inventory_sync_enabled`) remains the source
|
|
12
|
+
* of truth for consent. `isInventorySyncDisabledLocally()` is a fast-path LOCAL
|
|
13
|
+
* opt-out that short-circuits the upload before it starts.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import {
|
|
18
|
+
* getOrCreateDeviceId,
|
|
19
|
+
* getLastInventoryPushAt,
|
|
20
|
+
* shouldAutoPush,
|
|
21
|
+
* recordInventoryPush,
|
|
22
|
+
* } from './device-identity.js'
|
|
23
|
+
*
|
|
24
|
+
* const deviceId = getOrCreateDeviceId()
|
|
25
|
+
* if (shouldAutoPush(Date.now(), getLastInventoryPushAt())) {
|
|
26
|
+
* // ...build + upload the snapshot for `deviceId`...
|
|
27
|
+
* recordInventoryPush(new Date().toISOString())
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Return the persisted device UUID, or `undefined` if none has been created yet.
|
|
33
|
+
*
|
|
34
|
+
* Pure read — no side effects.
|
|
35
|
+
*
|
|
36
|
+
* SMI-5391
|
|
37
|
+
*/
|
|
38
|
+
export declare function getDeviceId(): string | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Return the persisted device UUID, creating and persisting a new v4 UUID if none exists.
|
|
41
|
+
*
|
|
42
|
+
* The generated UUID satisfies the edge-function validator regex:
|
|
43
|
+
* `/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i`
|
|
44
|
+
*
|
|
45
|
+
* Preserves any existing `deviceLabel` and `lastPushAt` during the write.
|
|
46
|
+
*
|
|
47
|
+
* SMI-5391
|
|
48
|
+
*/
|
|
49
|
+
export declare function getOrCreateDeviceId(): string;
|
|
50
|
+
/**
|
|
51
|
+
* Set (or clear) the optional user-facing label for this device.
|
|
52
|
+
*
|
|
53
|
+
* Passing `undefined` removes `deviceLabel` from the persisted block while
|
|
54
|
+
* preserving `deviceId` and `lastPushAt`.
|
|
55
|
+
*
|
|
56
|
+
* SMI-5391
|
|
57
|
+
*
|
|
58
|
+
* @param label - Human-readable device name, or `undefined` to clear.
|
|
59
|
+
*/
|
|
60
|
+
export declare function setDeviceLabel(label: string | undefined): void;
|
|
61
|
+
/**
|
|
62
|
+
* Clear the device identity so the next inventory push registers a fresh device.
|
|
63
|
+
*
|
|
64
|
+
* Implementation note: delegates to `saveConfig({ inventory: undefined })`, which
|
|
65
|
+
* removes the entire `inventory` block (including `deviceLabel` if set). This is the
|
|
66
|
+
* simplest correct approach and is explicitly acceptable per the SMI-5391 spec. A
|
|
67
|
+
* subsequent `getOrCreateDeviceId()` call will generate a new UUID.
|
|
68
|
+
*
|
|
69
|
+
* SMI-5391
|
|
70
|
+
*/
|
|
71
|
+
export declare function forgetDevice(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Return `true` when the local env flag opts this device out of inventory sync.
|
|
74
|
+
*
|
|
75
|
+
* Checks `SKILLSMITH_INVENTORY_DISABLE` — accepts `'1'` or `'true'`
|
|
76
|
+
* (case-insensitive). This is a LOCAL fast-path opt-out only; the SERVER
|
|
77
|
+
* (`user_telemetry_preferences.inventory_sync_enabled`) remains the authoritative
|
|
78
|
+
* consent gate.
|
|
79
|
+
*
|
|
80
|
+
* SMI-5391
|
|
81
|
+
*/
|
|
82
|
+
export declare function isInventorySyncDisabledLocally(): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Return the ISO timestamp of the last successful inventory push, or `undefined`.
|
|
85
|
+
*
|
|
86
|
+
* SMI-5391
|
|
87
|
+
*/
|
|
88
|
+
export declare function getLastInventoryPushAt(): string | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* Persist an ISO timestamp marking a successful inventory push.
|
|
91
|
+
*
|
|
92
|
+
* Preserves any existing `deviceId` and `deviceLabel` during the write.
|
|
93
|
+
*
|
|
94
|
+
* SMI-5391
|
|
95
|
+
*
|
|
96
|
+
* @param timestampIso - ISO 8601 timestamp (e.g. `new Date().toISOString()`).
|
|
97
|
+
*/
|
|
98
|
+
export declare function recordInventoryPush(timestampIso: string): void;
|
|
99
|
+
/**
|
|
100
|
+
* Return `true` when an auto-push is due.
|
|
101
|
+
*
|
|
102
|
+
* Pure function — `now` is injected for deterministic tests (reuses the
|
|
103
|
+
* SMI-4590 session-throttle convention).
|
|
104
|
+
*
|
|
105
|
+
* @param now - Current Unix epoch in milliseconds (e.g. `Date.now()`).
|
|
106
|
+
* @param lastPushAt - ISO timestamp of the previous push; `undefined` means never pushed.
|
|
107
|
+
* @param throttleMs - Minimum gap between pushes in milliseconds (default: 24 h).
|
|
108
|
+
* @returns `true` if `lastPushAt` is absent, unparseable, or at/beyond `throttleMs` ago.
|
|
109
|
+
*
|
|
110
|
+
* SMI-5391
|
|
111
|
+
*/
|
|
112
|
+
export declare function shouldAutoPush(now: number, lastPushAt?: string, throttleMs?: number): boolean;
|
|
113
|
+
//# sourceMappingURL=device-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-identity.d.ts","sourceRoot":"","sources":["../../../src/config/device-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AASH;;;;;;GAMG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAEhD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAa5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAQ9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAMD;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,IAAI,OAAO,CAIxD;AAMD;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAE3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAQ9D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,SAAsB,GAC/B,OAAO,CAKT"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device Identity Module
|
|
3
|
+
* @module @skillsmith/core/config/device-identity
|
|
4
|
+
*
|
|
5
|
+
* SMI-5391: Cross-harness inventory sync — device identity and push throttle.
|
|
6
|
+
*
|
|
7
|
+
* Manages a stable client-generated device UUID persisted in ~/.skillsmith/config.json
|
|
8
|
+
* under the `inventory` namespace. Provides helpers for labelling the device, tracking
|
|
9
|
+
* the last inventory push timestamp, and determining when an auto-push is due.
|
|
10
|
+
*
|
|
11
|
+
* The SERVER (`user_telemetry_preferences.inventory_sync_enabled`) remains the source
|
|
12
|
+
* of truth for consent. `isInventorySyncDisabledLocally()` is a fast-path LOCAL
|
|
13
|
+
* opt-out that short-circuits the upload before it starts.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import {
|
|
18
|
+
* getOrCreateDeviceId,
|
|
19
|
+
* getLastInventoryPushAt,
|
|
20
|
+
* shouldAutoPush,
|
|
21
|
+
* recordInventoryPush,
|
|
22
|
+
* } from './device-identity.js'
|
|
23
|
+
*
|
|
24
|
+
* const deviceId = getOrCreateDeviceId()
|
|
25
|
+
* if (shouldAutoPush(Date.now(), getLastInventoryPushAt())) {
|
|
26
|
+
* // ...build + upload the snapshot for `deviceId`...
|
|
27
|
+
* recordInventoryPush(new Date().toISOString())
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
import { randomUUID } from 'node:crypto';
|
|
32
|
+
import { loadConfig, saveConfig } from './index.js';
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// Device identity
|
|
35
|
+
// ============================================================================
|
|
36
|
+
/**
|
|
37
|
+
* Return the persisted device UUID, or `undefined` if none has been created yet.
|
|
38
|
+
*
|
|
39
|
+
* Pure read — no side effects.
|
|
40
|
+
*
|
|
41
|
+
* SMI-5391
|
|
42
|
+
*/
|
|
43
|
+
export function getDeviceId() {
|
|
44
|
+
return loadConfig().inventory?.deviceId;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Return the persisted device UUID, creating and persisting a new v4 UUID if none exists.
|
|
48
|
+
*
|
|
49
|
+
* The generated UUID satisfies the edge-function validator regex:
|
|
50
|
+
* `/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i`
|
|
51
|
+
*
|
|
52
|
+
* Preserves any existing `deviceLabel` and `lastPushAt` during the write.
|
|
53
|
+
*
|
|
54
|
+
* SMI-5391
|
|
55
|
+
*/
|
|
56
|
+
export function getOrCreateDeviceId() {
|
|
57
|
+
const config = loadConfig();
|
|
58
|
+
const existing = config.inventory?.deviceId;
|
|
59
|
+
if (existing)
|
|
60
|
+
return existing;
|
|
61
|
+
const deviceId = randomUUID();
|
|
62
|
+
saveConfig({
|
|
63
|
+
inventory: {
|
|
64
|
+
...config.inventory,
|
|
65
|
+
deviceId,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
return deviceId;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Set (or clear) the optional user-facing label for this device.
|
|
72
|
+
*
|
|
73
|
+
* Passing `undefined` removes `deviceLabel` from the persisted block while
|
|
74
|
+
* preserving `deviceId` and `lastPushAt`.
|
|
75
|
+
*
|
|
76
|
+
* SMI-5391
|
|
77
|
+
*
|
|
78
|
+
* @param label - Human-readable device name, or `undefined` to clear.
|
|
79
|
+
*/
|
|
80
|
+
export function setDeviceLabel(label) {
|
|
81
|
+
const config = loadConfig();
|
|
82
|
+
saveConfig({
|
|
83
|
+
inventory: {
|
|
84
|
+
...config.inventory,
|
|
85
|
+
deviceLabel: label,
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Clear the device identity so the next inventory push registers a fresh device.
|
|
91
|
+
*
|
|
92
|
+
* Implementation note: delegates to `saveConfig({ inventory: undefined })`, which
|
|
93
|
+
* removes the entire `inventory` block (including `deviceLabel` if set). This is the
|
|
94
|
+
* simplest correct approach and is explicitly acceptable per the SMI-5391 spec. A
|
|
95
|
+
* subsequent `getOrCreateDeviceId()` call will generate a new UUID.
|
|
96
|
+
*
|
|
97
|
+
* SMI-5391
|
|
98
|
+
*/
|
|
99
|
+
export function forgetDevice() {
|
|
100
|
+
saveConfig({ inventory: undefined });
|
|
101
|
+
}
|
|
102
|
+
// ============================================================================
|
|
103
|
+
// Sync disable flag
|
|
104
|
+
// ============================================================================
|
|
105
|
+
/**
|
|
106
|
+
* Return `true` when the local env flag opts this device out of inventory sync.
|
|
107
|
+
*
|
|
108
|
+
* Checks `SKILLSMITH_INVENTORY_DISABLE` — accepts `'1'` or `'true'`
|
|
109
|
+
* (case-insensitive). This is a LOCAL fast-path opt-out only; the SERVER
|
|
110
|
+
* (`user_telemetry_preferences.inventory_sync_enabled`) remains the authoritative
|
|
111
|
+
* consent gate.
|
|
112
|
+
*
|
|
113
|
+
* SMI-5391
|
|
114
|
+
*/
|
|
115
|
+
export function isInventorySyncDisabledLocally() {
|
|
116
|
+
const val = process.env.SKILLSMITH_INVENTORY_DISABLE;
|
|
117
|
+
if (!val)
|
|
118
|
+
return false;
|
|
119
|
+
return val === '1' || val.toLowerCase() === 'true';
|
|
120
|
+
}
|
|
121
|
+
// ============================================================================
|
|
122
|
+
// Push throttle
|
|
123
|
+
// ============================================================================
|
|
124
|
+
/**
|
|
125
|
+
* Return the ISO timestamp of the last successful inventory push, or `undefined`.
|
|
126
|
+
*
|
|
127
|
+
* SMI-5391
|
|
128
|
+
*/
|
|
129
|
+
export function getLastInventoryPushAt() {
|
|
130
|
+
return loadConfig().inventory?.lastPushAt;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Persist an ISO timestamp marking a successful inventory push.
|
|
134
|
+
*
|
|
135
|
+
* Preserves any existing `deviceId` and `deviceLabel` during the write.
|
|
136
|
+
*
|
|
137
|
+
* SMI-5391
|
|
138
|
+
*
|
|
139
|
+
* @param timestampIso - ISO 8601 timestamp (e.g. `new Date().toISOString()`).
|
|
140
|
+
*/
|
|
141
|
+
export function recordInventoryPush(timestampIso) {
|
|
142
|
+
const config = loadConfig();
|
|
143
|
+
saveConfig({
|
|
144
|
+
inventory: {
|
|
145
|
+
...config.inventory,
|
|
146
|
+
lastPushAt: timestampIso,
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Return `true` when an auto-push is due.
|
|
152
|
+
*
|
|
153
|
+
* Pure function — `now` is injected for deterministic tests (reuses the
|
|
154
|
+
* SMI-4590 session-throttle convention).
|
|
155
|
+
*
|
|
156
|
+
* @param now - Current Unix epoch in milliseconds (e.g. `Date.now()`).
|
|
157
|
+
* @param lastPushAt - ISO timestamp of the previous push; `undefined` means never pushed.
|
|
158
|
+
* @param throttleMs - Minimum gap between pushes in milliseconds (default: 24 h).
|
|
159
|
+
* @returns `true` if `lastPushAt` is absent, unparseable, or at/beyond `throttleMs` ago.
|
|
160
|
+
*
|
|
161
|
+
* SMI-5391
|
|
162
|
+
*/
|
|
163
|
+
export function shouldAutoPush(now, lastPushAt, throttleMs = 24 * 60 * 60 * 1000) {
|
|
164
|
+
if (!lastPushAt)
|
|
165
|
+
return true;
|
|
166
|
+
const last = Date.parse(lastPushAt);
|
|
167
|
+
if (Number.isNaN(last))
|
|
168
|
+
return true;
|
|
169
|
+
return now - last >= throttleMs;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=device-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-identity.js","sourceRoot":"","sources":["../../../src/config/device-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEnD,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,UAAU,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAA;AACzC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAA;IAC3C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAE7B,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAA;IAC7B,UAAU,CAAC;QACT,SAAS,EAAE;YACT,GAAG,MAAM,CAAC,SAAS;YACnB,QAAQ;SACT;KACF,CAAC,CAAA;IACF,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,KAAyB;IACtD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,UAAU,CAAC;QACT,SAAS,EAAE;YACT,GAAG,MAAM,CAAC,SAAS;YACnB,WAAW,EAAE,KAAK;SACnB;KACF,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY;IAC1B,UAAU,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAA;AACtC,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,UAAU,8BAA8B;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAA;IACpD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IACtB,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,CAAA;AACpD,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,UAAU,EAAE,CAAC,SAAS,EAAE,UAAU,CAAA;AAC3C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,UAAU,CAAC;QACT,SAAS,EAAE;YACT,GAAG,MAAM,CAAC,SAAS;YACnB,UAAU,EAAE,YAAY;SACzB;KACF,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAW,EACX,UAAmB,EACnB,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAEhC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IACnC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACnC,OAAO,GAAG,GAAG,IAAI,IAAI,UAAU,CAAA;AACjC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-5391: Device identity module tests.
|
|
3
|
+
*
|
|
4
|
+
* Uses the same HOME-mutation harness as config/index.test.ts:
|
|
5
|
+
* - `makeTempConfigDir()` creates a unique tmpdir per test suite run
|
|
6
|
+
* - `process.env.HOME = tmpDir` before each test; restored in `afterEach`
|
|
7
|
+
* - Env vars (`SKILLSMITH_INVENTORY_DISABLE`) are also saved/restored in `afterEach`
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=device-identity.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-identity.test.d.ts","sourceRoot":"","sources":["../../../src/config/device-identity.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-5391: Device identity module tests.
|
|
3
|
+
*
|
|
4
|
+
* Uses the same HOME-mutation harness as config/index.test.ts:
|
|
5
|
+
* - `makeTempConfigDir()` creates a unique tmpdir per test suite run
|
|
6
|
+
* - `process.env.HOME = tmpDir` before each test; restored in `afterEach`
|
|
7
|
+
* - Env vars (`SKILLSMITH_INVENTORY_DISABLE`) are also saved/restored in `afterEach`
|
|
8
|
+
*/
|
|
9
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import * as os from 'os';
|
|
12
|
+
import { getDeviceId, getOrCreateDeviceId, setDeviceLabel, forgetDevice, isInventorySyncDisabledLocally, getLastInventoryPushAt, recordInventoryPush, shouldAutoPush, } from './device-identity.js';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Helpers
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
17
|
+
function makeTempConfigDir() {
|
|
18
|
+
return path.join(os.tmpdir(), `skillsmith-device-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
19
|
+
}
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Setup / teardown
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
let savedHome;
|
|
24
|
+
let savedInventoryDisable;
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
savedHome = process.env.HOME;
|
|
27
|
+
savedInventoryDisable = process.env.SKILLSMITH_INVENTORY_DISABLE;
|
|
28
|
+
// Point HOME at a fresh tmpdir so each test begins with a blank config
|
|
29
|
+
process.env.HOME = makeTempConfigDir();
|
|
30
|
+
delete process.env.SKILLSMITH_INVENTORY_DISABLE;
|
|
31
|
+
});
|
|
32
|
+
afterEach(() => {
|
|
33
|
+
if (savedHome !== undefined) {
|
|
34
|
+
process.env.HOME = savedHome;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
delete process.env.HOME;
|
|
38
|
+
}
|
|
39
|
+
if (savedInventoryDisable !== undefined) {
|
|
40
|
+
process.env.SKILLSMITH_INVENTORY_DISABLE = savedInventoryDisable;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
delete process.env.SKILLSMITH_INVENTORY_DISABLE;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// getOrCreateDeviceId
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
describe('getOrCreateDeviceId', () => {
|
|
50
|
+
it('returns a valid v4 UUID on first call', () => {
|
|
51
|
+
const id = getOrCreateDeviceId();
|
|
52
|
+
expect(UUID_RE.test(id)).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
it('is idempotent — second call returns the same id', () => {
|
|
55
|
+
const first = getOrCreateDeviceId();
|
|
56
|
+
const second = getOrCreateDeviceId();
|
|
57
|
+
expect(second).toBe(first);
|
|
58
|
+
});
|
|
59
|
+
it('persists the id so getDeviceId reads it back', () => {
|
|
60
|
+
const id = getOrCreateDeviceId();
|
|
61
|
+
expect(getDeviceId()).toBe(id);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// getDeviceId (pure read)
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
describe('getDeviceId', () => {
|
|
68
|
+
it('returns undefined before any id has been created', () => {
|
|
69
|
+
expect(getDeviceId()).toBeUndefined();
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// forgetDevice
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
describe('forgetDevice', () => {
|
|
76
|
+
it('clears deviceId so getDeviceId returns undefined', () => {
|
|
77
|
+
getOrCreateDeviceId();
|
|
78
|
+
forgetDevice();
|
|
79
|
+
expect(getDeviceId()).toBeUndefined();
|
|
80
|
+
});
|
|
81
|
+
it('causes getOrCreateDeviceId to generate a DIFFERENT id after forget', () => {
|
|
82
|
+
const before = getOrCreateDeviceId();
|
|
83
|
+
forgetDevice();
|
|
84
|
+
const after = getOrCreateDeviceId();
|
|
85
|
+
expect(after).not.toBe(before);
|
|
86
|
+
expect(UUID_RE.test(after)).toBe(true);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
// setDeviceLabel
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
describe('setDeviceLabel', () => {
|
|
93
|
+
it('persists a label without clobbering deviceId', () => {
|
|
94
|
+
const id = getOrCreateDeviceId();
|
|
95
|
+
setDeviceLabel('my-laptop');
|
|
96
|
+
expect(getDeviceId()).toBe(id);
|
|
97
|
+
});
|
|
98
|
+
it('clears the label when called with undefined while preserving deviceId', () => {
|
|
99
|
+
const id = getOrCreateDeviceId();
|
|
100
|
+
setDeviceLabel('my-laptop');
|
|
101
|
+
setDeviceLabel(undefined);
|
|
102
|
+
// deviceId must still be present
|
|
103
|
+
expect(getDeviceId()).toBe(id);
|
|
104
|
+
});
|
|
105
|
+
it('preserves lastPushAt when setting a label', () => {
|
|
106
|
+
const ts = new Date().toISOString();
|
|
107
|
+
recordInventoryPush(ts);
|
|
108
|
+
setDeviceLabel('desk-machine');
|
|
109
|
+
expect(getLastInventoryPushAt()).toBe(ts);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
// ---------------------------------------------------------------------------
|
|
113
|
+
// isInventorySyncDisabledLocally
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
describe('isInventorySyncDisabledLocally', () => {
|
|
116
|
+
it('returns false when env var is unset', () => {
|
|
117
|
+
delete process.env.SKILLSMITH_INVENTORY_DISABLE;
|
|
118
|
+
expect(isInventorySyncDisabledLocally()).toBe(false);
|
|
119
|
+
});
|
|
120
|
+
it('returns true when env var is "1"', () => {
|
|
121
|
+
process.env.SKILLSMITH_INVENTORY_DISABLE = '1';
|
|
122
|
+
expect(isInventorySyncDisabledLocally()).toBe(true);
|
|
123
|
+
});
|
|
124
|
+
it('returns true when env var is "true"', () => {
|
|
125
|
+
process.env.SKILLSMITH_INVENTORY_DISABLE = 'true';
|
|
126
|
+
expect(isInventorySyncDisabledLocally()).toBe(true);
|
|
127
|
+
});
|
|
128
|
+
it('returns true when env var is "TRUE" (case-insensitive)', () => {
|
|
129
|
+
process.env.SKILLSMITH_INVENTORY_DISABLE = 'TRUE';
|
|
130
|
+
expect(isInventorySyncDisabledLocally()).toBe(true);
|
|
131
|
+
});
|
|
132
|
+
it('returns false when env var is "false"', () => {
|
|
133
|
+
process.env.SKILLSMITH_INVENTORY_DISABLE = 'false';
|
|
134
|
+
expect(isInventorySyncDisabledLocally()).toBe(false);
|
|
135
|
+
});
|
|
136
|
+
it('returns false when env var is "0"', () => {
|
|
137
|
+
process.env.SKILLSMITH_INVENTORY_DISABLE = '0';
|
|
138
|
+
expect(isInventorySyncDisabledLocally()).toBe(false);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
// shouldAutoPush
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
describe('shouldAutoPush', () => {
|
|
145
|
+
const ONE_HOUR_MS = 60 * 60 * 1000;
|
|
146
|
+
const DEFAULT_THROTTLE_MS = 24 * ONE_HOUR_MS;
|
|
147
|
+
it('returns true when lastPushAt is undefined (never pushed)', () => {
|
|
148
|
+
expect(shouldAutoPush(Date.now(), undefined)).toBe(true);
|
|
149
|
+
});
|
|
150
|
+
it('returns false when last push was 1 hour ago (within 24 h throttle)', () => {
|
|
151
|
+
const now = Date.now();
|
|
152
|
+
const oneHourAgo = new Date(now - ONE_HOUR_MS).toISOString();
|
|
153
|
+
expect(shouldAutoPush(now, oneHourAgo)).toBe(false);
|
|
154
|
+
});
|
|
155
|
+
it('returns true when last push was 25 hours ago (beyond 24 h throttle)', () => {
|
|
156
|
+
const now = Date.now();
|
|
157
|
+
const twentyFiveHoursAgo = new Date(now - 25 * ONE_HOUR_MS).toISOString();
|
|
158
|
+
expect(shouldAutoPush(now, twentyFiveHoursAgo)).toBe(true);
|
|
159
|
+
});
|
|
160
|
+
it('returns true at exactly the throttle boundary (>= semantics)', () => {
|
|
161
|
+
// Use integer epoch values to avoid ISO round-trip sub-ms rounding
|
|
162
|
+
const fixedNow = 1_000_000_000_000;
|
|
163
|
+
const customThrottle = 86_400_000; // 24 h in ms
|
|
164
|
+
const exactBoundary = new Date(fixedNow - customThrottle).toISOString();
|
|
165
|
+
expect(shouldAutoPush(fixedNow, exactBoundary, customThrottle)).toBe(true);
|
|
166
|
+
});
|
|
167
|
+
it('returns true when lastPushAt is an invalid date string', () => {
|
|
168
|
+
expect(shouldAutoPush(Date.now(), 'not-a-date')).toBe(true);
|
|
169
|
+
});
|
|
170
|
+
it('respects a custom throttleMs (smaller window)', () => {
|
|
171
|
+
const now = Date.now();
|
|
172
|
+
const fiveMinutesAgo = new Date(now - 5 * 60 * 1000).toISOString();
|
|
173
|
+
// 2-minute throttle: 5 min ago is past threshold → should push
|
|
174
|
+
expect(shouldAutoPush(now, fiveMinutesAgo, 2 * 60 * 1000)).toBe(true);
|
|
175
|
+
// 10-minute throttle: 5 min ago is within threshold → skip
|
|
176
|
+
expect(shouldAutoPush(now, fiveMinutesAgo, 10 * 60 * 1000)).toBe(false);
|
|
177
|
+
});
|
|
178
|
+
it('default throttleMs is 24 hours', () => {
|
|
179
|
+
const now = Date.now();
|
|
180
|
+
// 23h59m ago — just inside the window
|
|
181
|
+
const justInside = new Date(now - (DEFAULT_THROTTLE_MS - 60_000)).toISOString();
|
|
182
|
+
expect(shouldAutoPush(now, justInside)).toBe(false);
|
|
183
|
+
// 24h01m ago — just outside the window
|
|
184
|
+
const justOutside = new Date(now - (DEFAULT_THROTTLE_MS + 60_000)).toISOString();
|
|
185
|
+
expect(shouldAutoPush(now, justOutside)).toBe(true);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
// ---------------------------------------------------------------------------
|
|
189
|
+
// recordInventoryPush + getLastInventoryPushAt
|
|
190
|
+
// ---------------------------------------------------------------------------
|
|
191
|
+
describe('recordInventoryPush + getLastInventoryPushAt', () => {
|
|
192
|
+
it('returns undefined before any push is recorded', () => {
|
|
193
|
+
expect(getLastInventoryPushAt()).toBeUndefined();
|
|
194
|
+
});
|
|
195
|
+
it('round-trips an ISO timestamp', () => {
|
|
196
|
+
const ts = new Date().toISOString();
|
|
197
|
+
recordInventoryPush(ts);
|
|
198
|
+
expect(getLastInventoryPushAt()).toBe(ts);
|
|
199
|
+
});
|
|
200
|
+
it('preserves deviceId when recording a push', () => {
|
|
201
|
+
const id = getOrCreateDeviceId();
|
|
202
|
+
recordInventoryPush(new Date().toISOString());
|
|
203
|
+
expect(getDeviceId()).toBe(id);
|
|
204
|
+
});
|
|
205
|
+
it('overwrites a prior timestamp with the latest one', () => {
|
|
206
|
+
const first = new Date(Date.now() - 1000).toISOString();
|
|
207
|
+
const second = new Date().toISOString();
|
|
208
|
+
recordInventoryPush(first);
|
|
209
|
+
recordInventoryPush(second);
|
|
210
|
+
expect(getLastInventoryPushAt()).toBe(second);
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
//# sourceMappingURL=device-identity.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-identity.test.js","sourceRoot":"","sources":["../../../src/config/device-identity.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,15 @@ export interface SkillsmithConfig {
|
|
|
52
52
|
/** Sync interval in milliseconds */
|
|
53
53
|
intervalMs?: number;
|
|
54
54
|
};
|
|
55
|
+
/** Cross-harness inventory sync state (SMI-5391). */
|
|
56
|
+
inventory?: {
|
|
57
|
+
/** Stable client-generated device UUID (v4). */
|
|
58
|
+
deviceId?: string;
|
|
59
|
+
/** Optional user-facing device label. */
|
|
60
|
+
deviceLabel?: string;
|
|
61
|
+
/** ISO timestamp of the last successful inventory push (auto-push throttle). */
|
|
62
|
+
lastPushAt?: string;
|
|
63
|
+
};
|
|
55
64
|
}
|
|
56
65
|
/**
|
|
57
66
|
* Get the config directory path
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,yBAAyB;IACzB,SAAS,CAAC,EAAE;QACV,gDAAgD;QAChD,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAA;IACD,oBAAoB;IACpB,IAAI,CAAC,EAAE;QACL,6BAA6B;QAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,oCAAoC;QACpC,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AA0DD;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAUpC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CAc7C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAoB,GAC7C,IAAI,CAmCN;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAU9C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,SAA+B,GAAG,MAAM,CAQ/E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGxD;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe/D;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAgCD;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;CAC9C,CAAC,CA2CD"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,yBAAyB;IACzB,SAAS,CAAC,EAAE;QACV,gDAAgD;QAChD,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAA;IACD,oBAAoB;IACpB,IAAI,CAAC,EAAE;QACL,6BAA6B;QAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,oCAAoC;QACpC,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,qDAAqD;IACrD,SAAS,CAAC,EAAE;QACV,gDAAgD;QAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,yCAAyC;QACzC,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,gFAAgF;QAChF,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AA0DD;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAUpC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CAc7C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAoB,GAC7C,IAAI,CAmCN;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAU9C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,SAA+B,GAAG,MAAM,CAQ/E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGxD;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe/D;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAgCD;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;CAC9C,CAAC,CA2CD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ export { CodebaseAnalyzer, type CodebaseContext, type ImportInfo, type ExportInf
|
|
|
26
26
|
export { SkillMatcher, OverlapDetector, type MatchableSkill, type SkillMatchResult, type SkillMatcherOptions, type TriggerPhraseSkill, type OverlapResult, type FilteredSkillsResult, type OverlapDetectorOptions, } from '../matching/index.js';
|
|
27
27
|
export { TriggerDetector, ContextScorer, DEFAULT_FILE_TRIGGERS, DEFAULT_COMMAND_TRIGGERS, DEFAULT_ERROR_TRIGGERS, DEFAULT_PROJECT_TRIGGERS, type TriggerType, type FilePatternTrigger, type CommandTrigger, type ErrorTrigger, type ProjectTrigger, type DetectedTrigger, type TriggerDetectionOptions, type ContextScore, type ContextScoringWeights, type ContextScorerOptions, } from '../triggers/index.js';
|
|
28
28
|
export { ActivationManager, ZeroConfigActivator, type ActivationOptions, type ActivationResult, type SkillConfigSchema, type ConfigField, type ConfigStatus, type ZeroConfigOptions, } from '../activation/index.js';
|
|
29
|
-
export { SyncConfigRepository, SyncHistoryRepository, SyncEngine, BackgroundSyncService, createBackgroundSyncService, FREQUENCY_INTERVALS, type SyncConfig, type SyncConfigUpdate, type SyncFrequency, type SyncHistoryEntry, type SyncStatus, type SyncRunResult, type SyncOptions, type SyncProgress, type SyncResult, type BackgroundSyncOptions, type BackgroundSyncState, } from '../sync/index.js';
|
|
29
|
+
export { SyncConfigRepository, SyncHistoryRepository, SyncEngine, BackgroundSyncService, createBackgroundSyncService, FREQUENCY_INTERVALS, type SyncConfig, type SyncConfigUpdate, type SyncFrequency, type SyncHistoryEntry, type SyncStatus, type SyncRunResult, type SyncOptions, type SyncProgress, type SyncResult, type BackgroundSyncOptions, type BackgroundSyncState, INVENTORY_LIMITS, INVENTORY_UPDATE_POLICIES, type InventoryDevice, type InventorySkillEntry, type InventoryUpdatePolicy, type InventoryUploadPayload, type InventoryUploadResult, collectDeviceSkills, buildInventoryDevice, buildInventoryPayload, uploadInventory, pushInventory, maybeAutoPush, InventoryAuthError, InventoryConflictError, InventoryValidationError, InventoryUploadError, type BuildInventoryDeviceOptions, type PushInventoryOptions, type MaybeAutoPushOptions, } from '../sync/index.js';
|
|
30
30
|
export { extractMcpReferences, type McpReference, type McpExtractionResult, } from '../analysis/McpReferenceExtractor.js';
|
|
31
31
|
export { mergeDependencies, type MergedDependency } from '../analysis/DependencyMerger.js';
|
|
32
32
|
export { SkillInstallationService, type SkillInstallationServiceParams, } from '../services/skill-installation.service.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/exports/services.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/exports/services.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,11 @@ export { ActivationManager, ZeroConfigActivator, } from '../activation/index.js'
|
|
|
66
66
|
// ============================================================================
|
|
67
67
|
// Registry Sync
|
|
68
68
|
// ============================================================================
|
|
69
|
-
export { SyncConfigRepository, SyncHistoryRepository, SyncEngine, BackgroundSyncService, createBackgroundSyncService, FREQUENCY_INTERVALS,
|
|
69
|
+
export { SyncConfigRepository, SyncHistoryRepository, SyncEngine, BackgroundSyncService, createBackgroundSyncService, FREQUENCY_INTERVALS,
|
|
70
|
+
// Cross-harness inventory payload contract (SMI-5389)
|
|
71
|
+
INVENTORY_LIMITS, INVENTORY_UPDATE_POLICIES,
|
|
72
|
+
// Cross-harness inventory service — shared local agent (SMI-5392)
|
|
73
|
+
collectDeviceSkills, buildInventoryDevice, buildInventoryPayload, uploadInventory, pushInventory, maybeAutoPush, InventoryAuthError, InventoryConflictError, InventoryValidationError, InventoryUploadError, } from '../sync/index.js';
|
|
70
74
|
// ============================================================================
|
|
71
75
|
// Dependency Intelligence (SMI-3145, SMI-3146)
|
|
72
76
|
// ============================================================================
|