@profoundlogic/coderflow-server 0.2.1 → 0.2.4

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 (147) hide show
  1. package/dist/base-image/Dockerfile +3 -0
  2. package/dist/base-image/agent-wrapper.sh +31 -9
  3. package/dist/coder-server.js +1 -1
  4. package/dist/config/cli-models.json +11 -3
  5. package/dist/config.js +1 -1
  6. package/dist/lib/agent-keepalive.js +1 -1
  7. package/dist/lib/api-keys.js +1 -1
  8. package/dist/lib/apiKeys.js +1 -1
  9. package/dist/lib/app-server-ports.js +1 -0
  10. package/dist/lib/auto-judge.js +1 -1
  11. package/dist/lib/basic-auth.js +1 -1
  12. package/dist/lib/build-history.js +1 -1
  13. package/dist/lib/build-output-service.js +1 -1
  14. package/dist/lib/build-scheduler.js +1 -1
  15. package/dist/lib/build-service.js +1 -1
  16. package/dist/lib/ca-certificates.js +1 -0
  17. package/dist/lib/claude-oauth-refresh.js +1 -1
  18. package/dist/lib/cli/build.js +1 -1
  19. package/dist/lib/cli/config-command.js +1 -1
  20. package/dist/lib/cli/config.js +1 -1
  21. package/dist/lib/cli/create-user.js +1 -1
  22. package/dist/lib/cli/init.js +1 -1
  23. package/dist/lib/cli/jira.js +1 -1
  24. package/dist/lib/cli/license.js +1 -1
  25. package/dist/lib/cli/server-manager.js +1 -1
  26. package/dist/lib/container-tokens.js +1 -1
  27. package/dist/lib/data-dir.js +1 -1
  28. package/dist/lib/deployment-history.js +1 -1
  29. package/dist/lib/deployment-service.js +1 -1
  30. package/dist/lib/docker-utils.js +1 -1
  31. package/dist/lib/email.js +1 -1
  32. package/dist/lib/emailTemplates.js +1 -1
  33. package/dist/lib/entitlement.js +1 -1
  34. package/dist/lib/fetch-utils.js +1 -1
  35. package/dist/lib/git-provider-service.js +1 -1
  36. package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
  37. package/dist/lib/git-provider-setup/index.js +1 -1
  38. package/dist/lib/git-provider-setup/setup-factory.js +1 -1
  39. package/dist/lib/git-provider-setup/setup-interface.js +1 -1
  40. package/dist/lib/git-providers/azure-devops-provider.js +1 -1
  41. package/dist/lib/git-providers/github-app-provider.js +1 -1
  42. package/dist/lib/git-providers/index.js +1 -1
  43. package/dist/lib/git-providers/provider-factory.js +1 -1
  44. package/dist/lib/git-providers/provider-interface.js +1 -1
  45. package/dist/lib/github-urls.js +1 -0
  46. package/dist/lib/jira-client.js +1 -1
  47. package/dist/lib/logger.js +1 -1
  48. package/dist/lib/model-fetcher.js +1 -1
  49. package/dist/lib/notifications.js +1 -1
  50. package/dist/lib/oidc-auth.js +1 -1
  51. package/dist/lib/oidc-device-flow.js +1 -1
  52. package/dist/lib/passwordTokens.js +1 -1
  53. package/dist/lib/pin-cascade.js +1 -1
  54. package/dist/lib/provider-accounts.js +1 -1
  55. package/dist/lib/provider-oauth.js +1 -1
  56. package/dist/lib/provider-profile.js +1 -1
  57. package/dist/lib/provider-token-refresh.js +1 -1
  58. package/dist/lib/request-url.js +1 -0
  59. package/dist/lib/rewind.js +1 -0
  60. package/dist/lib/roles.js +1 -1
  61. package/dist/lib/secrets.js +1 -1
  62. package/dist/lib/setup-repo-git-auth.js +1 -0
  63. package/dist/lib/state-capture.js +1 -1
  64. package/dist/lib/static-files.js +1 -1
  65. package/dist/lib/task-name-generator.js +1 -1
  66. package/dist/lib/user-git-oauth.js +1 -0
  67. package/dist/lib/user-git-tokens.js +1 -0
  68. package/dist/lib/users.js +1 -1
  69. package/dist/middleware/requireAuth.js +1 -1
  70. package/dist/middleware/requireInit.js +1 -1
  71. package/dist/middleware/requirePermission.js +1 -1
  72. package/dist/package.json +1 -1
  73. package/dist/routes/apiKeys.js +1 -1
  74. package/dist/routes/auth-oidc.js +1 -1
  75. package/dist/routes/auth.js +1 -1
  76. package/dist/routes/build.js +1 -1
  77. package/dist/routes/containers.js +1 -1
  78. package/dist/routes/deploy-task.js +1 -1
  79. package/dist/routes/environment-management.js +1 -1
  80. package/dist/routes/environments.js +1 -1
  81. package/dist/routes/external-skills.js +1 -1
  82. package/dist/routes/git-credentials.js +1 -1
  83. package/dist/routes/git-oauth.js +1 -0
  84. package/dist/routes/git-provider-setup.js +1 -1
  85. package/dist/routes/health.js +1 -1
  86. package/dist/routes/jira.js +1 -1
  87. package/dist/routes/objective-management.js +1 -1
  88. package/dist/routes/password.js +1 -1
  89. package/dist/routes/prompt.js +1 -1
  90. package/dist/routes/provider-auth.js +1 -1
  91. package/dist/routes/qa.js +1 -1
  92. package/dist/routes/settings.js +1 -1
  93. package/dist/routes/skill-management.js +1 -1
  94. package/dist/routes/skills.js +1 -1
  95. package/dist/routes/tasks.js +1 -1
  96. package/dist/routes/templates.js +1 -1
  97. package/dist/routes/test-task.js +1 -1
  98. package/dist/routes/test.js +1 -1
  99. package/dist/routes/users.js +1 -1
  100. package/dist/routes/visualizations.js +1 -1
  101. package/dist/scripts/create-user.js +1 -1
  102. package/dist/start.js +1 -1
  103. package/dist/web-ui/public/activity-detail-modal.js +1 -1
  104. package/dist/web-ui/public/activity-feed.js +1 -1
  105. package/dist/web-ui/public/activity-formatters.js +1 -1
  106. package/dist/web-ui/public/agent-event-parser.js +1 -1
  107. package/dist/web-ui/public/app.js +1 -1
  108. package/dist/web-ui/public/approve-dialog.js +1 -1
  109. package/dist/web-ui/public/comments-widget.js +1 -1
  110. package/dist/web-ui/public/diff-utils.js +1 -0
  111. package/dist/web-ui/public/docs/_sidebar.md +1 -0
  112. package/dist/web-ui/public/docs/admin/ca-certificates.md +33 -0
  113. package/dist/web-ui/public/docs/admin/environments.md +3 -0
  114. package/dist/web-ui/public/docs/admin/git-providers.md +49 -1
  115. package/dist/web-ui/public/environments.css +173 -3
  116. package/dist/web-ui/public/environments.html +30 -9
  117. package/dist/web-ui/public/environments.js +1 -1
  118. package/dist/web-ui/public/feedback-widget.css +7 -0
  119. package/dist/web-ui/public/feedback-widget.js +1 -1
  120. package/dist/web-ui/public/git-history.html +1 -1
  121. package/dist/web-ui/public/git-history.js +1 -1
  122. package/dist/web-ui/public/git-status.js +1 -1
  123. package/dist/web-ui/public/index.html +100 -2
  124. package/dist/web-ui/public/index.js +1 -1
  125. package/dist/web-ui/public/login.js +1 -1
  126. package/dist/web-ui/public/markdown-editor.js +1 -1
  127. package/dist/web-ui/public/markdown-file-editor.js +1 -1
  128. package/dist/web-ui/public/modal-maximize.js +1 -1
  129. package/dist/web-ui/public/notifications.js +1 -1
  130. package/dist/web-ui/public/server-health.js +1 -1
  131. package/dist/web-ui/public/settings.css +264 -7
  132. package/dist/web-ui/public/settings.html +213 -8
  133. package/dist/web-ui/public/settings.js +1 -1
  134. package/dist/web-ui/public/setup-password.js +1 -1
  135. package/dist/web-ui/public/skills.css +23 -0
  136. package/dist/web-ui/public/skills.html +3 -2
  137. package/dist/web-ui/public/skills.js +1 -1
  138. package/dist/web-ui/public/sse-client.js +1 -1
  139. package/dist/web-ui/public/sse-shared-worker.js +1 -1
  140. package/dist/web-ui/public/styles.css +722 -7
  141. package/dist/web-ui/public/task.html +7 -0
  142. package/dist/web-ui/public/task.js +1 -1
  143. package/dist/web-ui/public/terminal.js +1 -1
  144. package/dist/web-ui/public/theme.js +1 -1
  145. package/dist/web-ui/public/users.js +1 -1
  146. package/dist/web-ui/public/variant-grouping.js +1 -1
  147. package/package.json +1 -1
