@mnemonik/cli 7.109.3 → 7.110.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/dist/auth/credentials.js +297 -36
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +1914 -19
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/machineName.d.ts +8 -0
- package/dist/auth/machineName.d.ts.map +1 -0
- package/dist/auth/machineName.js +23 -0
- package/dist/auth/machineName.js.map +1 -0
- package/dist/consent.d.ts +29 -0
- package/dist/consent.d.ts.map +1 -0
- package/dist/consent.js +87 -0
- package/dist/consent.js.map +1 -0
- package/dist/diagnostics.js +301 -40
- package/dist/digests.json +102 -90
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +59 -44
- package/dist/help.js.map +1 -1
- package/dist/humanReason.d.ts +8 -0
- package/dist/humanReason.d.ts.map +1 -1
- package/dist/humanReason.js +44 -16
- package/dist/humanReason.js.map +1 -1
- package/dist/identity/migrate.js +1835 -44
- package/dist/install/hosts.d.ts +2 -0
- package/dist/install/hosts.d.ts.map +1 -1
- package/dist/install/hosts.js +23 -14
- package/dist/install/hosts.js.map +1 -1
- package/dist/install/journal.js +124 -11
- package/dist/install/journey.d.ts +20 -0
- package/dist/install/journey.d.ts.map +1 -1
- package/dist/install/journey.js +1913 -82
- package/dist/install/journey.js.map +1 -1
- package/dist/install/ownership.d.ts.map +1 -1
- package/dist/install/ownership.js +1818 -10
- package/dist/install/ownership.js.map +1 -1
- package/dist/install/transaction.js +1913 -19
- package/dist/install/ui.js +1910 -15
- package/dist/installation.js +133 -10
- package/dist/launcher.js +108 -4
- package/dist/output.d.ts +3 -0
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +11 -1
- package/dist/output.js.map +1 -1
- package/dist/preflight.d.ts +5 -0
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +14 -12
- package/dist/preflight.js.map +1 -1
- package/dist/project/eligibility.js +1917 -22
- package/dist/project/records.js +121 -8
- package/dist/project.d.ts +15 -0
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +229 -15
- package/dist/project.js.map +1 -1
- package/dist/router.d.ts +2 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +2164 -122
- package/dist/router.js.map +1 -1
- package/dist/runtime/releaseSource.d.ts +6 -0
- package/dist/runtime/releaseSource.d.ts.map +1 -1
- package/dist/runtime/releaseSource.js +1933 -32
- package/dist/runtime/releaseSource.js.map +1 -1
- package/dist/runtime/selfUpdate.js +1809 -8
- package/dist/runtime/signers.js +28 -9
- package/dist/runtime/store.js +18 -6
- package/dist/runtime/updateCheck.d.ts +4 -0
- package/dist/runtime/updateCheck.d.ts.map +1 -0
- package/dist/runtime/updateCheck.js +6695 -0
- package/dist/runtime/updateCheck.js.map +1 -0
- package/dist/sbom.json +21 -21
- package/dist/scanner/control.d.ts +27 -1
- package/dist/scanner/control.d.ts.map +1 -1
- package/dist/scanner/control.js +207 -36
- package/dist/scanner/control.js.map +1 -1
- package/dist/scanner/discover.d.ts +5 -0
- package/dist/scanner/discover.d.ts.map +1 -1
- package/dist/scanner/discover.js +16 -6
- package/dist/scanner/discover.js.map +1 -1
- package/dist/scanner/enable.d.ts +2 -0
- package/dist/scanner/enable.d.ts.map +1 -1
- package/dist/scanner/enable.js +152 -14
- package/dist/scanner/enable.js.map +1 -1
- package/dist/scanner/picker.d.ts.map +1 -1
- package/dist/scanner/picker.js +5 -6
- package/dist/scanner/picker.js.map +1 -1
- package/dist/scanner/service.d.ts +2 -0
- package/dist/scanner/service.d.ts.map +1 -1
- package/dist/scanner/service.js +279 -54
- package/dist/scanner/service.js.map +1 -1
- package/dist/scanner/update.d.ts +8 -0
- package/dist/scanner/update.d.ts.map +1 -1
- package/dist/scanner/update.js +254 -20
- package/dist/scanner/update.js.map +1 -1
- package/dist/scanner-release.json +35 -30
- package/dist/screens/journey.d.ts +6 -1
- package/dist/screens/journey.d.ts.map +1 -1
- package/dist/screens/journey.js +29 -8
- package/dist/screens/journey.js.map +1 -1
- package/dist/status.d.ts +21 -0
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +1993 -39
- package/dist/status.js.map +1 -1
- package/dist/vendor/local-setup.js +256 -29
- package/dist/vendor/shared/runtimeSigners.js +38 -11
- package/package.json +31 -31
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../src/runtime/updateCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAElF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,MAAsC,EACtC,GAAG,GAAiB,IAAI,CAAC,GAAG;IAE5B,MAAM,KAAK,GAAyB,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;IACzF,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1F,CAAC;IAAC,MAAM,CAAC;QACP,iFAAiF;IACnF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAY,CAAC;QACvF,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAkC,CAAC;QAC7E,IACE,OAAO,SAAS,KAAK,QAAQ;YAC7B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE1D,OAAO,SAAS,CAAC;QACnB,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAwC,EAAE,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
package/dist/sbom.json
CHANGED
|
@@ -17,13 +17,13 @@
|
|
|
17
17
|
}
|
|
18
18
|
],
|
|
19
19
|
"component": {
|
|
20
|
-
"bom-ref": "@mnemonik/cli@0.1.
|
|
20
|
+
"bom-ref": "@mnemonik/cli@0.1.62",
|
|
21
21
|
"type": "library",
|
|
22
22
|
"name": "@mnemonik/cli",
|
|
23
|
-
"version": "0.1.
|
|
23
|
+
"version": "0.1.62",
|
|
24
24
|
"scope": "required",
|
|
25
25
|
"description": "Mnemonik installer and local project helper",
|
|
26
|
-
"purl": "pkg:npm/%40mnemonik/cli@0.1.
|
|
26
|
+
"purl": "pkg:npm/%40mnemonik/cli@0.1.62",
|
|
27
27
|
"properties": [],
|
|
28
28
|
"externalReferences": [
|
|
29
29
|
{
|
|
@@ -35,12 +35,12 @@
|
|
|
35
35
|
},
|
|
36
36
|
"components": [
|
|
37
37
|
{
|
|
38
|
-
"bom-ref": "@mnemonik/credentials@0.1.
|
|
38
|
+
"bom-ref": "@mnemonik/credentials@0.1.62",
|
|
39
39
|
"type": "library",
|
|
40
40
|
"name": "@mnemonik/credentials",
|
|
41
|
-
"version": "0.1.
|
|
41
|
+
"version": "0.1.62",
|
|
42
42
|
"scope": "required",
|
|
43
|
-
"purl": "pkg:npm/%40mnemonik/credentials@0.1.
|
|
43
|
+
"purl": "pkg:npm/%40mnemonik/credentials@0.1.62",
|
|
44
44
|
"properties": [],
|
|
45
45
|
"externalReferences": [
|
|
46
46
|
{
|
|
@@ -50,12 +50,12 @@
|
|
|
50
50
|
]
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
|
-
"bom-ref": "@mnemonik/local-setup@0.1.
|
|
53
|
+
"bom-ref": "@mnemonik/local-setup@0.1.62",
|
|
54
54
|
"type": "library",
|
|
55
55
|
"name": "@mnemonik/local-setup",
|
|
56
|
-
"version": "0.1.
|
|
56
|
+
"version": "0.1.62",
|
|
57
57
|
"scope": "required",
|
|
58
|
-
"purl": "pkg:npm/%40mnemonik/local-setup@0.1.
|
|
58
|
+
"purl": "pkg:npm/%40mnemonik/local-setup@0.1.62",
|
|
59
59
|
"properties": [],
|
|
60
60
|
"externalReferences": [
|
|
61
61
|
{
|
|
@@ -65,14 +65,14 @@
|
|
|
65
65
|
]
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
|
-
"bom-ref": "@mnemonik/shared@7.
|
|
68
|
+
"bom-ref": "@mnemonik/shared@7.110.0",
|
|
69
69
|
"type": "library",
|
|
70
70
|
"name": "@mnemonik/shared",
|
|
71
|
-
"version": "7.
|
|
71
|
+
"version": "7.110.0",
|
|
72
72
|
"scope": "required",
|
|
73
73
|
"author": "Anthony",
|
|
74
74
|
"description": "Shared constants and utilities for Mnemonik packages",
|
|
75
|
-
"purl": "pkg:npm/%40mnemonik/shared@7.
|
|
75
|
+
"purl": "pkg:npm/%40mnemonik/shared@7.110.0",
|
|
76
76
|
"properties": [],
|
|
77
77
|
"externalReferences": [
|
|
78
78
|
{
|
|
@@ -271,29 +271,29 @@
|
|
|
271
271
|
],
|
|
272
272
|
"dependencies": [
|
|
273
273
|
{
|
|
274
|
-
"ref": "@mnemonik/cli@0.1.
|
|
274
|
+
"ref": "@mnemonik/cli@0.1.62",
|
|
275
275
|
"dependsOn": [
|
|
276
|
-
"@mnemonik/credentials@0.1.
|
|
277
|
-
"@mnemonik/local-setup@0.1.
|
|
278
|
-
"@mnemonik/shared@7.
|
|
276
|
+
"@mnemonik/credentials@0.1.62",
|
|
277
|
+
"@mnemonik/local-setup@0.1.62",
|
|
278
|
+
"@mnemonik/shared@7.110.0",
|
|
279
279
|
"smol-toml@1.8.0"
|
|
280
280
|
]
|
|
281
281
|
},
|
|
282
282
|
{
|
|
283
|
-
"ref": "@mnemonik/credentials@0.1.
|
|
283
|
+
"ref": "@mnemonik/credentials@0.1.62",
|
|
284
284
|
"dependsOn": [
|
|
285
|
-
"@mnemonik/local-setup@0.1.
|
|
285
|
+
"@mnemonik/local-setup@0.1.62"
|
|
286
286
|
]
|
|
287
287
|
},
|
|
288
288
|
{
|
|
289
|
-
"ref": "@mnemonik/local-setup@0.1.
|
|
289
|
+
"ref": "@mnemonik/local-setup@0.1.62",
|
|
290
290
|
"dependsOn": [
|
|
291
|
-
"@mnemonik/shared@7.
|
|
291
|
+
"@mnemonik/shared@7.110.0",
|
|
292
292
|
"proper-lockfile@4.1.2"
|
|
293
293
|
]
|
|
294
294
|
},
|
|
295
295
|
{
|
|
296
|
-
"ref": "@mnemonik/shared@7.
|
|
296
|
+
"ref": "@mnemonik/shared@7.110.0",
|
|
297
297
|
"dependsOn": [
|
|
298
298
|
"ignore@7.0.6",
|
|
299
299
|
"web-tree-sitter@0.26.13"
|
|
@@ -40,8 +40,34 @@ export interface ScannerReceipt {
|
|
|
40
40
|
files: number;
|
|
41
41
|
issue: string;
|
|
42
42
|
}>;
|
|
43
|
+
/** The scanner's last failure until it recovers; `cause` is the line it logged. */
|
|
44
|
+
failure?: {
|
|
45
|
+
kind: string;
|
|
46
|
+
at: string;
|
|
47
|
+
cause: string;
|
|
48
|
+
/** push_rejected: the server's stated reason. */
|
|
49
|
+
reason?: string;
|
|
50
|
+
/** watcher_error: the project's name. */
|
|
51
|
+
project?: string;
|
|
52
|
+
} | null;
|
|
43
53
|
};
|
|
44
54
|
}
|
|
55
|
+
/** The scanner paused itself because its saved consent does not cover it. */
|
|
56
|
+
export declare function pausedForConsent(receipt: ScannerReceipt | null | undefined): boolean;
|
|
45
57
|
export declare function scannerReceipt(stateDir: string): Promise<ScannerReceipt | null>;
|
|
46
|
-
|
|
58
|
+
/** The install run that paused the scanner, so a later command can tell when it is gone. */
|
|
59
|
+
export interface PauseOwner {
|
|
60
|
+
/** The install journal's run id. */
|
|
61
|
+
session: string;
|
|
62
|
+
pid: number;
|
|
63
|
+
at: number;
|
|
64
|
+
}
|
|
65
|
+
export declare const ABANDONED_PAUSE_RESUMED = "Background indexing was paused by an installation that did not finish. Mnemonik resumed it.";
|
|
66
|
+
export declare function controlScanner(action: 'pause' | 'resume' | 'stop', options: ScannerServiceOptions, owner?: PauseOwner): Promise<ScannerReceipt>;
|
|
67
|
+
/**
|
|
68
|
+
* An install pauses a running scanner while it works and resumes it when it
|
|
69
|
+
* stops. One that died on the way leaves the pause behind, and nothing else
|
|
70
|
+
* would undo it. A pause a person chose carries no owner and is left alone.
|
|
71
|
+
*/
|
|
72
|
+
export declare function resumeAbandonedPause(options: ScannerServiceOptions): Promise<boolean>;
|
|
47
73
|
//# sourceMappingURL=control.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/scanner/control.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QACR,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE;YACT,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;YACnB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,cAAc,EAAE,KAAK,CAAC;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;aAAE,CAAC,CAAC;YAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,SAAS,EAAE;YAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC;QAC1C,cAAc,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC;QAClD,SAAS,CAAC,EAAE;YACV,UAAU,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,CAAC;YAC7C,YAAY,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,CAAC;SAChD,CAAC;QACF,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,mFAAmF;QACnF,cAAc,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/scanner/control.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QACR,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE;YACT,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;YACnB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,cAAc,EAAE,KAAK,CAAC;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;aAAE,CAAC,CAAC;YAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,SAAS,EAAE;YAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC;QAC1C,cAAc,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC;QAClD,SAAS,CAAC,EAAE;YACV,UAAU,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,CAAC;YAC7C,YAAY,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,CAAC;SAChD,CAAC;QACF,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,mFAAmF;QACnF,cAAc,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC1E,mFAAmF;QACnF,OAAO,CAAC,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,EAAE,EAAE,MAAM,CAAC;YACX,KAAK,EAAE,MAAM,CAAC;YACd,iDAAiD;YACjD,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,yCAAyC;YACzC,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,GAAG,IAAI,CAAC;KACV,CAAC;CACH;AACD,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAKpF;AACD,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAIrF;AACD,4FAA4F;AAC5F,MAAM,WAAW,UAAU;IACzB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;CACZ;AACD,eAAO,MAAM,uBAAuB,gGAC2D,CAAC;AAGhG,wBAAsB,cAAc,CAClC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,EACnC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,CAAC,EAAE,UAAU,2BAOnB;AA8CD;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CA4B3F"}
|
package/dist/scanner/control.js
CHANGED
|
@@ -516,8 +516,25 @@ function readIdentity(stdout) {
|
|
|
516
516
|
throw new Error("acl_identity_unavailable");
|
|
517
517
|
return { name: match[1], sid: match[2] };
|
|
518
518
|
}
|
|
519
|
+
function* readWindowsIdentity() {
|
|
520
|
+
const user = readIdentity(yield [windowsCommand("whoami.exe"), identityArgs]);
|
|
521
|
+
if (!ADMINISTRATOR_RID.test(user.sid))
|
|
522
|
+
return user;
|
|
523
|
+
const groups = yield [windowsCommand("whoami.exe"), groupArgs];
|
|
524
|
+
const local = /^"[^"\r\n]*","[^"\r\n]*","S-1-5-113",/m.test(groups);
|
|
525
|
+
return {
|
|
526
|
+
...user,
|
|
527
|
+
localAdministratorSid: local ? `${user.sid.slice(0, user.sid.lastIndexOf("-"))}-500` : null
|
|
528
|
+
};
|
|
529
|
+
}
|
|
519
530
|
function windowsCurrentAccountSync() {
|
|
520
|
-
|
|
531
|
+
if (currentIdentity)
|
|
532
|
+
return currentIdentity;
|
|
533
|
+
const commands = readWindowsIdentity();
|
|
534
|
+
let step = commands.next();
|
|
535
|
+
while (!step.done)
|
|
536
|
+
step = commands.next(hookExecuteSync(...step.value));
|
|
537
|
+
return currentIdentity = step.value;
|
|
521
538
|
}
|
|
522
539
|
function hookInvocation(file, args2) {
|
|
523
540
|
if (win32.basename(file) === "whoami.exe") {
|
|
@@ -537,11 +554,13 @@ function hookExecuteSync(file, args2, input) {
|
|
|
537
554
|
[file, args2] = hookInvocation(file, args2);
|
|
538
555
|
return execFileSync(file, args2, { ...hookOptions(file, args2), input });
|
|
539
556
|
}
|
|
540
|
-
var identityArgs, currentIdentity, ttl, hookOptions;
|
|
557
|
+
var identityArgs, groupArgs, ADMINISTRATOR_RID, currentIdentity, ttl, hookOptions;
|
|
541
558
|
var init_runtimeSigners = __esm({
|
|
542
559
|
"packages/shared/dist/runtimeSigners.js"() {
|
|
543
560
|
"use strict";
|
|
544
561
|
identityArgs = ["/user", "/fo", "csv", "/nh"];
|
|
562
|
+
groupArgs = ["/groups", "/fo", "csv", "/nh"];
|
|
563
|
+
ADMINISTRATOR_RID = /^S-1-5-21-\d+-\d+-\d+-500$/;
|
|
545
564
|
ttl = 10 * 6e4;
|
|
546
565
|
hookOptions = (file, args2) => ({
|
|
547
566
|
encoding: args2.includes("/u") ? "utf16le" : "utf8",
|
|
@@ -1824,11 +1843,11 @@ var require_mtime_precision = __commonJS({
|
|
|
1824
1843
|
function probe(file, fs3, callback) {
|
|
1825
1844
|
const cachedPrecision = fs3[cacheSymbol];
|
|
1826
1845
|
if (cachedPrecision) {
|
|
1827
|
-
return fs3.stat(file, (err2,
|
|
1846
|
+
return fs3.stat(file, (err2, stat2) => {
|
|
1828
1847
|
if (err2) {
|
|
1829
1848
|
return callback(err2);
|
|
1830
1849
|
}
|
|
1831
|
-
callback(null,
|
|
1850
|
+
callback(null, stat2.mtime, cachedPrecision);
|
|
1832
1851
|
});
|
|
1833
1852
|
}
|
|
1834
1853
|
const mtime = new Date(Math.ceil(Date.now() / 1e3) * 1e3 + 5);
|
|
@@ -1836,13 +1855,13 @@ var require_mtime_precision = __commonJS({
|
|
|
1836
1855
|
if (err2) {
|
|
1837
1856
|
return callback(err2);
|
|
1838
1857
|
}
|
|
1839
|
-
fs3.stat(file, (err3,
|
|
1858
|
+
fs3.stat(file, (err3, stat2) => {
|
|
1840
1859
|
if (err3) {
|
|
1841
1860
|
return callback(err3);
|
|
1842
1861
|
}
|
|
1843
|
-
const precision =
|
|
1862
|
+
const precision = stat2.mtime.getTime() % 1e3 === 0 ? "s" : "ms";
|
|
1844
1863
|
Object.defineProperty(fs3, cacheSymbol, { value: precision });
|
|
1845
|
-
callback(null,
|
|
1864
|
+
callback(null, stat2.mtime, precision);
|
|
1846
1865
|
});
|
|
1847
1866
|
});
|
|
1848
1867
|
}
|
|
@@ -1896,14 +1915,14 @@ var require_lockfile = __commonJS({
|
|
|
1896
1915
|
if (options.stale <= 0) {
|
|
1897
1916
|
return callback(Object.assign(new Error("Lock file is already being held"), { code: "ELOCKED", file }));
|
|
1898
1917
|
}
|
|
1899
|
-
options.fs.stat(lockfilePath, (err3,
|
|
1918
|
+
options.fs.stat(lockfilePath, (err3, stat2) => {
|
|
1900
1919
|
if (err3) {
|
|
1901
1920
|
if (err3.code === "ENOENT") {
|
|
1902
1921
|
return acquireLock(file, { ...options, stale: 0 }, callback);
|
|
1903
1922
|
}
|
|
1904
1923
|
return callback(err3);
|
|
1905
1924
|
}
|
|
1906
|
-
if (!isLockStale(
|
|
1925
|
+
if (!isLockStale(stat2, options)) {
|
|
1907
1926
|
return callback(Object.assign(new Error("Lock file is already being held"), { code: "ELOCKED", file }));
|
|
1908
1927
|
}
|
|
1909
1928
|
removeLock(file, options, (err4) => {
|
|
@@ -1915,8 +1934,8 @@ var require_lockfile = __commonJS({
|
|
|
1915
1934
|
});
|
|
1916
1935
|
});
|
|
1917
1936
|
}
|
|
1918
|
-
function isLockStale(
|
|
1919
|
-
return
|
|
1937
|
+
function isLockStale(stat2, options) {
|
|
1938
|
+
return stat2.mtime.getTime() < Date.now() - options.stale;
|
|
1920
1939
|
}
|
|
1921
1940
|
function removeLock(file, options, callback) {
|
|
1922
1941
|
options.fs.rmdir(getLockFile(file, options), (err2) => {
|
|
@@ -1934,7 +1953,7 @@ var require_lockfile = __commonJS({
|
|
|
1934
1953
|
lock2.updateDelay = lock2.updateDelay || options.update;
|
|
1935
1954
|
lock2.updateTimeout = setTimeout(() => {
|
|
1936
1955
|
lock2.updateTimeout = null;
|
|
1937
|
-
options.fs.stat(lock2.lockfilePath, (err2,
|
|
1956
|
+
options.fs.stat(lock2.lockfilePath, (err2, stat2) => {
|
|
1938
1957
|
const isOverThreshold = lock2.lastUpdate + options.stale < Date.now();
|
|
1939
1958
|
if (err2) {
|
|
1940
1959
|
if (err2.code === "ENOENT" || isOverThreshold) {
|
|
@@ -1943,7 +1962,7 @@ var require_lockfile = __commonJS({
|
|
|
1943
1962
|
lock2.updateDelay = 1e3;
|
|
1944
1963
|
return updateLock(file, options);
|
|
1945
1964
|
}
|
|
1946
|
-
const isMtimeOurs = lock2.mtime.getTime() ===
|
|
1965
|
+
const isMtimeOurs = lock2.mtime.getTime() === stat2.mtime.getTime();
|
|
1947
1966
|
if (!isMtimeOurs) {
|
|
1948
1967
|
return setLockAsCompromised(
|
|
1949
1968
|
file,
|
|
@@ -2068,11 +2087,11 @@ var require_lockfile = __commonJS({
|
|
|
2068
2087
|
if (err2) {
|
|
2069
2088
|
return callback(err2);
|
|
2070
2089
|
}
|
|
2071
|
-
options.fs.stat(getLockFile(file2, options), (err3,
|
|
2090
|
+
options.fs.stat(getLockFile(file2, options), (err3, stat2) => {
|
|
2072
2091
|
if (err3) {
|
|
2073
2092
|
return err3.code === "ENOENT" ? callback(null, false) : callback(err3);
|
|
2074
2093
|
}
|
|
2075
|
-
return callback(null, !isLockStale(
|
|
2094
|
+
return callback(null, !isLockStale(stat2, options));
|
|
2076
2095
|
});
|
|
2077
2096
|
});
|
|
2078
2097
|
}
|
|
@@ -6391,17 +6410,18 @@ var WINDOWS_SERVICE_BUDGET_MS = 12e4;
|
|
|
6391
6410
|
|
|
6392
6411
|
// packages/cli/src/scanner/control.ts
|
|
6393
6412
|
import { randomUUID as randomUUID2 } from "node:crypto";
|
|
6394
|
-
import { readFile as readFile2 } from "node:fs/promises";
|
|
6395
|
-
import { join as
|
|
6413
|
+
import { readFile as readFile2, stat } from "node:fs/promises";
|
|
6414
|
+
import { join as join5 } from "node:path";
|
|
6396
6415
|
import { setTimeout as delay2 } from "node:timers/promises";
|
|
6397
6416
|
|
|
6398
6417
|
// packages/local-setup/dist/storage.js
|
|
6399
6418
|
init_hookRuntime();
|
|
6419
|
+
init_hookRuntime();
|
|
6400
6420
|
import { createHash, randomUUID } from "node:crypto";
|
|
6401
6421
|
import { execFile as nodeExecFile } from "node:child_process";
|
|
6402
6422
|
import fs2 from "node:fs";
|
|
6403
6423
|
import { open, rename, readFile, mkdir, lstat, chmod, writeFile, unlink, rmdir } from "node:fs/promises";
|
|
6404
|
-
|
|
6424
|
+
import { homedir } from "node:os";
|
|
6405
6425
|
import { dirname as dirname3, join as join3, win32 as win322, posix } from "node:path";
|
|
6406
6426
|
import { setTimeout as delay } from "node:timers/promises";
|
|
6407
6427
|
var lockfileKey = /* @__PURE__ */ Symbol.for("mnemonik.proper-lockfile");
|
|
@@ -6410,6 +6430,15 @@ function sharedLockfile() {
|
|
|
6410
6430
|
return shared[lockfileKey] ??= Promise.resolve().then(() => __toESM(require_proper_lockfile(), 1)).then((module2) => module2.default);
|
|
6411
6431
|
}
|
|
6412
6432
|
var codeIs = (error, code) => error.code === code;
|
|
6433
|
+
function stateDirectory(platform = process.platform, env = process.env, home = homedir()) {
|
|
6434
|
+
if (env.MNEMONIK_STATE_DIR)
|
|
6435
|
+
return env.MNEMONIK_STATE_DIR;
|
|
6436
|
+
if (platform === "win32")
|
|
6437
|
+
return win322.join(env.LOCALAPPDATA || win322.join(home, "AppData", "Local"), "Mnemonik");
|
|
6438
|
+
if (platform === "darwin")
|
|
6439
|
+
return posix.join(home, "Library", "Application Support", "Mnemonik");
|
|
6440
|
+
return posix.join(env.XDG_STATE_HOME || posix.join(home, ".local", "state"), "mnemonik");
|
|
6441
|
+
}
|
|
6413
6442
|
async function readBytes(path) {
|
|
6414
6443
|
try {
|
|
6415
6444
|
if (!(await lstat(path)).isFile())
|
|
@@ -6547,37 +6576,179 @@ async function withLock(path, waitMs, work) {
|
|
|
6547
6576
|
}
|
|
6548
6577
|
}
|
|
6549
6578
|
|
|
6579
|
+
// packages/local-setup/dist/automaticUpdate.js
|
|
6580
|
+
import { spawn as nodeSpawn } from "node:child_process";
|
|
6581
|
+
import { realpathSync } from "node:fs";
|
|
6582
|
+
import { stat as nodeStat, utimes } from "node:fs/promises";
|
|
6583
|
+
import { homedir as homedir2 } from "node:os";
|
|
6584
|
+
import { join as join4 } from "node:path";
|
|
6585
|
+
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
6586
|
+
var DAY_MS = 864e5;
|
|
6587
|
+
var statePath = (stateDir) => join4(stateDir, "automatic-update.json");
|
|
6588
|
+
function cliLauncherPath(options = {}) {
|
|
6589
|
+
const platform = options.platform ?? process.platform;
|
|
6590
|
+
const home = options.home ?? homedir2();
|
|
6591
|
+
return platform === "win32" ? join4(options.env?.LOCALAPPDATA || join4(home, "AppData", "Local"), "Mnemonik", "bin", "mnemonik.cmd") : join4(home, ".local", "bin", "mnemonik");
|
|
6592
|
+
}
|
|
6593
|
+
async function readState(path) {
|
|
6594
|
+
const bytes = await readBytes(path);
|
|
6595
|
+
if (!bytes)
|
|
6596
|
+
return {};
|
|
6597
|
+
const value = JSON.parse(bytes.toString());
|
|
6598
|
+
if (!value || typeof value !== "object" || value.lastAttempt !== void 0 && (!Number.isFinite(value.lastAttempt) || value.lastAttempt < 0))
|
|
6599
|
+
throw new Error("automatic_update_state_invalid");
|
|
6600
|
+
return value.lastAttempt === void 0 ? {} : { lastAttempt: value.lastAttempt };
|
|
6601
|
+
}
|
|
6602
|
+
async function maybeStartAutomaticUpdate(options = {}) {
|
|
6603
|
+
const stateDir = options.stateDir ?? stateDirectory(options.platform, options.env, options.home);
|
|
6604
|
+
const path = statePath(stateDir);
|
|
6605
|
+
try {
|
|
6606
|
+
const now = (options.now ?? Date.now)();
|
|
6607
|
+
const stat2 = options.stat ?? nodeStat;
|
|
6608
|
+
try {
|
|
6609
|
+
if (now - (await stat2(path)).mtimeMs < DAY_MS)
|
|
6610
|
+
return false;
|
|
6611
|
+
} catch (error) {
|
|
6612
|
+
if (error.code !== "ENOENT")
|
|
6613
|
+
throw error;
|
|
6614
|
+
}
|
|
6615
|
+
if (!options.spawn && !(await stat2(cliLauncherPath(options))).isFile())
|
|
6616
|
+
return false;
|
|
6617
|
+
return await withLock(path, 0, async (assertOwned) => {
|
|
6618
|
+
const state = await readState(path);
|
|
6619
|
+
if (state.lastAttempt !== void 0 && now - state.lastAttempt < DAY_MS)
|
|
6620
|
+
return false;
|
|
6621
|
+
await atomicWrite(path, Buffer.from(`${JSON.stringify({ lastAttempt: now })}
|
|
6622
|
+
`), void 0, assertOwned);
|
|
6623
|
+
await utimes(path, now / 1e3, now / 1e3);
|
|
6624
|
+
const platform = options.platform ?? process.platform;
|
|
6625
|
+
const launcher = cliLauncherPath(options);
|
|
6626
|
+
const command = platform === "win32" ? {
|
|
6627
|
+
file: options.env?.ComSpec || "cmd.exe",
|
|
6628
|
+
args: ["/d", "/s", "/c", `""${launcher}" update --automatic"`],
|
|
6629
|
+
windowsVerbatimArguments: true
|
|
6630
|
+
} : platform === "linux" && (options.env ?? process.env).INVOCATION_ID ? {
|
|
6631
|
+
// detached creates a process group, not a new systemd cgroup. An
|
|
6632
|
+
// updater spawned by the scanner must survive stopping that service.
|
|
6633
|
+
file: "systemd-run",
|
|
6634
|
+
args: [
|
|
6635
|
+
"--user",
|
|
6636
|
+
"--collect",
|
|
6637
|
+
"--quiet",
|
|
6638
|
+
`--setenv=MNEMONIK_STATE_DIR=${stateDir}`,
|
|
6639
|
+
"--",
|
|
6640
|
+
launcher,
|
|
6641
|
+
"update",
|
|
6642
|
+
"--automatic"
|
|
6643
|
+
]
|
|
6644
|
+
} : { file: launcher, args: ["update", "--automatic"] };
|
|
6645
|
+
const child = (options.spawn ?? nodeSpawn)(command.file, command.args, {
|
|
6646
|
+
detached: true,
|
|
6647
|
+
stdio: "ignore",
|
|
6648
|
+
windowsHide: true,
|
|
6649
|
+
..."windowsVerbatimArguments" in command ? { windowsVerbatimArguments: command.windowsVerbatimArguments } : {}
|
|
6650
|
+
});
|
|
6651
|
+
child.once("error", () => {
|
|
6652
|
+
});
|
|
6653
|
+
child.unref();
|
|
6654
|
+
return true;
|
|
6655
|
+
});
|
|
6656
|
+
} catch {
|
|
6657
|
+
return false;
|
|
6658
|
+
}
|
|
6659
|
+
}
|
|
6660
|
+
var HELPER_FLAG = "--mnemonik-automatic-update";
|
|
6661
|
+
function isHelperInvocation() {
|
|
6662
|
+
if (process.argv[2] !== HELPER_FLAG || !process.argv[3] || !process.argv[1])
|
|
6663
|
+
return false;
|
|
6664
|
+
try {
|
|
6665
|
+
return realpathSync(process.argv[1]) === realpathSync(fileURLToPath2(import.meta.url));
|
|
6666
|
+
} catch {
|
|
6667
|
+
return false;
|
|
6668
|
+
}
|
|
6669
|
+
}
|
|
6670
|
+
if (isHelperInvocation())
|
|
6671
|
+
void maybeStartAutomaticUpdate({ stateDir: process.argv[3] });
|
|
6672
|
+
|
|
6550
6673
|
// packages/local-setup/dist/index.js
|
|
6551
6674
|
var MAX_ORIGINAL_BYTES = 64 * 1024;
|
|
6552
6675
|
|
|
6553
6676
|
// packages/cli/src/scanner/control.ts
|
|
6554
6677
|
import { scannerService } from "./service.js";
|
|
6678
|
+
function pausedForConsent(receipt) {
|
|
6679
|
+
return receipt?.snapshot.lifecycle.state === "paused" && receipt.snapshot.lifecycle.reason === "consent_required";
|
|
6680
|
+
}
|
|
6555
6681
|
async function scannerReceipt(stateDir) {
|
|
6556
6682
|
return JSON.parse(
|
|
6557
|
-
await readFile2(
|
|
6683
|
+
await readFile2(join5(stateDir, "scanner/status.json"), "utf8").catch(() => "null")
|
|
6558
6684
|
);
|
|
6559
6685
|
}
|
|
6560
|
-
|
|
6561
|
-
|
|
6562
|
-
|
|
6563
|
-
|
|
6564
|
-
|
|
6565
|
-
|
|
6566
|
-
|
|
6567
|
-
|
|
6686
|
+
var ABANDONED_PAUSE_RESUMED = "Background indexing was paused by an installation that did not finish. Mnemonik resumed it.";
|
|
6687
|
+
var INSTALL_LEASE_STALE_MS = 3e4;
|
|
6688
|
+
async function controlScanner(action, options, owner) {
|
|
6689
|
+
const { running, pid } = await scannerService(options).status();
|
|
6690
|
+
if (!running || !pid) throw new Error("scanner_not_running");
|
|
6691
|
+
return withLock(
|
|
6692
|
+
join5(options.stateDir, "scanner/control"),
|
|
6693
|
+
5e3,
|
|
6694
|
+
() => sendControl(action, options, pid, owner)
|
|
6695
|
+
);
|
|
6696
|
+
}
|
|
6697
|
+
async function sendControl(action, options, pid, owner) {
|
|
6698
|
+
const id = randomUUID2();
|
|
6699
|
+
await atomicWrite(
|
|
6700
|
+
join5(options.stateDir, "scanner/control.json"),
|
|
6701
|
+
Buffer.from(JSON.stringify({ id, action, ...owner ? { owner } : {} }))
|
|
6702
|
+
);
|
|
6703
|
+
const now = options.now ?? Date.now;
|
|
6704
|
+
const deadline = now() + (process.platform === "win32" ? WINDOWS_SERVICE_BUDGET_MS / 4 : 1e4);
|
|
6705
|
+
do {
|
|
6706
|
+
const receipt = await scannerReceipt(options.stateDir);
|
|
6707
|
+
if (receipt?.snapshot.lifecycle.pid === pid && receipt.snapshot.lifecycle.controlId === id)
|
|
6708
|
+
return receipt;
|
|
6709
|
+
await (options.sleep ?? delay2)(100);
|
|
6710
|
+
} while (now() < deadline);
|
|
6711
|
+
throw new Error("scanner_control_timeout");
|
|
6712
|
+
}
|
|
6713
|
+
var readControl = async (stateDir) => JSON.parse(
|
|
6714
|
+
await readFile2(join5(stateDir, "scanner/control.json"), "utf8").catch(() => "null")
|
|
6715
|
+
);
|
|
6716
|
+
async function installerAlive(stateDir, owner) {
|
|
6717
|
+
if (typeof owner.pid !== "number" || typeof owner.session !== "string") return false;
|
|
6718
|
+
try {
|
|
6719
|
+
process.kill(owner.pid, 0);
|
|
6720
|
+
} catch (error) {
|
|
6721
|
+
if (error.code !== "EPERM") return false;
|
|
6722
|
+
}
|
|
6723
|
+
const lease = await stat(join5(stateDir, "install-owner.json.lock")).catch(() => null);
|
|
6724
|
+
if (!lease || Date.now() - lease.mtimeMs > INSTALL_LEASE_STALE_MS) return false;
|
|
6725
|
+
const current = JSON.parse(
|
|
6726
|
+
await readFile2(join5(stateDir, "install-owner.json"), "utf8").catch(() => "{}")
|
|
6727
|
+
);
|
|
6728
|
+
return current.runId === owner.session;
|
|
6729
|
+
}
|
|
6730
|
+
async function resumeAbandonedPause(options) {
|
|
6731
|
+
const request = await readControl(options.stateDir);
|
|
6732
|
+
if (request?.action !== "pause" || !request.owner) return false;
|
|
6733
|
+
if (await installerAlive(options.stateDir, request.owner)) return false;
|
|
6734
|
+
const supervisor = await scannerService(options).status().catch(() => void 0);
|
|
6735
|
+
const pid = supervisor?.running ? supervisor.pid : null;
|
|
6736
|
+
if (!pid) return false;
|
|
6737
|
+
const lifecycle = (await scannerReceipt(options.stateDir))?.snapshot.lifecycle;
|
|
6738
|
+
if (lifecycle?.pid !== pid || lifecycle.state !== "paused" || lifecycle.controlId !== request.id && (lifecycle.controlId !== void 0 || lifecycle.reason !== "pause_restored"))
|
|
6739
|
+
return false;
|
|
6740
|
+
return withLock(join5(options.stateDir, "scanner/control"), 5e3, async () => {
|
|
6741
|
+
if ((await readControl(options.stateDir))?.id !== request.id) return false;
|
|
6742
|
+
return sendControl("resume", options, pid).then(
|
|
6743
|
+
() => true,
|
|
6744
|
+
() => false
|
|
6568
6745
|
);
|
|
6569
|
-
const now = options.now ?? Date.now;
|
|
6570
|
-
const deadline = now() + (process.platform === "win32" ? WINDOWS_SERVICE_BUDGET_MS / 4 : 1e4);
|
|
6571
|
-
do {
|
|
6572
|
-
const receipt = await scannerReceipt(options.stateDir);
|
|
6573
|
-
if (receipt?.snapshot.lifecycle.pid === supervisor.pid && receipt.snapshot.lifecycle.controlId === id)
|
|
6574
|
-
return receipt;
|
|
6575
|
-
await (options.sleep ?? delay2)(100);
|
|
6576
|
-
} while (now() < deadline);
|
|
6577
|
-
throw new Error("scanner_control_timeout");
|
|
6578
6746
|
});
|
|
6579
6747
|
}
|
|
6580
6748
|
export {
|
|
6749
|
+
ABANDONED_PAUSE_RESUMED,
|
|
6581
6750
|
controlScanner,
|
|
6751
|
+
pausedForConsent,
|
|
6752
|
+
resumeAbandonedPause,
|
|
6582
6753
|
scannerReceipt
|
|
6583
6754
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/scanner/control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/scanner/control.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ export interface DiscoveredRepository {
|
|
|
9
9
|
state: RepositoryState;
|
|
10
10
|
/** What is on disk, for display only. Git history is optional, never a condition. */
|
|
11
11
|
kind?: 'git' | 'folder';
|
|
12
|
+
/** The project its `.mnemonik.json` names. A folder with one is a project, git or not. */
|
|
13
|
+
projectId?: string;
|
|
12
14
|
fingerprint?: RepositoryFingerprint;
|
|
13
15
|
reason?: Exclude<ProjectIdentityResolution['kind'], 'ok' | 'absent'>;
|
|
14
16
|
}
|
|
@@ -16,6 +18,8 @@ export interface ScannerCandidate {
|
|
|
16
18
|
path: string;
|
|
17
19
|
name: string;
|
|
18
20
|
kind: 'git' | 'folder';
|
|
21
|
+
/** Lets the server tell an already-connected project from a new folder. */
|
|
22
|
+
projectId?: string;
|
|
19
23
|
}
|
|
20
24
|
export type DiscoveryResult = {
|
|
21
25
|
status: 'complete' | 'list_truncated';
|
|
@@ -42,6 +46,7 @@ export declare function scannerCandidates(boundary: string): Promise<{
|
|
|
42
46
|
repositories: DiscoveredRepository[];
|
|
43
47
|
omitted: number;
|
|
44
48
|
}>;
|
|
49
|
+
export declare const scannerCandidate: (root: string, repository: DiscoveredRepository) => ScannerCandidate;
|
|
45
50
|
export declare function guessDiscoveryBoundary(cwd: string, home: string): Promise<string>;
|
|
46
51
|
export declare const repositoryName: (root: string, path: string) => string;
|
|
47
52
|
export declare const repositoryStateLabel: (state: RepositoryState) => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/scanner/discover.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGtC,OAAO,EACL,sBAAsB,EAEtB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,eAAe,QAAS,CAAC;AACtC,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,MAAM,MAAM,eAAe,GACzB,kBAAkB,GAAG,cAAc,GAAG,YAAY,GAAG,iBAAiB,CAAC;AAEzE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,qFAAqF;IACrF,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACxB,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/scanner/discover.ts"],"names":[],"mappings":"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"}
|
package/dist/scanner/discover.js
CHANGED
|
@@ -5169,7 +5169,12 @@ async function classifyRepository(path, options = {}) {
|
|
|
5169
5169
|
);
|
|
5170
5170
|
const kind = resolution.kind !== "git_unavailable" && resolution.repository.kind === "git" ? "git" : "folder";
|
|
5171
5171
|
if (resolution.kind === "ok") {
|
|
5172
|
-
return {
|
|
5172
|
+
return {
|
|
5173
|
+
path: resolvedPath,
|
|
5174
|
+
state: "existing_project",
|
|
5175
|
+
kind,
|
|
5176
|
+
projectId: resolution.identity.projectId
|
|
5177
|
+
};
|
|
5173
5178
|
}
|
|
5174
5179
|
if (resolution.kind !== "absent") {
|
|
5175
5180
|
return { path: resolvedPath, state: "action_required", kind, reason: resolution.kind };
|
|
@@ -5260,13 +5265,17 @@ async function scannerCandidates(boundary) {
|
|
|
5260
5265
|
boundary: discovered.root,
|
|
5261
5266
|
repositories: discovered.repositories,
|
|
5262
5267
|
omitted: discovered.omitted,
|
|
5263
|
-
candidates: discovered.repositories.map(
|
|
5264
|
-
|
|
5265
|
-
|
|
5266
|
-
kind: repository.kind ?? "git"
|
|
5267
|
-
}))
|
|
5268
|
+
candidates: discovered.repositories.map(
|
|
5269
|
+
(repository) => scannerCandidate(discovered.root, repository)
|
|
5270
|
+
)
|
|
5268
5271
|
};
|
|
5269
5272
|
}
|
|
5273
|
+
var scannerCandidate = (root, repository) => ({
|
|
5274
|
+
path: repository.path,
|
|
5275
|
+
name: repositoryName(root, repository.path),
|
|
5276
|
+
kind: repository.kind ?? "git",
|
|
5277
|
+
...repository.projectId ? { projectId: repository.projectId } : {}
|
|
5278
|
+
});
|
|
5270
5279
|
async function guessDiscoveryBoundary(cwd, home) {
|
|
5271
5280
|
const current = resolve2(cwd);
|
|
5272
5281
|
const unsafe = current === resolve2(home) || current === parse(current).root;
|
|
@@ -5298,5 +5307,6 @@ export {
|
|
|
5298
5307
|
guessDiscoveryBoundary,
|
|
5299
5308
|
repositoryName,
|
|
5300
5309
|
repositoryStateLabel,
|
|
5310
|
+
scannerCandidate,
|
|
5301
5311
|
scannerCandidates
|
|
5302
5312
|
};
|