@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.
Files changed (80) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/config/device-identity.d.ts +113 -0
  4. package/dist/src/config/device-identity.d.ts.map +1 -0
  5. package/dist/src/config/device-identity.js +171 -0
  6. package/dist/src/config/device-identity.js.map +1 -0
  7. package/dist/src/config/device-identity.test.d.ts +10 -0
  8. package/dist/src/config/device-identity.test.d.ts.map +1 -0
  9. package/dist/src/config/device-identity.test.js +213 -0
  10. package/dist/src/config/device-identity.test.js.map +1 -0
  11. package/dist/src/config/index.d.ts +9 -0
  12. package/dist/src/config/index.d.ts.map +1 -1
  13. package/dist/src/config/index.js.map +1 -1
  14. package/dist/src/exports/services.d.ts +1 -1
  15. package/dist/src/exports/services.d.ts.map +1 -1
  16. package/dist/src/exports/services.js +5 -1
  17. package/dist/src/exports/services.js.map +1 -1
  18. package/dist/src/index.d.ts +2 -1
  19. package/dist/src/index.d.ts.map +1 -1
  20. package/dist/src/index.js +3 -1
  21. package/dist/src/index.js.map +1 -1
  22. package/dist/src/install/index.d.ts +1 -1
  23. package/dist/src/install/index.d.ts.map +1 -1
  24. package/dist/src/install/index.js +1 -1
  25. package/dist/src/install/index.js.map +1 -1
  26. package/dist/src/install/paths.d.ts +16 -0
  27. package/dist/src/install/paths.d.ts.map +1 -1
  28. package/dist/src/install/paths.js +22 -0
  29. package/dist/src/install/paths.js.map +1 -1
  30. package/dist/src/install/paths.test.d.ts +2 -0
  31. package/dist/src/install/paths.test.d.ts.map +1 -0
  32. package/dist/src/install/paths.test.js +61 -0
  33. package/dist/src/install/paths.test.js.map +1 -0
  34. package/dist/src/security/scanner/SecurityScanner.scanners.d.ts +10 -0
  35. package/dist/src/security/scanner/SecurityScanner.scanners.d.ts.map +1 -1
  36. package/dist/src/security/scanner/SecurityScanner.scanners.js +68 -1
  37. package/dist/src/security/scanner/SecurityScanner.scanners.js.map +1 -1
  38. package/dist/src/sync/index.d.ts +6 -0
  39. package/dist/src/sync/index.d.ts.map +1 -1
  40. package/dist/src/sync/index.js +8 -0
  41. package/dist/src/sync/index.js.map +1 -1
  42. package/dist/src/sync/inventory-builder.d.ts +21 -0
  43. package/dist/src/sync/inventory-builder.d.ts.map +1 -0
  44. package/dist/src/sync/inventory-builder.js +26 -0
  45. package/dist/src/sync/inventory-builder.js.map +1 -0
  46. package/dist/src/sync/inventory-client.d.ts +64 -0
  47. package/dist/src/sync/inventory-client.d.ts.map +1 -0
  48. package/dist/src/sync/inventory-client.js +150 -0
  49. package/dist/src/sync/inventory-client.js.map +1 -0
  50. package/dist/src/sync/inventory-client.test.d.ts +14 -0
  51. package/dist/src/sync/inventory-client.test.d.ts.map +1 -0
  52. package/dist/src/sync/inventory-client.test.js +146 -0
  53. package/dist/src/sync/inventory-client.test.js.map +1 -0
  54. package/dist/src/sync/inventory-collector.d.ts +35 -0
  55. package/dist/src/sync/inventory-collector.d.ts.map +1 -0
  56. package/dist/src/sync/inventory-collector.js +149 -0
  57. package/dist/src/sync/inventory-collector.js.map +1 -0
  58. package/dist/src/sync/inventory-collector.test.d.ts +14 -0
  59. package/dist/src/sync/inventory-collector.test.d.ts.map +1 -0
  60. package/dist/src/sync/inventory-collector.test.js +107 -0
  61. package/dist/src/sync/inventory-collector.test.js.map +1 -0
  62. package/dist/src/sync/inventory-device.d.ts +36 -0
  63. package/dist/src/sync/inventory-device.d.ts.map +1 -0
  64. package/dist/src/sync/inventory-device.js +58 -0
  65. package/dist/src/sync/inventory-device.js.map +1 -0
  66. package/dist/src/sync/inventory-push.d.ts +45 -0
  67. package/dist/src/sync/inventory-push.d.ts.map +1 -0
  68. package/dist/src/sync/inventory-push.js +62 -0
  69. package/dist/src/sync/inventory-push.js.map +1 -0
  70. package/dist/src/sync/inventory-push.test.d.ts +16 -0
  71. package/dist/src/sync/inventory-push.test.d.ts.map +1 -0
  72. package/dist/src/sync/inventory-push.test.js +104 -0
  73. package/dist/src/sync/inventory-push.test.js.map +1 -0
  74. package/dist/src/sync/inventory-types.d.ts +101 -0
  75. package/dist/src/sync/inventory-types.d.ts.map +1 -0
  76. package/dist/src/sync/inventory-types.js +42 -0
  77. package/dist/src/sync/inventory-types.js.map +1 -0
  78. package/dist/tests/security/pii-detection.test.js +107 -0
  79. package/dist/tests/security/pii-detection.test.js.map +1 -1
  80. 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":"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"}
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, } from '../sync/index.js';
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
  // ============================================================================