instar 0.28.98 → 0.28.100
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/core/SessionManager.d.ts +6 -0
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +9 -0
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/types.d.ts +11 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/monitoring/PromiseBeacon.d.ts +5 -3
- package/dist/monitoring/PromiseBeacon.d.ts.map +1 -1
- package/dist/monitoring/PromiseBeacon.js +1 -1
- package/dist/monitoring/PromiseBeacon.js.map +1 -1
- package/dist/scheduler/AgentMdJobLoader.d.ts +1 -0
- package/dist/scheduler/AgentMdJobLoader.d.ts.map +1 -1
- package/dist/scheduler/AgentMdJobLoader.js +11 -2
- package/dist/scheduler/AgentMdJobLoader.js.map +1 -1
- package/dist/scheduler/JobRunHistory.d.ts +38 -0
- package/dist/scheduler/JobRunHistory.d.ts.map +1 -1
- package/dist/scheduler/JobRunHistory.js +62 -1
- package/dist/scheduler/JobRunHistory.js.map +1 -1
- package/dist/scheduler/JobScheduler.d.ts +67 -0
- package/dist/scheduler/JobScheduler.d.ts.map +1 -1
- package/dist/scheduler/JobScheduler.js +242 -25
- package/dist/scheduler/JobScheduler.js.map +1 -1
- package/package.json +1 -1
- package/scripts/pre-push-gate.js +11 -3
- package/src/data/builtin-manifest.json +4 -4
- package/upgrades/0.28.100.md +52 -0
- package/upgrades/0.28.99.md +25 -0
- package/upgrades/side-effects/jobs-as-agentmd-phase-1b.md +169 -0
- package/upgrades/side-effects/promise-beacon-threshold-tune.md +101 -0
|
@@ -60,6 +60,29 @@ export interface JobRun {
|
|
|
60
60
|
handoffNotes?: string;
|
|
61
61
|
/** Structured state snapshot for the next execution */
|
|
62
62
|
stateSnapshot?: Record<string, unknown>;
|
|
63
|
+
/** Where the job came from. "legacy" = traditional jobs.json entry,
|
|
64
|
+
* "instar" or "user" = per-slug manifest entry with the matching origin. */
|
|
65
|
+
origin?: 'instar' | 'user' | 'legacy';
|
|
66
|
+
/** Absolute path the agentmd body was resolved from; null for non-agentmd. */
|
|
67
|
+
resolvedPath?: string | null;
|
|
68
|
+
/** SHA-256 of the cached body. null for non-agentmd. */
|
|
69
|
+
bodyHash?: string | null;
|
|
70
|
+
/** SHA-256 of the canonicalized frontmatter object. null for non-agentmd. */
|
|
71
|
+
frontmatterHash?: string | null;
|
|
72
|
+
/** Monotonic counter from the per-slug manifest. null when absent. */
|
|
73
|
+
manifestVersion?: number | null;
|
|
74
|
+
/** Tool allowlist as resolved at spawn time. Array of names, or "*" when
|
|
75
|
+
* the unrestricted-tools two-flag guard passed, or null when no
|
|
76
|
+
* allowlist applies (legacy entries). */
|
|
77
|
+
toolAllowlist?: string[] | '*' | null;
|
|
78
|
+
/** Whether the manifest declared unrestricted tools. */
|
|
79
|
+
unrestrictedTools?: boolean;
|
|
80
|
+
/** Whether the resolver clamped the requested allowlist to [Read]
|
|
81
|
+
* because the unrestricted-tools two-flag guard failed. */
|
|
82
|
+
clampedAllowlist?: boolean;
|
|
83
|
+
/** When the row exceeded the 2 KB cap, non-essential fields are
|
|
84
|
+
* truncated and this flag is set. */
|
|
85
|
+
truncated?: boolean;
|
|
63
86
|
}
|
|
64
87
|
export interface JobRunStats {
|
|
65
88
|
slug: string;
|
|
@@ -91,6 +114,14 @@ export declare class JobRunHistory {
|
|
|
91
114
|
sessionId: string;
|
|
92
115
|
trigger: string;
|
|
93
116
|
model?: string;
|
|
117
|
+
origin?: 'instar' | 'user' | 'legacy';
|
|
118
|
+
resolvedPath?: string | null;
|
|
119
|
+
bodyHash?: string | null;
|
|
120
|
+
frontmatterHash?: string | null;
|
|
121
|
+
manifestVersion?: number | null;
|
|
122
|
+
toolAllowlist?: string[] | '*' | null;
|
|
123
|
+
unrestrictedTools?: boolean;
|
|
124
|
+
clampedAllowlist?: boolean;
|
|
94
125
|
}): string;
|
|
95
126
|
/**
|
|
96
127
|
* Record that a job run completed. Updates the existing pending entry
|
|
@@ -181,6 +212,13 @@ export declare class JobRunHistory {
|
|
|
181
212
|
*/
|
|
182
213
|
private compact;
|
|
183
214
|
private appendLine;
|
|
215
|
+
/**
|
|
216
|
+
* Enforce the 2 KB per-row cap from spec §"Run-record observability".
|
|
217
|
+
* If the serialized row exceeds the cap, non-essential fields are
|
|
218
|
+
* progressively dropped (longest first by TRUNCATABLE_FIELDS order) and
|
|
219
|
+
* a degradation event is reported. Essential fields are always preserved.
|
|
220
|
+
*/
|
|
221
|
+
private applyRowSizeCap;
|
|
184
222
|
private readLines;
|
|
185
223
|
}
|
|
186
224
|
//# sourceMappingURL=JobRunHistory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobRunHistory.d.ts","sourceRoot":"","sources":["../../src/scheduler/JobRunHistory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,yBAAyB;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,sDAAsD;IACtD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,sDAAsD;IACtD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,MAAM;IACrB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB;IACxB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;IACtE,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"JobRunHistory.d.ts","sourceRoot":"","sources":["../../src/scheduler/JobRunHistory.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,21 @@ import path from 'node:path';
|
|
|
20
20
|
import { DegradationReporter } from '../monitoring/DegradationReporter.js';
|
|
21
21
|
/** Monotonic counter to ensure unique runIds even within the same millisecond */
|
|
22
22
|
let runCounter = 0;
|
|
23
|
+
/** Per-row size cap from spec §"Run-record observability". When a row's
|
|
24
|
+
* serialized JSON exceeds this many bytes, non-essential fields are
|
|
25
|
+
* truncated and a degradation event is reported. The essential set —
|
|
26
|
+
* runId, slug, sessionId, trigger, startedAt, result, origin — is
|
|
27
|
+
* always preserved so query results remain coherent. */
|
|
28
|
+
const ROW_SIZE_CAP_BYTES = 2 * 1024;
|
|
29
|
+
/** Fields that are dropped first when a row exceeds the size cap.
|
|
30
|
+
* Ordered loosely by user-visibility: bulky outputs first, summaries last. */
|
|
31
|
+
const TRUNCATABLE_FIELDS = [
|
|
32
|
+
'outputSummary',
|
|
33
|
+
'stateSnapshot',
|
|
34
|
+
'handoffNotes',
|
|
35
|
+
'reflection',
|
|
36
|
+
'error',
|
|
37
|
+
];
|
|
23
38
|
export class JobRunHistory {
|
|
24
39
|
ledgerDir;
|
|
25
40
|
file;
|
|
@@ -47,6 +62,14 @@ export class JobRunHistory {
|
|
|
47
62
|
result: 'pending',
|
|
48
63
|
model: opts.model,
|
|
49
64
|
machineId: this.machineId ?? undefined,
|
|
65
|
+
origin: opts.origin,
|
|
66
|
+
resolvedPath: opts.resolvedPath ?? null,
|
|
67
|
+
bodyHash: opts.bodyHash ?? null,
|
|
68
|
+
frontmatterHash: opts.frontmatterHash ?? null,
|
|
69
|
+
manifestVersion: opts.manifestVersion ?? null,
|
|
70
|
+
toolAllowlist: opts.toolAllowlist ?? null,
|
|
71
|
+
unrestrictedTools: opts.unrestrictedTools ?? false,
|
|
72
|
+
clampedAllowlist: opts.clampedAllowlist ?? false,
|
|
50
73
|
};
|
|
51
74
|
this.appendLine(run);
|
|
52
75
|
return runId;
|
|
@@ -322,12 +345,50 @@ export class JobRunHistory {
|
|
|
322
345
|
}
|
|
323
346
|
appendLine(data) {
|
|
324
347
|
try {
|
|
325
|
-
|
|
348
|
+
const capped = this.applyRowSizeCap(data);
|
|
349
|
+
fs.appendFileSync(this.file, JSON.stringify(capped) + '\n');
|
|
326
350
|
}
|
|
327
351
|
catch (error) {
|
|
328
352
|
console.error(`[JobRunHistory] Failed to write:`, error);
|
|
329
353
|
}
|
|
330
354
|
}
|
|
355
|
+
/**
|
|
356
|
+
* Enforce the 2 KB per-row cap from spec §"Run-record observability".
|
|
357
|
+
* If the serialized row exceeds the cap, non-essential fields are
|
|
358
|
+
* progressively dropped (longest first by TRUNCATABLE_FIELDS order) and
|
|
359
|
+
* a degradation event is reported. Essential fields are always preserved.
|
|
360
|
+
*/
|
|
361
|
+
applyRowSizeCap(row) {
|
|
362
|
+
const initialSize = Buffer.byteLength(JSON.stringify(row), 'utf-8');
|
|
363
|
+
if (initialSize <= ROW_SIZE_CAP_BYTES)
|
|
364
|
+
return row;
|
|
365
|
+
// Clone and truncate iteratively. Always preserve the essential set.
|
|
366
|
+
const truncated = { ...row, truncated: true };
|
|
367
|
+
for (const field of TRUNCATABLE_FIELDS) {
|
|
368
|
+
if (truncated[field] === undefined)
|
|
369
|
+
continue;
|
|
370
|
+
delete truncated[field];
|
|
371
|
+
if (Buffer.byteLength(JSON.stringify(truncated), 'utf-8') <= ROW_SIZE_CAP_BYTES) {
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
const finalSize = Buffer.byteLength(JSON.stringify(truncated), 'utf-8');
|
|
376
|
+
try {
|
|
377
|
+
DegradationReporter.getInstance().report({
|
|
378
|
+
feature: 'JobRunHistory.appendLine',
|
|
379
|
+
primary: 'Write full run record with all fields',
|
|
380
|
+
fallback: `Truncate non-essential fields (dropped: ${TRUNCATABLE_FIELDS
|
|
381
|
+
.filter(f => row[f] !== undefined && truncated[f] === undefined)
|
|
382
|
+
.join(', ')})`,
|
|
383
|
+
reason: `Row size ${initialSize}B exceeded ${ROW_SIZE_CAP_BYTES}B cap for run ${row.runId} (slug=${row.slug})`,
|
|
384
|
+
impact: `Run record stored at ${finalSize}B with truncated:true flag set`,
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
catch {
|
|
388
|
+
// @silent-fallback-ok — degradation reporting is best-effort
|
|
389
|
+
}
|
|
390
|
+
return truncated;
|
|
391
|
+
}
|
|
331
392
|
readLines() {
|
|
332
393
|
if (!fs.existsSync(this.file))
|
|
333
394
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobRunHistory.js","sourceRoot":"","sources":["../../src/scheduler/JobRunHistory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JobRunHistory.js","sourceRoot":"","sources":["../../src/scheduler/JobRunHistory.ts"],"names":[],"mappings":"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"}
|
|
@@ -297,6 +297,73 @@ export declare class JobScheduler {
|
|
|
297
297
|
* Persists the reflection to run history and optionally sends to Telegram.
|
|
298
298
|
*/
|
|
299
299
|
private runJobReflection;
|
|
300
|
+
/**
|
|
301
|
+
* Resolve a per-job tool allowlist per INSTAR-JOBS-AS-AGENTMD spec §5.
|
|
302
|
+
*
|
|
303
|
+
* Decision matrix:
|
|
304
|
+
* | execute.type !== 'agentmd' → kind:'legacy', allowlist:null (full tools, back-compat)
|
|
305
|
+
* | frontmatter.toolAllowlist = string[] → kind:'array', allowlist:[...]
|
|
306
|
+
* | frontmatter.toolAllowlist = "*" + unrestricted → kind:'unrestricted', allowlist:"*", unrestrictedTools:true
|
|
307
|
+
* | frontmatter.toolAllowlist = "*" + NOT authorized → kind:'clamped', allowlist:['Read'], clampedAllowlist:true (warning event emitted by caller)
|
|
308
|
+
* | frontmatter.toolAllowlist missing + origin=user → kind:'default-user', allowlist:['Read']
|
|
309
|
+
* | frontmatter.toolAllowlist missing + origin=instar → kind:'instar-no-allowlist', allowlist:null (degradation event; Phase 1c lock-file will close)
|
|
310
|
+
*
|
|
311
|
+
* Returns a single object describing the resolution so callers can both
|
|
312
|
+
* (a) thread the right argument into the spawn call and (b) annotate the
|
|
313
|
+
* run record. Side-effects (degradation events) are NOT performed here —
|
|
314
|
+
* they happen in the caller, where the scheduler context is available.
|
|
315
|
+
*/
|
|
316
|
+
static resolveAllowlist(job: JobDefinition): AllowlistResolution;
|
|
317
|
+
/**
|
|
318
|
+
* Compute Phase 1b run-record observability fields for a job. Pure
|
|
319
|
+
* function: hashing is deterministic over body + canonicalized
|
|
320
|
+
* frontmatter; non-agentmd entries carry nulls.
|
|
321
|
+
*/
|
|
322
|
+
static computeRunObservability(job: JobDefinition, resolution: AllowlistResolution): RunObservability;
|
|
323
|
+
/**
|
|
324
|
+
* Canonical JSON encoding for hash stability. Sorts object keys at every
|
|
325
|
+
* depth so the same logical frontmatter always produces the same hash,
|
|
326
|
+
* regardless of insertion order. Arrays preserve order. Primitive nulls
|
|
327
|
+
* and undefined are encoded the same way `JSON.stringify` does.
|
|
328
|
+
*/
|
|
329
|
+
static canonicalize(value: unknown): string;
|
|
330
|
+
/**
|
|
331
|
+
* Emit Phase 1b side-channel signals for an allowlist resolution.
|
|
332
|
+
* Side effects (Dashboard event + degradation event) are gathered here
|
|
333
|
+
* so spawnJobSession can call once at spawn time. Pure function on the
|
|
334
|
+
* scheduler's `state.appendEvent` and the global DegradationReporter.
|
|
335
|
+
*
|
|
336
|
+
* The clamped-allowlist warning is a Dashboard-visible event AND a
|
|
337
|
+
* DegradationReporter event — both surface to the user via different
|
|
338
|
+
* channels (event stream vs degradation digest).
|
|
339
|
+
*
|
|
340
|
+
* The instar-no-allowlist path is a DegradationReporter event only:
|
|
341
|
+
* Phase 1c's lock-file defaults will close this gap; until then the
|
|
342
|
+
* temporary "full tools" behavior is documented and observable.
|
|
343
|
+
*/
|
|
344
|
+
private emitAllowlistSignals;
|
|
345
|
+
}
|
|
346
|
+
/** Result of {@link JobScheduler.resolveAllowlist}. Pure-data; no state. */
|
|
347
|
+
export interface AllowlistResolution {
|
|
348
|
+
kind: 'legacy' | 'array' | 'unrestricted' | 'clamped' | 'default-user' | 'instar-no-allowlist';
|
|
349
|
+
/** What the resolver will pass to the spawn:
|
|
350
|
+
* - `string[]` → spawn receives `--allowedTools <comma-separated>`
|
|
351
|
+
* - `"*"` → spawn omits `--allowedTools` (full tools authorized)
|
|
352
|
+
* - `null` → spawn omits `--allowedTools` (legacy or instar-no-allowlist fallback) */
|
|
353
|
+
allowlist: string[] | '*' | null;
|
|
354
|
+
unrestrictedTools: boolean;
|
|
355
|
+
clampedAllowlist: boolean;
|
|
356
|
+
}
|
|
357
|
+
/** Phase 1b run-record observability payload. */
|
|
358
|
+
export interface RunObservability {
|
|
359
|
+
origin: 'instar' | 'user' | 'legacy';
|
|
360
|
+
resolvedPath: string | null;
|
|
361
|
+
bodyHash: string | null;
|
|
362
|
+
frontmatterHash: string | null;
|
|
363
|
+
manifestVersion: number | null;
|
|
364
|
+
toolAllowlist: string[] | '*' | null;
|
|
365
|
+
unrestrictedTools: boolean;
|
|
366
|
+
clampedAllowlist: boolean;
|
|
300
367
|
}
|
|
301
368
|
export {};
|
|
302
369
|
//# sourceMappingURL=JobScheduler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobScheduler.d.ts","sourceRoot":"","sources":["../../src/scheduler/JobScheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"JobScheduler.d.ts","sourceRoot":"","sources":["../../src/scheduler/JobScheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,9 @@ import { Cron } from 'croner';
|
|
|
11
11
|
import { execFile } from 'node:child_process';
|
|
12
12
|
import { promisify } from 'node:util';
|
|
13
13
|
import fs from 'node:fs';
|
|
14
|
+
import crypto from 'node:crypto';
|
|
14
15
|
import { SafeFsExecutor } from '../core/SafeFsExecutor.js';
|
|
16
|
+
import { DegradationReporter } from '../monitoring/DegradationReporter.js';
|
|
15
17
|
const execFileAsync = promisify(execFile);
|
|
16
18
|
import path from 'node:path';
|
|
17
19
|
import { ExecutionJournal } from '../core/ExecutionJournal.js';
|
|
@@ -164,18 +166,12 @@ export class JobScheduler {
|
|
|
164
166
|
return;
|
|
165
167
|
this.jobs = loadJobs(this.config.jobsFile);
|
|
166
168
|
this.running = true;
|
|
167
|
-
// Phase
|
|
168
|
-
//
|
|
169
|
-
//
|
|
170
|
-
//
|
|
171
|
-
//
|
|
172
|
-
const enabledJobs = this.jobs.filter(j => j.enabled
|
|
173
|
-
const deferredAgentMd = this.jobs.filter(j => j.enabled && j.execute.type === 'agentmd');
|
|
174
|
-
if (deferredAgentMd.length > 0) {
|
|
175
|
-
console.log(`[scheduler] ${deferredAgentMd.length} agentmd job(s) loaded but deferred — ` +
|
|
176
|
-
`Phase 1a does not dispatch agentmd entries; Phase 1b adds the dispatch path. ` +
|
|
177
|
-
`Deferred: ${deferredAgentMd.map(j => j.slug).join(', ')}`);
|
|
178
|
-
}
|
|
169
|
+
// Phase 1b: agentmd entries now flow through the dispatch path
|
|
170
|
+
// alongside legacy entries. The Phase 1a defensive filter on
|
|
171
|
+
// execute.type === 'agentmd' has been removed; buildPrompt's
|
|
172
|
+
// 'agentmd' case returns the cached body, and spawnJobSession
|
|
173
|
+
// threads the per-job tool allowlist into the spawn call.
|
|
174
|
+
const enabledJobs = this.jobs.filter(j => j.enabled);
|
|
179
175
|
// Machine-scoped filtering — skip jobs not targeted at this machine
|
|
180
176
|
const scopedJobs = enabledJobs.filter(j => this.isJobScopedToThisMachine(j));
|
|
181
177
|
const skippedByScope = enabledJobs.length - scopedJobs.length;
|
|
@@ -540,6 +536,16 @@ export class JobScheduler {
|
|
|
540
536
|
const sessionName = `job-${job.slug}-${Date.now().toString(36)}`;
|
|
541
537
|
// Check for gate-written model escalation (e.g., git-sync severity)
|
|
542
538
|
const model = this.resolveModelTier(job);
|
|
539
|
+
// Resolve per-job tool allowlist (spec §5). For non-agentmd entries this
|
|
540
|
+
// returns "legacy" — no flag is passed and the spawn runs with full tools
|
|
541
|
+
// unchanged from pre-spec behavior. For agentmd entries the result encodes
|
|
542
|
+
// (a) the allowlist actually passed to spawn, (b) whether unrestricted-tools
|
|
543
|
+
// was authorized, and (c) whether the resolver clamped to [Read] because
|
|
544
|
+
// the two-flag guard failed.
|
|
545
|
+
const allowlistResolution = JobScheduler.resolveAllowlist(job);
|
|
546
|
+
// Side-channel signals (Dashboard event for clamp; degradation event for
|
|
547
|
+
// both clamp and the instar-origin-without-allowlist Phase 1c gap).
|
|
548
|
+
this.emitAllowlistSignals(job, allowlistResolution);
|
|
543
549
|
// Write active-job.json BEFORE spawning so the session-start and
|
|
544
550
|
// compaction-recovery hooks can inject job-specific grounding context.
|
|
545
551
|
this.state.set('active-job', {
|
|
@@ -565,6 +571,18 @@ export class JobScheduler {
|
|
|
565
571
|
console.error(`[scheduler] Failed to create Living Skills sentinel for "${job.slug}": ${err}`);
|
|
566
572
|
}
|
|
567
573
|
}
|
|
574
|
+
// Allowlist flag for the spawn:
|
|
575
|
+
// - array → passed through to --allowedTools
|
|
576
|
+
// - "*" with unrestricted authority → omit flag (full tools)
|
|
577
|
+
// - clamped or "legacy" with no allowlist → omit flag (full tools by default)
|
|
578
|
+
// The spawn always receives at most one allowlist input — never a "*" string.
|
|
579
|
+
const spawnAllowedTools = Array.isArray(allowlistResolution.allowlist)
|
|
580
|
+
? allowlistResolution.allowlist
|
|
581
|
+
: undefined;
|
|
582
|
+
// Compute observability fields once, used in both recordStart and the
|
|
583
|
+
// spawn-error path. Hashing the body/frontmatter is cheap (a few µs for
|
|
584
|
+
// typical body sizes) — see spec performance budget.
|
|
585
|
+
const observability = JobScheduler.computeRunObservability(job, allowlistResolution);
|
|
568
586
|
this.sessionManager.spawnSession({
|
|
569
587
|
name: sessionName,
|
|
570
588
|
prompt,
|
|
@@ -572,13 +590,22 @@ export class JobScheduler {
|
|
|
572
590
|
jobSlug: job.slug,
|
|
573
591
|
triggeredBy: `scheduler:${reason}`,
|
|
574
592
|
maxDurationMinutes: job.expectedDurationMinutes,
|
|
593
|
+
allowedTools: spawnAllowedTools,
|
|
575
594
|
}).then(() => {
|
|
576
|
-
// Record in run history
|
|
595
|
+
// Record in run history with full Phase 1b observability payload
|
|
577
596
|
const runId = this.runHistory.recordStart({
|
|
578
597
|
slug: job.slug,
|
|
579
598
|
sessionId: sessionName,
|
|
580
599
|
trigger: reason,
|
|
581
600
|
model: model ?? job.model,
|
|
601
|
+
origin: observability.origin,
|
|
602
|
+
resolvedPath: observability.resolvedPath,
|
|
603
|
+
bodyHash: observability.bodyHash,
|
|
604
|
+
frontmatterHash: observability.frontmatterHash,
|
|
605
|
+
manifestVersion: observability.manifestVersion,
|
|
606
|
+
toolAllowlist: observability.toolAllowlist,
|
|
607
|
+
unrestrictedTools: observability.unrestrictedTools,
|
|
608
|
+
clampedAllowlist: observability.clampedAllowlist,
|
|
582
609
|
});
|
|
583
610
|
this.activeRunIds.set(sessionName, runId);
|
|
584
611
|
// Update job state on successful spawn (clear error, set pending result)
|
|
@@ -655,11 +682,8 @@ export class JobScheduler {
|
|
|
655
682
|
let base;
|
|
656
683
|
// execute.value is required for the legacy types ("skill" | "prompt" |
|
|
657
684
|
// "script") and the JobLoader validator guarantees it. The new
|
|
658
|
-
// "agentmd" type (Phase
|
|
659
|
-
// job.body
|
|
660
|
-
// an agentmd job reaching buildPrompt is a Phase 1b/1c bug, not a
|
|
661
|
-
// Phase 1a one, so we throw explicitly rather than silently fall
|
|
662
|
-
// through to undefined.
|
|
685
|
+
// "agentmd" type (Phase 1b) carries no value — its body lives in
|
|
686
|
+
// job.body, populated at load time by AgentMdJobLoader.
|
|
663
687
|
switch (job.execute.type) {
|
|
664
688
|
case 'skill':
|
|
665
689
|
base = `/${job.execute.value}${job.execute.args ? ' ' + job.execute.args : ''}`;
|
|
@@ -671,13 +695,18 @@ export class JobScheduler {
|
|
|
671
695
|
base = `Run this script: ${job.execute.value}${job.execute.args ? ' ' + job.execute.args : ''}`;
|
|
672
696
|
break;
|
|
673
697
|
case 'agentmd':
|
|
674
|
-
// Phase 1b
|
|
675
|
-
//
|
|
676
|
-
//
|
|
677
|
-
//
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
`
|
|
698
|
+
// Phase 1b dispatch: the cached markdown body IS the prompt. The
|
|
699
|
+
// loader (AgentMdJobLoader.loadAgentMdBody) guarantees `body` is
|
|
700
|
+
// populated for any agentmd JobDefinition that survives validation;
|
|
701
|
+
// if it is somehow missing here, surface that loud and refuse to
|
|
702
|
+
// spawn an empty prompt rather than fail silently.
|
|
703
|
+
if (typeof job.body !== 'string') {
|
|
704
|
+
throw new Error(`JobScheduler.buildPrompt: agentmd job "${job.slug}" has no cached body. ` +
|
|
705
|
+
`This indicates a loader-hydration bug (see AgentMdJobLoader.isAgentMdJobHydrated). ` +
|
|
706
|
+
`See docs/specs/INSTAR-JOBS-AS-AGENTMD-SPEC.md.`);
|
|
707
|
+
}
|
|
708
|
+
base = job.body;
|
|
709
|
+
break;
|
|
681
710
|
default: {
|
|
682
711
|
const _exhaustive = job.execute.type;
|
|
683
712
|
throw new Error(`Unknown execute.type: ${String(_exhaustive)}`);
|
|
@@ -1362,5 +1391,193 @@ export class JobScheduler {
|
|
|
1362
1391
|
}
|
|
1363
1392
|
}
|
|
1364
1393
|
}
|
|
1394
|
+
// ── Phase 1b: tool-allowlist resolution + run-record observability ─────
|
|
1395
|
+
//
|
|
1396
|
+
// The helpers below are static so they remain pure functions of the input
|
|
1397
|
+
// JobDefinition — no scheduler state is read. This makes them trivial to
|
|
1398
|
+
// exercise from unit tests without standing up a full scheduler.
|
|
1399
|
+
/**
|
|
1400
|
+
* Resolve a per-job tool allowlist per INSTAR-JOBS-AS-AGENTMD spec §5.
|
|
1401
|
+
*
|
|
1402
|
+
* Decision matrix:
|
|
1403
|
+
* | execute.type !== 'agentmd' → kind:'legacy', allowlist:null (full tools, back-compat)
|
|
1404
|
+
* | frontmatter.toolAllowlist = string[] → kind:'array', allowlist:[...]
|
|
1405
|
+
* | frontmatter.toolAllowlist = "*" + unrestricted → kind:'unrestricted', allowlist:"*", unrestrictedTools:true
|
|
1406
|
+
* | frontmatter.toolAllowlist = "*" + NOT authorized → kind:'clamped', allowlist:['Read'], clampedAllowlist:true (warning event emitted by caller)
|
|
1407
|
+
* | frontmatter.toolAllowlist missing + origin=user → kind:'default-user', allowlist:['Read']
|
|
1408
|
+
* | frontmatter.toolAllowlist missing + origin=instar → kind:'instar-no-allowlist', allowlist:null (degradation event; Phase 1c lock-file will close)
|
|
1409
|
+
*
|
|
1410
|
+
* Returns a single object describing the resolution so callers can both
|
|
1411
|
+
* (a) thread the right argument into the spawn call and (b) annotate the
|
|
1412
|
+
* run record. Side-effects (degradation events) are NOT performed here —
|
|
1413
|
+
* they happen in the caller, where the scheduler context is available.
|
|
1414
|
+
*/
|
|
1415
|
+
static resolveAllowlist(job) {
|
|
1416
|
+
if (job.execute.type !== 'agentmd') {
|
|
1417
|
+
return {
|
|
1418
|
+
kind: 'legacy',
|
|
1419
|
+
allowlist: null,
|
|
1420
|
+
unrestrictedTools: false,
|
|
1421
|
+
clampedAllowlist: false,
|
|
1422
|
+
};
|
|
1423
|
+
}
|
|
1424
|
+
const fm = job.frontmatter ?? {};
|
|
1425
|
+
const raw = fm.toolAllowlist;
|
|
1426
|
+
if (Array.isArray(raw)) {
|
|
1427
|
+
const list = raw.filter((t) => typeof t === 'string' && t.trim().length > 0);
|
|
1428
|
+
return {
|
|
1429
|
+
kind: 'array',
|
|
1430
|
+
allowlist: list,
|
|
1431
|
+
unrestrictedTools: false,
|
|
1432
|
+
clampedAllowlist: false,
|
|
1433
|
+
};
|
|
1434
|
+
}
|
|
1435
|
+
if (raw === '*') {
|
|
1436
|
+
// Two-flag guard: "*" + unrestrictedTools:true → full tools.
|
|
1437
|
+
// Otherwise clamp to [Read] and signal the clamp.
|
|
1438
|
+
if (job.unrestrictedTools === true) {
|
|
1439
|
+
return {
|
|
1440
|
+
kind: 'unrestricted',
|
|
1441
|
+
allowlist: '*',
|
|
1442
|
+
unrestrictedTools: true,
|
|
1443
|
+
clampedAllowlist: false,
|
|
1444
|
+
};
|
|
1445
|
+
}
|
|
1446
|
+
return {
|
|
1447
|
+
kind: 'clamped',
|
|
1448
|
+
allowlist: ['Read'],
|
|
1449
|
+
unrestrictedTools: false,
|
|
1450
|
+
clampedAllowlist: true,
|
|
1451
|
+
};
|
|
1452
|
+
}
|
|
1453
|
+
// toolAllowlist missing
|
|
1454
|
+
if (job.origin === 'user') {
|
|
1455
|
+
// User jobs without an explicit allowlist default to minimal Read-only.
|
|
1456
|
+
return {
|
|
1457
|
+
kind: 'default-user',
|
|
1458
|
+
allowlist: ['Read'],
|
|
1459
|
+
unrestrictedTools: false,
|
|
1460
|
+
clampedAllowlist: false,
|
|
1461
|
+
};
|
|
1462
|
+
}
|
|
1463
|
+
// Instar-origin without an explicit allowlist: documented temporary
|
|
1464
|
+
// behavior — spawn with full tools, emit a degradation event so the
|
|
1465
|
+
// gap is visible until Phase 1c lock-file defaults close it.
|
|
1466
|
+
return {
|
|
1467
|
+
kind: 'instar-no-allowlist',
|
|
1468
|
+
allowlist: null,
|
|
1469
|
+
unrestrictedTools: false,
|
|
1470
|
+
clampedAllowlist: false,
|
|
1471
|
+
};
|
|
1472
|
+
}
|
|
1473
|
+
/**
|
|
1474
|
+
* Compute Phase 1b run-record observability fields for a job. Pure
|
|
1475
|
+
* function: hashing is deterministic over body + canonicalized
|
|
1476
|
+
* frontmatter; non-agentmd entries carry nulls.
|
|
1477
|
+
*/
|
|
1478
|
+
static computeRunObservability(job, resolution) {
|
|
1479
|
+
const isAgentMd = job.execute.type === 'agentmd';
|
|
1480
|
+
let origin;
|
|
1481
|
+
if (job.execute.type !== 'agentmd') {
|
|
1482
|
+
origin = 'legacy';
|
|
1483
|
+
}
|
|
1484
|
+
else if (job.origin === 'instar') {
|
|
1485
|
+
origin = 'instar';
|
|
1486
|
+
}
|
|
1487
|
+
else {
|
|
1488
|
+
origin = 'user';
|
|
1489
|
+
}
|
|
1490
|
+
const bodyHash = isAgentMd && typeof job.body === 'string'
|
|
1491
|
+
? `sha256:${crypto.createHash('sha256').update(job.body).digest('hex')}`
|
|
1492
|
+
: null;
|
|
1493
|
+
const frontmatterHash = isAgentMd
|
|
1494
|
+
? `sha256:${crypto
|
|
1495
|
+
.createHash('sha256')
|
|
1496
|
+
.update(JobScheduler.canonicalize(job.frontmatter ?? {}))
|
|
1497
|
+
.digest('hex')}`
|
|
1498
|
+
: null;
|
|
1499
|
+
return {
|
|
1500
|
+
origin,
|
|
1501
|
+
resolvedPath: isAgentMd ? (job.resolvedPath ?? null) : null,
|
|
1502
|
+
bodyHash,
|
|
1503
|
+
frontmatterHash,
|
|
1504
|
+
manifestVersion: isAgentMd && typeof job.manifestVersion === 'number'
|
|
1505
|
+
? job.manifestVersion
|
|
1506
|
+
: null,
|
|
1507
|
+
toolAllowlist: resolution.allowlist,
|
|
1508
|
+
unrestrictedTools: resolution.unrestrictedTools,
|
|
1509
|
+
clampedAllowlist: resolution.clampedAllowlist,
|
|
1510
|
+
};
|
|
1511
|
+
}
|
|
1512
|
+
/**
|
|
1513
|
+
* Canonical JSON encoding for hash stability. Sorts object keys at every
|
|
1514
|
+
* depth so the same logical frontmatter always produces the same hash,
|
|
1515
|
+
* regardless of insertion order. Arrays preserve order. Primitive nulls
|
|
1516
|
+
* and undefined are encoded the same way `JSON.stringify` does.
|
|
1517
|
+
*/
|
|
1518
|
+
static canonicalize(value) {
|
|
1519
|
+
if (value === null || typeof value !== 'object') {
|
|
1520
|
+
return JSON.stringify(value);
|
|
1521
|
+
}
|
|
1522
|
+
if (Array.isArray(value)) {
|
|
1523
|
+
return '[' + value.map(v => JobScheduler.canonicalize(v)).join(',') + ']';
|
|
1524
|
+
}
|
|
1525
|
+
const keys = Object.keys(value).sort();
|
|
1526
|
+
const parts = keys.map(k => {
|
|
1527
|
+
return JSON.stringify(k) + ':' + JobScheduler.canonicalize(value[k]);
|
|
1528
|
+
});
|
|
1529
|
+
return '{' + parts.join(',') + '}';
|
|
1530
|
+
}
|
|
1531
|
+
/**
|
|
1532
|
+
* Emit Phase 1b side-channel signals for an allowlist resolution.
|
|
1533
|
+
* Side effects (Dashboard event + degradation event) are gathered here
|
|
1534
|
+
* so spawnJobSession can call once at spawn time. Pure function on the
|
|
1535
|
+
* scheduler's `state.appendEvent` and the global DegradationReporter.
|
|
1536
|
+
*
|
|
1537
|
+
* The clamped-allowlist warning is a Dashboard-visible event AND a
|
|
1538
|
+
* DegradationReporter event — both surface to the user via different
|
|
1539
|
+
* channels (event stream vs degradation digest).
|
|
1540
|
+
*
|
|
1541
|
+
* The instar-no-allowlist path is a DegradationReporter event only:
|
|
1542
|
+
* Phase 1c's lock-file defaults will close this gap; until then the
|
|
1543
|
+
* temporary "full tools" behavior is documented and observable.
|
|
1544
|
+
*/
|
|
1545
|
+
emitAllowlistSignals(job, resolution) {
|
|
1546
|
+
if (resolution.clampedAllowlist) {
|
|
1547
|
+
this.state.appendEvent({
|
|
1548
|
+
type: 'job_allowlist_clamped',
|
|
1549
|
+
summary: `Job "${job.slug}" requested toolAllowlist:"*" without unrestrictedTools:true — ` +
|
|
1550
|
+
`clamped to [Read]. Set unrestrictedTools:true in the manifest to authorize full tools.`,
|
|
1551
|
+
timestamp: new Date().toISOString(),
|
|
1552
|
+
metadata: { slug: job.slug, origin: job.origin },
|
|
1553
|
+
});
|
|
1554
|
+
try {
|
|
1555
|
+
DegradationReporter.getInstance().report({
|
|
1556
|
+
feature: 'JobScheduler.allowlistResolution',
|
|
1557
|
+
primary: 'Spawn with the requested allowlist (toolAllowlist:"*")',
|
|
1558
|
+
fallback: 'Clamp the spawn to ["Read"]',
|
|
1559
|
+
reason: `Job "${job.slug}" requested toolAllowlist:"*" without manifest.unrestrictedTools:true`,
|
|
1560
|
+
impact: 'Job will run with Read-only tools until the manifest sets unrestrictedTools:true',
|
|
1561
|
+
});
|
|
1562
|
+
}
|
|
1563
|
+
catch {
|
|
1564
|
+
// @silent-fallback-ok — degradation reporting is best-effort
|
|
1565
|
+
}
|
|
1566
|
+
}
|
|
1567
|
+
if (resolution.kind === 'instar-no-allowlist') {
|
|
1568
|
+
try {
|
|
1569
|
+
DegradationReporter.getInstance().report({
|
|
1570
|
+
feature: 'JobScheduler.allowlistResolution',
|
|
1571
|
+
primary: 'Look up a structural per-slug default allowlist (Phase 1c lock-file)',
|
|
1572
|
+
fallback: 'Spawn with full tools (no --allowedTools flag)',
|
|
1573
|
+
reason: `Instar-origin agentmd job "${job.slug}" has no toolAllowlist frontmatter; Phase 1c lock-file defaults are not yet shipped`,
|
|
1574
|
+
impact: 'Job runs with full tools until Phase 1c lock-file defaults land',
|
|
1575
|
+
});
|
|
1576
|
+
}
|
|
1577
|
+
catch {
|
|
1578
|
+
// @silent-fallback-ok — degradation reporting is best-effort
|
|
1579
|
+
}
|
|
1580
|
+
}
|
|
1581
|
+
}
|
|
1365
1582
|
}
|
|
1366
1583
|
//# sourceMappingURL=JobScheduler.js.map
|