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.
Files changed (64) hide show
  1. package/README.md +549 -0
  2. package/dist/api/agentTank.js +27 -0
  3. package/dist/api/agents.js +201 -0
  4. package/dist/api/client.js +284 -0
  5. package/dist/api/errors.js +145 -0
  6. package/dist/api/implement.js +147 -0
  7. package/dist/api/index.js +26 -0
  8. package/dist/api/logs.js +59 -0
  9. package/dist/api/plans.js +160 -0
  10. package/dist/api/relay.js +73 -0
  11. package/dist/api/repos.js +243 -0
  12. package/dist/api/settings.js +219 -0
  13. package/dist/api/system.js +53 -0
  14. package/dist/api/tasks.js +140 -0
  15. package/dist/api/todos.js +77 -0
  16. package/dist/api/types.js +6 -0
  17. package/dist/assets/.env.example +183 -0
  18. package/dist/assets/env.example.txt +198 -0
  19. package/dist/commands/agentCommands.js +405 -0
  20. package/dist/commands/checkCommands.js +384 -0
  21. package/dist/commands/implementCommands.js +178 -0
  22. package/dist/commands/index.js +22 -0
  23. package/dist/commands/initCommands.js +167 -0
  24. package/dist/commands/initStack.js +193 -0
  25. package/dist/commands/logCommands.js +170 -0
  26. package/dist/commands/planCommands.js +552 -0
  27. package/dist/commands/relayCommands.js +149 -0
  28. package/dist/commands/repoCommands.js +526 -0
  29. package/dist/commands/settingCommands.js +237 -0
  30. package/dist/commands/stackCommands.js +86 -0
  31. package/dist/commands/startCommand.js +36 -0
  32. package/dist/commands/systemCommands.js +221 -0
  33. package/dist/commands/tankCommands.js +55 -0
  34. package/dist/commands/taskCommands.js +554 -0
  35. package/dist/commands/todoCommands.js +620 -0
  36. package/dist/commands/uiDocsCommands.js +69 -0
  37. package/dist/config/ConfigManager.js +360 -0
  38. package/dist/config/index.js +8 -0
  39. package/dist/config/types.js +16 -0
  40. package/dist/index.js +276 -0
  41. package/dist/orchestrator/format.js +31 -0
  42. package/dist/orchestrator/index.js +102 -0
  43. package/dist/orchestrator/manifest.json +16 -0
  44. package/dist/orchestrator/orchestrator.mjs +798 -0
  45. package/dist/orchestrator/types.js +10 -0
  46. package/dist/tui/StartApp.js +175 -0
  47. package/dist/tui/app.js +9 -0
  48. package/dist/tui/render.js +87 -0
  49. package/dist/utils/envFile.js +65 -0
  50. package/dist/utils/index.js +8 -0
  51. package/dist/utils/io.js +186 -0
  52. package/dist/utils/parseState.js +14 -0
  53. package/dist/utils/resolveProject.js +50 -0
  54. package/dist/vendor/shared/demoMode.js +6 -0
  55. package/dist/vendor/shared/events.js +30 -0
  56. package/dist/vendor/shared/githubAuthMode.js +35 -0
  57. package/dist/vendor/shared/index.js +15 -0
  58. package/dist/vendor/shared/labelUtils.js +32 -0
  59. package/dist/vendor/shared/modelDefinitions.js +146 -0
  60. package/dist/vendor/shared/reviewPrompt.js +18 -0
  61. package/dist/vendor/shared/usageTypes.js +13 -0
  62. package/dist/vendor/shared/userWhitelist.js +30 -0
  63. package/dist/vendor/shared/validateRelayUrl.js +21 -0
  64. 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,6 @@
1
+ /**
2
+ * API Client Types
3
+ *
4
+ * Type definitions for the CLI API client.
5
+ */
6
+ export {};
@@ -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