agor-live 0.4.2 → 0.4.3
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/dist/cli/commands/daemon/logs.js +1 -1
- package/dist/cli/commands/daemon/restart.js +6 -6
- package/dist/cli/commands/daemon/start.js +7 -7
- package/dist/cli/commands/daemon/status.js +2 -2
- package/dist/cli/commands/daemon/stop.js +1 -1
- package/dist/cli/commands/init.js +3 -3
- package/dist/cli/commands/open.js +4 -4
- package/dist/cli/commands/session/load-claude.js +1 -2
- package/dist/cli/lib/context.js +1 -1
- package/dist/core/agentic-tool-BKO8MCeP.d.ts +70 -0
- package/dist/core/agentic-tool-F4yIQb5n.d.cts +70 -0
- package/dist/core/api/index.d.cts +2 -2
- package/dist/core/api/index.d.ts +2 -2
- package/dist/core/{board-comment-gC_-twPx.d.ts → board-comment-BCrDUioT.d.ts} +14 -6
- package/dist/core/{board-comment-BUm0fpmD.d.cts → board-comment-CaUiaZB5.d.cts} +14 -6
- package/dist/core/db/index.cjs +4 -3
- package/dist/core/db/index.d.cts +5 -5
- package/dist/core/db/index.d.ts +5 -5
- package/dist/core/db/index.js +4 -3
- package/dist/core/git/index.cjs +18 -3
- package/dist/core/git/index.d.cts +14 -1
- package/dist/core/git/index.d.ts +14 -1
- package/dist/core/git/index.js +17 -3
- package/dist/core/index.cjs +35 -8
- package/dist/core/index.d.cts +5 -5
- package/dist/core/index.d.ts +5 -5
- package/dist/core/index.js +34 -8
- package/dist/core/{session-wAzjHatv.d.ts → session-De4TwIM_.d.ts} +13 -9
- package/dist/core/{session-BPjJlVdZ.d.cts → session-Dl5E0CV3.d.cts} +13 -9
- package/dist/core/tools/index.cjs +461 -161
- package/dist/core/tools/index.d.cts +30 -11
- package/dist/core/tools/index.d.ts +30 -11
- package/dist/core/tools/index.js +463 -162
- package/dist/core/types/index.cjs +13 -2
- package/dist/core/types/index.d.cts +3 -3
- package/dist/core/types/index.d.ts +3 -3
- package/dist/core/types/index.js +13 -2
- package/dist/core/utils/pricing.d.cts +1 -1
- package/dist/core/utils/pricing.d.ts +1 -1
- package/dist/core/{worktrees-BK_zQmrd.d.ts → worktrees-Bo5VOy-g.d.ts} +5 -5
- package/dist/core/{worktrees-04Oos4ql.d.cts → worktrees-DZ3DkdlA.d.cts} +5 -5
- package/dist/daemon/index.js +113 -45
- package/dist/daemon/services/mcp-servers.d.ts +2 -7
- package/dist/daemon/services/sessions.js +2 -4
- package/dist/daemon/services/worktrees.d.ts +2 -13
- package/dist/ui/assets/{index-CszvBuh9.js → index-CIlKfG5G.js} +131 -131
- package/dist/ui/assets/{index-Dc4ELxry.css → index-CkISoKn2.css} +1 -1
- package/dist/ui/index.html +2 -2
- package/package.json +1 -1
- package/scripts/postinstall.js +4 -4
- package/dist/core/agentic-tool-B_gFNpk5.d.ts +0 -33
- package/dist/core/agentic-tool-DsyX8diw.d.cts +0 -33
|
@@ -58,7 +58,7 @@ var DaemonLogs = class _DaemonLogs extends Command {
|
|
|
58
58
|
this.log(chalk.yellow("\u26A0 Daemon logs are only available in production mode."));
|
|
59
59
|
this.log("");
|
|
60
60
|
this.log(chalk.bold("In development, view daemon output in the terminal where you ran:"));
|
|
61
|
-
this.log(
|
|
61
|
+
this.log(` ${chalk.cyan("cd apps/agor-daemon && pnpm dev")}`);
|
|
62
62
|
this.log("");
|
|
63
63
|
this.exit(1);
|
|
64
64
|
}
|
|
@@ -17,7 +17,7 @@ function getDaemonPath() {
|
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
19
19
|
const dirname = typeof __dirname !== "undefined" ? __dirname : path.dirname(fileURLToPath(import.meta.url));
|
|
20
|
-
const cliDistIndex = dirname.indexOf(path.sep
|
|
20
|
+
const cliDistIndex = dirname.indexOf(`${path.sep}dist${path.sep}cli`);
|
|
21
21
|
if (cliDistIndex === -1) {
|
|
22
22
|
return path.resolve(dirname, "../../daemon/index.js");
|
|
23
23
|
}
|
|
@@ -125,8 +125,8 @@ var DaemonRestart = class extends Command {
|
|
|
125
125
|
this.log(chalk.red("\u2717 Daemon lifecycle commands only work in production mode."));
|
|
126
126
|
this.log("");
|
|
127
127
|
this.log(chalk.bold("In development, restart the daemon with:"));
|
|
128
|
-
this.log(
|
|
129
|
-
this.log(
|
|
128
|
+
this.log(` 1. ${chalk.cyan("Use Ctrl+C in the daemon terminal")}`);
|
|
129
|
+
this.log(` 2. ${chalk.cyan("cd apps/agor-daemon && pnpm dev")}`);
|
|
130
130
|
this.log("");
|
|
131
131
|
this.exit(1);
|
|
132
132
|
}
|
|
@@ -135,7 +135,7 @@ var DaemonRestart = class extends Command {
|
|
|
135
135
|
this.log(chalk.red("\u2717 Daemon binary not found"));
|
|
136
136
|
this.log("");
|
|
137
137
|
this.log("Your installation may be corrupted. Try reinstalling:");
|
|
138
|
-
this.log(
|
|
138
|
+
this.log(` ${chalk.cyan("npm install -g agor-live")}`);
|
|
139
139
|
this.log("");
|
|
140
140
|
this.exit(1);
|
|
141
141
|
}
|
|
@@ -151,7 +151,7 @@ var DaemonRestart = class extends Command {
|
|
|
151
151
|
this.log(` PID: ${chalk.cyan(String(pid))}`);
|
|
152
152
|
this.log("");
|
|
153
153
|
this.log("View logs with:");
|
|
154
|
-
this.log(
|
|
154
|
+
this.log(` ${chalk.cyan("agor daemon logs")}`);
|
|
155
155
|
this.log("");
|
|
156
156
|
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
157
157
|
const daemonUrl = await getDaemonUrl();
|
|
@@ -160,7 +160,7 @@ var DaemonRestart = class extends Command {
|
|
|
160
160
|
this.log(chalk.yellow("\u26A0 Daemon started but not responding"));
|
|
161
161
|
this.log("");
|
|
162
162
|
this.log("Check logs for errors:");
|
|
163
|
-
this.log(
|
|
163
|
+
this.log(` ${chalk.cyan("agor daemon logs")}`);
|
|
164
164
|
this.log("");
|
|
165
165
|
}
|
|
166
166
|
} catch (error) {
|
|
@@ -17,7 +17,7 @@ function getDaemonPath() {
|
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
19
19
|
const dirname = typeof __dirname !== "undefined" ? __dirname : path.dirname(fileURLToPath(import.meta.url));
|
|
20
|
-
const cliDistIndex = dirname.indexOf(path.sep
|
|
20
|
+
const cliDistIndex = dirname.indexOf(`${path.sep}dist${path.sep}cli`);
|
|
21
21
|
if (cliDistIndex === -1) {
|
|
22
22
|
return path.resolve(dirname, "../../daemon/index.js");
|
|
23
23
|
}
|
|
@@ -101,7 +101,7 @@ var DaemonStart = class _DaemonStart extends Command {
|
|
|
101
101
|
this.log(chalk.red("\u2717 Daemon lifecycle commands only work in production mode."));
|
|
102
102
|
this.log("");
|
|
103
103
|
this.log(chalk.bold("In development, start the daemon with:"));
|
|
104
|
-
this.log(
|
|
104
|
+
this.log(` ${chalk.cyan("cd apps/agor-daemon && pnpm dev")}`);
|
|
105
105
|
this.log("");
|
|
106
106
|
this.exit(1);
|
|
107
107
|
}
|
|
@@ -110,7 +110,7 @@ var DaemonStart = class _DaemonStart extends Command {
|
|
|
110
110
|
this.log(chalk.red("\u2717 Daemon binary not found"));
|
|
111
111
|
this.log("");
|
|
112
112
|
this.log("Your installation may be corrupted. Try reinstalling:");
|
|
113
|
-
this.log(
|
|
113
|
+
this.log(` ${chalk.cyan("npm install -g agor-live")}`);
|
|
114
114
|
this.log("");
|
|
115
115
|
this.exit(1);
|
|
116
116
|
}
|
|
@@ -121,7 +121,7 @@ var DaemonStart = class _DaemonStart extends Command {
|
|
|
121
121
|
this.log(`Expected location: ${chalk.dim(daemonPath)}`);
|
|
122
122
|
this.log("");
|
|
123
123
|
this.log("Your installation may be corrupted. Try reinstalling:");
|
|
124
|
-
this.log(
|
|
124
|
+
this.log(` ${chalk.cyan("npm install -g agor-live")}`);
|
|
125
125
|
this.log("");
|
|
126
126
|
this.exit(1);
|
|
127
127
|
}
|
|
@@ -131,7 +131,7 @@ var DaemonStart = class _DaemonStart extends Command {
|
|
|
131
131
|
this.log(chalk.yellow("\u26A0 Daemon is already running"));
|
|
132
132
|
this.log("");
|
|
133
133
|
this.log("Check status with:");
|
|
134
|
-
this.log(
|
|
134
|
+
this.log(` ${chalk.cyan("agor daemon status")}`);
|
|
135
135
|
this.log("");
|
|
136
136
|
this.exit(0);
|
|
137
137
|
}
|
|
@@ -167,7 +167,7 @@ var DaemonStart = class _DaemonStart extends Command {
|
|
|
167
167
|
this.log(` URL: ${chalk.cyan(daemonUrl)}`);
|
|
168
168
|
this.log("");
|
|
169
169
|
this.log("View logs with:");
|
|
170
|
-
this.log(
|
|
170
|
+
this.log(` ${chalk.cyan("agor daemon logs")}`);
|
|
171
171
|
this.log("");
|
|
172
172
|
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
173
173
|
const nowRunning = await isDaemonRunning(daemonUrl);
|
|
@@ -175,7 +175,7 @@ var DaemonStart = class _DaemonStart extends Command {
|
|
|
175
175
|
this.log(chalk.yellow("\u26A0 Daemon started but not responding"));
|
|
176
176
|
this.log("");
|
|
177
177
|
this.log("Check logs for errors:");
|
|
178
|
-
this.log(
|
|
178
|
+
this.log(` ${chalk.cyan("agor daemon logs")}`);
|
|
179
179
|
this.log("");
|
|
180
180
|
}
|
|
181
181
|
}
|
|
@@ -79,10 +79,10 @@ var DaemonStatus = class extends Command {
|
|
|
79
79
|
if (!running) {
|
|
80
80
|
if (isInstalledPackage()) {
|
|
81
81
|
this.log(chalk.bold("To start the daemon:"));
|
|
82
|
-
this.log(
|
|
82
|
+
this.log(` ${chalk.cyan("agor daemon start")}`);
|
|
83
83
|
} else {
|
|
84
84
|
this.log(chalk.bold("To start the daemon:"));
|
|
85
|
-
this.log(
|
|
85
|
+
this.log(` ${chalk.cyan("cd apps/agor-daemon && pnpm dev")}`);
|
|
86
86
|
}
|
|
87
87
|
this.log("");
|
|
88
88
|
}
|
|
@@ -81,7 +81,7 @@ var DaemonStop = class extends Command {
|
|
|
81
81
|
this.log(chalk.red("\u2717 Daemon lifecycle commands only work in production mode."));
|
|
82
82
|
this.log("");
|
|
83
83
|
this.log(chalk.bold("In development, stop the daemon with:"));
|
|
84
|
-
this.log(
|
|
84
|
+
this.log(` ${chalk.cyan("Use Ctrl+C in the daemon terminal")}`);
|
|
85
85
|
this.log("");
|
|
86
86
|
this.exit(1);
|
|
87
87
|
}
|
|
@@ -414,7 +414,7 @@ var Init = class _Init extends Command {
|
|
|
414
414
|
}
|
|
415
415
|
]);
|
|
416
416
|
await setConfigValue("credentials.ANTHROPIC_API_KEY", anthropicKey);
|
|
417
|
-
this.log(chalk.green(" \u2713")
|
|
417
|
+
this.log(`${chalk.green(" \u2713")} Anthropic API key saved`);
|
|
418
418
|
}
|
|
419
419
|
const { setupOpenAI } = await inquirer.prompt([
|
|
420
420
|
{
|
|
@@ -440,7 +440,7 @@ var Init = class _Init extends Command {
|
|
|
440
440
|
}
|
|
441
441
|
]);
|
|
442
442
|
await setConfigValue("credentials.OPENAI_API_KEY", openaiKey);
|
|
443
|
-
this.log(chalk.green(" \u2713")
|
|
443
|
+
this.log(`${chalk.green(" \u2713")} OpenAI API key saved`);
|
|
444
444
|
}
|
|
445
445
|
const { setupGemini } = await inquirer.prompt([
|
|
446
446
|
{
|
|
@@ -466,7 +466,7 @@ var Init = class _Init extends Command {
|
|
|
466
466
|
}
|
|
467
467
|
]);
|
|
468
468
|
await setConfigValue("credentials.GEMINI_API_KEY", geminiKey);
|
|
469
|
-
this.log(chalk.green(" \u2713")
|
|
469
|
+
this.log(`${chalk.green(" \u2713")} Gemini API key saved`);
|
|
470
470
|
}
|
|
471
471
|
this.log("");
|
|
472
472
|
this.log(
|
|
@@ -46,7 +46,7 @@ var Open = class extends Command {
|
|
|
46
46
|
this.log(chalk.red("\u2717 Daemon is not running"));
|
|
47
47
|
this.log("");
|
|
48
48
|
this.log("Start the daemon first:");
|
|
49
|
-
this.log(
|
|
49
|
+
this.log(` ${chalk.cyan("agor daemon start")}`);
|
|
50
50
|
this.log("");
|
|
51
51
|
this.exit(1);
|
|
52
52
|
}
|
|
@@ -55,7 +55,7 @@ var Open = class extends Command {
|
|
|
55
55
|
this.log(chalk.green("\u2713 Agor UI is ready"));
|
|
56
56
|
this.log("");
|
|
57
57
|
this.log("Open this URL in your browser:");
|
|
58
|
-
this.log(
|
|
58
|
+
this.log(` ${chalk.cyan(uiUrl)}`);
|
|
59
59
|
this.log("");
|
|
60
60
|
this.log(chalk.dim("(GitHub Codespaces will automatically forward the port)"));
|
|
61
61
|
this.log("");
|
|
@@ -76,11 +76,11 @@ var Open = class extends Command {
|
|
|
76
76
|
}
|
|
77
77
|
await execAsync(command);
|
|
78
78
|
this.log(chalk.green("\u2713 Browser opened"));
|
|
79
|
-
} catch (
|
|
79
|
+
} catch (_error) {
|
|
80
80
|
this.log(chalk.yellow("\u26A0 Could not open browser automatically"));
|
|
81
81
|
this.log("");
|
|
82
82
|
this.log("Visit this URL manually:");
|
|
83
|
-
this.log(
|
|
83
|
+
this.log(` ${chalk.cyan(uiUrl)}`);
|
|
84
84
|
this.log("");
|
|
85
85
|
}
|
|
86
86
|
}
|
|
@@ -116,8 +116,7 @@ ${chalk.blue("\u25CF")} Loading Claude Code session: ${chalk.cyan(sessionId)}
|
|
|
116
116
|
children: []
|
|
117
117
|
},
|
|
118
118
|
tasks: [],
|
|
119
|
-
message_count: conversation.length
|
|
120
|
-
tool_use_count: 0
|
|
119
|
+
message_count: conversation.length
|
|
121
120
|
};
|
|
122
121
|
const sessionsService = client.service("sessions");
|
|
123
122
|
const created = await sessionsService.create(agorSession);
|
package/dist/cli/lib/context.js
CHANGED
|
@@ -11,7 +11,7 @@ function getDaemonPath() {
|
|
|
11
11
|
return null;
|
|
12
12
|
}
|
|
13
13
|
const dirname = typeof __dirname !== "undefined" ? __dirname : path.dirname(fileURLToPath(import.meta.url));
|
|
14
|
-
const cliDistIndex = dirname.indexOf(path.sep
|
|
14
|
+
const cliDistIndex = dirname.indexOf(`${path.sep}dist${path.sep}cli`);
|
|
15
15
|
if (cliDistIndex === -1) {
|
|
16
16
|
return path.resolve(dirname, "../../daemon/index.js");
|
|
17
17
|
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { A as AgenticToolID } from './id-DMqyogFB.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Agentic coding tool names
|
|
5
|
+
*
|
|
6
|
+
* These are the external agentic CLI/IDE tools that connect to Agor:
|
|
7
|
+
* - claude-code: Anthropic's Claude Code CLI
|
|
8
|
+
* - cursor: Cursor IDE
|
|
9
|
+
* - codex: OpenAI's Codex CLI
|
|
10
|
+
* - gemini: Google's Gemini Code Assist
|
|
11
|
+
*
|
|
12
|
+
* Not to be confused with "execution tools" (Bash, Write, Read, etc.)
|
|
13
|
+
* which are the primitives that agentic tools use to perform work.
|
|
14
|
+
*/
|
|
15
|
+
type AgenticToolName = 'claude-code' | 'cursor' | 'codex' | 'gemini';
|
|
16
|
+
/**
|
|
17
|
+
* Agentic tool metadata for UI display
|
|
18
|
+
*
|
|
19
|
+
* Represents a configured agentic coding tool with installation status,
|
|
20
|
+
* version info, and UI metadata (icon, description).
|
|
21
|
+
*/
|
|
22
|
+
interface AgenticTool {
|
|
23
|
+
/** Unique agentic tool configuration identifier (UUIDv7) */
|
|
24
|
+
id: AgenticToolID;
|
|
25
|
+
name: AgenticToolName;
|
|
26
|
+
icon: string;
|
|
27
|
+
installed: boolean;
|
|
28
|
+
version?: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
installable: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Claude Code permission modes (via Claude Agent SDK)
|
|
34
|
+
*
|
|
35
|
+
* Unified permission model - single mode controls tool approval behavior.
|
|
36
|
+
*/
|
|
37
|
+
type ClaudeCodePermissionMode = 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan';
|
|
38
|
+
/**
|
|
39
|
+
* Gemini permission modes (via Gemini CLI SDK)
|
|
40
|
+
*
|
|
41
|
+
* Unified permission model - single mode controls tool approval behavior.
|
|
42
|
+
*/
|
|
43
|
+
type GeminiPermissionMode = 'default' | 'acceptEdits' | 'bypassPermissions';
|
|
44
|
+
/**
|
|
45
|
+
* Codex permission modes (legacy - now split into sandboxMode + approvalPolicy)
|
|
46
|
+
*
|
|
47
|
+
* Codex uses a DUAL permission model with two independent settings:
|
|
48
|
+
* 1. sandboxMode - WHERE the agent can write (filesystem boundaries)
|
|
49
|
+
* 2. approvalPolicy - WHETHER the agent asks before executing
|
|
50
|
+
*/
|
|
51
|
+
type CodexPermissionMode = 'ask' | 'auto' | 'on-failure' | 'allow-all';
|
|
52
|
+
/**
|
|
53
|
+
* Codex sandbox mode - controls WHERE agent can write (filesystem boundaries)
|
|
54
|
+
*
|
|
55
|
+
* - read-only: No filesystem writes allowed
|
|
56
|
+
* - workspace-write: Write to workspace files only, blocks .git/ and system paths
|
|
57
|
+
* - danger-full-access: Full filesystem access including .git/ and system paths
|
|
58
|
+
*/
|
|
59
|
+
type CodexSandboxMode = 'read-only' | 'workspace-write' | 'danger-full-access';
|
|
60
|
+
/**
|
|
61
|
+
* Codex approval policy - controls WHETHER agent asks before executing
|
|
62
|
+
*
|
|
63
|
+
* - untrusted: Ask for every operation
|
|
64
|
+
* - on-request: Model decides when to ask (recommended)
|
|
65
|
+
* - on-failure: Only ask when operations fail
|
|
66
|
+
* - never: Auto-approve everything
|
|
67
|
+
*/
|
|
68
|
+
type CodexApprovalPolicy = 'untrusted' | 'on-request' | 'on-failure' | 'never';
|
|
69
|
+
|
|
70
|
+
export type { AgenticToolName as A, ClaudeCodePermissionMode as C, GeminiPermissionMode as G, CodexPermissionMode as a, AgenticTool as b, CodexSandboxMode as c, CodexApprovalPolicy as d };
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { A as AgenticToolID } from './id-DMqyogFB.cjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Agentic coding tool names
|
|
5
|
+
*
|
|
6
|
+
* These are the external agentic CLI/IDE tools that connect to Agor:
|
|
7
|
+
* - claude-code: Anthropic's Claude Code CLI
|
|
8
|
+
* - cursor: Cursor IDE
|
|
9
|
+
* - codex: OpenAI's Codex CLI
|
|
10
|
+
* - gemini: Google's Gemini Code Assist
|
|
11
|
+
*
|
|
12
|
+
* Not to be confused with "execution tools" (Bash, Write, Read, etc.)
|
|
13
|
+
* which are the primitives that agentic tools use to perform work.
|
|
14
|
+
*/
|
|
15
|
+
type AgenticToolName = 'claude-code' | 'cursor' | 'codex' | 'gemini';
|
|
16
|
+
/**
|
|
17
|
+
* Agentic tool metadata for UI display
|
|
18
|
+
*
|
|
19
|
+
* Represents a configured agentic coding tool with installation status,
|
|
20
|
+
* version info, and UI metadata (icon, description).
|
|
21
|
+
*/
|
|
22
|
+
interface AgenticTool {
|
|
23
|
+
/** Unique agentic tool configuration identifier (UUIDv7) */
|
|
24
|
+
id: AgenticToolID;
|
|
25
|
+
name: AgenticToolName;
|
|
26
|
+
icon: string;
|
|
27
|
+
installed: boolean;
|
|
28
|
+
version?: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
installable: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Claude Code permission modes (via Claude Agent SDK)
|
|
34
|
+
*
|
|
35
|
+
* Unified permission model - single mode controls tool approval behavior.
|
|
36
|
+
*/
|
|
37
|
+
type ClaudeCodePermissionMode = 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan';
|
|
38
|
+
/**
|
|
39
|
+
* Gemini permission modes (via Gemini CLI SDK)
|
|
40
|
+
*
|
|
41
|
+
* Unified permission model - single mode controls tool approval behavior.
|
|
42
|
+
*/
|
|
43
|
+
type GeminiPermissionMode = 'default' | 'acceptEdits' | 'bypassPermissions';
|
|
44
|
+
/**
|
|
45
|
+
* Codex permission modes (legacy - now split into sandboxMode + approvalPolicy)
|
|
46
|
+
*
|
|
47
|
+
* Codex uses a DUAL permission model with two independent settings:
|
|
48
|
+
* 1. sandboxMode - WHERE the agent can write (filesystem boundaries)
|
|
49
|
+
* 2. approvalPolicy - WHETHER the agent asks before executing
|
|
50
|
+
*/
|
|
51
|
+
type CodexPermissionMode = 'ask' | 'auto' | 'on-failure' | 'allow-all';
|
|
52
|
+
/**
|
|
53
|
+
* Codex sandbox mode - controls WHERE agent can write (filesystem boundaries)
|
|
54
|
+
*
|
|
55
|
+
* - read-only: No filesystem writes allowed
|
|
56
|
+
* - workspace-write: Write to workspace files only, blocks .git/ and system paths
|
|
57
|
+
* - danger-full-access: Full filesystem access including .git/ and system paths
|
|
58
|
+
*/
|
|
59
|
+
type CodexSandboxMode = 'read-only' | 'workspace-write' | 'danger-full-access';
|
|
60
|
+
/**
|
|
61
|
+
* Codex approval policy - controls WHETHER agent asks before executing
|
|
62
|
+
*
|
|
63
|
+
* - untrusted: Ask for every operation
|
|
64
|
+
* - on-request: Model decides when to ask (recommended)
|
|
65
|
+
* - on-failure: Only ask when operations fail
|
|
66
|
+
* - never: Auto-approve everything
|
|
67
|
+
*/
|
|
68
|
+
type CodexApprovalPolicy = 'untrusted' | 'on-request' | 'on-failure' | 'never';
|
|
69
|
+
|
|
70
|
+
export type { AgenticToolName as A, ClaudeCodePermissionMode as C, GeminiPermissionMode as G, CodexPermissionMode as a, AgenticTool as b, CodexSandboxMode as c, CodexApprovalPolicy as d };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { d as Message } from '../message-BoxZISHg.cjs';
|
|
2
|
-
import {
|
|
2
|
+
import { v as Session, e as Board, o as MCPServer } from '../session-Dl5E0CV3.cjs';
|
|
3
3
|
import { e as Task, a as ContextFileListItem, b as ContextFileDetail } from '../task-BIEgT1DK.cjs';
|
|
4
4
|
import { b as AuthenticationResult } from '../feathers-BzHEPnpl.cjs';
|
|
5
5
|
import { a as User } from '../user-eUuKj7yM.cjs';
|
|
@@ -7,7 +7,7 @@ import { a as Repo, c as Worktree } from '../repo-Dr--T0wp.cjs';
|
|
|
7
7
|
import { Params, Paginated, Application } from '@feathersjs/feathers';
|
|
8
8
|
import { Socket } from 'socket.io-client';
|
|
9
9
|
import '../id-DMqyogFB.cjs';
|
|
10
|
-
import '../agentic-tool-
|
|
10
|
+
import '../agentic-tool-F4yIQb5n.cjs';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Feathers Client for Agor
|
package/dist/core/api/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { d as Message } from '../message-DvBzHu7V.js';
|
|
2
|
-
import {
|
|
2
|
+
import { v as Session, e as Board, o as MCPServer } from '../session-De4TwIM_.js';
|
|
3
3
|
import { e as Task, a as ContextFileListItem, b as ContextFileDetail } from '../task-DuIfiUbW.js';
|
|
4
4
|
import { b as AuthenticationResult } from '../feathers-BzHEPnpl.js';
|
|
5
5
|
import { a as User } from '../user-BmL3kFol.js';
|
|
@@ -7,7 +7,7 @@ import { a as Repo, c as Worktree } from '../repo-BoA8D6Uf.js';
|
|
|
7
7
|
import { Params, Paginated, Application } from '@feathersjs/feathers';
|
|
8
8
|
import { Socket } from 'socket.io-client';
|
|
9
9
|
import '../id-DMqyogFB.js';
|
|
10
|
-
import '../agentic-tool-
|
|
10
|
+
import '../agentic-tool-BKO8MCeP.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Feathers Client for Agor
|
|
@@ -61,9 +61,13 @@ interface BoardComment {
|
|
|
61
61
|
x: number;
|
|
62
62
|
y: number;
|
|
63
63
|
};
|
|
64
|
-
/** OR relative to session (follows
|
|
64
|
+
/** OR relative to session/zone/worktree (follows parent when it moves) */
|
|
65
65
|
relative?: {
|
|
66
|
-
session_id
|
|
66
|
+
/** Parent object ID - can be session_id, zone object ID, or worktree_id */
|
|
67
|
+
parent_id: string;
|
|
68
|
+
/** Type of parent for proper lookup */
|
|
69
|
+
parent_type: 'session' | 'zone' | 'worktree';
|
|
70
|
+
/** Offset from parent's top-left corner */
|
|
67
71
|
offset_x: number;
|
|
68
72
|
offset_y: number;
|
|
69
73
|
};
|
|
@@ -79,18 +83,22 @@ interface BoardComment {
|
|
|
79
83
|
* Hierarchy (most specific → least specific):
|
|
80
84
|
* 1. MESSAGE - Attached to specific message
|
|
81
85
|
* 2. TASK - Attached to task
|
|
82
|
-
* 3. SESSION_SPATIAL - Spatial pin on session
|
|
86
|
+
* 3. SESSION_SPATIAL - Spatial pin on session (relative positioning)
|
|
83
87
|
* 4. SESSION - Attached to session
|
|
84
|
-
* 5.
|
|
85
|
-
* 6.
|
|
86
|
-
* 7.
|
|
88
|
+
* 5. WORKTREE_SPATIAL - Spatial pin on worktree (relative positioning)
|
|
89
|
+
* 6. WORKTREE - Attached to worktree
|
|
90
|
+
* 7. ZONE_SPATIAL - Spatial pin on zone (relative positioning)
|
|
91
|
+
* 8. BOARD_SPATIAL - Spatial pin on board (absolute positioning)
|
|
92
|
+
* 9. BOARD - General board conversation
|
|
87
93
|
*/
|
|
88
94
|
declare const CommentAttachmentType: {
|
|
89
95
|
readonly MESSAGE: "message";
|
|
90
96
|
readonly TASK: "task";
|
|
91
97
|
readonly SESSION_SPATIAL: "session-spatial";
|
|
92
98
|
readonly SESSION: "session";
|
|
99
|
+
readonly WORKTREE_SPATIAL: "worktree-spatial";
|
|
93
100
|
readonly WORKTREE: "worktree";
|
|
101
|
+
readonly ZONE_SPATIAL: "zone-spatial";
|
|
94
102
|
readonly BOARD_SPATIAL: "board-spatial";
|
|
95
103
|
readonly BOARD: "board";
|
|
96
104
|
};
|
|
@@ -61,9 +61,13 @@ interface BoardComment {
|
|
|
61
61
|
x: number;
|
|
62
62
|
y: number;
|
|
63
63
|
};
|
|
64
|
-
/** OR relative to session (follows
|
|
64
|
+
/** OR relative to session/zone/worktree (follows parent when it moves) */
|
|
65
65
|
relative?: {
|
|
66
|
-
session_id
|
|
66
|
+
/** Parent object ID - can be session_id, zone object ID, or worktree_id */
|
|
67
|
+
parent_id: string;
|
|
68
|
+
/** Type of parent for proper lookup */
|
|
69
|
+
parent_type: 'session' | 'zone' | 'worktree';
|
|
70
|
+
/** Offset from parent's top-left corner */
|
|
67
71
|
offset_x: number;
|
|
68
72
|
offset_y: number;
|
|
69
73
|
};
|
|
@@ -79,18 +83,22 @@ interface BoardComment {
|
|
|
79
83
|
* Hierarchy (most specific → least specific):
|
|
80
84
|
* 1. MESSAGE - Attached to specific message
|
|
81
85
|
* 2. TASK - Attached to task
|
|
82
|
-
* 3. SESSION_SPATIAL - Spatial pin on session
|
|
86
|
+
* 3. SESSION_SPATIAL - Spatial pin on session (relative positioning)
|
|
83
87
|
* 4. SESSION - Attached to session
|
|
84
|
-
* 5.
|
|
85
|
-
* 6.
|
|
86
|
-
* 7.
|
|
88
|
+
* 5. WORKTREE_SPATIAL - Spatial pin on worktree (relative positioning)
|
|
89
|
+
* 6. WORKTREE - Attached to worktree
|
|
90
|
+
* 7. ZONE_SPATIAL - Spatial pin on zone (relative positioning)
|
|
91
|
+
* 8. BOARD_SPATIAL - Spatial pin on board (absolute positioning)
|
|
92
|
+
* 9. BOARD - General board conversation
|
|
87
93
|
*/
|
|
88
94
|
declare const CommentAttachmentType: {
|
|
89
95
|
readonly MESSAGE: "message";
|
|
90
96
|
readonly TASK: "task";
|
|
91
97
|
readonly SESSION_SPATIAL: "session-spatial";
|
|
92
98
|
readonly SESSION: "session";
|
|
99
|
+
readonly WORKTREE_SPATIAL: "worktree-spatial";
|
|
93
100
|
readonly WORKTREE: "worktree";
|
|
101
|
+
readonly ZONE_SPATIAL: "zone-spatial";
|
|
94
102
|
readonly BOARD_SPATIAL: "board-spatial";
|
|
95
103
|
readonly BOARD: "board";
|
|
96
104
|
};
|
package/dist/core/db/index.cjs
CHANGED
|
@@ -1157,7 +1157,7 @@ var AmbiguousIdError = class extends RepositoryError {
|
|
|
1157
1157
|
var import_drizzle_orm3 = require("drizzle-orm");
|
|
1158
1158
|
init_ids();
|
|
1159
1159
|
function generatePreview(content) {
|
|
1160
|
-
return content.length > 200 ? content.slice(0, 200)
|
|
1160
|
+
return content.length > 200 ? `${content.slice(0, 200)}...` : content;
|
|
1161
1161
|
}
|
|
1162
1162
|
var BoardCommentsRepository = class {
|
|
1163
1163
|
constructor(db) {
|
|
@@ -2726,7 +2726,6 @@ var SessionRepository = class {
|
|
|
2726
2726
|
contextFiles: session.contextFiles ?? [],
|
|
2727
2727
|
tasks: session.tasks ?? [],
|
|
2728
2728
|
message_count: session.message_count ?? 0,
|
|
2729
|
-
tool_use_count: session.tool_use_count ?? 0,
|
|
2730
2729
|
permission_config: session.permission_config,
|
|
2731
2730
|
model_config: session.model_config,
|
|
2732
2731
|
custom_context: session.custom_context
|
|
@@ -3281,7 +3280,9 @@ var TaskRepository = class {
|
|
|
3281
3280
|
const inserts = taskList.map((task) => this.taskToInsert(task));
|
|
3282
3281
|
await this.db.insert(tasks).values(inserts);
|
|
3283
3282
|
const taskIds = inserts.map((t) => t.task_id);
|
|
3284
|
-
const rows = await this.db.select().from(tasks).where(
|
|
3283
|
+
const rows = await this.db.select().from(tasks).where(
|
|
3284
|
+
import_drizzle_orm11.sql`${tasks.task_id} IN ${import_drizzle_orm11.sql.raw(`(${taskIds.map((id) => `'${id}'`).join(",")})`)}`
|
|
3285
|
+
);
|
|
3285
3286
|
return rows.map((row) => this.rowToTask(row));
|
|
3286
3287
|
} catch (error) {
|
|
3287
3288
|
throw new RepositoryError(
|
package/dist/core/db/index.d.cts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
export { and, desc, eq, inArray, like, or, sql } from 'drizzle-orm';
|
|
2
2
|
import bcryptjs from 'bcryptjs';
|
|
3
|
-
import { b as Database, B as BaseRepository } from '../worktrees-
|
|
4
|
-
export { A as AmbiguousIdError, Q as BoardCommentInsert, P as BoardCommentRow, y as BoardInsert, O as BoardObjectInsert, N as BoardObjectRow, x as BoardRow, d as DEFAULT_DB_PATH, a as DatabaseConnectionError, D as DbConfig, E as EntityNotFoundError, J as MCPServerInsert, M as MCPServerRepository, I as MCPServerRow, v as MessageInsert, q as MessageRow, f as MessagesRepository, C as RepoInsert, z as RepoRow, R as RepositoryError, o as SessionInsert, L as SessionMCPServerInsert, S as SessionMCPServerRepository, K as SessionMCPServerRow, g as SessionRepository, n as SessionRow, p as TaskInsert, T as TaskRow, H as UserInsert, U as UserRow, G as WorktreeInsert, W as WorktreeRepository, F as WorktreeRow, l as boardComments, j as boardObjects, h as boards, c as createDatabase, e as createLocalDatabase, i as mcpServers, m as messages, r as repos, k as sessionMcpServers, s as sessions, t as tasks, u as users, w as worktrees } from '../worktrees-
|
|
5
|
-
import { B as BoardComment } from '../board-comment-
|
|
3
|
+
import { b as Database, B as BaseRepository } from '../worktrees-DZ3DkdlA.cjs';
|
|
4
|
+
export { A as AmbiguousIdError, Q as BoardCommentInsert, P as BoardCommentRow, y as BoardInsert, O as BoardObjectInsert, N as BoardObjectRow, x as BoardRow, d as DEFAULT_DB_PATH, a as DatabaseConnectionError, D as DbConfig, E as EntityNotFoundError, J as MCPServerInsert, M as MCPServerRepository, I as MCPServerRow, v as MessageInsert, q as MessageRow, f as MessagesRepository, C as RepoInsert, z as RepoRow, R as RepositoryError, o as SessionInsert, L as SessionMCPServerInsert, S as SessionMCPServerRepository, K as SessionMCPServerRow, g as SessionRepository, n as SessionRow, p as TaskInsert, T as TaskRow, H as UserInsert, U as UserRow, G as WorktreeInsert, W as WorktreeRepository, F as WorktreeRow, l as boardComments, j as boardObjects, h as boards, c as createDatabase, e as createLocalDatabase, i as mcpServers, m as messages, r as repos, k as sessionMcpServers, s as sessions, t as tasks, u as users, w as worktrees } from '../worktrees-DZ3DkdlA.cjs';
|
|
5
|
+
import { B as BoardComment } from '../board-comment-CaUiaZB5.cjs';
|
|
6
6
|
import { B as BoardID, W as WorktreeID } from '../id-DMqyogFB.cjs';
|
|
7
|
-
import {
|
|
7
|
+
import { a as BoardEntityObject, e as Board, d as BoardObject } from '../session-Dl5E0CV3.cjs';
|
|
8
8
|
import { a as Repo } from '../repo-Dr--T0wp.cjs';
|
|
9
9
|
import { e as Task } from '../task-BIEgT1DK.cjs';
|
|
10
10
|
import { a as User } from '../user-eUuKj7yM.cjs';
|
|
11
11
|
import '../message-BoxZISHg.cjs';
|
|
12
12
|
import 'drizzle-orm/libsql';
|
|
13
13
|
import 'drizzle-orm/sqlite-core';
|
|
14
|
-
import '../agentic-tool-
|
|
14
|
+
import '../agentic-tool-F4yIQb5n.cjs';
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* ID Management Utilities
|
package/dist/core/db/index.d.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
export { and, desc, eq, inArray, like, or, sql } from 'drizzle-orm';
|
|
2
2
|
import bcryptjs from 'bcryptjs';
|
|
3
|
-
import { b as Database, B as BaseRepository } from '../worktrees-
|
|
4
|
-
export { A as AmbiguousIdError, Q as BoardCommentInsert, P as BoardCommentRow, y as BoardInsert, O as BoardObjectInsert, N as BoardObjectRow, x as BoardRow, d as DEFAULT_DB_PATH, a as DatabaseConnectionError, D as DbConfig, E as EntityNotFoundError, J as MCPServerInsert, M as MCPServerRepository, I as MCPServerRow, v as MessageInsert, q as MessageRow, f as MessagesRepository, C as RepoInsert, z as RepoRow, R as RepositoryError, o as SessionInsert, L as SessionMCPServerInsert, S as SessionMCPServerRepository, K as SessionMCPServerRow, g as SessionRepository, n as SessionRow, p as TaskInsert, T as TaskRow, H as UserInsert, U as UserRow, G as WorktreeInsert, W as WorktreeRepository, F as WorktreeRow, l as boardComments, j as boardObjects, h as boards, c as createDatabase, e as createLocalDatabase, i as mcpServers, m as messages, r as repos, k as sessionMcpServers, s as sessions, t as tasks, u as users, w as worktrees } from '../worktrees-
|
|
5
|
-
import { B as BoardComment } from '../board-comment-
|
|
3
|
+
import { b as Database, B as BaseRepository } from '../worktrees-Bo5VOy-g.js';
|
|
4
|
+
export { A as AmbiguousIdError, Q as BoardCommentInsert, P as BoardCommentRow, y as BoardInsert, O as BoardObjectInsert, N as BoardObjectRow, x as BoardRow, d as DEFAULT_DB_PATH, a as DatabaseConnectionError, D as DbConfig, E as EntityNotFoundError, J as MCPServerInsert, M as MCPServerRepository, I as MCPServerRow, v as MessageInsert, q as MessageRow, f as MessagesRepository, C as RepoInsert, z as RepoRow, R as RepositoryError, o as SessionInsert, L as SessionMCPServerInsert, S as SessionMCPServerRepository, K as SessionMCPServerRow, g as SessionRepository, n as SessionRow, p as TaskInsert, T as TaskRow, H as UserInsert, U as UserRow, G as WorktreeInsert, W as WorktreeRepository, F as WorktreeRow, l as boardComments, j as boardObjects, h as boards, c as createDatabase, e as createLocalDatabase, i as mcpServers, m as messages, r as repos, k as sessionMcpServers, s as sessions, t as tasks, u as users, w as worktrees } from '../worktrees-Bo5VOy-g.js';
|
|
5
|
+
import { B as BoardComment } from '../board-comment-BCrDUioT.js';
|
|
6
6
|
import { B as BoardID, W as WorktreeID } from '../id-DMqyogFB.js';
|
|
7
|
-
import {
|
|
7
|
+
import { a as BoardEntityObject, e as Board, d as BoardObject } from '../session-De4TwIM_.js';
|
|
8
8
|
import { a as Repo } from '../repo-BoA8D6Uf.js';
|
|
9
9
|
import { e as Task } from '../task-DuIfiUbW.js';
|
|
10
10
|
import { a as User } from '../user-BmL3kFol.js';
|
|
11
11
|
import '../message-DvBzHu7V.js';
|
|
12
12
|
import 'drizzle-orm/libsql';
|
|
13
13
|
import 'drizzle-orm/sqlite-core';
|
|
14
|
-
import '../agentic-tool-
|
|
14
|
+
import '../agentic-tool-BKO8MCeP.js';
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* ID Management Utilities
|
package/dist/core/db/index.js
CHANGED
|
@@ -1081,7 +1081,7 @@ var AmbiguousIdError = class extends RepositoryError {
|
|
|
1081
1081
|
init_ids();
|
|
1082
1082
|
import { and, eq, isNull, like } from "drizzle-orm";
|
|
1083
1083
|
function generatePreview(content) {
|
|
1084
|
-
return content.length > 200 ? content.slice(0, 200)
|
|
1084
|
+
return content.length > 200 ? `${content.slice(0, 200)}...` : content;
|
|
1085
1085
|
}
|
|
1086
1086
|
var BoardCommentsRepository = class {
|
|
1087
1087
|
constructor(db) {
|
|
@@ -2650,7 +2650,6 @@ var SessionRepository = class {
|
|
|
2650
2650
|
contextFiles: session.contextFiles ?? [],
|
|
2651
2651
|
tasks: session.tasks ?? [],
|
|
2652
2652
|
message_count: session.message_count ?? 0,
|
|
2653
|
-
tool_use_count: session.tool_use_count ?? 0,
|
|
2654
2653
|
permission_config: session.permission_config,
|
|
2655
2654
|
model_config: session.model_config,
|
|
2656
2655
|
custom_context: session.custom_context
|
|
@@ -3205,7 +3204,9 @@ var TaskRepository = class {
|
|
|
3205
3204
|
const inserts = taskList.map((task) => this.taskToInsert(task));
|
|
3206
3205
|
await this.db.insert(tasks).values(inserts);
|
|
3207
3206
|
const taskIds = inserts.map((t) => t.task_id);
|
|
3208
|
-
const rows = await this.db.select().from(tasks).where(
|
|
3207
|
+
const rows = await this.db.select().from(tasks).where(
|
|
3208
|
+
sql5`${tasks.task_id} IN ${sql5.raw(`(${taskIds.map((id) => `'${id}'`).join(",")})`)}`
|
|
3209
|
+
);
|
|
3209
3210
|
return rows.map((row) => this.rowToTask(row));
|
|
3210
3211
|
} catch (error) {
|
|
3211
3212
|
throw new RepositoryError(
|