@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.
Files changed (86) hide show
  1. package/README.md +127 -0
  2. package/dist/cli.d.ts +12 -0
  3. package/dist/cli.js +256 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/client-installer.d.ts +20 -0
  6. package/dist/client-installer.js +48 -0
  7. package/dist/client-installer.js.map +1 -0
  8. package/dist/config.d.ts +37 -0
  9. package/dist/config.js +184 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/data/indexer-client.d.ts +34 -0
  12. package/dist/data/indexer-client.js +172 -0
  13. package/dist/data/indexer-client.js.map +1 -0
  14. package/dist/data/rpc-reader.d.ts +69 -0
  15. package/dist/data/rpc-reader.js +163 -0
  16. package/dist/data/rpc-reader.js.map +1 -0
  17. package/dist/domain.d.ts +204 -0
  18. package/dist/domain.js +2 -0
  19. package/dist/domain.js.map +1 -0
  20. package/dist/errors.d.ts +10 -0
  21. package/dist/errors.js +16 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/factory.d.ts +4 -0
  24. package/dist/factory.js +25 -0
  25. package/dist/factory.js.map +1 -0
  26. package/dist/fs.d.ts +3 -0
  27. package/dist/fs.js +35 -0
  28. package/dist/fs.js.map +1 -0
  29. package/dist/generated/abis.d.ts +7446 -0
  30. package/dist/generated/abis.js +4861 -0
  31. package/dist/generated/abis.js.map +1 -0
  32. package/dist/generated/deployments.d.ts +145 -0
  33. package/dist/generated/deployments.js +150 -0
  34. package/dist/generated/deployments.js.map +1 -0
  35. package/dist/generated/protocol.d.ts +165 -0
  36. package/dist/generated/protocol.js +132 -0
  37. package/dist/generated/protocol.js.map +1 -0
  38. package/dist/geometry.d.ts +24 -0
  39. package/dist/geometry.js +31 -0
  40. package/dist/geometry.js.map +1 -0
  41. package/dist/json.d.ts +3 -0
  42. package/dist/json.js +14 -0
  43. package/dist/json.js.map +1 -0
  44. package/dist/mcp/server.d.ts +4 -0
  45. package/dist/mcp/server.js +134 -0
  46. package/dist/mcp/server.js.map +1 -0
  47. package/dist/mcp/stdio.d.ts +2 -0
  48. package/dist/mcp/stdio.js +23 -0
  49. package/dist/mcp/stdio.js.map +1 -0
  50. package/dist/runner/audit-store.d.ts +27 -0
  51. package/dist/runner/audit-store.js +61 -0
  52. package/dist/runner/audit-store.js.map +1 -0
  53. package/dist/runner/file-state.d.ts +7 -0
  54. package/dist/runner/file-state.js +23 -0
  55. package/dist/runner/file-state.js.map +1 -0
  56. package/dist/runner/legal-actions.d.ts +22 -0
  57. package/dist/runner/legal-actions.js +171 -0
  58. package/dist/runner/legal-actions.js.map +1 -0
  59. package/dist/runner/observation.d.ts +12 -0
  60. package/dist/runner/observation.js +47 -0
  61. package/dist/runner/observation.js.map +1 -0
  62. package/dist/runner/policy.d.ts +10 -0
  63. package/dist/runner/policy.js +68 -0
  64. package/dist/runner/policy.js.map +1 -0
  65. package/dist/runner/runtime.d.ts +73 -0
  66. package/dist/runner/runtime.js +236 -0
  67. package/dist/runner/runtime.js.map +1 -0
  68. package/dist/runner/strategy.d.ts +2 -0
  69. package/dist/runner/strategy.js +19 -0
  70. package/dist/runner/strategy.js.map +1 -0
  71. package/dist/runner/transaction-executor.d.ts +58 -0
  72. package/dist/runner/transaction-executor.js +114 -0
  73. package/dist/runner/transaction-executor.js.map +1 -0
  74. package/dist/runner/writer-lock.d.ts +14 -0
  75. package/dist/runner/writer-lock.js +81 -0
  76. package/dist/runner/writer-lock.js.map +1 -0
  77. package/dist/wallet/keystore.d.ts +18 -0
  78. package/dist/wallet/keystore.js +111 -0
  79. package/dist/wallet/keystore.js.map +1 -0
  80. package/dist/wallet/password-store.d.ts +27 -0
  81. package/dist/wallet/password-store.js +118 -0
  82. package/dist/wallet/password-store.js.map +1 -0
  83. package/package.json +41 -0
  84. package/skill/gworld/SKILL.md +58 -0
  85. package/skill/gworld/references/rules.md +33 -0
  86. 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":"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"}
@@ -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;
@@ -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
@@ -0,0 +1,3 @@
1
+ export declare function parseBigInt(value: unknown, label?: string): bigint;
2
+ export declare function jsonSafe<T>(value: T): T;
3
+ export declare function stringifyJson(value: unknown, space?: number): string;
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
@@ -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,2 @@
1
+ #!/usr/bin/env node
2
+ export declare function serveMcp(profile?: string): Promise<void>;
@@ -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,7 @@
1
+ import type { RuntimeStateStore } from './runtime.js';
2
+ export declare class FileRuntimeState implements RuntimeStateStore {
3
+ private readonly path;
4
+ constructor(path: string);
5
+ paused(): Promise<boolean>;
6
+ setPaused(paused: boolean): Promise<void>;
7
+ }
@@ -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 {};