crewly 1.20.376 → 1.20.379
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/config/hooks/destructive-git-guard/guard.mjs +168 -9
- package/config/hooks/destructive-git-guard/local-gates.json +13 -0
- package/config/skills/agent/core/record-local-gate/SKILL.md +46 -0
- package/config/skills/agent/core/record-local-gate/execute.sh +87 -0
- package/config/skills/agent/core/record-local-gate/execute.test.sh +64 -0
- package/config/skills/agent/core/record-tl-verification/SKILL.md +39 -0
- package/config/skills/agent/core/record-tl-verification/execute.sh +71 -0
- package/config/skills/agent/core/record-tl-verification/execute.test.sh +56 -0
- package/dist/backend/backend/src/constants.d.ts +64 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +64 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts +1 -1
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.js +1 -1
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts +17 -0
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js +49 -0
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.d.ts +2 -0
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.js +5 -1
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +7 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/trace/trace.controller.js +60 -7
- package/dist/backend/backend/src/controllers/trace/trace.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +23 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +5 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +24 -1
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment.service.js +49 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts +22 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +64 -3
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +30 -2
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +63 -7
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-routine-nudge.d.ts +59 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-routine-nudge.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-routine-nudge.js +123 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-routine-nudge.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-pulls-weekly.d.ts +173 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-pulls-weekly.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-pulls-weekly.js +263 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-pulls-weekly.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-pulls-weekly.loader.d.ts +35 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-pulls-weekly.loader.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-pulls-weekly.loader.js +47 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-pulls-weekly.loader.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.d.ts +20 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.js +30 -3
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.js.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.d.ts +7 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.js +8 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.js.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts +39 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js +93 -2
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts +13 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/verified-spot-check.d.ts +110 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/verified-spot-check.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/verified-spot-check.js +243 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/verified-spot-check.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/verified-spot-check.loader.d.ts +27 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/verified-spot-check.loader.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/verified-spot-check.loader.js +45 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/verified-spot-check.loader.js.map +1 -0
- package/dist/backend/backend/src/types/experiment.types.d.ts +14 -0
- package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/experiment.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +64 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +64 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +5 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/frontend/dist/assets/{index-b4db6abe.js → index-19c47468.js} +76 -76
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -8,8 +8,13 @@
|
|
|
8
8
|
*/
|
|
9
9
|
/** What happened to one ask. */
|
|
10
10
|
export type ReceiptOutcome =
|
|
11
|
-
/** Ticket done */
|
|
11
|
+
/** Ticket done, and nothing says it closed by silence (the owner confirmed it, or it needed no OK) */
|
|
12
12
|
'done'
|
|
13
|
+
/**
|
|
14
|
+
* Ticket done because nobody objected before the auto-accept deadline
|
|
15
|
+
* (#1316): accepted, never checked by the owner
|
|
16
|
+
*/
|
|
17
|
+
| 'auto_accepted'
|
|
13
18
|
/** Answered; waiting for the owner's OK (待验收) */
|
|
14
19
|
| 'to_review'
|
|
15
20
|
/** Someone is on it */
|
|
@@ -134,6 +139,11 @@ export interface ReceiptHighlight {
|
|
|
134
139
|
summary: string;
|
|
135
140
|
/** Deliverables found in the answer (the line prefers tickets that have some) */
|
|
136
141
|
deliverableCount: number;
|
|
142
|
+
/**
|
|
143
|
+
* It closed because nobody objected in time, not because the owner
|
|
144
|
+
* confirmed it (#1316) — the line says so
|
|
145
|
+
*/
|
|
146
|
+
acceptedBySilence: boolean;
|
|
137
147
|
completedAt: string;
|
|
138
148
|
}
|
|
139
149
|
/**
|
|
@@ -192,6 +202,8 @@ export interface OwnerReceiptState {
|
|
|
192
202
|
lastSentAt?: string;
|
|
193
203
|
/** Local date (YYYY-MM-DD) of the last send, so one day gets one receipt */
|
|
194
204
|
lastSentLocalDate?: string;
|
|
205
|
+
/** Local date (YYYY-MM-DD) the weekly pulls line last went out (#1387), so one week gets one line */
|
|
206
|
+
lastPullsLocalDate?: string;
|
|
195
207
|
/** The one-time format ask (#856 follow-up), once it was asked */
|
|
196
208
|
formatAsk?: ReceiptFormatAsk;
|
|
197
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner-receipt.types.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,gCAAgC;AAChC,MAAM,MAAM,cAAc;AACxB,
|
|
1
|
+
{"version":3,"file":"owner-receipt.types.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner-receipt.types.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"owner-receipt.types.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAsBhE,sCAAsC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD,MAAM;IACN,eAAe;IACf,WAAW;IACX,aAAa;IACb,SAAS;IACT,SAAS;IACT,WAAW;CACH,CAAC;AAuMX,0BAA0B;AAC1B,MAAM,YAAY,GAAG,2BAA2B,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAAW;IACzC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAA6B,EAC7B,KAAc;IAEd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IAC3G,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,MAAM,IAAI,GAAyB,EAAE,GAAG,OAAO,EAAE,CAAC;IAClD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;QACnG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC;QACpI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6DAA6D,EAAE,CAAC;QAC7H,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC7B,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,uBAAuB,CAAC,YAAY;QAC1C,QAAQ,EAAE,uBAAuB,CAAC,gBAAgB;KACnD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verified-work spot-check (#1315, phase 1) — once a day, pick a few WorkItems
|
|
3
|
+
* that were verified in the last 24 hours and re-check that every file
|
|
4
|
+
* artifact recorded as their evidence still exists.
|
|
5
|
+
*
|
|
6
|
+
* Read-only: it never changes a WorkItem and never re-runs a command (that is
|
|
7
|
+
* a later phase). Evidence that is not a local file (URLs, commands, blocked
|
|
8
|
+
* reports) is counted as skipped, not as a pass or a failure. Pure apart from
|
|
9
|
+
* the injected file check and random source, so a day's sample is repeatable.
|
|
10
|
+
*
|
|
11
|
+
* @module services/v3/owner-receipt/verified-spot-check
|
|
12
|
+
*/
|
|
13
|
+
import type { WorkItem } from '../../../types/v2/work-item.types.js';
|
|
14
|
+
/** One recorded artifact that is no longer there. */
|
|
15
|
+
export interface SpotCheckDiscrepancy {
|
|
16
|
+
/** WorkItem id (for the log and the API; the owner line does not show it) */
|
|
17
|
+
workItemId: string;
|
|
18
|
+
/** Team name, or the unknown-team label */
|
|
19
|
+
team: string;
|
|
20
|
+
/** The artifact path as recorded */
|
|
21
|
+
artifactPath: string;
|
|
22
|
+
}
|
|
23
|
+
/** Result of one spot-check run. */
|
|
24
|
+
export interface SpotCheckResult {
|
|
25
|
+
/** When the run was made (ISO) */
|
|
26
|
+
at: string;
|
|
27
|
+
/** Verified WorkItems in the window that had a local file artifact to look at */
|
|
28
|
+
eligible: number;
|
|
29
|
+
/** WorkItems picked */
|
|
30
|
+
sampled: number;
|
|
31
|
+
/** File artifacts looked at on the disk */
|
|
32
|
+
artifactsChecked: number;
|
|
33
|
+
/** Evidence entries not checked: URLs, commands, blocked reports, relative paths with no base */
|
|
34
|
+
skipped: number;
|
|
35
|
+
/** Of `skipped`: file artifacts inside a worktree the janitor already removed ("worktree cleaned") */
|
|
36
|
+
worktreeCleaned: number;
|
|
37
|
+
discrepancies: SpotCheckDiscrepancy[];
|
|
38
|
+
}
|
|
39
|
+
/** Inputs of {@link runSpotCheck}. */
|
|
40
|
+
export interface SpotCheckInput {
|
|
41
|
+
workItems: readonly WorkItem[];
|
|
42
|
+
now: Date;
|
|
43
|
+
/** Team name of an agent session, or null */
|
|
44
|
+
teamOf: (session: string) => string | null;
|
|
45
|
+
/** Whether a file or directory exists at an absolute path */
|
|
46
|
+
exists: (absolutePath: string) => Promise<boolean>;
|
|
47
|
+
/** Random number in [0, 1); default is a generator seeded by the day */
|
|
48
|
+
random?: () => number;
|
|
49
|
+
/** Items to pick (default {@link OWNER_RECEIPT_CONSTANTS}.VERIFIED_SPOT_CHECK.SAMPLE_SIZE) */
|
|
50
|
+
sampleSize?: number;
|
|
51
|
+
/** Home directory for `~/` paths */
|
|
52
|
+
homeDir?: string;
|
|
53
|
+
}
|
|
54
|
+
/** A recorded file artifact to look at. */
|
|
55
|
+
interface FileTarget {
|
|
56
|
+
raw: string;
|
|
57
|
+
/** Absolute path candidates, in order; empty = cannot be resolved */
|
|
58
|
+
candidates: string[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Deterministic random source (mulberry32).
|
|
62
|
+
*
|
|
63
|
+
* @param seed - Any integer
|
|
64
|
+
* @returns Generator of numbers in [0, 1)
|
|
65
|
+
*/
|
|
66
|
+
export declare function seededRandom(seed: number): () => number;
|
|
67
|
+
/**
|
|
68
|
+
* Seed for a calendar day, so a second run on the same day picks the same items.
|
|
69
|
+
*
|
|
70
|
+
* @param now - The run time
|
|
71
|
+
* @returns Integer seed
|
|
72
|
+
*/
|
|
73
|
+
export declare function daySeed(now: Date): number;
|
|
74
|
+
/**
|
|
75
|
+
* Split a WorkItem's recorded evidence into file artifacts to look at and a
|
|
76
|
+
* count of entries that are not checked.
|
|
77
|
+
*
|
|
78
|
+
* @param wi - WorkItem
|
|
79
|
+
* @param homeDir - Home directory for `~/`
|
|
80
|
+
* @returns Targets and the skipped count
|
|
81
|
+
*/
|
|
82
|
+
export declare function fileTargetsOf(wi: WorkItem, homeDir: string): {
|
|
83
|
+
targets: FileTarget[];
|
|
84
|
+
skipped: number;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* The worktree root an absolute path lies in: the WorkItem's recorded
|
|
88
|
+
* worktree, else the directory after a known worktree marker.
|
|
89
|
+
*
|
|
90
|
+
* @param abs - Absolute artifact path
|
|
91
|
+
* @param wi - The WorkItem
|
|
92
|
+
* @returns The worktree root, or null when the path is outside any worktree
|
|
93
|
+
*/
|
|
94
|
+
export declare function worktreeRootOf(abs: string, wi: WorkItem): string | null;
|
|
95
|
+
/**
|
|
96
|
+
* Run the spot-check.
|
|
97
|
+
*
|
|
98
|
+
* @param input - WorkItems, clock, team lookup, file check
|
|
99
|
+
* @returns What was sampled and what is missing
|
|
100
|
+
*/
|
|
101
|
+
export declare function runSpotCheck(input: SpotCheckInput): Promise<SpotCheckResult>;
|
|
102
|
+
/**
|
|
103
|
+
* The owner line: always present, zero is said out loud. No WorkItem ids.
|
|
104
|
+
*
|
|
105
|
+
* @param r - The run
|
|
106
|
+
* @returns Slack mrkdwn, one to five lines
|
|
107
|
+
*/
|
|
108
|
+
export declare function renderSpotCheck(r: SpotCheckResult): string;
|
|
109
|
+
export {};
|
|
110
|
+
//# sourceMappingURL=verified-spot-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verified-spot-check.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/verified-spot-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAGrE,qDAAqD;AACrD,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,gBAAgB,EAAE,MAAM,CAAC;IACzB,iGAAiG;IACjG,OAAO,EAAE,MAAM,CAAC;IAChB,sGAAsG;IACtG,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,oBAAoB,EAAE,CAAC;CACvC;AAED,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC/B,GAAG,EAAE,IAAI,CAAC;IACV,6CAA6C;IAC7C,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC3C,6DAA6D;IAC7D,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB,8FAA8F;IAC9F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,2CAA2C;AAC3C,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CASvD;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAKzC;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA+BvG;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAavE;AAeD;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAmFlF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAU1D"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verified-work spot-check (#1315, phase 1) — once a day, pick a few WorkItems
|
|
3
|
+
* that were verified in the last 24 hours and re-check that every file
|
|
4
|
+
* artifact recorded as their evidence still exists.
|
|
5
|
+
*
|
|
6
|
+
* Read-only: it never changes a WorkItem and never re-runs a command (that is
|
|
7
|
+
* a later phase). Evidence that is not a local file (URLs, commands, blocked
|
|
8
|
+
* reports) is counted as skipped, not as a pass or a failure. Pure apart from
|
|
9
|
+
* the injected file check and random source, so a day's sample is repeatable.
|
|
10
|
+
*
|
|
11
|
+
* @module services/v3/owner-receipt/verified-spot-check
|
|
12
|
+
*/
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
import { fileURLToPath } from 'url';
|
|
15
|
+
import { OWNER_RECEIPT_CONSTANTS, WORKTREE_CONSTANTS } from '../../../constants.js';
|
|
16
|
+
import { artifactBaseDirs } from '../../task-pool/completion-evidence.service.js';
|
|
17
|
+
/**
|
|
18
|
+
* Deterministic random source (mulberry32).
|
|
19
|
+
*
|
|
20
|
+
* @param seed - Any integer
|
|
21
|
+
* @returns Generator of numbers in [0, 1)
|
|
22
|
+
*/
|
|
23
|
+
export function seededRandom(seed) {
|
|
24
|
+
let a = seed >>> 0;
|
|
25
|
+
return () => {
|
|
26
|
+
a = (a + 0x6d2b79f5) >>> 0;
|
|
27
|
+
let t = a;
|
|
28
|
+
t = Math.imul(t ^ (t >>> 15), t | 1);
|
|
29
|
+
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
|
|
30
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Seed for a calendar day, so a second run on the same day picks the same items.
|
|
35
|
+
*
|
|
36
|
+
* @param now - The run time
|
|
37
|
+
* @returns Integer seed
|
|
38
|
+
*/
|
|
39
|
+
export function daySeed(now) {
|
|
40
|
+
const day = now.toISOString().slice(0, 10);
|
|
41
|
+
let h = 2166136261;
|
|
42
|
+
for (let i = 0; i < day.length; i++)
|
|
43
|
+
h = Math.imul(h ^ day.charCodeAt(i), 16777619);
|
|
44
|
+
return h >>> 0;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Split a WorkItem's recorded evidence into file artifacts to look at and a
|
|
48
|
+
* count of entries that are not checked.
|
|
49
|
+
*
|
|
50
|
+
* @param wi - WorkItem
|
|
51
|
+
* @param homeDir - Home directory for `~/`
|
|
52
|
+
* @returns Targets and the skipped count
|
|
53
|
+
*/
|
|
54
|
+
export function fileTargetsOf(wi, homeDir) {
|
|
55
|
+
const evidence = wi.output?.['evidence'];
|
|
56
|
+
const targets = [];
|
|
57
|
+
let skipped = 0;
|
|
58
|
+
if (!Array.isArray(evidence))
|
|
59
|
+
return { targets, skipped };
|
|
60
|
+
const bases = artifactBaseDirs(wi);
|
|
61
|
+
for (const entry of evidence) {
|
|
62
|
+
const e = (typeof entry === 'object' && entry !== null ? entry : {});
|
|
63
|
+
const raw = e['type'] === 'artifact' && typeof e['path'] === 'string' ? e['path'].trim() : '';
|
|
64
|
+
if (!raw) {
|
|
65
|
+
skipped += 1; // a command or a blocked report
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const scheme = /^([a-z][a-z0-9+.-]*:)\/\//i.exec(raw)?.[1]?.toLowerCase();
|
|
69
|
+
let local = raw;
|
|
70
|
+
if (scheme === 'file:') {
|
|
71
|
+
try {
|
|
72
|
+
local = fileURLToPath(raw);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
skipped += 1;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else if (scheme) {
|
|
80
|
+
skipped += 1; // http(s) or another URL: not a file on this machine
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
else if (raw === '~' || raw.startsWith('~/')) {
|
|
84
|
+
local = path.join(homeDir, raw.slice(1));
|
|
85
|
+
}
|
|
86
|
+
targets.push({ raw, candidates: path.isAbsolute(local) ? [local] : bases.map((b) => path.resolve(b, local)) });
|
|
87
|
+
}
|
|
88
|
+
return { targets, skipped };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The worktree root an absolute path lies in: the WorkItem's recorded
|
|
92
|
+
* worktree, else the directory after a known worktree marker.
|
|
93
|
+
*
|
|
94
|
+
* @param abs - Absolute artifact path
|
|
95
|
+
* @param wi - The WorkItem
|
|
96
|
+
* @returns The worktree root, or null when the path is outside any worktree
|
|
97
|
+
*/
|
|
98
|
+
export function worktreeRootOf(abs, wi) {
|
|
99
|
+
for (const base of artifactBaseDirsOfWorktree(wi)) {
|
|
100
|
+
if (abs === base || abs.startsWith(base + path.sep))
|
|
101
|
+
return base;
|
|
102
|
+
}
|
|
103
|
+
const norm = abs.split(path.sep).join('/');
|
|
104
|
+
for (const marker of OWNER_RECEIPT_CONSTANTS.VERIFIED_SPOT_CHECK.WORKTREE_MARKERS) {
|
|
105
|
+
const needle = `/${marker}/`;
|
|
106
|
+
const at = norm.indexOf(needle);
|
|
107
|
+
if (at < 0)
|
|
108
|
+
continue;
|
|
109
|
+
const rest = norm.slice(at + needle.length).split('/')[0];
|
|
110
|
+
if (rest)
|
|
111
|
+
return norm.slice(0, at + needle.length) + rest;
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Recorded worktree paths of a WorkItem (`metadata.worktree.path` / `workdir`).
|
|
117
|
+
*
|
|
118
|
+
* @param wi - The WorkItem
|
|
119
|
+
* @returns Absolute paths
|
|
120
|
+
*/
|
|
121
|
+
function artifactBaseDirsOfWorktree(wi) {
|
|
122
|
+
const wt = (wi.metadata ?? {})[WORKTREE_CONSTANTS.METADATA_KEY];
|
|
123
|
+
if (typeof wt !== 'object' || wt === null)
|
|
124
|
+
return [];
|
|
125
|
+
const rec = wt;
|
|
126
|
+
return ['path', 'workdir'].map((k) => rec[k]).filter((v) => typeof v === 'string' && path.isAbsolute(v));
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Run the spot-check.
|
|
130
|
+
*
|
|
131
|
+
* @param input - WorkItems, clock, team lookup, file check
|
|
132
|
+
* @returns What was sampled and what is missing
|
|
133
|
+
*/
|
|
134
|
+
export async function runSpotCheck(input) {
|
|
135
|
+
const C = OWNER_RECEIPT_CONSTANTS.VERIFIED_SPOT_CHECK;
|
|
136
|
+
const to = input.now.getTime();
|
|
137
|
+
const from = to - C.WINDOW_MS;
|
|
138
|
+
const homeDir = input.homeDir ?? '';
|
|
139
|
+
const eligible = [];
|
|
140
|
+
for (const wi of input.workItems) {
|
|
141
|
+
if (wi.status !== 'verified' || !wi.completedAt)
|
|
142
|
+
continue;
|
|
143
|
+
const t = Date.parse(wi.completedAt);
|
|
144
|
+
if (!Number.isFinite(t) || t < from || t > to)
|
|
145
|
+
continue;
|
|
146
|
+
const { targets, skipped } = fileTargetsOf(wi, homeDir);
|
|
147
|
+
if (targets.length === 0)
|
|
148
|
+
continue;
|
|
149
|
+
eligible.push({ wi, targets, skipped });
|
|
150
|
+
}
|
|
151
|
+
// Stable order first, so the same seed picks the same items.
|
|
152
|
+
eligible.sort((a, b) => a.wi.id.localeCompare(b.wi.id));
|
|
153
|
+
const rand = input.random ?? seededRandom(daySeed(input.now));
|
|
154
|
+
const picked = [...eligible];
|
|
155
|
+
for (let i = picked.length - 1; i > 0; i--) {
|
|
156
|
+
const j = Math.floor(rand() * (i + 1));
|
|
157
|
+
[picked[i], picked[j]] = [picked[j], picked[i]];
|
|
158
|
+
}
|
|
159
|
+
const sample = picked.slice(0, Math.max(0, input.sampleSize ?? C.SAMPLE_SIZE));
|
|
160
|
+
const result = {
|
|
161
|
+
at: input.now.toISOString(),
|
|
162
|
+
eligible: eligible.length,
|
|
163
|
+
sampled: sample.length,
|
|
164
|
+
artifactsChecked: 0,
|
|
165
|
+
skipped: 0,
|
|
166
|
+
worktreeCleaned: 0,
|
|
167
|
+
discrepancies: [],
|
|
168
|
+
};
|
|
169
|
+
for (const { wi, targets, skipped } of sample) {
|
|
170
|
+
result.skipped += skipped;
|
|
171
|
+
const team = (wi.target ? input.teamOf(wi.target) : null) ?? OWNER_RECEIPT_CONSTANTS.UNASSIGNED_TEAM;
|
|
172
|
+
for (const target of targets) {
|
|
173
|
+
if (target.candidates.length === 0) {
|
|
174
|
+
result.skipped += 1; // relative path and no project or worktree to resolve it against
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
result.artifactsChecked += 1;
|
|
178
|
+
let found = false;
|
|
179
|
+
for (const c of target.candidates) {
|
|
180
|
+
try {
|
|
181
|
+
if (await input.exists(c)) {
|
|
182
|
+
found = true;
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// an unreadable path counts as not found
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (!found) {
|
|
191
|
+
// The janitor removes worktrees after merge: a file inside a worktree
|
|
192
|
+
// that is itself gone was cleaned, not lost.
|
|
193
|
+
let cleaned = true;
|
|
194
|
+
for (const c of target.candidates) {
|
|
195
|
+
const root = worktreeRootOf(c, wi);
|
|
196
|
+
let rootGone = false;
|
|
197
|
+
if (root) {
|
|
198
|
+
try {
|
|
199
|
+
rootGone = !(await input.exists(root));
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
rootGone = false;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (!rootGone) {
|
|
206
|
+
cleaned = false; // outside any worktree, or its worktree still exists: really missing
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (cleaned) {
|
|
211
|
+
result.artifactsChecked -= 1;
|
|
212
|
+
result.skipped += 1;
|
|
213
|
+
result.worktreeCleaned += 1;
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (!found)
|
|
218
|
+
result.discrepancies.push({ workItemId: wi.id, team, artifactPath: target.raw });
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* The owner line: always present, zero is said out loud. No WorkItem ids.
|
|
225
|
+
*
|
|
226
|
+
* @param r - The run
|
|
227
|
+
* @returns Slack mrkdwn, one to five lines
|
|
228
|
+
*/
|
|
229
|
+
export function renderSpotCheck(r) {
|
|
230
|
+
const d = r.discrepancies.length;
|
|
231
|
+
const noun = d === 1 ? 'discrepancy' : 'discrepancies';
|
|
232
|
+
const head = `*Spot-check of verified work:* ${r.sampled} sampled, ${d} ${noun}`;
|
|
233
|
+
if (r.sampled === 0)
|
|
234
|
+
return `${head} (nothing verified in the last day had a file to look at)`;
|
|
235
|
+
if (d === 0)
|
|
236
|
+
return head;
|
|
237
|
+
const max = OWNER_RECEIPT_CONSTANTS.VERIFIED_SPOT_CHECK.MAX_LISTED;
|
|
238
|
+
const lines = r.discrepancies.slice(0, max).map((x) => `• ${x.team}: \`${x.artifactPath}\` is gone`);
|
|
239
|
+
if (d > max)
|
|
240
|
+
lines.push(`• +${d - max} more`);
|
|
241
|
+
return [head, ...lines].join('\n');
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=verified-spot-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verified-spot-check.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/verified-spot-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loader for the verified-work spot-check (#1315): reads the WorkItems and the
|
|
3
|
+
* team index, checks files on the real disk, and hands them to the pure
|
|
4
|
+
* {@link runSpotCheck}.
|
|
5
|
+
*
|
|
6
|
+
* @module services/v3/owner-receipt/verified-spot-check.loader
|
|
7
|
+
*/
|
|
8
|
+
import type { WorkItem } from '../../../types/v2/work-item.types.js';
|
|
9
|
+
import { type SpotCheckResult } from './verified-spot-check.js';
|
|
10
|
+
/** Where the loader reads from. */
|
|
11
|
+
export interface SpotCheckLoaderDeps {
|
|
12
|
+
listWorkItems: () => Promise<WorkItem[]>;
|
|
13
|
+
/** session → team name */
|
|
14
|
+
loadTeamIndex: () => Promise<Map<string, string>>;
|
|
15
|
+
/** File check, injectable for tests; default is `fs.stat` */
|
|
16
|
+
exists?: (absolutePath: string) => Promise<boolean>;
|
|
17
|
+
/** Random source, injectable for tests */
|
|
18
|
+
random?: () => number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Build the `loadSpotCheck` dependency of the owner receipt service.
|
|
22
|
+
*
|
|
23
|
+
* @param deps - Data sources
|
|
24
|
+
* @returns Function that runs the spot-check as of `now`
|
|
25
|
+
*/
|
|
26
|
+
export declare function createSpotCheckLoader(deps: SpotCheckLoaderDeps): (now: Date) => Promise<SpotCheckResult>;
|
|
27
|
+
//# sourceMappingURL=verified-spot-check.loader.d.ts.map
|
package/dist/backend/backend/src/services/v3/owner-receipt/verified-spot-check.loader.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verified-spot-check.loader.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/verified-spot-check.loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE9E,mCAAmC;AACnC,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,0BAA0B;IAC1B,aAAa,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB;AAiBD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,CAAC,eAAe,CAAC,CAYxG"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loader for the verified-work spot-check (#1315): reads the WorkItems and the
|
|
3
|
+
* team index, checks files on the real disk, and hands them to the pure
|
|
4
|
+
* {@link runSpotCheck}.
|
|
5
|
+
*
|
|
6
|
+
* @module services/v3/owner-receipt/verified-spot-check.loader
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'fs/promises';
|
|
9
|
+
import * as os from 'os';
|
|
10
|
+
import { runSpotCheck } from './verified-spot-check.js';
|
|
11
|
+
/**
|
|
12
|
+
* Whether anything exists at a path.
|
|
13
|
+
*
|
|
14
|
+
* @param p - Absolute path
|
|
15
|
+
* @returns True when `fs.stat` succeeds
|
|
16
|
+
*/
|
|
17
|
+
async function statExists(p) {
|
|
18
|
+
try {
|
|
19
|
+
await fs.stat(p);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build the `loadSpotCheck` dependency of the owner receipt service.
|
|
28
|
+
*
|
|
29
|
+
* @param deps - Data sources
|
|
30
|
+
* @returns Function that runs the spot-check as of `now`
|
|
31
|
+
*/
|
|
32
|
+
export function createSpotCheckLoader(deps) {
|
|
33
|
+
return async (now) => {
|
|
34
|
+
const [workItems, teams] = await Promise.all([deps.listWorkItems(), deps.loadTeamIndex()]);
|
|
35
|
+
return runSpotCheck({
|
|
36
|
+
workItems,
|
|
37
|
+
now,
|
|
38
|
+
teamOf: (session) => teams.get(session) ?? null,
|
|
39
|
+
exists: deps.exists ?? statExists,
|
|
40
|
+
homeDir: os.homedir(),
|
|
41
|
+
...(deps.random ? { random: deps.random } : {}),
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=verified-spot-check.loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verified-spot-check.loader.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/verified-spot-check.loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAwB,MAAM,0BAA0B,CAAC;AAa9E;;;;;GAKG;AACH,KAAK,UAAU,UAAU,CAAC,CAAS;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAyB;IAC7D,OAAO,KAAK,EAAE,GAAS,EAA4B,EAAE;QACnD,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAC3F,OAAO,YAAY,CAAC;YAClB,SAAS;YACT,GAAG;YACH,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,UAAU;YACjC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE;YACrB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -152,6 +152,12 @@ export interface Experiment {
|
|
|
152
152
|
ticket?: ExperimentTicketLink;
|
|
153
153
|
/** Agent session (or `owner`) that created it — its prediction is recorded under this session */
|
|
154
154
|
createdBy: string;
|
|
155
|
+
/**
|
|
156
|
+
* Agent session that watches the run without directing it (#1026). It and
|
|
157
|
+
* the creator get read-only access to an autopilot card's project stats,
|
|
158
|
+
* runs and traces while the card is planned or running.
|
|
159
|
+
*/
|
|
160
|
+
supervisor?: string;
|
|
155
161
|
/** Confidence recorded on the prediction (0..1) */
|
|
156
162
|
confidence: number;
|
|
157
163
|
status: ExperimentStatus;
|
|
@@ -185,6 +191,14 @@ export interface Experiment {
|
|
|
185
191
|
autopilot?: ExperimentAutopilotScope;
|
|
186
192
|
timeline: ExperimentEvent[];
|
|
187
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* What an experiment supervisor may read of one autopilot project (#1026):
|
|
196
|
+
* `labels` null = the whole project, else only traces with one of these
|
|
197
|
+
* labels (lowercase).
|
|
198
|
+
*/
|
|
199
|
+
export interface ExperimentSupervision {
|
|
200
|
+
labels: string[] | null;
|
|
201
|
+
}
|
|
188
202
|
/** Persisted store. */
|
|
189
203
|
export interface ExperimentStoreData {
|
|
190
204
|
version: 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"experiment.types.d.ts","sourceRoot":"","sources":["../../../../../backend/src/types/experiment.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"experiment.types.d.ts","sourceRoot":"","sources":["../../../../../backend/src/types/experiment.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"experiment.types.js","sourceRoot":"","sources":["../../../../../backend/src/types/experiment.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"experiment.types.js","sourceRoot":"","sources":["../../../../../backend/src/types/experiment.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkNH,mBAAmB;AACnB,MAAM,CAAC,MAAM,kBAAkB,GAAgC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAE9E,oBAAoB;AACpB,MAAM,CAAC,MAAM,mBAAmB,GAAgC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAE5G;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAU;IAC3C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAK,kBAAwC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAU;IAC3C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAK,mBAAyC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC"}
|