clinkx 0.2.3 → 0.3.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 +40 -1
- package/conf/prompts/json-codereviewer.txt +1 -0
- package/conf/prompts/json.txt +1 -0
- package/dist/allowed-roots.d.ts +12 -0
- package/dist/allowed-roots.js +94 -0
- package/dist/allowed-roots.js.map +1 -0
- package/dist/context-builder/anchors.d.ts +11 -0
- package/dist/context-builder/anchors.js +19 -0
- package/dist/context-builder/anchors.js.map +1 -0
- package/dist/context-builder/bundle.d.ts +76 -0
- package/dist/context-builder/bundle.js +3573 -0
- package/dist/context-builder/bundle.js.map +1 -0
- package/dist/context-builder/codemap.d.ts +17 -0
- package/dist/context-builder/codemap.js +301 -0
- package/dist/context-builder/codemap.js.map +1 -0
- package/dist/context-builder/config.d.ts +60 -0
- package/dist/context-builder/config.js +204 -0
- package/dist/context-builder/config.js.map +1 -0
- package/dist/context-builder/delegate-packet.d.ts +182 -0
- package/dist/context-builder/delegate-packet.js +898 -0
- package/dist/context-builder/delegate-packet.js.map +1 -0
- package/dist/context-builder/delegate-reconstruction.d.ts +13 -0
- package/dist/context-builder/delegate-reconstruction.js +220 -0
- package/dist/context-builder/delegate-reconstruction.js.map +1 -0
- package/dist/context-builder/delegate-validation.d.ts +18 -0
- package/dist/context-builder/delegate-validation.js +367 -0
- package/dist/context-builder/delegate-validation.js.map +1 -0
- package/dist/context-builder/delegate.d.ts +24 -0
- package/dist/context-builder/delegate.js +133 -0
- package/dist/context-builder/delegate.js.map +1 -0
- package/dist/context-builder/diagnostics.d.ts +27 -0
- package/dist/context-builder/diagnostics.js +74 -0
- package/dist/context-builder/diagnostics.js.map +1 -0
- package/dist/context-builder/discovery.d.ts +118 -0
- package/dist/context-builder/discovery.js +1829 -0
- package/dist/context-builder/discovery.js.map +1 -0
- package/dist/context-builder/globs.d.ts +14 -0
- package/dist/context-builder/globs.js +175 -0
- package/dist/context-builder/globs.js.map +1 -0
- package/dist/context-builder/handler.d.ts +17 -0
- package/dist/context-builder/handler.js +3848 -0
- package/dist/context-builder/handler.js.map +1 -0
- package/dist/context-builder/path-signals.d.ts +7 -0
- package/dist/context-builder/path-signals.js +66 -0
- package/dist/context-builder/path-signals.js.map +1 -0
- package/dist/context-builder/paths.d.ts +30 -0
- package/dist/context-builder/paths.js +153 -0
- package/dist/context-builder/paths.js.map +1 -0
- package/dist/context-builder/progress.d.ts +15 -0
- package/dist/context-builder/progress.js +70 -0
- package/dist/context-builder/progress.js.map +1 -0
- package/dist/context-builder/receipt.d.ts +89 -0
- package/dist/context-builder/receipt.js +169 -0
- package/dist/context-builder/receipt.js.map +1 -0
- package/dist/context-builder/run-id.d.ts +7 -0
- package/dist/context-builder/run-id.js +31 -0
- package/dist/context-builder/run-id.js.map +1 -0
- package/dist/context-builder/schema.d.ts +431 -0
- package/dist/context-builder/schema.js +293 -0
- package/dist/context-builder/schema.js.map +1 -0
- package/dist/context-builder/secrets.d.ts +13 -0
- package/dist/context-builder/secrets.js +222 -0
- package/dist/context-builder/secrets.js.map +1 -0
- package/dist/context-builder/selection.d.ts +52 -0
- package/dist/context-builder/selection.js +1649 -0
- package/dist/context-builder/selection.js.map +1 -0
- package/dist/context-builder/status.d.ts +45 -0
- package/dist/context-builder/status.js +105 -0
- package/dist/context-builder/status.js.map +1 -0
- package/dist/context-builder/storage.d.ts +85 -0
- package/dist/context-builder/storage.js +746 -0
- package/dist/context-builder/storage.js.map +1 -0
- package/dist/context-builder/token-estimate.d.ts +8 -0
- package/dist/context-builder/token-estimate.js +17 -0
- package/dist/context-builder/token-estimate.js.map +1 -0
- package/dist/paths.d.ts +8 -0
- package/dist/paths.js +31 -43
- package/dist/paths.js.map +1 -1
- package/dist/pipeline.d.ts +47 -3
- package/dist/pipeline.js +135 -39
- package/dist/pipeline.js.map +1 -1
- package/dist/server.d.ts +1 -0
- package/dist/server.js +40 -10
- package/dist/server.js.map +1 -1
- package/package.json +2 -1
- package/dist/artifacts.d.ts +0 -9
- package/dist/artifacts.js +0 -24
- package/dist/artifacts.js.map +0 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { logger } from "../logger.js";
|
|
2
|
+
import { sanitizeProgressMessage } from "./diagnostics.js";
|
|
3
|
+
const STAGE_PROGRESS = Object.freeze({
|
|
4
|
+
validating: 5,
|
|
5
|
+
scanning: 20,
|
|
6
|
+
searching: 40,
|
|
7
|
+
selecting: 60,
|
|
8
|
+
curating: 72,
|
|
9
|
+
finalizing: 84,
|
|
10
|
+
writing: 94,
|
|
11
|
+
complete: 100,
|
|
12
|
+
});
|
|
13
|
+
const STAGE_ORDER = Object.freeze({
|
|
14
|
+
validating: 0,
|
|
15
|
+
scanning: 1,
|
|
16
|
+
searching: 2,
|
|
17
|
+
selecting: 3,
|
|
18
|
+
curating: 4,
|
|
19
|
+
finalizing: 5,
|
|
20
|
+
writing: 6,
|
|
21
|
+
complete: 7,
|
|
22
|
+
});
|
|
23
|
+
const STAGE_MESSAGES = Object.freeze({
|
|
24
|
+
validating: "context_builder validating",
|
|
25
|
+
scanning: "context_builder scanning",
|
|
26
|
+
searching: "context_builder searching",
|
|
27
|
+
selecting: "context_builder selecting",
|
|
28
|
+
curating: "context_builder curating",
|
|
29
|
+
finalizing: "context_builder finalizing",
|
|
30
|
+
writing: "context_builder writing",
|
|
31
|
+
complete: "context_builder complete",
|
|
32
|
+
});
|
|
33
|
+
export class ContextBuilderProgressReporter {
|
|
34
|
+
target;
|
|
35
|
+
highestEmitted = -1;
|
|
36
|
+
chain = Promise.resolve();
|
|
37
|
+
constructor(target) {
|
|
38
|
+
this.target = target;
|
|
39
|
+
}
|
|
40
|
+
emit(stage) {
|
|
41
|
+
const next = this.chain.then(() => this.emitNow(stage));
|
|
42
|
+
this.chain = next.catch(() => { });
|
|
43
|
+
return next;
|
|
44
|
+
}
|
|
45
|
+
async emitNow(stage) {
|
|
46
|
+
const order = STAGE_ORDER[stage];
|
|
47
|
+
if (order <= this.highestEmitted) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
await this.target.server.notification({
|
|
52
|
+
method: "notifications/progress",
|
|
53
|
+
params: {
|
|
54
|
+
progressToken: this.target.token,
|
|
55
|
+
progress: STAGE_PROGRESS[stage],
|
|
56
|
+
total: 100,
|
|
57
|
+
message: sanitizeProgressMessage(STAGE_MESSAGES[stage]),
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
this.highestEmitted = order;
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
logger.warn({ err, stage }, "failed to send context_builder progress");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function createContextBuilderProgressReporter(target) {
|
|
68
|
+
return target == null ? undefined : new ContextBuilderProgressReporter(target);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/context-builder/progress.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAiB3D,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,EAAE;IACd,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,GAAG;CACwC,CAAC,CAAC;AAEzD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAChC,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;CAC0C,CAAC,CAAC;AAEzD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,UAAU,EAAE,4BAA4B;IACxC,QAAQ,EAAE,0BAA0B;IACpC,SAAS,EAAE,2BAA2B;IACtC,SAAS,EAAE,2BAA2B;IACtC,QAAQ,EAAE,0BAA0B;IACpC,UAAU,EAAE,4BAA4B;IACxC,OAAO,EAAE,yBAAyB;IAClC,QAAQ,EAAE,0BAA0B;CACiB,CAAC,CAAC;AAEzD,MAAM,OAAO,8BAA8B;IAIZ;IAHrB,cAAc,GAAG,CAAC,CAAC,CAAC;IACpB,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEjD,YAA6B,MAAoC;QAApC,WAAM,GAAN,MAAM,CAA8B;IAAG,CAAC;IAErE,IAAI,CAAC,KAAkC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,KAAkC;QACtD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;gBACpC,MAAM,EAAE,wBAAwB;gBAChC,MAAM,EAAE;oBACN,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;oBAChC,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC;oBAC/B,KAAK,EAAE,GAAG;oBACV,OAAO,EAAE,uBAAuB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;iBACxD;aACF,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,yCAAyC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,oCAAoC,CAClD,MAAgD;IAEhD,OAAO,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,8BAA8B,CAAC,MAAM,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export declare const CONTEXT_BUILDER_NO_DELEGATE_SCHEMA_VERSION = 1;
|
|
2
|
+
export declare const CONTEXT_BUILDER_DELEGATE_SCHEMA_VERSION = 2;
|
|
3
|
+
export declare const CONTEXT_BUILDER_SCHEMA_VERSION = 1;
|
|
4
|
+
export declare const CONTEXT_BUILDER_NO_DELEGATE_ARTIFACT_KEYS: readonly ["manifest_json", "bundle_md", "tree_json", "search_jsonl", "slices_jsonl", "codemap_jsonl", "summary_json"];
|
|
5
|
+
export type ContextBuilderArtifactKey = (typeof CONTEXT_BUILDER_NO_DELEGATE_ARTIFACT_KEYS)[number];
|
|
6
|
+
export declare const CONTEXT_BUILDER_ATTACHABLE_ARTIFACT_KEYS: readonly ["bundle_md", "manifest_json"];
|
|
7
|
+
export declare const CONTEXT_BUILDER_RECEIPT_TOP_LEVEL_KEYS: readonly ["schema_version", "run_id", "status", "artifact_dir", "artifacts", "attachable_file_paths", "recommended_clink", "metrics", "warnings", "omissions"];
|
|
8
|
+
export type ContextBuilderStatus = "succeeded" | "partial";
|
|
9
|
+
export type ContextBuilderReceiptSchemaVersion = typeof CONTEXT_BUILDER_NO_DELEGATE_SCHEMA_VERSION | typeof CONTEXT_BUILDER_DELEGATE_SCHEMA_VERSION;
|
|
10
|
+
export type ContextBuilderDelegateReceiptMetadata = {
|
|
11
|
+
enabled: true;
|
|
12
|
+
status: "succeeded" | "partial" | "failed";
|
|
13
|
+
failure_policy: "fallback" | "fail";
|
|
14
|
+
fallback_used: boolean;
|
|
15
|
+
curator: {
|
|
16
|
+
cli_name: string;
|
|
17
|
+
role: string;
|
|
18
|
+
};
|
|
19
|
+
finalizer: {
|
|
20
|
+
cli_name: string;
|
|
21
|
+
role: string;
|
|
22
|
+
min_score: number;
|
|
23
|
+
};
|
|
24
|
+
finalizer_score?: number;
|
|
25
|
+
selected_count: number;
|
|
26
|
+
warning_count: number;
|
|
27
|
+
omission_count: number;
|
|
28
|
+
failure_reason?: string;
|
|
29
|
+
};
|
|
30
|
+
export declare const CONTEXT_BUILDER_DELEGATE_METADATA_KEYS: readonly ["enabled", "status", "failure_policy", "fallback_used", "curator", "finalizer", "finalizer_score", "selected_count", "warning_count", "omission_count", "failure_reason"];
|
|
31
|
+
export declare const CONTEXT_BUILDER_DELEGATE_PROVIDER_METADATA_KEYS: readonly ["cli_name", "role"];
|
|
32
|
+
export declare const CONTEXT_BUILDER_DELEGATE_FINALIZER_METADATA_KEYS: readonly ["cli_name", "role", "min_score"];
|
|
33
|
+
export type ContextBuilderMetrics = {
|
|
34
|
+
files_seen: number;
|
|
35
|
+
files_considered: number;
|
|
36
|
+
files_selected: number;
|
|
37
|
+
files_omitted: number;
|
|
38
|
+
scan_cap_hit: boolean;
|
|
39
|
+
search_cap_hit: boolean;
|
|
40
|
+
discovery_byte_cap_hit: boolean;
|
|
41
|
+
discovery_candidate_cap_hit: boolean;
|
|
42
|
+
candidate_cap_hit: boolean;
|
|
43
|
+
bytes_read: number;
|
|
44
|
+
bytes_written: number;
|
|
45
|
+
estimated_tokens: number;
|
|
46
|
+
truncated: boolean;
|
|
47
|
+
};
|
|
48
|
+
export type ContextBuilderReceipt = {
|
|
49
|
+
schema_version: ContextBuilderReceiptSchemaVersion;
|
|
50
|
+
run_id: string;
|
|
51
|
+
status: ContextBuilderStatus;
|
|
52
|
+
artifact_dir: string;
|
|
53
|
+
artifacts: Record<ContextBuilderArtifactKey, string>;
|
|
54
|
+
attachable_file_paths: string[];
|
|
55
|
+
recommended_clink: {
|
|
56
|
+
absolute_file_paths: string[];
|
|
57
|
+
};
|
|
58
|
+
metrics: ContextBuilderMetrics;
|
|
59
|
+
warnings: unknown[];
|
|
60
|
+
omissions: unknown[];
|
|
61
|
+
} & ({
|
|
62
|
+
schema_version: typeof CONTEXT_BUILDER_NO_DELEGATE_SCHEMA_VERSION;
|
|
63
|
+
delegate?: never;
|
|
64
|
+
} | {
|
|
65
|
+
schema_version: typeof CONTEXT_BUILDER_DELEGATE_SCHEMA_VERSION;
|
|
66
|
+
delegate: ContextBuilderDelegateReceiptMetadata;
|
|
67
|
+
});
|
|
68
|
+
export type ContextBuilderReceiptTextResponse = {
|
|
69
|
+
content: [
|
|
70
|
+
{
|
|
71
|
+
type: "text";
|
|
72
|
+
text: string;
|
|
73
|
+
}
|
|
74
|
+
];
|
|
75
|
+
};
|
|
76
|
+
export declare function createContextBuilderReceipt(input: {
|
|
77
|
+
run_id: string;
|
|
78
|
+
status: ContextBuilderStatus;
|
|
79
|
+
artifact_dir: string;
|
|
80
|
+
artifacts: Record<ContextBuilderArtifactKey, string>;
|
|
81
|
+
metrics: ContextBuilderMetrics;
|
|
82
|
+
warnings?: unknown[];
|
|
83
|
+
omissions?: unknown[];
|
|
84
|
+
delegate?: ContextBuilderDelegateReceiptMetadata;
|
|
85
|
+
}): ContextBuilderReceipt;
|
|
86
|
+
export declare function serializeContextBuilderReceipt(receipt: ContextBuilderReceipt): string;
|
|
87
|
+
export declare function createContextBuilderReceiptTextResponse(receipt: ContextBuilderReceipt): ContextBuilderReceiptTextResponse;
|
|
88
|
+
export declare function cloneContextBuilderDelegateReceiptMetadata(delegate: ContextBuilderDelegateReceiptMetadata): ContextBuilderDelegateReceiptMetadata;
|
|
89
|
+
export declare function isContextBuilderDelegateReceiptMetadata(value: unknown): value is ContextBuilderDelegateReceiptMetadata;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
export const CONTEXT_BUILDER_NO_DELEGATE_SCHEMA_VERSION = 1;
|
|
2
|
+
export const CONTEXT_BUILDER_DELEGATE_SCHEMA_VERSION = 2;
|
|
3
|
+
export const CONTEXT_BUILDER_SCHEMA_VERSION = CONTEXT_BUILDER_NO_DELEGATE_SCHEMA_VERSION;
|
|
4
|
+
export const CONTEXT_BUILDER_NO_DELEGATE_ARTIFACT_KEYS = [
|
|
5
|
+
"manifest_json",
|
|
6
|
+
"bundle_md",
|
|
7
|
+
"tree_json",
|
|
8
|
+
"search_jsonl",
|
|
9
|
+
"slices_jsonl",
|
|
10
|
+
"codemap_jsonl",
|
|
11
|
+
"summary_json",
|
|
12
|
+
];
|
|
13
|
+
export const CONTEXT_BUILDER_ATTACHABLE_ARTIFACT_KEYS = [
|
|
14
|
+
"bundle_md",
|
|
15
|
+
"manifest_json",
|
|
16
|
+
];
|
|
17
|
+
export const CONTEXT_BUILDER_RECEIPT_TOP_LEVEL_KEYS = [
|
|
18
|
+
"schema_version",
|
|
19
|
+
"run_id",
|
|
20
|
+
"status",
|
|
21
|
+
"artifact_dir",
|
|
22
|
+
"artifacts",
|
|
23
|
+
"attachable_file_paths",
|
|
24
|
+
"recommended_clink",
|
|
25
|
+
"metrics",
|
|
26
|
+
"warnings",
|
|
27
|
+
"omissions",
|
|
28
|
+
];
|
|
29
|
+
export const CONTEXT_BUILDER_DELEGATE_METADATA_KEYS = [
|
|
30
|
+
"enabled",
|
|
31
|
+
"status",
|
|
32
|
+
"failure_policy",
|
|
33
|
+
"fallback_used",
|
|
34
|
+
"curator",
|
|
35
|
+
"finalizer",
|
|
36
|
+
"finalizer_score",
|
|
37
|
+
"selected_count",
|
|
38
|
+
"warning_count",
|
|
39
|
+
"omission_count",
|
|
40
|
+
"failure_reason",
|
|
41
|
+
];
|
|
42
|
+
export const CONTEXT_BUILDER_DELEGATE_PROVIDER_METADATA_KEYS = [
|
|
43
|
+
"cli_name",
|
|
44
|
+
"role",
|
|
45
|
+
];
|
|
46
|
+
export const CONTEXT_BUILDER_DELEGATE_FINALIZER_METADATA_KEYS = [
|
|
47
|
+
"cli_name",
|
|
48
|
+
"role",
|
|
49
|
+
"min_score",
|
|
50
|
+
];
|
|
51
|
+
export function createContextBuilderReceipt(input) {
|
|
52
|
+
const artifacts = { ...input.artifacts };
|
|
53
|
+
const attachableFilePaths = CONTEXT_BUILDER_ATTACHABLE_ARTIFACT_KEYS.map((key) => artifacts[key]);
|
|
54
|
+
const baseReceipt = {
|
|
55
|
+
run_id: input.run_id,
|
|
56
|
+
status: input.status,
|
|
57
|
+
artifact_dir: input.artifact_dir,
|
|
58
|
+
artifacts,
|
|
59
|
+
attachable_file_paths: [...attachableFilePaths],
|
|
60
|
+
recommended_clink: {
|
|
61
|
+
absolute_file_paths: [...attachableFilePaths],
|
|
62
|
+
},
|
|
63
|
+
metrics: { ...input.metrics },
|
|
64
|
+
warnings: [...(input.warnings ?? [])],
|
|
65
|
+
omissions: [...(input.omissions ?? [])],
|
|
66
|
+
};
|
|
67
|
+
if (input.delegate != null) {
|
|
68
|
+
return {
|
|
69
|
+
schema_version: CONTEXT_BUILDER_DELEGATE_SCHEMA_VERSION,
|
|
70
|
+
...baseReceipt,
|
|
71
|
+
delegate: cloneContextBuilderDelegateReceiptMetadata(input.delegate),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
schema_version: CONTEXT_BUILDER_NO_DELEGATE_SCHEMA_VERSION,
|
|
76
|
+
...baseReceipt,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export function serializeContextBuilderReceipt(receipt) {
|
|
80
|
+
return JSON.stringify(receipt);
|
|
81
|
+
}
|
|
82
|
+
export function createContextBuilderReceiptTextResponse(receipt) {
|
|
83
|
+
return {
|
|
84
|
+
content: [
|
|
85
|
+
{
|
|
86
|
+
type: "text",
|
|
87
|
+
text: serializeContextBuilderReceipt(receipt),
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export function cloneContextBuilderDelegateReceiptMetadata(delegate) {
|
|
93
|
+
return {
|
|
94
|
+
enabled: delegate.enabled,
|
|
95
|
+
status: delegate.status,
|
|
96
|
+
failure_policy: delegate.failure_policy,
|
|
97
|
+
fallback_used: delegate.fallback_used,
|
|
98
|
+
curator: { ...delegate.curator },
|
|
99
|
+
finalizer: { ...delegate.finalizer },
|
|
100
|
+
...(delegate.finalizer_score == null
|
|
101
|
+
? {}
|
|
102
|
+
: { finalizer_score: delegate.finalizer_score }),
|
|
103
|
+
selected_count: delegate.selected_count,
|
|
104
|
+
warning_count: delegate.warning_count,
|
|
105
|
+
omission_count: delegate.omission_count,
|
|
106
|
+
...(delegate.failure_reason == null
|
|
107
|
+
? {}
|
|
108
|
+
: { failure_reason: delegate.failure_reason }),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export function isContextBuilderDelegateReceiptMetadata(value) {
|
|
112
|
+
if (!isRecord(value) || !hasOnlyKeys(value, CONTEXT_BUILDER_DELEGATE_METADATA_KEYS)) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
if (value.enabled !== true
|
|
116
|
+
|| !isDelegateMetadataStatus(value.status)
|
|
117
|
+
|| !isDelegateMetadataFailurePolicy(value.failure_policy)
|
|
118
|
+
|| typeof value.fallback_used !== "boolean"
|
|
119
|
+
|| !isDelegateProviderMetadata(value.curator)
|
|
120
|
+
|| !isDelegateFinalizerMetadata(value.finalizer)
|
|
121
|
+
|| !isNonNegativeInteger(value.selected_count)
|
|
122
|
+
|| !isNonNegativeInteger(value.warning_count)
|
|
123
|
+
|| !isNonNegativeInteger(value.omission_count)) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
if (value.finalizer_score !== undefined
|
|
127
|
+
&& !isFiniteNumber(value.finalizer_score)) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
return (value.failure_reason === undefined
|
|
131
|
+
|| typeof value.failure_reason === "string");
|
|
132
|
+
}
|
|
133
|
+
function isDelegateProviderMetadata(value) {
|
|
134
|
+
return (isRecord(value)
|
|
135
|
+
&& hasOnlyKeys(value, CONTEXT_BUILDER_DELEGATE_PROVIDER_METADATA_KEYS)
|
|
136
|
+
&& typeof value.cli_name === "string"
|
|
137
|
+
&& value.cli_name.length > 0
|
|
138
|
+
&& typeof value.role === "string"
|
|
139
|
+
&& value.role.length > 0);
|
|
140
|
+
}
|
|
141
|
+
function isDelegateFinalizerMetadata(value) {
|
|
142
|
+
return (isRecord(value)
|
|
143
|
+
&& hasOnlyKeys(value, CONTEXT_BUILDER_DELEGATE_FINALIZER_METADATA_KEYS)
|
|
144
|
+
&& typeof value.cli_name === "string"
|
|
145
|
+
&& value.cli_name.length > 0
|
|
146
|
+
&& typeof value.role === "string"
|
|
147
|
+
&& value.role.length > 0
|
|
148
|
+
&& isFiniteNumber(value.min_score));
|
|
149
|
+
}
|
|
150
|
+
function isDelegateMetadataStatus(value) {
|
|
151
|
+
return value === "succeeded" || value === "partial" || value === "failed";
|
|
152
|
+
}
|
|
153
|
+
function isDelegateMetadataFailurePolicy(value) {
|
|
154
|
+
return value === "fallback" || value === "fail";
|
|
155
|
+
}
|
|
156
|
+
function isRecord(value) {
|
|
157
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
158
|
+
}
|
|
159
|
+
function hasOnlyKeys(value, allowedKeys) {
|
|
160
|
+
const allowed = new Set(allowedKeys);
|
|
161
|
+
return Object.keys(value).every((key) => allowed.has(key));
|
|
162
|
+
}
|
|
163
|
+
function isNonNegativeInteger(value) {
|
|
164
|
+
return typeof value === "number" && Number.isInteger(value) && value >= 0;
|
|
165
|
+
}
|
|
166
|
+
function isFiniteNumber(value) {
|
|
167
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=receipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../src/context-builder/receipt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type RunIdGeneratorOptions = {
|
|
2
|
+
now?: () => Date;
|
|
3
|
+
randomHex?: () => string;
|
|
4
|
+
};
|
|
5
|
+
export declare function validateCallerRunId(runId: string): string;
|
|
6
|
+
export declare function generateContextBuilderRunId(options?: RunIdGeneratorOptions): string;
|
|
7
|
+
export declare function isGeneratedContextBuilderRunId(runId: string): boolean;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { InvalidParamsError } from "../errors.js";
|
|
3
|
+
const CALLER_RUN_ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
|
|
4
|
+
const GENERATED_RUN_ID_PATTERN = /^ctx_\d{8}T\d{6}Z_[0-9a-f]{8,12}$/;
|
|
5
|
+
export function validateCallerRunId(runId) {
|
|
6
|
+
if (!CALLER_RUN_ID_PATTERN.test(runId)) {
|
|
7
|
+
throw new InvalidParamsError("context_builder run_id must match [A-Za-z0-9_-]{1,64}");
|
|
8
|
+
}
|
|
9
|
+
return runId;
|
|
10
|
+
}
|
|
11
|
+
export function generateContextBuilderRunId(options = {}) {
|
|
12
|
+
const now = options.now?.() ?? new Date();
|
|
13
|
+
const timestamp = now.toISOString().replace(/[-:]/g, "").slice(0, 15);
|
|
14
|
+
const suffix = normalizeGeneratedHex(options.randomHex?.() ?? randomBytes(6).toString("hex"));
|
|
15
|
+
const runId = `ctx_${timestamp}Z_${suffix}`;
|
|
16
|
+
if (!GENERATED_RUN_ID_PATTERN.test(runId)) {
|
|
17
|
+
throw new Error(`Generated context_builder run_id is invalid: ${runId}`);
|
|
18
|
+
}
|
|
19
|
+
return runId;
|
|
20
|
+
}
|
|
21
|
+
export function isGeneratedContextBuilderRunId(runId) {
|
|
22
|
+
return GENERATED_RUN_ID_PATTERN.test(runId);
|
|
23
|
+
}
|
|
24
|
+
function normalizeGeneratedHex(input) {
|
|
25
|
+
const hex = input.toLowerCase();
|
|
26
|
+
if (!/^[0-9a-f]{8,12}$/.test(hex)) {
|
|
27
|
+
throw new Error("context_builder generated run_id suffix must be 8-12 hex");
|
|
28
|
+
}
|
|
29
|
+
return hex;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=run-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-id.js","sourceRoot":"","sources":["../../src/context-builder/run-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AACtD,MAAM,wBAAwB,GAAG,mCAAmC,CAAC;AAOrE,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,kBAAkB,CAC1B,uDAAuD,CACxD,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,UAAiC,EAAE;IAEnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,qBAAqB,CAClC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACxD,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,SAAS,KAAK,MAAM,EAAE,CAAC;IAE5C,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,gDAAgD,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAAa;IAC1D,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAEhC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|