@wrongstack/techstack 0.292.1 โ 0.295.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/adapters/cpp.d.ts +1 -1
- package/dist/adapters/cpp.d.ts.map +1 -1
- package/dist/adapters/dart.d.ts +1 -2
- package/dist/adapters/dart.d.ts.map +1 -1
- package/dist/adapters/dotnet.d.ts +1 -1
- package/dist/adapters/dotnet.d.ts.map +1 -1
- package/dist/adapters/elixir.d.ts +1 -1
- package/dist/adapters/elixir.d.ts.map +1 -1
- package/dist/adapters/go.d.ts +1 -2
- package/dist/adapters/go.d.ts.map +1 -1
- package/dist/adapters/gradle.d.ts +9 -0
- package/dist/adapters/gradle.d.ts.map +1 -0
- package/dist/adapters/interface.d.ts +1 -0
- package/dist/adapters/interface.d.ts.map +1 -1
- package/dist/adapters/maven.d.ts +1 -1
- package/dist/adapters/maven.d.ts.map +1 -1
- package/dist/adapters/npm.d.ts +1 -1
- package/dist/adapters/npm.d.ts.map +1 -1
- package/dist/adapters/parse-utils.d.ts +15 -0
- package/dist/adapters/parse-utils.d.ts.map +1 -0
- package/dist/adapters/paths.d.ts +8 -1
- package/dist/adapters/paths.d.ts.map +1 -1
- package/dist/adapters/php.d.ts +1 -2
- package/dist/adapters/php.d.ts.map +1 -1
- package/dist/adapters/python.d.ts +1 -2
- package/dist/adapters/python.d.ts.map +1 -1
- package/dist/adapters/ruby.d.ts +1 -1
- package/dist/adapters/ruby.d.ts.map +1 -1
- package/dist/adapters/rust.d.ts +1 -2
- package/dist/adapters/rust.d.ts.map +1 -1
- package/dist/adapters/swift.d.ts +9 -0
- package/dist/adapters/swift.d.ts.map +1 -0
- package/dist/advisory/native-audit.d.ts +20 -8
- package/dist/advisory/native-audit.d.ts.map +1 -1
- package/dist/advisory/osv.d.ts.map +1 -1
- package/dist/discovery/index.d.ts +3 -13
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/index.d.ts +10 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1396 -929
- package/dist/index.js.map +4 -4
- package/dist/registry/client.d.ts +23 -0
- package/dist/registry/client.d.ts.map +1 -1
- package/dist/registry/http-fetch.d.ts +22 -0
- package/dist/registry/http-fetch.d.ts.map +1 -0
- package/dist/remediation.d.ts +35 -0
- package/dist/remediation.d.ts.map +1 -1
- package/dist/research/llm.d.ts +1 -1
- package/dist/research/llm.d.ts.map +1 -1
- package/dist/research/triage.d.ts +2 -15
- package/dist/research/triage.d.ts.map +1 -1
- package/dist/service/enrich-phase.d.ts +8 -0
- package/dist/service/enrich-phase.d.ts.map +1 -0
- package/dist/service/finding-factory.d.ts +4 -0
- package/dist/service/finding-factory.d.ts.map +1 -0
- package/dist/service/inventory-phase.d.ts +9 -0
- package/dist/service/inventory-phase.d.ts.map +1 -0
- package/dist/service/report-generator.d.ts +3 -0
- package/dist/service/report-generator.d.ts.map +1 -0
- package/dist/service/research-phase.d.ts +10 -0
- package/dist/service/research-phase.d.ts.map +1 -0
- package/dist/service/techstack-engine.d.ts +33 -0
- package/dist/service/techstack-engine.d.ts.map +1 -0
- package/dist/service.d.ts +5 -106
- package/dist/service.d.ts.map +1 -1
- package/dist/store/sqlite.d.ts +4 -0
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/trend.d.ts +36 -0
- package/dist/trend.d.ts.map +1 -0
- package/package.json +3 -3
|
@@ -31,11 +31,32 @@ export interface HostConcurrency {
|
|
|
31
31
|
* trip โ it was untested, and drifted into flagging most of the ecosystem dead.
|
|
32
32
|
*/
|
|
33
33
|
export declare function parseNpmPackument(json: Record<string, unknown>, name: string): RegistryEntry;
|
|
34
|
+
export declare class RegistryNotFoundError extends Error {
|
|
35
|
+
readonly statusCode: number;
|
|
36
|
+
readonly packageName: string;
|
|
37
|
+
constructor(statusCode: number, packageName: string);
|
|
38
|
+
}
|
|
39
|
+
export declare class RegistryAuthError extends Error {
|
|
40
|
+
readonly statusCode: number;
|
|
41
|
+
readonly packageName: string;
|
|
42
|
+
constructor(statusCode: number, packageName: string);
|
|
43
|
+
}
|
|
44
|
+
export declare class RegistryRateLimitError extends Error {
|
|
45
|
+
readonly statusCode: number;
|
|
46
|
+
readonly host: string;
|
|
47
|
+
constructor(statusCode: number, host: string);
|
|
48
|
+
}
|
|
49
|
+
export declare class RegistryNetworkError extends Error {
|
|
50
|
+
readonly cause?: Error | undefined;
|
|
51
|
+
constructor(message: string, cause?: Error | undefined);
|
|
52
|
+
}
|
|
34
53
|
export interface RegistryLookupOptions {
|
|
35
54
|
/** Abort signal for cancellation. */
|
|
36
55
|
readonly signal?: AbortSignal | undefined;
|
|
37
56
|
/** Bypass cache and force a fresh lookup. */
|
|
38
57
|
readonly force?: boolean | undefined;
|
|
58
|
+
/** Throw classified 401/403/404 errors instead of the compatibility `undefined`. */
|
|
59
|
+
readonly strictErrors?: boolean | undefined;
|
|
39
60
|
}
|
|
40
61
|
/**
|
|
41
62
|
* Look up registry metadata for a package in a given ecosystem.
|
|
@@ -58,4 +79,6 @@ export declare function supportedRegistryEcosystems(): string[];
|
|
|
58
79
|
* Useful for testing and when force-refreshing.
|
|
59
80
|
*/
|
|
60
81
|
export declare function clearRegistryCache(): void;
|
|
82
|
+
/** Invalidate one ecosystem batch without evicting unrelated registry data. */
|
|
83
|
+
export declare function invalidateRegistryCache(ecosystem: string, names?: readonly string[]): number;
|
|
61
84
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Shared dependency-service HTTP transport with cancellation and bounded retry. */
|
|
2
|
+
import type { IncomingHttpHeaders } from 'node:http';
|
|
3
|
+
export interface HttpResponse {
|
|
4
|
+
readonly statusCode: number;
|
|
5
|
+
readonly headers: IncomingHttpHeaders;
|
|
6
|
+
readonly body: string;
|
|
7
|
+
}
|
|
8
|
+
export interface HttpRequestOptions {
|
|
9
|
+
readonly hostname: string;
|
|
10
|
+
readonly path: string;
|
|
11
|
+
readonly method?: 'GET' | 'POST' | undefined;
|
|
12
|
+
readonly headers?: Readonly<Record<string, string>> | undefined;
|
|
13
|
+
readonly body?: string | undefined;
|
|
14
|
+
readonly signal?: AbortSignal | undefined;
|
|
15
|
+
readonly timeoutMs?: number | undefined;
|
|
16
|
+
readonly maxAttempts?: number | undefined;
|
|
17
|
+
readonly baseBackoffMs?: number | undefined;
|
|
18
|
+
}
|
|
19
|
+
export declare function retryAfterMs(headers: IncomingHttpHeaders, now?: number): number | undefined;
|
|
20
|
+
export declare function requestWithRetry(options: HttpRequestOptions): Promise<HttpResponse>;
|
|
21
|
+
export declare function parseJsonResponse<T>(response: HttpResponse, source: string): T;
|
|
22
|
+
//# sourceMappingURL=http-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-fetch.d.ts","sourceRoot":"","sources":["../../src/registry/http-fetch.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAGpF,OAAO,KAAK,EAAE,mBAAmB,EAAmC,MAAM,WAAW,CAAC;AAGtF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,SAAa,GAAG,MAAM,GAAG,SAAS,CAO/F;AAgDD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAoBzF;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAM9E"}
|
package/dist/remediation.d.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @see docs/specs/techstack-sdd.md ยง2 (R25), ยง9
|
|
9
9
|
*/
|
|
10
|
+
import type { LanguagePackageInput } from '@wrongstack/tools';
|
|
10
11
|
import type { Finding, Snapshot } from './types.js';
|
|
11
12
|
export interface UpgradePlanItem {
|
|
12
13
|
readonly dependencyName: string;
|
|
@@ -36,6 +37,35 @@ export interface UpgradePlan {
|
|
|
36
37
|
};
|
|
37
38
|
readonly warning: string;
|
|
38
39
|
}
|
|
40
|
+
export interface PackageOperation {
|
|
41
|
+
readonly ecosystem: string;
|
|
42
|
+
readonly workspaceId: string;
|
|
43
|
+
readonly dependencyName: string;
|
|
44
|
+
readonly action: UpgradePlanItem['action'];
|
|
45
|
+
readonly targetVersion?: string | undefined;
|
|
46
|
+
}
|
|
47
|
+
/** Convert a remediation item into the structured safe package-tool input. */
|
|
48
|
+
export declare function toLanguagePackageInput(operation: PackageOperation, workspace?: string): LanguagePackageInput;
|
|
49
|
+
export type PackageOperationExecutor = (operation: PackageOperation) => Promise<{
|
|
50
|
+
readonly detail?: string | undefined;
|
|
51
|
+
} | void>;
|
|
52
|
+
export interface ApplyPlanOptions {
|
|
53
|
+
/** Defaults to true. Set false only after explicit user approval. */
|
|
54
|
+
readonly dryRun?: boolean | undefined;
|
|
55
|
+
/** Permission gate evaluated independently for every plan item. */
|
|
56
|
+
readonly approve?: ((item: UpgradePlanItem, index: number) => boolean | Promise<boolean>) | undefined;
|
|
57
|
+
/** Structured language-package executor; shell command strings are never run here. */
|
|
58
|
+
readonly execute?: PackageOperationExecutor | undefined;
|
|
59
|
+
readonly signal?: AbortSignal | undefined;
|
|
60
|
+
}
|
|
61
|
+
export interface ApplyPlanResult {
|
|
62
|
+
readonly dryRun: boolean;
|
|
63
|
+
readonly items: ReadonlyArray<{
|
|
64
|
+
readonly dependencyName: string;
|
|
65
|
+
readonly status: 'planned' | 'skipped' | 'applied' | 'failed';
|
|
66
|
+
readonly detail?: string | undefined;
|
|
67
|
+
}>;
|
|
68
|
+
}
|
|
39
69
|
/**
|
|
40
70
|
* Generate a dry-run upgrade plan from a snapshot.
|
|
41
71
|
*
|
|
@@ -51,4 +81,9 @@ export declare function generateUpgradePlan(snapshot: Snapshot): UpgradePlan;
|
|
|
51
81
|
* Render an upgrade plan as Markdown for the report endpoint or CLI display.
|
|
52
82
|
*/
|
|
53
83
|
export declare function renderPlanMarkdown(plan: UpgradePlan): string;
|
|
84
|
+
/**
|
|
85
|
+
* Apply explicitly approved remediation items through a structured,
|
|
86
|
+
* permission-gated package executor. The safe default is a dry run.
|
|
87
|
+
*/
|
|
88
|
+
export declare function applyPlan(plan: UpgradePlan, options?: ApplyPlanOptions): Promise<ApplyPlanResult>;
|
|
54
89
|
//# sourceMappingURL=remediation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../src/remediation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAyB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAsCD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,CA4DnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../src/remediation.ts"],"names":[],"mappings":"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"}
|
package/dist/research/llm.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @see docs/specs/techstack-sdd.md ยง4.2
|
|
11
11
|
*/
|
|
12
|
-
import type { Provider } from '@wrongstack/core';
|
|
12
|
+
import type { Provider } from '@wrongstack/core/types';
|
|
13
13
|
import type { ResearchLlm } from './types.js';
|
|
14
14
|
/** How the caller reaches a live provider. A getter, not a captured value โ
|
|
15
15
|
* the user can switch model or rotate credentials mid-session, and a snapshot
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/research/llm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAW,MAAM,
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/research/llm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAW,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,YAAY,CAAC;AAElE;;8CAE8C;AAC9C,MAAM,MAAM,WAAW,GAAG,MAAM;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC;AAIlF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,WAAW,EACrB,OAAO,GAAE;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAO,GACxD,WAAW,GAAG,SAAS,CAgDzB;AA2BD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAU9E"}
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* TechStack โ Deterministic research triage.
|
|
3
3
|
*
|
|
4
|
-
* Decides
|
|
5
|
-
*
|
|
6
|
-
* This is the stage that makes research affordable: a monorepo resolves
|
|
7
|
-
* thousands of dependencies, the overwhelming majority of which are `current`
|
|
8
|
-
* and need no interpretation at all. Only statuses where the registry has
|
|
9
|
-
* already told us something is wrong โ but not what to do about it โ earn a
|
|
10
|
-
* research slot.
|
|
4
|
+
* Decides which dependencies are worth an LLM call. No LLM, no network.
|
|
11
5
|
*
|
|
12
6
|
* @see docs/specs/techstack-sdd.md ยง31, ยง557
|
|
13
7
|
*/
|
|
@@ -19,14 +13,7 @@ export interface TriageOptions {
|
|
|
19
13
|
/** Max candidates returned. Defaults to {@link DEFAULT_TRIAGE_LIMIT}. */
|
|
20
14
|
readonly limit?: number | undefined;
|
|
21
15
|
}
|
|
22
|
-
/**
|
|
23
|
-
* Select and rank the dependencies worth researching.
|
|
24
|
-
*
|
|
25
|
-
* Ordering is fully deterministic โ priority, then name, then version โ so the
|
|
26
|
-
* same snapshot always triages identically. Ties resolve by name rather than
|
|
27
|
-
* by input order because adapter output order is not itself guaranteed stable
|
|
28
|
-
* across platforms, and a wobbling triage would make the cap non-reproducible.
|
|
29
|
-
*/
|
|
16
|
+
/** Select and rank the dependencies worth researching. */
|
|
30
17
|
export declare function triageCandidates(dependencies: readonly DependencyObservation[], options?: TriageOptions): readonly TriageCandidate[];
|
|
31
18
|
/** Group triaged candidates by cluster, preserving triage order within each. */
|
|
32
19
|
export declare function clusterCandidates(candidates: readonly TriageCandidate[]): ReadonlyMap<ResearchCluster, readonly TriageCandidate[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../src/research/triage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../src/research/triage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAoB,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAqCvC,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,SAAS,qBAAqB,EAAE,EAC9C,OAAO,GAAE,aAAkB,GAC1B,SAAS,eAAe,EAAE,CAgC5B;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,SAAS,eAAe,EAAE,GACrC,WAAW,CAAC,eAAe,EAAE,SAAS,eAAe,EAAE,CAAC,CAQ1D"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Snapshot } from '../types.js';
|
|
2
|
+
export interface EnrichOptions {
|
|
3
|
+
readonly online?: boolean | undefined;
|
|
4
|
+
readonly signal?: AbortSignal | undefined;
|
|
5
|
+
readonly forceRegistryRefresh?: boolean | undefined;
|
|
6
|
+
}
|
|
7
|
+
export declare function runEnrichPhase(snapshot: Snapshot, options?: EnrichOptions): Promise<Snapshot>;
|
|
8
|
+
//# sourceMappingURL=enrich-phase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich-phase.d.ts","sourceRoot":"","sources":["../../src/service/enrich-phase.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAyD,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGnG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACrD;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkEvG"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DependencyObservation, Finding } from '../types.js';
|
|
2
|
+
export declare function computeDependencyFingerprint(dependencies: readonly DependencyObservation[]): string;
|
|
3
|
+
export declare function createFindingForStatus(dependencyId: string, status: string): Finding;
|
|
4
|
+
//# sourceMappingURL=finding-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-factory.d.ts","sourceRoot":"","sources":["../../src/service/finding-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAElE,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,SAAS,qBAAqB,EAAE,GAAG,MAAM,CAWnG;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAUpF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { InventoryOptions } from '../adapters/interface.js';
|
|
2
|
+
import type { TechStackStore } from '../store/sqlite.js';
|
|
3
|
+
import type { Snapshot } from '../types.js';
|
|
4
|
+
export declare const ADAPTER_VERSION = "0.1.0";
|
|
5
|
+
export interface InventoryPhaseOptions extends InventoryOptions {
|
|
6
|
+
readonly onProgress?: ((phase: string, completed: number, total: number) => void) | undefined;
|
|
7
|
+
}
|
|
8
|
+
export declare function runInventoryPhase(store: TechStackStore, projectId: string, targetRoot: string, options?: InventoryPhaseOptions): Promise<Snapshot>;
|
|
9
|
+
//# sourceMappingURL=inventory-phase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inventory-phase.d.ts","sourceRoot":"","sources":["../../src/service/inventory-phase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAenF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAgD,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG1F,eAAO,MAAM,eAAe,UAAU,CAAC;AAQvC,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC/F;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,QAAQ,CAAC,CA6BnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-generator.d.ts","sourceRoot":"","sources":["../../src/service/report-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAE,IAAI,GAAG,MAAa,GAAG,MAAM,CAsCvF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TechStackResearcher } from '../research/types.js';
|
|
2
|
+
import type { Snapshot } from '../types.js';
|
|
3
|
+
export interface ResearchPhaseOptions {
|
|
4
|
+
readonly researcher?: TechStackResearcher | undefined;
|
|
5
|
+
readonly researchLimit?: number | undefined;
|
|
6
|
+
readonly signal?: AbortSignal | undefined;
|
|
7
|
+
readonly onProgress?: ((phase: 'researching' | 'synthesizing', completed: number, total: number) => void) | undefined;
|
|
8
|
+
}
|
|
9
|
+
export declare function runResearchPhase(snapshot: Snapshot, options?: ResearchPhaseOptions): Promise<Snapshot>;
|
|
10
|
+
//# sourceMappingURL=research-phase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-phase.d.ts","sourceRoot":"","sources":["../../src/service/research-phase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAW,QAAQ,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACvH;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgBhH"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { InventoryOptions } from '../adapters/interface.js';
|
|
2
|
+
import type { TechStackResearcher } from '../research/types.js';
|
|
3
|
+
import type { TechStackStore } from '../store/sqlite.js';
|
|
4
|
+
import type { Snapshot, TechStackJob } from '../types.js';
|
|
5
|
+
import { type EnrichOptions } from './enrich-phase.js';
|
|
6
|
+
import { type ResearchPhaseOptions } from './research-phase.js';
|
|
7
|
+
export type { EnrichOptions } from './enrich-phase.js';
|
|
8
|
+
export interface AnalyzeOptions {
|
|
9
|
+
readonly targetRoot: string;
|
|
10
|
+
readonly sessionId?: string | undefined;
|
|
11
|
+
readonly requestedBy?: string | undefined;
|
|
12
|
+
readonly online?: boolean | undefined;
|
|
13
|
+
readonly autoDeliver?: boolean | undefined;
|
|
14
|
+
readonly jobId?: string | undefined;
|
|
15
|
+
readonly signal?: AbortSignal | undefined;
|
|
16
|
+
readonly onProgress?: ((phase: string, completed: number, total: number) => void) | undefined;
|
|
17
|
+
readonly researcher?: TechStackResearcher | undefined;
|
|
18
|
+
readonly researchLimit?: number | undefined;
|
|
19
|
+
readonly includeTransitive?: boolean | undefined;
|
|
20
|
+
}
|
|
21
|
+
export declare class TechStackEngine {
|
|
22
|
+
private readonly store;
|
|
23
|
+
constructor(store: TechStackStore);
|
|
24
|
+
inventory(projectId: string, targetRoot: string, _jobId?: string, onProgress?: (phase: string, completed: number, total: number) => void, options?: InventoryOptions): Promise<Snapshot>;
|
|
25
|
+
enrich(snapshot: Snapshot, options?: EnrichOptions): Promise<Snapshot>;
|
|
26
|
+
research(snapshot: Snapshot, options?: ResearchPhaseOptions): Promise<Snapshot>;
|
|
27
|
+
generateReport(snapshot: Snapshot, format?: 'md' | 'json'): string;
|
|
28
|
+
analyze(projectId: string, options: AnalyzeOptions): Promise<{
|
|
29
|
+
snapshot: Snapshot;
|
|
30
|
+
job: TechStackJob;
|
|
31
|
+
}>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=techstack-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"techstack-engine.d.ts","sourceRoot":"","sources":["../../src/service/techstack-engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAA4C,MAAM,aAAa,CAAC;AACpG,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvE,OAAO,EAAoB,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAElF,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9F,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAClD;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAlC,YAA6B,KAAK,EAAE,cAAc,EAAI;IAEtD,SAAS,CACP,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,EACtE,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAEnB;IAED,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAEzE;IAED,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAElF;IAED,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAE,IAAI,GAAG,MAAa,GAAG,MAAM,CAEvE;IAEK,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,GAAG,EAAE,YAAY,CAAA;KAAE,CAAC,CAwC5G;CACF"}
|
package/dist/service.d.ts
CHANGED
|
@@ -1,110 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Backward-compatible service entry point.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* @see docs/specs/techstack-sdd.md ยง4.2
|
|
4
|
+
* The engine implementation is split by pipeline responsibility under
|
|
5
|
+
* `service/`; existing imports from `service.js` remain stable.
|
|
8
6
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import type { TechStackResearcher } from './research/types.js';
|
|
12
|
-
export interface EnrichOptions {
|
|
13
|
-
/** Skip network calls; use only cached/offline data. */
|
|
14
|
-
readonly online?: boolean | undefined;
|
|
15
|
-
/** Abort signal for cancellation. */
|
|
16
|
-
readonly signal?: AbortSignal | undefined;
|
|
17
|
-
/** Force re-fetch registry data (ignore cache). */
|
|
18
|
-
readonly forceRegistryRefresh?: boolean | undefined;
|
|
19
|
-
}
|
|
20
|
-
export interface AnalyzeOptions {
|
|
21
|
-
/** Where to start the analysis. */
|
|
22
|
-
readonly targetRoot: string;
|
|
23
|
-
/** Session ID for job tracking. */
|
|
24
|
-
readonly sessionId?: string | undefined;
|
|
25
|
-
/** Requesting entity. */
|
|
26
|
-
readonly requestedBy?: string | undefined;
|
|
27
|
-
/** Enable online enrichment (registry + advisory). */
|
|
28
|
-
readonly online?: boolean | undefined;
|
|
29
|
-
/** Auto-deliver report when complete. */
|
|
30
|
-
readonly autoDeliver?: boolean | undefined;
|
|
31
|
-
/** Optional caller-assigned id so HTTP/WS clients can track the job immediately. */
|
|
32
|
-
readonly jobId?: string | undefined;
|
|
33
|
-
/** Abort signal used by cancel endpoints. */
|
|
34
|
-
readonly signal?: AbortSignal | undefined;
|
|
35
|
-
/** Progress callback for WebSocket projection. */
|
|
36
|
-
readonly onProgress?: ((phase: string, completed: number, total: number) => void) | undefined;
|
|
37
|
-
/**
|
|
38
|
-
* LLM interpretation stage. Omit it and `analyze()` stays a purely
|
|
39
|
-
* deterministic tool โ research is strictly additive enrichment.
|
|
40
|
-
*
|
|
41
|
-
* @see docs/specs/techstack-sdd.md ยง31
|
|
42
|
-
*/
|
|
43
|
-
readonly researcher?: TechStackResearcher | undefined;
|
|
44
|
-
/** Cap on packages sent to research. Defaults to `DEFAULT_TRIAGE_LIMIT`. */
|
|
45
|
-
readonly researchLimit?: number | undefined;
|
|
46
|
-
}
|
|
47
|
-
export declare class TechStackEngine {
|
|
48
|
-
private store;
|
|
49
|
-
constructor(store: TechStackStore);
|
|
50
|
-
/**
|
|
51
|
-
* Run an offline inventory: discover workspaces and parse dependencies
|
|
52
|
-
* from manifests and lockfiles. No network calls.
|
|
53
|
-
*
|
|
54
|
-
* Returns a Snapshot with workspace and dependency data but no
|
|
55
|
-
* registry/advisory enrichment.
|
|
56
|
-
*/
|
|
57
|
-
inventory(projectId: string, targetRoot: string, _jobId?: string, onProgress?: (phase: string, completed: number, total: number) => void): Promise<Snapshot>;
|
|
58
|
-
/**
|
|
59
|
-
* Enrich a snapshot with registry metadata and advisory data.
|
|
60
|
-
*
|
|
61
|
-
* This is the online pass: fetches latest versions, licenses, deprecation
|
|
62
|
-
* status from registries, and queries OSV for advisories.
|
|
63
|
-
*
|
|
64
|
-
* Key contracts:
|
|
65
|
-
* - 404/401 โ status `private_or_unresolved` (never `dead` or `deprecated`)
|
|
66
|
-
* - Network failure โ status `unknown` with evidence detail (never `current`)
|
|
67
|
-
*/
|
|
68
|
-
enrich(snapshot: Snapshot, options?: EnrichOptions): Promise<Snapshot>;
|
|
69
|
-
/**
|
|
70
|
-
* Interpret an enriched snapshot with the LLM: triage the problem cases,
|
|
71
|
-
* research them, and append the resulting findings.
|
|
72
|
-
*
|
|
73
|
-
* Additive by construction. Two invariants hold here, and they are the whole
|
|
74
|
-
* reason this is a separate pass rather than part of `enrich()`:
|
|
75
|
-
*
|
|
76
|
-
* 1. **`snapshot.dependencies` is returned untouched.** Version facts come
|
|
77
|
-
* only from registry evidence โ the LLM cannot fabricate a `latestStable`
|
|
78
|
-
* because `Finding` has nowhere to put one (SDD ยง472).
|
|
79
|
-
* 2. **Failure is not fatal.** No researcher, no candidates, a provider
|
|
80
|
-
* outage, a dry web search โ every one of them returns the input snapshot
|
|
81
|
-
* unchanged. A deterministic report is the floor, never a casualty of the
|
|
82
|
-
* optional stage above it.
|
|
83
|
-
*
|
|
84
|
-
* @see docs/specs/techstack-sdd.md ยง31, ยง472
|
|
85
|
-
*/
|
|
86
|
-
research(snapshot: Snapshot, options?: {
|
|
87
|
-
researcher?: TechStackResearcher | undefined;
|
|
88
|
-
researchLimit?: number | undefined;
|
|
89
|
-
signal?: AbortSignal | undefined;
|
|
90
|
-
/** Only ever emits the two research phases โ narrow so callers can feed
|
|
91
|
-
* `updateJob` without casting. */
|
|
92
|
-
onProgress?: ((phase: 'researching' | 'synthesizing', completed: number, total: number) => void) | undefined;
|
|
93
|
-
}): Promise<Snapshot>;
|
|
94
|
-
/**
|
|
95
|
-
* Run a full analysis: inventory + enrich + research + persist.
|
|
96
|
-
* This is the main entry point for the analyze job flow.
|
|
97
|
-
*/
|
|
98
|
-
analyze(projectId: string, options: AnalyzeOptions): Promise<{
|
|
99
|
-
snapshot: Snapshot;
|
|
100
|
-
job: TechStackJob;
|
|
101
|
-
}>;
|
|
102
|
-
/**
|
|
103
|
-
* Generate a human-readable report from a snapshot.
|
|
104
|
-
*
|
|
105
|
-
* @param format 'md' for Markdown, 'json' for raw JSON.
|
|
106
|
-
* @returns The report as a string.
|
|
107
|
-
*/
|
|
108
|
-
generateReport(snapshot: Snapshot, format?: 'md' | 'json'): string;
|
|
109
|
-
}
|
|
7
|
+
export { TechStackEngine } from './service/techstack-engine.js';
|
|
8
|
+
export type { AnalyzeOptions, EnrichOptions } from './service/techstack-engine.js';
|
|
110
9
|
//# sourceMappingURL=service.d.ts.map
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC"}
|
package/dist/store/sqlite.d.ts
CHANGED
|
@@ -18,7 +18,11 @@ export interface StoreOptions {
|
|
|
18
18
|
export declare class TechStackStore {
|
|
19
19
|
private db;
|
|
20
20
|
private dbPath;
|
|
21
|
+
/** Compile-once cache for fixed SQL used on hot job/snapshot paths. */
|
|
22
|
+
private readonly stmtCache;
|
|
21
23
|
constructor(options: StoreOptions);
|
|
24
|
+
/** Prepare-once helper: compile `sql` on first use, reuse thereafter. */
|
|
25
|
+
private stmt;
|
|
22
26
|
/** Close the database connection. Idempotent. */
|
|
23
27
|
close(): void;
|
|
24
28
|
/** Get the database path (useful for tests). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/store/sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/store/sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAuFrB,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0D;IAEpF,YAAY,OAAO,EAAE,YAAY,EAqBhC;IAED,yEAAyE;IACzE,OAAO,CAAC,IAAI;IAWZ,iDAAiD;IACjD,KAAK,IAAI,IAAI,CAOZ;IAED,gDAAgD;IAChD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAID,0BAA0B;IAC1B,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAcrC;IAED,6CAA6C;IAC7C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAcnD;IAED,4BAA4B;IAC5B,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAWhD;IAED,uDAAuD;IACvD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,QAAQ,EAAE,CAiBvD;IAED,qDAAqD;IACrD,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM/D;IAID,qBAAqB;IACrB,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAoB/B;IAED,uBAAuB;IACvB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAO3C;IAED,+CAA+C;IAC/C,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAY7F;IAED,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,YAAY,EAAE,CAMtD;IAID,8BAA8B;IAC9B,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAM1E;IAED,0CAA0C;IAC1C,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAQ1D;IAED,yCAAyC;IACzC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAMtC;IAED,sCAAsC;IACtC,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAKnC;IAED,qCAAqC;IACrC,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,EAAE,CAM3D;IAID,OAAO,CAAC,QAAQ;IA0BhB,OAAO,CAAC,WAAW;CAWpB"}
|
package/dist/trend.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Cross-snapshot dependency health and remediation trend analysis. */
|
|
2
|
+
import type { Snapshot } from './types.js';
|
|
3
|
+
export interface SnapshotSource {
|
|
4
|
+
listSnapshots(projectId: string, limit?: number): Snapshot[];
|
|
5
|
+
}
|
|
6
|
+
export interface DependencyTrend {
|
|
7
|
+
readonly key: string;
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly ecosystem: string;
|
|
10
|
+
readonly currentVersion?: string | undefined;
|
|
11
|
+
readonly lockedVersionAgeMs: number;
|
|
12
|
+
readonly versionChanges: number;
|
|
13
|
+
readonly upgradeVelocityPerDay: number;
|
|
14
|
+
}
|
|
15
|
+
export interface TrendReport {
|
|
16
|
+
readonly projectId: string;
|
|
17
|
+
readonly from?: string | undefined;
|
|
18
|
+
readonly to?: string | undefined;
|
|
19
|
+
readonly snapshots: number;
|
|
20
|
+
readonly dependencies: readonly DependencyTrend[];
|
|
21
|
+
readonly vulnerabilityHalfLifeMs?: number | undefined;
|
|
22
|
+
readonly points: ReadonlyArray<{
|
|
23
|
+
readonly snapshotId: string;
|
|
24
|
+
readonly createdAt: string;
|
|
25
|
+
readonly dependencies: number;
|
|
26
|
+
readonly outdated: number;
|
|
27
|
+
readonly vulnerable: number;
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
export declare class TrendStore {
|
|
31
|
+
private readonly source;
|
|
32
|
+
constructor(source: SnapshotSource);
|
|
33
|
+
analyze(projectId: string, limit?: number): TrendReport;
|
|
34
|
+
}
|
|
35
|
+
export declare function renderTrendMarkdown(report: TrendReport): string;
|
|
36
|
+
//# sourceMappingURL=trend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trend.d.ts","sourceRoot":"","sources":["../src/trend.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;CAC9D;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,SAAS,eAAe,EAAE,CAAC;IAClD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC,CAAC;CACJ;AAaD,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,cAAc,EAAI;IAEvD,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,WAAW,CAwEnD;CACF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAQ/D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrongstack/techstack",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.295.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "WrongStack TechStack โ cross-language dependency intelligence for the active target project: discover, inventory, enrich, analyze, and report.",
|
|
6
6
|
"repository": {
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"dist"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@wrongstack/core": "0.
|
|
29
|
-
"@wrongstack/tools": "0.
|
|
28
|
+
"@wrongstack/core": "0.295.0",
|
|
29
|
+
"@wrongstack/tools": "0.295.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/node": "^26.1.1",
|