@spotpatch/shared 1.12.0 → 1.13.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/annotation-C0Me9mN2.d.cts +102 -0
- package/dist/annotation-C0Me9mN2.d.ts +102 -0
- package/dist/chunk-C2PJ4UUU.js +195 -0
- package/dist/chunk-C2PJ4UUU.js.map +1 -0
- package/dist/chunk-DYTWEIES.js +89 -0
- package/dist/chunk-DYTWEIES.js.map +1 -0
- package/dist/{chunk-JGOIBOFI.js → chunk-FPDSZDP2.js} +16 -2
- package/dist/chunk-FPDSZDP2.js.map +1 -0
- package/dist/chunk-IUTOVI5G.js +584 -0
- package/dist/chunk-IUTOVI5G.js.map +1 -0
- package/dist/{chunk-JU5HIWX7.js → chunk-YQ5GL523.js} +8 -173
- package/dist/chunk-YQ5GL523.js.map +1 -0
- package/dist/contextual-ask-B0mCFn92.d.cts +1451 -0
- package/dist/contextual-ask-B0mCFn92.d.ts +1451 -0
- package/dist/contextual-ask-browser.cjs +200 -0
- package/dist/contextual-ask-browser.cjs.map +1 -0
- package/dist/contextual-ask-browser.d.cts +31 -0
- package/dist/contextual-ask-browser.d.ts +31 -0
- package/dist/contextual-ask-browser.js +66 -0
- package/dist/contextual-ask-browser.js.map +1 -0
- package/dist/contextual-ask-node.cjs +968 -0
- package/dist/contextual-ask-node.cjs.map +1 -0
- package/dist/contextual-ask-node.d.cts +14 -0
- package/dist/contextual-ask-node.d.ts +14 -0
- package/dist/contextual-ask-node.js +122 -0
- package/dist/contextual-ask-node.js.map +1 -0
- package/dist/{data-flow-runtime-oq9m21IP.d.cts → data-flow-runtime-D8HPSb2i.d.cts} +13 -13
- package/dist/{data-flow-runtime-BelOgo8s.d.ts → data-flow-runtime-vKeEaJgT.d.ts} +13 -13
- package/dist/data-flow-runtime.cjs +2 -0
- package/dist/data-flow-runtime.cjs.map +1 -1
- package/dist/data-flow-runtime.d.cts +2 -2
- package/dist/data-flow-runtime.d.ts +2 -2
- package/dist/data-flow-runtime.js +1 -1
- package/dist/{endpoints-GedF44M2.d.cts → endpoints-O3ohYyAo.d.cts} +7 -1
- package/dist/{endpoints-GedF44M2.d.ts → endpoints-O3ohYyAo.d.ts} +7 -1
- package/dist/error-code-DRz2eqcB.d.cts +63 -0
- package/dist/error-code-DRz2eqcB.d.ts +63 -0
- package/dist/external-agent-node.cjs +142 -121
- package/dist/external-agent-node.cjs.map +1 -1
- package/dist/external-agent-node.d.cts +27 -26
- package/dist/external-agent-node.d.ts +27 -26
- package/dist/external-agent-node.js +4 -2
- package/dist/external-agent-node.js.map +1 -1
- package/dist/{external-handoff-BNUyMfNb.d.ts → external-handoff-DighrWn8.d.ts} +30 -130
- package/dist/{external-handoff-BNUyMfNb.d.cts → external-handoff-DwtFFR6F.d.cts} +30 -130
- package/dist/external-handoff-browser.cjs +2 -0
- package/dist/external-handoff-browser.cjs.map +1 -1
- package/dist/external-handoff-browser.d.cts +4 -3
- package/dist/external-handoff-browser.d.ts +4 -3
- package/dist/external-handoff-browser.js +1 -1
- package/dist/index.cjs +1144 -422
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +126 -178
- package/dist/index.d.ts +126 -178
- package/dist/index.js +97 -16
- package/dist/index.js.map +1 -1
- package/package.json +29 -2
- package/dist/chunk-JGOIBOFI.js.map +0 -1
- package/dist/chunk-JU5HIWX7.js.map +0 -1
- package/dist/{external-agent-control-BMoSq_xI.d.cts → external-agent-control-CRBbjDDk.d.cts} +46 -46
- package/dist/{external-agent-control-BMoSq_xI.d.ts → external-agent-control-CRBbjDDk.d.ts} +46 -46
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
interface ContextBudget {
|
|
2
|
+
readonly totalCharacters: number;
|
|
3
|
+
readonly domCharacters: number;
|
|
4
|
+
readonly cssCharacters: number;
|
|
5
|
+
readonly codeCharacters: number;
|
|
6
|
+
readonly maxCodeLines: number;
|
|
7
|
+
readonly maxComponentDepth: number;
|
|
8
|
+
}
|
|
9
|
+
interface CodeContext {
|
|
10
|
+
readonly relativePath: string;
|
|
11
|
+
readonly language: "tsx" | "jsx";
|
|
12
|
+
readonly startLine: number;
|
|
13
|
+
readonly endLine: number;
|
|
14
|
+
readonly excerpt: string;
|
|
15
|
+
readonly boundary: "component" | "nearby-lines";
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type SourceConfidence = "exact" | "probable" | "approximate" | "unknown";
|
|
19
|
+
type SourceOrigin = "jsx-host" | "react-fiber" | "dom-ancestor" | "none";
|
|
20
|
+
interface SourceRef {
|
|
21
|
+
readonly fileId?: string;
|
|
22
|
+
readonly relativePath?: string;
|
|
23
|
+
readonly line?: number;
|
|
24
|
+
readonly column?: number;
|
|
25
|
+
readonly origin: SourceOrigin;
|
|
26
|
+
readonly confidence: SourceConfidence;
|
|
27
|
+
}
|
|
28
|
+
interface ReactContext {
|
|
29
|
+
readonly supported: boolean;
|
|
30
|
+
readonly version?: string;
|
|
31
|
+
readonly componentName?: string;
|
|
32
|
+
readonly componentSourceId?: string;
|
|
33
|
+
readonly sourceVersion?: string;
|
|
34
|
+
readonly componentStack: readonly string[];
|
|
35
|
+
readonly source?: SourceRef;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface MatchedStyleRule {
|
|
39
|
+
readonly selector: string;
|
|
40
|
+
readonly declarations: string;
|
|
41
|
+
readonly source?: string;
|
|
42
|
+
readonly media?: string;
|
|
43
|
+
}
|
|
44
|
+
interface StyleContext {
|
|
45
|
+
readonly classNames: readonly string[];
|
|
46
|
+
readonly inlineStyle?: string;
|
|
47
|
+
readonly matchedRules: readonly MatchedStyleRule[];
|
|
48
|
+
readonly computed: Readonly<Record<string, string>>;
|
|
49
|
+
readonly warnings: readonly string[];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
interface PageContext {
|
|
53
|
+
readonly url: string;
|
|
54
|
+
readonly pathname: string;
|
|
55
|
+
readonly title: string;
|
|
56
|
+
readonly viewportWidth: number;
|
|
57
|
+
readonly viewportHeight: number;
|
|
58
|
+
readonly devicePixelRatio: number;
|
|
59
|
+
}
|
|
60
|
+
interface ElementContext {
|
|
61
|
+
readonly tagName: string;
|
|
62
|
+
readonly selector: string;
|
|
63
|
+
readonly sanitizedHtml: string;
|
|
64
|
+
readonly textPreview?: string;
|
|
65
|
+
readonly role?: string;
|
|
66
|
+
readonly rect: Readonly<{
|
|
67
|
+
x: number;
|
|
68
|
+
y: number;
|
|
69
|
+
width: number;
|
|
70
|
+
height: number;
|
|
71
|
+
}>;
|
|
72
|
+
}
|
|
73
|
+
/** Protocol hard limit. Runtime configuration may choose a smaller limit. */
|
|
74
|
+
declare const MAX_ANNOTATION_TARGETS = 20;
|
|
75
|
+
/** Each target owns its requested change; the UI enforces the same bound. */
|
|
76
|
+
declare const MAX_TARGET_INSTRUCTION_CHARACTERS = 2000;
|
|
77
|
+
/** Keeps the complete, atomic user intent within the prompt and request budgets. */
|
|
78
|
+
declare const MAX_ANNOTATION_INSTRUCTION_CHARACTERS = 4000;
|
|
79
|
+
declare const SPOTPATCH_LOCALES: readonly ["en-US", "zh-CN"];
|
|
80
|
+
type SpotPatchLocale = (typeof SPOTPATCH_LOCALES)[number];
|
|
81
|
+
declare const SPOTPATCH_LOCALE_PREFERENCES: readonly ["auto", "en-US", "zh-CN"];
|
|
82
|
+
type SpotPatchLocalePreference = (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];
|
|
83
|
+
interface SpotTargetContext {
|
|
84
|
+
readonly instruction: string;
|
|
85
|
+
readonly page?: Readonly<PageContext>;
|
|
86
|
+
readonly source: SourceRef;
|
|
87
|
+
readonly react: ReactContext;
|
|
88
|
+
readonly element: ElementContext;
|
|
89
|
+
readonly styles: StyleContext;
|
|
90
|
+
readonly code?: CodeContext;
|
|
91
|
+
readonly warnings: readonly string[];
|
|
92
|
+
}
|
|
93
|
+
interface SpotAnnotation {
|
|
94
|
+
readonly schemaVersion: 3;
|
|
95
|
+
readonly id: string;
|
|
96
|
+
readonly locale: SpotPatchLocale;
|
|
97
|
+
readonly page: Readonly<PageContext>;
|
|
98
|
+
readonly targets: readonly SpotTargetContext[];
|
|
99
|
+
readonly createdAt: string;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export { type ContextBudget as C, type ElementContext as E, MAX_ANNOTATION_INSTRUCTION_CHARACTERS as M, type PageContext as P, type ReactContext as R, type SpotAnnotation as S, type SpotPatchLocale as a, SPOTPATCH_LOCALE_PREFERENCES as b, type CodeContext as c, MAX_ANNOTATION_TARGETS as d, MAX_TARGET_INSTRUCTION_CHARACTERS as e, type MatchedStyleRule as f, SPOTPATCH_LOCALES as g, type SourceConfidence as h, type SourceOrigin as i, type SourceRef as j, type SpotPatchLocalePreference as k, type SpotTargetContext as l, type StyleContext as m };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
interface ContextBudget {
|
|
2
|
+
readonly totalCharacters: number;
|
|
3
|
+
readonly domCharacters: number;
|
|
4
|
+
readonly cssCharacters: number;
|
|
5
|
+
readonly codeCharacters: number;
|
|
6
|
+
readonly maxCodeLines: number;
|
|
7
|
+
readonly maxComponentDepth: number;
|
|
8
|
+
}
|
|
9
|
+
interface CodeContext {
|
|
10
|
+
readonly relativePath: string;
|
|
11
|
+
readonly language: "tsx" | "jsx";
|
|
12
|
+
readonly startLine: number;
|
|
13
|
+
readonly endLine: number;
|
|
14
|
+
readonly excerpt: string;
|
|
15
|
+
readonly boundary: "component" | "nearby-lines";
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type SourceConfidence = "exact" | "probable" | "approximate" | "unknown";
|
|
19
|
+
type SourceOrigin = "jsx-host" | "react-fiber" | "dom-ancestor" | "none";
|
|
20
|
+
interface SourceRef {
|
|
21
|
+
readonly fileId?: string;
|
|
22
|
+
readonly relativePath?: string;
|
|
23
|
+
readonly line?: number;
|
|
24
|
+
readonly column?: number;
|
|
25
|
+
readonly origin: SourceOrigin;
|
|
26
|
+
readonly confidence: SourceConfidence;
|
|
27
|
+
}
|
|
28
|
+
interface ReactContext {
|
|
29
|
+
readonly supported: boolean;
|
|
30
|
+
readonly version?: string;
|
|
31
|
+
readonly componentName?: string;
|
|
32
|
+
readonly componentSourceId?: string;
|
|
33
|
+
readonly sourceVersion?: string;
|
|
34
|
+
readonly componentStack: readonly string[];
|
|
35
|
+
readonly source?: SourceRef;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface MatchedStyleRule {
|
|
39
|
+
readonly selector: string;
|
|
40
|
+
readonly declarations: string;
|
|
41
|
+
readonly source?: string;
|
|
42
|
+
readonly media?: string;
|
|
43
|
+
}
|
|
44
|
+
interface StyleContext {
|
|
45
|
+
readonly classNames: readonly string[];
|
|
46
|
+
readonly inlineStyle?: string;
|
|
47
|
+
readonly matchedRules: readonly MatchedStyleRule[];
|
|
48
|
+
readonly computed: Readonly<Record<string, string>>;
|
|
49
|
+
readonly warnings: readonly string[];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
interface PageContext {
|
|
53
|
+
readonly url: string;
|
|
54
|
+
readonly pathname: string;
|
|
55
|
+
readonly title: string;
|
|
56
|
+
readonly viewportWidth: number;
|
|
57
|
+
readonly viewportHeight: number;
|
|
58
|
+
readonly devicePixelRatio: number;
|
|
59
|
+
}
|
|
60
|
+
interface ElementContext {
|
|
61
|
+
readonly tagName: string;
|
|
62
|
+
readonly selector: string;
|
|
63
|
+
readonly sanitizedHtml: string;
|
|
64
|
+
readonly textPreview?: string;
|
|
65
|
+
readonly role?: string;
|
|
66
|
+
readonly rect: Readonly<{
|
|
67
|
+
x: number;
|
|
68
|
+
y: number;
|
|
69
|
+
width: number;
|
|
70
|
+
height: number;
|
|
71
|
+
}>;
|
|
72
|
+
}
|
|
73
|
+
/** Protocol hard limit. Runtime configuration may choose a smaller limit. */
|
|
74
|
+
declare const MAX_ANNOTATION_TARGETS = 20;
|
|
75
|
+
/** Each target owns its requested change; the UI enforces the same bound. */
|
|
76
|
+
declare const MAX_TARGET_INSTRUCTION_CHARACTERS = 2000;
|
|
77
|
+
/** Keeps the complete, atomic user intent within the prompt and request budgets. */
|
|
78
|
+
declare const MAX_ANNOTATION_INSTRUCTION_CHARACTERS = 4000;
|
|
79
|
+
declare const SPOTPATCH_LOCALES: readonly ["en-US", "zh-CN"];
|
|
80
|
+
type SpotPatchLocale = (typeof SPOTPATCH_LOCALES)[number];
|
|
81
|
+
declare const SPOTPATCH_LOCALE_PREFERENCES: readonly ["auto", "en-US", "zh-CN"];
|
|
82
|
+
type SpotPatchLocalePreference = (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];
|
|
83
|
+
interface SpotTargetContext {
|
|
84
|
+
readonly instruction: string;
|
|
85
|
+
readonly page?: Readonly<PageContext>;
|
|
86
|
+
readonly source: SourceRef;
|
|
87
|
+
readonly react: ReactContext;
|
|
88
|
+
readonly element: ElementContext;
|
|
89
|
+
readonly styles: StyleContext;
|
|
90
|
+
readonly code?: CodeContext;
|
|
91
|
+
readonly warnings: readonly string[];
|
|
92
|
+
}
|
|
93
|
+
interface SpotAnnotation {
|
|
94
|
+
readonly schemaVersion: 3;
|
|
95
|
+
readonly id: string;
|
|
96
|
+
readonly locale: SpotPatchLocale;
|
|
97
|
+
readonly page: Readonly<PageContext>;
|
|
98
|
+
readonly targets: readonly SpotTargetContext[];
|
|
99
|
+
readonly createdAt: string;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export { type ContextBudget as C, type ElementContext as E, MAX_ANNOTATION_INSTRUCTION_CHARACTERS as M, type PageContext as P, type ReactContext as R, type SpotAnnotation as S, type SpotPatchLocale as a, SPOTPATCH_LOCALE_PREFERENCES as b, type CodeContext as c, MAX_ANNOTATION_TARGETS as d, MAX_TARGET_INSTRUCTION_CHARACTERS as e, type MatchedStyleRule as f, SPOTPATCH_LOCALES as g, type SourceConfidence as h, type SourceOrigin as i, type SourceRef as j, type SpotPatchLocalePreference as k, type SpotTargetContext as l, type StyleContext as m };
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// src/model/annotation.ts
|
|
2
|
+
var MAX_ANNOTATION_TARGETS = 20;
|
|
3
|
+
var MAX_TARGET_INSTRUCTION_CHARACTERS = 2e3;
|
|
4
|
+
var MAX_ANNOTATION_INSTRUCTION_CHARACTERS = 4e3;
|
|
5
|
+
var SPOTPATCH_LOCALES = Object.freeze(["en-US", "zh-CN"]);
|
|
6
|
+
var SPOTPATCH_LOCALE_PREFERENCES = Object.freeze([
|
|
7
|
+
"auto",
|
|
8
|
+
...SPOTPATCH_LOCALES
|
|
9
|
+
]);
|
|
10
|
+
|
|
11
|
+
// src/model/context-schema.ts
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
var boundedString = (maximum) => z.string().max(maximum);
|
|
14
|
+
var sourceRefSchema = z.strictObject({
|
|
15
|
+
fileId: boundedString(128).optional(),
|
|
16
|
+
relativePath: boundedString(1024).optional(),
|
|
17
|
+
line: z.number().int().positive().optional(),
|
|
18
|
+
column: z.number().int().positive().optional(),
|
|
19
|
+
origin: z.enum(["jsx-host", "react-fiber", "dom-ancestor", "none"]),
|
|
20
|
+
confidence: z.enum(["exact", "probable", "approximate", "unknown"])
|
|
21
|
+
});
|
|
22
|
+
var matchedStyleRuleSchema = z.strictObject({
|
|
23
|
+
selector: boundedString(2048),
|
|
24
|
+
declarations: boundedString(8192),
|
|
25
|
+
source: boundedString(1024).optional(),
|
|
26
|
+
media: boundedString(1024).optional()
|
|
27
|
+
});
|
|
28
|
+
var codeContextSchema = z.strictObject({
|
|
29
|
+
relativePath: boundedString(1024),
|
|
30
|
+
language: z.enum(["tsx", "jsx"]),
|
|
31
|
+
startLine: z.number().int().positive(),
|
|
32
|
+
endLine: z.number().int().positive(),
|
|
33
|
+
excerpt: boundedString(16e3),
|
|
34
|
+
boundary: z.enum(["component", "nearby-lines"])
|
|
35
|
+
});
|
|
36
|
+
var pageContextSchema = z.strictObject({
|
|
37
|
+
url: boundedString(2048),
|
|
38
|
+
pathname: boundedString(2048),
|
|
39
|
+
title: boundedString(1024),
|
|
40
|
+
viewportWidth: z.number().nonnegative(),
|
|
41
|
+
viewportHeight: z.number().nonnegative(),
|
|
42
|
+
devicePixelRatio: z.number().positive()
|
|
43
|
+
});
|
|
44
|
+
var spotTargetContextSchema = z.strictObject({
|
|
45
|
+
instruction: z.string().trim().min(1).max(MAX_TARGET_INSTRUCTION_CHARACTERS),
|
|
46
|
+
page: pageContextSchema.optional(),
|
|
47
|
+
source: sourceRefSchema,
|
|
48
|
+
react: z.strictObject({
|
|
49
|
+
supported: z.boolean(),
|
|
50
|
+
version: boundedString(64).optional(),
|
|
51
|
+
componentName: boundedString(256).optional(),
|
|
52
|
+
componentSourceId: boundedString(128).optional(),
|
|
53
|
+
sourceVersion: boundedString(128).optional(),
|
|
54
|
+
componentStack: z.array(boundedString(256)).max(64),
|
|
55
|
+
source: sourceRefSchema.optional()
|
|
56
|
+
}),
|
|
57
|
+
element: z.strictObject({
|
|
58
|
+
tagName: boundedString(128),
|
|
59
|
+
selector: boundedString(2048),
|
|
60
|
+
sanitizedHtml: boundedString(8192),
|
|
61
|
+
textPreview: boundedString(2048).optional(),
|
|
62
|
+
role: boundedString(256).optional(),
|
|
63
|
+
rect: z.strictObject({
|
|
64
|
+
x: z.number(),
|
|
65
|
+
y: z.number(),
|
|
66
|
+
width: z.number().nonnegative(),
|
|
67
|
+
height: z.number().nonnegative()
|
|
68
|
+
})
|
|
69
|
+
}),
|
|
70
|
+
styles: z.strictObject({
|
|
71
|
+
classNames: z.array(boundedString(512)).max(256),
|
|
72
|
+
inlineStyle: boundedString(8192).optional(),
|
|
73
|
+
matchedRules: z.array(matchedStyleRuleSchema).max(256),
|
|
74
|
+
computed: z.record(boundedString(256), boundedString(2048)),
|
|
75
|
+
warnings: z.array(boundedString(1024)).max(64)
|
|
76
|
+
}),
|
|
77
|
+
code: codeContextSchema.optional(),
|
|
78
|
+
warnings: z.array(boundedString(1024)).max(64)
|
|
79
|
+
});
|
|
80
|
+
var spotAnnotationSchema = z.strictObject({
|
|
81
|
+
schemaVersion: z.literal(3),
|
|
82
|
+
id: boundedString(128),
|
|
83
|
+
locale: z.enum(SPOTPATCH_LOCALES),
|
|
84
|
+
page: pageContextSchema,
|
|
85
|
+
targets: z.array(spotTargetContextSchema).min(1).max(MAX_ANNOTATION_TARGETS),
|
|
86
|
+
createdAt: z.iso.datetime()
|
|
87
|
+
}).superRefine((annotation, context) => {
|
|
88
|
+
const total = annotation.targets.reduce(
|
|
89
|
+
(characters, target) => characters + target.instruction.length,
|
|
90
|
+
0
|
|
91
|
+
);
|
|
92
|
+
if (total > MAX_ANNOTATION_INSTRUCTION_CHARACTERS) {
|
|
93
|
+
context.addIssue({
|
|
94
|
+
code: "custom",
|
|
95
|
+
message: "Combined target instructions exceed the annotation limit.",
|
|
96
|
+
path: ["targets"]
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
// src/errors/error-code.ts
|
|
102
|
+
var ERROR_CODES = {
|
|
103
|
+
INVALID_REQUEST: "INVALID_REQUEST",
|
|
104
|
+
INVALID_TOKEN: "INVALID_TOKEN",
|
|
105
|
+
ORIGIN_NOT_ALLOWED: "ORIGIN_NOT_ALLOWED",
|
|
106
|
+
SOURCE_NOT_FOUND: "SOURCE_NOT_FOUND",
|
|
107
|
+
SOURCE_OUTSIDE_ROOT: "SOURCE_OUTSIDE_ROOT",
|
|
108
|
+
SOURCE_TOO_LARGE: "SOURCE_TOO_LARGE",
|
|
109
|
+
EDITOR_OPEN_FAILED: "EDITOR_OPEN_FAILED",
|
|
110
|
+
DATA_FLOW_DISABLED: "DATA_FLOW_DISABLED",
|
|
111
|
+
DATA_FLOW_SOURCE_STALE: "DATA_FLOW_SOURCE_STALE",
|
|
112
|
+
DATA_FLOW_ANALYSIS_CANCELLED: "DATA_FLOW_ANALYSIS_CANCELLED",
|
|
113
|
+
AI_DISABLED: "AI_DISABLED",
|
|
114
|
+
PROVIDER_NOT_CONFIGURED: "PROVIDER_NOT_CONFIGURED",
|
|
115
|
+
PROVIDER_AUTH_FAILED: "PROVIDER_AUTH_FAILED",
|
|
116
|
+
PROVIDER_PROTOCOL_UNSUPPORTED: "PROVIDER_PROTOCOL_UNSUPPORTED",
|
|
117
|
+
MODEL_NOT_ALLOWED: "MODEL_NOT_ALLOWED",
|
|
118
|
+
MODEL_TOOL_CALL_UNSUPPORTED: "MODEL_TOOL_CALL_UNSUPPORTED",
|
|
119
|
+
PROVIDER_RATE_LIMITED: "PROVIDER_RATE_LIMITED",
|
|
120
|
+
AGENT_BUSY: "AGENT_BUSY",
|
|
121
|
+
AGENT_LIMIT_EXCEEDED: "AGENT_LIMIT_EXCEEDED",
|
|
122
|
+
AGENT_CANCELLED: "AGENT_CANCELLED",
|
|
123
|
+
EXTERNAL_HANDOFF_DISABLED: "EXTERNAL_HANDOFF_DISABLED",
|
|
124
|
+
EXTERNAL_HANDOFF_UNAVAILABLE: "EXTERNAL_HANDOFF_UNAVAILABLE",
|
|
125
|
+
HANDOFF_VALIDATION_FAILED: "HANDOFF_VALIDATION_FAILED",
|
|
126
|
+
HANDOFF_SOURCE_STALE: "HANDOFF_SOURCE_STALE",
|
|
127
|
+
HANDOFF_NOT_FOUND: "HANDOFF_NOT_FOUND",
|
|
128
|
+
HANDOFF_EXPIRED: "HANDOFF_EXPIRED",
|
|
129
|
+
HANDOFF_CURSOR_INVALID: "HANDOFF_CURSOR_INVALID",
|
|
130
|
+
HANDOFF_RESPONSE_TOO_LARGE: "HANDOFF_RESPONSE_TOO_LARGE",
|
|
131
|
+
BRIDGE_UNAUTHORIZED: "BRIDGE_UNAUTHORIZED",
|
|
132
|
+
BRIDGE_PROTOCOL_MISMATCH: "BRIDGE_PROTOCOL_MISMATCH",
|
|
133
|
+
BRIDGE_BUSY: "BRIDGE_BUSY",
|
|
134
|
+
EXTERNAL_AGENT_BUSY: "EXTERNAL_AGENT_BUSY",
|
|
135
|
+
ACTIVE_ADAPTER_CONFLICT: "ACTIVE_ADAPTER_CONFLICT",
|
|
136
|
+
ACTIVE_ADAPTER_LEASE_INVALID: "ACTIVE_ADAPTER_LEASE_INVALID",
|
|
137
|
+
ACTIVE_DISPATCH_INVALID: "ACTIVE_DISPATCH_INVALID",
|
|
138
|
+
SESSION_NOT_FOUND: "SESSION_NOT_FOUND",
|
|
139
|
+
SESSION_AMBIGUOUS: "SESSION_AMBIGUOUS",
|
|
140
|
+
SESSION_CLOSED: "SESSION_CLOSED",
|
|
141
|
+
WORKTREE_DIRTY: "WORKTREE_DIRTY",
|
|
142
|
+
WORKTREE_NOT_REPOSITORY: "WORKTREE_NOT_REPOSITORY",
|
|
143
|
+
WORKTREE_OPERATION_IN_PROGRESS: "WORKTREE_OPERATION_IN_PROGRESS",
|
|
144
|
+
WORKTREE_CONFLICTED: "WORKTREE_CONFLICTED",
|
|
145
|
+
WORKTREE_LOCAL_CHANGES_TOO_LARGE: "WORKTREE_LOCAL_CHANGES_TOO_LARGE",
|
|
146
|
+
WORKTREE_UNTRACKED_UNSUPPORTED: "WORKTREE_UNTRACKED_UNSUPPORTED",
|
|
147
|
+
WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED",
|
|
148
|
+
TOOL_DENIED: "TOOL_DENIED",
|
|
149
|
+
TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID",
|
|
150
|
+
TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID",
|
|
151
|
+
TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT",
|
|
152
|
+
TOOL_PATH_DENIED: "TOOL_PATH_DENIED",
|
|
153
|
+
PATCH_REJECTED: "PATCH_REJECTED",
|
|
154
|
+
VALIDATION_FAILED: "VALIDATION_FAILED",
|
|
155
|
+
APPLY_CONFLICT: "APPLY_CONFLICT",
|
|
156
|
+
INTERNAL_ERROR: "INTERNAL_ERROR"
|
|
157
|
+
};
|
|
158
|
+
var CONTEXTUAL_ASK_ERROR_CODES = Object.freeze([
|
|
159
|
+
"ASK_DISABLED",
|
|
160
|
+
"ASK_SELECTION_REQUIRED",
|
|
161
|
+
"ASK_SELECTION_STALE",
|
|
162
|
+
"ASK_QUESTION_INVALID",
|
|
163
|
+
"ASK_EXECUTOR_UNAVAILABLE",
|
|
164
|
+
"ASK_TIMEOUT",
|
|
165
|
+
"ASK_CONSENT_REQUIRED",
|
|
166
|
+
"ASK_BUSY",
|
|
167
|
+
"ASK_IDEMPOTENCY_CONFLICT",
|
|
168
|
+
"ASK_SOURCE_SCOPE_DENIED",
|
|
169
|
+
"ASK_LIMIT_EXCEEDED",
|
|
170
|
+
"ASK_ANSWER_INVALID",
|
|
171
|
+
"ASK_WRITE_ATTEMPTED",
|
|
172
|
+
"ASK_CANCELLED",
|
|
173
|
+
"ASK_RESULT_EXPIRED",
|
|
174
|
+
"ASK_PROTOCOL_INCOMPATIBLE"
|
|
175
|
+
]);
|
|
176
|
+
var ERROR_CODE_VALUES = Object.freeze(Object.values(ERROR_CODES));
|
|
177
|
+
function isErrorCode(value) {
|
|
178
|
+
return typeof value === "string" && ERROR_CODE_VALUES.includes(value);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export {
|
|
182
|
+
MAX_ANNOTATION_TARGETS,
|
|
183
|
+
MAX_TARGET_INSTRUCTION_CHARACTERS,
|
|
184
|
+
MAX_ANNOTATION_INSTRUCTION_CHARACTERS,
|
|
185
|
+
SPOTPATCH_LOCALES,
|
|
186
|
+
SPOTPATCH_LOCALE_PREFERENCES,
|
|
187
|
+
pageContextSchema,
|
|
188
|
+
spotTargetContextSchema,
|
|
189
|
+
spotAnnotationSchema,
|
|
190
|
+
ERROR_CODES,
|
|
191
|
+
CONTEXTUAL_ASK_ERROR_CODES,
|
|
192
|
+
ERROR_CODE_VALUES,
|
|
193
|
+
isErrorCode
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=chunk-C2PJ4UUU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/model/annotation.ts","../src/model/context-schema.ts","../src/errors/error-code.ts"],"sourcesContent":["import type { CodeContext } from \"./code-context.js\";\nimport type { ReactContext, SourceRef } from \"./source-ref.js\";\nimport type { StyleContext } from \"./style-context.js\";\n\nexport interface PageContext {\n readonly url: string;\n readonly pathname: string;\n readonly title: string;\n readonly viewportWidth: number;\n readonly viewportHeight: number;\n readonly devicePixelRatio: number;\n}\n\nexport interface ElementContext {\n readonly tagName: string;\n readonly selector: string;\n readonly sanitizedHtml: string;\n readonly textPreview?: string;\n readonly role?: string;\n readonly rect: Readonly<{\n x: number;\n y: number;\n width: number;\n height: number;\n }>;\n}\n\n/** Protocol hard limit. Runtime configuration may choose a smaller limit. */\nexport const MAX_ANNOTATION_TARGETS = 20;\n\n/** Each target owns its requested change; the UI enforces the same bound. */\nexport const MAX_TARGET_INSTRUCTION_CHARACTERS = 2_000;\n\n/** Keeps the complete, atomic user intent within the prompt and request budgets. */\nexport const MAX_ANNOTATION_INSTRUCTION_CHARACTERS = 4_000;\n\nexport const SPOTPATCH_LOCALES = Object.freeze([\"en-US\", \"zh-CN\"] as const);\nexport type SpotPatchLocale = (typeof SPOTPATCH_LOCALES)[number];\nexport const SPOTPATCH_LOCALE_PREFERENCES = Object.freeze([\n \"auto\",\n ...SPOTPATCH_LOCALES,\n] as const);\nexport type SpotPatchLocalePreference = (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];\n\nexport interface SpotTargetContext {\n readonly instruction: string;\n readonly page?: Readonly<PageContext>;\n readonly source: SourceRef;\n readonly react: ReactContext;\n readonly element: ElementContext;\n readonly styles: StyleContext;\n readonly code?: CodeContext;\n readonly warnings: readonly string[];\n}\n\nexport interface SpotAnnotation {\n readonly schemaVersion: 3;\n readonly id: string;\n readonly locale: SpotPatchLocale;\n readonly page: Readonly<PageContext>;\n readonly targets: readonly SpotTargetContext[];\n readonly createdAt: string;\n}\n","import { z } from \"zod\";\n\nimport {\n MAX_ANNOTATION_INSTRUCTION_CHARACTERS,\n MAX_ANNOTATION_TARGETS,\n MAX_TARGET_INSTRUCTION_CHARACTERS,\n SPOTPATCH_LOCALES,\n} from \"./annotation.js\";\n\nconst boundedString = (maximum: number): z.ZodString => z.string().max(maximum);\n\nexport const sourceRefSchema = z.strictObject({\n fileId: boundedString(128).optional(),\n relativePath: boundedString(1_024).optional(),\n line: z.number().int().positive().optional(),\n column: z.number().int().positive().optional(),\n origin: z.enum([\"jsx-host\", \"react-fiber\", \"dom-ancestor\", \"none\"]),\n confidence: z.enum([\"exact\", \"probable\", \"approximate\", \"unknown\"]),\n});\n\nexport const matchedStyleRuleSchema = z.strictObject({\n selector: boundedString(2_048),\n declarations: boundedString(8_192),\n source: boundedString(1_024).optional(),\n media: boundedString(1_024).optional(),\n});\n\nexport const codeContextSchema = z.strictObject({\n relativePath: boundedString(1_024),\n language: z.enum([\"tsx\", \"jsx\"]),\n startLine: z.number().int().positive(),\n endLine: z.number().int().positive(),\n excerpt: boundedString(16_000),\n boundary: z.enum([\"component\", \"nearby-lines\"]),\n});\n\nexport const pageContextSchema = z.strictObject({\n url: boundedString(2_048),\n pathname: boundedString(2_048),\n title: boundedString(1_024),\n viewportWidth: z.number().nonnegative(),\n viewportHeight: z.number().nonnegative(),\n devicePixelRatio: z.number().positive(),\n});\n\nexport const spotTargetContextSchema = z.strictObject({\n instruction: z.string().trim().min(1).max(MAX_TARGET_INSTRUCTION_CHARACTERS),\n page: pageContextSchema.optional(),\n source: sourceRefSchema,\n react: z.strictObject({\n supported: z.boolean(),\n version: boundedString(64).optional(),\n componentName: boundedString(256).optional(),\n componentSourceId: boundedString(128).optional(),\n sourceVersion: boundedString(128).optional(),\n componentStack: z.array(boundedString(256)).max(64),\n source: sourceRefSchema.optional(),\n }),\n element: z.strictObject({\n tagName: boundedString(128),\n selector: boundedString(2_048),\n sanitizedHtml: boundedString(8_192),\n textPreview: boundedString(2_048).optional(),\n role: boundedString(256).optional(),\n rect: z.strictObject({\n x: z.number(),\n y: z.number(),\n width: z.number().nonnegative(),\n height: z.number().nonnegative(),\n }),\n }),\n styles: z.strictObject({\n classNames: z.array(boundedString(512)).max(256),\n inlineStyle: boundedString(8_192).optional(),\n matchedRules: z.array(matchedStyleRuleSchema).max(256),\n computed: z.record(boundedString(256), boundedString(2_048)),\n warnings: z.array(boundedString(1_024)).max(64),\n }),\n code: codeContextSchema.optional(),\n warnings: z.array(boundedString(1_024)).max(64),\n});\n\nexport const spotAnnotationSchema = z\n .strictObject({\n schemaVersion: z.literal(3),\n id: boundedString(128),\n locale: z.enum(SPOTPATCH_LOCALES),\n page: pageContextSchema,\n targets: z.array(spotTargetContextSchema).min(1).max(MAX_ANNOTATION_TARGETS),\n createdAt: z.iso.datetime(),\n })\n .superRefine((annotation, context) => {\n const total = annotation.targets.reduce(\n (characters, target) => characters + target.instruction.length,\n 0,\n );\n if (total > MAX_ANNOTATION_INSTRUCTION_CHARACTERS) {\n context.addIssue({\n code: \"custom\",\n message: \"Combined target instructions exceed the annotation limit.\",\n path: [\"targets\"],\n });\n }\n });\n","export const ERROR_CODES = {\n INVALID_REQUEST: \"INVALID_REQUEST\",\n INVALID_TOKEN: \"INVALID_TOKEN\",\n ORIGIN_NOT_ALLOWED: \"ORIGIN_NOT_ALLOWED\",\n SOURCE_NOT_FOUND: \"SOURCE_NOT_FOUND\",\n SOURCE_OUTSIDE_ROOT: \"SOURCE_OUTSIDE_ROOT\",\n SOURCE_TOO_LARGE: \"SOURCE_TOO_LARGE\",\n EDITOR_OPEN_FAILED: \"EDITOR_OPEN_FAILED\",\n DATA_FLOW_DISABLED: \"DATA_FLOW_DISABLED\",\n DATA_FLOW_SOURCE_STALE: \"DATA_FLOW_SOURCE_STALE\",\n DATA_FLOW_ANALYSIS_CANCELLED: \"DATA_FLOW_ANALYSIS_CANCELLED\",\n AI_DISABLED: \"AI_DISABLED\",\n PROVIDER_NOT_CONFIGURED: \"PROVIDER_NOT_CONFIGURED\",\n PROVIDER_AUTH_FAILED: \"PROVIDER_AUTH_FAILED\",\n PROVIDER_PROTOCOL_UNSUPPORTED: \"PROVIDER_PROTOCOL_UNSUPPORTED\",\n MODEL_NOT_ALLOWED: \"MODEL_NOT_ALLOWED\",\n MODEL_TOOL_CALL_UNSUPPORTED: \"MODEL_TOOL_CALL_UNSUPPORTED\",\n PROVIDER_RATE_LIMITED: \"PROVIDER_RATE_LIMITED\",\n AGENT_BUSY: \"AGENT_BUSY\",\n AGENT_LIMIT_EXCEEDED: \"AGENT_LIMIT_EXCEEDED\",\n AGENT_CANCELLED: \"AGENT_CANCELLED\",\n EXTERNAL_HANDOFF_DISABLED: \"EXTERNAL_HANDOFF_DISABLED\",\n EXTERNAL_HANDOFF_UNAVAILABLE: \"EXTERNAL_HANDOFF_UNAVAILABLE\",\n HANDOFF_VALIDATION_FAILED: \"HANDOFF_VALIDATION_FAILED\",\n HANDOFF_SOURCE_STALE: \"HANDOFF_SOURCE_STALE\",\n HANDOFF_NOT_FOUND: \"HANDOFF_NOT_FOUND\",\n HANDOFF_EXPIRED: \"HANDOFF_EXPIRED\",\n HANDOFF_CURSOR_INVALID: \"HANDOFF_CURSOR_INVALID\",\n HANDOFF_RESPONSE_TOO_LARGE: \"HANDOFF_RESPONSE_TOO_LARGE\",\n BRIDGE_UNAUTHORIZED: \"BRIDGE_UNAUTHORIZED\",\n BRIDGE_PROTOCOL_MISMATCH: \"BRIDGE_PROTOCOL_MISMATCH\",\n BRIDGE_BUSY: \"BRIDGE_BUSY\",\n EXTERNAL_AGENT_BUSY: \"EXTERNAL_AGENT_BUSY\",\n ACTIVE_ADAPTER_CONFLICT: \"ACTIVE_ADAPTER_CONFLICT\",\n ACTIVE_ADAPTER_LEASE_INVALID: \"ACTIVE_ADAPTER_LEASE_INVALID\",\n ACTIVE_DISPATCH_INVALID: \"ACTIVE_DISPATCH_INVALID\",\n SESSION_NOT_FOUND: \"SESSION_NOT_FOUND\",\n SESSION_AMBIGUOUS: \"SESSION_AMBIGUOUS\",\n SESSION_CLOSED: \"SESSION_CLOSED\",\n WORKTREE_DIRTY: \"WORKTREE_DIRTY\",\n WORKTREE_NOT_REPOSITORY: \"WORKTREE_NOT_REPOSITORY\",\n WORKTREE_OPERATION_IN_PROGRESS: \"WORKTREE_OPERATION_IN_PROGRESS\",\n WORKTREE_CONFLICTED: \"WORKTREE_CONFLICTED\",\n WORKTREE_LOCAL_CHANGES_TOO_LARGE: \"WORKTREE_LOCAL_CHANGES_TOO_LARGE\",\n WORKTREE_UNTRACKED_UNSUPPORTED: \"WORKTREE_UNTRACKED_UNSUPPORTED\",\n WORKTREE_LOCAL_CHANGES_UNSUPPORTED: \"WORKTREE_LOCAL_CHANGES_UNSUPPORTED\",\n TOOL_DENIED: \"TOOL_DENIED\",\n TOOL_INPUT_INVALID: \"TOOL_INPUT_INVALID\",\n TOOL_ARGUMENTS_INVALID: \"TOOL_ARGUMENTS_INVALID\",\n TOOL_CALL_ID_CONFLICT: \"TOOL_CALL_ID_CONFLICT\",\n TOOL_PATH_DENIED: \"TOOL_PATH_DENIED\",\n PATCH_REJECTED: \"PATCH_REJECTED\",\n VALIDATION_FAILED: \"VALIDATION_FAILED\",\n APPLY_CONFLICT: \"APPLY_CONFLICT\",\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\n} as const;\n\nexport const CONTEXTUAL_ASK_ERROR_CODES = Object.freeze([\n \"ASK_DISABLED\",\n \"ASK_SELECTION_REQUIRED\",\n \"ASK_SELECTION_STALE\",\n \"ASK_QUESTION_INVALID\",\n \"ASK_EXECUTOR_UNAVAILABLE\",\n \"ASK_TIMEOUT\",\n \"ASK_CONSENT_REQUIRED\",\n \"ASK_BUSY\",\n \"ASK_IDEMPOTENCY_CONFLICT\",\n \"ASK_SOURCE_SCOPE_DENIED\",\n \"ASK_LIMIT_EXCEEDED\",\n \"ASK_ANSWER_INVALID\",\n \"ASK_WRITE_ATTEMPTED\",\n \"ASK_CANCELLED\",\n \"ASK_RESULT_EXPIRED\",\n \"ASK_PROTOCOL_INCOMPATIBLE\",\n] as const);\n\nexport type ContextualAskErrorCode = (typeof CONTEXTUAL_ASK_ERROR_CODES)[number];\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\nexport const ERROR_CODE_VALUES = Object.freeze(Object.values(ERROR_CODES));\n\nexport function isErrorCode(value: unknown): value is ErrorCode {\n return (\n typeof value === \"string\" &&\n (ERROR_CODE_VALUES as readonly string[]).includes(value)\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// src/protocol/contextual-ask-constants.ts
|
|
2
|
+
var CONTEXTUAL_ASK_SCHEMA_VERSION = 1;
|
|
3
|
+
var CONTEXTUAL_ASK_LIMITS = Object.freeze({
|
|
4
|
+
maximumTargets: 20,
|
|
5
|
+
maximumQuestionCharacters: 4e3,
|
|
6
|
+
maximumAnswerCharacters: 4e4,
|
|
7
|
+
maximumAnswerBlocks: 40,
|
|
8
|
+
maximumSources: 64,
|
|
9
|
+
maximumReadFiles: 32,
|
|
10
|
+
maximumReadBytesPerFile: 64 * 1024,
|
|
11
|
+
maximumReadBytesTotal: 512 * 1024,
|
|
12
|
+
maximumToolCalls: 48,
|
|
13
|
+
maximumModelTurns: 12,
|
|
14
|
+
jobTimeoutMs: 3e5,
|
|
15
|
+
resultTtlMs: 9e5,
|
|
16
|
+
maximumActiveJobsPerSession: 1,
|
|
17
|
+
maximumRetainedResultsPerSession: 1,
|
|
18
|
+
maximumRetainedEvents: 256,
|
|
19
|
+
maximumEventSubscribers: 4,
|
|
20
|
+
eventHeartbeatMs: 15e3,
|
|
21
|
+
maximumRequestBodyBytes: 256 * 1024,
|
|
22
|
+
maximumSearchQueryCharacters: 256,
|
|
23
|
+
maximumSearchResults: 64,
|
|
24
|
+
maximumSearchPreviewCharacters: 500,
|
|
25
|
+
capabilityTimeoutMs: 3e4,
|
|
26
|
+
maximumIdCharacters: 128,
|
|
27
|
+
maximumProfileIdCharacters: 64,
|
|
28
|
+
maximumLabelCharacters: 256,
|
|
29
|
+
maximumRelativePathCharacters: 1024,
|
|
30
|
+
maximumLanguageCharacters: 64,
|
|
31
|
+
maximumPhaseMessageCharacters: 1024,
|
|
32
|
+
maximumExecutors: 32,
|
|
33
|
+
contentHashHexCharacters: 64
|
|
34
|
+
});
|
|
35
|
+
var CONTEXTUAL_ASK_EXECUTOR_KINDS = Object.freeze([
|
|
36
|
+
"configured-key",
|
|
37
|
+
"managed-codex"
|
|
38
|
+
]);
|
|
39
|
+
var CONTEXTUAL_ASK_EXECUTOR_STATES = Object.freeze([
|
|
40
|
+
"ready",
|
|
41
|
+
"degraded",
|
|
42
|
+
"unavailable"
|
|
43
|
+
]);
|
|
44
|
+
var ASK_JOB_STATUSES = Object.freeze([
|
|
45
|
+
"queued",
|
|
46
|
+
"authorizing",
|
|
47
|
+
"running",
|
|
48
|
+
"cancelling",
|
|
49
|
+
"answered",
|
|
50
|
+
"cancelled",
|
|
51
|
+
"failed"
|
|
52
|
+
]);
|
|
53
|
+
var ASK_ANSWER_WARNING_CODES = Object.freeze([
|
|
54
|
+
"insufficient-evidence",
|
|
55
|
+
"partial-context",
|
|
56
|
+
"source-truncated",
|
|
57
|
+
"source-stale"
|
|
58
|
+
]);
|
|
59
|
+
var ASK_EXECUTOR_ANSWER_WARNING_CODES = Object.freeze([
|
|
60
|
+
"insufficient-evidence",
|
|
61
|
+
"partial-context"
|
|
62
|
+
]);
|
|
63
|
+
var ASK_READ_ACTIVITY_STATES = Object.freeze([
|
|
64
|
+
"started",
|
|
65
|
+
"succeeded",
|
|
66
|
+
"failed"
|
|
67
|
+
]);
|
|
68
|
+
var ASK_FILE_COUNT_BUCKETS = Object.freeze(["one", "few", "many"]);
|
|
69
|
+
var ASK_SOURCE_CONFIDENCES = Object.freeze([
|
|
70
|
+
"exact",
|
|
71
|
+
"probable",
|
|
72
|
+
"approximate"
|
|
73
|
+
]);
|
|
74
|
+
var CONTEXTUAL_ASK_PERMISSION_PROFILE = "spotpatch-ask-readonly";
|
|
75
|
+
|
|
76
|
+
export {
|
|
77
|
+
CONTEXTUAL_ASK_SCHEMA_VERSION,
|
|
78
|
+
CONTEXTUAL_ASK_LIMITS,
|
|
79
|
+
CONTEXTUAL_ASK_EXECUTOR_KINDS,
|
|
80
|
+
CONTEXTUAL_ASK_EXECUTOR_STATES,
|
|
81
|
+
ASK_JOB_STATUSES,
|
|
82
|
+
ASK_ANSWER_WARNING_CODES,
|
|
83
|
+
ASK_EXECUTOR_ANSWER_WARNING_CODES,
|
|
84
|
+
ASK_READ_ACTIVITY_STATES,
|
|
85
|
+
ASK_FILE_COUNT_BUCKETS,
|
|
86
|
+
ASK_SOURCE_CONFIDENCES,
|
|
87
|
+
CONTEXTUAL_ASK_PERMISSION_PROFILE
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=chunk-DYTWEIES.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/protocol/contextual-ask-constants.ts"],"sourcesContent":["export const CONTEXTUAL_ASK_SCHEMA_VERSION = 1 as const;\n\nexport const CONTEXTUAL_ASK_LIMITS = Object.freeze({\n maximumTargets: 20,\n maximumQuestionCharacters: 4_000,\n maximumAnswerCharacters: 40_000,\n maximumAnswerBlocks: 40,\n maximumSources: 64,\n maximumReadFiles: 32,\n maximumReadBytesPerFile: 64 * 1_024,\n maximumReadBytesTotal: 512 * 1_024,\n maximumToolCalls: 48,\n maximumModelTurns: 12,\n jobTimeoutMs: 300_000,\n resultTtlMs: 900_000,\n maximumActiveJobsPerSession: 1,\n maximumRetainedResultsPerSession: 1,\n maximumRetainedEvents: 256,\n maximumEventSubscribers: 4,\n eventHeartbeatMs: 15_000,\n maximumRequestBodyBytes: 256 * 1_024,\n maximumSearchQueryCharacters: 256,\n maximumSearchResults: 64,\n maximumSearchPreviewCharacters: 500,\n capabilityTimeoutMs: 30_000,\n maximumIdCharacters: 128,\n maximumProfileIdCharacters: 64,\n maximumLabelCharacters: 256,\n maximumRelativePathCharacters: 1_024,\n maximumLanguageCharacters: 64,\n maximumPhaseMessageCharacters: 1_024,\n maximumExecutors: 32,\n contentHashHexCharacters: 64,\n} as const);\n\nexport const CONTEXTUAL_ASK_EXECUTOR_KINDS = Object.freeze([\n \"configured-key\",\n \"managed-codex\",\n] as const);\nexport type ContextualAskExecutorKind = (typeof CONTEXTUAL_ASK_EXECUTOR_KINDS)[number];\n\nexport const CONTEXTUAL_ASK_EXECUTOR_STATES = Object.freeze([\n \"ready\",\n \"degraded\",\n \"unavailable\",\n] as const);\nexport type ContextualAskExecutorState =\n (typeof CONTEXTUAL_ASK_EXECUTOR_STATES)[number];\n\nexport const ASK_JOB_STATUSES = Object.freeze([\n \"queued\",\n \"authorizing\",\n \"running\",\n \"cancelling\",\n \"answered\",\n \"cancelled\",\n \"failed\",\n] as const);\nexport type AskJobStatus = (typeof ASK_JOB_STATUSES)[number];\n\nexport const ASK_ANSWER_WARNING_CODES = Object.freeze([\n \"insufficient-evidence\",\n \"partial-context\",\n \"source-truncated\",\n \"source-stale\",\n] as const);\nexport type AskAnswerWarningCode = (typeof ASK_ANSWER_WARNING_CODES)[number];\n\n/** Warnings an executor may declare from its own evidence assessment. */\nexport const ASK_EXECUTOR_ANSWER_WARNING_CODES = Object.freeze([\n \"insufficient-evidence\",\n \"partial-context\",\n] as const satisfies readonly AskAnswerWarningCode[]);\nexport type AskExecutorAnswerWarningCode =\n (typeof ASK_EXECUTOR_ANSWER_WARNING_CODES)[number];\n\nexport const ASK_READ_ACTIVITY_STATES = Object.freeze([\n \"started\",\n \"succeeded\",\n \"failed\",\n] as const);\nexport type AskReadActivityState = (typeof ASK_READ_ACTIVITY_STATES)[number];\n\nexport const ASK_FILE_COUNT_BUCKETS = Object.freeze([\"one\", \"few\", \"many\"] as const);\nexport type AskFileCountBucket = (typeof ASK_FILE_COUNT_BUCKETS)[number];\n\nexport const ASK_SOURCE_CONFIDENCES = Object.freeze([\n \"exact\",\n \"probable\",\n \"approximate\",\n] as const);\nexport type AskSourceConfidence = (typeof ASK_SOURCE_CONFIDENCES)[number];\n\nexport const CONTEXTUAL_ASK_PERMISSION_PROFILE = \"spotpatch-ask-readonly\" as const;\n"],"mappings":";AAAO,IAAM,gCAAgC;AAEtC,IAAM,wBAAwB,OAAO,OAAO;AAAA,EACjD,gBAAgB;AAAA,EAChB,2BAA2B;AAAA,EAC3B,yBAAyB;AAAA,EACzB,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,yBAAyB,KAAK;AAAA,EAC9B,uBAAuB,MAAM;AAAA,EAC7B,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,6BAA6B;AAAA,EAC7B,kCAAkC;AAAA,EAClC,uBAAuB;AAAA,EACvB,yBAAyB;AAAA,EACzB,kBAAkB;AAAA,EAClB,yBAAyB,MAAM;AAAA,EAC/B,8BAA8B;AAAA,EAC9B,sBAAsB;AAAA,EACtB,gCAAgC;AAAA,EAChC,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,4BAA4B;AAAA,EAC5B,wBAAwB;AAAA,EACxB,+BAA+B;AAAA,EAC/B,2BAA2B;AAAA,EAC3B,+BAA+B;AAAA,EAC/B,kBAAkB;AAAA,EAClB,0BAA0B;AAC5B,CAAU;AAEH,IAAM,gCAAgC,OAAO,OAAO;AAAA,EACzD;AAAA,EACA;AACF,CAAU;AAGH,IAAM,iCAAiC,OAAO,OAAO;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAIH,IAAM,mBAAmB,OAAO,OAAO;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAGH,IAAM,2BAA2B,OAAO,OAAO;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAIH,IAAM,oCAAoC,OAAO,OAAO;AAAA,EAC7D;AAAA,EACA;AACF,CAAoD;AAI7C,IAAM,2BAA2B,OAAO,OAAO;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAGH,IAAM,yBAAyB,OAAO,OAAO,CAAC,OAAO,OAAO,MAAM,CAAU;AAG5E,IAAM,yBAAyB,OAAO,OAAO;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAGH,IAAM,oCAAoC;","names":[]}
|
|
@@ -10,6 +10,8 @@ var SPOTPATCH_ENDPOINTS = Object.freeze({
|
|
|
10
10
|
agentCapability: `${SPOTPATCH_API_BASE}/agent/capability`,
|
|
11
11
|
agentWorkspaceHealth: `${SPOTPATCH_API_BASE}/agent/workspace-health`,
|
|
12
12
|
agentJobs: `${SPOTPATCH_API_BASE}/agent/jobs`,
|
|
13
|
+
askCapability: `${SPOTPATCH_API_BASE}/ask/capability`,
|
|
14
|
+
askJobs: `${SPOTPATCH_API_BASE}/ask/jobs`,
|
|
13
15
|
externalHandoffCapability: `${SPOTPATCH_API_BASE}/external-handoff/capability`,
|
|
14
16
|
externalHandoffPublish: `${SPOTPATCH_API_BASE}/external-handoff/publish`,
|
|
15
17
|
externalHandoffStatus: `${SPOTPATCH_API_BASE}/external-handoff/status`,
|
|
@@ -24,11 +26,23 @@ var SPOTPATCH_ENDPOINTS = Object.freeze({
|
|
|
24
26
|
function getAgentJobEndpoint(jobId, action) {
|
|
25
27
|
return `${SPOTPATCH_ENDPOINTS.agentJobs}/${encodeURIComponent(jobId)}/${action}`;
|
|
26
28
|
}
|
|
29
|
+
function getAskJobEndpoint(jobId, action, options = {}) {
|
|
30
|
+
const endpoint = `${SPOTPATCH_ENDPOINTS.askJobs}/${encodeURIComponent(jobId)}/${action}`;
|
|
31
|
+
if (action !== "events" && options.afterSequence !== void 0) {
|
|
32
|
+
throw new RangeError("afterSequence is only valid for the events endpoint.");
|
|
33
|
+
}
|
|
34
|
+
if (options.afterSequence === void 0) return endpoint;
|
|
35
|
+
if (!Number.isSafeInteger(options.afterSequence) || options.afterSequence < 0) {
|
|
36
|
+
throw new RangeError("afterSequence must be a non-negative safe integer.");
|
|
37
|
+
}
|
|
38
|
+
return `${endpoint}?afterSequence=${String(options.afterSequence)}`;
|
|
39
|
+
}
|
|
27
40
|
|
|
28
41
|
export {
|
|
29
42
|
SPOTPATCH_API_BASE,
|
|
30
43
|
SPOTPATCH_TOKEN_HEADER,
|
|
31
44
|
SPOTPATCH_ENDPOINTS,
|
|
32
|
-
getAgentJobEndpoint
|
|
45
|
+
getAgentJobEndpoint,
|
|
46
|
+
getAskJobEndpoint
|
|
33
47
|
};
|
|
34
|
-
//# sourceMappingURL=chunk-
|
|
48
|
+
//# sourceMappingURL=chunk-FPDSZDP2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/protocol/endpoints.ts"],"sourcesContent":["export const SPOTPATCH_API_BASE = \"/__spotpatch/v1\" as const;\nexport const SPOTPATCH_TOKEN_HEADER = \"X-SpotPatch-Token\" as const;\n\nexport const SPOTPATCH_ENDPOINTS = Object.freeze({\n bootstrap: `${SPOTPATCH_API_BASE}/bootstrap`,\n sourceContext: `${SPOTPATCH_API_BASE}/source-context`,\n openEditor: `${SPOTPATCH_API_BASE}/open-editor`,\n dataFlowComponentReport: `${SPOTPATCH_API_BASE}/data-flow/component-report`,\n dataFlowPageReport: `${SPOTPATCH_API_BASE}/data-flow/page-report`,\n agentCapability: `${SPOTPATCH_API_BASE}/agent/capability`,\n agentWorkspaceHealth: `${SPOTPATCH_API_BASE}/agent/workspace-health`,\n agentJobs: `${SPOTPATCH_API_BASE}/agent/jobs`,\n askCapability: `${SPOTPATCH_API_BASE}/ask/capability`,\n askJobs: `${SPOTPATCH_API_BASE}/ask/jobs`,\n externalHandoffCapability: `${SPOTPATCH_API_BASE}/external-handoff/capability`,\n externalHandoffPublish: `${SPOTPATCH_API_BASE}/external-handoff/publish`,\n externalHandoffStatus: `${SPOTPATCH_API_BASE}/external-handoff/status`,\n externalHandoffResolveDelivery: `${SPOTPATCH_API_BASE}/external-handoff/resolve-delivery`,\n externalAgentControlStatus: `${SPOTPATCH_API_BASE}/external-agent/control/status`,\n externalAgentControlConnect: `${SPOTPATCH_API_BASE}/external-agent/control/connect`,\n externalAgentControlDisconnect: `${SPOTPATCH_API_BASE}/external-agent/control/disconnect`,\n externalAgentControlCancel: `${SPOTPATCH_API_BASE}/external-agent/control/cancel`,\n externalAgentEvents: `${SPOTPATCH_API_BASE}/external-agent/events`,\n externalAgentResult: `${SPOTPATCH_API_BASE}/external-agent/result`,\n});\n\nexport type AgentJobAction = \"events\" | \"result\" | \"cancel\" | \"apply\" | \"revert\";\nexport type AskJobAction = \"events\" | \"result\" | \"cancel\";\n\nexport function getAgentJobEndpoint(jobId: string, action: AgentJobAction): string {\n return `${SPOTPATCH_ENDPOINTS.agentJobs}/${encodeURIComponent(jobId)}/${action}`;\n}\n\nexport function getAskJobEndpoint(\n jobId: string,\n action: AskJobAction,\n options: Readonly<{ afterSequence?: number }> = {},\n): string {\n const endpoint = `${SPOTPATCH_ENDPOINTS.askJobs}/${encodeURIComponent(jobId)}/${action}`;\n if (action !== \"events\" && options.afterSequence !== undefined) {\n throw new RangeError(\"afterSequence is only valid for the events endpoint.\");\n }\n if (options.afterSequence === undefined) return endpoint;\n if (!Number.isSafeInteger(options.afterSequence) || options.afterSequence < 0) {\n throw new RangeError(\"afterSequence must be a non-negative safe integer.\");\n }\n return `${endpoint}?afterSequence=${String(options.afterSequence)}`;\n}\n"],"mappings":";AAAO,IAAM,qBAAqB;AAC3B,IAAM,yBAAyB;AAE/B,IAAM,sBAAsB,OAAO,OAAO;AAAA,EAC/C,WAAW,GAAG,kBAAkB;AAAA,EAChC,eAAe,GAAG,kBAAkB;AAAA,EACpC,YAAY,GAAG,kBAAkB;AAAA,EACjC,yBAAyB,GAAG,kBAAkB;AAAA,EAC9C,oBAAoB,GAAG,kBAAkB;AAAA,EACzC,iBAAiB,GAAG,kBAAkB;AAAA,EACtC,sBAAsB,GAAG,kBAAkB;AAAA,EAC3C,WAAW,GAAG,kBAAkB;AAAA,EAChC,eAAe,GAAG,kBAAkB;AAAA,EACpC,SAAS,GAAG,kBAAkB;AAAA,EAC9B,2BAA2B,GAAG,kBAAkB;AAAA,EAChD,wBAAwB,GAAG,kBAAkB;AAAA,EAC7C,uBAAuB,GAAG,kBAAkB;AAAA,EAC5C,gCAAgC,GAAG,kBAAkB;AAAA,EACrD,4BAA4B,GAAG,kBAAkB;AAAA,EACjD,6BAA6B,GAAG,kBAAkB;AAAA,EAClD,gCAAgC,GAAG,kBAAkB;AAAA,EACrD,4BAA4B,GAAG,kBAAkB;AAAA,EACjD,qBAAqB,GAAG,kBAAkB;AAAA,EAC1C,qBAAqB,GAAG,kBAAkB;AAC5C,CAAC;AAKM,SAAS,oBAAoB,OAAe,QAAgC;AACjF,SAAO,GAAG,oBAAoB,SAAS,IAAI,mBAAmB,KAAK,CAAC,IAAI,MAAM;AAChF;AAEO,SAAS,kBACd,OACA,QACA,UAAgD,CAAC,GACzC;AACR,QAAM,WAAW,GAAG,oBAAoB,OAAO,IAAI,mBAAmB,KAAK,CAAC,IAAI,MAAM;AACtF,MAAI,WAAW,YAAY,QAAQ,kBAAkB,QAAW;AAC9D,UAAM,IAAI,WAAW,sDAAsD;AAAA,EAC7E;AACA,MAAI,QAAQ,kBAAkB,OAAW,QAAO;AAChD,MAAI,CAAC,OAAO,cAAc,QAAQ,aAAa,KAAK,QAAQ,gBAAgB,GAAG;AAC7E,UAAM,IAAI,WAAW,oDAAoD;AAAA,EAC3E;AACA,SAAO,GAAG,QAAQ,kBAAkB,OAAO,QAAQ,aAAa,CAAC;AACnE;","names":[]}
|