@profoundlogic/coderflow-server 0.4.8 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/README.md +9 -1
  2. package/dist/README.md +9 -1
  3. package/dist/base-image/Dockerfile +5 -3
  4. package/dist/base-image/entrypoint.sh +76 -2
  5. package/dist/coder-server.js +1 -1
  6. package/dist/config.js +1 -1
  7. package/dist/lib/agent-keepalive.js +1 -1
  8. package/dist/lib/agent-models.js +1 -1
  9. package/dist/lib/api-keys.js +1 -1
  10. package/dist/lib/apiKeys.js +1 -1
  11. package/dist/lib/app-server-ports.js +1 -1
  12. package/dist/lib/auto-judge.js +1 -1
  13. package/dist/lib/automation-service.js +1 -1
  14. package/dist/lib/basic-auth.js +1 -1
  15. package/dist/lib/bindings.js +1 -1
  16. package/dist/lib/build-history.js +1 -1
  17. package/dist/lib/build-output-service.js +1 -1
  18. package/dist/lib/build-scheduler.js +1 -1
  19. package/dist/lib/build-service.js +1 -1
  20. package/dist/lib/ca-certificates.js +1 -1
  21. package/dist/lib/claude-oauth-refresh.js +1 -1
  22. package/dist/lib/cli/build.js +1 -1
  23. package/dist/lib/cli/config-command.js +1 -1
  24. package/dist/lib/cli/config.js +1 -1
  25. package/dist/lib/cli/create-user.js +1 -1
  26. package/dist/lib/cli/init.js +1 -1
  27. package/dist/lib/cli/jira.js +1 -1
  28. package/dist/lib/cli/license.js +1 -1
  29. package/dist/lib/cli/migrate-rbac.js +1 -0
  30. package/dist/lib/cli/server-manager.js +1 -1
  31. package/dist/lib/config-migration.js +1 -1
  32. package/dist/lib/container-credential-sync.js +1 -1
  33. package/dist/lib/container-tokens.js +1 -1
  34. package/dist/lib/data-dir.js +1 -1
  35. package/dist/lib/deployment-history.js +1 -1
  36. package/dist/lib/deployment-service.js +1 -1
  37. package/dist/lib/docker-utils.js +1 -1
  38. package/dist/lib/email.js +1 -1
  39. package/dist/lib/emailTemplates.js +1 -1
  40. package/dist/lib/entitlement.js +1 -1
  41. package/dist/lib/external-connections.js +1 -0
  42. package/dist/lib/fetch-utils.js +1 -1
  43. package/dist/lib/git-commit-details-route.js +1 -1
  44. package/dist/lib/git-history-diff-guardrails.js +1 -1
  45. package/dist/lib/git-provider-service.js +1 -1
  46. package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
  47. package/dist/lib/git-provider-setup/index.js +1 -1
  48. package/dist/lib/git-provider-setup/setup-factory.js +1 -1
  49. package/dist/lib/git-provider-setup/setup-interface.js +1 -1
  50. package/dist/lib/git-providers/azure-devops-provider.js +1 -1
  51. package/dist/lib/git-providers/github-app-provider.js +1 -1
  52. package/dist/lib/git-providers/index.js +1 -1
  53. package/dist/lib/git-providers/provider-factory.js +1 -1
  54. package/dist/lib/git-providers/provider-interface.js +1 -1
  55. package/dist/lib/github-urls.js +1 -1
  56. package/dist/lib/group-objective-linking.js +1 -1
  57. package/dist/lib/jira-client.js +1 -1
  58. package/dist/lib/judge-blinding.js +1 -1
  59. package/dist/lib/logger.js +1 -1
  60. package/dist/lib/migration-to-scoped-rbac.js +1 -1
  61. package/dist/lib/model-fetcher.js +1 -1
  62. package/dist/lib/notifications.js +1 -1
  63. package/dist/lib/objective-context.js +1 -1
  64. package/dist/lib/oidc-auth.js +1 -1
  65. package/dist/lib/oidc-device-flow.js +1 -1
  66. package/dist/lib/passwordTokens.js +1 -1
  67. package/dist/lib/permission-resolver.js +1 -1
  68. package/dist/lib/pin-cascade.js +1 -1
  69. package/dist/lib/provider-accounts.js +1 -1
  70. package/dist/lib/provider-oauth.js +1 -1
  71. package/dist/lib/provider-profile.js +1 -1
  72. package/dist/lib/provider-token-refresh.js +1 -1
  73. package/dist/lib/rbac-user-state.js +1 -0
  74. package/dist/lib/request-url.js +1 -1
  75. package/dist/lib/rewind.js +1 -1
  76. package/dist/lib/role-definitions.js +1 -1
  77. package/dist/lib/roles.js +1 -1
  78. package/dist/lib/scoped-rbac-migration-runner.js +1 -0
  79. package/dist/lib/secrets.js +1 -1
  80. package/dist/lib/setup-repo-git-auth.js +1 -1
  81. package/dist/lib/state-capture.js +1 -1
  82. package/dist/lib/static-files.js +1 -1
  83. package/dist/lib/task-name-format.js +1 -1
  84. package/dist/lib/task-name-generator.js +1 -1
  85. package/dist/lib/task-source-metadata.js +1 -1
  86. package/dist/lib/teams.js +1 -1
  87. package/dist/lib/user-git-oauth.js +1 -1
  88. package/dist/lib/user-git-tokens.js +1 -1
  89. package/dist/lib/users.js +1 -1
  90. package/dist/middleware/requireAuth.js +1 -1
  91. package/dist/middleware/requireInit.js +1 -1
  92. package/dist/middleware/requirePermission.js +1 -1
  93. package/dist/package.json +2 -1
  94. package/dist/playwright.config.js +1 -1
  95. package/dist/routes/apiKeys.js +1 -1
  96. package/dist/routes/auth-oidc.js +1 -1
  97. package/dist/routes/auth.js +1 -1
  98. package/dist/routes/automations.js +1 -1
  99. package/dist/routes/bindings.js +1 -1
  100. package/dist/routes/build.js +1 -1
  101. package/dist/routes/containers.js +1 -1
  102. package/dist/routes/deploy-task.js +1 -1
  103. package/dist/routes/environment-management.js +1 -1
  104. package/dist/routes/environments.js +1 -1
  105. package/dist/routes/external-skills.js +1 -1
  106. package/dist/routes/git-credentials.js +1 -1
  107. package/dist/routes/git-oauth.js +1 -1
  108. package/dist/routes/git-provider-setup.js +1 -1
  109. package/dist/routes/health.js +1 -1
  110. package/dist/routes/jira.js +1 -1
  111. package/dist/routes/objective-management.js +1 -1
  112. package/dist/routes/password.js +1 -1
  113. package/dist/routes/prompt.js +1 -1
  114. package/dist/routes/provider-auth.js +1 -1
  115. package/dist/routes/qa.js +1 -1
  116. package/dist/routes/roles.js +1 -1
  117. package/dist/routes/settings.js +1 -1
  118. package/dist/routes/skill-management.js +1 -1
  119. package/dist/routes/skills.js +1 -1
  120. package/dist/routes/tasks.js +1 -1
  121. package/dist/routes/teams.js +1 -1
  122. package/dist/routes/templates.js +1 -1
  123. package/dist/routes/test-task.js +1 -1
  124. package/dist/routes/test.js +1 -1
  125. package/dist/routes/users.js +1 -1
  126. package/dist/routes/visualizations.js +1 -1
  127. package/dist/scripts/create-user.js +1 -1
  128. package/dist/scripts/migrate-config-to-data-dir.js +1 -1
  129. package/dist/scripts/migrate-to-scoped-rbac.js +1 -1
  130. package/dist/start.js +1 -1
  131. package/dist/web-ui/public/activity-detail-modal.js +1 -1
  132. package/dist/web-ui/public/activity-feed.js +1 -1
  133. package/dist/web-ui/public/activity-formatters.js +1 -1
  134. package/dist/web-ui/public/agent-event-parser.js +1 -1
  135. package/dist/web-ui/public/app.js +1 -1
  136. package/dist/web-ui/public/approve-dialog.js +1 -1
  137. package/dist/web-ui/public/automation-links.js +1 -1
  138. package/dist/web-ui/public/automation-schedule.js +1 -1
  139. package/dist/web-ui/public/comments-widget.js +1 -1
  140. package/dist/web-ui/public/diff-utils.js +1 -1
  141. package/dist/web-ui/public/docs/admin/environments.md +75 -0
  142. package/dist/web-ui/public/docs/admin/installation.md +9 -1
  143. package/dist/web-ui/public/environments.css +356 -0
  144. package/dist/web-ui/public/environments.html +316 -0
  145. package/dist/web-ui/public/environments.js +1 -1
  146. package/dist/web-ui/public/feedback-widget.js +1 -1
  147. package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
  148. package/dist/web-ui/public/git-history.js +1 -1
  149. package/dist/web-ui/public/git-status.js +1 -1
  150. package/dist/web-ui/public/index.js +1 -1
  151. package/dist/web-ui/public/login.js +1 -1
  152. package/dist/web-ui/public/markdown-editor.js +1 -1
  153. package/dist/web-ui/public/markdown-file-editor.js +1 -1
  154. package/dist/web-ui/public/modal-maximize.js +1 -1
  155. package/dist/web-ui/public/notifications.js +1 -1
  156. package/dist/web-ui/public/pr-dialog.js +1 -1
  157. package/dist/web-ui/public/roles.js +1 -1
  158. package/dist/web-ui/public/server-health.js +1 -1
  159. package/dist/web-ui/public/settings.html +1 -2
  160. package/dist/web-ui/public/settings.js +1 -1
  161. package/dist/web-ui/public/setup-password.js +1 -1
  162. package/dist/web-ui/public/skills.js +1 -1
  163. package/dist/web-ui/public/sse-client.js +1 -1
  164. package/dist/web-ui/public/sse-shared-worker.js +1 -1
  165. package/dist/web-ui/public/styles.css +78 -7
  166. package/dist/web-ui/public/task.html +24 -0
  167. package/dist/web-ui/public/task.js +1 -1
  168. package/dist/web-ui/public/teams.js +1 -1
  169. package/dist/web-ui/public/terminal.js +1 -1
  170. package/dist/web-ui/public/theme.js +1 -1
  171. package/dist/web-ui/public/users.js +1 -1
  172. package/dist/web-ui/public/variant-grouping.js +1 -1
  173. package/package.json +2 -1
