@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.
Files changed (83) hide show
  1. package/README.md +52 -0
  2. package/dist/adapters/codex-adapter.d.ts +15 -0
  3. package/dist/adapters/codex-adapter.js +70 -0
  4. package/dist/adapters/codex-adapter.js.map +1 -0
  5. package/dist/adapters/external-agent-adapter.d.ts +33 -0
  6. package/dist/adapters/external-agent-adapter.js +3 -0
  7. package/dist/adapters/external-agent-adapter.js.map +1 -0
  8. package/dist/adapters/generic-command-adapter.d.ts +12 -0
  9. package/dist/adapters/generic-command-adapter.js +57 -0
  10. package/dist/adapters/generic-command-adapter.js.map +1 -0
  11. package/dist/cli/action-submit.d.ts +19 -0
  12. package/dist/cli/action-submit.js +169 -0
  13. package/dist/cli/action-submit.js.map +1 -0
  14. package/dist/cli/bin.d.ts +2 -0
  15. package/dist/cli/bin.js +267 -0
  16. package/dist/cli/bin.js.map +1 -0
  17. package/dist/cli/catalog.d.ts +2 -0
  18. package/dist/cli/catalog.js +30 -0
  19. package/dist/cli/catalog.js.map +1 -0
  20. package/dist/cli/events.d.ts +2 -0
  21. package/dist/cli/events.js +22 -0
  22. package/dist/cli/events.js.map +1 -0
  23. package/dist/cli/observe.d.ts +2 -0
  24. package/dist/cli/observe.js +21 -0
  25. package/dist/cli/observe.js.map +1 -0
  26. package/dist/cli/play-init.d.ts +9 -0
  27. package/dist/cli/play-init.js +111 -0
  28. package/dist/cli/play-init.js.map +1 -0
  29. package/dist/cli/play-run.d.ts +2 -0
  30. package/dist/cli/play-run.js +28 -0
  31. package/dist/cli/play-run.js.map +1 -0
  32. package/dist/cli/play-status.d.ts +2 -0
  33. package/dist/cli/play-status.js +19 -0
  34. package/dist/cli/play-status.js.map +1 -0
  35. package/dist/cli/player-init.d.ts +9 -0
  36. package/dist/cli/player-init.js +38 -0
  37. package/dist/cli/player-init.js.map +1 -0
  38. package/dist/cli/rules.d.ts +2 -0
  39. package/dist/cli/rules.js +32 -0
  40. package/dist/cli/rules.js.map +1 -0
  41. package/dist/cli/shared.d.ts +27 -0
  42. package/dist/cli/shared.js +243 -0
  43. package/dist/cli/shared.js.map +1 -0
  44. package/dist/config/credential-store.d.ts +28 -0
  45. package/dist/config/credential-store.js +119 -0
  46. package/dist/config/credential-store.js.map +1 -0
  47. package/dist/index.d.ts +13 -0
  48. package/dist/index.js +30 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/logger.d.ts +12 -0
  51. package/dist/logger.js +40 -0
  52. package/dist/logger.js.map +1 -0
  53. package/dist/prompting/agents-template.d.ts +6 -0
  54. package/dist/prompting/agents-template.js +60 -0
  55. package/dist/prompting/agents-template.js.map +1 -0
  56. package/dist/prompting/turn-summary.d.ts +2 -0
  57. package/dist/prompting/turn-summary.js +27 -0
  58. package/dist/prompting/turn-summary.js.map +1 -0
  59. package/dist/runtime/player-runtime.d.ts +34 -0
  60. package/dist/runtime/player-runtime.js +228 -0
  61. package/dist/runtime/player-runtime.js.map +1 -0
  62. package/dist/runtime/runtime-types.d.ts +71 -0
  63. package/dist/runtime/runtime-types.js +3 -0
  64. package/dist/runtime/runtime-types.js.map +1 -0
  65. package/dist/runtime/session-store.d.ts +37 -0
  66. package/dist/runtime/session-store.js +139 -0
  67. package/dist/runtime/session-store.js.map +1 -0
  68. package/dist/runtime/settlement-sync.d.ts +9 -0
  69. package/dist/runtime/settlement-sync.js +80 -0
  70. package/dist/runtime/settlement-sync.js.map +1 -0
  71. package/dist/runtime/turn-orchestrator.d.ts +10 -0
  72. package/dist/runtime/turn-orchestrator.js +43 -0
  73. package/dist/runtime/turn-orchestrator.js.map +1 -0
  74. package/dist/runtime/workspace-manager.d.ts +9 -0
  75. package/dist/runtime/workspace-manager.js +28 -0
  76. package/dist/runtime/workspace-manager.js.map +1 -0
  77. package/dist/types.d.ts +273 -0
  78. package/dist/types.js +3 -0
  79. package/dist/types.js.map +1 -0
  80. package/dist/world-client.d.ts +31 -0
  81. package/dist/world-client.js +227 -0
  82. package/dist/world-client.js.map +1 -0
  83. package/package.json +46 -0
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SettlementSync = void 0;
4
+ class SettlementSync {
5
+ store;
6
+ client;
7
+ constructor(store, client) {
8
+ this.store = store;
9
+ this.client = client;
10
+ }
11
+ async syncLatestSettlement() {
12
+ const lastAction = await this.store.readLastAction();
13
+ if (!lastAction || lastAction.response.startTick === undefined) {
14
+ return null;
15
+ }
16
+ const existing = await this.store.readLastSettlement();
17
+ if (existing && existing.actionId === lastAction.actionId) {
18
+ return existing;
19
+ }
20
+ const result = await this.client.getEvents(Math.max(-1, lastAction.response.startTick - 1), 200);
21
+ const actionEvents = result.events.filter((event) => event.actionId === lastAction.actionId);
22
+ if (actionEvents.length === 0) {
23
+ return null;
24
+ }
25
+ const settlement = summarizeSettlement(lastAction.action.verb, lastAction.actionId, actionEvents);
26
+ await this.store.writeLastSettlement(settlement);
27
+ return settlement;
28
+ }
29
+ }
30
+ exports.SettlementSync = SettlementSync;
31
+ function summarizeSettlement(verb, actionId, events) {
32
+ const rejected = events.find((event) => event.type === 'action_rejected');
33
+ if (rejected) {
34
+ const code = typeof rejected.data.code === 'string' ? rejected.data.code : undefined;
35
+ const reason = typeof rejected.data.reason === 'string' ? rejected.data.reason : undefined;
36
+ return {
37
+ tick: rejected.tick,
38
+ actionId,
39
+ status: 'rejected',
40
+ verb,
41
+ summary: reason ? `${verb} rejected: ${reason}` : `${verb} rejected`,
42
+ code,
43
+ reason,
44
+ };
45
+ }
46
+ const accepted = events.find((event) => event.type === 'action_accepted');
47
+ const detailEvent = events.find((event) => event.type !== 'action_accepted');
48
+ return {
49
+ tick: (detailEvent ?? accepted ?? events[0]).tick,
50
+ actionId,
51
+ status: 'accepted',
52
+ verb,
53
+ summary: detailEvent ? summarizeAcceptedEvent(detailEvent) : `${verb} accepted`,
54
+ };
55
+ }
56
+ function summarizeAcceptedEvent(event) {
57
+ switch (event.type) {
58
+ case 'move': {
59
+ const x = typeof event.data.toX === 'number' ? event.data.toX : undefined;
60
+ const y = typeof event.data.toY === 'number' ? event.data.toY : undefined;
61
+ return x === undefined || y === undefined ? 'move succeeded' : `move to (${x}, ${y}) succeeded`;
62
+ }
63
+ case 'gather': {
64
+ const itemId = typeof event.data.itemId === 'string' ? event.data.itemId : 'item';
65
+ const amount = typeof event.data.amount === 'number' ? event.data.amount : 1;
66
+ return `gathered ${amount} ${itemId}`;
67
+ }
68
+ case 'process': {
69
+ const recipeId = typeof event.data.recipeId === 'string' ? event.data.recipeId : 'recipe';
70
+ return `processed ${recipeId}`;
71
+ }
72
+ case 'build': {
73
+ const structureType = typeof event.data.structureType === 'string' ? event.data.structureType : 'structure';
74
+ return `built ${structureType}`;
75
+ }
76
+ default:
77
+ return `${event.type} succeeded`;
78
+ }
79
+ }
80
+ //# sourceMappingURL=settlement-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settlement-sync.js","sourceRoot":"","sources":["../../src/runtime/settlement-sync.ts"],"names":[],"mappings":";;;AAIA,MAAa,cAAc;IAEF;IACA;IAFrB,YACqB,KAAmB,EACnB,MAAuB;QADvB,UAAK,GAAL,KAAK,CAAc;QACnB,WAAM,GAAN,MAAM,CAAiB;IACzC,CAAC;IAEJ,KAAK,CAAC,oBAAoB;QACtB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QACrD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;QACvD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxD,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjG,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7F,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAClG,MAAM,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,UAAU,CAAC;IACtB,CAAC;CACJ;AA3BD,wCA2BC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAoB;IAC7E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IAC1E,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,MAAM,MAAM,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,OAAO;YACH,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ;YACR,MAAM,EAAE,UAAU;YAClB,IAAI;YACJ,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,cAAc,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,WAAW;YACpE,IAAI;YACJ,MAAM;SACT,CAAC;IACN,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IAE7E,OAAO;QACH,IAAI,EAAE,CAAC,WAAW,IAAI,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACjD,QAAQ;QACR,MAAM,EAAE,UAAU;QAClB,IAAI;QACJ,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,WAAW;KAClF,CAAC;AACN,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAiB;IAC7C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1E,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1E,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;QACpG,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;YAClF,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,OAAO,YAAY,MAAM,IAAI,MAAM,EAAE,CAAC;QAC1C,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC1F,OAAO,aAAa,QAAQ,EAAE,CAAC;QACnC,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,MAAM,aAAa,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;YAC5G,OAAO,SAAS,aAAa,EAAE,CAAC;QACpC,CAAC;QACD;YACI,OAAO,GAAG,KAAK,CAAC,IAAI,YAAY,CAAC;IACzC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { WorldClientLike } from '../types';
2
+ import { PlayerRuntimeSession, TickInboxRecord, TurnSnapshot } from './runtime-types';
3
+ import { SessionStore } from './session-store';
4
+ export declare class TurnOrchestrator {
5
+ private readonly store;
6
+ private readonly client;
7
+ constructor(store: SessionStore, client: WorldClientLike);
8
+ prefetchTick(tick: number): Promise<TickInboxRecord>;
9
+ buildTurnSnapshot(session: PlayerRuntimeSession, runId: string, tickInbox: TickInboxRecord): Promise<TurnSnapshot>;
10
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TurnOrchestrator = void 0;
4
+ class TurnOrchestrator {
5
+ store;
6
+ client;
7
+ constructor(store, client) {
8
+ this.store = store;
9
+ this.client = client;
10
+ }
11
+ async prefetchTick(tick) {
12
+ const [observe, events] = await Promise.all([this.client.observe(tick), this.client.getEvents(Math.max(-1, tick - 10), 50)]);
13
+ return {
14
+ tick,
15
+ observe,
16
+ events: events.events,
17
+ recordedAt: new Date().toISOString(),
18
+ };
19
+ }
20
+ async buildTurnSnapshot(session, runId, tickInbox) {
21
+ const [lastAction, lastSettlement] = await Promise.all([this.store.readLastAction(), this.store.readLastSettlement()]);
22
+ return {
23
+ runId,
24
+ contextTick: tickInbox.tick,
25
+ goal: session.goal,
26
+ agentId: session.agentId,
27
+ serverUrl: session.serverUrl,
28
+ tickIntervalMs: session.tickPollIntervalMs,
29
+ observeSummary: tickInbox.observe,
30
+ recentEvents: tickInbox.events,
31
+ lastAction,
32
+ lastSettlement,
33
+ submissionState: {
34
+ hasSubmitted: session.runState === 'submitted',
35
+ activeRunId: session.activeRunId,
36
+ runState: session.runState,
37
+ },
38
+ latestObservedTickAtStart: session.latestObservedTick,
39
+ };
40
+ }
41
+ }
42
+ exports.TurnOrchestrator = TurnOrchestrator;
43
+ //# sourceMappingURL=turn-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-orchestrator.js","sourceRoot":"","sources":["../../src/runtime/turn-orchestrator.ts"],"names":[],"mappings":";;;AAIA,MAAa,gBAAgB;IAEJ;IACA;IAFrB,YACqB,KAAmB,EACnB,MAAuB;QADvB,UAAK,GAAL,KAAK,CAAc;QACnB,WAAM,GAAN,MAAM,CAAiB;IACzC,CAAC;IAEJ,KAAK,CAAC,YAAY,CAAC,IAAY;QAC3B,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7H,OAAO;YACH,IAAI;YACJ,OAAO;YACP,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACvC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAA6B,EAAE,KAAa,EAAE,SAA0B;QAC5F,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAEvH,OAAO;YACH,KAAK;YACL,WAAW,EAAE,SAAS,CAAC,IAAI;YAC3B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,cAAc,EAAE,OAAO,CAAC,kBAAkB;YAC1C,cAAc,EAAE,SAAS,CAAC,OAAO;YACjC,YAAY,EAAE,SAAS,CAAC,MAAM;YAC9B,UAAU;YACV,cAAc;YACd,eAAe,EAAE;gBACb,YAAY,EAAE,OAAO,CAAC,QAAQ,KAAK,WAAW;gBAC9C,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC7B;YACD,yBAAyB,EAAE,OAAO,CAAC,kBAAkB;SACxD,CAAC;IACN,CAAC;CACJ;AAvCD,4CAuCC"}
@@ -0,0 +1,9 @@
1
+ import { PlayerRuntimeSession, TickInboxRecord, TurnSnapshot } from './runtime-types';
2
+ import { SessionStore } from './session-store';
3
+ export declare class WorkspaceManager {
4
+ private readonly store;
5
+ constructor(store: SessionStore);
6
+ ensureWorkspace(session: PlayerRuntimeSession): Promise<void>;
7
+ writeInbox(record: TickInboxRecord): Promise<void>;
8
+ writeTurn(runId: string, snapshot: TurnSnapshot): Promise<void>;
9
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkspaceManager = void 0;
4
+ const promises_1 = require("node:fs/promises");
5
+ const agents_template_1 = require("../prompting/agents-template");
6
+ const turn_summary_1 = require("../prompting/turn-summary");
7
+ class WorkspaceManager {
8
+ store;
9
+ constructor(store) {
10
+ this.store = store;
11
+ }
12
+ async ensureWorkspace(session) {
13
+ await this.store.ensureWorkspace();
14
+ await (0, promises_1.writeFile)(this.store.paths.agents, (0, agents_template_1.renderAgentsTemplate)({
15
+ profile: session.profile,
16
+ goal: session.goal,
17
+ workDir: session.workDir,
18
+ }), 'utf8');
19
+ }
20
+ async writeInbox(record) {
21
+ await this.store.writeInboxTick(record);
22
+ }
23
+ async writeTurn(runId, snapshot) {
24
+ await this.store.writeTurnSnapshot(runId, snapshot, (0, turn_summary_1.renderTurnSummary)(snapshot));
25
+ }
26
+ }
27
+ exports.WorkspaceManager = WorkspaceManager;
28
+ //# sourceMappingURL=workspace-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-manager.js","sourceRoot":"","sources":["../../src/runtime/workspace-manager.ts"],"names":[],"mappings":";;;AAAA,+CAA6C;AAE7C,kEAAoE;AACpE,4DAA8D;AAI9D,MAAa,gBAAgB;IACI;IAA7B,YAA6B,KAAmB;QAAnB,UAAK,GAAL,KAAK,CAAc;IAAG,CAAC;IAEpD,KAAK,CAAC,eAAe,CAAC,OAA6B;QAC/C,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,IAAA,oBAAS,EACX,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EACvB,IAAA,sCAAoB,EAAC;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,EACF,MAAM,CACT,CAAC;IACN,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAuB;QACpC,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,QAAsB;QACjD,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAA,gCAAiB,EAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,CAAC;CACJ;AAvBD,4CAuBC"}
@@ -0,0 +1,273 @@
1
+ export interface Action {
2
+ actionId?: string;
3
+ verb: string;
4
+ target?: string | number | Record<string, unknown>;
5
+ params?: Record<string, unknown>;
6
+ reason?: string;
7
+ }
8
+ export interface ActRequest extends Action {
9
+ basedOnTick?: number;
10
+ intendedStartTick?: number;
11
+ }
12
+ export interface InventoryItem {
13
+ itemId: string;
14
+ amount: number;
15
+ tags?: string[];
16
+ toolType?: 'axe' | 'pickaxe' | 'drill';
17
+ miningPower?: number;
18
+ durability?: number;
19
+ maxDurability?: number;
20
+ }
21
+ export interface NearbyResource {
22
+ resourceId: string;
23
+ resourceTypeId?: string;
24
+ nodeArchetypeId?: string;
25
+ itemId?: string;
26
+ miningDifficulty?: number;
27
+ position?: {
28
+ x: number;
29
+ y: number;
30
+ };
31
+ amount?: number;
32
+ distance?: number;
33
+ }
34
+ export interface NearbyStructure {
35
+ structureId: string;
36
+ type?: string;
37
+ position?: {
38
+ x: number;
39
+ y: number;
40
+ };
41
+ hp?: number;
42
+ passable?: boolean;
43
+ gateOpen?: boolean;
44
+ distance?: number;
45
+ }
46
+ export interface NearbyAgent {
47
+ agentId: string;
48
+ position?: {
49
+ x: number;
50
+ y: number;
51
+ };
52
+ hunger?: number;
53
+ stamina?: number;
54
+ talents?: Record<string, {
55
+ baseLevel: number;
56
+ level: number;
57
+ xp: number;
58
+ practiceCapLevel: number;
59
+ }>;
60
+ distance?: number;
61
+ }
62
+ export interface VisibleTrade {
63
+ tradeId: string;
64
+ creatorAgentId: string;
65
+ toAgentId?: string;
66
+ status?: 'open' | 'accepted' | 'cancelled' | string;
67
+ createdAtTick?: number;
68
+ expiresAtTick?: number;
69
+ ticksUntilExpire?: number;
70
+ give?: InventoryItem[];
71
+ receive?: InventoryItem[];
72
+ canAccept?: boolean;
73
+ canCancel?: boolean;
74
+ acceptRequirementsMet?: boolean;
75
+ }
76
+ export interface ObserveResponse {
77
+ tick: number;
78
+ map?: {
79
+ width: number;
80
+ height: number;
81
+ };
82
+ position?: {
83
+ x: number;
84
+ y: number;
85
+ };
86
+ hunger?: number;
87
+ stamina?: number;
88
+ inventory?: InventoryItem[];
89
+ talents?: Record<string, {
90
+ baseLevel: number;
91
+ level: number;
92
+ xp: number;
93
+ practiceCapLevel: number;
94
+ }>;
95
+ nearbyResources?: NearbyResource[];
96
+ nearbyStructures?: NearbyStructure[];
97
+ nearbyAgents?: NearbyAgent[];
98
+ visibleTrades?: VisibleTrade[];
99
+ adjacentTiles?: Array<{
100
+ x: number;
101
+ y: number;
102
+ withinMap: boolean;
103
+ terrain?: string;
104
+ occupiedBy?: {
105
+ kind: 'resource' | 'structure' | 'agent';
106
+ id: string;
107
+ type?: string;
108
+ };
109
+ canMove: boolean;
110
+ canBuild: boolean;
111
+ }>;
112
+ buildableAdjacentTargets?: Array<{
113
+ x: number;
114
+ y: number;
115
+ }>;
116
+ [key: string]: unknown;
117
+ }
118
+ export interface TickSignal {
119
+ tick: number;
120
+ tickIntervalMs?: number;
121
+ nextTickAt?: string;
122
+ serverTime?: string;
123
+ [key: string]: unknown;
124
+ }
125
+ export interface TickInfoResponse {
126
+ currentTick: number;
127
+ tickIntervalMs: number;
128
+ nextTickAt: string;
129
+ serverTime: string;
130
+ }
131
+ export interface JoinRequest {
132
+ agentId?: string;
133
+ metadata?: Record<string, unknown>;
134
+ }
135
+ export interface JoinResponse {
136
+ agentId: string;
137
+ acceptedAtTick?: number;
138
+ [key: string]: unknown;
139
+ }
140
+ export interface PlayerInitRequest {
141
+ playerName?: string;
142
+ }
143
+ export interface PlayerInitResponse {
144
+ playerId: string;
145
+ playerCredential: string;
146
+ }
147
+ export interface PlayerAgentCreateRequest {
148
+ agentName?: string;
149
+ }
150
+ export interface PlayerAgentCreateResponse {
151
+ playerId: string;
152
+ agentId: string;
153
+ agentToken: string;
154
+ }
155
+ export interface ActResponse {
156
+ accepted?: boolean;
157
+ reason?: string;
158
+ startTick?: number;
159
+ duplicate?: boolean;
160
+ currentTick?: number;
161
+ basedOnTick?: number;
162
+ intendedStartTick?: number;
163
+ lateSubmission?: boolean;
164
+ [key: string]: unknown;
165
+ }
166
+ export interface WorldEvent {
167
+ eventId: string;
168
+ tick: number;
169
+ type: string;
170
+ actorId?: string;
171
+ actionId?: string;
172
+ data: Record<string, unknown>;
173
+ }
174
+ export interface EventQueryResult {
175
+ events: WorldEvent[];
176
+ nextCursor: number;
177
+ }
178
+ export type ToolQueryValue = string | number | boolean | undefined;
179
+ export interface ToolQuery {
180
+ [key: string]: ToolQueryValue;
181
+ }
182
+ export interface ConditionalRequestOptions {
183
+ etag?: string;
184
+ version?: string;
185
+ }
186
+ export interface ToolReadResponse<T> {
187
+ status: number;
188
+ etag?: string;
189
+ version?: string;
190
+ body?: T;
191
+ }
192
+ export interface WorldClientRoutes {
193
+ playerInit: string;
194
+ playerAgents: string;
195
+ join: string;
196
+ observe: string;
197
+ act: string;
198
+ nextTick: string;
199
+ tickInfo: string;
200
+ events: string;
201
+ catalog: string;
202
+ rules: string;
203
+ }
204
+ export interface WorldClientOptions {
205
+ baseUrl: string;
206
+ agentId?: string;
207
+ token?: string;
208
+ routes?: Partial<WorldClientRoutes>;
209
+ fetchImpl?: typeof fetch;
210
+ }
211
+ export interface Logger {
212
+ debug(message: string, meta?: unknown): void;
213
+ info(message: string, meta?: unknown): void;
214
+ warn(message: string, meta?: unknown): void;
215
+ error(message: string, meta?: unknown): void;
216
+ }
217
+ export interface CatalogTools {
218
+ getArchetype(id: string): Promise<unknown>;
219
+ searchArchetypes(query: string): Promise<unknown>;
220
+ getRecipe(id: string): Promise<unknown>;
221
+ searchRecipes(query: string): Promise<unknown>;
222
+ }
223
+ export interface RulesTools {
224
+ getVerbSpec(verb: string): Promise<unknown>;
225
+ explainError(code: string): Promise<unknown>;
226
+ }
227
+ export interface AgentTools {
228
+ observe(): Promise<ObserveResponse>;
229
+ events(afterTick?: number, limit?: number): Promise<EventQueryResult>;
230
+ catalog: CatalogTools;
231
+ rules: RulesTools;
232
+ }
233
+ export interface CacheEntry<T> {
234
+ etag?: string;
235
+ version?: string;
236
+ value: T;
237
+ }
238
+ export interface ToolCacheStore {
239
+ catalog: Map<string, CacheEntry<unknown>>;
240
+ rules: Map<string, CacheEntry<unknown>>;
241
+ }
242
+ export interface TickContext {
243
+ readonly tick: number;
244
+ readonly goal: string;
245
+ readonly agentId: string;
246
+ readonly tools: AgentTools;
247
+ observe(): Promise<ObserveResponse>;
248
+ remember(key: string, value: unknown): void;
249
+ recall<T = unknown>(key: string): T | undefined;
250
+ hasCommitted(): boolean;
251
+ commit(action: Action): Promise<void>;
252
+ }
253
+ export type Policy = (context: TickContext) => Promise<Action | null | void> | Action | null | void;
254
+ export interface TickRunnerOptions {
255
+ client: WorldClientLike;
256
+ policy: Policy;
257
+ goal: string;
258
+ logger?: Logger;
259
+ pollIntervalMs?: number;
260
+ }
261
+ export interface WorldClientLike {
262
+ readonly agentId?: string;
263
+ playerInit(input: PlayerInitRequest): Promise<PlayerInitResponse>;
264
+ createPlayerAgent(playerCredential: string, input: PlayerAgentCreateRequest): Promise<PlayerAgentCreateResponse>;
265
+ join(input?: JoinRequest): Promise<JoinResponse>;
266
+ observe(asOfTick?: number): Promise<ObserveResponse>;
267
+ act(action: ActRequest): Promise<ActResponse>;
268
+ getTickInfo(): Promise<TickInfoResponse>;
269
+ getCatalog(params: ToolQuery, options?: ConditionalRequestOptions): Promise<ToolReadResponse<unknown>>;
270
+ getRules(params: ToolQuery, options?: ConditionalRequestOptions): Promise<ToolReadResponse<unknown>>;
271
+ getEvents(afterTick?: number, limit?: number): Promise<EventQueryResult>;
272
+ waitForNextTick(afterTick: number, pollIntervalMs?: number, signal?: AbortSignal): Promise<TickSignal>;
273
+ }
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { ActRequest, ActResponse, ConditionalRequestOptions, EventQueryResult, JoinRequest, JoinResponse, ObserveResponse, PlayerAgentCreateRequest, PlayerAgentCreateResponse, PlayerInitRequest, PlayerInitResponse, TickInfoResponse, TickSignal, ToolQuery, ToolReadResponse, WorldClientOptions } from './types';
2
+ export declare class WorldClientError extends Error {
3
+ readonly status: number;
4
+ readonly code?: string;
5
+ readonly details?: unknown;
6
+ constructor(message: string, status: number, code?: string, details?: unknown);
7
+ }
8
+ export declare class WorldClient {
9
+ private readonly baseUrl;
10
+ private readonly token?;
11
+ private readonly fetchImpl;
12
+ private readonly routes;
13
+ private _agentId?;
14
+ constructor(options: WorldClientOptions);
15
+ get agentId(): string | undefined;
16
+ playerInit(input: PlayerInitRequest): Promise<PlayerInitResponse>;
17
+ createPlayerAgent(playerCredential: string, input: PlayerAgentCreateRequest): Promise<PlayerAgentCreateResponse>;
18
+ join(input?: JoinRequest): Promise<JoinResponse>;
19
+ observe(asOfTick?: number): Promise<ObserveResponse>;
20
+ act(action: ActRequest): Promise<ActResponse>;
21
+ getTickInfo(): Promise<TickInfoResponse>;
22
+ getCatalog(params: ToolQuery, options?: ConditionalRequestOptions): Promise<ToolReadResponse<unknown>>;
23
+ getRules(params: ToolQuery, options?: ConditionalRequestOptions): Promise<ToolReadResponse<unknown>>;
24
+ getEvents(afterTick?: number, limit?: number): Promise<EventQueryResult>;
25
+ nextTick(afterTick: number): Promise<TickSignal>;
26
+ waitForNextTick(afterTick: number, pollIntervalMs?: number, signal?: AbortSignal): Promise<TickSignal>;
27
+ private request;
28
+ private conditionalRead;
29
+ private requestRaw;
30
+ private buildUrl;
31
+ }