propr-cli 0.8.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/README.md +549 -0
- package/dist/api/agentTank.js +27 -0
- package/dist/api/agents.js +201 -0
- package/dist/api/client.js +284 -0
- package/dist/api/errors.js +145 -0
- package/dist/api/implement.js +147 -0
- package/dist/api/index.js +26 -0
- package/dist/api/logs.js +59 -0
- package/dist/api/plans.js +160 -0
- package/dist/api/relay.js +73 -0
- package/dist/api/repos.js +243 -0
- package/dist/api/settings.js +219 -0
- package/dist/api/system.js +53 -0
- package/dist/api/tasks.js +140 -0
- package/dist/api/todos.js +77 -0
- package/dist/api/types.js +6 -0
- package/dist/assets/.env.example +183 -0
- package/dist/assets/env.example.txt +198 -0
- package/dist/commands/agentCommands.js +405 -0
- package/dist/commands/checkCommands.js +384 -0
- package/dist/commands/implementCommands.js +178 -0
- package/dist/commands/index.js +22 -0
- package/dist/commands/initCommands.js +167 -0
- package/dist/commands/initStack.js +193 -0
- package/dist/commands/logCommands.js +170 -0
- package/dist/commands/planCommands.js +552 -0
- package/dist/commands/relayCommands.js +149 -0
- package/dist/commands/repoCommands.js +526 -0
- package/dist/commands/settingCommands.js +237 -0
- package/dist/commands/stackCommands.js +86 -0
- package/dist/commands/startCommand.js +36 -0
- package/dist/commands/systemCommands.js +221 -0
- package/dist/commands/tankCommands.js +55 -0
- package/dist/commands/taskCommands.js +554 -0
- package/dist/commands/todoCommands.js +620 -0
- package/dist/commands/uiDocsCommands.js +69 -0
- package/dist/config/ConfigManager.js +360 -0
- package/dist/config/index.js +8 -0
- package/dist/config/types.js +16 -0
- package/dist/index.js +276 -0
- package/dist/orchestrator/format.js +31 -0
- package/dist/orchestrator/index.js +102 -0
- package/dist/orchestrator/manifest.json +16 -0
- package/dist/orchestrator/orchestrator.mjs +798 -0
- package/dist/orchestrator/types.js +10 -0
- package/dist/tui/StartApp.js +175 -0
- package/dist/tui/app.js +9 -0
- package/dist/tui/render.js +87 -0
- package/dist/utils/envFile.js +65 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/io.js +186 -0
- package/dist/utils/parseState.js +14 -0
- package/dist/utils/resolveProject.js +50 -0
- package/dist/vendor/shared/demoMode.js +6 -0
- package/dist/vendor/shared/events.js +30 -0
- package/dist/vendor/shared/githubAuthMode.js +35 -0
- package/dist/vendor/shared/index.js +15 -0
- package/dist/vendor/shared/labelUtils.js +32 -0
- package/dist/vendor/shared/modelDefinitions.js +146 -0
- package/dist/vendor/shared/reviewPrompt.js +18 -0
- package/dist/vendor/shared/usageTypes.js +13 -0
- package/dist/vendor/shared/userWhitelist.js +30 -0
- package/dist/vendor/shared/validateRelayUrl.js +21 -0
- package/package.json +31 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository To-Dos API
|
|
3
|
+
*
|
|
4
|
+
* Functions for interacting with the ProPR backend to-do endpoints.
|
|
5
|
+
*/
|
|
6
|
+
import { createApiClient } from "./client.js";
|
|
7
|
+
export async function listTodos(repository, client) {
|
|
8
|
+
const apiClient = client ?? (await createApiClient());
|
|
9
|
+
const response = await apiClient.get("/api/repos/todos", {
|
|
10
|
+
params: { repository },
|
|
11
|
+
});
|
|
12
|
+
return response.data;
|
|
13
|
+
}
|
|
14
|
+
export async function getTodo(todoId, client) {
|
|
15
|
+
const apiClient = client ?? (await createApiClient());
|
|
16
|
+
const response = await apiClient.get(`/api/repos/todos/${todoId}`);
|
|
17
|
+
return response.data;
|
|
18
|
+
}
|
|
19
|
+
export async function createTodo(params, client) {
|
|
20
|
+
const apiClient = client ?? (await createApiClient());
|
|
21
|
+
const response = await apiClient.post("/api/repos/todos", {
|
|
22
|
+
body: params,
|
|
23
|
+
});
|
|
24
|
+
return response.data;
|
|
25
|
+
}
|
|
26
|
+
export async function updateTodo(todoId, updates, client) {
|
|
27
|
+
const apiClient = client ?? (await createApiClient());
|
|
28
|
+
const response = await apiClient.put(`/api/repos/todos/${todoId}`, {
|
|
29
|
+
body: updates,
|
|
30
|
+
});
|
|
31
|
+
return response.data;
|
|
32
|
+
}
|
|
33
|
+
export async function deleteTodo(todoId, client) {
|
|
34
|
+
const apiClient = client ?? (await createApiClient());
|
|
35
|
+
const response = await apiClient.delete(`/api/repos/todos/${todoId}`);
|
|
36
|
+
return response.data;
|
|
37
|
+
}
|
|
38
|
+
export async function listCategories(repository, client) {
|
|
39
|
+
const apiClient = client ?? (await createApiClient());
|
|
40
|
+
const response = await apiClient.get("/api/repos/todos/categories", {
|
|
41
|
+
params: { repository },
|
|
42
|
+
});
|
|
43
|
+
return response.data;
|
|
44
|
+
}
|
|
45
|
+
export async function createCategory(params, client) {
|
|
46
|
+
const apiClient = client ?? (await createApiClient());
|
|
47
|
+
const response = await apiClient.post("/api/repos/todos/categories", {
|
|
48
|
+
body: params,
|
|
49
|
+
});
|
|
50
|
+
return response.data;
|
|
51
|
+
}
|
|
52
|
+
export async function updateCategory(categoryId, updates, client) {
|
|
53
|
+
const apiClient = client ?? (await createApiClient());
|
|
54
|
+
const response = await apiClient.put(`/api/repos/todos/categories/${categoryId}`, {
|
|
55
|
+
body: updates,
|
|
56
|
+
});
|
|
57
|
+
return response.data;
|
|
58
|
+
}
|
|
59
|
+
export async function deleteCategory(categoryId, client) {
|
|
60
|
+
const apiClient = client ?? (await createApiClient());
|
|
61
|
+
const response = await apiClient.delete(`/api/repos/todos/categories/${categoryId}`);
|
|
62
|
+
return response.data;
|
|
63
|
+
}
|
|
64
|
+
export async function reorderTodos(repository, items, client) {
|
|
65
|
+
const apiClient = client ?? (await createApiClient());
|
|
66
|
+
const response = await apiClient.post("/api/repos/todos/reorder", {
|
|
67
|
+
body: { repository, items },
|
|
68
|
+
});
|
|
69
|
+
return response.data;
|
|
70
|
+
}
|
|
71
|
+
export async function reorderCategories(repository, items, client) {
|
|
72
|
+
const apiClient = client ?? (await createApiClient());
|
|
73
|
+
const response = await apiClient.post("/api/repos/todos/categories/reorder", {
|
|
74
|
+
body: { repository, items },
|
|
75
|
+
});
|
|
76
|
+
return response.data;
|
|
77
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# GitHub App Configuration
|
|
2
|
+
GH_APP_ID=your_app_id
|
|
3
|
+
GH_PRIVATE_KEY_PATH=./path/to/your-app-private-key.pem
|
|
4
|
+
GH_INSTALLATION_ID=your_installation_id
|
|
5
|
+
|
|
6
|
+
# Host path to the GitHub App private key (.pem). Recommended when running via
|
|
7
|
+
# the `propr` CLI or launcher: the key is bind-mounted (read-only) into the app
|
|
8
|
+
# containers and GH_PRIVATE_KEY_PATH above is overridden to point at it, so you
|
|
9
|
+
# can keep the key anywhere on the host instead of staging it under data/.
|
|
10
|
+
# Must be an absolute host path (no '~').
|
|
11
|
+
# HOST_GH_PRIVATE_KEY=/home/your-user/propr/app-private-key.pem
|
|
12
|
+
|
|
13
|
+
# GitHub auth: token relay (shared-app path) — ALTERNATIVE to the App private key
|
|
14
|
+
# above. When PROPR_GH_RELAY_URL is set, the backend fetches short-lived
|
|
15
|
+
# installation tokens from a vendor-run relay instead of minting them from a
|
|
16
|
+
# private key, so you don't need to hold the shared App's key. You still set
|
|
17
|
+
# GH_INSTALLATION_ID (which installation), but GH_PRIVATE_KEY_PATH /
|
|
18
|
+
# HOST_GH_PRIVATE_KEY are not required in relay mode.
|
|
19
|
+
# PROPR_GH_RELAY_URL — https URL of the relay (http only allowed for localhost)
|
|
20
|
+
# PROPR_GH_RELAY_TOKEN — the durable relay credential issued for your install
|
|
21
|
+
# PROPR_GH_RELAY_URL=https://relay.propr.dev
|
|
22
|
+
# PROPR_GH_RELAY_TOKEN=your_relay_token
|
|
23
|
+
# Optional: force a mode explicitly instead of inferring (app | relay | demo).
|
|
24
|
+
# GH_AUTH_MODE=relay
|
|
25
|
+
|
|
26
|
+
# Logging Configuration
|
|
27
|
+
LOG_LEVEL=info
|
|
28
|
+
NODE_ENV=development
|
|
29
|
+
|
|
30
|
+
# Daemon Configuration
|
|
31
|
+
GITHUB_REPOS_TO_MONITOR=owner/repo1,owner/repo2
|
|
32
|
+
POLLING_INTERVAL_MS=60000
|
|
33
|
+
|
|
34
|
+
# Config Repository (for dynamic repository management)
|
|
35
|
+
CONFIG_REPO=https://github.com/integry/gitfix-config.git
|
|
36
|
+
|
|
37
|
+
# Issue Detection Configuration
|
|
38
|
+
PRIMARY_PROCESSING_LABELS=AI,propr
|
|
39
|
+
PR_LABEL=propr
|
|
40
|
+
|
|
41
|
+
# Redis Configuration
|
|
42
|
+
REDIS_HOST=127.0.0.1
|
|
43
|
+
REDIS_PORT=6379
|
|
44
|
+
|
|
45
|
+
# Queue Configuration
|
|
46
|
+
GITHUB_ISSUE_QUEUE_NAME=github-issue-processor
|
|
47
|
+
WORKER_CONCURRENCY=2
|
|
48
|
+
COMMENT_BATCH_DELAY_MS=3000
|
|
49
|
+
|
|
50
|
+
# Webhook Configuration
|
|
51
|
+
# Webhooks are received by the dashboard API service (port 4000)
|
|
52
|
+
ENABLE_GITHUB_WEBHOOKS=false
|
|
53
|
+
GH_WEBHOOK_SECRET=your-webhook-secret
|
|
54
|
+
|
|
55
|
+
# System Task Authorization
|
|
56
|
+
# Secret used to sign system task requests (e.g., revert operations)
|
|
57
|
+
# Generate with: openssl rand -hex 32
|
|
58
|
+
SYSTEM_TASK_SECRET=
|
|
59
|
+
# Maximum age (ms) for signed system task tokens. Increase if jobs frequently expire
|
|
60
|
+
# due to queue backlog or worker downtime. Defaults to 7200000 (2 hours).
|
|
61
|
+
# SYSTEM_TASK_TOKEN_MAX_AGE_MS=7200000
|
|
62
|
+
|
|
63
|
+
# Worker Configuration
|
|
64
|
+
|
|
65
|
+
# PR Comment Monitoring Configuration
|
|
66
|
+
GITHUB_BOT_USERNAME=your_bot_username
|
|
67
|
+
GITHUB_USER_WHITELIST=
|
|
68
|
+
GITHUB_USER_BLACKLIST=
|
|
69
|
+
PR_FOLLOWUP_TRIGGER_KEYWORDS=!propr
|
|
70
|
+
|
|
71
|
+
# Git Configuration
|
|
72
|
+
GIT_CLONES_BASE_PATH=/tmp/git-processor/clones
|
|
73
|
+
GIT_WORKTREES_BASE_PATH=/tmp/git-processor/worktrees
|
|
74
|
+
GIT_DEFAULT_BRANCH=main
|
|
75
|
+
GIT_SHALLOW_CLONE_DEPTH=
|
|
76
|
+
|
|
77
|
+
# Claude Code Configuration
|
|
78
|
+
CLAUDE_DOCKER_IMAGE=propr/agent-claude:latest
|
|
79
|
+
# Must be an absolute path — do NOT use ~ or ${HOME} (neither is expanded in
|
|
80
|
+
# .env files parsed by Node or in Docker bind mounts).
|
|
81
|
+
# CLAUDE_CONFIG_PATH=/home/your-user/.claude
|
|
82
|
+
CLAUDE_CONFIG_PATH=
|
|
83
|
+
CLAUDE_MAX_TURNS=10
|
|
84
|
+
CLAUDE_TIMEOUT_MS=300000
|
|
85
|
+
CODEX_TIMEOUT_MS=3600000
|
|
86
|
+
|
|
87
|
+
# Antigravity Configuration
|
|
88
|
+
ANTIGRAVITY_TIMEOUT_MS=300000
|
|
89
|
+
|
|
90
|
+
# OpenCode Configuration
|
|
91
|
+
OPENCODE_TIMEOUT_MS=3600000
|
|
92
|
+
# Launcher credential mount paths (required when using docker/launcher).
|
|
93
|
+
# HOST_OPENCODE_XDG_DIR points to the XDG config directory
|
|
94
|
+
# (/home/your-user/.config/opencode)
|
|
95
|
+
# and takes precedence over HOST_OPENCODE_DIR.
|
|
96
|
+
# HOST_OPENCODE_DIR is accepted as a fallback alias for HOST_OPENCODE_XDG_DIR.
|
|
97
|
+
# HOST_OPENCODE_LEGACY_DIR points to the legacy /home/your-user/.opencode directory.
|
|
98
|
+
# The saved agent configPath still controls the runtime mount; the launcher
|
|
99
|
+
# sets OPENCODE_CONFIG_PATH only as the default path for worker/API processes.
|
|
100
|
+
# HOST_OPENCODE_DATA_DIR points to normal opencode auth data
|
|
101
|
+
# (/home/your-user/.local/share/opencode). Set it for launcher deployments
|
|
102
|
+
# so normal `opencode auth login` credentials are visible to spawned OpenCode
|
|
103
|
+
# agent containers and can refresh auth metadata when required.
|
|
104
|
+
# HOST_OPENCODE_XDG_DIR=/home/your-user/.config/opencode
|
|
105
|
+
# HOST_OPENCODE_DIR=/home/your-user/.config/opencode
|
|
106
|
+
# HOST_OPENCODE_LEGACY_DIR=/home/your-user/.opencode
|
|
107
|
+
# HOST_OPENCODE_DATA_DIR=/home/your-user/.local/share/opencode
|
|
108
|
+
|
|
109
|
+
# --- Mistral Vibe Configuration (only required when using a Vibe agent) ---
|
|
110
|
+
# Must be an absolute path — do NOT use ~ or ${HOME} (see CLAUDE_CONFIG_PATH note).
|
|
111
|
+
# VIBE_CONFIG_PATH=/home/your-user/.vibe
|
|
112
|
+
# Used when VIBE_CONFIG_PATH does not provide credentials.
|
|
113
|
+
# MISTRAL_API_KEY=
|
|
114
|
+
VIBE_MAX_TURNS=1000
|
|
115
|
+
VIBE_TIMEOUT_MS=3600000
|
|
116
|
+
# Production launcher only — host paths for mounting agent credential directories
|
|
117
|
+
# into containers. Omit any HOST_*_DIR to skip mounts for that agent.
|
|
118
|
+
# All HOST_*_DIR values MUST be absolute paths (no ~ or relative paths).
|
|
119
|
+
# HOST_CLAUDE_DIR=/home/your-user/.claude
|
|
120
|
+
# HOST_CODEX_DIR=/home/your-user/.codex
|
|
121
|
+
# HOST_ANTIGRAVITY_DIR=/home/your-user/.antigravity
|
|
122
|
+
# HOST_VIBE_DIR=/home/your-user/.vibe
|
|
123
|
+
# Required for Vibe Docker-outside-Docker: prompt files must be written to a
|
|
124
|
+
# host-visible directory so spawned agent containers can bind-mount them.
|
|
125
|
+
# Both should reference the same host path.
|
|
126
|
+
# NOTE: These are required whenever Vibe agents are used with the launcher
|
|
127
|
+
# (i.e. when MISTRAL_API_KEY is set), not only when HOST_VIBE_DIR is set.
|
|
128
|
+
# Create the directory before starting: mkdir -p /tmp/propr-vibe-prompts
|
|
129
|
+
# VIBE_PROMPT_CACHE_DIR=/tmp/propr-vibe-prompts
|
|
130
|
+
# HOST_VIBE_PROMPT_CACHE_DIR=/tmp/propr-vibe-prompts
|
|
131
|
+
|
|
132
|
+
# Dashboard API Configuration
|
|
133
|
+
DASHBOARD_API_PORT=4000
|
|
134
|
+
# Required in normal and demo mode for auth redirects.
|
|
135
|
+
FRONTEND_URL=http://localhost:5173
|
|
136
|
+
# Optional comma-separated redirect hosts for auth preview flows.
|
|
137
|
+
# Entries are exact host matches by default. Prefix with "." or "*." only for
|
|
138
|
+
# parent domains where every subdomain is trusted, for example .preview.example.com.
|
|
139
|
+
# FRONTEND_URL is exact-only; COOKIE_DOMAIN allows subdomains when it starts with ".".
|
|
140
|
+
# AUTH_REDIRECT_ALLOWED_HOSTS=preview.example.com
|
|
141
|
+
|
|
142
|
+
# GitHub OAuth Configuration
|
|
143
|
+
GH_OAUTH_CLIENT_ID=your_github_oauth_client_id
|
|
144
|
+
GH_OAUTH_CLIENT_SECRET=your_github_oauth_client_secret
|
|
145
|
+
GH_OAUTH_CALLBACK_URL=http://localhost:4000/api/auth/github/callback
|
|
146
|
+
SESSION_SECRET=your-session-secret-here
|
|
147
|
+
|
|
148
|
+
# Bearer Token Authentication (CLI)
|
|
149
|
+
# Set to 'false' to disable Bearer token auth and only allow session-based login
|
|
150
|
+
ENABLE_BEARER_AUTH=true
|
|
151
|
+
|
|
152
|
+
# Demo Mode
|
|
153
|
+
# Set to 'true' or '1' to allow read-only access without GitHub OAuth and block all mutating API requests.
|
|
154
|
+
# Public demo deployments should use a curated config/database.
|
|
155
|
+
PROPR_DEMO_MODE=false
|
|
156
|
+
|
|
157
|
+
# --- SQLite Database ---
|
|
158
|
+
# Path to SQLite database file (will be created if it doesn't exist)
|
|
159
|
+
DB_FILENAME=./data/propr.sqlite
|
|
160
|
+
|
|
161
|
+
# --- PR Preview Environment ---
|
|
162
|
+
# Path to staging .env file (provides base configuration for PR previews)
|
|
163
|
+
# PR-specific values (ports, API URLs) are passed as inline overrides
|
|
164
|
+
STAGING_ENV_FILE=/path/to/staging/.env
|
|
165
|
+
|
|
166
|
+
# Path to staging database file for seeding PR preview environments
|
|
167
|
+
STAGING_DB_PATH=/path/to/staging/data/propr.sqlite
|
|
168
|
+
|
|
169
|
+
# Enable preview environment routing (routes webhooks to PR preview instances)
|
|
170
|
+
ENABLE_PREVIEW_ROUTING=false
|
|
171
|
+
|
|
172
|
+
# The ProPR repository in 'owner/repo' format. Label events from this repo
|
|
173
|
+
# trigger processor assignment changes. Defaults to 'integry/propr'.
|
|
174
|
+
PROPR_REPO=integry/propr
|
|
175
|
+
|
|
176
|
+
# The label that designates a ProPR PR as the active processor for webhook routing.
|
|
177
|
+
# When this label is added to a ProPR repo PR, that PR's preview instance becomes
|
|
178
|
+
# the active processor. Defaults to 'preview-env'.
|
|
179
|
+
PROCESSOR_LABEL=preview-env
|
|
180
|
+
|
|
181
|
+
# Host address for forwarding webhooks to PR preview instances.
|
|
182
|
+
# Defaults to 'http://host.docker.internal' for Docker environments.
|
|
183
|
+
# HOST_GATEWAY_ADDRESS=http://host.docker.internal
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# GitHub App Configuration
|
|
2
|
+
GH_APP_ID=your_app_id
|
|
3
|
+
GH_PRIVATE_KEY_PATH=./path/to/your-app-private-key.pem
|
|
4
|
+
GH_INSTALLATION_ID=your_installation_id
|
|
5
|
+
|
|
6
|
+
# Host path to the GitHub App private key (.pem). Recommended when running via
|
|
7
|
+
# the `propr` CLI or launcher: the key is bind-mounted (read-only) into the app
|
|
8
|
+
# containers and GH_PRIVATE_KEY_PATH above is overridden to point at it, so you
|
|
9
|
+
# can keep the key anywhere on the host instead of staging it under data/.
|
|
10
|
+
# Must be an absolute host path (no '~').
|
|
11
|
+
# HOST_GH_PRIVATE_KEY=/home/your-user/propr/app-private-key.pem
|
|
12
|
+
|
|
13
|
+
# GitHub auth: token relay (shared-app path) — ALTERNATIVE to the App private key
|
|
14
|
+
# above. When PROPR_GH_RELAY_URL is set, the backend fetches short-lived
|
|
15
|
+
# installation tokens from a vendor-run relay instead of minting them from a
|
|
16
|
+
# private key, so you don't need to hold the shared App's key. You still set
|
|
17
|
+
# GH_INSTALLATION_ID (which installation), but GH_PRIVATE_KEY_PATH /
|
|
18
|
+
# HOST_GH_PRIVATE_KEY are not required in relay mode.
|
|
19
|
+
# PROPR_GH_RELAY_URL — https URL of the relay (http only allowed for localhost)
|
|
20
|
+
# PROPR_GH_RELAY_TOKEN — the durable relay credential issued for your install
|
|
21
|
+
# PROPR_GH_RELAY_URL=https://relay.propr.dev/v1
|
|
22
|
+
# PROPR_GH_RELAY_TOKEN=your_relay_token
|
|
23
|
+
# Optional: force a mode explicitly instead of inferring (app | relay | demo).
|
|
24
|
+
# GH_AUTH_MODE=relay
|
|
25
|
+
|
|
26
|
+
# Logging Configuration
|
|
27
|
+
LOG_LEVEL=info
|
|
28
|
+
NODE_ENV=development
|
|
29
|
+
|
|
30
|
+
# Daemon Configuration
|
|
31
|
+
GITHUB_REPOS_TO_MONITOR=owner/repo1,owner/repo2
|
|
32
|
+
POLLING_INTERVAL_MS=60000
|
|
33
|
+
|
|
34
|
+
# Config Repository (for dynamic repository management)
|
|
35
|
+
CONFIG_REPO=https://github.com/integry/gitfix-config.git
|
|
36
|
+
|
|
37
|
+
# Issue Detection Configuration
|
|
38
|
+
PRIMARY_PROCESSING_LABELS=AI,propr
|
|
39
|
+
PR_LABEL=propr
|
|
40
|
+
|
|
41
|
+
# Redis Configuration
|
|
42
|
+
REDIS_HOST=127.0.0.1
|
|
43
|
+
REDIS_PORT=6379
|
|
44
|
+
|
|
45
|
+
# Queue Configuration
|
|
46
|
+
GITHUB_ISSUE_QUEUE_NAME=github-issue-processor
|
|
47
|
+
WORKER_CONCURRENCY=2
|
|
48
|
+
COMMENT_BATCH_DELAY_MS=3000
|
|
49
|
+
|
|
50
|
+
# Summarization fallback/cooldown controls
|
|
51
|
+
# Promote the configured summarization fallback to primary after this many
|
|
52
|
+
# primary quota failures for the same agent/model. Defaults to 3.
|
|
53
|
+
# SUMMARIZATION_FALLBACK_PROMOTE_THRESHOLD=3
|
|
54
|
+
# Pause normal summarization jobs for a repository/branch after both primary
|
|
55
|
+
# and fallback paths fail. Defaults to 3600000 (1 hour).
|
|
56
|
+
# SUMMARIZATION_QUOTA_COOLDOWN_MS=3600000
|
|
57
|
+
|
|
58
|
+
# Webhook Configuration
|
|
59
|
+
# Webhooks are received by the dashboard API service (port 4000)
|
|
60
|
+
ENABLE_GITHUB_WEBHOOKS=false
|
|
61
|
+
GH_WEBHOOK_SECRET=your-webhook-secret
|
|
62
|
+
|
|
63
|
+
# System Task Authorization
|
|
64
|
+
# Secret used to sign system task requests (e.g., revert operations)
|
|
65
|
+
# Generate with: openssl rand -hex 32
|
|
66
|
+
SYSTEM_TASK_SECRET=
|
|
67
|
+
# Maximum age (ms) for signed system task tokens. Increase if jobs frequently expire
|
|
68
|
+
# due to queue backlog or worker downtime. Defaults to 7200000 (2 hours).
|
|
69
|
+
# SYSTEM_TASK_TOKEN_MAX_AGE_MS=7200000
|
|
70
|
+
|
|
71
|
+
# Worker Configuration
|
|
72
|
+
|
|
73
|
+
# PR Comment Monitoring Configuration
|
|
74
|
+
GITHUB_BOT_USERNAME=your_bot_username
|
|
75
|
+
GITHUB_USER_WHITELIST=
|
|
76
|
+
GITHUB_USER_BLACKLIST=
|
|
77
|
+
PR_FOLLOWUP_TRIGGER_KEYWORDS=!propr
|
|
78
|
+
# With a whitelist set, polling resolves who applied the trigger label from the
|
|
79
|
+
# issue timeline (page 1 + the most recent N pages). Raise this if long-lived
|
|
80
|
+
# issues with very long timelines are skipped with "Could not determine label
|
|
81
|
+
# applier". Default: 5.
|
|
82
|
+
# LABEL_APPLIER_TIMELINE_MAX_PAGES=5
|
|
83
|
+
|
|
84
|
+
# Git Configuration
|
|
85
|
+
GIT_CLONES_BASE_PATH=/tmp/git-processor/clones
|
|
86
|
+
GIT_WORKTREES_BASE_PATH=/tmp/git-processor/worktrees
|
|
87
|
+
GIT_DEFAULT_BRANCH=main
|
|
88
|
+
GIT_SHALLOW_CLONE_DEPTH=
|
|
89
|
+
|
|
90
|
+
# Claude Code Configuration
|
|
91
|
+
CLAUDE_DOCKER_IMAGE=propr/agent-claude:latest
|
|
92
|
+
# Must be an absolute path — do NOT use ~ or ${HOME} (neither is expanded in
|
|
93
|
+
# .env files parsed by Node or in Docker bind mounts).
|
|
94
|
+
# CLAUDE_CONFIG_PATH=/home/your-user/.claude
|
|
95
|
+
CLAUDE_CONFIG_PATH=
|
|
96
|
+
CLAUDE_MAX_TURNS=10
|
|
97
|
+
CLAUDE_TIMEOUT_MS=300000
|
|
98
|
+
CODEX_TIMEOUT_MS=3600000
|
|
99
|
+
|
|
100
|
+
# Antigravity Configuration
|
|
101
|
+
ANTIGRAVITY_TIMEOUT_MS=300000
|
|
102
|
+
|
|
103
|
+
# OpenCode Configuration
|
|
104
|
+
OPENCODE_TIMEOUT_MS=3600000
|
|
105
|
+
# Launcher credential mount paths (required when using docker/launcher).
|
|
106
|
+
# HOST_OPENCODE_XDG_DIR points to the XDG config directory
|
|
107
|
+
# (/home/your-user/.config/opencode)
|
|
108
|
+
# and takes precedence over HOST_OPENCODE_DIR.
|
|
109
|
+
# HOST_OPENCODE_DIR is accepted as a fallback alias for HOST_OPENCODE_XDG_DIR.
|
|
110
|
+
# HOST_OPENCODE_LEGACY_DIR points to the legacy /home/your-user/.opencode directory.
|
|
111
|
+
# The saved agent configPath still controls the runtime mount; the launcher
|
|
112
|
+
# sets OPENCODE_CONFIG_PATH only as the default path for worker/API processes.
|
|
113
|
+
# HOST_OPENCODE_DATA_DIR points to normal opencode auth data
|
|
114
|
+
# (/home/your-user/.local/share/opencode). Set it for launcher deployments
|
|
115
|
+
# so normal `opencode auth login` credentials are visible to spawned OpenCode
|
|
116
|
+
# agent containers and can refresh auth metadata when required.
|
|
117
|
+
# HOST_OPENCODE_XDG_DIR=/home/your-user/.config/opencode
|
|
118
|
+
# HOST_OPENCODE_DIR=/home/your-user/.config/opencode
|
|
119
|
+
# HOST_OPENCODE_LEGACY_DIR=/home/your-user/.opencode
|
|
120
|
+
# HOST_OPENCODE_DATA_DIR=/home/your-user/.local/share/opencode
|
|
121
|
+
|
|
122
|
+
# --- Mistral Vibe Configuration (only required when using a Vibe agent) ---
|
|
123
|
+
# Must be an absolute path — do NOT use ~ or ${HOME} (see CLAUDE_CONFIG_PATH note).
|
|
124
|
+
# VIBE_CONFIG_PATH=/home/your-user/.vibe
|
|
125
|
+
# Used when VIBE_CONFIG_PATH does not provide credentials.
|
|
126
|
+
# MISTRAL_API_KEY=
|
|
127
|
+
VIBE_MAX_TURNS=1000
|
|
128
|
+
VIBE_TIMEOUT_MS=3600000
|
|
129
|
+
# Production launcher only — host paths for mounting agent credential directories
|
|
130
|
+
# into containers. Omit any HOST_*_DIR to skip mounts for that agent.
|
|
131
|
+
# All HOST_*_DIR values MUST be absolute paths (no ~ or relative paths).
|
|
132
|
+
# HOST_CLAUDE_DIR=/home/your-user/.claude
|
|
133
|
+
# HOST_CODEX_DIR=/home/your-user/.codex
|
|
134
|
+
# Antigravity is Gemini-based and keeps its credentials under ~/.gemini, so the
|
|
135
|
+
# directory name intentionally differs from the variable name.
|
|
136
|
+
# HOST_ANTIGRAVITY_DIR=/home/your-user/.gemini
|
|
137
|
+
# HOST_VIBE_DIR=/home/your-user/.vibe
|
|
138
|
+
# Required for Vibe Docker-outside-Docker: prompt files must be written to a
|
|
139
|
+
# host-visible directory so spawned agent containers can bind-mount them.
|
|
140
|
+
# Both should reference the same host path.
|
|
141
|
+
# NOTE: These are required whenever Vibe agents are used with the launcher
|
|
142
|
+
# (i.e. when MISTRAL_API_KEY is set), not only when HOST_VIBE_DIR is set.
|
|
143
|
+
# Create the directory before starting: mkdir -p /tmp/propr-vibe-prompts
|
|
144
|
+
# VIBE_PROMPT_CACHE_DIR=/tmp/propr-vibe-prompts
|
|
145
|
+
# HOST_VIBE_PROMPT_CACHE_DIR=/tmp/propr-vibe-prompts
|
|
146
|
+
|
|
147
|
+
# Dashboard API Configuration
|
|
148
|
+
DASHBOARD_API_PORT=4000
|
|
149
|
+
# Required in normal and demo mode for auth redirects.
|
|
150
|
+
FRONTEND_URL=http://localhost:5173
|
|
151
|
+
# Optional comma-separated redirect hosts for auth preview flows.
|
|
152
|
+
# Entries are exact host matches by default. Prefix with "." or "*." only for
|
|
153
|
+
# parent domains where every subdomain is trusted, for example .preview.example.com.
|
|
154
|
+
# FRONTEND_URL is exact-only; COOKIE_DOMAIN allows subdomains when it starts with ".".
|
|
155
|
+
# AUTH_REDIRECT_ALLOWED_HOSTS=preview.example.com
|
|
156
|
+
|
|
157
|
+
# GitHub OAuth Configuration
|
|
158
|
+
GH_OAUTH_CLIENT_ID=your_github_oauth_client_id
|
|
159
|
+
GH_OAUTH_CLIENT_SECRET=your_github_oauth_client_secret
|
|
160
|
+
GH_OAUTH_CALLBACK_URL=http://localhost:4000/api/auth/github/callback
|
|
161
|
+
SESSION_SECRET=your-session-secret-here
|
|
162
|
+
|
|
163
|
+
# Bearer Token Authentication (CLI)
|
|
164
|
+
# Set to 'false' to disable Bearer token auth and only allow session-based login
|
|
165
|
+
ENABLE_BEARER_AUTH=true
|
|
166
|
+
|
|
167
|
+
# Demo Mode
|
|
168
|
+
# Set to 'true' or '1' to allow read-only access without GitHub OAuth and block all mutating API requests.
|
|
169
|
+
# Public demo deployments should use a curated config/database.
|
|
170
|
+
PROPR_DEMO_MODE=false
|
|
171
|
+
|
|
172
|
+
# --- SQLite Database ---
|
|
173
|
+
# Path to SQLite database file (will be created if it doesn't exist)
|
|
174
|
+
DB_FILENAME=./data/propr.sqlite
|
|
175
|
+
|
|
176
|
+
# --- PR Preview Environment ---
|
|
177
|
+
# Path to staging .env file (provides base configuration for PR previews)
|
|
178
|
+
# PR-specific values (ports, API URLs) are passed as inline overrides
|
|
179
|
+
STAGING_ENV_FILE=/path/to/staging/.env
|
|
180
|
+
|
|
181
|
+
# Path to staging database file for seeding PR preview environments
|
|
182
|
+
STAGING_DB_PATH=/path/to/staging/data/propr.sqlite
|
|
183
|
+
|
|
184
|
+
# Enable preview environment routing (routes webhooks to PR preview instances)
|
|
185
|
+
ENABLE_PREVIEW_ROUTING=false
|
|
186
|
+
|
|
187
|
+
# The ProPR repository in 'owner/repo' format. Label events from this repo
|
|
188
|
+
# trigger processor assignment changes. Defaults to 'integry/propr'.
|
|
189
|
+
PROPR_REPO=integry/propr
|
|
190
|
+
|
|
191
|
+
# The label that designates a ProPR PR as the active processor for webhook routing.
|
|
192
|
+
# When this label is added to a ProPR repo PR, that PR's preview instance becomes
|
|
193
|
+
# the active processor. Defaults to 'preview-env'.
|
|
194
|
+
PROCESSOR_LABEL=preview-env
|
|
195
|
+
|
|
196
|
+
# Host address for forwarding webhooks to PR preview instances.
|
|
197
|
+
# Defaults to 'http://host.docker.internal' for Docker environments.
|
|
198
|
+
# HOST_GATEWAY_ADDRESS=http://host.docker.internal
|