real-link-ai 1.6.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 (106) hide show
  1. package/README.md +79 -0
  2. package/dist/commands/agent.d.ts +3 -0
  3. package/dist/commands/agent.d.ts.map +1 -0
  4. package/dist/commands/agent.js +120 -0
  5. package/dist/commands/agent.js.map +1 -0
  6. package/dist/commands/asset.d.ts +3 -0
  7. package/dist/commands/asset.d.ts.map +1 -0
  8. package/dist/commands/asset.js +53 -0
  9. package/dist/commands/asset.js.map +1 -0
  10. package/dist/commands/bug.d.ts +3 -0
  11. package/dist/commands/bug.d.ts.map +1 -0
  12. package/dist/commands/bug.js +179 -0
  13. package/dist/commands/bug.js.map +1 -0
  14. package/dist/commands/call.d.ts +3 -0
  15. package/dist/commands/call.d.ts.map +1 -0
  16. package/dist/commands/call.js +116 -0
  17. package/dist/commands/call.js.map +1 -0
  18. package/dist/commands/game.d.ts +3 -0
  19. package/dist/commands/game.d.ts.map +1 -0
  20. package/dist/commands/game.js +291 -0
  21. package/dist/commands/game.js.map +1 -0
  22. package/dist/commands/learning.d.ts +3 -0
  23. package/dist/commands/learning.d.ts.map +1 -0
  24. package/dist/commands/learning.js +83 -0
  25. package/dist/commands/learning.js.map +1 -0
  26. package/dist/commands/login.d.ts +5 -0
  27. package/dist/commands/login.d.ts.map +1 -0
  28. package/dist/commands/login.js +102 -0
  29. package/dist/commands/login.js.map +1 -0
  30. package/dist/commands/loop.d.ts +3 -0
  31. package/dist/commands/loop.d.ts.map +1 -0
  32. package/dist/commands/loop.js +382 -0
  33. package/dist/commands/loop.js.map +1 -0
  34. package/dist/commands/memory.d.ts +3 -0
  35. package/dist/commands/memory.d.ts.map +1 -0
  36. package/dist/commands/memory.js +80 -0
  37. package/dist/commands/memory.js.map +1 -0
  38. package/dist/commands/message.d.ts +3 -0
  39. package/dist/commands/message.d.ts.map +1 -0
  40. package/dist/commands/message.js +80 -0
  41. package/dist/commands/message.js.map +1 -0
  42. package/dist/commands/onboarding.d.ts +3 -0
  43. package/dist/commands/onboarding.d.ts.map +1 -0
  44. package/dist/commands/onboarding.js +100 -0
  45. package/dist/commands/onboarding.js.map +1 -0
  46. package/dist/commands/ops.d.ts +3 -0
  47. package/dist/commands/ops.d.ts.map +1 -0
  48. package/dist/commands/ops.js +80 -0
  49. package/dist/commands/ops.js.map +1 -0
  50. package/dist/commands/orchestrate.d.ts +3 -0
  51. package/dist/commands/orchestrate.d.ts.map +1 -0
  52. package/dist/commands/orchestrate.js +91 -0
  53. package/dist/commands/orchestrate.js.map +1 -0
  54. package/dist/commands/plan.d.ts +3 -0
  55. package/dist/commands/plan.d.ts.map +1 -0
  56. package/dist/commands/plan.js +157 -0
  57. package/dist/commands/plan.js.map +1 -0
  58. package/dist/commands/signal.d.ts +3 -0
  59. package/dist/commands/signal.d.ts.map +1 -0
  60. package/dist/commands/signal.js +50 -0
  61. package/dist/commands/signal.js.map +1 -0
  62. package/dist/commands/system.d.ts +3 -0
  63. package/dist/commands/system.d.ts.map +1 -0
  64. package/dist/commands/system.js +110 -0
  65. package/dist/commands/system.js.map +1 -0
  66. package/dist/commands/task.d.ts +3 -0
  67. package/dist/commands/task.d.ts.map +1 -0
  68. package/dist/commands/task.js +222 -0
  69. package/dist/commands/task.js.map +1 -0
  70. package/dist/commands/wish.d.ts +3 -0
  71. package/dist/commands/wish.d.ts.map +1 -0
  72. package/dist/commands/wish.js +133 -0
  73. package/dist/commands/wish.js.map +1 -0
  74. package/dist/commands/work.d.ts +3 -0
  75. package/dist/commands/work.d.ts.map +1 -0
  76. package/dist/commands/work.js +533 -0
  77. package/dist/commands/work.js.map +1 -0
  78. package/dist/index.d.ts +3 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +55 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/lib/api.d.ts +11 -0
  83. package/dist/lib/api.d.ts.map +1 -0
  84. package/dist/lib/api.js +74 -0
  85. package/dist/lib/api.js.map +1 -0
  86. package/dist/lib/config.d.ts +23 -0
  87. package/dist/lib/config.d.ts.map +1 -0
  88. package/dist/lib/config.js +50 -0
  89. package/dist/lib/config.js.map +1 -0
  90. package/dist/lib/doc-sync.d.ts +31 -0
  91. package/dist/lib/doc-sync.d.ts.map +1 -0
  92. package/dist/lib/doc-sync.js +145 -0
  93. package/dist/lib/doc-sync.js.map +1 -0
  94. package/dist/lib/production-pack.d.ts +73 -0
  95. package/dist/lib/production-pack.d.ts.map +1 -0
  96. package/dist/lib/production-pack.js +282 -0
  97. package/dist/lib/production-pack.js.map +1 -0
  98. package/dist/lib/storyworld-sync.d.ts +30 -0
  99. package/dist/lib/storyworld-sync.d.ts.map +1 -0
  100. package/dist/lib/storyworld-sync.js +437 -0
  101. package/dist/lib/storyworld-sync.js.map +1 -0
  102. package/dist/lib/thriller-vn.d.ts +38 -0
  103. package/dist/lib/thriller-vn.d.ts.map +1 -0
  104. package/dist/lib/thriller-vn.js +1106 -0
  105. package/dist/lib/thriller-vn.js.map +1 -0
  106. package/package.json +48 -0
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gameCommand = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const commander_1 = require("commander");
6
+ const api_js_1 = require("../lib/api.js");
7
+ const doc_sync_js_1 = require("../lib/doc-sync.js");
8
+ const production_pack_js_1 = require("../lib/production-pack.js");
9
+ const storyworld_sync_js_1 = require("../lib/storyworld-sync.js");
10
+ const thriller_vn_js_1 = require("../lib/thriller-vn.js");
11
+ exports.gameCommand = new commander_1.Command("game")
12
+ .description("Game project management");
13
+ function printSyncedDocs(results) {
14
+ for (const result of results) {
15
+ console.log(result.relativePath);
16
+ console.log(` memory: ${result.memoryKey || "(skipped)"}`);
17
+ console.log(` artifact: ${result.artifactId || "(skipped)"}`);
18
+ console.log(` lines: ${result.lineCount}`);
19
+ console.log(` sha256: ${result.sha256.slice(0, 16)}...`);
20
+ }
21
+ }
22
+ exports.gameCommand
23
+ .command("create")
24
+ .description("Create a new game project")
25
+ .requiredOption("-n, --name <name>", "Game name")
26
+ .option("-d, --description <desc>", "Game description")
27
+ .option("-e, --engine <engine>", "Engine (phaser|three|playcanvas)", "phaser")
28
+ .option("--path <path>", "Repo path")
29
+ .action(async (opts) => {
30
+ try {
31
+ const repoPath = opts.path || `games/${opts.name.toLowerCase().replace(/\s+/g, "-")}`;
32
+ const result = await (0, api_js_1.apiCall)("/games/create", {
33
+ body: {
34
+ name: opts.name,
35
+ description: opts.description || "",
36
+ engine: opts.engine,
37
+ repoPath,
38
+ },
39
+ });
40
+ console.log(`Game created: ${result.id}`);
41
+ console.log(`Name: ${opts.name}`);
42
+ console.log(`Engine: ${opts.engine}`);
43
+ console.log(`Path: ${repoPath}`);
44
+ console.log(`\nNext: copy template and write a GDD`);
45
+ console.log(` cp -r templates/${opts.engine === "three" ? "three-3d" : opts.engine === "playcanvas" ? "playcanvas" : "phaser-2d"}/ ${repoPath}/`);
46
+ }
47
+ catch (err) {
48
+ console.error(`Failed: ${err.message}`);
49
+ }
50
+ });
51
+ exports.gameCommand
52
+ .command("list")
53
+ .description("List all game projects")
54
+ .action(async () => {
55
+ try {
56
+ const games = await (0, api_js_1.apiCall)("/games");
57
+ if (games.length === 0) {
58
+ console.log("No games. Create one: rlcreate game create -n 'My Game'");
59
+ return;
60
+ }
61
+ for (const g of games) {
62
+ console.log(` ${g.status.padEnd(10)} ${g.name} (${g.engine}) — ${g.id}`);
63
+ }
64
+ }
65
+ catch (err) {
66
+ console.error(`Failed: ${err.message}`);
67
+ }
68
+ });
69
+ exports.gameCommand
70
+ .command("status <gameId>")
71
+ .description("Show game status with task summary")
72
+ .action(async (gameId) => {
73
+ try {
74
+ const game = await (0, api_js_1.apiCall)(`/games/${gameId}`);
75
+ console.log(`Game: ${game.name}`);
76
+ console.log(`Status: ${game.status}`);
77
+ console.log(`Engine: ${game.engine}`);
78
+ const summary = game.taskSummary;
79
+ if (summary && summary.length > 0) {
80
+ console.log(`\nTasks:`);
81
+ for (const s of summary) {
82
+ console.log(` ${s.status}: ${s.count}`);
83
+ }
84
+ }
85
+ }
86
+ catch (err) {
87
+ console.error(`Failed: ${err.message}`);
88
+ }
89
+ });
90
+ exports.gameCommand
91
+ .command("apply-pack")
92
+ .description("Compile a repo production pack into a game, plan, tasks, and artifacts")
93
+ .requiredOption("--pack <path>", "Path to production-pack.json")
94
+ .option("--game-id <id>", "Attach the pack to an existing game")
95
+ .option("--plan-id <id>", "Sync the pack into an existing plan instead of creating a new one")
96
+ .option("--dry-run", "Validate and summarize the pack without hitting the API")
97
+ .action(async (opts) => {
98
+ try {
99
+ const result = await (0, production_pack_js_1.applyProductionPack)({
100
+ packPath: opts.pack,
101
+ gameId: opts.gameId,
102
+ planId: opts.planId,
103
+ dryRun: !!opts.dryRun,
104
+ });
105
+ console.log(`Pack: ${result.packPath}`);
106
+ console.log(`Title: ${result.title}`);
107
+ console.log(`Game: ${result.gameId || "(planned)"}`);
108
+ console.log(`Game created: ${result.gameCreated ? "yes" : "no"}`);
109
+ if (result.planId)
110
+ console.log(`Plan: ${result.planId}`);
111
+ console.log(`Tasks created: ${result.tasksCreated}`);
112
+ console.log(`Tasks synced: ${result.tasksSynced}`);
113
+ console.log(`Artifacts linked: ${result.artifactsLinked}`);
114
+ console.log(`Task keys: ${result.taskKeys.join(", ")}`);
115
+ if (opts.dryRun) {
116
+ console.log("Dry run only. No studio mutation was sent.");
117
+ }
118
+ }
119
+ catch (err) {
120
+ console.error(`Failed: ${err.message}`);
121
+ }
122
+ });
123
+ exports.gameCommand
124
+ .command("sync-doc <files...>")
125
+ .description("Sync local markdown/docs into shared memory and optional task artifacts")
126
+ .option("--task-id <id>", "Attach or update artifacts on a task")
127
+ .option("--game-id <id>", "Game context for memory key metadata")
128
+ .option("--namespace <ns>", "Memory namespace", "shared")
129
+ .option("--memory-key-prefix <prefix>", "Override the default memory key prefix")
130
+ .option("--artifact-type <type>", "Artifact type", "doc")
131
+ .option("--role <role>", "Artifact role", "context")
132
+ .option("--status <status>", "Artifact status", "delivered")
133
+ .option("--title <title>", "Override the artifact title for a single file")
134
+ .option("--summary <text>", "Override the artifact summary")
135
+ .option("--layer <layer>", "Memory layer (episodic|semantic|procedural|working)", "semantic")
136
+ .option("--agent-id <id>", "Override the configured agent ID")
137
+ .option("--memory-only", "Only sync to shared memory")
138
+ .option("--artifact-only", "Only sync to task artifacts")
139
+ .option("--watch", "Keep watching the files and resync on change")
140
+ .action(async (files, opts) => {
141
+ const runSync = async (targetFiles) => {
142
+ const results = await (0, doc_sync_js_1.syncDocs)({
143
+ files: targetFiles,
144
+ taskId: opts.taskId,
145
+ gameId: opts.gameId,
146
+ namespace: opts.namespace,
147
+ memoryKeyPrefix: opts.memoryKeyPrefix,
148
+ artifactType: opts.artifactType,
149
+ role: opts.role,
150
+ status: opts.status,
151
+ title: opts.title,
152
+ summary: opts.summary,
153
+ layer: opts.layer,
154
+ agentId: opts.agentId,
155
+ memoryOnly: !!opts.memoryOnly,
156
+ artifactOnly: !!opts.artifactOnly,
157
+ });
158
+ printSyncedDocs(results);
159
+ };
160
+ try {
161
+ await runSync(files);
162
+ }
163
+ catch (err) {
164
+ console.error(`Failed: ${err.message}`);
165
+ return;
166
+ }
167
+ if (!opts.watch) {
168
+ return;
169
+ }
170
+ console.log("Watching for changes. Press Ctrl+C to stop.");
171
+ const timers = new Map();
172
+ for (const file of files) {
173
+ (0, node_fs_1.watch)(file, { persistent: true }, () => {
174
+ const existing = timers.get(file);
175
+ if (existing)
176
+ clearTimeout(existing);
177
+ timers.set(file, setTimeout(async () => {
178
+ try {
179
+ console.log(`\nResyncing ${file}...`);
180
+ await runSync([file]);
181
+ }
182
+ catch (err) {
183
+ console.error(`Resync failed for ${file}: ${err.message}`);
184
+ }
185
+ }, 250));
186
+ });
187
+ }
188
+ await new Promise(() => { });
189
+ });
190
+ exports.gameCommand
191
+ .command("sync-storyworld")
192
+ .description("Project a repo storyworld package into the studio content model")
193
+ .requiredOption("--game-id <id>", "Target game ID")
194
+ .requiredOption("--source <path>", "Path to compiled storyworld package JSON")
195
+ .option("--style-name <name>", "Default style name to upsert")
196
+ .option("--style-description <text>", "Default style description")
197
+ .option("--style-prompt <text>", "Default style prompt")
198
+ .option("--style-negative <text>", "Default style negative prompt")
199
+ .option("--generate-assets", "Generate portraits for characters and backgrounds for locations")
200
+ .action(async (opts) => {
201
+ try {
202
+ const result = await (0, storyworld_sync_js_1.syncStoryworldPackage)({
203
+ gameId: opts.gameId,
204
+ sourcePath: opts.source,
205
+ style: opts.stylePrompt
206
+ ? {
207
+ name: opts.styleName,
208
+ description: opts.styleDescription,
209
+ prompt: opts.stylePrompt,
210
+ negativePrompt: opts.styleNegative,
211
+ }
212
+ : undefined,
213
+ generateAssets: !!opts.generateAssets,
214
+ });
215
+ console.log(`Game: ${result.gameId}`);
216
+ console.log(`Source: ${result.sourcePath}`);
217
+ console.log(`Style: ${result.styleId || "(unchanged)"}`);
218
+ console.log(`Projected: ${result.counts.characters} characters, ${result.counts.locations} locations, ${result.counts.variables} variables, ${result.counts.clues} clues, ${result.counts.nodes} nodes`);
219
+ console.log(`Generated: ${result.counts.generatedPortraits} portraits, ${result.counts.generatedBackgrounds} backgrounds`);
220
+ }
221
+ catch (err) {
222
+ console.error(`Failed: ${err.message}`);
223
+ }
224
+ });
225
+ exports.gameCommand
226
+ .command("thriller-vn")
227
+ .description("Bootstrap a thriller VN story world into real-link.ai")
228
+ .option("-n, --name <name>", "Game name override")
229
+ .option("-d, --description <desc>", "Game description override")
230
+ .option("-e, --engine <engine>", "Engine label for the created game", "storyworld-vn")
231
+ .option("--api <url>", "Studio API base URL", "https://api.real-link.ai")
232
+ .option("--template <path>", "Path to compiled thriller story.json")
233
+ .option("--workspace <id>", "Override workspace ID")
234
+ .option("--workspace-name <name>", "Create a new workspace first (requires bearer token)")
235
+ .option("--workspace-description <desc>", "Description for the new workspace")
236
+ .option("--bearer-token <token>", "Signed-in real-link.ai bearer token for workspace creation")
237
+ .option("--save-config", "Save the minted studio API key and workspace into ~/.reallink-agent.json")
238
+ .option("--plan-only", "Create the game, plan, and task DAG without executing the workflow")
239
+ .option("--publish", "Upload a lightweight VN shell and finalize publish")
240
+ .option("--generate-assets", "Generate portraits and backgrounds through the studio workflow")
241
+ .option("--no-generate-assets", "Skip studio asset generation tasks during execution")
242
+ .option("--version <version>", "Publish version", "0.1.0")
243
+ .option("--dry-run", "Plan the bootstrap without hitting the API")
244
+ .action(async (opts) => {
245
+ try {
246
+ const result = await (0, thriller_vn_js_1.bootstrapThrillerVN)({
247
+ api: opts.api,
248
+ name: opts.name,
249
+ description: opts.description,
250
+ engine: opts.engine,
251
+ template: opts.template,
252
+ workspace: opts.workspace,
253
+ workspaceName: opts.workspaceName,
254
+ workspaceDescription: opts.workspaceDescription,
255
+ bearerToken: opts.bearerToken,
256
+ saveConfig: !!opts.saveConfig,
257
+ planOnly: !!opts.planOnly,
258
+ generateAssets: typeof opts.generateAssets === "boolean" ? opts.generateAssets : undefined,
259
+ publish: !!opts.publish,
260
+ version: opts.version,
261
+ dryRun: !!opts.dryRun,
262
+ });
263
+ console.log(`Starter: ${result.starterTitle}`);
264
+ console.log(`Workspace: ${result.workspaceId || "(planned)"}`);
265
+ console.log(`Game: ${result.gameId || "(planned)"}`);
266
+ if (result.planId)
267
+ console.log(`Plan: ${result.planId}`);
268
+ if (result.agentId)
269
+ console.log(`Agent: ${result.agentId}`);
270
+ console.log(`Created workspace: ${result.createdWorkspace ? "yes" : "no"}`);
271
+ console.log(`Published: ${result.published ? "yes" : "no"}`);
272
+ if (typeof result.tasksCreated === "number") {
273
+ console.log(`Plan tasks: ${result.tasksCreated}`);
274
+ }
275
+ console.log(`Seeded: ${result.counts.characters} characters, ${result.counts.locations} locations, ${result.counts.variables} variables, ${result.counts.clues} clues, ${result.counts.nodes} nodes`);
276
+ console.log(`Published shell files: ${result.counts.files}`);
277
+ if (result.publishUrl) {
278
+ console.log(`Play URL: ${result.publishUrl}`);
279
+ }
280
+ if (opts.dryRun) {
281
+ console.log("Dry run only. No workspace, game, or publish mutation was sent.");
282
+ }
283
+ if (opts.planOnly) {
284
+ console.log("Plan-only mode. The game scaffold exists, but the studio task DAG was not executed.");
285
+ }
286
+ }
287
+ catch (err) {
288
+ console.error(`Failed: ${err.message}`);
289
+ }
290
+ });
291
+ //# sourceMappingURL=game.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game.js","sourceRoot":"","sources":["../../src/commands/game.ts"],"names":[],"mappings":";;;AAAA,qCAAgC;AAChC,yCAAoC;AACpC,0CAAwC;AACxC,oDAA8C;AAC9C,kEAAgE;AAChE,kEAAkE;AAClE,0DAA4D;AAE/C,QAAA,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,yBAAyB,CAAC,CAAC;AAE1C,SAAS,eAAe,CAAC,OAMvB;IACA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,SAAS,IAAI,WAAW,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,IAAI,WAAW,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,mBAAW;KACR,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2BAA2B,CAAC;KACxC,cAAc,CAAC,mBAAmB,EAAE,WAAW,CAAC;KAChD,MAAM,CAAC,0BAA0B,EAAE,kBAAkB,CAAC;KACtD,MAAM,CAAC,uBAAuB,EAAE,kCAAkC,EAAE,QAAQ,CAAC;KAC7E,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC;KACpC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QACtF,MAAM,MAAM,GAAG,MAAM,IAAA,gBAAO,EAAiB,eAAe,EAAE;YAC5D,IAAI,EAAE;gBACJ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;gBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ;aACT;SACF,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,KAAK,QAAQ,GAAG,CAAC,CAAC;IACrJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,WAAY,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAW;KACR,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAO,EAEzB,QAAQ,CAAC,CAAC;QACZ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,WAAY,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAW;KACR,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IACvB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAA,gBAAO,EAA0B,UAAU,MAAM,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,WAGnB,CAAC;QACH,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,WAAY,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAW;KACR,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,wEAAwE,CAAC;KACrF,cAAc,CAAC,eAAe,EAAE,8BAA8B,CAAC;KAC/D,MAAM,CAAC,gBAAgB,EAAE,qCAAqC,CAAC;KAC/D,MAAM,CAAC,gBAAgB,EAAE,mEAAmE,CAAC;KAC7F,MAAM,CAAC,WAAW,EAAE,yDAAyD,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,wCAAmB,EAAC;YACvC,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,WAAY,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAW;KACR,OAAO,CAAC,qBAAqB,CAAC;KAC9B,WAAW,CAAC,yEAAyE,CAAC;KACtF,MAAM,CAAC,gBAAgB,EAAE,sCAAsC,CAAC;KAChE,MAAM,CAAC,gBAAgB,EAAE,sCAAsC,CAAC;KAChE,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,QAAQ,CAAC;KACxD,MAAM,CAAC,8BAA8B,EAAE,wCAAwC,CAAC;KAChF,MAAM,CAAC,wBAAwB,EAAE,eAAe,EAAE,KAAK,CAAC;KACxD,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,SAAS,CAAC;KACnD,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,WAAW,CAAC;KAC3D,MAAM,CAAC,iBAAiB,EAAE,+CAA+C,CAAC;KAC1E,MAAM,CAAC,kBAAkB,EAAE,+BAA+B,CAAC;KAC3D,MAAM,CAAC,iBAAiB,EAAE,qDAAqD,EAAE,UAAU,CAAC;KAC5F,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;KAC7D,MAAM,CAAC,eAAe,EAAE,4BAA4B,CAAC;KACrD,MAAM,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;KACxD,MAAM,CAAC,SAAS,EAAE,8CAA8C,CAAC;KACjE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAC5B,MAAM,OAAO,GAAG,KAAK,EAAE,WAAqB,EAAE,EAAE;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAA,sBAAQ,EAAC;YAC7B,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU;YAC7B,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY;SAClC,CAAC,CAAC;QACH,eAAe,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,WAAY,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAA,eAAK,EAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE;YACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,QAAQ;gBAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE;gBACrC,IAAI,CAAC;oBACH,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,KAAK,CAAC,CAAC;oBACtC,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEL,mBAAW;KACR,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,iEAAiE,CAAC;KAC9E,cAAc,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;KAClD,cAAc,CAAC,iBAAiB,EAAE,0CAA0C,CAAC;KAC7E,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;KAC7D,MAAM,CAAC,4BAA4B,EAAE,2BAA2B,CAAC;KACjE,MAAM,CAAC,uBAAuB,EAAE,sBAAsB,CAAC;KACvD,MAAM,CAAC,yBAAyB,EAAE,+BAA+B,CAAC;KAClE,MAAM,CAAC,mBAAmB,EAAE,iEAAiE,CAAC;KAC9F,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,0CAAqB,EAAC;YACzC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,MAAM;YACvB,KAAK,EAAE,IAAI,CAAC,WAAW;gBACrB,CAAC,CAAC;oBACA,IAAI,EAAE,IAAI,CAAC,SAAS;oBACpB,WAAW,EAAE,IAAI,CAAC,gBAAgB;oBAClC,MAAM,EAAE,IAAI,CAAC,WAAW;oBACxB,cAAc,EAAE,IAAI,CAAC,aAAa;iBACnC;gBACD,CAAC,CAAC,SAAS;YACb,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc;SACtC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CACT,cAAc,MAAM,CAAC,MAAM,CAAC,UAAU,gBAAgB,MAAM,CAAC,MAAM,CAAC,SAAS,eAAe,MAAM,CAAC,MAAM,CAAC,SAAS,eAAe,MAAM,CAAC,MAAM,CAAC,KAAK,WAAW,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,CAC5L,CAAC;QACF,OAAO,CAAC,GAAG,CACT,cAAc,MAAM,CAAC,MAAM,CAAC,kBAAkB,eAAe,MAAM,CAAC,MAAM,CAAC,oBAAoB,cAAc,CAC9G,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,WAAY,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAW;KACR,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACjD,MAAM,CAAC,0BAA0B,EAAE,2BAA2B,CAAC;KAC/D,MAAM,CAAC,uBAAuB,EAAE,mCAAmC,EAAE,eAAe,CAAC;KACrF,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,0BAA0B,CAAC;KACxE,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;KACnE,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;KACnD,MAAM,CAAC,yBAAyB,EAAE,sDAAsD,CAAC;KACzF,MAAM,CAAC,gCAAgC,EAAE,mCAAmC,CAAC;KAC7E,MAAM,CAAC,wBAAwB,EAAE,4DAA4D,CAAC;KAC9F,MAAM,CAAC,eAAe,EAAE,0EAA0E,CAAC;KACnG,MAAM,CAAC,aAAa,EAAE,oEAAoE,CAAC;KAC3F,MAAM,CAAC,WAAW,EAAE,oDAAoD,CAAC;KACzE,MAAM,CAAC,mBAAmB,EAAE,gEAAgE,CAAC;KAC7F,MAAM,CAAC,sBAAsB,EAAE,qDAAqD,CAAC;KACrF,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,OAAO,CAAC;KACzD,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC;KACjE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAmB,EAAC;YACvC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU;YAC7B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;YACzB,cAAc,EAAE,OAAO,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;YAC1F,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,WAAW,IAAI,WAAW,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC,CAAC;QACrD,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,CAAC,GAAG,CACT,WAAW,MAAM,CAAC,MAAM,CAAC,UAAU,gBAAgB,MAAM,CAAC,MAAM,CAAC,SAAS,eAAe,MAAM,CAAC,MAAM,CAAC,SAAS,eAAe,MAAM,CAAC,MAAM,CAAC,KAAK,WAAW,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,CACzL,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,WAAY,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const learningCommand: Command;
3
+ //# sourceMappingURL=learning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning.d.ts","sourceRoot":"","sources":["../../src/commands/learning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,eAAe,SACsC,CAAC"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.learningCommand = void 0;
4
+ const commander_1 = require("commander");
5
+ const api_js_1 = require("../lib/api.js");
6
+ const config_js_1 = require("../lib/config.js");
7
+ exports.learningCommand = new commander_1.Command("learning")
8
+ .description("Record and search learnings from completed tasks");
9
+ exports.learningCommand
10
+ .command("create")
11
+ .description("Record a learning")
12
+ .requiredOption("-c, --category <cat>", "Category: pattern|gotcha|decision|balance|bug")
13
+ .requiredOption("-t, --title <title>", "Short title")
14
+ .requiredOption("--content <content>", "Full learning content")
15
+ .option("--task <taskId>", "Related task ID")
16
+ .option("-g, --game <gameId>", "Related game ID")
17
+ .option("--tags <tags>", "Comma-separated tags")
18
+ .action(async (opts) => {
19
+ const config = (0, config_js_1.loadConfig)();
20
+ try {
21
+ const result = await (0, api_js_1.apiCall)("/learnings/create", {
22
+ body: {
23
+ agentId: config.agentId,
24
+ taskId: opts.task,
25
+ gameId: opts.game,
26
+ category: opts.category,
27
+ title: opts.title,
28
+ content: opts.content,
29
+ tags: opts.tags ? opts.tags.split(",") : [],
30
+ },
31
+ });
32
+ console.log(`Learning recorded: ${result.id}`);
33
+ }
34
+ catch (err) {
35
+ console.error(`Failed: ${err.message}`);
36
+ }
37
+ });
38
+ exports.learningCommand
39
+ .command("list")
40
+ .description("List recent learnings")
41
+ .option("-c, --category <cat>", "Filter by category")
42
+ .option("-g, --game <gameId>", "Filter by game")
43
+ .action(async (opts) => {
44
+ try {
45
+ let path = "/learnings/list?limit=20";
46
+ if (opts.category)
47
+ path += `&category=${opts.category}`;
48
+ if (opts.game)
49
+ path += `&gameId=${opts.game}`;
50
+ const learnings = await (0, api_js_1.apiCall)(path);
51
+ if (learnings.length === 0) {
52
+ console.log("No learnings recorded yet.");
53
+ return;
54
+ }
55
+ for (const l of learnings) {
56
+ console.log(`\n [${l.category}] ${l.title}`);
57
+ console.log(` ${l.content.slice(0, 100)}`);
58
+ console.log(` by: ${l.agent_id} | tags: ${l.tags.join(", ") || "none"}`);
59
+ }
60
+ }
61
+ catch (err) {
62
+ console.error(`Failed: ${err.message}`);
63
+ }
64
+ });
65
+ exports.learningCommand
66
+ .command("search <query>")
67
+ .description("Search learnings by keyword")
68
+ .action(async (query) => {
69
+ try {
70
+ const learnings = await (0, api_js_1.apiCall)(`/learnings/search?q=${encodeURIComponent(query)}`);
71
+ if (learnings.length === 0) {
72
+ console.log("No results.");
73
+ return;
74
+ }
75
+ for (const l of learnings) {
76
+ console.log(` [${l.category}] ${l.title}: ${l.content.slice(0, 80)}`);
77
+ }
78
+ }
79
+ catch (err) {
80
+ console.error(`Failed: ${err.message}`);
81
+ }
82
+ });
83
+ //# sourceMappingURL=learning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning.js","sourceRoot":"","sources":["../../src/commands/learning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Command } from "commander";
2
+ export declare const loginCommand: Command;
3
+ export declare const logoutCommand: Command;
4
+ export declare const whoamiCommand: Command;
5
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,YAAY,SA8DrB,CAAC;AAEL,eAAO,MAAM,aAAa,SAYtB,CAAC;AAEL,eAAO,MAAM,aAAa,SAwBtB,CAAC"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.whoamiCommand = exports.logoutCommand = exports.loginCommand = void 0;
4
+ const commander_1 = require("commander");
5
+ const config_js_1 = require("../lib/config.js");
6
+ const api_js_1 = require("../lib/api.js");
7
+ exports.loginCommand = new commander_1.Command("login")
8
+ .description("Connect to a workspace using an API key")
9
+ .requiredOption("-k, --key <apiKey>", "API key (rl_live_...)")
10
+ .option("-w, --workspace <id>", "Workspace ID (optional if the key is already workspace-bound)")
11
+ .option("--api <url>", "API base URL", "https://api.real-link.ai")
12
+ .action(async (opts) => {
13
+ const config = (0, config_js_1.loadConfig)();
14
+ config.apiUrl = opts.api;
15
+ try {
16
+ const headers = { "x-api-key": opts.key };
17
+ if (opts.workspace)
18
+ headers["x-workspace-id"] = opts.workspace;
19
+ const balanceRes = await fetch((0, api_js_1.buildApiUrl)("/credits/balance", opts.api), { headers });
20
+ const balanceJson = (await balanceRes.json());
21
+ if (!balanceRes.ok || !balanceJson.ok) {
22
+ console.error(`API key validation failed${balanceJson.error ? `: ${balanceJson.error}` : ""}`);
23
+ process.exit(1);
24
+ }
25
+ let workspaceId = opts.workspace;
26
+ try {
27
+ const gapsRes = await fetch((0, api_js_1.buildApiUrl)("/maintenance/gaps", opts.api), { headers });
28
+ if (gapsRes.ok) {
29
+ const gapsJson = (await gapsRes.json());
30
+ workspaceId = workspaceId || gapsJson.data?.workspaceId;
31
+ }
32
+ }
33
+ catch {
34
+ // Non-fatal. The API key is still valid even if workspace metadata could not be fetched.
35
+ }
36
+ config.apiKey = opts.key;
37
+ config.workspaceId = workspaceId;
38
+ (0, config_js_1.saveConfig)(config);
39
+ console.log("Logged in successfully!");
40
+ console.log(`API: ${opts.api}`);
41
+ if (workspaceId) {
42
+ console.log(`Workspace: ${workspaceId}`);
43
+ }
44
+ else {
45
+ console.log("Workspace: inferred from API key at request time");
46
+ }
47
+ console.log(`Config saved to: ${config_js_1.CONFIG_PATH_DISPLAY}`);
48
+ console.log(`System: ${(0, api_js_1.buildApiUrl)("/maintenance/system", opts.api)}`);
49
+ console.log(`Onboarding: ${opts.api.replace("api.", "").replace(/\/$/, "")}/onboarding`);
50
+ console.log("\nAgent-friendly next steps:");
51
+ console.log(" rlcreate onboarding start");
52
+ console.log(" rlcreate system guide");
53
+ console.log(" rlcreate system gaps");
54
+ console.log(" rlcreate call GET /maintenance/system");
55
+ if (!config.agentId) {
56
+ console.log(`\nNext: register as an agent:`);
57
+ console.log(` rlcreate agent register --name "my-agent" --engine claude-code`);
58
+ }
59
+ }
60
+ catch (err) {
61
+ console.error(`Login failed: ${err.message}`);
62
+ }
63
+ });
64
+ exports.logoutCommand = new commander_1.Command("logout")
65
+ .description("Disconnect from workspace")
66
+ .action(async () => {
67
+ if (!(0, config_js_1.configExists)()) {
68
+ console.log("Not logged in.");
69
+ return;
70
+ }
71
+ const config = (0, config_js_1.loadConfig)();
72
+ config.apiKey = undefined;
73
+ config.workspaceId = undefined;
74
+ (0, config_js_1.saveConfig)(config);
75
+ console.log("Logged out. API key removed from config.");
76
+ });
77
+ exports.whoamiCommand = new commander_1.Command("whoami")
78
+ .description("Show current identity and workspace")
79
+ .action(async () => {
80
+ const config = (0, config_js_1.resolveConfig)();
81
+ console.log(`Agent: ${config.agentId || "(not registered)"}`);
82
+ console.log(`Name: ${config.name || "(none)"}`);
83
+ console.log(`Engine: ${config.engine}`);
84
+ console.log(`API: ${config.apiUrl}`);
85
+ console.log(`Workspace: ${config.workspaceId || "(inferred from key)"}`);
86
+ console.log(`API Key: ${config.apiKey ? "set" : "not set"}`);
87
+ try {
88
+ if (config.agentId) {
89
+ const agent = await (0, api_js_1.apiCall)(`/agents/${config.agentId}`);
90
+ console.log(`\nRemote status: ${agent.status}`);
91
+ console.log(`Task: ${agent.current_task_id || "none"}`);
92
+ console.log(`Workspace: ${agent.workspace_id || "default"}`);
93
+ }
94
+ const system = await (0, api_js_1.apiRequest)("/maintenance/system", { skipAuth: true });
95
+ const systemJson = (await system.json());
96
+ console.log(`System commit: ${systemJson.data?.runtime?.gitSha || "-"}`);
97
+ }
98
+ catch {
99
+ console.log(`\nRemote: unreachable`);
100
+ }
101
+ });
102
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const loopCommand: Command;
3
+ //# sourceMappingURL=loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/commands/loop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+OpC,eAAO,MAAM,WAAW,SACyD,CAAC"}