wicked-crew 0.9.4 → 0.9.6
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/api/delivery-assurance.d.ts.map +1 -1
- package/dist/api/delivery-assurance.js +14 -3
- package/dist/api/delivery-assurance.js.map +1 -1
- package/dist/api/discovery-source.d.ts +4 -4
- package/dist/api/discovery-source.d.ts.map +1 -1
- package/dist/api/discovery-source.js +14 -8
- package/dist/api/discovery-source.js.map +1 -1
- package/dist/api/eval-sample.d.ts +12 -12
- package/dist/api/governance-steering.d.ts +2 -2
- package/dist/api/governance-steering.js +2 -2
- package/dist/api/governance-steering.js.map +1 -1
- package/dist/api/mcp.d.ts +4 -4
- package/dist/api/onboarding-capture.d.ts +1 -1
- package/dist/api/onboarding-capture.d.ts.map +1 -1
- package/dist/api/onboarding-capture.js +1 -1
- package/dist/api/onboarding-capture.js.map +1 -1
- package/dist/api/routes.d.ts +133 -131
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +37 -34
- package/dist/api/routes.js.map +1 -1
- package/dist/api/server.d.ts +6 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +36 -1
- package/dist/api/server.js.map +1 -1
- package/dist/api/testing.js +1 -1
- package/dist/api/testing.js.map +1 -1
- package/dist/campaigns/plan.d.ts +8 -1
- package/dist/campaigns/plan.d.ts.map +1 -1
- package/dist/campaigns/plan.js +15 -3
- package/dist/campaigns/plan.js.map +1 -1
- package/dist/campaigns/routes.d.ts +8 -8
- package/dist/core/adapter.d.ts +29 -89
- package/dist/core/adapter.d.ts.map +1 -1
- package/dist/core/adapter.js +86 -609
- package/dist/core/adapter.js.map +1 -1
- package/dist/core/builtin-catalog.d.ts +24 -0
- package/dist/core/builtin-catalog.d.ts.map +1 -0
- package/dist/core/builtin-catalog.js +54 -0
- package/dist/core/builtin-catalog.js.map +1 -0
- package/dist/core/council-settings.d.ts +18 -0
- package/dist/core/council-settings.d.ts.map +1 -0
- package/dist/core/council-settings.js +37 -0
- package/dist/core/council-settings.js.map +1 -0
- package/dist/core/deliver-text.d.ts +1 -1
- package/dist/core/deliver-text.d.ts.map +1 -1
- package/dist/core/deliver-text.js +3 -2
- package/dist/core/deliver-text.js.map +1 -1
- package/dist/core/deliver.d.ts +0 -6
- package/dist/core/deliver.d.ts.map +1 -1
- package/dist/core/deliver.js +0 -6
- package/dist/core/deliver.js.map +1 -1
- package/dist/core/run-identity.d.ts +1 -1
- package/dist/core/run-identity.d.ts.map +1 -1
- package/dist/core/run-identity.js +7 -3
- package/dist/core/run-identity.js.map +1 -1
- package/dist/editors/csp.js +2 -2
- package/dist/editors/csp.js.map +1 -1
- package/dist/editors/pack-install.d.ts +35 -14
- package/dist/editors/pack-install.d.ts.map +1 -1
- package/dist/editors/pack-install.js +171 -24
- package/dist/editors/pack-install.js.map +1 -1
- package/dist/editors/registry.d.ts +151 -13
- package/dist/editors/registry.d.ts.map +1 -1
- package/dist/editors/registry.js +257 -20
- package/dist/editors/registry.js.map +1 -1
- package/dist/editors/routes.d.ts +10 -5
- package/dist/editors/routes.d.ts.map +1 -1
- package/dist/editors/routes.js +30 -20
- package/dist/editors/routes.js.map +1 -1
- package/dist/learn/routes.d.ts +42 -0
- package/dist/learn/routes.d.ts.map +1 -0
- package/dist/learn/routes.js +87 -0
- package/dist/learn/routes.js.map +1 -0
- package/dist/learn/schedule-store.d.ts +41 -0
- package/dist/learn/schedule-store.d.ts.map +1 -0
- package/dist/learn/schedule-store.js +137 -0
- package/dist/learn/schedule-store.js.map +1 -0
- package/dist/learn/scheduler.d.ts +71 -0
- package/dist/learn/scheduler.d.ts.map +1 -0
- package/dist/learn/scheduler.js +222 -0
- package/dist/learn/scheduler.js.map +1 -0
- package/dist/learn/topics.d.ts +14 -0
- package/dist/learn/topics.d.ts.map +1 -0
- package/dist/learn/topics.js +95 -0
- package/dist/learn/topics.js.map +1 -0
- package/dist/projects/graph.d.ts +14 -0
- package/dist/projects/graph.d.ts.map +1 -1
- package/dist/projects/graph.js +41 -2
- package/dist/projects/graph.js.map +1 -1
- package/dist/projects/routes.d.ts +2 -2
- package/dist/projects/state-home-registry.d.ts.map +1 -1
- package/dist/projects/state-home-registry.js +2 -0
- package/dist/projects/state-home-registry.js.map +1 -1
- package/dist/qe/acceptance.d.ts +5 -0
- package/dist/qe/acceptance.d.ts.map +1 -1
- package/dist/qe/acceptance.js +4 -2
- package/dist/qe/acceptance.js.map +1 -1
- package/dist/qe/author-workflow.d.ts +6 -83
- package/dist/qe/author-workflow.d.ts.map +1 -1
- package/dist/qe/author-workflow.js +6 -300
- package/dist/qe/author-workflow.js.map +1 -1
- package/dist/qe/ledger.d.ts +20 -0
- package/dist/qe/ledger.d.ts.map +1 -1
- package/dist/qe/ledger.js +28 -2
- package/dist/qe/ledger.js.map +1 -1
- package/dist/skills/core-closure.d.ts +3 -5
- package/dist/skills/core-closure.d.ts.map +1 -1
- package/dist/skills/core-closure.js +3 -5
- package/dist/skills/core-closure.js.map +1 -1
- package/dist/standing-orders/routes.d.ts +4 -4
- package/dist/standing-orders/store.d.ts +2 -2
- package/dist/studio/assets/index-C0ZMi_8d.js +583 -0
- package/dist/studio/assets/index-DYLo25MW.css +32 -0
- package/dist/studio/editors/wicked-page/editor.json +1 -1
- package/dist/studio/editors/wicked-page/index.html +1 -1
- package/dist/studio/index.html +2 -2
- package/dist/studio/testid-inventory.json +566 -36
- package/endpoint-manifest.json +59 -2
- package/package.json +4 -4
- package/dist/studio/assets/index-BGfFmWw4.css +0 -32
- package/dist/studio/assets/index-BMRUMU4X.js +0 -567
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/editors/routes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/editors/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/api/v1/learn/schedules` (DES-learn-workflow §5.2): read, save, delete and run-now a learned
|
|
3
|
+
* topic's refresh schedule. Writes are a person's (the watch routes' human-operator predicate): a
|
|
4
|
+
* worker or system actor may read but never schedule spend.
|
|
5
|
+
*/
|
|
6
|
+
import type { FastifyInstance } from 'fastify';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import type { CoreAdapter } from '../core/adapter.js';
|
|
9
|
+
import type { AuditLog } from '../api/audit.js';
|
|
10
|
+
import { type LearnScheduleStore } from './schedule-store.js';
|
|
11
|
+
export declare const LearnSchedulePutSchema: z.ZodObject<{
|
|
12
|
+
repoRef: z.ZodString;
|
|
13
|
+
slug: z.ZodString;
|
|
14
|
+
topic: z.ZodString;
|
|
15
|
+
everyHours: z.ZodNumber;
|
|
16
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
17
|
+
projectId: z.ZodOptional<z.ZodString>;
|
|
18
|
+
}, "strict", z.ZodTypeAny, {
|
|
19
|
+
repoRef: string;
|
|
20
|
+
slug: string;
|
|
21
|
+
topic: string;
|
|
22
|
+
everyHours: number;
|
|
23
|
+
projectId?: string | undefined;
|
|
24
|
+
enabled?: boolean | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
repoRef: string;
|
|
27
|
+
slug: string;
|
|
28
|
+
topic: string;
|
|
29
|
+
everyHours: number;
|
|
30
|
+
projectId?: string | undefined;
|
|
31
|
+
enabled?: boolean | undefined;
|
|
32
|
+
}>;
|
|
33
|
+
export interface LearnRouteDeps {
|
|
34
|
+
store: LearnScheduleStore;
|
|
35
|
+
adapter: Pick<CoreAdapter, 'listRepos'>;
|
|
36
|
+
/** Days without re-verification after which an UNSCHEDULED topic's active claim counts as stale. */
|
|
37
|
+
defaultStaleDays?: number;
|
|
38
|
+
audit: AuditLog;
|
|
39
|
+
now?: () => Date;
|
|
40
|
+
}
|
|
41
|
+
export declare function registerLearnRoutes(app: FastifyInstance, deps: LearnRouteDeps): void;
|
|
42
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/learn/routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAA4D,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAIxH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;EASxB,CAAC;AAEZ,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACxC,oGAAoG;IACpG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,QAAQ,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAMD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CA6EpF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/api/v1/learn/schedules` (DES-learn-workflow §5.2): read, save, delete and run-now a learned
|
|
3
|
+
* topic's refresh schedule. Writes are a person's (the watch routes' human-operator predicate): a
|
|
4
|
+
* worker or system actor may read but never schedule spend.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { API_PREFIX } from '../api/api-prefix.js';
|
|
8
|
+
import { LOCAL_ACTOR } from '../api/auth.js';
|
|
9
|
+
import { isHumanOperator } from '../api/watch-routes.js';
|
|
10
|
+
import { readTopics } from './topics.js';
|
|
11
|
+
import { LEARN_SLUG, MAX_EVERY_HOURS, MIN_EVERY_HOURS, scheduleId } from './schedule-store.js';
|
|
12
|
+
const V = API_PREFIX;
|
|
13
|
+
export const LearnSchedulePutSchema = z
|
|
14
|
+
.object({
|
|
15
|
+
repoRef: z.string().min(1).max(256),
|
|
16
|
+
slug: z.string().regex(LEARN_SLUG, 'slug is kebab-case, at most 64 characters'),
|
|
17
|
+
topic: z.string().trim().min(1).max(200),
|
|
18
|
+
everyHours: z.number().int().min(MIN_EVERY_HOURS).max(MAX_EVERY_HOURS),
|
|
19
|
+
enabled: z.boolean().optional(),
|
|
20
|
+
projectId: z.string().min(1).max(128).optional(),
|
|
21
|
+
})
|
|
22
|
+
.strict();
|
|
23
|
+
function bad(reply, error) {
|
|
24
|
+
return reply.code(400).send({ error });
|
|
25
|
+
}
|
|
26
|
+
export function registerLearnRoutes(app, deps) {
|
|
27
|
+
const actorOf = (req) => req.actor ?? LOCAL_ACTOR;
|
|
28
|
+
const now = () => deps.now?.() ?? new Date();
|
|
29
|
+
const refuse = (reply) => reply.code(403).send({ error: 'Only a person can change a learn schedule (a worker or system actor cannot)' });
|
|
30
|
+
app.get(`${V}/learn/schedules`, { config: { manifest: { responseType: 'LearnSchedulesResponse', statusCodes: [200] } } }, async () => ({ schedules: deps.store.list() }));
|
|
31
|
+
// The learned topics of one registered repository, read from its checkout. A topic on a schedule
|
|
32
|
+
// goes stale after two of its intervals without re-verification; an unscheduled one after 60 days.
|
|
33
|
+
app.get(`${V}/learn/topics`, { config: { manifest: { responseType: 'LearnTopicsResponse', statusCodes: [200, 400, 404] } } }, async (req, reply) => {
|
|
34
|
+
const { repoRef } = req.query;
|
|
35
|
+
if (typeof repoRef !== 'string' || repoRef === '')
|
|
36
|
+
return bad(reply, 'repoRef is required');
|
|
37
|
+
const repo = (await deps.adapter.listRepos()).find((r) => r.id === repoRef);
|
|
38
|
+
if (repo === undefined)
|
|
39
|
+
return reply.code(404).send({ error: `no registered repository ${repoRef}` });
|
|
40
|
+
const schedules = deps.store.list().filter((s) => s.repoRef === repoRef);
|
|
41
|
+
const staleDays = (slug) => {
|
|
42
|
+
const s = schedules.find((x) => x.slug === slug);
|
|
43
|
+
return s !== undefined ? (2 * s.everyHours) / 24 : (deps.defaultStaleDays ?? 60);
|
|
44
|
+
};
|
|
45
|
+
return { repoRef, topics: await readTopics(repo.root_path, staleDays, now()) };
|
|
46
|
+
});
|
|
47
|
+
app.put(`${V}/learn/schedules/:id`, { config: { manifest: { requestType: 'LearnSchedulePutBody', responseType: 'LearnSchedule', statusCodes: [200, 400, 403, 404] } } }, async (req, reply) => {
|
|
48
|
+
const actor = actorOf(req);
|
|
49
|
+
if (!isHumanOperator(actor))
|
|
50
|
+
return refuse(reply);
|
|
51
|
+
const parsed = LearnSchedulePutSchema.safeParse(req.body);
|
|
52
|
+
if (!parsed.success)
|
|
53
|
+
return bad(reply, parsed.error.issues.map((i) => `${i.path.join('.') || 'body'}: ${i.message}`).join('; '));
|
|
54
|
+
const { id } = req.params;
|
|
55
|
+
const body = parsed.data;
|
|
56
|
+
if (id !== scheduleId(body.repoRef, body.slug))
|
|
57
|
+
return bad(reply, 'the id must be <repoRef>:<slug>');
|
|
58
|
+
if (!(await deps.adapter.listRepos()).some((r) => r.id === body.repoRef)) {
|
|
59
|
+
return reply.code(404).send({ error: `no registered repository ${body.repoRef}` });
|
|
60
|
+
}
|
|
61
|
+
const row = deps.store.put(body, now());
|
|
62
|
+
deps.audit.record('learn.schedule.saved', actor, { detail: { id, everyHours: row.everyHours, enabled: row.enabled } });
|
|
63
|
+
return row;
|
|
64
|
+
});
|
|
65
|
+
app.delete(`${V}/learn/schedules/:id`, { config: { manifest: { responseType: '{ deleted: true; id: string }', statusCodes: [200, 403, 404] } } }, async (req, reply) => {
|
|
66
|
+
const actor = actorOf(req);
|
|
67
|
+
if (!isHumanOperator(actor))
|
|
68
|
+
return refuse(reply);
|
|
69
|
+
const { id } = req.params;
|
|
70
|
+
if (!deps.store.delete(id))
|
|
71
|
+
return reply.code(404).send({ error: `no learn schedule ${id}` });
|
|
72
|
+
deps.audit.record('learn.schedule.deleted', actor, { detail: { id } });
|
|
73
|
+
return { deleted: true, id };
|
|
74
|
+
});
|
|
75
|
+
app.post(`${V}/learn/schedules/:id/run-now`, { config: { manifest: { responseType: 'LearnSchedule', statusCodes: [200, 403, 404] } } }, async (req, reply) => {
|
|
76
|
+
const actor = actorOf(req);
|
|
77
|
+
if (!isHumanOperator(actor))
|
|
78
|
+
return refuse(reply);
|
|
79
|
+
const { id } = req.params;
|
|
80
|
+
const row = deps.store.update(id, { nextDueAt: now().toISOString() }, now());
|
|
81
|
+
if (row === undefined)
|
|
82
|
+
return reply.code(404).send({ error: `no learn schedule ${id}` });
|
|
83
|
+
deps.audit.record('learn.schedule.run_now', actor, { detail: { id } });
|
|
84
|
+
return row;
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/learn/routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAA2B,MAAM,qBAAqB,CAAC;AAExH,MAAM,CAAC,GAAG,UAAU,CAAC;AAErB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC;IAC/E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACxC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;IACtE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACjD,CAAC;KACD,MAAM,EAAE,CAAC;AAWZ,SAAS,GAAG,CAAC,KAAmB,EAAE,KAAa;IAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAoB,EAAE,IAAoB;IAC5E,MAAM,OAAO,GAAG,CAAC,GAAsB,EAAS,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC;IAC5E,MAAM,GAAG,GAAG,GAAS,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,CAAC,KAAmB,EAAgB,EAAE,CACnD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6EAA6E,EAAE,CAAC,CAAC;IAEjH,GAAG,CAAC,GAAG,CACL,GAAG,CAAC,kBAAkB,EACtB,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,wBAAwB,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EACxF,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAC/C,CAAC;IAEF,iGAAiG;IACjG,mGAAmG;IACnG,GAAG,CAAC,GAAG,CACL,GAAG,CAAC,eAAe,EACnB,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAC/F,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,KAA6B,CAAC;QACtD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,EAAE;YAAE,OAAO,GAAG,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;QAC5F,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QAC5E,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,OAAO,EAAE,EAAE,CAAC,CAAC;QACtG,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE;YACzC,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IACjF,CAAC,CACF,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,GAAG,CAAC,sBAAsB,EAC1B,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,sBAAsB,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EACnI,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjI,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAwB,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,EAAE,KAAK,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,GAAG,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;QACrG,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACzE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvH,OAAO,GAAG,CAAC;IACb,CAAC,CACF,CAAC;IAEF,GAAG,CAAC,MAAM,CACR,GAAG,CAAC,sBAAsB,EAC1B,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,+BAA+B,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EACzG,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAwB,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACvE,OAAO,EAAE,OAAO,EAAE,IAAa,EAAE,EAAE,EAAE,CAAC;IACxC,CAAC,CACF,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,GAAG,CAAC,8BAA8B,EAClC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EACzF,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAwB,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7E,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACvE,OAAO,GAAG,CAAC;IACb,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The learn schedule (DES-learn-workflow §5): a durable record per learned topic saying how often
|
|
3
|
+
* the daemon re-runs the `learn` workflow on it. Crew is the single source of truth for a
|
|
4
|
+
* schedule; the topic's files in the repository do not repeat it.
|
|
5
|
+
*
|
|
6
|
+
* Same storage posture as `projects/settings.ts`: a small JSON map in the daemon's state home
|
|
7
|
+
* (`learn-schedules.json`, following `--db`; `WICKED_CREW_LEARN_SCHEDULES` overrides), written
|
|
8
|
+
* atomically (tmp + rename), read tolerantly per row (a malformed row is dropped, never the map).
|
|
9
|
+
*/
|
|
10
|
+
import type { LearnSchedule, LearnScheduleOutcome } from 'wicked-crew-api-types';
|
|
11
|
+
export type { LearnSchedule, LearnScheduleOutcome };
|
|
12
|
+
export declare const LEARN_SLUG: RegExp;
|
|
13
|
+
export declare const MIN_EVERY_HOURS = 24;
|
|
14
|
+
export declare const MAX_EVERY_HOURS = 2160;
|
|
15
|
+
export declare function scheduleId(repoRef: string, slug: string): string;
|
|
16
|
+
export declare function defaultSchedulesPath(env?: NodeJS.ProcessEnv): string;
|
|
17
|
+
/** What a caller asks to save (`PUT /learn/schedules/:id`). */
|
|
18
|
+
export interface LearnScheduleInput {
|
|
19
|
+
repoRef: string;
|
|
20
|
+
slug: string;
|
|
21
|
+
topic: string;
|
|
22
|
+
everyHours: number;
|
|
23
|
+
enabled?: boolean | undefined;
|
|
24
|
+
projectId?: string | undefined;
|
|
25
|
+
}
|
|
26
|
+
export declare class LearnScheduleStore {
|
|
27
|
+
private readonly path;
|
|
28
|
+
private readonly rows;
|
|
29
|
+
constructor(path?: string);
|
|
30
|
+
list(): LearnSchedule[];
|
|
31
|
+
get(id: string): LearnSchedule | undefined;
|
|
32
|
+
/** Create or update. A new row is first due one interval from now; an update keeps its run
|
|
33
|
+
* history and moves `nextDueAt` only when the interval changed. */
|
|
34
|
+
put(input: LearnScheduleInput, now: Date): LearnSchedule;
|
|
35
|
+
/** Merge a patch into an existing row (the scheduler's bookkeeping). `undefined` when unknown. */
|
|
36
|
+
update(id: string, patch: Partial<Omit<LearnSchedule, 'id' | 'repoRef' | 'slug'>>, now: Date): LearnSchedule | undefined;
|
|
37
|
+
delete(id: string): boolean;
|
|
38
|
+
private persist;
|
|
39
|
+
}
|
|
40
|
+
export declare const HOURS = 3600000;
|
|
41
|
+
//# sourceMappingURL=schedule-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-store.d.ts","sourceRoot":"","sources":["../../src/learn/schedule-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,CAAC;AAEpD,eAAO,MAAM,UAAU,QAA2C,CAAC;AACnE,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,eAAe,OAAO,CAAC;AAIpC,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAEjF;AAmCD,+DAA+D;AAC/D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoC;gBAE7C,IAAI,CAAC,EAAE,MAAM;IAazB,IAAI,IAAI,aAAa,EAAE;IAIvB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAK1C;wEACoE;IACpE,GAAG,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,IAAI,GAAG,aAAa;IA4BxD,kGAAkG;IAClG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,aAAa,GAAG,SAAS;IASxH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAM3B,OAAO,CAAC,OAAO;CAMhB;AAED,eAAO,MAAM,KAAK,UAAU,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The learn schedule (DES-learn-workflow §5): a durable record per learned topic saying how often
|
|
3
|
+
* the daemon re-runs the `learn` workflow on it. Crew is the single source of truth for a
|
|
4
|
+
* schedule; the topic's files in the repository do not repeat it.
|
|
5
|
+
*
|
|
6
|
+
* Same storage posture as `projects/settings.ts`: a small JSON map in the daemon's state home
|
|
7
|
+
* (`learn-schedules.json`, following `--db`; `WICKED_CREW_LEARN_SCHEDULES` overrides), written
|
|
8
|
+
* atomically (tmp + rename), read tolerantly per row (a malformed row is dropped, never the map).
|
|
9
|
+
*/
|
|
10
|
+
import { mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
11
|
+
import { dirname, join } from 'node:path';
|
|
12
|
+
import { crewStateHome } from '../projects/state-home.js';
|
|
13
|
+
export const LEARN_SLUG = /^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/;
|
|
14
|
+
export const MIN_EVERY_HOURS = 24;
|
|
15
|
+
export const MAX_EVERY_HOURS = 2160;
|
|
16
|
+
const HOUR_MS = 3_600_000;
|
|
17
|
+
const OUTCOMES = new Set(['launched', 'refused', 'completed', 'failed', 'cancelled']);
|
|
18
|
+
export function scheduleId(repoRef, slug) {
|
|
19
|
+
return `${repoRef}:${slug}`;
|
|
20
|
+
}
|
|
21
|
+
export function defaultSchedulesPath(env = process.env) {
|
|
22
|
+
return env['WICKED_CREW_LEARN_SCHEDULES'] ?? join(crewStateHome(), 'learn-schedules.json');
|
|
23
|
+
}
|
|
24
|
+
const str = (v) => typeof v === 'string';
|
|
25
|
+
const strOrNull = (v) => v === null || typeof v === 'string';
|
|
26
|
+
/** A row as read from disk, or `null` when it is malformed. */
|
|
27
|
+
function parseRow(id, raw) {
|
|
28
|
+
if (typeof raw !== 'object' || raw === null)
|
|
29
|
+
return null;
|
|
30
|
+
const r = raw;
|
|
31
|
+
if (!str(r['repoRef']) || !str(r['slug']) || !LEARN_SLUG.test(r['slug']) || !str(r['topic']))
|
|
32
|
+
return null;
|
|
33
|
+
if (id !== scheduleId(r['repoRef'], r['slug']))
|
|
34
|
+
return null;
|
|
35
|
+
const every = r['everyHours'];
|
|
36
|
+
if (typeof every !== 'number' || !Number.isInteger(every) || every < MIN_EVERY_HOURS || every > MAX_EVERY_HOURS)
|
|
37
|
+
return null;
|
|
38
|
+
if (typeof r['enabled'] !== 'boolean' || !str(r['nextDueAt']) || Number.isNaN(Date.parse(r['nextDueAt'])))
|
|
39
|
+
return null;
|
|
40
|
+
const outcome = r['lastOutcome'];
|
|
41
|
+
return {
|
|
42
|
+
id,
|
|
43
|
+
repoRef: r['repoRef'],
|
|
44
|
+
slug: r['slug'],
|
|
45
|
+
topic: r['topic'],
|
|
46
|
+
...(str(r['projectId']) ? { projectId: r['projectId'] } : {}),
|
|
47
|
+
everyHours: every,
|
|
48
|
+
enabled: r['enabled'],
|
|
49
|
+
nextDueAt: r['nextDueAt'],
|
|
50
|
+
lastRunId: strOrNull(r['lastRunId']) ? r['lastRunId'] : null,
|
|
51
|
+
lastRunAt: strOrNull(r['lastRunAt']) ? r['lastRunAt'] : null,
|
|
52
|
+
lastOutcome: str(outcome) && OUTCOMES.has(outcome) ? outcome : null,
|
|
53
|
+
failures: typeof r['failures'] === 'number' && r['failures'] >= 0 ? Math.floor(r['failures']) : 0,
|
|
54
|
+
lastError: strOrNull(r['lastError']) ? r['lastError'] : null,
|
|
55
|
+
indexedTree: strOrNull(r['indexedTree']) ? r['indexedTree'] : null,
|
|
56
|
+
createdAt: str(r['createdAt']) ? r['createdAt'] : r['nextDueAt'],
|
|
57
|
+
updatedAt: str(r['updatedAt']) ? r['updatedAt'] : r['nextDueAt'],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export class LearnScheduleStore {
|
|
61
|
+
path;
|
|
62
|
+
rows = new Map();
|
|
63
|
+
constructor(path) {
|
|
64
|
+
this.path = path ?? defaultSchedulesPath();
|
|
65
|
+
try {
|
|
66
|
+
const parsed = JSON.parse(readFileSync(this.path, 'utf8'));
|
|
67
|
+
for (const [id, raw] of Object.entries(parsed?.schedules ?? {})) {
|
|
68
|
+
const row = parseRow(id, raw);
|
|
69
|
+
if (row !== null)
|
|
70
|
+
this.rows.set(id, row);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Missing or malformed: start empty (no schedule fires), never fail the boot.
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
list() {
|
|
78
|
+
return [...this.rows.values()].sort((a, b) => a.nextDueAt.localeCompare(b.nextDueAt) || a.id.localeCompare(b.id));
|
|
79
|
+
}
|
|
80
|
+
get(id) {
|
|
81
|
+
const row = this.rows.get(id);
|
|
82
|
+
return row === undefined ? undefined : { ...row };
|
|
83
|
+
}
|
|
84
|
+
/** Create or update. A new row is first due one interval from now; an update keeps its run
|
|
85
|
+
* history and moves `nextDueAt` only when the interval changed. */
|
|
86
|
+
put(input, now) {
|
|
87
|
+
const id = scheduleId(input.repoRef, input.slug);
|
|
88
|
+
const prev = this.rows.get(id);
|
|
89
|
+
const iso = now.toISOString();
|
|
90
|
+
const due = new Date(now.getTime() + input.everyHours * HOUR_MS).toISOString();
|
|
91
|
+
const row = {
|
|
92
|
+
id,
|
|
93
|
+
repoRef: input.repoRef,
|
|
94
|
+
slug: input.slug,
|
|
95
|
+
topic: input.topic,
|
|
96
|
+
...(input.projectId !== undefined ? { projectId: input.projectId } : {}),
|
|
97
|
+
everyHours: input.everyHours,
|
|
98
|
+
enabled: input.enabled ?? prev?.enabled ?? true,
|
|
99
|
+
nextDueAt: prev === undefined || prev.everyHours !== input.everyHours ? due : prev.nextDueAt,
|
|
100
|
+
lastRunId: prev?.lastRunId ?? null,
|
|
101
|
+
lastRunAt: prev?.lastRunAt ?? null,
|
|
102
|
+
lastOutcome: prev?.lastOutcome ?? null,
|
|
103
|
+
failures: prev?.failures ?? 0,
|
|
104
|
+
lastError: prev?.lastError ?? null,
|
|
105
|
+
indexedTree: prev?.indexedTree ?? null,
|
|
106
|
+
createdAt: prev?.createdAt ?? iso,
|
|
107
|
+
updatedAt: iso,
|
|
108
|
+
};
|
|
109
|
+
this.rows.set(id, row);
|
|
110
|
+
this.persist();
|
|
111
|
+
return { ...row };
|
|
112
|
+
}
|
|
113
|
+
/** Merge a patch into an existing row (the scheduler's bookkeeping). `undefined` when unknown. */
|
|
114
|
+
update(id, patch, now) {
|
|
115
|
+
const prev = this.rows.get(id);
|
|
116
|
+
if (prev === undefined)
|
|
117
|
+
return undefined;
|
|
118
|
+
const row = { ...prev, ...patch, updatedAt: now.toISOString() };
|
|
119
|
+
this.rows.set(id, row);
|
|
120
|
+
this.persist();
|
|
121
|
+
return { ...row };
|
|
122
|
+
}
|
|
123
|
+
delete(id) {
|
|
124
|
+
const had = this.rows.delete(id);
|
|
125
|
+
if (had)
|
|
126
|
+
this.persist();
|
|
127
|
+
return had;
|
|
128
|
+
}
|
|
129
|
+
persist() {
|
|
130
|
+
mkdirSync(dirname(this.path), { recursive: true });
|
|
131
|
+
const tmp = `${this.path}.tmp-${process.pid}`;
|
|
132
|
+
writeFileSync(tmp, JSON.stringify({ schedules: Object.fromEntries(this.rows) }, null, 2), 'utf8');
|
|
133
|
+
renameSync(tmp, this.path);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export const HOURS = HOUR_MS;
|
|
137
|
+
//# sourceMappingURL=schedule-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-store.js","sourceRoot":"","sources":["../../src/learn/schedule-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The learn schedule's tick (DES-learn-workflow §5.3). Once a minute:
|
|
3
|
+
*
|
|
4
|
+
* 1. RECONCILE — a schedule's last run that reached a terminal status records its outcome.
|
|
5
|
+
* 2. INDEX — a topic whose MERGED knowledge changed (`git fetch origin <default>`, then
|
|
6
|
+
* `git rev-parse origin/<default>:.wicked/knowledge/<slug>`; the checkout's working copy is never read)
|
|
7
|
+
* moved) is re-indexed into the estate knowledge store by garden's `scripts/learn/index.py`,
|
|
8
|
+
* spawned OUTSIDE any run (its env carries no run markers, so the estate opens writable), one
|
|
9
|
+
* spawn per sweep. Indexing reads the registered checkout, never an open pull request.
|
|
10
|
+
* 3. LAUNCH — at most ONE due schedule launches the `learn` workflow, and only while no schedule's
|
|
11
|
+
* run is still open and no run on the daemon is executing (one governed run at a time). The
|
|
12
|
+
* launch delivers a pull request behind the engine's human deliver gate; nothing auto-merges.
|
|
13
|
+
* A refused launch backs off exponentially (capped at a day); missed intervals coalesce.
|
|
14
|
+
*
|
|
15
|
+
* Never throws; a slow sweep never stacks (`sweeping`).
|
|
16
|
+
*/
|
|
17
|
+
import type { CoreAdapter } from '../core/adapter.js';
|
|
18
|
+
import type { Actor, CoreEvent } from '../core/types.js';
|
|
19
|
+
import type { AuditLog } from '../api/audit.js';
|
|
20
|
+
import { type RunTimingIndex } from '../api/run-timing-index.js';
|
|
21
|
+
import { type LearnSchedule, type LearnScheduleStore } from './schedule-store.js';
|
|
22
|
+
export declare const LEARN_WORKFLOW = "learn";
|
|
23
|
+
export declare const LEARN_SCHEDULE_ACTOR: Actor;
|
|
24
|
+
export declare const DEFAULT_LEARN_SWEEP_MS = 60000;
|
|
25
|
+
/** How long a launched run the daemon no longer lists keeps the schedule's slot (48 h). */
|
|
26
|
+
export declare const STALE_LAUNCH_MS: number;
|
|
27
|
+
/** The env a governed unit carries; the index spawn drops every one so estate opens writable. */
|
|
28
|
+
export declare const RUN_MARKER_ENV: string[];
|
|
29
|
+
export interface ExecResult {
|
|
30
|
+
code: number;
|
|
31
|
+
stdout: string;
|
|
32
|
+
stderr: string;
|
|
33
|
+
}
|
|
34
|
+
export type Exec = (cmd: string, args: string[], opts: {
|
|
35
|
+
cwd?: string;
|
|
36
|
+
env?: NodeJS.ProcessEnv;
|
|
37
|
+
timeoutMs: number;
|
|
38
|
+
}) => Promise<ExecResult>;
|
|
39
|
+
export declare const defaultExec: Exec;
|
|
40
|
+
export interface LearnSchedulerDeps {
|
|
41
|
+
store: LearnScheduleStore;
|
|
42
|
+
adapter: Pick<CoreAdapter, 'listRepos' | 'sessionsDetail' | 'seatsForWorkflow' | 'launchRun'>;
|
|
43
|
+
audit: AuditLog;
|
|
44
|
+
runTimingIndex: RunTimingIndex;
|
|
45
|
+
fileRun: (runId: string, projectId: string) => void;
|
|
46
|
+
broadcast: (frame: CoreEvent) => void;
|
|
47
|
+
log: (msg: string) => void;
|
|
48
|
+
now?: () => Date;
|
|
49
|
+
exec?: Exec;
|
|
50
|
+
env?: NodeJS.ProcessEnv;
|
|
51
|
+
}
|
|
52
|
+
/** The garden launcher: `$WICKED_GARDEN_ROOT/scripts/wicked-garden` when set, else `wicked-garden` on PATH. */
|
|
53
|
+
export declare function gardenLauncher(env: NodeJS.ProcessEnv): string;
|
|
54
|
+
/** `env` without the governed-run markers. */
|
|
55
|
+
export declare function unmarkedEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
56
|
+
export declare function refreshProblem(row: LearnSchedule): string;
|
|
57
|
+
export declare class LearnScheduler {
|
|
58
|
+
private readonly deps;
|
|
59
|
+
private timer;
|
|
60
|
+
private sweeping;
|
|
61
|
+
constructor(deps: LearnSchedulerDeps);
|
|
62
|
+
start(intervalMs?: number): void;
|
|
63
|
+
stop(): void;
|
|
64
|
+
private now;
|
|
65
|
+
/** One sweep. Never throws. */
|
|
66
|
+
sweep(): Promise<void>;
|
|
67
|
+
private reconcile;
|
|
68
|
+
private indexOne;
|
|
69
|
+
private launchOne;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/learn/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAS,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzF,eAAO,MAAM,cAAc,UAAU,CAAC;AACtC,eAAO,MAAM,oBAAoB,EAAE,KAAmE,CAAC;AACvG,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAC7C,2FAA2F;AAC3F,eAAO,MAAM,eAAe,QAAa,CAAC;AAI1C,iGAAiG;AACjG,eAAO,MAAM,cAAc,UAA4G,CAAC;AAExI,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAE5I,eAAO,MAAM,WAAW,EAAE,IAOtB,CAAC;AAEL,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,WAAW,CAAC,CAAC;IAC9F,KAAK,EAAE,QAAQ,CAAC;IAChB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACtC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,+GAA+G;AAC/G,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAG7D;AAED,8CAA8C;AAC9C,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAIrE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAMzD;AAED,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,QAAQ,CAAS;gBAEI,IAAI,EAAE,kBAAkB;IAErD,KAAK,CAAC,UAAU,SAAyB,GAAG,IAAI;IAMhD,IAAI,IAAI,IAAI;IAKZ,OAAO,CAAC,GAAG;IAIX,+BAA+B;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B,OAAO,CAAC,SAAS;YAUH,QAAQ;YAkCR,SAAS;CA6ExB"}
|