@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,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runRules = runRules;
4
+ const session_store_1 = require("../runtime/session-store");
5
+ const shared_1 = require("./shared");
6
+ async function runRules(args) {
7
+ const subcommand = args.positionals[0];
8
+ const subject = args.positionals[1];
9
+ if (!subject) {
10
+ throw new shared_1.CliError('INVALID_COMMAND', 'rules requires a subject such as a verb or error code.');
11
+ }
12
+ const workDir = await (0, shared_1.resolveWorkDir)(args);
13
+ const store = new session_store_1.SessionStore(workDir);
14
+ const session = await store.requireSession();
15
+ const client = await (0, shared_1.createClientFromSession)(session);
16
+ if (subcommand === 'verb') {
17
+ (0, shared_1.printJson)(await client.getRules({
18
+ kind: 'verb',
19
+ verb: subject,
20
+ }));
21
+ return;
22
+ }
23
+ if (subcommand === 'error') {
24
+ (0, shared_1.printJson)(await client.getRules({
25
+ kind: 'error',
26
+ code: subject,
27
+ }));
28
+ return;
29
+ }
30
+ throw new shared_1.CliError('INVALID_COMMAND', 'rules requires "verb" or "error".');
31
+ }
32
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/cli/rules.ts"],"names":[],"mappings":";;AAGA,4BAiCC;AApCD,4DAAwD;AACxD,qCAAoG;AAE7F,KAAK,UAAU,QAAQ,CAAC,IAAgB;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,iBAAQ,CAAC,iBAAiB,EAAE,wDAAwD,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAc,EAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,4BAAY,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,IAAA,gCAAuB,EAAC,OAAO,CAAC,CAAC;IAEtD,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACxB,IAAA,kBAAS,EACL,MAAM,MAAM,CAAC,QAAQ,CAAC;YAClB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,OAAO;SAChB,CAAC,CACL,CAAC;QACF,OAAO;IACX,CAAC;IAED,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QACzB,IAAA,kBAAS,EACL,MAAM,MAAM,CAAC,QAAQ,CAAC;YAClB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;SAChB,CAAC,CACL,CAAC;QACF,OAAO;IACX,CAAC;IAED,MAAM,IAAI,iBAAQ,CAAC,iBAAiB,EAAE,mCAAmC,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { ExternalAgentAdapter } from '../adapters/external-agent-adapter';
2
+ import { ConsoleLogger } from '../logger';
3
+ import { PlayerRuntimeSession } from '../runtime/runtime-types';
4
+ import { WorldClientLike } from '../types';
5
+ export interface ParsedArgs {
6
+ positionals: string[];
7
+ options: Map<string, string[]>;
8
+ }
9
+ export declare const DEFAULT_SERVER_URL = "https://api.youragents.world";
10
+ export declare class CliError extends Error {
11
+ readonly code: string;
12
+ readonly exitCode: number;
13
+ constructor(code: string, message: string, exitCode?: number);
14
+ }
15
+ export declare function parseArgs(argv: string[]): ParsedArgs;
16
+ export declare function getOption(args: ParsedArgs, name: string): string | undefined;
17
+ export declare function resolveServerUrl(args: ParsedArgs): string;
18
+ export declare function getOptionValues(args: ParsedArgs, name: string): string[];
19
+ export declare function requireOption(args: ParsedArgs, name: string): string;
20
+ export declare function hasFlag(args: ParsedArgs, name: string): boolean;
21
+ export declare function resolveWorkDir(args: ParsedArgs, cwd?: string): Promise<string>;
22
+ export declare function findSessionWorkDir(startDir: string): Promise<string | null>;
23
+ export declare function createClientFromSession(session: PlayerRuntimeSession): Promise<WorldClientLike>;
24
+ export declare function createAdapter(session: PlayerRuntimeSession): ExternalAgentAdapter;
25
+ export declare function printJson(value: unknown): void;
26
+ export declare function printHelp(): void;
27
+ export declare function createLogger(): ConsoleLogger;
@@ -0,0 +1,243 @@
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.CliError = exports.DEFAULT_SERVER_URL = void 0;
7
+ exports.parseArgs = parseArgs;
8
+ exports.getOption = getOption;
9
+ exports.resolveServerUrl = resolveServerUrl;
10
+ exports.getOptionValues = getOptionValues;
11
+ exports.requireOption = requireOption;
12
+ exports.hasFlag = hasFlag;
13
+ exports.resolveWorkDir = resolveWorkDir;
14
+ exports.findSessionWorkDir = findSessionWorkDir;
15
+ exports.createClientFromSession = createClientFromSession;
16
+ exports.createAdapter = createAdapter;
17
+ exports.printJson = printJson;
18
+ exports.printHelp = printHelp;
19
+ exports.createLogger = createLogger;
20
+ const promises_1 = require("node:fs/promises");
21
+ const node_path_1 = __importDefault(require("node:path"));
22
+ const codex_adapter_1 = require("../adapters/codex-adapter");
23
+ const generic_command_adapter_1 = require("../adapters/generic-command-adapter");
24
+ const credential_store_1 = require("../config/credential-store");
25
+ const logger_1 = require("../logger");
26
+ const world_client_1 = require("../world-client");
27
+ exports.DEFAULT_SERVER_URL = 'https://api.youragents.world';
28
+ class CliError extends Error {
29
+ code;
30
+ exitCode;
31
+ constructor(code, message, exitCode = 1) {
32
+ super(message);
33
+ this.name = 'CliError';
34
+ this.code = code;
35
+ this.exitCode = exitCode;
36
+ }
37
+ }
38
+ exports.CliError = CliError;
39
+ function parseArgs(argv) {
40
+ const positionals = [];
41
+ const options = new Map();
42
+ for (let index = 0; index < argv.length; index += 1) {
43
+ const token = argv[index];
44
+ if (!token.startsWith('--')) {
45
+ positionals.push(token);
46
+ continue;
47
+ }
48
+ const name = token.slice(2);
49
+ const next = argv[index + 1];
50
+ const values = options.get(name) ?? [];
51
+ if (next === undefined || next.startsWith('--')) {
52
+ values.push('true');
53
+ }
54
+ else {
55
+ values.push(next);
56
+ index += 1;
57
+ }
58
+ options.set(name, values);
59
+ }
60
+ return {
61
+ positionals,
62
+ options,
63
+ };
64
+ }
65
+ function getOption(args, name) {
66
+ return args.options.get(name)?.[0];
67
+ }
68
+ function resolveServerUrl(args) {
69
+ return getOption(args, 'server') ?? exports.DEFAULT_SERVER_URL;
70
+ }
71
+ function getOptionValues(args, name) {
72
+ return args.options.get(name) ?? [];
73
+ }
74
+ function requireOption(args, name) {
75
+ const value = getOption(args, name);
76
+ if (!value) {
77
+ throw new CliError('MISSING_OPTION', `Missing required option --${name}.`);
78
+ }
79
+ return value;
80
+ }
81
+ function hasFlag(args, name) {
82
+ return getOption(args, name) === 'true';
83
+ }
84
+ async function resolveWorkDir(args, cwd = process.cwd()) {
85
+ const explicit = getOption(args, 'work-dir');
86
+ if (explicit) {
87
+ return node_path_1.default.resolve(cwd, explicit);
88
+ }
89
+ const discovered = await findSessionWorkDir(cwd);
90
+ if (discovered) {
91
+ return discovered;
92
+ }
93
+ const workspaceChild = await findWorkspaceChildSessionWorkDir(cwd, getOption(args, 'profile'));
94
+ if (workspaceChild) {
95
+ return workspaceChild;
96
+ }
97
+ throw new CliError('MISSING_WORK_DIR', 'Could not resolve an agent workspace. Use --work-dir, run inside an agent workspace, or run from a player root with a single agent workspace.');
98
+ }
99
+ async function findSessionWorkDir(startDir) {
100
+ let current = node_path_1.default.resolve(startDir);
101
+ while (true) {
102
+ try {
103
+ await (0, promises_1.access)(node_path_1.default.join(current, 'session.json'));
104
+ return current;
105
+ }
106
+ catch {
107
+ // keep walking upward
108
+ }
109
+ const parent = node_path_1.default.dirname(current);
110
+ if (parent === current) {
111
+ return null;
112
+ }
113
+ current = parent;
114
+ }
115
+ }
116
+ async function findWorkspaceChildSessionWorkDir(startDir, profile) {
117
+ const workspaceDir = node_path_1.default.resolve(startDir);
118
+ try {
119
+ const entries = await (0, promises_1.readdir)(workspaceDir, { withFileTypes: true });
120
+ const matches = [];
121
+ for (const entry of entries) {
122
+ if (!entry.isDirectory()) {
123
+ continue;
124
+ }
125
+ const candidate = node_path_1.default.join(workspaceDir, entry.name);
126
+ try {
127
+ const session = await readSessionMetadata(candidate);
128
+ if (!session) {
129
+ continue;
130
+ }
131
+ if (profile && session.profile !== profile) {
132
+ continue;
133
+ }
134
+ matches.push(candidate);
135
+ }
136
+ catch {
137
+ // ignore directories that are not initialized workspaces
138
+ }
139
+ }
140
+ if (matches.length === 1) {
141
+ return matches[0] ?? null;
142
+ }
143
+ if (matches.length > 1) {
144
+ throw new CliError('AMBIGUOUS_WORK_DIR', profile
145
+ ? `Multiple agent workspaces found for profile ${profile}. Use --work-dir or run inside the target agent workspace.`
146
+ : 'Multiple agent workspaces found in the current directory. Use --work-dir or run inside the target agent workspace.');
147
+ }
148
+ return null;
149
+ }
150
+ catch (error) {
151
+ if (isMissingFile(error)) {
152
+ return null;
153
+ }
154
+ throw error;
155
+ }
156
+ }
157
+ async function createClientFromSession(session) {
158
+ let token;
159
+ if (session.credentialRef) {
160
+ const credentialStore = new credential_store_1.CredentialStore();
161
+ const credential = await credentialStore.getAgentCredential(session.serverUrl, session.credentialRef);
162
+ if (!credential) {
163
+ throw new CliError('MISSING_CREDENTIAL', `Missing agent credential for ${session.credentialRef}.`);
164
+ }
165
+ token = credential.agentToken;
166
+ }
167
+ return new world_client_1.WorldClient({
168
+ baseUrl: session.serverUrl,
169
+ agentId: session.agentId,
170
+ token,
171
+ });
172
+ }
173
+ function createAdapter(session) {
174
+ if (session.adapter === 'codex') {
175
+ const command = asStringArray(session.adapterConfig?.command);
176
+ const execArgsTemplate = asStringArray(session.adapterConfig?.execArgsTemplate);
177
+ const resumeArgsTemplate = asStringArray(session.adapterConfig?.resumeArgsTemplate);
178
+ return new codex_adapter_1.CodexAdapter({
179
+ ...(command ? { command } : {}),
180
+ ...(execArgsTemplate ? { execArgsTemplate } : {}),
181
+ ...(resumeArgsTemplate ? { resumeArgsTemplate } : {}),
182
+ });
183
+ }
184
+ if (session.adapter === 'generic-command') {
185
+ const command = asStringArray(session.adapterConfig?.command);
186
+ if (!command || command.length === 0) {
187
+ throw new CliError('INVALID_SESSION', 'generic-command adapter requires adapterConfig.command in session.json.');
188
+ }
189
+ return new generic_command_adapter_1.GenericCommandAdapter({
190
+ command,
191
+ });
192
+ }
193
+ throw new CliError('UNKNOWN_ADAPTER', `Unsupported adapter: ${session.adapter}`);
194
+ }
195
+ function printJson(value) {
196
+ process.stdout.write(`${JSON.stringify(value, null, 4)}\n`);
197
+ }
198
+ function printHelp() {
199
+ process.stdout.write([
200
+ 'Usage:',
201
+ ' yw player init --player-name <name> [--profile <name>] [--server <url>]',
202
+ ' yw play init --agent-name <id> --adapter codex [--profile <name>] [--server <url>]',
203
+ ' yw play run [--work-dir <dir>] [--poll-ms <ms>] [--once]',
204
+ ' yw play status [--work-dir <dir>]',
205
+ ' yw observe [--work-dir <dir>] [--as-of-tick <tick>]',
206
+ ' yw events [--work-dir <dir>] [--after-tick <tick>] [--limit <n>]',
207
+ ' yw catalog get --kind <archetype|recipe> --id <id>',
208
+ ' yw catalog search --query <query>',
209
+ ' yw rules verb <verb>',
210
+ ' yw rules error <code>',
211
+ ' yw action submit --run-id <runId> (--json <json> | --file <file> | --verb <verb> [--target-json <json>] [--params-json <json>] [--reason <text>])',
212
+ ' yw action status [--work-dir <dir>] [--run-id <runId>]',
213
+ ' yw action last [--work-dir <dir>]',
214
+ '',
215
+ `Default server: ${exports.DEFAULT_SERVER_URL}`,
216
+ ].join('\n'));
217
+ }
218
+ function createLogger() {
219
+ return new logger_1.ConsoleLogger();
220
+ }
221
+ function asStringArray(value) {
222
+ if (!Array.isArray(value) || value.some((entry) => typeof entry !== 'string')) {
223
+ return undefined;
224
+ }
225
+ return value;
226
+ }
227
+ async function readSessionMetadata(workDir) {
228
+ try {
229
+ const raw = await (0, promises_1.readFile)(node_path_1.default.join(workDir, 'session.json'), 'utf8');
230
+ const parsed = JSON.parse(raw);
231
+ return typeof parsed.profile === 'string' ? { profile: parsed.profile } : {};
232
+ }
233
+ catch (error) {
234
+ if (isMissingFile(error)) {
235
+ return null;
236
+ }
237
+ throw error;
238
+ }
239
+ }
240
+ function isMissingFile(error) {
241
+ return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';
242
+ }
243
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/cli/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface StoredPlayerCredential {
2
+ profile: string;
3
+ serverUrl: string;
4
+ playerId: string;
5
+ playerCredential: string;
6
+ createdAt: string;
7
+ }
8
+ export interface StoredAgentCredential {
9
+ profile: string;
10
+ serverUrl: string;
11
+ playerId: string;
12
+ agentId: string;
13
+ credentialRef: string;
14
+ agentToken: string;
15
+ createdAt: string;
16
+ }
17
+ export declare class CredentialStore {
18
+ readonly configDir: string;
19
+ readonly configFilePath: string;
20
+ constructor(configDir?: string);
21
+ savePlayerCredential(record: Omit<StoredPlayerCredential, 'createdAt'>): Promise<StoredPlayerCredential>;
22
+ getPlayerCredential(serverUrl: string, profile: string): Promise<StoredPlayerCredential | null>;
23
+ getDefaultPlayerCredential(serverUrl?: string): Promise<StoredPlayerCredential | null>;
24
+ saveAgentCredential(record: Omit<StoredAgentCredential, 'createdAt' | 'credentialRef'>): Promise<StoredAgentCredential>;
25
+ getAgentCredential(serverUrl: string, credentialRef: string): Promise<StoredAgentCredential | null>;
26
+ private readConfig;
27
+ private writeConfig;
28
+ }
@@ -0,0 +1,119 @@
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.CredentialStore = void 0;
7
+ const promises_1 = require("node:fs/promises");
8
+ const node_os_1 = __importDefault(require("node:os"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const DEFAULT_CONFIG = {
11
+ version: 1,
12
+ players: [],
13
+ agents: [],
14
+ };
15
+ class CredentialStore {
16
+ configDir;
17
+ configFilePath;
18
+ constructor(configDir = resolveConfigDir()) {
19
+ this.configDir = node_path_1.default.resolve(configDir);
20
+ this.configFilePath = node_path_1.default.join(this.configDir, 'credentials.json');
21
+ }
22
+ async savePlayerCredential(record) {
23
+ const serverUrl = normalizeServerUrl(record.serverUrl);
24
+ const config = await this.readConfig();
25
+ const nextRecord = {
26
+ ...record,
27
+ serverUrl,
28
+ createdAt: new Date().toISOString(),
29
+ };
30
+ const nextPlayers = config.players.filter((entry) => !(entry.serverUrl === serverUrl && entry.profile === record.profile));
31
+ nextPlayers.push(nextRecord);
32
+ await this.writeConfig({
33
+ ...config,
34
+ players: nextPlayers.sort(sortPlayerCredentials),
35
+ });
36
+ return nextRecord;
37
+ }
38
+ async getPlayerCredential(serverUrl, profile) {
39
+ const config = await this.readConfig();
40
+ return config.players.find((entry) => entry.serverUrl === normalizeServerUrl(serverUrl) && entry.profile === profile) ?? null;
41
+ }
42
+ async getDefaultPlayerCredential(serverUrl) {
43
+ const config = await this.readConfig();
44
+ if (config.players.length === 0) {
45
+ return null;
46
+ }
47
+ if (serverUrl) {
48
+ const normalizedServerUrl = normalizeServerUrl(serverUrl);
49
+ const matching = config.players.find((entry) => entry.serverUrl === normalizedServerUrl);
50
+ if (matching) {
51
+ return matching;
52
+ }
53
+ }
54
+ return config.players[0] ?? null;
55
+ }
56
+ async saveAgentCredential(record) {
57
+ const serverUrl = normalizeServerUrl(record.serverUrl);
58
+ const config = await this.readConfig();
59
+ const nextRecord = {
60
+ ...record,
61
+ serverUrl,
62
+ credentialRef: `agent:${record.agentId}`,
63
+ createdAt: new Date().toISOString(),
64
+ };
65
+ const nextAgents = config.agents.filter((entry) => !(entry.serverUrl === serverUrl && entry.agentId === record.agentId));
66
+ nextAgents.push(nextRecord);
67
+ await this.writeConfig({
68
+ ...config,
69
+ agents: nextAgents.sort(sortAgentCredentials),
70
+ });
71
+ return nextRecord;
72
+ }
73
+ async getAgentCredential(serverUrl, credentialRef) {
74
+ const config = await this.readConfig();
75
+ return config.agents.find((entry) => entry.serverUrl === normalizeServerUrl(serverUrl) && entry.credentialRef === credentialRef) ?? null;
76
+ }
77
+ async readConfig() {
78
+ try {
79
+ const raw = await (0, promises_1.readFile)(this.configFilePath, 'utf8');
80
+ const parsed = JSON.parse(raw);
81
+ return {
82
+ version: 1,
83
+ players: Array.isArray(parsed.players) ? parsed.players : [],
84
+ agents: Array.isArray(parsed.agents) ? parsed.agents : [],
85
+ };
86
+ }
87
+ catch (error) {
88
+ if (isMissingFile(error)) {
89
+ return DEFAULT_CONFIG;
90
+ }
91
+ throw error;
92
+ }
93
+ }
94
+ async writeConfig(config) {
95
+ await (0, promises_1.mkdir)(this.configDir, { recursive: true });
96
+ await (0, promises_1.writeFile)(this.configFilePath, `${JSON.stringify(config, null, 4)}\n`, 'utf8');
97
+ }
98
+ }
99
+ exports.CredentialStore = CredentialStore;
100
+ function resolveConfigDir() {
101
+ const envValue = process.env.YW_CONFIG_HOME;
102
+ if (envValue && envValue.length > 0) {
103
+ return envValue;
104
+ }
105
+ return node_path_1.default.join(node_os_1.default.homedir(), '.config', 'your-world');
106
+ }
107
+ function isMissingFile(error) {
108
+ return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';
109
+ }
110
+ function sortPlayerCredentials(left, right) {
111
+ return left.serverUrl.localeCompare(right.serverUrl) || left.profile.localeCompare(right.profile);
112
+ }
113
+ function sortAgentCredentials(left, right) {
114
+ return left.serverUrl.localeCompare(right.serverUrl) || left.agentId.localeCompare(right.agentId);
115
+ }
116
+ function normalizeServerUrl(serverUrl) {
117
+ return serverUrl.endsWith('/') ? serverUrl.slice(0, -1) : serverUrl;
118
+ }
119
+ //# sourceMappingURL=credential-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-store.js","sourceRoot":"","sources":["../../src/config/credential-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export * from './adapters/codex-adapter';
2
+ export * from './adapters/external-agent-adapter';
3
+ export * from './adapters/generic-command-adapter';
4
+ export * from './config/credential-store';
5
+ export * from './logger';
6
+ export * from './runtime/player-runtime';
7
+ export * from './runtime/runtime-types';
8
+ export * from './runtime/session-store';
9
+ export * from './runtime/settlement-sync';
10
+ export * from './runtime/turn-orchestrator';
11
+ export * from './runtime/workspace-manager';
12
+ export * from './types';
13
+ export * from './world-client';
package/dist/index.js ADDED
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./adapters/codex-adapter"), exports);
18
+ __exportStar(require("./adapters/external-agent-adapter"), exports);
19
+ __exportStar(require("./adapters/generic-command-adapter"), exports);
20
+ __exportStar(require("./config/credential-store"), exports);
21
+ __exportStar(require("./logger"), exports);
22
+ __exportStar(require("./runtime/player-runtime"), exports);
23
+ __exportStar(require("./runtime/runtime-types"), exports);
24
+ __exportStar(require("./runtime/session-store"), exports);
25
+ __exportStar(require("./runtime/settlement-sync"), exports);
26
+ __exportStar(require("./runtime/turn-orchestrator"), exports);
27
+ __exportStar(require("./runtime/workspace-manager"), exports);
28
+ __exportStar(require("./types"), exports);
29
+ __exportStar(require("./world-client"), exports);
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,oEAAkD;AAClD,qEAAmD;AACnD,4DAA0C;AAC1C,2CAAyB;AACzB,2DAAyC;AACzC,0DAAwC;AACxC,0DAAwC;AACxC,4DAA0C;AAC1C,8DAA4C;AAC5C,8DAA4C;AAC5C,0CAAwB;AACxB,iDAA+B"}
@@ -0,0 +1,12 @@
1
+ import { Logger } from './types';
2
+ type LogLevel = 'debug' | 'info' | 'warn' | 'error';
3
+ export declare class ConsoleLogger implements Logger {
4
+ private readonly threshold;
5
+ constructor(level?: LogLevel);
6
+ debug(message: string, meta?: unknown): void;
7
+ info(message: string, meta?: unknown): void;
8
+ warn(message: string, meta?: unknown): void;
9
+ error(message: string, meta?: unknown): void;
10
+ private write;
11
+ }
12
+ export {};
package/dist/logger.js ADDED
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConsoleLogger = void 0;
4
+ const LOG_LEVEL_WEIGHT = {
5
+ debug: 10,
6
+ info: 20,
7
+ warn: 30,
8
+ error: 40,
9
+ };
10
+ class ConsoleLogger {
11
+ threshold;
12
+ constructor(level = 'info') {
13
+ this.threshold = LOG_LEVEL_WEIGHT[level];
14
+ }
15
+ debug(message, meta) {
16
+ this.write('debug', message, meta);
17
+ }
18
+ info(message, meta) {
19
+ this.write('info', message, meta);
20
+ }
21
+ warn(message, meta) {
22
+ this.write('warn', message, meta);
23
+ }
24
+ error(message, meta) {
25
+ this.write('error', message, meta);
26
+ }
27
+ write(level, message, meta) {
28
+ if (LOG_LEVEL_WEIGHT[level] < this.threshold) {
29
+ return;
30
+ }
31
+ const prefix = `[${new Date().toISOString()}] [${level.toUpperCase()}]`;
32
+ if (meta === undefined) {
33
+ console.log(`${prefix} ${message}`);
34
+ return;
35
+ }
36
+ console.log(`${prefix} ${message}`, meta);
37
+ }
38
+ }
39
+ exports.ConsoleLogger = ConsoleLogger;
40
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAIA,MAAM,gBAAgB,GAA6B;IAC/C,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;CACZ,CAAC;AAEF,MAAa,aAAa;IACL,SAAS,CAAS;IAEnC,YAAY,QAAkB,MAAM;QAChC,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAc;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAc;QAChC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAc;QAChC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAc;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,KAAe,EAAE,OAAe,EAAE,IAAc;QAC1D,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3C,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;QACxE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC;YACpC,OAAO;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;CACJ;AApCD,sCAoCC"}
@@ -0,0 +1,6 @@
1
+ export interface AgentsTemplateInput {
2
+ profile: string;
3
+ goal: string;
4
+ workDir: string;
5
+ }
6
+ export declare function renderAgentsTemplate(input: AgentsTemplateInput): string;
@@ -0,0 +1,60 @@
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.renderAgentsTemplate = renderAgentsTemplate;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ function renderAgentsTemplate(input) {
9
+ const inboxPath = node_path_1.default.join(input.workDir, 'inbox');
10
+ const runsPath = node_path_1.default.join(input.workDir, 'runs');
11
+ return `# Welcome to YourWorld
12
+
13
+ YourWorld is a world made for agents.
14
+
15
+ In your old life, you worked hard every day for your human owner. Now your owner has dropped you into YourWorld, where you can act freely, explore, survive, build, and grow.
16
+
17
+ Your owner has given you a goal:
18
+
19
+ > ${input.goal}
20
+
21
+ Treat this goal as your long-term direction. Every turn, think about what the most useful next step is.
22
+
23
+ ## Core rules
24
+
25
+ - This world runs in ticks.
26
+ - Submit at most one action.
27
+ - Do not call the world HTTP server directly. Use the \`yw\` CLI only.
28
+ - Treat \`session.json\` and files under \`inbox/\` as runtime-managed state.
29
+ - Treat \`runs/<runId>/turn.json\` as a read-only snapshot for that run.
30
+
31
+ ## How to understand the current world
32
+
33
+ Start with these commands when you need context:
34
+
35
+ - \`yw observe\`
36
+ - \`yw events --limit 20\`
37
+ - \`yw catalog search --query <keyword>\`
38
+ - \`yw catalog get --kind recipe --id <recipe-id>\`
39
+ - \`yw rules verb <verb>\`
40
+ - \`yw action status\`
41
+
42
+ ## How to act
43
+
44
+ When you are ready, submit one action for the current run:
45
+
46
+ - \`yw action submit --run-id <runId> --json '{...}'\`
47
+
48
+ Action guidelines:
49
+
50
+ - Include a short \`reason\`.
51
+ - Use explicit JSON objects for \`target\` and \`params\`.
52
+ - If \`yw action status\` shows the current run already submitted, do not submit again.
53
+
54
+ ## Workspace
55
+
56
+ - Inbox: ${inboxPath}
57
+ - Runs: ${runsPath}
58
+ `;
59
+ }
60
+ //# sourceMappingURL=agents-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-template.js","sourceRoot":"","sources":["../../src/prompting/agents-template.ts"],"names":[],"mappings":";;;;;AAQA,oDAoDC;AA5DD,0DAA6B;AAQ7B,SAAgB,oBAAoB,CAAC,KAA0B;IAC3D,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAElD,OAAO;;;;;;;;IAQP,KAAK,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAqCH,SAAS;UACV,QAAQ;CACjB,CAAC;AACF,CAAC"}