@@ -35,6 +35,29 @@
35
35
  margin-right: 6px;
36
36
  }
37
37
 
38
+ .repo-auth-mode-badge {
39
+ margin-left: 6px;
40
+ padding: 2px 8px;
41
+ border-radius: 999px;
42
+ font-size: 11px;
43
+ font-weight: 600;
44
+ line-height: 1.3;
45
+ letter-spacing: 0.01em;
46
+ border: 1px solid transparent;
47
+ }
48
+
49
+ .repo-auth-mode-badge.auth-local {
50
+ background: rgba(100, 116, 139, 0.12);
51
+ border-color: rgba(100, 116, 139, 0.35);
52
+ color: var(--color-text-muted);
53
+ }
54
+
55
+ .repo-auth-mode-badge.auth-provider {
56
+ background: rgba(16, 185, 129, 0.12);
57
+ border-color: rgba(16, 185, 129, 0.35);
58
+ color: #0f766e;
59
+ }
60
+
38
61
  /* ============================================================
39
62
  ENVIRONMENT TABS
40
63
  ============================================================ */
@@ -1776,11 +1799,12 @@ code {
1776
1799
  list-style: none;
1777
1800
  padding: 0;
1778
1801
  margin: 0;
1779
- max-height: 200px;
1802
+ max-height: 60vh;
1803
+ overflow-x: hidden;
1780
1804
  overflow-y: auto;
1781
1805
  }
