@enricai/barnacle 1.6.14 → 1.7.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/README.md +3 -5
- package/dist/api/schemas/submissions.d.ts +8 -8
- package/dist/lib/bedrock.d.ts +2 -2
- package/dist/lib/bedrock.d.ts.map +1 -1
- package/dist/lib/bedrock.js.map +1 -1
- package/dist/lib/llm/anthropic-client.d.ts +12 -0
- package/dist/lib/llm/anthropic-client.d.ts.map +1 -1
- package/dist/lib/llm/anthropic-client.js +25 -0
- package/dist/lib/llm/anthropic-client.js.map +1 -1
- package/dist/lib/telemetry/beacon-capture.d.ts +4 -3
- package/dist/lib/telemetry/beacon-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/beacon-capture.js.map +1 -1
- package/dist/lib/telemetry/reconciliation-record.d.ts +15 -33
- package/dist/lib/telemetry/reconciliation-record.d.ts.map +1 -1
- package/dist/lib/telemetry/reconciliation-record.js +11 -49
- package/dist/lib/telemetry/reconciliation-record.js.map +1 -1
- package/dist/lib/telemetry/submission-capture.d.ts +8 -13
- package/dist/lib/telemetry/submission-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/submission-capture.js +2 -4
- package/dist/lib/telemetry/submission-capture.js.map +1 -1
- package/dist/lib/telemetry/submission-reader.d.ts +3 -4
- package/dist/lib/telemetry/submission-reader.d.ts.map +1 -1
- package/dist/lib/telemetry/submission-reader.js +3 -4
- package/dist/lib/telemetry/submission-reader.js.map +1 -1
- package/dist/plugins/config-plugin.d.ts.map +1 -1
- package/dist/plugins/config-plugin.js +22 -0
- package/dist/plugins/config-plugin.js.map +1 -1
- package/dist/plugins/loader.d.ts +0 -7
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +0 -9
- package/dist/plugins/loader.js.map +1 -1
- package/dist/scraper/deep-locator-actuate.d.ts +24 -19
- package/dist/scraper/deep-locator-actuate.d.ts.map +1 -1
- package/dist/scraper/deep-locator-actuate.js +68 -23
- package/dist/scraper/deep-locator-actuate.js.map +1 -1
- package/dist/scraper/deep-locator-scan.d.ts +20 -0
- package/dist/scraper/deep-locator-scan.d.ts.map +1 -1
- package/dist/scraper/deep-locator-scan.js +25 -0
- package/dist/scraper/deep-locator-scan.js.map +1 -1
- package/dist/scraper/flow-runner.d.ts +43 -7
- package/dist/scraper/flow-runner.d.ts.map +1 -1
- package/dist/scraper/flow-runner.js +174 -84
- package/dist/scraper/flow-runner.js.map +1 -1
- package/dist/scripts/recon-browser.d.ts +5 -4
- package/dist/scripts/recon-browser.d.ts.map +1 -1
- package/dist/scripts/recon-browser.js +8 -5
- package/dist/scripts/recon-browser.js.map +1 -1
- package/dist/scripts/recon-generate.d.ts +2 -2
- package/dist/scripts/recon-generate.d.ts.map +1 -1
- package/dist/scripts/recon-generate.js +18 -85
- package/dist/scripts/recon-generate.js.map +1 -1
- package/dist/scripts/recon-shared.d.ts +0 -10
- package/dist/scripts/recon-shared.d.ts.map +1 -1
- package/dist/scripts/recon-shared.js +0 -11
- package/dist/scripts/recon-shared.js.map +1 -1
- package/dist/site-plugin.d.ts +3 -3
- package/dist/testing/coverage-guard-suite.d.mts +7 -7
- package/dist/testing/coverage-guard-suite.mjs +5 -5
- package/package.json +3 -1
- package/dist/scripts/migrate-telemetry-dir-names.d.ts +0 -57
- package/dist/scripts/migrate-telemetry-dir-names.d.ts.map +0 -1
- package/dist/scripts/migrate-telemetry-dir-names.js +0 -156
- package/dist/scripts/migrate-telemetry-dir-names.js.map +0 -1
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* One-off migration: rename existing base64-encoded telemetry run directories
|
|
3
|
-
* to the new `<unix-ms>-<short-hash>` scheme introduced in commit ce63526.
|
|
4
|
-
*
|
|
5
|
-
* Background: until ce63526, per-URL telemetry partitions were named
|
|
6
|
-
* `runs/<base64url-canonical-url>/` (e.g.
|
|
7
|
-
* `aHR0cHM6Ly9jbGljay5hcHBjYXN0Lmlv...`). After ce63526, new runs create
|
|
8
|
-
* `runs/<unix-ms>-<sha1-hex-8>/` directories. The engine reads both styles
|
|
9
|
-
* (readSiteCallsNdjson walks all dirs blindly), so mixed naming is
|
|
10
|
-
* functionally harmless — but visually inconsistent and prevents the new
|
|
11
|
-
* `awk -F- '{print $NF}' | sort | uniq -c` URL-grouping pattern from
|
|
12
|
-
* working on historical data.
|
|
13
|
-
*
|
|
14
|
-
* This script walks every `src/sites/<site>/telemetry/runs/` tree, reads
|
|
15
|
-
* each partition's `url.txt` sidecar to recover the original URL, and
|
|
16
|
-
* renames the dir to the new scheme. The timestamp is sourced from the
|
|
17
|
-
* mtime of the partition's `calls.ndjson` (when this run actually wrote
|
|
18
|
-
* data) or falls back to the dir's mtime when there's no NDJSON yet.
|
|
19
|
-
*
|
|
20
|
-
* Idempotent: dirs already in the new shape are skipped.
|
|
21
|
-
* Safe: dry-run is the default; `--apply` is required to actually rename.
|
|
22
|
-
*
|
|
23
|
-
* Usage:
|
|
24
|
-
* pnpm tsx src/scripts/migrate-telemetry-dir-names.ts
|
|
25
|
-
* pnpm tsx src/scripts/migrate-telemetry-dir-names.ts --apply
|
|
26
|
-
* pnpm tsx src/scripts/migrate-telemetry-dir-names.ts --site <siteId> --apply
|
|
27
|
-
*/
|
|
28
|
-
interface MigrateOptions {
|
|
29
|
-
/** Path to the project root containing `src/sites/`. */
|
|
30
|
-
sitesRoot: string;
|
|
31
|
-
/** Optional: restrict to one site directory by name (e.g. "acme-jobs"). */
|
|
32
|
-
siteFilter: string | null;
|
|
33
|
-
/** If false, log planned renames but do not execute them. */
|
|
34
|
-
apply: boolean;
|
|
35
|
-
}
|
|
36
|
-
interface MigrationOutcome {
|
|
37
|
-
migrated: number;
|
|
38
|
-
alreadyMigrated: number;
|
|
39
|
-
warnings: number;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Drive the migration end-to-end across every site under `sitesRoot`.
|
|
43
|
-
* Returns a tally so callers (CLI + tests) can assert outcomes without
|
|
44
|
-
* scraping log output.
|
|
45
|
-
*/
|
|
46
|
-
export declare function migrateTelemetryDirs(opts: MigrateOptions): MigrationOutcome;
|
|
47
|
-
interface ParsedArgs {
|
|
48
|
-
apply: boolean;
|
|
49
|
-
siteFilter: string | null;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Tiny argv parser matching the rest of the scripts in this dir. Exposed
|
|
53
|
-
* for unit tests; defaults to dry-run (apply=false).
|
|
54
|
-
*/
|
|
55
|
-
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
56
|
-
export {};
|
|
57
|
-
//# sourceMappingURL=migrate-telemetry-dir-names.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate-telemetry-dir-names.d.ts","sourceRoot":"","sources":["../../src/scripts/migrate-telemetry-dir-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAYH,UAAU,cAAc;IACtB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,6DAA6D;IAC7D,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAiB3E;AAqED,UAAU,UAAU;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAapD"}
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* One-off migration: rename existing base64-encoded telemetry run directories
|
|
4
|
-
* to the new `<unix-ms>-<short-hash>` scheme introduced in commit ce63526.
|
|
5
|
-
*
|
|
6
|
-
* Background: until ce63526, per-URL telemetry partitions were named
|
|
7
|
-
* `runs/<base64url-canonical-url>/` (e.g.
|
|
8
|
-
* `aHR0cHM6Ly9jbGljay5hcHBjYXN0Lmlv...`). After ce63526, new runs create
|
|
9
|
-
* `runs/<unix-ms>-<sha1-hex-8>/` directories. The engine reads both styles
|
|
10
|
-
* (readSiteCallsNdjson walks all dirs blindly), so mixed naming is
|
|
11
|
-
* functionally harmless — but visually inconsistent and prevents the new
|
|
12
|
-
* `awk -F- '{print $NF}' | sort | uniq -c` URL-grouping pattern from
|
|
13
|
-
* working on historical data.
|
|
14
|
-
*
|
|
15
|
-
* This script walks every `src/sites/<site>/telemetry/runs/` tree, reads
|
|
16
|
-
* each partition's `url.txt` sidecar to recover the original URL, and
|
|
17
|
-
* renames the dir to the new scheme. The timestamp is sourced from the
|
|
18
|
-
* mtime of the partition's `calls.ndjson` (when this run actually wrote
|
|
19
|
-
* data) or falls back to the dir's mtime when there's no NDJSON yet.
|
|
20
|
-
*
|
|
21
|
-
* Idempotent: dirs already in the new shape are skipped.
|
|
22
|
-
* Safe: dry-run is the default; `--apply` is required to actually rename.
|
|
23
|
-
*
|
|
24
|
-
* Usage:
|
|
25
|
-
* pnpm tsx src/scripts/migrate-telemetry-dir-names.ts
|
|
26
|
-
* pnpm tsx src/scripts/migrate-telemetry-dir-names.ts --apply
|
|
27
|
-
* pnpm tsx src/scripts/migrate-telemetry-dir-names.ts --site <siteId> --apply
|
|
28
|
-
*/
|
|
29
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.migrateTelemetryDirs = migrateTelemetryDirs;
|
|
31
|
-
exports.parseArgs = parseArgs;
|
|
32
|
-
const node_fs_1 = require("node:fs");
|
|
33
|
-
const node_path_1 = require("node:path");
|
|
34
|
-
const logging_1 = require("../lib/logging");
|
|
35
|
-
const telemetry_paths_1 = require("../lib/telemetry/telemetry-paths");
|
|
36
|
-
const logger = (0, logging_1.getScriptLogger)("migrate-telemetry-dir-names");
|
|
37
|
-
const ALREADY_MIGRATED_RX = /^\d+-[0-9a-f]{8}$/;
|
|
38
|
-
/**
|
|
39
|
-
* Drive the migration end-to-end across every site under `sitesRoot`.
|
|
40
|
-
* Returns a tally so callers (CLI + tests) can assert outcomes without
|
|
41
|
-
* scraping log output.
|
|
42
|
-
*/
|
|
43
|
-
function migrateTelemetryDirs(opts) {
|
|
44
|
-
const outcome = { migrated: 0, alreadyMigrated: 0, warnings: 0 };
|
|
45
|
-
if (!(0, node_fs_1.existsSync)(opts.sitesRoot)) {
|
|
46
|
-
logger.warn(`sites root not found: ${opts.sitesRoot}`);
|
|
47
|
-
outcome.warnings++;
|
|
48
|
-
return outcome;
|
|
49
|
-
}
|
|
50
|
-
const siteDirs = (0, node_fs_1.readdirSync)(opts.sitesRoot, { withFileTypes: true })
|
|
51
|
-
.filter((d) => d.isDirectory())
|
|
52
|
-
.filter((d) => opts.siteFilter === null || d.name === opts.siteFilter)
|
|
53
|
-
.map((d) => (0, node_path_1.join)(opts.sitesRoot, d.name));
|
|
54
|
-
for (const siteDir of siteDirs) {
|
|
55
|
-
const runsDir = (0, node_path_1.join)(siteDir, "telemetry", "runs");
|
|
56
|
-
if (!(0, node_fs_1.existsSync)(runsDir))
|
|
57
|
-
continue;
|
|
58
|
-
migrateRunsDir(runsDir, opts.apply, outcome);
|
|
59
|
-
}
|
|
60
|
-
return outcome;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Per-`runs/` walker. Inspects every child entry; rename-eligible ones get
|
|
64
|
-
* routed to renamePartition, which is also where dry-run vs apply is gated.
|
|
65
|
-
*/
|
|
66
|
-
function migrateRunsDir(runsDir, apply, outcome) {
|
|
67
|
-
const partitions = (0, node_fs_1.readdirSync)(runsDir, { withFileTypes: true }).filter((d) => d.isDirectory());
|
|
68
|
-
for (const partition of partitions) {
|
|
69
|
-
const partitionPath = (0, node_path_1.join)(runsDir, partition.name);
|
|
70
|
-
if (ALREADY_MIGRATED_RX.test(partition.name)) {
|
|
71
|
-
logger.info(`skip (already migrated): ${partitionPath}`);
|
|
72
|
-
outcome.alreadyMigrated++;
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
renamePartition(runsDir, partition.name, apply, outcome);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Compute the target name from `url.txt` + mtime, then dry-run-or-rename.
|
|
80
|
-
* Skips with a warning when the partition is missing the sidecar (can't
|
|
81
|
-
* recover URL), when the target already exists (collision; needs manual
|
|
82
|
-
* triage), or when mtime can't be read.
|
|
83
|
-
*/
|
|
84
|
-
function renamePartition(runsDir, oldName, apply, outcome) {
|
|
85
|
-
const partitionPath = (0, node_path_1.join)(runsDir, oldName);
|
|
86
|
-
const urlTxtPath = (0, node_path_1.join)(partitionPath, "url.txt");
|
|
87
|
-
if (!(0, node_fs_1.existsSync)(urlTxtPath)) {
|
|
88
|
-
logger.warn(`skip (no url.txt): ${partitionPath}`);
|
|
89
|
-
outcome.warnings++;
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
const url = (0, node_fs_1.readFileSync)(urlTxtPath, "utf8").trim();
|
|
93
|
-
if (url.length === 0) {
|
|
94
|
-
logger.warn(`skip (empty url.txt): ${partitionPath}`);
|
|
95
|
-
outcome.warnings++;
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
const callsPath = (0, node_path_1.join)(partitionPath, "calls.ndjson");
|
|
99
|
-
const mtimeMs = (0, node_fs_1.existsSync)(callsPath)
|
|
100
|
-
? Math.round((0, node_fs_1.statSync)(callsPath).mtimeMs)
|
|
101
|
-
: Math.round((0, node_fs_1.statSync)(partitionPath).mtimeMs);
|
|
102
|
-
const newName = (0, telemetry_paths_1.urlDirName)(mtimeMs, url);
|
|
103
|
-
if (newName === oldName) {
|
|
104
|
-
logger.info(`skip (same name): ${partitionPath}`);
|
|
105
|
-
outcome.alreadyMigrated++;
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
const newPath = (0, node_path_1.join)(runsDir, newName);
|
|
109
|
-
if ((0, node_fs_1.existsSync)(newPath)) {
|
|
110
|
-
logger.warn(`skip (target collision): ${partitionPath} → ${newPath}`);
|
|
111
|
-
outcome.warnings++;
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
if (apply) {
|
|
115
|
-
(0, node_fs_1.renameSync)(partitionPath, newPath);
|
|
116
|
-
logger.info(`renamed: ${oldName} → ${newName} (in ${runsDir})`);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
logger.info(`dry-run: ${oldName} → ${newName} (in ${runsDir})`);
|
|
120
|
-
}
|
|
121
|
-
outcome.migrated++;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Tiny argv parser matching the rest of the scripts in this dir. Exposed
|
|
125
|
-
* for unit tests; defaults to dry-run (apply=false).
|
|
126
|
-
*/
|
|
127
|
-
function parseArgs(argv) {
|
|
128
|
-
const args = argv.slice(2);
|
|
129
|
-
let apply = false;
|
|
130
|
-
let siteFilter = null;
|
|
131
|
-
for (let i = 0; i < args.length; i++) {
|
|
132
|
-
const arg = args[i];
|
|
133
|
-
if (arg === "--apply") {
|
|
134
|
-
apply = true;
|
|
135
|
-
}
|
|
136
|
-
else if (arg === "--site" && args[i + 1]) {
|
|
137
|
-
siteFilter = args[++i] ?? null;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
return { apply, siteFilter };
|
|
141
|
-
}
|
|
142
|
-
async function main() {
|
|
143
|
-
const { apply, siteFilter } = parseArgs(process.argv);
|
|
144
|
-
const sitesRoot = (0, node_path_1.join)(process.cwd(), "src", "sites");
|
|
145
|
-
logger.info(`migrate-telemetry-dir-names: sitesRoot=${sitesRoot} siteFilter=${siteFilter ?? "(all)"} apply=${apply}`);
|
|
146
|
-
const outcome = migrateTelemetryDirs({ sitesRoot, siteFilter, apply });
|
|
147
|
-
logger.info(`summary: ${outcome.migrated} ${apply ? "renamed" : "planned"}, ${outcome.alreadyMigrated} skipped (already migrated), ${outcome.warnings} warning(s)`);
|
|
148
|
-
if (!apply && outcome.migrated > 0) {
|
|
149
|
-
logger.info(`re-run with --apply to execute the renames`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
main().catch((err) => {
|
|
153
|
-
logger.error(`migrate-telemetry-dir-names failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
154
|
-
process.exit(1);
|
|
155
|
-
});
|
|
156
|
-
//# sourceMappingURL=migrate-telemetry-dir-names.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate-telemetry-dir-names.js","sourceRoot":"","sources":["../../src/scripts/migrate-telemetry-dir-names.ts"],"names":[],"mappings":"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"}
|