@sharpee/plugin-scheduler 0.9.66-beta → 0.9.67-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/index.d.ts +8 -0
- package/index.d.ts.map +1 -0
- package/index.js +24 -0
- package/index.js.map +1 -0
- package/package.json +1 -10
- package/scheduler-plugin.d.ts +21 -0
- package/scheduler-plugin.d.ts.map +1 -0
- package/scheduler-plugin.js +33 -0
- package/scheduler-plugin.js.map +1 -0
- package/scheduler-service.d.ts +75 -0
- package/scheduler-service.d.ts.map +1 -0
- package/scheduler-service.js +315 -0
- package/scheduler-service.js.map +1 -0
- package/seeded-random.d.ts +7 -0
- package/seeded-random.d.ts.map +1 -0
- package/seeded-random.js +11 -0
- package/seeded-random.js.map +1 -0
- package/types.d.ts +140 -0
- package/types.d.ts.map +1 -0
- package/types.js +9 -0
- package/types.js.map +1 -0
package/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
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/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../mnt/c/repotemp/sharpee/packages/plugin-scheduler/src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
|
package/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
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/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../mnt/c/repotemp/sharpee/packages/plugin-scheduler/src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,kDAAgC;AAChC,sDAAoC;AACpC,qDAAmC"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sharpee/plugin-scheduler",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.67-beta",
|
|
4
4
|
"description": "Scheduler plugin for Sharpee engine - daemons and fuses (ADR-071, ADR-120)",
|
|
5
5
|
"main": "./index.js",
|
|
6
|
-
"module": "dist-npm/index.js",
|
|
7
6
|
"types": "./index.d.ts",
|
|
8
7
|
"exports": {
|
|
9
8
|
".": {
|
|
@@ -12,14 +11,6 @@
|
|
|
12
11
|
"default": "./index.js"
|
|
13
12
|
}
|
|
14
13
|
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"build": "tsc",
|
|
17
|
-
"clean": "rimraf dist",
|
|
18
|
-
"build:npm": "tsc --outDir dist-npm"
|
|
19
|
-
},
|
|
20
|
-
"files": [
|
|
21
|
-
"dist-npm"
|
|
22
|
-
],
|
|
23
14
|
"keywords": [
|
|
24
15
|
"interactive-fiction",
|
|
25
16
|
"sharpee",
|
|
@@ -0,0 +1,21 @@
|
|
|
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 "./src/index";
|
|
8
|
+
import { TurnPlugin, TurnPluginContext } from "./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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler-plugin.d.ts","sourceRoot":"","sources":["../../../../../mnt/c/repotemp/sharpee/packages/plugin-scheduler/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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler-plugin.js","sourceRoot":"","sources":["../../../../../../../../mnt/c/repotemp/sharpee/packages/plugin-scheduler/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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
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 "./src/index";
|
|
11
|
+
import { WorldModel } from "./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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler-service.d.ts","sourceRoot":"","sources":["../../../../../mnt/c/repotemp/sharpee/packages/plugin-scheduler/src/scheduler-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,315 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler-service.js","sourceRoot":"","sources":["../../../../../../../../mnt/c/repotemp/sharpee/packages/plugin-scheduler/src/scheduler-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeded-random.d.ts","sourceRoot":"","sources":["../../../../../mnt/c/repotemp/sharpee/packages/plugin-scheduler/src/seeded-random.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
package/seeded-random.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
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("./src/index.js");
|
|
10
|
+
Object.defineProperty(exports, "createSeededRandom", { enumerable: true, get: function () { return core_1.createSeededRandom; } });
|
|
11
|
+
//# sourceMappingURL=seeded-random.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeded-random.js","sourceRoot":"","sources":["../../../../../../../../mnt/c/repotemp/sharpee/packages/plugin-scheduler/src/seeded-random.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,sCAAiE;AAAxD,0GAAA,kBAAkB,OAAA"}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
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 "./src/index";
|
|
8
|
+
import { WorldModel } from "./src/index";
|
|
9
|
+
export { SeededRandom } from "./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/types.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../mnt/c/repotemp/sharpee/packages/plugin-scheduler/src/types.ts"],"names":[],"mappings":"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"}
|
package/types.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
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/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../../mnt/c/repotemp/sharpee/packages/plugin-scheduler/src/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|