@@ -98,6 +98,12 @@ coder-server init mycompany-coder-setup
98
98
 
99
99
  This creates a `mycompany-coder-setup` directory with the required structure and initializes it as a git repository.
100
100
 
101
+ Then configure the server to locate the setup directory using a command like this, specifying the path to the setup directory:
102
+
103
+ ```bash
104
+ coder-server config set coder_setup_path mycompany-coder-setup
105
+ ```
106
+
101
107
  ### Install License
102
108
 
103
109
  ```bash
@@ -107,11 +113,13 @@ coder-server license set <your-license-key>
107
113
  ### Create Admin User
108
114
 
109
115
  ```bash
110
- coder-server create-user --username=admin --email=admin@example.com --name="Admin User" --role=admin
116
+ coder-server create-user --username=admin --email=admin@example.com --name="Admin User" --admin
111
117
  ```
112
118
 
113
119
  You'll be prompted to set a password.
114
120
 
121
+ On a brand-new install, the first created account is automatically granted Server Admin even without `--admin` (this policy is enforced in the shared user service, so it applies across CLI/API/OIDC auto-provisioning paths).
122
+
115
123
  ### Optional: Configure Server Listen Port and SSL
116
124
 
117
125
  By default the server listens on port 3000. To configure an alternate port (e.g. 443):
@@ -4097,6 +4097,362 @@ code {
4097
4097
  border: 1px solid rgba(239, 68, 68, 0.25);
4098
4098
  }
4099
4099
 
4100
+ /* ============================================================
4101
+ EXTERNAL CONNECTIONS
4102
+ ============================================================ */
4103
+
4104
+ .connections-list {
4105
+ display: flex;
4106
+ flex-direction: column;
4107
+ gap: 8px;
4108
+ }
4109
+
4110
+ .connections-empty {
4111
+ text-align: center;
4112
+ padding: 24px;
4113
+ }
4114
+
4115
+ .connection-item {
4116
+ display: grid;
4117
+ grid-template-columns: 1fr auto auto;
4118
+ align-items: center;
4119
+ gap: 16px;
4120
+ padding: 12px 16px;
4121
+ border: 1px solid var(--color-border);
4122
+ border-radius: var(--radius-medium, 8px);
4123
+ background: var(--color-surface, #fff);
4124
+ }
4125
+
4126
+ .connection-item:hover {
4127
+ border-color: var(--color-border-hover, var(--color-border));
4128
+ }
4129
+
4130
+ .connection-info {
4131
+ display: flex;
4132
+ flex-direction: column;
4133
+ gap: 4px;
4134
+ min-width: 0;
4135
+ }
4136
+
4137
+ .connection-name {
4138
+ font-family: var(--font-mono, monospace);
4139
+ font-weight: 600;
4140
+ font-size: 14px;
4141
+ }
4142
+
4143
+ .connection-meta {
4144
+ display: flex;
4145
+ flex-wrap: wrap;
4146
+ gap: 8px;
4147
+ align-items: center;
4148
+ font-size: 12px;
4149
+ }
4150
+
4151
+ .connection-type-badge {
4152
+ display: inline-block;
4153
+ padding: 2px 8px;
4154
+ border-radius: 4px;
4155
+ font-size: 11px;
4156
+ font-weight: 600;
4157
+ text-transform: uppercase;
4158
+ letter-spacing: 0.5px;
4159
+ }
4160
+
4161
+ .connection-type-badge.sqlserver {
4162
+ background: rgba(59, 130, 246, 0.15);
4163
+ color: #3b82f6;
4164
+ }
4165
+
4166
+ .connection-type-badge.ibmi {
4167
+ background: rgba(139, 92, 246, 0.15);
4168
+ color: #8b5cf6;
4169
+ }
4170
+
4171
+ .connection-type-badge.ssh {
4172
+ background: rgba(34, 197, 94, 0.15);
4173
+ color: #22c55e;
4174
+ }
4175
+
4176
+ .connection-feature-tag {
4177
+ display: inline-block;
4178
+ padding: 1px 6px;
4179
+ border: 1px solid var(--color-border);
4180
+ border-radius: 3px;
4181
+ font-size: 11px;
4182
+ color: var(--color-text-muted);
4183
+ }
4184
+
4185
+ .connection-description {
4186
+ color: var(--color-text-muted);
4187
+ white-space: nowrap;
4188
+ overflow: hidden;
4189
+ text-overflow: ellipsis;
4190
+ max-width: 250px;
4191
+ }
4192
+
4193
+ .connection-host {
4194
+ font-family: var(--font-mono, monospace);
4195
+ font-size: 12px;
4196
+ color: var(--color-text-muted);
4197
+ white-space: nowrap;
4198
+ overflow: hidden;
4199
+ text-overflow: ellipsis;
4200
+ }
4201
+
4202
+ .connection-actions {
4203
+ display: flex;
4204
+ gap: 4px;
4205
+ }
4206
+
4207
+ .connection-edit,
4208
+ .connection-delete {
4209
+ background: none;
4210
+ border: none;
4211
+ padding: 4px 8px;
4212
+ cursor: pointer;
4213
+ color: var(--color-text-muted);
4214
+ border-radius: var(--radius-small);
4215
+ font-size: 14px;
4216
+ transition: all 0.2s;
4217
+ }
4218
+
4219
+ .connection-edit:hover {
4220
+ color: var(--color-accent);
4221
+ background: var(--color-surface-muted);
4222
+ }
4223
+
4224
+ .connection-delete:hover {
4225
+ color: var(--color-error, #ef4444);
4226
+ background: rgba(239, 68, 68, 0.1);
4227
+ }
4228
+
4229
+ /* Connection modal styles */
4230
+
4231
+ .modal-large {
4232
+ max-width: 640px;
4233
+ }
4234
+
4235
+ .radio-group {
4236
+ display: flex;
4237
+ gap: 16px;
4238
+ flex-wrap: wrap;
4239
+ }
4240
+
4241
+ .radio-label {
4242
+ display: flex;
4243
+ align-items: center;
4244
+ gap: 6px;
4245
+ cursor: pointer;
4246
+ font-size: 14px;
4247
+ }
4248
+
4249
+ .radio-label input[type="radio"] {
4250
+ width: 16px;
4251
+ height: 16px;
4252
+ cursor: pointer;
4253
+ }
4254
+
4255
+ .input-with-toggle {
4256
+ display: flex;
4257
+ gap: 4px;
4258
+ align-items: stretch;
4259
+ }
4260
+
4261
+ .input-with-toggle .form-input {
4262
+ flex: 1;
4263
+ }
4264
+
4265
+ .checkbox-group {
4266
+ display: flex;
4267
+ gap: 16px;
4268
+ flex-wrap: wrap;
4269
+ }
4270
+
4271
+ .checkbox-label {
4272
+ display: flex;
4273
+ align-items: center;
4274
+ gap: 6px;
4275
+ cursor: pointer;
4276
+ font-size: 14px;
4277
+ }
4278
+
4279
+ .checkbox-label input[type="checkbox"] {
4280
+ width: 16px;
4281
+ height: 16px;
4282
+ cursor: pointer;
4283
+ }
4284
+
4285
+ .checkbox-label input[type="checkbox"]:disabled {
4286
+ opacity: 0.5;
4287
+ cursor: not-allowed;
4288
+ }
4289
+
4290
+ .textarea-actions {
4291
+ display: flex;
4292
+ gap: 8px;
4293
+ align-items: center;
4294
+ margin-top: 6px;
4295
+ }
4296
+
4297
+ #connection-ssh-settings > .form-row + .form-row,
4298
+ #connection-pui-settings > .form-row + .form-row {
4299
+ margin-top: 16px;
4300
+ }
4301
+
4302
+ .textarea-actions button {
4303
+ white-space: nowrap;
4304
+ }
4305
+
4306
+ .info-bubble {
4307
+ display: inline-flex;
4308
+ align-items: center;
4309
+ justify-content: center;
4310
+ width: 16px;
4311
+ height: 16px;
4312
+ font-size: 11px;
4313
+ border-radius: 50%;
4314
+ background: var(--color-surface-muted);
4315
+ color: var(--color-text-muted);
4316
+ cursor: help;
4317
+ margin-left: 4px;
4318
+ }
4319
+
4320
+ .form-help {
4321
+ font-size: 12px;
4322
+ margin-top: 2px;
4323
+ }
4324
+
4325
+ .help-link {
4326
+ font-size: 13px;
4327
+ color: var(--color-accent);
4328
+ text-decoration: none;
4329
+ }
4330
+
4331
+ .help-link:hover {
4332
+ text-decoration: underline;
4333
+ }
4334
+
4335
+ .connection-test-actions {
4336
+ display: flex;
4337
+ gap: 8px;
4338
+ align-items: center;
4339
+ }
4340
+
4341
+ .connection-test-actions .status-text {
4342
+ font-size: 12px;
4343
+ color: var(--color-text-muted);
4344
+ }
4345
+
4346
+ .connection-test-result {
4347
+ margin-top: 8px;
4348
+ padding: 10px 14px;
4349
+ border-radius: var(--radius-medium);
4350
+ font-size: 13px;
4351
+ background: var(--color-surface-muted);
4352
+ border: 1px solid var(--color-border);
4353
+ }
4354
+
4355
+ .connection-test-result.success {
4356
+ background: var(--color-success-bg, rgba(34, 197, 94, 0.1));
4357
+ border-color: var(--color-success, #22c55e);
4358
+ color: var(--color-success, #22c55e);
4359
+ }
4360
+
4361
+ .connection-test-result.error {
4362
+ background: var(--color-error-bg, rgba(239, 68, 68, 0.1));
4363
+ border-color: var(--color-error, #ef4444);
4364
+ color: var(--color-error, #ef4444);
4365
+ }
4366
+
4367
+ .connection-test-result .test-result-title {
4368
+ font-weight: 600;
4369
+ }
4370
+
4371
+ .connection-test-result .test-result-detail {
4372
+ margin-top: 4px;
4373
+ font-size: 12px;
4374
+ font-family: var(--font-mono, monospace);
4375
+ opacity: 0.85;
4376
+ word-break: break-word;
4377
+ }
4378
+
4379
+ .code-block {
4380
+ background: var(--color-surface-muted);
4381
+ border: 1px solid var(--color-border);
4382
+ border-radius: var(--radius-medium, 8px);
4383
+ padding: 8px;
4384
+ font-family: var(--font-mono, monospace);
4385
+ font-size: 12px;
4386
+ line-height: 1.6;
4387
+ overflow-x: auto;
4388
+ margin: 12px 0;
4389
+ display: flex;
4390
+ flex-direction: column;
4391
+ gap: 4px;
4392
+ }
4393
+
4394
+ .command-line {
4395
+ display: flex;
4396
+ align-items: flex-start;
4397
+ gap: 8px;
4398
+ padding: 6px 8px;
4399
+ border-radius: var(--radius-small, 4px);
4400
+ transition: background 0.15s;
4401
+ }
4402
+
4403
+ .command-line:hover {
4404
+ background: var(--color-surface-hover, rgba(0, 0, 0, 0.04));
4405
+ }
4406
+
4407
+ .command-line code {
4408
+ flex: 1;
4409
+ white-space: pre-wrap;
4410
+ word-break: break-word;
4411
+ user-select: text;
4412
+ }
4413
+
4414
+ .command-line .copy-btn {
4415
+ flex-shrink: 0;
4416
+ opacity: 0;
4417
+ transition: opacity 0.15s;
4418
+ padding: 2px;
4419
+ color: var(--color-text-muted);
4420
+ }
4421
+
4422
+ .command-line:hover .copy-btn {
4423
+ opacity: 1;
4424
+ }
4425
+
4426
+ .helper-notes {
4427
+ font-size: 13px;
4428
+ color: var(--color-text-muted);
4429
+ }
4430
+
4431
+ .helper-notes ul {
4432
+ margin: 8px 0;
4433
+ padding-left: 20px;
4434
+ }
4435
+
4436
+ .helper-notes li {
4437
+ margin-bottom: 4px;
4438
+ }
4439
+
4440
+ .connection-banner {
4441
+ background: rgba(63, 114, 255, 0.08);
4442
+ border: 1px solid rgba(63, 114, 255, 0.3);
4443
+ border-left: 3px solid var(--color-accent);
4444
+ border-radius: 6px;
4445
+ padding: 10px 14px;
4446
+ margin-bottom: 16px;
4447
+ font-size: 13px;
4448
+ color: var(--color-text-secondary);
4449
+ }
4450
+
4451
+ .connection-hint {
4452
+ color: var(--color-text-muted);
4453
+ font-style: italic;
4454
+ }
4455
+
4100
4456
  /* ============================================================
4101
4457
  AUTOMATIONS TAB
4102
4458
  ============================================================ */