@wrongstack/techstack 0.289.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/LICENSE +21 -0
- package/dist/adapters/cpp.d.ts +16 -0
- package/dist/adapters/cpp.d.ts.map +1 -0
- package/dist/adapters/dart.d.ts +20 -0
- package/dist/adapters/dart.d.ts.map +1 -0
- package/dist/adapters/dotnet.d.ts +19 -0
- package/dist/adapters/dotnet.d.ts.map +1 -0
- package/dist/adapters/elixir.d.ts +16 -0
- package/dist/adapters/elixir.d.ts.map +1 -0
- package/dist/adapters/go.d.ts +20 -0
- package/dist/adapters/go.d.ts.map +1 -0
- package/dist/adapters/interface.d.ts +104 -0
- package/dist/adapters/interface.d.ts.map +1 -0
- package/dist/adapters/maven.d.ts +17 -0
- package/dist/adapters/maven.d.ts.map +1 -0
- package/dist/adapters/npm.d.ts +21 -0
- package/dist/adapters/npm.d.ts.map +1 -0
- package/dist/adapters/paths.d.ts +37 -0
- package/dist/adapters/paths.d.ts.map +1 -0
- package/dist/adapters/php.d.ts +20 -0
- package/dist/adapters/php.d.ts.map +1 -0
- package/dist/adapters/python.d.ts +26 -0
- package/dist/adapters/python.d.ts.map +1 -0
- package/dist/adapters/ruby.d.ts +16 -0
- package/dist/adapters/ruby.d.ts.map +1 -0
- package/dist/adapters/rust.d.ts +20 -0
- package/dist/adapters/rust.d.ts.map +1 -0
- package/dist/advisory/native-audit.d.ts +61 -0
- package/dist/advisory/native-audit.d.ts.map +1 -0
- package/dist/advisory/osv.d.ts +41 -0
- package/dist/advisory/osv.d.ts.map +1 -0
- package/dist/delivery/coordinator.d.ts +46 -0
- package/dist/delivery/coordinator.d.ts.map +1 -0
- package/dist/discovery/index.d.ts +58 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/workspace.d.ts +49 -0
- package/dist/discovery/workspace.d.ts.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4287 -0
- package/dist/index.js.map +7 -0
- package/dist/policy/status.d.ts +60 -0
- package/dist/policy/status.d.ts.map +1 -0
- package/dist/registry/client.d.ts +61 -0
- package/dist/registry/client.d.ts.map +1 -0
- package/dist/registry/purl.d.ts +106 -0
- package/dist/registry/purl.d.ts.map +1 -0
- package/dist/remediation.d.ts +54 -0
- package/dist/remediation.d.ts.map +1 -0
- package/dist/research/index.d.ts +11 -0
- package/dist/research/index.d.ts.map +1 -0
- package/dist/research/llm.d.ts +37 -0
- package/dist/research/llm.d.ts.map +1 -0
- package/dist/research/researcher.d.ts +31 -0
- package/dist/research/researcher.d.ts.map +1 -0
- package/dist/research/search.d.ts +19 -0
- package/dist/research/search.d.ts.map +1 -0
- package/dist/research/triage.d.ts +33 -0
- package/dist/research/triage.d.ts.map +1 -0
- package/dist/research/types.d.ts +77 -0
- package/dist/research/types.d.ts.map +1 -0
- package/dist/sbom.d.ts +52 -0
- package/dist/sbom.d.ts.map +1 -0
- package/dist/service.d.ts +110 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/snapshot-diff.d.ts +27 -0
- package/dist/snapshot-diff.d.ts.map +1 -0
- package/dist/store/schema.d.ts +20 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/sqlite.d.ts +57 -0
- package/dist/store/sqlite.d.ts.map +1 -0
- package/dist/types.d.ts +123 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TechStack — Public service API.
|
|
3
|
+
*
|
|
4
|
+
* Wires together inventory, online enrichment (registry + OSV + native audit),
|
|
5
|
+
* status classification, and persistence into a single async job flow.
|
|
6
|
+
*
|
|
7
|
+
* @see docs/specs/techstack-sdd.md §4.2
|
|
8
|
+
*/
|
|
9
|
+
import type { Snapshot, TechStackJob } from './types.js';
|
|
10
|
+
import type { TechStackStore } from './store/sqlite.js';
|
|
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
|
+
}
|
|
110
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TechStack — Snapshot diff utility.
|
|
3
|
+
*
|
|
4
|
+
* Compares two snapshots to identify added, removed, and changed dependencies.
|
|
5
|
+
*
|
|
6
|
+
* @see docs/specs/techstack-sdd.md §9
|
|
7
|
+
*/
|
|
8
|
+
import type { DependencyObservation, Snapshot } from './types.js';
|
|
9
|
+
export interface SnapshotDiff {
|
|
10
|
+
added: DependencyObservation[];
|
|
11
|
+
removed: DependencyObservation[];
|
|
12
|
+
changed: Array<{
|
|
13
|
+
name: string;
|
|
14
|
+
ecosystem: string;
|
|
15
|
+
field: string;
|
|
16
|
+
from: string;
|
|
17
|
+
to: string;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Compare two snapshots by dependency name + ecosystem.
|
|
22
|
+
*
|
|
23
|
+
* Returns added (in new but not old), removed (in old but not new), and
|
|
24
|
+
* changed (version/status differences for matching dependencies).
|
|
25
|
+
*/
|
|
26
|
+
export declare function diffSnapshots(oldSnapshot: Snapshot, newSnapshot: Snapshot): SnapshotDiff;
|
|
27
|
+
//# sourceMappingURL=snapshot-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-diff.d.ts","sourceRoot":"","sources":["../src/snapshot-diff.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAC/B,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC,CAAC;CACJ;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,GAAG,YAAY,CAgDxF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TechStack — SQLite schema (DDL) and migration helpers.
|
|
3
|
+
*
|
|
4
|
+
* Defines the tables for snapshots, jobs, and the delivery outbox.
|
|
5
|
+
* Uses `node:sqlite` (built-in since Node 22.5+).
|
|
6
|
+
*
|
|
7
|
+
* Tables:
|
|
8
|
+
* - snapshots: persisted inventory snapshots
|
|
9
|
+
* - jobs: async inventory/analyze job state
|
|
10
|
+
* - outbox: idle-delivery tracking
|
|
11
|
+
*
|
|
12
|
+
* @see docs/specs/techstack-sdd.md §3.2, §4.1
|
|
13
|
+
*/
|
|
14
|
+
export declare const SCHEMA_VERSION = 1;
|
|
15
|
+
export declare const DDL = "\nCREATE TABLE IF NOT EXISTS techstack_schema_version (\n version INTEGER NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS snapshots (\n id TEXT PRIMARY KEY,\n project_id TEXT NOT NULL,\n target_root TEXT NOT NULL,\n fingerprint TEXT NOT NULL,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n raw_json TEXT NOT NULL,\n adapter_version TEXT NOT NULL DEFAULT ''\n);\n\nCREATE INDEX IF NOT EXISTS idx_snapshots_project_id ON snapshots(project_id);\nCREATE INDEX IF NOT EXISTS idx_snapshots_created_at ON snapshots(created_at DESC);\n\nCREATE TABLE IF NOT EXISTS jobs (\n id TEXT PRIMARY KEY,\n project_id TEXT NOT NULL,\n target_root TEXT NOT NULL,\n kind TEXT NOT NULL CHECK(kind IN ('inventory', 'analyze')),\n status TEXT NOT NULL DEFAULT 'queued'\n CHECK(status IN ('queued','discovering','inventorying','enriching','researching','synthesizing','completed','failed','cancelled')),\n fingerprint TEXT NOT NULL DEFAULT '',\n requested_by TEXT NOT NULL DEFAULT '',\n session_id TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n completed_at TEXT,\n error TEXT,\n progress_json TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_jobs_project_id ON jobs(project_id);\nCREATE INDEX IF NOT EXISTS idx_jobs_status ON jobs(status);\n\nCREATE TABLE IF NOT EXISTS outbox (\n delivery_id TEXT PRIMARY KEY,\n report_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending'\n CHECK(status IN ('pending', 'claimed', 'delivered', 'failed')),\n attempts INTEGER NOT NULL DEFAULT 0,\n claimed_at TEXT,\n delivered_at TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_outbox_status ON outbox(status);\n";
|
|
16
|
+
/**
|
|
17
|
+
* Run the schema DDL and check/migrate version.
|
|
18
|
+
*/
|
|
19
|
+
export declare function applySchema(db: import('node:sqlite').DatabaseSync): void;
|
|
20
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,eAAO,MAAM,GAAG,knDAiDf,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,aAAa,EAAE,YAAY,GAAG,IAAI,CAoBxE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TechStack — SQLite-backed store.
|
|
3
|
+
*
|
|
4
|
+
* Provides persistence for snapshots, jobs, and the delivery outbox
|
|
5
|
+
* using Node 22.5+'s built-in `node:sqlite` module.
|
|
6
|
+
*
|
|
7
|
+
* Store path: ~/.wrongstack/projects/<slug>/techstack/techstack.db
|
|
8
|
+
*
|
|
9
|
+
* @see docs/specs/techstack-sdd.md §3.2, §4.1
|
|
10
|
+
*/
|
|
11
|
+
import type { DeliveryOutbox, DeliveryStatus, Snapshot, TechStackJob, TechStackJobStatus, TechStackJobProgress } from '../types.js';
|
|
12
|
+
export interface StoreOptions {
|
|
13
|
+
/** Project slug used for the store directory path. */
|
|
14
|
+
readonly projectSlug: string;
|
|
15
|
+
/** Optional explicit dbPath override (for testing). */
|
|
16
|
+
readonly dbPath?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare class TechStackStore {
|
|
19
|
+
private db;
|
|
20
|
+
private dbPath;
|
|
21
|
+
constructor(options: StoreOptions);
|
|
22
|
+
/** Close the database connection. Idempotent. */
|
|
23
|
+
close(): void;
|
|
24
|
+
/** Get the database path (useful for tests). */
|
|
25
|
+
get path(): string;
|
|
26
|
+
/** Persist a snapshot. */
|
|
27
|
+
saveSnapshot(snapshot: Snapshot): void;
|
|
28
|
+
/** Get a snapshot by project ID (latest). */
|
|
29
|
+
getSnapshot(projectId: string): Snapshot | undefined;
|
|
30
|
+
/** Get a snapshot by ID. */
|
|
31
|
+
getSnapshotById(id: string): Snapshot | undefined;
|
|
32
|
+
/** List all snapshots for a project (newest first). */
|
|
33
|
+
listSnapshots(projectId: string, limit?: number): Snapshot[];
|
|
34
|
+
/** Delete snapshots older than a given timestamp. */
|
|
35
|
+
deleteSnapshotsBefore(projectId: string, before: string): number;
|
|
36
|
+
/** Persist a job. */
|
|
37
|
+
saveJob(job: TechStackJob): void;
|
|
38
|
+
/** Get a job by ID. */
|
|
39
|
+
getJob(id: string): TechStackJob | undefined;
|
|
40
|
+
/** Update job status and optional progress. */
|
|
41
|
+
updateJobStatus(id: string, status: TechStackJobStatus, progress?: TechStackJobProgress): void;
|
|
42
|
+
/** List jobs for a project (newest first). */
|
|
43
|
+
listJobs(projectId: string, limit?: number): TechStackJob[];
|
|
44
|
+
/** Create an outbox entry. */
|
|
45
|
+
createOutbox(deliveryId: string, reportId: string, sessionId: string): void;
|
|
46
|
+
/** Claim an outbox entry (atomic CAS). */
|
|
47
|
+
claimOutbox(deliveryId: string, sessionId: string): boolean;
|
|
48
|
+
/** Mark an outbox entry as delivered. */
|
|
49
|
+
deliverOutbox(deliveryId: string): void;
|
|
50
|
+
/** Mark an outbox entry as failed. */
|
|
51
|
+
failOutbox(deliveryId: string): void;
|
|
52
|
+
/** List outbox entries by status. */
|
|
53
|
+
listOutboxByStatus(status: DeliveryStatus): DeliveryOutbox[];
|
|
54
|
+
private rowToJob;
|
|
55
|
+
private rowToOutbox;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/store/sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAIrB,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;IAEvB,YAAY,OAAO,EAAE,YAAY,EAsBhC;IAID,iDAAiD;IACjD,KAAK,IAAI,IAAI,CAMZ;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/types.d.ts
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TechStack — Core domain types.
|
|
3
|
+
*
|
|
4
|
+
* These types define the entire data contract for the TechStack feature:
|
|
5
|
+
* workspace discovery, dependency inventory, registry/advisory enrichment,
|
|
6
|
+
* findings, snapshots, jobs, and the idle-delivery outbox.
|
|
7
|
+
*
|
|
8
|
+
* @see docs/specs/techstack-sdd.md §4.1
|
|
9
|
+
*/
|
|
10
|
+
export type EcosystemId = 'npm' | 'python' | 'rust' | 'go' | 'dotnet' | 'php' | 'dart' | 'maven' | 'gradle' | 'ruby' | 'swift' | 'elixir' | 'cpp';
|
|
11
|
+
export type SourceType = 'registry' | 'workspace' | 'path' | 'git' | 'system' | 'unknown';
|
|
12
|
+
export type DependencyScope = 'runtime' | 'development' | 'peer' | 'build' | 'optional' | 'transitive';
|
|
13
|
+
export type DependencyStatus = 'current' | 'update_available_safe' | 'update_available_breaking' | 'blocked_by_constraints' | 'vulnerable' | 'deprecated' | 'yanked' | 'unmaintained_suspected' | 'private_or_unresolved' | 'local_path' | 'git_dependency' | 'unsupported' | 'unknown';
|
|
14
|
+
export type Coverage = 'full' | 'partial' | 'unsupported';
|
|
15
|
+
export interface Evidence {
|
|
16
|
+
/** What kind of source produced this evidence. */
|
|
17
|
+
readonly kind: 'manifest' | 'lockfile' | 'registry' | 'audit' | 'osv' | 'agent' | 'command';
|
|
18
|
+
/** URL, file path, or command that produced the evidence. */
|
|
19
|
+
readonly source: string;
|
|
20
|
+
/** ISO 8601 timestamp of when the evidence was retrieved. */
|
|
21
|
+
readonly retrievedAt: string;
|
|
22
|
+
/** Additional human-readable context. */
|
|
23
|
+
readonly detail?: string | undefined;
|
|
24
|
+
}
|
|
25
|
+
export interface Workspace {
|
|
26
|
+
readonly id: string;
|
|
27
|
+
/** Path relative to the project root. */
|
|
28
|
+
readonly relativeRoot: string;
|
|
29
|
+
readonly ecosystem: EcosystemId;
|
|
30
|
+
readonly packageManager?: string | undefined;
|
|
31
|
+
readonly manifests: readonly string[];
|
|
32
|
+
readonly lockfiles: readonly string[];
|
|
33
|
+
/** Detection confidence 0..1. */
|
|
34
|
+
readonly confidence: number;
|
|
35
|
+
readonly coverage: Coverage;
|
|
36
|
+
}
|
|
37
|
+
export interface DependencyObservation {
|
|
38
|
+
readonly id: string;
|
|
39
|
+
readonly workspaceId: string;
|
|
40
|
+
/** Package URL (PURL) if resolvable; undefined for path/git/system deps. */
|
|
41
|
+
readonly purl?: string | undefined;
|
|
42
|
+
readonly ecosystem: EcosystemId;
|
|
43
|
+
readonly name: string;
|
|
44
|
+
readonly sourceType: SourceType;
|
|
45
|
+
readonly direct: boolean;
|
|
46
|
+
readonly scope: DependencyScope;
|
|
47
|
+
/** Constraint from the manifest (e.g. "^4.18.0", ">=1.0 <2.0"). */
|
|
48
|
+
readonly requested?: string | undefined;
|
|
49
|
+
/** Exact version from the lockfile. */
|
|
50
|
+
readonly locked?: string | undefined;
|
|
51
|
+
/** Observed version from the environment (pip inspect, cargo metadata, etc.). */
|
|
52
|
+
readonly installed?: string | undefined;
|
|
53
|
+
/** Latest version within the current constraint (npm "wanted"). */
|
|
54
|
+
readonly wanted?: string | undefined;
|
|
55
|
+
/** Latest version considering all constraints (npm "resolvable"). */
|
|
56
|
+
readonly resolvable?: string | undefined;
|
|
57
|
+
/** Latest stable version from the registry. */
|
|
58
|
+
readonly latestStable?: string | undefined;
|
|
59
|
+
/** SPDX identifier or license name from the registry. */
|
|
60
|
+
readonly license?: string | undefined;
|
|
61
|
+
readonly deprecated?: boolean | undefined;
|
|
62
|
+
readonly yanked?: boolean | undefined;
|
|
63
|
+
readonly status: DependencyStatus;
|
|
64
|
+
readonly evidence: readonly Evidence[];
|
|
65
|
+
}
|
|
66
|
+
export interface Finding {
|
|
67
|
+
readonly id: string;
|
|
68
|
+
readonly dependencyId: string;
|
|
69
|
+
readonly type: 'upgrade' | 'vulnerability' | 'deprecated' | 'license' | 'replacement' | 'unsupported' | 'investigate';
|
|
70
|
+
readonly severity: 'info' | 'low' | 'medium' | 'high' | 'critical';
|
|
71
|
+
readonly action: 'none' | 'upgrade_patch' | 'upgrade_minor' | 'upgrade_major' | 'replace' | 'remove' | 'investigate';
|
|
72
|
+
/** Confidence 0..1 — deterministic findings are 1.0; agent-derived <1.0. */
|
|
73
|
+
readonly confidence: number;
|
|
74
|
+
readonly rationale: string;
|
|
75
|
+
readonly breakingRisk?: string | undefined;
|
|
76
|
+
readonly evidence: readonly Evidence[];
|
|
77
|
+
}
|
|
78
|
+
export interface Snapshot {
|
|
79
|
+
readonly id: string;
|
|
80
|
+
readonly projectId: string;
|
|
81
|
+
readonly targetRoot: string;
|
|
82
|
+
/** Hash of manifest+lockfile contents + adapter version — used for dedup. */
|
|
83
|
+
readonly fingerprint: string;
|
|
84
|
+
readonly createdAt: string;
|
|
85
|
+
readonly workspaces: readonly Workspace[];
|
|
86
|
+
readonly dependencies: readonly DependencyObservation[];
|
|
87
|
+
readonly findings: readonly Finding[];
|
|
88
|
+
readonly coverage: Coverage;
|
|
89
|
+
/** Version of the adapter set that produced this snapshot. */
|
|
90
|
+
readonly adapterVersion: string;
|
|
91
|
+
}
|
|
92
|
+
export type TechStackJobKind = 'inventory' | 'analyze';
|
|
93
|
+
export type TechStackJobStatus = 'queued' | 'discovering' | 'inventorying' | 'enriching' | 'researching' | 'synthesizing' | 'completed' | 'failed' | 'cancelled';
|
|
94
|
+
export interface TechStackJobProgress {
|
|
95
|
+
readonly phase: string;
|
|
96
|
+
readonly completed: number;
|
|
97
|
+
readonly total: number;
|
|
98
|
+
}
|
|
99
|
+
export interface TechStackJob {
|
|
100
|
+
readonly id: string;
|
|
101
|
+
readonly projectId: string;
|
|
102
|
+
readonly targetRoot: string;
|
|
103
|
+
readonly kind: TechStackJobKind;
|
|
104
|
+
readonly status: TechStackJobStatus;
|
|
105
|
+
readonly fingerprint: string;
|
|
106
|
+
readonly requestedBy: string;
|
|
107
|
+
readonly sessionId?: string | undefined;
|
|
108
|
+
readonly createdAt: string;
|
|
109
|
+
readonly completedAt?: string | undefined;
|
|
110
|
+
readonly error?: string | undefined;
|
|
111
|
+
readonly progress?: TechStackJobProgress | undefined;
|
|
112
|
+
}
|
|
113
|
+
export type DeliveryStatus = 'pending' | 'claimed' | 'delivered' | 'failed';
|
|
114
|
+
export interface DeliveryOutbox {
|
|
115
|
+
readonly deliveryId: string;
|
|
116
|
+
readonly reportId: string;
|
|
117
|
+
readonly sessionId: string;
|
|
118
|
+
readonly status: DeliveryStatus;
|
|
119
|
+
readonly attempts: number;
|
|
120
|
+
readonly claimedAt?: string | undefined;
|
|
121
|
+
readonly deliveredAt?: string | undefined;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@wrongstack/techstack",
|
|
3
|
+
"version": "0.289.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"description": "WrongStack TechStack — cross-language dependency intelligence for the active target project: discover, inventory, enrich, analyze, and report.",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/WrongStack/WrongStack.git",
|
|
9
|
+
"directory": "packages/techstack"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/WrongStack/WrongStack#readme",
|
|
12
|
+
"bugs": "https://github.com/WrongStack/WrongStack/issues",
|
|
13
|
+
"author": "ECOSTACK TECHNOLOGY OÜ",
|
|
14
|
+
"type": "module",
|
|
15
|
+
"main": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"sideEffects": false,
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"import": "./dist/index.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist"
|
|
26
|
+
],
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@wrongstack/core": "0.289.0",
|
|
29
|
+
"@wrongstack/tools": "0.289.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^26.0.1",
|
|
33
|
+
"typescript": "^7.0.2"
|
|
34
|
+
},
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public",
|
|
37
|
+
"provenance": true
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "node ../../scripts/build-package.mjs",
|
|
41
|
+
"typecheck": "tsc --noEmit",
|
|
42
|
+
"test": "vitest run",
|
|
43
|
+
"clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\""
|
|
44
|
+
}
|
|
45
|
+
}
|