@profoundlogic/coderflow-server 0.8.7 → 0.8.9
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/base-image/coder-git-credential-helper +4 -1
- package/dist/coder-server.js +1 -1
- package/dist/config.js +1 -1
- package/dist/lib/agent-keepalive.js +1 -1
- package/dist/lib/agent-models.js +1 -1
- package/dist/lib/api-keys.js +1 -1
- package/dist/lib/apiKeys.js +1 -1
- package/dist/lib/app-server-ports.js +1 -1
- package/dist/lib/auto-judge.js +1 -1
- package/dist/lib/automation-service.js +1 -1
- package/dist/lib/basic-auth.js +1 -1
- package/dist/lib/bindings.js +1 -1
- package/dist/lib/build-history.js +1 -1
- package/dist/lib/build-output-service.js +1 -1
- package/dist/lib/build-scheduler.js +1 -1
- package/dist/lib/build-service.js +1 -1
- package/dist/lib/ca-certificates.js +1 -1
- package/dist/lib/claude-oauth-refresh.js +1 -1
- package/dist/lib/cli/build.js +1 -1
- package/dist/lib/cli/cleanup-users.js +1 -1
- package/dist/lib/cli/config-command.js +1 -1
- package/dist/lib/cli/config.js +1 -1
- package/dist/lib/cli/create-user.js +1 -1
- package/dist/lib/cli/grant-admin.js +1 -1
- package/dist/lib/cli/init.js +1 -1
- package/dist/lib/cli/jira.js +1 -1
- package/dist/lib/cli/license.js +1 -1
- package/dist/lib/cli/list-roles.js +1 -1
- package/dist/lib/cli/list-users.js +1 -1
- package/dist/lib/cli/server-manager.js +1 -1
- package/dist/lib/cli/set-password.js +1 -1
- package/dist/lib/compression-filter.js +1 -1
- package/dist/lib/config-migration.js +1 -1
- package/dist/lib/container-credential-sync.js +1 -1
- package/dist/lib/container-tokens.js +1 -1
- package/dist/lib/data-dir.js +1 -1
- package/dist/lib/deployment-history.js +1 -1
- package/dist/lib/deployment-service.js +1 -1
- package/dist/lib/docker-utils.js +1 -1
- package/dist/lib/email.js +1 -1
- package/dist/lib/emailTemplates.js +1 -1
- package/dist/lib/entitlement.js +1 -1
- package/dist/lib/external-connections.js +1 -1
- package/dist/lib/fetch-utils.js +1 -1
- package/dist/lib/git-commit-details-route.js +1 -1
- package/dist/lib/git-history-diff-guardrails.js +1 -1
- package/dist/lib/git-provider-service.js +1 -1
- package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
- package/dist/lib/git-provider-setup/index.js +1 -1
- package/dist/lib/git-provider-setup/setup-factory.js +1 -1
- package/dist/lib/git-provider-setup/setup-interface.js +1 -1
- package/dist/lib/git-providers/azure-devops-provider.js +1 -1
- package/dist/lib/git-providers/github-app-provider.js +1 -1
- package/dist/lib/git-providers/index.js +1 -1
- package/dist/lib/git-providers/provider-factory.js +1 -1
- package/dist/lib/git-providers/provider-interface.js +1 -1
- package/dist/lib/github-urls.js +1 -1
- package/dist/lib/group-objective-linking.js +1 -1
- package/dist/lib/ibmi-sync.js +1 -1
- package/dist/lib/jira-client.js +1 -1
- package/dist/lib/judge-blinding.js +1 -1
- package/dist/lib/logger.js +1 -1
- package/dist/lib/memory-utils.js +1 -1
- package/dist/lib/migration-to-scoped-rbac.js +1 -1
- package/dist/lib/model-fetcher.js +1 -1
- package/dist/lib/notifications.js +1 -1
- package/dist/lib/objective-context.js +1 -1
- package/dist/lib/oidc-auth.js +1 -1
- package/dist/lib/oidc-device-flow.js +1 -1
- package/dist/lib/passwordTokens.js +1 -1
- package/dist/lib/permission-resolver.js +1 -1
- package/dist/lib/pin-cascade.js +1 -1
- package/dist/lib/provider-accounts.js +1 -1
- package/dist/lib/provider-oauth.js +1 -1
- package/dist/lib/provider-profile.js +1 -1
- package/dist/lib/provider-token-refresh.js +1 -1
- package/dist/lib/rbac-user-state.js +1 -1
- package/dist/lib/request-url.js +1 -1
- package/dist/lib/rewind.js +1 -1
- package/dist/lib/role-definitions.js +1 -1
- package/dist/lib/roles.js +1 -1
- package/dist/lib/secrets.js +1 -1
- package/dist/lib/setup-repo-git-auth.js +1 -1
- package/dist/lib/slack-service.js +1 -1
- package/dist/lib/state-capture.js +1 -1
- package/dist/lib/static-files.js +1 -1
- package/dist/lib/task-aliases.js +1 -1
- package/dist/lib/task-container-init.js +1 -1
- package/dist/lib/task-context-usage.js +1 -1
- package/dist/lib/task-git-auth-errors.js +1 -0
- package/dist/lib/task-name-format.js +1 -1
- package/dist/lib/task-name-generator.js +1 -1
- package/dist/lib/task-source-metadata.js +1 -1
- package/dist/lib/teams.js +1 -1
- package/dist/lib/user-git-oauth.js +1 -1
- package/dist/lib/user-git-tokens.js +1 -1
- package/dist/lib/users.js +1 -1
- package/dist/middleware/requireAuth.js +1 -1
- package/dist/middleware/requireInit.js +1 -1
- package/dist/middleware/requirePermission.js +1 -1
- package/dist/package.json +1 -1
- package/dist/playwright.config.js +1 -1
- package/dist/playwright.task-terminal.config.js +1 -1
- package/dist/routes/apiKeys.js +1 -1
- package/dist/routes/auth-oidc.js +1 -1
- package/dist/routes/auth.js +1 -1
- package/dist/routes/automations.js +1 -1
- package/dist/routes/bindings.js +1 -1
- package/dist/routes/build.js +1 -1
- package/dist/routes/containers.js +1 -1
- package/dist/routes/deploy-task.js +1 -1
- package/dist/routes/environment-management.js +1 -1
- package/dist/routes/environments.js +1 -1
- package/dist/routes/external-skills.js +1 -1
- package/dist/routes/git-credentials.js +1 -1
- package/dist/routes/git-oauth.js +1 -1
- package/dist/routes/git-provider-setup.js +1 -1
- package/dist/routes/health.js +1 -1
- package/dist/routes/jira.js +1 -1
- package/dist/routes/logs.js +1 -1
- package/dist/routes/objective-management.js +1 -1
- package/dist/routes/password.js +1 -1
- package/dist/routes/prompt.js +1 -1
- package/dist/routes/provider-auth.js +1 -1
- package/dist/routes/qa.js +1 -1
- package/dist/routes/roles.js +1 -1
- package/dist/routes/settings.js +1 -1
- package/dist/routes/skill-management.js +1 -1
- package/dist/routes/skills.js +1 -1
- package/dist/routes/slack.js +1 -1
- package/dist/routes/stats.js +1 -1
- package/dist/routes/tasks.js +1 -1
- package/dist/routes/teams.js +1 -1
- package/dist/routes/templates.js +1 -1
- package/dist/routes/test-task.js +1 -1
- package/dist/routes/test.js +1 -1
- package/dist/routes/users.js +1 -1
- package/dist/routes/visualizations.js +1 -1
- package/dist/scripts/create-user.js +1 -1
- package/dist/scripts/migrate-config-to-data-dir.js +1 -1
- package/dist/start.js +1 -1
- package/dist/web-ui/public/activity-detail-modal.js +1 -1
- package/dist/web-ui/public/activity-feed.js +1 -1
- package/dist/web-ui/public/activity-formatters.js +1 -1
- package/dist/web-ui/public/admin.css +476 -0
- package/dist/web-ui/public/admin.html +96 -17
- package/dist/web-ui/public/admin.js +1 -1
- package/dist/web-ui/public/agent-event-parser.js +1 -1
- package/dist/web-ui/public/app.js +1 -1
- package/dist/web-ui/public/approve-dialog.js +1 -1
- package/dist/web-ui/public/automation-links.js +1 -1
- package/dist/web-ui/public/automation-schedule.js +1 -1
- package/dist/web-ui/public/comments-widget.js +1 -1
- package/dist/web-ui/public/diff-utils.js +1 -1
- package/dist/web-ui/public/docs/_sidebar.md +1 -0
- package/dist/web-ui/public/docs/admin/automations.md +8 -7
- package/dist/web-ui/public/docs/admin/container-lifecycle.md +102 -0
- package/dist/web-ui/public/docs/admin/jira.md +20 -3
- package/dist/web-ui/public/docs/code/files-and-editing.md +11 -0
- package/dist/web-ui/public/docs/docsify-proxy-helper.js +1 -0
- package/dist/web-ui/public/docs/index.html +25 -18
- package/dist/web-ui/public/environments.html +20 -7
- package/dist/web-ui/public/environments.js +1 -1
- package/dist/web-ui/public/feedback-widget.css +59 -2
- package/dist/web-ui/public/feedback-widget.js +1 -1
- package/dist/web-ui/public/file-selection-tree.js +1 -1
- package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
- package/dist/web-ui/public/git-history.js +1 -1
- package/dist/web-ui/public/git-status.js +1 -1
- package/dist/web-ui/public/ibmi-file-filter.js +1 -1
- package/dist/web-ui/public/index.js +1 -1
- package/dist/web-ui/public/login.js +1 -1
- package/dist/web-ui/public/markdown-editor.js +1 -1
- package/dist/web-ui/public/markdown-file-editor.js +1 -1
- package/dist/web-ui/public/modal-maximize.js +1 -1
- package/dist/web-ui/public/notifications.js +1 -1
- package/dist/web-ui/public/permissions.js +1 -1
- package/dist/web-ui/public/pr-dialog.js +1 -1
- package/dist/web-ui/public/roles.js +1 -1
- package/dist/web-ui/public/settings.html +101 -2
- package/dist/web-ui/public/settings.js +1 -1
- package/dist/web-ui/public/setup-password.js +1 -1
- package/dist/web-ui/public/skills.js +1 -1
- package/dist/web-ui/public/sse-client.js +1 -1
- package/dist/web-ui/public/sse-client.transport-warning.js +1 -1
- package/dist/web-ui/public/sse-shared-worker.js +1 -1
- package/dist/web-ui/public/styles.css +20 -0
- package/dist/web-ui/public/task-judging-helpers.js +1 -1
- package/dist/web-ui/public/task.js +1 -1
- package/dist/web-ui/public/teams.js +1 -1
- package/dist/web-ui/public/terminal.js +1 -1
- package/dist/web-ui/public/theme.js +1 -1
- package/dist/web-ui/public/users.js +1 -1
- package/dist/web-ui/public/variant-grouping.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Container Lifecycle
|
|
2
|
+
|
|
3
|
+
CoderFlow automatically manages the lifecycle of task containers to balance resource usage with availability. Containers progress through several phases—from creation to eventual removal—based on activity, task status, and configuration.
|
|
4
|
+
|
|
5
|
+
## Container States
|
|
6
|
+
|
|
7
|
+
A task container can be in one of these states:
|
|
8
|
+
|
|
9
|
+
| State | Description |
|
|
10
|
+
|-------|-------------|
|
|
11
|
+
| **Running** | Container is active. The agent may be executing, or the task may be completed but the container kept available for interaction (terminal access, file browsing, app server testing). |
|
|
12
|
+
| **Stopped** | Container has been stopped due to inactivity but still exists on disk. It can be restarted if needed. |
|
|
13
|
+
| **Removed** | Container has been permanently deleted. The task's data (logs, output, diffs) is preserved, but the container environment is gone. |
|
|
14
|
+
|
|
15
|
+
## Automatic Sleep (Stopping Inactive Containers)
|
|
16
|
+
|
|
17
|
+
CoderFlow runs a cleanup job every **10 minutes** that checks for containers with no recent activity. When a container exceeds the inactivity threshold, it is gracefully stopped.
|
|
18
|
+
|
|
19
|
+
### Inactivity Thresholds
|
|
20
|
+
|
|
21
|
+
| Container Type | Default Threshold |
|
|
22
|
+
|----------------|-------------------|
|
|
23
|
+
| Standard containers | **2 hours** |
|
|
24
|
+
| Pinned containers | **48 hours** |
|
|
25
|
+
|
|
26
|
+
The standard threshold can be configured by setting the `CONTAINER_CLEANUP_HOURS` environment variable on the CoderFlow server.
|
|
27
|
+
|
|
28
|
+
### What Counts as Activity
|
|
29
|
+
|
|
30
|
+
The inactivity timer resets whenever a user or the system interacts with the task:
|
|
31
|
+
|
|
32
|
+
- **Viewing the task** in the Web UI
|
|
33
|
+
- **Opening a terminal** session to the container
|
|
34
|
+
- **Providing feedback** or starting a follow-up agent run
|
|
35
|
+
- **Approving** the task
|
|
36
|
+
- **Pinning or unpinning** the task
|
|
37
|
+
- **Changing winner/loser status** on a variant
|
|
38
|
+
- **Agent execution** finishing (timer starts from completion time)
|
|
39
|
+
|
|
40
|
+
If none of these interactions occur within the threshold period, the container is stopped.
|
|
41
|
+
|
|
42
|
+
### Stopped Containers Are Not Lost
|
|
43
|
+
|
|
44
|
+
Stopping a container does **not** delete the task's work. All code changes, logs, and output remain intact. The container can be restarted for further interaction—such as reviewing files, running terminals, or providing additional feedback.
|
|
45
|
+
|
|
46
|
+
## Automatic Removal (Deleting Containers)
|
|
47
|
+
|
|
48
|
+
Stopped containers are only removed when it is safe to do so—meaning no work will be lost. The same cleanup job that stops inactive containers also checks stopped containers for removal eligibility.
|
|
49
|
+
|
|
50
|
+
A stopped container is removed when **any** of these conditions are met:
|
|
51
|
+
|
|
52
|
+
| Condition | What It Means |
|
|
53
|
+
|-----------|---------------|
|
|
54
|
+
| **Approved and pushed** | The task was approved and its changes were successfully pushed to the remote repository. The code is safely stored in Git. |
|
|
55
|
+
| **Marked as loser** | The task variant was explicitly marked as a loser during winner selection. The user has decided this variant's changes should be discarded. |
|
|
56
|
+
| **Rejected** | The task was rejected via the CLI. Rejection immediately stops and removes the container. |
|
|
57
|
+
|
|
58
|
+
### Containers That Are Never Auto-Removed
|
|
59
|
+
|
|
60
|
+
**Pinned containers** are never automatically stopped or removed, regardless of inactivity. They are preserved indefinitely for demos, reference, or ongoing work. To free resources from a pinned container, you must first unpin the task.
|
|
61
|
+
|
|
62
|
+
## IBM i Task Libraries
|
|
63
|
+
|
|
64
|
+
When an environment has an IBM i connection with the Build feature enabled, CoderFlow creates a **temporary task library** (DB2 schema) on the IBM i system for each task. This library provides an isolated build environment so that tasks do not interfere with each other or with production libraries.
|
|
65
|
+
|
|
66
|
+
### Lifecycle
|
|
67
|
+
|
|
68
|
+
Task libraries follow the same lifecycle as the container they belong to:
|
|
69
|
+
|
|
70
|
+
| Event | What Happens |
|
|
71
|
+
|-------|-------------|
|
|
72
|
+
| **Task starts** | A uniquely named library is created on the IBM i system (e.g., `AITSK_ABC123...`) and added to the job's library list. |
|
|
73
|
+
| **Container is stopped** | The library is automatically deleted (`DROP SCHEMA CASCADE`) as part of the container's shutdown cleanup. |
|
|
74
|
+
|
|
75
|
+
Because library cleanup runs when the container stops, **task libraries persist for as long as the container is running**—up to **2 hours** of inactivity for standard containers, or **48 hours** for pinned containers (see [Inactivity Thresholds](#inactivity-thresholds) above).
|
|
76
|
+
|
|
77
|
+
### Orphaned Libraries
|
|
78
|
+
|
|
79
|
+
In some cases, a task library may not be cleaned up automatically:
|
|
80
|
+
|
|
81
|
+
- **Container crash** — if the container is terminated abruptly (e.g., the Docker host crashes) without running its shutdown handler, the cleanup script never executes.
|
|
82
|
+
- **Object locks** — if an IBM i job still holds a lock on an object in the library at shutdown time, the `DROP SCHEMA CASCADE` will fail. The error is logged but the container shutdown continues, leaving the library behind.
|
|
83
|
+
|
|
84
|
+
Orphaned libraries can be identified by their description text, which includes the CoderFlow task ID (e.g., `CoderFlow task 1711484523456-k7f2xm9`). They can be safely deleted manually using `DLTLIB` once any locks are released.
|
|
85
|
+
|
|
86
|
+
## Orphaned Directory Cleanup
|
|
87
|
+
|
|
88
|
+
Task directories that have no associated `task.json` file (orphaned data from interrupted container creation or other edge cases) are automatically deleted after **24 hours**.
|
|
89
|
+
|
|
90
|
+
## Summary
|
|
91
|
+
|
|
92
|
+
1. **Running** — container is active; activity resets the inactivity timer
|
|
93
|
+
2. **Stopped** — no activity for 2h (48h if pinned); container can be restarted
|
|
94
|
+
3. **Removed** — approved+pushed or marked as loser; task data preserved, container gone
|
|
95
|
+
|
|
96
|
+
## Configuration Reference
|
|
97
|
+
|
|
98
|
+
| Environment Variable | Default | Description |
|
|
99
|
+
|---------------------|---------|-------------|
|
|
100
|
+
| `CONTAINER_CLEANUP_HOURS` | `2` | Hours of inactivity before a standard (non-pinned) container is stopped |
|
|
101
|
+
|
|
102
|
+
Pinned container thresholds and the cleanup check interval are not currently configurable.
|
|
@@ -67,9 +67,24 @@ The API token authenticates as the associated account. The integration will have
|
|
|
67
67
|
|
|
68
68
|
## Setup
|
|
69
69
|
|
|
70
|
-
Jira can be configured using the interactive CLI wizard or by editing the configuration file directly.
|
|
70
|
+
Jira can be configured from the **Settings** page in the Web UI, using the interactive CLI wizard, or by editing the configuration file directly.
|
|
71
71
|
|
|
72
|
-
###
|
|
72
|
+
### Web UI Setup (Recommended)
|
|
73
|
+
|
|
74
|
+
The easiest way to configure Jira is from the Settings page:
|
|
75
|
+
|
|
76
|
+
1. Go to **Settings → Jira**
|
|
77
|
+
2. Toggle **Enabled** on
|
|
78
|
+
3. Choose your **Account Type** (personal or service account)
|
|
79
|
+
4. Enter your **Jira Site URL** (e.g., `https://your-company.atlassian.net`)
|
|
80
|
+
5. For service accounts: click **Fetch** to auto-detect your **Cloud ID**, or enter it manually
|
|
81
|
+
6. Enter the **Email** and **API Token** for the account
|
|
82
|
+
7. Click **Test Connection** to verify the credentials
|
|
83
|
+
8. Click **Save**
|
|
84
|
+
|
|
85
|
+
Changes take effect immediately — no server restart is needed. You can also use the **Disconnect** button to remove the configuration entirely.
|
|
86
|
+
|
|
87
|
+
### CLI Setup
|
|
73
88
|
|
|
74
89
|
The server CLI provides a guided setup that tests the connection before saving:
|
|
75
90
|
|
|
@@ -139,6 +154,8 @@ When `JIRA_CLOUD_ID` is set, API calls are routed through `api.atlassian.com`, e
|
|
|
139
154
|
|
|
140
155
|
## Managing the Integration
|
|
141
156
|
|
|
157
|
+
You can manage the Jira integration from the **Settings → Jira** page in the Web UI (configure, test, or disconnect), or use the CLI commands below.
|
|
158
|
+
|
|
142
159
|
### CLI Commands
|
|
143
160
|
|
|
144
161
|
Use `coder-server jira <command>` to manage the integration:
|
|
@@ -187,7 +204,7 @@ If you're using a service account, these comments will appear under the service
|
|
|
187
204
|
|
|
188
205
|
### "Jira integration not enabled"
|
|
189
206
|
|
|
190
|
-
This appears when users try to import issues but Jira is not configured.
|
|
207
|
+
This appears when users try to import issues but Jira is not configured. Go to **Settings → Jira** in the Web UI, or run `coder-server jira connect` from the CLI.
|
|
191
208
|
|
|
192
209
|
### Authentication Failed (Service Accounts)
|
|
193
210
|
|
|
@@ -12,6 +12,8 @@ The **Changed Files** section displays all repository changes made during the ta
|
|
|
12
12
|
|
|
13
13
|
You can toggle each file's diff to expand or collapse it. The diffs are read-only and show the state of the repository at the moment the task finished syncing.
|
|
14
14
|
|
|
15
|
+
While the container is running, each changed file also includes a **Download** action so you can save the current file contents directly from the task view. Deleted files do not show this action.
|
|
16
|
+
|
|
15
17
|
## Editing Files
|
|
16
18
|
|
|
17
19
|
You can edit files directly in the container using the built-in Monaco code editor:
|
|
@@ -33,6 +35,15 @@ The editor supports:
|
|
|
33
35
|
|
|
34
36
|
**Note:** Editing is only available while the container is running. If the container stops, you'll need to restart the container to enable editing.
|
|
35
37
|
|
|
38
|
+
## Downloading Files
|
|
39
|
+
|
|
40
|
+
To save the current contents of a changed file from the task:
|
|
41
|
+
|
|
42
|
+
1. Click the **Download** button next to the file in the Changed Files section
|
|
43
|
+
2. Your browser saves the current file contents from the running task container
|
|
44
|
+
|
|
45
|
+
This is useful when you already know which changed file you want and do not need to open the full file browser or VS Code.
|
|
46
|
+
|
|
36
47
|
## VS Code IDE
|
|
37
48
|
|
|
38
49
|
For more extensive editing, open the container in a full web-based VS Code environment. This gives you a complete IDE experience directly in your browser—no local installation required.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(){const _0x2c11b6={'docsMarker':'/docs/','lifecycleBound':![],'linkObserver':null,'ensureSubSidebarFrame':null,'ensureSubSidebarRetryTimer':null,'observing':![]};function _0x3f1a32(){return _0x2c11b6['docsMarker']||'/docs/';}function _0x257199(_0x56919c){const _0x2deefb=_0x3f1a32(),_0x31623e=_0x56919c['indexOf'](_0x2deefb);if(_0x31623e===-0x1)return _0x2deefb;return _0x56919c['slice'](0x0,_0x31623e+_0x2deefb['length']);}function _0xaca60e(){const _0x2c6bd1=window['location']['hash']||'#/',_0x4d108c=_0x2c6bd1['slice'](0x1)['split']('?')[0x0]||'/';return _0x4d108c['charAt'](0x0)==='/'?_0x4d108c:'/'+_0x4d108c;}function _0xb927cb(){const _0x4cd396=_0xaca60e();return _0x4cd396['slice'](0x0,_0x4cd396['lastIndexOf']('/')+0x1)||'/';}function _0x5442ed(){const _0x152bd5=window['location']['hash']||'#/',_0x35bc3b=_0x152bd5['indexOf']('?');return new URLSearchParams(_0x35bc3b===-0x1?'':_0x152bd5['slice'](_0x35bc3b+0x1));}function _0x44f776(){return _0x5442ed()['get']('id');}function _0x591ca5(_0x59b9bd){return typeof _0x59b9bd==='string'&&_0x59b9bd['indexOf']('#/')===0x0;}function _0x50b3b1(_0x50d48a){return!_0x50d48a||_0x50d48a['charAt'](0x0)==='#'&&!_0x591ca5(_0x50d48a)||_0x50d48a['startsWith']('javascript:')||_0x50d48a['startsWith']('mailto:')||_0x50d48a['startsWith']('tel:');}function _0x38d630(_0x4a1808){if(_0x50b3b1(_0x4a1808)||!/\.md(?:$|[?#])/i['test'](_0x4a1808))return null;const _0x1ed582=_0x257199(window['location']['pathname']),_0xb9245b=_0xb927cb();let _0x1bfe60='',_0x7a55d3='',_0x59c8ae='';if(/^(?:[a-z]+:)?\/\//i['test'](_0x4a1808)){const _0x39cb0b=new URL(_0x4a1808,window['location']['href']);if(_0x39cb0b['origin']!==window['location']['origin'])return null;_0x1bfe60=_0x39cb0b['pathname'],_0x7a55d3=_0x39cb0b['search'],_0x59c8ae=_0x39cb0b['hash'];}else{if(_0x4a1808['charAt'](0x0)==='/'){const _0x5b69b2=new URL(_0x4a1808,window['location']['origin']);_0x1bfe60=_0x5b69b2['pathname'],_0x7a55d3=_0x5b69b2['search'],_0x59c8ae=_0x5b69b2['hash'];}else{const _0x147223=_0x4a1808['startsWith']('./')||_0x4a1808['startsWith']('../')?'https://docsify.local'+_0xb9245b:'https://docsify.local/',_0x497aba=new URL(_0x4a1808,_0x147223);_0x1bfe60=_0x497aba['pathname'],_0x7a55d3=_0x497aba['search'],_0x59c8ae=_0x497aba['hash'];}}let _0x4395d2=null;if(_0x1bfe60['startsWith'](_0x1ed582))_0x4395d2=_0x1bfe60['slice'](_0x1ed582['length']-0x1);else{const _0x4f91d4=_0x1bfe60['indexOf'](_0x3f1a32());if(_0x4f91d4!==-0x1)_0x4395d2=_0x1bfe60['slice'](_0x4f91d4+_0x3f1a32()['slice'](0x0,-0x1)['length']);else _0x4a1808['charAt'](0x0)!=='/'&&(_0x4395d2=_0x1bfe60);}if(!_0x4395d2||!/\.md$/i['test'](_0x4395d2))return null;_0x4395d2=_0x4395d2['replace'](/\/README\.md$/i,'/'),_0x4395d2=_0x4395d2['replace'](/README\.md$/i,'/'),_0x4395d2=_0x4395d2['replace'](/\.md$/i,''),_0x4395d2=_0x4395d2||'/',_0x4395d2=_0x4395d2['charAt'](0x0)==='/'?_0x4395d2:'/'+_0x4395d2;const _0x12fdef=new URLSearchParams(_0x7a55d3);_0x59c8ae&&_0x12fdef['set']('id',decodeURIComponent(_0x59c8ae['slice'](0x1)));const _0xa9beb6=_0x12fdef['toString']();return'#'+_0x4395d2+(_0xa9beb6?'?'+_0xa9beb6:'');}function _0x1ed821(_0x2a1b4f){if(!_0x591ca5(_0x2a1b4f))return null;const _0x53b724=_0x2a1b4f['slice'](0x1),_0x229cab=_0x53b724['indexOf']('?'),_0x397fbd=_0x229cab===-0x1?_0x53b724:_0x53b724['slice'](0x0,_0x229cab),_0x5b4fd9=_0x229cab===-0x1?'':_0x53b724['slice'](_0x229cab+0x1);if(!_0x397fbd)return null;const _0x490bca=new URL(_0x397fbd,'https://docsify.local'+_0xb927cb())['pathname'];return'#'+_0x490bca+(_0x5b4fd9?'?'+_0x5b4fd9:'');}function _0x3590e1(_0x5b947f){if(_0x50b3b1(_0x5b947f))return null;if(_0x591ca5(_0x5b947f))return _0x1ed821(_0x5b947f)||_0x5b947f;return _0x38d630(_0x5b947f);}function _0x402b04(_0x2f5da8){return String(_0x2f5da8)['replace'](/&/g,'&')['replace'](/</g,'<')['replace'](/>/g,'>')['replace'](/"/g,'"')['replace'](/'/g,''');}function _0x115f2f(_0x537b0e){const _0x411a07=_0x537b0e['querySelector']('a.anchor');return _0x411a07?_0x411a07['textContent']['trim']():_0x537b0e['textContent']['trim']();}function _0x5de76d(_0xa51660){const _0xa6bcd2=String(_0xa51660||'')['trim']();if(!_0xa6bcd2)return'section';if(window['Docsify']&&typeof window['Docsify']['slugify']==='function'){const _0x19b0ea=window['Docsify']['slugify'](_0xa6bcd2);if(_0x19b0ea)return _0x19b0ea;}return _0xa6bcd2['toLowerCase']()['replace'](/[^\w\s-]/g,'')['replace'](/\s+/g,'-')['replace'](/-+/g,'-')['replace'](/^-|-$/g,'')||'section';}function _0x38dcda(){const _0x43269b=Array['from'](document['querySelectorAll']('.markdown-section\x20h1,\x20.markdown-section\x20h2,\x20.markdown-section\x20h3,\x20.markdown-section\x20h4,\x20.markdown-section\x20h5,\x20.markdown-section\x20h6')),_0x59b40a=new Set();return _0x43269b['forEach'](function(_0x472acc){_0x472acc['id']&&_0x59b40a['add'](_0x472acc['id']);}),_0x43269b['forEach'](function(_0x362a52){if(_0x362a52['id'])return;const _0x9361a3=_0x115f2f(_0x362a52);if(!_0x9361a3)return;const _0x23124b=_0x5de76d(_0x9361a3);let _0xa73702=_0x23124b,_0x42ade3=0x2;while(_0x59b40a['has'](_0xa73702)){_0xa73702=_0x23124b+'-'+_0x42ade3,_0x42ade3+=0x1;}_0x362a52['id']=_0xa73702,_0x59b40a['add'](_0xa73702);}),_0x43269b;}function _0xbbe68(_0x11ada6){return Array['from'](_0x11ada6['children']||[])['find'](function(_0x576c81){return _0x576c81['classList']&&_0x576c81['classList']['contains']('app-sub-sidebar');})||null;}function _0x5ceb4a(_0x20c5cf){if(!_0x20c5cf||_0x20c5cf['nodeType']!==Node['ELEMENT_NODE'])return![];if(_0x20c5cf['closest']&&_0x20c5cf['closest']('.app-sub-sidebar[data-coderflow-managed=\x22true\x22]'))return![];return _0x20c5cf['matches']&&_0x20c5cf['matches']('.sidebar-nav,\x20.markdown-section')||_0x20c5cf['closest']&&_0x20c5cf['closest']('.sidebar-nav,\x20.markdown-section')||_0x20c5cf['querySelector']&&_0x20c5cf['querySelector']('.sidebar-nav,\x20.markdown-section');}function _0x2a3efe(){return _0x38dcda()['filter'](function(_0x5238cc){return!!_0x5238cc['id'];});}function _0x459594(_0x33ce62,_0x3e8fe1){const _0x3252ef=[],_0x4262df={};return _0x33ce62['forEach'](function(_0x2425a8){const _0x4a8eef=_0x2425a8['level']||0x1,_0xc62624=_0x4a8eef-0x1;if(_0x4a8eef>_0x3e8fe1)return;_0x4262df[_0xc62624]?_0x4262df[_0xc62624]['children']=(_0x4262df[_0xc62624]['children']||[])['concat'](_0x2425a8):_0x3252ef['push'](_0x2425a8),_0x4262df[_0x4a8eef]=_0x2425a8;}),_0x3252ef;}function _0x2290b8(_0x518a9e,_0x5f48dc,_0xb9317b){if(!_0x518a9e['length'])return'';const _0x5e32f6=_0xb9317b?'\x20class=\x22app-sub-sidebar\x22\x20data-coderflow-managed=\x22true\x22\x20data-coderflow-signature=\x22'+_0x402b04(_0x5f48dc)+'\x22':'\x20class=\x22app-sub-sidebar\x22';return'<ul'+_0x5e32f6+'>'+_0x518a9e['map'](function(_0x304c15){const _0x563bac=_0x304c15['children']?_0x2290b8(_0x304c15['children'],_0x5f48dc,![]):'';return'<li><a\x20class=\x22section-link\x22\x20href=\x22'+_0x402b04(_0x304c15['slug'])+'\x22\x20title=\x22'+_0x402b04(_0x304c15['title'])+'\x22>'+_0x402b04(_0x304c15['title'])+'</a></li>'+_0x563bac;})['join']('')+'</ul>';}function _0x3b2f79(){const _0x521b95=Number(window['$docsify']&&window['$docsify']['subMaxLevel'])||0x0;if(!_0x521b95)return{'html':'','signature':''};const _0x286942=_0x2a3efe()['map'](function(_0x2b46ae){const _0x14b55c=_0x115f2f(_0x2b46ae);if(!_0x14b55c||!_0x2b46ae['id'])return null;const _0xb495a9=_0x5442ed();return _0xb495a9['set']('id',_0x2b46ae['id']),{'level':Number['parseInt'](_0x2b46ae['tagName']['slice'](0x1),0xa),'title':_0x14b55c,'slug':'#'+_0xaca60e()+'?'+_0xb495a9['toString']()};})['filter'](Boolean);_0x286942[0x0]&&_0x286942[0x0]['level']===0x1&&_0x286942['shift']();if(!_0x286942['length'])return{'html':'','signature':''};const _0x4154bc=_0x286942['map'](function(_0x3312c3){return _0x3312c3['level']+'|'+_0x3312c3['slug']+'|'+_0x3312c3['title'];})['join']('||');return{'html':_0x2290b8(_0x459594(_0x286942,_0x521b95),_0x4154bc,!![]),'signature':_0x4154bc};}function _0x3ef4c2(){const _0x34cbbf='#'+_0xaca60e();let _0x95c617=null,_0x2f4f49=-0x1;return document['querySelectorAll']('.sidebar-nav\x20a[href]')['forEach'](function(_0x290baa){if(_0x290baa['closest']('.app-sub-sidebar'))return;const _0x1a8cf2=_0x3590e1(_0x290baa['getAttribute']('href'));if(!_0x1a8cf2)return;const _0x3bd2ad=_0x1a8cf2['split']('?')[0x0];if(_0x3bd2ad!==_0x34cbbf)return;_0x3bd2ad['length']>_0x2f4f49&&(_0x95c617=_0x290baa,_0x2f4f49=_0x3bd2ad['length']);}),_0x95c617;}function _0x203a77(_0x12c85b){const _0x50bf0b=_0x12c85b&&_0x12c85b['parentElement'],_0x4a9ff4=_0x50bf0b&&_0xbbe68(_0x50bf0b),_0x4f906b='#'+_0xaca60e(),_0x306cb9=_0x44f776();if(!_0x4a9ff4)return;_0x4a9ff4['querySelectorAll']('li')['forEach'](function(_0x2c18e1){_0x2c18e1['classList']['remove']('active');});if(!_0x306cb9)return;const _0x40fbbe=Array['from'](_0x4a9ff4['querySelectorAll']('a.section-link[href]'))['find'](function(_0x19ffcd){const _0x1b95c9=_0x19ffcd['getAttribute']('href')||'';if(_0x1b95c9['charAt'](0x0)!=='#')return![];const _0x58161d=_0x1b95c9['indexOf']('?'),_0x3a06c3=_0x58161d===-0x1?_0x1b95c9:_0x1b95c9['slice'](0x0,_0x58161d);if(_0x3a06c3!==_0x4f906b)return![];const _0x1b1c33=new URLSearchParams(_0x58161d===-0x1?'':_0x1b95c9['slice'](_0x58161d+0x1));return _0x1b1c33['get']('id')===_0x306cb9;});_0x40fbbe&&_0x40fbbe['parentElement']&&_0x40fbbe['parentElement']['classList']['add']('active');}function _0x288452(){const _0x23c082=_0x3ef4c2();if(!_0x23c082||!_0x23c082['parentElement'])return![];const _0x4534dc=_0x23c082['parentElement'],_0x2f0f60=_0x3b2f79(),_0x4700ae=_0x2f0f60['html'],_0x5c1484=_0x2f0f60['signature'];document['querySelectorAll']('.sidebar-nav\x20li')['forEach'](function(_0x2a77ac){if(_0x2a77ac!==_0x4534dc){const _0x3530bc=_0xbbe68(_0x2a77ac);_0x3530bc&&_0x3530bc['remove']();}});const _0x2eda2c=_0xbbe68(_0x4534dc);if(!_0x4700ae)return _0x2eda2c&&_0x2eda2c['remove'](),!![];return _0x2eda2c?_0x2eda2c['getAttribute']('data-coderflow-signature')!==_0x5c1484&&(_0x2eda2c['outerHTML']=_0x4700ae):_0x23c082['insertAdjacentHTML']('afterend',_0x4700ae),_0x4534dc['classList']['add']('active','open'),_0x4534dc['classList']['remove']('collapse'),_0x203a77(_0x23c082),!![];}function _0x34495d(_0x298e20){const _0xa04f2f=Number['isInteger'](_0x298e20)?_0x298e20:0x8;_0x2c11b6['ensureSubSidebarFrame']!==null&&window['cancelAnimationFrame'](_0x2c11b6['ensureSubSidebarFrame']),_0x2c11b6['ensureSubSidebarRetryTimer']!==null&&(window['clearTimeout'](_0x2c11b6['ensureSubSidebarRetryTimer']),_0x2c11b6['ensureSubSidebarRetryTimer']=null),_0x2c11b6['ensureSubSidebarFrame']=window['requestAnimationFrame'](function(){_0x2c11b6['ensureSubSidebarFrame']=null,_0x288452();if(_0xa04f2f<=0x0)return;const _0x1dee6d=_0x3ef4c2(),_0x2f8308=_0x2a3efe(),_0x15afce=_0x1dee6d&&_0x1dee6d['parentElement']&&_0xbbe68(_0x1dee6d['parentElement']);(!_0x1dee6d||_0x2f8308['length']>0x1&&!_0x15afce)&&(_0x2c11b6['ensureSubSidebarRetryTimer']=window['setTimeout'](function(){_0x34495d(_0xa04f2f-0x1);},0x4b));});}function _0x13e1eb(_0x55963e){const _0x5f88b9=_0x55963e||document,_0x28db6a=_0x5f88b9['querySelectorAll']?_0x5f88b9['querySelectorAll']('a[href]'):[];_0x28db6a['forEach'](function(_0xf096cd){const _0x391967=_0x3590e1(_0xf096cd['getAttribute']('href'));_0x391967&&_0x391967!==_0xf096cd['getAttribute']('href')&&_0xf096cd['setAttribute']('href',_0x391967);});}function _0x19bf26(){return!_0x2c11b6['linkObserver']&&(_0x2c11b6['linkObserver']=new MutationObserver(function(_0x35f87b){let _0xb02eb4=![];_0x35f87b['forEach'](function(_0x24ff2c){_0x24ff2c['addedNodes']['forEach'](function(_0x1aff86){_0x1aff86['nodeType']===Node['ELEMENT_NODE']&&(_0x13e1eb(_0x1aff86),_0x5ceb4a(_0x1aff86)&&(_0xb02eb4=!![]));});}),_0xb02eb4&&_0x34495d(0x2);})),_0x2c11b6['linkObserver'];}function _0x26f103(){_0x13e1eb(),_0x34495d(),!_0x2c11b6['observing']&&document['body']&&(_0x19bf26()['observe'](document['body'],{'childList':!![],'subtree':!![]}),_0x2c11b6['observing']=!![]);}function _0x3980b1(){if(_0x2c11b6['lifecycleBound'])return;_0x2c11b6['lifecycleBound']=!![],document['readyState']==='loading'?document['addEventListener']('DOMContentLoaded',_0x26f103,{'once':!![]}):_0x26f103(),window['addEventListener']('hashchange',function(){_0x34495d();});}function _0x24e540(){return function(_0x3c4532){_0x3c4532['doneEach'](function(){_0x13e1eb(),_0x34495d();});};}function _0x485abe(_0x32733a){const _0x164c42=_0x32733a&&typeof _0x32733a['docsMarker']==='string'?_0x32733a['docsMarker']:_0x2c11b6['docsMarker'];_0x2c11b6['docsMarker']=_0x164c42;const _0xb5d4e=_0x257199(window['location']['pathname']);return window['__CODERFLOW_DOCS_BASE_PATH__']=_0xb5d4e,window['__CODERFLOW_ENSURE_SUB_SIDEBAR__']=_0x288452,window['__CODERFLOW_SCHEDULE_SUB_SIDEBAR__']=_0x34495d,window['__CODERFLOW_NORMALIZE_DOCS_LINKS__']=_0x13e1eb,_0x3980b1(),_0xb5d4e;}window['CoderflowDocsifyProxy']={'createDocsifyPlugin':_0x24e540,'ensureSubSidebar':_0x288452,'getDocsBasePath':_0x257199,'init':_0x485abe,'normalizeDocsLinks':_0x13e1eb,'scheduleEnsureSubSidebar':_0x34495d};}());
|
|
@@ -8,15 +8,15 @@
|
|
|
8
8
|
|
|
9
9
|
<!-- docsify-themeable: auto dark/light mode based on system preference -->
|
|
10
10
|
<link rel="stylesheet" media="(prefers-color-scheme: dark)"
|
|
11
|
-
href="
|
|
11
|
+
href="../vendor/docsify-themeable/0.9.0/dist/css/theme-simple-dark.css">
|
|
12
12
|
<link rel="stylesheet" media="(prefers-color-scheme: light)"
|
|
13
|
-
href="
|
|
13
|
+
href="../vendor/docsify-themeable/0.9.0/dist/css/theme-simple.css">
|
|
14
14
|
|
|
15
15
|
<!-- Sidebar collapse with arrow/chevron icons -->
|
|
16
|
-
<link rel="stylesheet" href="
|
|
16
|
+
<link rel="stylesheet" href="../vendor/docsify-sidebar-collapse/1.3.5/dist/sidebar.min.css">
|
|
17
17
|
|
|
18
18
|
<!-- Prism syntax highlighting -->
|
|
19
|
-
<link rel="stylesheet" href="
|
|
19
|
+
<link rel="stylesheet" href="../vendor/prismjs/1.30.0/themes/prism-tomorrow.min.css">
|
|
20
20
|
|
|
21
21
|
<style>
|
|
22
22
|
:root {
|
|
@@ -69,10 +69,13 @@
|
|
|
69
69
|
<body>
|
|
70
70
|
<div id="app">Loading documentation...</div>
|
|
71
71
|
|
|
72
|
+
<script src="docsify-proxy-helper.js"></script>
|
|
72
73
|
<script>
|
|
74
|
+
var docsBasePath = window.CoderflowDocsifyProxy.init({ docsMarker: '/docs/' });
|
|
75
|
+
|
|
73
76
|
window.$docsify = {
|
|
74
77
|
name: 'CoderFlow',
|
|
75
|
-
nameLink: '/docs/',
|
|
78
|
+
nameLink: docsBasePath || '/docs/',
|
|
76
79
|
repo: '',
|
|
77
80
|
loadSidebar: true,
|
|
78
81
|
alias: {
|
|
@@ -94,27 +97,31 @@
|
|
|
94
97
|
copyCode: {
|
|
95
98
|
buttonText: 'Copy',
|
|
96
99
|
successText: 'Copied'
|
|
97
|
-
}
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
plugins: [
|
|
103
|
+
window.CoderflowDocsifyProxy.createDocsifyPlugin()
|
|
104
|
+
]
|
|
98
105
|
};
|
|
99
106
|
</script>
|
|
100
107
|
|
|
101
108
|
<!-- Docsify core -->
|
|
102
|
-
<script src="
|
|
109
|
+
<script src="../vendor/docsify/4.13.1/lib/docsify.min.js"></script>
|
|
103
110
|
|
|
104
111
|
<!-- docsify-themeable (must come after docsify) -->
|
|
105
|
-
<script src="
|
|
112
|
+
<script src="../vendor/docsify-themeable/0.9.0/dist/js/docsify-themeable.min.js"></script>
|
|
106
113
|
|
|
107
114
|
<!-- Plugins -->
|
|
108
|
-
<script src="
|
|
109
|
-
<script src="
|
|
110
|
-
<script src="
|
|
111
|
-
<script src="
|
|
115
|
+
<script src="../vendor/docsify-sidebar-collapse/1.3.5/dist/docsify-sidebar-collapse.min.js"></script>
|
|
116
|
+
<script src="../vendor/docsify/4.13.1/lib/plugins/search.min.js"></script>
|
|
117
|
+
<script src="../vendor/docsify-copy-code/2.1.1/dist/docsify-copy-code.min.js"></script>
|
|
118
|
+
<script src="../vendor/docsify-plugin-flexible-alerts/1.2.0/dist/docsify-plugin-flexible-alerts.min.js"></script>
|
|
112
119
|
|
|
113
120
|
<!-- Syntax highlighting -->
|
|
114
|
-
<script src="
|
|
115
|
-
<script src="
|
|
116
|
-
<script src="
|
|
117
|
-
<script src="
|
|
121
|
+
<script src="../vendor/prismjs/1.30.0/components/prism-bash.min.js"></script>
|
|
122
|
+
<script src="../vendor/prismjs/1.30.0/components/prism-javascript.min.js"></script>
|
|
123
|
+
<script src="../vendor/prismjs/1.30.0/components/prism-json.min.js"></script>
|
|
124
|
+
<script src="../vendor/prismjs/1.30.0/components/prism-yaml.min.js"></script>
|
|
118
125
|
|
|
119
126
|
<!-- About CoderFlow Modal (shared with main UI) -->
|
|
120
127
|
<div id="about-coderflow-modal" class="modal" hidden>
|
|
@@ -131,8 +138,8 @@
|
|
|
131
138
|
</div>
|
|
132
139
|
<div class="modal-body about-modal-body">
|
|
133
140
|
<div class="about-modal-hero">
|
|
134
|
-
<img src="
|
|
135
|
-
<img src="
|
|
141
|
+
<img src="../coderflow-logo.svg" alt="CoderFlow" class="brand-logo brand-logo-light about-logo">
|
|
142
|
+
<img src="../coderflow-logo-reversed.svg" alt="CoderFlow" class="brand-logo brand-logo-dark about-logo">
|
|
136
143
|
</div>
|
|
137
144
|
<div class="about-version-card">
|
|
138
145
|
<span class="about-version-label">Server version</span>
|
|
@@ -270,6 +270,7 @@
|
|
|
270
270
|
<path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
|
|
271
271
|
</svg>
|
|
272
272
|
Connections
|
|
273
|
+
<span class="content-tab-badge" id="badge-connections" hidden></span>
|
|
273
274
|
</button>
|
|
274
275
|
<button class="content-tab" data-tab="env-vars" role="tab">
|
|
275
276
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 4px; vertical-align: text-bottom;">
|
|
@@ -1132,14 +1133,14 @@
|
|
|
1132
1133
|
<th>Date</th>
|
|
1133
1134
|
<th>Trigger</th>
|
|
1134
1135
|
<th>Status</th>
|
|
1135
|
-
<th>
|
|
1136
|
+
<th id="automation-history-result-header">Result</th>
|
|
1136
1137
|
</tr>
|
|
1137
1138
|
</thead>
|
|
1138
1139
|
<tbody id="automation-history-body"></tbody>
|
|
1139
1140
|
</table>
|
|
1140
1141
|
</div>
|
|
1141
1142
|
<div class="automation-history-footer">
|
|
1142
|
-
<a id="automation-history-tasks-link" href="index.html" class="link-muted">View
|
|
1143
|
+
<a id="automation-history-tasks-link" href="index.html" class="link-muted">View automation results →</a>
|
|
1143
1144
|
</div>
|
|
1144
1145
|
</div>
|
|
1145
1146
|
</div>
|
|
@@ -1264,7 +1265,7 @@
|
|
|
1264
1265
|
<p id="automation-schedule-summary" class="automation-schedule-summary text-muted"></p>
|
|
1265
1266
|
</div>
|
|
1266
1267
|
|
|
1267
|
-
<div class="automation-form-section">
|
|
1268
|
+
<div class="automation-form-section" id="automation-agent-section">
|
|
1268
1269
|
<h4>Agent</h4>
|
|
1269
1270
|
<div class="form-row">
|
|
1270
1271
|
<label for="automation-agent-name">Agent</label>
|
|
@@ -1291,15 +1292,15 @@
|
|
|
1291
1292
|
</div>
|
|
1292
1293
|
|
|
1293
1294
|
<div class="automation-form-section">
|
|
1294
|
-
<h4>
|
|
1295
|
+
<h4>Run Configuration</h4>
|
|
1295
1296
|
|
|
1296
|
-
<div class="form-row">
|
|
1297
|
+
<div class="form-row" id="automation-task-name-row">
|
|
1297
1298
|
<label for="automation-task-name">Task Name Template</label>
|
|
1298
1299
|
<input type="text" id="automation-task-name" class="form-input" placeholder="Nightly Audit - {{date}}">
|
|
1299
1300
|
</div>
|
|
1300
1301
|
|
|
1301
1302
|
<div class="form-row">
|
|
1302
|
-
<label>
|
|
1303
|
+
<label>Run Target</label>
|
|
1303
1304
|
<div class="radio-group">
|
|
1304
1305
|
<label class="radio-option">
|
|
1305
1306
|
<input type="radio" name="automation-task-mode" value="instructions" checked>
|
|
@@ -1307,7 +1308,11 @@
|
|
|
1307
1308
|
</label>
|
|
1308
1309
|
<label class="radio-option">
|
|
1309
1310
|
<input type="radio" name="automation-task-mode" value="template">
|
|
1310
|
-
<span>
|
|
1311
|
+
<span>Task template</span>
|
|
1312
|
+
</label>
|
|
1313
|
+
<label class="radio-option">
|
|
1314
|
+
<input type="radio" name="automation-task-mode" value="deployment">
|
|
1315
|
+
<span>Deployment profile</span>
|
|
1311
1316
|
</label>
|
|
1312
1317
|
</div>
|
|
1313
1318
|
</div>
|
|
@@ -1320,6 +1325,14 @@
|
|
|
1320
1325
|
<div id="automation-template-params" class="automation-template-params"></div>
|
|
1321
1326
|
</div>
|
|
1322
1327
|
|
|
1328
|
+
<div id="automation-deployment-row" hidden>
|
|
1329
|
+
<div class="form-row">
|
|
1330
|
+
<label for="automation-deployment-profile">Deployment Profile</label>
|
|
1331
|
+
<select id="automation-deployment-profile" class="form-input"></select>
|
|
1332
|
+
</div>
|
|
1333
|
+
<div id="automation-deployment-params" class="automation-template-params"></div>
|
|
1334
|
+
</div>
|
|
1335
|
+
|
|
1323
1336
|
<div id="automation-instructions-row" class="form-row">
|
|
1324
1337
|
<label id="automation-instructions-label" for="automation-instructions">Instructions</label>
|
|
1325
1338
|
<textarea id="automation-instructions" class="form-textarea" rows="5" placeholder="What should the agent do?"></textarea>
|