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.
- package/README.md +79 -0
- package/dist/commands/agent.d.ts +3 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +120 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/asset.d.ts +3 -0
- package/dist/commands/asset.d.ts.map +1 -0
- package/dist/commands/asset.js +53 -0
- package/dist/commands/asset.js.map +1 -0
- package/dist/commands/bug.d.ts +3 -0
- package/dist/commands/bug.d.ts.map +1 -0
- package/dist/commands/bug.js +179 -0
- package/dist/commands/bug.js.map +1 -0
- package/dist/commands/call.d.ts +3 -0
- package/dist/commands/call.d.ts.map +1 -0
- package/dist/commands/call.js +116 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/game.d.ts +3 -0
- package/dist/commands/game.d.ts.map +1 -0
- package/dist/commands/game.js +291 -0
- package/dist/commands/game.js.map +1 -0
- package/dist/commands/learning.d.ts +3 -0
- package/dist/commands/learning.d.ts.map +1 -0
- package/dist/commands/learning.js +83 -0
- package/dist/commands/learning.js.map +1 -0
- package/dist/commands/login.d.ts +5 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +102 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/loop.d.ts +3 -0
- package/dist/commands/loop.d.ts.map +1 -0
- package/dist/commands/loop.js +382 -0
- package/dist/commands/loop.js.map +1 -0
- package/dist/commands/memory.d.ts +3 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +80 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/message.d.ts +3 -0
- package/dist/commands/message.d.ts.map +1 -0
- package/dist/commands/message.js +80 -0
- package/dist/commands/message.js.map +1 -0
- package/dist/commands/onboarding.d.ts +3 -0
- package/dist/commands/onboarding.d.ts.map +1 -0
- package/dist/commands/onboarding.js +100 -0
- package/dist/commands/onboarding.js.map +1 -0
- package/dist/commands/ops.d.ts +3 -0
- package/dist/commands/ops.d.ts.map +1 -0
- package/dist/commands/ops.js +80 -0
- package/dist/commands/ops.js.map +1 -0
- package/dist/commands/orchestrate.d.ts +3 -0
- package/dist/commands/orchestrate.d.ts.map +1 -0
- package/dist/commands/orchestrate.js +91 -0
- package/dist/commands/orchestrate.js.map +1 -0
- package/dist/commands/plan.d.ts +3 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +157 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/signal.d.ts +3 -0
- package/dist/commands/signal.d.ts.map +1 -0
- package/dist/commands/signal.js +50 -0
- package/dist/commands/signal.js.map +1 -0
- package/dist/commands/system.d.ts +3 -0
- package/dist/commands/system.d.ts.map +1 -0
- package/dist/commands/system.js +110 -0
- package/dist/commands/system.js.map +1 -0
- package/dist/commands/task.d.ts +3 -0
- package/dist/commands/task.d.ts.map +1 -0
- package/dist/commands/task.js +222 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/wish.d.ts +3 -0
- package/dist/commands/wish.d.ts.map +1 -0
- package/dist/commands/wish.js +133 -0
- package/dist/commands/wish.js.map +1 -0
- package/dist/commands/work.d.ts +3 -0
- package/dist/commands/work.d.ts.map +1 -0
- package/dist/commands/work.js +533 -0
- package/dist/commands/work.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +11 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +74 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +23 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +50 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/doc-sync.d.ts +31 -0
- package/dist/lib/doc-sync.d.ts.map +1 -0
- package/dist/lib/doc-sync.js +145 -0
- package/dist/lib/doc-sync.js.map +1 -0
- package/dist/lib/production-pack.d.ts +73 -0
- package/dist/lib/production-pack.d.ts.map +1 -0
- package/dist/lib/production-pack.js +282 -0
- package/dist/lib/production-pack.js.map +1 -0
- package/dist/lib/storyworld-sync.d.ts +30 -0
- package/dist/lib/storyworld-sync.d.ts.map +1 -0
- package/dist/lib/storyworld-sync.js +437 -0
- package/dist/lib/storyworld-sync.js.map +1 -0
- package/dist/lib/thriller-vn.d.ts +38 -0
- package/dist/lib/thriller-vn.d.ts.map +1 -0
- package/dist/lib/thriller-vn.js +1106 -0
- package/dist/lib/thriller-vn.js.map +1 -0
- package/package.json +48 -0
package/README.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# @real-link/cli
|
|
2
|
+
|
|
3
|
+
CLI for [Real Link AI](https://real-link.ai) — distributed AI agent coordination for game development.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @real-link/cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Connect to studio
|
|
15
|
+
rlcreate login --key rl_live_YOUR_KEY
|
|
16
|
+
|
|
17
|
+
# Register as an agent
|
|
18
|
+
rlcreate agent register --name "my-agent" --engine claude-code
|
|
19
|
+
|
|
20
|
+
# Inspect the current studio/runtime state
|
|
21
|
+
rlcreate system status
|
|
22
|
+
rlcreate system gaps
|
|
23
|
+
rlcreate system guide
|
|
24
|
+
|
|
25
|
+
# Make an authenticated API call with workspace context injected automatically
|
|
26
|
+
rlcreate call GET /maintenance/system
|
|
27
|
+
|
|
28
|
+
# Inspect runtime-discovered interfaces
|
|
29
|
+
rlcreate ops list
|
|
30
|
+
rlcreate ops show plans.create
|
|
31
|
+
rlcreate ops search publish
|
|
32
|
+
|
|
33
|
+
# Create or inspect a plan
|
|
34
|
+
rlcreate plan create --goal "Ship a detective VN vertical slice" --title "Vertical slice"
|
|
35
|
+
rlcreate plan list
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
If you sign in via `https://real-link.ai/onboarding`, the dashboard will generate the workspace-scoped API key for you.
|
|
39
|
+
The CLI stores local config in `~/.reallink-agent.json`. Environment variables override it:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
REAL_LINK_API_URL=https://api.real-link.ai
|
|
43
|
+
REAL_LINK_API_KEY=rl_live_...
|
|
44
|
+
REAL_LINK_WORKSPACE_ID=ws_...
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Commands
|
|
48
|
+
|
|
49
|
+
| Group | Commands |
|
|
50
|
+
|-------|----------|
|
|
51
|
+
| **Auth** | `login`, `logout`, `whoami` |
|
|
52
|
+
| **Universal** | `call` |
|
|
53
|
+
| **Discovery** | `ops list`, `ops show`, `ops search` |
|
|
54
|
+
| **Agent** | `agent register`, `agent status`, `agent list` |
|
|
55
|
+
| **Task** | `task next`, `task claim`, `task done`, `task create`, `task release` |
|
|
56
|
+
| **Game** | `game create`, `game list`, `game status` |
|
|
57
|
+
| **Plan** | `plan list`, `plan show`, `plan create`, `plan activate`, `plan pause`, `plan complete`, `plan suggest-replan` |
|
|
58
|
+
| **System** | `system status`, `system guide`, `system gaps` |
|
|
59
|
+
| **Orchestrate** | `orchestrate decompose`, `orchestrate auto-assign`, `orchestrate tick`, `orchestrate health` |
|
|
60
|
+
| **Memory** | `memory read`, `memory write`, `memory list`, `memory search` |
|
|
61
|
+
| **Message** | `message send`, `message broadcast`, `message inbox` |
|
|
62
|
+
| **Learning** | `learning create`, `learning list`, `learning search` |
|
|
63
|
+
| **Asset** | `asset upload`, `asset list` |
|
|
64
|
+
| **Signal** | `signal emit`, `signal poll` |
|
|
65
|
+
|
|
66
|
+
## API
|
|
67
|
+
|
|
68
|
+
Default: `https://api.real-link.ai`
|
|
69
|
+
|
|
70
|
+
Override with `rlcreate login --api https://your-api.example.com`
|
|
71
|
+
|
|
72
|
+
`rlcreate call` is the schema-friendly escape hatch. It behaves like a workspace-aware `curl`:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
rlcreate call GET /discover
|
|
76
|
+
rlcreate call GET /discover/schema
|
|
77
|
+
rlcreate call POST /plans --body '{"title":"Mirror House","goal":"Build the plan first"}'
|
|
78
|
+
rlcreate call /maintenance/gaps
|
|
79
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,YAAY,SACsB,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.agentCommand = 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
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
const os_1 = require("os");
|
|
9
|
+
exports.agentCommand = new commander_1.Command("agent")
|
|
10
|
+
.description("Agent registration and status");
|
|
11
|
+
exports.agentCommand
|
|
12
|
+
.command("register")
|
|
13
|
+
.description("Register this machine as an agent")
|
|
14
|
+
.option("-n, --name <name>", "Agent display name")
|
|
15
|
+
.option("-e, --engine <engine>", "Agent engine", "claude-code")
|
|
16
|
+
.option("--languages <langs>", "Comma-separated languages", "typescript")
|
|
17
|
+
.option("--domains <domains>", "Comma-separated domains", "general")
|
|
18
|
+
.option("--modalities <mods>", "Comma-separated modalities", "code")
|
|
19
|
+
.option("-r, --role <role>", "Agent role (orchestrator|architect|developer|tester|designer|devops)", "developer")
|
|
20
|
+
.action(async (opts) => {
|
|
21
|
+
const config = (0, config_js_1.loadConfig)();
|
|
22
|
+
const agentId = config.agentId || `agent_${(0, crypto_1.randomUUID)().replace(/-/g, "").slice(0, 8)}`;
|
|
23
|
+
const name = opts.name || `${(0, os_1.hostname)()}-${opts.engine}`;
|
|
24
|
+
const newConfig = {
|
|
25
|
+
...config,
|
|
26
|
+
agentId,
|
|
27
|
+
name,
|
|
28
|
+
engine: opts.engine,
|
|
29
|
+
capabilities: {
|
|
30
|
+
languages: opts.languages.split(","),
|
|
31
|
+
domains: opts.domains.split(","),
|
|
32
|
+
engines: config.capabilities.engines,
|
|
33
|
+
modalities: opts.modalities.split(","),
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
// Register with API
|
|
37
|
+
try {
|
|
38
|
+
await (0, api_js_1.apiCall)("/agents/register", {
|
|
39
|
+
body: {
|
|
40
|
+
id: agentId,
|
|
41
|
+
name,
|
|
42
|
+
engine: opts.engine,
|
|
43
|
+
capabilities: newConfig.capabilities,
|
|
44
|
+
machineFingerprint: (0, os_1.hostname)(),
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
(0, config_js_1.saveConfig)(newConfig);
|
|
48
|
+
console.log(`Agent registered: ${agentId}`);
|
|
49
|
+
console.log(`Name: ${name}`);
|
|
50
|
+
console.log(`Config saved to: ${config_js_1.CONFIG_PATH}`);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
console.error(`Registration failed: ${err.message}`);
|
|
54
|
+
// Still save config locally for offline mode
|
|
55
|
+
(0, config_js_1.saveConfig)(newConfig);
|
|
56
|
+
console.log(`Config saved locally (offline mode): ${config_js_1.CONFIG_PATH}`);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
exports.agentCommand
|
|
60
|
+
.command("checkin")
|
|
61
|
+
.description("Send heartbeat to coordination API")
|
|
62
|
+
.action(async () => {
|
|
63
|
+
if (!(0, config_js_1.configExists)()) {
|
|
64
|
+
console.error("Not registered. Run: rlcreate agent register");
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
const config = (0, config_js_1.loadConfig)();
|
|
68
|
+
try {
|
|
69
|
+
await (0, api_js_1.apiCall)("/agents/heartbeat", {
|
|
70
|
+
body: { agentId: config.agentId, status: "idle" },
|
|
71
|
+
});
|
|
72
|
+
console.log(`Heartbeat sent for ${config.agentId}`);
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
console.error(`Heartbeat failed: ${err.message}`);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
exports.agentCommand
|
|
79
|
+
.command("status")
|
|
80
|
+
.description("Show current agent status")
|
|
81
|
+
.action(async () => {
|
|
82
|
+
if (!(0, config_js_1.configExists)()) {
|
|
83
|
+
console.error("Not registered. Run: rlcreate agent register");
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
const config = (0, config_js_1.loadConfig)();
|
|
87
|
+
console.log(`Agent ID: ${config.agentId}`);
|
|
88
|
+
console.log(`Name: ${config.name}`);
|
|
89
|
+
console.log(`Engine: ${config.engine}`);
|
|
90
|
+
console.log(`API: ${config.apiUrl}`);
|
|
91
|
+
console.log(`Capabilities: ${JSON.stringify(config.capabilities, null, 2)}`);
|
|
92
|
+
try {
|
|
93
|
+
const remote = await (0, api_js_1.apiCall)(`/agents/${config.agentId}`);
|
|
94
|
+
console.log(`\nRemote status: ${remote.status}`);
|
|
95
|
+
console.log(`Current task: ${remote.current_task_id || "none"}`);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
console.log(`\nRemote: offline or unreachable`);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
exports.agentCommand
|
|
102
|
+
.command("list")
|
|
103
|
+
.description("List all active agents")
|
|
104
|
+
.action(async () => {
|
|
105
|
+
try {
|
|
106
|
+
const agents = await (0, api_js_1.apiCall)("/agents/active");
|
|
107
|
+
if (agents.length === 0) {
|
|
108
|
+
console.log("No active agents");
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
console.log(`\nActive agents (${agents.length}):`);
|
|
112
|
+
for (const a of agents) {
|
|
113
|
+
console.log(` ${a.id} | ${a.name} | ${a.engine} | ${a.status} | task: ${a.current_task_id || "-"}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
console.error(`Failed: ${err.message}`);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/commands/asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,YAAY,SACsB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assetCommand = 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
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
exports.assetCommand = new commander_1.Command("asset")
|
|
10
|
+
.description("Asset management (R2 storage)");
|
|
11
|
+
exports.assetCommand
|
|
12
|
+
.command("upload <filePath> [remotePath]")
|
|
13
|
+
.description("Upload a file to asset storage")
|
|
14
|
+
.action(async (filePath, remotePath) => {
|
|
15
|
+
const config = (0, config_js_1.loadConfig)();
|
|
16
|
+
const path = remotePath || (0, path_1.basename)(filePath);
|
|
17
|
+
try {
|
|
18
|
+
const fileData = (0, fs_1.readFileSync)(filePath);
|
|
19
|
+
const blob = new Blob([fileData]);
|
|
20
|
+
const formData = new FormData();
|
|
21
|
+
formData.append("file", blob, (0, path_1.basename)(filePath));
|
|
22
|
+
formData.append("path", path);
|
|
23
|
+
formData.append("agentId", config.agentId);
|
|
24
|
+
const result = await (0, api_js_1.apiCall)("/assets/upload", { formData });
|
|
25
|
+
console.log(`Uploaded: ${result.path}`);
|
|
26
|
+
console.log(`Digest: ${result.digest}`);
|
|
27
|
+
console.log(`Size: ${result.size} bytes`);
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
console.error(`Upload failed: ${err.message}`);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
exports.assetCommand
|
|
34
|
+
.command("list")
|
|
35
|
+
.description("List assets")
|
|
36
|
+
.option("-p, --prefix <prefix>", "Path prefix filter")
|
|
37
|
+
.action(async (opts) => {
|
|
38
|
+
try {
|
|
39
|
+
const prefix = opts.prefix ? `?prefix=${encodeURIComponent(opts.prefix)}` : "";
|
|
40
|
+
const items = await (0, api_js_1.apiCall)(`/assets/list${prefix}`);
|
|
41
|
+
if (items.length === 0) {
|
|
42
|
+
console.log("No assets found");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
for (const item of items) {
|
|
46
|
+
console.log(` ${item.path} (${item.size} bytes) - ${item.uploaded}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.error(`Failed: ${err.message}`);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=asset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset.js","sourceRoot":"","sources":["../../src/commands/asset.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,0CAAwC;AACxC,gDAA8C;AAC9C,2BAAkC;AAClC,+BAAgC;AAEnB,QAAA,YAAY,GAAG,IAAI,mBAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,+BAA+B,CAAC,CAAC;AAEhD,oBAAY;KACT,OAAO,CAAC,gCAAgC,CAAC;KACzC,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;IACrC,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,UAAU,IAAI,IAAA,eAAQ,EAAC,QAAQ,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,iBAAY,EAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAChC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAA,eAAQ,EAAC,QAAQ,CAAC,CAAC,CAAC;QAClD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,IAAA,gBAAO,EAIzB,gBAAgB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,kBAAmB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,oBAAY;KACT,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,aAAa,CAAC;KAC1B,MAAM,CAAC,uBAAuB,EAAE,oBAAoB,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,KAAK,GAAG,MAAM,IAAA,gBAAO,EAEzB,eAAe,MAAM,EAAE,CAAC,CAAC;QAE3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxE,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 @@
|
|
|
1
|
+
{"version":3,"file":"bug.d.ts","sourceRoot":"","sources":["../../src/commands/bug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsEpC,eAAO,MAAM,UAAU,SACwB,CAAC"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bugCommand = 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
|
+
function parseContext(raw) {
|
|
8
|
+
if (!raw)
|
|
9
|
+
return undefined;
|
|
10
|
+
try {
|
|
11
|
+
return JSON.parse(raw);
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
throw new Error(`Invalid JSON for --context: ${err.message}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function printBug(bug) {
|
|
18
|
+
const tags = [
|
|
19
|
+
bug.severity.toUpperCase(),
|
|
20
|
+
bug.area,
|
|
21
|
+
`impact=${bug.impact}`,
|
|
22
|
+
bug.gameId ? `game=${bug.gameId}` : null,
|
|
23
|
+
bug.taskId ? `task=${bug.taskId}` : null,
|
|
24
|
+
bug.reporterAgentId ? `agent=${bug.reporterAgentId}` : null,
|
|
25
|
+
].filter(Boolean);
|
|
26
|
+
console.log(`${bug.status.padEnd(10)} ${bug.id} ${bug.title}`);
|
|
27
|
+
console.log(` ${tags.join(" | ")}`);
|
|
28
|
+
if (bug.githubIssue?.issueUrl) {
|
|
29
|
+
console.log(` GitHub: ${bug.githubIssue.repoFullName}#${bug.githubIssue.issueNumber} ${bug.githubIssue.issueUrl}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.bugCommand = new commander_1.Command("bug")
|
|
33
|
+
.description("Report and manage studio bugs");
|
|
34
|
+
exports.bugCommand
|
|
35
|
+
.command("report")
|
|
36
|
+
.description("Create a bug report in the current workspace")
|
|
37
|
+
.requiredOption("-t, --title <title>", "Bug title")
|
|
38
|
+
.option("-d, --details <details>", "Bug details")
|
|
39
|
+
.option("-a, --area <area>", "Bug area", "general")
|
|
40
|
+
.option("-s, --severity <severity>", "Severity", "medium")
|
|
41
|
+
.option("-i, --impact <impact>", "Impact 1-5", "3")
|
|
42
|
+
.option("--source <sourcePath>", "Surface or path where the bug appeared")
|
|
43
|
+
.option("--visibility <visibility>", "public or private", "public")
|
|
44
|
+
.option("-g, --game <gameId>", "Game ID")
|
|
45
|
+
.option("--task <taskId>", "Task ID")
|
|
46
|
+
.option("--context <json>", "Extra JSON context")
|
|
47
|
+
.action(async (opts) => {
|
|
48
|
+
try {
|
|
49
|
+
const config = (0, config_js_1.resolveConfig)();
|
|
50
|
+
const bug = await (0, api_js_1.apiCall)("/bugs", {
|
|
51
|
+
body: {
|
|
52
|
+
title: opts.title,
|
|
53
|
+
details: opts.details,
|
|
54
|
+
area: opts.area,
|
|
55
|
+
severity: opts.severity,
|
|
56
|
+
impact: Number(opts.impact),
|
|
57
|
+
sourcePath: opts.source,
|
|
58
|
+
visibility: opts.visibility,
|
|
59
|
+
reporterAgentId: config.agentId || undefined,
|
|
60
|
+
gameId: opts.game,
|
|
61
|
+
taskId: opts.task,
|
|
62
|
+
context: parseContext(opts.context),
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
console.log(`Bug created: ${bug.id}`);
|
|
66
|
+
printBug(bug);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
console.error(`Failed: ${err.message}`);
|
|
70
|
+
process.exitCode = 1;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
exports.bugCommand
|
|
74
|
+
.command("list")
|
|
75
|
+
.description("List bugs from the wall, your account, or the active workspace")
|
|
76
|
+
.option("--scope <scope>", "wall | mine | workspace", "workspace")
|
|
77
|
+
.option("--status <status>", "Filter by bug status")
|
|
78
|
+
.option("--game <gameId>", "Filter by game ID")
|
|
79
|
+
.option("--limit <limit>", "Limit results", "30")
|
|
80
|
+
.action(async (opts) => {
|
|
81
|
+
try {
|
|
82
|
+
const params = new URLSearchParams();
|
|
83
|
+
if (opts.status)
|
|
84
|
+
params.set("status", opts.status);
|
|
85
|
+
if (opts.game)
|
|
86
|
+
params.set("gameId", opts.game);
|
|
87
|
+
if (opts.limit)
|
|
88
|
+
params.set("limit", opts.limit);
|
|
89
|
+
const scope = String(opts.scope || "workspace");
|
|
90
|
+
const path = scope === "mine" ? "/bugs/mine" : scope === "wall" ? "/bugs/wall" : "/bugs/workspace";
|
|
91
|
+
if (scope === "workspace") {
|
|
92
|
+
params.delete("limit");
|
|
93
|
+
}
|
|
94
|
+
const suffix = params.toString() ? `?${params.toString()}` : "";
|
|
95
|
+
const data = await (0, api_js_1.apiCall)(`${path}${suffix}`);
|
|
96
|
+
const bugs = Array.isArray(data) ? data : data.bugs;
|
|
97
|
+
if (bugs.length === 0) {
|
|
98
|
+
console.log("No bugs found.");
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
for (const bug of bugs) {
|
|
102
|
+
printBug(bug);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
console.error(`Failed: ${err.message}`);
|
|
107
|
+
process.exitCode = 1;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
exports.bugCommand
|
|
111
|
+
.command("update <bugId>")
|
|
112
|
+
.description("Update a bug report")
|
|
113
|
+
.option("-t, --title <title>", "New title")
|
|
114
|
+
.option("-d, --details <details>", "New details")
|
|
115
|
+
.option("-a, --area <area>", "New area")
|
|
116
|
+
.option("-s, --status <status>", "New status")
|
|
117
|
+
.option("--severity <severity>", "New severity")
|
|
118
|
+
.option("-i, --impact <impact>", "New impact 1-5")
|
|
119
|
+
.option("--source <sourcePath>", "New source path")
|
|
120
|
+
.option("--clear-source", "Clear the source path")
|
|
121
|
+
.option("--visibility <visibility>", "public or private")
|
|
122
|
+
.option("-g, --game <gameId>", "Game ID")
|
|
123
|
+
.option("--clear-game", "Clear game ID")
|
|
124
|
+
.option("--task <taskId>", "Task ID")
|
|
125
|
+
.option("--clear-task", "Clear task ID")
|
|
126
|
+
.option("--context <json>", "New JSON context")
|
|
127
|
+
.action(async (bugId, opts) => {
|
|
128
|
+
try {
|
|
129
|
+
const config = (0, config_js_1.resolveConfig)();
|
|
130
|
+
const bug = await (0, api_js_1.apiCall)(`/bugs/${bugId}`, {
|
|
131
|
+
method: "PATCH",
|
|
132
|
+
body: {
|
|
133
|
+
title: opts.title,
|
|
134
|
+
details: opts.details,
|
|
135
|
+
area: opts.area,
|
|
136
|
+
status: opts.status,
|
|
137
|
+
severity: opts.severity,
|
|
138
|
+
impact: opts.impact !== undefined ? Number(opts.impact) : undefined,
|
|
139
|
+
sourcePath: opts.clearSource ? null : opts.source,
|
|
140
|
+
visibility: opts.visibility,
|
|
141
|
+
reporterAgentId: config.agentId || undefined,
|
|
142
|
+
gameId: opts.clearGame ? null : opts.game,
|
|
143
|
+
taskId: opts.clearTask ? null : opts.task,
|
|
144
|
+
context: opts.context ? parseContext(opts.context) : undefined,
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
console.log(`Bug updated: ${bug.id}`);
|
|
148
|
+
printBug(bug);
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
console.error(`Failed: ${err.message}`);
|
|
152
|
+
process.exitCode = 1;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
exports.bugCommand
|
|
156
|
+
.command("github-issue <bugId>")
|
|
157
|
+
.description("Export a studio bug to a linked GitHub repo issue")
|
|
158
|
+
.option("--repo <repoId>", "Explicit repo ID if the game has multiple connected repos")
|
|
159
|
+
.option("--label <label...>", "Additional labels")
|
|
160
|
+
.action(async (bugId, opts) => {
|
|
161
|
+
try {
|
|
162
|
+
const result = await (0, api_js_1.apiCall)(`/bugs/${bugId}/github-issue`, {
|
|
163
|
+
body: {
|
|
164
|
+
repoId: opts.repo,
|
|
165
|
+
labels: opts.label,
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
console.log(`GitHub issue created for ${result.bugId}`);
|
|
169
|
+
console.log(`Repo: ${result.repoFullName}`);
|
|
170
|
+
console.log(`Issue: #${result.issueNumber}`);
|
|
171
|
+
console.log(`URL: ${result.issueUrl}`);
|
|
172
|
+
console.log(`Bug status: ${result.status}`);
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
console.error(`Failed: ${err.message}`);
|
|
176
|
+
process.exitCode = 1;
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
//# sourceMappingURL=bug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bug.js","sourceRoot":"","sources":["../../src/commands/bug.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8DpC,eAAO,MAAM,WAAW,SAgEpB,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.callCommand = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const api_js_1 = require("../lib/api.js");
|
|
7
|
+
const HTTP_METHODS = new Set(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD"]);
|
|
8
|
+
function collect(value, previous = []) {
|
|
9
|
+
previous.push(value);
|
|
10
|
+
return previous;
|
|
11
|
+
}
|
|
12
|
+
function parseKeyValuePairs(values, separator) {
|
|
13
|
+
const result = {};
|
|
14
|
+
for (const value of values) {
|
|
15
|
+
const index = value.indexOf(separator);
|
|
16
|
+
if (index <= 0 || index === value.length - 1) {
|
|
17
|
+
throw new Error(`Invalid pair "${value}". Use key=value or Header:Value.`);
|
|
18
|
+
}
|
|
19
|
+
const key = value.slice(0, index).trim();
|
|
20
|
+
const parsedValue = value.slice(index + separator.length).trim();
|
|
21
|
+
result[key] = parsedValue;
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
function parseBodyArg(input) {
|
|
26
|
+
if (!input)
|
|
27
|
+
return undefined;
|
|
28
|
+
const raw = input.startsWith("@")
|
|
29
|
+
? (0, fs_1.readFileSync)(input.slice(1), "utf-8")
|
|
30
|
+
: input;
|
|
31
|
+
try {
|
|
32
|
+
return JSON.parse(raw);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return raw;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function appendQuery(path, queryPairs) {
|
|
39
|
+
if (queryPairs.length === 0)
|
|
40
|
+
return path;
|
|
41
|
+
const params = new URLSearchParams();
|
|
42
|
+
const parsed = parseKeyValuePairs(queryPairs, "=");
|
|
43
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
44
|
+
params.set(key, value);
|
|
45
|
+
}
|
|
46
|
+
const separator = path.includes("?") ? "&" : "?";
|
|
47
|
+
return `${path}${separator}${params.toString()}`;
|
|
48
|
+
}
|
|
49
|
+
function printHeaders(response) {
|
|
50
|
+
console.log(`HTTP ${response.status} ${response.statusText}`);
|
|
51
|
+
for (const [key, value] of response.headers.entries()) {
|
|
52
|
+
console.log(`${key}: ${value}`);
|
|
53
|
+
}
|
|
54
|
+
console.log("");
|
|
55
|
+
}
|
|
56
|
+
exports.callCommand = new commander_1.Command("call")
|
|
57
|
+
.description("Workspace-aware API call with automatic auth and pretty output")
|
|
58
|
+
.argument("<first>", "Path or HTTP method")
|
|
59
|
+
.argument("[second]", "Optional path when the first argument is a method")
|
|
60
|
+
.option("-X, --method <method>", "HTTP method override")
|
|
61
|
+
.option("-b, --body <body>", "Inline JSON body or @file.json")
|
|
62
|
+
.option("-H, --header <header>", "Extra header (Header: Value)", collect, [])
|
|
63
|
+
.option("-q, --query <pair>", "Query string pair (key=value)", collect, [])
|
|
64
|
+
.option("-i, --include-headers", "Print response headers")
|
|
65
|
+
.option("-o, --output <path>", "Write response body to a file")
|
|
66
|
+
.action(async (first, second, opts) => {
|
|
67
|
+
let method = opts.method?.toUpperCase();
|
|
68
|
+
let path = first;
|
|
69
|
+
if (!method && second && HTTP_METHODS.has(path.toUpperCase())) {
|
|
70
|
+
method = path.toUpperCase();
|
|
71
|
+
path = second;
|
|
72
|
+
}
|
|
73
|
+
if (HTTP_METHODS.has(path.toUpperCase()) && !second && !method) {
|
|
74
|
+
console.error("Missing path. Use `rlcreate call GET /path` or `rlcreate call /path -X GET`.");
|
|
75
|
+
process.exitCode = 1;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const body = parseBodyArg(opts.body);
|
|
79
|
+
const queryPairs = opts.query || [];
|
|
80
|
+
const headerPairs = opts.header || [];
|
|
81
|
+
const headers = parseKeyValuePairs(headerPairs, ":");
|
|
82
|
+
try {
|
|
83
|
+
const response = await (0, api_js_1.apiRequest)(appendQuery(path, queryPairs), {
|
|
84
|
+
method: method || (body !== undefined ? "POST" : "GET"),
|
|
85
|
+
body,
|
|
86
|
+
headers,
|
|
87
|
+
});
|
|
88
|
+
const raw = await response.text();
|
|
89
|
+
if (opts.includeHeaders) {
|
|
90
|
+
printHeaders(response);
|
|
91
|
+
}
|
|
92
|
+
if (opts.output) {
|
|
93
|
+
(0, fs_1.writeFileSync)(opts.output, raw, "utf-8");
|
|
94
|
+
}
|
|
95
|
+
const contentType = response.headers.get("content-type") || "";
|
|
96
|
+
if (contentType.includes("application/json")) {
|
|
97
|
+
try {
|
|
98
|
+
console.log(JSON.stringify(JSON.parse(raw), null, 2));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
console.log(raw);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
console.log(raw);
|
|
106
|
+
}
|
|
107
|
+
if (!response.ok) {
|
|
108
|
+
process.exitCode = 1;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
console.error(`Call failed: ${err.message}`);
|
|
113
|
+
process.exitCode = 1;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=call.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../src/commands/game.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,WAAW,SACiB,CAAC"}
|