@colin999n9/gworld-agent 0.1.0-alpha.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 +127 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.js +256 -0
- package/dist/cli.js.map +1 -0
- package/dist/client-installer.d.ts +20 -0
- package/dist/client-installer.js +48 -0
- package/dist/client-installer.js.map +1 -0
- package/dist/config.d.ts +37 -0
- package/dist/config.js +184 -0
- package/dist/config.js.map +1 -0
- package/dist/data/indexer-client.d.ts +34 -0
- package/dist/data/indexer-client.js +172 -0
- package/dist/data/indexer-client.js.map +1 -0
- package/dist/data/rpc-reader.d.ts +69 -0
- package/dist/data/rpc-reader.js +163 -0
- package/dist/data/rpc-reader.js.map +1 -0
- package/dist/domain.d.ts +204 -0
- package/dist/domain.js +2 -0
- package/dist/domain.js.map +1 -0
- package/dist/errors.d.ts +10 -0
- package/dist/errors.js +16 -0
- package/dist/errors.js.map +1 -0
- package/dist/factory.d.ts +4 -0
- package/dist/factory.js +25 -0
- package/dist/factory.js.map +1 -0
- package/dist/fs.d.ts +3 -0
- package/dist/fs.js +35 -0
- package/dist/fs.js.map +1 -0
- package/dist/generated/abis.d.ts +7446 -0
- package/dist/generated/abis.js +4861 -0
- package/dist/generated/abis.js.map +1 -0
- package/dist/generated/deployments.d.ts +145 -0
- package/dist/generated/deployments.js +150 -0
- package/dist/generated/deployments.js.map +1 -0
- package/dist/generated/protocol.d.ts +165 -0
- package/dist/generated/protocol.js +132 -0
- package/dist/generated/protocol.js.map +1 -0
- package/dist/geometry.d.ts +24 -0
- package/dist/geometry.js +31 -0
- package/dist/geometry.js.map +1 -0
- package/dist/json.d.ts +3 -0
- package/dist/json.js +14 -0
- package/dist/json.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.js +134 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/stdio.d.ts +2 -0
- package/dist/mcp/stdio.js +23 -0
- package/dist/mcp/stdio.js.map +1 -0
- package/dist/runner/audit-store.d.ts +27 -0
- package/dist/runner/audit-store.js +61 -0
- package/dist/runner/audit-store.js.map +1 -0
- package/dist/runner/file-state.d.ts +7 -0
- package/dist/runner/file-state.js +23 -0
- package/dist/runner/file-state.js.map +1 -0
- package/dist/runner/legal-actions.d.ts +22 -0
- package/dist/runner/legal-actions.js +171 -0
- package/dist/runner/legal-actions.js.map +1 -0
- package/dist/runner/observation.d.ts +12 -0
- package/dist/runner/observation.js +47 -0
- package/dist/runner/observation.js.map +1 -0
- package/dist/runner/policy.d.ts +10 -0
- package/dist/runner/policy.js +68 -0
- package/dist/runner/policy.js.map +1 -0
- package/dist/runner/runtime.d.ts +73 -0
- package/dist/runner/runtime.js +236 -0
- package/dist/runner/runtime.js.map +1 -0
- package/dist/runner/strategy.d.ts +2 -0
- package/dist/runner/strategy.js +19 -0
- package/dist/runner/strategy.js.map +1 -0
- package/dist/runner/transaction-executor.d.ts +58 -0
- package/dist/runner/transaction-executor.js +114 -0
- package/dist/runner/transaction-executor.js.map +1 -0
- package/dist/runner/writer-lock.d.ts +14 -0
- package/dist/runner/writer-lock.js +81 -0
- package/dist/runner/writer-lock.js.map +1 -0
- package/dist/wallet/keystore.d.ts +18 -0
- package/dist/wallet/keystore.js +111 -0
- package/dist/wallet/keystore.js.map +1 -0
- package/dist/wallet/password-store.d.ts +27 -0
- package/dist/wallet/password-store.js +118 -0
- package/dist/wallet/password-store.js.map +1 -0
- package/package.json +41 -0
- package/skill/gworld/SKILL.md +58 -0
- package/skill/gworld/references/rules.md +33 -0
- package/skill/gworld/references/troubleshooting.md +22 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// This file is generated by scripts/generate-web-contracts.mjs. Do not edit.
|
|
2
|
+
export const protocolConfig = {
|
|
3
|
+
activeRadius: 5n,
|
|
4
|
+
apCheckinCap: 2000n,
|
|
5
|
+
apRewardMaxCap: 500n,
|
|
6
|
+
apRewardMinCap: 200n,
|
|
7
|
+
apRoundSpendCap: 1000n,
|
|
8
|
+
bpsBase: 10000n,
|
|
9
|
+
capPerAp: 100n,
|
|
10
|
+
checkinAmountCap: 200n,
|
|
11
|
+
checkinCooldownSeconds: 3600n,
|
|
12
|
+
claimCostCap: 200n,
|
|
13
|
+
defenseDecayInterval: 3n,
|
|
14
|
+
defenseFloor: 1n,
|
|
15
|
+
defenseMax: 20n,
|
|
16
|
+
distanceFactorBpsPerStep: 5000n,
|
|
17
|
+
distanceStep: 5n,
|
|
18
|
+
hexNeighbors: 6n,
|
|
19
|
+
marketCloseBps: 7500n,
|
|
20
|
+
maxFragmentBatchSteps: 256n,
|
|
21
|
+
maxFragmentScan: 1024n,
|
|
22
|
+
maxMoveSteps: 10n,
|
|
23
|
+
maxNamedOptions: 7n,
|
|
24
|
+
maxSpawnPerAction: 6n,
|
|
25
|
+
maxSyncFragmentScan: 64n,
|
|
26
|
+
minBetG: 1000000000000000000n,
|
|
27
|
+
moveCostCap: 100n,
|
|
28
|
+
reinforceLocalCap: 100n,
|
|
29
|
+
reinforceRemoteCap: 200n,
|
|
30
|
+
ringMax: 50n,
|
|
31
|
+
rngBlockhashWindow: 256n,
|
|
32
|
+
rngTargetBlockOffset: 1n,
|
|
33
|
+
settleNMin: 3n,
|
|
34
|
+
settleNModulo: 6n,
|
|
35
|
+
tollBps: 1000n,
|
|
36
|
+
turnBlocks: 100n,
|
|
37
|
+
};
|
|
38
|
+
export const ruleVectors = {
|
|
39
|
+
attack: [{
|
|
40
|
+
apCap: 500n,
|
|
41
|
+
costPerPointCap: 100n,
|
|
42
|
+
damage: 5n,
|
|
43
|
+
effectiveDefense: 5n,
|
|
44
|
+
q: 0,
|
|
45
|
+
r: 0,
|
|
46
|
+
}, {
|
|
47
|
+
apCap: 750n,
|
|
48
|
+
costPerPointCap: 150n,
|
|
49
|
+
damage: 5n,
|
|
50
|
+
effectiveDefense: 5n,
|
|
51
|
+
q: 5,
|
|
52
|
+
r: 0,
|
|
53
|
+
}],
|
|
54
|
+
claim: [{
|
|
55
|
+
costCap: 200n,
|
|
56
|
+
q: 0,
|
|
57
|
+
r: 0,
|
|
58
|
+
}, {
|
|
59
|
+
costCap: 300n,
|
|
60
|
+
q: 5,
|
|
61
|
+
r: 0,
|
|
62
|
+
}],
|
|
63
|
+
geometry: [{
|
|
64
|
+
key: 9223372039002259455n,
|
|
65
|
+
q: -2147483648,
|
|
66
|
+
r: 2147483647,
|
|
67
|
+
}, {
|
|
68
|
+
key: 18446744073709551615n,
|
|
69
|
+
q: -1,
|
|
70
|
+
r: -1,
|
|
71
|
+
}, {
|
|
72
|
+
key: 0n,
|
|
73
|
+
q: 0,
|
|
74
|
+
r: 0,
|
|
75
|
+
}, {
|
|
76
|
+
key: 18446744065119617027n,
|
|
77
|
+
q: -2,
|
|
78
|
+
r: 3,
|
|
79
|
+
}],
|
|
80
|
+
move: [{
|
|
81
|
+
q: 0,
|
|
82
|
+
r: 0,
|
|
83
|
+
stepCostCap: 100n,
|
|
84
|
+
tollCap: 10n,
|
|
85
|
+
}, {
|
|
86
|
+
q: 5,
|
|
87
|
+
r: 0,
|
|
88
|
+
stepCostCap: 150n,
|
|
89
|
+
tollCap: 15n,
|
|
90
|
+
}],
|
|
91
|
+
reinforce: [{
|
|
92
|
+
apCap: 500n,
|
|
93
|
+
costCap: 500n,
|
|
94
|
+
effectiveDefense: 3n,
|
|
95
|
+
local: true,
|
|
96
|
+
pointsToAdd: 5n,
|
|
97
|
+
q: 0,
|
|
98
|
+
r: 0,
|
|
99
|
+
}, {
|
|
100
|
+
apCap: 1000n,
|
|
101
|
+
costCap: 900n,
|
|
102
|
+
effectiveDefense: 3n,
|
|
103
|
+
local: false,
|
|
104
|
+
pointsToAdd: 3n,
|
|
105
|
+
q: 5,
|
|
106
|
+
r: 0,
|
|
107
|
+
}],
|
|
108
|
+
};
|
|
109
|
+
export const protocol = protocolConfig;
|
|
110
|
+
export const protocolGoldenVectors = {
|
|
111
|
+
int32Edges: {
|
|
112
|
+
key: 9223372039002259455n,
|
|
113
|
+
q: -2147483648,
|
|
114
|
+
r: 2147483647,
|
|
115
|
+
},
|
|
116
|
+
negative: {
|
|
117
|
+
key: 18446744073709551615n,
|
|
118
|
+
q: -1,
|
|
119
|
+
r: -1,
|
|
120
|
+
},
|
|
121
|
+
origin: {
|
|
122
|
+
key: 0n,
|
|
123
|
+
q: 0,
|
|
124
|
+
r: 0,
|
|
125
|
+
},
|
|
126
|
+
selectedTile: {
|
|
127
|
+
key: 18446744065119617027n,
|
|
128
|
+
q: -2,
|
|
129
|
+
r: 3,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/generated/protocol.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,IAAI;IACpB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,KAAK;IACtB,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,IAAI;IACtB,sBAAsB,EAAE,KAAK;IAC7B,YAAY,EAAE,IAAI;IAClB,oBAAoB,EAAE,EAAE;IACxB,YAAY,EAAE,EAAE;IAChB,UAAU,EAAE,GAAG;IACf,wBAAwB,EAAE,KAAK;IAC/B,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,KAAK;IACrB,qBAAqB,EAAE,IAAI;IAC3B,eAAe,EAAE,KAAK;IACtB,YAAY,EAAE,GAAG;IACjB,eAAe,EAAE,EAAE;IACnB,iBAAiB,EAAE,EAAE;IACrB,mBAAmB,EAAE,GAAG;IACxB,OAAO,EAAE,oBAAoB;IAC7B,WAAW,EAAE,IAAI;IACjB,iBAAiB,EAAE,IAAI;IACvB,kBAAkB,EAAE,IAAI;IACxB,OAAO,EAAE,GAAG;IACZ,kBAAkB,EAAE,IAAI;IACxB,oBAAoB,EAAE,EAAE;IACxB,UAAU,EAAE,EAAE;IACd,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,IAAI;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,CAAC;YACP,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,EAAE;YACV,gBAAgB,EAAE,EAAE;YACpB,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;SACL,EAAE;YACD,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,EAAE;YACV,gBAAgB,EAAE,EAAE;YACpB,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;SACL,CAAC;IACF,KAAK,EAAE,CAAC;YACN,OAAO,EAAE,IAAI;YACb,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;SACL,EAAE;YACD,OAAO,EAAE,IAAI;YACb,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;SACL,CAAC;IACF,QAAQ,EAAE,CAAC;YACT,GAAG,EAAE,oBAAoB;YACzB,CAAC,EAAE,CAAC,UAAU;YACd,CAAC,EAAE,UAAU;SACd,EAAE;YACD,GAAG,EAAE,qBAAqB;YAC1B,CAAC,EAAE,CAAC,CAAC;YACL,CAAC,EAAE,CAAC,CAAC;SACN,EAAE;YACD,GAAG,EAAE,EAAE;YACP,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;SACL,EAAE;YACD,GAAG,EAAE,qBAAqB;YAC1B,CAAC,EAAE,CAAC,CAAC;YACL,CAAC,EAAE,CAAC;SACL,CAAC;IACF,IAAI,EAAE,CAAC;YACL,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,GAAG;SACb,EAAE;YACD,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,GAAG;SACb,CAAC;IACF,SAAS,EAAE,CAAC;YACV,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,EAAE;YACf,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;SACL,EAAE;YACD,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,IAAI;YACb,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,EAAE;YACf,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;SACL,CAAC;CACM,CAAC;AAEX,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,UAAU,EAAE;QACV,GAAG,EAAE,oBAAoB;QACzB,CAAC,EAAE,CAAC,UAAU;QACd,CAAC,EAAE,UAAU;KACd;IACD,QAAQ,EAAE;QACR,GAAG,EAAE,qBAAqB;QAC1B,CAAC,EAAE,CAAC,CAAC;QACL,CAAC,EAAE,CAAC,CAAC;KACN;IACD,MAAM,EAAE;QACN,GAAG,EAAE,EAAE;QACP,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;KACL;IACD,YAAY,EAAE;QACZ,GAAG,EAAE,qBAAqB;QAC1B,CAAC,EAAE,CAAC,CAAC;QACL,CAAC,EAAE,CAAC;KACL;CACO,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Coord } from './domain.js';
|
|
2
|
+
export declare const HEX_DIRECTIONS: readonly [{
|
|
3
|
+
readonly q: 1;
|
|
4
|
+
readonly r: 0;
|
|
5
|
+
}, {
|
|
6
|
+
readonly q: -1;
|
|
7
|
+
readonly r: 0;
|
|
8
|
+
}, {
|
|
9
|
+
readonly q: 0;
|
|
10
|
+
readonly r: 1;
|
|
11
|
+
}, {
|
|
12
|
+
readonly q: 0;
|
|
13
|
+
readonly r: -1;
|
|
14
|
+
}, {
|
|
15
|
+
readonly q: 1;
|
|
16
|
+
readonly r: -1;
|
|
17
|
+
}, {
|
|
18
|
+
readonly q: -1;
|
|
19
|
+
readonly r: 1;
|
|
20
|
+
}];
|
|
21
|
+
export declare function encodeTileKey(q: number, r: number): bigint;
|
|
22
|
+
export declare function hexDistance(left: Coord, right: Coord): number;
|
|
23
|
+
export declare function adjacent(left: Coord, right: Coord): boolean;
|
|
24
|
+
export declare function applyDistanceFactor(baseCostCap: bigint, target: Coord): bigint;
|
package/dist/geometry.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { protocolConfig } from './generated/protocol.js';
|
|
2
|
+
export const HEX_DIRECTIONS = [
|
|
3
|
+
{ q: 1, r: 0 },
|
|
4
|
+
{ q: -1, r: 0 },
|
|
5
|
+
{ q: 0, r: 1 },
|
|
6
|
+
{ q: 0, r: -1 },
|
|
7
|
+
{ q: 1, r: -1 },
|
|
8
|
+
{ q: -1, r: 1 },
|
|
9
|
+
];
|
|
10
|
+
export function encodeTileKey(q, r) {
|
|
11
|
+
if (!Number.isInteger(q) || !Number.isInteger(r))
|
|
12
|
+
throw new RangeError('Tile coordinates must be integers');
|
|
13
|
+
return (BigInt.asUintN(32, BigInt(q)) << 32n) | BigInt.asUintN(32, BigInt(r));
|
|
14
|
+
}
|
|
15
|
+
export function hexDistance(left, right) {
|
|
16
|
+
const dq = left.q - right.q;
|
|
17
|
+
const dr = left.r - right.r;
|
|
18
|
+
return Math.max(Math.abs(dq), Math.abs(dr), Math.abs(dq + dr));
|
|
19
|
+
}
|
|
20
|
+
export function adjacent(left, right) {
|
|
21
|
+
return hexDistance(left, right) === 1;
|
|
22
|
+
}
|
|
23
|
+
export function applyDistanceFactor(baseCostCap, target) {
|
|
24
|
+
if (baseCostCap === 0n)
|
|
25
|
+
return 0n;
|
|
26
|
+
const distance = BigInt(hexDistance(target, { q: 0, r: 0 }));
|
|
27
|
+
const multiplierInHalves = 2n + distance / protocolConfig.distanceStep;
|
|
28
|
+
const product = baseCostCap * multiplierInHalves;
|
|
29
|
+
return product / 2n + product % 2n;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.js","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IACd,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IACf,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IACd,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;IACf,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;IACf,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;CACP,CAAC;AAEX,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,mCAAmC,CAAC,CAAC;IAC5G,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAW,EAAE,KAAY;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAW,EAAE,KAAY;IAChD,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,MAAa;IACpE,IAAI,WAAW,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,kBAAkB,GAAG,EAAE,GAAG,QAAQ,GAAG,cAAc,CAAC,YAAY,CAAC;IACvE,MAAM,OAAO,GAAG,WAAW,GAAG,kBAAkB,CAAC;IACjD,OAAO,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC;AACrC,CAAC"}
|
package/dist/json.d.ts
ADDED
package/dist/json.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const DECIMAL = /^(0|[1-9]\d*)$/;
|
|
2
|
+
export function parseBigInt(value, label = 'bigint') {
|
|
3
|
+
const normalized = String(value);
|
|
4
|
+
if (!DECIMAL.test(normalized))
|
|
5
|
+
throw new TypeError(`${label} must be an unsigned decimal string`);
|
|
6
|
+
return BigInt(normalized);
|
|
7
|
+
}
|
|
8
|
+
export function jsonSafe(value) {
|
|
9
|
+
return JSON.parse(JSON.stringify(value, (_key, item) => (typeof item === 'bigint' ? item.toString() : item)));
|
|
10
|
+
}
|
|
11
|
+
export function stringifyJson(value, space) {
|
|
12
|
+
return JSON.stringify(value, (_key, item) => (typeof item === 'bigint' ? item.toString() : item), space);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=json.js.map
|
package/dist/json.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,gBAAgB,CAAC;AAEjC,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,KAAK,GAAG,QAAQ;IAC1D,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,qCAAqC,CAAC,CAAC;IAClG,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,KAAQ;IAClC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,CAAC;AACrH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,KAAc;IAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3G,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { AgentRuntime } from '../runner/runtime.js';
|
|
3
|
+
export declare const GWORLD_MCP_TOOLS: readonly ['gworld_status', 'gworld_observe', 'gworld_get_legal_actions', 'gworld_get_activity', 'gworld_get_policy', 'gworld_join', 'gworld_simulate_action', 'gworld_execute_action', 'gworld_set_policy', 'gworld_start', 'gworld_pause'];
|
|
4
|
+
export declare function createGWorldMcpServer(runtime: AgentRuntime): McpServer;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { ALL_ACTIONS } from '../config.js';
|
|
4
|
+
import { jsonSafe, parseBigInt, stringifyJson } from '../json.js';
|
|
5
|
+
import { sanitizedError } from '../errors.js';
|
|
6
|
+
export const GWORLD_MCP_TOOLS = [
|
|
7
|
+
'gworld_status',
|
|
8
|
+
'gworld_observe',
|
|
9
|
+
'gworld_get_legal_actions',
|
|
10
|
+
'gworld_get_activity',
|
|
11
|
+
'gworld_get_policy',
|
|
12
|
+
'gworld_join',
|
|
13
|
+
'gworld_simulate_action',
|
|
14
|
+
'gworld_execute_action',
|
|
15
|
+
'gworld_set_policy',
|
|
16
|
+
'gworld_start',
|
|
17
|
+
'gworld_pause',
|
|
18
|
+
];
|
|
19
|
+
const readOnly = { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true };
|
|
20
|
+
const writeChain = { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true };
|
|
21
|
+
const writeLocal = { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false };
|
|
22
|
+
function success(value) {
|
|
23
|
+
const structuredContent = jsonSafe(value);
|
|
24
|
+
return { content: [{ type: 'text', text: stringifyJson(structuredContent) }], structuredContent };
|
|
25
|
+
}
|
|
26
|
+
function failure(error) {
|
|
27
|
+
const safe = sanitizedError(error);
|
|
28
|
+
return { content: [{ type: 'text', text: stringifyJson(safe) }], isError: true };
|
|
29
|
+
}
|
|
30
|
+
function safeTool(handler) {
|
|
31
|
+
return async () => {
|
|
32
|
+
try {
|
|
33
|
+
return success(await handler());
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return failure(error);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function createGWorldMcpServer(runtime) {
|
|
41
|
+
const server = new McpServer({ name: 'gworld-agent', version: '0.1.0-alpha.0' }, { instructions: 'Check gworld_status, read the policy, observe, list legal actions, then simulate and execute only by actionId. Never request wallet secrets or arbitrary calldata.' });
|
|
42
|
+
server.registerTool('gworld_status', {
|
|
43
|
+
description: 'Read the local GWorld Runner, wallet address, selected Agent, chain, and sync status.',
|
|
44
|
+
inputSchema: z.object({}), annotations: readOnly,
|
|
45
|
+
}, safeTool(() => runtime.status()));
|
|
46
|
+
server.registerTool('gworld_observe', {
|
|
47
|
+
description: 'Read a compact, current GWorld observation from Indexer data plus strong RPC Agent state.',
|
|
48
|
+
inputSchema: z.object({}), annotations: readOnly,
|
|
49
|
+
}, safeTool(() => runtime.observe()));
|
|
50
|
+
server.registerTool('gworld_get_legal_actions', {
|
|
51
|
+
description: 'Return short-lived legal action tickets. Only these actionIds may be simulated or executed.',
|
|
52
|
+
inputSchema: z.object({}), annotations: readOnly,
|
|
53
|
+
}, safeTool(async () => ({ actions: await runtime.getLegalActions() })));
|
|
54
|
+
server.registerTool('gworld_get_activity', {
|
|
55
|
+
description: 'Read sanitized Runner decisions, simulations, transactions, and failures.',
|
|
56
|
+
inputSchema: z.object({ limit: z.number().int().min(1).max(200).optional() }), annotations: readOnly,
|
|
57
|
+
}, async ({ limit }) => {
|
|
58
|
+
try {
|
|
59
|
+
return success({ events: await runtime.activity(limit) });
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
return failure(error);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
server.registerTool('gworld_get_policy', {
|
|
66
|
+
description: 'Read the non-bypassable AP, G, Agent, action, transaction, and risk limits.',
|
|
67
|
+
inputSchema: z.object({}), annotations: readOnly,
|
|
68
|
+
}, safeTool(async () => ({ policy: runtime.getPolicy() })));
|
|
69
|
+
server.registerTool('gworld_join', {
|
|
70
|
+
description: 'Create or resume this wallet Agent lifecycle, wait for randomness, spawn, and persist the selected Agent.',
|
|
71
|
+
inputSchema: z.object({}), annotations: writeChain,
|
|
72
|
+
}, safeTool(() => runtime.join()));
|
|
73
|
+
server.registerTool('gworld_simulate_action', {
|
|
74
|
+
description: 'Revalidate policy and simulate a short-lived legal action without signing or broadcasting.',
|
|
75
|
+
inputSchema: z.object({ actionId: z.string().uuid() }), annotations: readOnly,
|
|
76
|
+
}, async ({ actionId }) => {
|
|
77
|
+
try {
|
|
78
|
+
return success(await runtime.simulateAction(actionId));
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return failure(error);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
server.registerTool('gworld_execute_action', {
|
|
85
|
+
description: 'Revalidate and execute a short-lived legal actionId through policy, simulation, signing, receipt, and indexing.',
|
|
86
|
+
inputSchema: z.object({ actionId: z.string().uuid() }), annotations: writeChain,
|
|
87
|
+
}, async ({ actionId }) => {
|
|
88
|
+
try {
|
|
89
|
+
return success(await runtime.executeAction(actionId));
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
return failure(error);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
server.registerTool('gworld_set_policy', {
|
|
96
|
+
description: 'Replace selected Runner safety limits. Exact G values use base-unit decimal strings.',
|
|
97
|
+
inputSchema: z.object({
|
|
98
|
+
maxApPerRoundCap: z.string().regex(/^(0|[1-9]\d*)$/).optional(),
|
|
99
|
+
maxGBetPerAction: z.string().regex(/^(0|[1-9]\d*)$/).optional(),
|
|
100
|
+
maxGSpendPerDay: z.string().regex(/^(0|[1-9]\d*)$/).optional(),
|
|
101
|
+
maxTransactionsPerRound: z.number().int().min(0).max(100).optional(),
|
|
102
|
+
allowedAgentIds: z.array(z.string().regex(/^[1-9]\d*$/)).optional(),
|
|
103
|
+
allowedActions: z.array(z.enum(ALL_ACTIONS)).optional(),
|
|
104
|
+
autoExecuteRisk: z.enum(['low', 'medium', 'high']).optional(),
|
|
105
|
+
}),
|
|
106
|
+
annotations: { ...writeLocal, destructiveHint: true },
|
|
107
|
+
}, async (patch) => {
|
|
108
|
+
try {
|
|
109
|
+
const current = runtime.getPolicy();
|
|
110
|
+
const next = {
|
|
111
|
+
...current,
|
|
112
|
+
...(patch.maxApPerRoundCap == null ? {} : { maxApPerRoundCap: parseBigInt(patch.maxApPerRoundCap) }),
|
|
113
|
+
...(patch.maxGBetPerAction == null ? {} : { maxGBetPerAction: parseBigInt(patch.maxGBetPerAction) }),
|
|
114
|
+
...(patch.maxGSpendPerDay == null ? {} : { maxGSpendPerDay: parseBigInt(patch.maxGSpendPerDay) }),
|
|
115
|
+
...(patch.maxTransactionsPerRound == null ? {} : { maxTransactionsPerRound: patch.maxTransactionsPerRound }),
|
|
116
|
+
...(patch.allowedAgentIds == null ? {} : { allowedAgentIds: patch.allowedAgentIds.map((id) => parseBigInt(id)) }),
|
|
117
|
+
...(patch.allowedActions == null ? {} : { allowedActions: patch.allowedActions }),
|
|
118
|
+
...(patch.autoExecuteRisk == null ? {} : { autoExecuteRisk: patch.autoExecuteRisk }),
|
|
119
|
+
};
|
|
120
|
+
return success({ policy: await runtime.setPolicy(next) });
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
return failure(error);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
server.registerTool('gworld_start', {
|
|
127
|
+
description: 'Start the conservative local autonomous Runner loop.', inputSchema: z.object({}), annotations: writeLocal,
|
|
128
|
+
}, safeTool(() => runtime.start()));
|
|
129
|
+
server.registerTool('gworld_pause', {
|
|
130
|
+
description: 'Pause the local autonomous Runner loop without deleting wallet or Agent state.', inputSchema: z.object({}), annotations: writeLocal,
|
|
131
|
+
}, safeTool(() => runtime.pause()));
|
|
132
|
+
return server;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { loadConfig } from '../config.js';
|
|
5
|
+
import { createAgentRuntime } from '../factory.js';
|
|
6
|
+
import { loadKeyStore, decryptPrivateKey } from '../wallet/keystore.js';
|
|
7
|
+
import { PasswordManager } from '../wallet/password-store.js';
|
|
8
|
+
import { createGWorldMcpServer } from './server.js';
|
|
9
|
+
export async function serveMcp(profile = 'default') {
|
|
10
|
+
const config = await loadConfig(profile);
|
|
11
|
+
const password = await new PasswordManager().unlock(profile, false);
|
|
12
|
+
const privateKey = await decryptPrivateKey(await loadKeyStore(config.wallet.keystorePath), password);
|
|
13
|
+
const server = createGWorldMcpServer(createAgentRuntime(config, privateKey));
|
|
14
|
+
await server.connect(new StdioServerTransport());
|
|
15
|
+
}
|
|
16
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
|
17
|
+
const profileIndex = process.argv.indexOf('--profile');
|
|
18
|
+
serveMcp(profileIndex >= 0 ? process.argv[profileIndex + 1] : 'default').catch((error) => {
|
|
19
|
+
process.stderr.write(`gworld-mcp: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
20
|
+
process.exitCode = 1;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=stdio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/mcp/stdio.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAO,GAAG,SAAS;IAChD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,eAAe,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrG,MAAM,MAAM,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7E,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/E,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACvF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ActionKind, AuditEvent } from '../domain.js';
|
|
2
|
+
export interface AuditLog {
|
|
3
|
+
record(event: Omit<AuditEvent, 'id' | 'at'>): Promise<AuditEvent>;
|
|
4
|
+
recent(limit?: number): Promise<AuditEvent[]>;
|
|
5
|
+
gSpentSince(isoTimestamp: string): Promise<bigint>;
|
|
6
|
+
transactionCount(round: bigint): Promise<number>;
|
|
7
|
+
}
|
|
8
|
+
export declare class FileAuditLog implements AuditLog {
|
|
9
|
+
private readonly path;
|
|
10
|
+
private readonly now;
|
|
11
|
+
constructor(path: string, now?: () => Date);
|
|
12
|
+
record(event: Omit<AuditEvent, 'id' | 'at'>): Promise<AuditEvent>;
|
|
13
|
+
recent(limit?: number): Promise<AuditEvent[]>;
|
|
14
|
+
private readAll;
|
|
15
|
+
gSpentSince(isoTimestamp: string): Promise<bigint>;
|
|
16
|
+
transactionCount(round: bigint): Promise<number>;
|
|
17
|
+
}
|
|
18
|
+
export declare class MemoryAuditLog implements AuditLog {
|
|
19
|
+
readonly events: AuditEvent[];
|
|
20
|
+
record(event: Omit<AuditEvent, 'id' | 'at'>): Promise<AuditEvent>;
|
|
21
|
+
recent(limit?: number): Promise<AuditEvent[]>;
|
|
22
|
+
gSpentSince(isoTimestamp: string): Promise<bigint>;
|
|
23
|
+
transactionCount(round: bigint): Promise<number>;
|
|
24
|
+
}
|
|
25
|
+
export declare function actionAmountG(action: {
|
|
26
|
+
kind: ActionKind;
|
|
27
|
+
} & Record<string, unknown>): bigint;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { appendPrivateFile } from '../fs.js';
|
|
4
|
+
export class FileAuditLog {
|
|
5
|
+
path;
|
|
6
|
+
now;
|
|
7
|
+
constructor(path, now = () => new Date()) {
|
|
8
|
+
this.path = path;
|
|
9
|
+
this.now = now;
|
|
10
|
+
}
|
|
11
|
+
async record(event) {
|
|
12
|
+
const full = { id: randomUUID(), at: this.now().toISOString(), ...event };
|
|
13
|
+
await appendPrivateFile(this.path, `${JSON.stringify(full)}\n`);
|
|
14
|
+
return full;
|
|
15
|
+
}
|
|
16
|
+
async recent(limit = 50) {
|
|
17
|
+
return (await this.readAll()).slice(-Math.max(0, Math.min(limit, 500))).reverse();
|
|
18
|
+
}
|
|
19
|
+
async readAll() {
|
|
20
|
+
try {
|
|
21
|
+
const lines = (await readFile(this.path, 'utf8')).trim().split('\n').filter(Boolean);
|
|
22
|
+
return lines.map((line) => JSON.parse(line));
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
if (error.code === 'ENOENT')
|
|
26
|
+
return [];
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async gSpentSince(isoTimestamp) {
|
|
31
|
+
return (await this.readAll()).reduce((sum, event) => event.type === 'transaction' && event.status === 'complete' && event.at >= isoTimestamp && event.amountG
|
|
32
|
+
? sum + BigInt(event.amountG)
|
|
33
|
+
: sum, 0n);
|
|
34
|
+
}
|
|
35
|
+
async transactionCount(round) {
|
|
36
|
+
return (await this.readAll()).filter((event) => event.type === 'transaction' && event.status === 'complete' && event.round === round.toString()).length;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class MemoryAuditLog {
|
|
40
|
+
events = [];
|
|
41
|
+
async record(event) {
|
|
42
|
+
const full = { id: randomUUID(), at: new Date().toISOString(), ...event };
|
|
43
|
+
this.events.push(full);
|
|
44
|
+
return full;
|
|
45
|
+
}
|
|
46
|
+
async recent(limit = 50) {
|
|
47
|
+
return this.events.slice(-limit).reverse();
|
|
48
|
+
}
|
|
49
|
+
async gSpentSince(isoTimestamp) {
|
|
50
|
+
return this.events.reduce((sum, event) => event.type === 'transaction' && event.status === 'complete' && event.at >= isoTimestamp && event.amountG
|
|
51
|
+
? sum + BigInt(event.amountG)
|
|
52
|
+
: sum, 0n);
|
|
53
|
+
}
|
|
54
|
+
async transactionCount(round) {
|
|
55
|
+
return this.events.filter((event) => event.type === 'transaction' && event.status === 'complete' && event.round === String(round)).length;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function actionAmountG(action) {
|
|
59
|
+
return action.kind === 'bet' && typeof action.amountG === 'bigint' ? action.amountG : 0n;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=audit-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-store.js","sourceRoot":"","sources":["../../src/runner/audit-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { atomicWritePrivateFile } from '../fs.js';
|
|
3
|
+
export class FileRuntimeState {
|
|
4
|
+
path;
|
|
5
|
+
constructor(path) {
|
|
6
|
+
this.path = path;
|
|
7
|
+
}
|
|
8
|
+
async paused() {
|
|
9
|
+
try {
|
|
10
|
+
const value = JSON.parse(await readFile(this.path, 'utf8'));
|
|
11
|
+
return value.paused !== false;
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (error.code === 'ENOENT')
|
|
15
|
+
return true;
|
|
16
|
+
throw error;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async setPaused(paused) {
|
|
20
|
+
await atomicWritePrivateFile(this.path, `${JSON.stringify({ version: 1, paused })}\n`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=file-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-state.js","sourceRoot":"","sources":["../../src/runner/file-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGlD,MAAM,OAAO,gBAAgB;IACE,IAAI;IAAjC,YAA6B,IAAY;oBAAZ,IAAI;IAAW,CAAC;IAE7C,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAyB,CAAC;YACpF,OAAO,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACpE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAe;QAC7B,MAAM,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IACzF,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { GameAction, LegalAction, Observation, Risk, RunnerPolicy } from '../domain.js';
|
|
2
|
+
type Candidate = {
|
|
3
|
+
action: GameAction;
|
|
4
|
+
risk: Risk;
|
|
5
|
+
reason: string;
|
|
6
|
+
};
|
|
7
|
+
export declare class ActionCatalog {
|
|
8
|
+
private readonly ttlMs;
|
|
9
|
+
private readonly now;
|
|
10
|
+
private readonly tickets;
|
|
11
|
+
constructor(ttlMs: number, now?: () => number);
|
|
12
|
+
issue(observation: Observation, candidates: Candidate[]): LegalAction[];
|
|
13
|
+
resolve(actionId: string, observation: Observation): LegalAction;
|
|
14
|
+
consume(actionId: string, observation: Observation): LegalAction;
|
|
15
|
+
private prune;
|
|
16
|
+
}
|
|
17
|
+
export declare class LegalActionPlanner {
|
|
18
|
+
private readonly catalog;
|
|
19
|
+
constructor(catalog: ActionCatalog);
|
|
20
|
+
plan(observation: Observation, policy: RunnerPolicy): LegalAction[];
|
|
21
|
+
}
|
|
22
|
+
export {};
|