1782
1806
 
1783
- .modified-files-list li {
1807
+ .modified-files-list > li.changed-file-item {
1784
1808
  padding: 8px 12px;
1785
1809
  background: var(--color-surface-muted);
1786
1810
  border-radius: var(--radius-small);
@@ -1790,12 +1814,17 @@ code {
1790
1814
  margin-bottom: 6px;
1791
1815
  }
1792
1816
 
1793
- .modified-files-list li::before {
1817
+ .modified-files-list > li.changed-file-item::before {
1794
1818
  content: '●';
1795
1819
  color: var(--color-warning);
1796
1820
  margin-right: 8px;
1797
1821
  }
1798
1822
 
1823
+ /* Hide the bullet when file is expanded to show diff */
1824
+ .modified-files-list > li.changed-file-item.diff-expanded::before {
1825
+ color: var(--color-accent, #6366f1);
1826
+ }
1827
+
1799
1828
  .checkbox-group {
1800
1829
  display: flex;
1801
1830
  flex-direction: column;
@@ -3940,3 +3969,144 @@ code {
3940
3969
  font-weight: 600;
3941
3970
  color: var(--color-text);
3942
3971
  }
3972
+
3973
+ /* ============================================================
3974
+ INLINE FILE DIFFS IN MODALS
3975
+ ============================================================ */
3976
+
3977
+ /* Prevent horizontal overflow on modals with inline diffs */
3978
+ #uncommitted-changes-modal .modal-content,
3979
+ #commit-modal .modal-content,
3980
+ #discard-modal .modal-content {
3981
+ overflow: hidden;
3982
+ max-width: 750px;
3983
+ }
3984
+
3985
+ #uncommitted-changes-modal .modal-body,
3986
+ #commit-modal .modal-body,
3987
+ #discard-modal .modal-body {
3988
+ overflow-x: hidden;
3989
+ overflow-y: auto;
3990
+ }
3991
+
3992
+ /* Clickable changed files */
3993
+ .changed-file-clickable {
3994
+ cursor: pointer;
3995
+ transition: background 0.15s ease;
3996
+ border-radius: var(--radius-small, 4px);
3997
+ }
3998
+
3999
+ .changed-file-clickable:hover {
4000
+ background: rgba(99, 102, 241, 0.08);
4001
+ }
4002
+
4003
+ .changed-file-clickable.diff-expanded {
4004
+ background: rgba(99, 102, 241, 0.1);
4005
+ border-left: 3px solid var(--color-accent, #6366f1);
4006
+ font-weight: 600;
4007
+ }
4008
+
4009
+ /* Inline diff panel below a file in the list */
4010
+ .inline-file-diff {
4011
+ list-style: none;
4012
+ padding: 0;
4013
+ margin: 4px 0 8px 0;
4014
+ border-radius: var(--radius-small, 4px);
4015
+ overflow: hidden;
4016
+ background: none;
4017
+ }
4018
+
4019
+ .inline-file-diff::before {
4020
+ content: none;
4021
+ }
4022
+
4023
+ /* Hide the redundant file header - filename is already shown in the list item */
4024
+ .inline-file-diff .file-diff-header {
4025
+ display: none;
4026
+ }
4027
+
4028
+ /* Always show diff content in inline context (header with toggle is hidden) */
4029
+ .inline-file-diff .file-diff-content.collapsed {
4030
+ max-height: none;
4031
+ overflow: auto;
4032
+ }
4033
+
4034
+ .inline-file-diff .file-diff {
4035
+ margin-top: 0;
4036
+ border-radius: var(--radius-small, 4px);
4037
+ border: 1px solid var(--color-border, #e2e8f0);
4038
+ overflow: hidden;
4039
+ }
4040
+
4041
+ .inline-file-diff .file-diff-content {
4042
+ max-height: 350px;
4043
+ overflow: auto;
4044
+ }
4045
+
4046
+ /* Ensure diff content doesn't cause horizontal overflow on the modal */
4047
+ .inline-file-diff .diff-line {
4048
+ min-width: 0;
4049
+ }
4050
+
4051
+ .inline-file-diff .diff-line-content {
4052
+ overflow-wrap: break-word;
4053
+ word-break: break-all;
4054
+ white-space: pre-wrap;
4055
+ }
4056
+
4057
+ .inline-file-diff-loading {
4058
+ padding: 12px;
4059
+ color: var(--color-text-muted);
4060
+ font-style: italic;
4061
+ font-size: 13px;
4062
+ background: none;
4063
+ }
4064
+
4065
+ .inline-file-diff-loading::before {
4066
+ content: none;
4067
+ }
4068
+
4069
+ .inline-diff-empty {
4070
+ padding: 12px;
4071
+ color: var(--color-text-muted);
4072
+ font-style: italic;
4073
+ font-size: 13px;
4074
+ background: var(--color-surface-muted, #f5f5f5);
4075
+ border-radius: var(--radius-small, 4px);
4076
+ }
4077
+
4078
+ /* File status badge (from git-history) */
4079
+ .file-status-badge {
4080
+ display: inline-flex;
4081
+ align-items: center;
4082
+ justify-content: center;
4083
+ width: 22px;
4084
+ height: 22px;
4085
+ border-radius: 4px;
4086
+ font-size: 12px;
4087
+ font-weight: 700;
4088
+ flex-shrink: 0;
4089
+ transition: transform 0.15s ease;
4090
+ }
4091
+
4092
+ .file-diff-header:hover .file-status-badge {
4093
+ transform: scale(1.1);
4094
+ }
4095
+
4096
+ .file-status-badge.added {
4097
+ background: linear-gradient(135deg, rgba(34, 197, 94, 0.2) 0%, rgba(34, 197, 94, 0.1) 100%);
4098
+ color: var(--color-success);
4099
+ border: 1px solid rgba(34, 197, 94, 0.25);
4100
+ }
4101
+
4102
+ .file-status-badge.modified {
4103
+ background: linear-gradient(135deg, rgba(251, 191, 36, 0.2) 0%, rgba(251, 191, 36, 0.1) 100%);
4104
+ color: #f59e0b;
4105
+ border: 1px solid rgba(251, 191, 36, 0.25);
4106
+ }
4107
+
4108
+ .file-status-badge.deleted {
4109
+ background: linear-gradient(135deg, rgba(239, 68, 68, 0.2) 0%, rgba(239, 68, 68, 0.1) 100%);
4110
+ color: var(--color-danger);
4111
+ border: 1px solid rgba(239, 68, 68, 0.25);
4112
+ }
@@ -23,14 +23,17 @@
23
23
  })();
24
24
  </script>
25
25
  <link rel="stylesheet" href="styles.css?v=84">
26
- <link rel="stylesheet" href="environments.css?v=15">
26
+ <link rel="stylesheet" href="environments.css?v=17">
27
+ <!-- Syntax highlighting for inline diffs -->
28
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css">
29
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
27
30
  <!-- Markdown editor dependencies -->
28
31
  <script src="https://cdn.jsdelivr.net/npm/marked@11.1.1/marked.min.js"></script>
29
32
  <script src="https://cdn.jsdelivr.net/npm/turndown@7.1.2/dist/turndown.js"></script>
30
33
  <script type="module" src="markdown-editor.js?v=1"></script>
31
34
  <script src="markdown-file-editor.js?v=1"></script>
32
35
  <script type="module" src="app.js?v=66"></script>
33
- <script type="module" src="environments.js?v=43"></script>
36
+ <script type="module" src="environments.js?v=45"></script>
34
37
  <!-- Dev QA shortcut: Ctrl+Shift+Q to launch current page in QA mode -->
35
38
  </head>
36
39
  <body>
@@ -117,6 +120,7 @@
117
120
  <span id="repo-status-icon">⏳</span>
118
121
  <span id="repo-status-text">Loading...</span>
119
122
  <span id="repo-branch-text" class="repo-branch"></span>
123
+ <span id="repo-auth-mode-badge" class="repo-auth-mode-badge" hidden></span>
120
124
  </div>
121
125
  <button class="btn-secondary btn-small" id="save-btn" title="Save changes to files" disabled>
122
126
  <span>💾</span> Save
@@ -426,14 +430,15 @@
426
430
  </label>
427
431
  </div>
428
432
  <div class="card-body" id="server-config" hidden>
429
- <div class="form-single-column">
433
+ <div class="form-single-column" style="max-width: none;">
430
434
  <div class="form-row">
431
435
  <label for="server-name">Server Name</label>
432
436
  <input type="text" id="server-name" class="form-input">
433
437
  </div>
434
438
  <div class="form-row">
435
- <label for="server-command">Start Command</label>
436
- <input type="text" id="server-command" class="form-input code-font" placeholder="Optional - e.g., npm start">
439
+ <label for="server-command">Start Command(s)</label>
440
+ <div id="server-command-editor" style="height: 100px; border: 1px solid var(--color-border); border-radius: 4px;"></div>
441
+ <small class="form-hint">Shell commands to start the application server. Use multiple lines for complex startup sequences.</small>
437
442
  </div>
438
443
  <div class="form-row">
439
444
  <label for="server-proxy">Proxy URL</label>
@@ -854,7 +859,7 @@
854
859
  <!-- Commit Modal -->
855
860
  <div id="commit-modal" class="modal" hidden>
856
861
  <div class="modal-overlay"></div>
857
- <div class="modal-content">
862
+ <div class="modal-content modal-large">
858
863
  <div class="modal-header">
859
864
  <h2>Commit Changes</h2>
860
865
  <button type="button" class="modal-close" aria-label="Close">&times;</button>
@@ -897,13 +902,13 @@
897
902
  <!-- Uncommitted Changes Modal -->
898
903
  <div id="uncommitted-changes-modal" class="modal" hidden>
899
904
  <div class="modal-overlay"></div>
900
- <div class="modal-content">
905
+ <div class="modal-content modal-large">
901
906
  <div class="modal-header">
902
907
  <h2>Uncommitted Changes</h2>
903
908
  <button type="button" class="modal-close" aria-label="Close">&times;</button>
904
909
  </div>
905
910
  <div class="modal-body">
906
- <p class="text-muted" style="margin-bottom: 12px;">The following files have uncommitted changes:</p>
911
+ <p class="text-muted" style="margin-bottom: 12px;">The following files have uncommitted changes. Click a file to view its diff.</p>
907
912
  <ul id="uncommitted-files-list" class="modified-files-list"></ul>
908
913
  </div>
909
914
  <div class="modal-actions">
@@ -915,7 +920,7 @@
915
920
  <!-- Discard Changes Modal -->
916
921
  <div id="discard-modal" class="modal" hidden>
917
922
  <div class="modal-overlay"></div>
918
- <div class="modal-content">
923
+ <div class="modal-content modal-large">
919
924
  <div class="modal-header">
920
925
  <h2>⚠️ Discard Changes</h2>
921
926
  <button type="button" class="modal-close" aria-label="Close">&times;</button>
@@ -1095,6 +1100,14 @@
1095
1100
  <label>Repository <span class="required">*</span></label>
1096
1101
  <div id="new-env-repo-autocomplete-container"></div>
1097
1102
  </div>
1103
+ <div class="form-row" style="margin-top: 16px;">
1104
+ <label for="new-env-repo-credential-mode">Credential Mode</label>
1105
+ <select id="new-env-repo-credential-mode" class="form-input">
1106
+ <option value="app" selected>App Credentials</option>
1107
+ <option value="user">User Credentials</option>
1108
+ </select>
1109
+ <small class="form-hint">For tasks and deployments. App: app/bot identity. User: personal Git account (requires connection).</small>
1110
+ </div>
1098
1111
  </div>
1099
1112
 
1100
1113
  <div class="form-row">
@@ -1258,6 +1271,14 @@
1258
1271
  <label for="new-repo-from-provider">Repository</label>
1259
1272
  <div id="repo-autocomplete-container"></div>
1260
1273
  </div>
1274
+ <div class="form-row" style="margin-top: 16px;">
1275
+ <label for="new-repo-credential-mode">Credential Mode</label>
1276
+ <select id="new-repo-credential-mode" class="form-input">
1277
+ <option value="app" selected>App Credentials</option>
1278
+ <option value="user">User Credentials</option>
1279
+ </select>
1280
+ <small class="form-hint">For tasks and deployments. App: app/bot identity. User: personal Git account (requires connection).</small>
1281
+ </div>
1261
1282
  </div>
1262
1283
 
1263
1284
  <!-- Repository URL (shown when "Enter URL manually" is selected) -->