@sharpee/plugin-scheduler 0.9.65-beta → 0.9.66-beta
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/package.json +6 -15
- package/dist-npm/daemons/ambience-daemon.d.ts +0 -23
- package/dist-npm/daemons/ambience-daemon.d.ts.map +0 -1
- package/dist-npm/daemons/ambience-daemon.js +0 -34
- package/dist-npm/daemons/ambience-daemon.js.map +0 -1
- package/dist-npm/daemons/countdown-daemon.d.ts +0 -22
- package/dist-npm/daemons/countdown-daemon.d.ts.map +0 -1
- package/dist-npm/daemons/countdown-daemon.js +0 -38
- package/dist-npm/daemons/countdown-daemon.js.map +0 -1
- package/dist-npm/daemons/daemon-runner.d.ts +0 -31
- package/dist-npm/daemons/daemon-runner.d.ts.map +0 -1
- package/dist-npm/daemons/daemon-runner.js +0 -35
- package/dist-npm/daemons/daemon-runner.js.map +0 -1
- package/dist-npm/daemons/index.d.ts +0 -9
- package/dist-npm/daemons/index.d.ts.map +0 -1
- package/dist-npm/daemons/index.js +0 -17
- package/dist-npm/daemons/index.js.map +0 -1
- package/dist-npm/daemons/location-daemon.d.ts +0 -14
- package/dist-npm/daemons/location-daemon.d.ts.map +0 -1
- package/dist-npm/daemons/location-daemon.js +0 -14
- package/dist-npm/daemons/location-daemon.js.map +0 -1
- package/dist-npm/daemons/watchdog-daemon.d.ts +0 -29
- package/dist-npm/daemons/watchdog-daemon.d.ts.map +0 -1
- package/dist-npm/daemons/watchdog-daemon.js +0 -48
- package/dist-npm/daemons/watchdog-daemon.js.map +0 -1
- package/dist-npm/index.d.ts +0 -8
- package/dist-npm/index.d.ts.map +0 -1
- package/dist-npm/index.js +0 -24
- package/dist-npm/index.js.map +0 -1
- package/dist-npm/scheduler-plugin.d.ts +0 -21
- package/dist-npm/scheduler-plugin.d.ts.map +0 -1
- package/dist-npm/scheduler-plugin.js +0 -33
- package/dist-npm/scheduler-plugin.js.map +0 -1
- package/dist-npm/scheduler-service.d.ts +0 -75
- package/dist-npm/scheduler-service.d.ts.map +0 -1
- package/dist-npm/scheduler-service.js +0 -315
- package/dist-npm/scheduler-service.js.map +0 -1
- package/dist-npm/seeded-random.d.ts +0 -7
- package/dist-npm/seeded-random.d.ts.map +0 -1
- package/dist-npm/seeded-random.js +0 -11
- package/dist-npm/seeded-random.js.map +0 -1
- package/dist-npm/types.d.ts +0 -140
- package/dist-npm/types.d.ts.map +0 -1
- package/dist-npm/types.js +0 -9
- package/dist-npm/types.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sharpee/plugin-scheduler",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.66-beta",
|
|
4
4
|
"description": "Scheduler plugin for Sharpee engine - daemons and fuses (ADR-071, ADR-120)",
|
|
5
|
-
"main": "./
|
|
5
|
+
"main": "./index.js",
|
|
6
6
|
"module": "dist-npm/index.js",
|
|
7
|
-
"types": "./
|
|
7
|
+
"types": "./index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
|
-
"types": "./
|
|
11
|
-
"require": "./
|
|
10
|
+
"types": "./index.d.ts",
|
|
11
|
+
"require": "./index.js",
|
|
12
|
+
"default": "./index.js"
|
|
12
13
|
}
|
|
13
14
|
},
|
|
14
15
|
"scripts": {
|
|
@@ -16,16 +17,6 @@
|
|
|
16
17
|
"clean": "rimraf dist",
|
|
17
18
|
"build:npm": "tsc --outDir dist-npm"
|
|
18
19
|
},
|
|
19
|
-
"dependencies": {
|
|
20
|
-
"@sharpee/core": "workspace:*",
|
|
21
|
-
"@sharpee/world-model": "workspace:*",
|
|
22
|
-
"@sharpee/plugins": "workspace:*"
|
|
23
|
-
},
|
|
24
|
-
"devDependencies": {
|
|
25
|
-
"@types/node": "^20.11.19",
|
|
26
|
-
"typescript": "^5.3.3",
|
|
27
|
-
"rimraf": "^5.0.5"
|
|
28
|
-
},
|
|
29
20
|
"files": [
|
|
30
21
|
"dist-npm"
|
|
31
22
|
],
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AmbienceDaemon - emits atmospheric messages with cooldown (ADR-123).
|
|
3
|
-
*
|
|
4
|
-
* Always ticks to manage the cooldown counter. Emits ambience
|
|
5
|
-
* when cooldown has elapsed and shouldEmit() returns true.
|
|
6
|
-
*/
|
|
7
|
-
import { ISemanticEvent } from "../../../core/dist-npm/src/index";
|
|
8
|
-
import { DaemonRunner } from './daemon-runner';
|
|
9
|
-
import { SchedulerContext } from '../types';
|
|
10
|
-
export declare abstract class AmbienceDaemon extends DaemonRunner {
|
|
11
|
-
protected turnsSinceLastEmission: number;
|
|
12
|
-
/** Minimum turns between ambient emissions */
|
|
13
|
-
abstract readonly cooldownTurns: number;
|
|
14
|
-
/** Whether conditions are right for ambient emission this turn */
|
|
15
|
-
abstract shouldEmit(context: SchedulerContext): boolean;
|
|
16
|
-
/** Generate the ambient message(s) */
|
|
17
|
-
abstract emitAmbience(context: SchedulerContext): ISemanticEvent[];
|
|
18
|
-
getRunnerState(): Record<string, unknown>;
|
|
19
|
-
restoreRunnerState(state: Record<string, unknown>): void;
|
|
20
|
-
shouldRun(_context: SchedulerContext): boolean;
|
|
21
|
-
execute(context: SchedulerContext): ISemanticEvent[];
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=ambience-daemon.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ambience-daemon.d.ts","sourceRoot":"","sources":["../../src/daemons/ambience-daemon.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,8BAAsB,cAAe,SAAQ,YAAY;IACvD,SAAS,CAAC,sBAAsB,SAAK;IAErC,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAExC,kEAAkE;IAClE,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAEvD,sCAAsC;IACtC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc,EAAE;IAElE,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIxD,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO;IAI9C,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc,EAAE;CASrD"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* AmbienceDaemon - emits atmospheric messages with cooldown (ADR-123).
|
|
4
|
-
*
|
|
5
|
-
* Always ticks to manage the cooldown counter. Emits ambience
|
|
6
|
-
* when cooldown has elapsed and shouldEmit() returns true.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.AmbienceDaemon = void 0;
|
|
10
|
-
const daemon_runner_1 = require("./daemon-runner");
|
|
11
|
-
class AmbienceDaemon extends daemon_runner_1.DaemonRunner {
|
|
12
|
-
turnsSinceLastEmission = 0;
|
|
13
|
-
getRunnerState() {
|
|
14
|
-
return { turnsSinceLastEmission: this.turnsSinceLastEmission };
|
|
15
|
-
}
|
|
16
|
-
restoreRunnerState(state) {
|
|
17
|
-
if (typeof state.turnsSinceLastEmission === 'number')
|
|
18
|
-
this.turnsSinceLastEmission = state.turnsSinceLastEmission;
|
|
19
|
-
}
|
|
20
|
-
shouldRun(_context) {
|
|
21
|
-
return true; // Always tick to manage cooldown
|
|
22
|
-
}
|
|
23
|
-
execute(context) {
|
|
24
|
-
this.turnsSinceLastEmission++;
|
|
25
|
-
if (this.turnsSinceLastEmission < this.cooldownTurns)
|
|
26
|
-
return [];
|
|
27
|
-
if (!this.shouldEmit(context))
|
|
28
|
-
return [];
|
|
29
|
-
this.turnsSinceLastEmission = 0;
|
|
30
|
-
return this.emitAmbience(context);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
exports.AmbienceDaemon = AmbienceDaemon;
|
|
34
|
-
//# sourceMappingURL=ambience-daemon.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ambience-daemon.js","sourceRoot":"","sources":["../../src/daemons/ambience-daemon.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAGH,mDAA+C;AAG/C,MAAsB,cAAe,SAAQ,4BAAY;IAC7C,sBAAsB,GAAG,CAAC,CAAC;IAWrC,cAAc;QACZ,OAAO,EAAE,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EAAE,CAAC;IACjE,CAAC;IAED,kBAAkB,CAAC,KAA8B;QAC/C,IAAI,OAAO,KAAK,CAAC,sBAAsB,KAAK,QAAQ;YAAE,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,sBAAsB,CAAC;IACnH,CAAC;IAED,SAAS,CAAC,QAA0B;QAClC,OAAO,IAAI,CAAC,CAAC,iCAAiC;IAChD,CAAC;IAED,OAAO,CAAC,OAAyB;QAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,IAAI,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,aAAa;YAAE,OAAO,EAAE,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QAEzC,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF;AAjCD,wCAiCC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CountdownDaemon - fires after a fixed number of turns (ADR-123).
|
|
3
|
-
*
|
|
4
|
-
* Like a Fuse but with full daemon lifecycle, encapsulated state,
|
|
5
|
-
* and an optional tick condition.
|
|
6
|
-
*/
|
|
7
|
-
import { ISemanticEvent } from "../../../core/dist-npm/src/index";
|
|
8
|
-
import { DaemonRunner } from './daemon-runner';
|
|
9
|
-
import { SchedulerContext } from '../types';
|
|
10
|
-
export declare abstract class CountdownDaemon extends DaemonRunner {
|
|
11
|
-
protected turnsRemaining: number;
|
|
12
|
-
constructor(turns: number);
|
|
13
|
-
/** Called when countdown reaches zero */
|
|
14
|
-
abstract onCountdownComplete(context: SchedulerContext): ISemanticEvent[];
|
|
15
|
-
/** Optional: condition that must hold for the countdown to tick */
|
|
16
|
-
tickCondition?(context: SchedulerContext): boolean;
|
|
17
|
-
getRunnerState(): Record<string, unknown>;
|
|
18
|
-
restoreRunnerState(state: Record<string, unknown>): void;
|
|
19
|
-
shouldRun(_context: SchedulerContext): boolean;
|
|
20
|
-
execute(context: SchedulerContext): ISemanticEvent[];
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=countdown-daemon.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"countdown-daemon.d.ts","sourceRoot":"","sources":["../../src/daemons/countdown-daemon.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,8BAAsB,eAAgB,SAAQ,YAAY;IACxD,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;gBAErB,KAAK,EAAE,MAAM;IAKzB,yCAAyC;IACzC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc,EAAE;IAEzE,mEAAmE;IACnE,aAAa,CAAC,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAElD,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIxD,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO;IAI9C,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc,EAAE;CASrD"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* CountdownDaemon - fires after a fixed number of turns (ADR-123).
|
|
4
|
-
*
|
|
5
|
-
* Like a Fuse but with full daemon lifecycle, encapsulated state,
|
|
6
|
-
* and an optional tick condition.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.CountdownDaemon = void 0;
|
|
10
|
-
const daemon_runner_1 = require("./daemon-runner");
|
|
11
|
-
class CountdownDaemon extends daemon_runner_1.DaemonRunner {
|
|
12
|
-
turnsRemaining;
|
|
13
|
-
constructor(turns) {
|
|
14
|
-
super();
|
|
15
|
-
this.turnsRemaining = turns;
|
|
16
|
-
}
|
|
17
|
-
getRunnerState() {
|
|
18
|
-
return { turnsRemaining: this.turnsRemaining };
|
|
19
|
-
}
|
|
20
|
-
restoreRunnerState(state) {
|
|
21
|
-
if (typeof state.turnsRemaining === 'number')
|
|
22
|
-
this.turnsRemaining = state.turnsRemaining;
|
|
23
|
-
}
|
|
24
|
-
shouldRun(_context) {
|
|
25
|
-
return this.turnsRemaining > 0;
|
|
26
|
-
}
|
|
27
|
-
execute(context) {
|
|
28
|
-
if (this.tickCondition && !this.tickCondition(context))
|
|
29
|
-
return [];
|
|
30
|
-
this.turnsRemaining--;
|
|
31
|
-
if (this.turnsRemaining <= 0) {
|
|
32
|
-
return this.onCountdownComplete(context);
|
|
33
|
-
}
|
|
34
|
-
return [];
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
exports.CountdownDaemon = CountdownDaemon;
|
|
38
|
-
//# sourceMappingURL=countdown-daemon.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"countdown-daemon.js","sourceRoot":"","sources":["../../src/daemons/countdown-daemon.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAGH,mDAA+C;AAG/C,MAAsB,eAAgB,SAAQ,4BAAY;IAC9C,cAAc,CAAS;IAEjC,YAAY,KAAa;QACvB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAQD,cAAc;QACZ,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACjD,CAAC;IAED,kBAAkB,CAAC,KAA8B;QAC/C,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;YAAE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC3F,CAAC;IAED,SAAS,CAAC,QAA0B;QAClC,OAAO,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,OAAyB;QAC/B,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QAElE,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAnCD,0CAmCC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Abstract base class for typed daemons (ADR-123).
|
|
3
|
-
*
|
|
4
|
-
* Gives daemons proper identity, encapsulated state, and lifecycle hooks
|
|
5
|
-
* while adapting to the existing plain Daemon interface via toDaemon().
|
|
6
|
-
*/
|
|
7
|
-
import { ISemanticEvent } from "../../../core/dist-npm/src/index";
|
|
8
|
-
import { WorldModel } from "../../../world-model/dist-npm/src/index";
|
|
9
|
-
import { Daemon, SchedulerContext } from '../types';
|
|
10
|
-
export declare abstract class DaemonRunner {
|
|
11
|
-
abstract readonly id: string;
|
|
12
|
-
abstract readonly name: string;
|
|
13
|
-
readonly priority: number;
|
|
14
|
-
/** Override to control when this daemon is active */
|
|
15
|
-
abstract shouldRun(context: SchedulerContext): boolean;
|
|
16
|
-
/** Override to perform the daemon's work */
|
|
17
|
-
abstract execute(context: SchedulerContext): ISemanticEvent[];
|
|
18
|
-
/** Lifecycle: called when daemon is registered with the scheduler */
|
|
19
|
-
onRegistered?(context: {
|
|
20
|
-
world: WorldModel;
|
|
21
|
-
}): void;
|
|
22
|
-
/** Lifecycle: called when daemon is removed from the scheduler */
|
|
23
|
-
onRemoved?(): void;
|
|
24
|
-
/** Return runner-specific state for save/restore serialization */
|
|
25
|
-
getRunnerState(): Record<string, unknown>;
|
|
26
|
-
/** Restore runner-specific state after deserialization */
|
|
27
|
-
restoreRunnerState(state: Record<string, unknown>): void;
|
|
28
|
-
/** Adapt to the plain Daemon interface for scheduler registration */
|
|
29
|
-
toDaemon(): Daemon;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=daemon-runner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-runner.d.ts","sourceRoot":"","sources":["../../src/daemons/daemon-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEpD,8BAAsB,YAAY;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAK;IAE9B,qDAAqD;IACrD,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAEtD,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc,EAAE;IAE7D,qEAAqE;IACrE,YAAY,CAAC,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI;IAEnD,kEAAkE;IAClE,SAAS,CAAC,IAAI,IAAI;IAElB,kEAAkE;IAClE,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzC,0DAA0D;IAC1D,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAKxD,qEAAqE;IACrE,QAAQ,IAAI,MAAM;CAWnB"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Abstract base class for typed daemons (ADR-123).
|
|
4
|
-
*
|
|
5
|
-
* Gives daemons proper identity, encapsulated state, and lifecycle hooks
|
|
6
|
-
* while adapting to the existing plain Daemon interface via toDaemon().
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.DaemonRunner = void 0;
|
|
10
|
-
class DaemonRunner {
|
|
11
|
-
priority = 0;
|
|
12
|
-
/** Return runner-specific state for save/restore serialization */
|
|
13
|
-
getRunnerState() {
|
|
14
|
-
return {};
|
|
15
|
-
}
|
|
16
|
-
/** Restore runner-specific state after deserialization */
|
|
17
|
-
restoreRunnerState(state) {
|
|
18
|
-
// Subclasses override to restore their fields
|
|
19
|
-
void state;
|
|
20
|
-
}
|
|
21
|
-
/** Adapt to the plain Daemon interface for scheduler registration */
|
|
22
|
-
toDaemon() {
|
|
23
|
-
return {
|
|
24
|
-
id: this.id,
|
|
25
|
-
name: this.name,
|
|
26
|
-
priority: this.priority,
|
|
27
|
-
condition: (ctx) => this.shouldRun(ctx),
|
|
28
|
-
run: (ctx) => this.execute(ctx),
|
|
29
|
-
getRunnerState: () => this.getRunnerState(),
|
|
30
|
-
restoreRunnerState: (s) => this.restoreRunnerState(s),
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
exports.DaemonRunner = DaemonRunner;
|
|
35
|
-
//# sourceMappingURL=daemon-runner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-runner.js","sourceRoot":"","sources":["../../src/daemons/daemon-runner.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAMH,MAAsB,YAAY;IAGvB,QAAQ,GAAW,CAAC,CAAC;IAc9B,kEAAkE;IAClE,cAAc;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,0DAA0D;IAC1D,kBAAkB,CAAC,KAA8B;QAC/C,8CAA8C;QAC9C,KAAK,KAAK,CAAC;IACb,CAAC;IAED,qEAAqE;IACrE,QAAQ;QACN,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YACvC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YAC/B,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;YAC3C,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;SACtD,CAAC;IACJ,CAAC;CACF;AAxCD,oCAwCC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Typed daemon base classes (ADR-123)
|
|
3
|
-
*/
|
|
4
|
-
export { DaemonRunner } from './daemon-runner';
|
|
5
|
-
export { WatchdogDaemon } from './watchdog-daemon';
|
|
6
|
-
export { LocationDaemon } from './location-daemon';
|
|
7
|
-
export { AmbienceDaemon } from './ambience-daemon';
|
|
8
|
-
export { CountdownDaemon } from './countdown-daemon';
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemons/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Typed daemon base classes (ADR-123)
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.CountdownDaemon = exports.AmbienceDaemon = exports.LocationDaemon = exports.WatchdogDaemon = exports.DaemonRunner = void 0;
|
|
7
|
-
var daemon_runner_1 = require("./daemon-runner");
|
|
8
|
-
Object.defineProperty(exports, "DaemonRunner", { enumerable: true, get: function () { return daemon_runner_1.DaemonRunner; } });
|
|
9
|
-
var watchdog_daemon_1 = require("./watchdog-daemon");
|
|
10
|
-
Object.defineProperty(exports, "WatchdogDaemon", { enumerable: true, get: function () { return watchdog_daemon_1.WatchdogDaemon; } });
|
|
11
|
-
var location_daemon_1 = require("./location-daemon");
|
|
12
|
-
Object.defineProperty(exports, "LocationDaemon", { enumerable: true, get: function () { return location_daemon_1.LocationDaemon; } });
|
|
13
|
-
var ambience_daemon_1 = require("./ambience-daemon");
|
|
14
|
-
Object.defineProperty(exports, "AmbienceDaemon", { enumerable: true, get: function () { return ambience_daemon_1.AmbienceDaemon; } });
|
|
15
|
-
var countdown_daemon_1 = require("./countdown-daemon");
|
|
16
|
-
Object.defineProperty(exports, "CountdownDaemon", { enumerable: true, get: function () { return countdown_daemon_1.CountdownDaemon; } });
|
|
17
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/daemons/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,uDAAqD;AAA5C,mHAAA,eAAe,OAAA"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LocationDaemon - runs only when the player is in specific rooms (ADR-123).
|
|
3
|
-
*/
|
|
4
|
-
import { ISemanticEvent, EntityId } from "../../../core/dist-npm/src/index";
|
|
5
|
-
import { DaemonRunner } from './daemon-runner';
|
|
6
|
-
import { SchedulerContext } from '../types';
|
|
7
|
-
export declare abstract class LocationDaemon extends DaemonRunner {
|
|
8
|
-
/** Room(s) where this daemon is active */
|
|
9
|
-
abstract readonly roomIds: EntityId[];
|
|
10
|
-
/** Perform the daemon's work when player is in a matching room */
|
|
11
|
-
abstract execute(context: SchedulerContext): ISemanticEvent[];
|
|
12
|
-
shouldRun(context: SchedulerContext): boolean;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=location-daemon.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"location-daemon.d.ts","sourceRoot":"","sources":["../../src/daemons/location-daemon.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,8BAAsB,cAAe,SAAQ,YAAY;IACvD,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;IAEtC,kEAAkE;IAClE,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc,EAAE;IAE7D,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;CAG9C"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* LocationDaemon - runs only when the player is in specific rooms (ADR-123).
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.LocationDaemon = void 0;
|
|
7
|
-
const daemon_runner_1 = require("./daemon-runner");
|
|
8
|
-
class LocationDaemon extends daemon_runner_1.DaemonRunner {
|
|
9
|
-
shouldRun(context) {
|
|
10
|
-
return this.roomIds.includes(context.playerLocation);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.LocationDaemon = LocationDaemon;
|
|
14
|
-
//# sourceMappingURL=location-daemon.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"location-daemon.js","sourceRoot":"","sources":["../../src/daemons/location-daemon.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,mDAA+C;AAG/C,MAAsB,cAAe,SAAQ,4BAAY;IAOvD,SAAS,CAAC,OAAyB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC;CACF;AAVD,wCAUC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WatchdogDaemon - monitors a sustained condition over multiple turns (ADR-123).
|
|
3
|
-
*
|
|
4
|
-
* Counts consecutive turns while conditionHolds() is true.
|
|
5
|
-
* Resets counter when condition breaks. Fires onThresholdReached()
|
|
6
|
-
* when turnsRequired consecutive turns have passed.
|
|
7
|
-
*/
|
|
8
|
-
import { ISemanticEvent } from "../../../core/dist-npm/src/index";
|
|
9
|
-
import { DaemonRunner } from './daemon-runner';
|
|
10
|
-
import { SchedulerContext } from '../types';
|
|
11
|
-
export declare abstract class WatchdogDaemon extends DaemonRunner {
|
|
12
|
-
protected turnCount: number;
|
|
13
|
-
protected triggered: boolean;
|
|
14
|
-
/** How many consecutive turns the condition must hold */
|
|
15
|
-
abstract readonly turnsRequired: number;
|
|
16
|
-
/** The condition that must hold each turn */
|
|
17
|
-
abstract conditionHolds(context: SchedulerContext): boolean;
|
|
18
|
-
/** Called when turnsRequired consecutive turns have passed */
|
|
19
|
-
abstract onThresholdReached(context: SchedulerContext): ISemanticEvent[];
|
|
20
|
-
/** Optional: called at specific turn counts during accumulation */
|
|
21
|
-
onMilestone?(turn: number, context: SchedulerContext): ISemanticEvent[];
|
|
22
|
-
/** Optional: called when the counter resets (condition broke) */
|
|
23
|
-
onReset?(context: SchedulerContext): void;
|
|
24
|
-
getRunnerState(): Record<string, unknown>;
|
|
25
|
-
restoreRunnerState(state: Record<string, unknown>): void;
|
|
26
|
-
shouldRun(_context: SchedulerContext): boolean;
|
|
27
|
-
execute(context: SchedulerContext): ISemanticEvent[];
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=watchdog-daemon.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"watchdog-daemon.d.ts","sourceRoot":"","sources":["../../src/daemons/watchdog-daemon.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,8BAAsB,cAAe,SAAQ,YAAY;IACvD,SAAS,CAAC,SAAS,SAAK;IACxB,SAAS,CAAC,SAAS,UAAS;IAE5B,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAExC,6CAA6C;IAC7C,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAE3D,8DAA8D;IAC9D,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc,EAAE;IAExE,mEAAmE;IACnE,WAAW,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,cAAc,EAAE;IAEvE,iEAAiE;IACjE,OAAO,CAAC,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAEzC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAKxD,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO;IAI9C,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc,EAAE;CAsBrD"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* WatchdogDaemon - monitors a sustained condition over multiple turns (ADR-123).
|
|
4
|
-
*
|
|
5
|
-
* Counts consecutive turns while conditionHolds() is true.
|
|
6
|
-
* Resets counter when condition breaks. Fires onThresholdReached()
|
|
7
|
-
* when turnsRequired consecutive turns have passed.
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.WatchdogDaemon = void 0;
|
|
11
|
-
const daemon_runner_1 = require("./daemon-runner");
|
|
12
|
-
class WatchdogDaemon extends daemon_runner_1.DaemonRunner {
|
|
13
|
-
turnCount = 0;
|
|
14
|
-
triggered = false;
|
|
15
|
-
getRunnerState() {
|
|
16
|
-
return { turnCount: this.turnCount, triggered: this.triggered };
|
|
17
|
-
}
|
|
18
|
-
restoreRunnerState(state) {
|
|
19
|
-
if (typeof state.turnCount === 'number')
|
|
20
|
-
this.turnCount = state.turnCount;
|
|
21
|
-
if (typeof state.triggered === 'boolean')
|
|
22
|
-
this.triggered = state.triggered;
|
|
23
|
-
}
|
|
24
|
-
shouldRun(_context) {
|
|
25
|
-
return !this.triggered;
|
|
26
|
-
}
|
|
27
|
-
execute(context) {
|
|
28
|
-
if (!this.conditionHolds(context)) {
|
|
29
|
-
if (this.turnCount > 0) {
|
|
30
|
-
this.turnCount = 0;
|
|
31
|
-
this.onReset?.(context);
|
|
32
|
-
}
|
|
33
|
-
return [];
|
|
34
|
-
}
|
|
35
|
-
this.turnCount++;
|
|
36
|
-
const events = [];
|
|
37
|
-
const milestoneEvents = this.onMilestone?.(this.turnCount, context);
|
|
38
|
-
if (milestoneEvents)
|
|
39
|
-
events.push(...milestoneEvents);
|
|
40
|
-
if (this.turnCount >= this.turnsRequired) {
|
|
41
|
-
this.triggered = true;
|
|
42
|
-
events.push(...this.onThresholdReached(context));
|
|
43
|
-
}
|
|
44
|
-
return events;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
exports.WatchdogDaemon = WatchdogDaemon;
|
|
48
|
-
//# sourceMappingURL=watchdog-daemon.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"watchdog-daemon.js","sourceRoot":"","sources":["../../src/daemons/watchdog-daemon.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAGH,mDAA+C;AAG/C,MAAsB,cAAe,SAAQ,4BAAY;IAC7C,SAAS,GAAG,CAAC,CAAC;IACd,SAAS,GAAG,KAAK,CAAC;IAiB5B,cAAc;QACZ,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAClE,CAAC;IAED,kBAAkB,CAAC,KAA8B;QAC/C,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAC1E,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAC7E,CAAC;IAED,SAAS,CAAC,QAA0B;QAClC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,OAAyB;QAC/B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,MAAM,MAAM,GAAqB,EAAE,CAAC;QAEpC,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpE,IAAI,eAAe;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;QAErD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAtDD,wCAsDC"}
|
package/dist-npm/index.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @sharpee/plugin-scheduler - Scheduler plugin for daemons and fuses (ADR-071, ADR-120)
|
|
3
|
-
*/
|
|
4
|
-
export * from './types';
|
|
5
|
-
export * from './seeded-random';
|
|
6
|
-
export * from './scheduler-service';
|
|
7
|
-
export * from './scheduler-plugin';
|
|
8
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist-npm/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
|
package/dist-npm/index.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @sharpee/plugin-scheduler - Scheduler plugin for daemons and fuses (ADR-071, ADR-120)
|
|
4
|
-
*/
|
|
5
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
-
}
|
|
11
|
-
Object.defineProperty(o, k2, desc);
|
|
12
|
-
}) : (function(o, m, k, k2) {
|
|
13
|
-
if (k2 === undefined) k2 = k;
|
|
14
|
-
o[k2] = m[k];
|
|
15
|
-
}));
|
|
16
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
-
};
|
|
19
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
__exportStar(require("./types"), exports);
|
|
21
|
-
__exportStar(require("./seeded-random"), exports);
|
|
22
|
-
__exportStar(require("./scheduler-service"), exports);
|
|
23
|
-
__exportStar(require("./scheduler-plugin"), exports);
|
|
24
|
-
//# sourceMappingURL=index.js.map
|
package/dist-npm/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,kDAAgC;AAChC,sDAAoC;AACpC,qDAAmC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SchedulerPlugin - Wraps SchedulerService as a TurnPlugin (ADR-120)
|
|
3
|
-
*
|
|
4
|
-
* Priority 50: Runs after NPCs (100) and state machines (75).
|
|
5
|
-
* Daemons and fuses are background temporal events.
|
|
6
|
-
*/
|
|
7
|
-
import { ISemanticEvent } from "../../core/dist-npm/src/index";
|
|
8
|
-
import { TurnPlugin, TurnPluginContext } from "../../plugins/dist-npm/src/index";
|
|
9
|
-
import { ISchedulerService } from './scheduler-service';
|
|
10
|
-
export declare class SchedulerPlugin implements TurnPlugin {
|
|
11
|
-
id: string;
|
|
12
|
-
priority: number;
|
|
13
|
-
private service;
|
|
14
|
-
constructor(seed?: number);
|
|
15
|
-
onAfterAction(ctx: TurnPluginContext): ISemanticEvent[];
|
|
16
|
-
getState(): unknown;
|
|
17
|
-
setState(state: unknown): void;
|
|
18
|
-
/** Public access for stories that need daemon/fuse registration */
|
|
19
|
-
getScheduler(): ISchedulerService;
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=scheduler-plugin.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler-plugin.d.ts","sourceRoot":"","sources":["../../../../src/scheduler-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAA0B,MAAM,qBAAqB,CAAC;AAGhF,qBAAa,eAAgB,YAAW,UAAU;IAChD,EAAE,SAA8B;IAChC,QAAQ,SAAM;IACd,OAAO,CAAC,OAAO,CAAoB;gBAEvB,IAAI,CAAC,EAAE,MAAM;IAIzB,aAAa,CAAC,GAAG,EAAE,iBAAiB,GAAG,cAAc,EAAE;IAIvD,QAAQ,IAAI,OAAO;IAInB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,mEAAmE;IACnE,YAAY,IAAI,iBAAiB;CAGlC"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* SchedulerPlugin - Wraps SchedulerService as a TurnPlugin (ADR-120)
|
|
4
|
-
*
|
|
5
|
-
* Priority 50: Runs after NPCs (100) and state machines (75).
|
|
6
|
-
* Daemons and fuses are background temporal events.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.SchedulerPlugin = void 0;
|
|
10
|
-
const scheduler_service_1 = require("./scheduler-service");
|
|
11
|
-
class SchedulerPlugin {
|
|
12
|
-
id = 'sharpee.plugin.scheduler';
|
|
13
|
-
priority = 50;
|
|
14
|
-
service;
|
|
15
|
-
constructor(seed) {
|
|
16
|
-
this.service = (0, scheduler_service_1.createSchedulerService)(seed);
|
|
17
|
-
}
|
|
18
|
-
onAfterAction(ctx) {
|
|
19
|
-
return this.service.tick(ctx.world, ctx.turn, ctx.playerId).events;
|
|
20
|
-
}
|
|
21
|
-
getState() {
|
|
22
|
-
return this.service.getState();
|
|
23
|
-
}
|
|
24
|
-
setState(state) {
|
|
25
|
-
this.service.setState(state);
|
|
26
|
-
}
|
|
27
|
-
/** Public access for stories that need daemon/fuse registration */
|
|
28
|
-
getScheduler() {
|
|
29
|
-
return this.service;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
exports.SchedulerPlugin = SchedulerPlugin;
|
|
33
|
-
//# sourceMappingURL=scheduler-plugin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler-plugin.js","sourceRoot":"","sources":["../../../../src/scheduler-plugin.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,2DAAgF;AAGhF,MAAa,eAAe;IAC1B,EAAE,GAAG,0BAA0B,CAAC;IAChC,QAAQ,GAAG,EAAE,CAAC;IACN,OAAO,CAAoB;IAEnC,YAAY,IAAa;QACvB,IAAI,CAAC,OAAO,GAAG,IAAA,0CAAsB,EAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,aAAa,CAAC,GAAsB;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IACrE,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,KAAc;QACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAuB,CAAC,CAAC;IACjD,CAAC;IAED,mEAAmE;IACnE,YAAY;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAzBD,0CAyBC"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SchedulerService - Manages Daemons and Fuses (ADR-071)
|
|
3
|
-
*
|
|
4
|
-
* The scheduler runs during the turn cycle, after NPCs act:
|
|
5
|
-
* 1. Player action
|
|
6
|
-
* 2. NPC turns
|
|
7
|
-
* 3. Scheduler tick (daemons run, fuses count down)
|
|
8
|
-
* 4. Turn complete
|
|
9
|
-
*/
|
|
10
|
-
import { ISemanticEvent, EntityId } from "../../core/dist-npm/src/index";
|
|
11
|
-
import { WorldModel } from "../../world-model/dist-npm/src/index";
|
|
12
|
-
import { Daemon, Fuse, DaemonInfo, FuseInfo, SchedulerResult, SchedulerState, SeededRandom } from './types';
|
|
13
|
-
/**
|
|
14
|
-
* SchedulerService interface
|
|
15
|
-
*/
|
|
16
|
-
export interface ISchedulerService {
|
|
17
|
-
registerDaemon(daemon: Daemon): void;
|
|
18
|
-
removeDaemon(id: string): void;
|
|
19
|
-
pauseDaemon(id: string): void;
|
|
20
|
-
resumeDaemon(id: string): void;
|
|
21
|
-
hasDaemon(id: string): boolean;
|
|
22
|
-
setFuse(fuse: Fuse): void;
|
|
23
|
-
cancelFuse(id: string): ISemanticEvent[];
|
|
24
|
-
getFuseRemaining(id: string): number | undefined;
|
|
25
|
-
adjustFuse(id: string, delta: number): void;
|
|
26
|
-
pauseFuse(id: string): void;
|
|
27
|
-
resumeFuse(id: string): void;
|
|
28
|
-
hasFuse(id: string): boolean;
|
|
29
|
-
tick(world: WorldModel, turn: number, playerId: EntityId): SchedulerResult;
|
|
30
|
-
getActiveDaemons(): DaemonInfo[];
|
|
31
|
-
getActiveFuses(): FuseInfo[];
|
|
32
|
-
getState(): SchedulerState;
|
|
33
|
-
setState(state: SchedulerState): void;
|
|
34
|
-
cleanupEntity(entityId: EntityId): ISemanticEvent[];
|
|
35
|
-
getRandom(): SeededRandom;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* SchedulerService implementation
|
|
39
|
-
*/
|
|
40
|
-
export declare class SchedulerService implements ISchedulerService {
|
|
41
|
-
private daemons;
|
|
42
|
-
private daemonStates;
|
|
43
|
-
private fuses;
|
|
44
|
-
private fuseStates;
|
|
45
|
-
private random;
|
|
46
|
-
private currentTurn;
|
|
47
|
-
constructor(seed?: number);
|
|
48
|
-
registerDaemon(daemon: Daemon): void;
|
|
49
|
-
removeDaemon(id: string): void;
|
|
50
|
-
pauseDaemon(id: string): void;
|
|
51
|
-
resumeDaemon(id: string): void;
|
|
52
|
-
hasDaemon(id: string): boolean;
|
|
53
|
-
setFuse(fuse: Fuse): void;
|
|
54
|
-
cancelFuse(id: string): ISemanticEvent[];
|
|
55
|
-
getFuseRemaining(id: string): number | undefined;
|
|
56
|
-
adjustFuse(id: string, delta: number): void;
|
|
57
|
-
pauseFuse(id: string): void;
|
|
58
|
-
resumeFuse(id: string): void;
|
|
59
|
-
hasFuse(id: string): boolean;
|
|
60
|
-
tick(world: WorldModel, turn: number, playerId: EntityId): SchedulerResult;
|
|
61
|
-
getActiveDaemons(): DaemonInfo[];
|
|
62
|
-
getActiveFuses(): FuseInfo[];
|
|
63
|
-
getState(): SchedulerState;
|
|
64
|
-
setState(state: SchedulerState): void;
|
|
65
|
-
cleanupEntity(entityId: EntityId): ISemanticEvent[];
|
|
66
|
-
getRandom(): SeededRandom;
|
|
67
|
-
private createContext;
|
|
68
|
-
private getSortedDaemons;
|
|
69
|
-
private getSortedFuses;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Create a new SchedulerService instance
|
|
73
|
-
*/
|
|
74
|
-
export declare function createSchedulerService(seed?: number): ISchedulerService;
|
|
75
|
-
//# sourceMappingURL=scheduler-service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler-service.d.ts","sourceRoot":"","sources":["../../../../src/scheduler-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* SchedulerService - Manages Daemons and Fuses (ADR-071)
|
|
4
|
-
*
|
|
5
|
-
* The scheduler runs during the turn cycle, after NPCs act:
|
|
6
|
-
* 1. Player action
|
|
7
|
-
* 2. NPC turns
|
|
8
|
-
* 3. Scheduler tick (daemons run, fuses count down)
|
|
9
|
-
* 4. Turn complete
|
|
10
|
-
*/
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.SchedulerService = void 0;
|
|
13
|
-
exports.createSchedulerService = createSchedulerService;
|
|
14
|
-
const seeded_random_1 = require("./seeded-random");
|
|
15
|
-
/**
|
|
16
|
-
* Create a unique event ID
|
|
17
|
-
*/
|
|
18
|
-
function createEventId(prefix) {
|
|
19
|
-
return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* SchedulerService implementation
|
|
23
|
-
*/
|
|
24
|
-
class SchedulerService {
|
|
25
|
-
daemons = new Map();
|
|
26
|
-
daemonStates = new Map();
|
|
27
|
-
fuses = new Map();
|
|
28
|
-
fuseStates = new Map();
|
|
29
|
-
random;
|
|
30
|
-
currentTurn = 0;
|
|
31
|
-
constructor(seed) {
|
|
32
|
-
this.random = (0, seeded_random_1.createSeededRandom)(seed);
|
|
33
|
-
}
|
|
34
|
-
// ==================== Daemon Management ====================
|
|
35
|
-
registerDaemon(daemon) {
|
|
36
|
-
if (this.daemons.has(daemon.id)) {
|
|
37
|
-
throw new Error(`Daemon with id "${daemon.id}" already exists`);
|
|
38
|
-
}
|
|
39
|
-
this.daemons.set(daemon.id, daemon);
|
|
40
|
-
this.daemonStates.set(daemon.id, {
|
|
41
|
-
id: daemon.id,
|
|
42
|
-
isPaused: false,
|
|
43
|
-
runCount: 0,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
removeDaemon(id) {
|
|
47
|
-
this.daemons.delete(id);
|
|
48
|
-
this.daemonStates.delete(id);
|
|
49
|
-
}
|
|
50
|
-
pauseDaemon(id) {
|
|
51
|
-
const state = this.daemonStates.get(id);
|
|
52
|
-
if (state) {
|
|
53
|
-
state.isPaused = true;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
resumeDaemon(id) {
|
|
57
|
-
const state = this.daemonStates.get(id);
|
|
58
|
-
if (state) {
|
|
59
|
-
state.isPaused = false;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
hasDaemon(id) {
|
|
63
|
-
return this.daemons.has(id);
|
|
64
|
-
}
|
|
65
|
-
// ==================== Fuse Management ====================
|
|
66
|
-
setFuse(fuse) {
|
|
67
|
-
// Store original turns for repeating fuses
|
|
68
|
-
const fuseWithOriginal = {
|
|
69
|
-
...fuse,
|
|
70
|
-
originalTurns: fuse.originalTurns ?? fuse.turns,
|
|
71
|
-
};
|
|
72
|
-
this.fuses.set(fuse.id, fuseWithOriginal);
|
|
73
|
-
this.fuseStates.set(fuse.id, {
|
|
74
|
-
id: fuse.id,
|
|
75
|
-
turnsRemaining: fuse.turns,
|
|
76
|
-
isPaused: false,
|
|
77
|
-
entityId: fuse.entityId,
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
cancelFuse(id) {
|
|
81
|
-
const fuse = this.fuses.get(id);
|
|
82
|
-
const state = this.fuseStates.get(id);
|
|
83
|
-
if (!fuse || !state) {
|
|
84
|
-
return [];
|
|
85
|
-
}
|
|
86
|
-
// Call onCancel if defined
|
|
87
|
-
let events = [];
|
|
88
|
-
if (fuse.onCancel) {
|
|
89
|
-
const context = this.createContext(undefined, this.currentTurn, '');
|
|
90
|
-
try {
|
|
91
|
-
events = fuse.onCancel(context);
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
console.error(`Error in fuse "${id}" onCancel:`, error);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
this.fuses.delete(id);
|
|
98
|
-
this.fuseStates.delete(id);
|
|
99
|
-
return events;
|
|
100
|
-
}
|
|
101
|
-
getFuseRemaining(id) {
|
|
102
|
-
return this.fuseStates.get(id)?.turnsRemaining;
|
|
103
|
-
}
|
|
104
|
-
adjustFuse(id, delta) {
|
|
105
|
-
const state = this.fuseStates.get(id);
|
|
106
|
-
if (state) {
|
|
107
|
-
state.turnsRemaining = Math.max(0, state.turnsRemaining + delta);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
pauseFuse(id) {
|
|
111
|
-
const state = this.fuseStates.get(id);
|
|
112
|
-
if (state) {
|
|
113
|
-
state.isPaused = true;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
resumeFuse(id) {
|
|
117
|
-
const state = this.fuseStates.get(id);
|
|
118
|
-
if (state) {
|
|
119
|
-
state.isPaused = false;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
hasFuse(id) {
|
|
123
|
-
return this.fuses.has(id);
|
|
124
|
-
}
|
|
125
|
-
// ==================== Tick (Main Loop) ====================
|
|
126
|
-
tick(world, turn, playerId) {
|
|
127
|
-
this.currentTurn = turn;
|
|
128
|
-
const events = [];
|
|
129
|
-
const fusesTriggered = [];
|
|
130
|
-
const daemonsRun = [];
|
|
131
|
-
// Get player location
|
|
132
|
-
const playerLocation = world.getLocation(playerId) || '';
|
|
133
|
-
// Create context
|
|
134
|
-
const context = this.createContext(world, turn, playerLocation, playerId);
|
|
135
|
-
// 1. Run daemons (sorted by priority, highest first)
|
|
136
|
-
const sortedDaemons = this.getSortedDaemons();
|
|
137
|
-
for (const daemon of sortedDaemons) {
|
|
138
|
-
const state = this.daemonStates.get(daemon.id);
|
|
139
|
-
if (!state || state.isPaused)
|
|
140
|
-
continue;
|
|
141
|
-
// Check condition
|
|
142
|
-
if (daemon.condition && !daemon.condition(context)) {
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
// Run the daemon
|
|
146
|
-
try {
|
|
147
|
-
const daemonEvents = daemon.run(context);
|
|
148
|
-
if (daemonEvents.length > 0) {
|
|
149
|
-
events.push(...daemonEvents);
|
|
150
|
-
daemonsRun.push(daemon.id);
|
|
151
|
-
state.runCount++;
|
|
152
|
-
// Remove if runOnce and produced events
|
|
153
|
-
if (daemon.runOnce) {
|
|
154
|
-
this.removeDaemon(daemon.id);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
catch (error) {
|
|
159
|
-
console.error(`Error running daemon "${daemon.id}":`, error);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
// 2. Process fuses
|
|
163
|
-
const fusesToRemove = [];
|
|
164
|
-
const sortedFuses = this.getSortedFuses();
|
|
165
|
-
for (const fuse of sortedFuses) {
|
|
166
|
-
const state = this.fuseStates.get(fuse.id);
|
|
167
|
-
if (!state || state.isPaused)
|
|
168
|
-
continue;
|
|
169
|
-
// Check tick condition
|
|
170
|
-
if (fuse.tickCondition && !fuse.tickCondition(context)) {
|
|
171
|
-
continue;
|
|
172
|
-
}
|
|
173
|
-
// Decrement turns
|
|
174
|
-
state.turnsRemaining--;
|
|
175
|
-
// Check if triggered
|
|
176
|
-
if (state.turnsRemaining <= 0) {
|
|
177
|
-
try {
|
|
178
|
-
const fuseEvents = fuse.trigger(context);
|
|
179
|
-
events.push(...fuseEvents);
|
|
180
|
-
fusesTriggered.push(fuse.id);
|
|
181
|
-
if (fuse.repeat && fuse.originalTurns) {
|
|
182
|
-
// Reset for repeat
|
|
183
|
-
state.turnsRemaining = fuse.originalTurns;
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
// Mark for removal
|
|
187
|
-
fusesToRemove.push(fuse.id);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
catch (error) {
|
|
191
|
-
console.error(`Error triggering fuse "${fuse.id}":`, error);
|
|
192
|
-
fusesToRemove.push(fuse.id);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
// Remove triggered fuses
|
|
197
|
-
for (const id of fusesToRemove) {
|
|
198
|
-
this.fuses.delete(id);
|
|
199
|
-
this.fuseStates.delete(id);
|
|
200
|
-
}
|
|
201
|
-
return { events, fusesTriggered, daemonsRun };
|
|
202
|
-
}
|
|
203
|
-
// ==================== Introspection ====================
|
|
204
|
-
getActiveDaemons() {
|
|
205
|
-
const infos = [];
|
|
206
|
-
for (const [id, daemon] of this.daemons) {
|
|
207
|
-
const state = this.daemonStates.get(id);
|
|
208
|
-
if (!state)
|
|
209
|
-
continue;
|
|
210
|
-
infos.push({
|
|
211
|
-
id: daemon.id,
|
|
212
|
-
name: daemon.name,
|
|
213
|
-
isPaused: state.isPaused,
|
|
214
|
-
runCount: state.runCount,
|
|
215
|
-
priority: daemon.priority ?? 0,
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
return infos.sort((a, b) => b.priority - a.priority);
|
|
219
|
-
}
|
|
220
|
-
getActiveFuses() {
|
|
221
|
-
const infos = [];
|
|
222
|
-
for (const [id, fuse] of this.fuses) {
|
|
223
|
-
const state = this.fuseStates.get(id);
|
|
224
|
-
if (!state)
|
|
225
|
-
continue;
|
|
226
|
-
infos.push({
|
|
227
|
-
id: fuse.id,
|
|
228
|
-
name: fuse.name,
|
|
229
|
-
turnsRemaining: state.turnsRemaining,
|
|
230
|
-
isPaused: state.isPaused,
|
|
231
|
-
entityId: state.entityId,
|
|
232
|
-
priority: fuse.priority ?? 0,
|
|
233
|
-
repeat: fuse.repeat ?? false,
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
return infos.sort((a, b) => b.priority - a.priority);
|
|
237
|
-
}
|
|
238
|
-
// ==================== Serialization ====================
|
|
239
|
-
getState() {
|
|
240
|
-
const daemons = [];
|
|
241
|
-
const fuses = [];
|
|
242
|
-
for (const state of this.daemonStates.values()) {
|
|
243
|
-
const daemon = this.daemons.get(state.id);
|
|
244
|
-
const runnerState = daemon?.getRunnerState?.();
|
|
245
|
-
daemons.push({ ...state, ...(runnerState !== undefined ? { runnerState } : {}) });
|
|
246
|
-
}
|
|
247
|
-
for (const state of this.fuseStates.values()) {
|
|
248
|
-
fuses.push({ ...state });
|
|
249
|
-
}
|
|
250
|
-
return {
|
|
251
|
-
turn: this.currentTurn,
|
|
252
|
-
daemons,
|
|
253
|
-
fuses,
|
|
254
|
-
randomSeed: this.random.getSeed(),
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
setState(state) {
|
|
258
|
-
this.currentTurn = state.turn;
|
|
259
|
-
this.random.setSeed(state.randomSeed);
|
|
260
|
-
// Restore daemon states (daemons must be re-registered at game start)
|
|
261
|
-
for (const daemonState of state.daemons) {
|
|
262
|
-
if (this.daemons.has(daemonState.id)) {
|
|
263
|
-
this.daemonStates.set(daemonState.id, { ...daemonState });
|
|
264
|
-
if (daemonState.runnerState) {
|
|
265
|
-
this.daemons.get(daemonState.id)?.restoreRunnerState?.(daemonState.runnerState);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
// Restore fuse states (fuses must be re-registered at game start)
|
|
270
|
-
for (const fuseState of state.fuses) {
|
|
271
|
-
if (this.fuses.has(fuseState.id)) {
|
|
272
|
-
this.fuseStates.set(fuseState.id, { ...fuseState });
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
// ==================== Entity Cleanup ====================
|
|
277
|
-
cleanupEntity(entityId) {
|
|
278
|
-
const events = [];
|
|
279
|
-
// Cancel any fuses bound to this entity
|
|
280
|
-
for (const [id, state] of this.fuseStates) {
|
|
281
|
-
if (state.entityId === entityId) {
|
|
282
|
-
events.push(...this.cancelFuse(id));
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
return events;
|
|
286
|
-
}
|
|
287
|
-
// ==================== Random Access ====================
|
|
288
|
-
getRandom() {
|
|
289
|
-
return this.random;
|
|
290
|
-
}
|
|
291
|
-
// ==================== Private Helpers ====================
|
|
292
|
-
createContext(world, turn, playerLocation, playerId) {
|
|
293
|
-
return {
|
|
294
|
-
world,
|
|
295
|
-
turn,
|
|
296
|
-
random: this.random,
|
|
297
|
-
playerLocation,
|
|
298
|
-
playerId: playerId || '',
|
|
299
|
-
};
|
|
300
|
-
}
|
|
301
|
-
getSortedDaemons() {
|
|
302
|
-
return Array.from(this.daemons.values()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
|
303
|
-
}
|
|
304
|
-
getSortedFuses() {
|
|
305
|
-
return Array.from(this.fuses.values()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
exports.SchedulerService = SchedulerService;
|
|
309
|
-
/**
|
|
310
|
-
* Create a new SchedulerService instance
|
|
311
|
-
*/
|
|
312
|
-
function createSchedulerService(seed) {
|
|
313
|
-
return new SchedulerService(seed);
|
|
314
|
-
}
|
|
315
|
-
//# sourceMappingURL=scheduler-service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler-service.js","sourceRoot":"","sources":["../../../../src/scheduler-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seeded-random.d.ts","sourceRoot":"","sources":["../../../../src/seeded-random.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Seeded Random Number Generator
|
|
4
|
-
*
|
|
5
|
-
* Re-exports from @sharpee/core for convenience.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.createSeededRandom = void 0;
|
|
9
|
-
var core_1 = require("../../core/dist-npm/src/index.js");
|
|
10
|
-
Object.defineProperty(exports, "createSeededRandom", { enumerable: true, get: function () { return core_1.createSeededRandom; } });
|
|
11
|
-
//# sourceMappingURL=seeded-random.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seeded-random.js","sourceRoot":"","sources":["../../../../src/seeded-random.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,sCAAiE;AAAxD,0GAAA,kBAAkB,OAAA"}
|
package/dist-npm/types.d.ts
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scheduler types for Daemons and Fuses (ADR-071)
|
|
3
|
-
*
|
|
4
|
-
* Daemons: Processes that run every turn
|
|
5
|
-
* Fuses: Countdown timers that trigger after N turns
|
|
6
|
-
*/
|
|
7
|
-
import { ISemanticEvent, EntityId, SeededRandom } from "../../core/dist-npm/src/index";
|
|
8
|
-
import { WorldModel } from "../../world-model/dist-npm/src/index";
|
|
9
|
-
export { SeededRandom } from "../../core/dist-npm/src/index";
|
|
10
|
-
/**
|
|
11
|
-
* Context passed to daemon and fuse handlers
|
|
12
|
-
*/
|
|
13
|
-
export interface SchedulerContext {
|
|
14
|
-
/** The world model */
|
|
15
|
-
world: WorldModel;
|
|
16
|
-
/** Current turn number */
|
|
17
|
-
turn: number;
|
|
18
|
-
/** Seeded random number generator */
|
|
19
|
-
random: SeededRandom;
|
|
20
|
-
/** Player's current location */
|
|
21
|
-
playerLocation: EntityId;
|
|
22
|
-
/** Player entity ID */
|
|
23
|
-
playerId: EntityId;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* A daemon is a function that runs every turn
|
|
27
|
-
*/
|
|
28
|
-
export interface Daemon {
|
|
29
|
-
/** Unique identifier */
|
|
30
|
-
id: string;
|
|
31
|
-
/** Human-readable name for debugging */
|
|
32
|
-
name: string;
|
|
33
|
-
/** Condition for running (optional - if omitted, always runs) */
|
|
34
|
-
condition?: (context: SchedulerContext) => boolean;
|
|
35
|
-
/** The daemon's action - returns semantic events */
|
|
36
|
-
run: (context: SchedulerContext) => ISemanticEvent[];
|
|
37
|
-
/** Priority for ordering (higher = runs first, default 0) */
|
|
38
|
-
priority?: number;
|
|
39
|
-
/** If true, daemon removes itself after first successful run */
|
|
40
|
-
runOnce?: boolean;
|
|
41
|
-
/** Optional: return runner-specific state for serialization (ADR-123) */
|
|
42
|
-
getRunnerState?: () => Record<string, unknown>;
|
|
43
|
-
/** Optional: restore runner-specific state after deserialization (ADR-123) */
|
|
44
|
-
restoreRunnerState?: (state: Record<string, unknown>) => void;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* A fuse is a countdown timer that triggers after N turns
|
|
48
|
-
*/
|
|
49
|
-
export interface Fuse {
|
|
50
|
-
/** Unique identifier */
|
|
51
|
-
id: string;
|
|
52
|
-
/** Human-readable name for debugging */
|
|
53
|
-
name: string;
|
|
54
|
-
/** Turns until trigger (counts down each tick) */
|
|
55
|
-
turns: number;
|
|
56
|
-
/** What happens when it triggers - returns semantic events */
|
|
57
|
-
trigger: (context: SchedulerContext) => ISemanticEvent[];
|
|
58
|
-
/** Optional: entity this fuse is bound to (for automatic cleanup) */
|
|
59
|
-
entityId?: EntityId;
|
|
60
|
-
/** Optional: condition for ticking (if false, turn doesn't count down) */
|
|
61
|
-
tickCondition?: (context: SchedulerContext) => boolean;
|
|
62
|
-
/** What happens if cancelled before triggering (cleanup) */
|
|
63
|
-
onCancel?: (context: SchedulerContext) => ISemanticEvent[];
|
|
64
|
-
/** Priority for ordering multiple simultaneous triggers */
|
|
65
|
-
priority?: number;
|
|
66
|
-
/** If true, fuse repeats after triggering */
|
|
67
|
-
repeat?: boolean;
|
|
68
|
-
/** Original turns value for repeating fuses */
|
|
69
|
-
originalTurns?: number;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Runtime state for a daemon
|
|
73
|
-
*/
|
|
74
|
-
export interface DaemonState {
|
|
75
|
-
id: string;
|
|
76
|
-
isPaused: boolean;
|
|
77
|
-
runCount: number;
|
|
78
|
-
/** Runner-specific state for typed daemons (ADR-123) */
|
|
79
|
-
runnerState?: Record<string, unknown>;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Runtime state for a fuse
|
|
83
|
-
*/
|
|
84
|
-
export interface FuseState {
|
|
85
|
-
id: string;
|
|
86
|
-
turnsRemaining: number;
|
|
87
|
-
isPaused: boolean;
|
|
88
|
-
entityId?: EntityId;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Info about an active daemon (for debugging/introspection)
|
|
92
|
-
*/
|
|
93
|
-
export interface DaemonInfo {
|
|
94
|
-
id: string;
|
|
95
|
-
name: string;
|
|
96
|
-
isPaused: boolean;
|
|
97
|
-
runCount: number;
|
|
98
|
-
priority: number;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Info about an active fuse (for debugging/introspection)
|
|
102
|
-
*/
|
|
103
|
-
export interface FuseInfo {
|
|
104
|
-
id: string;
|
|
105
|
-
name: string;
|
|
106
|
-
turnsRemaining: number;
|
|
107
|
-
isPaused: boolean;
|
|
108
|
-
entityId?: EntityId;
|
|
109
|
-
priority: number;
|
|
110
|
-
repeat: boolean;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Result of a scheduler tick
|
|
114
|
-
*/
|
|
115
|
-
export interface SchedulerResult {
|
|
116
|
-
/** Events generated by daemons and fuses */
|
|
117
|
-
events: ISemanticEvent[];
|
|
118
|
-
/** IDs of fuses that triggered this tick */
|
|
119
|
-
fusesTriggered: string[];
|
|
120
|
-
/** IDs of daemons that ran this tick */
|
|
121
|
-
daemonsRun: string[];
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Serializable scheduler state for save/load
|
|
125
|
-
*/
|
|
126
|
-
export interface SchedulerState {
|
|
127
|
-
/** Current turn number */
|
|
128
|
-
turn: number;
|
|
129
|
-
/** Daemon states */
|
|
130
|
-
daemons: DaemonState[];
|
|
131
|
-
/** Fuse states */
|
|
132
|
-
fuses: FuseState[];
|
|
133
|
-
/** Random seed */
|
|
134
|
-
randomSeed: number;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Scheduler event types for lifecycle events
|
|
138
|
-
*/
|
|
139
|
-
export type SchedulerEventType = 'daemon.registered' | 'daemon.removed' | 'daemon.paused' | 'daemon.resumed' | 'fuse.set' | 'fuse.triggered' | 'fuse.cancelled' | 'fuse.paused' | 'fuse.resumed';
|
|
140
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist-npm/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,KAAK,EAAE,UAAU,CAAC;IAElB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,qCAAqC;IACrC,MAAM,EAAE,YAAY,CAAC;IAErB,gCAAgC;IAChC,cAAc,EAAE,QAAQ,CAAC;IAEzB,uBAAuB;IACvB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IAEX,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IAEb,iEAAiE;IACjE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC;IAEnD,oDAAoD;IACpD,GAAG,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,cAAc,EAAE,CAAC;IAErD,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/C,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IAEX,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IAEb,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IAEd,8DAA8D;IAC9D,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,cAAc,EAAE,CAAC;IAEzD,qEAAqE;IACrE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC;IAEvD,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,cAAc,EAAE,CAAC;IAE3D,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,MAAM,EAAE,cAAc,EAAE,CAAC;IAEzB,4CAA4C;IAC5C,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,wCAAwC;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,oBAAoB;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;IAEvB,kBAAkB;IAClB,KAAK,EAAE,SAAS,EAAE,CAAC;IAEnB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,mBAAmB,GACnB,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,UAAU,GACV,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,cAAc,CAAC"}
|
package/dist-npm/types.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Scheduler types for Daemons and Fuses (ADR-071)
|
|
4
|
-
*
|
|
5
|
-
* Daemons: Processes that run every turn
|
|
6
|
-
* Fuses: Countdown timers that trigger after N turns
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
//# sourceMappingURL=types.js.map
|
package/dist-npm/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|