@your-world/cli 0.1.0
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/README.md +52 -0
- package/dist/adapters/codex-adapter.d.ts +15 -0
- package/dist/adapters/codex-adapter.js +70 -0
- package/dist/adapters/codex-adapter.js.map +1 -0
- package/dist/adapters/external-agent-adapter.d.ts +33 -0
- package/dist/adapters/external-agent-adapter.js +3 -0
- package/dist/adapters/external-agent-adapter.js.map +1 -0
- package/dist/adapters/generic-command-adapter.d.ts +12 -0
- package/dist/adapters/generic-command-adapter.js +57 -0
- package/dist/adapters/generic-command-adapter.js.map +1 -0
- package/dist/cli/action-submit.d.ts +19 -0
- package/dist/cli/action-submit.js +169 -0
- package/dist/cli/action-submit.js.map +1 -0
- package/dist/cli/bin.d.ts +2 -0
- package/dist/cli/bin.js +267 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/catalog.d.ts +2 -0
- package/dist/cli/catalog.js +30 -0
- package/dist/cli/catalog.js.map +1 -0
- package/dist/cli/events.d.ts +2 -0
- package/dist/cli/events.js +22 -0
- package/dist/cli/events.js.map +1 -0
- package/dist/cli/observe.d.ts +2 -0
- package/dist/cli/observe.js +21 -0
- package/dist/cli/observe.js.map +1 -0
- package/dist/cli/play-init.d.ts +9 -0
- package/dist/cli/play-init.js +111 -0
- package/dist/cli/play-init.js.map +1 -0
- package/dist/cli/play-run.d.ts +2 -0
- package/dist/cli/play-run.js +28 -0
- package/dist/cli/play-run.js.map +1 -0
- package/dist/cli/play-status.d.ts +2 -0
- package/dist/cli/play-status.js +19 -0
- package/dist/cli/play-status.js.map +1 -0
- package/dist/cli/player-init.d.ts +9 -0
- package/dist/cli/player-init.js +38 -0
- package/dist/cli/player-init.js.map +1 -0
- package/dist/cli/rules.d.ts +2 -0
- package/dist/cli/rules.js +32 -0
- package/dist/cli/rules.js.map +1 -0
- package/dist/cli/shared.d.ts +27 -0
- package/dist/cli/shared.js +243 -0
- package/dist/cli/shared.js.map +1 -0
- package/dist/config/credential-store.d.ts +28 -0
- package/dist/config/credential-store.js +119 -0
- package/dist/config/credential-store.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +12 -0
- package/dist/logger.js +40 -0
- package/dist/logger.js.map +1 -0
- package/dist/prompting/agents-template.d.ts +6 -0
- package/dist/prompting/agents-template.js +60 -0
- package/dist/prompting/agents-template.js.map +1 -0
- package/dist/prompting/turn-summary.d.ts +2 -0
- package/dist/prompting/turn-summary.js +27 -0
- package/dist/prompting/turn-summary.js.map +1 -0
- package/dist/runtime/player-runtime.d.ts +34 -0
- package/dist/runtime/player-runtime.js +228 -0
- package/dist/runtime/player-runtime.js.map +1 -0
- package/dist/runtime/runtime-types.d.ts +71 -0
- package/dist/runtime/runtime-types.js +3 -0
- package/dist/runtime/runtime-types.js.map +1 -0
- package/dist/runtime/session-store.d.ts +37 -0
- package/dist/runtime/session-store.js +139 -0
- package/dist/runtime/session-store.js.map +1 -0
- package/dist/runtime/settlement-sync.d.ts +9 -0
- package/dist/runtime/settlement-sync.js +80 -0
- package/dist/runtime/settlement-sync.js.map +1 -0
- package/dist/runtime/turn-orchestrator.d.ts +10 -0
- package/dist/runtime/turn-orchestrator.js +43 -0
- package/dist/runtime/turn-orchestrator.js.map +1 -0
- package/dist/runtime/workspace-manager.d.ts +9 -0
- package/dist/runtime/workspace-manager.js +28 -0
- package/dist/runtime/workspace-manager.js.map +1 -0
- package/dist/types.d.ts +273 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/world-client.d.ts +31 -0
- package/dist/world-client.js +227 -0
- package/dist/world-client.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.renderTurnSummary = renderTurnSummary;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
function renderTurnSummary(snapshot) {
|
|
9
|
+
const lastActionLine = snapshot.lastAction ? `${snapshot.lastAction.action.verb} (${snapshot.lastAction.actionId})` : 'none';
|
|
10
|
+
const lastSettlementLine = snapshot.lastSettlement ? `${snapshot.lastSettlement.status}: ${snapshot.lastSettlement.summary}` : 'none';
|
|
11
|
+
const currentState = snapshot.submissionState.hasSubmitted ? 'already submitted' : 'not submitted';
|
|
12
|
+
return `# Turn Summary
|
|
13
|
+
|
|
14
|
+
Current tick: ${snapshot.contextTick}
|
|
15
|
+
Run id: ${snapshot.runId}
|
|
16
|
+
Goal: ${snapshot.goal}
|
|
17
|
+
Agent id: ${snapshot.agentId}
|
|
18
|
+
Submission state: ${currentState}
|
|
19
|
+
Last action: ${lastActionLine}
|
|
20
|
+
Last settlement: ${lastSettlementLine}
|
|
21
|
+
Recommended files:
|
|
22
|
+
- ${node_path_1.default.posix.join('runs', snapshot.runId, 'turn.json')}
|
|
23
|
+
- ${node_path_1.default.posix.join('runs', snapshot.runId, 'submit-receipt.json')}
|
|
24
|
+
|
|
25
|
+
Use \`yw\` commands for observation and action submission.`;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=turn-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-summary.js","sourceRoot":"","sources":["../../src/prompting/turn-summary.ts"],"names":[],"mappings":";;;;;AAIA,8CAmBC;AAvBD,0DAA6B;AAI7B,SAAgB,iBAAiB,CAAC,QAAsB;IACpD,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7H,MAAM,kBAAkB,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,KAAK,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACtI,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,eAAe,CAAC;IAEnG,OAAO;;gBAEK,QAAQ,CAAC,WAAW;UAC1B,QAAQ,CAAC,KAAK;QAChB,QAAQ,CAAC,IAAI;YACT,QAAQ,CAAC,OAAO;oBACR,YAAY;eACjB,cAAc;mBACV,kBAAkB;;IAEjC,mBAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IACpD,mBAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;;2DAEP,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ExternalAgentAdapter } from '../adapters/external-agent-adapter';
|
|
2
|
+
import { Logger, WorldClientLike } from '../types';
|
|
3
|
+
import { SessionStore } from './session-store';
|
|
4
|
+
export interface PlayerRuntimeOptions {
|
|
5
|
+
client: WorldClientLike;
|
|
6
|
+
store: SessionStore;
|
|
7
|
+
adapter: ExternalAgentAdapter;
|
|
8
|
+
logger?: Logger;
|
|
9
|
+
pollIntervalMs?: number;
|
|
10
|
+
maxTicks?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare class PlayerRuntime {
|
|
13
|
+
private readonly client;
|
|
14
|
+
private readonly store;
|
|
15
|
+
private readonly adapter;
|
|
16
|
+
private readonly logger;
|
|
17
|
+
private readonly pollIntervalMs;
|
|
18
|
+
private readonly maxTicks?;
|
|
19
|
+
private readonly workspaceManager;
|
|
20
|
+
private readonly settlementSync;
|
|
21
|
+
private readonly turnOrchestrator;
|
|
22
|
+
private activeTurn?;
|
|
23
|
+
private processedTicks;
|
|
24
|
+
private operationChain;
|
|
25
|
+
private running;
|
|
26
|
+
constructor(options: PlayerRuntimeOptions);
|
|
27
|
+
start(signal?: AbortSignal): Promise<void>;
|
|
28
|
+
private normalizeRecoveredSession;
|
|
29
|
+
private enqueue;
|
|
30
|
+
private handleTick;
|
|
31
|
+
private maybeStartPendingWake;
|
|
32
|
+
private startRun;
|
|
33
|
+
private onRunFinished;
|
|
34
|
+
}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PlayerRuntime = void 0;
|
|
7
|
+
const node_crypto_1 = require("node:crypto");
|
|
8
|
+
const promises_1 = require("node:fs/promises");
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const logger_1 = require("../logger");
|
|
11
|
+
const settlement_sync_1 = require("./settlement-sync");
|
|
12
|
+
const turn_orchestrator_1 = require("./turn-orchestrator");
|
|
13
|
+
const workspace_manager_1 = require("./workspace-manager");
|
|
14
|
+
class PlayerRuntime {
|
|
15
|
+
client;
|
|
16
|
+
store;
|
|
17
|
+
adapter;
|
|
18
|
+
logger;
|
|
19
|
+
pollIntervalMs;
|
|
20
|
+
maxTicks;
|
|
21
|
+
workspaceManager;
|
|
22
|
+
settlementSync;
|
|
23
|
+
turnOrchestrator;
|
|
24
|
+
activeTurn;
|
|
25
|
+
processedTicks = 0;
|
|
26
|
+
operationChain = Promise.resolve();
|
|
27
|
+
running = false;
|
|
28
|
+
constructor(options) {
|
|
29
|
+
this.client = options.client;
|
|
30
|
+
this.store = options.store;
|
|
31
|
+
this.adapter = options.adapter;
|
|
32
|
+
this.logger = options.logger ?? new logger_1.ConsoleLogger();
|
|
33
|
+
this.pollIntervalMs = options.pollIntervalMs ?? 1000;
|
|
34
|
+
this.maxTicks = options.maxTicks;
|
|
35
|
+
this.workspaceManager = new workspace_manager_1.WorkspaceManager(this.store);
|
|
36
|
+
this.settlementSync = new settlement_sync_1.SettlementSync(this.store, this.client);
|
|
37
|
+
this.turnOrchestrator = new turn_orchestrator_1.TurnOrchestrator(this.store, this.client);
|
|
38
|
+
}
|
|
39
|
+
async start(signal) {
|
|
40
|
+
if (this.running) {
|
|
41
|
+
throw new Error('PlayerRuntime is already running.');
|
|
42
|
+
}
|
|
43
|
+
this.running = true;
|
|
44
|
+
try {
|
|
45
|
+
let session = await this.store.requireSession();
|
|
46
|
+
await this.workspaceManager.ensureWorkspace(session);
|
|
47
|
+
session = await this.normalizeRecoveredSession(session);
|
|
48
|
+
const joined = await this.client.join({
|
|
49
|
+
agentId: session.agentId,
|
|
50
|
+
});
|
|
51
|
+
session = await this.store.updateSession((current) => ({
|
|
52
|
+
...current,
|
|
53
|
+
agentId: joined.agentId,
|
|
54
|
+
acceptedAtTick: joined.acceptedAtTick ?? current.acceptedAtTick,
|
|
55
|
+
latestObservedTick: Math.max(current.latestObservedTick, joined.acceptedAtTick ?? current.latestObservedTick),
|
|
56
|
+
tickPollIntervalMs: current.tickPollIntervalMs ?? this.pollIntervalMs,
|
|
57
|
+
}));
|
|
58
|
+
const prepared = await this.adapter.prepareSession({
|
|
59
|
+
session,
|
|
60
|
+
workDir: this.store.workDir,
|
|
61
|
+
});
|
|
62
|
+
if (prepared.adapterSessionId) {
|
|
63
|
+
session = await this.store.updateSession((current) => ({
|
|
64
|
+
...current,
|
|
65
|
+
adapterSessionId: prepared.adapterSessionId,
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
await this.settlementSync.syncLatestSettlement();
|
|
69
|
+
await this.maybeStartPendingWake();
|
|
70
|
+
while (!signal?.aborted) {
|
|
71
|
+
const current = await this.store.requireSession();
|
|
72
|
+
const tickSignal = await this.client.waitForNextTick(current.latestObservedTick, this.pollIntervalMs, signal);
|
|
73
|
+
if (tickSignal.tick <= current.latestObservedTick) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
await this.enqueue(async () => {
|
|
77
|
+
await this.handleTick(tickSignal.tick);
|
|
78
|
+
});
|
|
79
|
+
this.processedTicks += 1;
|
|
80
|
+
if (this.maxTicks !== undefined && this.processedTicks >= this.maxTicks) {
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
this.running = false;
|
|
87
|
+
await this.operationChain;
|
|
88
|
+
if (this.activeTurn) {
|
|
89
|
+
await this.activeTurn.handle.completion;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async normalizeRecoveredSession(session) {
|
|
94
|
+
if (session.runState !== 'running' && session.runState !== 'submitted') {
|
|
95
|
+
return session;
|
|
96
|
+
}
|
|
97
|
+
return this.store.updateSession((current) => ({
|
|
98
|
+
...current,
|
|
99
|
+
runState: 'crashed',
|
|
100
|
+
activeRunId: undefined,
|
|
101
|
+
activeContextTick: undefined,
|
|
102
|
+
pendingWake: true,
|
|
103
|
+
pendingWakeTick: current.latestObservedTick,
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
enqueue(work) {
|
|
107
|
+
const next = this.operationChain.then(work);
|
|
108
|
+
this.operationChain = next.catch(() => undefined);
|
|
109
|
+
return next;
|
|
110
|
+
}
|
|
111
|
+
async handleTick(tick) {
|
|
112
|
+
await this.settlementSync.syncLatestSettlement();
|
|
113
|
+
const inbox = await this.turnOrchestrator.prefetchTick(tick);
|
|
114
|
+
await this.workspaceManager.writeInbox(inbox);
|
|
115
|
+
let session = await this.store.updateSession((current) => ({
|
|
116
|
+
...current,
|
|
117
|
+
latestObservedTick: tick,
|
|
118
|
+
}));
|
|
119
|
+
if (this.activeTurn) {
|
|
120
|
+
session = await this.store.updateSession((current) => ({
|
|
121
|
+
...current,
|
|
122
|
+
latestObservedTick: tick,
|
|
123
|
+
pendingWake: true,
|
|
124
|
+
pendingWakeTick: tick,
|
|
125
|
+
}));
|
|
126
|
+
this.logger.info('Tick queued as pending wake.', {
|
|
127
|
+
tick,
|
|
128
|
+
activeRunId: session.activeRunId,
|
|
129
|
+
});
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
await this.startRun(session, inbox.tick);
|
|
133
|
+
}
|
|
134
|
+
async maybeStartPendingWake() {
|
|
135
|
+
const session = await this.store.requireSession();
|
|
136
|
+
if (!session.pendingWake || session.pendingWakeTick === undefined || this.activeTurn) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
await this.startRun(session, session.pendingWakeTick);
|
|
140
|
+
}
|
|
141
|
+
async startRun(session, tick) {
|
|
142
|
+
const runId = createRunId(tick);
|
|
143
|
+
const inbox = await this.turnOrchestrator.prefetchTick(tick);
|
|
144
|
+
await this.workspaceManager.writeInbox(inbox);
|
|
145
|
+
const snapshot = await this.turnOrchestrator.buildTurnSnapshot(session, runId, inbox);
|
|
146
|
+
await this.workspaceManager.writeTurn(runId, snapshot);
|
|
147
|
+
const promptFilePath = node_path_1.default.join(this.store.paths.promptsDir, `${runId}.txt`);
|
|
148
|
+
const prompt = [
|
|
149
|
+
`Read AGENTS.md, then read runs/${runId}/turn-summary.md.`,
|
|
150
|
+
`Use yw commands from ${this.store.workDir}.`,
|
|
151
|
+
`If needed, inspect runs/${runId}/turn.json for the full structured snapshot.`,
|
|
152
|
+
`Submit at most one action with "yw action submit --run-id ${runId} --json '{...}'".`,
|
|
153
|
+
].join(' ');
|
|
154
|
+
await (0, promises_1.writeFile)(promptFilePath, `${prompt}\n`, 'utf8');
|
|
155
|
+
session = await this.store.updateSession((current) => ({
|
|
156
|
+
...current,
|
|
157
|
+
activeRunId: runId,
|
|
158
|
+
activeContextTick: tick,
|
|
159
|
+
pendingWake: false,
|
|
160
|
+
pendingWakeTick: undefined,
|
|
161
|
+
runState: 'running',
|
|
162
|
+
}));
|
|
163
|
+
const handle = await this.adapter.runTurn({
|
|
164
|
+
session,
|
|
165
|
+
workDir: this.store.workDir,
|
|
166
|
+
runId,
|
|
167
|
+
runDir: this.store.runDir(runId),
|
|
168
|
+
prompt,
|
|
169
|
+
promptFilePath,
|
|
170
|
+
logger: this.logger,
|
|
171
|
+
onOutput: async (chunk) => {
|
|
172
|
+
await this.store.appendAdapterLog(runId, chunk);
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
this.activeTurn = {
|
|
176
|
+
runId,
|
|
177
|
+
handle,
|
|
178
|
+
};
|
|
179
|
+
void handle.completion.then((result) => this.enqueue(async () => {
|
|
180
|
+
await this.onRunFinished(runId, result);
|
|
181
|
+
}), (error) => this.enqueue(async () => {
|
|
182
|
+
await this.onRunFinished(runId, {
|
|
183
|
+
exitCode: 1,
|
|
184
|
+
signal: null,
|
|
185
|
+
});
|
|
186
|
+
this.logger.error('External agent adapter failed.', {
|
|
187
|
+
runId,
|
|
188
|
+
error: error instanceof Error ? error.message : String(error),
|
|
189
|
+
});
|
|
190
|
+
}));
|
|
191
|
+
}
|
|
192
|
+
async onRunFinished(runId, result) {
|
|
193
|
+
const session = await this.store.requireSession();
|
|
194
|
+
if (!session.activeRunId || session.activeRunId !== runId) {
|
|
195
|
+
this.activeTurn = undefined;
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
const nextRunState = result.exitCode === 0 ? 'exited' : 'crashed';
|
|
199
|
+
await this.store.writeSession({
|
|
200
|
+
...session,
|
|
201
|
+
adapterSessionId: result.adapterSessionId ?? session.adapterSessionId,
|
|
202
|
+
runState: nextRunState,
|
|
203
|
+
activeRunId: undefined,
|
|
204
|
+
activeContextTick: undefined,
|
|
205
|
+
});
|
|
206
|
+
this.activeTurn = undefined;
|
|
207
|
+
const settlement = await this.settlementSync.syncLatestSettlement();
|
|
208
|
+
this.logger.info('External agent run finished.', {
|
|
209
|
+
runId,
|
|
210
|
+
exitCode: result.exitCode,
|
|
211
|
+
signal: result.signal,
|
|
212
|
+
settlement: formatSettlement(settlement),
|
|
213
|
+
});
|
|
214
|
+
await this.maybeStartPendingWake();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
exports.PlayerRuntime = PlayerRuntime;
|
|
218
|
+
function createRunId(tick) {
|
|
219
|
+
const stamp = new Date()
|
|
220
|
+
.toISOString()
|
|
221
|
+
.replace(/[-:.TZ]/g, '')
|
|
222
|
+
.slice(0, 14);
|
|
223
|
+
return `run-${stamp}-tick-${tick}-${(0, node_crypto_1.randomUUID)().slice(0, 8)}`;
|
|
224
|
+
}
|
|
225
|
+
function formatSettlement(record) {
|
|
226
|
+
return record ? `${record.status}:${record.summary}` : null;
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=player-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player-runtime.js","sourceRoot":"","sources":["../../src/runtime/player-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Action, ActResponse, ObserveResponse, WorldEvent } from '../types';
|
|
2
|
+
export type PlayerRunState = 'idle' | 'running' | 'submitted' | 'exited' | 'crashed';
|
|
3
|
+
export interface PlayerRuntimeSession {
|
|
4
|
+
profile: string;
|
|
5
|
+
playerId?: string;
|
|
6
|
+
agentId: string;
|
|
7
|
+
serverUrl: string;
|
|
8
|
+
workDir: string;
|
|
9
|
+
credentialRef?: string;
|
|
10
|
+
adapter: string;
|
|
11
|
+
adapterSessionId?: string;
|
|
12
|
+
runState: PlayerRunState;
|
|
13
|
+
activeRunId?: string;
|
|
14
|
+
activeContextTick?: number;
|
|
15
|
+
latestObservedTick: number;
|
|
16
|
+
pendingWake: boolean;
|
|
17
|
+
pendingWakeTick?: number;
|
|
18
|
+
lastSubmittedContextTick?: number;
|
|
19
|
+
lastSubmittedStartTick?: number;
|
|
20
|
+
lastActionId?: string;
|
|
21
|
+
goal: string;
|
|
22
|
+
acceptedAtTick?: number;
|
|
23
|
+
tickPollIntervalMs?: number;
|
|
24
|
+
adapterConfig?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export interface LastActionRecord {
|
|
27
|
+
runId: string;
|
|
28
|
+
contextTick: number;
|
|
29
|
+
actionId: string;
|
|
30
|
+
action: Action;
|
|
31
|
+
response: ActResponse;
|
|
32
|
+
}
|
|
33
|
+
export interface LastSettlementRecord {
|
|
34
|
+
tick: number;
|
|
35
|
+
actionId: string;
|
|
36
|
+
status: 'accepted' | 'rejected';
|
|
37
|
+
verb: string;
|
|
38
|
+
summary: string;
|
|
39
|
+
code?: string;
|
|
40
|
+
reason?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface TickInboxRecord {
|
|
43
|
+
tick: number;
|
|
44
|
+
observe: ObserveResponse;
|
|
45
|
+
events: WorldEvent[];
|
|
46
|
+
recordedAt: string;
|
|
47
|
+
}
|
|
48
|
+
export interface TurnSnapshot {
|
|
49
|
+
runId: string;
|
|
50
|
+
contextTick: number;
|
|
51
|
+
goal: string;
|
|
52
|
+
agentId: string;
|
|
53
|
+
serverUrl: string;
|
|
54
|
+
tickIntervalMs?: number;
|
|
55
|
+
observeSummary: ObserveResponse;
|
|
56
|
+
recentEvents: WorldEvent[];
|
|
57
|
+
lastAction: LastActionRecord | null;
|
|
58
|
+
lastSettlement: LastSettlementRecord | null;
|
|
59
|
+
submissionState: {
|
|
60
|
+
hasSubmitted: boolean;
|
|
61
|
+
activeRunId?: string;
|
|
62
|
+
runState: PlayerRunState;
|
|
63
|
+
};
|
|
64
|
+
latestObservedTickAtStart: number;
|
|
65
|
+
}
|
|
66
|
+
export interface RunReceiptRecord {
|
|
67
|
+
runId: string;
|
|
68
|
+
contextTick: number;
|
|
69
|
+
submittedAtServerTick: number;
|
|
70
|
+
response: ActResponse;
|
|
71
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-types.js","sourceRoot":"","sources":["../../src/runtime/runtime-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { LastActionRecord, LastSettlementRecord, PlayerRuntimeSession, RunReceiptRecord, TickInboxRecord, TurnSnapshot } from './runtime-types';
|
|
2
|
+
interface SessionStorePaths {
|
|
3
|
+
rootDir: string;
|
|
4
|
+
session: string;
|
|
5
|
+
agents: string;
|
|
6
|
+
lastAction: string;
|
|
7
|
+
lastSettlement: string;
|
|
8
|
+
inboxDir: string;
|
|
9
|
+
runsDir: string;
|
|
10
|
+
logsDir: string;
|
|
11
|
+
promptsDir: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class SessionStore {
|
|
14
|
+
readonly workDir: string;
|
|
15
|
+
readonly paths: SessionStorePaths;
|
|
16
|
+
constructor(workDir: string);
|
|
17
|
+
ensureWorkspace(): Promise<void>;
|
|
18
|
+
readSession(): Promise<PlayerRuntimeSession | null>;
|
|
19
|
+
requireSession(): Promise<PlayerRuntimeSession>;
|
|
20
|
+
writeSession(session: PlayerRuntimeSession): Promise<void>;
|
|
21
|
+
updateSession(updater: (session: PlayerRuntimeSession) => PlayerRuntimeSession): Promise<PlayerRuntimeSession>;
|
|
22
|
+
runDir(runId: string): string;
|
|
23
|
+
submitReceiptPath(runId: string): string;
|
|
24
|
+
turnSnapshotPath(runId: string): string;
|
|
25
|
+
turnSummaryPath(runId: string): string;
|
|
26
|
+
adapterLogPath(runId: string): string;
|
|
27
|
+
readLastAction(): Promise<LastActionRecord | null>;
|
|
28
|
+
writeLastAction(record: LastActionRecord): Promise<void>;
|
|
29
|
+
readLastSettlement(): Promise<LastSettlementRecord | null>;
|
|
30
|
+
writeLastSettlement(record: LastSettlementRecord): Promise<void>;
|
|
31
|
+
writeInboxTick(record: TickInboxRecord): Promise<void>;
|
|
32
|
+
writeTurnSnapshot(runId: string, snapshot: TurnSnapshot, turnSummary: string): Promise<void>;
|
|
33
|
+
readRunReceipt(runId: string): Promise<RunReceiptRecord | null>;
|
|
34
|
+
writeRunReceipt(runId: string, record: RunReceiptRecord): Promise<void>;
|
|
35
|
+
appendAdapterLog(runId: string, chunk: string): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SessionStore = void 0;
|
|
7
|
+
const promises_1 = require("node:fs/promises");
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
class SessionStore {
|
|
10
|
+
workDir;
|
|
11
|
+
paths;
|
|
12
|
+
constructor(workDir) {
|
|
13
|
+
this.workDir = node_path_1.default.resolve(workDir);
|
|
14
|
+
this.paths = {
|
|
15
|
+
rootDir: this.workDir,
|
|
16
|
+
session: node_path_1.default.join(this.workDir, 'session.json'),
|
|
17
|
+
agents: node_path_1.default.join(this.workDir, 'AGENTS.md'),
|
|
18
|
+
lastAction: node_path_1.default.join(this.workDir, 'last-action.json'),
|
|
19
|
+
lastSettlement: node_path_1.default.join(this.workDir, 'last-settlement.json'),
|
|
20
|
+
inboxDir: node_path_1.default.join(this.workDir, 'inbox'),
|
|
21
|
+
runsDir: node_path_1.default.join(this.workDir, 'runs'),
|
|
22
|
+
logsDir: node_path_1.default.join(this.workDir, 'logs'),
|
|
23
|
+
promptsDir: node_path_1.default.join(this.workDir, 'prompts'),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
async ensureWorkspace() {
|
|
27
|
+
await (0, promises_1.mkdir)(this.paths.rootDir, { recursive: true });
|
|
28
|
+
await (0, promises_1.mkdir)(this.paths.inboxDir, { recursive: true });
|
|
29
|
+
await (0, promises_1.mkdir)(this.paths.runsDir, { recursive: true });
|
|
30
|
+
await (0, promises_1.mkdir)(this.paths.logsDir, { recursive: true });
|
|
31
|
+
await (0, promises_1.mkdir)(this.paths.promptsDir, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
async readSession() {
|
|
34
|
+
return readJsonFile(this.paths.session);
|
|
35
|
+
}
|
|
36
|
+
async requireSession() {
|
|
37
|
+
const session = await this.readSession();
|
|
38
|
+
if (!session) {
|
|
39
|
+
throw new Error(`Missing session.json in ${this.workDir}`);
|
|
40
|
+
}
|
|
41
|
+
return session;
|
|
42
|
+
}
|
|
43
|
+
async writeSession(session) {
|
|
44
|
+
await this.ensureWorkspace();
|
|
45
|
+
await writeJsonFile(this.paths.session, session);
|
|
46
|
+
}
|
|
47
|
+
async updateSession(updater) {
|
|
48
|
+
const session = await this.requireSession();
|
|
49
|
+
const next = updater(session);
|
|
50
|
+
await this.writeSession(next);
|
|
51
|
+
return next;
|
|
52
|
+
}
|
|
53
|
+
runDir(runId) {
|
|
54
|
+
return node_path_1.default.join(this.paths.runsDir, runId);
|
|
55
|
+
}
|
|
56
|
+
submitReceiptPath(runId) {
|
|
57
|
+
return node_path_1.default.join(this.runDir(runId), 'submit-receipt.json');
|
|
58
|
+
}
|
|
59
|
+
turnSnapshotPath(runId) {
|
|
60
|
+
return node_path_1.default.join(this.runDir(runId), 'turn.json');
|
|
61
|
+
}
|
|
62
|
+
turnSummaryPath(runId) {
|
|
63
|
+
return node_path_1.default.join(this.runDir(runId), 'turn-summary.md');
|
|
64
|
+
}
|
|
65
|
+
adapterLogPath(runId) {
|
|
66
|
+
return node_path_1.default.join(this.runDir(runId), 'adapter-output.log');
|
|
67
|
+
}
|
|
68
|
+
async readLastAction() {
|
|
69
|
+
return readJsonFile(this.paths.lastAction);
|
|
70
|
+
}
|
|
71
|
+
async writeLastAction(record) {
|
|
72
|
+
await writeJsonFile(this.paths.lastAction, record);
|
|
73
|
+
}
|
|
74
|
+
async readLastSettlement() {
|
|
75
|
+
return readJsonFile(this.paths.lastSettlement);
|
|
76
|
+
}
|
|
77
|
+
async writeLastSettlement(record) {
|
|
78
|
+
await writeJsonFile(this.paths.lastSettlement, record);
|
|
79
|
+
}
|
|
80
|
+
async writeInboxTick(record) {
|
|
81
|
+
await this.ensureWorkspace();
|
|
82
|
+
await writeJsonFile(node_path_1.default.join(this.paths.inboxDir, `tick-${record.tick}.json`), record);
|
|
83
|
+
}
|
|
84
|
+
async writeTurnSnapshot(runId, snapshot, turnSummary) {
|
|
85
|
+
const runDir = this.runDir(runId);
|
|
86
|
+
await (0, promises_1.mkdir)(runDir, { recursive: true });
|
|
87
|
+
await writeJsonFile(this.turnSnapshotPath(runId), snapshot);
|
|
88
|
+
await (0, promises_1.writeFile)(this.turnSummaryPath(runId), turnSummary, 'utf8');
|
|
89
|
+
}
|
|
90
|
+
async readRunReceipt(runId) {
|
|
91
|
+
return readJsonFile(this.submitReceiptPath(runId));
|
|
92
|
+
}
|
|
93
|
+
async writeRunReceipt(runId, record) {
|
|
94
|
+
const runDir = this.runDir(runId);
|
|
95
|
+
await (0, promises_1.mkdir)(runDir, { recursive: true });
|
|
96
|
+
await writeJsonFile(this.submitReceiptPath(runId), record);
|
|
97
|
+
}
|
|
98
|
+
async appendAdapterLog(runId, chunk) {
|
|
99
|
+
const filePath = this.adapterLogPath(runId);
|
|
100
|
+
await (0, promises_1.mkdir)(node_path_1.default.dirname(filePath), { recursive: true });
|
|
101
|
+
const existing = await readTextFile(filePath);
|
|
102
|
+
await (0, promises_1.writeFile)(filePath, `${existing}${chunk}`, 'utf8');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.SessionStore = SessionStore;
|
|
106
|
+
async function readJsonFile(filePath) {
|
|
107
|
+
try {
|
|
108
|
+
const raw = await (0, promises_1.readFile)(filePath, 'utf8');
|
|
109
|
+
return JSON.parse(raw);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (isMissingFile(error)) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async function readTextFile(filePath) {
|
|
119
|
+
try {
|
|
120
|
+
return await (0, promises_1.readFile)(filePath, 'utf8');
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (isMissingFile(error)) {
|
|
124
|
+
return '';
|
|
125
|
+
}
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async function writeJsonFile(filePath, value) {
|
|
130
|
+
await (0, promises_1.mkdir)(node_path_1.default.dirname(filePath), { recursive: true });
|
|
131
|
+
await (0, promises_1.writeFile)(filePath, `${JSON.stringify(value, null, 4)}\n`, 'utf8');
|
|
132
|
+
}
|
|
133
|
+
function isMissingFile(error) {
|
|
134
|
+
return isRecord(error) && error.code === 'ENOENT';
|
|
135
|
+
}
|
|
136
|
+
function isRecord(value) {
|
|
137
|
+
return typeof value === 'object' && value !== null;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=session-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/runtime/session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { WorldClientLike } from '../types';
|
|
2
|
+
import { LastSettlementRecord } from './runtime-types';
|
|
3
|
+
import { SessionStore } from './session-store';
|
|
4
|
+
export declare class SettlementSync {
|
|
5
|
+
private readonly store;
|
|
6
|
+
private readonly client;
|
|
7
|
+
constructor(store: SessionStore, client: WorldClientLike);
|
|
8
|
+
syncLatestSettlement(): Promise<LastSettlementRecord | null>;
|
|
9
|
+
}
|