instar 1.3.9 → 1.3.10
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/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +12 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/scheduler/MentorOnboardingRunner.d.ts +63 -0
- package/dist/scheduler/MentorOnboardingRunner.d.ts.map +1 -0
- package/dist/scheduler/MentorOnboardingRunner.js +60 -0
- package/dist/scheduler/MentorOnboardingRunner.js.map +1 -0
- package/dist/scheduler/MentorOnboardingTick.d.ts +68 -0
- package/dist/scheduler/MentorOnboardingTick.d.ts.map +1 -0
- package/dist/scheduler/MentorOnboardingTick.js +104 -0
- package/dist/scheduler/MentorOnboardingTick.js.map +1 -0
- package/dist/server/AgentServer.d.ts +14 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +79 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/CapabilityIndex.d.ts.map +1 -1
- package/dist/server/CapabilityIndex.js +12 -0
- package/dist/server/CapabilityIndex.js.map +1 -1
- package/dist/server/routes.d.ts +3 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +24 -0
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +47 -47
- package/src/scaffold/templates/jobs/instar/mentor-onboarding.md +41 -0
- package/upgrades/1.3.10.md +47 -0
- package/upgrades/side-effects/mentor-onboarding-job.md +186 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigDefaults.d.ts","sourceRoot":"","sources":["../../src/config/ConfigDefaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"ConfigDefaults.d.ts","sourceRoot":"","sources":["../../src/config/ConfigDefaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAsPH,MAAM,MAAM,SAAS,GAAG,iBAAiB,GAAG,YAAY,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAO7E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIlF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAuC5D"}
|
|
@@ -98,6 +98,18 @@ const SHARED_DEFAULTS = {
|
|
|
98
98
|
enabled: true,
|
|
99
99
|
},
|
|
100
100
|
},
|
|
101
|
+
// Framework-Onboarding Mentor System (§19.4). Ships DORMANT: enabled:false +
|
|
102
|
+
// mode:'off' so POST /mentor/tick returns {ran:false,reason:'disabled'} and
|
|
103
|
+
// nothing spawns or spends. Promotion off → dry-run → live is the human's, via
|
|
104
|
+
// the graduated-rollout track. See docs/specs/FRAMEWORK-ONBOARDING-MENTOR-SPEC.md.
|
|
105
|
+
mentor: {
|
|
106
|
+
enabled: false,
|
|
107
|
+
mode: 'off',
|
|
108
|
+
menteeFramework: 'codex-cli',
|
|
109
|
+
minIntervalMs: 600000, // 10-min floor between ticks (anti-forced-cadence)
|
|
110
|
+
maxRoundsPerDay: 24,
|
|
111
|
+
dailySpendCapUsd: 0.5,
|
|
112
|
+
},
|
|
101
113
|
// Spec-review standards-conformance gate (rung-3 normative slice). Default-on:
|
|
102
114
|
// the gate reads docs/STANDARDS-REGISTRY.md and signals possible standard
|
|
103
115
|
// violations in a draft spec. Signal-only (never blocks); 503-stubs where the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigDefaults.js","sourceRoot":"","sources":["../../src/config/ConfigDefaults.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConfigDefaults.js","sourceRoot":"","sources":["../../src/config/ConfigDefaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MentorOnboardingRunner — thin glue that assembles the real services into the
|
|
3
|
+
* pure runMentorTick core (FRAMEWORK-ONBOARDING-MENTOR-SPEC §19.4).
|
|
4
|
+
*
|
|
5
|
+
* The runner holds no orchestration logic of its own — that lives in
|
|
6
|
+
* runMentorTick (pure, fully unit-tested). The runner's only job is to (a) read
|
|
7
|
+
* the mentor config and short-circuit when the feature is off, and (b) wire the
|
|
8
|
+
* injected services (ledger, Stage-A spawn, Stage-B forensics, mentee-busy check,
|
|
9
|
+
* budget gate, surface builder) into the tick's callbacks. Every service is
|
|
10
|
+
* injected, so the runner is testable with fakes and carries no hard dependency
|
|
11
|
+
* on SessionManager/tmux/LLM at construction.
|
|
12
|
+
*
|
|
13
|
+
* Ships dormant: `mentor.enabled=false` / `mentor.mode='off'` by default (§16).
|
|
14
|
+
*/
|
|
15
|
+
import { type MentorTickResult } from './MentorOnboardingTick.js';
|
|
16
|
+
import type { ConversationSurface } from '../monitoring/MentorStageA.js';
|
|
17
|
+
import type { CaptureRunInput, CaptureRunResult, ForensicFinding } from '../monitoring/FrameworkIssueLedger.js';
|
|
18
|
+
export interface MentorConfig {
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
mode: 'off' | 'dry-run' | 'live';
|
|
21
|
+
/** The framework being mentored (parametric). */
|
|
22
|
+
menteeFramework: string;
|
|
23
|
+
minIntervalMs: number;
|
|
24
|
+
maxRoundsPerDay: number;
|
|
25
|
+
dailySpendCapUsd: number;
|
|
26
|
+
}
|
|
27
|
+
export declare const DEFAULT_MENTOR_CONFIG: MentorConfig;
|
|
28
|
+
export interface MentorRunnerServices {
|
|
29
|
+
/** Write findings + log the run to the ledger funnel (§19.2). */
|
|
30
|
+
capture: (input: CaptureRunInput) => CaptureRunResult;
|
|
31
|
+
/** Spawn Stage A with the empty tool grant; return its transcript. */
|
|
32
|
+
spawnStageA: (prompt: string) => Promise<string>;
|
|
33
|
+
/** Stage-B forensics for the framework; return findings. */
|
|
34
|
+
runStageBForensics: (framework: string) => Promise<ForensicFinding[]>;
|
|
35
|
+
/** Durable safe-window inputs. */
|
|
36
|
+
isMenteeBusy: () => boolean;
|
|
37
|
+
minIntervalElapsed: () => boolean;
|
|
38
|
+
/** Fail-closed budget gate. */
|
|
39
|
+
budgetOk: () => boolean;
|
|
40
|
+
/** Build the conversation surface (Stage A's only input). */
|
|
41
|
+
getSurface: (framework: string) => ConversationSurface;
|
|
42
|
+
/** Called once when a tick actually RAN (ran=true) — lets the host advance the
|
|
43
|
+
* min-interval clock and the per-day run counter. */
|
|
44
|
+
onTickRan?: () => void;
|
|
45
|
+
now?: () => number;
|
|
46
|
+
}
|
|
47
|
+
export type MentorRunReason = MentorTickResult['reason'] | 'disabled';
|
|
48
|
+
export interface MentorRunResult extends Omit<MentorTickResult, 'reason'> {
|
|
49
|
+
reason: MentorRunReason;
|
|
50
|
+
}
|
|
51
|
+
export declare class MentorOnboardingRunner {
|
|
52
|
+
private readonly services;
|
|
53
|
+
private readonly getConfig;
|
|
54
|
+
constructor(services: MentorRunnerServices, getConfig: () => MentorConfig);
|
|
55
|
+
status(): {
|
|
56
|
+
enabled: boolean;
|
|
57
|
+
mode: MentorConfig['mode'];
|
|
58
|
+
menteeFramework: string;
|
|
59
|
+
};
|
|
60
|
+
/** Run one tick. Short-circuits to `disabled` when the feature is off (§16). */
|
|
61
|
+
tick(): Promise<MentorRunResult>;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=MentorOnboardingRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentorOnboardingRunner.d.ts","sourceRoot":"","sources":["../../src/scheduler/MentorOnboardingRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAiB,KAAK,gBAAgB,EAAmB,MAAM,2BAA2B,CAAC;AAClG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAEhH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IACjC,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,qBAAqB,EAAE,YAOnC,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,gBAAgB,CAAC;IACtD,sEAAsE;IACtE,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,4DAA4D;IAC5D,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACtE,kCAAkC;IAClC,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B,kBAAkB,EAAE,MAAM,OAAO,CAAC;IAClC,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,6DAA6D;IAC7D,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,mBAAmB,CAAC;IACvD;0DACsD;IACtD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,eAAe,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;AAEtE,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC;IACvE,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,QAAQ,EAAE,oBAAoB,EAC9B,SAAS,EAAE,MAAM,YAAY;IAGhD,MAAM,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE;IAKnF,gFAAgF;IAC1E,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;CAsBvC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MentorOnboardingRunner — thin glue that assembles the real services into the
|
|
3
|
+
* pure runMentorTick core (FRAMEWORK-ONBOARDING-MENTOR-SPEC §19.4).
|
|
4
|
+
*
|
|
5
|
+
* The runner holds no orchestration logic of its own — that lives in
|
|
6
|
+
* runMentorTick (pure, fully unit-tested). The runner's only job is to (a) read
|
|
7
|
+
* the mentor config and short-circuit when the feature is off, and (b) wire the
|
|
8
|
+
* injected services (ledger, Stage-A spawn, Stage-B forensics, mentee-busy check,
|
|
9
|
+
* budget gate, surface builder) into the tick's callbacks. Every service is
|
|
10
|
+
* injected, so the runner is testable with fakes and carries no hard dependency
|
|
11
|
+
* on SessionManager/tmux/LLM at construction.
|
|
12
|
+
*
|
|
13
|
+
* Ships dormant: `mentor.enabled=false` / `mentor.mode='off'` by default (§16).
|
|
14
|
+
*/
|
|
15
|
+
import { runMentorTick } from './MentorOnboardingTick.js';
|
|
16
|
+
export const DEFAULT_MENTOR_CONFIG = {
|
|
17
|
+
enabled: false,
|
|
18
|
+
mode: 'off',
|
|
19
|
+
menteeFramework: 'codex-cli',
|
|
20
|
+
minIntervalMs: 600_000, // 10 min floor
|
|
21
|
+
maxRoundsPerDay: 24,
|
|
22
|
+
dailySpendCapUsd: 0.5,
|
|
23
|
+
};
|
|
24
|
+
export class MentorOnboardingRunner {
|
|
25
|
+
services;
|
|
26
|
+
getConfig;
|
|
27
|
+
constructor(services, getConfig) {
|
|
28
|
+
this.services = services;
|
|
29
|
+
this.getConfig = getConfig;
|
|
30
|
+
}
|
|
31
|
+
status() {
|
|
32
|
+
const cfg = this.getConfig();
|
|
33
|
+
return { enabled: cfg.enabled, mode: cfg.mode, menteeFramework: cfg.menteeFramework };
|
|
34
|
+
}
|
|
35
|
+
/** Run one tick. Short-circuits to `disabled` when the feature is off (§16). */
|
|
36
|
+
async tick() {
|
|
37
|
+
const cfg = this.getConfig();
|
|
38
|
+
if (!cfg.enabled || cfg.mode === 'off') {
|
|
39
|
+
return { ran: false, reason: 'disabled' };
|
|
40
|
+
}
|
|
41
|
+
const framework = cfg.menteeFramework;
|
|
42
|
+
const mode = cfg.mode === 'live' ? 'live' : 'dry-run';
|
|
43
|
+
const result = await runMentorTick({
|
|
44
|
+
framework,
|
|
45
|
+
mode,
|
|
46
|
+
surface: this.services.getSurface(framework),
|
|
47
|
+
// Safe window = mentee at rest AND the min-interval floor elapsed (§12 Q3).
|
|
48
|
+
safeWindowOpen: !this.services.isMenteeBusy() && this.services.minIntervalElapsed(),
|
|
49
|
+
budgetOk: this.services.budgetOk(),
|
|
50
|
+
spawnStageA: this.services.spawnStageA,
|
|
51
|
+
runStageBForensics: () => this.services.runStageBForensics(framework),
|
|
52
|
+
capture: this.services.capture,
|
|
53
|
+
now: this.services.now,
|
|
54
|
+
});
|
|
55
|
+
if (result.ran)
|
|
56
|
+
this.services.onTickRan?.();
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=MentorOnboardingRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentorOnboardingRunner.js","sourceRoot":"","sources":["../../src/scheduler/MentorOnboardingRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,aAAa,EAA0C,MAAM,2BAA2B,CAAC;AAclG,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,KAAK;IACX,eAAe,EAAE,WAAW;IAC5B,aAAa,EAAE,OAAO,EAAE,eAAe;IACvC,eAAe,EAAE,EAAE;IACnB,gBAAgB,EAAE,GAAG;CACtB,CAAC;AA4BF,MAAM,OAAO,sBAAsB;IAEd;IACA;IAFnB,YACmB,QAA8B,EAC9B,SAA6B;QAD7B,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,cAAS,GAAT,SAAS,CAAoB;IAC7C,CAAC;IAEJ,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC;IACxF,CAAC;IAED,gFAAgF;IAChF,KAAK,CAAC,IAAI;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACvC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC5C,CAAC;QACD,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC;QACtC,MAAM,IAAI,GAAe,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,SAAS;YACT,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;YAC5C,4EAA4E;YAC5E,cAAc,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YACnF,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAClC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;YACtC,kBAAkB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACrE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;YAC9B,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;SACvB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,GAAG;YAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MentorOnboardingTick — the structural core of one mentor heartbeat tick
|
|
3
|
+
* (FRAMEWORK-ONBOARDING-MENTOR-SPEC §3, §4, §6, §19.4).
|
|
4
|
+
*
|
|
5
|
+
* This is PURE orchestration logic with every side-effect injected as a
|
|
6
|
+
* callback, so the whole tick is unit-testable without tmux, an LLM, or a
|
|
7
|
+
* server. The structural guarantees the spec demands live HERE (in code), not
|
|
8
|
+
* in a prompt:
|
|
9
|
+
*
|
|
10
|
+
* - The leak canary runs FIRST every tick; a dead detector halts the tick and
|
|
11
|
+
* self-reports (§4.3) — the detector can't silently rot.
|
|
12
|
+
* - The budget check is a fail-closed PRE-tick gate: under budget pressure the
|
|
13
|
+
* ENTIRE tick is skipped before any spend or any contact (§6) — never a
|
|
14
|
+
* partial Stage A without Stage B.
|
|
15
|
+
* - The safe-window check gates on a durable mentee state, not a clock (§12 Q3).
|
|
16
|
+
* - Stage A is driven via the injected `spawnStageA` (the §19.4 runner passes
|
|
17
|
+
* the empty-tool-grant spawn); its transcript is run through the leakage
|
|
18
|
+
* detector and any leak is captured as an instar-integration-gap (§4.3).
|
|
19
|
+
* - Stage B forensics + capture run via injected callbacks; the ledger's
|
|
20
|
+
* captureRun logs the run to the funnel even when nothing is found (§19.2).
|
|
21
|
+
*/
|
|
22
|
+
import { type ConversationSurface } from '../monitoring/MentorStageA.js';
|
|
23
|
+
import type { CaptureRunInput, CaptureRunResult, ForensicFinding } from '../monitoring/FrameworkIssueLedger.js';
|
|
24
|
+
/** Mentor run modes (spec §16). `off` never reaches the tick; `dry-run` does
|
|
25
|
+
* everything except deliver a message to the mentee; `live` is the full loop. */
|
|
26
|
+
export type MentorMode = 'dry-run' | 'live';
|
|
27
|
+
export interface MentorTickDeps {
|
|
28
|
+
framework: string;
|
|
29
|
+
mode: MentorMode;
|
|
30
|
+
/** The user-visible conversation surface (Stage A's only input). */
|
|
31
|
+
surface: ConversationSurface;
|
|
32
|
+
/** Durable safe-window: true when the mentee is at a stable point (task-complete /
|
|
33
|
+
* waiting / blocked / quiet-after-user-msg) AND the min-interval floor has elapsed. */
|
|
34
|
+
safeWindowOpen: boolean;
|
|
35
|
+
/** Fail-closed budget gate (the GET /autonomous/can-start precedent). */
|
|
36
|
+
budgetOk: boolean;
|
|
37
|
+
/** Spawn Stage A (empty tool grant) and return its transcript. Injected so the
|
|
38
|
+
* pure tick has no SessionManager/tmux dependency. */
|
|
39
|
+
spawnStageA: (prompt: string) => Promise<string>;
|
|
40
|
+
/** Stage-B forensics: read the mentee's logs/rollouts/diff and return findings.
|
|
41
|
+
* Injected so the pure tick has no LLM dependency. */
|
|
42
|
+
runStageBForensics: () => Promise<ForensicFinding[]>;
|
|
43
|
+
/** Write findings + log the run to the ledger funnel (§19.2). */
|
|
44
|
+
capture: (input: CaptureRunInput) => CaptureRunResult;
|
|
45
|
+
/** Tick id for provenance/episode keying. */
|
|
46
|
+
tickId?: string;
|
|
47
|
+
now?: () => number;
|
|
48
|
+
/** Leak-detector liveness check; defaults to the real canary. Injected for tests. */
|
|
49
|
+
canaryCheck?: () => boolean;
|
|
50
|
+
}
|
|
51
|
+
export type MentorTickReason = 'canary-failed' | 'budget' | 'unsafe-window' | 'stage-a-failed' | 'ran';
|
|
52
|
+
export interface MentorTickResult {
|
|
53
|
+
ran: boolean;
|
|
54
|
+
reason: MentorTickReason;
|
|
55
|
+
mode?: MentorMode;
|
|
56
|
+
leakDetected?: boolean;
|
|
57
|
+
observationsWritten?: number;
|
|
58
|
+
findingsCount?: number;
|
|
59
|
+
/** The Stage-A message the mentor produced (delivered only in `live` mode by the runner). */
|
|
60
|
+
stageAMessage?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Run one mentor tick. Returns a structured result; the only side effects are
|
|
64
|
+
* via the injected callbacks. Order is load-bearing (canary → budget →
|
|
65
|
+
* safe-window → Stage A → leak → Stage B → capture).
|
|
66
|
+
*/
|
|
67
|
+
export declare function runMentorTick(deps: MentorTickDeps): Promise<MentorTickResult>;
|
|
68
|
+
//# sourceMappingURL=MentorOnboardingTick.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentorOnboardingTick.d.ts","sourceRoot":"","sources":["../../src/scheduler/MentorOnboardingTick.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAEhH;kFACkF;AAClF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,oEAAoE;IACpE,OAAO,EAAE,mBAAmB,CAAC;IAC7B;4FACwF;IACxF,cAAc,EAAE,OAAO,CAAC;IACxB,yEAAyE;IACzE,QAAQ,EAAE,OAAO,CAAC;IAClB;2DACuD;IACvD,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD;2DACuD;IACvD,kBAAkB,EAAE,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACrD,iEAAiE;IACjE,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,gBAAgB,CAAC;IACtD,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,QAAQ,GACR,eAAe,GACf,gBAAgB,GAChB,KAAK,CAAC;AAEV,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+EnF"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MentorOnboardingTick — the structural core of one mentor heartbeat tick
|
|
3
|
+
* (FRAMEWORK-ONBOARDING-MENTOR-SPEC §3, §4, §6, §19.4).
|
|
4
|
+
*
|
|
5
|
+
* This is PURE orchestration logic with every side-effect injected as a
|
|
6
|
+
* callback, so the whole tick is unit-testable without tmux, an LLM, or a
|
|
7
|
+
* server. The structural guarantees the spec demands live HERE (in code), not
|
|
8
|
+
* in a prompt:
|
|
9
|
+
*
|
|
10
|
+
* - The leak canary runs FIRST every tick; a dead detector halts the tick and
|
|
11
|
+
* self-reports (§4.3) — the detector can't silently rot.
|
|
12
|
+
* - The budget check is a fail-closed PRE-tick gate: under budget pressure the
|
|
13
|
+
* ENTIRE tick is skipped before any spend or any contact (§6) — never a
|
|
14
|
+
* partial Stage A without Stage B.
|
|
15
|
+
* - The safe-window check gates on a durable mentee state, not a clock (§12 Q3).
|
|
16
|
+
* - Stage A is driven via the injected `spawnStageA` (the §19.4 runner passes
|
|
17
|
+
* the empty-tool-grant spawn); its transcript is run through the leakage
|
|
18
|
+
* detector and any leak is captured as an instar-integration-gap (§4.3).
|
|
19
|
+
* - Stage B forensics + capture run via injected callbacks; the ledger's
|
|
20
|
+
* captureRun logs the run to the funnel even when nothing is found (§19.2).
|
|
21
|
+
*/
|
|
22
|
+
import { buildStageAContext, detectStageALeak, runLeakCanary, leakToFinding, } from '../monitoring/MentorStageA.js';
|
|
23
|
+
/**
|
|
24
|
+
* Run one mentor tick. Returns a structured result; the only side effects are
|
|
25
|
+
* via the injected callbacks. Order is load-bearing (canary → budget →
|
|
26
|
+
* safe-window → Stage A → leak → Stage B → capture).
|
|
27
|
+
*/
|
|
28
|
+
export async function runMentorTick(deps) {
|
|
29
|
+
const tickId = deps.tickId ?? `mentor-${(deps.now ?? Date.now)()}`;
|
|
30
|
+
// 1. Leak canary FIRST — a dead detector can't be trusted to police Stage A,
|
|
31
|
+
// so we halt and self-report rather than run blind (§4.3).
|
|
32
|
+
const canary = deps.canaryCheck ?? runLeakCanary;
|
|
33
|
+
if (!canary()) {
|
|
34
|
+
deps.capture({
|
|
35
|
+
framework: deps.framework,
|
|
36
|
+
tickId,
|
|
37
|
+
findings: [
|
|
38
|
+
{
|
|
39
|
+
bucket: 'instar-integration-gap',
|
|
40
|
+
title: 'Mentor leak detector canary failed — detector may be inert',
|
|
41
|
+
dedupKey: `${deps.framework}::leak-canary-failed`,
|
|
42
|
+
signature: 'leak-canary-failed',
|
|
43
|
+
severity: 'high',
|
|
44
|
+
episodeKey: tickId,
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
});
|
|
48
|
+
return { ran: false, reason: 'canary-failed' };
|
|
49
|
+
}
|
|
50
|
+
// 2. Budget gate — fail-closed BEFORE any spend or contact (§6).
|
|
51
|
+
if (!deps.budgetOk)
|
|
52
|
+
return { ran: false, reason: 'budget' };
|
|
53
|
+
// 3. Safe-window — only act at a durable mentee state transition (§12 Q3).
|
|
54
|
+
if (!deps.safeWindowOpen)
|
|
55
|
+
return { ran: false, reason: 'unsafe-window' };
|
|
56
|
+
// 4. Stage A — drive the mentee from the conversation surface only.
|
|
57
|
+
let transcript;
|
|
58
|
+
try {
|
|
59
|
+
transcript = await deps.spawnStageA(buildStageAContext(deps.surface));
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
deps.capture({
|
|
63
|
+
framework: deps.framework,
|
|
64
|
+
tickId,
|
|
65
|
+
findings: [
|
|
66
|
+
{
|
|
67
|
+
bucket: 'instar-integration-gap',
|
|
68
|
+
title: 'Stage-A spawn failed during a mentor tick',
|
|
69
|
+
dedupKey: `${deps.framework}::stage-a-spawn-failed`,
|
|
70
|
+
signature: 'stage-a-spawn-failed',
|
|
71
|
+
severity: 'medium',
|
|
72
|
+
episodeKey: tickId,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
});
|
|
76
|
+
return { ran: false, reason: 'stage-a-failed' };
|
|
77
|
+
}
|
|
78
|
+
// 5. Leakage detection on the Stage-A transcript (§4.3).
|
|
79
|
+
const leak = detectStageALeak(transcript, deps.surface);
|
|
80
|
+
const findings = [];
|
|
81
|
+
if (leak.leaked)
|
|
82
|
+
findings.push(leakToFinding(deps.framework, leak, tickId));
|
|
83
|
+
// 6. Stage B forensics (separate step, full tool access in the runner).
|
|
84
|
+
const stageBFindings = await deps.runStageBForensics();
|
|
85
|
+
findings.push(...stageBFindings);
|
|
86
|
+
// 7. Capture — writes findings + logs the run to the funnel (§19.2),
|
|
87
|
+
// even if findings is empty (inert-writer guard).
|
|
88
|
+
const captured = deps.capture({ framework: deps.framework, tickId, findings });
|
|
89
|
+
return {
|
|
90
|
+
ran: true,
|
|
91
|
+
reason: 'ran',
|
|
92
|
+
mode: deps.mode,
|
|
93
|
+
leakDetected: leak.leaked,
|
|
94
|
+
observationsWritten: captured.observationsWritten,
|
|
95
|
+
findingsCount: findings.length,
|
|
96
|
+
// The tick SURFACES the Stage-A message it produced; it does NOT deliver it.
|
|
97
|
+
// No mentee-delivery path is wired yet — `live` mode is not reachable until
|
|
98
|
+
// the persist-only delivery (§6) is built + tested. Until then both dry-run
|
|
99
|
+
// and live only observe + capture. Delivery is a live-promotion blocker.
|
|
100
|
+
// <!-- tracked: topic-13435 -->
|
|
101
|
+
stageAMessage: transcript,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=MentorOnboardingTick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentorOnboardingTick.js","sourceRoot":"","sources":["../../src/scheduler/MentorOnboardingTick.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,12 @@ export declare class AgentServer {
|
|
|
48
48
|
private tokenLedger;
|
|
49
49
|
private tokenLedgerPoller;
|
|
50
50
|
private frameworkIssueLedger;
|
|
51
|
+
private mentorRunner;
|
|
52
|
+
/** Wall-clock of the last mentor tick that ran, for the min-interval floor. */
|
|
53
|
+
private mentorLastTickAt;
|
|
54
|
+
/** UTC day + run count for the per-day mentor cap (resets across days). */
|
|
55
|
+
private mentorDayKey;
|
|
56
|
+
private mentorRunsToday;
|
|
51
57
|
private burnDetector;
|
|
52
58
|
private burnThrottleRunbook;
|
|
53
59
|
private burnVerifier;
|
|
@@ -208,6 +214,14 @@ export declare class AgentServer {
|
|
|
208
214
|
* In dist (published): ../../dashboard (relative to dist/server/)
|
|
209
215
|
*/
|
|
210
216
|
private resolveDashboardDir;
|
|
217
|
+
/**
|
|
218
|
+
* Wire the mentor-onboarding runner (§19.4) from real services. Ships DORMANT:
|
|
219
|
+
* the config defaults to mentor.enabled=false / mode='off', so tick() returns
|
|
220
|
+
* {ran:false, reason:'disabled'} in production until a human flips it via the
|
|
221
|
+
* graduated-rollout track. The live spawn/forensics paths are real code, gated
|
|
222
|
+
* behind that flag and validated via test-as-self before promotion.
|
|
223
|
+
*/
|
|
224
|
+
private buildMentorRunner;
|
|
211
225
|
/**
|
|
212
226
|
* Start the HTTP server.
|
|
213
227
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentServer.d.ts","sourceRoot":"","sources":["../../src/server/AgentServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAgB,EAAE,KAAK,OAAO,EAA+B,MAAM,SAAS,CAAC;AAM7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AAWxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"AgentServer.d.ts","sourceRoot":"","sources":["../../src/server/AgentServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,8 @@ import os from 'node:os';
|
|
|
31
31
|
import { TokenLedger } from '../monitoring/TokenLedger.js';
|
|
32
32
|
import { TokenLedgerPoller } from '../monitoring/TokenLedgerPoller.js';
|
|
33
33
|
import { FrameworkIssueLedger } from '../monitoring/FrameworkIssueLedger.js';
|
|
34
|
+
import { MentorOnboardingRunner, DEFAULT_MENTOR_CONFIG } from '../scheduler/MentorOnboardingRunner.js';
|
|
35
|
+
import { STAGE_A_ALLOWED_TOOLS } from '../monitoring/MentorStageA.js';
|
|
34
36
|
import { BurnDetector } from '../monitoring/BurnDetector.js';
|
|
35
37
|
import { BurnThrottleRunbook } from '../monitoring/BurnThrottleRunbook.js';
|
|
36
38
|
import { BurnVerifier } from '../monitoring/BurnVerifier.js';
|
|
@@ -55,6 +57,12 @@ export class AgentServer {
|
|
|
55
57
|
tokenLedger = null;
|
|
56
58
|
tokenLedgerPoller = null;
|
|
57
59
|
frameworkIssueLedger = null;
|
|
60
|
+
mentorRunner = null;
|
|
61
|
+
/** Wall-clock of the last mentor tick that ran, for the min-interval floor. */
|
|
62
|
+
mentorLastTickAt = 0;
|
|
63
|
+
/** UTC day + run count for the per-day mentor cap (resets across days). */
|
|
64
|
+
mentorDayKey = '';
|
|
65
|
+
mentorRunsToday = 0;
|
|
58
66
|
// Burn-detection-and-self-heal system (six-phase umbrella spec at
|
|
59
67
|
// docs/specs/token-burn-detection-and-self-heal.md). Lazy-initialised
|
|
60
68
|
// after the TokenLedger comes up — burn detection without a ledger is
|
|
@@ -253,10 +261,12 @@ export class AgentServer {
|
|
|
253
261
|
this.frameworkIssueLedger = new FrameworkIssueLedger({
|
|
254
262
|
dbPath: path.join(serverDataDir, 'framework-issue-ledger.db'),
|
|
255
263
|
});
|
|
264
|
+
this.mentorRunner = this.buildMentorRunner(this.frameworkIssueLedger, options);
|
|
256
265
|
}
|
|
257
266
|
catch (err) {
|
|
258
267
|
console.warn('[instar] framework-issue-ledger init failed (non-fatal):', err);
|
|
259
268
|
this.frameworkIssueLedger = null;
|
|
269
|
+
this.mentorRunner = null;
|
|
260
270
|
}
|
|
261
271
|
}
|
|
262
272
|
}
|
|
@@ -354,6 +364,7 @@ export class AgentServer {
|
|
|
354
364
|
machineHeartbeat: options.machineHeartbeat ?? null,
|
|
355
365
|
tokenLedger: this.tokenLedger,
|
|
356
366
|
frameworkIssueLedger: this.frameworkIssueLedger,
|
|
367
|
+
mentorRunner: this.mentorRunner,
|
|
357
368
|
sessionReaper: options.sessionReaper ?? null,
|
|
358
369
|
telegramBridgeConfig: options.telegramBridgeConfig ?? null,
|
|
359
370
|
telegramBridge: options.telegramBridge ?? null,
|
|
@@ -449,6 +460,74 @@ export class AgentServer {
|
|
|
449
460
|
return fromSrc;
|
|
450
461
|
return fromDist;
|
|
451
462
|
}
|
|
463
|
+
/**
|
|
464
|
+
* Wire the mentor-onboarding runner (§19.4) from real services. Ships DORMANT:
|
|
465
|
+
* the config defaults to mentor.enabled=false / mode='off', so tick() returns
|
|
466
|
+
* {ran:false, reason:'disabled'} in production until a human flips it via the
|
|
467
|
+
* graduated-rollout track. The live spawn/forensics paths are real code, gated
|
|
468
|
+
* behind that flag and validated via test-as-self before promotion.
|
|
469
|
+
*/
|
|
470
|
+
buildMentorRunner(ledger, options) {
|
|
471
|
+
const getConfig = () => ({
|
|
472
|
+
...DEFAULT_MENTOR_CONFIG,
|
|
473
|
+
...(options.config.mentor ?? {}),
|
|
474
|
+
});
|
|
475
|
+
const intelligence = options.intelligence ?? null;
|
|
476
|
+
const self = this;
|
|
477
|
+
return new MentorOnboardingRunner({
|
|
478
|
+
capture: (input) => ledger.captureRun(input),
|
|
479
|
+
// Stage A spawns with the EMPTY tool grant (structural two-hats boundary,
|
|
480
|
+
// §4); we bounded-wait for it to finish, then capture its transcript.
|
|
481
|
+
spawnStageA: async (prompt) => {
|
|
482
|
+
const session = await self.sessionManager.spawnSession({
|
|
483
|
+
name: `mentor-stage-a-${Date.now()}`,
|
|
484
|
+
prompt,
|
|
485
|
+
model: 'haiku',
|
|
486
|
+
allowedTools: [...STAGE_A_ALLOWED_TOOLS], // empty → no tools
|
|
487
|
+
maxDurationMinutes: 5,
|
|
488
|
+
});
|
|
489
|
+
const tmux = session.tmuxSession;
|
|
490
|
+
for (let i = 0; i < 90; i++) {
|
|
491
|
+
const stillRunning = self.sessionManager.listRunningSessions().some((s) => s.id === session.id);
|
|
492
|
+
if (!stillRunning)
|
|
493
|
+
break;
|
|
494
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
495
|
+
}
|
|
496
|
+
return self.sessionManager.captureOutput(tmux, 200) ?? '';
|
|
497
|
+
},
|
|
498
|
+
// Stage-B deep log-forensics (assembling the mentee's rollouts/diffs and
|
|
499
|
+
// classifying) is a tracked follow-on; today the loop's real signal is the
|
|
500
|
+
// Stage-A leak detector (§4.3). Returns [] when no forensic inputs exist so
|
|
501
|
+
// the funnel still logs the run. <!-- tracked: topic-13435 -->
|
|
502
|
+
runStageBForensics: async () => {
|
|
503
|
+
void intelligence;
|
|
504
|
+
return [];
|
|
505
|
+
},
|
|
506
|
+
// Safe-window: any other running (non-protected) session means the system
|
|
507
|
+
// is busy — conservative "don't interrupt." Refined per-mentee at live
|
|
508
|
+
// validation. <!-- tracked: topic-13435 -->
|
|
509
|
+
isMenteeBusy: () => self.sessionManager.listRunningSessions().length > 0,
|
|
510
|
+
minIntervalElapsed: () => {
|
|
511
|
+
const cfg = getConfig();
|
|
512
|
+
return Date.now() - self.mentorLastTickAt >= cfg.minIntervalMs;
|
|
513
|
+
},
|
|
514
|
+
budgetOk: () => {
|
|
515
|
+
const cfg = getConfig();
|
|
516
|
+
const day = new Date().toISOString().slice(0, 10);
|
|
517
|
+
if (self.mentorDayKey !== day) {
|
|
518
|
+
self.mentorDayKey = day;
|
|
519
|
+
self.mentorRunsToday = 0;
|
|
520
|
+
}
|
|
521
|
+
return self.mentorRunsToday < cfg.maxRoundsPerDay;
|
|
522
|
+
},
|
|
523
|
+
getSurface: (framework) => ({ framework, threadlineHistory: '' }),
|
|
524
|
+
onTickRan: () => {
|
|
525
|
+
self.mentorLastTickAt = Date.now();
|
|
526
|
+
self.mentorRunsToday += 1;
|
|
527
|
+
},
|
|
528
|
+
now: () => Date.now(),
|
|
529
|
+
}, getConfig);
|
|
530
|
+
}
|
|
452
531
|
/**
|
|
453
532
|
* Start the HTTP server.
|
|
454
533
|
*/
|